diff --git a/.changelog b/.changelog index 8fb098637a..b3022e3852 100644 --- a/.changelog +++ b/.changelog @@ -1,20 +1,23 @@ -1.10.3 (2020-08-09) +1.11.2 (2021-05-03) ------------------------------------------------------------------------ -Change: Also make roadside trees match the tree transparency option (#8245) -Fix: Center text and icons in the status bar vertically (#8273) -Fix: [NRT] Set invalid road and tram types for rail tunnel ends (#8269) -Fix #7980: Properly invalidate mouse-over station coverage highlight (#8263) -Fix #8250: [NRT] Company infrastructure window always omits last road/tramtype (#8251) -Fix #8162: [NRT] Improve error message when converting town owned road (#8247) -Fix #8216: Don't show floating text on autoreplace if cost is 0 (#8244) -Fix #8129: Crash if a news message expires while viewing the endgame screen (#8243) -Fix #8221: Use more specific error message when a bridge is too long (#8240) -Fix #8230: Resolve ".." when opening files in .tar (#8231) -Fix: A few race conditions in netcode (#8227, #8228, #8229) -Fix #7838: Crash relating to group creation and renaming (#8223) -Fix #8104: [SDL2] Fix window resizability when going from fullscreen to windowed mode (#8211) -Fix: Display banlist's indexes correctly (#8209) -Fix: Possible desync with subsidy creation (#8159) -Fix #8131: Draw small bridges pillars in more places (#8149) +Change: [Win32] Limit hardware accelerated video driver to OpenGL 3.2 or higher (#9077) +Change: More improvements to the GUI at different scales (#9075, #9102, #9107, #9133, #9174, #9183) +Fix: Query windows could be partially drawn (#9184) +Fix #9113: Crash when removing an airport that exists in an aircraft's orders (#9182) +Fix #9117: [Fluidsynth] Hang when changing song (#9181) +Fix: String validation could leave invalid UTF-8 encoded strings (#9096) +Fix: [Network] Out-of-bounds memory access with modified servers sending too short password salts (#9176) +Fix: Crash when extra viewport with zero height has sign in view (#9175) +Fix #9147: Crash when taking screenshots (#9169) +Fix #6598: [Network] Prevent crashes when (re)joining network game by falling back to main menu first (#9163) +Fix #9152: Screenshot success popup window was treated as an error (#9159) +Fix: Fast-forward stuttering when vsync is enabled (#9140) +Fix: [Network, Win32] Network errors were handled badly (#9116) +Fix: [Network] Savegame transfer could stall in rare cases (#9106) +Fix #9097: [NewGRF] Cargo initial payment variable was being truncated (#9098) +Fix: [NewGRF] Industry variable 66 and object variable 46 erroneously truncated the distance (#9088) +Fix: [NewGRF] Industry variables 65 and 66 ignored the parameter, and always used the north tile (#9088) +Fix: Do not include regression test AI in bundle (#9068, #9164) +Fix #9062: [Win32] Version in executable was not set to current release version (#9066, #9154) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..b0151ed52a --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,48 @@ +## Motivation / Problem + + + + +## Description + + + + +## Limitations + + + + +## Checklist for review + +Some things are not automated, and forgotten often. This list is a reminder for the reviewers. +* The bug fix is important enough to be backported? (label: 'backport requested') +* This PR affects the save game format? (label 'savegame upgrade') +* This PR affects the GS/AI API? (label 'needs review: Script API') + * ai_changelog.hpp, gs_changelog.hpp need updating. + * The compatibility wrappers (compat_*.nut) need updating. +* This PR affects the NewGRF API? (label 'needs review: NewGRF') + * newgrf_debug_data.h may need updating. + * [PR must be added to API tracker](https://wiki.openttd.org/en/Development/NewGRF/Specification%20Status) diff --git a/.github/changelog.sh b/.github/changelog.sh new file mode 100755 index 0000000000..ea0da948c1 --- /dev/null +++ b/.github/changelog.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +tag=$(git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@') + +# If we are a tag, show the part of the changelog till (but excluding) the last stable +if [ -n "$tag" ]; then + grep='^[0-9]\+\.[0-9]\+\.[0-9]\+[^-]' + next=$(cat changelog.txt | grep '^[0-9]' | awk 'BEGIN { show="false" } // { if (show=="true") print $0; if ($1=="'$tag'") show="true"} ' | grep "$grep" | head -n1 | sed 's/ .*//') + cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9]+.[0-9]+.[0-9]+/ { if ($1=="'$next'") show="false"; if ($1=="'$tag'") show="true";} // { if (show=="true") print $0 }' + exit 0 +fi + +# In all other cases, show the git log of the last 7 days +revdate=$(git log -1 --pretty=format:"%ci") +last_week=$(date -d "$revdate -7days" +"%Y-%m-%d %H:%M") +git log --after="${last_week}" --pretty=fuller diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml new file mode 100644 index 0000000000..77e19eef82 --- /dev/null +++ b/.github/workflows/ci-build.yml @@ -0,0 +1,320 @@ +name: CI + +on: + pull_request: + push: + branches: + - master + +env: + CTEST_OUTPUT_ON_FAILURE: 1 + +jobs: + emscripten: + name: Emscripten + + runs-on: ubuntu-20.04 + container: + # If you change this version, change the number in the cache step too. + image: emscripten/emsdk:2.0.10 + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup cache + uses: actions/cache@v2 + with: + path: /emsdk/upstream/emscripten/cache + key: 2.0.10-${{ runner.os }} + + - name: Build (host tools) + run: | + mkdir build-host + cd build-host + + echo "::group::CMake" + cmake .. -DOPTION_TOOLS_ONLY=ON + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + cmake --build . -j $(nproc) --target tools + echo "::endgroup::" + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + emcmake cmake .. -DHOST_BINARY_DIR=../build-host + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + cmake --build . -j $(nproc) + echo "::endgroup::" + + linux: + name: Linux + + strategy: + fail-fast: false + matrix: + include: + - compiler: clang + cxxcompiler: clang++ + libsdl: libsdl2-dev + - compiler: gcc + cxxcompiler: g++ + libsdl: libsdl2-dev + - compiler: gcc + cxxcompiler: g++ + libsdl: libsdl1.2-dev + - compiler: gcc + cxxcompiler: g++ + extra-cmake-parameters: -DOPTION_DEDICATED=ON + + runs-on: ubuntu-20.04 + env: + CC: ${{ matrix.compiler }} + CXX: ${{ matrix.cxxcompiler }} + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install dependencies + run: | + echo "::group::Update apt" + sudo apt-get update + echo "::endgroup::" + + echo "::group::Install dependencies" + sudo apt-get install -y --no-install-recommends \ + liballegro4-dev \ + libfontconfig-dev \ + libicu-dev \ + liblzma-dev \ + libzstd-dev \ + liblzo2-dev \ + ${{ matrix.libsdl }} \ + zlib1g-dev \ + # EOF + echo "::endgroup::" + env: + DEBIAN_FRONTEND: noninteractive + + - name: Get OpenGFX + run: | + mkdir -p ~/.local/share/openttd/baseset + cd ~/.local/share/openttd/baseset + + echo "::group::Download OpenGFX" + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" + unzip opengfx-all.zip + echo "::endgroup::" + + rm -f opengfx-all.zip + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake .. ${{ matrix.extra-cmake-parameters }} + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + cmake --build . -j $(nproc) + echo "::endgroup::" + + - name: Test + run: | + cd build + ctest -j $(nproc) --timeout 120 + + macos: + name: Mac OS + + strategy: + fail-fast: false + matrix: + include: + - arch: x64 + full_arch: x86_64 + + runs-on: macos-latest + env: + MACOSX_DEPLOYMENT_TARGET: 10.9 + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Prepare cache key + id: key + run: | + echo "::set-output name=image::$ImageOS-$ImageVersion" + + - name: Enable vcpkg cache + uses: actions/cache@v2 + with: + path: /usr/local/share/vcpkg/installed + key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-1 # Increase the number whenever dependencies are modified + restore-keys: | + ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} + + - name: Prepare vcpkg + run: | + vcpkg install --triplet=${{ matrix.arch }}-osx \ + liblzma \ + zstd \ + libpng \ + lzo \ + zlib \ + # EOF + + - name: Install OpenGFX + run: | + mkdir -p ~/Documents/OpenTTD/baseset + cd ~/Documents//OpenTTD/baseset + + echo "::group::Download OpenGFX" + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" + unzip opengfx-all.zip + echo "::endgroup::" + + rm -f opengfx-all.zip + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_OSX_ARCHITECTURES=${{ matrix.full_arch }} \ + -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-osx \ + -DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(sysctl -n hw.logicalcpu) cores" + cmake --build . -j $(sysctl -n hw.logicalcpu) + echo "::endgroup::" + + - name: Test + run: | + cd build + ctest -j $(sysctl -n hw.logicalcpu) --timeout 120 + + windows: + name: Windows + + strategy: + fail-fast: false + matrix: + os: [windows-latest, windows-2016] + arch: [x86, x64] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Prepare cache key + id: key + shell: powershell + run: | + # Work around caching failure with GNU tar + New-Item -Type Junction -Path vcpkg -Target c:\vcpkg + + Write-Output "::set-output name=image::$env:ImageOS-$env:ImageVersion" + + - name: Enable vcpkg cache + uses: actions/cache@v2 + with: + path: vcpkg/installed + key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-1 # Increase the number whenever dependencies are modified + restore-keys: | + ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} + + - name: Prepare vcpkg + shell: bash + run: | + vcpkg install --triplet=${{ matrix.arch }}-windows-static \ + liblzma \ + zstd \ + libpng \ + lzo \ + zlib \ + # EOF + + - name: Install OpenGFX + shell: bash + run: | + mkdir -p "C:/Users/Public/Documents/OpenTTD/baseset" + cd "C:/Users/Public/Documents/OpenTTD/baseset" + + echo "::group::Download OpenGFX" + curl -L https://cdn.openttd.org/opengfx-releases/0.6.0/opengfx-0.6.0-all.zip -o opengfx-all.zip + echo "::endgroup::" + + echo "::group::Unpack OpenGFX" + unzip opengfx-all.zip + echo "::endgroup::" + + rm -f opengfx-all.zip + + - name: Install MSVC problem matcher + uses: ammaraskar/msvc-problem-matcher@master + + - name: Configure developer command prompt for ${{ matrix.arch }} + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ matrix.arch }} + + - name: Build + shell: bash + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake .. \ + -GNinja \ + -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \ + -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + cmake --build . + echo "::endgroup::" + + - name: Test + shell: bash + run: | + cd ${GITHUB_WORKSPACE}/build + ctest --timeout 120 diff --git a/.github/workflows/commit-checker.yml b/.github/workflows/commit-checker.yml index d2546ab30b..d83183a467 100644 --- a/.github/workflows/commit-checker.yml +++ b/.github/workflows/commit-checker.yml @@ -24,6 +24,12 @@ jobs: # the log between HEAD^ and HEAD^2 will be the commits in the pull-request. DEPTH=4 while [ -z "$(git merge-base HEAD^ HEAD^2)" ]; do + # Prevent infinite recursion + if [ ${DEPTH} -gt 256 ]; then + echo "No common parent between '${GITHUB_HEAD_REF}' and '${GITHUB_BASE_REF}'." >&2 + exit 1 + fi + git -c protocol.version=2 fetch --no-tags --prune --progress --no-recurse-submodules --deepen=${DEPTH} origin HEAD DEPTH=$(( ${DEPTH} * 4 )) done diff --git a/.github/workflows/preview_build.yml b/.github/workflows/preview_build.yml new file mode 100644 index 0000000000..9aea890bce --- /dev/null +++ b/.github/workflows/preview_build.yml @@ -0,0 +1,133 @@ +name: Preview build + +on: + repository_dispatch: + types: + - Preview* + +jobs: + preview: + name: Build preview + + runs-on: ubuntu-20.04 + container: + # If you change this version, change the number in the cache step too. + image: emscripten/emsdk:2.0.10 + # uid=1001(runner) gid=121(docker) + options: -u 1001:121 + + steps: + - name: Update deployment status to in progress + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + deployment_id: ${{ github.event.client_payload.deployment_id }} + state: in_progress + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - name: Checkout + uses: actions/checkout@v2 + with: + ref: ${{ github.event.client_payload.sha }} + + - name: Name branch + run: | + name=$(echo "${{ github.event.client_payload.folder }}") + git checkout -b ${name} + + - name: Setup cache + uses: actions/cache@v2 + with: + path: /emsdk/upstream/emscripten/cache + key: 2.0.10-${{ runner.os }} + + - name: Build (host tools) + run: | + mkdir build-host + cd build-host + + echo "::group::CMake" + cmake .. -DOPTION_TOOLS_ONLY=ON + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + make -j$(nproc) tools + echo "::endgroup::" + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + emcmake cmake .. \ + -DHOST_BINARY_DIR=../build-host \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + emmake make -j$(nproc) + echo "::endgroup::" + + - name: Publish preview + run: | + # setuptools is missing in this Docker image, which breaks installing + # awscli. So we need to do this in two steps to recover sanity. + pip3 install setuptools + pip3 install awscli + + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.data s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.html s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.js s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.wasm s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + + # Invalidate the cache of the CloudFront distribution + ~/.local/bin/aws cloudfront create-invalidation --distribution-id ${{ secrets.PREVIEW_CF_DISTRIBUTION_ID }} --paths "/${{ github.event.client_payload.folder }}/*" + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Update deployment status to success + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + deployment_id: ${{ github.event.client_payload.deployment_id }} + state: success + environment_url: https://preview.openttd.org/${{ github.event.client_payload.folder }}/ + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: failure() + name: Update deployment status to failure + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + deployment_id: ${{ github.event.client_payload.deployment_id }} + state: failure + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} diff --git a/.github/workflows/preview_label.yml b/.github/workflows/preview_label.yml new file mode 100644 index 0000000000..6b3e17ea1a --- /dev/null +++ b/.github/workflows/preview_label.yml @@ -0,0 +1,66 @@ +name: Preview label + +on: + pull_request_target: + types: + - labeled + +env: + TEAM_CORE_DEVELOPER: core-developers + +jobs: + check_preview_label: + name: Check for preview label + if: github.event.action == 'labeled' && github.event.label.name == 'preview' + + runs-on: ubuntu-20.04 + + steps: + - name: Check if label was added by core developer + id: core_developer + continue-on-error: true + uses: octokit/request-action@v2.x + with: + route: GET /orgs/OpenTTD/teams/${{ env.TEAM_CORE_DEVELOPER }}/memberships/${{ github.event.sender.login }} + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: steps.core_developer.outcome == 'failure' + name: Remove preview label if not core developer + uses: octokit/request-action@v2.x + with: + route: DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/preview + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + issue_number: ${{ github.event.number }} + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: steps.core_developer.outcome == 'success' + name: Create deployment + id: deployment + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + ref: ${{ github.event.pull_request.head.sha }} + task: deploy:preview + auto_merge: false + required_contexts: "[]" + environment: preview-pr-${{ github.event.number }} + description: "Preview for Pull Request #${{ github.event.number }}" + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: steps.core_developer.outcome == 'success' + name: Trigger 'preview build' + uses: peter-evans/repository-dispatch@v1 + with: + token: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + event-type: "Preview build #${{ github.event.number }}" + client-payload: '{"folder": "pr${{ github.event.number }}", "sha": "${{ github.event.pull_request.head.sha }}", "deployment_id": "${{ fromJson(steps.deployment.outputs.data).id }}"}' diff --git a/.github/workflows/preview_push.yml b/.github/workflows/preview_push.yml new file mode 100644 index 0000000000..cb68c8f6ce --- /dev/null +++ b/.github/workflows/preview_push.yml @@ -0,0 +1,66 @@ +name: Preview push + +on: + pull_request_target: + types: + - synchronize + +jobs: + check_new_preview: + name: Check preview needs update + + runs-on: ubuntu-20.04 + + steps: + - name: Check if earlier preview exists + id: earlier_preview + uses: octokit/request-action@v2.x + with: + route: GET /repos/{owner}/{repo}/deployments + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + environment: preview-pr-${{ github.event.number }} + per_page: 1 + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: toJson(fromJson(steps.earlier_preview.outputs.data)) != '[]' + name: Check for preview label + id: preview_label + uses: octokit/request-action@v2.x + with: + route: GET /repos/{owner}/{repo}/issues/{issue_number}/labels + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + issue_number: ${{ github.event.number }} + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: toJson(fromJson(steps.earlier_preview.outputs.data)) != '[]' && contains(fromJson(steps.preview_label.outputs.data).*.name, 'preview') + name: Create deployment + id: deployment + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + ref: ${{ github.event.pull_request.head.sha }} + task: deploy:preview + auto_merge: false + required_contexts: "[]" + environment: preview-pr-${{ github.event.number }} + description: "Preview for Pull Request #${{ github.event.number }}" + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: toJson(fromJson(steps.earlier_preview.outputs.data)) != '[]' && contains(fromJson(steps.preview_label.outputs.data).*.name, 'preview') + name: Trigger 'preview build' + uses: peter-evans/repository-dispatch@v1 + with: + token: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + event-type: "Preview build #${{ github.event.number }}" + client-payload: '{"folder": "pr${{ github.event.number }}", "sha": "${{ github.event.pull_request.head.sha }}", "deployment_id": "${{ fromJson(steps.deployment.outputs.data).id }}"}' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..68af2c3e87 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,959 @@ +name: Release + +on: + workflow_dispatch: + inputs: + ref: + description: 'Ref to build (for Pull Requests, use refs/pull/NNN/head)' + required: true + repository_dispatch: + # client_payload should be the same as the inputs for workflow_dispatch. + types: + - Build* + release: + types: + - published + +jobs: + source: + name: Source + + runs-on: ubuntu-20.04 + + outputs: + version: ${{ steps.metadata.outputs.version }} + is_tag: ${{ steps.metadata.outputs.is_tag }} + trigger_type: ${{ steps.metadata.outputs.trigger_type }} + folder: ${{ steps.metadata.outputs.folder }} + + steps: + - name: Checkout (Release) + if: github.event_name == 'release' + uses: actions/checkout@v2 + with: + # We generate a changelog; for this we need the full git log. + fetch-depth: 0 + + - name: Checkout (Manual) + if: github.event_name == 'workflow_dispatch' + uses: actions/checkout@v2 + with: + ref: ${{ github.event.inputs.ref }} + # We generate a changelog; for this we need the full git log. + fetch-depth: 0 + + - name: Checkout (Trigger) + if: github.event_name == 'repository_dispatch' + uses: actions/checkout@v2 + with: + ref: ${{ github.event.client_payload.ref }} + # We generate a changelog; for this we need the full git log. + fetch-depth: 0 + + - name: Check valid branch name + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + REF="${{ github.event.inputs.ref }}" + elif [ "${{ github.event_name }}" = "repository_dispatch" ]; then + REF="${{ github.event.client_payload.ref }}" + else + REF="${{ github.ref }}" + fi + + # Check if we are a tag. + if [ -n "$(git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || false)" ]; then + exit 0 + fi + + # Check if the checkout caused the branch to be named. + if [ "$(git rev-parse --abbrev-ref HEAD)" != "HEAD" ]; then + exit 0 + fi + + # Check if this was a pull request. + if [ -n "$(echo ${REF} | grep '^refs/pull/[0-9]*')" ]; then + PULL=$(echo ${REF} | cut -d/ -f3) + git checkout -b pr${PULL} + fi + + # Are we still in a detached state? Error out. + if [ "$(git rev-parse --abbrev-ref HEAD)" == "HEAD" ]; then + echo "The 'ref' given resulted in a checkout of a detached HEAD." + echo "We cannot detect the version for these checkout accurate." + echo "" + echo "If you want to build a Pull Request, make sure you use 'refs/pull/NNN/head'." + echo "" + echo "Cancelling build, as without a version we cannot store the artifacts." + exit 1 + fi + + - name: Generate metadata + id: metadata + run: | + echo "::group::Prepare metadata files" + cmake -DGENERATE_OTTDREV=1 -P cmake/scripts/FindVersion.cmake + ./.github/changelog.sh > .changelog + TZ='UTC' date +"%Y-%m-%d %H:%M UTC" > .release_date + cat .ottdrev | cut -f 1 -d$'\t' > .version + + if [ $(cat .ottdrev | cut -f 5 -d$'\t') = '1' ]; then + # Assume that all tags are always releases. Why else make a tag? + IS_TAG="true" + + FOLDER="${{ env.FOLDER_RELEASES }}" + TRIGGER_TYPE="new-tag" + else + IS_TAG="false" + + BRANCH=$(git symbolic-ref -q HEAD | sed 's@.*/@@') + if [ -z "${BRANCH}" ]; then + echo "Internal error: branch name is empty." + echo "An earlier step should have prevented this from happening." + echo "Cancelling build, as without a branch name we cannot store the artifacts" + exit 1 + fi + + if [ "${BRANCH}" = "${{ env.NIGHTLIES_BRANCH }}" ]; then + # The "master" branch is special, and we call a nightly. + FOLDER="${{ env.FOLDER_NIGHTLIES }}/$(date +%Y)" + TRIGGER_TYPE="new-master" + else + # All other branches, which can be builds of Pull Requests, are + # put in their own folder. + FOLDER="${{ env.FOLDER_BRANCHES }}/${BRANCH}" + TRIGGER_TYPE="new-branch" + fi + fi + + mkdir -p build/bundles + cp .changelog build/bundles/changelog.txt + cp .release_date build/bundles/released.txt + cp README.md build/bundles/README.md + echo "::endgroup::" + + echo "Release Date: $(cat .release_date)" + echo "Revision: $(cat .ottdrev)" + echo "Version: $(cat .version)" + echo "Is tag: ${IS_TAG}" + echo "Folder on CDN: ${FOLDER}" + echo "Workflow trigger: ${TRIGGER_TYPE}" + + echo "::set-output name=version::$(cat .version)" + echo "::set-output name=is_tag::${IS_TAG}" + echo "::set-output name=folder::${FOLDER}" + echo "::set-output name=trigger_type::${TRIGGER_TYPE}" + env: + NIGHTLIES_BRANCH: master + FOLDER_RELEASES: openttd-releases + FOLDER_NIGHTLIES: openttd-nightlies + FOLDER_BRANCHES: openttd-branches + + - name: Remove VCS information + run: | + rm -rf .git + + - name: Create bundles + run: | + FOLDER_NAME=openttd-${{ steps.metadata.outputs.version }} + + # Rename the folder to openttd-NNN + mkdir ${FOLDER_NAME} + find . -maxdepth 1 -not -name . -not -name build -not -name ${FOLDER_NAME} -exec mv {} ${FOLDER_NAME}/ \; + + echo "::group::Create tarball (xz) bundle" + tar --xz -cvf build/bundles/${FOLDER_NAME}-source.tar.xz ${FOLDER_NAME} + echo "::endgroup::" + + # This tarball is only to be used within this workflow. + echo "::group::Create tarball (gz) bundle" + tar --gzip -cvf source.tar.gz ${FOLDER_NAME} + echo "::endgroup::" + + echo "::group::Create zip bundle" + zip -9 -r build/bundles/${FOLDER_NAME}-source.zip ${FOLDER_NAME} + echo "::endgroup::" + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-source + path: build/bundles/* + retention-days: 5 + + - name: Store source (for other jobs) + uses: actions/upload-artifact@v2 + with: + name: internal-source + path: source.tar.gz + retention-days: 1 + + docs: + name: Docs + needs: source + + runs-on: ubuntu-20.04 + + steps: + - name: Download source + uses: actions/download-artifact@v2 + with: + name: internal-source + + - name: Unpack source + run: | + tar -xf source.tar.gz --strip-components=1 + + - name: Install dependencies + run: | + echo "::group::Update apt" + sudo apt-get update + echo "::endgroup::" + + echo "::group::Install dependencies" + sudo apt-get install -y --no-install-recommends \ + doxygen \ + # EOF + echo "::endgroup::" + env: + DEBIAN_FRONTEND: noninteractive + + - name: Build + run: | + mkdir -p ${GITHUB_WORKSPACE}/build + cd ${GITHUB_WORKSPACE}/build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DOPTION_DOCS_ONLY=ON \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + cmake --build . --target docs + echo "::endgroup::" + + - name: Create bundles + run: | + BASENAME=openttd-${{ needs.source.outputs.version }} + + cd ${GITHUB_WORKSPACE}/build + + mv docs/source ${BASENAME}-docs + mv docs/ai-api ${BASENAME}-docs-ai + mv docs/gs-api ${BASENAME}-docs-gs + + mkdir -p bundles + + echo "::group::Create docs bundle" + tar --xz -cf bundles/${BASENAME}-docs.tar.xz ${BASENAME}-docs + echo "::endgroup::" + + echo "::group::Create AI API docs bundle" + tar --xz -cf bundles/${BASENAME}-docs-ai.tar.xz ${BASENAME}-docs-ai + echo "::endgroup::" + + echo "::group::Create GameScript API docs bundle" + tar --xz -cf bundles/${BASENAME}-docs-gs.tar.xz ${BASENAME}-docs-gs + echo "::endgroup::" + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-docs + path: build/bundles/*.tar.xz + retention-days: 5 + + linux: + name: Linux (Generic) + needs: source + + runs-on: ubuntu-20.04 + container: + # manylinux2014 is based on CentOS 7, but already has a lot of things + # installed and preconfigured. It makes it easier to build OpenTTD. + image: quay.io/pypa/manylinux2014_x86_64 + + steps: + - name: Download source + uses: actions/download-artifact@v2 + with: + name: internal-source + + - name: Unpack source + run: | + tar -xf source.tar.gz --strip-components=1 + + - name: Install dependencies + run: | + echo "::group::Install dependencies" + yum install -y \ + fontconfig-devel \ + freetype-devel \ + libicu-devel \ + libpng-devel \ + libpng-devel \ + lzo-devel \ + SDL2-devel \ + wget \ + xz-devel \ + libzstd-devel \ + zlib-devel \ + # EOF + echo "::endgroup::" + + # The yum variant of fluidsynth depends on all possible audio drivers, + # like jack, ALSA, pulseaudio, etc. This is not really useful for us, + # as we route the output of fluidsynth back via our sound driver, and + # as such do not use these audio driver outputs at all. So instead, + # we compile fluidsynth ourselves, with as little dependencies as + # possible. This currently means it picks up SDL2, but this is fine, + # as we need SDL2 anyway. + echo "::group::Install fluidsynth" + wget https://github.com/FluidSynth/fluidsynth/archive/v2.1.6.tar.gz + tar xf v2.1.6.tar.gz + ( + cd fluidsynth-2.1.6 + mkdir build + cd build + cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr + cmake --build . -j $(nproc) + cmake --install . + ) + echo "::endgroup::" + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir -p build + cd build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DOPTION_PACKAGE_DEPENDENCIES=ON \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + cmake --build . -j $(nproc) + echo "::endgroup::" + + - name: Create bundles + run: | + cd ${GITHUB_WORKSPACE}/build + echo "::group::Run CPack" + cpack + echo "::endgroup::" + + echo "::group::Cleanup" + # Remove the sha256 files CPack generates; we will do this ourself at + # the end of this workflow. + rm -f bundles/*.sha256 + echo "::endgroup::" + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-linux-generic + path: build/bundles + retention-days: 5 + + linux-distro: + name: Linux (Distros) + needs: source + + if: needs.source.outputs.is_tag == 'true' + + strategy: + fail-fast: false + matrix: + include: + - container_image: "ubuntu:18.04" + bundle_name: "bionic" + - container_image: "ubuntu:20.04" + bundle_name: "focal" + - container_image: "ubuntu:20.10" + bundle_name: "groovy" + - container_image: "debian:buster" + bundle_name: "buster" + - container_image: "debian:bullseye" + bundle_name: "bullseye" + + runs-on: ubuntu-20.04 + container: + image: ${{ matrix.container_image }} + + steps: + - name: Download source + uses: actions/download-artifact@v2 + with: + name: internal-source + + - name: Unpack source + run: | + tar -xf source.tar.gz --strip-components=1 + + - name: Install dependencies + run: | + echo "::group::Update apt" + apt-get update + echo "::endgroup::" + + echo "::group::Install dependencies" + apt-get install -y --no-install-recommends \ + cmake \ + debhelper \ + g++ \ + git \ + make \ + openssl \ + libfontconfig-dev \ + libfluidsynth-dev \ + libicu-dev \ + liblzma-dev \ + libzstd-dev \ + liblzo2-dev \ + libsdl2-dev \ + lsb-release \ + zlib1g-dev \ + # EOF + echo "::endgroup::" + env: + DEBIAN_FRONTEND: noninteractive + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir -p build + cd build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX=/usr \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + # Ubuntu 18.04 cmake does not support -j so we pass the option to the native tool + cmake --build . -- -j $(nproc) + echo "::endgroup::" + + - name: Create bundles + run: | + cd ${GITHUB_WORKSPACE}/build + echo "::group::Run CPack" + cpack + echo "::endgroup::" + + echo "::group::Cleanup" + # Remove the sha256 files CPack generates; we will do this ourself at + # the end of this workflow. + rm -f bundles/*.sha256 + echo "::endgroup::" + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-linux-${{ matrix.bundle_name }} + path: build/bundles + retention-days: 5 + + macos: + name: MacOS + needs: source + + runs-on: macos-10.15 + env: + MACOSX_DEPLOYMENT_TARGET: 10.9 + + steps: + - name: Download source + uses: actions/download-artifact@v2 + with: + name: internal-source + + - name: Unpack source + run: | + tar -xf source.tar.gz --strip-components=1 + + - name: Install dependencies + env: + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + run: | + brew install pandoc + + - name: Prepare cache key + id: key + run: | + echo "::set-output name=image::$ImageOS-$ImageVersion" + + - name: Enable vcpkg cache + uses: actions/cache@v2 + with: + path: /usr/local/share/vcpkg/installed + key: ${{ steps.key.outputs.image }}-vcpkg-release-1 # Increase the number whenever dependencies are modified + restore-keys: | + ${{ steps.key.outputs.image }}-vcpkg-release + ${{ steps.key.outputs.image }}-vcpkg-x64 + + - name: Prepare vcpkg + run: | + vcpkg install \ + liblzma:x64-osx \ + liblzma:arm64-osx \ + zstd:x64-osx \ + zstd:arm64-osx \ + libpng:x64-osx \ + libpng:arm64-osx \ + lzo:x64-osx \ + lzo:arm64-osx \ + zlib:x64-osx \ + zlib:arm64-osx \ + # EOF + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build tools + run: | + mkdir build-host + cd build-host + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DOPTION_TOOLS_ONLY=ON \ + # EOF + echo "::endgroup::" + + echo "::group::Build tools" + echo "Running on $(sysctl -n hw.logicalcpu) cores" + cmake --build . -j $(sysctl -n hw.logicalcpu) --target tools + echo "::endgroup::" + + - name: Import code signing certificates + uses: Apple-Actions/import-codesign-certs@v1 + with: + # The certificates in a PKCS12 file encoded as a base64 string + p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }} + # The password used to import the PKCS12 file. + p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }} + # If this is run on a fork, there may not be a certificate set up - continue in this case + continue-on-error: true + + - name: Build arm64 + run: | + mkdir build-arm64 + cd build-arm64 + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_OSX_ARCHITECTURES=arm64 \ + -DVCPKG_TARGET_TRIPLET=arm64-osx \ + -DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(sysctl -n hw.logicalcpu) cores" + cmake --build . -j $(sysctl -n hw.logicalcpu) + echo "::endgroup::" + + - name: Build x64 + run: | + mkdir build-x64 + cd build-x64 + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -DCMAKE_OSX_ARCHITECTURES=x86_64 \ + -DVCPKG_TARGET_TRIPLET=x64-osx \ + -DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \ + -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCPACK_BUNDLE_APPLE_CERT_APP=${{ secrets.APPLE_DEVELOPER_CERTIFICATE_ID }} \ + "-DCPACK_BUNDLE_APPLE_CODESIGN_PARAMETER=--deep -f --options runtime" \ + -DAPPLE_UNIVERSAL_PACKAGE=1 \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(sysctl -n hw.logicalcpu) cores" + cmake --build . -j $(sysctl -n hw.logicalcpu) + echo "::endgroup::" + + - name: Create bundles + run: | + cd build-x64 + + echo "::group::Create universal binary" + # Combine the `openttd` binaries from each build into a single file + lipo -create -output openttd-universal ../build-*/openttd + mv openttd-universal openttd + echo "::endgroup::" + + echo "::group::Run CPack" + cpack + echo "::endgroup::" + + echo "::group::Cleanup" + # Remove the sha256 files CPack generates; we will do this ourself at + # the end of this workflow. + rm -f bundles/*.sha256 + echo "::endgroup::" + + - name: Install gon + env: + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_CLEANUP: 1 + run: | + brew tap mitchellh/gon + brew install mitchellh/gon/gon + + - name: Notarize + env: + AC_USERNAME: ${{ secrets.APPLE_DEVELOPER_APP_USERNAME }} + AC_PASSWORD: ${{ secrets.APPLE_DEVELOPER_APP_PASSWORD }} + run: | + cd build-x64 + ../os/macosx/notarize.sh + + - name: Build zip + run: | + cd build-x64 + + pushd _CPack_Packages/*/Bundle/openttd-*/ + + # Remove the Applications symlink from the staging folder + rm -f Applications + + # Remove the original dmg built by CPack to avoid a conflict when resolving + # the zip_filename variable below + rm -f ../*.dmg + + zip_filename=(../openttd-*) + + # Package up the existing, notarised .app into a zip file + zip -r -9 ${zip_filename}.zip OpenTTD.app + + popd + + # Now move it into place to be uploaded + mv _CPack_Packages/*/Bundle/openttd-*.zip bundles/ + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-macos-universal + path: build-x64/bundles + retention-days: 5 + + windows: + name: Windows + needs: source + + strategy: + fail-fast: false + matrix: + include: + - arch: x86 + host: x86 + - arch: x64 + host: x64 + - arch: arm64 + host: x64_arm64 + + runs-on: windows-latest + + steps: + - name: Download source + uses: actions/download-artifact@v2 + with: + name: internal-source + + - name: Unpack source + shell: bash + run: | + tar -xf source.tar.gz --strip-components=1 + + - name: Install dependencies + shell: bash + run: | + choco install pandoc + + - name: Prepare cache key + id: key + shell: powershell + run: | + # Work around caching failure with GNU tar + New-Item -Type Junction -Path vcpkg -Target c:\vcpkg + + Write-Output "::set-output name=image::$env:ImageOS-$env:ImageVersion" + + - name: Enable vcpkg cache + uses: actions/cache@v2 + with: + path: vcpkg/installed + key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-1 # Increase the number whenever dependencies are modified + restore-keys: | + ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }} + + - name: Prepare vcpkg + shell: bash + run: | + vcpkg install --triplet=${{ matrix.arch }}-windows-static \ + liblzma \ + zstd \ + libpng \ + lzo \ + zlib \ + # EOF + + - name: Install MSVC problem matcher + uses: ammaraskar/msvc-problem-matcher@master + + - name: Configure developer command prompt for tools + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: x64 + + - name: Build tools + shell: bash + run: | + mkdir build-host + cd build-host + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -GNinja \ + -DOPTION_TOOLS_ONLY=ON \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + cmake --build . --target tools + echo "::endgroup::" + + - name: Configure developer command prompt for ${{ matrix.arch }} + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ matrix.host }} + + - name: Build (with installer) + if: needs.source.outputs.is_tag == 'true' + shell: bash + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -GNinja \ + -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \ + -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \ + -DOPTION_USE_NSIS=ON \ + -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + cmake --build . + echo "::endgroup::" + + - name: Build (without installer) + if: needs.source.outputs.is_tag != 'true' + shell: bash + run: | + mkdir build + cd build + + echo "::group::CMake" + cmake ${GITHUB_WORKSPACE} \ + -GNinja \ + -DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \ + -DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \ + -DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + cmake --build . + echo "::endgroup::" + + - name: Create bundles + shell: bash + run: | + cd ${GITHUB_WORKSPACE}/build + echo "::group::Run CPack" + cpack + echo "::endgroup::" + + echo "::group::Prepare PDB to be bundled" + PDB=$(ls bundles/*.zip | cut -d/ -f2 | sed 's/.zip$/.pdb/') + cp openttd.pdb bundles/${PDB} + xz -9 bundles/${PDB} + echo "::endgroup::" + + echo "::group::Cleanup" + # Remove the sha256 files CPack generates; we will do this ourself at + # the end of this workflow. + rm -f bundles/*.sha256 + echo "::endgroup::" + + - name: Store bundles + uses: actions/upload-artifact@v2 + with: + name: openttd-windows-${{ matrix.arch }} + path: build/bundles + retention-days: 5 + + upload: + name: Upload (AWS) + needs: + - source + - docs + - linux + - linux-distro + - macos + - windows + + # The 'linux' job can be skipped if it is a nightly. That normally causes + # this job to be skipped too, unless we have this length boy :) + # "always()" is important here, it is the keyword to use to stop skipping + # this job if any dependency is skipped. It looks a bit silly, but it is + # how GitHub Actions work ;) + if: ${{ false }} # always() && needs.source.result == 'success' && needs.docs.result == 'success' && needs.linux.result == 'success' && (needs.linux-distro.result == 'success' || needs.linux-distro.result == 'skipped') && needs.macos.result == 'success' && needs.windows.result == 'success' + + runs-on: ubuntu-20.04 + + steps: + - name: Download all bundles + uses: actions/download-artifact@v2 + + - name: Calculate checksums + run: | + echo "::group::Move bundles to a single folder" + mkdir bundles + mv openttd-*/* bundles/ + cd bundles + echo "::group::Build" + + for i in $(ls openttd-*); do + echo "::group::Calculating checksums for ${i}" + openssl dgst -r -md5 -hex $i > $i.md5sum + openssl dgst -r -sha1 -hex $i > $i.sha1sum + openssl dgst -r -sha256 -hex $i > $i.sha256sum + echo "::endgroup::" + done + + - name: Upload bundles to AWS + run: | + aws s3 cp --recursive --only-show-errors bundles/ s3://${{ secrets.CDN_S3_BUCKET }}/${{ needs.source.outputs.folder }}/${{ needs.source.outputs.version }}/ + + # We do not invalidate the CloudFront distribution here. The trigger + # for "New OpenTTD release" first updated the manifest files and + # creates an index.html. We invalidate after that, so everything + # becomes visible at once. + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }} + + - name: Trigger 'New OpenTTD release' + uses: peter-evans/repository-dispatch@v1 + with: + token: ${{ secrets.DEPLOYMENT_TOKEN }} + repository: OpenTTD/workflows + event-type: ${{ needs.source.outputs.trigger_type }} + client-payload: '{"version": "${{ needs.source.outputs.version }}", "folder": "${{ needs.source.outputs.folder }}"}' + + upload-steam: + name: Upload (Steam) + needs: + - source + - linux + - macos + - windows + + if: ${{ false }} # needs.source.outputs.trigger_type == 'new-master' || needs.source.outputs.trigger_type == 'new-tag' + + runs-on: ubuntu-20.04 + + steps: + - name: Download all bundles + uses: actions/download-artifact@v2 + + - name: Setup steamcmd + uses: CyberAndrii/setup-steamcmd@v1 + + - name: Generate Steam auth code + id: steam-totp + uses: CyberAndrii/steam-totp@v1 + with: + shared_secret: ${{ secrets.STEAM_SHARED_SECRET }} + + - name: Upload to Steam + run: | + echo "::group::Extracting source" + mkdir source + ( + cd source + tar -xf ../internal-source/source.tar.gz --strip-components=1 + ) + echo "::endgroup::" + + mkdir steam + ( + cd steam + + echo "::group::Prepare Win32" + unzip ../openttd-windows-x86/openttd-*-windows-win32.zip + mv openttd-*-windows-win32 steam-win32 + echo "::endgroup::" + + echo "::group::Prepare Win64" + unzip ../openttd-windows-x64/openttd-*-windows-win64.zip + mv openttd-*-windows-win64 steam-win64 + echo "::endgroup::" + + echo "::group::Prepare macOS" + mkdir steam-macos + ( + cd steam-macos + unzip ../../openttd-macos-universal/openttd-*-macos-universal.zip + ) + echo "::endgroup::" + + echo "::group::Prepare Linux" + tar xvf ../openttd-linux-generic/openttd-*-linux-generic-amd64.tar.xz + mv openttd-*-linux-generic-amd64 steam-linux + echo "::endgroup::" + + echo "::group::Preparing build file" + if [ "${{ needs.source.outputs.trigger_type }}" = "new-tag" ]; then + BRANCH="testing" + else + BRANCH="nightly" + fi + cat ../source/os/steam/release.vdf | sed 's/@@DESCRIPTION@@/openttd-${{ needs.source.outputs.version }}/;s/@@BRANCH@@/'${BRANCH}'/' > release.vdf + cat release.vdf + echo "::endgroup::" + + echo "::group::Upload to Steam" + steamcmd +login ${{ secrets.STEAM_USERNAME }} ${{ secrets.STEAM_PASSWORD }} ${{ steps.steam-totp.outputs.code }} +run_app_build $(pwd)/release.vdf +quit + echo "::endgroup::" + ) diff --git a/.gitignore b/.gitignore index 3e74133dfe..4eed0f0e47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,55 +1,7 @@ -bin/* -!bin/ai -bin/ai/* -!bin/ai/compat*.nut -!bin/ai/regression -!bin/data -bin/baseset/* -!bin/baseset/openttd.grf -!bin/baseset/opntitle.dat -!bin/baseset/orig_extra.grf -!bin/baseset/orig_*.obg -!bin/baseset/orig_*.obs -!bin/baseset/no_sound.obs -!bin/baseset/no_music.obm -!bin/baseset/orig_*.obm -!bin/game -bin/game/* -!bin/game/compat*.nut -!bin/scripts -bin/scripts/* -!bin/scripts/*.example -!bin/scripts/readme.txt - -*.aps -bundle/* -bundles/* +/.vs +/build* +CMakeSettings.json docs/aidocs/* docs/gamedocs/* docs/source/* -.kdev4 -.kdev4/* -*.kdev4 -media/openttd.desktop -media/openttd.desktop.install -objs/* -projects/.vs -projects/Debug -projects/Release -projects/*.ncb -projects/*.suo -projects/*.sdf -projects/*.opensdf -projects/*.vcproj.*.user -projects/*.vcxproj.user -projects/*.VC.db -projects/*.VC.opendb -src/rev.cpp -src/os/windows/ottdres.rc - -/Makefile* -!/Makefile.msvc -/config.* -!/config.lib -!*.in -*.tmp +/out diff --git a/.hgignore b/.hgignore deleted file mode 100644 index 03d99c6f29..0000000000 --- a/.hgignore +++ /dev/null @@ -1,34 +0,0 @@ -syntax: glob - -.svn -*.aps -bin/baseset/openttd.32.bmp -bin/lang/* -bin/openttd* -bin/*.cfg -bundle/* -bundles/* -config.cache* -config.log -config.pwd -docs/aidocs/* -docs/gamedocs/* -docs/source/* -.kdev4 -.kdev4/* -*.kdev4 -Makefile -Makefile.am -Makefile.bundle -media/openttd.desktop -media/openttd.desktop.install -objs/* -projects/.vs -projects/*.ncb -projects/*.suo -projects/*.sdf -projects/*.opensdf -projects/*.vcproj.*.user -projects/*.vcxproj.user -src/rev.cpp -src/os/windows/ottdres.rc diff --git a/.ottdrev b/.ottdrev index 915f1470fb..5ca22e1b18 100644 --- a/.ottdrev +++ b/.ottdrev @@ -1 +1 @@ -1.10.3 20200809 0 baf5bf29fa68c908e7033e58465562d22ec97a07 1 1 2020 +1.11.2 20210503 0 672f285218c6817784d86f737987b75db4bc78fc 1 1 2021 diff --git a/.release_date b/.release_date index ca9ee6da3c..1ee8361b96 100644 --- a/.release_date +++ b/.release_date @@ -1 +1 @@ -2020-08-09 17:56 UTC +2021-05-03 18:41 UTC diff --git a/.version b/.version index 587c5f0c73..ca7176690d 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -1.10.3 +1.11.2 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..d3e3d197b3 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,380 @@ +cmake_minimum_required(VERSION 3.9) + +if(NOT BINARY_NAME) + set(BINARY_NAME openttd) +endif() + +project(${BINARY_NAME} + VERSION 1.11.2 +) + +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + message(FATAL_ERROR "In-source builds not allowed. Please run \"cmake ..\" from the build directory. You may need to delete \"${CMAKE_SOURCE_DIR}/CMakeCache.txt\" first.") +endif() + +# Debug mode by default. +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Debug) +endif() + +if (EMSCRIPTEN) + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/os/emscripten/cmake") +endif() + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") +set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) + +# Use GNUInstallDirs to allow customisation +# but set our own default data and bin dir +if(NOT CMAKE_INSTALL_DATADIR) + set(CMAKE_INSTALL_DATADIR "share/games") +endif() +if(NOT CMAKE_INSTALL_BINDIR) + set(CMAKE_INSTALL_BINDIR "games") +endif() +include(GNUInstallDirs) + +include(Options) +set_options() +set_directory_options() + +include(Static) +set_static_if_needed() + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED YES) +set(CMAKE_CXX_EXTENSIONS NO) + +set(CMAKE_EXPORT_COMPILE_COMMANDS YES) + +# An empty target for the tools +add_custom_target(tools) + +include(Endian) +add_endian_definition() + +include(CompileFlags) +compile_flags() + +if(APPLE OR UNIX) + add_definitions(-DUNIX) +endif() + +if(UNIX) + find_package(Doxygen) +endif() + +list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/rev.cpp") +if(WIN32) + list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/ottdres.rc") +endif() + +# Generate a target to determine version, which is execute every 'make' run +add_custom_target(find_version + ${CMAKE_COMMAND} + -DFIND_VERSION_BINARY_DIR=${CMAKE_BINARY_DIR}/generated + -DCPACK_BINARY_DIR=${CMAKE_BINARY_DIR} + -DREV_MAJOR=${PROJECT_VERSION_MAJOR} + -DREV_MINOR=${PROJECT_VERSION_MINOR} + -DREV_BUILD=${PROJECT_VERSION_PATCH} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/FindVersion.cmake" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + BYPRODUCTS ${GENERATED_SOURCE_FILES} +) + +# Documentation +if(DOXYGEN_EXECUTABLE) + add_custom_target(docs) + add_custom_target(docs_source + ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/docs + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating documentation for source" + ) + add_dependencies(docs_source + find_version + ) + add_dependencies(docs + docs_source + ) +endif() + +include(AddCustomXXXTimestamp) + +if(OPTION_TOOLS_ONLY) + if(HOST_BINARY_DIR) + unset(HOST_BINARY_DIR CACHE) + endif() + add_subdirectory(${CMAKE_SOURCE_DIR}/src) + return() +endif() + +if(APPLE) + # Avoid searching for headers in Frameworks, and libraries in LIBDIR. + set(CMAKE_FIND_FRAMEWORK LAST) +endif() + +# Prefer -pthread over -lpthread, which is often the better option of the two. +set(CMAKE_THREAD_PREFER_PTHREAD YES) +# Make sure we have Threads available. +find_package(Threads REQUIRED) + +find_package(ZLIB) +find_package(LibLZMA) +find_package(LZO) +find_package(ZSTD 1.4) +find_package(PNG) + +if(NOT OPTION_DEDICATED) + if(NOT WIN32) + find_package(Allegro) + if(NOT APPLE) + find_package(Freetype) + find_package(SDL2) + if(NOT SDL2_FOUND) + find_package(SDL) + endif() + find_package(Fluidsynth) + find_package(Fontconfig) + find_package(ICU OPTIONAL_COMPONENTS i18n lx) + endif() + endif() +endif() +if(APPLE) + find_package(Iconv) + + find_library(AUDIOTOOLBOX_LIBRARY AudioToolbox) + find_library(AUDIOUNIT_LIBRARY AudioUnit) + find_library(COCOA_LIBRARY Cocoa) + find_library(QUARTZCORE_LIBRARY QuartzCore) +endif() + +if(NOT EMSCRIPTEN AND NOT OPTION_DEDICATED) + find_package(OpenGL COMPONENTS OpenGL) +endif() + +if(MSVC) + find_package(Editbin REQUIRED) +endif() + +find_package(SSE) +find_package(Xaudio2) + +find_package(Grfcodec) + +include(CheckIPOSupported) +check_ipo_supported(RESULT IPO_FOUND) + +show_options() + +if(UNIX AND NOT APPLE AND NOT OPTION_DEDICATED) + if(NOT SDL_FOUND AND NOT SDL2_FOUND AND NOT ALLEGRO_FOUND) + message(FATAL_ERROR "SDL, SDL2 or Allegro is required for this platform") + endif() +endif() +if(APPLE) + if(NOT AUDIOTOOLBOX_LIBRARY) + message(FATAL_ERROR "AudioToolbox is required for this platform") + endif() + if(NOT AUDIOUNIT_LIBRARY) + message(FATAL_ERROR "AudioUnit is required for this platform") + endif() + if(NOT COCOA_LIBRARY) + message(FATAL_ERROR "Cocoa is required for this platform") + endif() + if(NOT QUARTZCORE_LIBRARY) + message(FATAL_ERROR "QuartzCore is required for this platform") + endif() +endif() + +if(OPTION_PACKAGE_DEPENDENCIES) + if(NOT UNIX) + message(FATAL_ERROR "Can only package dependencies on Linux") + endif() + if(OPTION_INSTALL_FHS) + message(FATAL_ERROR "Cannot install in FHS folders when we are packaging dependencies") + endif() + if(${CMAKE_VERSION} VERSION_LESS "3.16.0") + message(FATAL_ERROR "OPTION_PACKAGE_DEPENDENCIES can only work with CMake 3.16+; you are using ${CMAKE_VERSION}") + endif() + + # If we are packaging dependencies, we do two things: + # 1) set the RPATH to include $ORIGIN/lib; $ORIGIN (that literal string) + # is a Linux indicator for "path where application is". In CMake, we + # have to do this before add_executable() is executed. + # 2) copy the libraries that we compile against to the "lib" folder. + # This is done in InstallAndPackage.cmake. + set(CMAKE_INSTALL_RPATH "\$ORIGIN/lib") + set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) +endif() + +include(SourceList) + +# Needed by rev.cpp +include_directories(${CMAKE_SOURCE_DIR}/src) +# Needed by everything that uses Squirrel +include_directories(${CMAKE_SOURCE_DIR}/src/3rdparty/squirrel/include) + +include(MSVCFilters) + +add_executable(openttd WIN32 ${GENERATED_SOURCE_FILES}) +set_target_properties(openttd PROPERTIES OUTPUT_NAME "${BINARY_NAME}") +# All other files are added via target_sources() + +if(MSVC) + # Add DPI manifest to project; other WIN32 targets get this via ottdres.rc + target_sources(openttd PRIVATE "${CMAKE_SOURCE_DIR}/os/windows/openttd.manifest") +endif() + +add_subdirectory(${CMAKE_SOURCE_DIR}/bin) +add_subdirectory(${CMAKE_SOURCE_DIR}/src) +add_subdirectory(${CMAKE_SOURCE_DIR}/media) + +add_dependencies(openttd + find_version) + +target_link_libraries(openttd + openttd::languages + openttd::settings + openttd::media + openttd::basesets + openttd::script_api + Threads::Threads +) + +if(IPO_FOUND) + set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE True) + set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL True) + set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO True) +endif() +set_target_properties(openttd PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}") +process_compile_flags() + +include(LinkPackage) +link_package(PNG TARGET PNG::PNG ENCOURAGED) +link_package(ZLIB TARGET ZLIB::ZLIB ENCOURAGED) +link_package(LIBLZMA TARGET LibLZMA::LibLZMA ENCOURAGED) +link_package(LZO) +link_package(ZSTD ENCOURAGED) + +if(NOT OPTION_DEDICATED) + link_package(Fluidsynth) + link_package(SDL) + link_package(SDL2 TARGET SDL2::SDL2) + link_package(Allegro) + link_package(FREETYPE TARGET Freetype::Freetype) + link_package(Fontconfig TARGET Fontconfig::Fontconfig) + link_package(ICU_lx) + link_package(ICU_i18n) + + if(SDL2_FOUND AND OPENGL_FOUND AND UNIX) + # SDL2 dynamically loads OpenGL if needed, so do not link to OpenGL when + # on Linux. For Windows, we need to link to OpenGL as we also have a win32 + # driver using it. + add_definitions(-DWITH_OPENGL) + message(STATUS "OpenGL found -- -DWITH_OPENGL -- (via SDL2)") + else() + link_package(OpenGL TARGET OpenGL::GL) + endif() +endif() + +if(APPLE) + link_package(Iconv TARGET Iconv::Iconv) + + target_link_libraries(openttd + ${AUDIOTOOLBOX_LIBRARY} + ${AUDIOUNIT_LIBRARY} + ${COCOA_LIBRARY} + ${QUARTZCORE_LIBRARY} + ) + + add_definitions( + -DWITH_COCOA + ) +endif() + +if(EMSCRIPTEN) + add_library(WASM::WASM INTERFACE IMPORTED) + + # Allow heap-growth, and start with a bigger memory size. + target_link_libraries(WASM::WASM INTERFACE "-s ALLOW_MEMORY_GROWTH=1") + target_link_libraries(WASM::WASM INTERFACE "-s INITIAL_MEMORY=33554432") + target_link_libraries(WASM::WASM INTERFACE "-s DISABLE_EXCEPTION_CATCHING=0") + add_definitions(-s DISABLE_EXCEPTION_CATCHING=0) + + # Export functions to Javascript. + target_link_libraries(WASM::WASM INTERFACE "-s EXPORTED_FUNCTIONS='[\"_main\", \"_em_openttd_add_server\"]' -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]'") + + # Preload all the files we generate during build. + # As we do not compile with FreeType / FontConfig, we also have no way to + # render several languages (like Chinese, ..), so where do you draw the + # line what languages to include and which not? In the end, especially as + # the more languages you add the slower downloading becomes, we decided to + # only ship the English language. + target_link_libraries(WASM::WASM INTERFACE "--preload-file ${CMAKE_BINARY_DIR}/baseset@/baseset") + target_link_libraries(WASM::WASM INTERFACE "--preload-file ${CMAKE_BINARY_DIR}/lang/english.lng@/lang/english.lng") + target_link_libraries(WASM::WASM INTERFACE "--preload-file ${CMAKE_SOURCE_DIR}/bin/ai@/ai") + target_link_libraries(WASM::WASM INTERFACE "--preload-file ${CMAKE_SOURCE_DIR}/bin/game@/game") + + # We use IDBFS for persistent storage. + target_link_libraries(WASM::WASM INTERFACE "-lidbfs.js") + + # Use custom pre-js and shell.html. + target_link_libraries(WASM::WASM INTERFACE "--pre-js ${CMAKE_SOURCE_DIR}/os/emscripten/pre.js") + target_link_libraries(WASM::WASM INTERFACE "--shell-file ${CMAKE_SOURCE_DIR}/os/emscripten/shell.html") + + # Build the .html (which builds the .js, .wasm, and .data too). + set_target_properties(openttd PROPERTIES SUFFIX ".html") + target_link_libraries(openttd WASM::WASM) +endif() + +if(NOT PERSONAL_DIR STREQUAL "(not set)") + add_definitions( + -DWITH_PERSONAL_DIR + -DPERSONAL_DIR="${PERSONAL_DIR}" + ) +endif() + +if(NOT SHARED_DIR STREQUAL "(not set)") + add_definitions( + -DWITH_SHARED_DIR + -DSHARED_DIR="${SHARED_DIR}" + ) +endif() + +if(NOT GLOBAL_DIR STREQUAL "(not set)") + add_definitions( + -DGLOBAL_DATA_DIR="${GLOBAL_DIR}" + ) +endif() + +link_package(SSE) + +add_definitions_based_on_options() + +if(WIN32) + add_definitions( + -DUNICODE + -D_UNICODE + -DWITH_UNISCRIBE + ) + + target_link_libraries(openttd + ws2_32 + winmm + imm32 + ) +endif() + +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + add_definitions(-D_SQ64) +endif() + +include(CreateRegression) +create_regression() + +if(APPLE OR WIN32) + find_package(Pandoc) +endif() + +include(InstallAndPackage) diff --git a/COMPILING.md b/COMPILING.md index 46de5e09e2..06f54262e4 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -2,28 +2,29 @@ ## Required/optional libraries -The following libraries are used by OpenTTD for: +OpenTTD makes use of the following external libraries: -- zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads, +- (encouraged) zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads, heightmaps -- liblzo2: (de)compressing of old (pre 0.3.0) savegames -- liblzma: (de)compressing of savegames (1.1.0 and later) -- libpng: making screenshots and loading heightmaps +- (encouraged) liblzma: (de)compressing of savegames (1.1.0 and later) +- (encouraged) libpng: making screenshots and loading heightmaps +- (optional) liblzo2: (de)compressing of old (pre 0.3.0) savegames + +For Linux, the following additional libraries are used (for non-dedicated only): + +- libSDL2: hardware access (video, sound, mouse) - libfreetype: loading generic fonts and rendering them - libfontconfig: searching for fonts, resolving font names to actual fonts - libicu: handling of right-to-left scripts (e.g. Arabic and Persian) and - natural sorting of strings (Linux only) -- libSDL2: hardware access (video, sound, mouse) (not required for Windows or macOS) + natural sorting of strings OpenTTD does not require any of the libraries to be present, but without liblzma you cannot open most recent savegames and without zlib you cannot open most older savegames or use the content downloading system. -Without libSDL/liballegro on non-Windows and non-macOS machines you have -no graphical user interface; you would be building a dedicated server. -## Windows: +## Windows -You need Microsoft Visual Studio 2015 Update 3 or newer. +You need Microsoft Visual Studio 2017 or more recent. You can download the free Visual Studio Community Edition from Microsoft at https://visualstudio.microsoft.com/vs/community/. @@ -56,86 +57,94 @@ To install both the x64 (64bit) and x86 (32bit) variants (though only one is nec .\vcpkg install liblzma:x86-windows-static libpng:x86-windows-static lzo:x86-windows-static zlib:x86-windows-static ``` -Open the relevant project file and it should build automatically. -- VS 2015: projects/openttd_vs140.sln -- VS 2017: projects/openttd_vs141.sln -- VS 2019: projects/openttd_vs142.sln +You can open the folder (as a CMake project). CMake will be detected, and you can compile from there. +If libraries are installed but not found, you need to set VCPKG_TARGET_TRIPLET in CMake parameters. +For Visual Studio 2017 you also need to set CMAKE_TOOLCHAIN_FILE. +(Typical values are shown in the MSVC project file command line example) -Set the build mode to `Release` in -`Build > Configuration manager > Active solution configuration`. -You can now compile. +Alternatively, you can create a MSVC project file via CMake. For this +either download CMake from https://cmake.org/download/ or use the version +that comes with vcpkg. After that, you can run something similar to this: -If everything works well the binary should be in `objs\Win[32|64]\Release\openttd.exe` -and in `bin\openttd.exe` +```powershell +mkdir build +cd build +cmake.exe .. -G'Visual Studio 16 2019' -DCMAKE_TOOLCHAIN_FILE="\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="x64-windows-static" +``` -The OpenTTD wiki may provide additional help with [compiling for Windows](https://wiki.openttd.org/Compiling_on_Windows_using_Microsoft_Visual_C%2B%2B_2015). +Change `` to where you have installed vcpkg. After this +in the build folder are MSVC project files. MSVC can rebuild the project +files himself via the `ZERO_CHECK` project. -You can also build OpenTTD with MSYS2/MinGW-w64 or Cygwin/MinGW using the Makefile. The OpenTTD wiki may provide additional help with [MSYS2](https://wiki.openttd.org/Compiling_on_Windows_using_MSYS2) +## All other platforms +Minimum required version of CMake is 3.9. +By default this produces a Debug build with assertations enabled. +This is a far slower build than release builds. -## Linux, Unix, Solaris: +```bash +mkdir build +cd build +cmake .. +make +``` -OpenTTD can be built with GNU '`make`'. On non-GNU systems it is called '`gmake`'. -However, for the first build one has to do a '`./configure`' first. +For more information on how to use CMake (including how to make Release builds), +we urge you to read [their excellent manual](https://cmake.org/cmake/help/latest/guide/user-interaction/index.html). -The OpenTTD wiki may provide additional help with: +## CMake Options -- [compiling for Linux and *BSD](https://wiki.openttd.org/Compiling_on_%28GNU/%29Linux_and_*BSD) -- [compiling for Solaris](https://wiki.openttd.org/Compiling_on_Solaris) +Via CMake, several options can be influenced to get different types of +builds. - -## macOS: - -Use '`make`' or Xcode (which will then call make for you) -This will give you a binary for your CPU type (PPC/Intel) -However, for the first build one has to do a '`./configure`' first. -To make a universal binary type '`./configure --enable-universal`' -instead of '`./configure`'. - -The OpenTTD wiki may provide additional help with [compiling for macOS](https://wiki.openttd.org/Compiling_on_Mac_OS_X). - -## Haiku: - -Use '`make`', but do a '`./configure`' before the first build. - -The OpenTTD wiki may provide additional help with [compiling for Haiku](https://wiki.openttd.org/Compiling_on_Haiku). - -## OS/2: - -A comprehensive GNU build environment is required to build the OS/2 version. - -The OpenTTD wiki may provide additional help with [compiling for OS/2](https://wiki.openttd.org/Compiling_on_OS/2). +- `-DCMAKE_BUILD_TYPE=RelWithDebInfo`: build a release build. This is + significant faster than a debug build, but has far less useful information + in case of a crash. +- `-DOPTION_DEDICATED=ON`: build OpenTTD without a GUI. Useful if you are + running a headless server, as it requires less libraries to operate. +- `-DOPTION_USE_ASSERTS=OFF`: disable asserts. Use with care, as assert + statements capture early signs of trouble. Release builds have them + disabled by default. +- `-DOPTION_USE_THREADS=OFF`: disable the use of threads. This will block + the interface in many places, and in general gives a worse experience of + the game. Use with care. +- `-DOPTION_TOOLS_ONLY=ON`: only build tools like `strgen`. Does not build + the game itself. Useful for cross-compiling. ## Supported compilers -The following compilers are tested with and known to compile OpenTTD: - -- Microsoft Visual C++ (MSVC) 2015, 2017 and 2019. -- GNU Compiler Collection (GCC) 4.8 - 9. -- Clang/LLVM 3.9 - 8 - -The following compilers are known not to compile OpenTTD: - -In general, this is because these old versions do not (fully) support modern -C++11 language features. - -- Microsoft Visual C++ (MSVC) 2013 and earlier. -- GNU Compiler Collection (GCC) 4.7 and earlier. -- Clang/LLVM 3.8 and earlier. - -If any of these, or any other, compilers can compile OpenTTD, let us know. -Pull requests to support more compilers are welcome. +Every compiler that is supported by CMake and supports C++17, should be +able to compile OpenTTD. As the exact list of compilers changes constantly, +we refer to the compiler manual to see if it supports C++17, and to CMake +to see if it supports your compiler. ## Compilation of base sets To recompile the extra graphics needed to play with the original Transport Tycoon Deluxe graphics you need GRFCodec (which includes NFORenum) as well. -GRFCodec can be found at https://www.openttd.org/download-grfcodec. -The compilation of these extra graphics does generally not happen, unless -you remove the graphics file using '`make maintainer-clean`'. +GRFCodec can be found at +https://www.openttd.org/downloads/grfcodec-releases/latest.html. -Re-compilation of the base sets, thus also use of '`--maintainer-clean`' can -leave the repository in a modified state as different grfcodec versions can -cause binary differences in the resulting grf. Also translations might have -been added for the base sets which are not yet included in the base set -information files. Use the configure option '`--without-grfcodec`' to avoid -modification of the base set files by the build process. +Having GRFCodec installed can cause regeneration of the `.grf` files, which +are written in the source directory. This can leave your repository in a +modified state, as different GRFCodec versions can cause binary differences +in the resulting `.grf` files. Also translations might have been added for +the base sets which are not yet included in the base set information files. +To avoid this behaviour, disable GRFCodec (and NFORenum) in CMake cache +(`GRFCODEC_EXECUTABLE` and `NFORENUM_EXECUTABLE`). + +## Developers settings + +You can control some flags directly via `CXXFLAGS` (any combination +of these flags will work fine too): + +- `-DRANDOM_DEBUG`: this helps with debugging desyncs. +- `-fno-inline`: this avoids creating inline functions; this can make + debugging a lot easier. +- `-O0`: this disables all optimizations; this can make debugging a + lot easier. +- `-p`: this enables profiling. + +Always use a clean buildfolder if you changing `CXXFLAGS`, as this +value is otherwise cached. Example use: + +`CXXFLAGS="-fno-inline" cmake ..` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 40aad630c8..1ad85d0918 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,7 +14,7 @@ In return, they should reciprocate that respect in addressing your issue or asse The [issue tracker](https://github.com/OpenTTD/OpenTTD/issues) is the preferred channel for [bug reports](#bug-reports), but please respect the following restrictions: * Please **do not** use the issue tracker for help playing or using OpenTTD. -Please try [irc](https://wiki.openttd.org/IRC_channel), or the [forums](https://www.tt-forums.net/) +Please try [irc](https://wiki.openttd.org/en/Development/IRC%20channel), or the [forums](https://www.tt-forums.net/) * Please **do not** derail or troll issues. Keep the discussion on topic and respect the opinions of others. @@ -23,7 +23,9 @@ Use [GitHub's "reactions" feature](https://github.com/blog/2119-add-reactions-to We reserve the right to delete comments which violate this rule. * Please **do not** open issues or pull requests regarding add-on content in NewGRF, GameScripts, AIs, etc. -These are created by third-parties. Please try [irc](https://wiki.openttd.org/IRC_channel) or the [forums](https://www.tt-forums.net/) to discuss these. +These are created by third-parties. Please try [irc](https://wiki.openttd.org/en/Development/IRC%20channel) or the [forums](https://www.tt-forums.net/) to discuss these. + +* Please use [the web translator](https://translator.openttd.org/) to submit corrections and improvements to translations of the game. ## Bug reports @@ -33,16 +35,16 @@ Good bug reports are extremely helpful, so thanks! Guidelines for bug reports: -0. Please don't report issues with games where you changed NewGRFs. +0. Please don't report issues with games where you changed NewGRFs mid-game. (This can be verified with the `gamelog` console command in-game.) -1. Please don't report issues with modified versions of OpenTTD (patchpacks and similar). +1. Please don't report issues with modified versions of OpenTTD (patchpacks, unofficial ports, and similar). -2. **Use the GitHub issue search** --- check if the issue has already been +2. **Use the GitHub issue search** — check if the issue has already been reported. -3. **Check if the issue has been fixed** --- try to reproduce it using the latest `nightly` build of OpenTTD, available from https://www.openttd.org +3. **Check if the issue has been fixed** — try to reproduce it using the latest `nightly` build of OpenTTD, available from https://www.openttd.org -4. **Isolate the problem** --- ideally create reproduceable steps with an attached savegame and screenshots. Try to use few or no NewGRFs, AIs etc if possible. +4. **Isolate the problem** — ideally create reproducible steps with an attached savegame and screenshots. Try to use few or no NewGRFs, AIs etc if possible. A good bug report shouldn't leave others needing to chase you up for more information. Please try to be as detailed as possible in your report. @@ -92,7 +94,7 @@ Although we really appreciate feedback and ideas, we will close feature requests Many of those ideas etc do have a place on the [forums](https://www.tt-forums.net); and if enough people like it, someone will stand up and make it. -It's usually best discuss in [irc](https://wiki.openttd.org/IRC_channel) before opening a feature request or working on a large feature in a fork. +It's usually best discuss in [irc](https://wiki.openttd.org/en/Development/IRC%20channel) before opening a feature request or working on a large feature in a fork. Discussion in irc can take time, but it can be productive and avoid disappointment :) @@ -106,7 +108,7 @@ Pull requests should fit with the [goals of the project](./CONTRIBUTING.md#proje Every pull request should have a clear scope, with no unrelated commits. -[Code style](https://wiki.openttd.org/Coding_style) must be complied with for pull requests to be accepted; this also includes [commit message format](https://wiki.openttd.org/Coding_style#Commit_message). +[Code style](https://wiki.openttd.org/en/Development/Coding%20style) must be complied with for pull requests to be accepted; this also includes [commit message format](https://wiki.openttd.org/en/Development/Coding%20style#commit-message). Adhering to the following process is the best way to get your work included in the project: @@ -134,7 +136,7 @@ contain your feature, change, or fix: git checkout upstream/master -b ``` -4. Commit your changes in logical chunks. Please adhere to these [git commit message guidelines](https://wiki.openttd.org/Commit_style#Commit_message) or your code is unlikely to be merged into the main project. +4. Commit your changes in logical chunks. Please adhere to these [git commit message guidelines](https://wiki.openttd.org/en/Development/Coding%20style#commit-message) or your code is unlikely to be merged into the main project. Use Git's [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public. 5. Locally rebase the upstream development branch into your topic branch: @@ -170,14 +172,14 @@ The results of the CI tests will show on your pull request. By clicking on Details you can further zoom in; in case of a failure it will show you why it failed. In case of success it will report how awesome you were. -Tip: [commit message format](https://wiki.openttd.org/Coding_style#Commit_message) is a common reason for pull requests to fail validation. +Tip: [commit message format](https://wiki.openttd.org/en/Development/Coding%20style#commit-message) is a common reason for pull requests to fail validation. ### Are there any development docs? There is no single source for OpenTTD development docs. It's a complex project with a long history, and multiple APIs. -A good entry point is [Development](https://wiki.openttd.org/Development) on the OpenTTD wiki; this provides links to wiki documentation and other sources. +A good entry point is [Development](https://wiki.openttd.org/en/Development/) on the OpenTTD wiki; this provides links to wiki documentation and other sources. The GitHub repo also includes some non-comprehensive documentation in [/docs](./docs). diff --git a/CPackProperties.cmake.in b/CPackProperties.cmake.in new file mode 100644 index 0000000000..824c50f93e --- /dev/null +++ b/CPackProperties.cmake.in @@ -0,0 +1,12 @@ +# Make the current version available to CPack +set(CPACK_PACKAGE_VERSION "@REV_VERSION@") + +# Name the output file with the correct version +string(REPLACE "#CPACK_PACKAGE_VERSION#" "@REV_VERSION@" CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}") + +if (CPACK_BUNDLE_PLIST_SOURCE) + # Rewrite the Info.plist.in to contain the correct version + file(READ ${CPACK_BUNDLE_PLIST_SOURCE} INFO_PLIST_CONTENT) + string(REPLACE "#CPACK_PACKAGE_VERSION#" "@REV_VERSION@" INFO_PLIST_CONTENT "${INFO_PLIST_CONTENT}") + file(WRITE ${CPACK_BUNDLE_PLIST} "${INFO_PLIST_CONTENT}") +endif (CPACK_BUNDLE_PLIST_SOURCE) diff --git a/Doxyfile b/Doxyfile.in similarity index 98% rename from Doxyfile rename to Doxyfile.in index e288ffbd87..1068c9b7ba 100644 --- a/Doxyfile +++ b/Doxyfile.in @@ -8,10 +8,10 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "OpenTTD Source" -PROJECT_NUMBER = $(VERSION) +PROJECT_NUMBER = ${REV_VERSION} PROJECT_BRIEF = PROJECT_LOGO = -OUTPUT_DIRECTORY = docs/source/ +OUTPUT_DIRECTORY = ${CPACK_BINARY_DIR}/docs/source/ CREATE_SUBDIRS = YES ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English @@ -290,6 +290,7 @@ INCLUDE_FILE_PATTERNS = PREDEFINED = WITH_ZLIB \ WITH_LZO \ WITH_LIBLZMA \ + WITH_ZSTD \ WITH_SDL \ WITH_PNG \ WITH_FONTCONFIG \ @@ -306,16 +307,14 @@ SKIP_FUNCTION_MACROS = YES # Configuration options related to external references #--------------------------------------------------------------------------- TAGFILES = -GENERATE_TAGFILE = objs/openttd.tag +GENERATE_TAGFILE = ${CPACK_BINARY_DIR}/docs/openttd.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES -PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES -MSCGEN_PATH = DIA_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO diff --git a/Makefile.bundle.in b/Makefile.bundle.in deleted file mode 100644 index f9c8bf09b9..0000000000 --- a/Makefile.bundle.in +++ /dev/null @@ -1,225 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD 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, version 2. -# OpenTTD 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 OpenTTD. If not, see . - -# -# Creation of bundles -# - -# The revision is needed for the bundle name and creating an OSX application bundle. -# Detect the revision -VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh") -VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') - -# Make sure we have something in VERSION -ifeq ($(VERSION),) -VERSION := norev000 -endif - -ifndef BUNDLE_NAME -BUNDLE_NAME = openttd-custom-$(VERSION)-$(OS) -endif - -# An OSX application bundle needs the data files, lang files and openttd executable in a different location. -ifdef OSXAPP -AI_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/ai -DATA_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/data -GAME_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/game -BASESET_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/baseset -LANG_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/lang -TTD_DIR = $(BUNDLE_DIR)/$(OSXAPP)/Contents/MacOS -else -AI_DIR = $(BUNDLE_DIR)/ai -DATA_DIR = $(BUNDLE_DIR)/data -GAME_DIR = $(BUNDLE_DIR)/game -BASESET_DIR = $(BUNDLE_DIR)/baseset -LANG_DIR = $(BUNDLE_DIR)/lang -TTD_DIR = $(BUNDLE_DIR) -endif - -bundle: all - @echo '[BUNDLE] Constructing bundle' - $(Q)rm -rf "$(BUNDLE_DIR)" - $(Q)mkdir -p "$(BUNDLE_DIR)" - $(Q)mkdir -p "$(BUNDLE_DIR)/docs" - $(Q)mkdir -p "$(BUNDLE_DIR)/media" - $(Q)mkdir -p "$(BUNDLE_DIR)/scripts" - $(Q)mkdir -p "$(TTD_DIR)" - $(Q)mkdir -p "$(AI_DIR)" - $(Q)mkdir -p "$(DATA_DIR)" - $(Q)mkdir -p "$(GAME_DIR)" - $(Q)mkdir -p "$(BASESET_DIR)" - $(Q)mkdir -p "$(LANG_DIR)" -ifdef OSXAPP - $(Q)mkdir -p "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources" - $(Q)echo "APPL????" > "$(BUNDLE_DIR)/$(OSXAPP)/Contents/PkgInfo" - $(Q)cp "$(ROOT_DIR)/os/macosx/openttd.icns" "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/openttd.icns" - $(Q)$(ROOT_DIR)/os/macosx/plistgen.sh "$(BUNDLE_DIR)/$(OSXAPP)" "$(VERSION)" - $(Q)cp "$(ROOT_DIR)/os/macosx/splash.png" "$(BASESET_DIR)" -endif -ifeq ($(OS),UNIX) - $(Q)cp "$(ROOT_DIR)/media/openttd.32.bmp" "$(BASESET_DIR)/" -endif - $(Q)cp "$(BIN_DIR)/$(TTD)" "$(TTD_DIR)/" - $(Q)cp "$(BIN_DIR)/ai/"compat_*.nut "$(AI_DIR)/" - $(Q)cp "$(BIN_DIR)/data/"*.grf "$(DATA_DIR)/" - $(Q)cp "$(BIN_DIR)/game/"compat_*.nut "$(GAME_DIR)/" - $(Q)cp "$(BIN_DIR)/baseset/"*.grf "$(BASESET_DIR)/" - $(Q)cp "$(BIN_DIR)/baseset/"*.obg "$(BASESET_DIR)/" - $(Q)cp "$(BIN_DIR)/baseset/"*.obs "$(BASESET_DIR)/" - $(Q)cp "$(BIN_DIR)/baseset/opntitle.dat" "$(BASESET_DIR)/" - $(Q)cp "$(BIN_DIR)/baseset/"*.obm "$(BASESET_DIR)/" - $(Q)cp "$(BIN_DIR)/lang/"*.lng "$(LANG_DIR)/" - $(Q)cp "$(ROOT_DIR)/README.md" "$(BUNDLE_DIR)/" - $(Q)cp "$(ROOT_DIR)/COPYING.md" "$(BUNDLE_DIR)/" - $(Q)cp "$(ROOT_DIR)/known-bugs.txt" "$(BUNDLE_DIR)/" - $(Q)cp "$(ROOT_DIR)/docs/multiplayer.md" "$(BUNDLE_DIR)/docs/" - $(Q)cp "$(ROOT_DIR)/changelog.txt" "$(BUNDLE_DIR)/" -ifdef MAN_DIR - $(Q)mkdir -p "$(BUNDLE_DIR)/man/" - $(Q)cp "$(ROOT_DIR)/docs/openttd.6" "$(BUNDLE_DIR)/man/" - $(Q)gzip -9 "$(BUNDLE_DIR)/man/openttd.6" -endif - $(Q)cp "$(ROOT_DIR)/media/openttd.32.xpm" "$(BUNDLE_DIR)/media/" - $(Q)cp "$(ROOT_DIR)/media/openttd."*.png "$(BUNDLE_DIR)/media/" - $(Q)cp "$(BIN_DIR)/scripts/"* "$(BUNDLE_DIR)/scripts/" -ifdef MENU_DIR - $(Q)cp "$(ROOT_DIR)/media/openttd.desktop" "$(BUNDLE_DIR)/media/" - $(Q)$(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.translation.awk" "$(SRC_DIR)/lang/"*.txt | LC_ALL=C $(SORT) | $(AWK) -f "$(ROOT_DIR)/media/openttd.desktop.filter.awk" >> "$(BUNDLE_DIR)/media/openttd.desktop" - $(Q)sed s/=openttd/=$(BINARY_NAME)/g "$(BUNDLE_DIR)/media/openttd.desktop" > "$(ROOT_DIR)/media/openttd.desktop.install" -endif -ifeq ($(TTD), openttd.exe) - $(Q)unix2dos "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/README.md" "$(BUNDLE_DIR)/COPYING.md" "$(BUNDLE_DIR)/changelog.txt" "$(BUNDLE_DIR)/known-bugs.txt" -endif - -### Packing the current bundle into several compressed file formats ### -# -# Zips & dmgs do not contain a root folder, i.e. they have files in the root of the zip/dmg. -# gzip, bzip2 and lha archives have a root folder, with the same name as the bundle. -# -# One can supply a custom name by adding BUNDLE_NAME:= to the make command. -# -bundle_zip: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).zip' - $(Q)mkdir -p "$(BUNDLES_DIR)" - $(Q)cd "$(BUNDLE_DIR)" && zip -r $(shell if test -z "$(VERBOSE)"; then echo '-q'; fi) "$(BUNDLES_DIR)/$(BUNDLE_NAME).zip" . - -bundle_7z: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).7z' - $(Q)mkdir -p "$(BUNDLES_DIR)" - $(Q)cd "$(BUNDLE_DIR)" && 7z a "$(BUNDLES_DIR)/$(BUNDLE_NAME).7z" . - -bundle_gzip: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).tar.gz' - $(Q)mkdir -p "$(BUNDLES_DIR)/.gzip/$(BUNDLE_NAME)" - $(Q)cp -R "$(BUNDLE_DIR)/"* "$(BUNDLES_DIR)/.gzip/$(BUNDLE_NAME)/" - $(Q)cd "$(BUNDLES_DIR)/.gzip" && tar -zc$(shell if test -n "$(VERBOSE)"; then echo 'v'; fi)f "$(BUNDLES_DIR)/$(BUNDLE_NAME).tar.gz" "$(BUNDLE_NAME)" - $(Q)rm -rf "$(BUNDLES_DIR)/.gzip" - -bundle_bzip2: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).tar.bz2' - $(Q)mkdir -p "$(BUNDLES_DIR)/.bzip2/$(BUNDLE_NAME)" - $(Q)cp -R "$(BUNDLE_DIR)/"* "$(BUNDLES_DIR)/.bzip2/$(BUNDLE_NAME)/" - $(Q)cd "$(BUNDLES_DIR)/.bzip2" && tar -jc$(shell if test -n "$(VERBOSE)"; then echo 'v'; fi)f "$(BUNDLES_DIR)/$(BUNDLE_NAME).tar.bz2" "$(BUNDLE_NAME)" - $(Q)rm -rf "$(BUNDLES_DIR)/.bzip2" - -bundle_lzma: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).tar.lzma' - $(Q)mkdir -p "$(BUNDLES_DIR)/.lzma/$(BUNDLE_NAME)" - $(Q)cp -R "$(BUNDLE_DIR)/"* "$(BUNDLES_DIR)/.lzma/$(BUNDLE_NAME)/" - $(Q)cd "$(BUNDLES_DIR)/.lzma" && tar --lzma -c$(shell if test -n "$(VERBOSE)"; then echo 'v'; fi)f "$(BUNDLES_DIR)/$(BUNDLE_NAME).tar.lzma" "$(BUNDLE_NAME)" - $(Q)rm -rf "$(BUNDLES_DIR)/.lzma" - -bundle_xz: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).tar.xz' - $(Q)mkdir -p "$(BUNDLES_DIR)/.xz/$(BUNDLE_NAME)" - $(Q)cp -R "$(BUNDLE_DIR)/"* "$(BUNDLES_DIR)/.xz/$(BUNDLE_NAME)/" - $(Q)cd "$(BUNDLES_DIR)/.xz" && tar --xz -c$(shell if test -n "$(VERBOSE)"; then echo 'v'; fi)f "$(BUNDLES_DIR)/$(BUNDLE_NAME).tar.xz" "$(BUNDLE_NAME)" - $(Q)rm -rf "$(BUNDLES_DIR)/.xz" - -bundle_lha: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).lha' - $(Q)mkdir -p "$(BUNDLES_DIR)/.lha/$(BUNDLE_NAME)" - $(Q)cp -R "$(BUNDLE_DIR)/"* "$(BUNDLES_DIR)/.lha/$(BUNDLE_NAME)/" - $(Q)cd "$(BUNDLES_DIR)/.lha" && lha ao6 "$(BUNDLES_DIR)/$(BUNDLE_NAME).lha" "$(BUNDLE_NAME)" - $(Q)rm -rf "$(BUNDLES_DIR)/.lha" - -bundle_dmg: bundle - @echo '[BUNDLE] Creating $(BUNDLE_NAME).dmg' - $(Q)mkdir -p "$(BUNDLES_DIR)/OpenTTD $(VERSION)" - $(Q)cp -R "$(BUNDLE_DIR)/" "$(BUNDLES_DIR)/OpenTTD $(VERSION)" - $(Q)hdiutil create -ov -format UDZO -srcfolder "$(BUNDLES_DIR)/OpenTTD $(VERSION)" "$(BUNDLES_DIR)/$(BUNDLE_NAME).dmg" - $(Q)rm -fr "$(BUNDLES_DIR)/OpenTTD $(VERSION)" - -bundle_exe: all - @echo '[BUNDLE] Creating $(BUNDLE_NAME).exe' - $(Q)mkdir -p "$(BUNDLES_DIR)" - $(Q)unix2dos "$(ROOT_DIR)/docs/"* "$(ROOT_DIR)/README.md" "$(ROOT_DIR)/COPYING.md" "$(ROOT_DIR)/changelog.txt" "$(ROOT_DIR)/known-bugs.txt" - $(Q)cd $(ROOT_DIR)/os/windows/installer && makensis.exe //DVERSION_INCLUDE=version_$(PLATFORM).txt install.nsi - $(Q)mv $(ROOT_DIR)/os/windows/installer/*$(PLATFORM).exe "$(BUNDLES_DIR)/$(BUNDLE_NAME).exe" - -ifdef OSXAPP -install: - @echo '[INSTALL] Cannot install the OSX Application Bundle' -else -install: bundle - @echo '[INSTALL] Installing OpenTTD' - $(Q)install -d "$(INSTALL_BINARY_DIR)" - $(Q)install -d "$(INSTALL_ICON_DIR)" - $(Q)install -d "$(INSTALL_DATA_DIR)/ai" - $(Q)install -d "$(INSTALL_DATA_DIR)/game" - $(Q)install -d "$(INSTALL_DATA_DIR)/baseset" - $(Q)install -d "$(INSTALL_DATA_DIR)/lang" - $(Q)install -d "$(INSTALL_DATA_DIR)/scripts" -ifeq ($(TTD), openttd.exe) - $(Q)install -m 755 "$(BUNDLE_DIR)/$(TTD)" "$(INSTALL_BINARY_DIR)/${BINARY_NAME}.exe" -else - $(Q)install -m 755 "$(BUNDLE_DIR)/$(TTD)" "$(INSTALL_BINARY_DIR)/${BINARY_NAME}" -endif - $(Q)install -m 644 "$(BUNDLE_DIR)/lang/"* "$(INSTALL_DATA_DIR)/lang" - $(Q)install -m 644 "$(BUNDLE_DIR)/ai/"* "$(INSTALL_DATA_DIR)/ai" - $(Q)install -m 644 "$(BUNDLE_DIR)/game/"* "$(INSTALL_DATA_DIR)/game" - $(Q)install -m 644 "$(BUNDLE_DIR)/baseset/"* "$(INSTALL_DATA_DIR)/baseset" - $(Q)install -m 644 "$(BUNDLE_DIR)/scripts/"* "$(INSTALL_DATA_DIR)/scripts" -ifndef DO_NOT_INSTALL_DOCS - $(Q)install -d "$(INSTALL_DOC_DIR)" - $(Q)install -m 644 "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/README.md" "$(BUNDLE_DIR)/known-bugs.txt" "$(INSTALL_DOC_DIR)" -endif -ifndef DO_NOT_INSTALL_CHANGELOG - $(Q)install -d "$(INSTALL_DOC_DIR)" - $(Q)install -m 644 "$(BUNDLE_DIR)/changelog.txt" "$(INSTALL_DOC_DIR)" -endif -ifndef DO_NOT_INSTALL_LICENSE - $(Q)install -d "$(INSTALL_DOC_DIR)" - $(Q)install -m 644 "$(BUNDLE_DIR)/COPYING.md" "$(INSTALL_DOC_DIR)" -endif - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.32.xpm" "$(INSTALL_ICON_DIR)/${BINARY_NAME}.32.xpm" -ifdef ICON_THEME_DIR - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/16x16/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.16.png" "$(INSTALL_ICON_THEME_DIR)/16x16/apps/${BINARY_NAME}.png" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/32x32/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.32.png" "$(INSTALL_ICON_THEME_DIR)/32x32/apps/${BINARY_NAME}.png" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/48x48/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.48.png" "$(INSTALL_ICON_THEME_DIR)/48x48/apps/${BINARY_NAME}.png" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/64x64/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.64.png" "$(INSTALL_ICON_THEME_DIR)/64x64/apps/${BINARY_NAME}.png" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/128x128/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.128.png" "$(INSTALL_ICON_THEME_DIR)/128x128/apps/${BINARY_NAME}.png" - $(Q)install -d "$(INSTALL_ICON_THEME_DIR)/256x256/apps" - $(Q)install -m 644 "$(BUNDLE_DIR)/media/openttd.256.png" "$(INSTALL_ICON_THEME_DIR)/256x256/apps/${BINARY_NAME}.png" -else - $(Q)install -m 644 "$(BUNDLE_DIR)/media/"*.png "$(INSTALL_ICON_DIR)" -endif -ifdef MAN_DIR -ifndef DO_NOT_INSTALL_MAN - $(Q)install -d "$(INSTALL_MAN_DIR)" - $(Q)install -m 644 "$(BUNDLE_DIR)/man/openttd.6.gz" "$(INSTALL_MAN_DIR)/${BINARY_NAME}.6.gz" -endif -endif -ifdef MENU_DIR - $(Q)install -d "$(INSTALL_MENU_DIR)" - $(Q)install -m 644 "$(ROOT_DIR)/media/openttd.desktop.install" "$(INSTALL_MENU_DIR)/${BINARY_NAME}.desktop" -endif -endif # OSXAPP diff --git a/Makefile.grf.in b/Makefile.grf.in deleted file mode 100644 index be382d708d..0000000000 --- a/Makefile.grf.in +++ /dev/null @@ -1,116 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD 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, version 2. -# OpenTTD 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 OpenTTD. If not, see . -# -# Building requires GRFCodec. -# -# Recent versions (including sources) can be found at: -# http://www.openttd.org/download-grfcodec -# -# The mercurial repository can be found at: -# http://hg.openttdcoop.org/grfcodec -# - - -ROOT_DIR = !!ROOT_DIR!! -GRF_DIR = $(ROOT_DIR)/media/extra_grf -BASESET_DIR = $(ROOT_DIR)/media/baseset -LANG_DIR = $(ROOT_DIR)/src/lang -BIN_DIR = !!BIN_DIR!!/baseset -OBJS_DIR = !!GRF_OBJS_DIR!! -OS = !!OS!! -STAGE = !!STAGE!! - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = - E = @true -else - Q = @ - E = @echo -endif - -GRFCODEC := !!GRFCODEC!! -NFORENUM := !!NFORENUM!! -CC_BUILD := !!CC_BUILD!! -MD5SUM := $(shell [ "$(OS)" = "OSX" ] && echo "md5 -r" || echo "md5sum") - -# Some "should not be changed" settings. -NFO_FILES := $(GRF_DIR)/*.nfo $(GRF_DIR)/rivers/*.nfo -PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png - -# List of target files. -OBT_FILES := $(BIN_DIR)/orig_dos.obg -OBT_FILES += $(BIN_DIR)/orig_dos_de.obg -OBT_FILES += $(BIN_DIR)/orig_win.obg -OBT_FILES += $(BIN_DIR)/orig_dos.obs -OBT_FILES += $(BIN_DIR)/orig_win.obs -OBT_FILES += $(BIN_DIR)/no_sound.obs -OBT_FILES += $(BIN_DIR)/orig_dos.obm -OBT_FILES += $(BIN_DIR)/orig_win.obm -OBT_FILES += $(BIN_DIR)/no_music.obm -OBT_FILES += $(BIN_DIR)/orig_tto.obm - -# Build the GRF. -all: $(OBT_FILES) -ifdef GRFCODEC -all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_extra.grf -endif - -$(OBJS_DIR)/langfiles.tmp: $(LANG_DIR)/*.txt - $(E) '$(STAGE) Collecting baseset translations' - $(Q) cat $^ > $@ - -$(BIN_DIR)/%.obg: $(BASESET_DIR)/%.obg $(BIN_DIR)/orig_extra.grf $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk - $(E) '$(STAGE) Updating $(notdir $@)' - $(Q) sed 's/^ORIG_EXTRA.GRF = *[0-9a-f]*$$/ORIG_EXTRA.GRF = '`$(MD5SUM) $(BIN_DIR)/orig_extra.grf | sed 's@ .*@@'`'/' $< > $@.tmp - $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $@.tmp >$@ - $(Q) rm $@.tmp - -$(BIN_DIR)/%.obs: $(BASESET_DIR)/%.obs $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk - $(E) '$(STAGE) Updating $(notdir $@)' - $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@ - -$(BIN_DIR)/%.obm: $(BASESET_DIR)/%.obm $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/translations.awk - $(E) '$(STAGE) Updating $(notdir $@)' - $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@ - -# Guard against trying to run GRFCODEC/NFORENUM without either being set. -ifdef GRFCODEC -ifdef NFORENUM - -# Compile extra grf -$(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk - $(E) '$(STAGE) Assembling openttd.nfo' - $(Q)-mkdir -p $(OBJS_DIR)/sprites - $(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null - $(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/openttd.nfo > $(OBJS_DIR)/sprites/openttd.nfo - $(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/openttd.nfo - $(E) '$(STAGE) Compiling openttd.grf' - $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/openttd.grf - $(Q)cp $(OBJS_DIR)/openttd.grf $(BIN_DIR)/openttd.grf - -# The copy operation of PNG_FILES is duplicated from the target 'openttd.grf', thus those targets may not run in parallel. -$(BIN_DIR)/orig_extra.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk | $(BIN_DIR)/openttd.grf - $(E) '$(STAGE) Assembling orig_extra.nfo' - $(Q)-mkdir -p $(OBJS_DIR)/sprites - $(Q)-cp $(PNG_FILES) $(OBJS_DIR)/sprites 2> /dev/null - $(Q) awk -f $(GRF_DIR)/assemble_nfo.awk $(GRF_DIR)/orig_extra.nfo > $(OBJS_DIR)/sprites/orig_extra.nfo - $(Q) $(NFORENUM) -s $(OBJS_DIR)/sprites/orig_extra.nfo - $(E) '$(STAGE) Compiling orig_extra.grf' - $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/orig_extra.grf - $(Q)cp $(OBJS_DIR)/orig_extra.grf $(BIN_DIR)/orig_extra.grf - -endif -endif - -# Clean up temporary files. -clean: - $(Q)rm -f *.bak *.grf $(OBT_FILES) - -# Clean up temporary files -mrproper: clean - $(Q)rm -fr sprites - -.PHONY: all mrproper depend clean diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index 38d7f53294..0000000000 --- a/Makefile.in +++ /dev/null @@ -1,185 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD 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, version 2. -# OpenTTD 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 OpenTTD. If not, see . - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = -else - Q = @ -endif - -include Makefile.am - -CONFIG_CACHE_PWD = !!CONFIG_CACHE_PWD!! -CONFIG_CACHE_SOURCE_LIST = !!CONFIG_CACHE_SOURCE_LIST!! -BIN_DIR = !!BIN_DIR!! -ICON_THEME_DIR = !!ICON_THEME_DIR!! -MAN_DIR = !!MAN_DIR!! -MENU_DIR = !!MENU_DIR!! -SRC_DIR = !!SRC_DIR!! -ROOT_DIR = !!ROOT_DIR!! -BUNDLE_DIR = "$(ROOT_DIR)/bundle" -BUNDLES_DIR = "$(ROOT_DIR)/bundles" -INSTALL_DIR = !!INSTALL_DIR!! -INSTALL_BINARY_DIR = "$(INSTALL_DIR)/"!!BINARY_DIR!! -INSTALL_MAN_DIR = "$(INSTALL_DIR)/$(MAN_DIR)" -INSTALL_MENU_DIR = "$(INSTALL_DIR)/$(MENU_DIR)" -INSTALL_ICON_DIR = "$(INSTALL_DIR)/"!!ICON_DIR!! -INSTALL_ICON_THEME_DIR = "$(INSTALL_DIR)/$(ICON_THEME_DIR)" -INSTALL_DATA_DIR = "$(INSTALL_DIR)/"!!DATA_DIR!! -INSTALL_DOC_DIR = "$(INSTALL_DIR)/"!!DOC_DIR!! -SOURCE_LIST = !!SOURCE_LIST!! -CONFIGURE_FILES = !!CONFIGURE_FILES!! -BINARY_NAME = !!BINARY_NAME!! -STRIP = !!STRIP!! -TTD = !!TTD!! -TTDS = $(SRC_DIRS:%=%/$(TTD)) -OS = !!OS!! -OSXAPP = !!OSXAPP!! -LIPO = !!LIPO!! -AWK = !!AWK!! -SORT = !!SORT!! -DISTCC = !!DISTCC!! - -RES := $(shell if [ ! -f $(CONFIG_CACHE_PWD) ] || [ "`pwd`" != "`cat $(CONFIG_CACHE_PWD)`" ]; then echo "`pwd`" > $(CONFIG_CACHE_PWD); fi ) -RES := $(shell if [ ! -f $(CONFIG_CACHE_SOURCE_LIST) ] || [ -n "`cmp $(CONFIG_CACHE_SOURCE_LIST) $(SOURCE_LIST) 2>/dev/null`" ]; then cp $(SOURCE_LIST) $(CONFIG_CACHE_SOURCE_LIST); fi ) - -all: config.pwd config.cache -ifdef DISTCC - @if [ -z "`echo '$(MFLAGS)' | grep '\-j'`" ]; then echo; echo "WARNING: you enabled distcc support, but you don't seem to be using the -jN parameter"; echo; fi -endif - @for dir in $(DIRS); do \ - $(MAKE) -C $$dir all || exit 1; \ - done -ifdef LIPO -# Lipo is an OSX thing. If it is defined, it means we are building for universal, -# and so we have have to combine the binaries into one big binary - -# Remove the last binary made by the last compiled target - $(Q)rm -f $(BIN_DIR)/$(TTD) -# Make all the binaries into one - $(Q)$(LIPO) -create -output $(BIN_DIR)/$(TTD) $(TTDS) -endif - -help: - @echo "Available make commands:" - @echo "" - @echo "Compilation:" - @echo " all compile the executable and the lang files" - @echo " lang compile the lang files only" - @echo "Clean up:" - @echo " clean remove the files generated during compilation" - @echo " mrproper remove the files generated during configuration and compilation" - @echo "Run after compilation:" - @echo " run execute openttd after the compilation" - @echo " run-gdb execute openttd in debug mode after the compilation" - @echo " run-prof execute openttd in profiling mode after the compilation" - @echo "Installation:" - @echo " install install the compiled files and the data-files after the compilation" - @echo " bundle create the base for an installation bundle" - @echo " bundle_zip create the zip installation bundle" - @echo " bundle_gzip create the gzip installation bundle" - @echo " bundle_bzip2 create the bzip2 installation bundle" - @echo " bundle_lha create the lha installation bundle" - @echo " bundle_dmg create the dmg installation bundle" - -config.pwd: $(CONFIG_CACHE_PWD) - $(MAKE) reconfigure - -config.cache: $(CONFIG_CACHE_SOURCE_LIST) $(CONFIGURE_FILES) - $(MAKE) reconfigure - -reconfigure: -ifeq ($(shell if test -f config.cache; then echo 1; fi), 1) - @echo "----------------" - @echo "The system detected that source.list or any configure file is altered." - @echo " Going to reconfigure with last known settings..." - @echo "----------------" -# Make sure we don't lock config.cache - @$(shell cat config.cache | sed 's@\\ @\\\\ @g') || exit 1 - @echo "----------------" - @echo "Reconfig done. Please re-execute make." - @echo "----------------" -else - @echo "----------------" - @echo "Have not found a configuration, please run configure first." - @echo "----------------" - @exit 1 -endif - -clean: - @for dir in $(DIRS); do \ - $(MAKE) -C $$dir clean; \ - done - $(Q)rm -rf $(BUNDLE_TARGET) - -lang: - @for dir in $(LANG_DIRS); do \ - $(MAKE) -C $$dir all; \ - done - -mrproper: - @for dir in $(DIRS); do \ - $(MAKE) -C $$dir mrproper; \ - done -# Don't be tempted to merge these two for loops. Doing that breaks make -# --dry-run, since make has this "feature" that it always runs commands -# containing $(MAKE), even when --dry-run is passed. The objective is of -# course to also get a dry-run of submakes, but make is not smart enough -# to see that a for loop runs both a submake and an actual command. - @for dir in $(DIRS); do \ - rm -f $$dir/Makefile; \ - done - $(Q)rm -rf objs - $(Q)rm -f Makefile Makefile.am Makefile.bundle - $(Q)rm -f media/openttd.desktop media/openttd.desktop.install - $(Q)rm -f $(CONFIG_CACHE_SOURCE_LIST) config.cache config.pwd config.log $(CONFIG_CACHE_PWD) -# directories for bundle generation - $(Q)rm -rf $(BUNDLE_DIR) - $(Q)rm -rf $(BUNDLES_DIR) -# output of profiling - $(Q)rm -f $(BIN_DIR)/gmon.out -# output of generating 'API' documentation - $(Q)rm -rf $(ROOT_DIR)/docs/source - $(Q)rm -rf $(ROOT_DIR)/docs/aidocs - $(Q)rm -rf $(ROOT_DIR)/docs/gamedocs -# directories created by OpenTTD on regression testing - $(Q)rm -rf $(BIN_DIR)/ai/regression/content_download $(BIN_DIR)/ai/regression/save $(BIN_DIR)/ai/regression/scenario -distclean: mrproper - -maintainer-clean: distclean - $(Q)rm -f $(BIN_DIR)/baseset/openttd.grf $(BIN_DIR)/baseset/orig_extra.grf $(BIN_DIR)/baseset/*.obg $(BIN_DIR)/baseset/*.obs $(BIN_DIR)/baseset/*.obm - -depend: - @for dir in $(SRC_DIRS); do \ - $(MAKE) -C $$dir depend; \ - done - -run: all - $(Q)cd !!BIN_DIR!! && ./!!TTD!! $(OPENTTD_ARGS) - -run-gdb: all - $(Q)cd !!BIN_DIR!! && gdb --ex run --args ./!!TTD!! $(OPENTTD_ARGS) - -run-prof: all - $(Q)cd !!BIN_DIR!! && ./!!TTD!! $(OPENTTD_ARGS) && gprof !!TTD!! | less - -regression: all - $(Q)cd !!BIN_DIR!! && sh ai/regression/run.sh -test: regression - -%.o: - @for dir in $(SRC_DIRS); do \ - $(MAKE) -C $$dir $(@:src/%=%); \ - done - -%.lng: - @for dir in $(LANG_DIRS); do \ - $(MAKE) -C $$dir $@; \ - done - -.PHONY: test distclean mrproper clean - -include Makefile.bundle diff --git a/Makefile.lang.in b/Makefile.lang.in deleted file mode 100644 index bce43b8466..0000000000 --- a/Makefile.lang.in +++ /dev/null @@ -1,87 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD 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, version 2. -# OpenTTD 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 OpenTTD. If not, see . - -STRGEN = !!STRGEN!! -SRC_DIR = !!SRC_DIR!! -LANG_DIR = !!LANG_DIR!! -BIN_DIR = !!BIN_DIR!! -LANGS_SRC = $(shell ls $(LANG_DIR)/*.txt) -LANGS = $(LANGS_SRC:$(LANG_DIR)/%.txt=%.lng) -CXX_BUILD = !!CXX_BUILD!! -CFLAGS_BUILD = !!CFLAGS_BUILD!! -CXXFLAGS_BUILD= !!CXXFLAGS_BUILD!! -LDFLAGS_BUILD = !!LDFLAGS_BUILD!! -STRGEN_FLAGS = !!STRGEN_FLAGS!! -STAGE = !!STAGE!! -LANG_SUPPRESS = !!LANG_SUPPRESS!! -LANG_OBJS_DIR = !!LANG_OBJS_DIR!! - -ifeq ($(LANG_SUPPRESS), yes) -LANG_ERRORS = >/dev/null 2>&1 -endif - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = - E = @true -else - Q = @ - E = @echo -endif - -RES := $(shell mkdir -p $(BIN_DIR)/lang ) - -all: table/strings.h $(LANGS) - -strgen_base.o: $(SRC_DIR)/strgen/strgen_base.cpp $(SRC_DIR)/strgen/strgen.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< - -strgen.o: $(SRC_DIR)/strgen/strgen.cpp $(SRC_DIR)/strgen/strgen.h $(SRC_DIR)/table/control_codes.h $(SRC_DIR)/table/strgen_tables.h $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< - -string.o: $(SRC_DIR)/string.cpp $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< - -alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< - -getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSTRGEN -c -o $@ $< - -lang/english.txt: $(LANG_DIR)/english.txt - $(Q)mkdir -p lang - $(Q)cp $(LANG_DIR)/english.txt lang/english.txt - -$(STRGEN): alloc_func.o string.o strgen_base.o strgen.o getoptdata.o - $(E) '$(STAGE) Compiling and Linking $@' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) $^ -o $@ - -table/strings.h: lang/english.txt $(STRGEN) - $(E) '$(STAGE) Generating $@' - @mkdir -p table - $(Q)./$(STRGEN) -s $(LANG_DIR) -d table - -$(LANGS): %.lng: $(LANG_DIR)/%.txt $(STRGEN) lang/english.txt - $(E) '$(STAGE) Compiling language $(*F)' - $(Q)./$(STRGEN) $(STRGEN_FLAGS) -s $(LANG_DIR) -d $(LANG_OBJS_DIR) $< $(LANG_ERRORS) && cp $@ $(BIN_DIR)/lang || true # Do not fail all languages when one fails - -depend: - -clean: - $(E) '$(STAGE) Cleaning up language files' - $(Q)rm -f strgen_base.o strgen.o string.o alloc_func.o getoptdata.o table/strings.h $(STRGEN) $(LANGS) $(LANGS:%=$(BIN_DIR)/lang/%) lang/english.* - -mrproper: clean - $(Q)rm -rf $(BIN_DIR)/lang - -%.lng: - @echo '$(STAGE) No such language: $(@:%.lng=%)' - -.PHONY: all mrproper depend clean diff --git a/Makefile.msvc b/Makefile.msvc deleted file mode 100644 index 8070062acf..0000000000 --- a/Makefile.msvc +++ /dev/null @@ -1,45 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD 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, version 2. -# OpenTTD 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 OpenTTD. If not, see . - -# -# Makefile for creating bundles of MSVC's binaries in the same way as we make -# the zip bundles for ALL other OSes. -# -# Usage: make -f Makefile.msvc PLATFORM=[Win32|x64] BUNDLE_NAME=openttd--win[32|64] -# or make -f Makefile.msvc PLATFORM=[Win32|x64] BUNDLE_NAME=OTTD-win[32|64]-nightly- -# - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = -else - Q = @ -endif - -AWK = "awk" -ROOT_DIR := $(shell pwd) -BIN_DIR = "$(ROOT_DIR)/bin" -SRC_DIR = "$(ROOT_DIR)/src" -BUNDLE_DIR = "$(ROOT_DIR)/bundle" -BUNDLES_DIR = "$(ROOT_DIR)/bundles" -TTD = openttd.exe -PDB = openttd.pdb -MODE = Release -TARGET := $(shell echo $(PLATFORM) | sed "s@win64@x64@;s@win32@Win32@") - -all: - $(Q)cp objs/$(TARGET)/$(MODE)/$(TTD) $(BIN_DIR)/$(TTD) - -include Makefile.bundle.in - -bundle_pdb: - @echo '[BUNDLE] Creating $(BUNDLE_NAME).pdb.xz' - $(Q)mkdir -p "$(BUNDLES_DIR)" - $(Q)cp objs/$(TARGET)/Release/$(PDB) $(BUNDLES_DIR)/$(BUNDLE_NAME).pdb - $(Q)xz -9 $(BUNDLES_DIR)/$(BUNDLE_NAME).pdb - -regression: all - $(Q)cp bin/$(TTD) bin/openttd - $(Q)cd bin && sh ai/regression/run.sh diff --git a/Makefile.setting.in b/Makefile.setting.in deleted file mode 100644 index 987a882db1..0000000000 --- a/Makefile.setting.in +++ /dev/null @@ -1,63 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD 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, version 2. -# OpenTTD 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 OpenTTD. If not, see . - -SETTINGSGEN = !!SETTINGSGEN!! -SRC_DIR = !!SRC_DIR!! -CXX_BUILD = !!CXX_BUILD!! -CFLAGS_BUILD = !!CFLAGS_BUILD!! -CXXFLAGS_BUILD = !!CXXFLAGS_BUILD!! -LDFLAGS_BUILD = !!LDFLAGS_BUILD!! -STAGE = !!STAGE!! -SETTING_OBJS_DIR = !!SETTING_OBJS_DIR!! - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = - E = @true -else - Q = @ - E = @echo -endif - -all: table/settings.h - -settingsgen.o: $(SRC_DIR)/settingsgen/settingsgen.cpp $(SRC_DIR)/string_func.h $(SRC_DIR)/strings_type.h $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/ini_type.h $(SRC_DIR)/core/smallvec_type.hpp $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< - -alloc_func.o: $(SRC_DIR)/core/alloc_func.cpp $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< - -getoptdata.o: $(SRC_DIR)/misc/getoptdata.cpp $(SRC_DIR)/misc/getoptdata.h $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/misc/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< - -string.o: $(SRC_DIR)/string.cpp $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< - -ini_load.o: $(SRC_DIR)/ini_load.cpp $(SRC_DIR)/core/alloc_func.hpp $(SRC_DIR)/core/mem_func.hpp $(SRC_DIR)/ini_type.h $(SRC_DIR)/string_func.h $(SRC_DIR)/safeguards.h - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) -DSETTINGSGEN -c -o $@ $< - -$(SETTINGSGEN): alloc_func.o string.o ini_load.o settingsgen.o getoptdata.o - $(E) '$(STAGE) Compiling and Linking $@' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) $^ -o $@ - -table/settings.h: $(SETTINGSGEN) $(SRC_DIR)/table/settings.h.preamble $(SRC_DIR)/table/settings.h.postamble $(SRC_DIR)/table/*.ini - $(E) '$(STAGE) Generating $@' - @mkdir -p table - $(Q)./$(SETTINGSGEN) -o table/settings.h -b $(SRC_DIR)/table/settings.h.preamble -a $(SRC_DIR)/table/settings.h.postamble $(SRC_DIR)/table/*.ini - -depend: - -clean: - $(E) '$(STAGE) Cleaning up settings files' - $(Q)rm -f settingsgen.o alloc_func.o getoptdata.o string.o ini_load.o $(SETTINGSGEN) table/settings.h - -mrproper: clean - -.PHONY: all mrproper depend clean diff --git a/Makefile.src.in b/Makefile.src.in deleted file mode 100644 index 6b0fb94020..0000000000 --- a/Makefile.src.in +++ /dev/null @@ -1,295 +0,0 @@ -# This file is part of OpenTTD. -# OpenTTD 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, version 2. -# OpenTTD 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 OpenTTD. If not, see . - -CC_HOST = !!CC_HOST!! -CXX_HOST = !!CXX_HOST!! -CC_BUILD = !!CC_BUILD!! -CXX_BUILD = !!CXX_BUILD!! -WINDRES = !!WINDRES!! -STRIP = !!STRIP!! -CFLAGS = !!CFLAGS!! -CFLAGS_BUILD = !!CFLAGS_BUILD!! -CXXFLAGS = !!CXXFLAGS!! -CXXFLAGS_BUILD = !!CXXFLAGS_BUILD!! -LIBS = !!LIBS!! -LDFLAGS = !!LDFLAGS!! -LDFLAGS_BUILD = !!LDFLAGS_BUILD!! -ROOT_DIR = !!ROOT_DIR!! -BIN_DIR = !!BIN_DIR!! -LANG_DIR = !!LANG_DIR!! -SRC_OBJS_DIR = !!SRC_OBJS_DIR!! -LANG_OBJS_DIR = !!LANG_OBJS_DIR!! -SETTING_OBJS_DIR= !!SETTING_OBJS_DIR!! -SRC_DIR = !!SRC_DIR!! -SCRIPT_SRC_DIR = !!SCRIPT_SRC_DIR!! -MEDIA_DIR = !!MEDIA_DIR!! -TTD = !!TTD!! -STRGEN = !!STRGEN!! -DEPEND = !!DEPEND!! -OS = !!OS!! -STAGE = !!STAGE!! -MAKEDEPEND = !!MAKEDEPEND!! -CFLAGS_MAKEDEP = !!CFLAGS_MAKEDEP!! -SORT = !!SORT!! -AWK = !!AWK!! -CONFIG_CACHE_COMPILER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_COMPILER!! -CONFIG_CACHE_LINKER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_LINKER!! -CONFIG_CACHE_SOURCE = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_SOURCE!! -CONFIG_CACHE_VERSION = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_VERSION!! - -OBJS_C := !!OBJS_C!! -OBJS_CPP := !!OBJS_CPP!! -OBJS_MM := !!OBJS_MM!! -OBJS_RC := !!OBJS_RC!! -OBJS := $(OBJS_C) $(OBJS_CPP) $(OBJS_MM) $(OBJS_RC) -SRCS := !!SRCS!! - -# All C-files depend on those 3 files -FILE_DEP := $(CONFIG_CACHE_COMPILER) -# Create all dirs and subdirs -RES := $(shell mkdir -p $(BIN_DIR) $(sort $(dir $(OBJS)))) - -CFLAGS += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR) -I $(SETTING_OBJS_DIR) -CFLAGS_MAKEDEP += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR) -I $(SETTING_OBJS_DIR) -ifdef SCRIPT_SRC_DIR - CFLAGS_MAKEDEP += -I $(SCRIPT_SRC_DIR) -endif - -# Check if we want to show what we are doing -ifdef VERBOSE - Q = - E = @true -else - Q = @ - E = @echo -endif - -# Our default target -all: $(BIN_DIR)/$(TTD) - -# This are 2 rules that are pointing back to STRGEN stuff. -# There is not really a need to have them here, but in case -# some weirdo wants to run 'make' in the 'src' dir and expects -# the languages to be recompiled, this catches that case and -# takes care of it nicely. -$(LANG_OBJS_DIR)/$(STRGEN): - $(MAKE) -C $(LANG_OBJS_DIR) $(STRGEN) - -$(LANG_OBJS_DIR)/table/strings.h: $(LANG_DIR)/english.txt $(LANG_OBJS_DIR)/$(STRGEN) - $(MAKE) -C $(LANG_OBJS_DIR) table/strings.h - -# Always run version detection, so we always have an accurate modified -# flag -VERSIONS := $(shell AWK="$(AWK)" "$(ROOT_DIR)/findversion.sh") -MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ') - -# Use autodetected revisions -VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') -ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ') -GITHASH := $(shell echo "$(VERSIONS)" | cut -f 4 -d' ') -ISTAG := $(shell echo "$(VERSIONS)" | cut -f 5 -d' ') -ISSTABLETAG := $(shell echo "$(VERSIONS)" | cut -f 6 -d' ') -YEAR := $(shell echo "$(VERSIONS)" | cut -f 7 -d' ') - -# Make sure we have something in VERSION and ISODATE -ifeq ($(VERSION),) -VERSION := norev000 -endif -ifeq ($(ISODATE),) -ISODATE := 00000000 -endif - -# This helps to recompile if flags change -RES := $(shell if [ "`cat $(CONFIG_CACHE_COMPILER) 2>/dev/null`" != "$(CFLAGS) $(CXXFLAGS)" ]; then echo "$(CFLAGS) $(CXXFLAGS)" > $(CONFIG_CACHE_COMPILER); fi ) -RES := $(shell if [ "`cat $(CONFIG_CACHE_LINKER) 2>/dev/null`" != "$(LDFLAGS) $(LIBS)" ]; then echo "$(LDFLAGS) $(LIBS)" > $(CONFIG_CACHE_LINKER); fi ) - -# If there is a change in the source-file-list, make sure we recheck the deps -RES := $(shell if [ "`cat $(CONFIG_CACHE_SOURCE) 2>/dev/null`" != "$(SRCS)" ]; then echo "$(SRCS)" > $(CONFIG_CACHE_SOURCE); fi ) -# If there is a change in the revision, make sure we recompile rev.cpp -RES := $(shell if [ "`cat $(CONFIG_CACHE_VERSION) 2>/dev/null`" != "$(VERSION) $(MODIFIED)" ]; then echo "$(VERSION) $(MODIFIED)" > $(CONFIG_CACHE_VERSION); fi ) - -ifndef MAKEDEPEND -# The slow, but always correct, dep-check -DEP_MASK := %.d -DEPS := $(OBJS:%.o=%.d) - -# Only include the deps if we are compiling everything -ifeq ($(filter %.o clean mrproper, $(MAKECMDGOALS)),) --include $(DEPS) -else -# In case we want to compile a single target, include the .d file for it -ifneq ($(filter %.o, $(MAKECMDGOALS)),) -SINGLE_DEP := $(filter %.o, $(MAKECMDGOALS)) --include $(SINGLE_DEP:%.o=%.d) -endif -endif - -# Find the deps via GCC. Rarely wrong, but a bit slow - -$(OBJS_C:%.o=%.d): %.d: $(SRC_DIR)/%.c $(FILE_DEP) - $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.c=%.c)' - $(Q)$(CC_HOST) $(CFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@ - -$(OBJS_CPP:%.o=%.d): %.d: $(SRC_DIR)/%.cpp $(FILE_DEP) - $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@ - -$(OBJS_MM:%.o=%.d): %.d: $(SRC_DIR)/%.mm $(FILE_DEP) - $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@ - -$(OBJS_RC:%.o=%.d): %.d: $(SRC_DIR)/%.rc $(FILE_DEP) - $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.rc=%.rc)' - $(Q)touch $@ - -else -# The much faster, but can be wrong, dep-check -DEP_MASK := -DEPS := Makefile.dep - -# Only include the deps if we are not cleaning -ifeq ($(filter depend clean mrproper, $(MAKECMDGOALS)),) --include Makefile.dep -endif - -ifeq ("$(SRC_OBJS_DIR)/$(DEPEND)","$(MAKEDEPEND)") -DEP := $(MAKEDEPEND) -$(SRC_OBJS_DIR)/$(DEPEND): $(SRC_DIR)/depend/depend.cpp - $(E) '$(STAGE) Compiling and linking $(DEPEND)' - $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) -o $@ $< -endif - -# Macro for invoking a command on groups of 100 words at a time -# (analogous to xargs(1)). The macro invokes itself recursively -# until the list of words is depleted. -# -# Usage: $(call xargs,COMMAND,LIST) -# -# COMMAND should be a shell command to which the words will be -# appended as arguments in groups of 100. -define xargs -$(1) $(wordlist 1,100,$(2)) -$(if $(word 101,$(2)),$(call xargs,$(1),$(wordlist 101,$(words $(2)),$(2)))) -endef - -# Make sure that only 'make depend' ALWAYS triggers a recheck -ifeq ($(filter depend, $(MAKECMDGOALS)),) -Makefile.dep: $(FILE_DEP) $(SRCS:%=$(SRC_DIR)/%) $(CONFIG_CACHE_SOURCE) $(DEP) -else -Makefile.dep: $(FILE_DEP) $(SRCS:%=$(SRC_DIR)/%) $(DEP) FORCE -endif - $(E) '$(STAGE) DEP CHECK (all files)' - $(Q)rm -f Makefile.dep.tmp - $(Q)touch Makefile.dep.tmp - -# Calculate the deps via makedepend - $(call xargs,$(Q)$(MAKEDEPEND) -f$(SRC_OBJS_DIR)/Makefile.dep.tmp -o.o -Y -v -a -- $(CFLAGS_MAKEDEP) -- 2>/dev/null,$(SRCS:%=$(SRC_DIR)/%)) - -# Remove all comments and includes that don't start with $(SRC_DIR) -# Remove $(SRC_DIR) from object-file-name - @$(AWK) ' \ - /^# DO NOT/ { print $$0 ; next} \ - /^#/ {next} \ - /: / { \ - left = NF - 1; \ - for (n = 2; n <= NF; n++) { \ - if (match($$n, "^$(ROOT_DIR)") == 0) { \ - $$n = ""; \ - left--; \ - } \ - } \ - gsub("$(SRC_DIR)/", "", $$1); \ - if (left > 0) { \ - print $$0; \ - $$1 = "Makefile.dep:"; \ - print $$0; \ - } \ - next \ - } \ - { \ - print $$0 \ - } \ - ' < Makefile.dep.tmp | sed 's@ *@ @g;s@ $$@@' | LC_ALL=C $(SORT) > Makefile.dep - - $(Q)rm -f Makefile.dep.tmp Makefile.dep.tmp.bak - -endif - -# Avoid problems with deps if a .h/.hpp/.hpp.sq file is deleted without the deps -# being updated. Now the Makefile continues, the deps are recreated -# and all will be fine. -%.h %.hpp %.hpp.sq: - @true - - -# Compile all the files according to the targets - -$(OBJS_C): %.o: $(SRC_DIR)/%.c $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.c=%.c)' - $(Q)$(CC_HOST) $(CFLAGS) -c -o $@ $< - -$(filter-out %sse2.o, $(filter-out %ssse3.o, $(filter-out %sse4.o, $(OBJS_CPP)))): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -o $@ $< - -$(filter %sse2.o, $(OBJS_CPP)): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -msse2 -o $@ $< - -$(filter %ssse3.o, $(OBJS_CPP)): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -mssse3 -o $@ $< - -$(filter %sse4.o, $(OBJS_CPP)): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -msse4.1 -o $@ $< - -$(OBJS_MM): %.o: $(SRC_DIR)/%.mm $(DEP_MASK) $(FILE_DEP) - $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.mm=%.mm)' - $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -o $@ $< - -$(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP) - $(E) '$(STAGE) Compiling resource $(<:$(SRC_DIR)/%.rc=%.rc)' - $(Q)$(WINDRES) -o $@ $< - -$(BIN_DIR)/$(TTD): $(TTD) - $(Q)cp $(TTD) $(BIN_DIR)/$(TTD) -ifeq ($(OS), UNIX) - $(Q)cp $(MEDIA_DIR)/openttd.32.bmp $(BIN_DIR)/baseset/ -endif -ifeq ($(OS), OSX) - $(Q)cp $(ROOT_DIR)/os/macosx/splash.png $(BIN_DIR)/baseset/ -endif - -$(TTD): $(OBJS) $(CONFIG_CACHE_LINKER) - $(E) '$(STAGE) Linking $@' - $(Q)+$(CXX_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ -ifdef STRIP - $(Q)$(STRIP) $@ -endif - -# Revision files - -$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in - $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g;s@!!YEAR!!@$(YEAR)@g" > $(SRC_DIR)/rev.cpp - -$(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in - $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g;s@!!YEAR!!@$(YEAR)@g" > $(SRC_DIR)/os/windows/ottdres.rc - -FORCE: - -depend: $(DEPS) - -clean: - $(E) '$(STAGE) Cleaning up object files' - $(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(DEPEND) $(TTD:%=$(BIN_DIR)/%) $(BIN_DIR)/baseset/openttd.32.bmp $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_SOURCE) - -mrproper: clean - $(Q)rm -f $(SRC_DIR)/rev.cpp $(SRC_DIR)/os/windows/ottdres.rc - -%.o: - @echo '$(STAGE) No such source-file: $(@:%.o=%).[c|cpp|mm|rc]' - -.PHONY: all mrproper depend clean FORCE diff --git a/README.md b/README.md index 230bbf3b6e..a5142ffecb 100644 --- a/README.md +++ b/README.md @@ -46,15 +46,13 @@ OpenTTD has a [community-maintained wiki](https://wiki.openttd.org/), including OpenTTD has been ported to several platforms and operating systems. -The currently working platforms are: +The currently supported platforms are: -- FreeBSD (SDL) -- Haiku (SDL) -- Linux (SDL) -- macOS (universal) (Cocoa video and sound drivers) -- OpenBSD (SDL) -- OS/2 (SDL) -- Windows (Win32 GDI (faster) or SDL) +- Linux (SDL (OpenGL and non-OpenGL)) +- macOS (universal) (Cocoa) +- Windows (Win32 GDI / OpenGL) + +Other platforms may also work (in particular various BSD systems), but we don't actively test or maintain these. ### 1.3.1) Legacy support Platforms, languages and compilers change. @@ -65,13 +63,13 @@ Please report a bug if you find a save that doesn't load. ## 1.4) Installing and running OpenTTD -OpenTTD is usually straightforward to install, but for more help the wiki [includes an installation guide](https://wiki.openttd.org/Installation). +OpenTTD is usually straightforward to install, but for more help the wiki [includes an installation guide](https://wiki.openttd.org/en/Manual/Installation). OpenTTD needs some additional graphics and sound files to run. For some platforms these will be downloaded during the installation process if required. -For some platforms, you will need to refer to [the installation guide](https://wiki.openttd.org/Installation). +For some platforms, you will need to refer to [the installation guide](https://wiki.openttd.org/en/Manual/Installation). ### 1.4.1) Free graphics and sound files @@ -79,9 +77,9 @@ For some platforms, you will need to refer to [the installation guide](https://w The free data files, split into OpenGFX for graphics, OpenSFX for sounds and OpenMSX for music can be found at: -- https://www.openttd.org/download-opengfx for OpenGFX -- https://www.openttd.org/download-opensfx for OpenSFX -- https://www.openttd.org/download-openmsx for OpenMSX +- https://www.openttd.org/downloads/opengfx-releases/ for OpenGFX +- https://www.openttd.org/downloads/opensfx-releases/ for OpenSFX +- https://www.openttd.org/downloads/openmsx-releases/ for OpenMSX Please follow the readme of these packages about the installation procedure. The Windows installer can optionally download and install these packages. @@ -116,7 +114,7 @@ OpenTTD features multiple types of add-on content, which modify gameplay in diff Most types of add-on content can be downloaded within OpenTTD via the 'Check Online Content' button in the main menu. -Add-on content can also be installed manually, but that's more complicated; the [OpenTTD wiki](https://wiki.openttd.org/OpenTTD) may offer help with that, or the [OpenTTD directory structure guide](./docs/directory_structure.md). +Add-on content can also be installed manually, but that's more complicated; the [OpenTTD wiki](https://wiki.openttd.org/) may offer help with that, or the [OpenTTD directory structure guide](./docs/directory_structure.md). ### 1.5.1) AI opponents @@ -138,7 +136,7 @@ A wide range of add-content is available as NewGRFs, including vehicles, industr NewGRFs can be added via the 'Check Online Content' button in the main menu. -See also the wiki [guide to NewGRFs](https://wiki.openttd.org/NewGRF) and [the forum graphics development section](https://www.tt-forums.net/viewforum.php?f=66). +See also the wiki [guide to NewGRFs](https://wiki.openttd.org/en/Manual/NewGRF) and [the forum graphics development section](https://www.tt-forums.net/viewforum.php?f=66). ### 1.5.4) Game scripts @@ -146,7 +144,7 @@ Game scripts can provide additional challenges or changes to the standard OpenTT Game scripts can be added via the 'Check Online Content' button in the main menu. -See also the wiki [guide to game scripts](https://wiki.openttd.org/Game_script) and [the forum graphics game script section](https://www.tt-forums.net/viewforum.php?f=65). +See also the wiki [guide to game scripts](https://wiki.openttd.org/en/Manual/Game%20script) and [the forum graphics game script section](https://www.tt-forums.net/viewforum.php?f=65). ### 1.6) OpenTTD directories @@ -164,14 +162,14 @@ If you want to compile OpenTTD from source, instructions can be found in [COMPIL 'Official' channels - [OpenTTD website](https://www.openttd.org) -- IRC chat using #openttd on irc.oftc.net [more info about our irc channel](https://wiki.openttd.org/Irc) +- IRC chat using #openttd on irc.oftc.net [more info about our irc channel](https://wiki.openttd.org/en/Development/IRC%20channel) - [OpenTTD on Github](https://github.com/openTTD/) for code repositories and for reporting issues - [forum.openttd.org](https://forum.openttd.org/) - the primary community forum site for discussing OpenTTD and related games - [OpenTTD wiki](https://wiki.openttd.org/) community-maintained wiki, including topics like gameplay guide, detailed explanation of some game mechanics, how to use add-on content (mods) and much more 'Unofficial' channels -- the OpenTTD wiki has a [page listing OpenTTD communities](https://wiki.openttd.org/Community) including some in languages other than English +- the OpenTTD wiki has a [page listing OpenTTD communities](https://wiki.openttd.org/en/Community/Community) including some in languages other than English ### 2.1) Contributing to OpenTTD diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt new file mode 100644 index 0000000000..612e275dd9 --- /dev/null +++ b/bin/CMakeLists.txt @@ -0,0 +1,3 @@ +add_subdirectory(ai) +add_subdirectory(game) +add_subdirectory(data) diff --git a/bin/ai/CMakeLists.txt b/bin/ai/CMakeLists.txt new file mode 100644 index 0000000000..60398f081d --- /dev/null +++ b/bin/ai/CMakeLists.txt @@ -0,0 +1,39 @@ +set(AI_COMPAT_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/compat_0.7.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.0.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.1.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.2.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.3.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.4.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.5.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.6.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.7.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.8.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.9.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.10.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.11.nut +) + +foreach(AI_COMPAT_SOURCE_FILE IN LISTS AI_COMPAT_SOURCE_FILES) + string(REPLACE "${CMAKE_SOURCE_DIR}/bin/" "" AI_COMPAT_SOURCE_FILE_NAME "${AI_COMPAT_SOURCE_FILE}") + string(CONCAT AI_COMPAT_BINARY_FILE "${CMAKE_BINARY_DIR}/" "${AI_COMPAT_SOURCE_FILE_NAME}") + + add_custom_command(OUTPUT ${AI_COMPAT_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E copy + ${AI_COMPAT_SOURCE_FILE} + ${AI_COMPAT_BINARY_FILE} + MAIN_DEPENDENCY ${AI_COMPAT_SOURCE_FILE} + COMMENT "Copying ${AI_COMPAT_SOURCE_FILE_NAME}" + ) + + list(APPEND AI_COMPAT_BINARY_FILES ${AI_COMPAT_BINARY_FILE}) +endforeach() + +# Create a new target which copies all compat files +add_custom_target(ai_compat_files + DEPENDS ${AI_COMPAT_BINARY_FILES} +) + +add_dependencies(openttd + ai_compat_files +) diff --git a/bin/ai/compat_1.10.nut b/bin/ai/compat_1.10.nut index 3081fb58e8..2baaddb836 100644 --- a/bin/ai/compat_1.10.nut +++ b/bin/ai/compat_1.10.nut @@ -4,3 +4,5 @@ * OpenTTD 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 OpenTTD. If not, see . */ + +AILog.Info("1.10 API compatibility in effect."); diff --git a/src/script/api/ai/ai_testmode.hpp.sq b/bin/ai/compat_1.11.nut similarity index 53% rename from src/script/api/ai/ai_testmode.hpp.sq rename to bin/ai/compat_1.11.nut index e80952a610..3081fb58e8 100644 --- a/src/script/api/ai/ai_testmode.hpp.sq +++ b/bin/ai/compat_1.11.nut @@ -4,20 +4,3 @@ * OpenTTD 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 OpenTTD. If not, see . */ - -/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */ - -#include "../script_testmode.hpp" -#include "../template/template_testmode.hpp.sq" - - -template <> const char *GetClassName() { return "AITestMode"; } - -void SQAITestMode_Register(Squirrel *engine) -{ - DefSQClass SQAITestMode("AITestMode"); - SQAITestMode.PreRegister(engine); - SQAITestMode.AddConstructor(engine, "x"); - - SQAITestMode.PostRegister(engine); -} diff --git a/bin/ai/regression/completeness.sh b/bin/ai/regression/completeness.sh deleted file mode 100755 index 46cee4ed3e..0000000000 --- a/bin/ai/regression/completeness.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh - -if ! [ -f ai/regression/completeness.sh ]; then - echo "Make sure you are in the root of OpenTTD before starting this script." - exit 1 -fi - -cat ai/regression/tst_*/main.nut | tr ';' '\n' | awk ' -/^function/ { - for (local in locals) { - delete locals[local] - } - if (match($0, "function Regression::Start") || match($0, "function Regression::Stop")) next - locals["this"] = "AIControllerSquirrel" -} - -/local/ { - gsub(".*local", "local") - if (match($4, "^AI")) { - sub("\\(.*", "", $4) - locals[$2] = $4 - } -} - -/Valuate/ { - gsub(".*Valuate\\(", "") - gsub("\\).*", "") - gsub(",.*", "") - gsub("\\.", "::") - print $0 -} - -/\./ { - for (local in locals) { - if (match($0, local ".")) { - fname = substr($0, index($0, local ".")) - sub("\\(.*", "", fname) - sub("\\.", "::", fname) - sub(local, locals[local], fname) - print fname - if (match(locals[local], "List")) { - sub(locals[local], "AIAbstractList", fname) - print fname - } - } - } - # We want to remove everything before the FIRST occurrence of AI. - # If we do not remove any other occurrences of AI from the string - # we will remove everything before the LAST occurrence of AI, so - # do some little magic to make it work the way we want. - sub("AI", "AXXXXY") - gsub("AI", "AXXXXX") - sub(".*AXXXXY", "AI") - if (match($0, "^AI") && match($0, ".")) { - sub("\\(.*", "", $0) - sub("\\.", "::", $0) - print $0 - } -} -' | sed 's/ //g' | sort | uniq > tmp.in_regression - -grep 'DefSQ.*Method' ../src/script/api/ai/*.hpp.sq | grep -v 'AIError::' | grep -v 'AIAbstractList::Valuate' | grep -v '::GetClassName' | sed 's/^[^,]*, &//g;s/,[^,]*//g' | sort > tmp.in_api - -diff -u tmp.in_regression tmp.in_api | grep -v '^+++' | grep '^+' | sed 's/^+//' - -rm -f tmp.in_regression tmp.in_api - diff --git a/bin/ai/regression/run.sh b/bin/ai/regression/run.sh deleted file mode 100755 index 7574b0b388..0000000000 --- a/bin/ai/regression/run.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh - -if ! [ -f ai/regression/run.sh ]; then - echo "Make sure you are in the root of OpenTTD before starting this script." - exit 1 -fi - -if [ -f scripts/game_start.scr ]; then - mv scripts/game_start.scr scripts/game_start.scr.regression -fi - -params="" -gdb="" -if [ "$1" != "-r" ]; then - params="-snull -mnull -vnull:ticks=30000" -fi -if [ "$1" = "-g" ]; then - gdb="gdb --ex run --args " -fi - -if [ -d "ai/regression/tst_$1" ]; then - tests="ai/regression/tst_$1" -elif [ -d "ai/regression/tst_$2" ]; then - tests="ai/regression/tst_$2" -else - tests=ai/regression/tst_* -fi - -ret=0 -for tst in $tests; do - echo -n "Running $tst... " - - # Make sure that only one info.nut is present for each test run. Otherwise openttd gets confused. - cp ai/regression/regression_info.nut $tst/info.nut - - sav=$tst/test.sav - if ! [ -f $sav ]; then - sav=ai/regression/empty.sav - fi - - if [ -n "$gdb" ]; then - $gdb ./openttd -x -c ai/regression/regression.cfg $params -g $sav - else - ./openttd -x -c ai/regression/regression.cfg $params -g $sav -d script=2 -d misc=9 2>&1 | awk '{ gsub("0x(\\(nil\\)|0+)(x0)?", "0x00000000", $0); gsub("^dbg: \\[script\\]", "", $0); gsub("^ ", "ERROR: ", $0); gsub("ERROR: \\[1\\] ", "", $0); gsub("\\[P\\] ", "", $0); print $0; }' | grep -v '^dbg: \[.*\]' > $tst/tmp.regression - fi - - if [ -z "$gdb" ]; then - res="`diff -ub $tst/result.txt $tst/tmp.regression`" - if [ -z "$res" ]; then - echo "passed!" - else - echo "failed! Difference:" - echo "$res" - ret=1 - fi - fi - - rm $tst/info.nut - - if [ "$1" != "-k" ]; then - rm -f $tst/tmp.regression - fi -done - -if [ -f scripts/game_start.scr.regression ]; then - mv scripts/game_start.scr.regression scripts/game_start.scr -fi - -exit $ret diff --git a/bin/ai/regression/run.vbs b/bin/ai/regression/run.vbs deleted file mode 100644 index b4bdef4c17..0000000000 --- a/bin/ai/regression/run.vbs +++ /dev/null @@ -1,152 +0,0 @@ -Option Explicit - -' This file is part of OpenTTD. -' OpenTTD 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, version 2. -' OpenTTD 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 OpenTTD. If not, see . - -Dim FSO -Set FSO = CreateObject("Scripting.FileSystemObject") - -Function GetTestList() - Dim retests, i, tests, dir - Set retests = New RegExp - Set GetTestList = CreateObject("Scripting.Dictionary") - - retests.Pattern = "ai/regression/tst_*" - retests.Global = True - For i = 0 To WScript.Arguments.Count - 1 - Dim test - test = "ai/regression/tst_" & WScript.Arguments.Item(i) - If FSO.FolderExists(test) Then - retests.Pattern = test - Exit For - End If - Next - - For Each dir In FSO.GetFolder("ai/regression/").SubFolders - Dim name - name = "ai/regression/" & dir.Name - If retests.Test(name) Then - GetTestList.Add name, name - End If - Next -End Function - -Function GetParams() - GetParams = "-snull -mnull -vnull:ticks=30000" - If WScript.Arguments.Count = 0 Then Exit Function - If WScript.Arguments.Item(0) <> "-r" Then Exit Function - GetParams = "" -End Function - -Sub FilterFile(filename) - Dim lines, filter, file - - Set file = FSO.OpenTextFile(filename, 1) - If Not file.AtEndOfStream Then - lines = file.ReadAll - End If - file.Close - - Set filter = New RegExp - filter.Global = True - filter.Multiline = True - filter.Pattern = "0x(\(nil\)|0+)(x0)?" - lines = filter.Replace(lines, "0x00000000") - filter.Pattern = "^dbg: \[script\]" - lines = filter.Replace(lines, "") - filter.Pattern = "^ " - lines = filter.Replace(lines, "ERROR: ") - filter.Pattern = "ERROR: \[1\] \[P\] " - lines = filter.Replace(lines, "") - filter.Pattern = "^dbg: .*\r\n" - lines = filter.Replace(lines, "") - - Set file = FSO.OpenTextFile(filename, 2) - file.Write lines - file.Close -End Sub - -Function CompareFiles(filename1, filename2) - Dim file, lines1, lines2 - Set file = FSO.OpenTextFile(filename1, 1) - If Not file.AtEndOfStream Then - lines1 = file.ReadAll - End IF - file.Close - Set file = FSO.OpenTextFile(filename2, 1) - If Not file.AtEndOfStream Then - lines2 = file.ReadAll - End IF - file.Close - CompareFiles = (lines1 = lines2) -End Function - -Function RunTest(test, params, ret) - Dim WshShell, oExec, sav, command - Set WshShell = CreateObject("WScript.Shell") - - ' Make sure that only one info.nut is present for each test run. Otherwise openttd gets confused. - FSO.CopyFile "ai/regression/regression_info.nut", test & "/info.nut" - - sav = test & "/test.sav" - If Not FSO.FileExists(sav) Then - sav = "ai/regression/empty.sav" - End If - - command = ".\openttd -x -c ai/regression/regression.cfg " & params & " -g " & sav & " -d script=2 -d misc=9" - ' 2>&1 must be after >tmp.regression, else stderr is not redirected to the file - WshShell.Run "cmd /c " & command & " >"& test & "/tmp.regression 2>&1", 0, True - - FilterFile test & "/tmp.regression" - - If CompareFiles(test & "/result.txt", test & "/tmp.regression") Then - RunTest = "passed!" - Else - RunTest = "failed!" - ret = 1 - End If - - FSO.DeleteFile test & "/info.nut" - - If WScript.Arguments.Count > 0 Then - If WScript.Arguments.Item(0) = "-k" Then - Exit Function - End If - End If - - FSO.DeleteFile test & "/tmp.regression" -End Function - -On Error Resume Next -WScript.StdOut.WriteLine "" -If Err.Number <> 0 Then - WScript.Echo "This script must be started with cscript." - WScript.Quit 1 -End If -On Error Goto 0 - -If Not FSO.FileExists("ai/regression/run.vbs") Then - WScript.Echo "Make sure you are in the root of OpenTTD before starting this script." - WScript.Quit 1 -End If - -If FSO.FileExists("scripts/game_start.scr") Then - FSO.MoveFile "scripts/game_start.scr", "scripts/game_start.scr.regression" -End If - -Dim params, test, ret -params = GetParams() -ret = 0 - -For Each test in GetTestList() - WScript.StdOut.Write "Running " & test & "... " - WScript.StdOut.WriteLine RunTest(test, params, ret) -Next - -If FSO.FileExists("scripts/game_start.scr.regression") Then - FSO.MoveFile "scripts/game_start.scr.regression", "scripts/game_start.scr" -End If - -WScript.Quit ret diff --git a/bin/ai/regression/tst_stationlist/test.sav b/bin/ai/regression/tst_stationlist/test.sav deleted file mode 100644 index ef551c74ff..0000000000 Binary files a/bin/ai/regression/tst_stationlist/test.sav and /dev/null differ diff --git a/bin/baseset/opntitle.dat b/bin/baseset/opntitle.dat deleted file mode 100644 index c22084b879..0000000000 Binary files a/bin/baseset/opntitle.dat and /dev/null differ diff --git a/bin/data/CMakeLists.txt b/bin/data/CMakeLists.txt new file mode 100644 index 0000000000..f59aa4d147 --- /dev/null +++ b/bin/data/CMakeLists.txt @@ -0,0 +1,27 @@ +set(DATA_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/cmclient-3.grf +) + +foreach(DATA_SOURCE_FILE IN LISTS DATA_SOURCE_FILES) + string(REPLACE "${CMAKE_SOURCE_DIR}/bin/" "" DATA_SOURCE_FILE_NAME "${DATA_SOURCE_FILE}") + string(CONCAT DATA_BINARY_FILE "${CMAKE_BINARY_DIR}/" "${DATA_SOURCE_FILE_NAME}") + + add_custom_command(OUTPUT ${DATA_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E copy + ${DATA_SOURCE_FILE} + ${DATA_BINARY_FILE} + MAIN_DEPENDENCY ${DATA_SOURCE_FILE} + COMMENT "Copying ${DATA_SOURCE_FILE_NAME}" + ) + + list(APPEND DATA_BINARY_FILES ${DATA_BINARY_FILE}) +endforeach() + +# Create a new target which copies all compat files +add_custom_target(data_files + DEPENDS ${DATA_BINARY_FILES} +) + +add_dependencies(openttd + data_files +) diff --git a/bin/game/CMakeLists.txt b/bin/game/CMakeLists.txt new file mode 100644 index 0000000000..db1acf317e --- /dev/null +++ b/bin/game/CMakeLists.txt @@ -0,0 +1,36 @@ +set(GS_COMPAT_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.2.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.3.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.4.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.5.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.6.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.7.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.8.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.9.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.10.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.11.nut +) + +foreach(GS_COMPAT_SOURCE_FILE IN LISTS GS_COMPAT_SOURCE_FILES) + string(REPLACE "${CMAKE_SOURCE_DIR}/bin/" "" GS_COMPAT_SOURCE_FILE_NAME "${GS_COMPAT_SOURCE_FILE}") + string(CONCAT GS_COMPAT_BINARY_FILE "${CMAKE_BINARY_DIR}/" "${GS_COMPAT_SOURCE_FILE_NAME}") + + add_custom_command(OUTPUT ${GS_COMPAT_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E copy + ${GS_COMPAT_SOURCE_FILE} + ${GS_COMPAT_BINARY_FILE} + MAIN_DEPENDENCY ${GS_COMPAT_SOURCE_FILE} + COMMENT "Copying ${GS_COMPAT_SOURCE_FILE_NAME}" + ) + + list(APPEND GS_COMPAT_BINARY_FILES ${GS_COMPAT_BINARY_FILE}) +endforeach() + +# Create a new target which copies all compat files +add_custom_target(gs_compat_files + DEPENDS ${GS_COMPAT_BINARY_FILES} +) + +add_dependencies(openttd + gs_compat_files +) diff --git a/bin/game/compat_1.10.nut b/bin/game/compat_1.10.nut index 3081fb58e8..92cef84c53 100644 --- a/bin/game/compat_1.10.nut +++ b/bin/game/compat_1.10.nut @@ -4,3 +4,12 @@ * OpenTTD 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 OpenTTD. If not, see . */ + +GSLog.Info("1.10 API compatibility in effect."); + +/* 1.11 adds a tile parameter. */ +GSCompany._ChangeBankBalance <- GSCompany.ChangeBankBalance; +GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) +{ + return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); +} diff --git a/bin/game/compat_1.11.nut b/bin/game/compat_1.11.nut new file mode 100644 index 0000000000..3081fb58e8 --- /dev/null +++ b/bin/game/compat_1.11.nut @@ -0,0 +1,6 @@ +/* + * This file is part of OpenTTD. + * OpenTTD 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, version 2. + * OpenTTD 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 OpenTTD. If not, see . + */ diff --git a/bin/game/compat_1.2.nut b/bin/game/compat_1.2.nut index c042e988b5..5fb29efedf 100644 --- a/bin/game/compat_1.2.nut +++ b/bin/game/compat_1.2.nut @@ -28,3 +28,10 @@ GSBridge.GetName <- function(bridge_id) { return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); } + +/* 1.11 adds a tile parameter. */ +GSCompany._ChangeBankBalance <- GSCompany.ChangeBankBalance; +GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) +{ + return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); +} diff --git a/bin/game/compat_1.3.nut b/bin/game/compat_1.3.nut index 161f4fd0a0..7546e54c69 100644 --- a/bin/game/compat_1.3.nut +++ b/bin/game/compat_1.3.nut @@ -28,3 +28,10 @@ GSBridge.GetName <- function(bridge_id) { return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); } + +/* 1.11 adds a tile parameter. */ +GSCompany._ChangeBankBalance <- GSCompany.ChangeBankBalance; +GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) +{ + return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); +} diff --git a/bin/game/compat_1.4.nut b/bin/game/compat_1.4.nut index 0ebb850675..c90b3e550b 100644 --- a/bin/game/compat_1.4.nut +++ b/bin/game/compat_1.4.nut @@ -20,3 +20,11 @@ GSBridge.GetName <- function(bridge_id) { return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); } + +/* 1.11 adds a tile parameter. */ +GSCompany._ChangeBankBalance <- GSCompany.ChangeBankBalance; +GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) +{ + return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); +} + diff --git a/bin/game/compat_1.5.nut b/bin/game/compat_1.5.nut index 86283cc0dd..0c62e56462 100644 --- a/bin/game/compat_1.5.nut +++ b/bin/game/compat_1.5.nut @@ -13,3 +13,10 @@ GSBridge.GetName <- function(bridge_id) { return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); } + +/* 1.11 adds a tile parameter. */ +GSCompany._ChangeBankBalance <- GSCompany.ChangeBankBalance; +GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) +{ + return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); +} diff --git a/bin/game/compat_1.6.nut b/bin/game/compat_1.6.nut index 4a091b81ea..198b863a77 100644 --- a/bin/game/compat_1.6.nut +++ b/bin/game/compat_1.6.nut @@ -13,3 +13,10 @@ GSBridge.GetName <- function(bridge_id) { return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); } + +/* 1.11 adds a tile parameter. */ +GSCompany._ChangeBankBalance <- GSCompany.ChangeBankBalance; +GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) +{ + return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); +} diff --git a/bin/game/compat_1.7.nut b/bin/game/compat_1.7.nut index febd335c36..76dc424353 100644 --- a/bin/game/compat_1.7.nut +++ b/bin/game/compat_1.7.nut @@ -13,3 +13,10 @@ GSBridge.GetName <- function(bridge_id) { return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); } + +/* 1.11 adds a tile parameter. */ +GSCompany._ChangeBankBalance <- GSCompany.ChangeBankBalance; +GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) +{ + return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); +} diff --git a/bin/game/compat_1.8.nut b/bin/game/compat_1.8.nut index bd33b79f09..b9d27458a9 100644 --- a/bin/game/compat_1.8.nut +++ b/bin/game/compat_1.8.nut @@ -13,3 +13,10 @@ GSBridge.GetName <- function(bridge_id) { return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); } + +/* 1.11 adds a tile parameter. */ +GSCompany._ChangeBankBalance <- GSCompany.ChangeBankBalance; +GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) +{ + return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); +} diff --git a/bin/game/compat_1.9.nut b/bin/game/compat_1.9.nut index ab9ffbccaf..32eec114af 100644 --- a/bin/game/compat_1.9.nut +++ b/bin/game/compat_1.9.nut @@ -6,3 +6,10 @@ */ GSLog.Info("1.9 API compatibility in effect."); + +/* 1.11 adds a tile parameter. */ +GSCompany._ChangeBankBalance <- GSCompany.ChangeBankBalance; +GSCompany.ChangeBankBalance <- function(company, delta, expenses_type) +{ + return GSCompany._ChangeBankBalance(company, delta, expenses_type, GSMap.TILE_INVALID); +} diff --git a/changelog.txt b/changelog.txt index 33a9a06b18..c037e3e724 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,275 @@ +1.11.2 (2021-05-03) +------------------------------------------------------------------------ +Change: [Win32] Limit hardware accelerated video driver to OpenGL 3.2 or higher (#9077) +Change: More improvements to the GUI at different scales (#9075, #9102, #9107, #9133, #9174, #9183) +Fix: Query windows could be partially drawn (#9184) +Fix #9113: Crash when removing an airport that exists in an aircraft's orders (#9182) +Fix #9117: [Fluidsynth] Hang when changing song (#9181) +Fix: String validation could leave invalid UTF-8 encoded strings (#9096) +Fix: [Network] Out-of-bounds memory access with modified servers sending too short password salts (#9176) +Fix: Crash when extra viewport with zero height has sign in view (#9175) +Fix #9147: Crash when taking screenshots (#9169) +Fix #6598: [Network] Prevent crashes when (re)joining network game by falling back to main menu first (#9163) +Fix #9152: Screenshot success popup window was treated as an error (#9159) +Fix: Fast-forward stuttering when vsync is enabled (#9140) +Fix: [Network, Win32] Network errors were handled badly (#9116) +Fix: [Network] Savegame transfer could stall in rare cases (#9106) +Fix #9097: [NewGRF] Cargo initial payment variable was being truncated (#9098) +Fix: [NewGRF] Industry variable 66 and object variable 46 erroneously truncated the distance (#9088) +Fix: [NewGRF] Industry variables 65 and 66 ignored the parameter, and always used the north tile (#9088) +Fix: Do not include regression test AI in bundle (#9068, #9164) +Fix #9062: [Win32] Version in executable was not set to current release version (#9066, #9154) + + +1.11.1 (2021-04-18) +------------------------------------------------------------------------ +Feature: Toggle to enable/disable vsync (#8997) +Feature: Volume controls in the Game Options window, and better defaults (#8943) +Add: Hotkey to focus object and rail filters (#8908) +Add: Better plural support for Romanian (#8936) +Change: Improve layout and spacing of several windows at different GUI scales (#9041, #9042, #9044, #9050) +Change: [Win32] Use user UI language setting for initial language selection (#8974) +Change: Make effect volume scale more intuitively (#8945, #8950) +Change: Improve padding of Object & Rail station windows (#8929) +Fix #6322: [Script] Crash when script allocates too much memory, now kills script instead (#9047) +Fix #7513: [Script] Crash on garbage collection with misbehaving script (#9040) +Fix #9028: [OpenGL] Crash when changing max sprite zoom level (#9032) +Fix #8874: show a warning when a NewGRF scan is requested multiple times (#9022) +Fix: Desync when GS unlocks railtype with wagon unlock (#9021) +Fix #9015: [Win32] Crash on running "pwd" command in the console (#9016) +Fix #9008: Validate starting year given on the command line (-t) (#9014) +Fix #8878: [Network] Slow DNS queries could block the server and disconnect clients (#9013) +Fix: Improve validation of OpenGL video driver to avoid crashes (#9007) +Fix: Credits scrolled too slowly with larger font sizes (#8994) +Fix #8977: Crash when altering max sprite resolution (#8993) +Fix #8956: Industry disaster news messages showed the wrong location (#8992) +Fix: [Win32] Font glyphs of certain widths had broken rendering (#8990) +Fix #8930: [Win32] Duplicate text input issue for systems using IME (#8976) +Fix: [Network] Potential stale client entries in client list (#8959) +Fix: Graphical issues when dragging measurement tooltips (#8951) +Fix: [Fluidsynth] Use provided default soundfont if available (#8948, #8953) +Fix #8935: [macOS] Crash on save (#8944) +Fix #8922: Crash when selling shared vehicles with shared vehicle window open (#8926) +Fix: Compiling on armhf (Raspberry Pi) (#8924) + + +1.11.0 (2021-04-01) +------------------------------------------------------------------------ +Feature: Allow setting a custom terrain type to define highest peak (#8891) +Feature: Auto-detect map height limit based on generated map (#8891) +Feature: Setting to indicate desert coverage for tropic climate and snow coverage for arctic climate (replaces snow line height) (#8891) +Add: Allow setting the highest mountain for heightmaps (#8891) +Change: Scale exported heightmaps to highest peak and inform the user of this value (#8891) +Change: Remove "maximum map height" from the New Game GUI (#8891) +Fix #8803: Only auto-remove signals when rail can be built (#8904) +Fix #8565: Stopped road vehicle displays a speed different than 0 (#8901) +Fix #8886: Don't try to resolve folders within tars named '.' (#8893) +Fix: Placing random trees in SE crashes the game (#8892) +Fix #8875: Filter string in station window breaks flow in user interface (#8885) +Fix #8871: [OpenGL] Initialize all buffers after resize and clear back buffer (#8877) +Fix: OpenGL performance with some AMD GPUs (#8876) +Fix: Recompute road/railtype availability after disabling the engine (#8872) +Fix: OSK layout not scaled for 2x or 4x GUI scale (#8868) + + +1.11.0-RC1 (2021-03-14) +------------------------------------------------------------------------ +Feature: Option to (dis-)allow hardware accelerated video drivers (#8819) +Feature: Option to set display refresh rate (#8813) +Feature: Allow custom width/height of screenshot and making heightmap screenshots via console (#8804) +Feature: Allow filtering on name in rail station window (#8706) +Feature: Setting for highest resolution of sprites to use (#8604) +Add: Make NewGRF Scanner / World Generation update smoother and make aborting it react faster (#8830) +Add: Malaysia Ringgit as Currency (#8783) +Add: "Engines only" filter in build train window (#8733) +Change: De-limit framerate window's framerate (#8772) +Change: Clarify what effect town interactions have (#8744) +Change: Don't show global goals in company goal windows (#8709) +Change: Recolour graph windows to brown (#8700) +Fix #8855: Bootstrap could result in an empty screen when bootstrap fails (#8856) +Fix #8851: Don't allow infinite "exec" depth in script, but limit to 10 deep (#8852) +Fix #8647: Incorrect drawing order of tram catenary sprites (#8843) +Fix #8711: Having gui_zoom lower than zoom_min causes a crash (#8835) +Fix #8810: "aircraft out of fuel" news shows the wrong place (#8832) +Fix #8833: Don't reload NewGRFs when we are shutting down (#8830) +Fix: Scale padding between elements the same as other padding (#8829) +Fix #8808: [OSX, OpenGL] Crash on switching blitters due to double-mapping the video buffer (#8822) +Fix #8784: Using Alt+Enter doesn't update the fullscreen toggle visibly (#8820) +Fix #8817: Keep NewGRF order for object class sorting (#8818) +Fix #8809: Crash when removing airport when hangar window open (#8815) +Fix #8799: Crash when Search Internet in Multiplayer (#8801) +Fix #8775: [Win32] Don't create the main window when Alt-Tabbing back into fullscreen (#8792) +Fix #8774: Black screenshots when using 40bpp-blitter (#8791) +Fix: [OSX] Hide dock when entering fullscreen (#8789) +Fix: Bootstrap fails to start on clean install (#8788) +Fix: Terraform limit acts random when maxing out per_64k_frames setting (#8782) +Fix: Max-value of fast-forward-speed-limit can be outside its storage size (#8769) + + +1.11.0-beta2 (2021-02-28) +------------------------------------------------------------------------ +Feature: Add setting to limit fast-forward speed (#8766) +Feature: Significant performance improvements to all video drivers (#8605, #8652, #8660, #8685, #8702, #8703, #8707, #8726, #8740) +Feature: Configurable display refresh-rate, default to 60fps (#8680) +Feature: Automatically upload releases to Steam (#8644) +Feature: Generic Linux builds (#8641) +Feature: [GS] Allow non-question type windows to have no buttons (#8638) +Feature: [macOS] ZIP build (#8614) +Feature: Object class selection string filtering (#8603) +Feature: 'Remove all industries' button in scenario editor (#8550) +Feature: Automatic UI and font zoom levels when supported by the OS (#8537) +Feature: [macOS] Render screen at native resolution by default for HiDPI screens (#8519) +Feature: OpenGL video driver (#7744) +Add: Indonesia Rupiah currency (#8616) +Change: Improve graph period markings (#8732) +Change: Make pathfinder account for maximum order speed, if set (#8722) +Change: Darken graph grid lines for legibility (#8690) +Change: Make order window hotkeys toggle for load & unload variants (#8669) +Change: Use a more specific error message when attempting to bulldoze your own HQ (#8667) +Change: Convert .md to .rtf for Windows/Mac packages (#8617) +Change: Move the 'tree placer algorithm' & 'road drive side' settings to the Settings window (#8566) +Change: Move town name generator selection to mapgen GUI (#8566) +Change: [macOS] Native font rendering (#8518) +Fix: Display of network lobby windows for different GUI sizes (#8765) +Fix: Don't desync if client leaves before you finish downloading map (#8755) +Fix: Allow estimating vehicle clone cost even if short on money (#8748) +Fix: Don't notify twice that a client left because of a timeout (#8746) +Fix: Vehicle cursor size did not account for the interface zoom level (#8739) +Fix #8123: Trams on half-tiles couldn't find depots (#8738) +Fix #8276: [NewGRF] Crash when an object's size was not set (#8719) +Fix #8349: Close depot vehicle list windows when closing the depot window (#8717) +Fix #8594: [NRT] Road pathfinder did not account for roadtype speed limits or lengths of tunnels/bridges (#8710) +Fix: Whole status bar instead of money widget refreshed on money change (#8692) +Fix: Unnecessary status bar redraws when there is no news to show (#8691) +Fix: New orders are non-stop by default (#8689) +Fix: Framerate window showed a slightly higher rate than actually measured (#8682) +Fix: Autorenew failure advice due to bad refit being shown to all companies (#8681) +Fix #8625: Wrong ending year was displayed in highscore table (#8672) +Fix #8620: Scale spacing between date & news in history window according to font scaling (#8671) +Fix: [Win32] Set minimum resolution for timers to 1ms (#8660) +Fix: Mention our websites with https:// (instead of http://) (#8657) +Fix: [Emscripten] Open links in browser (#8655) +Fix: Don't crash when towns upgrade road tiles during expansion (#8651) +Fix #8029: [SDL2] Blank display when under Wayland (#8648) +Fix: Default Network Server List sorter put compatible servers in wrong order (#8626) +Fix: Use non-pulsating red highlight for coverage (#8622) +Fix: Center text and image in vehicle statusbar vertically (#8602) +Fix: Don't walk out of the map when trying to build tunnels (#8600) +Fix: Off-by-one error in desert/rainforest positioning at world gen (#8588) +Fix #8037: Crash when restarting AI that is controlling the same company as the player (#8587) +Fix: Stopped ships shouldn't block depots (#8578) + + +1.11.0-beta1 (2021-01-22) +------------------------------------------------------------------------ +Feature: [GS] Ability to set some extra text in the industry window (#8576) +Feature: Show rainforest under vegetation on smallmap (#8562) +Feature: Automatically determine window size on new install (#8536) +Feature: Towns can build tunnels (#8473) +Feature: Make maximum length of town bridges depend on population (with a minimum limit of 4) (#8439) +Feature: New icons for renaming and go-to-location on GUI windows, and improve consistency of usage (#8455) +Feature: Support for ARM64 on Apple Silicon and Windows (#8340, #8577, #8583) +Feature: Add an option to disable tree growth completely (#8415) +Feature: Support for Emscripten (play-OpenTTD-in-the-browser!) (#8355) +Feature: Show group name as part of the default vehicle name (#8307) +Feature: "Frozen" economy setting that stops production changes and industry closures (#8282) +Feature: New velocity unit "tiles/day" (#8278) +Feature: Option to automatically remove signals when placing rail (#8274) +Feature: Increase max possible distance from border for oil refineries and rigs (#8237) +Feature: Improve tree planting window, and allow planting 'clumps' of trees by dragging in the scenario editor (#8234) +Feature: Indian Rupee (INR) currency (#8136) +Feature: [GS] Ability to give a company exclusive access to an industry (#8115) +Feature: Hotkeys for Land Info window, News window & close error window (#8053, #8266) +Feature: Improve rendering of large viewports (#7962) +Feature: [GS] Influence industry production changes from GameScript (#7912) +Feature: [GS] Push-buttons on storybook pages (#7896) +Feature: Option to group vehicle lists by shared orders (#7028) +Feature: Drag-and-drop vehicles in group GUI for shared order groups (#7028) +Add: [GS] A tile parameter to GSCompany::ChangeBankBalance for showing changes more visually (#8573) +Add: [NewGRF] Allow NewGRF vehicles to query the current rail/road/tram type (#8554) +Add: [Script] ScriptCargo::GetName for the human readable name of cargoes (#8544) +Add: "reload" console command to reload the current scenario or heightmap (#8527) +Add: [NewGRF] Flag to test if inflation is on or off (#8427) +Add: [Script] Native priority queue (useful for things like pathfinders) (#8091) +Add: [NewGRF] Industry behaviour flag to override second cargo production clamping for water industries when using smooth economy (#8079) +Change: [SDL2] Start game on the screen where the cursor is (#8572) +Change: Use a dark background for all profit graphs to increase contrast (#8557) +Change: Reword warning in cheat window (#8538) +Change: Enable the toolbar for road/rail/dock/airport, regardless of vehicle availability (#8521) +Change: For arctic and tropical climates, make sure at least a few hills are generated (#8513) +Change: Destroying a tunnel/bridge now sells the tracks before destroying the tunnel/bridge (#8508) +Change: Move "give money" from client-list to company window (#8500) +Change: [MacOS] Hide Dock and menu when in fullscreen mode (#8487) +Change: Improve performance for complex vehicle chains by resolving sprites less frequently (#8485) +Change: Make engine reliability independent of introduction date (#8470) +Change: Some default settings to improve gameplay for new players - default non-stop orders on, disable inflation, quick goto orders, show track reservations, and more (#8463) +Change: Converting town-owned road types now requires a positive town rating (#8457) +Change: Rework server list buttons for searching LAN/internet servers (#8426) +Change: Add some styling to GS question windows depending on the type (#8422) +Change: [Linkgraph] Speed up game exit by allowing job threads to be aborted early (#8416) +Change: Prevent towns from building dead-end road bridges (#8401) +Change: Send network error to the server before making an emergency save (#8387) +Change: Extend the allowed range for max loan setting up to £2 billion (#8386) +Change: Don't display OS name when exiting the game (#8366) +Change: Save openttd.cfg immediately on changing a setting (#8358) +Change: Autorenew now defaults to on (#8352) +Change: [NewGRF] Also use aircraft property 12 for helicopters (#8347) +Change: Service at depot also resets breakdown chance (#8317) +Change: Use key names instead of characters in hotkey.cfg (#8291) +Change: Allow command cost-estimation while paused (#8222) +Change: Always apply inflation from 1920 to 2090, no matter the game start year (#7589) +Change: Use CMake for build system (#7270) +Change: [Linkgraph] Pause the game when linkgraph jobs lag (#7081) +Change: Place "Group by" above "Sort by" in station window for consistency (#7028) +Fix #8589: Prevent desyncs with vehicle motion counters and NewGRFs (#8591) +Fix #7670: Improve pathfinder performance when lost vehicles are blocked from moving (#8568) +Fix: Inform user if a custom font failed to load due to missing glyphs (#8559) +Fix: Don't allow wagon chains (without an engine) to exceed maximum train length (#8533) +Fix #7619: Super fast NewGRF aircraft could be unable to land (#8531) +Fix: Improve connection retries for the content server in cases of broken networking (#8530) +Fix #7972: Show invalid orders to stations that don't accept the vehicle (#8516) +Fix: Error when trying to clone a vehicle with invalid orders (#8515) +Fix #8050: Various off-by-one errors in how the end-year of the game was used (#8512) +Fix #8332: Aborting vehicle group drag & drop could cause crashes (#8511) +Fix #8168: Allow relocating HQ partially over an existing HQ (#8510) +Fix #8068: Allow selling tram track regardless of bank balance (#8509) +Fix #7604: Prevent houses from wandering away from roads (#8507) +Fix: Make the "password" button the same size as the other buttons in the Company window (#8500) +Fix #7611: Keep news about vehicle accidents around after the vehicle is cleaned up (#8497) +Fix: [MacOS] Full animation in fullscreen mode was reducing the height of the window (#8491) +Fix: [MacOS] Loading custom fonts (#8484) +Fix: Network client makes emergency saves twice if the server is disconnected (#8477) +Fix #8462: Stop towns from trying to build roads on water (#8471) +Fix: [NewGRF] GetCurveSpeedLimit should use the railtype from the current tile (#8466) +Fix #8437: Crash when using certain heliports with certain rotated airports (#8458) +Fix #8437: Planes would land at the wrong height if the top corner of the airport was lowered (#8458) +Fix #8297: Infrastructure counters for road tunnels, bridges & depots (#8454) +Fix #6468: Don't store the version of AIs that are started via console (#8430) +Fix: Don't lower tree density if spreading is not enabled (#8413) +Fix: Prevent savegame version conflicts with certain old patchpacks (#8411) +Fix: [NewGRF] Variable 0x44 was always HZB_TOWN_EDGE for road stops (#8400) +Fix #8313: Use correct capitalization for TTO / DOS music files in the baseset metadata (#8385) +Fix: [NewGRF] Action 7/9 conditions 0x0F to 0x12 failed, if 'param' was 0x88 (#8382) +Fix: Change the working-dir searchpath when using '-c' (#8367) +Fix: Useless warning with -snull and no BaseSounds available (#8361) +Fix: Crash trying to load TTO/TTD savegames. (#8356) +Fix: [Script] Don't echo script exceptions to console (#8331) +Fix: Slovak ownname was using the wrong form (#8326) +Fix #8311: [NewGRF] Industry probability at map generation was scaled differently when set via property or callback (#8312) +Fix: Only check houses for cargo when generating subsidies with towns (#8305) +Fix: Sprite preview in sprite aligner was too small with scaled UI (#8288) +Fix: Spell 'Viewport' consistently (#8260) +Fix #7772: Show vehicle destination on mouseover when vehicle stopped (#8236, #8543) +Fix #8232: Huge screenshot warning was shown incorrectly (#8224) +Fix #8153: Report incompatible cargo/order when autoreplace fails (#8169) +Fix: [Script] ScriptMarine::AreWaterTilesConnected did not work for aqueducts (#8074) +Fix #7645: Add cost of clearing the sloped tile to the price of a dock (#7947) +Fix #6452: Reset only editable and visible settings from GUI (#7890) +Fix: Original terrain generator did not keep a single gap of water at the borders (#7883) +Remove: In-game console command "content select all" (#8363) +Remove: [OSX] Support for OSX older than 10.7, including QuickTime music driver (#8078) + + 1.10.3 (2020-08-09) ------------------------------------------------------------------------ Change: Also make roadside trees match the tree transparency option (#8245) diff --git a/cm_changelog.txt b/cm_changelog.txt index 9a813b7fca..9540e40abf 100644 --- a/cm_changelog.txt +++ b/cm_changelog.txt @@ -74,6 +74,28 @@ This is usable for any OpenTTD servers == CHANGELOG == +*** 1.11.2 (3 May 2021) *** +- OpenTTD update. + +*** 1.11.1 (19 Apr 2021) *** +- Fixed crash when building road stop or airport. +- Fixed joining companies in the game. +- Fixed graphical glitches when using town growth tiles zoning. +- Added German translation for additional string - by danidoedel. + +*** 1.11.0 (5 Apr 2021) *** +- Added two more minimap zoom levels (very useful on 4k monitors). +- When building a station show estimated monthly supply amounts. +- Added setting to change graphs background colour between old one (grey) and new one (black). +- Subtle visual improvements for graphs. +- Made rail depot building preview red if it can't be built there and allow rotating it with a hotkey (defaults to middle mouse button). +- Added building preview and rotation hotkey(also MMB by default) for rail stations, road stops and road depots. +- Added building preview for aiports. +- Added Zstandard(zstd) savegame compression option. May or may not reduce map download time on CityMania servers. +- Show vehicle IDs in vehicle window if newgrf_developer_tools is enabled. +- Addded `cmresettowngrowth` command to reset growth rate of all towns to normal (helpful if some gamscript messed them up). +- Exports house spec info in `cmexport` command. + *** 1.10.3 (10 Aug 2020) *** - Show preview when building a rail depot. - Add an option to enable shading trees on slopes for better looks. diff --git a/cmake/AddCustomXXXTimestamp.cmake b/cmake/AddCustomXXXTimestamp.cmake new file mode 100644 index 0000000000..c8d134e081 --- /dev/null +++ b/cmake/AddCustomXXXTimestamp.cmake @@ -0,0 +1,145 @@ +macro(_parse_arguments_with_multi_hack ORIGINAL_COMMAND_LINE) + # cmake_parse_arguments() put all the MULTIS in a single variable; you + # lose the ability to see for example multiple COMMANDs. To be able to + # passthrough multiple MULTIS, we add a marker after every MULTI. This + # allows us to reassemble the correct amount again before giving it to + # the wrapped command with _reassemble_command_line(). + + set(COMMAND_LINE "${ORIGINAL_COMMAND_LINE}") + + foreach(MULTI IN LISTS MULTIS) + string(REPLACE "${MULTI}" "${MULTI};:::" COMMAND_LINE "${COMMAND_LINE}") + endforeach() + + cmake_parse_arguments(PARAM "${OPTIONS}" "${SINGLES}" "${MULTIS}" ${COMMAND_LINE}) +endmacro() + +macro(_reassemble_command_line) + # Reassemble the command line as we original got it. + set(NEW_COMMAND_LINE ${PARAM_UNPARSED_ARGUMENTS}) + + foreach(OPTION IN LISTS OPTIONS) + if(PARAM_${OPTION}) + list(APPEND NEW_COMMAND_LINE "${OPTION}") + endif() + endforeach() + + foreach(SINGLE IN LISTS SINGLES) + if(PARAM_${SINGLE}) + list(APPEND NEW_COMMAND_LINE "${SINGLE}" "${PARAM_${SINGLE}}") + endif() + endforeach() + + foreach(MULTI IN LISTS MULTIS) + if(PARAM_${MULTI}) + # Replace our special marker with the name of the MULTI again. This + # restores for example multiple COMMANDs again. + string(REPLACE ":::" "${MULTI}" PARAM_${MULTI} "${PARAM_${MULTI}}") + list(APPEND NEW_COMMAND_LINE "${PARAM_${MULTI}}") + endif() + endforeach() +endmacro() + +# Generated files can be older than their dependencies, causing useless +# regenerations. This function replaces each file in OUTPUT with a .timestamp +# file, adds a command to touch it and move the original file in BYPRODUCTS, +# before calling add_custom_command(). +# +# Note: Any add_custom_target() depending on files in original OUTPUT must use +# add_custom_target_timestamp() instead to have the correct dependencies. +# +# add_custom_command_timestamp(OUTPUT output1 [output2 ...] +# COMMAND command1 [ARGS] [args1...] +# [COMMAND command2 [ARGS] [args2...] ...] +# [MAIN_DEPENDENCY depend] +# [DEPENDS [depends...]] +# [BYPRODUCTS [files...]] +# [IMPLICIT_DEPENDS depend1 +# [ depend2] ...] +# [WORKING_DIRECTORY dir] +# [COMMENT comment] +# [VERBATIM] [APPEND] [USES_TERMINAL]) +function(add_custom_command_timestamp) + set(OPTIONS VERBATIM APPEND USES_TERMINAL) + set(SINGLES MAIN_DEPENDENCY WORKING_DIRECTORY COMMENT) + set(MULTIS OUTPUT COMMAND DEPENDS BYPRODUCTS IMPLICIT_DEPENDS) + + _parse_arguments_with_multi_hack("${ARGN}") + + # Create a list of all the OUTPUTs (by removing our magic marker) + string(REPLACE ":::;" "" OUTPUTS "${PARAM_OUTPUT}") + + # Reset the OUTPUT and BYPRODUCTS as an empty list (if needed). + # Because they are MULTIS, we need to add our special marker here. + set(PARAM_OUTPUT ":::") + if(NOT PARAM_BYPRODUCTS) + set(PARAM_BYPRODUCTS ":::") + endif() + + foreach(OUTPUT IN LISTS OUTPUTS) + # For every output, we add a 'cmake -E touch' entry to update the + # timestamp on each run. + get_filename_component(OUTPUT_FILENAME ${OUTPUT} NAME) + string(APPEND PARAM_COMMAND ";:::;${CMAKE_COMMAND};-E;touch;${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILENAME}.timestamp") + + # We change the OUTPUT to a '.timestamp' variant, and make the real + # output a byproduct. + list(APPEND PARAM_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILENAME}.timestamp) + list(APPEND PARAM_BYPRODUCTS ${OUTPUT}) + + # Mark this file as being a byproduct; we use this again with + # add_custom_target_timestamp() to know if we should point to the + # '.timestamp' variant or not. + set_source_files_properties(${OUTPUT} PROPERTIES BYPRODUCT ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILENAME}.timestamp) + endforeach() + + # Reassemble and call the wrapped command + _reassemble_command_line() + add_custom_command(${NEW_COMMAND_LINE}) +endfunction() + +# Generated files can be older than their dependencies, causing useless +# regenerations. This function adds a .timestamp file for each file in DEPENDS +# replaced by add_custom_command_timestamp(), before calling add_custom_target(). +# +# add_custom_target_timestamp(Name [ALL] [command1 [args1...]] +# [COMMAND command2 [args2...] ...] +# [DEPENDS depend depend depend ... ] +# [BYPRODUCTS [files...]] +# [WORKING_DIRECTORY dir] +# [COMMENT comment] +# [VERBATIM] [USES_TERMINAL] +# [SOURCES src1 [src2...]]) +function(add_custom_target_timestamp) + set(OPTIONS VERBATIM USES_TERMINAL) + set(SINGLES WORKING_DIRECTORY COMMENT) + set(MULTIS COMMAND DEPENDS BYPRODUCTS SOURCES) + # ALL is missing, as the order is important here. It will be picked up + # by ${PARAM_UNPARSED_ARGUMENTS} when reassembling the command line. + + _parse_arguments_with_multi_hack("${ARGN}") + + # Create a list of all the DEPENDs (by removing our magic marker) + string(REPLACE ":::;" "" DEPENDS "${PARAM_DEPENDS}") + + # Reset the DEPEND as an empty list. + # Because it is a MULTI, we need to add our special marker here. + set(PARAM_DEPENDS ":::") + + foreach(DEPEND IN LISTS DEPENDS) + # Check if the output is produced by add_custom_command_timestamp() + get_source_file_property(BYPRODUCT ${DEPEND} BYPRODUCT) + + if(BYPRODUCT STREQUAL "NOTFOUND") + # If it is not, just keep it as DEPEND + list(APPEND PARAM_DEPENDS "${DEPEND}") + else() + # If it is, the BYPRODUCT property points to the timestamp we want to depend on + list(APPEND PARAM_DEPENDS "${BYPRODUCT}") + endif() + endforeach() + + # Reassemble and call the wrapped command + _reassemble_command_line() + add_custom_target(${NEW_COMMAND_LINE}) +endfunction() diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake new file mode 100644 index 0000000000..86d336b595 --- /dev/null +++ b/cmake/CompileFlags.cmake @@ -0,0 +1,163 @@ +# Macro which contains all bits to setup the compile flags correctly. +# +# compile_flags() +# +macro(compile_flags) + if(MSVC) + if(VCPKG_TARGET_TRIPLET MATCHES "-static" AND NOT VCPKG_TARGET_TRIPLET MATCHES "-md") + # Switch to MT (static) instead of MD (dynamic) binary + + # For MSVC two generators are available + # - a command line generator (Ninja) using CMAKE_BUILD_TYPE to specify the + # configuration of the build tree + # - an IDE generator (Visual Studio) using CMAKE_CONFIGURATION_TYPES to + # specify all configurations that will be available in the generated solution + list(APPEND MSVC_CONFIGS "${CMAKE_BUILD_TYPE}" "${CMAKE_CONFIGURATION_TYPES}") + + # Set usage of static runtime for all configurations + foreach(MSVC_CONFIG ${MSVC_CONFIGS}) + string(TOUPPER "CMAKE_CXX_FLAGS_${MSVC_CONFIG}" MSVC_FLAGS) + string(REPLACE "/MD" "/MT" ${MSVC_FLAGS} "${${MSVC_FLAGS}}") + endforeach() + endif() + + # "If /Zc:rvalueCast is specified, the compiler follows section 5.4 of the + # C++11 standard". We need C++11 for the way we use threads. + add_compile_options(/Zc:rvalueCast) + + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + # Enable multi-threaded compilation. + add_compile_options(/MP) + endif() + endif() + + # Add some -D flags for Debug builds. We cannot use add_definitions(), because + # it does not appear to support the $<> tags. + add_compile_options( + "$<$:-D_DEBUG>" + "$<$>:-D_FORTIFY_SOURCE=2>" # FORTIFY_SOURCE should only be used in non-debug builds (requires -O1+) + ) + if(MINGW) + add_link_options( + "$<$>:-fstack-protector>" # Prevent undefined references when _FORTIFY_SOURCE > 0 + ) + endif() + + # Prepare a generator that checks if we are not a debug, and don't have asserts + # on. We need this later on to set some compile options for stable releases. + set(IS_STABLE_RELEASE "$>,$>>") + + if(MSVC) + add_compile_options(/W3) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + add_compile_options( + -W + -Wall + -Wcast-qual + -Wextra + -Wsign-compare + -Wundef + -Wpointer-arith + -Wwrite-strings + -Wredundant-decls + -Wformat-security + -Wformat=2 + -Winit-self + -Wnon-virtual-dtor + + # Often parameters are unused, which is fine. + -Wno-unused-parameter + # We use 'ABCD' multichar for SaveLoad chunks identifiers + -Wno-multichar + + # Compilers complains about that we break strict-aliasing. + # On most places we don't see how to fix it, and it doesn't + # break anything. So disable strict-aliasing to make the + # compiler all happy. + -fno-strict-aliasing + ) + + # When we are a stable release (Release build + USE_ASSERTS not set), + # assertations are off, which trigger a lot of warnings. We disable + # these warnings for these releases. + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options( + "$<${IS_STABLE_RELEASE}:-Wno-unused-variable>" + "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-parameter>" + "$<${IS_STABLE_RELEASE}:-Wno-unused-but-set-variable>" + ) + else() + add_compile_options( + "$<${IS_STABLE_RELEASE}:-Wno-unused-variable>" + "$<${IS_STABLE_RELEASE}:-Wno-unused-parameter>" + ) + endif() + + # Ninja processes the output so the output from the compiler + # isn't directly to a terminal; hence, the default is + # non-coloured output. We can override this to get nicely + # coloured output, but since that might yield odd results with + # IDEs, we extract it to an option. + if(OPTION_FORCE_COLORED_OUTPUT) + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + add_compile_options (-fdiagnostics-color=always) + elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + add_compile_options (-fcolor-diagnostics) + endif() + endif() + + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag("-flifetime-dse=1" LIFETIME_DSE_FOUND) + + add_compile_options( + # GCC 4.2+ automatically assumes that signed overflows do + # not occur in signed arithmetics, whereas we are not + # sure that they will not happen. It furthermore complains + # about its own optimized code in some places. + "-fno-strict-overflow" + + # Prevent optimisation supposing enums are in a range specified by the standard + # For details, see http://gcc.gnu.org/PR43680 + "-fno-tree-vrp" + + # -flifetime-dse=2 (default since GCC 6) doesn't play + # well with our custom pool item allocator + "$<$:-flifetime-dse=1>" + ) + endif() + + if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + if (NOT CMAKE_OSX_ARCHITECTURES STREQUAL "arm64") + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag("-mno-sse4" NO_SSE4_FOUND) + + if(NO_SSE4_FOUND) + add_compile_options( + # Don't use SSE4 for general sources to increase compatibility. + -mno-sse4 + ) + endif() + endif() + endif() + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + add_compile_options( + -Wall + # warning #873: function ... ::operator new ... has no corresponding operator delete ... + -wd873 + # warning #1292: unknown attribute "fallthrough" + -wd1292 + # warning #1899: multicharacter character literal (potential portability problem) + -wd1899 + # warning #2160: anonymous union qualifier is ignored + -wd2160 + ) + else() + message(FATAL_ERROR "No warning flags are set for this compiler yet; please consider creating a Pull Request to add support for this compiler.") + endif() + + if(NOT WIN32) + # rdynamic is used to get useful stack traces from crash reports. + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rdynamic") + endif() +endmacro() diff --git a/cmake/CreateGrfCommand.cmake b/cmake/CreateGrfCommand.cmake new file mode 100644 index 0000000000..107ec09b88 --- /dev/null +++ b/cmake/CreateGrfCommand.cmake @@ -0,0 +1,50 @@ +# Macro which contains all bits and pieces to create a single grf file based +# on NFO and PNG files. +# +# create_grf_command() +# +function(create_grf_command) + set(EXTRA_PNG_SOURCE_FILES ${ARGV}) + + get_filename_component(GRF_SOURCE_FOLDER_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME) + get_filename_component(GRF_BINARY_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../${GRF_SOURCE_FOLDER_NAME}.grf ABSOLUTE) + file(GLOB_RECURSE GRF_PNG_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.png) + file(GLOB_RECURSE GRF_NFO_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.nfo) + set(GRF_PNG_SOURCE_FILES ${GRF_PNG_SOURCE_FILES} ${EXTRA_PNG_SOURCE_FILES}) + + # Copy over all the PNG files to the correct folder + foreach(GRF_PNG_SOURCE_FILE IN LISTS GRF_PNG_SOURCE_FILES) + get_filename_component(GRF_PNG_SOURCE_FILE_NAME "${GRF_PNG_SOURCE_FILE}" NAME) + set(GRF_PNG_BINARY_FILE "${CMAKE_CURRENT_BINARY_DIR}/sprites/${GRF_PNG_SOURCE_FILE_NAME}") + + add_custom_command(OUTPUT ${GRF_PNG_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E copy + ${GRF_PNG_SOURCE_FILE} + ${GRF_PNG_BINARY_FILE} + MAIN_DEPENDENCY ${GRF_PNG_SOURCE_FILE} + COMMENT "Copying ${GRF_PNG_SOURCE_FILE_NAME} sprite file" + ) + + list(APPEND GRF_PNG_BINARY_FILES ${GRF_PNG_BINARY_FILE}) + endforeach() + + add_custom_command(OUTPUT ${GRF_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} + -DGRF_SOURCE_FOLDER=${CMAKE_CURRENT_SOURCE_DIR} + -DGRF_BINARY_FILE=${GRF_BINARY_FILE} + -DNFORENUM_EXECUTABLE=${NFORENUM_EXECUTABLE} + -DGRFCODEC_EXECUTABLE=${GRFCODEC_EXECUTABLE} + -P ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake + MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake + DEPENDS ${GRF_PNG_BINARY_FILES} + ${GRF_NFO_SOURCE_FILES} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating ${GRF_SOURCE_FOLDER_NAME}.grf" + ) + + # For conviance, if you want to only test building the GRF + add_custom_target(${GRF_SOURCE_FOLDER_NAME}.grf + DEPENDS + ${GRF_BINARY_FILE} + ) +endfunction() diff --git a/cmake/CreateRegression.cmake b/cmake/CreateRegression.cmake new file mode 100644 index 0000000000..8e3865bc55 --- /dev/null +++ b/cmake/CreateRegression.cmake @@ -0,0 +1,86 @@ +# Macro which contains all bits and pieces to create the regression tests. +# This creates both a standalone target 'regression', and it integrates with +# 'ctest'. The first is prefered, as it is more verbose, and takes care of +# dependencies correctly. +# +# create_regression() +# +macro(create_regression) + # Find all the files in the regression folder; they need to be copied to the + # build folder before we can run the regression + file(GLOB_RECURSE REGRESSION_SOURCE_FILES ${CMAKE_SOURCE_DIR}/regression/*) + foreach(REGRESSION_SOURCE_FILE IN LISTS REGRESSION_SOURCE_FILES) + string(REPLACE "${CMAKE_SOURCE_DIR}/regression/" "" REGRESSION_SOURCE_FILE_NAME "${REGRESSION_SOURCE_FILE}") + string(CONCAT REGRESSION_BINARY_FILE "${CMAKE_BINARY_DIR}/ai/" "${REGRESSION_SOURCE_FILE_NAME}") + + if("${REGRESSION_SOURCE_FILE_NAME}" STREQUAL "regression.cfg") + continue() + endif() + + add_custom_command(OUTPUT ${REGRESSION_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E copy + ${REGRESSION_SOURCE_FILE} + ${REGRESSION_BINARY_FILE} + MAIN_DEPENDENCY ${REGRESSION_SOURCE_FILE} + COMMENT "Copying ${REGRESSION_SOURCE_FILE_NAME} regression file" + ) + + list(APPEND REGRESSION_BINARY_FILES ${REGRESSION_BINARY_FILE}) + endforeach() + + # Copy the regression configuration in a special folder, so all autogenerated + # folders end up in the same place after running regression. + add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/regression/regression.cfg + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_SOURCE_DIR}/regression/regression.cfg + ${CMAKE_BINARY_DIR}/regression/regression.cfg + MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/regression/regression.cfg + COMMENT "Copying ${REGRESSION_SOURCE_FILE_NAME} regression file" + ) + list(APPEND REGRESSION_BINARY_FILES ${CMAKE_BINARY_DIR}/regression/regression.cfg) + + # Create a new target which copies all regression files + add_custom_target(regression_files + ALL # this is needed because 'make test' doesn't resolve dependencies, and otherwise this is never executed + DEPENDS + ${REGRESSION_BINARY_FILES} + ) + + enable_testing() + + # Find all the tests we have, and create a target for them + file(GLOB REGRESSION_TESTS ${CMAKE_SOURCE_DIR}/regression/*) + foreach(REGRESSION_TEST IN LISTS REGRESSION_TESTS) + get_filename_component(REGRESSION_TEST_NAME "${REGRESSION_TEST}" NAME) + + if("${REGRESSION_TEST_NAME}" STREQUAL "regression.cfg") + continue() + endif() + + add_custom_target(regression_${REGRESSION_TEST_NAME} + COMMAND ${CMAKE_COMMAND} + -DOPENTTD_EXECUTABLE=$ + -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} + -DREGRESSION_TEST=${REGRESSION_TEST_NAME} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" + DEPENDS openttd regression_files + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Running regression test ${REGRESSION_TEST_NAME}" + ) + + # Also make sure that 'make test' runs the regression + add_test(NAME regression_${REGRESSION_TEST_NAME} + COMMAND ${CMAKE_COMMAND} + -DOPENTTD_EXECUTABLE=$ + -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} + -DREGRESSION_TEST=${REGRESSION_TEST_NAME} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + + list(APPEND REGRESSION_TARGETS regression_${REGRESSION_TEST_NAME}) + endforeach() + + # Create a new target which runs the regression + add_custom_target(regression + DEPENDS ${REGRESSION_TARGETS}) +endmacro() diff --git a/cmake/Endian.cmake b/cmake/Endian.cmake new file mode 100644 index 0000000000..3bfba653ca --- /dev/null +++ b/cmake/Endian.cmake @@ -0,0 +1,14 @@ +# Add the definitions to indicate which endian we are building for. +# +# add_endian_definition() +# +function(add_endian_definition) + include(TestBigEndian) + TEST_BIG_ENDIAN(IS_BIG_ENDIAN) + + if(IS_BIG_ENDIAN) + add_definitions(-DTTD_ENDIAN=TTD_BIG_ENDIAN) + else() + add_definitions(-DTTD_ENDIAN=TTD_LITTLE_ENDIAN) + endif() +endfunction() diff --git a/cmake/FindAllegro.cmake b/cmake/FindAllegro.cmake new file mode 100644 index 0000000000..5d873dd3e1 --- /dev/null +++ b/cmake/FindAllegro.cmake @@ -0,0 +1,65 @@ +#[=======================================================================[.rst: +FindAllegro +------- + +Finds the allegro library. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``Allegro_FOUND`` + True if the system has the allegro library. +``Allegro_INCLUDE_DIRS`` + Include directories needed to use allegro. +``Allegro_LIBRARIES`` + Libraries needed to link to allegro. +``Allegro_VERSION`` + The version of the allegro library which was found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Allegro_INCLUDE_DIR`` + The directory containing ``allegro.h``. +``Allegro_LIBRARY`` + The path to the allegro library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_Allegro QUIET allegro<5) + +find_path(Allegro_INCLUDE_DIR + NAMES allegro.h + PATHS ${PC_Allegro_INCLUDE_DIRS} +) + +find_library(Allegro_LIBRARY + NAMES alleg + PATHS ${PC_Allegro_LIBRARY_DIRS} +) + +set(Allegro_VERSION ${PC_Allegro_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Allegro + FOUND_VAR Allegro_FOUND + REQUIRED_VARS + Allegro_LIBRARY + Allegro_INCLUDE_DIR + VERSION_VAR Allegro_VERSION +) + +if(Allegro_FOUND) + set(Allegro_LIBRARIES ${Allegro_LIBRARY}) + set(Allegro_INCLUDE_DIRS ${Allegro_INCLUDE_DIR}) +endif() + +mark_as_advanced( + Allegro_INCLUDE_DIR + Allegro_LIBRARY +) diff --git a/cmake/FindEditbin.cmake b/cmake/FindEditbin.cmake new file mode 100644 index 0000000000..f4d55d7cb7 --- /dev/null +++ b/cmake/FindEditbin.cmake @@ -0,0 +1,30 @@ +# Autodetect editbin. Only useful for MSVC. + +if(NOT EDITBIN_DIRECTORY) + if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + get_filename_component(MSVC_COMPILE_DIRECTORY ${CMAKE_CXX_COMPILER} DIRECTORY) + set(EDITBIN_DIRECTORY ${MSVC_COMPILE_DIRECTORY}) + else() + # For clang-cl build + # find editbin.exe from environmental variable VCToolsInstallDir + set(EDITBIN_DIRECTORY "$ENV{VCToolsInstallDir}/bin/Hostx64/x64") + endif() +endif() + +message(CHECK_START "Finding editbin.exe") +find_program( + EDITBIN_EXECUTABLE editbin.exe + HINTS ${EDITBIN_DIRECTORY} +) + +if(EDITBIN_EXECUTABLE) + message(CHECK_PASS "found") +else() + message(CHECK_FAIL "not found , please manually specify EDITBIN_DIRECTORY") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Editbin + FOUND_VAR EDITBIN_FOUND + REQUIRED_VARS EDITBIN_EXECUTABLE +) diff --git a/cmake/FindFluidsynth.cmake b/cmake/FindFluidsynth.cmake new file mode 100644 index 0000000000..0ac4931d78 --- /dev/null +++ b/cmake/FindFluidsynth.cmake @@ -0,0 +1,65 @@ +#[=======================================================================[.rst: +FindFluidsynth +------- + +Finds the fluidsynth library. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``Fluidsynth_FOUND`` + True if the system has the fluidsynth library. +``Fluidsynth_INCLUDE_DIRS`` + Include directories needed to use fluidsynth. +``Fluidsynth_LIBRARIES`` + Libraries needed to link to fluidsynth. +``Fluidsynth_VERSION`` + The version of the fluidsynth library which was found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Fluidsynth_INCLUDE_DIR`` + The directory containing ``fluidsynth.h``. +``Fluidsynth_LIBRARY`` + The path to the fluidsynth library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_Fluidsynth QUIET fluidsynth) + +find_path(Fluidsynth_INCLUDE_DIR + NAMES fluidsynth.h + PATHS ${PC_Fluidsynth_INCLUDE_DIRS} +) + +find_library(Fluidsynth_LIBRARY + NAMES fluidsynth + PATHS ${PC_Fluidsynth_LIBRARY_DIRS} +) + +set(Fluidsynth_VERSION ${PC_Fluidsynth_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Fluidsynth + FOUND_VAR Fluidsynth_FOUND + REQUIRED_VARS + Fluidsynth_LIBRARY + Fluidsynth_INCLUDE_DIR + VERSION_VAR Fluidsynth_VERSION +) + +if(Fluidsynth_FOUND) + set(Fluidsynth_LIBRARIES ${Fluidsynth_LIBRARY}) + set(Fluidsynth_INCLUDE_DIRS ${Fluidsynth_INCLUDE_DIR}) +endif() + +mark_as_advanced( + Fluidsynth_INCLUDE_DIR + Fluidsynth_LIBRARY +) diff --git a/cmake/FindFontconfig.cmake b/cmake/FindFontconfig.cmake new file mode 100644 index 0000000000..68c557b826 --- /dev/null +++ b/cmake/FindFontconfig.cmake @@ -0,0 +1,101 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindFontconfig +-------------- + +Find Fontconfig headers and library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +``Fontconfig::Fontconfig`` + The Fontconfig library, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables in your project: + +``Fontconfig_FOUND`` + true if (the requested version of) Fontconfig is available. +``Fontconfig_VERSION`` + the version of Fontconfig. +``Fontconfig_LIBRARIES`` + the libraries to link against to use Fontconfig. +``Fontconfig_INCLUDE_DIRS`` + where to find the Fontconfig headers. +``Fontconfig_COMPILE_OPTIONS`` + this should be passed to target_compile_options(), if the + target is not used for linking + +#]=======================================================================] + + +# use pkg-config to get the directories and then use these values +# in the FIND_PATH() and FIND_LIBRARY() calls +find_package(PkgConfig QUIET) +pkg_check_modules(PKG_FONTCONFIG QUIET fontconfig) +set(Fontconfig_COMPILE_OPTIONS ${PKG_FONTCONFIG_CFLAGS_OTHER}) +set(Fontconfig_VERSION ${PKG_FONTCONFIG_VERSION}) + +find_path( Fontconfig_INCLUDE_DIR + NAMES + fontconfig/fontconfig.h + HINTS + ${PKG_FONTCONFIG_INCLUDE_DIRS} + /usr/X11/include +) + +find_library( Fontconfig_LIBRARY + NAMES + fontconfig + PATHS + ${PKG_FONTCONFIG_LIBRARY_DIRS} +) + +if(Fontconfig_INCLUDE_DIR AND NOT Fontconfig_VERSION) + file(STRINGS ${Fontconfig_INCLUDE_DIR}/fontconfig/fontconfig.h _contents REGEX "^#define[ \t]+FC_[A-Z]+[ \t]+[0-9]+$") + unset(Fontconfig_VERSION) + foreach(VPART MAJOR MINOR REVISION) + foreach(VLINE ${_contents}) + if(VLINE MATCHES "^#define[\t ]+FC_${VPART}[\t ]+([0-9]+)$") + set(Fontconfig_VERSION_PART "${CMAKE_MATCH_1}") + if(Fontconfig_VERSION) + string(APPEND Fontconfig_VERSION ".${Fontconfig_VERSION_PART}") + else() + set(Fontconfig_VERSION "${Fontconfig_VERSION_PART}") + endif() + endif() + endforeach() + endforeach() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Fontconfig + FOUND_VAR + Fontconfig_FOUND + REQUIRED_VARS + Fontconfig_LIBRARY + Fontconfig_INCLUDE_DIR + VERSION_VAR + Fontconfig_VERSION +) + + +if(Fontconfig_FOUND AND NOT TARGET Fontconfig::Fontconfig) + add_library(Fontconfig::Fontconfig UNKNOWN IMPORTED) + set_target_properties(Fontconfig::Fontconfig PROPERTIES + IMPORTED_LOCATION "${Fontconfig_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${Fontconfig_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${Fontconfig_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(Fontconfig_LIBRARY Fontconfig_INCLUDE_DIR) + +if(Fontconfig_FOUND) + set(Fontconfig_LIBRARIES ${Fontconfig_LIBRARY}) + set(Fontconfig_INCLUDE_DIRS ${Fontconfig_INCLUDE_DIR}) +endif() diff --git a/cmake/FindGrfcodec.cmake b/cmake/FindGrfcodec.cmake new file mode 100644 index 0000000000..089f956706 --- /dev/null +++ b/cmake/FindGrfcodec.cmake @@ -0,0 +1,13 @@ +# Autodetect grfcodec and nforenum. +# + +find_program(GRFCODEC_EXECUTABLE grfcodec) +find_program(NFORENUM_EXECUTABLE nforenum) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Grfcodec + FOUND_VAR GRFCODEC_FOUND + REQUIRED_VARS + GRFCODEC_EXECUTABLE + NFORENUM_EXECUTABLE +) diff --git a/cmake/FindICU.cmake b/cmake/FindICU.cmake new file mode 100644 index 0000000000..d12f36b0ad --- /dev/null +++ b/cmake/FindICU.cmake @@ -0,0 +1,69 @@ +# CMake provides a FindICU module since version 3.7. +# But it doesn't use pkgconfig, doesn't set expected variables, +# And it returns incomplete dependencies if only some modules are searched. + + +#[=======================================================================[.rst: +FindICU +------- + +Finds components of the ICU library. + +Accepted components are: uc, i18n, le, lx, io + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``ICU_FOUND`` + True if components of ICU library are found. +``ICU_VERSION`` + The version of the ICU library which was found. +``ICU__FOUND`` + True if the system has the component of ICU library. +``ICU__INCLUDE_DIRS`` + Include directories needed to use the component of ICU library. +``ICU__LIBRARIES`` + Libraries needed to link to the component of ICU library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) + +set(ICU_KNOWN_COMPONENTS "uc" "i18n" "le" "lx" "io") + +foreach(MOD_NAME IN LISTS ICU_FIND_COMPONENTS) + if(NOT MOD_NAME IN_LIST ICU_KNOWN_COMPONENTS) + message(FATAL_ERROR "Unknown ICU component: ${MOD_NAME}") + endif() + pkg_check_modules(PC_ICU_${MOD_NAME} QUIET icu-${MOD_NAME}) + + # Check the libraries returned by pkg-config really exist. + unset(PC_LIBRARIES) + foreach(LIBRARY IN LISTS PC_ICU_${MOD_NAME}_LIBRARIES) + unset(PC_LIBRARY CACHE) + find_library(PC_LIBRARY NAMES ${LIBRARY}) + if(NOT PC_LIBRARY) + unset(PC_ICU_${MOD_NAME}_FOUND) + endif() + list(APPEND PC_LIBRARIES ${PC_LIBRARY}) + endforeach() + unset(PC_LIBRARY CACHE) + + if(${PC_ICU_${MOD_NAME}_FOUND}) + set(ICU_COMPONENT_FOUND TRUE) + set(ICU_${MOD_NAME}_FOUND TRUE) + set(ICU_${MOD_NAME}_LIBRARIES ${PC_LIBRARIES}) + set(ICU_${MOD_NAME}_INCLUDE_DIRS ${PC_ICU_${MOD_NAME}_INCLUDE_DIRS}) + set(ICU_VERSION ${PC_ICU_${MOD_NAME}_VERSION}) + endif() +endforeach() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ICU + FOUND_VAR ICU_FOUND + REQUIRED_VARS ICU_COMPONENT_FOUND + VERSION_VAR ICU_VERSION + HANDLE_COMPONENTS +) diff --git a/cmake/FindIconv.cmake b/cmake/FindIconv.cmake new file mode 100644 index 0000000000..23c7a86f91 --- /dev/null +++ b/cmake/FindIconv.cmake @@ -0,0 +1,133 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindIconv +--------- + +This module finds the ``iconv()`` POSIX.1 functions on the system. +These functions might be provided in the regular C library or externally +in the form of an additional library. + +The following variables are provided to indicate iconv support: + +.. variable:: Iconv_FOUND + + Variable indicating if the iconv support was found. + +.. variable:: Iconv_INCLUDE_DIRS + + The directories containing the iconv headers. + +.. variable:: Iconv_LIBRARIES + + The iconv libraries to be linked. + +.. variable:: Iconv_IS_BUILT_IN + + A variable indicating whether iconv support is stemming from the + C library or not. Even if the C library provides `iconv()`, the presence of + an external `libiconv` implementation might lead to this being false. + +Additionally, the following :prop_tgt:`IMPORTED` target is being provided: + +.. variable:: Iconv::Iconv + + Imported target for using iconv. + +The following cache variables may also be set: + +.. variable:: Iconv_INCLUDE_DIR + + The directory containing the iconv headers. + +.. variable:: Iconv_LIBRARY + + The iconv library (if not implicitly given in the C library). + +.. note:: + On POSIX platforms, iconv might be part of the C library and the cache + variables ``Iconv_INCLUDE_DIR`` and ``Iconv_LIBRARY`` might be empty. + +#]=======================================================================] + +include(CMakePushCheckState) +if(CMAKE_C_COMPILER_LOADED) + include(CheckCSourceCompiles) +elseif(CMAKE_CXX_COMPILER_LOADED) + include(CheckCXXSourceCompiles) +else() + # If neither C nor CXX are loaded, implicit iconv makes no sense. + set(Iconv_IS_BUILT_IN NO) +endif() + +# iconv can only be provided in libc on a POSIX system. +# If any cache variable is already set, we'll skip this test. +if(NOT DEFINED Iconv_IS_BUILT_IN) + if(UNIX AND NOT DEFINED Iconv_INCLUDE_DIR AND NOT DEFINED Iconv_LIBRARY) + cmake_push_check_state(RESET) + # We always suppress the message here: Otherwise on supported systems + # not having iconv in their C library (e.g. those using libiconv) + # would always display a confusing "Looking for iconv - not found" message + set(CMAKE_FIND_QUIETLY TRUE) + # The following code will not work, but it's sufficient to see if it compiles. + # Note: libiconv will define the iconv functions as macros, so CheckSymbolExists + # will not yield correct results. + set(Iconv_IMPLICIT_TEST_CODE + " + #include + #include + int main() { + char *a, *b; + size_t i, j; + iconv_t ic; + ic = iconv_open(\"to\", \"from\"); + iconv(ic, &a, &i, &b, &j); + iconv_close(ic); + } + " + ) + if(CMAKE_C_COMPILER_LOADED) + check_c_source_compiles("${Iconv_IMPLICIT_TEST_CODE}" Iconv_IS_BUILT_IN) + else() + check_cxx_source_compiles("${Iconv_IMPLICIT_TEST_CODE}" Iconv_IS_BUILT_IN) + endif() + cmake_pop_check_state() + else() + set(Iconv_IS_BUILT_IN NO) + endif() +endif() + +if(NOT Iconv_IS_BUILT_IN) + find_path(Iconv_INCLUDE_DIR + NAMES "iconv.h" + DOC "iconv include directory") + set(Iconv_LIBRARY_NAMES "iconv" "libiconv") +else() + set(Iconv_INCLUDE_DIR "" CACHE FILEPATH "iconv include directory") + set(Iconv_LIBRARY_NAMES "c") +endif() + +find_library(Iconv_LIBRARY + NAMES ${Iconv_LIBRARY_NAMES} + DOC "iconv library (potentially the C library)") + +mark_as_advanced(Iconv_INCLUDE_DIR) +mark_as_advanced(Iconv_LIBRARY) + +include(FindPackageHandleStandardArgs) +if(NOT Iconv_IS_BUILT_IN) + find_package_handle_standard_args(Iconv REQUIRED_VARS Iconv_LIBRARY Iconv_INCLUDE_DIR) +else() + find_package_handle_standard_args(Iconv REQUIRED_VARS Iconv_LIBRARY) +endif() + +if(Iconv_FOUND) + set(Iconv_INCLUDE_DIRS "${Iconv_INCLUDE_DIR}") + set(Iconv_LIBRARIES "${Iconv_LIBRARY}") + if(NOT TARGET Iconv::Iconv) + add_library(Iconv::Iconv INTERFACE IMPORTED) + endif() + set_property(TARGET Iconv::Iconv PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${Iconv_INCLUDE_DIRS}") + set_property(TARGET Iconv::Iconv PROPERTY INTERFACE_LINK_LIBRARIES "${Iconv_LIBRARIES}") +endif() diff --git a/cmake/FindLZO.cmake b/cmake/FindLZO.cmake new file mode 100644 index 0000000000..dacd9387d9 --- /dev/null +++ b/cmake/FindLZO.cmake @@ -0,0 +1,89 @@ +#[=======================================================================[.rst: +FindLZO +------- + +Finds the LZO library. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``LZO_FOUND`` + True if the system has the LZO library. +``LZO_INCLUDE_DIRS`` + Include directories needed to use LZO. +``LZO_LIBRARIES`` + Libraries needed to link to LZO. +``LZO_VERSION`` + The version of the LZO library which was found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``LZO_INCLUDE_DIR`` + The directory containing ``lzo/lzo1x.h``. +``LZO_LIBRARY`` + The path to the LZO library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_LZO QUIET lzo2) + +find_path(LZO_INCLUDE_DIR + NAMES lzo/lzo1x.h + PATHS ${PC_LZO_INCLUDE_DIRS} +) + +find_library(LZO_LIBRARY + NAMES lzo2 + PATHS ${PC_LZO_LIBRARY_DIRS} +) + +# With vcpkg, the library path should contain both 'debug' and 'optimized' +# entries (see target_link_libraries() documentation for more information) +# +# NOTE: we only patch up when using vcpkg; the same issue might happen +# when not using vcpkg, but this is non-trivial to fix, as we have no idea +# what the paths are. With vcpkg we do. And we only official support vcpkg +# with Windows. +# +# NOTE: this is based on the assumption that the debug file has the same +# name as the optimized file. This is not always the case, but so far +# experiences has shown that in those case vcpkg CMake files do the right +# thing. +if(VCPKG_TOOLCHAIN AND LZO_LIBRARY) + if(LZO_LIBRARY MATCHES "/debug/") + set(LZO_LIBRARY_DEBUG ${LZO_LIBRARY}) + string(REPLACE "/debug/lib/" "/lib/" LZO_LIBRARY_RELEASE ${LZO_LIBRARY}) + else() + set(LZO_LIBRARY_RELEASE ${LZO_LIBRARY}) + string(REPLACE "/lib/" "/debug/lib/" LZO_LIBRARY_DEBUG ${LZO_LIBRARY}) + endif() + include(SelectLibraryConfigurations) + select_library_configurations(LZO) +endif() + +set(LZO_VERSION ${PC_LZO_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LZO + FOUND_VAR LZO_FOUND + REQUIRED_VARS + LZO_LIBRARY + LZO_INCLUDE_DIR + VERSION_VAR LZO_VERSION +) + +if(LZO_FOUND) + set(LZO_LIBRARIES ${LZO_LIBRARY}) + set(LZO_INCLUDE_DIRS ${LZO_INCLUDE_DIR}) +endif() + +mark_as_advanced( + LZO_INCLUDE_DIR + LZO_LIBRARY +) diff --git a/cmake/FindPandoc.cmake b/cmake/FindPandoc.cmake new file mode 100644 index 0000000000..3a42851dd7 --- /dev/null +++ b/cmake/FindPandoc.cmake @@ -0,0 +1,3 @@ +if(NOT EXISTS ${PANDOC_EXECUTABLE}) + find_program(PANDOC_EXECUTABLE pandoc) +endif() diff --git a/cmake/FindSSE.cmake b/cmake/FindSSE.cmake new file mode 100644 index 0000000000..e8dc243d9b --- /dev/null +++ b/cmake/FindSSE.cmake @@ -0,0 +1,17 @@ +# Autodetect if SSE4.1 can be used. If so, the assumption is, so can the other +# SSE version (SSE 2.0, SSSE 3.0). + +include(CheckCXXSourceCompiles) +set(CMAKE_REQUIRED_FLAGS "") + +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set(CMAKE_REQUIRED_FLAGS "-msse4.1") +endif() + +check_cxx_source_compiles(" + #include + #include + #include + int main() { return 0; }" + SSE_FOUND +) diff --git a/cmake/FindXaudio2.cmake b/cmake/FindXaudio2.cmake new file mode 100644 index 0000000000..477dfea728 --- /dev/null +++ b/cmake/FindXaudio2.cmake @@ -0,0 +1,19 @@ +# Autodetect if xaudio2 can be used. + +include(CheckCXXSourceCompiles) +set(CMAKE_REQUIRED_FLAGS "") + +check_cxx_source_compiles(" + #include + #include + + #undef NTDDI_VERSION + #undef _WIN32_WINNT + + #define NTDDI_VERSION NTDDI_WIN8 + #define _WIN32_WINNT _WIN32_WINNT_WIN8 + + #include + int main() { printf(\"%s\\\\n\", XAUDIO2_DLL_A); return 0; }" + XAUDIO2_FOUND +) diff --git a/cmake/FindZSTD.cmake b/cmake/FindZSTD.cmake new file mode 100644 index 0000000000..7a43671739 --- /dev/null +++ b/cmake/FindZSTD.cmake @@ -0,0 +1,86 @@ +#[=======================================================================[.rst: +FindZSTD +------- + +Finds the ZSTD library. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``ZSTD_FOUND`` + True if the system has the ZSTD library. +``ZSTD_INCLUDE_DIRS`` + Include directories needed to use ZSTD. +``ZSTD_LIBRARIES`` + Libraries needed to link to ZSTD. +``ZSTD_VERSION`` + The version of the ZSTD library which was found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``ZSTD_INCLUDE_DIR`` + The directory containing ``zstd.h``. +``ZSTD_LIBRARY`` + The path to the ZSTD library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_ZSTD QUIET libzstd) + +find_path(ZSTD_INCLUDE_DIR + NAMES zstd.h + PATHS ${PC_ZSTD_INCLUDE_DIRS} +) + +find_library(ZSTD_LIBRARY + NAMES zstd zstd_static + PATHS ${PC_ZSTD_LIBRARY_DIRS} +) + +# With vcpkg, the library path should contain both 'debug' and 'optimized' +# entries (see target_link_libraries() documentation for more information) +# +# NOTE: we only patch up when using vcpkg; the same issue might happen +# when not using vcpkg, but this is non-trivial to fix, as we have no idea +# what the paths are. With vcpkg we do. And we only official support vcpkg +# with Windows. +if(VCPKG_TOOLCHAIN AND ZSTD_LIBRARY) + if(ZSTD_LIBRARY MATCHES "/debug/") + set(ZSTD_LIBRARY_DEBUG ${ZSTD_LIBRARY}) + string(REPLACE "/debug/lib/" "/lib/" ZSTD_LIBRARY_RELEASE ${ZSTD_LIBRARY}) + else() + set(ZSTD_LIBRARY_RELEASE ${ZSTD_LIBRARY}) + string(REPLACE "/lib/" "/debug/lib/" ZSTD_LIBRARY_DEBUG ${ZSTD_LIBRARY}) + # Also fix the name of debug file + string(REPLACE "." "d." ZSTD_LIBRARY_DEBUG ${ZSTD_LIBRARY_DEBUG}) + endif() + include(SelectLibraryConfigurations) + select_library_configurations(ZSTD) +endif() + +set(ZSTD_VERSION ${PC_ZSTD_VERSION}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ZSTD + FOUND_VAR ZSTD_FOUND + REQUIRED_VARS + ZSTD_LIBRARY + ZSTD_INCLUDE_DIR + VERSION_VAR ZSTD_VERSION +) + +if(ZSTD_FOUND) + set(ZSTD_LIBRARIES ${ZSTD_LIBRARY}) + set(ZSTD_INCLUDE_DIRS ${ZSTD_INCLUDE_DIR}) +endif() + +mark_as_advanced( + ZSTD_INCLUDE_DIR + ZSTD_LIBRARY +) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake new file mode 100644 index 0000000000..0c2b2f54fb --- /dev/null +++ b/cmake/InstallAndPackage.cmake @@ -0,0 +1,225 @@ +include(GNUInstallDirs) + +# If requested, use FHS layout; otherwise fall back to a flat layout. +if(OPTION_INSTALL_FHS) + set(BINARY_DESTINATION_DIR "${CMAKE_INSTALL_BINDIR}") + set(DATA_DESTINATION_DIR "${CMAKE_INSTALL_DATADIR}/${BINARY_NAME}") + set(DOCS_DESTINATION_DIR "${CMAKE_INSTALL_DOCDIR}") + set(MAN_DESTINATION_DIR "${CMAKE_INSTALL_MANDIR}") +else() + if(APPLE) + set(BINARY_DESTINATION_DIR "../MacOS") + else() + set(BINARY_DESTINATION_DIR ".") + endif() + set(DATA_DESTINATION_DIR ".") + set(DOCS_DESTINATION_DIR ".") + set(MAN_DESTINATION_DIR ".") +endif() + +install(TARGETS openttd + RUNTIME + DESTINATION ${BINARY_DESTINATION_DIR} + COMPONENT Runtime + ) + +install(DIRECTORY + ${CMAKE_BINARY_DIR}/lang + ${CMAKE_BINARY_DIR}/baseset + ${CMAKE_BINARY_DIR}/ai + ${CMAKE_BINARY_DIR}/game + ${CMAKE_BINARY_DIR}/data + ${CMAKE_SOURCE_DIR}/bin/scripts + DESTINATION ${DATA_DESTINATION_DIR} + COMPONENT language_files + REGEX "ai/[^\.]+$" EXCLUDE # Ignore subdirs in ai dir +) + +install(FILES + ${CMAKE_SOURCE_DIR}/COPYING.md + ${CMAKE_SOURCE_DIR}/README.md + ${CMAKE_SOURCE_DIR}/changelog.txt + ${CMAKE_SOURCE_DIR}/docs/multiplayer.md + ${CMAKE_SOURCE_DIR}/known-bugs.txt + DESTINATION ${DOCS_DESTINATION_DIR} + COMPONENT docs) + +# A Linux manual only makes sense when using FHS. Otherwise it is a very odd +# file with little context to what it is. +if(OPTION_INSTALL_FHS) + set(MAN_SOURCE_FILE ${CMAKE_SOURCE_DIR}/docs/openttd.6) + set(MAN_BINARY_FILE ${CMAKE_BINARY_DIR}/docs/${BINARY_NAME}.6) + install(CODE + " + execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${MAN_SOURCE_FILE} ${MAN_BINARY_FILE}) + execute_process(COMMAND gzip -9 -n -f ${MAN_BINARY_FILE}) + " + COMPONENT manual) + install(FILES + ${MAN_BINARY_FILE}.gz + DESTINATION ${MAN_DESTINATION_DIR}/man6 + COMPONENT manual) +endif() + +if(UNIX AND NOT APPLE) + install(DIRECTORY + ${CMAKE_BINARY_DIR}/media/icons + ${CMAKE_BINARY_DIR}/media/pixmaps + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR} + COMPONENT media) + + install(FILES + ${CMAKE_BINARY_DIR}/media/${BINARY_NAME}.desktop + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications + COMPONENT menu) +endif() + +if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + set(ARCHITECTURE "amd64") +else() + string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" ARCHITECTURE) +endif() + +# Windows is a bit more annoying to detect; using the size of void pointer +# seems to be the most robust. +if(WIN32) + # Check if the MSVC platform has been defined + if ("$ENV{Platform}" STREQUAL "arm64") + set(ARCHITECTURE "arm64") + else() + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCHITECTURE "win64") + else() + set(ARCHITECTURE "win32") + endif() + endif() +endif() +if(APPLE AND CMAKE_OSX_ARCHITECTURES) + string(TOLOWER "${CMAKE_OSX_ARCHITECTURES}" ARCHITECTURE) +endif() + +set(CPACK_SYSTEM_NAME "${ARCHITECTURE}") + +set(CPACK_PACKAGE_NAME "openttd") +set(CPACK_PACKAGE_VENDOR "OpenTTD") +set(CPACK_PACKAGE_DESCRIPTION "OpenTTD") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenTTD") +set(CPACK_PACKAGE_HOMEPAGE_URL "https://www.openttd.org/") +set(CPACK_PACKAGE_CONTACT "OpenTTD ") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "OpenTTD") +set(CPACK_PACKAGE_CHECKSUM "SHA256") + +if((APPLE OR WIN32) AND EXISTS ${PANDOC_EXECUTABLE}) + execute_process(COMMAND ${PANDOC_EXECUTABLE} "${CMAKE_SOURCE_DIR}/COPYING.md" -s -o "${CMAKE_BINARY_DIR}/COPYING.rtf") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/COPYING.rtf") +else() + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING.md") +endif() + +set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") +set(CPACK_MONOLITHIC_INSTALL YES) +set(CPACK_PACKAGE_EXECUTABLES "openttd;OpenTTD") +set(CPACK_STRIP_FILES YES) +set(CPACK_OUTPUT_FILE_PREFIX "bundles") + +if(APPLE) + set(CPACK_GENERATOR "Bundle") + include(PackageBundle) + + if (APPLE_UNIVERSAL_PACKAGE) + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macos-universal") + else() + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-macos-${CPACK_SYSTEM_NAME}") + endif() +elseif(WIN32) + set(CPACK_GENERATOR "ZIP") + if(OPTION_USE_NSIS) + list(APPEND CPACK_GENERATOR "NSIS") + include(PackageNSIS) + endif() + + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-windows-${CPACK_SYSTEM_NAME}") +elseif(UNIX) + # With FHS, we can create deb/rpm/... Without it, they would be horribly broken + # and not work. The other way around is also true; with FHS they are not + # usable, and only flat formats work. + if(OPTION_PACKAGE_DEPENDENCIES) + set(CPACK_GENERATOR "TXZ") + set(PLATFORM "generic") + elseif(NOT OPTION_INSTALL_FHS) + set(CPACK_GENERATOR "TXZ") + set(PLATFORM "unknown") + else() + find_program(LSB_RELEASE_EXEC lsb_release) + execute_process(COMMAND ${LSB_RELEASE_EXEC} -is + OUTPUT_VARIABLE LSB_RELEASE_ID + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(LSB_RELEASE_ID) + if(LSB_RELEASE_ID STREQUAL "Ubuntu" OR LSB_RELEASE_ID STREQUAL "Debian") + execute_process(COMMAND ${LSB_RELEASE_EXEC} -cs + OUTPUT_VARIABLE LSB_RELEASE_CODENAME + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(TOLOWER "${LSB_RELEASE_ID}-${LSB_RELEASE_CODENAME}" PLATFORM) + + set(CPACK_GENERATOR "DEB") + include(PackageDeb) + else() + set(UNSUPPORTED_PLATFORM_NAME "LSB-based Linux distribution '${LSB_RELEASE_ID}'") + endif() + elseif(EXISTS "/etc/os-release") + file(STRINGS "/etc/os-release" OS_RELEASE_CONTENTS REGEX "^ID=") + string(REGEX MATCH "ID=(.*)" _ ${OS_RELEASE_CONTENTS}) + set(DISTRO_ID ${CMAKE_MATCH_1}) + if(DISTRO_ID STREQUAL "arch") + set(PLATFORM "arch") + set(CPACK_GENERATOR "TXZ") + else() + set(UNSUPPORTED_PLATFORM_NAME "Linux distribution '${DISTRO_ID}' from /etc/os-release") + endif() + else() + set(UNSUPPORTED_PLATFORM_NAME "Linux distribution") + endif() + + if(NOT PLATFORM) + set(PLATFORM "generic") + set(CPACK_GENERATOR "TXZ") + message(WARNING "Unknown ${UNSUPPORTED_PLATFORM_NAME} found for packaging; can only pack to a txz. Please consider creating a Pull Request to add support for this distribution.") + endif() + endif() + + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-linux-${PLATFORM}-${CPACK_SYSTEM_NAME}") + +else() + message(FATAL_ERROR "Unknown OS found for packaging; please consider creating a Pull Request to add support for this OS.") +endif() + +include(CPack) + +if(OPTION_PACKAGE_DEPENDENCIES) + # Install all dependencies we can resolve, with the exception of ones that + # every Linux machine should have. This should make this build as generic + # as possible, where it runs on any machine with the same or newer libc + # than the one this is compiled with. + # We copy these libraries into lib/ folder, so they can be found on game + # startup. See comment in root CMakeLists.txt for how this works exactly. + install(CODE [[ + file(GET_RUNTIME_DEPENDENCIES + RESOLVED_DEPENDENCIES_VAR DEPENDENCIES + UNRESOLVED_DEPENDENCIES_VAR UNRESOLVED_DEPENDENCIES + EXECUTABLES openttd + POST_EXCLUDE_REGEXES "ld-linux|libc.so|libdl.so|libm.so|libgcc_s.so|libpthread.so|librt.so|libstdc...so") + file(INSTALL + DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" + FILES ${DEPENDENCIES} + FOLLOW_SYMLINK_CHAIN) + + # This should not be possible, but error out when a dependency cannot + # be resolved. + list(LENGTH UNRESOLVED_DEPENDENCIES UNRESOLVED_LENGTH) + if(${UNRESOLVED_LENGTH} GREATER 0) + message(FATAL_ERROR "Unresolved dependencies: ${UNRESOLVED_DEPENDENCIES}") + endif() + ]]) +endif() diff --git a/cmake/LinkPackage.cmake b/cmake/LinkPackage.cmake new file mode 100644 index 0000000000..0f62d3296c --- /dev/null +++ b/cmake/LinkPackage.cmake @@ -0,0 +1,23 @@ +function(link_package NAME) + cmake_parse_arguments(LP "ENCOURAGED" "TARGET" "" ${ARGN}) + + if(${NAME}_FOUND) + string(TOUPPER "${NAME}" UCNAME) + add_definitions(-DWITH_${UCNAME}) + # Some libraries' cmake packages (looking at you, SDL2) leave trailing whitespace in the link commands, + # which (later) cmake considers to be an error. Work around this with by stripping the incoming string. + if(LP_TARGET AND TARGET ${LP_TARGET}) + string(STRIP "${LP_TARGET}" LP_TARGET) + target_link_libraries(openttd ${LP_TARGET}) + message(STATUS "${NAME} found -- -DWITH_${UCNAME} -- ${LP_TARGET}") + else() + string(STRIP "${${NAME}_LIBRARY}" ${NAME}_LIBRARY) + string(STRIP "${${NAME}_LIBRARIES}" ${NAME}_LIBRARIES) + include_directories(${${NAME}_INCLUDE_DIRS} ${${NAME}_INCLUDE_DIR}) + target_link_libraries(openttd ${${NAME}_LIBRARIES} ${${NAME}_LIBRARY}) + message(STATUS "${NAME} found -- -DWITH_${UCNAME} -- ${${NAME}_INCLUDE_DIRS} ${${NAME}_INCLUDE_DIR} -- ${${NAME}_LIBRARIES} ${${NAME}_LIBRARY}") + endif() + elseif(LP_ENCOURAGED) + message(WARNING "${NAME} not found; compiling OpenTTD without ${NAME} is strongly disencouraged") + endif() +endfunction() diff --git a/cmake/MSVCFilters.cmake b/cmake/MSVCFilters.cmake new file mode 100644 index 0000000000..e8026eee3c --- /dev/null +++ b/cmake/MSVCFilters.cmake @@ -0,0 +1,39 @@ +# Add source group filters for use in generated projects. + +source_group("AI Core" REGULAR_EXPRESSION "src/ai/") +source_group("Blitters" REGULAR_EXPRESSION "src/blitter/") +source_group("Core Source Code" REGULAR_EXPRESSION "src/core/") +source_group("Game Core" REGULAR_EXPRESSION "src/game/") +source_group("MD5" REGULAR_EXPRESSION "src/3rdparty/md5/") +source_group("Misc" REGULAR_EXPRESSION "src/misc/") +source_group("Music" REGULAR_EXPRESSION "src/music/") +source_group("Network Core" REGULAR_EXPRESSION "src/network/core/") +source_group("OSX" REGULAR_EXPRESSION "src/os/macosx/") +source_group("Pathfinder" REGULAR_EXPRESSION "src/pathfinder/") +source_group("Save/Load handlers" REGULAR_EXPRESSION "src/saveload/") +source_group("Sound" REGULAR_EXPRESSION "src/sound/") +source_group("Sprite loaders" REGULAR_EXPRESSION "src/spriteloader/") +source_group("Squirrel" REGULAR_EXPRESSION "src/3rdparty/squirrel/squirrel/") +source_group("Tables" REGULAR_EXPRESSION "src/table/") +source_group("Video" REGULAR_EXPRESSION "src/video/") +source_group("Video/GL" REGULAR_EXPRESSION "src/3rdparty/opengl/") +source_group("Widgets" REGULAR_EXPRESSION "src/widgets/") +source_group("Windows files" REGULAR_EXPRESSION "src/os/windows/|\.rc$") + +# Last directive for each file wins, so make sure NPF/YAPF are after the generic pathfinder filter. +source_group("NPF" REGULAR_EXPRESSION "src/pathfinder/npf/") +source_group("YAPF" REGULAR_EXPRESSION "src/pathfinder/yapf/") + +source_group("Script" REGULAR_EXPRESSION "src/script/") +source_group("Script API Implementation" REGULAR_EXPRESSION "src/script/api/") +source_group("Script API" REGULAR_EXPRESSION "src/script/api/.*\.hpp$") +source_group("AI API" REGULAR_EXPRESSION "src/script/api/ai_") +source_group("Game API" REGULAR_EXPRESSION "src/script/api/game_") + +# Placed last to ensure any of the previous directory filters are overridden. +source_group("Command handlers" REGULAR_EXPRESSION "_cmd\.cpp$") +source_group("Drivers" REGULAR_EXPRESSION "_driver\.hpp$") +source_group("GUI Source Code" REGULAR_EXPRESSION "_gui\.cpp$") +source_group("Map Accessors" REGULAR_EXPRESSION "_map\.(cpp|h)$") +source_group("NewGRF" REGULAR_EXPRESSION "newgrf.*cpp$") +source_group("Squirrel headers" REGULAR_EXPRESSION "src/3rdparty/squirrel/squirrel/.*\.h$") diff --git a/cmake/Options.cmake b/cmake/Options.cmake new file mode 100644 index 0000000000..bfa14b6c3c --- /dev/null +++ b/cmake/Options.cmake @@ -0,0 +1,107 @@ +include(GNUInstallDirs) + +# Set the options for the directories (personal, shared, global). +# +# set_directory_options() +# +function(set_directory_options) + if(APPLE) + set(DEFAULT_PERSONAL_DIR "Documents/OpenTTD") + set(DEFAULT_SHARED_DIR "/Library/Application Support/OpenTTD") + set(DEFAULT_GLOBAL_DIR "(not set)") + elseif(WIN32) + set(DEFAULT_PERSONAL_DIR "OpenTTD") + set(DEFAULT_SHARED_DIR "(not set)") + set(DEFAULT_GLOBAL_DIR "(not set)") + elseif(UNIX) + set(DEFAULT_PERSONAL_DIR ".${BINARY_NAME}") + set(DEFAULT_SHARED_DIR "(not set)") + set(DEFAULT_GLOBAL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${BINARY_NAME}") + else() + message(FATAL_ERROR "Unknown OS found; please consider creating a Pull Request to add support for this OS.") + endif() + + if(NOT PERSONAL_DIR) + set(PERSONAL_DIR "${DEFAULT_PERSONAL_DIR}" CACHE STRING "Personal directory") + message(STATUS "Detecting Personal Data directory - ${PERSONAL_DIR}") + endif() + + if(NOT SHARED_DIR) + set(SHARED_DIR "${DEFAULT_SHARED_DIR}" CACHE STRING "Shared directory") + message(STATUS "Detecting Shared Data directory - ${SHARED_DIR}") + endif() + + if(NOT GLOBAL_DIR) + set(GLOBAL_DIR "${DEFAULT_GLOBAL_DIR}" CACHE STRING "Global directory") + message(STATUS "Detecting Global Data directory - ${GLOBAL_DIR}") + endif() + + set(HOST_BINARY_DIR "" CACHE PATH "Full path to native cmake build directory") +endfunction() + +# Set some generic options that influence what is being build. +# +# set_options() +# +function(set_options) + option(OPTION_PACKAGE_DEPENDENCIES "Copy dependencies into lib/ for easy packaging (Linux only)" OFF) + + if(UNIX AND NOT APPLE AND NOT OPTION_PACKAGE_DEPENDENCIES) + set(DEFAULT_OPTION_INSTALL_FHS ON) + else() + set(DEFAULT_OPTION_INSTALL_FHS OFF) + endif() + + option(OPTION_FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." OFF) + + option(OPTION_DEDICATED "Build dedicated server only (no GUI)" OFF) + option(OPTION_INSTALL_FHS "Install with Filesystem Hierarchy Standard folders" ${DEFAULT_OPTION_INSTALL_FHS}) + option(OPTION_USE_ASSERTS "Use assertions; leave enabled for nightlies, betas, and RCs" OFF) + if(EMSCRIPTEN) + # Although pthreads is supported, it is not in a way yet that is + # useful for us. + option(OPTION_USE_THREADS "Use threads" OFF) + else() + option(OPTION_USE_THREADS "Use threads" ON) + endif() + option(OPTION_USE_NSIS "Use NSIS to create windows installer; enable only for stable releases" OFF) + option(OPTION_TOOLS_ONLY "Build only tools target" OFF) + option(OPTION_DOCS_ONLY "Build only docs target" OFF) + + if (OPTION_DOCS_ONLY) + set(OPTION_TOOLS_ONLY ON PARENT_SCOPE) + endif() +endfunction() + +# Show the values of the generic options. +# +# show_options() +# +function(show_options) + message(STATUS "Option Package Dependencies - ${OPTION_PACKAGE_DEPENDENCIES}") + message(STATUS "Option Dedicated - ${OPTION_DEDICATED}") + message(STATUS "Option Install FHS - ${OPTION_INSTALL_FHS}") + message(STATUS "Option Use assert - ${OPTION_USE_ASSERTS}") + message(STATUS "Option Use threads - ${OPTION_USE_THREADS}") + message(STATUS "Option Use NSIS - ${OPTION_USE_NSIS}") +endfunction() + +# Add the definitions for the options that are selected. +# +# add_definitions_based_on_options() +# +function(add_definitions_based_on_options) + if(OPTION_DEDICATED) + add_definitions(-DDEDICATED) + endif() + + if(NOT OPTION_USE_THREADS) + add_definitions(-DNO_THREADS) + endif() + + if(OPTION_USE_ASSERTS) + add_definitions(-DWITH_ASSERT) + else() + add_definitions(-DNDEBUG) + endif() +endfunction() diff --git a/cmake/PackageBundle.cmake b/cmake/PackageBundle.cmake new file mode 100644 index 0000000000..737f4809aa --- /dev/null +++ b/cmake/PackageBundle.cmake @@ -0,0 +1,25 @@ +string(TIMESTAMP CURRENT_YEAR "%Y") + +set(CPACK_BUNDLE_NAME "OpenTTD") +set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/os/macosx/openttd.icns") +set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist") +set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/os/macosx/splash.png") +set(CPACK_DMG_FORMAT "UDBZ") + +# Create a temporary Info.plist.in, where we will fill in the version via +# CPackProperties.cmake.in. This because at this point in time the version +# is not yet known. +configure_file("${CMAKE_SOURCE_DIR}/os/macosx/Info.plist.in" "${CMAKE_CURRENT_BINARY_DIR}/Info.plist.in") +set(CPACK_BUNDLE_PLIST_SOURCE "${CMAKE_CURRENT_BINARY_DIR}/Info.plist.in") + +# Delay fixup_bundle() till the install step; this makes sure all executables +# exists and it can do its job. +install( + CODE + " + include(BundleUtilities) + set(BU_CHMOD_BUNDLE_ITEMS TRUE) + fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/../MacOS/openttd\" \"\" \"\") + " + DESTINATION . + COMPONENT Runtime) diff --git a/cmake/PackageDeb.cmake b/cmake/PackageDeb.cmake new file mode 100644 index 0000000000..5d6d26fdd9 --- /dev/null +++ b/cmake/PackageDeb.cmake @@ -0,0 +1,3 @@ +set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${ARCHITECTURE}") +set(CPACK_DEBIAN_PACKAGE_SECTION "games") +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) diff --git a/cmake/PackageNSIS.cmake b/cmake/PackageNSIS.cmake new file mode 100644 index 0000000000..1af38271f5 --- /dev/null +++ b/cmake/PackageNSIS.cmake @@ -0,0 +1,39 @@ +set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) +set(CPACK_NSIS_HELP_LINK "${CPACK_PACKAGE_HOMEPAGE_URL}") +set(CPACK_NSIS_URL_INFO_ABOUT "${CPACK_PACKAGE_HOMEPAGE_URL}") +set(CPACK_NSIS_CONTACT "${CPACK_PACKAGE_CONTACT}") + +# NSIS uses this for the icon in the top left of the installer +set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/os/windows\\\\nsis-top.bmp") + +# Set other icons and bitmaps for NSIS +set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/os/windows\\\\openttd.ico") +set(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}/os/windows\\\\openttd.ico") +set(CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/os/windows\\\\nsis-welcome.bmp") +set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/os/windows\\\\nsis-welcome.bmp") + +# Use the icon of the application +set(CPACK_NSIS_INSTALLED_ICON_NAME "openttd.exe") +# Tell NSIS the binary will be in the root +set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") + +# Add detail information on the NSIS installer executable. CPack doesn't +# support this out of the box, so we use CPACK_NSIS_DEFINES for this. + +# \\\ are needed, because this value is generated in another CPack file, +# which is used. So one \ is to escape here, the second to escape in the +# CPack file, which we have to escape here (hence: 3 \). +set(CPACK_NSIS_DEFINES " +; Version Info +Var AddWinPrePopulate +VIProductVersion \\\"0.0.0.0\\\" +VIAddVersionKey \\\"ProductName\\\" \\\"OpenTTD Installer for Windows\\\" +VIAddVersionKey \\\"Comments\\\" \\\"Installs OpenTTD \\\${VERSION}\\\" +VIAddVersionKey \\\"CompanyName\\\" \\\"OpenTTD Developers\\\" +VIAddVersionKey \\\"FileDescription\\\" \\\"Installs OpenTTD \\\${VERSION}\\\" +VIAddVersionKey \\\"ProductVersion\\\" \\\"\\\${VERSION}\\\" +VIAddVersionKey \\\"InternalName\\\" \\\"InstOpenTTD\\\" +VIAddVersionKey \\\"FileVersion\\\" \\\"0.0.0.0\\\" +VIAddVersionKey \\\"LegalCopyright\\\" \\\" \\\" +" +) diff --git a/cmake/SourceList.cmake b/cmake/SourceList.cmake new file mode 100644 index 0000000000..6e95be2017 --- /dev/null +++ b/cmake/SourceList.cmake @@ -0,0 +1,63 @@ +# Add a file to be compiled. +# +# add_files([file1 ...] CONDITION condition [condition ...]) +# +# CONDITION is a complete statement that can be evaluated with if(). +# If it evaluates true, the source files will be added; otherwise not. +# For example: ADD_IF SDL_FOUND AND Allegro_FOUND +# +function(add_files) + cmake_parse_arguments(PARAM "" "" "CONDITION" ${ARGN}) + set(PARAM_FILES "${PARAM_UNPARSED_ARGUMENTS}") + + if(PARAM_CONDITION) + if(NOT (${PARAM_CONDITION})) + return() + endif() + endif() + + foreach(FILE IN LISTS PARAM_FILES) + target_sources(openttd PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}) + endforeach() +endfunction() + +# This function works around an 'issue' with CMake, where +# set_source_files_properties() only works in the scope of the file. We want +# to set properties for the source file on a more global level. To solve this, +# this function records the flags you want, and a macro adds them in the root +# CMakeLists.txt. +# See this URL for more information on the issue: +# http://cmake.3232098.n2.nabble.com/scope-of-set-source-files-properties-td4766111.html +# +# set_compile_flags([file1 ...] COMPILE_FLAGS cflag [cflag ...]) +# +function(set_compile_flags) + cmake_parse_arguments(PARAM "" "" "COMPILE_FLAGS" ${ARGN}) + set(PARAM_FILES "${PARAM_UNPARSED_ARGUMENTS}") + + get_property(SOURCE_PROPERTIES GLOBAL PROPERTY source_properties) + + foreach(FILE IN LISTS PARAM_FILES) + list(APPEND SOURCE_PROPERTIES "${CMAKE_CURRENT_SOURCE_DIR}/${FILE}::${PARAM_COMPILE_FLAGS}") + endforeach() + + set_property(GLOBAL PROPERTY source_properties "${SOURCE_PROPERTIES}") +endfunction() + +# Call this macro in the same CMakeLists.txt and after add_executable(). +# This makes sure all the COMPILE_FLAGS of set_compile_flags() are set +# correctly. +# +# process_compile_flags() +# +function(process_compile_flags) + get_property(SOURCE_PROPERTIES GLOBAL PROPERTY source_properties) + + foreach(ENTRY ${SOURCE_PROPERTIES}) + string(REPLACE "::" ";" ENTRY "${ENTRY}") + list(GET ENTRY 0 FILE) + list(GET ENTRY 1 PROPERTIES) + + set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS ${PROPERTIES}) + endforeach() +endfunction() diff --git a/cmake/Static.cmake b/cmake/Static.cmake new file mode 100644 index 0000000000..682527aff6 --- /dev/null +++ b/cmake/Static.cmake @@ -0,0 +1,14 @@ +# Set static linking if the platform requires it. +# +# set_static() +# +function(set_static_if_needed) + if(MINGW) + # Let exectutables run outside MinGW environment + # Force searching static libs + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" PARENT_SCOPE) + + # Force static linking + link_libraries(-static -static-libgcc -static-libstdc++) + endif() +endfunction() diff --git a/cmake/scripts/Baseset.cmake b/cmake/scripts/Baseset.cmake new file mode 100644 index 0000000000..cb5fb5704d --- /dev/null +++ b/cmake/scripts/Baseset.cmake @@ -0,0 +1,63 @@ +cmake_minimum_required(VERSION 3.5) + +# +# Create a single baseset meta file with the correct translations. +# + +if(NOT BASESET_SOURCE_FILE) + message(FATAL_ERROR "Script needs BASESET_SOURCE_FILE defined") +endif() +if(NOT BASESET_BINARY_FILE) + message(FATAL_ERROR "Script needs BASESET_BINARY_FILE defined") +endif() +if(NOT BASESET_EXTRAGRF_FILE) + message(FATAL_ERROR "Script needs BASESET_EXTRAGRF_FILE defined") +endif() + +set(ARGC 1) +set(ARG_READ NO) + +# Read all the arguments given to CMake; we are looking for -- and everything +# that follows. Those are our language files. +while(ARGC LESS CMAKE_ARGC) + set(ARG ${CMAKE_ARGV${ARGC}}) + + if(ARG_READ) + list(APPEND LANG_SOURCE_FILES "${ARG}") + endif() + + if(ARG STREQUAL "--") + set(ARG_READ YES) + endif() + + math(EXPR ARGC "${ARGC} + 1") +endwhile() + +# Place holder format is @_@ +file(STRINGS "${BASESET_SOURCE_FILE}" PLACE_HOLDER REGEX "^@") +string(REGEX REPLACE "@([^_]+).*@" "\\1" INI_KEY "${PLACE_HOLDER}") +string(REGEX REPLACE "@[^_]+_(.*)@" "\\1" STR_ID "${PLACE_HOLDER}") +string(REGEX REPLACE "@(.*)@" "\\1" PLACE_HOLDER "${PLACE_HOLDER}") + +# Get the translations +foreach(LANGFILE IN LISTS LANG_SOURCE_FILES) + file(STRINGS "${LANGFILE}" LANGLINES REGEX "^(##isocode|${STR_ID})" ENCODING UTF-8) + string(FIND "${LANGLINES}" "${STR_ID}" HAS_STR_ID) + if(HAS_STR_ID LESS 0) + continue() + endif() + string(REGEX REPLACE "##isocode ([^;]+).*" "\\1" ISOCODE "${LANGLINES}") + if("${ISOCODE}" STREQUAL "en_GB") + string(REGEX REPLACE "[^:]*:(.*)" "${INI_KEY} = \\1" LANGLINES "${LANGLINES}") + else() + string(REGEX REPLACE "[^:]*:(.*)" "${INI_KEY}.${ISOCODE} = \\1" LANGLINES "${LANGLINES}") + endif() + list(APPEND ${PLACE_HOLDER} ${LANGLINES}) +endforeach() +list(SORT ${PLACE_HOLDER}) +string(REPLACE ";" "\n" ${PLACE_HOLDER} "${${PLACE_HOLDER}}") + +# Get the grf md5 +file(MD5 ${BASESET_EXTRAGRF_FILE} ORIG_EXTRA_GRF_MD5) + +configure_file(${BASESET_SOURCE_FILE} ${BASESET_BINARY_FILE}) diff --git a/cmake/scripts/CreateGRF.cmake b/cmake/scripts/CreateGRF.cmake new file mode 100644 index 0000000000..d47e39aa0e --- /dev/null +++ b/cmake/scripts/CreateGRF.cmake @@ -0,0 +1,58 @@ +cmake_minimum_required(VERSION 3.5) + +# +# Create a single GRF file based on sprites/.nfo and sprites/*.png +# files. +# + +if(NOT NFORENUM_EXECUTABLE) + message(FATAL_ERROR "Script needs NFORENUM_EXECUTABLE defined") +endif() +if(NOT GRFCODEC_EXECUTABLE) + message(FATAL_ERROR "Script needs GRFCODEC_EXECUTABLE defined") +endif() +if(NOT GRF_SOURCE_FOLDER) + message(FATAL_ERROR "Script needs GRF_SOURCE_FOLDER defined") +endif() +if(NOT GRF_BINARY_FILE) + message(FATAL_ERROR "Script needs GRF_BINARY_FILE defined") +endif() + +get_filename_component(GRF_SOURCE_FOLDER_NAME "${GRF_SOURCE_FOLDER}" NAME) + +file(WRITE sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "") +file(READ ${GRF_SOURCE_FOLDER}/${GRF_SOURCE_FOLDER_NAME}.nfo NFO_LINES) +# Replace ; with \;, and make a list out of this based on \n +string(REPLACE ";" "\\;" NFO_LINES "${NFO_LINES}") +string(REPLACE "\n" ";" NFO_LINES "${NFO_LINES}") + +foreach(NFO_LINE IN LISTS NFO_LINES) + # Recover the ; that was really in the text (and not a newline) + string(REPLACE "\\;" ";" NFO_LINE "${NFO_LINE}") + + if(NFO_LINE MATCHES "^#include") + string(REGEX REPLACE "^#include \"(.*)\"$" "\\1" INCLUDE_FILE ${NFO_LINE}) + file(READ ${GRF_SOURCE_FOLDER}/${INCLUDE_FILE} INCLUDE_LINES) + file(APPEND sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "${INCLUDE_LINES}") + else() + file(APPEND sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "${NFO_LINE}\n") + endif() +endforeach() + +execute_process(COMMAND ${NFORENUM_EXECUTABLE} -s sprites/${GRF_SOURCE_FOLDER_NAME}.nfo RESULT_VARIABLE RESULT) +if(RESULT) + if(NOT RESULT MATCHES "^[0-9]*$") + message(FATAL_ERROR "Failed to run NFORenum (${RESULT}), please check NFORENUM_EXECUTABLE variable") + endif() + message(FATAL_ERROR "NFORenum failed") +endif() + +execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -p1 ${GRF_SOURCE_FOLDER_NAME}.grf RESULT_VARIABLE RESULT) +if(RESULT) + if(NOT RESULT MATCHES "^[0-9]*$") + message(FATAL_ERROR "Failed to run GRFCodec (${RESULT}), please check GRFCODEC_EXECUTABLE variable") + endif() + message(FATAL_ERROR "GRFCodec failed") +endif() + +execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${GRF_SOURCE_FOLDER_NAME}.grf ${GRF_BINARY_FILE}) diff --git a/cmake/scripts/Desktop.cmake b/cmake/scripts/Desktop.cmake new file mode 100644 index 0000000000..7cec0b9afe --- /dev/null +++ b/cmake/scripts/Desktop.cmake @@ -0,0 +1,60 @@ +cmake_minimum_required(VERSION 3.5) + +# +# Create a desktop file with the correct translations. +# + +if(NOT DESKTOP_SOURCE_FILE) + message(FATAL_ERROR "Script needs DESKTOP_SOURCE_FILE defined") +endif() +if(NOT DESKTOP_BINARY_FILE) + message(FATAL_ERROR "Script needs DESKTOP_BINARY_FILE defined") +endif() +if(NOT BINARY_NAME) + message(FATAL_ERROR "Script needs BINARY_NAME defined") +endif() + +set(ARGC 1) +set(ARG_READ NO) + +# Read all the arguments given to CMake; we are looking for -- and everything +# that follows. Those are our language files. +while(ARGC LESS CMAKE_ARGC) + set(ARG ${CMAKE_ARGV${ARGC}}) + + if(ARG_READ) + list(APPEND LANG_SOURCE_FILES "${ARG}") + endif() + + if(ARG STREQUAL "--") + set(ARG_READ YES) + endif() + + math(EXPR ARGC "${ARGC} + 1") +endwhile() + +# Place holder format is @_@ +file(STRINGS "${DESKTOP_SOURCE_FILE}" PLACE_HOLDER REGEX "^@") +string(REGEX REPLACE "@([^_]+).*@" "\\1" INI_KEY "${PLACE_HOLDER}") +string(REGEX REPLACE "@[^_]+_(.*)@" "\\1" STR_ID "${PLACE_HOLDER}") +string(REGEX REPLACE "@(.*)@" "\\1" PLACE_HOLDER "${PLACE_HOLDER}") + +# Get the translations +foreach(LANGFILE IN LISTS LANG_SOURCE_FILES) + file(STRINGS "${LANGFILE}" LANGLINES REGEX "^(##isocode|${STR_ID})" ENCODING UTF-8) + string(FIND "${LANGLINES}" "${STR_ID}" HAS_STR_ID) + if(HAS_STR_ID LESS 0) + continue() + endif() + string(REGEX REPLACE "##isocode ([^;]+).*" "\\1" ISOCODE "${LANGLINES}") + if("${ISOCODE}" STREQUAL "en_GB") + string(REGEX REPLACE "[^:]*:(.*)" "${INI_KEY}=\\1" LANGLINES "${LANGLINES}") + else() + string(REGEX REPLACE "[^:]*:(.*)" "${INI_KEY}[${ISOCODE}]=\\1" LANGLINES "${LANGLINES}") + endif() + list(APPEND ${PLACE_HOLDER} ${LANGLINES}) +endforeach() +list(SORT ${PLACE_HOLDER}) +string(REPLACE ";" "\n" ${PLACE_HOLDER} "${${PLACE_HOLDER}}") + +configure_file(${DESKTOP_SOURCE_FILE} ${DESKTOP_BINARY_FILE}) diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake new file mode 100644 index 0000000000..6e4a2b3909 --- /dev/null +++ b/cmake/scripts/FindVersion.cmake @@ -0,0 +1,162 @@ +cmake_minimum_required(VERSION 3.5) + +if(NOT REV_MAJOR) + set(REV_MAJOR 0) +endif() +if(NOT REV_MINOR) + set(REV_MINOR 0) +endif() +if(NOT REV_BUILD) + set(REV_BUILD 0) +endif() + +# +# Finds the current version of the current folder. +# + +find_package(Git QUIET) +# ${CMAKE_SOURCE_DIR}/.git may be a directory or a regular file +if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") + # Make sure LC_ALL is set to something desirable + set(SAVED_LC_ALL "$ENV{LC_ALL}") + set(ENV{LC_ALL} C) + + # Assume the dir is not modified + set(REV_MODIFIED 0) + + # Refresh the index to make sure file stat info is in sync, then look for modifications + execute_process(COMMAND ${GIT_EXECUTABLE} update-index --refresh + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_QUIET + ) + + # See if git tree is modified + execute_process(COMMAND ${GIT_EXECUTABLE} diff-index HEAD + OUTPUT_VARIABLE IS_MODIFIED + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + if(NOT IS_MODIFIED STREQUAL "") + set(REV_MODIFIED 2) + endif() + + # Get last commit hash + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --verify HEAD + OUTPUT_VARIABLE FULLHASH + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ERROR_QUIET + ) + set(REV_HASH "${FULLHASH}") + + string(SUBSTRING "${FULLHASH}" 0 10 SHORTHASH) + + # Get the last commit date + execute_process(COMMAND ${GIT_EXECUTABLE} show -s --pretty=format:%ci HEAD + OUTPUT_VARIABLE COMMITDATE + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + string(REGEX REPLACE "([0-9]+)-([0-9]+)-([0-9]+).*" "\\1\\2\\3" COMMITDATE "${COMMITDATE}") + set(REV_ISODATE "${COMMITDATE}") + string(SUBSTRING "${REV_ISODATE}" 0 4 REV_YEAR) + + # Get the branch + execute_process(COMMAND ${GIT_EXECUTABLE} symbolic-ref -q HEAD + OUTPUT_VARIABLE BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ERROR_QUIET + ) + string(REGEX REPLACE ".*/" "" BRANCH "${BRANCH}") + + # Get the tag + execute_process(COMMAND ${GIT_EXECUTABLE} name-rev --name-only --tags --no-undefined HEAD + OUTPUT_VARIABLE TAG + OUTPUT_STRIP_TRAILING_WHITESPACE + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ERROR_QUIET + ) + string(REGEX REPLACE "\^0$" "" TAG "${TAG}") + + if(REV_MODIFIED EQUAL 0) + set(HASHPREFIX "-g") + elseif(REV_MODIFIED EQUAL 2) + set(HASHPREFIX "-m") + else() + set(HASHPREFIX "-u") + endif() + + # Set the version string + if(NOT TAG STREQUAL "") + set(REV_VERSION "${TAG}") + set(REV_ISTAG 1) + + string(REGEX REPLACE "^[0-9.]+$" "" STABLETAG "${TAG}") + if(STABLETAG STREQUAL "") + set(REV_ISSTABLETAG 1) + else() + set(REV_ISSTABLETAG 0) + endif() + else() + set(REV_VERSION "${REV_ISODATE}-${BRANCH}${HASHPREFIX}${SHORTHASH}") + set(REV_ISTAG 0) + set(REV_ISSTABLETAG 0) + endif() + + # Restore LC_ALL + set(ENV{LC_ALL} "${SAVED_LC_ALL}") +elseif(EXISTS "${CMAKE_SOURCE_DIR}/.ottdrev") + file(READ "${CMAKE_SOURCE_DIR}/.ottdrev" OTTDREV) + string(REPLACE "\n" "" OTTDREV "${OTTDREV}") + string(REPLACE "\t" ";" OTTDREV "${OTTDREV}") + list(GET OTTDREV 0 REV_VERSION) + list(GET OTTDREV 1 REV_ISODATE) + list(GET OTTDREV 2 REV_MODIFIED) + list(GET OTTDREV 3 REV_HASH) + list(GET OTTDREV 4 REV_ISTAG) + list(GET OTTDREV 5 REV_ISSTABLETAG) + list(GET OTTDREV 6 REV_YEAR) +else() + message(WARNING "No version detected; this build will NOT be network compatible") + set(REV_VERSION "norev0000") + set(REV_ISODATE "19700101") + set(REV_MODIFIED 1) + set(REV_HASH "unknown") + set(REV_ISTAG 0) + set(REV_ISSTABLETAG 0) + set(REV_YEAR "1970") +endif() + +message(STATUS "Version string: ${REV_VERSION}") + +if(GENERATE_OTTDREV) + message(STATUS "Generating .ottdrev") + file(WRITE ${CMAKE_SOURCE_DIR}/.ottdrev "${REV_VERSION}\t${REV_ISODATE}\t${REV_MODIFIED}\t${REV_HASH}\t${REV_ISTAG}\t${REV_ISSTABLETAG}\t${REV_YEAR}\n") +else() + message(STATUS "Generating rev.cpp") + configure_file("${CMAKE_SOURCE_DIR}/src/rev.cpp.in" + "${FIND_VERSION_BINARY_DIR}/rev.cpp") + + if(WIN32) + message(STATUS "Generating ottdres.rc") + configure_file("${CMAKE_SOURCE_DIR}/src/os/windows/ottdres.rc.in" + "${FIND_VERSION_BINARY_DIR}/ottdres.rc") + endif() + + message(STATUS "Generating CPackProperties.cmake") + configure_file("${CMAKE_SOURCE_DIR}/CPackProperties.cmake.in" + "${CPACK_BINARY_DIR}/CPackProperties.cmake" @ONLY) + + message(STATUS "Generating Doxyfile") + configure_file("${CMAKE_SOURCE_DIR}/Doxyfile.in" + "${CPACK_BINARY_DIR}/Doxyfile") + + message(STATUS "Generating Doxyfile_AI") + configure_file("${CMAKE_SOURCE_DIR}/src/script/api/Doxyfile_AI.in" + "${CPACK_BINARY_DIR}/Doxyfile_AI") + + message(STATUS "Generating Doxyfile_GS") + configure_file("${CMAKE_SOURCE_DIR}/src/script/api/Doxyfile_GS.in" + "${CPACK_BINARY_DIR}/Doxyfile_GS") +endif() diff --git a/cmake/scripts/GenerateWidget.cmake b/cmake/scripts/GenerateWidget.cmake new file mode 100644 index 0000000000..f46a67e690 --- /dev/null +++ b/cmake/scripts/GenerateWidget.cmake @@ -0,0 +1,119 @@ +cmake_minimum_required(VERSION 3.5) + +# +# CMake script to automatically generate the enums in script_window.hpp +# +# The file is scanned for @enum tokens, and the placeholder is filled with an enum from a different file. +# +# Example: +# // @enum enumname filename@placeholder@ +# ... content here is replaced ... +# // @endenum +# +# The parameter "enumname" specifies the enumeration to extract. This can also be a regular expression. +# The parameter "filename" specifies the relative path to the file, where the enumeration is extracted from. This can also be a glob expression. +# +# + +if(NOT GENERATE_SOURCE_FILE) + message(FATAL_ERROR "Script needs GENERATE_SOURCE_FILE defined") +endif() +if(NOT GENERATE_BINARY_FILE) + message(FATAL_ERROR "Script needs GENERATE_BINARY_FILE defined") +endif() + +file(STRINGS ${GENERATE_SOURCE_FILE} ENUM_LINES REGEX "@enum") + +foreach(ENUM IN LISTS ENUM_LINES) + string(REGEX REPLACE "^( )// @enum ([^ ]+) ([^ ]+)@([^ ]+)@" "\\4" PLACE_HOLDER "${ENUM}") + set(ADD_INDENT "${CMAKE_MATCH_1}") + set(ENUM_PATTERN "${CMAKE_MATCH_2}") + + file(GLOB FILENAMES "${CMAKE_MATCH_3}") + list(SORT FILENAMES) + + foreach(FILE IN LISTS FILENAMES) + unset(ACTIVE) + unset(ACTIVE_COMMENT) + unset(COMMENT) + + file(STRINGS ${FILE} SOURCE_LINES) + + string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" FILE ${FILE}) + string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}/* automatically generated from ${FILE} */") + + foreach(LINE IN LISTS SOURCE_LINES) + string(REPLACE "${RM_INDENT}" "" LINE "${LINE}") + + # Remember possible doxygen comment before enum declaration + if((NOT ACTIVE) AND "${LINE}" MATCHES "/\\*\\*") + set(COMMENT "${ADD_INDENT}${LINE}") + set(ACTIVE_COMMENT 1) + elseif(ACTIVE_COMMENT EQUAL 1) + string(APPEND COMMENT "\n${ADD_INDENT}${LINE}") + endif() + + # Check for enum match + if("${LINE}" MATCHES "^ *enum *${ENUM_PATTERN} *\{") + # REGEX REPLACE does a REGEX MATCHALL and fails if an empty string is matched + string(REGEX MATCH "[^ ]*" RESULT "${LINE}") + string(REPLACE "${RESULT}" "" RM_INDENT "${LINE}") + + set(ACTIVE 1) + if(ACTIVE_COMMENT GREATER 0) + string(APPEND ${PLACE_HOLDER} "\n${COMMENT}") + endif() + unset(ACTIVE_COMMENT) + unset(COMMENT) + endif() + + # Forget doxygen comment, if no enum follows + if(ACTIVE_COMMENT EQUAL 2 AND NOT "${LINE}" STREQUAL "") + unset(ACTIVE_COMMENT) + unset(COMMENT) + endif() + if(ACTIVE_COMMENT EQUAL 1 AND "${LINE}" MATCHES "\\*/") + set(ACTIVE_COMMENT 2) + endif() + + if(ACTIVE) + if("${LINE}" MATCHES "^ *[A-Za-z0-9_]* *[,=]") + # Transform enum values + # REGEX REPLACE does a REGEX MATCHALL and replaces too much + string(REGEX MATCH " *=[^,]*" RESULT "${LINE}") + string(REPLACE "${RESULT}" "" LINE "${LINE}") + + string(REGEX REPLACE " *//" " //" LINE "${LINE}") + + string(REGEX MATCH "^( *)([A-Za-z0-9_]+),(.*)" RESULT "${LINE}") + + string(LENGTH "${CMAKE_MATCH_2}" LEN) + math(EXPR LEN "43 - ${LEN}") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach() + + if(CMAKE_MATCH_3) + string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}${CMAKE_MATCH_1}${CMAKE_MATCH_2}${SPACES} = ::${CMAKE_MATCH_2},${SPACES}${CMAKE_MATCH_3}") + else() + string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}${CMAKE_MATCH_1}${CMAKE_MATCH_2}${SPACES} = ::${CMAKE_MATCH_2},") + endif() + elseif("${LINE}" STREQUAL "") + string(APPEND ${PLACE_HOLDER} "\n") + else() + string(APPEND ${PLACE_HOLDER} "\n${ADD_INDENT}${LINE}") + endif() + endif() + + if("${LINE}" MATCHES "^ *\};") + if(ACTIVE) + string(APPEND ${PLACE_HOLDER} "\n") + endif() + unset(ACTIVE) + endif() + endforeach() + endforeach() + endforeach() + +configure_file(${GENERATE_SOURCE_FILE} ${GENERATE_BINARY_FILE}) diff --git a/cmake/scripts/Regression.cmake b/cmake/scripts/Regression.cmake new file mode 100644 index 0000000000..e21a86d292 --- /dev/null +++ b/cmake/scripts/Regression.cmake @@ -0,0 +1,106 @@ +cmake_minimum_required(VERSION 3.5) + +# +# Runs a single regressoion test +# + +if(NOT REGRESSION_TEST) + message(FATAL_ERROR "Script needs REGRESSION_TEST defined (tip: use -DREGRESSION_TEST=..)") +endif() +if(NOT OPENTTD_EXECUTABLE) + message(FATAL_ERROR "Script needs OPENTTD_EXECUTABLE defined (tip: use -DOPENTTD_EXECUTABLE=..)") +endif() + +if(NOT EXISTS ai/${REGRESSION_TEST}/test.sav) + message(FATAL_ERROR "Regression test ${REGRESSION_TEST} does not exist (tip: check regression folder for the correct spelling)") +endif() + +# If editbin is given, copy the executable to a new folder, and change the +# subsystem to console. The copy is needed as multiple regressions can run +# at the same time. +if(EDITBIN_EXECUTABLE) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${OPENTTD_EXECUTABLE} regression_${REGRESSION_TEST}.exe) + set(OPENTTD_EXECUTABLE "regression_${REGRESSION_TEST}.exe") + + execute_process(COMMAND ${EDITBIN_EXECUTABLE} /nologo /subsystem:console ${OPENTTD_EXECUTABLE}) +endif() + +# Run the regression test +execute_process(COMMAND ${OPENTTD_EXECUTABLE} + -x + -c regression/regression.cfg + -g ai/${REGRESSION_TEST}/test.sav + -snull + -mnull + -vnull:ticks=30000 + -d script=2 + -d misc=9 + OUTPUT_VARIABLE REGRESSION_OUTPUT + ERROR_VARIABLE REGRESSION_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +if(REGRESSION_OUTPUT) + message(FATAL_ERROR "Unexpected output: ${REGRESSION_OUTPUT}") +endif() + +if(NOT REGRESSION_RESULT) + message(FATAL_ERROR "Regression did not output anything; did the compilation fail?") +endif() + +# For some reason pointer can be printed as '0x(nil)', '0x0000000000000000', or '0x0x0' +string(REPLACE "0x(nil)" "0x00000000" REGRESSION_RESULT "${REGRESSION_RESULT}") +string(REPLACE "0x0000000000000000" "0x00000000" REGRESSION_RESULT "${REGRESSION_RESULT}") +string(REPLACE "0x0x0" "0x00000000" REGRESSION_RESULT "${REGRESSION_RESULT}") + +# Remove timestamps if any +string(REGEX REPLACE "\[[0-9-]+ [0-9:]+\] " "" REGRESSION_RESULT "${REGRESSION_RESULT}") + +# Convert the output to a format that is expected (and more readable) by result.txt +string(REPLACE "\ndbg: [script]" "\n" REGRESSION_RESULT "${REGRESSION_RESULT}") +string(REPLACE "\n " "\nERROR: " REGRESSION_RESULT "${REGRESSION_RESULT}") +string(REPLACE "\nERROR: [1] " "\n" REGRESSION_RESULT "${REGRESSION_RESULT}") +string(REPLACE "\n[P] " "\n" REGRESSION_RESULT "${REGRESSION_RESULT}") +string(REGEX REPLACE "dbg: ([^\n]*)\n?" "" REGRESSION_RESULT "${REGRESSION_RESULT}") + +# Read the expected result +file(READ ai/${REGRESSION_TEST}/result.txt REGRESSION_EXPECTED) + +# Convert the string to a list +string(REPLACE "\n" ";" REGRESSION_RESULT "${REGRESSION_RESULT}") +string(REPLACE "\n" ";" REGRESSION_EXPECTED "${REGRESSION_EXPECTED}") + +set(ARGC 0) +set(ERROR NO) + +list(LENGTH REGRESSION_EXPECTED REGRESSION_EXPECTED_LENGTH) + +# Compare the output +foreach(RESULT IN LISTS REGRESSION_RESULT) + unset(EXPECTED) + if(ARGC LESS REGRESSION_EXPECTED_LENGTH) + list(GET REGRESSION_EXPECTED ${ARGC} EXPECTED) + endif() + + math(EXPR ARGC "${ARGC} + 1") + + if(NOT RESULT STREQUAL EXPECTED) + message("${ARGC}: - ${EXPECTED}") + message("${ARGC}: + ${RESULT}'") + set(ERROR YES) + endif() +endforeach() + +if(NOT REGRESSION_EXPECTED_LENGTH EQUAL ARGC) + message("(${REGRESSION_EXPECTED_LENGTH} lines were expected but ${ARGC} were found)") + set(ERROR YES) +endif() + +if(ERROR) + # Ouput the regression result to a file + set(REGRESSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/regression_${REGRESSION_TEST}_output.txt") + string(REPLACE ";" "\n" REGRESSION_RESULT "${REGRESSION_RESULT}") + file(WRITE ${REGRESSION_FILE} "${REGRESSION_RESULT}") + + message(FATAL_ERROR "Regression failed - Output in ${REGRESSION_FILE}") +endif() diff --git a/cmake/scripts/SquirrelExport.cmake b/cmake/scripts/SquirrelExport.cmake new file mode 100644 index 0000000000..3b230de00f --- /dev/null +++ b/cmake/scripts/SquirrelExport.cmake @@ -0,0 +1,667 @@ +cmake_minimum_required(VERSION 3.5) + +if(NOT SCRIPT_API_SOURCE_FILE) + message(FATAL_ERROR "Script needs SCRIPT_API_SOURCE_FILE defined") +endif() +if(NOT SCRIPT_API_BINARY_FILE) + message(FATAL_ERROR "Script needs SCRIPT_API_BINARY_FILE defined") +endif() +if(NOT SCRIPT_API_FILE) + message(FATAL_ERROR "Script needs SCRIPT_API_FILE defined") +endif() +if(NOT APIUC) + message(FATAL_ERROR "Script needs APIUC defined") +endif() +if(NOT APILC) + message(FATAL_ERROR "Script needs APILC defined") +endif() + +macro(dump_fileheader) + get_filename_component(SCRIPT_API_FILE_NAME "${SCRIPT_API_FILE}" NAME) + string(APPEND SQUIRREL_EXPORT "\n#include \"../${SCRIPT_API_FILE_NAME}\"") + if(NOT "${APIUC}" STREQUAL "Template") + string(REPLACE "script_" "template_" SCRIPT_API_FILE_NAME "${SCRIPT_API_FILE_NAME}") + string(APPEND SQUIRREL_EXPORT "\n#include \"../template/${SCRIPT_API_FILE_NAME}.sq\"") + endif() +endmacro() + +macro(dump_class_templates NAME) + string(REGEX REPLACE "^Script" "" REALNAME ${NAME}) + + string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} *GetParam(ForceType<${NAME} *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (${NAME} *)instance; }") + string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} &GetParam(ForceType<${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(${NAME} *)instance; }") + string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (${NAME} *)instance; }") + string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(${NAME} *)instance; }") + if("${NAME}" STREQUAL "ScriptEvent") + string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${NAME} *>(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; }") + elseif("${NAME}" STREQUAL "ScriptText") + string(APPEND SQUIRREL_EXPORT "\n") + string(APPEND SQUIRREL_EXPORT "\n template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {") + string(APPEND SQUIRREL_EXPORT "\n if (sq_gettype(vm, index) == OT_INSTANCE) {") + string(APPEND SQUIRREL_EXPORT "\n return GetParam(ForceType(), vm, index, ptr);") + string(APPEND SQUIRREL_EXPORT "\n }") + string(APPEND SQUIRREL_EXPORT "\n if (sq_gettype(vm, index) == OT_STRING) {") + string(APPEND SQUIRREL_EXPORT "\n return new RawText(GetParam(ForceType(), vm, index, ptr));") + string(APPEND SQUIRREL_EXPORT "\n }") + string(APPEND SQUIRREL_EXPORT "\n return nullptr;") + string(APPEND SQUIRREL_EXPORT "\n }") + else() + string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${NAME} *>(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; }") + endif() +endmacro() + +macro(reset_reader) + unset(ENUMS) + unset(ENUM_VALUES) + unset(CONST_VALUES) + unset(STRUCTS) + unset(ENUM_STRING_TO_ERRORS) + unset(ENUM_ERROR_TO_STRINGS) + unset(METHODS) + unset(STATIC_METHODS) + unset(CLS) + unset(START_SQUIRREL_DEFINE_ON_NEXT_LINE) + set(CLS_LEVEL 0) + unset(CLS_IN_API) +endmacro() + +reset_reader() + +file(STRINGS "${SCRIPT_API_FILE}" SOURCE_LINES) + +foreach(LINE IN LISTS SOURCE_LINES) + # Ignore special doxygen blocks + if("${LINE}" MATCHES "^#ifndef DOXYGEN_API") + set(DOXYGEN_SKIP "next") + continue() + endif() + if("${LINE}" MATCHES "^#ifdef DOXYGEN_API") + set(DOXYGEN_SKIP "true") + continue() + endif() + if("${LINE}" MATCHES "^#endif /\\* DOXYGEN_API \\*/") + unset(DOXYGEN_SKIP) + continue() + endif() + if("${LINE}" MATCHES "^#else") + if("${DOXYGEN_SKIP}" STREQUAL "next") + set(DOXYGEN_SKIP "true") + else() + unset(DOXYGEN_SKIP) + endif() + continue() + endif() + if("${DOXYGEN_SKIP}" STREQUAL "true") + continue() + endif() + + if("${LINE}" MATCHES "^([ ]*)\\* @api (.*)$") + set(LINE ${CMAKE_MATCH_2}) + # By default, classes are not selected + if(NOT CLS_LEVEL) + set(API_SELECTED FALSE) + endif() + + if("${APIUC}" STREQUAL "Template") + set(API_SELECTED TRUE) + if("${LINE}" STREQUAL "none" OR "${LINE}" STREQUAL "-all") + set(API_SELECTED FALSE) + endif() + continue() + endif() + + if("${LINE}" STREQUAL "none" OR "${LINE}" STREQUAL "-all") + set(API_SELECTED FALSE) + elseif("${LINE}" MATCHES "-${APILC}") + set(API_SELECTED FALSE) + elseif("${LINE}" MATCHES "${APILC}") + set(API_SELECTED TRUE) + endif() + continue() + endif() + + # Remove the old squirrel stuff + if("${LINE}" MATCHES "#ifdef DEFINE_SQUIRREL_CLASS") + set(SQUIRREL_STUFF TRUE) + continue() + endif() + if("${LINE}" MATCHES "^#endif /\\* DEFINE_SQUIRREL_CLASS \\*/") + unset(SQUIRREL_STUFF) + continue() + endif() + if(SQUIRREL_STUFF) + continue() + endif() + + # Ignore forward declarations of classes + if("${LINE}" MATCHES "^( *)class(.*);") + continue() + endif() + + # We only want to have public functions exported for now + if("${LINE}" MATCHES "^( *)class (.*) (: public|: protected|: private|:) ([^ ]*)") + if(NOT CLS_LEVEL) + if(NOT DEFINED API_SELECTED) + message(WARNING "Class '${CMAKE_MATCH_2}' has no @api. It won't be published to any API.") + set(API_SELECTED FALSE) + endif() + unset(IS_PUBLIC) + unset(CLS_PARAM_0) + set(CLS_PARAM_1 1) + set(CLS_PARAM_2 "x") + set(CLS_IN_API ${API_SELECTED}) + unset(API_SELECTED) + set(CLS "${CMAKE_MATCH_2}") + set(SUPER_CLS "${CMAKE_MATCH_4}") + elseif(CLS_LEVEL EQUAL 1) + if(NOT DEFINED API_SELECTED) + set(API_SELECTED ${CLS_IN_API}) + endif() + + if(API_SELECTED) + list(APPEND STRUCTS "${CLS}::${CMAKE_MATCH_2}") + endif() + unset(API_SELECTED) + endif() + math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") + continue() + endif() + if("${LINE}" MATCHES "^( *)public") + if(CLS_LEVEL EQUAL 1) + set(IS_PUBLIC TRUE) + endif() + continue() + endif() + if("${LINE}" MATCHES "^( *)protected") + if(CLS_LEVEL EQUAL 1) + unset(IS_PUBLIC) + endif() + continue() + endif() + if("${LINE}" MATCHES "^( *)private") + if(CLS_LEVEL EQUAL 1) + unset(IS_PUBLIC) + endif() + continue() + endif() + + # Ignore the comments + if("${LINE}" MATCHES "^#") + continue() + endif() + if("${LINE}" MATCHES "/\\*.*\\*/") + unset(COMMENT) + continue() + endif() + if("${LINE}" MATCHES "/\\*") + set(COMMENT TRUE) + continue() + endif() + if("${LINE}" MATCHES "\\*/") + unset(COMMENT) + continue() + endif() + if(COMMENT) + continue() + endif() + + # We need to make specialized conversions for structs + if("${LINE}" MATCHES "^( *)struct ([^ ]*)") + math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") + + # Check if we want to publish this struct + if(NOT DEFINED API_SELECTED) + set(API_SELECTED ${CLS_IN_API}) + endif() + if(NOT API_SELECTED) + unset(API_SELECTED) + continue() + endif() + unset(API_SELECTED) + + if(NOT IS_PUBLIC OR NOT CLS_LEVEL EQUAL 1) + continue() + endif() + + list(APPEND STRUCTS "${CLS}::${CMAKE_MATCH_2}") + continue() + endif() + + # We need to make specialized conversions for enums + if("${LINE}" MATCHES "^( *)enum ([^ ]*)") + math(EXPR CLS_LEVEL "${CLS_LEVEL} + 1") + + # Check if we want to publish this enum + if(NOT DEFINED API_SELECTED) + set(API_SELECTED ${CLS_IN_API}) + endif() + if(NOT API_SELECTED) + unset(API_SELECTED) + continue() + endif() + unset(API_SELECTED) + + if(NOT IS_PUBLIC) + continue() + endif() + + set(IN_ENUM TRUE) + list(APPEND ENUMS "${CLS}::${CMAKE_MATCH_2}") + continue() + endif() + + # Maybe the end of the class, if so we can start with the Squirrel export pretty soon + if("${LINE}" MATCHES "};") + math(EXPR CLS_LEVEL "${CLS_LEVEL} - 1") + if(CLS_LEVEL) + unset(IN_ENUM) + continue() + endif() + + if(CLS) + set(START_SQUIRREL_DEFINE_ON_NEXT_LINE TRUE) + endif() + continue() + endif() + + # Empty/white lines. When we may do the Squirrel export, do that export. + if("${LINE}" MATCHES "^([ ]*)$") + if(NOT START_SQUIRREL_DEFINE_ON_NEXT_LINE) + continue() + endif() + + if(NOT CLS_IN_API) + reset_reader() + continue() + endif() + + if(NOT HAS_FILEHEADER) + dump_fileheader() + set(HAS_FILEHEADER TRUE) + endif() + + unset(IS_PUBLIC) + unset(NAMESPACE_OPENED) + + string(REGEX REPLACE "^Script" "${APIUC}" API_CLS "${CLS}") + string(REGEX REPLACE "^Script" "${APIUC}" API_SUPER_CLS "${SUPER_CLS}") + + string(APPEND SQUIRREL_EXPORT "\n") + + if("${APIUC}" STREQUAL "Template") + # First check whether we have enums to print + if(DEFINED ENUMS) + if(NOT NAMESPACE_OPENED) + string(APPEND SQUIRREL_EXPORT "\nnamespace SQConvert {") + set(NAMESPACE_OPENED TRUE) + endif() + string(APPEND SQUIRREL_EXPORT "\n /* Allow enums to be used as Squirrel parameters */") + foreach(ENUM IN LISTS ENUMS) + string(APPEND SQUIRREL_EXPORT "\n template <> inline ${ENUM} GetParam(ForceType<${ENUM}>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (${ENUM})tmp; }") + string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${ENUM}>(HSQUIRRELVM vm, ${ENUM} res) { sq_pushinteger(vm, (int32)res); return 1; }") + endforeach() + endif() + + # Then check whether we have structs/classes to print + if(DEFINED STRUCTS) + if(NOT NAMESPACE_OPENED) + string(APPEND SQUIRREL_EXPORT "\nnamespace SQConvert {") + set(NAMESPACE_OPENED TRUE) + endif() + string(APPEND SQUIRREL_EXPORT "\n /* Allow inner classes/structs to be used as Squirrel parameters */") + foreach(STRUCT IN LISTS STRUCTS) + dump_class_templates(${STRUCT}) + endforeach() + endif() + + if(NOT NAMESPACE_OPENED) + string(APPEND SQUIRREL_EXPORT "\nnamespace SQConvert {") + set(NAMESPACE_OPENED TRUE) + else() + string(APPEND SQUIRREL_EXPORT "\n") + endif() + string(APPEND SQUIRREL_EXPORT "\n /* Allow ${CLS} to be used as Squirrel parameter */") + dump_class_templates(${CLS}) + + string(APPEND SQUIRREL_EXPORT "\n} // namespace SQConvert") + + reset_reader() + continue() + endif() + + string(APPEND SQUIRREL_EXPORT "\n") + string(APPEND SQUIRREL_EXPORT "\ntemplate <> const char *GetClassName<${CLS}, ST_${APIUC}>() { return \"${API_CLS}\"; }") + string(APPEND SQUIRREL_EXPORT "\n") + + # Then do the registration functions of the class. + string(APPEND SQUIRREL_EXPORT "\nvoid SQ${API_CLS}_Register(Squirrel *engine)") + string(APPEND SQUIRREL_EXPORT "\n{") + string(APPEND SQUIRREL_EXPORT "\n DefSQClass<${CLS}, ST_${APIUC}> SQ${API_CLS}(\"${API_CLS}\");") + if("${SUPER_CLS}" STREQUAL "Text" OR "${SUPER_CLS}" STREQUAL "ScriptObject" OR "${SUPER_CLS}" STREQUAL "AIAbstractiveList::Valuator") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine);") + else() + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine, \"${API_SUPER_CLS}\");") + endif() + if(NOT "${SUPER_CLS}" STREQUAL "ScriptEvent") + if("${CLS_PARAM_2}" STREQUAL "v") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddSQAdvancedConstructor(engine);") + else() + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddConstructor(engine, \"${CLS_PARAM_2}\");") + endif() + endif() + string(APPEND SQUIRREL_EXPORT "\n") + + # Enum values + set(MLEN 0) + foreach(ENUM_VALUE IN LISTS ENUM_VALUES) + string(LENGTH "${ENUM_VALUE}" LEN) + if(MLEN LESS LEN) + set(MLEN ${LEN}) + endif() + endforeach() + foreach(ENUM_VALUE IN LISTS ENUM_VALUES) + string(LENGTH "${ENUM_VALUE}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach() + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQConst(engine, ${CLS}::${ENUM_VALUE},${SPACES}\"${ENUM_VALUE}\");") + endforeach() + if(MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif() + + # Const values + set(MLEN 0) + foreach(CONST_VALUE IN LISTS CONST_VALUES) + string(LENGTH "${CONST_VALUE}" LEN) + if(MLEN LESS LEN) + set(MLEN ${LEN}) + endif() + endforeach() + foreach(CONST_VALUE IN LISTS CONST_VALUES) + string(LENGTH "${CONST_VALUE}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach() + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQConst(engine, ${CLS}::${CONST_VALUE},${SPACES}\"${CONST_VALUE}\");") + endforeach() + if(MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif() + + # Mapping of OTTD strings to errors + set(MLEN 0) + foreach(ENUM_STRING_TO_ERROR IN LISTS ENUM_STRING_TO_ERRORS) + string(REPLACE ":" ";" ENUM_STRING_TO_ERROR "${ENUM_STRING_TO_ERROR}") + list(GET ENUM_STRING_TO_ERROR 0 ENUM_STRING) + string(LENGTH "${ENUM_STRING}" LEN) + if(MLEN LESS LEN) + set(MLEN ${LEN}) + endif() + endforeach() + foreach(ENUM_STRING_TO_ERROR IN LISTS ENUM_STRING_TO_ERRORS) + string(REPLACE ":" ";" ENUM_STRING_TO_ERROR "${ENUM_STRING_TO_ERROR}") + list(GET ENUM_STRING_TO_ERROR 0 ENUM_STRING) + list(GET ENUM_STRING_TO_ERROR 1 ENUM_ERROR) + string(LENGTH "${ENUM_STRING}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach() + string(APPEND SQUIRREL_EXPORT "\n ScriptError::RegisterErrorMap(${ENUM_STRING},${SPACES}${CLS}::${ENUM_ERROR});") + endforeach() + if(MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif() + + # Mapping of errors to human 'readable' strings. + set(MLEN 0) + foreach(ENUM_ERROR_TO_STRING IN LISTS ENUM_ERROR_TO_STRINGS) + string(LENGTH "${ENUM_ERROR_TO_STRING}" LEN) + if(MLEN LESS LEN) + set(MLEN ${LEN}) + endif() + endforeach() + foreach(ENUM_ERROR_TO_STRING IN LISTS ENUM_ERROR_TO_STRINGS) + string(LENGTH "${ENUM_ERROR_TO_STRING}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach() + string(APPEND SQUIRREL_EXPORT "\n ScriptError::RegisterErrorMapString(${CLS}::${ENUM_ERROR_TO_STRING},${SPACES}\"${ENUM_ERROR_TO_STRING}\");") + endforeach() + if(MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif() + + # Static methods + set(MLEN 0) + foreach(STATIC_METHOD IN LISTS STATIC_METHODS) + string(REPLACE ":" ";" STATIC_METHOD "${STATIC_METHOD}") + list(GET STATIC_METHOD 0 FUNCNAME) + string(LENGTH "${FUNCNAME}" LEN) + if(MLEN LESS LEN) + set(MLEN ${LEN}) + endif() + endforeach() + foreach(STATIC_METHOD IN LISTS STATIC_METHODS) + string(REPLACE ":" ";" STATIC_METHOD "${STATIC_METHOD}") + list(GET STATIC_METHOD 0 FUNCNAME) + list(GET STATIC_METHOD 1 ARGC) + list(GET STATIC_METHOD 2 TYPES) + string(LENGTH "${FUNCNAME}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + if("${TYPES}" STREQUAL "v") + if(LEN GREATER 8) + math(EXPR LEN "${LEN} - 8") + else() + set(LEN 0) + endif() + endif() + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach() + if("${TYPES}" STREQUAL "v") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQAdvancedStaticMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\");") + else() + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQStaticMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\",${SPACES}${ARGC}, \"${TYPES}\");") + endif() + endforeach() + if(MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif() + + # Non-static methods + set(MLEN 0) + foreach(METHOD IN LISTS METHODS) + string(REPLACE ":" ";" METHOD "${METHOD}") + list(GET METHOD 0 FUNCNAME) + string(LENGTH "${FUNCNAME}" LEN) + if(MLEN LESS LEN) + set(MLEN ${LEN}) + endif() + endforeach() + foreach(METHOD IN LISTS METHODS) + string(REPLACE ":" ";" METHOD "${METHOD}") + list(GET METHOD 0 FUNCNAME) + list(GET METHOD 1 ARGC) + list(GET METHOD 2 TYPES) + string(LENGTH "${FUNCNAME}" LEN) + math(EXPR LEN "${MLEN} - ${LEN}") + if("${TYPES}" STREQUAL "v") + if(LEN GREATER 8) + math(EXPR LEN "${LEN} - 8") + else() + set(LEN 0) + endif() + endif() + unset(SPACES) + foreach(i RANGE ${LEN}) + string(APPEND SPACES " ") + endforeach() + if("${TYPES}" STREQUAL "v") + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQAdvancedMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\");") + else() + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.DefSQMethod(engine, &${CLS}::${FUNCNAME},${SPACES}\"${FUNCNAME}\",${SPACES}${ARGC}, \"${TYPES}\");") + endif() + endforeach() + if(MLEN) + string(APPEND SQUIRREL_EXPORT "\n") + endif() + + string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PostRegister(engine);") + string(APPEND SQUIRREL_EXPORT "\n}") + + reset_reader() + + continue() + endif() + + # Skip non-public functions + if(NOT IS_PUBLIC) + continue() + endif() + + # Add enums + if(IN_ENUM) + string(REGEX MATCH "([^, ]+)" ENUM_VALUE "${LINE}") + list(APPEND ENUM_VALUES "${ENUM_VALUE}") + + # Check if this a special error enum + list(GET ENUMS -1 ENUM) + if("${ENUM}" MATCHES ".*::ErrorMessages") + # syntax: + # enum ErrorMessages { + # ERR_SOME_ERROR, // [STR_ITEM1, STR_ITEM2, ...] + # } + + # Set the mappings + if("${LINE}" MATCHES "\\[(.*)\\]") + string(REGEX REPLACE "[ ]" "" MAPPINGS "${CMAKE_MATCH_1}") + string(REPLACE "," ";" MAPPINGS "${MAPPINGS}") + + foreach(MAPPING IN LISTS MAPPINGS) + list(APPEND ENUM_STRING_TO_ERRORS "${MAPPING}:${ENUM_VALUE}") + endforeach() + + list(APPEND ENUM_ERROR_TO_STRINGS "${ENUM_VALUE}") + endif() + endif() + continue() + endif() + + # Add a const (non-enum) value + if("${LINE}" MATCHES "^[ ]*static const [^ ]+ ([^ ]+) = -?\\(?[^ ]*\\)?[^ ]+;") + list(APPEND CONST_VALUES "${CMAKE_MATCH_1}") + continue() + endif() + + # Add a method to the list + if("${LINE}" MATCHES "^.*\\(.*\\).*$") + if(NOT CLS_LEVEL EQUAL 1) + continue() + endif() + if("${LINE}" MATCHES "~") + if(DEFINED API_SELECTED) + message(WARNING "Destructor for '${CLS}' has @api. Tag ignored.") + unset(API_SELECTED) + endif() + continue() + endif() + + unset(IS_STATIC) + if("${LINE}" MATCHES "static") + set(IS_STATIC TRUE) + endif() + + string(REGEX REPLACE "(virtual|static|const)[ ]+" "" LINE "${LINE}") + string(REGEX REPLACE "{.*" "" LINE "${LINE}") + set(PARAM_S "${LINE}") + string(REGEX REPLACE "\\*" "" LINE "${LINE}") + string(REGEX REPLACE "\\(.*" "" LINE "${LINE}") + + string(REGEX REPLACE ".*\\(" "" PARAM_S "${PARAM_S}") + string(REGEX REPLACE "\\).*" "" PARAM_S "${PARAM_S}") + + string(REGEX MATCH "([^ ]+)( ([^ ]+))?" RESULT "${LINE}") + set(FUNCTYPE "${CMAKE_MATCH_1}") + set(FUNCNAME "${CMAKE_MATCH_3}") + if("${FUNCTYPE}" STREQUAL "${CLS}" AND NOT FUNCNAME) + if(DEFINED API_SELECTED) + message(WARNING "Constructor for '${CLS}' has @api. Tag ignored.") + unset(API_SELECTED) + endif() + set(CLS_PARAM_0 "${PARAM_S}") + if(NOT PARAM_S) + continue() + endif() + elseif(NOT FUNCNAME) + continue() + endif() + + string(REPLACE "," ";" PARAMS "${PARAM_S}") + if(IS_STATIC) + set(TYPES ".") + else() + set(TYPES "x") + endif() + + set(LEN 1) + foreach(PARAM IN LISTS PARAMS) + math(EXPR LEN "${LEN} + 1") + string(STRIP "${PARAM}" PARAM) + if("${PARAM}" MATCHES "\\*|&") + if("${PARAM}" MATCHES "^char") + # Many types can be converted to string, so use '.', not 's'. (handled by our glue code) + string(APPEND TYPES ".") + elseif("${PARAM}" MATCHES "^void") + string(APPEND TYPES "p") + elseif("${PARAM}" MATCHES "^Array") + string(APPEND TYPES "a") + elseif("${PARAM}" MATCHES "^struct Array") + string(APPEND TYPES "a") + elseif("${PARAM}" MATCHES "^Text") + string(APPEND TYPES ".") + else() + string(APPEND TYPES "x") + endif() + elseif("${PARAM}" MATCHES "^bool") + string(APPEND TYPES "b") + elseif("${PARAM}" MATCHES "^HSQUIRRELVM") + set(TYPES "v") + else() + string(APPEND TYPES "i") + endif() + endforeach() + + # Check if we want to publish this function + if(NOT DEFINED API_SELECTED) + set(API_SELECTED ${CLS_IN_API}) + endif() + if(NOT API_SELECTED) + unset(API_SELECTED) + continue() + endif() + unset(API_SELECTED) + + if("${FUNCTYPE}" STREQUAL "${CLS}" AND NOT FUNCNAME) + set(CLS_PARAM_1 ${LEN}) + set(CLS_PARAM_2 "${TYPES}") + elseif("${FUNCNAME}" MATCHES "^_" AND NOT "${TYPES}" STREQUAL "v") + elseif(IS_STATIC) + list(APPEND STATIC_METHODS "${FUNCNAME}:${LEN}:${TYPES}") + else() + list(APPEND METHODS "${FUNCNAME}:${LEN}:${TYPES}") + endif() + continue() + endif() +endforeach() + +configure_file(${SCRIPT_API_SOURCE_FILE} ${SCRIPT_API_BINARY_FILE}) diff --git a/cmake/scripts/SquirrelIncludes.cmake b/cmake/scripts/SquirrelIncludes.cmake new file mode 100644 index 0000000000..672ad09531 --- /dev/null +++ b/cmake/scripts/SquirrelIncludes.cmake @@ -0,0 +1,67 @@ +cmake_minimum_required(VERSION 3.5) + +if(NOT INCLUDES_SOURCE_FILE) + message(FATAL_ERROR "Script needs INCLUDES_SOURCE_FILE defined") +endif() +if(NOT INCLUDES_BINARY_FILE) + message(FATAL_ERROR "Script needs INCLUDES_BINARY_FILE defined") +endif() +if(NOT APILC) + message(FATAL_ERROR "Script needs APILC defined") +endif() +if(NOT APIUC) + message(FATAL_ERROR "Script needs APIUC defined") +endif() + +set(ARGC 1) +set(ARG_READ NO) + +# For MSVC CMake runs this script from a batch file using || to detect errors, +# depending on source path it may quote args, and cause cmd to not understand || +# and pass it as argument to ourself. +# Read all the arguments given to CMake; we are looking for -- and everything +# that follows, until ||. Those are our api files. +while(ARGC LESS CMAKE_ARGC) + set(ARG ${CMAKE_ARGV${ARGC}}) + + if(ARG STREQUAL "||") + set(ARG_READ NO) + endif() + + if(ARG_READ) + list(APPEND SCRIPT_API_BINARY_FILES "${ARG}") + endif() + + if(ARG STREQUAL "--") + set(ARG_READ YES) + endif() + + math(EXPR ARGC "${ARGC} + 1") +endwhile() + +foreach(FILE IN LISTS SCRIPT_API_BINARY_FILES) + file(STRINGS "${FILE}" LINES REGEX "^void SQ${APIUC}.*_Register\\(Squirrel \\*engine\\)$") + if(LINES) + string(REGEX REPLACE ".*api/${APILC}/(.*)" "#include \"\\1\"" FILE "${FILE}") + list(APPEND SQUIRREL_INCLUDES "${FILE}") + foreach(LINE IN LISTS LINES) + if("${LINE}" MATCHES "SQ${APIUC}(List|Controller)_Register") + continue() + endif() + string(REGEX REPLACE "^.*void " " " LINE "${LINE}") + string(REGEX REPLACE "Squirrel \\*" "" LINE "${LINE}") + list(APPEND SQUIRREL_REGISTER "${LINE}") + endforeach() + endif() +endforeach() + +list(SORT SQUIRREL_INCLUDES) +string(REPLACE ";" "\n" SQUIRREL_INCLUDES "${SQUIRREL_INCLUDES}") + +string(REGEX REPLACE "_Register" "0000Register" SQUIRREL_REGISTER "${SQUIRREL_REGISTER}") +list(SORT SQUIRREL_REGISTER) +string(REGEX REPLACE "0000Register" "_Register" SQUIRREL_REGISTER "${SQUIRREL_REGISTER}") +string(REPLACE ";" ";\n" SQUIRREL_REGISTER "${SQUIRREL_REGISTER}") +set(SQUIRREL_REGISTER " SQ${APIUC}List_Register(engine);\n${SQUIRREL_REGISTER};") + +configure_file(${INCLUDES_SOURCE_FILE} ${INCLUDES_BINARY_FILE}) diff --git a/config.lib b/config.lib index 94b240d3c9..0751f00185 100644 --- a/config.lib +++ b/config.lib @@ -68,6 +68,7 @@ set_default() { with_cocoa="1" with_zlib="1" with_lzma="1" + with_zstd="1" with_lzo2="1" with_xdg_basedir="1" with_png="1" @@ -340,6 +341,10 @@ detect_params() { --without-liblzma) with_lzma="0";; --with-liblzma=*) with_lzma="$optarg";; + --with-zstd) with_zstd="2";; + --without-zstd) with_zstd="0";; + --with-zstd=*) with_zstd="$optarg";; + --with-lzo2) with_lzo2="2";; --without-lzo2) with_lzo2="0";; --with-lzo2=*) with_lzo2="$optarg";; @@ -824,6 +829,20 @@ check_params() { fi fi + pre_detect_with_zstd=$with_zstd + detect_zstd + + if [ "$with_zstd" = "0" ] || [ -z "$zstd_config" ]; then + log 1 "WARNING: zstd was not detected or disabled" + if [ "$pre_detect_with_zstd" = "0" ]; then + log 1 "WARNING: We strongly suggest you to install zstd." + else + log 1 "configure: error: no zstd detected" + log 1 " If you want to compile without zstd use --without-zstd as parameter" + exit + fi + fi + pre_detect_with_lzo2=$with_lzo2 detect_lzo2 @@ -1480,8 +1499,8 @@ make_cflags_and_ldflags() { CFLAGS="$CFLAGS -D$os" CFLAGS_BUILD="$CFLAGS_BUILD -D$os" - CXXFLAGS="$CXXFLAGS -std=c++11" - CXXFLAGS_BUILD="$CXXFLAGS_BUILD -std=c++11" + CXXFLAGS="$CXXFLAGS -std=c++17" + CXXFLAGS_BUILD="$CXXFLAGS_BUILD -std=c++17" if [ "$enable_debug" = "0" ]; then # No debug, add default stuff @@ -1690,6 +1709,17 @@ make_cflags_and_ldflags() { fi fi + if [ -n "$zstd_config" ]; then + CFLAGS="$CFLAGS -DWITH_ZSTD" + CFLAGS="$CFLAGS `$zstd_config --cflags | tr '\n\r' ' '`" + + if [ "$enable_static" != "0" ]; then + LIBS="$LIBS `$zstd_config --libs --static | tr '\n\r' ' '`" + else + LIBS="$LIBS `$zstd_config --libs | tr '\n\r' ' '`" + fi + fi + if [ "$with_lzo2" != "0" ]; then if [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then LIBS="$LIBS $lzo2" @@ -2796,6 +2826,10 @@ detect_lzma() { detect_pkg_config "$with_lzma" "liblzma" "lzma_config" "5.0" } +detect_zstd() { + detect_pkg_config "$with_zstd" "libzstd" "zstd_config" "1.4" +} + detect_xdg_basedir() { detect_pkg_config "$with_xdg_basedir" "libxdg-basedir" "xdg_basedir_config" "1.2" } diff --git a/configure b/configure deleted file mode 100755 index 991e8f1432..0000000000 --- a/configure +++ /dev/null @@ -1,169 +0,0 @@ -#!/bin/sh - -# This file is part of OpenTTD. -# OpenTTD 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, version 2. -# OpenTTD 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 OpenTTD. If not, see . - -check_path_characters() { - if [ -n "`echo $ROOT_DIR | grep '[^-_A-Za-z0-9\/\\\.:]'`" ]; then - echo "WARNING: The path contains a non-alphanumeric character that might cause" - echo " failures in subsequent build stages. Any failures with the build" - echo " will most likely be caused by this." - fi -} - -CONFIGURE_EXECUTABLE="$_" -# On *nix systems those two are equal when ./configure is done -if [ "$0" != "$CONFIGURE_EXECUTABLE" ]; then - # On some systems, when ./configure is triggered from 'make' - # the $_ is filled with 'make'. So if that is true, skip 'make' - # and use $0 (and hope that is correct ;)) - if [ -n "`echo $CONFIGURE_EXECUTABLE | grep make`" ]; then - CONFIGURE_EXECUTABLE="$0" - else - CONFIGURE_EXECUTABLE="$CONFIGURE_EXECUTABLE $0" - fi -fi -# Find out where configure is (in what dir) -ROOT_DIR="`dirname $0`" -# For MSYS/MinGW we want to know the FULL path. This as that path is generated -# once you call an outside binary. Having the same path for the rest is needed -# for dependency checking. -# pwd -W returns said FULL path, but doesn't exist on others so fall back. -ROOT_DIR="`cd $ROOT_DIR && (pwd -W 2>/dev/null || pwd 2>/dev/null)`" - -check_path_characters - -# Same here as for the ROOT_DIR above -PWD="`pwd -W 2>/dev/null || pwd 2>/dev/null`" -PREFIX="$PWD/bin" - -. $ROOT_DIR/config.lib - -# Set default dirs -OBJS_DIR="$PWD/objs" -BASE_SRC_OBJS_DIR="$OBJS_DIR" -LANG_OBJS_DIR="$OBJS_DIR/lang" -GRF_OBJS_DIR="$OBJS_DIR/extra_grf" -SETTING_OBJS_DIR="$OBJS_DIR/setting" -BIN_DIR="$PREFIX" -SRC_DIR="$ROOT_DIR/src" -LANG_DIR="$SRC_DIR/lang" -MEDIA_DIR="$ROOT_DIR/media" -SOURCE_LIST="$ROOT_DIR/source.list" - -if [ "$1" = "--reconfig" ] || [ "$1" = "--reconfigure" ]; then - if [ ! -f "config.cache" ]; then - echo "can't reconfigure, because never configured before" - exit 1 - fi - # Make sure we don't lock config.cache - cat config.cache | sed 's@\\ @\\\\ @g' > cache.tmp - sh cache.tmp - RET=$? - rm -f cache.tmp - exit $RET -fi - -set_default -detect_params "$@" -check_params -save_params -make_cflags_and_ldflags - -EXE="" -if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ]; then - EXE=".exe" -fi - -TTD="openttd$EXE" -STRGEN="strgen$EXE" -DEPEND="depend$EXE" -SETTINGSGEN="settings_gen$EXE" - -if [ -z "$sort" ]; then - PIPE_SORT="sed s@a@a@" -else - PIPE_SORT="$sort" -fi - -if [ ! -f "$LANG_DIR/english.txt" ]; then - echo "Languages not found in $LANG_DIR. Can't continue without it." - echo "Please make sure the dir exists and contains at least english.txt" -fi - -# Read the source.list and process it -AWKCOMMAND=' - { } - /^( *)#end/ { if (deep == skip) { skip -= 1; } deep -= 1; next; } - /^( *)#else/ { if (deep == skip) { skip -= 1; } else if (deep - 1 == skip) { skip += 1; } next; } - /^( *)#if/ { - gsub(" ", "", $0); - gsub("^#if ", "", $0); - - if (deep != skip) { deep += 1; next; } - - deep += 1; - - if ($0 == "ALLEGRO" && "'$allegro_config'" == "") { next; } - if ($0 == "SDL" && "'$sdl_config'" == "") { next; } - if ($0 == "SDL2" && "'$sdl2_config'" == "") { next; } - if ($0 == "PNG" && "'$png_config'" == "") { next; } - if ($0 == "OSX" && "'$os'" != "OSX") { next; } - if ($0 == "OS2" && "'$os'" != "OS2") { next; } - if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; } - if ($0 == "AI" && "'$enable_ai'" == "0") { next; } - if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; } - if ($0 == "HAIKU" && "'$os'" != "HAIKU") { next; } - if ($0 == "WIN32" && "'$os'" != "MINGW" && - "'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; } - if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } - if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; } - if ($0 == "FLUIDSYNTH" && "'$fluidsynth'" == "" ) { next; } - if ($0 == "USE_XAUDIO2" && "'$with_xaudio2'" == "0") { next; } - if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; } - if ($0 == "USE_SSE" && "'$with_sse'" != "1") { next; } - - skip += 1; - - next; - } - /^( *)#/ { next } - /^$/ { next } - /\.h$/ { next } - /\.hpp$/ { next } - { - if (deep == skip) { - gsub(" ", "", $0); - print $0; - } - } -' - -# Read the source.list and process it -# Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations -SRCS="`< $ROOT_DIR/source.list tr '\r' '\n' | $awk \"$AWKCOMMAND\" | LC_ALL=C $PIPE_SORT`" - -OBJS_C="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.c$/ { gsub(\".c$\", \".o\", $0); print $0; }'`" -OBJS_CPP="`echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.cpp$/ { gsub(\".cpp$\", \".o\", $0); print $0; }'`" -OBJS_MM="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.mm$/ { gsub(\".mm$\", \".o\", $0); print $0; }'`" -OBJS_RC="` echo \"$SRCS\" | $awk ' { ORS = \" \" } /\.rc$/ { gsub(\".rc$\", \".o\", $0); print $0; }'`" -SRCS="` echo \"$SRCS\" | $awk ' { ORS = \" \" } { print $0; }'`" - -# In makefiles, we always use -u for sort -if [ -z "$sort" ]; then - sort="sed s@a@a@" -else - sort="$sort -u" -fi - -CONFIGURE_FILES="$ROOT_DIR/configure $ROOT_DIR/config.lib $ROOT_DIR/Makefile.in $ROOT_DIR/Makefile.grf.in $ROOT_DIR/Makefile.lang.in $ROOT_DIR/Makefile.src.in $ROOT_DIR/Makefile.bundle.in $ROOT_DIR/Makefile.setting.in" - -generate_main -generate_lang -generate_settings -generate_grf -generate_src - -check_path_characters diff --git a/docs/admin_network.md b/docs/admin_network.md index ff5ea7c27a..4703df322a 100644 --- a/docs/admin_network.md +++ b/docs/admin_network.md @@ -86,6 +86,9 @@ Last updated: 2011-01-20 Note: not every update type supports every frequency. If in doubt, you can verify against the data received in `ADMIN_PACKET_SERVER_PROTOCOL`. + Please note the potential gotcha in the "Certain packet information" section below + when using the `ADMIN_UPDATE_FREQUENCY` packet. + The server will not confirm your registered update. However, asking for an invalid `AdminUpdateType` or a not supported `AdminUpdateFrequency` you will be disconnected from the server with `NETWORK_ERROR_ILLEGAL_PACKET`. @@ -143,6 +146,9 @@ Last updated: 2011-01-20 - ADMIN_UPDATE_COMPANY_STATS - ADMIN_UPDATE_CMD_NAMES + Please note the potential gotcha in the "Certain packet information" section below + when using the `ADMIN_POLL` packet. + `ADMIN_UPDATE_CLIENT_INFO` and `ADMIN_UPDATE_COMPANY_INFO` accept an additional parameter. This parameter is used to specify a certain client or company. Setting this parameter to `UINT32_MAX (0xFFFFFFFF)` will tell the server you @@ -213,6 +219,14 @@ Last updated: 2011-01-20 ## 7.0) Certain packet information + `ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY` and `ADMIN_PACKET_ADMIN_POLL` + + Potential gotcha: the AdminUpdateType integer type used is a + uint16 for `UPDATE_FREQUENCY`, and a uint8 for `POLL`. + This is due to boring legacy reasons. + It is safe to cast between the two when sending + (i.e cast from a uint8 to a uint16). + All `ADMIN_PACKET_SERVER_*` packets have an enum value greater 100. `ADMIN_PACKET_SERVER_WELCOME` diff --git a/docs/landscape.html b/docs/landscape.html index 4eac0926e7..ab4ad989e3 100644 --- a/docs/landscape.html +++ b/docs/landscape.html @@ -802,7 +802,7 @@ 4  - on snow with rough land underneed + on snow with rough land underneath diff --git a/docs/landscape_grid.html b/docs/landscape_grid.html index d4a88d0bb5..7eac768591 100644 --- a/docs/landscape_grid.html +++ b/docs/landscape_grid.html @@ -5,10 +5,14 @@ OpenTTD Landscape Internals - #2 + + +
+
+
+ Loading ... +
+
+
+
+
+
+
+ Warning: savegames are stored in the Indexed DB of your browser.
Your browser can delete savegames without notice! +
+
+
+ +
+ + + {{{ SCRIPT }}} + + diff --git a/os/macosx/plistgen.sh b/os/macosx/Info.plist.in old mode 100755 new mode 100644 similarity index 50% rename from os/macosx/plistgen.sh rename to os/macosx/Info.plist.in index f492bcdcf9..359d28de8d --- a/os/macosx/plistgen.sh +++ b/os/macosx/Info.plist.in @@ -1,46 +1,35 @@ -#!/bin/sh - -# sets VERSION to the value if RELEASE if there are any, -# otherwise it sets VERSION to revision number -if [ "$3" ]; then -VERSION="$3" -else -VERSION="$2" -fi -date=`date +%Y` - -# Generates Info.plist while applying $VERSION - -echo " - + + + CFBundleDevelopmentRegion English CFBundleDisplayName - OpenTTD + ${CPACK_BUNDLE_NAME} CFBundleExecutable openttd CFBundleGetInfoString - $VERSION, Copyright 2004-$date The OpenTTD team + #CPACK_PACKAGE_VERSION#, Copyright 2004-${CURRENT_YEAR} The OpenTTD team CFBundleIconFile - openttd.icns + ${CPACK_BUNDLE_NAME}.icns CFBundleIdentifier org.openttd.openttd CFBundleInfoDictionaryVersion 6.0 CFBundleName - OpenTTD + ${CPACK_BUNDLE_NAME} CFBundlePackageType APPL CFBundleShortVersionString - $VERSION + #CPACK_PACKAGE_VERSION# CFBundleVersion - $VERSION + #CPACK_PACKAGE_VERSION# NSHumanReadableCopyright - Copyright 2004-$date The OpenTTD team + Copyright 2004-${CURRENT_YEAR} The OpenTTD team NSPrincipalClass NSApplication + NSHighResolutionCapable + True -" > "$1"/Contents/Info.plist + diff --git a/os/macosx/notarize.sh b/os/macosx/notarize.sh new file mode 100755 index 0000000000..55405cdd89 --- /dev/null +++ b/os/macosx/notarize.sh @@ -0,0 +1,68 @@ +#!/bin/bash +set -e + +# This script attempts to notarize the OpenTTD DMG generated by CPack. +# If you are building an unofficial branch of OpenTTD, please change the bundle +# ID in Info.plist and below. +# +# This uses `gon' to perform notarization: +# +# https://github.com/mitchellh/gon +# +# Follow the setup instructions on the gon site to install. +# +# Before executing this script, you must first configure CMake with at least the following +# parameters: +# +# -DCPACK_BUNDLE_APPLE_CERT_APP={certificate ID} +# "-DCPACK_BUNDLE_APPLE_CODESIGN_PARAMETER=--deep -f --options runtime" +# +# then run "make package" or "cpack". +# +# This will sign the application with your signing certificate, and will enable +# the hardened runtime. +# +# You also need to set your Apple Developer username and password (app-specific password +# is recommended) in the AC_USERNAME and AC_PASSWORD environment variables. +# +# Then, ensuring you're in your build directory and that the "bundles" directory +# exists with a .dmg in it (clear out any old DMGs first), run: +# +# ../os/macosx/notarize.sh + +if [ -z "${AC_USERNAME}" ]; then + echo AC_USERNAME not set, skipping notarization. + exit 0 +fi; + +dmg_filename=(bundles/*.dmg) + +if [ "${dmg_filename}" = "bundles/*.dmg" ]; then + echo "No .dmg found in the bundles directory, skipping notarization. Please read this" + echo "script's source for execution instructions." + exit 1 +fi; + +cat < notarize.json +{ + "notarize": [ + { + "path": "${dmg_filename[0]}", + "bundle_id": "org.openttd.openttd", + "staple": true + } + ] +} +EOF + +gon notarize.json + +app_filename=(_CPack_Packages/*/Bundle/openttd-*/OpenTTD.app) + +if [ "${app_filename}" = "_CPack_Packages/*/Bundle/openttd-*/OpenTTD.app" ]; then + echo "No .app found in the _CPack_Packages directory, skipping stapling." + exit 0 +fi; + +# Now staple the ticket to the .app +xcrun stapler staple "${app_filename[0]}" diff --git a/os/morphos/icons/OpenTTD.info b/os/morphos/icons/OpenTTD.info deleted file mode 100644 index 3a25be6830..0000000000 Binary files a/os/morphos/icons/OpenTTD.info and /dev/null differ diff --git a/os/morphos/icons/docs.info b/os/morphos/icons/docs.info deleted file mode 100644 index 6f8ac00f2d..0000000000 Binary files a/os/morphos/icons/docs.info and /dev/null differ diff --git a/os/morphos/icons/document.info b/os/morphos/icons/document.info deleted file mode 100644 index 877ea3575f..0000000000 Binary files a/os/morphos/icons/document.info and /dev/null differ diff --git a/os/morphos/icons/drawer.info b/os/morphos/icons/drawer.info deleted file mode 100644 index 149ef7e101..0000000000 Binary files a/os/morphos/icons/drawer.info and /dev/null differ diff --git a/os/os2/installer/make_installer.cmd b/os/os2/installer/make_installer.cmd index df9ddddd6e..885b2dc623 100644 --- a/os/os2/installer/make_installer.cmd +++ b/os/os2/installer/make_installer.cmd @@ -1,6 +1,6 @@ @echo off -set OPENTTD_VERSION=1.10.3 +set OPENTTD_VERSION=1.11.0 set OPENSFX_VERSION=0.8.0 set NOSOUND_VERSION=0.8.0 set OPENGFX_VERSION=1.2.0 diff --git a/os/rpm/openttd-rpmlintrc b/os/rpm/openttd-rpmlintrc deleted file mode 100644 index f8d5fb9ed9..0000000000 --- a/os/rpm/openttd-rpmlintrc +++ /dev/null @@ -1,6 +0,0 @@ -# the man page is in the subpackage data -addFilter("openttd.*: W: no-manual-page-for-binary openttd") -# no other package depends on this package, so this should not matter -addFilter("openttd.*: W: file-contains-date-and-time /usr/bin/openttd") -addFilter("openttd.*: W: file-contains-current-date /usr/bin/openttd") - diff --git a/os/rpm/openttd.changes b/os/rpm/openttd.changes deleted file mode 100644 index 351f260799..0000000000 --- a/os/rpm/openttd.changes +++ /dev/null @@ -1,100 +0,0 @@ -------------------------------------------------------------------- -Sun Mar 6 09:36:55 UTC 2011 - ammler@openttdcoop.org - -- upstream update 1.1.0-RC2 - * Feature: XZ/LZMA2 savegame support. New default reduces - savegame size by 10 to 30% with slightly more CPU usage. - (requires xz-devel) - * Feature: Remote administration - * Feature: a lot improvements with GUI - * Feature: Customizable hotkeys - * Sources for openttd.grf are pngs (requires grfcodec >= 5.1) - -------------------------------------------------------------------- -Sun Nov 21 11:11:38 UTC 2010 - ammler@openttdcoop.org - -- upstream update 1.0.5 - * Fix: Reading (very) recently freed memory [CVE-2010-4168] - -------------------------------------------------------------------- -Sun Oct 31 17:53:41 UTC 2010 - ammler@openttdcoop.org - -- upstream update 1.0.4 - * build openttd.grf from source - -------------------------------------------------------------------- -Tue Aug 10 20:16:03 UTC 2010 - ammler@openttdcoop.org - -- upstream update 1.0.3 - -------------------------------------------------------------------- -Wed Jun 23 11:42:59 UTC 2010 - Marcel Gmür - -- upstream update 1.0.2 - * Feature: Translated desktop shortcut comments (r19884) - * many minor Bugfixes - -------------------------------------------------------------------- -Sat May 1 15:59:32 UTC 2010 - Marcel Gmür - -- upstream update 1.0.1 - * Fix: Leaking a file descriptor - * Fix a lot small bugs, like minor desync issues on Mulitplayer -- no strip on make - -------------------------------------------------------------------- -Thu Apr 1 08:53:54 UTC 2010 - Marcel Gmür - -- upstream update 1.0.0 (finally!) - * completely independent game but still working also - with ttd original gaphics, sounds and music -- Add: Recommends openmsx -- requires lzo2 - -------------------------------------------------------------------- -Fri Dec 18 2009 Marcel Gmür - 0.7.4 - -- support for different branches -- easy support for dedicated branch -- let openttd build system make the dektop file -- split the package to data and gui -- disable requires - -------------------------------------------------------------------- -Thu Oct 01 2009 Marcel Gmür - 0.7.3 - -- disable libicu for RHEL4 - -------------------------------------------------------------------- -Sat Sep 26 2009 Marcel Gmür - 0.7.2 - -- no subfolder games for datadir -- cleanup: no post and postun anymore -- Recommends: opengfx (for suse and mandriva) -- add SUSE support - -------------------------------------------------------------------- -Mon Oct 20 2008 Benedikt Brüggemeier - -- Added libicu dependency - -------------------------------------------------------------------- -Thu Sep 23 2008 Benedikt Brüggemeier - -- Merged both versions of the spec file - -------------------------------------------------------------------- -Fri Aug 29 2008 Jonathan Coome - -- Rewrite spec file from scratch. - -------------------------------------------------------------------- -Sat Aug 02 2008 Benedikt Brüggemeier - -- Updated spec file - -------------------------------------------------------------------- -Thu Mar 27 2008 Denis Burlaka - -- Universal spec file - diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec deleted file mode 100644 index fe9f065d12..0000000000 --- a/os/rpm/openttd.spec +++ /dev/null @@ -1,272 +0,0 @@ -# -# spec file for package openttd -# -# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. -# Copyright (c) 2007-2019 The OpenTTD developers -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.opensuse.org/ -# - -Name: openttd -Version: 1.10.3 -Release: 0 -%define srcver 1.10.3 -Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe -License: GPL-2.0 -Group: Amusements/Games/Strategy/Other -Url: http://www.openttd.org - -Source: http://binaries.openttd.org/releases/%{srcver}/%{name}-%{srcver}-source.tar.gz - -%if 0%{?suse_version} || 0%{?mdkversion} -Recommends: %{name}-gui -%endif - -BuildRequires: gcc-c++ -BuildRequires: libpng-devel -BuildRequires: zlib-devel - -%if 0%{?suse_version} || 0%{?mdkversion} -BuildRequires: update-alternatives -Requires: update-alternatives -%else -BuildRequires: chkconfig -Requires: chkconfig -%endif - -%if 0%{?mdkversion} -BuildRequires: liblzma-devel -BuildRequires: liblzo-devel -%else -BuildRequires: lzo-devel -BuildRequires: xz-devel -%endif - -# OBS workaround: needed by libdrm -%if 0%{?rhel_version} >= 600 || 0%{?centos_version} >= 600 -BuildRequires: kernel -%endif - -# for lzma detection -%if 0%{?suse_version} -BuildRequires: pkg-config -%endif - -# building openttd.grf is not required as it is a) part of source and -# b) required only, if you want to use the original set -%if 0%{?with_grfcodec} -BuildRequires: grfcodec -%endif -# Recommends would fit better but not well supported... -Requires: openttd-opengfx >= 0.4.2 - -Obsoletes: %{name}-data < %{version} -Provides: %{name}-data = %{version} - -BuildRoot: %{_tmppath}/%{name}-%{version}-build - -%description -OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe" -with lots of new features and enhancements. To play the game you need either -the original data from the game or install the recommend subackages OpenGFX for -free graphics, OpenSFX for free sounds and OpenMSX for free music. - -OpenTTD is licensed under the GNU General Public License version 2.0. For more -information, see the file 'COPYING.md' included with every release and source -download of the game. - -%package gui -Summary: OpenTTD GUI/Client (requires SDL) -Group: Amusements/Games/Strategy/Other - -Requires: %{name} -Conflicts: %{name}-dedicated - -BuildRequires: SDL2-devel -BuildRequires: fontconfig-devel - -%if 0%{?rhel_version} != 600 -BuildRequires: libicu-devel -%endif -%if 0%{?rhel_version} || 0%{?fedora} -BuildRequires: freetype-devel -%endif -%if 0%{?suse_version} || 0%{?mdkversion} -BuildRequires: freetype2-devel -%endif -%if 0%{?suse_version} -BuildRequires: update-desktop-files -%else -BuildRequires: desktop-file-utils -Requires: hicolor-icon-theme -%endif - -%if 0%{?suse_version} || 0%{?mdkversion} -Recommends: openttd-openmsx -Recommends: openttd-opensfx -%endif - -%description gui -OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe" -with lots of new features and enhancements. To play the game you need either -the original data from the game or install the recommend subackages OpenGFX for -free graphics, OpenSFX for free sounds and OpenMSX for free music. - -This subpackage provides the binary which needs SDL. - -%package dedicated -Summary: OpenTTD Dedicated Server binary (without SDL) -Group: Amusements/Games/Strategy/Other - -Requires: %{name} -Conflicts: %{name}-gui - -%description dedicated -OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe" -with lots of new features and enhancements. To play the game you need either -the original data from the game or the required package OpenGFX and OpenSFX. - -This subpackage provides the binary without dependency of SDL. - -%prep -%setup -qn openttd%{?branch:-%{branch}}-%{srcver} - -# we build the grfs from sources but validate the result with the existing data -%if 0%{?with_grfcodec} -md5sum bin/data/* > validate.data -%endif - -%build -# first, we build the dedicated binary and copy it to dedicated/ -./configure \ - --prefix-dir="%{_prefix}" \ - --binary-dir="bin" \ - --data-dir="share/%{name}" \ - --enable-dedicated -make %{?_smp_mflags} BUNDLE_DIR="dedicated" bundle - -# then, we build the common gui version which we install the usual way -./configure \ - --prefix-dir="%{_prefix}" \ - --binary-name="%{name}" \ - --binary-dir="bin" \ - --data-dir="share/%{name}" \ - --doc-dir="share/doc/%{name}" \ - --menu-name="OpenTTD%{?branch: %{branch}}" \ - --menu-group="Game;StrategyGame;" - -make %{?_smp_mflags} - -%install -# install the dedicated binary -install -D -m0755 dedicated/openttd %{buildroot}%{_bindir}/%{name}-dedicated -# install the gui binary and rename to openttd-gui -make install INSTALL_DIR=%{buildroot} -mv %{buildroot}%{_bindir}/%{name} %{buildroot}%{_bindir}/%{name}-gui -# we need a dummy target for /etc/alternatives/openttd -mkdir -p %{buildroot}%{_sysconfdir}/alternatives -touch %{buildroot}%{_sysconfdir}/alternatives/%{name} -ln -s -f /etc/alternatives/%{name} %{buildroot}%{_bindir}/%{name} - -%if 0%{?suse_version} -%suse_update_desktop_file -r %{name} Game StrategyGame -%else -%if 0%{?fedora} || 0%{?rhel_version} >= 600 || 0%{?centos_version} >= 600 -desktop-file-install --dir=%{buildroot}%{_datadir}/applications \ - --add-category=StrategyGame \ - media/openttd.desktop -%endif -%endif - -%if 0%{?with_grfcodec} -%check -md5sum -c validate.data -%endif - -%post gui -/usr/sbin/update-alternatives --install %{_bindir}/%{name} %{name} %{_bindir}/%{name}-gui 10 -touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : - -%post dedicated -/usr/sbin/update-alternatives --install %{_bindir}/%{name} %{name} %{_bindir}/%{name}-dedicated 0 - -%preun gui -if [ "$1" = 0 ] ; then - /usr/sbin/update-alternatives --remove %{name} %{_bindir}/%{name}-gui -fi - -%preun dedicated -if [ "$1" = 0 ] ; then - /usr/sbin/update-alternatives --remove %{name} %{_bindir}/%{name}-dedicated -fi - -%postun gui -if [ "$1" -eq 0 ] ; then - touch --no-create %{_datadir}/icons/hicolor &>/dev/null - gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : -fi - -%posttrans gui -gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : - -# we need a file in the main package so it will be made -%files -%defattr(-, root, root) -%dir %{_datadir}/doc/%{name} -%dir %{_datadir}/%{name} -%dir %{_datadir}/%{name}/lang -%dir %{_datadir}/%{name}/baseset -%dir %{_datadir}/%{name}/scripts -%dir %{_datadir}/%{name}/ai -%dir %{_datadir}/%{name}/game -%{_datadir}/doc/%{name}/* -%{_datadir}/%{name}/lang/* -%{_datadir}/%{name}/baseset/* -%{_datadir}/%{name}/scripts/* -%{_datadir}/%{name}/ai/* -%{_datadir}/%{name}/game/* -%doc %{_mandir}/man6/%{name}.6.* - -%files gui -%defattr(-, root, root) -%ghost %{_sysconfdir}/alternatives/%{name} -%ghost %{_bindir}/%{name} -%{_bindir}/%{name}-gui -%dir %{_datadir}/icons/hicolor -%dir %{_datadir}/icons/hicolor/16x16 -%dir %{_datadir}/icons/hicolor/16x16/apps -%dir %{_datadir}/icons/hicolor/32x32 -%dir %{_datadir}/icons/hicolor/32x32/apps -%dir %{_datadir}/icons/hicolor/48x48 -%dir %{_datadir}/icons/hicolor/48x48/apps -%dir %{_datadir}/icons/hicolor/64x64 -%dir %{_datadir}/icons/hicolor/64x64/apps -%dir %{_datadir}/icons/hicolor/128x128 -%dir %{_datadir}/icons/hicolor/128x128/apps -%dir %{_datadir}/icons/hicolor/256x256 -%dir %{_datadir}/icons/hicolor/256x256/apps -%{_datadir}/applications/%{name}.desktop -%{_datadir}/icons/hicolor/16x16/apps/%{name}.png -%{_datadir}/icons/hicolor/32x32/apps/%{name}.png -%{_datadir}/icons/hicolor/48x48/apps/%{name}.png -%{_datadir}/icons/hicolor/64x64/apps/%{name}.png -%{_datadir}/icons/hicolor/128x128/apps/%{name}.png -%{_datadir}/icons/hicolor/256x256/apps/%{name}.png -%{_datadir}/pixmaps/%{name}.32.xpm - -%files dedicated -%defattr(-, root, root) -%ghost %{_bindir}/%{name} -%ghost %{_sysconfdir}/alternatives/%{name} -%{_bindir}/%{name}-dedicated - -%changelog diff --git a/os/steam/release.vdf b/os/steam/release.vdf new file mode 100644 index 0000000000..ab549c3886 --- /dev/null +++ b/os/steam/release.vdf @@ -0,0 +1,57 @@ +"AppBuild" +{ + "AppID" "1536610" + "Desc" "@@DESCRIPTION@@" + + "SetLive" "@@BRANCH@@" + + "ContentRoot" "./" + "BuildOutput" "build/" + + "Depots" + { + "1536613" + { + "ContentRoot" "./steam-win32" + "FileMapping" + { + "LocalPath" "*" + "DepotPath" "." + "recursive" "1" + } + } + + "1536612" + { + "ContentRoot" "./steam-win64" + "FileMapping" + { + "LocalPath" "*" + "DepotPath" "." + "recursive" "1" + } + } + + "1536614" + { + "ContentRoot" "./steam-macos" + "FileMapping" + { + "LocalPath" "*" + "DepotPath" "." + "recursive" "1" + } + } + + "1536615" + { + "ContentRoot" "./steam-linux" + "FileMapping" + { + "LocalPath" "*" + "DepotPath" "." + "recursive" "1" + } + } + } +} diff --git a/os/windows/installer/build_installers.bat b/os/windows/installer/build_installers.bat deleted file mode 100644 index 73a2898da2..0000000000 --- a/os/windows/installer/build_installers.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -"c:\Program Files\NSIS\makensis.exe" /DVERSION_INCLUDE=version_win9x.txt install.nsi > win9x.log -"c:\Program Files\NSIS\makensis.exe" /DVERSION_INCLUDE=version_win32.txt install.nsi > win32.log -"c:\Program Files\NSIS\makensis.exe" /DVERSION_INCLUDE=version_win64.txt install.nsi > win64.log diff --git a/os/windows/installer/cdfinder.ini b/os/windows/installer/cdfinder.ini deleted file mode 100644 index 45f9602f13..0000000000 --- a/os/windows/installer/cdfinder.ini +++ /dev/null @@ -1,26 +0,0 @@ -; Ini file generated by the HM NIS Edit IO designer. -[Settings] -NumFields=3 - -[Field 1] -Type=Groupbox -Text=Transport Tycoon Deluxe Installation location -Left=6 -Right=294 -Top=68 -Bottom=100 - -[Field 2] -Type=DirRequest -Left=10 -Right=290 -Top=80 -Bottom=92 - -[Field 3] -Type=Label -Left=17 -Right=282 -Top=6 -Bottom=64 - diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi deleted file mode 100644 index cecaa7344a..0000000000 --- a/os/windows/installer/install.nsi +++ /dev/null @@ -1,744 +0,0 @@ -# Version numbers to update -!define APPV_MAJOR 1 -!define APPV_MINOR 10 -!define APPV_MAINT 3 -!define APPV_BUILD 0 -!define APPV_EXTRA "" - -!define APPNAME "OpenTTD" ; Define application name -!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version -!define APPVERSIONINTERNAL "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}.${APPV_BUILD}" ; Define application version in X.X.X.X -!define INSTALLERVERSION ${APPV_MAJOR}${APPV_MINOR}${APPV_MAINT}${APPV_BUILD} -!include ${VERSION_INCLUDE} - -!define APPURLLINK "http://www.openttd.org" -!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}" - -!define OPENGFX_BASE_VERSION "1.2.0" -!define OPENSFX_BASE_VERSION "0.8.0" -!define OPENMSX_BASE_VERSION "1.0.0" - -!define MUI_ICON "..\..\..\media\openttd.ico" -!define MUI_UNICON "..\..\..\media\openttd.ico" -!define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp" -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_BITMAP "top.bmp" - -ManifestDPIAware true -BrandingText "OpenTTD Installer" -SetCompressor LZMA - -; Version Info -Var AddWinPrePopulate -VIProductVersion "${APPVERSIONINTERNAL}" -VIAddVersionKey "ProductName" "OpenTTD ${APPBITS}-bit Installer for Windows ${EXTRA_VERSION}" -VIAddVersionKey "Comments" "Installs ${APPNAMEANDVERSION}" -VIAddVersionKey "CompanyName" "OpenTTD Developers" -VIAddVersionKey "FileDescription" "Installs ${APPNAMEANDVERSION}" -VIAddVersionKey "ProductVersion" "${APPVERSION}" -VIAddVersionKey "InternalName" "InstOpenTTD-${APPARCH}" -VIAddVersionKey "FileVersion" "${APPVERSION}-${APPARCH}" -VIAddVersionKey "LegalCopyright" " " -; Main Install settings -Name "${APPNAMEANDVERSION} ${APPBITS}-bit for Windows ${EXTRA_VERSION}" - -; NOTE: Keep trailing backslash! -InstallDirRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Install Folder" -OutFile "openttd-${APPVERSION}-${APPARCH}.exe" -CRCCheck force - -ShowInstDetails show -ShowUninstDetails show - -RequestExecutionLevel admin - -Var SHORTCUTS -Var CDDRIVE - -; Modern interface settings -!include "MUI2.nsh" -!include "InstallOptions.nsh" -!include "WinVer.nsh" - -!define MUI_ABORTWARNING -!define MUI_WELCOMEPAGE_TITLE_3LINES -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_LICENSE "..\..\..\COPYING.md" - -!define MUI_COMPONENTSPAGE_SMALLDESC -!insertmacro MUI_PAGE_COMPONENTS - -;--------------------------------- -; Custom page for finding TTDLX CD -Page custom SelectCDEnter SelectCDExit ": TTD folder" - -!insertmacro MUI_PAGE_DIRECTORY - -;Start Menu Folder Page Configuration -!define MUI_STARTMENUPAGE_DEFAULTFOLDER $SHORTCUTS -!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKEY_LOCAL_MACHINE" -!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" -!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Shortcut Folder" - -!insertmacro MUI_PAGE_STARTMENU "OpenTTD" $SHORTCUTS - -!insertmacro MUI_PAGE_INSTFILES - -!define MUI_FINISHPAGE_TITLE_3LINES -!define MUI_FINISHPAGE_RUN_TEXT "Run ${APPNAMEANDVERSION} now!" -!define MUI_FINISHPAGE_RUN "$INSTDIR\openttd.exe" -!define MUI_FINISHPAGE_LINK "Visit the OpenTTD site for more information" -!define MUI_FINISHPAGE_LINK_LOCATION "${APPURLLINK}" -!define MUI_FINISHPAGE_NOREBOOTSUPPORT -!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.md" -!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED -!define MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT DisableBack - -!insertmacro MUI_PAGE_FINISH -!define MUI_PAGE_HEADER_TEXT "Uninstall ${APPNAMEANDVERSION}" -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES - -; Set languages (first is default language) -!insertmacro MUI_LANGUAGE "English" -!insertmacro MUI_RESERVEFILE_LANGDLL - -;-------------------------------------------------------------- -; (Core) OpenTTD install section. Copies all internal game data -Section "!OpenTTD" Section1 - ; Make sure to be upgraded OpenTTD is not running - Call CheckOpenTTDRunning - - ; Overwrite files by default, but don't complain on failure - SetOverwrite try - - SetShellVarContext all - - ; Define root variable relative to installer - !define PATH_ROOT "..\..\..\" - - ; Copy language files - SetOutPath "$INSTDIR\lang\" - File ${PATH_ROOT}bin\lang\english.lng - - ; Copy AI files - SetOutPath "$INSTDIR\ai\" - File ${PATH_ROOT}bin\ai\compat_*.nut - - ; Copy Game Script files - SetOutPath "$INSTDIR\game\" - File ${PATH_ROOT}bin\game\compat_*.nut - - ; Copy data files - SetOutPath "$INSTDIR\baseset\" - File ${PATH_ROOT}bin\baseset\*.grf - File ${PATH_ROOT}bin\baseset\*.obg - File ${PATH_ROOT}bin\baseset\*.obm - File ${PATH_ROOT}bin\baseset\*.obs - File ${PATH_ROOT}bin\baseset\opntitle.dat - - ; Copy the scripts - SetOutPath "$INSTDIR\scripts\" - File ${PATH_ROOT}bin\scripts\*.* - Push "$INSTDIR\scripts\README.md" - Call unix2dos - - ; Copy some documentation files - SetOutPath "$INSTDIR\docs\" - File ${PATH_ROOT}docs\multiplayer.md - Push "$INSTDIR\docs\multiplayer.md" - Call unix2dos - - ; Copy the rest of the stuff - SetOutPath "$INSTDIR\" - - ; Copy text files - File ${PATH_ROOT}changelog.txt - Push "$INSTDIR\changelog.txt" - Call unix2dos - File ${PATH_ROOT}COPYING.md - Push "$INSTDIR\COPYING.md" - Call unix2dos - File ${PATH_ROOT}README.md - Push "$INSTDIR\README.md" - Call unix2dos - File ${PATH_ROOT}known-bugs.txt - Push "$INSTDIR\known-bugs.txt" - Call unix2dos - - ; Copy executable - File /oname=openttd.exe ${BINARY_DIR}\openttd.exe - - - ; Delete old files from the main dir. they are now placed in baseset/ and lang/ - Delete "$INSTDIR\*.lng" - Delete "$INSTDIR\*.grf" - Delete "$INSTDIR\sample.cat" - Delete "$INSTDIR\ttd.exe" - Delete "$INSTDIR\data\opntitle.dat" - Delete "$INSTDIR\data\2ccmap.grf" - Delete "$INSTDIR\data\airports.grf" - Delete "$INSTDIR\data\autorail.grf" - Delete "$INSTDIR\data\canalsw.grf" - Delete "$INSTDIR\data\dosdummy.grf" - Delete "$INSTDIR\data\elrailsw.grf" - Delete "$INSTDIR\data\nsignalsw.grf" - Delete "$INSTDIR\data\openttd.grf" - Delete "$INSTDIR\data\roadstops.grf" - Delete "$INSTDIR\data\trkfoundw.grf" - Delete "$INSTDIR\data\openttdd.grf" - Delete "$INSTDIR\data\openttdw.grf" - Delete "$INSTDIR\data\orig_win.obg" - Delete "$INSTDIR\data\orig_dos.obg" - Delete "$INSTDIR\data\orig_dos_de.obg" - Delete "$INSTDIR\data\orig_win.obs" - Delete "$INSTDIR\data\orig_dos.obs" - Delete "$INSTDIR\data\no_sound.obs" - - ; Create the Registry Entries - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Comments" "Visit ${APPURLLINK}" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayIcon" "$INSTDIR\openttd.exe,0" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayName" "OpenTTD ${APPVERSION}" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayVersion" "${APPVERSION}" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "HelpLink" "${APPURLLINK}" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Install Folder" "$INSTDIR" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Publisher" "OpenTTD" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Shortcut Folder" "$SHORTCUTS" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "UninstallString" "$INSTDIR\uninstall.exe" - WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "URLInfoAbout" "${APPURLLINK}" - ; This key sets the Version DWORD that new installers will check against - WriteRegDWORD HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Version" ${INSTALLERVERSION} - - !insertmacro MUI_STARTMENU_WRITE_BEGIN "OpenTTD" - CreateShortCut "$DESKTOP\OpenTTD.lnk" "$INSTDIR\openttd.exe" - CreateDirectory "$SMPROGRAMS\$SHORTCUTS" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\OpenTTD.lnk" "$INSTDIR\openttd.exe" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Uninstall.lnk" "$INSTDIR\uninstall.exe" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Readme.lnk" "$INSTDIR\README.md" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Changelog.lnk" "$INSTDIR\Changelog.txt" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Known-bugs.lnk" "$INSTDIR\known-bugs.txt" - CreateDirectory "$SMPROGRAMS\$SHORTCUTS\Docs" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Docs\Multiplayer.lnk" "$INSTDIR\docs\multiplayer.md" - CreateDirectory "$SMPROGRAMS\$SHORTCUTS\Scripts" - CreateShortCut "$SMPROGRAMS\$SHORTCUTS\Scripts\Readme.lnk" "$INSTDIR\scripts\README.md" - !insertmacro MUI_STARTMENU_WRITE_END -SectionEnd - -;-------------------------------------------------------------- -; OpenTTD translation install section. Copies only translations -Section "OpenTTD translations" Section6 - ; Overwrite files by default, but don't complain on failure - SetOverwrite try - - ; Copy language files - SetOutPath "$INSTDIR\lang\" - File ${PATH_ROOT}bin\lang\*.lng -SectionEnd - -;---------------------------------------------------------------------------------- -; OpenGFX files install section. Downloads OpenGFX and installs it -Section "Download OpenGFX (free graphics set)" Section3 - SetOverwrite try - - NSISdl::download "http://binaries.openttd.org/installer/opengfx-${OPENGFX_BASE_VERSION}.7z" "$INSTDIR\baseset\opengfx.7z" - Pop $R0 ;Get the return value - StrCmp $R0 "success" +3 - MessageBox MB_OK "Downloading of OpenGFX failed" - Goto Done - - ; Let's extract the files - SetOutPath "$INSTDIR\baseset\" - NSIS7z::Extract "$INSTDIR\baseset\opengfx.7z" - - Delete "$INSTDIR\baseset\opengfx.7z" - SetOutPath "$INSTDIR\" -Done: - -SectionEnd - -;---------------------------------------------------------------------------------- -; OpenSFX files install section. Downloads OpenSFX and installs it -Section "Download OpenSFX (free sound set)" Section4 - SetOverwrite try - - NSISdl::download "http://binaries.openttd.org/installer/opensfx-${OPENSFX_BASE_VERSION}.7z" "$INSTDIR\baseset\opensfx.7z" - Pop $R0 ;Get the return value - StrCmp $R0 "success" +3 - MessageBox MB_OK "Downloading of OpenSFX failed" - Goto Done - - ; Let's extract the files - SetOutPath "$INSTDIR\baseset\" - NSIS7z::Extract "$INSTDIR\baseset\opensfx.7z" - - Delete "$INSTDIR\baseset\opensfx.7z" - SetOutPath "$INSTDIR\" -Done: - -SectionEnd - -;---------------------------------------------------------------------------------- -; OpenMSX files install section. Downloads OpenMSX and installs it -Section "Download OpenMSX (free music set)" Section5 - SetOverwrite try - - NSISdl::download "http://binaries.openttd.org/installer/openmsx-${OPENMSX_BASE_VERSION}.7z" "$INSTDIR\baseset\openmsx.7z" - Pop $R0 ;Get the return value - StrCmp $R0 "success" +3 - MessageBox MB_OK "Downloading of OpenMSX failed" - Goto Done - - ; Let's extract the files - SetOutPath "$INSTDIR\baseset\" - NSIS7z::Extract "$INSTDIR\baseset\openmsx.7z" - - Delete "$INSTDIR\baseset\openmsx.7z" - SetOutPath "$INSTDIR\" -Done: - -SectionEnd - -;---------------------------------------------------------------------------------- -; TTDLX files install section. Copies all needed TTDLX files from CD or install dir -Section /o "Copy data from Transport Tycoon Deluxe CD-ROM" Section2 - SetOverwrite try - ; Let's copy the files with size approximation - SetOutPath "$INSTDIR\baseset" - CopyFiles "$CDDRIVE\gm\*.gm" "$INSTDIR\baseset\" 1028 - CopyFiles "$CDDRIVE\gm.cat" "$INSTDIR\baseset\gm.cat" 415 - CopyFiles "$CDDRIVE\sample.cat" "$INSTDIR\baseset\sample.cat" 1566 - ; Copy Windows files - CopyFiles "$CDDRIVE\trg1r.grf" "$INSTDIR\baseset\trg1r.grf" 2365 - CopyFiles "$CDDRIVE\trgcr.grf" "$INSTDIR\baseset\trgcr.grf" 260 - CopyFiles "$CDDRIVE\trghr.grf" "$INSTDIR\baseset\trghr.grf" 400 - CopyFiles "$CDDRIVE\trgir.grf" "$INSTDIR\baseset\trgir.grf" 334 - CopyFiles "$CDDRIVE\trgtr.grf" "$INSTDIR\baseset\trgtr.grf" 546 - ; Copy DOS files - CopyFiles "$CDDRIVE\trg1.grf" "$INSTDIR\baseset\trg1.grf" 2365 - CopyFiles "$CDDRIVE\trgc.grf" "$INSTDIR\baseset\trgc.grf" 260 - CopyFiles "$CDDRIVE\trgh.grf" "$INSTDIR\baseset\trgh.grf" 400 - CopyFiles "$CDDRIVE\trgi.grf" "$INSTDIR\baseset\trgi.grf" 334 - CopyFiles "$CDDRIVE\trgt.grf" "$INSTDIR\baseset\trgt.grf" 546 - SetOutPath "$INSTDIR\" -SectionEnd - -;------------------------------------------- -; Install the uninstaller (option is hidden) -Section -FinishSection - WriteUninstaller "$INSTDIR\uninstall.exe" -SectionEnd - -; Modern install component descriptions -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${Section1} "Minimal OpenTTD installation in English. You need at least one of the game graphics and sound sets installed." - !insertmacro MUI_DESCRIPTION_TEXT ${Section6} "Translations of OpenTTD." - !insertmacro MUI_DESCRIPTION_TEXT ${Section3} "Download the free OpenGFX game graphics set. This download is about 3 MiB." - !insertmacro MUI_DESCRIPTION_TEXT ${Section4} "Download the free OpenSFX game sound set. This download is about 10 MiB." - !insertmacro MUI_DESCRIPTION_TEXT ${Section5} "Download the free OpenMSX game music set. This download is about 200 KiB." - !insertmacro MUI_DESCRIPTION_TEXT ${Section2} "Copies the game graphics, sounds and music from the Transport Tycoon Deluxe CD." -!insertmacro MUI_FUNCTION_DESCRIPTION_END - -;----------------------------------------------- -; Uninstall section, deletes all installed files -Section "Uninstall" - SetShellVarContext all - - IfFileExists "$INSTDIR\save" 0 NoRemoveSavedGames - MessageBox MB_YESNO|MB_ICONQUESTION \ - "Remove the save game folders located at $\"$INSTDIR\save$\"?$\n \ - If you choose Yes, your saved games will be deleted." \ - IDYES RemoveSavedGames IDNO NoRemoveSavedGames - RemoveSavedGames: - Delete "$INSTDIR\save\autosave\*" - RMDir "$INSTDIR\save\autosave" - Delete "$INSTDIR\save\*" - RMDir "$INSTDIR\save" - NoRemoveSavedGames: - - IfFileExists "$INSTDIR\scenario" 0 NoRemoveScen - MessageBox MB_YESNO|MB_ICONQUESTION \ - "Remove the scenario folders located at $\"$INSTDIR\scenario$\"?$\n \ - If you choose Yes, your scenarios will be deleted." \ - IDYES RemoveScen IDNO NoRemoveScen - RemoveScen: - Delete "$INSTDIR\scenario\heightmap*" - RMDir "$INSTDIR\scenario\heightmap" - Delete "$INSTDIR\scenario\*" - RMDir "$INSTDIR\scenario" - NoRemoveScen: - - ; Remove from registry... - !insertmacro MUI_STARTMENU_GETFOLDER "OpenTTD" $SHORTCUTS - ReadRegStr $SHORTCUTS HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Shortcut Folder" - - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" - - ; Delete self - Delete "$INSTDIR\uninstall.exe" - - ; Delete Shortcuts - Delete "$DESKTOP\OpenTTD.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\OpenTTD.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Uninstall.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Readme.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Changelog.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Known-bugs.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Docs\Multiplayer.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Docs\32bpp.lnk" - Delete "$SMPROGRAMS\$SHORTCUTS\Scripts\Readme.lnk" - - ; Clean up OpenTTD dir - Delete "$INSTDIR\changelog.txt" - Delete "$INSTDIR\README.md" - Delete "$INSTDIR\known-bugs.txt" - Delete "$INSTDIR\openttd.exe" - Delete "$INSTDIR\COPYING.md" - Delete "$INSTDIR\INSTALL.LOG" - Delete "$INSTDIR\crash.log" - Delete "$INSTDIR\crash.dmp" - Delete "$INSTDIR\openttd.cfg" - Delete "$INSTDIR\hs.dat" - Delete "$INSTDIR\cached_sprites.*" - Delete "$INSTDIR\save\autosave\network*.tmp" ; temporary network file - - ; AI files - Delete "$INSTDIR\ai\compat_*.nut" - - ; Game Script files - Delete "$INSTDIR\game\compat_*.nut" - - ; Baseset files - Delete "$INSTDIR\baseset\opntitle.dat" - Delete "$INSTDIR\baseset\openttd.grf" - Delete "$INSTDIR\baseset\orig_extra.grf" - Delete "$INSTDIR\baseset\orig_win.obg" - Delete "$INSTDIR\baseset\orig_dos.obg" - Delete "$INSTDIR\baseset\orig_dos_de.obg" - Delete "$INSTDIR\baseset\orig_win.obs" - Delete "$INSTDIR\baseset\orig_dos.obs" - Delete "$INSTDIR\baseset\no_sound.obs" - Delete "$INSTDIR\baseset\sample.cat" - Delete "$INSTDIR\baseset\trg1r.grf" - Delete "$INSTDIR\baseset\trghr.grf" - Delete "$INSTDIR\baseset\trgtr.grf" - Delete "$INSTDIR\baseset\trgcr.grf" - Delete "$INSTDIR\baseset\trgir.grf" - Delete "$INSTDIR\baseset\trg1.grf" - Delete "$INSTDIR\baseset\trgh.grf" - Delete "$INSTDIR\baseset\trgt.grf" - Delete "$INSTDIR\baseset\trgc.grf" - Delete "$INSTDIR\baseset\trgi.grf" - Delete "$INSTDIR\baseset\gm.cat" - Delete "$INSTDIR\baseset\gm-tto.cat" - Delete "$INSTDIR\baseset\*.gm" - - Delete "$INSTDIR\data\sample.cat" - Delete "$INSTDIR\data\trg1r.grf" - Delete "$INSTDIR\data\trghr.grf" - Delete "$INSTDIR\data\trgtr.grf" - Delete "$INSTDIR\data\trgcr.grf" - Delete "$INSTDIR\data\trgir.grf" - Delete "$INSTDIR\data\trg1.grf" - Delete "$INSTDIR\data\trgh.grf" - Delete "$INSTDIR\data\trgt.grf" - Delete "$INSTDIR\data\trgc.grf" - Delete "$INSTDIR\data\trgi.grf" - Delete "$INSTDIR\gm\*.gm" - - ; Downloaded OpenGFX/OpenSFX/OpenMSX - Delete "$INSTDIR\baseset\opengfx\*" - RMDir "$INSTDIR\baseset\opengfx" - Delete "$INSTDIR\baseset\opensfx\*" - RMDir "$INSTDIR\baseset\opensfx" - Delete "$INSTDIR\baseset\openmsx\*" - RMDir "$INSTDIR\baseset\openmsx" - - Delete "$INSTDIR\data\opengfx\*" - RMDir "$INSTDIR\data\opengfx" - Delete "$INSTDIR\data\opensfx\*" - RMDir "$INSTDIR\data\opensfx" - Delete "$INSTDIR\gm\openmsx\*" - RMDir "$INSTDIR\gm\openmsx" - - ; Language files - Delete "$INSTDIR\lang\*.lng" - - ; Scripts - Delete "$INSTDIR\scripts\*.*" - - ; Documentation - Delete "$INSTDIR\docs\*.*" - - ; Base sets for music - Delete "$INSTDIR\gm\orig_win.obm" - Delete "$INSTDIR\gm\orig_dos.obm" - Delete "$INSTDIR\gm\no_music.obm" - Delete "$INSTDIR\baseset\orig_win.obm" - Delete "$INSTDIR\baseset\orig_dos.obm" - Delete "$INSTDIR\baseset\no_music.obm" - - ; Remove remaining directories - RMDir "$SMPROGRAMS\$SHORTCUTS\Extras\" - RMDir "$SMPROGRAMS\$SHORTCUTS\Scripts\" - RMDir "$SMPROGRAMS\$SHORTCUTS\Docs\" - RMDir "$SMPROGRAMS\$SHORTCUTS" - RMDir "$INSTDIR\ai" - RMDir "$INSTDIR\game" - RMDir "$INSTDIR\data" - RMDir "$INSTDIR\baseset" - RMDir "$INSTDIR\gm" - RMDir "$INSTDIR\lang" - RMDir "$INSTDIR\scripts" - RMDir "$INSTDIR\docs" - RMDir "$INSTDIR" - -SectionEnd - -;------------------------------------------------------------ -; Custom page function to find the TTDLX CD/install location -Function SelectCDEnter - SectionGetFlags ${Section2} $0 - IntOp $1 $0 & 0x80 ; bit 7 set by upgrade, no need to copy files - IntCmp $1 1 DoneCD ; Upgrade doesn't need copy files - - IntOp $0 $0 & 1 - IntCmp $0 1 NoAbort - Abort -NoAbort: - - GetTempFileName $R0 - !insertmacro MUI_HEADER_TEXT "Locate TTD" "Setup needs the location of Transport Tycoon Deluxe in order to continue." - !insertmacro INSTALLOPTIONS_EXTRACT_AS "CDFinder.ini" "CDFinder" - - ClearErrors - ; Now, let's populate $CDDRIVE - ReadRegStr $R0 HKLM "SOFTWARE\Fish Technology Group\Transport Tycoon Deluxe" "HDPath" - IfErrors NoTTD - StrCmp $CDDRIVE "" 0 Populated - StrCpy $CDDRIVE $R0 -Populated: - StrCpy $AddWinPrePopulate "Setup has detected your TTD folder. Don't change the folder. Simply press Next." - Goto TruFinish -NoTTD: - StrCpy $AddWinPrePopulate "Setup couldn't find TTD. Please enter the path where the graphics files from TTD are stored and press Next to continue." -TruFinish: - ClearErrors - !insertmacro INSTALLOPTIONS_WRITE "CDFinder" "Field 2" "State" $CDDRIVE ; TTDLX path - !insertmacro INSTALLOPTIONS_WRITE "CDFinder" "Field 3" "Text" $AddWinPrePopulate ; Caption -DoneCD: - ; Initialize the dialog *AFTER* we've changed the text otherwise we won't see the changes - !insertmacro INSTALLOPTIONS_INITDIALOG "CDFinder" - !insertmacro INSTALLOPTIONS_SHOW -FunctionEnd - -;---------------------------------------------------------------- -; Custom page function when 'next' is selected for the TTDLX path -Function SelectCDExit - !insertmacro INSTALLOPTIONS_READ $CDDRIVE "CDFinder" "Field 2" "State" - ; If trg1r.grf does not exist at the path, retry with DOS version - IfFileExists $CDDRIVE\trg1r.grf "" DosCD - IfFileExists $CDDRIVE\trgir.grf "" NoCD - IfFileExists $CDDRIVE\sample.cat hasCD NoCD -DosCD: - IfFileExists $CDDRIVE\TRG1.GRF "" NoCD - IfFileExists $CDDRIVE\TRGI.GRF "" NoCD - IfFileExists $CDDRIVE\SAMPLE.CAT hasCD NoCD -NoCD: - MessageBox MB_OK "Setup cannot continue without the Transport Tycoon Deluxe location!" - Abort -hasCD: -FunctionEnd - -;------------------------------------------------------------------------------- -; Determine windows version, returns "win9x" if Win9x/Me/2000/XP SP2- or "winnt" for the rest on the stack -Function GetWindowsVersion - GetVersion::WindowsPlatformArchitecture - Pop $R0 - IntCmp $R0 64 WinNT 0 - ClearErrors - StrCpy $R0 "win9x" - ${If} ${IsNT} - ${If} ${IsWinXP} - ${AndIf} ${AtLeastServicePack} 3 - ${OrIf} ${AtLeastWin2003} - GoTo WinNT - ${EndIf} - ${EndIf} - GoTo Done -WinNT: - StrCpy $R0 "winnt" -Done: - Push $R0 -FunctionEnd - -;------------------------------------------------------------------------------- -; Check whether we're not running an installer for 64 bits on 32 bits and vice versa -Function CheckProcessorArchitecture - GetVersion::WindowsPlatformArchitecture - Pop $R0 - IntCmp $R0 64 Win64 0 - ClearErrors - IntCmp ${APPBITS} 64 0 Done - MessageBox MB_YESNO|MB_ICONSTOP "You are trying to install the 64-bit OpenTTD on a 32-bit operating system. This is not going to work. Please download the correct version. Do you really want to continue?" IDYES Done IDNO Abort - GoTo Done -Win64: - ClearErrors - IntCmp ${APPBITS} 64 Done 0 - MessageBox MB_YESNO|MB_ICONINFORMATION "You are trying to install the 32-bit OpenTTD on a 64-bit operating system. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDYES Done IDNO Abort - GoTo Done -Abort: - Quit -Done: -FunctionEnd - -;------------------------------------------------------------------------------- -; Check whether we're not running an installer for NT on 9x and vice versa -Function CheckWindowsVersion - Call GetWindowsVersion - Pop $R0 - StrCmp $R0 "win9x" 0 WinNT - ClearErrors - StrCmp ${APPARCH} "win9x" Done 0 - MessageBox MB_YESNO|MB_ICONSTOP "You are trying to install the Windows XP SP3 and newer version on Windows 95, 98, ME, 2000, or XP without SP3. This will not work - please download the correct version. Do you really want to continue?" IDYES Done IDNO Abort - GoTo Done -WinNT: - ClearErrors - StrCmp ${APPARCH} "win9x" 0 Done - MessageBox MB_YESNO|MB_ICONEXCLAMATION "You are trying to install the Windows 95, 98, 2000 and XP without SP3 version on Windows XP SP3 or newer. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDYES Done IDNO Abort -Abort: - Quit -Done: -FunctionEnd - -;------------------------------------------------------------------------------- -; Check whether OpenTTD is running -Function CheckOpenTTDRunning - IfFileExists "$INSTDIR\openttd.exe" 0 Done -Retry: - FindProcDLL::FindProc "openttd.exe" - Pop $R0 - IntCmp $R0 1 0 Done - ClearErrors - Delete "$INSTDIR\openttd.exe" - IfErrors 0 Done - ClearErrors - MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "OpenTTD is running. Please close it and retry." IDRETRY Retry - Abort -Done: -FunctionEnd - -;------------------------------------------------------------------------------- -; strips all CRs -; and then converts all LFs into CRLFs -; (this is roughly equivalent to "cat file | dos2unix | unix2dos") -; -; usage: -; Push "infile" -; Call unix2dos -; -; beware that this function destroys $0 $1 $2 -Function unix2dos - ClearErrors - - Pop $2 - Rename $2 $2.U2D - FileOpen $1 $2 w - - FileOpen $0 $2.U2D r - - Push $2 ; save name for deleting - - IfErrors unix2dos_done - - ; $0 = file input (opened for reading) - ; $1 = file output (opened for writing) - -unix2dos_loop: - ; read a byte (stored in $2) - FileReadByte $0 $2 - IfErrors unix2dos_done ; EOL - ; skip CR - StrCmp $2 13 unix2dos_loop - ; if LF write an extra CR - StrCmp $2 10 unix2dos_cr unix2dos_write - -unix2dos_cr: - FileWriteByte $1 13 - -unix2dos_write: - ; write byte - FileWriteByte $1 $2 - ; read next byte - Goto unix2dos_loop - -unix2dos_done: - ; close files - FileClose $0 - FileClose $1 - - ; delete original - Pop $0 - Delete $0.U2D - -FunctionEnd - - -Var OLDVERSION -Var UninstallString - -;----------------------------------------------------------------------------------- -; NSIS Initialize function, determine if we are going to install/upgrade or uninstall -Function .onInit - StrCpy $SHORTCUTS "OpenTTD" - - SectionSetSize ${Section3} 6144 - SectionSetSize ${Section4} 13312 - SectionSetSize ${Section5} 1024 - - SectionSetFlags 0 17 - - ; Starts Setup - let's look for an older version of OpenTTD - ReadRegDWORD $R8 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Version" - - IfErrors ShowWelcomeMessage ShowUpgradeMessage -ShowWelcomeMessage: - ReadRegStr $R8 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "Version" - ; In the event someone still has OpenTTD 0.1, this will detect that (that installer used a string instead of dword entry) - IfErrors FinishCallback - -ShowUpgradeMessage: - IntCmp ${INSTALLERVERSION} $R8 VersionsAreEqual InstallerIsOlder WelcomeToSetup -WelcomeToSetup: - ; An older version was found. Let's let the user know there's an upgrade that will take place. - ReadRegStr $OLDVERSION HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayVersion" - ; Gets the older version then displays it in a message box - MessageBox MB_OK|MB_ICONINFORMATION \ - "Welcome to ${APPNAMEANDVERSION} Setup.$\nThis will allow you to upgrade from version $OLDVERSION." - SectionSetFlags ${Section2} 0x80 ; set bit 7 - SectionSetFlags ${Section3} 0x80 ; set bit 7 - SectionSetFlags ${Section4} 0x80 ; set bit 7 - SectionSetFlags ${Section5} 0x80 ; set bit 7 - Goto FinishCallback - -VersionsAreEqual: - ReadRegStr $UninstallString HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "UninstallString" - IfFileExists "$UninstallString" "" FinishCallback - MessageBox MB_YESNO|MB_ICONQUESTION \ - "Setup detected ${APPNAMEANDVERSION} on your system. This is the same version that this program will install.$\nAre you trying to uninstall it?" \ - IDYES DoUninstall IDNO FinishCallback -DoUninstall: ; You have the same version as this installer. This allows you to uninstall. - Exec "$UninstallString" - Quit - -InstallerIsOlder: - MessageBox MB_OK|MB_ICONSTOP \ - "You have a newer version of ${APPNAME}.$\nSetup will now exit." - Quit - -FinishCallback: - ClearErrors - Call CheckProcessorArchitecture - Call CheckWindowsVersion -FunctionEnd -; eof - diff --git a/os/windows/installer/version_win32.txt b/os/windows/installer/version_win32.txt deleted file mode 100644 index 0ac06d0d19..0000000000 --- a/os/windows/installer/version_win32.txt +++ /dev/null @@ -1,5 +0,0 @@ -!define APPBITS 32 ; Define number of bits for the architecture -!define EXTRA_VERSION "XP SP3 and newer" -!define APPARCH "win32" ; Define the application architecture -!define BINARY_DIR "${PATH_ROOT}objs\win32\Release" -InstallDir "$PROGRAMFILES32\OpenTTD\" diff --git a/os/windows/installer/version_win64.txt b/os/windows/installer/version_win64.txt deleted file mode 100644 index 15ef51096b..0000000000 --- a/os/windows/installer/version_win64.txt +++ /dev/null @@ -1,5 +0,0 @@ -!define APPBITS 64 ; Define number of bits for the architecture -!define EXTRA_VERSION "XP and newer" -!define APPARCH "win64" ; Define the application architecture -!define BINARY_DIR "${PATH_ROOT}objs\x64\Release" -InstallDir "$PROGRAMFILES64\OpenTTD\" diff --git a/os/windows/installer/version_win9x.txt b/os/windows/installer/version_win9x.txt deleted file mode 100644 index 603778d73c..0000000000 --- a/os/windows/installer/version_win9x.txt +++ /dev/null @@ -1,5 +0,0 @@ -!define APPBITS 32 ; Define number of bits for the architecture -!define EXTRA_VERSION "95, 98, ME, 2000 and XP SP2 or older" -!define APPARCH "win9x" ; Define the application architecture -!define BINARY_DIR "${PATH_ROOT}objs\release" -InstallDir "$PROGRAMFILES32\OpenTTD\" diff --git a/os/windows/installer/top.bmp b/os/windows/nsis-top.bmp similarity index 100% rename from os/windows/installer/top.bmp rename to os/windows/nsis-top.bmp diff --git a/os/windows/installer/welcome.bmp b/os/windows/nsis-welcome.bmp similarity index 100% rename from os/windows/installer/welcome.bmp rename to os/windows/nsis-welcome.bmp diff --git a/media/openttd.ico b/os/windows/openttd.ico similarity index 100% rename from media/openttd.ico rename to os/windows/openttd.ico diff --git a/projects/dpi_aware.manifest b/os/windows/openttd.manifest similarity index 100% rename from projects/dpi_aware.manifest rename to os/windows/openttd.manifest diff --git a/projects/basesets_vs140.vcxproj b/projects/basesets_vs140.vcxproj deleted file mode 100644 index 4e5ed52c4a..0000000000 --- a/projects/basesets_vs140.vcxproj +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v140 - - - - - - - - - ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt - - - ..\bin\baseset\ - ..\objs\baseset\ - - - - Generating no_music.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_music.obm;%(Outputs) - - - Generating no_sound.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_sound.obs;%(Outputs) - - - Generating orig_dos.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obg;%(Outputs) - - - Generating orig_dos.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obm;%(Outputs) - - - Generating orig_dos.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obs;%(Outputs) - - - Generating orig_dos_de.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos_de.obg;%(Outputs) - - - Generating orig_tto.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_tto.obm;%(Outputs) - - - Generating orig_win.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obg;%(Outputs) - - - Generating orig_win.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obm;%(Outputs) - - - Generating orig_win.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obs;%(Outputs) - - - - - - diff --git a/projects/basesets_vs140.vcxproj.filters b/projects/basesets_vs140.vcxproj.filters deleted file mode 100644 index aa555f3fc3..0000000000 --- a/projects/basesets_vs140.vcxproj.filters +++ /dev/null @@ -1,40 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - diff --git a/projects/basesets_vs140.vcxproj.filters.in b/projects/basesets_vs140.vcxproj.filters.in deleted file mode 100644 index 07bff4542f..0000000000 --- a/projects/basesets_vs140.vcxproj.filters.in +++ /dev/null @@ -1,11 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - -!!FILES!! - - diff --git a/projects/basesets_vs140.vcxproj.in b/projects/basesets_vs140.vcxproj.in deleted file mode 100644 index 0471100a3e..0000000000 --- a/projects/basesets_vs140.vcxproj.in +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v140 - - - - - - - - -!!FILTERS!! - - - ..\bin\baseset\ - ..\objs\baseset\ - - -!!FILES!! - - - - - diff --git a/projects/basesets_vs141.vcxproj b/projects/basesets_vs141.vcxproj deleted file mode 100644 index a01f24989b..0000000000 --- a/projects/basesets_vs141.vcxproj +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v141 - - - - - - - - - ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt - - - ..\bin\baseset\ - ..\objs\baseset\ - - - - Generating no_music.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_music.obm;%(Outputs) - - - Generating no_sound.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_sound.obs;%(Outputs) - - - Generating orig_dos.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obg;%(Outputs) - - - Generating orig_dos.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obm;%(Outputs) - - - Generating orig_dos.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obs;%(Outputs) - - - Generating orig_dos_de.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos_de.obg;%(Outputs) - - - Generating orig_tto.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_tto.obm;%(Outputs) - - - Generating orig_win.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obg;%(Outputs) - - - Generating orig_win.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obm;%(Outputs) - - - Generating orig_win.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obs;%(Outputs) - - - - - - diff --git a/projects/basesets_vs141.vcxproj.filters b/projects/basesets_vs141.vcxproj.filters deleted file mode 100644 index aa555f3fc3..0000000000 --- a/projects/basesets_vs141.vcxproj.filters +++ /dev/null @@ -1,40 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - diff --git a/projects/basesets_vs141.vcxproj.filters.in b/projects/basesets_vs141.vcxproj.filters.in deleted file mode 100644 index 07bff4542f..0000000000 --- a/projects/basesets_vs141.vcxproj.filters.in +++ /dev/null @@ -1,11 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - -!!FILES!! - - diff --git a/projects/basesets_vs141.vcxproj.in b/projects/basesets_vs141.vcxproj.in deleted file mode 100644 index 69dbd2e078..0000000000 --- a/projects/basesets_vs141.vcxproj.in +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v141 - - - - - - - - -!!FILTERS!! - - - ..\bin\baseset\ - ..\objs\baseset\ - - -!!FILES!! - - - - - diff --git a/projects/basesets_vs142.vcxproj b/projects/basesets_vs142.vcxproj deleted file mode 100644 index d483708aa7..0000000000 --- a/projects/basesets_vs142.vcxproj +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v142 - - - - - - - - - ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt - - - ..\bin\baseset\ - ..\objs\baseset\ - - - - Generating no_music.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_music.obm;%(Outputs) - - - Generating no_sound.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\no_sound.obs;%(Outputs) - - - Generating orig_dos.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obg;%(Outputs) - - - Generating orig_dos.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obm;%(Outputs) - - - Generating orig_dos.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos.obs;%(Outputs) - - - Generating orig_dos_de.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_dos_de.obg;%(Outputs) - - - Generating orig_tto.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_tto.obm;%(Outputs) - - - Generating orig_win.obg baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obg;%(Outputs) - - - Generating orig_win.obm baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obm;%(Outputs) - - - Generating orig_win.obs baseset metadata file - cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf - $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) - ..\bin\baseset\orig_win.obs;%(Outputs) - - - - - - diff --git a/projects/basesets_vs142.vcxproj.filters b/projects/basesets_vs142.vcxproj.filters deleted file mode 100644 index aa555f3fc3..0000000000 --- a/projects/basesets_vs142.vcxproj.filters +++ /dev/null @@ -1,40 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - Baseset Metadata - - - diff --git a/projects/basesets_vs142.vcxproj.filters.in b/projects/basesets_vs142.vcxproj.filters.in deleted file mode 100644 index 07bff4542f..0000000000 --- a/projects/basesets_vs142.vcxproj.filters.in +++ /dev/null @@ -1,11 +0,0 @@ - - - - - {b5a3ac67-19a9-4276-80e9-2360367d2680} - - - -!!FILES!! - - diff --git a/projects/basesets_vs142.vcxproj.in b/projects/basesets_vs142.vcxproj.in deleted file mode 100644 index 9743d83e7a..0000000000 --- a/projects/basesets_vs142.vcxproj.in +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Debug - Win32 - - - - basesets - {E12E77CA-C0F1-4ADA-943F-4929274249D3} - basesets - MakeFileProj - - - - Utility - false - v142 - - - - - - - - -!!FILTERS!! - - - ..\bin\baseset\ - ..\objs\baseset\ - - -!!FILES!! - - - - - diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs deleted file mode 100755 index b70bcdf67c..0000000000 --- a/projects/determineversion.vbs +++ /dev/null @@ -1,216 +0,0 @@ -Option Explicit - -' This file is part of OpenTTD. -' OpenTTD 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, version 2. -' OpenTTD 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 OpenTTD. If not, see . - -Dim FSO -Set FSO = CreateObject("Scripting.FileSystemObject") - -Sub FindReplaceInFile(filename, to_find, replacement) - Dim file, data - Set file = FSO.OpenTextFile(filename, 1, 0, 0) - data = file.ReadAll - file.Close - data = Replace(data, to_find, replacement) - Set file = FSO.CreateTextFile(filename, -1, 0) - file.Write data - file.Close -End Sub - -Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, isstabletag, year, filename) - FSO.CopyFile filename & ".in", filename - FindReplaceInFile filename, "!!MODIFIED!!", modified - FindReplaceInFile filename, "!!ISODATE!!", isodate - FindReplaceInFile filename, "!!VERSION!!", version - FindReplaceInFile filename, "!!DATE!!", cur_date - FindReplaceInFile filename, "!!GITHASH!!", githash - FindReplaceInFile filename, "!!ISTAG!!", istag - FindReplaceInFile filename, "!!ISSTABLETAG!!", isstabletag - FindReplaceInFile filename, "!!YEAR!!", year -End Sub - -Sub UpdateFiles(version) - Dim modified, isodate, cur_date, githash, istag, isstabletag, year - cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date) - - If InStr(version, Chr(9)) Then - ' Split string into field with tails - isodate = Mid(version, InStr(version, Chr(9)) + 1) - modified = Mid(isodate, InStr(isodate, Chr(9)) + 1) - githash = Mid(modified, InStr(modified, Chr(9)) + 1) - istag = Mid(githash, InStr(githash, Chr(9)) + 1) - isstabletag = Mid(istag, InStr(istag, Chr(9)) + 1) - year = Mid(isstabletag, InStr(isstabletag, Chr(9)) + 1) - ' Remove tails from fields - version = Mid(version, 1, InStr(version, Chr(9)) - 1) - isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1) - modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1) - githash = Mid(githash, 1, InStr(githash, Chr(9)) - 1) - istag = Mid(istag, 1, InStr(istag, Chr(9)) - 1) - isstabletag = Mid(isstabletag, 1, InStr(isstabletag, Chr(9)) - 1) - Else - isodate = 0 - modified = 1 - githash = "" - istag = 0 - isstabletag = 0 - year = "" - End If - - UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, year, "../src/rev.cpp" - UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, year, "../src/os/windows/ottdres.rc" -End Sub - -Function DetermineVersion() - Dim WshShell, branch, tag, modified, isodate, oExec, line, hash, shorthash, year - Set WshShell = CreateObject("WScript.Shell") - On Error Resume Next - - modified = 0 - hash = "" - shorthash = "" - branch = "" - isodate = "" - tag = "" - year = "" - - ' Set the environment to english - WshShell.Environment("PROCESS")("LANG") = "en" - - Set oExec = WshShell.Exec("git rev-parse --verify HEAD") - If Err.Number = 0 Then - ' Wait till the application is finished ... - Do While oExec.Status = 0 - Loop - - If oExec.ExitCode = 0 Then - hash = oExec.StdOut.ReadLine() - shorthash = Mid(hash, 1, 10) - ' Make sure index is in sync with disk - Set oExec = WshShell.Exec("git update-index --refresh") - If Err.Number = 0 Then - ' StdOut and StdErr share a 4kB buffer so prevent it from filling up as we don't care about the output - oExec.StdOut.Close - oExec.StdErr.Close - ' Wait till the application is finished ... - Do While oExec.Status = 0 - WScript.Sleep 10 - Loop - End If - Set oExec = WshShell.Exec("git diff-index --exit-code --quiet HEAD ../") - If Err.Number = 0 Then - ' Wait till the application is finished ... - Do While oExec.Status = 0 - Loop - - If oExec.ExitCode = 1 Then - modified = 2 - End If ' oExec.ExitCode = 1 - - Set oExec = WshShell.Exec("git show -s --pretty=format:%ci") - if Err.Number = 0 Then - isodate = Mid(oExec.StdOut.ReadLine(), 1, 10) - isodate = Replace(isodate, "-", "") - year = Mid(isodate, 1, 4) - End If ' Err.Number = 0 - - ' Check branch - Err.Clear - Set oExec = WshShell.Exec("git symbolic-ref HEAD") - If Err.Number = 0 Then - line = oExec.StdOut.ReadLine() - branch = Mid(line, InStrRev(line, "/") + 1) - End If ' Err.Number = 0 - - ' Check if a tag is currently checked out - Err.Clear - Set oExec = WshShell.Exec("git name-rev --name-only --tags --no-undefined HEAD") - If Err.Number = 0 Then - ' Wait till the application is finished ... - Do While oExec.Status = 0 - Loop - If oExec.ExitCode = 0 Then - tag = oExec.StdOut.ReadLine() - If Right(tag, 2) = "^0" Then - tag = Left(tag, Len(tag) - 2) - End If - End If ' oExec.ExitCode = 0 - End If ' Err.Number = 0 - End If ' Err.Number = 0 - End If ' oExec.ExitCode = 0 - End If ' Err.Number = 0 - - If hash = "" And FSO.FileExists("../.ottdrev") Then - Dim rev_file - Set rev_file = FSO.OpenTextFile("../.ottdrev", 1, True, 0) - DetermineVersion = rev_file.ReadLine() - rev_file.Close() - ElseIf hash = "" Then - DetermineVersion = "norev000" - modified = 1 - Else - Dim version, hashprefix, istag, isstabletag - If modified = 0 Then - hashprefix = "-g" - ElseIf modified = 2 Then - hashprefix = "-m" - Else - hashprefix = "-u" - End If - - If tag <> "" Then - version = tag - istag = 1 - - Set stable_regexp = New RegExp - stable_regexp.Pattern = "^[0-9.]*$" - If stable_regexp.Test(tag) Then - isstabletag = 1 - Else - isstabletag = 0 - End If - Else - version = isodate & "-" & branch & hashprefix & shorthash - istag = 0 - isstabletag = 0 - End If - - DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash & Chr(9) & istag & Chr(9) & isstabletag & Chr(9) & year - End If -End Function - -Function IsCachedVersion(ByVal version) - Dim cache_file, cached_version - cached_version = "" - Set cache_file = FSO.OpenTextFile("../config.cache.version", 1, True, 0) - If Not cache_file.atEndOfStream Then - cached_version = cache_file.ReadLine() - End If - cache_file.Close - - If InStr(version, Chr(9)) Then - version = Mid(version, 1, Instr(version, Chr(9)) - 1) - End If - - If version <> cached_version Then - Set cache_file = fso.CreateTextFile("../config.cache.version", True) - cache_file.WriteLine(version) - cache_file.Close - IsCachedVersion = False - Else - IsCachedVersion = True - End If -End Function - -Function CheckFile(filename) - CheckFile = FSO.FileExists(filename) - If CheckFile Then CheckFile = (FSO.GetFile(filename).DateLastModified >= FSO.GetFile(filename & ".in").DateLastModified) -End Function - -Dim version -version = DetermineVersion -If Not (IsCachedVersion(version) And CheckFile("../src/rev.cpp") And CheckFile("../src/os/windows/ottdres.rc")) Then - UpdateFiles version -End If diff --git a/projects/gen-kdev4.sh b/projects/gen-kdev4.sh deleted file mode 100755 index 2062d9686a..0000000000 --- a/projects/gen-kdev4.sh +++ /dev/null @@ -1,201 +0,0 @@ -#!/bin/sh - -# This file is part of OpenTTD. -# OpenTTD 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, version 2. -# OpenTTD 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 OpenTTD. If not, see . - -# echo without interpretation of backslash escapes and without -# adding newline at the end - just the string as it is -rawprint() -{ - printf '%s' "$@" -} - -encode_dword() -{ - printf '\x%02x' \ - `expr $1 / 16777216 % 256` \ - `expr $1 / 65536 % 256` \ - `expr $1 / 256 % 256` \ - `expr $1 % 256` -} - -encode_string() -{ - # turn string into UTF-16 and hexdump it - hex_utf16=`rawprint "$1" | iconv -t UTF-16BE | od -t x1 -A n | tr -d -c '[:xdigit:]'`; - - encode_dword `rawprint "$hex_utf16" | wc -m | xargs -I {} expr {} / 2` # length = num hex digits / 2 - rawprint "$hex_utf16" | sed 's/../\\x&/g' # put '\x' prefix before every pair of digits -} - -encode_single_define() -{ - encode_string `rawprint "$1" | grep -o '^[^=]*'` # everything before '=' - rawprint '\x00\x00\x00\n\x00' - encode_string `rawprint "$1" | sed 's/^[^=]*=\?//'` # everything after '=' -} - -# $1 - newline-separated list of defines -encode_defines() -{ - # add some fixed defines and discard empty lines from the tail - defines=`printf 'va_list\nva_args\n%s' "$1"` - - # count lines (no newline at the end so add one) - encode_dword `printf '%s\n' "$defines" | wc -l` - - while [ -n "$defines" ]; do - encode_single_define `rawprint "$defines" | head -n 1` - defines=`rawprint "$defines" | tail -n +2` - done -} - -encode_includes() -{ - encode_dword 3 # number of custom includes - encode_string "$1/src/stdafx.h" - encode_string "$1/objs/lang" - encode_string "$1/objs/setting" -} - -# escape with a backslash (\) characters special to the sed replace string: \ & -# also escape our custom filed separator that we will be using in sed: @ -escape_sed_special() -{ - sed -e 's/[\&@]/\\&/g' -} - - - -PROJECT_DIR=`pwd` -DIR_NAME=`pwd | xargs -0 basename` - -USAGE_TEXT='Usage: - - projects/gen-kdev4 [PROJECT_NAME|-h|--help] - -PROJECT_NAME is the name of the project that will be displayed in KDevelop. -Before executing, cd into OpenTTD folder and run ./configure script. - --h, --help - print help and exit' - -case "$# $1" in - '1 -h' | '1 --help') printf 'Generate OpenTTD project files for KDevelop 4+\n\n%s\n' "$USAGE_TEXT"; exit 0;; - 1*) PROJECT_NAME="$1";; - 0*) PROJECT_NAME="$DIR_NAME";; - *) printf 'Wrong arguments given. %s\n' "$USAGE_TEXT" >&2; exit 1;; -esac - -CFLAGS=`grep '^using CFLAGS\.\.\.' config.log 2>/dev/null` -if [ -z "$CFLAGS" ]; then - echo "OpenTTD config.log not found" >&2 - echo "cd into OpenTTD first and run 'configure'" >&2 - exit 1 -fi -DEFINES=`eval "printf '%s\n' $CFLAGS" | grep '^\-D' | cut -c3-` - -PROJECT_NAME_SED=s@!!PROJECT_NAME!!@`rawprint "$PROJECT_NAME" | escape_sed_special`@g -PROJECT_DIR_SED=s@!!PROJECT_DIR!!@`rawprint "$PROJECT_DIR" | escape_sed_special`@g -CUSTOM_DEFINES_SED=s@!!CUSTOM_DEFINES!!@`encode_defines "$DEFINES" | escape_sed_special`@g -CUSTOM_INCLUDES_SED=s@!!CUSTOM_INCLUDES!!@`encode_includes "$PROJECT_DIR" | escape_sed_special`@g - -mkdir -p .kdev4 - -sed -e "$PROJECT_NAME_SED" \ - >"$PROJECT_DIR/$DIR_NAME.kdev4" \ - << "EOF" -[Project] -Manager=KDevCustomMakeManager -Name=!!PROJECT_NAME!! -EOF - -sed -e "$PROJECT_DIR_SED" -e "$CUSTOM_DEFINES_SED" -e "$CUSTOM_INCLUDES_SED" \ - >"$PROJECT_DIR/.kdev4/$DIR_NAME.kdev4" \ - << "EOF" -[CustomDefinesAndIncludes][ProjectPath0] -Defines=!!CUSTOM_DEFINES!! -Includes=!!CUSTOM_INCLUDES!! -Path=. - -[Defines And Includes][Compiler] -Name=GCC -Path=gcc -Type=GCC - -[Filters] -size=10 - -[Filters][0] -inclusive=0 -pattern=.* -targets=3 - -[Filters][1] -inclusive=0 -pattern=.svn -targets=2 - -[Filters][2] -inclusive=0 -pattern=.hg -targets=2 - -[Filters][3] -inclusive=0 -pattern=.git -targets=2 - -[Filters][4] -inclusive=0 -pattern=*.rej -targets=1 - -[Filters][5] -inclusive=0 -pattern=*.orig -targets=1 - -[Filters][6] -inclusive=0 -pattern=*~ -targets=1 - -[Filters][7] -inclusive=0 -pattern=.*.kate-swp -targets=1 - -[Filters][8] -inclusive=0 -pattern=.*.swp -targets=1 - -[Filters][9] -inclusive=0 -pattern=/objs -targets=2 - -[Launch] -Launch Configurations=Launch Configuration 0 - -[Launch][Launch Configuration 0] -Configured Launch Modes=execute -Configured Launchers=nativeAppLauncher -Name=Launch OpenTTD\s -Type=Native Application - -[Launch][Launch Configuration 0][Data] -Arguments=-d 1 -Dependencies=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x00) -Dependency Action=Nothing -EnvironmentGroup= -Executable=file://!!PROJECT_DIR!!/bin/openttd -External Terminal=konsole --noclose --workdir %workdir -e %exe -Project Target= -Use External Terminal=false -Working Directory=file://!!PROJECT_DIR!!/bin -isExecutable=true -EOF diff --git a/projects/generate b/projects/generate deleted file mode 100755 index 7d3c599654..0000000000 --- a/projects/generate +++ /dev/null @@ -1,337 +0,0 @@ -#!/bin/bash - -# This file is part of OpenTTD. -# OpenTTD 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, version 2. -# OpenTTD 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 OpenTTD. If not, see . - -# This file generates all project files based on sources.list, so everyone who -# can start a bash process, can update the project files. - -# Set neutral locale so sort behaves the same everywhere -LC_ALL=C -export LC_ALL - -# We really need gawk for this! -AWK=gawk - -${AWK} --version > /dev/null 2> /dev/null -if [ "$?" != "0" ]; then - echo "This script needs gawk to run properly" - exit 1 -fi - -ROOT_DIR="`pwd`/.." -if ! [ -e "$ROOT_DIR/source.list" ] -then - ROOT_DIR="`pwd`" -fi -if ! [ -e "$ROOT_DIR/source.list" ] -then - echo "Can't find source.list, needed in order to make this run. Please go to either" - echo " the project dir, or the root dir of a clean SVN checkout." - exit 1 -fi - -# openttd_vs142.sln is for MSVC 2019 -# openttd_vs142.vcxproj is for MSVC 2019 -# openttd_vs142.vcxproj.filters is for MSVC 2019 -# langs_vs142.vcxproj is for MSVC 2019 -# strgen_vs142.vcxproj is for MSVC 2019 -# strgen_vs142.vcxproj.filters is for MSVC 2019 -# generate_vs142.vcxproj is for MSVC 2019 -# version_vs142.vcxproj is for MSVC 2019 -# basesets_vs142.vcxproj is for MSVC 2019 - -# openttd_vs141.sln is for MSVC 2017 -# openttd_vs141.vcxproj is for MSVC 2017 -# openttd_vs141.vcxproj.filters is for MSVC 2017 -# langs_vs141.vcxproj is for MSVC 2017 -# strgen_vs141.vcxproj is for MSVC 2017 -# strgen_vs141.vcxproj.filters is for MSVC 2017 -# generate_vs141.vcxproj is for MSVC 2017 -# version_vs141.vcxproj is for MSVC 2017 -# basesets_vs141.vcxproj is for MSVC 2017 - -# openttd_vs140.sln is for MSVC 2015 -# openttd_vs140.vcxproj is for MSVC 2015 -# openttd_vs140.vcxproj.filters is for MSVC 2015 -# langs_vs140.vcxproj is for MSVC 2015 -# strgen_vs140.vcxproj is for MSVC 2015 -# strgen_vs140.vcxproj.filters is for MSVC 2015 -# generate_vs140.vcxproj is for MSVC 2015 -# version_vs140.vcxproj is for MSVC 2015 -# basesets_vs140.vcxproj is for MSVC 2015 - - - - -# First, collect the list of Windows files -allegro_config="" -sdl_config="1" -sdl2_config="1" -png_config="1" -os="MSVC" -enable_dedicated="0" -enable_ai="1" -with_cocoa="0" -enable_directmusic="1" -enable_fluidsynth="0" -with_threads="1" -file_prefix="..\\\\\\\\src\\\\\\\\" - -safety_check() { - li="" - for i in `cat $1 | grep -v "#\|ottdres.rc\|win32.cpp\|win32_v.cpp" | xargs -n 1 basename | sort`; do - if [ "$li" = "$i" ]; then - echo " !! ERROR !!" - echo "" - echo "The filename '$i' is already used in this project." - echo "Because MSVC uses one single directory for all object files, it" - echo "cannot handle filenames with the same name inside the same project." - echo "Please rename either one of the file and try generating again." - echo "" - echo " !! ERROR !!" - exit 1 - fi - li="$i" - done -} - -grep '\.h' "$ROOT_DIR/source.list" | grep -v '../objs/langs/table/strings.h\|../objs/settings/table/settings.h' | sed 's/ //g' | sort > tmp.headers.source.list -find "$ROOT_DIR/src" \( -iname "*.h" -or -iname "*.hpp" \) -and -not -ipath "*/.svn/*" | sed "s~$ROOT_DIR/src/~~" | sort > tmp.headers.src -if [ -n "`diff tmp.headers.source.list tmp.headers.src`" ]; then - echo "The following headers are missing in source.list and not in /src/ or vice versa." - diff tmp.headers.source.list tmp.headers.src | grep '[<>]' | sort - echo "" -fi -rm tmp.headers.* - -load_main_data() { - # Read the source.list and process it - RES="`cat $1 | ${AWK} -v BINMODE=1 ' - { gsub("\\r", "", $0); } - /^( *)#end/ { if (deep == skip) { skip -= 1; } deep -= 1; next; } - /^( *)#else/ { if (deep == skip) { skip -= 1; } else if (deep - 1 == skip) { skip += 1; } next; } - /^( *)#if/ { - gsub(" ", "", $0); - gsub("^#if", "", $0); - gsub("^ ", "", $0); - - if (deep != skip) { deep += 1; next; } - - deep += 1; - - if ($0 == "ALLEGRO" && "'$allegro_config'" == "") { next; } - if ($0 == "SDL" && "'$sdl_config'" == "") { next; } - if ($0 == "SDL2" && "'$sdl2_config'" == "") { next; } - if ($0 == "PNG" && "'$png_config'" == "") { next; } - if ($0 == "OSX" && "'$os'" != "OSX") { next; } - if ($0 == "OS2" && "'$os'" != "OS2") { next; } - if ($0 == "DOS" && "'$os'" != "DOS") { next; } - if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; } - if ($0 == "AI" && "'$enable_ai'" == "0") { next; } - if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; } - if ($0 == "HAIKU" && "'$os'" != "HAIKU") { next; } - if ($0 == "WIN32" && "'$os'" != "MINGW" && - "'$os'" != "CYGWIN" && "'$os'" != "MSVC" ) { next; } - if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } - if ($0 == "DIRECTMUSIC" && "'$enable_directmusic'" != "1") { next; } - if ($0 == "FLUIDSYNTH" && "'$enable_fluidsynth'" != "1") { next; } - if ($0 == "USE_XAUDIO2" && "'$with_xaudio2'" == "0") { next; } - if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; } - - skip += 1; - - next; - } - /^( *)#/ { - if (deep == skip) { - gsub(" ", "", $0); - gsub("^#", "", $0); - gsub("^ ", "", $0); - filter = $0; - print "#3 "; - printf "#3 {c76ff9f1-1e62-46d8-8d55-%012d}\n", i; - print "#3 "; - i += 1; - } - - next; - } - /^$/ { next } - { - if (deep == skip) { - gsub(" ", "", $0); - gsub("/", "\\\\\\\\", $0); - split($0, file, "."); - cltype = "ClInclude" - if (file[2] == "cpp") cltype = "ClCompile"; - if (file[2] == "rc") cltype = "ResourceCompile"; - print "#2 <"cltype" Include=\\"'$file_prefix'"$0"\\" />"; - print "#4 <"cltype" Include=\\"'$file_prefix'"$0"\\">"; - print "#4 "filter""; - print "#4 "; - } - } - '`" - - eval "$2=\"\$RES\"" -} - -load_lang_data() { - RES="" - # Windows Folder sort and Linux Folder sort are slightly different. - # By removing the extension and sorting it on Linux, they are the same. - for i in `ls $1 | sed s~.txt$~~g | sort` - do - i=`basename $i` - if [ "$i" == "english" ] - then - continue - fi - RES="$RES -#2 -#2 Generating "$i" language file -#2 ..\\\\objs\\\\strgen\\\\strgen.exe -s ..\\\\src\\\\lang -d ..\\\\bin\\\\lang \"%(FullPath)\" -#2 ..\\\\src\\\\lang\\\\english.txt;..\\\\objs\\\\strgen\\\\strgen.exe;%(AdditionalInputs) -#2 ..\\\\bin\\\\lang\\\\"$i".lng;%(Outputs) -#2 -#3 -#3 Translations -#3 " - done - - eval "$2=\"\$RES\"" -} - -load_settings_data() { - RES="" - RES2=" -#3..\\\\objs\\\\settings\\\\settings_gen.exe -o ..\\\\objs\\\\settings\\\\table\\\\settings.h -b ..\\\\src\\\\table\\\\settings.h.preamble -a ..\\\\src\\\\table\\\\settings.h.postamble" - for i in `ls $1` - do - i=`basename $i` - RES="$RES -#2 -#4 -#4 INI -#4 " - RES2="$RES2 ..\\\\src\\\\table\\\\"$i - done - - eval "$2=\"\$RES\$RES2\"" -} - -load_baseset_data() { - FIRST="" - RES="" - RES2=" -#4 " - # Windows Folder sort and Linux Folder sort are slightly different. - # By removing the extension and sorting it on Linux, they are the same. - for i in `ls $2 | sed s~.txt$~~g | sort` - do - if [ "$FIRST" != "" ]; then - RES2="$RES2;" - else - FIRST=1 - fi - i=`basename $i` - RES2="$RES2..\\\\src\\\\lang\\\\$i.txt" - done - RES2="$RES2" - # Windows Folder sort and Linux Folder sort are slightly different. - # By fiddling with the extension and sorting it on Linux, they are the same. - for i in `ls $1 | sed s~\\\.~000~g | sort | sed s~000~.~g` - do - i=`basename $i` - RES="$RES -#2 -#2 Generating "$i" baseset metadata file -#2 cscript //nologo ..\\\\media\\\\baseset\\\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\\\src\\\\lang ..\\\\bin\\\\baseset\\\\orig_extra.grf -#2 \$(Langs);..\\\\bin\\\\baseset\\\\orig_extra.grf;%(AdditionalInputs) -#2 ..\\\\bin\\\\baseset\\\\"$i";%(Outputs) -#2 -#3 -#3 Baseset Metadata -#3 " - done - - eval "$3=\"\$RES\$RES2\"" -} - -generate() { - echo "Generating $2..." - # Everything above the !!FILTERS!! marker - cat "$ROOT_DIR/projects/$2".in | ${AWK} -v BINMODE=1 -v FILTERS="$3" -v FILES="$1" ' - /^$/ { next } - /!!FILTERS!!/ { - split(FILTERS, filters, "\n"); - for (i = 1; filters[i] != ""; i++) { - line = $0 - gsub(/!!FILTERS!!/, filters[i], line); - print line; - } - next; - } - /!!FILES!!/ { - split(FILES, files, "\n"); - for (i = 1; files[i] != ""; i++) { - line = $0 - gsub(/!!FILES!!/, files[i], line); - print line; - } - next; - } - { - print $0; - } - ' > "$ROOT_DIR/projects/$2" -} - -safety_check "$ROOT_DIR/source.list" - -load_main_data "$ROOT_DIR/source.list" openttd -openttdfiles=`echo "$openttd" | grep "^#4" | sed "s~#4~~g"` -openttdfilters=`echo "$openttd" | grep "^#3" | sed "s~#3~~g"` -openttdvcxproj=`echo "$openttd" | grep "^#2" | sed "s~#2~~g"` - -load_lang_data "$ROOT_DIR/src/lang/*.txt" lang -langfiles=`echo "$lang" | grep "^#3" | sed "s~#3~~g"` -langvcxproj=`echo "$lang" | grep "^#2" | sed "s~#2~~g"` - -load_settings_data "$ROOT_DIR/src/table/*.ini" settings -settingsfiles=`echo "$settings" | grep "^#4" | sed "s~#4~~g"` -settingscommand=`echo "$settings" | grep "^#3" | sed "s~#3~~g"` -settingsvcxproj=`echo "$settings" | grep "^#2" | sed "s~#2~~g"` - -load_baseset_data "$ROOT_DIR/media/baseset/*.ob?" "$ROOT_DIR/src/lang/*.txt" baseset -basesetfiles=`echo "$baseset" | grep "^#3" | sed "s-#3--g"` -basesetvcxproj=`echo "$baseset" | grep "^#2" | sed "s~#2~~g"` -basesetlangs=`echo "$baseset" | grep "^#4" | sed "s~#4~~g"` - -generate "$openttdvcxproj" "openttd_vs140.vcxproj" -generate "$openttdfiles" "openttd_vs140.vcxproj.filters" "$openttdfilters" -generate "$openttdvcxproj" "openttd_vs141.vcxproj" -generate "$openttdfiles" "openttd_vs141.vcxproj.filters" "$openttdfilters" -generate "$openttdvcxproj" "openttd_vs142.vcxproj" -generate "$openttdfiles" "openttd_vs142.vcxproj.filters" "$openttdfilters" -generate "$langvcxproj" "langs_vs140.vcxproj" -generate "$langfiles" "langs_vs140.vcxproj.filters" -generate "$langvcxproj" "langs_vs141.vcxproj" -generate "$langfiles" "langs_vs141.vcxproj.filters" -generate "$langvcxproj" "langs_vs142.vcxproj" -generate "$langfiles" "langs_vs142.vcxproj.filters" -generate "$settingsvcxproj" "settings_vs140.vcxproj" "$settingscommand" -generate "$settingsfiles" "settings_vs140.vcxproj.filters" -generate "$settingsvcxproj" "settings_vs141.vcxproj" "$settingscommand" -generate "$settingsfiles" "settings_vs141.vcxproj.filters" -generate "$settingsvcxproj" "settings_vs142.vcxproj" "$settingscommand" -generate "$settingsfiles" "settings_vs142.vcxproj.filters" -generate "$basesetvcxproj" "basesets_vs140.vcxproj" "$basesetlangs" -generate "$basesetfiles" "basesets_vs140.vcxproj.filters" -generate "$basesetvcxproj" "basesets_vs141.vcxproj" "$basesetlangs" -generate "$basesetfiles" "basesets_vs141.vcxproj.filters" -generate "$basesetvcxproj" "basesets_vs142.vcxproj" "$basesetlangs" -generate "$basesetfiles" "basesets_vs142.vcxproj.filters" diff --git a/projects/generate.vbs b/projects/generate.vbs deleted file mode 100755 index 577dce9558..0000000000 --- a/projects/generate.vbs +++ /dev/null @@ -1,414 +0,0 @@ -Option Explicit - -' This file is part of OpenTTD. -' OpenTTD 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, version 2. -' OpenTTD 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 OpenTTD. If not, see . - -Dim FSO -Set FSO = CreateObject("Scripting.FileSystemObject") - -' openttd_vs142.sln is for MSVC 2019 -' openttd_vs142.vcxproj is for MSVC 2019 -' openttd_vs142.vcxproj.filters is for MSVC 2019 -' langs_vs142.vcxproj is for MSVC 2019 -' strgen_vs142.vcxproj is for MSVC 2019 -' strgen_vs142.vcxproj.filters is for MSVC 2019 -' generate_vs142.vcxproj is for MSVC 2019 -' version_vs142.vcxproj is for MSVC 2019 -' basesets_vs142.vcxproj is for MSVC 2019 - -' openttd_vs141.sln is for MSVC 2017 -' openttd_vs141.vcxproj is for MSVC 2017 -' openttd_vs141.vcxproj.filters is for MSVC 2017 -' langs_vs141.vcxproj is for MSVC 2017 -' strgen_vs141.vcxproj is for MSVC 2017 -' strgen_vs141.vcxproj.filters is for MSVC 2017 -' generate_vs141.vcxproj is for MSVC 2017 -' version_vs141.vcxproj is for MSVC 2017 -' basesets_vs141.vcxproj is for MSVC 2017 - -' openttd_vs140.sln is for MSVC 2015 -' openttd_vs140.vcxproj is for MSVC 2015 -' openttd_vs140.vcxproj.filters is for MSVC 2015 -' langs_vs140.vcxproj is for MSVC 2015 -' strgen_vs140.vcxproj is for MSVC 2015 -' strgen_vs140.vcxproj.filters is for MSVC 2015 -' generate_vs140.vcxproj is for MSVC 2015 -' version_vs140.vcxproj is for MSVC 2015 -' basesets_vs140.vcxproj is for MSVC 2015 - -Sub safety_check(filename) - Dim file, line, regexp, list - - ' Define regexp - Set regexp = New RegExp - regexp.Pattern = "#|ottdres.rc|win32.cpp|win32_v.cpp" - regexp.Global = True - - ' We use a dictionary to check duplicates - Set list = CreateObject("Scripting.Dictionary") - - Set file = FSO.OpenTextFile(filename, 1, 0, 0) - While Not file.AtEndOfStream - line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs - If Len(line) > 0 And Not regexp.Test(line) Then - line = FSO.GetFileName(line) - if list.Exists(line) Then - WScript.Echo " !! ERROR !!" _ - & vbCrLf & "" _ - & vbCrLf & "The filename '" & line & "' is already used in this project." _ - & vbCrLf & "Because MSVC uses one single directory for all object files, it" _ - & vbCrLf & "cannot handle filenames with the same name inside the same project." _ - & vbCrLf & "Please rename either one of the file and try generating again." _ - & vbCrLf & "" _ - & vbCrLf & " !! ERROR !!" - WScript.Quit(1) - End If - list.Add line, line - End If - Wend - file.Close -End Sub - -Sub get_files(srcdir, dir, list) - Dim file, filename - Dim rekeep, reskip - - ' pattern for files to keep - Set rekeep = New RegExp - rekeep.Pattern = "\.h(pp)?$" - rekeep.Global = True - - ' pattern for files to exclude - Set reskip = New RegExp - reskip.Pattern = "\.svn" - reskip.Global = True - - For Each file in dir.Files - filename = Replace(file.path, srcdir, "") ' Remove */src/ - filename = Replace(filename, "\", "/") ' Replace separators - If rekeep.Test(filename) And Not reskip.Test(filename) Then - list.Add filename, filename - End If - Next -End Sub - -Sub get_dir_files(srcdir, dir, list) - Dim folder - ' Get files - get_files srcdir, dir, list - - ' Recurse in subfolders - For Each folder in dir.SubFolders - get_dir_files srcdir, folder, list - Next -End Sub - -Sub headers_check(filename, dir) - Dim source_list_headers, src_dir_headers, regexp, line, file, str - - ' Define regexp for source.list parsing - Set regexp = New RegExp - regexp.Pattern = "\.h" - regexp.Global = True - - ' Parse source.list and store headers in a dictionary - Set source_list_headers = CreateObject("Scripting.Dictionary") - Set file = FSO.OpenTextFile(filename, 1, 0, 0) - While Not file.AtEndOfStream - line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs - If Len(line) > 0 And regexp.Test(line) And line <> "../objs/langs/table/strings.h" And line <> "../objs/settings/table/settings.h" Then - source_list_headers.Add line, line - End If - Wend - file.Close() - - ' Get header files in /src/ - Set src_dir_headers = CreateObject("Scripting.Dictionary") - get_dir_files dir, FSO.GetFolder(dir), src_dir_headers - - ' Finding files in source.list but not in /src/ - For Each line In source_list_headers - If Not src_dir_headers.Exists(line) Then - str = str & "< " & line & vbCrLf - End If - Next - - ' Finding files in /src/ but not in source.list - For Each line In src_dir_headers - If Not source_list_headers.Exists(line) Then - str = str & "> " & line & vbCrLf - End If - Next - - ' Display the missing files if any - If str <> "" Then - str = "The following headers are missing in source.list and not in /src/ or vice versa." _ - & vbCrLf & str - WScript.Echo str - End If -End Sub - -Sub load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) - Dim file, line, deep, skip, first_filter, first_file, filter, cltype, index - index = 0 - ' Read the source.list and process it - Set file = FSO.OpenTextFile(filename, 1, 0, 0) - While Not file.AtEndOfStream - line = Replace(file.ReadLine, Chr(9), "") ' Remove tabs - If Len(line) > 0 Then - Select Case Split(line, " ")(0) - Case "#end" - If deep = skip Then skip = skip - 1 - deep = deep - 1 - Case "#else" - If deep = skip Then - skip = skip - 1 - ElseIf deep - 1 = skip Then - skip = skip + 1 - End If - Case "#if" - line = Replace(line, "#if ", "") - If deep = skip And ( _ - line = "SDL" Or _ - line = "SDL2" Or _ - line = "PNG" Or _ - line = "WIN32" Or _ - line = "MSVC" Or _ - line = "DIRECTMUSIC" Or _ - line = "AI" Or _ - line = "USE_SSE" Or _ - line = "USE_XAUDIO2" Or _ - line = "USE_THREADS" _ - ) Then skip = skip + 1 - deep = deep + 1 - Case "#" - if deep = skip Then - line = Replace(line, "# ", "") - if first_filter <> 0 Then - filters = filters & vbCrLf - Else - first_filter = 1 - End If - filter = line - filters = filters & _ - " " & vbCrLf & _ - " {c76ff9f1-1e62-46d8-8d55-" & String(12 - Len(CStr(index)), "0") & index & "}" & vbCrLf & _ - " " - index = index + 1 - End If - Case Else - If deep = skip Then - line = Replace(line, "/" ,"\") - if first_file <> 0 Then - vcxproj = vcxproj & vbCrLf - files = files & vbCrLf - Else - first_file = 1 - End If - Select Case Split(Line, ".")(1) - Case "cpp" - cltype = "ClCompile" - Case "rc" - cltype = "ResourceCompile" - Case Else - cltype = "ClInclude" - End Select - vcxproj = vcxproj & " <" & cltype & " Include="& Chr(34) & "..\src\" & line & Chr(34) & " />" - files = files & _ - " <" & cltype & " Include="& Chr(34) & "..\src\" & line & Chr(34) & ">" & vbCrLf & _ - " " & filter & "" & vbCrLf & _ - " " - End If - End Select - End If - Wend - file.Close() -End Sub - -Sub load_lang_data(dir, ByRef vcxproj, ByRef files) - Dim folder, file, first_time - Set folder = FSO.GetFolder(dir) - For Each file In folder.Files - file = FSO.GetFileName(file) - If file <> "english.txt" And FSO.GetExtensionName(file) = "txt" Then - file = Left(file, Len(file) - 4) - If first_time <> 0 Then - vcxproj = vcxproj & vbCrLf - files = files & vbCrLf - Else - first_time = 1 - End If - vcxproj = vcxproj & _ - " " & vbCrLf & _ - " Generating " & file & " language file" & vbCrLf & _ - " ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang " & Chr(34) & "%(FullPath)" & Chr(34) & "" & vbCrLf & _ - " ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs)" & vbCrLf & _ - " ..\bin\lang\" & file & ".lng;%(Outputs)" & vbCrLf & _ - " " - files = files & _ - " " & vbCrLf & _ - " Translations" & vbCrLf & _ - " " - End If - Next -End Sub - -Sub load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files) - Dim folder, file, first_time - command = "..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble" - Set folder = FSO.GetFolder(dir) - For Each file In folder.Files - file = FSO.GetFileName(file) - If FSO.GetExtensionName(file) = "ini" Then - if first_time <> 0 Then - vcxproj = vcxproj & vbCrLf - files = files & vbCrLf - Else - first_time = 1 - End If - vcxproj = vcxproj & _ - " " - command = command & " ..\src\table\" & file - files = files & _ - " " & vbCrLf & _ - " INI" & vbCrLf & _ - " " - End If - Next -End Sub - -Sub load_baseset_data(dir, langdir, ByRef vcxproj, ByRef files, ByRef langs) - Dim folder, file, ext, first_time - Set folder = FSO.GetFolder(langdir) - langs = " " - For Each file In folder.Files - If first_time <> 0 Then - langs = langs & ";" - Else - first_time = 1 - End If - file = FSO.GetFileName(file) - ext = FSO.GetExtensionName(file) - langs = langs & "..\src\lang\" & file - Next - langs = langs & "" - first_time = 0 - Set folder = FSO.GetFolder(dir) - For Each file In folder.Files - file = FSO.GetFileName(file) - ext = FSO.GetExtensionName(file) - If ext = "obm" Or ext = "obg" Or ext = "obs" Then - If first_time <> 0 Then - vcxproj = vcxproj & vbCrLf - files = files & vbCrLf - Else - first_time = 1 - End If - vcxproj = vcxproj & _ - " " & vbCrLf & _ - " Generating " & file & " baseset metadata file" & vbCrLf & _ - " cscript //nologo ..\media\baseset\translations.vbs " & Chr(34) & "%(FullPath)" & Chr(34) & " " & Chr(34) & "$(OutputPath)" & file & Chr(34) & " ..\src\lang ..\bin\baseset\orig_extra.grf" & vbCrLf & _ - " $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)" & vbCrLf & _ - " ..\bin\baseset\" & file & ";%(Outputs)" & vbCrLf & _ - " " - files = files & _ - " " & vbCrLf & _ - " Baseset Metadata" & vbCrLf & _ - " " - End If - Next -End Sub - -Sub generate(data, dest, data2) - Dim srcfile, destfile, line, regexp - WScript.Echo "Generating " & FSO.GetFileName(dest) & "..." - Set srcfile = FSO.OpenTextFile(dest & ".in", 1, 0, 0) - Set destfile = FSO.CreateTextFile(dest, -1, 0) - - If Not IsNull(data2) Then - ' Everything above the !!FILTERS!! marker - Set regexp = New RegExp - regexp.Pattern = "!!FILTERS!!" - regexp.Global = True - - line = srcfile.ReadLine() - While Not regexp.Test(line) - If len(line) > 0 Then destfile.WriteLine(line) - line = srcfile.ReadLine() - Wend - - ' Our generated content - line = regexp.Replace(line, data2) - destfile.WriteLine(line) - End If - - ' Everything above the !!FILES!! marker - line = srcfile.ReadLine() - While line <> "!!FILES!!" - If len(line) > 0 Then destfile.WriteLine(line) - line = srcfile.ReadLine() - Wend - - ' Our generated content - destfile.WriteLine(data) - - ' Everything below the !!FILES!! marker - While Not srcfile.AtEndOfStream - line = srcfile.ReadLine() - If len(line) > 0 Then destfile.WriteLine(line) - Wend - srcfile.Close() - destfile.Close() -End Sub - -Dim ROOT_DIR -ROOT_DIR = FSO.GetFolder("..").Path -If Not FSO.FileExists(ROOT_DIR & "/source.list") Then - ROOT_DIR = FSO.GetFolder(".").Path -End If -If Not FSO.FileExists(ROOT_DIR & "/source.list") Then - WScript.Echo "Can't find source.list, needed in order to make this run." _ - & vbCrLf & "Please go to either the project dir, or the root dir of a clean SVN checkout." - WScript.Quit(1) -End If - -safety_check ROOT_DIR & "/source.list" -headers_check ROOT_DIR & "/source.list", ROOT_DIR & "\src\" ' Backslashes needed for DoFiles - -Dim openttdvcxproj, openttdfilters, openttdfiles -load_main_data ROOT_DIR & "/source.list", openttdvcxproj, openttdfilters, openttdfiles -generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs140.vcxproj", Null -generate openttdfiles, ROOT_DIR & "/projects/openttd_vs140.vcxproj.filters", openttdfilters -generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs141.vcxproj", Null -generate openttdfiles, ROOT_DIR & "/projects/openttd_vs141.vcxproj.filters", openttdfilters -generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs142.vcxproj", Null -generate openttdfiles, ROOT_DIR & "/projects/openttd_vs142.vcxproj.filters", openttdfilters - -Dim langvcxproj, langfiles -load_lang_data ROOT_DIR & "/src/lang", langvcxproj, langfiles -generate langvcxproj, ROOT_DIR & "/projects/langs_vs140.vcxproj", Null -generate langfiles, ROOT_DIR & "/projects/langs_vs140.vcxproj.filters", Null -generate langvcxproj, ROOT_DIR & "/projects/langs_vs141.vcxproj", Null -generate langfiles, ROOT_DIR & "/projects/langs_vs141.vcxproj.filters", Null -generate langvcxproj, ROOT_DIR & "/projects/langs_vs142.vcxproj", Null -generate langfiles, ROOT_DIR & "/projects/langs_vs142.vcxproj.filters", Null - -Dim settingsvcxproj, settingscommand, settingsfiles -load_settings_data ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles -generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs140.vcxproj", settingscommand -generate settingsfiles, ROOT_DIR & "/projects/settings_vs140.vcxproj.filters", Null -generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs141.vcxproj", settingscommand -generate settingsfiles, ROOT_DIR & "/projects/settings_vs141.vcxproj.filters", Null -generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs142.vcxproj", settingscommand -generate settingsfiles, ROOT_DIR & "/projects/settings_vs142.vcxproj.filters", Null - -Dim basesetvcxproj, basesetfiles, basesetlangs -load_baseset_data ROOT_DIR & "/media/baseset", ROOT_DIR & "/src/lang", basesetvcxproj, basesetfiles, basesetlangs -generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs140.vcxproj", basesetlangs -generate basesetfiles, ROOT_DIR & "/projects/basesets_vs140.vcxproj.filters", Null -generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs141.vcxproj", basesetlangs -generate basesetfiles, ROOT_DIR & "/projects/basesets_vs141.vcxproj.filters", Null -generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", basesetlangs -generate basesetfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null diff --git a/projects/generate_vs100.vcxproj b/projects/generate_vs100.vcxproj deleted file mode 100644 index 4417308e60..0000000000 --- a/projects/generate_vs100.vcxproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - Win32 - - - - generate - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} - generate - - - - Utility - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - - - - - - Document - Running %27generate.vbs%27 ... - cscript "$(ProjectDir)generate.vbs" - %(FullPath);%(AdditionalInputs) - $(SolutionDir)openttd_vs80.vcproj;$(SolutionDir)openttd_vs90.vcproj;$(SolutionDir)openttd_vs100.vcxproj;$(SolutionDir)openttd_vs100.vcxproj.filters;$(SolutionDir)langs_vs80.vcproj;$(SolutionDir)langs_vs90.vcproj;$(SolutionDir)langs_vs100.vcxproj;%(Outputs) - - - - - - diff --git a/projects/generate_vs140.vcxproj b/projects/generate_vs140.vcxproj deleted file mode 100644 index b17142050b..0000000000 --- a/projects/generate_vs140.vcxproj +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Debug - Win32 - - - - generate - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} - generate - - - - Utility - v140 - - - - - - - - - - - - - Document - Running %27generate.vbs%27 ... - cscript "$(ProjectDir)generate.vbs" - %(FullPath);%(AdditionalInputs) - - - - - - diff --git a/projects/generate_vs141.vcxproj b/projects/generate_vs141.vcxproj deleted file mode 100644 index d7a877db17..0000000000 --- a/projects/generate_vs141.vcxproj +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Debug - Win32 - - - - generate - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} - generate - - - - Utility - v141 - - - - - - - - - - - - - Document - Running %27generate.vbs%27 ... - cscript "$(ProjectDir)generate.vbs" - %(FullPath);%(AdditionalInputs) - - - - - - diff --git a/projects/generate_vs142.vcxproj b/projects/generate_vs142.vcxproj deleted file mode 100644 index 7230676cb5..0000000000 --- a/projects/generate_vs142.vcxproj +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Debug - Win32 - - - - generate - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} - generate - - - - Utility - v142 - - - - - - - - - - - - - Document - Running %27generate.vbs%27 ... - cscript "$(ProjectDir)generate.vbs" - %(FullPath);%(AdditionalInputs) - - - - - - diff --git a/projects/generate_vs80.vcproj b/projects/generate_vs80.vcproj deleted file mode 100644 index bc0b6c44c7..0000000000 --- a/projects/generate_vs80.vcproj +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/projects/generate_vs90.vcproj b/projects/generate_vs90.vcproj deleted file mode 100644 index dc7b3e2f56..0000000000 --- a/projects/generate_vs90.vcproj +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/projects/langs_vs100.vcxproj b/projects/langs_vs100.vcxproj deleted file mode 100644 index fc77e03bec..0000000000 --- a/projects/langs_vs100.vcxproj +++ /dev/null @@ -1,390 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - - - Generating afrikaans language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\afrikaans.lng;%(Outputs) - - - Generating arabic_egypt language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\arabic_egypt.lng;%(Outputs) - - - Generating basque language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\basque.lng;%(Outputs) - - - Generating belarusian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\belarusian.lng;%(Outputs) - - - Generating brazilian_portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\brazilian_portuguese.lng;%(Outputs) - - - Generating bulgarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\bulgarian.lng;%(Outputs) - - - Generating catalan language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\catalan.lng;%(Outputs) - - - Generating croatian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\croatian.lng;%(Outputs) - - - Generating czech language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\czech.lng;%(Outputs) - - - Generating danish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\danish.lng;%(Outputs) - - - Generating dutch language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\dutch.lng;%(Outputs) - - - Generating english_AU language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_AU.lng;%(Outputs) - - - Generating english_US language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_US.lng;%(Outputs) - - - Generating esperanto language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\esperanto.lng;%(Outputs) - - - Generating estonian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\estonian.lng;%(Outputs) - - - Generating faroese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\faroese.lng;%(Outputs) - - - Generating finnish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\finnish.lng;%(Outputs) - - - Generating french language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\french.lng;%(Outputs) - - - Generating gaelic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\gaelic.lng;%(Outputs) - - - Generating galician language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\galician.lng;%(Outputs) - - - Generating german language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\german.lng;%(Outputs) - - - Generating greek language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\greek.lng;%(Outputs) - - - Generating hebrew language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hebrew.lng;%(Outputs) - - - Generating hungarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hungarian.lng;%(Outputs) - - - Generating icelandic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\icelandic.lng;%(Outputs) - - - Generating indonesian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\indonesian.lng;%(Outputs) - - - Generating irish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\irish.lng;%(Outputs) - - - Generating italian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\italian.lng;%(Outputs) - - - Generating japanese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\japanese.lng;%(Outputs) - - - Generating korean language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\korean.lng;%(Outputs) - - - Generating latin language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latin.lng;%(Outputs) - - - Generating latvian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latvian.lng;%(Outputs) - - - Generating lithuanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\lithuanian.lng;%(Outputs) - - - Generating luxembourgish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\luxembourgish.lng;%(Outputs) - - - Generating malay language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\malay.lng;%(Outputs) - - - Generating norwegian_bokmal language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_bokmal.lng;%(Outputs) - - - Generating norwegian_nynorsk language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) - - - Generating polish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\polish.lng;%(Outputs) - - - Generating portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\portuguese.lng;%(Outputs) - - - Generating romanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\romanian.lng;%(Outputs) - - - Generating russian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\russian.lng;%(Outputs) - - - Generating serbian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\serbian.lng;%(Outputs) - - - Generating simplified_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\simplified_chinese.lng;%(Outputs) - - - Generating slovak language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovak.lng;%(Outputs) - - - Generating slovenian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovenian.lng;%(Outputs) - - - Generating spanish_MX language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish_MX.lng;%(Outputs) - - - Generating spanish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish.lng;%(Outputs) - - - Generating swedish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\swedish.lng;%(Outputs) - - - Generating tamil language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\tamil.lng;%(Outputs) - - - Generating thai language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\thai.lng;%(Outputs) - - - Generating traditional_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\traditional_chinese.lng;%(Outputs) - - - Generating turkish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\turkish.lng;%(Outputs) - - - Generating ukrainian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\ukrainian.lng;%(Outputs) - - - Generating vietnamese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\vietnamese.lng;%(Outputs) - - - Generating welsh language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\welsh.lng;%(Outputs) - - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs100.vcxproj.filters b/projects/langs_vs100.vcxproj.filters deleted file mode 100644 index 0afc8c969a..0000000000 --- a/projects/langs_vs100.vcxproj.filters +++ /dev/null @@ -1,176 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - diff --git a/projects/langs_vs100.vcxproj.filters.in b/projects/langs_vs100.vcxproj.filters.in deleted file mode 100644 index 0d60ee9595..0000000000 --- a/projects/langs_vs100.vcxproj.filters.in +++ /dev/null @@ -1,12 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - -!!FILES!! - - diff --git a/projects/langs_vs100.vcxproj.in b/projects/langs_vs100.vcxproj.in deleted file mode 100644 index 5bfec8bf0f..0000000000 --- a/projects/langs_vs100.vcxproj.in +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - -!!FILES!! - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs140.vcxproj b/projects/langs_vs140.vcxproj deleted file mode 100644 index 25e7160bfb..0000000000 --- a/projects/langs_vs140.vcxproj +++ /dev/null @@ -1,390 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v140 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - - - Generating afrikaans language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\afrikaans.lng;%(Outputs) - - - Generating arabic_egypt language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\arabic_egypt.lng;%(Outputs) - - - Generating basque language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\basque.lng;%(Outputs) - - - Generating belarusian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\belarusian.lng;%(Outputs) - - - Generating brazilian_portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\brazilian_portuguese.lng;%(Outputs) - - - Generating bulgarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\bulgarian.lng;%(Outputs) - - - Generating catalan language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\catalan.lng;%(Outputs) - - - Generating croatian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\croatian.lng;%(Outputs) - - - Generating czech language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\czech.lng;%(Outputs) - - - Generating danish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\danish.lng;%(Outputs) - - - Generating dutch language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\dutch.lng;%(Outputs) - - - Generating english_AU language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_AU.lng;%(Outputs) - - - Generating english_US language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_US.lng;%(Outputs) - - - Generating esperanto language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\esperanto.lng;%(Outputs) - - - Generating estonian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\estonian.lng;%(Outputs) - - - Generating faroese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\faroese.lng;%(Outputs) - - - Generating finnish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\finnish.lng;%(Outputs) - - - Generating french language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\french.lng;%(Outputs) - - - Generating gaelic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\gaelic.lng;%(Outputs) - - - Generating galician language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\galician.lng;%(Outputs) - - - Generating german language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\german.lng;%(Outputs) - - - Generating greek language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\greek.lng;%(Outputs) - - - Generating hebrew language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hebrew.lng;%(Outputs) - - - Generating hungarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hungarian.lng;%(Outputs) - - - Generating icelandic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\icelandic.lng;%(Outputs) - - - Generating indonesian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\indonesian.lng;%(Outputs) - - - Generating irish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\irish.lng;%(Outputs) - - - Generating italian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\italian.lng;%(Outputs) - - - Generating japanese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\japanese.lng;%(Outputs) - - - Generating korean language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\korean.lng;%(Outputs) - - - Generating latin language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latin.lng;%(Outputs) - - - Generating latvian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latvian.lng;%(Outputs) - - - Generating lithuanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\lithuanian.lng;%(Outputs) - - - Generating luxembourgish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\luxembourgish.lng;%(Outputs) - - - Generating malay language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\malay.lng;%(Outputs) - - - Generating norwegian_bokmal language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_bokmal.lng;%(Outputs) - - - Generating norwegian_nynorsk language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) - - - Generating polish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\polish.lng;%(Outputs) - - - Generating portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\portuguese.lng;%(Outputs) - - - Generating romanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\romanian.lng;%(Outputs) - - - Generating russian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\russian.lng;%(Outputs) - - - Generating serbian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\serbian.lng;%(Outputs) - - - Generating simplified_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\simplified_chinese.lng;%(Outputs) - - - Generating slovak language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovak.lng;%(Outputs) - - - Generating slovenian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovenian.lng;%(Outputs) - - - Generating spanish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish.lng;%(Outputs) - - - Generating spanish_MX language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish_MX.lng;%(Outputs) - - - Generating swedish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\swedish.lng;%(Outputs) - - - Generating tamil language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\tamil.lng;%(Outputs) - - - Generating thai language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\thai.lng;%(Outputs) - - - Generating traditional_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\traditional_chinese.lng;%(Outputs) - - - Generating turkish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\turkish.lng;%(Outputs) - - - Generating ukrainian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\ukrainian.lng;%(Outputs) - - - Generating vietnamese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\vietnamese.lng;%(Outputs) - - - Generating welsh language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\welsh.lng;%(Outputs) - - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs140.vcxproj.filters b/projects/langs_vs140.vcxproj.filters deleted file mode 100644 index bf5257ec82..0000000000 --- a/projects/langs_vs140.vcxproj.filters +++ /dev/null @@ -1,176 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - diff --git a/projects/langs_vs140.vcxproj.filters.in b/projects/langs_vs140.vcxproj.filters.in deleted file mode 100644 index 0d60ee9595..0000000000 --- a/projects/langs_vs140.vcxproj.filters.in +++ /dev/null @@ -1,12 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - -!!FILES!! - - diff --git a/projects/langs_vs140.vcxproj.in b/projects/langs_vs140.vcxproj.in deleted file mode 100644 index 3271fecffa..0000000000 --- a/projects/langs_vs140.vcxproj.in +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v140 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - -!!FILES!! - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs141.vcxproj b/projects/langs_vs141.vcxproj deleted file mode 100644 index c554c6e378..0000000000 --- a/projects/langs_vs141.vcxproj +++ /dev/null @@ -1,390 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v141 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - - - Generating afrikaans language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\afrikaans.lng;%(Outputs) - - - Generating arabic_egypt language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\arabic_egypt.lng;%(Outputs) - - - Generating basque language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\basque.lng;%(Outputs) - - - Generating belarusian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\belarusian.lng;%(Outputs) - - - Generating brazilian_portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\brazilian_portuguese.lng;%(Outputs) - - - Generating bulgarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\bulgarian.lng;%(Outputs) - - - Generating catalan language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\catalan.lng;%(Outputs) - - - Generating croatian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\croatian.lng;%(Outputs) - - - Generating czech language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\czech.lng;%(Outputs) - - - Generating danish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\danish.lng;%(Outputs) - - - Generating dutch language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\dutch.lng;%(Outputs) - - - Generating english_AU language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_AU.lng;%(Outputs) - - - Generating english_US language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_US.lng;%(Outputs) - - - Generating esperanto language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\esperanto.lng;%(Outputs) - - - Generating estonian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\estonian.lng;%(Outputs) - - - Generating faroese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\faroese.lng;%(Outputs) - - - Generating finnish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\finnish.lng;%(Outputs) - - - Generating french language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\french.lng;%(Outputs) - - - Generating gaelic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\gaelic.lng;%(Outputs) - - - Generating galician language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\galician.lng;%(Outputs) - - - Generating german language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\german.lng;%(Outputs) - - - Generating greek language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\greek.lng;%(Outputs) - - - Generating hebrew language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hebrew.lng;%(Outputs) - - - Generating hungarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hungarian.lng;%(Outputs) - - - Generating icelandic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\icelandic.lng;%(Outputs) - - - Generating indonesian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\indonesian.lng;%(Outputs) - - - Generating irish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\irish.lng;%(Outputs) - - - Generating italian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\italian.lng;%(Outputs) - - - Generating japanese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\japanese.lng;%(Outputs) - - - Generating korean language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\korean.lng;%(Outputs) - - - Generating latin language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latin.lng;%(Outputs) - - - Generating latvian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latvian.lng;%(Outputs) - - - Generating lithuanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\lithuanian.lng;%(Outputs) - - - Generating luxembourgish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\luxembourgish.lng;%(Outputs) - - - Generating malay language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\malay.lng;%(Outputs) - - - Generating norwegian_bokmal language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_bokmal.lng;%(Outputs) - - - Generating norwegian_nynorsk language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) - - - Generating polish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\polish.lng;%(Outputs) - - - Generating portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\portuguese.lng;%(Outputs) - - - Generating romanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\romanian.lng;%(Outputs) - - - Generating russian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\russian.lng;%(Outputs) - - - Generating serbian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\serbian.lng;%(Outputs) - - - Generating simplified_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\simplified_chinese.lng;%(Outputs) - - - Generating slovak language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovak.lng;%(Outputs) - - - Generating slovenian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovenian.lng;%(Outputs) - - - Generating spanish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish.lng;%(Outputs) - - - Generating spanish_MX language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish_MX.lng;%(Outputs) - - - Generating swedish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\swedish.lng;%(Outputs) - - - Generating tamil language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\tamil.lng;%(Outputs) - - - Generating thai language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\thai.lng;%(Outputs) - - - Generating traditional_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\traditional_chinese.lng;%(Outputs) - - - Generating turkish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\turkish.lng;%(Outputs) - - - Generating ukrainian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\ukrainian.lng;%(Outputs) - - - Generating vietnamese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\vietnamese.lng;%(Outputs) - - - Generating welsh language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\welsh.lng;%(Outputs) - - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs141.vcxproj.filters b/projects/langs_vs141.vcxproj.filters deleted file mode 100644 index bf5257ec82..0000000000 --- a/projects/langs_vs141.vcxproj.filters +++ /dev/null @@ -1,176 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - diff --git a/projects/langs_vs141.vcxproj.filters.in b/projects/langs_vs141.vcxproj.filters.in deleted file mode 100644 index 0d60ee9595..0000000000 --- a/projects/langs_vs141.vcxproj.filters.in +++ /dev/null @@ -1,12 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - -!!FILES!! - - diff --git a/projects/langs_vs141.vcxproj.in b/projects/langs_vs141.vcxproj.in deleted file mode 100644 index b73d52c5c9..0000000000 --- a/projects/langs_vs141.vcxproj.in +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v141 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - -!!FILES!! - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs142.vcxproj b/projects/langs_vs142.vcxproj deleted file mode 100644 index 0a11156bb0..0000000000 --- a/projects/langs_vs142.vcxproj +++ /dev/null @@ -1,390 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v142 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - - - Generating afrikaans language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\afrikaans.lng;%(Outputs) - - - Generating arabic_egypt language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\arabic_egypt.lng;%(Outputs) - - - Generating basque language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\basque.lng;%(Outputs) - - - Generating belarusian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\belarusian.lng;%(Outputs) - - - Generating brazilian_portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\brazilian_portuguese.lng;%(Outputs) - - - Generating bulgarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\bulgarian.lng;%(Outputs) - - - Generating catalan language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\catalan.lng;%(Outputs) - - - Generating croatian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\croatian.lng;%(Outputs) - - - Generating czech language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\czech.lng;%(Outputs) - - - Generating danish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\danish.lng;%(Outputs) - - - Generating dutch language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\dutch.lng;%(Outputs) - - - Generating english_AU language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_AU.lng;%(Outputs) - - - Generating english_US language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_US.lng;%(Outputs) - - - Generating esperanto language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\esperanto.lng;%(Outputs) - - - Generating estonian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\estonian.lng;%(Outputs) - - - Generating faroese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\faroese.lng;%(Outputs) - - - Generating finnish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\finnish.lng;%(Outputs) - - - Generating french language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\french.lng;%(Outputs) - - - Generating gaelic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\gaelic.lng;%(Outputs) - - - Generating galician language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\galician.lng;%(Outputs) - - - Generating german language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\german.lng;%(Outputs) - - - Generating greek language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\greek.lng;%(Outputs) - - - Generating hebrew language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hebrew.lng;%(Outputs) - - - Generating hungarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hungarian.lng;%(Outputs) - - - Generating icelandic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\icelandic.lng;%(Outputs) - - - Generating indonesian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\indonesian.lng;%(Outputs) - - - Generating irish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\irish.lng;%(Outputs) - - - Generating italian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\italian.lng;%(Outputs) - - - Generating japanese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\japanese.lng;%(Outputs) - - - Generating korean language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\korean.lng;%(Outputs) - - - Generating latin language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latin.lng;%(Outputs) - - - Generating latvian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latvian.lng;%(Outputs) - - - Generating lithuanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\lithuanian.lng;%(Outputs) - - - Generating luxembourgish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\luxembourgish.lng;%(Outputs) - - - Generating malay language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\malay.lng;%(Outputs) - - - Generating norwegian_bokmal language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_bokmal.lng;%(Outputs) - - - Generating norwegian_nynorsk language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) - - - Generating polish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\polish.lng;%(Outputs) - - - Generating portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\portuguese.lng;%(Outputs) - - - Generating romanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\romanian.lng;%(Outputs) - - - Generating russian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\russian.lng;%(Outputs) - - - Generating serbian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\serbian.lng;%(Outputs) - - - Generating simplified_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\simplified_chinese.lng;%(Outputs) - - - Generating slovak language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovak.lng;%(Outputs) - - - Generating slovenian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovenian.lng;%(Outputs) - - - Generating spanish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish.lng;%(Outputs) - - - Generating spanish_MX language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish_MX.lng;%(Outputs) - - - Generating swedish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\swedish.lng;%(Outputs) - - - Generating tamil language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\tamil.lng;%(Outputs) - - - Generating thai language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\thai.lng;%(Outputs) - - - Generating traditional_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\traditional_chinese.lng;%(Outputs) - - - Generating turkish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\turkish.lng;%(Outputs) - - - Generating ukrainian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\ukrainian.lng;%(Outputs) - - - Generating vietnamese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\vietnamese.lng;%(Outputs) - - - Generating welsh language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\welsh.lng;%(Outputs) - - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs142.vcxproj.filters b/projects/langs_vs142.vcxproj.filters deleted file mode 100644 index bf5257ec82..0000000000 --- a/projects/langs_vs142.vcxproj.filters +++ /dev/null @@ -1,176 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - diff --git a/projects/langs_vs142.vcxproj.filters.in b/projects/langs_vs142.vcxproj.filters.in deleted file mode 100644 index 0d60ee9595..0000000000 --- a/projects/langs_vs142.vcxproj.filters.in +++ /dev/null @@ -1,12 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - -!!FILES!! - - diff --git a/projects/langs_vs142.vcxproj.in b/projects/langs_vs142.vcxproj.in deleted file mode 100644 index f24c7cad78..0000000000 --- a/projects/langs_vs142.vcxproj.in +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - v142 - - - - - - - - - - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - -!!FILES!! - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs80.vcproj b/projects/langs_vs80.vcproj deleted file mode 100644 index e683d57353..0000000000 --- a/projects/langs_vs80.vcproj +++ /dev/null @@ -1,895 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/langs_vs80.vcproj.in b/projects/langs_vs80.vcproj.in deleted file mode 100644 index 548a0b0179..0000000000 --- a/projects/langs_vs80.vcproj.in +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - diff --git a/projects/langs_vs90.vcproj b/projects/langs_vs90.vcproj deleted file mode 100644 index c1f028233e..0000000000 --- a/projects/langs_vs90.vcproj +++ /dev/null @@ -1,896 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/langs_vs90.vcproj.in b/projects/langs_vs90.vcproj.in deleted file mode 100644 index f03b231fc3..0000000000 --- a/projects/langs_vs90.vcproj.in +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - diff --git a/projects/openttd_vs100.sln b/projects/openttd_vs100.sln deleted file mode 100644 index a2ec939d30..0000000000 --- a/projects/openttd_vs100.sln +++ /dev/null @@ -1,91 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs100.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" - ProjectSection(ProjectDependencies) = postProject - {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35} - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs100.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs100.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs100.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs100.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs100.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" - ProjectSection(ProjectDependencies) = postProject - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs100.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs100.v11.suo b/projects/openttd_vs100.v11.suo deleted file mode 100644 index f71d75043a..0000000000 Binary files a/projects/openttd_vs100.v11.suo and /dev/null differ diff --git a/projects/openttd_vs100.vcxproj b/projects/openttd_vs100.vcxproj deleted file mode 100644 index 92eb059fb4..0000000000 --- a/projects/openttd_vs100.vcxproj +++ /dev/null @@ -1,1321 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - - - - Application - false - Unicode - - - Application - false - Unicode - true - - - Application - false - Unicode - - - Application - false - Unicode - true - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /MP /J %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - - - dpi_aware.manifest - - - - - .\Debug/openttd.tlb - - - - - /MP %(AdditionalOptions) - Disabled - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - EditAndContinue - FastCall - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - - - dpi_aware.manifest - - - - - X64 - .\Release/openttd.tlb - - - - - /MP /J %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - - - dpi_aware.manifest - - - - - X64 - .\Debug/openttd.tlb - - - - - /MP %(AdditionalOptions) - Disabled - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - - - dpi_aware.manifest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - - diff --git a/projects/openttd_vs100.vcxproj.filters b/projects/openttd_vs100.vcxproj.filters deleted file mode 100644 index b5100f9438..0000000000 --- a/projects/openttd_vs100.vcxproj.filters +++ /dev/null @@ -1,3098 +0,0 @@ - - - - - {c76ff9f1-1e62-46d8-8d55-000000000000} - - - {c76ff9f1-1e62-46d8-8d55-000000000001} - - - {c76ff9f1-1e62-46d8-8d55-000000000002} - - - {c76ff9f1-1e62-46d8-8d55-000000000003} - - - {c76ff9f1-1e62-46d8-8d55-000000000004} - - - {c76ff9f1-1e62-46d8-8d55-000000000005} - - - {c76ff9f1-1e62-46d8-8d55-000000000006} - - - {c76ff9f1-1e62-46d8-8d55-000000000007} - - - {c76ff9f1-1e62-46d8-8d55-000000000008} - - - {c76ff9f1-1e62-46d8-8d55-000000000009} - - - {c76ff9f1-1e62-46d8-8d55-000000000010} - - - {c76ff9f1-1e62-46d8-8d55-000000000011} - - - {c76ff9f1-1e62-46d8-8d55-000000000012} - - - {c76ff9f1-1e62-46d8-8d55-000000000013} - - - {c76ff9f1-1e62-46d8-8d55-000000000014} - - - {c76ff9f1-1e62-46d8-8d55-000000000015} - - - {c76ff9f1-1e62-46d8-8d55-000000000016} - - - {c76ff9f1-1e62-46d8-8d55-000000000017} - - - {c76ff9f1-1e62-46d8-8d55-000000000018} - - - {c76ff9f1-1e62-46d8-8d55-000000000019} - - - {c76ff9f1-1e62-46d8-8d55-000000000020} - - - {c76ff9f1-1e62-46d8-8d55-000000000021} - - - {c76ff9f1-1e62-46d8-8d55-000000000022} - - - {c76ff9f1-1e62-46d8-8d55-000000000023} - - - {c76ff9f1-1e62-46d8-8d55-000000000024} - - - {c76ff9f1-1e62-46d8-8d55-000000000025} - - - {c76ff9f1-1e62-46d8-8d55-000000000026} - - - {c76ff9f1-1e62-46d8-8d55-000000000027} - - - {c76ff9f1-1e62-46d8-8d55-000000000028} - - - {c76ff9f1-1e62-46d8-8d55-000000000029} - - - {c76ff9f1-1e62-46d8-8d55-000000000030} - - - {c76ff9f1-1e62-46d8-8d55-000000000031} - - - {c76ff9f1-1e62-46d8-8d55-000000000032} - - - {c76ff9f1-1e62-46d8-8d55-000000000033} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - CityMania files - - - CityMania files - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - MD5 - - - MD5 - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI API - - - Game API - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Drivers - - - Drivers - - - Drivers - - - Sprite loaders - - - Sprite loaders - - - Sprite loaders - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - NPF - - - NPF - - - NPF - - - NPF - - - NPF - - - NPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - Video - - - Video - - - Video - - - Video - - - Music - - - Music - - - Music - - - Sound - - - Sound - - - Sound - - - Windows files - - - Windows files - - - Windows files - - - Threading - - - Threading - - - - - - - diff --git a/projects/openttd_vs100.vcxproj.filters.in b/projects/openttd_vs100.vcxproj.filters.in deleted file mode 100644 index cda491072c..0000000000 --- a/projects/openttd_vs100.vcxproj.filters.in +++ /dev/null @@ -1,13 +0,0 @@ - - - -!!FILTERS!! - - -!!FILES!! - - - - - - diff --git a/projects/openttd_vs100.vcxproj.in b/projects/openttd_vs100.vcxproj.in deleted file mode 100644 index 63115e9a7f..0000000000 --- a/projects/openttd_vs100.vcxproj.in +++ /dev/null @@ -1,327 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - - - - Application - false - Unicode - - - Application - false - Unicode - true - - - Application - false - Unicode - - - Application - false - Unicode - true - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /MP /J %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - - - dpi_aware.manifest - - - - - .\Debug/openttd.tlb - - - - - /MP %(AdditionalOptions) - Disabled - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - EditAndContinue - FastCall - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - - - dpi_aware.manifest - - - - - X64 - .\Release/openttd.tlb - - - - - /MP /J %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - - - dpi_aware.manifest - - - - - X64 - .\Debug/openttd.tlb - - - - - /MP %(AdditionalOptions) - Disabled - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU_SORT;WITH_ICU_LAYOUT;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - - - dpi_aware.manifest - - - -!!FILES!! - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - - diff --git a/projects/openttd_vs100.vcxproj.my b/projects/openttd_vs100.vcxproj.my deleted file mode 100644 index ca7e457ca7..0000000000 --- a/projects/openttd_vs100.vcxproj.my +++ /dev/null @@ -1,1317 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - - - - Application - false - Unicode - v110 - - - Application - false - Unicode - true - v110_xp - - - Application - false - Unicode - v110 - - - Application - false - Unicode - true - v110 - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - C:\Users\user\Downloads\OpenTTD essentials\shared\include;$(IncludePath) - C:\Users\user\Downloads\OpenTTD essentials\win64\library;$(LibraryPath) - - - C:\Users\user\Downloads\OpenTTD essentials\shared\include;$(IncludePath) - C:\Users\user\Downloads\OpenTTD essentials\win32\library;$(LibraryPath) - - - - .\Release/openttd.tlb - - - - - /MP /J %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_XKEYCHECK_H;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - false - - - - - .\Debug/openttd.tlb - - - - - /MP %(AdditionalOptions) - Disabled - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - EditAndContinue - FastCall - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - - - - - X64 - .\Release/openttd.tlb - - - - - /MP /J %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;_XKEYCHECK_H;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - - - - - X64 - .\Debug/openttd.tlb - - - - - /MP %(AdditionalOptions) - Disabled - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_ICU;U_STATIC_IMPLEMENTATION;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;icuuc.lib;icuin.lib;icudt.lib;icule.lib;iculx.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - - \ No newline at end of file diff --git a/projects/openttd_vs100.vcxproj.user b/projects/openttd_vs100.vcxproj.user deleted file mode 100644 index 7cbb3216ad..0000000000 --- a/projects/openttd_vs100.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/projects/openttd_vs140.sln b/projects/openttd_vs140.sln deleted file mode 100644 index e2b7632f7e..0000000000 --- a/projects/openttd_vs140.sln +++ /dev/null @@ -1,103 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs140.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs140.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs140.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs140.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs140.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs140.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs140.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs140.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs140.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs140.vcxproj.filters.in b/projects/openttd_vs140.vcxproj.filters.in deleted file mode 100644 index 126bd61459..0000000000 --- a/projects/openttd_vs140.vcxproj.filters.in +++ /dev/null @@ -1,13 +0,0 @@ - - - -!!FILTERS!! - - -!!FILES!! - - - - - - diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in deleted file mode 100644 index f6096d9c0c..0000000000 --- a/projects/openttd_vs140.vcxproj.in +++ /dev/null @@ -1,374 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - x86-windows-static - x64-windows-static - - - - Application - false - Unicode - v140 - - - Application - false - Unicode - true - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - true - v140 - - - - - - - - - - - - - - - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - -!!FILES!! - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - {0817f629-589e-4a3b-b81a-8647bc571e35} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - {e12e77ca-c0f1-4ada-943f-4929274249d3} - false - - - - diff --git a/projects/openttd_vs141.sln b/projects/openttd_vs141.sln deleted file mode 100644 index 6e328ba764..0000000000 --- a/projects/openttd_vs141.sln +++ /dev/null @@ -1,103 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs141.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs141.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs141.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs141.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs141.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs141.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs141.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs141.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs141.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs141.vcxproj.filters.in b/projects/openttd_vs141.vcxproj.filters.in deleted file mode 100644 index 126bd61459..0000000000 --- a/projects/openttd_vs141.vcxproj.filters.in +++ /dev/null @@ -1,13 +0,0 @@ - - - -!!FILTERS!! - - -!!FILES!! - - - - - - diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in deleted file mode 100644 index edfff1c923..0000000000 --- a/projects/openttd_vs141.vcxproj.in +++ /dev/null @@ -1,374 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - x86-windows-static - x64-windows-static - - - - Application - false - Unicode - v141 - - - Application - false - Unicode - true - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - true - v141 - - - - - - - - - - - - - - - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - -!!FILES!! - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - {0817f629-589e-4a3b-b81a-8647bc571e35} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - {e12e77ca-c0f1-4ada-943f-4929274249d3} - false - - - - diff --git a/projects/openttd_vs142.sln b/projects/openttd_vs142.sln deleted file mode 100644 index 15cd430168..0000000000 --- a/projects/openttd_vs142.sln +++ /dev/null @@ -1,105 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28516.95 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs142.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs142.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs142.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs142.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs142.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs142.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs142.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs142.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs142.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 - {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 - {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {1DE4D2BD-DBC4-4304-907E-34994EEAA4C1} - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs142.vcxproj.filters.in b/projects/openttd_vs142.vcxproj.filters.in deleted file mode 100644 index 126bd61459..0000000000 --- a/projects/openttd_vs142.vcxproj.filters.in +++ /dev/null @@ -1,13 +0,0 @@ - - - -!!FILTERS!! - - -!!FILES!! - - - - - - diff --git a/projects/openttd_vs142.vcxproj.in b/projects/openttd_vs142.vcxproj.in deleted file mode 100644 index 5bd4b128ad..0000000000 --- a/projects/openttd_vs142.vcxproj.in +++ /dev/null @@ -1,374 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - x86-windows-static - x64-windows-static - - - - Application - false - Unicode - v142 - - - Application - false - Unicode - true - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - true - v142 - - - - - - - - - - - - - - - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - NativeMinimumRules.ruleset - - - NativeMinimumRules.ruleset - - - NativeMinimumRules.ruleset - - - NativeMinimumRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - 5.01 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - true - true - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) - Disabled - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - true - true - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - 5.02 - - - os_versions.manifest - PerMonitorHighDPIAware - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - -!!FILES!! - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - {0817f629-589e-4a3b-b81a-8647bc571e35} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - {e12e77ca-c0f1-4ada-943f-4929274249d3} - false - - - - diff --git a/projects/openttd_vs80.sln b/projects/openttd_vs80.sln deleted file mode 100644 index 9e6dd1219d..0000000000 --- a/projects/openttd_vs80.sln +++ /dev/null @@ -1,95 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual C++ Express 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs80.vcproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" - ProjectSection(ProjectDependencies) = postProject - {0F066B23-18DF-4284-8265-F4A5E7E3B966} = {0F066B23-18DF-4284-8265-F4A5E7E3B966} - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} = {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs80.vcproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs80.vcproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" - ProjectSection(ProjectDependencies) = postProject - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} = {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs80.vcproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs80.vcproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs80.vcproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" - ProjectSection(ProjectDependencies) = postProject - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings_gen", "settingsgen_vs80.vcproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj deleted file mode 100644 index 861580ab96..0000000000 --- a/projects/openttd_vs80.vcproj +++ /dev/null @@ -1,4561 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/openttd_vs80.vcproj.in b/projects/openttd_vs80.vcproj.in deleted file mode 100644 index 855cc3eadb..0000000000 --- a/projects/openttd_vs80.vcproj.in +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - - - - diff --git a/projects/openttd_vs80.vcproj.user b/projects/openttd_vs80.vcproj.user deleted file mode 100644 index 2d523a7cef..0000000000 --- a/projects/openttd_vs80.vcproj.user +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/projects/openttd_vs90.sln b/projects/openttd_vs90.sln deleted file mode 100644 index a33f315d30..0000000000 --- a/projects/openttd_vs90.sln +++ /dev/null @@ -1,95 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs90.vcproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" - ProjectSection(ProjectDependencies) = postProject - {0F066B23-18DF-4284-8265-F4A5E7E3B966} = {0F066B23-18DF-4284-8265-F4A5E7E3B966} - {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35} - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} = {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs90.vcproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs90.vcproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" - ProjectSection(ProjectDependencies) = postProject - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} = {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs90.vcproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs90.vcproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs90.vcproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" - ProjectSection(ProjectDependencies) = postProject - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs90.vcproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs90.vcproj b/projects/openttd_vs90.vcproj deleted file mode 100644 index 3ae773a771..0000000000 --- a/projects/openttd_vs90.vcproj +++ /dev/null @@ -1,4558 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/openttd_vs90.vcproj.in b/projects/openttd_vs90.vcproj.in deleted file mode 100644 index c58fa74417..0000000000 --- a/projects/openttd_vs90.vcproj.in +++ /dev/null @@ -1,443 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - - - - diff --git a/projects/openttd_vs90.vcproj.user b/projects/openttd_vs90.vcproj.user deleted file mode 100644 index b49492a503..0000000000 --- a/projects/openttd_vs90.vcproj.user +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/projects/os_versions.manifest b/projects/os_versions.manifest deleted file mode 100644 index c7905ee709..0000000000 --- a/projects/os_versions.manifest +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/projects/regression.bat b/projects/regression.bat deleted file mode 100644 index db373c371b..0000000000 --- a/projects/regression.bat +++ /dev/null @@ -1,6 +0,0 @@ -cd ..\bin -editbin /nologo /subsystem:console openttd.exe -cscript /nologo ai\regression\run.vbs -set RESULT=%ERRORLEVEL% -editbin /nologo /subsystem:windows openttd.exe -exit %RESULT% diff --git a/projects/regression_vs140.vcxproj b/projects/regression_vs140.vcxproj deleted file mode 100644 index b1c9f4930a..0000000000 --- a/projects/regression_vs140.vcxproj +++ /dev/null @@ -1,41 +0,0 @@ - - - - - Debug - Win32 - - - - {4712B013-437D-42CE-947F-DEBABA15261F} - regression - regression - - - - Makefile - v140 - - - - - - - - - - - - call regression.bat - call regression.bat - del ..\bin\tmp.regression - - - - {668328a0-b40e-4cdb-bd72-d0064424414a} - - - - - - diff --git a/projects/regression_vs141.vcxproj b/projects/regression_vs141.vcxproj deleted file mode 100644 index fda3f3312d..0000000000 --- a/projects/regression_vs141.vcxproj +++ /dev/null @@ -1,41 +0,0 @@ - - - - - Debug - Win32 - - - - {4712B013-437D-42CE-947F-DEBABA15261F} - regression - regression - - - - Makefile - v141 - - - - - - - - - - - - call regression.bat - call regression.bat - del ..\bin\tmp.regression - - - - {668328a0-b40e-4cdb-bd72-d0064424414a} - - - - - - diff --git a/projects/regression_vs142.vcxproj b/projects/regression_vs142.vcxproj deleted file mode 100644 index 3ddcc6f37a..0000000000 --- a/projects/regression_vs142.vcxproj +++ /dev/null @@ -1,41 +0,0 @@ - - - - - Debug - Win32 - - - - {4712B013-437D-42CE-947F-DEBABA15261F} - regression - regression - - - - Makefile - v142 - - - - - - - - - - - - call regression.bat - call regression.bat - del ..\bin\tmp.regression - - - - {668328a0-b40e-4cdb-bd72-d0064424414a} - - - - - - diff --git a/projects/settings_vs100.vcxproj b/projects/settings_vs100.vcxproj deleted file mode 100644 index 61b289757a..0000000000 --- a/projects/settings_vs100.vcxproj +++ /dev/null @@ -1,54 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - - - - - - - - - -..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - - - - - - - - - - - - - - - - - diff --git a/projects/settings_vs100.vcxproj.filters b/projects/settings_vs100.vcxproj.filters deleted file mode 100644 index 8caf9fa0a6..0000000000 --- a/projects/settings_vs100.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - - - - - diff --git a/projects/settings_vs100.vcxproj.filters.in b/projects/settings_vs100.vcxproj.filters.in deleted file mode 100644 index 08f90670d2..0000000000 --- a/projects/settings_vs100.vcxproj.filters.in +++ /dev/null @@ -1,15 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - -!!FILES!! - - - - - - diff --git a/projects/settings_vs100.vcxproj.in b/projects/settings_vs100.vcxproj.in deleted file mode 100644 index 46064b53cf..0000000000 --- a/projects/settings_vs100.vcxproj.in +++ /dev/null @@ -1,48 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - - - - - - - - - -!!FILTERS!! - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - -!!FILES!! - - - - - - - - - diff --git a/projects/settings_vs100.vcxproj.user b/projects/settings_vs100.vcxproj.user deleted file mode 100644 index 7cbb3216ad..0000000000 --- a/projects/settings_vs100.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/projects/settings_vs140.vcxproj b/projects/settings_vs140.vcxproj deleted file mode 100644 index b5f5151821..0000000000 --- a/projects/settings_vs140.vcxproj +++ /dev/null @@ -1,58 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v140 - - - - - - - - - ..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - - - - - - - - - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs140.vcxproj.filters b/projects/settings_vs140.vcxproj.filters deleted file mode 100644 index 8caf9fa0a6..0000000000 --- a/projects/settings_vs140.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - - - - - diff --git a/projects/settings_vs140.vcxproj.filters.in b/projects/settings_vs140.vcxproj.filters.in deleted file mode 100644 index 08f90670d2..0000000000 --- a/projects/settings_vs140.vcxproj.filters.in +++ /dev/null @@ -1,15 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - -!!FILES!! - - - - - - diff --git a/projects/settings_vs140.vcxproj.in b/projects/settings_vs140.vcxproj.in deleted file mode 100644 index dcbbfbd352..0000000000 --- a/projects/settings_vs140.vcxproj.in +++ /dev/null @@ -1,52 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v140 - - - - - - - - - !!FILTERS!! - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - -!!FILES!! - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs141.vcxproj b/projects/settings_vs141.vcxproj deleted file mode 100644 index b3f6871945..0000000000 --- a/projects/settings_vs141.vcxproj +++ /dev/null @@ -1,58 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v141 - - - - - - - - - ..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - - - - - - - - - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs141.vcxproj.filters b/projects/settings_vs141.vcxproj.filters deleted file mode 100644 index 8caf9fa0a6..0000000000 --- a/projects/settings_vs141.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - - - - - diff --git a/projects/settings_vs141.vcxproj.filters.in b/projects/settings_vs141.vcxproj.filters.in deleted file mode 100644 index 08f90670d2..0000000000 --- a/projects/settings_vs141.vcxproj.filters.in +++ /dev/null @@ -1,15 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - -!!FILES!! - - - - - - diff --git a/projects/settings_vs141.vcxproj.in b/projects/settings_vs141.vcxproj.in deleted file mode 100644 index 1701c99f5f..0000000000 --- a/projects/settings_vs141.vcxproj.in +++ /dev/null @@ -1,52 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v141 - - - - - - - - - !!FILTERS!! - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - -!!FILES!! - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs142.vcxproj b/projects/settings_vs142.vcxproj deleted file mode 100644 index e0ed933091..0000000000 --- a/projects/settings_vs142.vcxproj +++ /dev/null @@ -1,58 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v142 - - - - - - - - - ..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - - - - - - - - - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs142.vcxproj.filters b/projects/settings_vs142.vcxproj.filters deleted file mode 100644 index 8caf9fa0a6..0000000000 --- a/projects/settings_vs142.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - - - - - diff --git a/projects/settings_vs142.vcxproj.filters.in b/projects/settings_vs142.vcxproj.filters.in deleted file mode 100644 index 08f90670d2..0000000000 --- a/projects/settings_vs142.vcxproj.filters.in +++ /dev/null @@ -1,15 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - -!!FILES!! - - - - - - diff --git a/projects/settings_vs142.vcxproj.in b/projects/settings_vs142.vcxproj.in deleted file mode 100644 index 4463c573d7..0000000000 --- a/projects/settings_vs142.vcxproj.in +++ /dev/null @@ -1,52 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - v142 - - - - - - - - - !!FILTERS!! - - - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - -!!FILES!! - - - - - - - - {e9548de9-f089-49b7-93a6-30be2cc311c7} - false - - - - - - diff --git a/projects/settings_vs80.vcproj b/projects/settings_vs80.vcproj deleted file mode 100644 index 0084dcbc57..0000000000 --- a/projects/settings_vs80.vcproj +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settings_vs80.vcproj.in b/projects/settings_vs80.vcproj.in deleted file mode 100644 index a0f10fb096..0000000000 --- a/projects/settings_vs80.vcproj.in +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - - - - - diff --git a/projects/settings_vs90.vcproj b/projects/settings_vs90.vcproj deleted file mode 100644 index 4361e8df54..0000000000 --- a/projects/settings_vs90.vcproj +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settings_vs90.vcproj.in b/projects/settings_vs90.vcproj.in deleted file mode 100644 index a342e2b327..0000000000 --- a/projects/settings_vs90.vcproj.in +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - - - - - diff --git a/projects/settingsgen_vs100.vcxproj b/projects/settingsgen_vs100.vcxproj deleted file mode 100644 index 30454d81f8..0000000000 --- a/projects/settingsgen_vs100.vcxproj +++ /dev/null @@ -1,81 +0,0 @@ - - - - - Debug - Win32 - - - - settingsgen - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - settings - - - - Application - MultiByte - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\ - ..\objs\settings\ - settings_gen - - - - - - - - %(Inputs) - - - MinSpace - Size - SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - All - $(IntDir)$(TargetName).pdb - Level3 - true - ProgramDatabase - MultiThreadedDebug - - - $(OutDir)settings_gen.exe - true - false - - - Console - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/projects/settingsgen_vs100.vcxproj.filters b/projects/settingsgen_vs100.vcxproj.filters deleted file mode 100644 index c8afe0c8ed..0000000000 --- a/projects/settingsgen_vs100.vcxproj.filters +++ /dev/null @@ -1,32 +0,0 @@ - - - - - {a4678737-b3b3-4be5-9db1-fa6ccd164c59} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - diff --git a/projects/settingsgen_vs140.vcxproj b/projects/settingsgen_vs140.vcxproj deleted file mode 100644 index 12ce280f3a..0000000000 --- a/projects/settingsgen_vs140.vcxproj +++ /dev/null @@ -1,83 +0,0 @@ - - - - - Debug - Win32 - - - - settingsgen - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - settings - - - - Application - MultiByte - v140 - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\ - ..\objs\settings\ - settings_gen - - - - - - - - %(Inputs) - - - MinSpace - Size - SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - All - $(IntDir)$(TargetName).pdb - Level3 - true - ProgramDatabase - MultiThreadedDebug - - - $(OutDir)settings_gen.exe - true - false - - - Console - 5.01 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settingsgen_vs140.vcxproj.filters b/projects/settingsgen_vs140.vcxproj.filters deleted file mode 100644 index c8afe0c8ed..0000000000 --- a/projects/settingsgen_vs140.vcxproj.filters +++ /dev/null @@ -1,32 +0,0 @@ - - - - - {a4678737-b3b3-4be5-9db1-fa6ccd164c59} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - diff --git a/projects/settingsgen_vs141.vcxproj b/projects/settingsgen_vs141.vcxproj deleted file mode 100644 index 2b356f2eab..0000000000 --- a/projects/settingsgen_vs141.vcxproj +++ /dev/null @@ -1,83 +0,0 @@ - - - - - Debug - Win32 - - - - settingsgen - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - settings - - - - Application - MultiByte - v141 - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\ - ..\objs\settings\ - settings_gen - - - - - - - - %(Inputs) - - - MinSpace - Size - SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - All - $(IntDir)$(TargetName).pdb - Level3 - true - ProgramDatabase - MultiThreadedDebug - - - $(OutDir)settings_gen.exe - true - false - - - Console - 5.01 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settingsgen_vs141.vcxproj.filters b/projects/settingsgen_vs141.vcxproj.filters deleted file mode 100644 index c8afe0c8ed..0000000000 --- a/projects/settingsgen_vs141.vcxproj.filters +++ /dev/null @@ -1,32 +0,0 @@ - - - - - {a4678737-b3b3-4be5-9db1-fa6ccd164c59} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - diff --git a/projects/settingsgen_vs142.vcxproj b/projects/settingsgen_vs142.vcxproj deleted file mode 100644 index 23a4e18562..0000000000 --- a/projects/settingsgen_vs142.vcxproj +++ /dev/null @@ -1,83 +0,0 @@ - - - - - Debug - Win32 - - - - settingsgen - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - settings - - - - Application - MultiByte - v142 - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\ - ..\objs\settings\ - settings_gen - - - - - - - - %(Inputs) - - - MinSpace - Size - SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - All - $(IntDir)$(TargetName).pdb - Level3 - true - ProgramDatabase - MultiThreadedDebug - - - $(OutDir)settings_gen.exe - true - false - - - Console - 5.01 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settingsgen_vs142.vcxproj.filters b/projects/settingsgen_vs142.vcxproj.filters deleted file mode 100644 index c8afe0c8ed..0000000000 --- a/projects/settingsgen_vs142.vcxproj.filters +++ /dev/null @@ -1,32 +0,0 @@ - - - - - {a4678737-b3b3-4be5-9db1-fa6ccd164c59} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - diff --git a/projects/settingsgen_vs80.vcproj b/projects/settingsgen_vs80.vcproj deleted file mode 100644 index 7568ce9748..0000000000 --- a/projects/settingsgen_vs80.vcproj +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settingsgen_vs90.vcproj b/projects/settingsgen_vs90.vcproj deleted file mode 100644 index 015ddd2af5..0000000000 --- a/projects/settingsgen_vs90.vcproj +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs100.vcxproj b/projects/strgen_vs100.vcxproj deleted file mode 100644 index 7a43b4debb..0000000000 --- a/projects/strgen_vs100.vcxproj +++ /dev/null @@ -1,94 +0,0 @@ - - - - - Debug - Win32 - - - - strgen - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - strgen - - - - Application - false - MultiByte - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)..\objs\strgen\ - $(SolutionDir)..\objs\strgen\ - false - AllRules.ruleset - - - - - - .\Debug/strgen.tlb - - - - - /MP %(AdditionalOptions) - MinSpace - Size - STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDebug - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - true - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x041d - - - true - true - $(IntDir)strgen.pdb - Console - false - - - MachineX86 - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs100.vcxproj.filters b/projects/strgen_vs100.vcxproj.filters deleted file mode 100644 index 58864ee691..0000000000 --- a/projects/strgen_vs100.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {5894294c-d4dc-41f0-be31-e56cff4e0405} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - - - diff --git a/projects/strgen_vs100.vcxproj.user b/projects/strgen_vs100.vcxproj.user deleted file mode 100644 index 7cbb3216ad..0000000000 --- a/projects/strgen_vs100.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/projects/strgen_vs140.vcxproj b/projects/strgen_vs140.vcxproj deleted file mode 100644 index b972d873eb..0000000000 --- a/projects/strgen_vs140.vcxproj +++ /dev/null @@ -1,95 +0,0 @@ - - - - - Debug - Win32 - - - - strgen - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - strgen - - - - Application - false - MultiByte - v140 - - - - - - - - - - $(SolutionDir)..\objs\strgen\ - $(SolutionDir)..\objs\strgen\ - false - AllRules.ruleset - - - - - - .\Debug/strgen.tlb - - - - - /MP %(AdditionalOptions) - MinSpace - Size - STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDebug - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - true - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x041d - - - true - true - $(IntDir)strgen.pdb - Console - false - - - MachineX86 - 5.01 - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs140.vcxproj.filters b/projects/strgen_vs140.vcxproj.filters deleted file mode 100644 index 58864ee691..0000000000 --- a/projects/strgen_vs140.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {5894294c-d4dc-41f0-be31-e56cff4e0405} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - - - diff --git a/projects/strgen_vs141.vcxproj b/projects/strgen_vs141.vcxproj deleted file mode 100644 index addc6f10a5..0000000000 --- a/projects/strgen_vs141.vcxproj +++ /dev/null @@ -1,95 +0,0 @@ - - - - - Debug - Win32 - - - - strgen - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - strgen - - - - Application - false - MultiByte - v141 - - - - - - - - - - $(SolutionDir)..\objs\strgen\ - $(SolutionDir)..\objs\strgen\ - false - AllRules.ruleset - - - - - - .\Debug/strgen.tlb - - - - - /MP %(AdditionalOptions) - MinSpace - Size - STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDebug - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - true - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x041d - - - true - true - $(IntDir)strgen.pdb - Console - false - - - MachineX86 - 5.01 - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs141.vcxproj.filters b/projects/strgen_vs141.vcxproj.filters deleted file mode 100644 index 58864ee691..0000000000 --- a/projects/strgen_vs141.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {5894294c-d4dc-41f0-be31-e56cff4e0405} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - - - diff --git a/projects/strgen_vs142.vcxproj b/projects/strgen_vs142.vcxproj deleted file mode 100644 index 554109b045..0000000000 --- a/projects/strgen_vs142.vcxproj +++ /dev/null @@ -1,95 +0,0 @@ - - - - - Debug - Win32 - - - - strgen - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - strgen - - - - Application - false - MultiByte - v142 - - - - - - - - - - $(SolutionDir)..\objs\strgen\ - $(SolutionDir)..\objs\strgen\ - false - NativeMinimumRules.ruleset - - - - - - .\Debug/strgen.tlb - - - - - /MP %(AdditionalOptions) - MinSpace - Size - STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDebug - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - true - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x041d - - - true - true - $(IntDir)strgen.pdb - Console - false - - - MachineX86 - 5.01 - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs142.vcxproj.filters b/projects/strgen_vs142.vcxproj.filters deleted file mode 100644 index 58864ee691..0000000000 --- a/projects/strgen_vs142.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {5894294c-d4dc-41f0-be31-e56cff4e0405} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - - - diff --git a/projects/strgen_vs80.vcproj b/projects/strgen_vs80.vcproj deleted file mode 100644 index 4450279303..0000000000 --- a/projects/strgen_vs80.vcproj +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs90.vcproj b/projects/strgen_vs90.vcproj deleted file mode 100644 index ca194e078f..0000000000 --- a/projects/strgen_vs90.vcproj +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/version_vs100.vcxproj b/projects/version_vs100.vcxproj deleted file mode 100644 index 008e6dd665..0000000000 --- a/projects/version_vs100.vcxproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - Win32 - - - - version - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - version - - - - Makefile - MultiByte - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)..\objs\version\ - $(SolutionDir)..\objs\version\ - cscript "$(ProjectDir)/determineversion.vbs" - cscript "$(ProjectDir)/determineversion.vbs" - ..\src\rev.cpp - del ..\src\rev.cpp - - - - - - - - - \ No newline at end of file diff --git a/projects/version_vs140.vcxproj b/projects/version_vs140.vcxproj deleted file mode 100644 index 6e71a88201..0000000000 --- a/projects/version_vs140.vcxproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - Win32 - - - - version - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - version - - - - Makefile - MultiByte - v140 - - - - - - - - - - $(SolutionDir)..\objs\version\ - $(SolutionDir)..\objs\version\ - cscript "$(ProjectDir)/determineversion.vbs" - cscript "$(ProjectDir)/determineversion.vbs" - ..\src\rev.cpp - del ..\src\rev.cpp - - - - - - - - - diff --git a/projects/version_vs141.vcxproj b/projects/version_vs141.vcxproj deleted file mode 100644 index 5d8ee8c74f..0000000000 --- a/projects/version_vs141.vcxproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - Win32 - - - - version - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - version - - - - Makefile - MultiByte - v141 - - - - - - - - - - $(SolutionDir)..\objs\version\ - $(SolutionDir)..\objs\version\ - cscript "$(ProjectDir)/determineversion.vbs" - cscript "$(ProjectDir)/determineversion.vbs" - ..\src\rev.cpp - del ..\src\rev.cpp - - - - - - - - - diff --git a/projects/version_vs142.vcxproj b/projects/version_vs142.vcxproj deleted file mode 100644 index 31971e35c9..0000000000 --- a/projects/version_vs142.vcxproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - Win32 - - - - version - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - version - - - - Makefile - MultiByte - v142 - - - - - - - - - - $(SolutionDir)..\objs\version\ - $(SolutionDir)..\objs\version\ - cscript "$(ProjectDir)/determineversion.vbs" - cscript "$(ProjectDir)/determineversion.vbs" - ..\src\rev.cpp - del ..\src\rev.cpp - - - - - - - - - diff --git a/projects/version_vs80.vcproj b/projects/version_vs80.vcproj deleted file mode 100644 index 4b1660b69d..0000000000 --- a/projects/version_vs80.vcproj +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/version_vs90.vcproj b/projects/version_vs90.vcproj deleted file mode 100644 index 3c3d58a692..0000000000 --- a/projects/version_vs90.vcproj +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bin/ai/regression/regression.cfg b/regression/regression.cfg similarity index 100% rename from bin/ai/regression/regression.cfg rename to regression/regression.cfg diff --git a/bin/ai/regression/regression_info.nut b/regression/regression/info.nut similarity index 85% rename from bin/ai/regression/regression_info.nut rename to regression/regression/info.nut index 020b186faf..a3126121ee 100644 --- a/bin/ai/regression/regression_info.nut +++ b/regression/regression/info.nut @@ -4,9 +4,10 @@ class Regression extends AIInfo { function GetShortName() { return "REGR"; } function GetDescription() { return "This runs regression-tests on some commands. On the same map the result should always be the same."; } function GetVersion() { return 1; } - function GetAPIVersion() { return "1.10"; } + function GetAPIVersion() { return "1.11"; } function GetDate() { return "2007-03-18"; } function CreateInstance() { return "Regression"; } + function UseAsRandomAI() { return false; } } RegisterAI(Regression()); diff --git a/bin/ai/regression/tst_regression/main.nut b/regression/regression/main.nut similarity index 98% rename from bin/ai/regression/tst_regression/main.nut rename to regression/regression/main.nut index 65742d71b3..ffb0856dd6 100644 --- a/bin/ai/regression/tst_regression/main.nut +++ b/regression/regression/main.nut @@ -332,7 +332,8 @@ function Regression::Cargo() for (local i = -1; i < 15; i++) { print(" Cargo " + i); print(" IsValidCargo(): " + AICargo.IsValidCargo(i)); - print(" GetCargoLabel(): '" + AICargo.GetCargoLabel(i)+ "'"); + print(" GetName(): '" + AICargo.GetName(i) + "'"); + print(" GetCargoLabel(): '" + AICargo.GetCargoLabel(i) + "'"); print(" IsFreight(): " + AICargo.IsFreight(i)); print(" HasCargoClass(): " + AICargo.HasCargoClass(i, AICargo.CC_PASSENGERS)); print(" GetTownEffect(): " + AICargo.GetTownEffect(i)); @@ -426,30 +427,31 @@ function Regression::Company() print(" GetCompanyHQ(): " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF)); print(" BuildCompanyHQ(): " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(129, 129))); print(" GetCompanyHQ(): " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF)); - print(" BuildCompanyHQ(): " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(129, 128))); + print(" BuildCompanyHQ(): " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(239, 76))); print(" GetLastErrorString(): " + AIError.GetLastErrorString()); - print(" GetAutoRenewStatus(); " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); - print(" SetAutoRenewStatus(true); " + AICompany.SetAutoRenewStatus(true)); - print(" GetAutoRenewStatus(); " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); - print(" SetAutoRenewStatus(true); " + AICompany.SetAutoRenewStatus(true)); - print(" SetAutoRenewStatus(false); " + AICompany.SetAutoRenewStatus(false)); - print(" GetAutoRenewMonths(); " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF)); - print(" SetAutoRenewMonths(-12); " + AICompany.SetAutoRenewMonths(-12)); - print(" GetAutoRenewMonths(); " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF)); - print(" SetAutoRenewMonths(-12); " + AICompany.SetAutoRenewMonths(-12)); - print(" SetAutoRenewMonths(6); " + AICompany.SetAutoRenewMonths(6)); - print(" GetAutoRenewMoney(); " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF)); - print(" SetAutoRenewMoney(200000); " + AICompany.SetAutoRenewMoney(200000)); - print(" GetAutoRenewMoney(); " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF)); - print(" SetAutoRenewMoney(200000); " + AICompany.SetAutoRenewMoney(200000)); - print(" SetAutoRenewMoney(100000); " + AICompany.SetAutoRenewMoney(100000)); + print(" GetAutoRenewStatus(): " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); + print(" SetAutoRenewStatus(true): " + AICompany.SetAutoRenewStatus(true)); + print(" GetAutoRenewStatus(): " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); + print(" SetAutoRenewStatus(true): " + AICompany.SetAutoRenewStatus(true)); + print(" SetAutoRenewStatus(false): " + AICompany.SetAutoRenewStatus(false)); + print(" GetAutoRenewStatus(): " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF)); + print(" GetAutoRenewMonths(): " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF)); + print(" SetAutoRenewMonths(-12): " + AICompany.SetAutoRenewMonths(-12)); + print(" GetAutoRenewMonths(): " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF)); + print(" SetAutoRenewMonths(-12): " + AICompany.SetAutoRenewMonths(-12)); + print(" SetAutoRenewMonths(6): " + AICompany.SetAutoRenewMonths(6)); + print(" GetAutoRenewMoney(): " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF)); + print(" SetAutoRenewMoney(200000): " + AICompany.SetAutoRenewMoney(200000)); + print(" GetAutoRenewMoney(): " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF)); + print(" SetAutoRenewMoney(200000): " + AICompany.SetAutoRenewMoney(200000)); + print(" SetAutoRenewMoney(100000): " + AICompany.SetAutoRenewMoney(100000)); for (local i = -1; i <= AICompany.EARLIEST_QUARTER; i++) { print(" Quarter: " + i); - print(" GetQuarterlyIncome(); " + AICompany.GetQuarterlyIncome(AICompany.COMPANY_SELF, i)); - print(" GetQuarterlyExpenses(); " + AICompany.GetQuarterlyExpenses(AICompany.COMPANY_SELF, i)); - print(" GetQuarterlyCargoDelivered(); " + AICompany.GetQuarterlyCargoDelivered(AICompany.COMPANY_SELF, i)); - print(" GetQuarterlyPerformanceRating(); " + AICompany.GetQuarterlyPerformanceRating(AICompany.COMPANY_SELF, i)); - print(" GetQuarterlyCompanyValue(); " + AICompany.GetQuarterlyCompanyValue(AICompany.COMPANY_SELF, i)); + print(" GetQuarterlyIncome(): " + AICompany.GetQuarterlyIncome(AICompany.COMPANY_SELF, i)); + print(" GetQuarterlyExpenses(): " + AICompany.GetQuarterlyExpenses(AICompany.COMPANY_SELF, i)); + print(" GetQuarterlyCargoDelivered(): " + AICompany.GetQuarterlyCargoDelivered(AICompany.COMPANY_SELF, i)); + print(" GetQuarterlyPerformanceRating(): " + AICompany.GetQuarterlyPerformanceRating(AICompany.COMPANY_SELF, i)); + print(" GetQuarterlyCompanyValue(): " + AICompany.GetQuarterlyCompanyValue(AICompany.COMPANY_SELF, i)); } } diff --git a/bin/ai/regression/tst_regression/require.nut b/regression/regression/require.nut similarity index 100% rename from bin/ai/regression/tst_regression/require.nut rename to regression/regression/require.nut diff --git a/bin/ai/regression/tst_regression/result.txt b/regression/regression/result.txt similarity index 97% rename from bin/ai/regression/tst_regression/result.txt rename to regression/regression/result.txt index 4cb74aaa54..f2d42cc86f 100644 --- a/bin/ai/regression/tst_regression/result.txt +++ b/regression/regression/result.txt @@ -594,7 +594,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetBankBalance(): 100000 GetName(): (null : 0x00000000) GetLoanAmount(): 100000 - GetMaxLoanAmount(): 500000 + GetMaxLoanAmount(): 2000000000 GetLoanInterval(): 10000 SetLoanAmount(1): false SetLoanAmount(100): false @@ -606,8 +606,8 @@ ERROR: IsEnd() is invalid as Begin() is never called GetBankBalance(): 40000 GetLoanAmount(): 40000 SetLoanAmount(10000): true - GetBankBalance(): 500000 - GetLoanAmount(): 500000 + GetBankBalance(): 2000000000 + GetLoanAmount(): 2000000000 GetCompanyHQ(): -1 BuildCompanyHQ(): true GetCompanyHQ(): 33151 @@ -615,177 +615,178 @@ ERROR: IsEnd() is invalid as Begin() is never called GetCompanyHQ(): 33153 BuildCompanyHQ(): false GetLastErrorString(): ERR_AREA_NOT_CLEAR - GetAutoRenewStatus(); false - SetAutoRenewStatus(true); true - GetAutoRenewStatus(); true - SetAutoRenewStatus(true); true - SetAutoRenewStatus(false); true - GetAutoRenewMonths(); 6 - SetAutoRenewMonths(-12); true - GetAutoRenewMonths(); -12 - SetAutoRenewMonths(-12); true - SetAutoRenewMonths(6); true - GetAutoRenewMoney(); 100000 - SetAutoRenewMoney(200000); true - GetAutoRenewMoney(); 200000 - SetAutoRenewMoney(200000); true - SetAutoRenewMoney(100000); true + GetAutoRenewStatus(): true + SetAutoRenewStatus(true): true + GetAutoRenewStatus(): true + SetAutoRenewStatus(true): true + SetAutoRenewStatus(false): true + GetAutoRenewStatus(): false + GetAutoRenewMonths(): 6 + SetAutoRenewMonths(-12): true + GetAutoRenewMonths(): -12 + SetAutoRenewMonths(-12): true + SetAutoRenewMonths(6): true + GetAutoRenewMoney(): 100000 + SetAutoRenewMoney(200000): true + GetAutoRenewMoney(): 200000 + SetAutoRenewMoney(200000): true + SetAutoRenewMoney(100000): true Quarter: -1 - GetQuarterlyIncome(); -1 - GetQuarterlyExpenses(); -1 - GetQuarterlyCargoDelivered(); -1 - GetQuarterlyPerformanceRating(); -1 - GetQuarterlyCompanyValue(); -1 + GetQuarterlyIncome(): -1 + GetQuarterlyExpenses(): -1 + GetQuarterlyCargoDelivered(): -1 + GetQuarterlyPerformanceRating(): -1 + GetQuarterlyCompanyValue(): -1 Quarter: 0 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); -210 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); -1 - GetQuarterlyCompanyValue(); 1 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): -210 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): -1 + GetQuarterlyCompanyValue(): 1 Quarter: 1 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 2 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 3 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 4 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 5 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 6 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 7 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 8 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 9 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 10 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 11 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 12 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 13 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 14 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 15 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 16 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 17 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 18 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 19 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 20 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 21 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 22 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 23 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 Quarter: 24 - GetQuarterlyIncome(); 0 - GetQuarterlyExpenses(); 0 - GetQuarterlyCargoDelivered(); 0 - GetQuarterlyPerformanceRating(); 0 - GetQuarterlyCompanyValue(); 0 + GetQuarterlyIncome(): 0 + GetQuarterlyExpenses(): 0 + GetQuarterlyCargoDelivered(): 0 + GetQuarterlyPerformanceRating(): 0 + GetQuarterlyCompanyValue(): 0 --AIAirport-- IsHangarTile(): false @@ -847,7 +848,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetAirportWidth(9): -1 GetAirportHeight(9): -1 GetAirportCoverageRadius(9): -1 - GetBankBalance(): 499790 + GetBankBalance(): 1999999790 GetPrice(): 5400 BuildAirport(): true IsHangarTile(): false @@ -857,11 +858,11 @@ ERROR: IsEnd() is invalid as Begin() is never called IsHangarTile(): true IsAirportTile(): true GetAirportType(): 0 - GetBankBalance(): 489890 + GetBankBalance(): 1999989890 RemoveAirport(): true IsHangarTile(): false IsAirportTile(): false - GetBankBalance(): 489626 + GetBankBalance(): 1999989626 BuildAirport(): true --Bridge-- @@ -1108,6 +1109,7 @@ ERROR: IsEnd() is invalid as Begin() is never called --AICargo-- Cargo -1 IsValidCargo(): false + GetName(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)' IsFreight(): false HasCargoClass(): false @@ -1119,6 +1121,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 0 IsValidCargo(): true + GetName(): 'Passengers' GetCargoLabel(): 'PASS' IsFreight(): false HasCargoClass(): true @@ -1130,6 +1133,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 0 Cargo 1 IsValidCargo(): true + GetName(): 'Coal' GetCargoLabel(): 'COAL' IsFreight(): true HasCargoClass(): false @@ -1141,6 +1145,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 2 IsValidCargo(): true + GetName(): 'Mail' GetCargoLabel(): 'MAIL' IsFreight(): false HasCargoClass(): false @@ -1152,6 +1157,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 3 IsValidCargo(): true + GetName(): 'Oil' GetCargoLabel(): 'OIL_' IsFreight(): true HasCargoClass(): false @@ -1163,6 +1169,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 4 IsValidCargo(): true + GetName(): 'Livestock' GetCargoLabel(): 'LVST' IsFreight(): true HasCargoClass(): false @@ -1174,6 +1181,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 5 IsValidCargo(): true + GetName(): 'Goods' GetCargoLabel(): 'GOOD' IsFreight(): true HasCargoClass(): false @@ -1185,6 +1193,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 6 IsValidCargo(): true + GetName(): 'Grain' GetCargoLabel(): 'GRAI' IsFreight(): true HasCargoClass(): false @@ -1196,6 +1205,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 7 IsValidCargo(): true + GetName(): 'Wood' GetCargoLabel(): 'WOOD' IsFreight(): true HasCargoClass(): false @@ -1207,6 +1217,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 8 IsValidCargo(): true + GetName(): 'Iron Ore' GetCargoLabel(): 'IORE' IsFreight(): true HasCargoClass(): false @@ -1218,6 +1229,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 9 IsValidCargo(): true + GetName(): 'Steel' GetCargoLabel(): 'STEL' IsFreight(): true HasCargoClass(): false @@ -1229,6 +1241,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 10 IsValidCargo(): true + GetName(): 'Valuables' GetCargoLabel(): 'VALU' IsFreight(): true HasCargoClass(): false @@ -1240,6 +1253,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 11 IsValidCargo(): false + GetName(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)' IsFreight(): false HasCargoClass(): false @@ -1251,6 +1265,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 12 IsValidCargo(): false + GetName(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)' IsFreight(): false HasCargoClass(): false @@ -1262,6 +1277,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 13 IsValidCargo(): false + GetName(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)' IsFreight(): false HasCargoClass(): false @@ -1273,6 +1289,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRoadVehicleTypeForCargo(): 1 Cargo 14 IsValidCargo(): false + GetName(): '(null : 0x00000000)' GetCargoLabel(): '(null : 0x00000000)' IsFreight(): false HasCargoClass(): false @@ -7313,7 +7330,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsBuoyTile(): false IsLockTile(): false IsCanalTile(): false - GetBankBalance(): 479664 + GetBankBalance(): 1999979304 BuildWaterDepot(): true BuildDock(): true BuildBuoy(): true @@ -7326,7 +7343,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsBuoyTile(): true IsLockTile(): true IsCanalTile(): true - GetBankBalance(): 465070 + GetBankBalance(): 1999964680 --AIWaypointList(BUOY)-- Count(): 1 @@ -7345,7 +7362,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsBuoyTile(): false IsLockTile(): false IsCanalTile(): false - GetBankBalance(): 459675 + GetBankBalance(): 1999959285 BuildWaterDepot(): true BuildDock(): true @@ -9074,7 +9091,7 @@ ERROR: IsEnd() is invalid as Begin() is never called --Accounting-- GetCosts(): -5947 Should be: -5947 - GetName(): Road Vehicle 1 + GetName(): Road Vehicle #1 SetName(): true GetName(): MyVehicleName CloneVehicle(): 13 diff --git a/bin/ai/regression/empty.sav b/regression/regression/test.sav similarity index 100% rename from bin/ai/regression/empty.sav rename to regression/regression/test.sav diff --git a/regression/stationlist/info.nut b/regression/stationlist/info.nut new file mode 100644 index 0000000000..9b7c8febc7 --- /dev/null +++ b/regression/stationlist/info.nut @@ -0,0 +1,14 @@ +class StationList extends AIInfo { + function GetAuthor() { return "OpenTTD NoAI Developers Team"; } + function GetName() { return "StationList"; } + function GetShortName() { return "REGS"; } + function GetDescription() { return "This runs stationlist-tests on some commands. On the same map the result should always be the same."; } + function GetVersion() { return 1; } + function GetAPIVersion() { return "1.11"; } + function GetDate() { return "2007-03-18"; } + function CreateInstance() { return "StationList"; } + function UseAsRandomAI() { return false; } +} + +RegisterAI(StationList()); + diff --git a/bin/ai/regression/tst_stationlist/main.nut b/regression/stationlist/main.nut similarity index 89% rename from bin/ai/regression/tst_stationlist/main.nut rename to regression/stationlist/main.nut index 2f00ea1d6f..b639c54049 100644 --- a/bin/ai/regression/tst_stationlist/main.nut +++ b/regression/stationlist/main.nut @@ -1,9 +1,9 @@ -class Regression extends AIController { +class StationList extends AIController { function Start(); }; -function Regression::StationList() +function StationList::StationList() { local list = AIStationList(AIStation.STATION_BUS_STOP + AIStation.STATION_TRUCK_STOP); @@ -27,7 +27,7 @@ function Regression::StationList() } }; -function Regression::StationList_Cargo() +function StationList::StationList_Cargo() { print(""); print("--StationList_Cargo--"); @@ -44,7 +44,7 @@ function Regression::StationList_Cargo() } }; -function Regression::StationList_CargoPlanned() +function StationList::StationList_CargoPlanned() { print(""); print("--StationList_CargoPlanned--"); @@ -58,7 +58,7 @@ function Regression::StationList_CargoPlanned() } }; -function Regression::StationList_CargoPlannedByFrom() +function StationList::StationList_CargoPlannedByFrom() { print(""); print("--StationList_CargoPlannedByFrom--"); @@ -68,7 +68,7 @@ function Regression::StationList_CargoPlannedByFrom() } }; -function Regression::StationList_CargoPlannedByVia() +function StationList::StationList_CargoPlannedByVia() { print(""); print("--StationList_CargoPlannedByVia--"); @@ -78,7 +78,7 @@ function Regression::StationList_CargoPlannedByVia() } }; -function Regression::StationList_CargoPlannedViaByFrom() +function StationList::StationList_CargoPlannedViaByFrom() { print(""); print("--StationList_CargoPlannedViaByFrom--"); @@ -88,7 +88,7 @@ function Regression::StationList_CargoPlannedViaByFrom() } }; -function Regression::StationList_CargoPlannedFromByVia() +function StationList::StationList_CargoPlannedFromByVia() { print(""); print("--StationList_CargoPlannedFromByVia--"); @@ -98,7 +98,7 @@ function Regression::StationList_CargoPlannedFromByVia() } }; -function Regression::StationList_CargoWaiting() +function StationList::StationList_CargoWaiting() { print(""); print("--StationList_CargoWaiting--"); @@ -112,7 +112,7 @@ function Regression::StationList_CargoWaiting() } }; -function Regression::StationList_CargoWaitingByFrom() +function StationList::StationList_CargoWaitingByFrom() { print(""); print("--StationList_CargoWaitingByFrom--"); @@ -122,7 +122,7 @@ function Regression::StationList_CargoWaitingByFrom() } }; -function Regression::StationList_CargoWaitingByVia() +function StationList::StationList_CargoWaitingByVia() { print(""); print("--StationList_CargoWaitingByVia--"); @@ -132,7 +132,7 @@ function Regression::StationList_CargoWaitingByVia() } }; -function Regression::StationList_CargoWaitingViaByFrom() +function StationList::StationList_CargoWaitingViaByFrom() { print(""); print("--StationList_CargoWaitingViaByFrom--"); @@ -142,7 +142,7 @@ function Regression::StationList_CargoWaitingViaByFrom() } }; -function Regression::StationList_CargoWaitingFromByVia() +function StationList::StationList_CargoWaitingFromByVia() { print(""); print("--StationList_CargoWaitingFromByVia--"); @@ -152,7 +152,7 @@ function Regression::StationList_CargoWaitingFromByVia() } }; -function Regression::StationList_Vehicle() +function StationList::StationList_Vehicle() { local list = AIStationList_Vehicle(12); @@ -196,7 +196,7 @@ function Regression::StationList_Vehicle() } } -function Regression::Start() +function StationList::Start() { StationList(); StationList_Cargo(); diff --git a/bin/ai/regression/tst_stationlist/result.txt b/regression/stationlist/result.txt similarity index 100% rename from bin/ai/regression/tst_stationlist/result.txt rename to regression/stationlist/result.txt diff --git a/regression/stationlist/test.sav b/regression/stationlist/test.sav new file mode 100644 index 0000000000..959f77638b Binary files /dev/null and b/regression/stationlist/test.sav differ diff --git a/source.list b/source.list index 007256ca7f..e69de29bb2 100644 --- a/source.list +++ b/source.list @@ -1,1244 +0,0 @@ -# Source Files -airport.cpp -animated_tile.cpp -articulated_vehicles.cpp -autoreplace.cpp -bmp.cpp -cargoaction.cpp -cargomonitor.cpp -cargopacket.cpp -cargotype.cpp -cheat.cpp -command.cpp -console.cpp -console_cmds.cpp -cpu.cpp -crashlog.cpp -currency.cpp -date.cpp -debug.cpp -dedicated.cpp -depot.cpp -disaster_vehicle.cpp -driver.cpp -economy.cpp -effectvehicle.cpp -elrail.cpp -engine.cpp -fileio.cpp -fios.cpp -fontcache.cpp -fontdetection.cpp -base_consist.cpp -gamelog.cpp -genworld.cpp -gfx.cpp -gfxinit.cpp -gfx_layout.cpp -goal.cpp -ground_vehicle.cpp -heightmap.cpp -highscore.cpp -hotkeys.cpp -ini.cpp -ini_load.cpp -landscape.cpp -linkgraph/demands.cpp -linkgraph/flowmapper.cpp -linkgraph/linkgraph.cpp -linkgraph/linkgraphjob.cpp -linkgraph/linkgraphschedule.cpp -linkgraph/mcf.cpp -linkgraph/refresh.cpp -map.cpp -misc.cpp -mixer.cpp -music.cpp -network/network.cpp -network/network_admin.cpp -network/network_client.cpp -network/network_command.cpp -network/network_content.cpp -network/network_gamelist.cpp -network/network_server.cpp -network/network_udp.cpp -openttd.cpp -order_backup.cpp -pbs.cpp -progress.cpp -rail.cpp -rev.cpp -road.cpp -roadstop.cpp -screenshot_gui.cpp -screenshot.cpp -settings.cpp -signal.cpp -signs.cpp -sound.cpp -sprite.cpp -spritecache.cpp -station.cpp -strgen/strgen_base.cpp -string.cpp -stringfilter.cpp -strings.cpp -story.cpp -subsidy.cpp -textbuf.cpp -texteff.cpp -tgp.cpp -tile_map.cpp -tilearea.cpp -townname.cpp -#if WIN32 -#else - #if OS2 - os/os2/os2.cpp - 3rdparty/os2/getaddrinfo.c - 3rdparty/os2/getaddrinfo.h - 3rdparty/os2/getnameinfo.c - 3rdparty/os2/getnameinfo.h - #else - #if OSX - os/macosx/crashlog_osx.cpp - #else - os/unix/crashlog_unix.cpp - #end - os/unix/unix.cpp - #end -#end -vehicle.cpp -vehiclelist.cpp -viewport.cpp -#if USE_SSE - viewport_sprite_sorter_sse4.cpp -#end -waypoint.cpp -widget.cpp -window.cpp - -# Header Files -#if ALLEGRO - music/allegro_m.h - sound/allegro_s.h - video/allegro_v.h -#end -aircraft.h -airport.h -animated_tile_func.h -articulated_vehicles.h -autoreplace_base.h -autoreplace_func.h -autoreplace_gui.h -autoreplace_type.h -autoslope.h -base_media_base.h -base_media_func.h -base_station_base.h -bitmap_type.h -bmp.h -bridge.h -cargo_table_gui.h -cargo_type.h -cargoaction.h -cargomonitor.h -cargopacket.h -cargotype.h -cheat_func.h -cheat_type.h -clear_func.h -cmd_helper.h -command_func.h -command_type.h -company_base.h -company_func.h -company_gui.h -company_manager_face.h -company_type.h -console_func.h -console_gui.h -console_internal.h -console_type.h -cpu.h -crashlog.h -currency.h -date_func.h -date_gui.h -date_type.h -debug.h -video/dedicated_v.h -depot_base.h -depot_func.h -depot_map.h -depot_type.h -direction_func.h -direction_type.h -disaster_vehicle.h -music/dmusic.h -driver.h -economy_base.h -economy_func.h -economy_type.h -effectvehicle_base.h -effectvehicle_func.h -elrail_func.h -engine_base.h -engine_func.h -engine_gui.h -engine_type.h -error.h -fileio_func.h -fileio_type.h -fios.h -fontcache.h -fontdetection.h -framerate_type.h -base_consist.h -gamelog.h -gamelog_internal.h -genworld.h -gfx_func.h -gfx_layout.h -gfx_type.h -gfxinit.h -goal_base.h -goal_type.h -graph_gui.h -ground_vehicle.hpp -group.h -group_gui.h -group_type.h -gui.h -guitimer_func.h -heightmap.h -highscore.h -hotkeys.h -house.h -house_type.h -industry.h -industry_type.h -industrytype.h -ini_type.h -landscape.h -landscape_type.h -language.h -linkgraph/demands.h -linkgraph/flowmapper.h -linkgraph/init.h -linkgraph/linkgraph.h -linkgraph/linkgraph_base.h -linkgraph/linkgraph_gui.h -linkgraph/linkgraph_type.h -linkgraph/linkgraphjob.h -linkgraph/linkgraphjob_base.h -linkgraph/linkgraphschedule.h -linkgraph/mcf.h -linkgraph/refresh.h -livery.h -map_func.h -map_type.h -mixer.h -network/network.h -network/network_admin.h -network/network_base.h -network/network_client.h -network/network_content.h -network/network_content_gui.h -network/network_func.h -network/network_gamelist.h -network/network_gui.h -network/network_internal.h -network/network_server.h -network/network_type.h -network/network_udp.h -newgrf.h -newgrf_airport.h -newgrf_airporttiles.h -newgrf_animation_base.h -newgrf_animation_type.h -newgrf_callbacks.h -newgrf_canal.h -newgrf_cargo.h -newgrf_class.h -newgrf_class_func.h -newgrf_commons.h -newgrf_config.h -newgrf_debug.h -newgrf_engine.h -newgrf_generic.h -newgrf_house.h -newgrf_industries.h -newgrf_industrytiles.h -newgrf_object.h -newgrf_profiling.h -newgrf_properties.h -newgrf_railtype.h -newgrf_roadtype.h -newgrf_sound.h -newgrf_spritegroup.h -newgrf_station.h -newgrf_storage.h -newgrf_text.h -newgrf_town.h -newgrf_townname.h -news_func.h -news_gui.h -news_type.h -music/midi.h -music/midifile.hpp -music/null_m.h -sound/null_s.h -video/null_v.h -object.h -object_base.h -object_type.h -openttd.h -order_backup.h -order_base.h -order_func.h -order_type.h -pbs.h -progress.h -querystring_gui.h -rail.h -rail_gui.h -rail_type.h -rev.h -road.h -road_cmd.h -road_func.h -road_gui.h -road_internal.h -road_type.h -roadstop_base.h -roadveh.h -safeguards.h -screenshot.h -screenshot_gui.h -sound/sdl_s.h -video/sdl_v.h -video/sdl2_v.h -settings_func.h -settings_gui.h -settings_internal.h -settings_type.h -ship.h -signal_func.h -signal_type.h -signs_base.h -signs_func.h -signs_type.h -slope_func.h -slope_type.h -smallmap_gui.h -sortlist_type.h -sound_func.h -sound_type.h -sprite.h -spritecache.h -station_base.h -station_func.h -station_gui.h -station_kdtree.h -station_type.h -statusbar_gui.h -stdafx.h -story_base.h -story_type.h -strgen/strgen.h -string_base.h -string_func.h -string_type.h -os/windows/string_uniscribe.h -stringfilter_type.h -strings_func.h -strings_type.h -subsidy_base.h -subsidy_func.h -subsidy_type.h -tar_type.h -terraform_gui.h -textbuf_gui.h -textbuf_type.h -texteff.hpp -textfile_gui.h -textfile_type.h -tgp.h -tile_cmd.h -tile_type.h -tilearea_type.h -tilehighlight_func.h -tilehighlight_type.h -tilematrix_type.hpp -timetable.h -toolbar_gui.h -town.h -town_type.h -town_kdtree.h -townname_func.h -townname_type.h -track_func.h -track_type.h -train.h -transparency.h -transparency_gui.h -transport_type.h -tunnelbridge.h -vehicle_base.h -vehicle_func.h -vehicle_gui.h -vehicle_gui_base.h -vehicle_type.h -vehiclelist.h -viewport_func.h -viewport_kdtree.h -viewport_sprite_sorter.h -viewport_type.h -watch_gui.h -water.h -waypoint_base.h -waypoint_func.h -widget_type.h -os/windows/win32.h -music/win32_m.h -sound/win32_s.h -video/win32_v.h -window_func.h -window_gui.h -window_type.h -sound/xaudio2_s.h -zoning.h -zoom_func.h -zoom_type.h -#if WIN32 -#else - music/bemidi.h - music/cocoa_m.h - music/extmidi.h - music/fluidsynth.h - music/os2_m.h - music/qtmidi.h - os/macosx/macos.h - os/macosx/osx_stdafx.h - os/macosx/splash.h - os/macosx/string_osx.h - sound/cocoa_s.h - video/cocoa/cocoa_keys.h - video/cocoa/cocoa_v.h -#end - -# Core Source Code -core/alloc_func.cpp -core/alloc_func.hpp -core/alloc_type.hpp -core/backup_type.hpp -core/bitmath_func.cpp -core/bitmath_func.hpp -core/endian_func.hpp -core/endian_type.hpp -core/enum_type.hpp -core/geometry_func.cpp -core/geometry_func.hpp -core/geometry_type.hpp -core/kdtree.hpp -core/math_func.cpp -core/math_func.hpp -core/mem_func.hpp -core/multimap.hpp -core/overflowsafe_type.hpp -core/pool_func.cpp -core/pool_func.hpp -core/pool_type.hpp -core/random_func.cpp -core/random_func.hpp -core/smallmap_type.hpp -core/smallmatrix_type.hpp -core/smallstack_type.hpp -core/smallvec_type.hpp -core/string_compare_type.hpp - -# GUI Source Code -aircraft_gui.cpp -airport_gui.cpp -autoreplace_gui.cpp -bootstrap_gui.cpp -bridge_gui.cpp -build_vehicle_gui.cpp -cargo_table_gui.cpp -cheat_gui.cpp -commands_gui.cpp -company_gui.cpp -console_gui.cpp -date_gui.cpp -depot_gui.cpp -dock_gui.cpp -engine_gui.cpp -error_gui.cpp -fios_gui.cpp -framerate_gui.cpp -genworld_gui.cpp -goal_gui.cpp -graph_gui.cpp -group_gui.cpp -highscore_gui.cpp -industry_gui.cpp -intro_gui.cpp -linkgraph/linkgraph_gui.cpp -main_gui.cpp -misc_gui.cpp -music_gui.cpp -network/network_chat_gui.cpp -network/network_content_gui.cpp -network/network_gui.cpp -newgrf_debug_gui.cpp -newgrf_gui.cpp -news_gui.cpp -object_gui.cpp -order_gui.cpp -osk_gui.cpp -rail_gui.cpp -road_gui.cpp -roadveh_gui.cpp -settings_gui.cpp -ship_gui.cpp -signs_gui.cpp -smallmap_gui.cpp -station_gui.cpp -statusbar_gui.cpp -story_gui.cpp -subsidy_gui.cpp -terraform_gui.cpp -textfile_gui.cpp -timetable_gui.cpp -toolbar_gui.cpp -town_gui.cpp -train_gui.cpp -transparency_gui.cpp -tree_gui.cpp -vehicle_gui.cpp -watch_gui.cpp -viewport_gui.cpp -waypoint_gui.cpp -zoning_gui.cpp - -# Widgets -widgets/airport_widget.h -widgets/ai_widget.h -widgets/autoreplace_widget.h -widgets/bootstrap_widget.h -widgets/bridge_widget.h -widgets/build_vehicle_widget.h -widgets/cargo_table_widget.h -widgets/cheat_widget.h -widgets/company_widget.h -widgets/console_widget.h -widgets/date_widget.h -widgets/depot_widget.h -widgets/dock_widget.h -widgets/dropdown.cpp -widgets/dropdown_func.h -widgets/dropdown_type.h -widgets/dropdown_widget.h -widgets/engine_widget.h -widgets/error_widget.h -widgets/fios_widget.h -widgets/framerate_widget.h -widgets/genworld_widget.h -widgets/goal_widget.h -widgets/graph_widget.h -widgets/group_widget.h -widgets/highscore_widget.h -widgets/industry_widget.h -widgets/intro_widget.h -widgets/link_graph_legend_widget.h -widgets/main_widget.h -widgets/misc_widget.h -widgets/music_widget.h -widgets/network_chat_widget.h -widgets/network_content_widget.h -widgets/network_widget.h -widgets/newgrf_debug_widget.h -widgets/newgrf_widget.h -widgets/news_widget.h -widgets/object_widget.h -widgets/order_widget.h -widgets/osk_widget.h -widgets/rail_widget.h -widgets/road_widget.h -widgets/screenshot_widget.h -widgets/settings_widget.h -widgets/sign_widget.h -widgets/smallmap_widget.h -widgets/station_widget.h -widgets/statusbar_widget.h -widgets/story_widget.h -widgets/subsidy_widget.h -widgets/terraform_widget.h -widgets/timetable_widget.h -widgets/toolbar_widget.h -widgets/town_widget.h -widgets/transparency_widget.h -widgets/tree_widget.h -widgets/vehicle_widget.h -widgets/viewport_widget.h -widgets/waypoint_widget.h - -# Command handlers -aircraft_cmd.cpp -autoreplace_cmd.cpp -clear_cmd.cpp -company_cmd.cpp -depot_cmd.cpp -group_cmd.cpp -industry_cmd.cpp -misc_cmd.cpp -object_cmd.cpp -order_cmd.cpp -rail_cmd.cpp -road_cmd.cpp -roadveh_cmd.cpp -ship_cmd.cpp -signs_cmd.cpp -station_cmd.cpp -terraform_cmd.cpp -timetable_cmd.cpp -town_cmd.cpp -train_cmd.cpp -tree_cmd.cpp -tunnelbridge_cmd.cpp -vehicle_cmd.cpp -void_cmd.cpp -water_cmd.cpp -waypoint_cmd.cpp -zoning_cmd.cpp - -# Save/Load handlers -saveload/afterload.cpp -saveload/ai_sl.cpp -saveload/airport_sl.cpp -saveload/animated_tile_sl.cpp -saveload/autoreplace_sl.cpp -saveload/cargomonitor_sl.cpp -saveload/cargopacket_sl.cpp -saveload/cheat_sl.cpp -saveload/company_sl.cpp -saveload/depot_sl.cpp -saveload/economy_sl.cpp -saveload/engine_sl.cpp -saveload/game_sl.cpp -saveload/gamelog_sl.cpp -saveload/goal_sl.cpp -saveload/group_sl.cpp -saveload/industry_sl.cpp -saveload/labelmaps_sl.cpp -saveload/linkgraph_sl.cpp -saveload/map_sl.cpp -saveload/misc_sl.cpp -saveload/newgrf_sl.cpp -saveload/newgrf_sl.h -saveload/object_sl.cpp -saveload/oldloader.cpp -saveload/oldloader.h -saveload/oldloader_sl.cpp -saveload/order_sl.cpp -saveload/saveload.cpp -saveload/saveload.h -saveload/saveload_filter.h -saveload/saveload_internal.h -saveload/signs_sl.cpp -saveload/station_sl.cpp -saveload/storage_sl.cpp -saveload/strings_sl.cpp -saveload/story_sl.cpp -saveload/subsidy_sl.cpp -saveload/town_sl.cpp -saveload/vehicle_sl.cpp -saveload/waypoint_sl.cpp - -# Tables -table/airport_defaults.h -table/airport_movement.h -table/airporttile_ids.h -table/airporttiles.h -table/animcursors.h -table/autorail.h -table/bridge_land.h -table/build_industry.h -table/cargo_const.h -table/clear_land.h -table/control_codes.h -table/elrail_data.h -table/engines.h -table/genland.h -table/heightmap_colours.h -table/industry_land.h -table/landscape_sprite.h -table/newgrf_debug_data.h -table/object_land.h -table/palette_convert.h -table/palettes.h -table/pricebase.h -table/railtypes.h -table/road_land.h -table/roadveh_movement.h -table/roadtypes.h -../objs/settings/table/settings.h -table/sprites.h -table/station_land.h -table/strgen_tables.h -table/string_colours.h -../objs/langs/table/strings.h -table/town_land.h -table/townname.h -table/track_land.h -table/train_cmd.h -table/tree_land.h -table/unicode.h -table/water_land.h - -# MD5 -3rdparty/md5/md5.cpp -3rdparty/md5/md5.h - -# Script -script/script_config.cpp -script/script_config.hpp -script/script_fatalerror.hpp -script/script_info.cpp -script/script_info.hpp -script/script_info_dummy.cpp -script/script_instance.cpp -script/script_instance.hpp -script/script_scanner.cpp -script/script_scanner.hpp -script/script_storage.hpp -script/script_suspend.hpp -script/squirrel.cpp -script/squirrel.hpp -script/squirrel_class.hpp -script/squirrel_helper.hpp -script/squirrel_helper_type.hpp -script/squirrel_std.cpp -script/squirrel_std.hpp - -# Squirrel -3rdparty/squirrel/squirrel/sqapi.cpp -3rdparty/squirrel/squirrel/sqbaselib.cpp -3rdparty/squirrel/squirrel/sqclass.cpp -3rdparty/squirrel/squirrel/sqcompiler.cpp -3rdparty/squirrel/squirrel/sqdebug.cpp -3rdparty/squirrel/squirrel/sqfuncstate.cpp -3rdparty/squirrel/squirrel/sqlexer.cpp -3rdparty/squirrel/squirrel/sqmem.cpp -3rdparty/squirrel/squirrel/sqobject.cpp -3rdparty/squirrel/squirrel/sqstate.cpp -3rdparty/squirrel/sqstdlib/sqstdaux.cpp -3rdparty/squirrel/sqstdlib/sqstdmath.cpp -3rdparty/squirrel/squirrel/sqtable.cpp -3rdparty/squirrel/squirrel/sqvm.cpp - -# Squirrel headers -3rdparty/squirrel/squirrel/sqarray.h -3rdparty/squirrel/squirrel/sqclass.h -3rdparty/squirrel/squirrel/sqclosure.h -3rdparty/squirrel/squirrel/sqcompiler.h -3rdparty/squirrel/squirrel/sqfuncproto.h -3rdparty/squirrel/squirrel/sqfuncstate.h -3rdparty/squirrel/squirrel/sqlexer.h -3rdparty/squirrel/squirrel/sqobject.h -3rdparty/squirrel/squirrel/sqopcodes.h -3rdparty/squirrel/squirrel/sqpcheader.h -3rdparty/squirrel/squirrel/sqstate.h -3rdparty/squirrel/include/sqstdaux.h -3rdparty/squirrel/include/sqstdmath.h -3rdparty/squirrel/include/sqstdstring.h -3rdparty/squirrel/squirrel/sqstring.h -3rdparty/squirrel/squirrel/sqtable.h -3rdparty/squirrel/include/squirrel.h -3rdparty/squirrel/squirrel/squserdata.h -3rdparty/squirrel/squirrel/squtils.h -3rdparty/squirrel/squirrel/sqvm.h - -# AI Core -ai/ai.hpp -ai/ai_config.cpp -ai/ai_config.hpp -ai/ai_core.cpp -ai/ai_gui.cpp -ai/ai_gui.hpp -ai/ai_info.cpp -ai/ai_info.hpp -ai/ai_instance.cpp -ai/ai_instance.hpp -ai/ai_scanner.cpp -ai/ai_scanner.hpp - -# AI API -script/api/ai_changelog.hpp - -# Game API -script/api/game_changelog.hpp - -# Game Core -game/game.hpp -game/game_config.cpp -game/game_config.hpp -game/game_core.cpp -game/game_info.cpp -game/game_info.hpp -game/game_instance.cpp -game/game_instance.hpp -game/game_scanner.cpp -game/game_scanner.hpp -game/game_text.cpp -game/game_text.hpp - -# Script API -script/api/script_accounting.hpp -script/api/script_admin.hpp -script/api/script_airport.hpp -script/api/script_base.hpp -script/api/script_basestation.hpp -script/api/script_bridge.hpp -script/api/script_bridgelist.hpp -script/api/script_cargo.hpp -script/api/script_cargolist.hpp -script/api/script_cargomonitor.hpp -script/api/script_client.hpp -script/api/script_clientlist.hpp -script/api/script_company.hpp -script/api/script_companymode.hpp -script/api/script_controller.hpp -script/api/script_date.hpp -script/api/script_depotlist.hpp -script/api/script_engine.hpp -script/api/script_enginelist.hpp -script/api/script_error.hpp -script/api/script_event.hpp -script/api/script_event_types.hpp -script/api/script_execmode.hpp -script/api/script_game.hpp -script/api/script_gamesettings.hpp -script/api/script_goal.hpp -script/api/script_group.hpp -script/api/script_grouplist.hpp -script/api/script_industry.hpp -script/api/script_industrylist.hpp -script/api/script_industrytype.hpp -script/api/script_industrytypelist.hpp -script/api/script_info_docs.hpp -script/api/script_infrastructure.hpp -script/api/script_list.hpp -script/api/script_log.hpp -script/api/script_map.hpp -script/api/script_marine.hpp -script/api/script_news.hpp -script/api/script_object.hpp -script/api/script_order.hpp -script/api/script_rail.hpp -script/api/script_railtypelist.hpp -script/api/script_road.hpp -script/api/script_roadtypelist.hpp -script/api/script_sign.hpp -script/api/script_signlist.hpp -script/api/script_station.hpp -script/api/script_stationlist.hpp -script/api/script_story_page.hpp -script/api/script_storypagelist.hpp -script/api/script_storypageelementlist.hpp -script/api/script_subsidy.hpp -script/api/script_subsidylist.hpp -script/api/script_testmode.hpp -script/api/script_text.hpp -script/api/script_tile.hpp -script/api/script_tilelist.hpp -script/api/script_town.hpp -script/api/script_townlist.hpp -script/api/script_tunnel.hpp -script/api/script_types.hpp -script/api/script_vehicle.hpp -script/api/script_vehiclelist.hpp -script/api/script_viewport.hpp -script/api/script_waypoint.hpp -script/api/script_waypointlist.hpp -script/api/script_window.hpp - -# Script API Implementation -script/api/script_accounting.cpp -script/api/script_admin.cpp -script/api/script_airport.cpp -script/api/script_base.cpp -script/api/script_basestation.cpp -script/api/script_bridge.cpp -script/api/script_bridgelist.cpp -script/api/script_cargo.cpp -script/api/script_cargolist.cpp -script/api/script_cargomonitor.cpp -script/api/script_client.cpp -script/api/script_clientlist.cpp -script/api/script_company.cpp -script/api/script_companymode.cpp -script/api/script_controller.cpp -script/api/script_date.cpp -script/api/script_depotlist.cpp -script/api/script_engine.cpp -script/api/script_enginelist.cpp -script/api/script_error.cpp -script/api/script_event.cpp -script/api/script_event_types.cpp -script/api/script_execmode.cpp -script/api/script_game.cpp -script/api/script_gamesettings.cpp -script/api/script_goal.cpp -script/api/script_group.cpp -script/api/script_grouplist.cpp -script/api/script_industry.cpp -script/api/script_industrylist.cpp -script/api/script_industrytype.cpp -script/api/script_industrytypelist.cpp -script/api/script_infrastructure.cpp -script/api/script_list.cpp -script/api/script_log.cpp -script/api/script_map.cpp -script/api/script_marine.cpp -script/api/script_news.cpp -script/api/script_object.cpp -script/api/script_order.cpp -script/api/script_rail.cpp -script/api/script_railtypelist.cpp -script/api/script_road.cpp -script/api/script_roadtypelist.cpp -script/api/script_sign.cpp -script/api/script_signlist.cpp -script/api/script_station.cpp -script/api/script_stationlist.cpp -script/api/script_story_page.cpp -script/api/script_storypagelist.cpp -script/api/script_storypageelementlist.cpp -script/api/script_subsidy.cpp -script/api/script_subsidylist.cpp -script/api/script_testmode.cpp -script/api/script_text.cpp -script/api/script_tile.cpp -script/api/script_tilelist.cpp -script/api/script_town.cpp -script/api/script_townlist.cpp -script/api/script_tunnel.cpp -script/api/script_vehicle.cpp -script/api/script_vehiclelist.cpp -script/api/script_viewport.cpp -script/api/script_waypoint.cpp -script/api/script_waypointlist.cpp -script/api/script_window.cpp - -# Blitters -#if DEDICATED -#else - blitter/32bpp_anim.cpp - blitter/32bpp_anim.hpp - #if USE_SSE - blitter/32bpp_anim_sse2.cpp - blitter/32bpp_anim_sse2.hpp - blitter/32bpp_anim_sse4.cpp - blitter/32bpp_anim_sse4.hpp - #end - blitter/32bpp_base.cpp - blitter/32bpp_base.hpp - blitter/32bpp_optimized.cpp - blitter/32bpp_optimized.hpp - blitter/32bpp_simple.cpp - blitter/32bpp_simple.hpp - #if USE_SSE - blitter/32bpp_sse_func.hpp - blitter/32bpp_sse_type.h - blitter/32bpp_sse2.cpp - blitter/32bpp_sse2.hpp - blitter/32bpp_sse4.cpp - blitter/32bpp_sse4.hpp - blitter/32bpp_ssse3.cpp - blitter/32bpp_ssse3.hpp - #end - blitter/8bpp_base.cpp - blitter/8bpp_base.hpp - blitter/8bpp_optimized.cpp - blitter/8bpp_optimized.hpp - blitter/8bpp_simple.cpp - blitter/8bpp_simple.hpp -#end -blitter/base.cpp -blitter/base.hpp -blitter/common.hpp -blitter/factory.hpp -blitter/null.cpp -blitter/null.hpp - -# Drivers -music/music_driver.hpp -sound/sound_driver.hpp -video/video_driver.hpp - -# Sprite loaders -spriteloader/grf.cpp -spriteloader/grf.hpp -spriteloader/spriteloader.hpp - -# NewGRF -newgrf.cpp -newgrf_airport.cpp -newgrf_airporttiles.cpp -newgrf_canal.cpp -newgrf_cargo.cpp -newgrf_commons.cpp -newgrf_config.cpp -newgrf_engine.cpp -newgrf_generic.cpp -newgrf_house.cpp -newgrf_industries.cpp -newgrf_industrytiles.cpp -newgrf_object.cpp -newgrf_profiling.cpp -newgrf_railtype.cpp -newgrf_roadtype.cpp -newgrf_sound.cpp -newgrf_spritegroup.cpp -newgrf_station.cpp -newgrf_storage.cpp -newgrf_text.cpp -newgrf_town.cpp -newgrf_townname.cpp - -# Map Accessors -bridge_map.cpp -bridge_map.h -clear_map.h -industry_map.h -object_map.h -rail_map.h -road_map.cpp -road_map.h -station_map.h -tile_map.h -town_map.h -tree_map.h -tunnel_map.cpp -tunnel_map.h -tunnelbridge_map.h -void_map.h -water_map.h - -# Misc -misc/array.hpp -misc/binaryheap.hpp -misc/blob.hpp -misc/countedobj.cpp -misc/countedptr.hpp -misc/dbg_helpers.cpp -misc/dbg_helpers.h -misc/fixedsizearray.hpp -misc/getoptdata.cpp -misc/getoptdata.h -misc/hashtable.hpp -misc/str.hpp - -# Network Core -network/core/address.cpp -network/core/address.h -network/core/config.h -network/core/core.cpp -network/core/core.h -network/core/game.h -network/core/host.cpp -network/core/host.h -network/core/os_abstraction.h -network/core/packet.cpp -network/core/packet.h -network/core/tcp.cpp -network/core/tcp.h -network/core/tcp_admin.cpp -network/core/tcp_admin.h -network/core/tcp_connect.cpp -network/core/tcp_content.cpp -network/core/tcp_content.h -network/core/tcp_game.cpp -network/core/tcp_game.h -network/core/tcp_http.cpp -network/core/tcp_http.h -network/core/tcp_listen.h -network/core/udp.cpp -network/core/udp.h - -# Pathfinder -pathfinder/follow_track.hpp -pathfinder/pathfinder_func.h -pathfinder/pathfinder_type.h -pathfinder/pf_performance_timer.hpp - -# NPF -pathfinder/npf/aystar.cpp -pathfinder/npf/aystar.h -pathfinder/npf/npf.cpp -pathfinder/npf/npf_func.h -pathfinder/npf/queue.cpp -pathfinder/npf/queue.h - -# YAPF -pathfinder/yapf/nodelist.hpp -pathfinder/yapf/yapf.h -pathfinder/yapf/yapf.hpp -pathfinder/yapf/yapf_base.hpp -pathfinder/yapf/yapf_cache.h -pathfinder/yapf/yapf_common.hpp -pathfinder/yapf/yapf_costbase.hpp -pathfinder/yapf/yapf_costcache.hpp -pathfinder/yapf/yapf_costrail.hpp -pathfinder/yapf/yapf_destrail.hpp -pathfinder/yapf/yapf_node.hpp -pathfinder/yapf/yapf_node_rail.hpp -pathfinder/yapf/yapf_node_road.hpp -pathfinder/yapf/yapf_node_ship.hpp -pathfinder/yapf/yapf_rail.cpp -pathfinder/yapf/yapf_road.cpp -pathfinder/yapf/yapf_ship.cpp -pathfinder/yapf/yapf_type.hpp - -# Video -video/dedicated_v.cpp -video/null_v.cpp -#if DEDICATED -#else - #if ALLEGRO - video/allegro_v.cpp - #end - #if SDL - video/sdl_v.cpp - #end - #if SDL2 - video/sdl2_v.cpp - #end - #if WIN32 - video/win32_v.cpp - #end -#end - -# Music -#if DEDICATED -#else - #if ALLEGRO - music/allegro_m.cpp - #end - #if DIRECTMUSIC - music/dmusic.cpp - #end -#end -music/null_m.cpp -music/midifile.cpp -#if DEDICATED -#else - #if WIN32 - music/win32_m.cpp - #else - music/extmidi.cpp - #end - #if HAIKU - music/bemidi.cpp - #end - #if FLUIDSYNTH - music/fluidsynth.cpp - #end -#end - -# Sound -sound/null_s.cpp -#if DEDICATED -#else - #if ALLEGRO - sound/allegro_s.cpp - #end - #if SDL - sound/sdl_s.cpp - #end - #if SDL2 - sound/sdl2_s.cpp - #end - #if WIN32 - sound/win32_s.cpp - #if USE_XAUDIO2 - sound/xaudio2_s.cpp - #end - #end -#end - -#if OSX -# OSX Files - os/macosx/macos.mm - - #if DEDICATED - #else - music/qtmidi.cpp - #end - - #if COCOA - video/cocoa/cocoa_v.mm - video/cocoa/event.mm - video/cocoa/fullscreen.mm - video/cocoa/wnd_quartz.mm - video/cocoa/wnd_quickdraw.mm - music/cocoa_m.cpp - sound/cocoa_s.cpp - os/macosx/splash.cpp - os/macosx/string_osx.cpp - #end -#end - -# Windows files -#if WIN32 - os/windows/crashlog_win.cpp - os/windows/ottdres.rc - os/windows/string_uniscribe.cpp - os/windows/win32.cpp -#end - -# Threading -thread.h - -# CityMania -citymania/cm_bitstream.hpp -citymania/cm_bitstream.cpp -citymania/cm_console_cmds.hpp -citymania/cm_console_cmds.cpp -citymania/cm_event.hpp -citymania/cm_export.hpp -citymania/cm_export.cpp -citymania/cm_game.hpp -citymania/cm_game.cpp -citymania/cm_hotkeys.hpp -citymania/cm_hotkeys.cpp -citymania/cm_main.hpp -citymania/cm_main.cpp -citymania/cm_tooltips.hpp -citymania/cm_tooltips.cpp -citymania/cm_type.hpp -citymania/cm_saveload.hpp -citymania/cm_saveload.cpp -citymania/cm_settings.hpp -citymania/extensions/cmext_town.hpp -citymania/extensions/cmext_company.hpp - -# CityMania client -citymania/cm_base64.hpp -citymania/cm_base64.cpp -citymania/cm_blueprint.hpp -citymania/cm_blueprint.cpp -citymania/cm_highlight.hpp -citymania/cm_highlight.cpp -citymania/cm_highlight_type.hpp -citymania/cm_locations.hpp -citymania/cm_locations.cpp -citymania/cm_minimap.hpp -citymania/cm_minimap.cpp -citymania/cm_misc_gui.hpp -citymania/cm_misc_gui.cpp -citymania/cm_station_gui.hpp -citymania/cm_station_gui.cpp -newgrf_revisions.hpp diff --git a/src/3rdparty/CMakeLists.txt b/src/3rdparty/CMakeLists.txt new file mode 100644 index 0000000000..ca082cf785 --- /dev/null +++ b/src/3rdparty/CMakeLists.txt @@ -0,0 +1,4 @@ +add_subdirectory(md5) +add_subdirectory(squirrel) +add_subdirectory(opengl) +add_subdirectory(os2) diff --git a/src/3rdparty/md5/CMakeLists.txt b/src/3rdparty/md5/CMakeLists.txt new file mode 100644 index 0000000000..58720ca2d6 --- /dev/null +++ b/src/3rdparty/md5/CMakeLists.txt @@ -0,0 +1,4 @@ +add_files( + md5.cpp + md5.h +) diff --git a/src/3rdparty/opengl/CMakeLists.txt b/src/3rdparty/opengl/CMakeLists.txt new file mode 100644 index 0000000000..6176d252f5 --- /dev/null +++ b/src/3rdparty/opengl/CMakeLists.txt @@ -0,0 +1,10 @@ +add_files( + khrplatform.h + glext.h + CONDITION OPENGL_FOUND +) + +add_files( + wglext.h + CONDITION WIN32 AND OPENGL_FOUND +) diff --git a/src/3rdparty/opengl/glext.h b/src/3rdparty/opengl/glext.h new file mode 100644 index 0000000000..d7d86bf635 --- /dev/null +++ b/src/3rdparty/opengl/glext.h @@ -0,0 +1,12861 @@ +#ifndef __gl_glext_h_ +#define __gl_glext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright 2013-2020 The Khronos Group Inc. +** SPDX-License-Identifier: MIT +** +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** https://github.com/KhronosGroup/OpenGL-Registry +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif +#ifndef GLAPI +#define GLAPI extern +#endif + +#define GL_GLEXT_VERSION 20201119 + +#include "khrplatform.h" + +/* Generated C header for: + * API: gl + * Profile: compatibility + * Versions considered: .* + * Versions emitted: 1\.[2-9]|[234]\.[0-9] + * Default extensions included: gl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_RESCALE_NORMAL 0x803A +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_VERSION_1_2 */ + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTexture (GLenum texture); +GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); +GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); +GLAPI void APIENTRY glClientActiveTexture (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); +#endif +#endif /* GL_VERSION_1_3 */ + +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_EQUATION 0x8009 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_FUNC_SUBTRACT 0x800A +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFogCoordf (GLfloat coord); +GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); +GLAPI void APIENTRY glFogCoordd (GLdouble coord); +GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2iv (const GLint *v); +GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); +GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3iv (const GLint *v); +GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); +GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void APIENTRY glBlendEquation (GLenum mode); +#endif +#endif /* GL_VERSION_1_4 */ + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +typedef khronos_ssize_t GLsizeiptr; +typedef khronos_intptr_t GLintptr; +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SRC1_ALPHA 0x8589 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_COORD 0x8451 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_SRC0_RGB 0x8580 +#define GL_SRC1_RGB 0x8581 +#define GL_SRC2_RGB 0x8582 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SRC2_ALPHA 0x858A +typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQuery (GLuint id); +GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQuery (GLenum target); +GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); +GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); +GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); +GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_VERSION_1_5 */ + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +typedef char GLchar; +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_TEXTURE_COORDS 0x8871 +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); +GLAPI void APIENTRY glCompileShader (GLuint shader); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum type); +GLAPI void APIENTRY glDeleteProgram (GLuint program); +GLAPI void APIENTRY glDeleteShader (GLuint shader); +GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgram (GLuint program); +GLAPI GLboolean APIENTRY glIsShader (GLuint shader); +GLAPI void APIENTRY glLinkProgram (GLuint program); +GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GLAPI void APIENTRY glUseProgram (GLuint program); +GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glValidateProgram (GLuint program); +GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#endif +#endif /* GL_VERSION_2_0 */ + +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#endif +#endif /* GL_VERSION_2_1 */ + +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 +typedef khronos_uint16_t GLhalf; +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_RGBA32F 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGBA16F 0x881A +#define GL_RGB16F 0x881B +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_RGB9_E5 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_RGBA32UI 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGBA16UI 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGBA8UI 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGBA32I 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGBA16I 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGBA8I 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RED_INTEGER 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_COLOR_ATTACHMENT16 0x8CF0 +#define GL_COLOR_ATTACHMENT17 0x8CF1 +#define GL_COLOR_ATTACHMENT18 0x8CF2 +#define GL_COLOR_ATTACHMENT19 0x8CF3 +#define GL_COLOR_ATTACHMENT20 0x8CF4 +#define GL_COLOR_ATTACHMENT21 0x8CF5 +#define GL_COLOR_ATTACHMENT22 0x8CF6 +#define GL_COLOR_ATTACHMENT23 0x8CF7 +#define GL_COLOR_ATTACHMENT24 0x8CF8 +#define GL_COLOR_ATTACHMENT25 0x8CF9 +#define GL_COLOR_ATTACHMENT26 0x8CFA +#define GL_COLOR_ATTACHMENT27 0x8CFB +#define GL_COLOR_ATTACHMENT28 0x8CFC +#define GL_COLOR_ATTACHMENT29 0x8CFD +#define GL_COLOR_ATTACHMENT30 0x8CFE +#define GL_COLOR_ATTACHMENT31 0x8CFF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_INDEX 0x8222 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_HALF_FLOAT 0x140B +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_RG 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R16 0x822A +#define GL_RG8 0x822B +#define GL_RG16 0x822C +#define GL_R16F 0x822D +#define GL_R32F 0x822E +#define GL_RG16F 0x822F +#define GL_RG32F 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_ALPHA_INTEGER 0x8D97 +typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); +GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); +GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedback (void); +GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); +GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRender (void); +GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); +GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); +GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmap (GLenum target); +GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glBindVertexArray (GLuint array); +GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); +#endif +#endif /* GL_VERSION_3_0 */ + +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFFu +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); +GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); +GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#endif +#endif /* GL_VERSION_3_1 */ + +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +typedef struct __GLsync *GLsync; +typedef khronos_uint64_t GLuint64; +typedef khronos_int64_t GLint64; +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_DEPTH_CLAMP 0x864F +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); +typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); +typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +GLAPI void APIENTRY glProvokingVertex (GLenum mode); +GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); +GLAPI GLboolean APIENTRY glIsSync (GLsync sync); +GLAPI void APIENTRY glDeleteSync (GLsync sync); +GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); +GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); +GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); +#endif +#endif /* GL_VERSION_3_2 */ + +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_SRC1_COLOR 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_RGB10_A2UI 0x906F +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIMESTAMP 0x8E28 +#define GL_INT_2_10_10_10_REV 0x8D9F +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); +GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); +GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); +GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); +GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); +GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); +GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); +GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); +GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); +GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); +GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); +GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); +#endif +#endif /* GL_VERSION_3_3 */ + +#ifndef GL_VERSION_4_0 +#define GL_VERSION_4_0 1 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_PATCHES 0x000E +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_ISOLINES 0x8E7A +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); +typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); +typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); +typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); +typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); +typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShading (GLfloat value); +GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); +GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); +GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); +GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); +GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); +GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); +GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); +GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); +GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedback (void); +GLAPI void APIENTRY glResumeTransformFeedback (void); +GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); +GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); +GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); +GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); +GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_VERSION_4_0 */ + +#ifndef GL_VERSION_4_1 +#define GL_VERSION_4_1 1 +#define GL_FIXED 0x140C +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RGB565 0x8D62 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_MAX_VIEWPORTS 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 +typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); +typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); +typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); +typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); +typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReleaseShaderCompiler (void); +GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); +GLAPI void APIENTRY glClearDepthf (GLfloat d); +GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); +GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); +GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); +GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); +GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); +GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); +GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); +GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); +GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); +GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); +#endif +#endif /* GL_VERSION_4_1 */ + +#ifndef GL_VERSION_4_2 +#define GL_VERSION_4_2 1 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); +typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params); +GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); +GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); +GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#endif +#endif /* GL_VERSION_4_2 */ + +#ifndef GL_VERSION_4_3 +#define GL_VERSION_4_3 1 +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_BUFFER 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_QUERY 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_SAMPLER 0x82E6 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_MIPMAP 0x8293 +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_COLOR_ENCODING 0x8296 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_FILTER 0x829A +#define GL_VERTEX_TEXTURE 0x829B +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_NAME_LENGTH 0x92F9 +#define GL_TYPE 0x92FA +#define GL_ARRAY_SIZE 0x92FB +#define GL_OFFSET 0x92FC +#define GL_BLOCK_INDEX 0x92FD +#define GL_ARRAY_STRIDE 0x92FE +#define GL_MATRIX_STRIDE 0x92FF +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_LOCATION 0x930E +#define GL_LOCATION_INDEX 0x930F +#define GL_IS_PER_PATCH 0x92E7 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_DISPLAY_LIST 0x82E7 +typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params); +typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); +typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); +GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params); +GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); +GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); +GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); +GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params); +GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GLAPI void APIENTRY glPopDebugGroup (void); +GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_VERSION_4_3 */ + +#ifndef GL_VERSION_4_4 +#define GL_VERSION_4_4 1 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); +GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#endif +#endif /* GL_VERSION_4_4 */ + +#ifndef GL_VERSION_4_5 +#define GL_VERSION_4_5 1 +#define GL_CONTEXT_LOST 0x0507 +#define GL_NEGATIVE_ONE_TO_ONE 0x935E +#define GL_ZERO_TO_ONE 0x935F +#define GL_CLIP_ORIGIN 0x935C +#define GL_CLIP_DEPTH_MODE 0x935D +#define GL_QUERY_WAIT_INVERTED 0x8E17 +#define GL_QUERY_NO_WAIT_INVERTED 0x8E18 +#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 +#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A +#define GL_MAX_CULL_DISTANCES 0x82F9 +#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA +#define GL_TEXTURE_TARGET 0x1006 +#define GL_QUERY_TARGET 0x82EA +#define GL_GUILTY_CONTEXT_RESET 0x8253 +#define GL_INNOCENT_CONTEXT_RESET 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 +#define GL_LOSE_CONTEXT_ON_RESET 0x8252 +#define GL_NO_RESET_NOTIFICATION 0x8261 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_MINMAX 0x802E +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +typedef void (APIENTRYP PFNGLCLIPCONTROLPROC) (GLenum origin, GLenum depth); +typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) (GLuint xfb, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC) (GLuint xfb, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); +typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERPROC) (GLuint buffer, GLenum access); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) (GLuint buffer, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC) (GLuint buffer, GLenum pname, void **params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) (GLuint framebuffer, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) (GLuint framebuffer, GLenum buf); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) (GLuint framebuffer, GLenum src); +typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); +typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCREATETEXTURESPROC) (GLenum target, GLsizei n, GLuint *textures); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC) (GLuint texture, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC) (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC) (GLuint texture, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC) (GLuint texture, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC) (GLuint unit, GLuint texture); +typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLsizei bufSize, void *pixels); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC) (GLuint vaobj, GLuint buffer); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC) (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC) (GLuint vaobj, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); +typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC) (GLsizei n, GLuint *samplers); +typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); +typedef void (APIENTRYP PFNGLCREATEQUERIESPROC) (GLenum target, GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers); +typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void); +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLsizei bufSize, void *pixels); +typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +typedef void (APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (APIENTRYP PFNGLGETNMAPDVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +typedef void (APIENTRYP PFNGLGETNMAPFVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLGETNMAPIVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC) (GLenum map, GLsizei bufSize, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC) (GLenum map, GLsizei bufSize, GLuint *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC) (GLenum map, GLsizei bufSize, GLushort *values); +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC) (GLsizei bufSize, GLubyte *pattern); +typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLGETNMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClipControl (GLenum origin, GLenum depth); +GLAPI void APIENTRY glCreateTransformFeedbacks (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param); +GLAPI void APIENTRY glGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); +GLAPI void APIENTRY glCreateBuffers (GLsizei n, GLuint *buffers); +GLAPI void APIENTRY glNamedBufferStorage (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glNamedBufferData (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void *APIENTRY glMapNamedBuffer (GLuint buffer, GLenum access); +GLAPI void *APIENTRY glMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI GLboolean APIENTRY glUnmapNamedBuffer (GLuint buffer); +GLAPI void APIENTRY glFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params); +GLAPI void APIENTRY glGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void APIENTRY glCreateFramebuffers (GLsizei n, GLuint *framebuffers); +GLAPI void APIENTRY glNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param); +GLAPI void APIENTRY glNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf); +GLAPI void APIENTRY glNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src); +GLAPI void APIENTRY glInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); +GLAPI void APIENTRY glInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI void APIENTRY glClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI void APIENTRY glClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI void APIENTRY glClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI void APIENTRY glBlitNamedFramebuffer (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI GLenum APIENTRY glCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target); +GLAPI void APIENTRY glGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glCreateRenderbuffers (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glCreateTextures (GLenum target, GLsizei n, GLuint *textures); +GLAPI void APIENTRY glTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureParameterf (GLuint texture, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glTextureParameteri (GLuint texture, GLenum pname, GLint param); +GLAPI void APIENTRY glTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glTextureParameteriv (GLuint texture, GLenum pname, const GLint *param); +GLAPI void APIENTRY glGenerateTextureMipmap (GLuint texture); +GLAPI void APIENTRY glBindTextureUnit (GLuint unit, GLuint texture); +GLAPI void APIENTRY glGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +GLAPI void APIENTRY glGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels); +GLAPI void APIENTRY glGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params); +GLAPI void APIENTRY glGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params); +GLAPI void APIENTRY glCreateVertexArrays (GLsizei n, GLuint *arrays); +GLAPI void APIENTRY glDisableVertexArrayAttrib (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glEnableVertexArrayAttrib (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glVertexArrayElementBuffer (GLuint vaobj, GLuint buffer); +GLAPI void APIENTRY glVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +GLAPI void APIENTRY glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); +GLAPI void APIENTRY glCreateSamplers (GLsizei n, GLuint *samplers); +GLAPI void APIENTRY glCreateProgramPipelines (GLsizei n, GLuint *pipelines); +GLAPI void APIENTRY glCreateQueries (GLenum target, GLsizei n, GLuint *ids); +GLAPI void APIENTRY glGetQueryBufferObjecti64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI void APIENTRY glGetQueryBufferObjectiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI void APIENTRY glGetQueryBufferObjectui64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI void APIENTRY glGetQueryBufferObjectuiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI void APIENTRY glMemoryBarrierByRegion (GLbitfield barriers); +GLAPI void APIENTRY glGetTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +GLAPI void APIENTRY glGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); +GLAPI GLenum APIENTRY glGetGraphicsResetStatus (void); +GLAPI void APIENTRY glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels); +GLAPI void APIENTRY glGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +GLAPI void APIENTRY glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +GLAPI void APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI void APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI void APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI void APIENTRY glGetnMapdv (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI void APIENTRY glGetnMapfv (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glGetnMapiv (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI void APIENTRY glGetnPixelMapfv (GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI void APIENTRY glGetnPixelMapuiv (GLenum map, GLsizei bufSize, GLuint *values); +GLAPI void APIENTRY glGetnPixelMapusv (GLenum map, GLsizei bufSize, GLushort *values); +GLAPI void APIENTRY glGetnPolygonStipple (GLsizei bufSize, GLubyte *pattern); +GLAPI void APIENTRY glGetnColorTable (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +GLAPI void APIENTRY glGetnConvolutionFilter (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +GLAPI void APIENTRY glGetnSeparableFilter (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +GLAPI void APIENTRY glGetnHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glGetnMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glTextureBarrier (void); +#endif +#endif /* GL_VERSION_4_5 */ + +#ifndef GL_VERSION_4_6 +#define GL_VERSION_4_6 1 +#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 +#define GL_SPIR_V_BINARY 0x9552 +#define GL_PARAMETER_BUFFER 0x80EE +#define GL_PARAMETER_BUFFER_BINDING 0x80EF +#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 +#define GL_VERTICES_SUBMITTED 0x82EE +#define GL_PRIMITIVES_SUBMITTED 0x82EF +#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 +#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 +#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 +#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 +#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 +#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 +#define GL_POLYGON_OFFSET_CLAMP 0x8E1B +#define GL_SPIR_V_EXTENSIONS 0x9553 +#define GL_NUM_SPIR_V_EXTENSIONS 0x9554 +#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF +#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED +typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC) (GLfloat factor, GLfloat units, GLfloat clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); +GLAPI void APIENTRY glMultiDrawArraysIndirectCount (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glPolygonOffsetClamp (GLfloat factor, GLfloat units, GLfloat clamp); +#endif +#endif /* GL_VERSION_4_6 */ + +#ifndef GL_ARB_ES2_compatibility +#define GL_ARB_ES2_compatibility 1 +#endif /* GL_ARB_ES2_compatibility */ + +#ifndef GL_ARB_ES3_1_compatibility +#define GL_ARB_ES3_1_compatibility 1 +#endif /* GL_ARB_ES3_1_compatibility */ + +#ifndef GL_ARB_ES3_2_compatibility +#define GL_ARB_ES3_2_compatibility 1 +#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE +#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 +#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 +typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXARBPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveBoundingBoxARB (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +#endif +#endif /* GL_ARB_ES3_2_compatibility */ + +#ifndef GL_ARB_ES3_compatibility +#define GL_ARB_ES3_compatibility 1 +#endif /* GL_ARB_ES3_compatibility */ + +#ifndef GL_ARB_arrays_of_arrays +#define GL_ARB_arrays_of_arrays 1 +#endif /* GL_ARB_arrays_of_arrays */ + +#ifndef GL_ARB_base_instance +#define GL_ARB_base_instance 1 +#endif /* GL_ARB_base_instance */ + +#ifndef GL_ARB_bindless_texture +#define GL_ARB_bindless_texture 1 +typedef khronos_uint64_t GLuint64EXT; +#define GL_UNSIGNED_INT64_ARB 0x140F +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_ARB_bindless_texture */ + +#ifndef GL_ARB_blend_func_extended +#define GL_ARB_blend_func_extended 1 +#endif /* GL_ARB_blend_func_extended */ + +#ifndef GL_ARB_buffer_storage +#define GL_ARB_buffer_storage 1 +#endif /* GL_ARB_buffer_storage */ + +#ifndef GL_ARB_cl_event +#define GL_ARB_cl_event 1 +struct _cl_context; +struct _cl_event; +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#endif +#endif /* GL_ARB_cl_event */ + +#ifndef GL_ARB_clear_buffer_object +#define GL_ARB_clear_buffer_object 1 +#endif /* GL_ARB_clear_buffer_object */ + +#ifndef GL_ARB_clear_texture +#define GL_ARB_clear_texture 1 +#endif /* GL_ARB_clear_texture */ + +#ifndef GL_ARB_clip_control +#define GL_ARB_clip_control 1 +#endif /* GL_ARB_clip_control */ + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D +typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); +#endif +#endif /* GL_ARB_color_buffer_float */ + +#ifndef GL_ARB_compatibility +#define GL_ARB_compatibility 1 +#endif /* GL_ARB_compatibility */ + +#ifndef GL_ARB_compressed_texture_pixel_storage +#define GL_ARB_compressed_texture_pixel_storage 1 +#endif /* GL_ARB_compressed_texture_pixel_storage */ + +#ifndef GL_ARB_compute_shader +#define GL_ARB_compute_shader 1 +#endif /* GL_ARB_compute_shader */ + +#ifndef GL_ARB_compute_variable_group_size +#define GL_ARB_compute_variable_group_size 1 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#endif +#endif /* GL_ARB_compute_variable_group_size */ + +#ifndef GL_ARB_conditional_render_inverted +#define GL_ARB_conditional_render_inverted 1 +#endif /* GL_ARB_conditional_render_inverted */ + +#ifndef GL_ARB_conservative_depth +#define GL_ARB_conservative_depth 1 +#endif /* GL_ARB_conservative_depth */ + +#ifndef GL_ARB_copy_buffer +#define GL_ARB_copy_buffer 1 +#endif /* GL_ARB_copy_buffer */ + +#ifndef GL_ARB_copy_image +#define GL_ARB_copy_image 1 +#endif /* GL_ARB_copy_image */ + +#ifndef GL_ARB_cull_distance +#define GL_ARB_cull_distance 1 +#endif /* GL_ARB_cull_distance */ + +#ifndef GL_ARB_debug_output +#define GL_ARB_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#endif +#endif /* GL_ARB_debug_output */ + +#ifndef GL_ARB_depth_buffer_float +#define GL_ARB_depth_buffer_float 1 +#endif /* GL_ARB_depth_buffer_float */ + +#ifndef GL_ARB_depth_clamp +#define GL_ARB_depth_clamp 1 +#endif /* GL_ARB_depth_clamp */ + +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#endif /* GL_ARB_depth_texture */ + +#ifndef GL_ARB_derivative_control +#define GL_ARB_derivative_control 1 +#endif /* GL_ARB_derivative_control */ + +#ifndef GL_ARB_direct_state_access +#define GL_ARB_direct_state_access 1 +#endif /* GL_ARB_direct_state_access */ + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ARB_draw_buffers */ + +#ifndef GL_ARB_draw_buffers_blend +#define GL_ARB_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif +#endif /* GL_ARB_draw_buffers_blend */ + +#ifndef GL_ARB_draw_elements_base_vertex +#define GL_ARB_draw_elements_base_vertex 1 +#endif /* GL_ARB_draw_elements_base_vertex */ + +#ifndef GL_ARB_draw_indirect +#define GL_ARB_draw_indirect 1 +#endif /* GL_ARB_draw_indirect */ + +#ifndef GL_ARB_draw_instanced +#define GL_ARB_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_ARB_draw_instanced */ + +#ifndef GL_ARB_enhanced_layouts +#define GL_ARB_enhanced_layouts 1 +#endif /* GL_ARB_enhanced_layouts */ + +#ifndef GL_ARB_explicit_attrib_location +#define GL_ARB_explicit_attrib_location 1 +#endif /* GL_ARB_explicit_attrib_location */ + +#ifndef GL_ARB_explicit_uniform_location +#define GL_ARB_explicit_uniform_location 1 +#endif /* GL_ARB_explicit_uniform_location */ + +#ifndef GL_ARB_fragment_coord_conventions +#define GL_ARB_fragment_coord_conventions 1 +#endif /* GL_ARB_fragment_coord_conventions */ + +#ifndef GL_ARB_fragment_layer_viewport +#define GL_ARB_fragment_layer_viewport 1 +#endif /* GL_ARB_fragment_layer_viewport */ + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); +GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); +GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); +#endif +#endif /* GL_ARB_fragment_program */ + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 +#endif /* GL_ARB_fragment_program_shadow */ + +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#endif /* GL_ARB_fragment_shader */ + +#ifndef GL_ARB_fragment_shader_interlock +#define GL_ARB_fragment_shader_interlock 1 +#endif /* GL_ARB_fragment_shader_interlock */ + +#ifndef GL_ARB_framebuffer_no_attachments +#define GL_ARB_framebuffer_no_attachments 1 +#endif /* GL_ARB_framebuffer_no_attachments */ + +#ifndef GL_ARB_framebuffer_object +#define GL_ARB_framebuffer_object 1 +#endif /* GL_ARB_framebuffer_object */ + +#ifndef GL_ARB_framebuffer_sRGB +#define GL_ARB_framebuffer_sRGB 1 +#endif /* GL_ARB_framebuffer_sRGB */ + +#ifndef GL_ARB_geometry_shader4 +#define GL_ARB_geometry_shader4 1 +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_ARB_geometry_shader4 */ + +#ifndef GL_ARB_get_program_binary +#define GL_ARB_get_program_binary 1 +#endif /* GL_ARB_get_program_binary */ + +#ifndef GL_ARB_get_texture_sub_image +#define GL_ARB_get_texture_sub_image 1 +#endif /* GL_ARB_get_texture_sub_image */ + +#ifndef GL_ARB_gl_spirv +#define GL_ARB_gl_spirv 1 +#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 +#define GL_SPIR_V_BINARY_ARB 0x9552 +typedef void (APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpecializeShaderARB (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); +#endif +#endif /* GL_ARB_gl_spirv */ + +#ifndef GL_ARB_gpu_shader5 +#define GL_ARB_gpu_shader5 1 +#endif /* GL_ARB_gpu_shader5 */ + +#ifndef GL_ARB_gpu_shader_fp64 +#define GL_ARB_gpu_shader_fp64 1 +#endif /* GL_ARB_gpu_shader_fp64 */ + +#ifndef GL_ARB_gpu_shader_int64 +#define GL_ARB_gpu_shader_int64 1 +#define GL_INT64_ARB 0x140E +#define GL_INT64_VEC2_ARB 0x8FE9 +#define GL_INT64_VEC3_ARB 0x8FEA +#define GL_INT64_VEC4_ARB 0x8FEB +#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 +typedef void (APIENTRYP PFNGLUNIFORM1I64ARBPROC) (GLint location, GLint64 x); +typedef void (APIENTRYP PFNGLUNIFORM2I64ARBPROC) (GLint location, GLint64 x, GLint64 y); +typedef void (APIENTRYP PFNGLUNIFORM3I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z); +typedef void (APIENTRYP PFNGLUNIFORM4I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +typedef void (APIENTRYP PFNGLUNIFORM1I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM2I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM3I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM4I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM1UI64ARBPROC) (GLint location, GLuint64 x); +typedef void (APIENTRYP PFNGLUNIFORM2UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y); +typedef void (APIENTRYP PFNGLUNIFORM3UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +typedef void (APIENTRYP PFNGLUNIFORM4UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +typedef void (APIENTRYP PFNGLUNIFORM1UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM2UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM3UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM4UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLGETUNIFORMI64VARBPROC) (GLuint program, GLint location, GLint64 *params); +typedef void (APIENTRYP PFNGLGETUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLuint64 *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64ARBPROC) (GLuint program, GLint location, GLint64 x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64ARBPROC) (GLuint program, GLint location, GLuint64 x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1i64ARB (GLint location, GLint64 x); +GLAPI void APIENTRY glUniform2i64ARB (GLint location, GLint64 x, GLint64 y); +GLAPI void APIENTRY glUniform3i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z); +GLAPI void APIENTRY glUniform4i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +GLAPI void APIENTRY glUniform1i64vARB (GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glUniform2i64vARB (GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glUniform3i64vARB (GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glUniform4i64vARB (GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glUniform1ui64ARB (GLint location, GLuint64 x); +GLAPI void APIENTRY glUniform2ui64ARB (GLint location, GLuint64 x, GLuint64 y); +GLAPI void APIENTRY glUniform3ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +GLAPI void APIENTRY glUniform4ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +GLAPI void APIENTRY glUniform1ui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glUniform2ui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glUniform3ui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glUniform4ui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glGetUniformi64vARB (GLuint program, GLint location, GLint64 *params); +GLAPI void APIENTRY glGetUniformui64vARB (GLuint program, GLint location, GLuint64 *params); +GLAPI void APIENTRY glGetnUniformi64vARB (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); +GLAPI void APIENTRY glGetnUniformui64vARB (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); +GLAPI void APIENTRY glProgramUniform1i64ARB (GLuint program, GLint location, GLint64 x); +GLAPI void APIENTRY glProgramUniform2i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y); +GLAPI void APIENTRY glProgramUniform3i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); +GLAPI void APIENTRY glProgramUniform4i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +GLAPI void APIENTRY glProgramUniform1i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glProgramUniform2i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glProgramUniform3i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glProgramUniform4i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glProgramUniform1ui64ARB (GLuint program, GLint location, GLuint64 x); +GLAPI void APIENTRY glProgramUniform2ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y); +GLAPI void APIENTRY glProgramUniform3ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +GLAPI void APIENTRY glProgramUniform4ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +GLAPI void APIENTRY glProgramUniform1ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniform2ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniform3ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniform4ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +#endif +#endif /* GL_ARB_gpu_shader_int64 */ + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +typedef khronos_uint16_t GLhalfARB; +#define GL_HALF_FLOAT_ARB 0x140B +#endif /* GL_ARB_half_float_pixel */ + +#ifndef GL_ARB_half_float_vertex +#define GL_ARB_half_float_vertex 1 +#endif /* GL_ARB_half_float_vertex */ + +#ifndef GL_ARB_imaging +#define GL_ARB_imaging 1 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogram (GLenum target); +GLAPI void APIENTRY glResetMinmax (GLenum target); +#endif +#endif /* GL_ARB_imaging */ + +#ifndef GL_ARB_indirect_parameters +#define GL_ARB_indirect_parameters 1 +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#endif +#endif /* GL_ARB_indirect_parameters */ + +#ifndef GL_ARB_instanced_arrays +#define GL_ARB_instanced_arrays 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); +#endif +#endif /* GL_ARB_instanced_arrays */ + +#ifndef GL_ARB_internalformat_query +#define GL_ARB_internalformat_query 1 +#endif /* GL_ARB_internalformat_query */ + +#ifndef GL_ARB_internalformat_query2 +#define GL_ARB_internalformat_query2 1 +#define GL_SRGB_DECODE_ARB 0x8299 +#define GL_VIEW_CLASS_EAC_R11 0x9383 +#define GL_VIEW_CLASS_EAC_RG11 0x9384 +#define GL_VIEW_CLASS_ETC2_RGB 0x9385 +#define GL_VIEW_CLASS_ETC2_RGBA 0x9386 +#define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387 +#define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388 +#define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389 +#define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A +#define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B +#define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C +#define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D +#define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E +#define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F +#define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390 +#define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391 +#define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392 +#define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393 +#define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394 +#define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395 +#endif /* GL_ARB_internalformat_query2 */ + +#ifndef GL_ARB_invalidate_subdata +#define GL_ARB_invalidate_subdata 1 +#endif /* GL_ARB_invalidate_subdata */ + +#ifndef GL_ARB_map_buffer_alignment +#define GL_ARB_map_buffer_alignment 1 +#endif /* GL_ARB_map_buffer_alignment */ + +#ifndef GL_ARB_map_buffer_range +#define GL_ARB_map_buffer_range 1 +#endif /* GL_ARB_map_buffer_range */ + +#ifndef GL_ARB_matrix_palette +#define GL_ARB_matrix_palette 1 +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); +GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); +GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); +GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); +GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_ARB_matrix_palette */ + +#ifndef GL_ARB_multi_bind +#define GL_ARB_multi_bind 1 +#endif /* GL_ARB_multi_bind */ + +#ifndef GL_ARB_multi_draw_indirect +#define GL_ARB_multi_draw_indirect 1 +#endif /* GL_ARB_multi_draw_indirect */ + +#ifndef GL_ARB_multisample +#define GL_ARB_multisample 1 +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); +#endif +#endif /* GL_ARB_multisample */ + +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); +#endif +#endif /* GL_ARB_multitexture */ + +#ifndef GL_ARB_occlusion_query +#define GL_ARB_occlusion_query 1 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_SAMPLES_PASSED_ARB 0x8914 +typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); +GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQueryARB (GLenum target); +GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_ARB_occlusion_query */ + +#ifndef GL_ARB_occlusion_query2 +#define GL_ARB_occlusion_query2 1 +#endif /* GL_ARB_occlusion_query2 */ + +#ifndef GL_ARB_parallel_shader_compile +#define GL_ARB_parallel_shader_compile 1 +#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 +#define GL_COMPLETION_STATUS_ARB 0x91B1 +typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSARBPROC) (GLuint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMaxShaderCompilerThreadsARB (GLuint count); +#endif +#endif /* GL_ARB_parallel_shader_compile */ + +#ifndef GL_ARB_pipeline_statistics_query +#define GL_ARB_pipeline_statistics_query 1 +#define GL_VERTICES_SUBMITTED_ARB 0x82EE +#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF +#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 +#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 +#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 +#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 +#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 +#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 +#endif /* GL_ARB_pipeline_statistics_query */ + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#endif /* GL_ARB_pixel_buffer_object */ + +#ifndef GL_ARB_point_parameters +#define GL_ARB_point_parameters 1 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_ARB_point_parameters */ + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif /* GL_ARB_point_sprite */ + +#ifndef GL_ARB_polygon_offset_clamp +#define GL_ARB_polygon_offset_clamp 1 +#endif /* GL_ARB_polygon_offset_clamp */ + +#ifndef GL_ARB_post_depth_coverage +#define GL_ARB_post_depth_coverage 1 +#endif /* GL_ARB_post_depth_coverage */ + +#ifndef GL_ARB_program_interface_query +#define GL_ARB_program_interface_query 1 +#endif /* GL_ARB_program_interface_query */ + +#ifndef GL_ARB_provoking_vertex +#define GL_ARB_provoking_vertex 1 +#endif /* GL_ARB_provoking_vertex */ + +#ifndef GL_ARB_query_buffer_object +#define GL_ARB_query_buffer_object 1 +#endif /* GL_ARB_query_buffer_object */ + +#ifndef GL_ARB_robust_buffer_access_behavior +#define GL_ARB_robust_buffer_access_behavior 1 +#endif /* GL_ARB_robust_buffer_access_behavior */ + +#ifndef GL_ARB_robustness +#define GL_ARB_robustness 1 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); +typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); +typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); +GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); +GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); +GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); +GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); +GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#endif +#endif /* GL_ARB_robustness */ + +#ifndef GL_ARB_robustness_isolation +#define GL_ARB_robustness_isolation 1 +#endif /* GL_ARB_robustness_isolation */ + +#ifndef GL_ARB_sample_locations +#define GL_ARB_sample_locations 1 +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 +#define GL_SAMPLE_LOCATION_ARB 0x8E50 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 +typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferSampleLocationsfvARB (GLenum target, GLuint start, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvARB (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glEvaluateDepthValuesARB (void); +#endif +#endif /* GL_ARB_sample_locations */ + +#ifndef GL_ARB_sample_shading +#define GL_ARB_sample_shading 1 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); +#endif +#endif /* GL_ARB_sample_shading */ + +#ifndef GL_ARB_sampler_objects +#define GL_ARB_sampler_objects 1 +#endif /* GL_ARB_sampler_objects */ + +#ifndef GL_ARB_seamless_cube_map +#define GL_ARB_seamless_cube_map 1 +#endif /* GL_ARB_seamless_cube_map */ + +#ifndef GL_ARB_seamless_cubemap_per_texture +#define GL_ARB_seamless_cubemap_per_texture 1 +#endif /* GL_ARB_seamless_cubemap_per_texture */ + +#ifndef GL_ARB_separate_shader_objects +#define GL_ARB_separate_shader_objects 1 +#endif /* GL_ARB_separate_shader_objects */ + +#ifndef GL_ARB_shader_atomic_counter_ops +#define GL_ARB_shader_atomic_counter_ops 1 +#endif /* GL_ARB_shader_atomic_counter_ops */ + +#ifndef GL_ARB_shader_atomic_counters +#define GL_ARB_shader_atomic_counters 1 +#endif /* GL_ARB_shader_atomic_counters */ + +#ifndef GL_ARB_shader_ballot +#define GL_ARB_shader_ballot 1 +#endif /* GL_ARB_shader_ballot */ + +#ifndef GL_ARB_shader_bit_encoding +#define GL_ARB_shader_bit_encoding 1 +#endif /* GL_ARB_shader_bit_encoding */ + +#ifndef GL_ARB_shader_clock +#define GL_ARB_shader_clock 1 +#endif /* GL_ARB_shader_clock */ + +#ifndef GL_ARB_shader_draw_parameters +#define GL_ARB_shader_draw_parameters 1 +#endif /* GL_ARB_shader_draw_parameters */ + +#ifndef GL_ARB_shader_group_vote +#define GL_ARB_shader_group_vote 1 +#endif /* GL_ARB_shader_group_vote */ + +#ifndef GL_ARB_shader_image_load_store +#define GL_ARB_shader_image_load_store 1 +#endif /* GL_ARB_shader_image_load_store */ + +#ifndef GL_ARB_shader_image_size +#define GL_ARB_shader_image_size 1 +#endif /* GL_ARB_shader_image_size */ + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef char GLcharARB; +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); +GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); +GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); +GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); +GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); +GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); +GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); +GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); +GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); +GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#endif +#endif /* GL_ARB_shader_objects */ + +#ifndef GL_ARB_shader_precision +#define GL_ARB_shader_precision 1 +#endif /* GL_ARB_shader_precision */ + +#ifndef GL_ARB_shader_stencil_export +#define GL_ARB_shader_stencil_export 1 +#endif /* GL_ARB_shader_stencil_export */ + +#ifndef GL_ARB_shader_storage_buffer_object +#define GL_ARB_shader_storage_buffer_object 1 +#endif /* GL_ARB_shader_storage_buffer_object */ + +#ifndef GL_ARB_shader_subroutine +#define GL_ARB_shader_subroutine 1 +#endif /* GL_ARB_shader_subroutine */ + +#ifndef GL_ARB_shader_texture_image_samples +#define GL_ARB_shader_texture_image_samples 1 +#endif /* GL_ARB_shader_texture_image_samples */ + +#ifndef GL_ARB_shader_texture_lod +#define GL_ARB_shader_texture_lod 1 +#endif /* GL_ARB_shader_texture_lod */ + +#ifndef GL_ARB_shader_viewport_layer_array +#define GL_ARB_shader_viewport_layer_array 1 +#endif /* GL_ARB_shader_viewport_layer_array */ + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#endif /* GL_ARB_shading_language_100 */ + +#ifndef GL_ARB_shading_language_420pack +#define GL_ARB_shading_language_420pack 1 +#endif /* GL_ARB_shading_language_420pack */ + +#ifndef GL_ARB_shading_language_include +#define GL_ARB_shading_language_include 1 +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#endif +#endif /* GL_ARB_shading_language_include */ + +#ifndef GL_ARB_shading_language_packing +#define GL_ARB_shading_language_packing 1 +#endif /* GL_ARB_shading_language_packing */ + +#ifndef GL_ARB_shadow +#define GL_ARB_shadow 1 +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#endif /* GL_ARB_shadow */ + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#endif /* GL_ARB_shadow_ambient */ + +#ifndef GL_ARB_sparse_buffer +#define GL_ARB_sparse_buffer 1 +#define GL_SPARSE_STORAGE_BIT_ARB 0x0400 +#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 +typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); +GLAPI void APIENTRY glNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +GLAPI void APIENTRY glNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +#endif +#endif /* GL_ARB_sparse_buffer */ + +#ifndef GL_ARB_sparse_texture +#define GL_ARB_sparse_texture 1 +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +#endif +#endif /* GL_ARB_sparse_texture */ + +#ifndef GL_ARB_sparse_texture2 +#define GL_ARB_sparse_texture2 1 +#endif /* GL_ARB_sparse_texture2 */ + +#ifndef GL_ARB_sparse_texture_clamp +#define GL_ARB_sparse_texture_clamp 1 +#endif /* GL_ARB_sparse_texture_clamp */ + +#ifndef GL_ARB_spirv_extensions +#define GL_ARB_spirv_extensions 1 +#endif /* GL_ARB_spirv_extensions */ + +#ifndef GL_ARB_stencil_texturing +#define GL_ARB_stencil_texturing 1 +#endif /* GL_ARB_stencil_texturing */ + +#ifndef GL_ARB_sync +#define GL_ARB_sync 1 +#endif /* GL_ARB_sync */ + +#ifndef GL_ARB_tessellation_shader +#define GL_ARB_tessellation_shader 1 +#endif /* GL_ARB_tessellation_shader */ + +#ifndef GL_ARB_texture_barrier +#define GL_ARB_texture_barrier 1 +#endif /* GL_ARB_texture_barrier */ + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#endif /* GL_ARB_texture_border_clamp */ + +#ifndef GL_ARB_texture_buffer_object +#define GL_ARB_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_ARB_texture_buffer_object */ + +#ifndef GL_ARB_texture_buffer_object_rgb32 +#define GL_ARB_texture_buffer_object_rgb32 1 +#endif /* GL_ARB_texture_buffer_object_rgb32 */ + +#ifndef GL_ARB_texture_buffer_range +#define GL_ARB_texture_buffer_range 1 +#endif /* GL_ARB_texture_buffer_range */ + +#ifndef GL_ARB_texture_compression +#define GL_ARB_texture_compression 1 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); +#endif +#endif /* GL_ARB_texture_compression */ + +#ifndef GL_ARB_texture_compression_bptc +#define GL_ARB_texture_compression_bptc 1 +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#endif /* GL_ARB_texture_compression_bptc */ + +#ifndef GL_ARB_texture_compression_rgtc +#define GL_ARB_texture_compression_rgtc 1 +#endif /* GL_ARB_texture_compression_rgtc */ + +#ifndef GL_ARB_texture_cube_map +#define GL_ARB_texture_cube_map 1 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#endif /* GL_ARB_texture_cube_map */ + +#ifndef GL_ARB_texture_cube_map_array +#define GL_ARB_texture_cube_map_array 1 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#endif /* GL_ARB_texture_cube_map_array */ + +#ifndef GL_ARB_texture_env_add +#define GL_ARB_texture_env_add 1 +#endif /* GL_ARB_texture_env_add */ + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#endif /* GL_ARB_texture_env_combine */ + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 +#endif /* GL_ARB_texture_env_crossbar */ + +#ifndef GL_ARB_texture_env_dot3 +#define GL_ARB_texture_env_dot3 1 +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA_ARB 0x86AF +#endif /* GL_ARB_texture_env_dot3 */ + +#ifndef GL_ARB_texture_filter_anisotropic +#define GL_ARB_texture_filter_anisotropic 1 +#endif /* GL_ARB_texture_filter_anisotropic */ + +#ifndef GL_ARB_texture_filter_minmax +#define GL_ARB_texture_filter_minmax 1 +#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 +#define GL_WEIGHTED_AVERAGE_ARB 0x9367 +#endif /* GL_ARB_texture_filter_minmax */ + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#endif /* GL_ARB_texture_float */ + +#ifndef GL_ARB_texture_gather +#define GL_ARB_texture_gather 1 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#endif /* GL_ARB_texture_gather */ + +#ifndef GL_ARB_texture_mirror_clamp_to_edge +#define GL_ARB_texture_mirror_clamp_to_edge 1 +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#endif /* GL_ARB_texture_mirrored_repeat */ + +#ifndef GL_ARB_texture_multisample +#define GL_ARB_texture_multisample 1 +#endif /* GL_ARB_texture_multisample */ + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 +#endif /* GL_ARB_texture_non_power_of_two */ + +#ifndef GL_ARB_texture_query_levels +#define GL_ARB_texture_query_levels 1 +#endif /* GL_ARB_texture_query_levels */ + +#ifndef GL_ARB_texture_query_lod +#define GL_ARB_texture_query_lod 1 +#endif /* GL_ARB_texture_query_lod */ + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#endif /* GL_ARB_texture_rectangle */ + +#ifndef GL_ARB_texture_rg +#define GL_ARB_texture_rg 1 +#endif /* GL_ARB_texture_rg */ + +#ifndef GL_ARB_texture_rgb10_a2ui +#define GL_ARB_texture_rgb10_a2ui 1 +#endif /* GL_ARB_texture_rgb10_a2ui */ + +#ifndef GL_ARB_texture_stencil8 +#define GL_ARB_texture_stencil8 1 +#endif /* GL_ARB_texture_stencil8 */ + +#ifndef GL_ARB_texture_storage +#define GL_ARB_texture_storage 1 +#endif /* GL_ARB_texture_storage */ + +#ifndef GL_ARB_texture_storage_multisample +#define GL_ARB_texture_storage_multisample 1 +#endif /* GL_ARB_texture_storage_multisample */ + +#ifndef GL_ARB_texture_swizzle +#define GL_ARB_texture_swizzle 1 +#endif /* GL_ARB_texture_swizzle */ + +#ifndef GL_ARB_texture_view +#define GL_ARB_texture_view 1 +#endif /* GL_ARB_texture_view */ + +#ifndef GL_ARB_timer_query +#define GL_ARB_timer_query 1 +#endif /* GL_ARB_timer_query */ + +#ifndef GL_ARB_transform_feedback2 +#define GL_ARB_transform_feedback2 1 +#endif /* GL_ARB_transform_feedback2 */ + +#ifndef GL_ARB_transform_feedback3 +#define GL_ARB_transform_feedback3 1 +#endif /* GL_ARB_transform_feedback3 */ + +#ifndef GL_ARB_transform_feedback_instanced +#define GL_ARB_transform_feedback_instanced 1 +#endif /* GL_ARB_transform_feedback_instanced */ + +#ifndef GL_ARB_transform_feedback_overflow_query +#define GL_ARB_transform_feedback_overflow_query 1 +#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED +#endif /* GL_ARB_transform_feedback_overflow_query */ + +#ifndef GL_ARB_transpose_matrix +#define GL_ARB_transpose_matrix 1 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); +#endif +#endif /* GL_ARB_transpose_matrix */ + +#ifndef GL_ARB_uniform_buffer_object +#define GL_ARB_uniform_buffer_object 1 +#endif /* GL_ARB_uniform_buffer_object */ + +#ifndef GL_ARB_vertex_array_bgra +#define GL_ARB_vertex_array_bgra 1 +#endif /* GL_ARB_vertex_array_bgra */ + +#ifndef GL_ARB_vertex_array_object +#define GL_ARB_vertex_array_object 1 +#endif /* GL_ARB_vertex_array_object */ + +#ifndef GL_ARB_vertex_attrib_64bit +#define GL_ARB_vertex_attrib_64bit 1 +#endif /* GL_ARB_vertex_attrib_64bit */ + +#ifndef GL_ARB_vertex_attrib_binding +#define GL_ARB_vertex_attrib_binding 1 +#endif /* GL_ARB_vertex_attrib_binding */ + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); +typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); +typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); +typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); +typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); +typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); +typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); +GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); +GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); +GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); +GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); +GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); +GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); +GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); +GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexBlendARB (GLint count); +#endif +#endif /* GL_ARB_vertex_blend */ + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 +typedef khronos_ssize_t GLsizeiptrARB; +typedef khronos_intptr_t GLintptrARB; +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); +GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); +GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_ARB_vertex_buffer_object */ + +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); +#endif +#endif /* GL_ARB_vertex_program */ + +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); +#endif +#endif /* GL_ARB_vertex_shader */ + +#ifndef GL_ARB_vertex_type_10f_11f_11f_rev +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ + +#ifndef GL_ARB_vertex_type_2_10_10_10_rev +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ + +#ifndef GL_ARB_viewport_array +#define GL_ARB_viewport_array 1 +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYDVNVPROC) (GLuint first, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDDNVPROC) (GLuint index, GLdouble n, GLdouble f); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthRangeArraydvNV (GLuint first, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glDepthRangeIndexeddNV (GLuint index, GLdouble n, GLdouble f); +#endif +#endif /* GL_ARB_viewport_array */ + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); +#endif +#endif /* GL_ARB_window_pos */ + +#ifndef GL_KHR_blend_equation_advanced +#define GL_KHR_blend_equation_advanced 1 +#define GL_MULTIPLY_KHR 0x9294 +#define GL_SCREEN_KHR 0x9295 +#define GL_OVERLAY_KHR 0x9296 +#define GL_DARKEN_KHR 0x9297 +#define GL_LIGHTEN_KHR 0x9298 +#define GL_COLORDODGE_KHR 0x9299 +#define GL_COLORBURN_KHR 0x929A +#define GL_HARDLIGHT_KHR 0x929B +#define GL_SOFTLIGHT_KHR 0x929C +#define GL_DIFFERENCE_KHR 0x929E +#define GL_EXCLUSION_KHR 0x92A0 +#define GL_HSL_HUE_KHR 0x92AD +#define GL_HSL_SATURATION_KHR 0x92AE +#define GL_HSL_COLOR_KHR 0x92AF +#define GL_HSL_LUMINOSITY_KHR 0x92B0 +typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendBarrierKHR (void); +#endif +#endif /* GL_KHR_blend_equation_advanced */ + +#ifndef GL_KHR_blend_equation_advanced_coherent +#define GL_KHR_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 +#endif /* GL_KHR_blend_equation_advanced_coherent */ + +#ifndef GL_KHR_context_flush_control +#define GL_KHR_context_flush_control 1 +#endif /* GL_KHR_context_flush_control */ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#endif /* GL_KHR_debug */ + +#ifndef GL_KHR_no_error +#define GL_KHR_no_error 1 +#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 +#endif /* GL_KHR_no_error */ + +#ifndef GL_KHR_parallel_shader_compile +#define GL_KHR_parallel_shader_compile 1 +#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 +#define GL_COMPLETION_STATUS_KHR 0x91B1 +typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count); +#endif +#endif /* GL_KHR_parallel_shader_compile */ + +#ifndef GL_KHR_robust_buffer_access_behavior +#define GL_KHR_robust_buffer_access_behavior 1 +#endif /* GL_KHR_robust_buffer_access_behavior */ + +#ifndef GL_KHR_robustness +#define GL_KHR_robustness 1 +#define GL_CONTEXT_ROBUST_ACCESS 0x90F3 +#endif /* GL_KHR_robustness */ + +#ifndef GL_KHR_shader_subgroup +#define GL_KHR_shader_subgroup 1 +#define GL_SUBGROUP_SIZE_KHR 0x9532 +#define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 +#define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 +#define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 +#define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 +#define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 +#define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 +#define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 +#define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 +#define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 +#define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 +#define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 +#endif /* GL_KHR_shader_subgroup */ + +#ifndef GL_KHR_texture_compression_astc_hdr +#define GL_KHR_texture_compression_astc_hdr 1 +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif /* GL_KHR_texture_compression_astc_hdr */ + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif /* GL_KHR_texture_compression_astc_ldr */ + +#ifndef GL_KHR_texture_compression_astc_sliced_3d +#define GL_KHR_texture_compression_astc_sliced_3d 1 +#endif /* GL_KHR_texture_compression_astc_sliced_3d */ + +#ifndef GL_OES_byte_coordinates +#define GL_OES_byte_coordinates 1 +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); +typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x, GLbyte y); +typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y, GLbyte z); +typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z, GLbyte w); +typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); +GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); +GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); +GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); +GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex2bOES (GLbyte x, GLbyte y); +GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y, GLbyte z); +GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z, GLbyte w); +GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); +#endif +#endif /* GL_OES_byte_coordinates */ + +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif /* GL_OES_compressed_paletted_texture */ + +#ifndef GL_OES_fixed_point +#define GL_OES_fixed_point 1 +typedef khronos_int32_t GLfixed; +#define GL_FIXED_OES 0x140C +typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); +typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); +typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); +typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); +typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); +typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); +typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); +typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); +typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); +typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); +typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); +typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); +typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); +typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); +typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); +typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); +typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); +typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); +typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); +typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); +typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); +typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); +GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); +GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); +GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); +GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); +GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glLineWidthxOES (GLfixed width); +GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); +GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glPointSizexOES (GLfixed size); +GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); +GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); +GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); +GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); +GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); +GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); +GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); +GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); +GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); +GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); +GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glIndexxOES (GLfixed component); +GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); +GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); +GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); +GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); +GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glPassThroughxOES (GLfixed token); +GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); +GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); +GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); +GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); +GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); +GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); +GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glVertex2xOES (GLfixed x); +GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); +#endif +#endif /* GL_OES_fixed_point */ + +#ifndef GL_OES_query_matrix +#define GL_OES_query_matrix 1 +typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); +#endif +#endif /* GL_OES_query_matrix */ + +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#endif /* GL_OES_read_format */ + +#ifndef GL_OES_single_precision +#define GL_OES_single_precision 1 +typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); +typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); +typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); +typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); +typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); +GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); +GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); +GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); +GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#endif +#endif /* GL_OES_single_precision */ + +#ifndef GL_3DFX_multisample +#define GL_3DFX_multisample 1 +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#endif /* GL_3DFX_multisample */ + +#ifndef GL_3DFX_tbuffer +#define GL_3DFX_tbuffer 1 +typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); +#endif +#endif /* GL_3DFX_tbuffer */ + +#ifndef GL_3DFX_texture_compression_FXT1 +#define GL_3DFX_texture_compression_FXT1 1 +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#endif /* GL_3DFX_texture_compression_FXT1 */ + +#ifndef GL_AMD_blend_minmax_factor +#define GL_AMD_blend_minmax_factor 1 +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FACTOR_MAX_AMD 0x901D +#endif /* GL_AMD_blend_minmax_factor */ + +#ifndef GL_AMD_conservative_depth +#define GL_AMD_conservative_depth 1 +#endif /* GL_AMD_conservative_depth */ + +#ifndef GL_AMD_debug_output +#define GL_AMD_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#endif +#endif /* GL_AMD_debug_output */ + +#ifndef GL_AMD_depth_clamp_separate +#define GL_AMD_depth_clamp_separate 1 +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#endif /* GL_AMD_depth_clamp_separate */ + +#ifndef GL_AMD_draw_buffers_blend +#define GL_AMD_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_AMD_draw_buffers_blend */ + +#ifndef GL_AMD_framebuffer_multisample_advanced +#define GL_AMD_framebuffer_multisample_advanced 1 +#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 +#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 +#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 +#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 +#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 +#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_AMD_framebuffer_multisample_advanced */ + +#ifndef GL_AMD_framebuffer_sample_positions +#define GL_AMD_framebuffer_sample_positions 1 +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +#define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE +#define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF +#define GL_ALL_PIXELS_AMD 0xFFFFFFFF +typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC) (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC) (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferSamplePositionsfvAMD (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); +GLAPI void APIENTRY glNamedFramebufferSamplePositionsfvAMD (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); +GLAPI void APIENTRY glGetFramebufferParameterfvAMD (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); +GLAPI void APIENTRY glGetNamedFramebufferParameterfvAMD (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); +#endif +#endif /* GL_AMD_framebuffer_sample_positions */ + +#ifndef GL_AMD_gcn_shader +#define GL_AMD_gcn_shader 1 +#endif /* GL_AMD_gcn_shader */ + +#ifndef GL_AMD_gpu_shader_half_float +#define GL_AMD_gpu_shader_half_float 1 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +#define GL_FLOAT16_MAT2_AMD 0x91C5 +#define GL_FLOAT16_MAT3_AMD 0x91C6 +#define GL_FLOAT16_MAT4_AMD 0x91C7 +#define GL_FLOAT16_MAT2x3_AMD 0x91C8 +#define GL_FLOAT16_MAT2x4_AMD 0x91C9 +#define GL_FLOAT16_MAT3x2_AMD 0x91CA +#define GL_FLOAT16_MAT3x4_AMD 0x91CB +#define GL_FLOAT16_MAT4x2_AMD 0x91CC +#define GL_FLOAT16_MAT4x3_AMD 0x91CD +#endif /* GL_AMD_gpu_shader_half_float */ + +#ifndef GL_AMD_gpu_shader_int16 +#define GL_AMD_gpu_shader_int16 1 +#endif /* GL_AMD_gpu_shader_int16 */ + +#ifndef GL_AMD_gpu_shader_int64 +#define GL_AMD_gpu_shader_int64 1 +typedef khronos_int64_t GLint64EXT; +#define GL_INT64_NV 0x140E +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); +GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); +GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); +GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); +GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); +GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); +GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_AMD_gpu_shader_int64 */ + +#ifndef GL_AMD_interleaved_elements +#define GL_AMD_interleaved_elements 1 +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); +#endif +#endif /* GL_AMD_interleaved_elements */ + +#ifndef GL_AMD_multi_draw_indirect +#define GL_AMD_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#endif +#endif /* GL_AMD_multi_draw_indirect */ + +#ifndef GL_AMD_name_gen_delete +#define GL_AMD_name_gen_delete 1 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); +typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); +typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); +GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); +GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); +#endif +#endif /* GL_AMD_name_gen_delete */ + +#ifndef GL_AMD_occlusion_query_event +#define GL_AMD_occlusion_query_event 1 +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); +#endif +#endif /* GL_AMD_occlusion_query_event */ + +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); +typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); +GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +#endif /* GL_AMD_performance_monitor */ + +#ifndef GL_AMD_pinned_memory +#define GL_AMD_pinned_memory 1 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#endif /* GL_AMD_pinned_memory */ + +#ifndef GL_AMD_query_buffer_object +#define GL_AMD_query_buffer_object 1 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#endif /* GL_AMD_query_buffer_object */ + +#ifndef GL_AMD_sample_positions +#define GL_AMD_sample_positions 1 +typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); +#endif +#endif /* GL_AMD_sample_positions */ + +#ifndef GL_AMD_seamless_cubemap_per_texture +#define GL_AMD_seamless_cubemap_per_texture 1 +#endif /* GL_AMD_seamless_cubemap_per_texture */ + +#ifndef GL_AMD_shader_atomic_counter_ops +#define GL_AMD_shader_atomic_counter_ops 1 +#endif /* GL_AMD_shader_atomic_counter_ops */ + +#ifndef GL_AMD_shader_ballot +#define GL_AMD_shader_ballot 1 +#endif /* GL_AMD_shader_ballot */ + +#ifndef GL_AMD_shader_explicit_vertex_parameter +#define GL_AMD_shader_explicit_vertex_parameter 1 +#endif /* GL_AMD_shader_explicit_vertex_parameter */ + +#ifndef GL_AMD_shader_gpu_shader_half_float_fetch +#define GL_AMD_shader_gpu_shader_half_float_fetch 1 +#endif /* GL_AMD_shader_gpu_shader_half_float_fetch */ + +#ifndef GL_AMD_shader_image_load_store_lod +#define GL_AMD_shader_image_load_store_lod 1 +#endif /* GL_AMD_shader_image_load_store_lod */ + +#ifndef GL_AMD_shader_stencil_export +#define GL_AMD_shader_stencil_export 1 +#endif /* GL_AMD_shader_stencil_export */ + +#ifndef GL_AMD_shader_trinary_minmax +#define GL_AMD_shader_trinary_minmax 1 +#endif /* GL_AMD_shader_trinary_minmax */ + +#ifndef GL_AMD_sparse_texture +#define GL_AMD_sparse_texture 1 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#endif +#endif /* GL_AMD_sparse_texture */ + +#ifndef GL_AMD_stencil_operation_extended +#define GL_AMD_stencil_operation_extended 1 +#define GL_SET_AMD 0x874A +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); +#endif +#endif /* GL_AMD_stencil_operation_extended */ + +#ifndef GL_AMD_texture_gather_bias_lod +#define GL_AMD_texture_gather_bias_lod 1 +#endif /* GL_AMD_texture_gather_bias_lod */ + +#ifndef GL_AMD_texture_texture4 +#define GL_AMD_texture_texture4 1 +#endif /* GL_AMD_texture_texture4 */ + +#ifndef GL_AMD_transform_feedback3_lines_triangles +#define GL_AMD_transform_feedback3_lines_triangles 1 +#endif /* GL_AMD_transform_feedback3_lines_triangles */ + +#ifndef GL_AMD_transform_feedback4 +#define GL_AMD_transform_feedback4 1 +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#endif /* GL_AMD_transform_feedback4 */ + +#ifndef GL_AMD_vertex_shader_layer +#define GL_AMD_vertex_shader_layer 1 +#endif /* GL_AMD_vertex_shader_layer */ + +#ifndef GL_AMD_vertex_shader_tessellator +#define GL_AMD_vertex_shader_tessellator 1 +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_DISCRETE_AMD 0x9006 +#define GL_CONTINUOUS_AMD 0x9007 +typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); +GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); +#endif +#endif /* GL_AMD_vertex_shader_tessellator */ + +#ifndef GL_AMD_vertex_shader_viewport_index +#define GL_AMD_vertex_shader_viewport_index 1 +#endif /* GL_AMD_vertex_shader_viewport_index */ + +#ifndef GL_APPLE_aux_depth_stencil +#define GL_APPLE_aux_depth_stencil 1 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#endif /* GL_APPLE_aux_depth_stencil */ + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#endif /* GL_APPLE_client_storage */ + +#ifndef GL_APPLE_element_array +#define GL_APPLE_element_array 1 +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#endif +#endif /* GL_APPLE_element_array */ + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); +typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); +typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); +GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); +GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); +GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); +#endif +#endif /* GL_APPLE_fence */ + +#ifndef GL_APPLE_float_pixels +#define GL_APPLE_float_pixels 1 +#define GL_HALF_APPLE 0x140B +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#endif /* GL_APPLE_float_pixels */ + +#ifndef GL_APPLE_flush_buffer_range +#define GL_APPLE_flush_buffer_range 1 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); +#endif +#endif /* GL_APPLE_flush_buffer_range */ + +#ifndef GL_APPLE_object_purgeable +#define GL_APPLE_object_purgeable 1 +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_RETAINED_APPLE 0x8A1B +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_PURGEABLE_APPLE 0x8A1D +typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#endif +#endif /* GL_APPLE_object_purgeable */ + +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_RGB_RAW_422_APPLE 0x8A51 +#endif /* GL_APPLE_rgb_422 */ + +#ifndef GL_APPLE_row_bytes +#define GL_APPLE_row_bytes 1 +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#endif /* GL_APPLE_row_bytes */ + +#ifndef GL_APPLE_specular_vector +#define GL_APPLE_specular_vector 1 +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#endif /* GL_APPLE_specular_vector */ + +#ifndef GL_APPLE_texture_range +#define GL_APPLE_texture_range 1 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF +typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_APPLE_texture_range */ + +#ifndef GL_APPLE_transform_hint +#define GL_APPLE_transform_hint 1 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#endif /* GL_APPLE_transform_hint */ + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); +GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); +#endif +#endif /* GL_APPLE_vertex_array_object */ + +#ifndef GL_APPLE_vertex_array_range +#define GL_APPLE_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); +#endif +#endif /* GL_APPLE_vertex_array_range */ + +#ifndef GL_APPLE_vertex_program_evaluators +#define GL_APPLE_vertex_program_evaluators 1 +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#endif +#endif /* GL_APPLE_vertex_program_evaluators */ + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 +#define GL_YCBCR_422_APPLE 0x85B9 +#endif /* GL_APPLE_ycbcr_422 */ + +#ifndef GL_ATI_draw_buffers +#define GL_ATI_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15_ATI 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ATI_draw_buffers */ + +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); +#endif +#endif /* GL_ATI_element_array */ + +#ifndef GL_ATI_envmap_bumpmap +#define GL_ATI_envmap_bumpmap 1 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); +GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); +GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); +#endif +#endif /* GL_ATI_envmap_bumpmap */ + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_RED_BIT_ATI 0x00000001 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); +GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glBeginFragmentShaderATI (void); +GLAPI void APIENTRY glEndFragmentShaderATI (void); +GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); +GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); +GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); +#endif +#endif /* GL_ATI_fragment_shader */ + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 +typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); +#endif +#endif /* GL_ATI_map_object_buffer */ + +#ifndef GL_ATI_meminfo +#define GL_ATI_meminfo 1 +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#endif /* GL_ATI_meminfo */ + +#ifndef GL_ATI_pixel_format_float +#define GL_ATI_pixel_format_float 1 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#endif /* GL_ATI_pixel_format_float */ + +#ifndef GL_ATI_pn_triangles +#define GL_ATI_pn_triangles 1 +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); +GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_pn_triangles */ + +#ifndef GL_ATI_separate_stencil +#define GL_ATI_separate_stencil 1 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#endif +#endif /* GL_ATI_separate_stencil */ + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#endif /* GL_ATI_text_fragment_shader */ + +#ifndef GL_ATI_texture_env_combine3 +#define GL_ATI_texture_env_combine3 1 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#endif /* GL_ATI_texture_env_combine3 */ + +#ifndef GL_ATI_texture_float +#define GL_ATI_texture_float 1 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#endif /* GL_ATI_texture_float */ + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#endif /* GL_ATI_texture_mirror_once */ + +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); +typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); +GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); +GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_array_object */ + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_attrib_array_object */ + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SOURCE_ATI 0x8774 +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); +GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); +GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); +GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); +GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); +GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); +GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); +GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); +GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); +GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_vertex_streams */ + +#ifndef GL_EXT_422_pixels +#define GL_EXT_422_pixels 1 +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF +#endif /* GL_EXT_422_pixels */ + +#ifndef GL_EXT_EGL_image_storage +#define GL_EXT_EGL_image_storage 1 +typedef void *GLeglImageOES; +typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list); +typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list); +GLAPI void APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list); +#endif +#endif /* GL_EXT_EGL_image_storage */ + +#ifndef GL_EXT_EGL_sync +#define GL_EXT_EGL_sync 1 +#endif /* GL_EXT_EGL_sync */ + +#ifndef GL_EXT_abgr +#define GL_EXT_abgr 1 +#define GL_ABGR_EXT 0x8000 +#endif /* GL_EXT_abgr */ + +#ifndef GL_EXT_bgra +#define GL_EXT_bgra 1 +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 +#endif /* GL_EXT_bgra */ + +#ifndef GL_EXT_bindable_uniform +#define GL_EXT_bindable_uniform 1 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); +typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); +typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); +GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); +GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); +#endif +#endif /* GL_EXT_bindable_uniform */ + +#ifndef GL_EXT_blend_color +#define GL_EXT_blend_color 1 +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR_EXT 0x8005 +typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#endif +#endif /* GL_EXT_blend_color */ + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_EXT_blend_equation_separate */ + +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 1 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_EXT_blend_func_separate */ + +#ifndef GL_EXT_blend_logic_op +#define GL_EXT_blend_logic_op 1 +#endif /* GL_EXT_blend_logic_op */ + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_BLEND_EQUATION_EXT 0x8009 +typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); +#endif +#endif /* GL_EXT_blend_minmax */ + +#ifndef GL_EXT_blend_subtract +#define GL_EXT_blend_subtract 1 +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#endif /* GL_EXT_blend_subtract */ + +#ifndef GL_EXT_clip_volume_hint +#define GL_EXT_clip_volume_hint 1 +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#endif /* GL_EXT_clip_volume_hint */ + +#ifndef GL_EXT_cmyka +#define GL_EXT_cmyka 1 +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#endif /* GL_EXT_cmyka */ + +#ifndef GL_EXT_color_subtable +#define GL_EXT_color_subtable 1 +typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#endif +#endif /* GL_EXT_color_subtable */ + +#ifndef GL_EXT_compiled_vertex_array +#define GL_EXT_compiled_vertex_array 1 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); +GLAPI void APIENTRY glUnlockArraysEXT (void); +#endif +#endif /* GL_EXT_compiled_vertex_array */ + +#ifndef GL_EXT_convolution +#define GL_EXT_convolution 1 +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#endif +#endif /* GL_EXT_convolution */ + +#ifndef GL_EXT_coordinate_frame +#define GL_EXT_coordinate_frame 1 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 +typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); +typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); +typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); +typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); +typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); +typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); +typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); +typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); +GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); +GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); +GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); +GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); +GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); +GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); +GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); +GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); +GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); +GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); +GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); +GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); +GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); +GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_coordinate_frame */ + +#ifndef GL_EXT_copy_texture +#define GL_EXT_copy_texture 1 +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_copy_texture */ + +#ifndef GL_EXT_cull_vertex +#define GL_EXT_cull_vertex 1 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); +GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_cull_vertex */ + +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_EXT_debug_label */ + +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPopGroupMarkerEXT (void); +#endif +#endif /* GL_EXT_debug_marker */ + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 1 +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); +#endif +#endif /* GL_EXT_depth_bounds_test */ + +#ifndef GL_EXT_direct_state_access +#define GL_EXT_direct_state_access 1 +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); +typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); +typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); +typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); +GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); +GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); +GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); +GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); +GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); +GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); +GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); +GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); +GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); +GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); +GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); +GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); +GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); +GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); +GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); +GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); +GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); +GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); +#endif +#endif /* GL_EXT_direct_state_access */ + +#ifndef GL_EXT_draw_buffers2 +#define GL_EXT_draw_buffers2 1 +typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#endif +#endif /* GL_EXT_draw_buffers2 */ + +#ifndef GL_EXT_draw_instanced +#define GL_EXT_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_EXT_draw_instanced */ + +#ifndef GL_EXT_draw_range_elements +#define GL_EXT_draw_range_elements 1 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#endif +#endif /* GL_EXT_draw_range_elements */ + +#ifndef GL_EXT_external_buffer +#define GL_EXT_external_buffer 1 +typedef void *GLeglClientBufferEXT; +typedef void (APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +GLAPI void APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +#endif +#endif /* GL_EXT_external_buffer */ + +#ifndef GL_EXT_fog_coord +#define GL_EXT_fog_coord 1 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); +GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); +GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); +GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_fog_coord */ + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* GL_EXT_framebuffer_blit */ + +#ifndef GL_EXT_framebuffer_multisample +#define GL_EXT_framebuffer_multisample 1 +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_framebuffer_multisample */ + +#ifndef GL_EXT_framebuffer_multisample_blit_scaled +#define GL_EXT_framebuffer_multisample_blit_scaled 1 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); +#endif +#endif /* GL_EXT_framebuffer_object */ + +#ifndef GL_EXT_framebuffer_sRGB +#define GL_EXT_framebuffer_sRGB 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#endif /* GL_EXT_framebuffer_sRGB */ + +#ifndef GL_EXT_geometry_shader4 +#define GL_EXT_geometry_shader4 1 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +#endif +#endif /* GL_EXT_geometry_shader4 */ + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 1 +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#endif +#endif /* GL_EXT_gpu_program_parameters */ + +#ifndef GL_EXT_gpu_shader4 +#define GL_EXT_gpu_shader4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); +#endif +#endif /* GL_EXT_gpu_shader4 */ + +#ifndef GL_EXT_histogram +#define GL_EXT_histogram 1 +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogramEXT (GLenum target); +GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); +#endif +#endif /* GL_EXT_histogram */ + +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#endif /* GL_EXT_index_array_formats */ + +#ifndef GL_EXT_index_func +#define GL_EXT_index_func 1 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); +#endif +#endif /* GL_EXT_index_func */ + +#ifndef GL_EXT_index_material +#define GL_EXT_index_material 1 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_index_material */ + +#ifndef GL_EXT_index_texture +#define GL_EXT_index_texture 1 +#endif /* GL_EXT_index_texture */ + +#ifndef GL_EXT_light_texture +#define GL_EXT_light_texture 1 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); +GLAPI void APIENTRY glTextureLightEXT (GLenum pname); +GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_light_texture */ + +#ifndef GL_EXT_memory_object +#define GL_EXT_memory_object 1 +#define GL_TEXTURE_TILING_EXT 0x9580 +#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 +#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B +#define GL_NUM_TILING_TYPES_EXT 0x9582 +#define GL_TILING_TYPES_EXT 0x9583 +#define GL_OPTIMAL_TILING_EXT 0x9584 +#define GL_LINEAR_TILING_EXT 0x9585 +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_UUID_SIZE_EXT 16 +typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data); +typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data); +typedef void (APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects); +typedef GLboolean (APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject); +typedef void (APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects); +typedef void (APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXSTORAGEMEM1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM1DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data); +GLAPI void APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data); +GLAPI void APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects); +GLAPI GLboolean APIENTRY glIsMemoryObjectEXT (GLuint memoryObject); +GLAPI void APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects); +GLAPI void APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params); +GLAPI void APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTexStorageMem1DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureStorageMem1DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +#endif +#endif /* GL_EXT_memory_object */ + +#ifndef GL_EXT_memory_object_fd +#define GL_EXT_memory_object_fd 1 +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 +typedef void (APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); +#endif +#endif /* GL_EXT_memory_object_fd */ + +#ifndef GL_EXT_memory_object_win32 +#define GL_EXT_memory_object_win32 1 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_LUID_SIZE_EXT 8 +#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 +#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A +#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B +#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C +typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle); +typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle); +GLAPI void APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name); +#endif +#endif /* GL_EXT_memory_object_win32 */ + +#ifndef GL_EXT_misc_attribute +#define GL_EXT_misc_attribute 1 +#endif /* GL_EXT_misc_attribute */ + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#endif +#endif /* GL_EXT_multi_draw_arrays */ + +#ifndef GL_EXT_multisample +#define GL_EXT_multisample 1 +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); +#endif +#endif /* GL_EXT_multisample */ + +#ifndef GL_EXT_multiview_tessellation_geometry_shader +#define GL_EXT_multiview_tessellation_geometry_shader 1 +#endif /* GL_EXT_multiview_tessellation_geometry_shader */ + +#ifndef GL_EXT_multiview_texture_multisample +#define GL_EXT_multiview_texture_multisample 1 +#endif /* GL_EXT_multiview_texture_multisample */ + +#ifndef GL_EXT_multiview_timer_query +#define GL_EXT_multiview_timer_query 1 +#endif /* GL_EXT_multiview_timer_query */ + +#ifndef GL_EXT_packed_depth_stencil +#define GL_EXT_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#endif /* GL_EXT_packed_depth_stencil */ + +#ifndef GL_EXT_packed_float +#define GL_EXT_packed_float 1 +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#endif /* GL_EXT_packed_float */ + +#ifndef GL_EXT_packed_pixels +#define GL_EXT_packed_pixels 1 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#endif /* GL_EXT_packed_pixels */ + +#ifndef GL_EXT_paletted_texture +#define GL_EXT_paletted_texture 1 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); +GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_paletted_texture */ + +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#endif /* GL_EXT_pixel_buffer_object */ + +#ifndef GL_EXT_pixel_transform +#define GL_EXT_pixel_transform 1 +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_pixel_transform */ + +#ifndef GL_EXT_pixel_transform_color_table +#define GL_EXT_pixel_transform_color_table 1 +#endif /* GL_EXT_pixel_transform_color_table */ + +#ifndef GL_EXT_point_parameters +#define GL_EXT_point_parameters 1 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_EXT_point_parameters */ + +#ifndef GL_EXT_polygon_offset +#define GL_EXT_polygon_offset 1 +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); +#endif +#endif /* GL_EXT_polygon_offset */ + +#ifndef GL_EXT_polygon_offset_clamp +#define GL_EXT_polygon_offset_clamp 1 +#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B +typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp); +#endif +#endif /* GL_EXT_polygon_offset_clamp */ + +#ifndef GL_EXT_post_depth_coverage +#define GL_EXT_post_depth_coverage 1 +#endif /* GL_EXT_post_depth_coverage */ + +#ifndef GL_EXT_provoking_vertex +#define GL_EXT_provoking_vertex 1 +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); +#endif +#endif /* GL_EXT_provoking_vertex */ + +#ifndef GL_EXT_raster_multisample +#define GL_EXT_raster_multisample 1 +#define GL_RASTER_MULTISAMPLE_EXT 0x9327 +#define GL_RASTER_SAMPLES_EXT 0x9328 +#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 +#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A +#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B +#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C +typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); +#endif +#endif /* GL_EXT_raster_multisample */ + +#ifndef GL_EXT_rescale_normal +#define GL_EXT_rescale_normal 1 +#define GL_RESCALE_NORMAL_EXT 0x803A +#endif /* GL_EXT_rescale_normal */ + +#ifndef GL_EXT_secondary_color +#define GL_EXT_secondary_color 1 +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_secondary_color */ + +#ifndef GL_EXT_semaphore +#define GL_EXT_semaphore 1 +#define GL_LAYOUT_GENERAL_EXT 0x958D +#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E +#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F +#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 +#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 +#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 +#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 +#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 +#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 +typedef void (APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores); +typedef void (APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores); +typedef GLboolean (APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore); +typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params); +typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params); +typedef void (APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); +typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores); +GLAPI void APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores); +GLAPI GLboolean APIENTRY glIsSemaphoreEXT (GLuint semaphore); +GLAPI void APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params); +GLAPI void APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params); +GLAPI void APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); +GLAPI void APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); +#endif +#endif /* GL_EXT_semaphore */ + +#ifndef GL_EXT_semaphore_fd +#define GL_EXT_semaphore_fd 1 +typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd); +#endif +#endif /* GL_EXT_semaphore_fd */ + +#ifndef GL_EXT_semaphore_win32 +#define GL_EXT_semaphore_win32 1 +#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 +#define GL_D3D12_FENCE_VALUE_EXT 0x9595 +typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle); +typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle); +GLAPI void APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name); +#endif +#endif /* GL_EXT_semaphore_win32 */ + +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); +typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); +GLAPI void APIENTRY glActiveProgramEXT (GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); +#endif +#endif /* GL_EXT_separate_shader_objects */ + +#ifndef GL_EXT_separate_specular_color +#define GL_EXT_separate_specular_color 1 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#endif /* GL_EXT_separate_specular_color */ + +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_EXT_shader_framebuffer_fetch 1 +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#endif /* GL_EXT_shader_framebuffer_fetch */ + +#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent +#define GL_EXT_shader_framebuffer_fetch_non_coherent 1 +typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferFetchBarrierEXT (void); +#endif +#endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */ + +#ifndef GL_EXT_shader_image_load_formatted +#define GL_EXT_shader_image_load_formatted 1 +#endif /* GL_EXT_shader_image_load_formatted */ + +#ifndef GL_EXT_shader_image_load_store +#define GL_EXT_shader_image_load_store 1 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); +#endif +#endif /* GL_EXT_shader_image_load_store */ + +#ifndef GL_EXT_shader_integer_mix +#define GL_EXT_shader_integer_mix 1 +#endif /* GL_EXT_shader_integer_mix */ + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 +#endif /* GL_EXT_shadow_funcs */ + +#ifndef GL_EXT_shared_texture_palette +#define GL_EXT_shared_texture_palette 1 +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#endif /* GL_EXT_shared_texture_palette */ + +#ifndef GL_EXT_sparse_texture2 +#define GL_EXT_sparse_texture2 1 +#endif /* GL_EXT_sparse_texture2 */ + +#ifndef GL_EXT_stencil_clear_tag +#define GL_EXT_stencil_clear_tag 1 +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); +#endif +#endif /* GL_EXT_stencil_clear_tag */ + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 1 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); +#endif +#endif /* GL_EXT_stencil_two_side */ + +#ifndef GL_EXT_stencil_wrap +#define GL_EXT_stencil_wrap 1 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_DECR_WRAP_EXT 0x8508 +#endif /* GL_EXT_stencil_wrap */ + +#ifndef GL_EXT_subtexture +#define GL_EXT_subtexture 1 +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_subtexture */ + +#ifndef GL_EXT_texture +#define GL_EXT_texture 1 +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4_EXT 0x804F +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#endif /* GL_EXT_texture */ + +#ifndef GL_EXT_texture3D +#define GL_EXT_texture3D 1 +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_texture3D */ + +#ifndef GL_EXT_texture_array +#define GL_EXT_texture_array 1 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +#endif +#endif /* GL_EXT_texture_array */ + +#ifndef GL_EXT_texture_buffer_object +#define GL_EXT_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_EXT_texture_buffer_object */ + +#ifndef GL_EXT_texture_compression_latc +#define GL_EXT_texture_compression_latc 1 +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#endif /* GL_EXT_texture_compression_latc */ + +#ifndef GL_EXT_texture_compression_rgtc +#define GL_EXT_texture_compression_rgtc 1 +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#endif /* GL_EXT_texture_compression_rgtc */ + +#ifndef GL_EXT_texture_compression_s3tc +#define GL_EXT_texture_compression_s3tc 1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#endif /* GL_EXT_texture_compression_s3tc */ + +#ifndef GL_EXT_texture_cube_map +#define GL_EXT_texture_cube_map 1 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#endif /* GL_EXT_texture_cube_map */ + +#ifndef GL_EXT_texture_env_add +#define GL_EXT_texture_env_add 1 +#endif /* GL_EXT_texture_env_add */ + +#ifndef GL_EXT_texture_env_combine +#define GL_EXT_texture_env_combine 1 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT_EXT 0x8576 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA_EXT 0x859A +#endif /* GL_EXT_texture_env_combine */ + +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#endif /* GL_EXT_texture_env_dot3 */ + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif /* GL_EXT_texture_filter_anisotropic */ + +#ifndef GL_EXT_texture_filter_minmax +#define GL_EXT_texture_filter_minmax 1 +#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 +#define GL_WEIGHTED_AVERAGE_EXT 0x9367 +#endif /* GL_EXT_texture_filter_minmax */ + +#ifndef GL_EXT_texture_integer +#define GL_EXT_texture_integer 1 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGB8UI_EXT 0x8D7D +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGB32I_EXT 0x8D83 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGB16I_EXT 0x8D89 +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGB8I_EXT 0x8D8F +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); +typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#endif +#endif /* GL_EXT_texture_integer */ + +#ifndef GL_EXT_texture_lod_bias +#define GL_EXT_texture_lod_bias 1 +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#endif /* GL_EXT_texture_lod_bias */ + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_EXT_texture_mirror_clamp 1 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#endif /* GL_EXT_texture_mirror_clamp */ + +#ifndef GL_EXT_texture_object +#define GL_EXT_texture_object 1 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); +typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); +GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); +GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); +GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); +GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#endif +#endif /* GL_EXT_texture_object */ + +#ifndef GL_EXT_texture_perturb_normal +#define GL_EXT_texture_perturb_normal 1 +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF +typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); +#endif +#endif /* GL_EXT_texture_perturb_normal */ + +#ifndef GL_EXT_texture_sRGB +#define GL_EXT_texture_sRGB 1 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#endif /* GL_EXT_texture_sRGB */ + +#ifndef GL_EXT_texture_sRGB_R8 +#define GL_EXT_texture_sRGB_R8 1 +#define GL_SR8_EXT 0x8FBD +#endif /* GL_EXT_texture_sRGB_R8 */ + +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif /* GL_EXT_texture_sRGB_decode */ + +#ifndef GL_EXT_texture_shadow_lod +#define GL_EXT_texture_shadow_lod 1 +#endif /* GL_EXT_texture_shadow_lod */ + +#ifndef GL_EXT_texture_shared_exponent +#define GL_EXT_texture_shared_exponent 1 +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#endif /* GL_EXT_texture_shared_exponent */ + +#ifndef GL_EXT_texture_snorm +#define GL_EXT_texture_snorm 1 +#define GL_ALPHA_SNORM 0x9010 +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_ALPHA8_SNORM 0x9014 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_ALPHA16_SNORM 0x9018 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_INTENSITY16_SNORM 0x901B +#define GL_RED_SNORM 0x8F90 +#define GL_RG_SNORM 0x8F91 +#define GL_RGB_SNORM 0x8F92 +#define GL_RGBA_SNORM 0x8F93 +#endif /* GL_EXT_texture_snorm */ + +#ifndef GL_EXT_texture_swizzle +#define GL_EXT_texture_swizzle 1 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#endif /* GL_EXT_texture_swizzle */ + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 1 +#define GL_TIME_ELAPSED_EXT 0x88BF +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +#endif /* GL_EXT_timer_query */ + +#ifndef GL_EXT_transform_feedback +#define GL_EXT_transform_feedback 1 +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackEXT (void); +GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#endif +#endif /* GL_EXT_transform_feedback */ + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); +typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); +typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glArrayElementEXT (GLint i); +GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); +GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); +GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#endif +#endif /* GL_EXT_vertex_array */ + +#ifndef GL_EXT_vertex_array_bgra +#define GL_EXT_vertex_array_bgra 1 +#endif /* GL_EXT_vertex_array_bgra */ + +#ifndef GL_EXT_vertex_attrib_64bit +#define GL_EXT_vertex_attrib_64bit 1 +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); +#endif +#endif /* GL_EXT_vertex_attrib_64bit */ + +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); +typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); +typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); +typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); +typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); +typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); +typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); +typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); +typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); +typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); +typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVertexShaderEXT (void); +GLAPI void APIENTRY glEndVertexShaderEXT (void); +GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); +GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); +GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); +GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); +GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); +GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); +GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); +GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); +GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); +GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); +GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); +GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); +GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); +GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); +GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); +GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); +GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); +GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); +GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); +GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); +GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); +GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); +GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +#endif +#endif /* GL_EXT_vertex_shader */ + +#ifndef GL_EXT_vertex_weighting +#define GL_EXT_vertex_weighting 1 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); +GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); +GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_vertex_weighting */ + +#ifndef GL_EXT_win32_keyed_mutex +#define GL_EXT_win32_keyed_mutex 1 +typedef GLboolean (APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout); +typedef GLboolean (APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout); +GLAPI GLboolean APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key); +#endif +#endif /* GL_EXT_win32_keyed_mutex */ + +#ifndef GL_EXT_window_rectangles +#define GL_EXT_window_rectangles 1 +#define GL_INCLUSIVE_EXT 0x8F10 +#define GL_EXCLUSIVE_EXT 0x8F11 +#define GL_WINDOW_RECTANGLE_EXT 0x8F12 +#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 +#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 +#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 +typedef void (APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box); +#endif +#endif /* GL_EXT_window_rectangles */ + +#ifndef GL_EXT_x11_sync_object +#define GL_EXT_x11_sync_object 1 +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#endif +#endif /* GL_EXT_x11_sync_object */ + +#ifndef GL_GREMEDY_frame_terminator +#define GL_GREMEDY_frame_terminator 1 +typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); +#endif +#endif /* GL_GREMEDY_frame_terminator */ + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 +typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); +#endif +#endif /* GL_GREMEDY_string_marker */ + +#ifndef GL_HP_convolution_border_modes +#define GL_HP_convolution_border_modes 1 +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#endif /* GL_HP_convolution_border_modes */ + +#ifndef GL_HP_image_transform +#define GL_HP_image_transform 1 +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_CUBIC_HP 0x815F +#define GL_AVERAGE_HP 0x8160 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_HP_image_transform */ + +#ifndef GL_HP_occlusion_test +#define GL_HP_occlusion_test 1 +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#endif /* GL_HP_occlusion_test */ + +#ifndef GL_HP_texture_lighting +#define GL_HP_texture_lighting 1 +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#endif /* GL_HP_texture_lighting */ + +#ifndef GL_IBM_cull_vertex +#define GL_IBM_cull_vertex 1 +#define GL_CULL_VERTEX_IBM 103050 +#endif /* GL_IBM_cull_vertex */ + +#ifndef GL_IBM_multimode_draw_arrays +#define GL_IBM_multimode_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#endif +#endif /* GL_IBM_multimode_draw_arrays */ + +#ifndef GL_IBM_rasterpos_clip +#define GL_IBM_rasterpos_clip 1 +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#endif /* GL_IBM_rasterpos_clip */ + +#ifndef GL_IBM_static_data +#define GL_IBM_static_data 1 +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 +typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); +#endif +#endif /* GL_IBM_static_data */ + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_IBM_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#endif /* GL_IBM_texture_mirrored_repeat */ + +#ifndef GL_IBM_vertex_array_lists +#define GL_IBM_vertex_array_lists 1 +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); +GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#endif +#endif /* GL_IBM_vertex_array_lists */ + +#ifndef GL_INGR_blend_func_separate +#define GL_INGR_blend_func_separate 1 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_INGR_blend_func_separate */ + +#ifndef GL_INGR_color_clamp +#define GL_INGR_color_clamp 1 +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#endif /* GL_INGR_color_clamp */ + +#ifndef GL_INGR_interlace_read +#define GL_INGR_interlace_read 1 +#define GL_INTERLACE_READ_INGR 0x8568 +#endif /* GL_INGR_interlace_read */ + +#ifndef GL_INTEL_blackhole_render +#define GL_INTEL_blackhole_render 1 +#define GL_BLACKHOLE_RENDER_INTEL 0x83FC +#endif /* GL_INTEL_blackhole_render */ + +#ifndef GL_INTEL_conservative_rasterization +#define GL_INTEL_conservative_rasterization 1 +#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE +#endif /* GL_INTEL_conservative_rasterization */ + +#ifndef GL_INTEL_fragment_shader_ordering +#define GL_INTEL_fragment_shader_ordering 1 +#endif /* GL_INTEL_fragment_shader_ordering */ + +#ifndef GL_INTEL_framebuffer_CMAA +#define GL_INTEL_framebuffer_CMAA 1 +typedef void (APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void); +#endif +#endif /* GL_INTEL_framebuffer_CMAA */ + +#ifndef GL_INTEL_map_texture +#define GL_INTEL_map_texture 1 +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 +typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); +typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); +GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); +GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#endif +#endif /* GL_INTEL_map_texture */ + +#ifndef GL_INTEL_parallel_arrays +#define GL_INTEL_parallel_arrays 1 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); +GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); +#endif +#endif /* GL_INTEL_parallel_arrays */ + +#ifndef GL_INTEL_performance_query +#define GL_INTEL_performance_query 1 +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); +typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); +typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); +typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); +typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); +typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); +GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); +GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); +GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); +GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); +GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#endif +#endif /* GL_INTEL_performance_query */ + +#ifndef GL_MESAX_texture_stack +#define GL_MESAX_texture_stack 1 +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#endif /* GL_MESAX_texture_stack */ + +#ifndef GL_MESA_framebuffer_flip_x +#define GL_MESA_framebuffer_flip_x 1 +#define GL_FRAMEBUFFER_FLIP_X_MESA 0x8BBC +#endif /* GL_MESA_framebuffer_flip_x */ + +#ifndef GL_MESA_framebuffer_flip_y +#define GL_MESA_framebuffer_flip_y 1 +#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB +typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIMESAPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) (GLenum target, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferParameteriMESA (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glGetFramebufferParameterivMESA (GLenum target, GLenum pname, GLint *params); +#endif +#endif /* GL_MESA_framebuffer_flip_y */ + +#ifndef GL_MESA_framebuffer_swap_xy +#define GL_MESA_framebuffer_swap_xy 1 +#define GL_FRAMEBUFFER_SWAP_XY_MESA 0x8BBD +#endif /* GL_MESA_framebuffer_swap_xy */ + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 +#define GL_PACK_INVERT_MESA 0x8758 +#endif /* GL_MESA_pack_invert */ + +#ifndef GL_MESA_program_binary_formats +#define GL_MESA_program_binary_formats 1 +#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F +#endif /* GL_MESA_program_binary_formats */ + +#ifndef GL_MESA_resize_buffers +#define GL_MESA_resize_buffers 1 +typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glResizeBuffersMESA (void); +#endif +#endif /* GL_MESA_resize_buffers */ + +#ifndef GL_MESA_shader_integer_functions +#define GL_MESA_shader_integer_functions 1 +#endif /* GL_MESA_shader_integer_functions */ + +#ifndef GL_MESA_tile_raster_order +#define GL_MESA_tile_raster_order 1 +#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8 +#define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9 +#define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA +#endif /* GL_MESA_tile_raster_order */ + +#ifndef GL_MESA_window_pos +#define GL_MESA_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); +#endif +#endif /* GL_MESA_window_pos */ + +#ifndef GL_MESA_ycbcr_texture +#define GL_MESA_ycbcr_texture 1 +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_YCBCR_MESA 0x8757 +#endif /* GL_MESA_ycbcr_texture */ + +#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers +#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 +#endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */ + +#ifndef GL_NVX_conditional_render +#define GL_NVX_conditional_render 1 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); +GLAPI void APIENTRY glEndConditionalRenderNVX (void); +#endif +#endif /* GL_NVX_conditional_render */ + +#ifndef GL_NVX_gpu_memory_info +#define GL_NVX_gpu_memory_info 1 +#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 +#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 +#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 +#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A +#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B +#endif /* GL_NVX_gpu_memory_info */ + +#ifndef GL_NVX_gpu_multicast2 +#define GL_NVX_gpu_multicast2 1 +#define GL_UPLOAD_GPU_MASK_NVX 0x954A +typedef void (APIENTRYP PFNGLUPLOADGPUMASKNVXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC) (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); +typedef void (APIENTRYP PFNGLMULTICASTSCISSORARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLint *v); +typedef GLuint (APIENTRYP PFNGLASYNCCOPYBUFFERSUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); +typedef GLuint (APIENTRYP PFNGLASYNCCOPYIMAGESUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUploadGpuMaskNVX (GLbitfield mask); +GLAPI void APIENTRY glMulticastViewportArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glMulticastViewportPositionWScaleNVX (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); +GLAPI void APIENTRY glMulticastScissorArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLint *v); +GLAPI GLuint APIENTRY glAsyncCopyBufferSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); +GLAPI GLuint APIENTRY glAsyncCopyImageSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); +#endif +#endif /* GL_NVX_gpu_multicast2 */ + +#ifndef GL_NVX_linked_gpu_multicast +#define GL_NVX_linked_gpu_multicast 1 +#define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800 +#define GL_MAX_LGPU_GPUS_NVX 0x92BA +typedef void (APIENTRYP PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLLGPUCOPYIMAGESUBDATANVXPROC) (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLLGPUINTERLOCKNVXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLGPUNamedBufferSubDataNVX (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glLGPUCopyImageSubDataNVX (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glLGPUInterlockNVX (void); +#endif +#endif /* GL_NVX_linked_gpu_multicast */ + +#ifndef GL_NVX_progress_fence +#define GL_NVX_progress_fence 1 +typedef GLuint (APIENTRYP PFNGLCREATEPROGRESSFENCENVXPROC) (void); +typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREUI64NVXPROC) (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +typedef void (APIENTRYP PFNGLWAITSEMAPHOREUI64NVXPROC) (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +typedef void (APIENTRYP PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC) (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glCreateProgressFenceNVX (void); +GLAPI void APIENTRY glSignalSemaphoreui64NVX (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +GLAPI void APIENTRY glWaitSemaphoreui64NVX (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +GLAPI void APIENTRY glClientWaitSemaphoreui64NVX (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +#endif +#endif /* GL_NVX_progress_fence */ + +#ifndef GL_NV_alpha_to_coverage_dither_control +#define GL_NV_alpha_to_coverage_dither_control 1 +#define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D +#define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E +#define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F +#define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF +typedef void (APIENTRYP PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAlphaToCoverageDitherControlNV (GLenum mode); +#endif +#endif /* GL_NV_alpha_to_coverage_dither_control */ + +#ifndef GL_NV_bindless_multi_draw_indirect +#define GL_NV_bindless_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#endif +#endif /* GL_NV_bindless_multi_draw_indirect */ + +#ifndef GL_NV_bindless_multi_draw_indirect_count +#define GL_NV_bindless_multi_draw_indirect_count 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +#endif +#endif /* GL_NV_bindless_multi_draw_indirect_count */ + +#ifndef GL_NV_bindless_texture +#define GL_NV_bindless_texture 1 +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); +#endif +#endif /* GL_NV_bindless_texture */ + +#ifndef GL_NV_blend_equation_advanced +#define GL_NV_blend_equation_advanced 1 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLUE_NV 0x1905 +#define GL_COLORBURN_NV 0x929A +#define GL_COLORDODGE_NV 0x9299 +#define GL_CONJOINT_NV 0x9284 +#define GL_CONTRAST_NV 0x92A1 +#define GL_DARKEN_NV 0x9297 +#define GL_DIFFERENCE_NV 0x929E +#define GL_DISJOINT_NV 0x9283 +#define GL_DST_ATOP_NV 0x928F +#define GL_DST_IN_NV 0x928B +#define GL_DST_NV 0x9287 +#define GL_DST_OUT_NV 0x928D +#define GL_DST_OVER_NV 0x9289 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_GREEN_NV 0x1904 +#define GL_HARDLIGHT_NV 0x929B +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LIGHTEN_NV 0x9298 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_MINUS_NV 0x929F +#define GL_MULTIPLY_NV 0x9294 +#define GL_OVERLAY_NV 0x9296 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_PLUS_NV 0x9291 +#define GL_RED_NV 0x1903 +#define GL_SCREEN_NV 0x9295 +#define GL_SOFTLIGHT_NV 0x929C +#define GL_SRC_ATOP_NV 0x928E +#define GL_SRC_IN_NV 0x928A +#define GL_SRC_NV 0x9286 +#define GL_SRC_OUT_NV 0x928C +#define GL_SRC_OVER_NV 0x9288 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_XOR_NV 0x1506 +typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); +GLAPI void APIENTRY glBlendBarrierNV (void); +#endif +#endif /* GL_NV_blend_equation_advanced */ + +#ifndef GL_NV_blend_equation_advanced_coherent +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#endif /* GL_NV_blend_equation_advanced_coherent */ + +#ifndef GL_NV_blend_minmax_factor +#define GL_NV_blend_minmax_factor 1 +#endif /* GL_NV_blend_minmax_factor */ + +#ifndef GL_NV_blend_square +#define GL_NV_blend_square 1 +#endif /* GL_NV_blend_square */ + +#ifndef GL_NV_clip_space_w_scaling +#define GL_NV_clip_space_w_scaling 1 +#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C +#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D +#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E +typedef void (APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff); +#endif +#endif /* GL_NV_clip_space_w_scaling */ + +#ifndef GL_NV_command_list +#define GL_NV_command_list 1 +#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 +#define GL_NOP_COMMAND_NV 0x0001 +#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 +#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 +#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 +#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 +#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 +#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 +#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 +#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 +#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A +#define GL_BLEND_COLOR_COMMAND_NV 0x000B +#define GL_STENCIL_REF_COMMAND_NV 0x000C +#define GL_LINE_WIDTH_COMMAND_NV 0x000D +#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E +#define GL_ALPHA_REF_COMMAND_NV 0x000F +#define GL_VIEWPORT_COMMAND_NV 0x0010 +#define GL_SCISSOR_COMMAND_NV 0x0011 +#define GL_FRONT_FACE_COMMAND_NV 0x0012 +typedef void (APIENTRYP PFNGLCREATESTATESNVPROC) (GLsizei n, GLuint *states); +typedef void (APIENTRYP PFNGLDELETESTATESNVPROC) (GLsizei n, const GLuint *states); +typedef GLboolean (APIENTRYP PFNGLISSTATENVPROC) (GLuint state); +typedef void (APIENTRYP PFNGLSTATECAPTURENVPROC) (GLuint state, GLenum mode); +typedef GLuint (APIENTRYP PFNGLGETCOMMANDHEADERNVPROC) (GLenum tokenID, GLuint size); +typedef GLushort (APIENTRYP PFNGLGETSTAGEINDEXNVPROC) (GLenum shadertype); +typedef void (APIENTRYP PFNGLDRAWCOMMANDSNVPROC) (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); +typedef void (APIENTRYP PFNGLDRAWCOMMANDSADDRESSNVPROC) (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); +typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESNVPROC) (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +typedef void (APIENTRYP PFNGLCREATECOMMANDLISTSNVPROC) (GLsizei n, GLuint *lists); +typedef void (APIENTRYP PFNGLDELETECOMMANDLISTSNVPROC) (GLsizei n, const GLuint *lists); +typedef GLboolean (APIENTRYP PFNGLISCOMMANDLISTNVPROC) (GLuint list); +typedef void (APIENTRYP PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +typedef void (APIENTRYP PFNGLCOMMANDLISTSEGMENTSNVPROC) (GLuint list, GLuint segments); +typedef void (APIENTRYP PFNGLCOMPILECOMMANDLISTNVPROC) (GLuint list); +typedef void (APIENTRYP PFNGLCALLCOMMANDLISTNVPROC) (GLuint list); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCreateStatesNV (GLsizei n, GLuint *states); +GLAPI void APIENTRY glDeleteStatesNV (GLsizei n, const GLuint *states); +GLAPI GLboolean APIENTRY glIsStateNV (GLuint state); +GLAPI void APIENTRY glStateCaptureNV (GLuint state, GLenum mode); +GLAPI GLuint APIENTRY glGetCommandHeaderNV (GLenum tokenID, GLuint size); +GLAPI GLushort APIENTRY glGetStageIndexNV (GLenum shadertype); +GLAPI void APIENTRY glDrawCommandsNV (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); +GLAPI void APIENTRY glDrawCommandsAddressNV (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); +GLAPI void APIENTRY glDrawCommandsStatesNV (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +GLAPI void APIENTRY glDrawCommandsStatesAddressNV (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +GLAPI void APIENTRY glCreateCommandListsNV (GLsizei n, GLuint *lists); +GLAPI void APIENTRY glDeleteCommandListsNV (GLsizei n, const GLuint *lists); +GLAPI GLboolean APIENTRY glIsCommandListNV (GLuint list); +GLAPI void APIENTRY glListDrawCommandsStatesClientNV (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +GLAPI void APIENTRY glCommandListSegmentsNV (GLuint list, GLuint segments); +GLAPI void APIENTRY glCompileCommandListNV (GLuint list); +GLAPI void APIENTRY glCallCommandListNV (GLuint list); +#endif +#endif /* GL_NV_command_list */ + +#ifndef GL_NV_compute_program5 +#define GL_NV_compute_program5 1 +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC +#endif /* GL_NV_compute_program5 */ + +#ifndef GL_NV_compute_shader_derivatives +#define GL_NV_compute_shader_derivatives 1 +#endif /* GL_NV_compute_shader_derivatives */ + +#ifndef GL_NV_conditional_render +#define GL_NV_conditional_render 1 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRenderNV (void); +#endif +#endif /* GL_NV_conditional_render */ + +#ifndef GL_NV_conservative_raster +#define GL_NV_conservative_raster 1 +#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 +#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 +#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 +#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 +typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); +#endif +#endif /* GL_NV_conservative_raster */ + +#ifndef GL_NV_conservative_raster_dilate +#define GL_NV_conservative_raster_dilate 1 +#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 +#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A +#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B +typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERFNVPROC) (GLenum pname, GLfloat value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConservativeRasterParameterfNV (GLenum pname, GLfloat value); +#endif +#endif /* GL_NV_conservative_raster_dilate */ + +#ifndef GL_NV_conservative_raster_pre_snap +#define GL_NV_conservative_raster_pre_snap 1 +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 +#endif /* GL_NV_conservative_raster_pre_snap */ + +#ifndef GL_NV_conservative_raster_pre_snap_triangles +#define GL_NV_conservative_raster_pre_snap_triangles 1 +#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D +#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F +typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param); +#endif +#endif /* GL_NV_conservative_raster_pre_snap_triangles */ + +#ifndef GL_NV_conservative_raster_underestimation +#define GL_NV_conservative_raster_underestimation 1 +#endif /* GL_NV_conservative_raster_underestimation */ + +#ifndef GL_NV_copy_depth_to_color +#define GL_NV_copy_depth_to_color 1 +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#endif /* GL_NV_copy_depth_to_color */ + +#ifndef GL_NV_copy_image +#define GL_NV_copy_image 1 +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#endif +#endif /* GL_NV_copy_image */ + +#ifndef GL_NV_deep_texture3D +#define GL_NV_deep_texture3D 1 +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 +#endif /* GL_NV_deep_texture3D */ + +#ifndef GL_NV_depth_buffer_float +#define GL_NV_depth_buffer_float 1 +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); +typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); +GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); +#endif +#endif /* GL_NV_depth_buffer_float */ + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 +#define GL_DEPTH_CLAMP_NV 0x864F +#endif /* GL_NV_depth_clamp */ + +#ifndef GL_NV_draw_texture +#define GL_NV_draw_texture 1 +typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#endif +#endif /* GL_NV_draw_texture */ + +#ifndef GL_NV_draw_vulkan_image +#define GL_NV_draw_vulkan_image 1 +typedef void (APIENTRY *GLVULKANPROCNV)(void); +typedef void (APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +typedef GLVULKANPROCNV (APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name); +typedef void (APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); +typedef void (APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); +typedef void (APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +GLAPI GLVULKANPROCNV APIENTRY glGetVkProcAddrNV (const GLchar *name); +GLAPI void APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore); +GLAPI void APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore); +GLAPI void APIENTRY glSignalVkFenceNV (GLuint64 vkFence); +#endif +#endif /* GL_NV_draw_vulkan_image */ + +#ifndef GL_NV_evaluators +#define GL_NV_evaluators 1 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); +#endif +#endif /* GL_NV_evaluators */ + +#ifndef GL_NV_explicit_multisample +#define GL_NV_explicit_multisample 1 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); +GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); +#endif +#endif /* GL_NV_explicit_multisample */ + +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); +GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GLAPI void APIENTRY glFinishFenceNV (GLuint fence); +GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +#endif /* GL_NV_fence */ + +#ifndef GL_NV_fill_rectangle +#define GL_NV_fill_rectangle 1 +#define GL_FILL_RECTANGLE_NV 0x933C +#endif /* GL_NV_fill_rectangle */ + +#ifndef GL_NV_float_buffer +#define GL_NV_float_buffer 1 +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#endif /* GL_NV_float_buffer */ + +#ifndef GL_NV_fog_distance +#define GL_NV_fog_distance 1 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#endif /* GL_NV_fog_distance */ + +#ifndef GL_NV_fragment_coverage_to_color +#define GL_NV_fragment_coverage_to_color 1 +#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD +#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE +typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFragmentCoverageColorNV (GLuint color); +#endif +#endif /* GL_NV_fragment_coverage_to_color */ + +#ifndef GL_NV_fragment_program +#define GL_NV_fragment_program 1 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#endif +#endif /* GL_NV_fragment_program */ + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#endif /* GL_NV_fragment_program2 */ + +#ifndef GL_NV_fragment_program4 +#define GL_NV_fragment_program4 1 +#endif /* GL_NV_fragment_program4 */ + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 +#endif /* GL_NV_fragment_program_option */ + +#ifndef GL_NV_fragment_shader_barycentric +#define GL_NV_fragment_shader_barycentric 1 +#endif /* GL_NV_fragment_shader_barycentric */ + +#ifndef GL_NV_fragment_shader_interlock +#define GL_NV_fragment_shader_interlock 1 +#endif /* GL_NV_fragment_shader_interlock */ + +#ifndef GL_NV_framebuffer_mixed_samples +#define GL_NV_framebuffer_mixed_samples 1 +#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#define GL_DEPTH_SAMPLES_NV 0x932D +#define GL_STENCIL_SAMPLES_NV 0x932E +#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F +#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 +#define GL_COVERAGE_MODULATION_NV 0x9332 +#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 +typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); +typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); +GLAPI void APIENTRY glGetCoverageModulationTableNV (GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glCoverageModulationNV (GLenum components); +#endif +#endif /* GL_NV_framebuffer_mixed_samples */ + +#ifndef GL_NV_framebuffer_multisample_coverage +#define GL_NV_framebuffer_multisample_coverage 1 +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_NV_framebuffer_multisample_coverage */ + +#ifndef GL_NV_geometry_program4 +#define GL_NV_geometry_program4 1 +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); +GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_NV_geometry_program4 */ + +#ifndef GL_NV_geometry_shader4 +#define GL_NV_geometry_shader4 1 +#endif /* GL_NV_geometry_shader4 */ + +#ifndef GL_NV_geometry_shader_passthrough +#define GL_NV_geometry_shader_passthrough 1 +#endif /* GL_NV_geometry_shader_passthrough */ + +#ifndef GL_NV_gpu_multicast +#define GL_NV_gpu_multicast 1 +#define GL_PER_GPU_STORAGE_BIT_NV 0x0800 +#define GL_MULTICAST_GPUS_NV 0x92BA +#define GL_RENDER_GPU_MASK_NV 0x9558 +#define GL_PER_GPU_STORAGE_NV 0x9548 +#define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549 +typedef void (APIENTRYP PFNGLRENDERGPUMASKNVPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLMULTICASTBUFFERSUBDATANVPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC) (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (APIENTRYP PFNGLMULTICASTBLITFRAMEBUFFERNVPROC) (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (APIENTRYP PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTICASTBARRIERNVPROC) (void); +typedef void (APIENTRYP PFNGLMULTICASTWAITSYNCNVPROC) (GLuint signalGpu, GLbitfield waitGpuMask); +typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderGpuMaskNV (GLbitfield mask); +GLAPI void APIENTRY glMulticastBufferSubDataNV (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glMulticastCopyBufferSubDataNV (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glMulticastCopyImageSubDataNV (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +GLAPI void APIENTRY glMulticastBlitFramebufferNV (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI void APIENTRY glMulticastFramebufferSampleLocationsfvNV (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glMulticastBarrierNV (void); +GLAPI void APIENTRY glMulticastWaitSyncNV (GLuint signalGpu, GLbitfield waitGpuMask); +GLAPI void APIENTRY glMulticastGetQueryObjectivNV (GLuint gpu, GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glMulticastGetQueryObjectuivNV (GLuint gpu, GLuint id, GLenum pname, GLuint *params); +GLAPI void APIENTRY glMulticastGetQueryObjecti64vNV (GLuint gpu, GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glMulticastGetQueryObjectui64vNV (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); +#endif +#endif /* GL_NV_gpu_multicast */ + +#ifndef GL_NV_gpu_program4 +#define GL_NV_gpu_program4 1 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); +#endif +#endif /* GL_NV_gpu_program4 */ + +#ifndef GL_NV_gpu_program5 +#define GL_NV_gpu_program5 1 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); +#endif +#endif /* GL_NV_gpu_program5 */ + +#ifndef GL_NV_gpu_program5_mem_extended +#define GL_NV_gpu_program5_mem_extended 1 +#endif /* GL_NV_gpu_program5_mem_extended */ + +#ifndef GL_NV_gpu_shader5 +#define GL_NV_gpu_shader5 1 +#endif /* GL_NV_gpu_shader5 */ + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 +typedef unsigned short GLhalfNV; +#define GL_HALF_FLOAT_NV 0x140B +typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); +typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); +typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); +GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); +GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); +GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); +GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); +GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); +GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); +GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +#endif +#endif /* GL_NV_half_float */ + +#ifndef GL_NV_internalformat_sample_query +#define GL_NV_internalformat_sample_query 1 +#define GL_MULTISAMPLES_NV 0x9371 +#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 +#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 +#define GL_CONFORMANT_NV 0x9374 +typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); +#endif +#endif /* GL_NV_internalformat_sample_query */ + +#ifndef GL_NV_light_max_exponent +#define GL_NV_light_max_exponent 1 +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#endif /* GL_NV_light_max_exponent */ + +#ifndef GL_NV_memory_attachment +#define GL_NV_memory_attachment 1 +#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 +#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 +#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 +#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 +#define GL_MEMORY_ATTACHABLE_NV 0x95A8 +#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 +#define GL_DETACHED_TEXTURES_NV 0x95AA +#define GL_DETACHED_BUFFERS_NV 0x95AB +#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC +#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD +typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); +typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname); +typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); +GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname); +GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset); +#endif +#endif /* GL_NV_memory_attachment */ + +#ifndef GL_NV_memory_object_sparse +#define GL_NV_memory_object_sparse 1 +typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTMEMNVPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTMEMNVPROC) (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC) (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferPageCommitmentMemNV (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +GLAPI void APIENTRY glTexPageCommitmentMemNV (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +GLAPI void APIENTRY glNamedBufferPageCommitmentMemNV (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +GLAPI void APIENTRY glTexturePageCommitmentMemNV (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +#endif +#endif /* GL_NV_memory_object_sparse */ + +#ifndef GL_NV_mesh_shader +#define GL_NV_mesh_shader 1 +#define GL_MESH_SHADER_NV 0x9559 +#define GL_TASK_SHADER_NV 0x955A +#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 +#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 +#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 +#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 +#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 +#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 +#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 +#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 +#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 +#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 +#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A +#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B +#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C +#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D +#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E +#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F +#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 +#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 +#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 +#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 +#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 +#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 +#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A +#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D +#define GL_MAX_MESH_VIEWS_NV 0x9557 +#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF +#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 +#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B +#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C +#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E +#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F +#define GL_MESH_VERTICES_OUT_NV 0x9579 +#define GL_MESH_PRIMITIVES_OUT_NV 0x957A +#define GL_MESH_OUTPUT_TYPE_NV 0x957B +#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D +#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 +#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 +#define GL_MESH_SHADER_BIT_NV 0x00000040 +#define GL_TASK_SHADER_BIT_NV 0x00000080 +#define GL_MESH_SUBROUTINE_NV 0x957C +#define GL_TASK_SUBROUTINE_NV 0x957D +#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E +#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F +typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count); +typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect); +typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count); +GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect); +GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#endif +#endif /* GL_NV_mesh_shader */ + +#ifndef GL_NV_multisample_coverage +#define GL_NV_multisample_coverage 1 +#endif /* GL_NV_multisample_coverage */ + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#endif /* GL_NV_multisample_filter_hint */ + +#ifndef GL_NV_occlusion_query +#define GL_NV_occlusion_query 1 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glEndOcclusionQueryNV (void); +GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_occlusion_query */ + +#ifndef GL_NV_packed_depth_stencil +#define GL_NV_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#endif /* GL_NV_packed_depth_stencil */ + +#ifndef GL_NV_parameter_buffer_object +#define GL_NV_parameter_buffer_object 1 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#endif +#endif /* GL_NV_parameter_buffer_object */ + +#ifndef GL_NV_parameter_buffer_object2 +#define GL_NV_parameter_buffer_object2 1 +#endif /* GL_NV_parameter_buffer_object2 */ + +#ifndef GL_NV_path_rendering +#define GL_NV_path_rendering 1 +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_FILE_NAME_NV 0x9074 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_CONVEX_HULL_NV 0x908B +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_UTF8_NV 0x909A +#define GL_UTF16_NV 0x909B +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_SQUARE_NV 0x90A3 +#define GL_ROUND_NV 0x90A4 +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_BEVEL_NV 0x90A6 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_MOVE_TO_NV 0x02 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_LINE_TO_NV 0x04 +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_RESTART_PATH_NV 0xF0 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_RECT_NV 0xF6 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_ARC_TO_NV 0xFE +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_BOLD_BIT_NV 0x01 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_ROUNDED_RECT_NV 0xE8 +#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 +#define GL_ROUNDED_RECT2_NV 0xEA +#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB +#define GL_ROUNDED_RECT4_NV 0xEC +#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED +#define GL_ROUNDED_RECT8_NV 0xEE +#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF +#define GL_RELATIVE_RECT_NV 0xF7 +#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 +#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 +#define GL_FONT_UNAVAILABLE_NV 0x936A +#define GL_FONT_UNINTELLIGIBLE_NV 0x936B +#define GL_CONIC_CURVE_TO_NV 0x1A +#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B +#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 +#define GL_STANDARD_FONT_FORMAT_NV 0x936C +#define GL_2_BYTES_NV 0x1407 +#define GL_3_BYTES_NV 0x1408 +#define GL_4_BYTES_NV 0x1409 +#define GL_EYE_LINEAR_NV 0x2400 +#define GL_OBJECT_LINEAR_NV 0x2401 +#define GL_CONSTANT_NV 0x8576 +#define GL_PATH_FOG_GEN_MODE_NV 0x90AC +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 +#define GL_PATH_PROJECTION_NV 0x1701 +#define GL_PATH_MODELVIEW_NV 0x1700 +#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 +#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 +#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 +#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 +#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 +#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 +#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 +#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 +#define GL_FRAGMENT_INPUT_NV 0x936D +typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); +typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); +typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); +typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); +typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); +typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); +typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); +typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); +typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); +typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); +typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); +typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); +typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); +typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); +GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); +GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); +GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); +GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); +GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); +GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); +GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); +GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); +GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); +GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); +GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); +GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); +GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); +GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); +GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); +GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); +GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); +GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); +GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); +GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); +GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); +GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); +GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); +GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); +GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); +#endif +#endif /* GL_NV_path_rendering */ + +#ifndef GL_NV_path_rendering_shared_edge +#define GL_NV_path_rendering_shared_edge 1 +#define GL_SHARED_EDGE_NV 0xC0 +#endif /* GL_NV_path_rendering_shared_edge */ + +#ifndef GL_NV_pixel_data_range +#define GL_NV_pixel_data_range 1 +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); +#endif +#endif /* GL_NV_pixel_data_range */ + +#ifndef GL_NV_point_sprite +#define GL_NV_point_sprite 1 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); +#endif +#endif /* GL_NV_point_sprite */ + +#ifndef GL_NV_present_video +#define GL_NV_present_video 1 +#define GL_FRAME_NV 0x8E26 +#define GL_FIELDS_NV 0x8E27 +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESENT_DURATION_NV 0x8E2B +typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); +GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_NV_present_video */ + +#ifndef GL_NV_primitive_restart +#define GL_NV_primitive_restart 1 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveRestartNV (void); +GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); +#endif +#endif /* GL_NV_primitive_restart */ + +#ifndef GL_NV_primitive_shading_rate +#define GL_NV_primitive_shading_rate 1 +#define GL_SHADING_RATE_IMAGE_PER_PRIMITIVE_NV 0x95B1 +#define GL_SHADING_RATE_IMAGE_PALETTE_COUNT_NV 0x95B2 +#endif /* GL_NV_primitive_shading_rate */ + +#ifndef GL_NV_query_resource +#define GL_NV_query_resource 1 +#define GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540 +#define GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542 +#define GL_QUERY_RESOURCE_SYS_RESERVED_NV 0x9544 +#define GL_QUERY_RESOURCE_TEXTURE_NV 0x9545 +#define GL_QUERY_RESOURCE_RENDERBUFFER_NV 0x9546 +#define GL_QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547 +typedef GLint (APIENTRYP PFNGLQUERYRESOURCENVPROC) (GLenum queryType, GLint tagId, GLuint count, GLint *buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glQueryResourceNV (GLenum queryType, GLint tagId, GLuint count, GLint *buffer); +#endif +#endif /* GL_NV_query_resource */ + +#ifndef GL_NV_query_resource_tag +#define GL_NV_query_resource_tag 1 +typedef void (APIENTRYP PFNGLGENQUERYRESOURCETAGNVPROC) (GLsizei n, GLint *tagIds); +typedef void (APIENTRYP PFNGLDELETEQUERYRESOURCETAGNVPROC) (GLsizei n, const GLint *tagIds); +typedef void (APIENTRYP PFNGLQUERYRESOURCETAGNVPROC) (GLint tagId, const GLchar *tagString); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueryResourceTagNV (GLsizei n, GLint *tagIds); +GLAPI void APIENTRY glDeleteQueryResourceTagNV (GLsizei n, const GLint *tagIds); +GLAPI void APIENTRY glQueryResourceTagNV (GLint tagId, const GLchar *tagString); +#endif +#endif /* GL_NV_query_resource_tag */ + +#ifndef GL_NV_register_combiners +#define GL_NV_register_combiners 1 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); +GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); +GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); +#endif +#endif /* GL_NV_register_combiners */ + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); +#endif +#endif /* GL_NV_register_combiners2 */ + +#ifndef GL_NV_representative_fragment_test +#define GL_NV_representative_fragment_test 1 +#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F +#endif /* GL_NV_representative_fragment_test */ + +#ifndef GL_NV_robustness_video_memory_purge +#define GL_NV_robustness_video_memory_purge 1 +#define GL_PURGED_CONTEXT_RESET_NV 0x92BB +#endif /* GL_NV_robustness_video_memory_purge */ + +#ifndef GL_NV_sample_locations +#define GL_NV_sample_locations 1 +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 +#define GL_SAMPLE_LOCATION_NV 0x8E50 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 +typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glResolveDepthValuesNV (void); +#endif +#endif /* GL_NV_sample_locations */ + +#ifndef GL_NV_sample_mask_override_coverage +#define GL_NV_sample_mask_override_coverage 1 +#endif /* GL_NV_sample_mask_override_coverage */ + +#ifndef GL_NV_scissor_exclusive +#define GL_NV_scissor_exclusive 1 +#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 +#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 +typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v); +#endif +#endif /* GL_NV_scissor_exclusive */ + +#ifndef GL_NV_shader_atomic_counters +#define GL_NV_shader_atomic_counters 1 +#endif /* GL_NV_shader_atomic_counters */ + +#ifndef GL_NV_shader_atomic_float +#define GL_NV_shader_atomic_float 1 +#endif /* GL_NV_shader_atomic_float */ + +#ifndef GL_NV_shader_atomic_float64 +#define GL_NV_shader_atomic_float64 1 +#endif /* GL_NV_shader_atomic_float64 */ + +#ifndef GL_NV_shader_atomic_fp16_vector +#define GL_NV_shader_atomic_fp16_vector 1 +#endif /* GL_NV_shader_atomic_fp16_vector */ + +#ifndef GL_NV_shader_atomic_int64 +#define GL_NV_shader_atomic_int64 1 +#endif /* GL_NV_shader_atomic_int64 */ + +#ifndef GL_NV_shader_buffer_load +#define GL_NV_shader_buffer_load 1 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); +typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); +typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); +typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); +typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); +GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); +GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); +GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); +GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); +GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); +GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); +GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); +GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); +GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_NV_shader_buffer_load */ + +#ifndef GL_NV_shader_buffer_store +#define GL_NV_shader_buffer_store 1 +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#endif /* GL_NV_shader_buffer_store */ + +#ifndef GL_NV_shader_storage_buffer_object +#define GL_NV_shader_storage_buffer_object 1 +#endif /* GL_NV_shader_storage_buffer_object */ + +#ifndef GL_NV_shader_subgroup_partitioned +#define GL_NV_shader_subgroup_partitioned 1 +#define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 +#endif /* GL_NV_shader_subgroup_partitioned */ + +#ifndef GL_NV_shader_texture_footprint +#define GL_NV_shader_texture_footprint 1 +#endif /* GL_NV_shader_texture_footprint */ + +#ifndef GL_NV_shader_thread_group +#define GL_NV_shader_thread_group 1 +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_SM_COUNT_NV 0x933B +#endif /* GL_NV_shader_thread_group */ + +#ifndef GL_NV_shader_thread_shuffle +#define GL_NV_shader_thread_shuffle 1 +#endif /* GL_NV_shader_thread_shuffle */ + +#ifndef GL_NV_shading_rate_image +#define GL_NV_shading_rate_image 1 +#define GL_SHADING_RATE_IMAGE_NV 0x9563 +#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 +#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 +#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 +#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A +#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B +#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C +#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D +#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E +#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F +#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B +#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C +#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D +#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E +#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F +#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE +#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF +#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 +typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate); +typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize); +typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); +typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order); +typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture); +GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate); +GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location); +GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize); +GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); +GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order); +GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations); +#endif +#endif /* GL_NV_shading_rate_image */ + +#ifndef GL_NV_stereo_view_rendering +#define GL_NV_stereo_view_rendering 1 +#endif /* GL_NV_stereo_view_rendering */ + +#ifndef GL_NV_tessellation_program5 +#define GL_NV_tessellation_program5 1 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#endif /* GL_NV_tessellation_program5 */ + +#ifndef GL_NV_texgen_emboss +#define GL_NV_texgen_emboss 1 +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F +#endif /* GL_NV_texgen_emboss */ + +#ifndef GL_NV_texgen_reflection +#define GL_NV_texgen_reflection 1 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_REFLECTION_MAP_NV 0x8512 +#endif /* GL_NV_texgen_reflection */ + +#ifndef GL_NV_texture_barrier +#define GL_NV_texture_barrier 1 +typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureBarrierNV (void); +#endif +#endif /* GL_NV_texture_barrier */ + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 +#endif /* GL_NV_texture_compression_vtc */ + +#ifndef GL_NV_texture_env_combine4 +#define GL_NV_texture_env_combine4 1 +#define GL_COMBINE4_NV 0x8503 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND3_ALPHA_NV 0x859B +#endif /* GL_NV_texture_env_combine4 */ + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#endif /* GL_NV_texture_expand_normal */ + +#ifndef GL_NV_texture_multisample +#define GL_NV_texture_multisample 1 +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#endif +#endif /* GL_NV_texture_multisample */ + +#ifndef GL_NV_texture_rectangle +#define GL_NV_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#endif /* GL_NV_texture_rectangle */ + +#ifndef GL_NV_texture_rectangle_compressed +#define GL_NV_texture_rectangle_compressed 1 +#endif /* GL_NV_texture_rectangle_compressed */ + +#ifndef GL_NV_texture_shader +#define GL_NV_texture_shader 1 +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#endif /* GL_NV_texture_shader */ + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#endif /* GL_NV_texture_shader2 */ + +#ifndef GL_NV_texture_shader3 +#define GL_NV_texture_shader3 1 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#endif /* GL_NV_texture_shader3 */ + +#ifndef GL_NV_timeline_semaphore +#define GL_NV_timeline_semaphore 1 +#define GL_TIMELINE_SEMAPHORE_VALUE_NV 0x9595 +#define GL_SEMAPHORE_TYPE_NV 0x95B3 +#define GL_SEMAPHORE_TYPE_BINARY_NV 0x95B4 +#define GL_SEMAPHORE_TYPE_TIMELINE_NV 0x95B5 +#define GL_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE_NV 0x95B6 +typedef void (APIENTRYP PFNGLCREATESEMAPHORESNVPROC) (GLsizei n, GLuint *semaphores); +typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCreateSemaphoresNV (GLsizei n, GLuint *semaphores); +GLAPI void APIENTRY glSemaphoreParameterivNV (GLuint semaphore, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetSemaphoreParameterivNV (GLuint semaphore, GLenum pname, GLint *params); +#endif +#endif /* GL_NV_timeline_semaphore */ + +#ifndef GL_NV_transform_feedback +#define GL_NV_transform_feedback 1 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_LAYER_NV 0x8DAA +#define GL_NEXT_BUFFER_NV -2 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS1_NV -6 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLenum bufferMode); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackNV (void); +GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLsizei count, const GLint *attribs, GLenum bufferMode); +GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); +GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); +GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#endif +#endif /* GL_NV_transform_feedback */ + +#ifndef GL_NV_transform_feedback2 +#define GL_NV_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedbackNV (void); +GLAPI void APIENTRY glResumeTransformFeedbackNV (void); +GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); +#endif +#endif /* GL_NV_transform_feedback2 */ + +#ifndef GL_NV_uniform_buffer_unified_memory +#define GL_NV_uniform_buffer_unified_memory 1 +#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E +#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F +#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 +#endif /* GL_NV_uniform_buffer_unified_memory */ + +#ifndef GL_NV_vdpau_interop +#define GL_NV_vdpau_interop 1 +typedef GLintptr GLvdpauSurfaceNV; +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_WRITE_DISCARD_NV 0x88BE +typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); +typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); +typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); +GLAPI void APIENTRY glVDPAUFiniNV (void); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); +GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#endif +#endif /* GL_NV_vdpau_interop */ + +#ifndef GL_NV_vdpau_interop2 +#define GL_NV_vdpau_interop2 1 +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceWithPictureStructureNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure); +#endif +#endif /* GL_NV_vdpau_interop2 */ + +#ifndef GL_NV_vertex_array_range +#define GL_NV_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); +GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); +#endif +#endif /* GL_NV_vertex_array_range */ + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#endif /* GL_NV_vertex_array_range2 */ + +#ifndef GL_NV_vertex_attrib_integer_64bit +#define GL_NV_vertex_attrib_integer_64bit 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); +GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +#endif +#endif /* GL_NV_vertex_attrib_integer_64bit */ + +#ifndef GL_NV_vertex_buffer_unified_memory +#define GL_NV_vertex_buffer_unified_memory 1 +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); +GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); +#endif +#endif /* GL_NV_vertex_buffer_unified_memory */ + +#ifndef GL_NV_vertex_program +#define GL_NV_vertex_program 1 +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); +typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); +typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); +GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); +GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); +GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); +GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); +GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); +GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); +GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); +#endif +#endif /* GL_NV_vertex_program */ + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 +#endif /* GL_NV_vertex_program1_1 */ + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 +#endif /* GL_NV_vertex_program2 */ + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 +#endif /* GL_NV_vertex_program2_option */ + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 +#endif /* GL_NV_vertex_program3 */ + +#ifndef GL_NV_vertex_program4 +#define GL_NV_vertex_program4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_vertex_program4 */ + +#ifndef GL_NV_video_capture +#define GL_NV_video_capture 1 +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_SUCCESS_NV 0x902F +#define GL_FAILURE_NV 0x9030 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#endif +#endif /* GL_NV_video_capture */ + +#ifndef GL_NV_viewport_array2 +#define GL_NV_viewport_array2 1 +#endif /* GL_NV_viewport_array2 */ + +#ifndef GL_NV_viewport_swizzle +#define GL_NV_viewport_swizzle 1 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 +#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 +#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 +#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A +#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B +typedef void (APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); +#endif +#endif /* GL_NV_viewport_swizzle */ + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#endif /* GL_OML_interlace */ + +#ifndef GL_OML_resample +#define GL_OML_resample 1 +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#endif /* GL_OML_resample */ + +#ifndef GL_OML_subsample +#define GL_OML_subsample 1 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#endif /* GL_OML_subsample */ + +#ifndef GL_OVR_multiview +#define GL_OVR_multiview 1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 +#define GL_MAX_VIEWS_OVR 0x9631 +#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); +#endif +#endif /* GL_OVR_multiview */ + +#ifndef GL_OVR_multiview2 +#define GL_OVR_multiview2 1 +#endif /* GL_OVR_multiview2 */ + +#ifndef GL_PGI_misc_hints +#define GL_PGI_misc_hints 1 +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); +#endif +#endif /* GL_PGI_misc_hints */ + +#ifndef GL_PGI_vertex_hints +#define GL_PGI_vertex_hints 1 +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#endif /* GL_PGI_vertex_hints */ + +#ifndef GL_REND_screen_coordinates +#define GL_REND_screen_coordinates 1 +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#endif /* GL_REND_screen_coordinates */ + +#ifndef GL_S3_s3tc +#define GL_S3_s3tc 1 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#endif /* GL_S3_s3tc */ + +#ifndef GL_SGIS_detail_texture +#define GL_SGIS_detail_texture 1 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_detail_texture */ + +#ifndef GL_SGIS_fog_function +#define GL_SGIS_fog_function 1 +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); +#endif +#endif /* GL_SGIS_fog_function */ + +#ifndef GL_SGIS_generate_mipmap +#define GL_SGIS_generate_mipmap 1 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#endif /* GL_SGIS_generate_mipmap */ + +#ifndef GL_SGIS_multisample +#define GL_SGIS_multisample 1 +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); +#endif +#endif /* GL_SGIS_multisample */ + +#ifndef GL_SGIS_pixel_texture +#define GL_SGIS_pixel_texture 1 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); +#endif +#endif /* GL_SGIS_pixel_texture */ + +#ifndef GL_SGIS_point_line_texgen +#define GL_SGIS_point_line_texgen 1 +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#endif /* GL_SGIS_point_line_texgen */ + +#ifndef GL_SGIS_point_parameters +#define GL_SGIS_point_parameters 1 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_SGIS_point_parameters */ + +#ifndef GL_SGIS_sharpen_texture +#define GL_SGIS_sharpen_texture 1 +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_sharpen_texture */ + +#ifndef GL_SGIS_texture4D +#define GL_SGIS_texture4D 1 +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_SGIS_texture4D */ + +#ifndef GL_SGIS_texture_border_clamp +#define GL_SGIS_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#endif /* GL_SGIS_texture_border_clamp */ + +#ifndef GL_SGIS_texture_color_mask +#define GL_SGIS_texture_color_mask 1 +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#endif +#endif /* GL_SGIS_texture_color_mask */ + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_SGIS_texture_edge_clamp 1 +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#endif /* GL_SGIS_texture_edge_clamp */ + +#ifndef GL_SGIS_texture_filter4 +#define GL_SGIS_texture_filter4 1 +#define GL_FILTER4_SGIS 0x8146 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); +typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); +GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#endif +#endif /* GL_SGIS_texture_filter4 */ + +#ifndef GL_SGIS_texture_lod +#define GL_SGIS_texture_lod 1 +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#endif /* GL_SGIS_texture_lod */ + +#ifndef GL_SGIS_texture_select +#define GL_SGIS_texture_select 1 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#endif /* GL_SGIS_texture_select */ + +#ifndef GL_SGIX_async +#define GL_SGIX_async 1 +#define GL_ASYNC_MARKER_SGIX 0x8329 +typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); +typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); +typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); +GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); +GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); +GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); +GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); +GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); +#endif +#endif /* GL_SGIX_async */ + +#ifndef GL_SGIX_async_histogram +#define GL_SGIX_async_histogram 1 +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#endif /* GL_SGIX_async_histogram */ + +#ifndef GL_SGIX_async_pixel +#define GL_SGIX_async_pixel 1 +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#endif /* GL_SGIX_async_pixel */ + +#ifndef GL_SGIX_blend_alpha_minmax +#define GL_SGIX_blend_alpha_minmax 1 +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 +#endif /* GL_SGIX_blend_alpha_minmax */ + +#ifndef GL_SGIX_calligraphic_fragment +#define GL_SGIX_calligraphic_fragment 1 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#endif /* GL_SGIX_calligraphic_fragment */ + +#ifndef GL_SGIX_clipmap +#define GL_SGIX_clipmap 1 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#endif /* GL_SGIX_clipmap */ + +#ifndef GL_SGIX_convolution_accuracy +#define GL_SGIX_convolution_accuracy 1 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#endif /* GL_SGIX_convolution_accuracy */ + +#ifndef GL_SGIX_depth_pass_instrument +#define GL_SGIX_depth_pass_instrument 1 +#endif /* GL_SGIX_depth_pass_instrument */ + +#ifndef GL_SGIX_depth_texture +#define GL_SGIX_depth_texture 1 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#endif /* GL_SGIX_depth_texture */ + +#ifndef GL_SGIX_flush_raster +#define GL_SGIX_flush_raster 1 +typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushRasterSGIX (void); +#endif +#endif /* GL_SGIX_flush_raster */ + +#ifndef GL_SGIX_fog_offset +#define GL_SGIX_fog_offset 1 +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#endif /* GL_SGIX_fog_offset */ + +#ifndef GL_SGIX_fragment_lighting +#define GL_SGIX_fragment_lighting 1 +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); +GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); +GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); +#endif +#endif /* GL_SGIX_fragment_lighting */ + +#ifndef GL_SGIX_framezoom +#define GL_SGIX_framezoom 1 +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); +#endif +#endif /* GL_SGIX_framezoom */ + +#ifndef GL_SGIX_igloo_interface +#define GL_SGIX_igloo_interface 1 +typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); +#endif +#endif /* GL_SGIX_igloo_interface */ + +#ifndef GL_SGIX_instruments +#define GL_SGIX_instruments 1 +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); +typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); +typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); +typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); +GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); +GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); +GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); +GLAPI void APIENTRY glStartInstrumentsSGIX (void); +GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); +#endif +#endif /* GL_SGIX_instruments */ + +#ifndef GL_SGIX_interlace +#define GL_SGIX_interlace 1 +#define GL_INTERLACE_SGIX 0x8094 +#endif /* GL_SGIX_interlace */ + +#ifndef GL_SGIX_ir_instrument1 +#define GL_SGIX_ir_instrument1 1 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#endif /* GL_SGIX_ir_instrument1 */ + +#ifndef GL_SGIX_list_priority +#define GL_SGIX_list_priority 1 +#define GL_LIST_PRIORITY_SGIX 0x8182 +typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); +GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); +GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); +GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_list_priority */ + +#ifndef GL_SGIX_pixel_texture +#define GL_SGIX_pixel_texture 1 +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); +#endif +#endif /* GL_SGIX_pixel_texture */ + +#ifndef GL_SGIX_pixel_tiles +#define GL_SGIX_pixel_tiles 1 +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#endif /* GL_SGIX_pixel_tiles */ + +#ifndef GL_SGIX_polynomial_ffd +#define GL_SGIX_polynomial_ffd 1 +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); +GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); +#endif +#endif /* GL_SGIX_polynomial_ffd */ + +#ifndef GL_SGIX_reference_plane +#define GL_SGIX_reference_plane 1 +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); +#endif +#endif /* GL_SGIX_reference_plane */ + +#ifndef GL_SGIX_resample +#define GL_SGIX_resample 1 +#define GL_PACK_RESAMPLE_SGIX 0x842E +#define GL_UNPACK_RESAMPLE_SGIX 0x842F +#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#endif /* GL_SGIX_resample */ + +#ifndef GL_SGIX_scalebias_hint +#define GL_SGIX_scalebias_hint 1 +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#endif /* GL_SGIX_scalebias_hint */ + +#ifndef GL_SGIX_shadow +#define GL_SGIX_shadow 1 +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#endif /* GL_SGIX_shadow */ + +#ifndef GL_SGIX_shadow_ambient +#define GL_SGIX_shadow_ambient 1 +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#endif /* GL_SGIX_shadow_ambient */ + +#ifndef GL_SGIX_sprite +#define GL_SGIX_sprite 1 +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_sprite */ + +#ifndef GL_SGIX_subsample +#define GL_SGIX_subsample 1 +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#endif /* GL_SGIX_subsample */ + +#ifndef GL_SGIX_tag_sample_buffer +#define GL_SGIX_tag_sample_buffer 1 +typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTagSampleBufferSGIX (void); +#endif +#endif /* GL_SGIX_tag_sample_buffer */ + +#ifndef GL_SGIX_texture_add_env +#define GL_SGIX_texture_add_env 1 +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#endif /* GL_SGIX_texture_add_env */ + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_SGIX_texture_coordinate_clamp 1 +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#endif /* GL_SGIX_texture_coordinate_clamp */ + +#ifndef GL_SGIX_texture_lod_bias +#define GL_SGIX_texture_lod_bias 1 +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#endif /* GL_SGIX_texture_lod_bias */ + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_SGIX_texture_multi_buffer 1 +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#endif /* GL_SGIX_texture_multi_buffer */ + +#ifndef GL_SGIX_texture_scale_bias +#define GL_SGIX_texture_scale_bias 1 +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#endif /* GL_SGIX_texture_scale_bias */ + +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#endif /* GL_SGIX_vertex_preclip */ + +#ifndef GL_SGIX_ycrcb +#define GL_SGIX_ycrcb 1 +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#endif /* GL_SGIX_ycrcb */ + +#ifndef GL_SGIX_ycrcb_subsample +#define GL_SGIX_ycrcb_subsample 1 +#endif /* GL_SGIX_ycrcb_subsample */ + +#ifndef GL_SGIX_ycrcba +#define GL_SGIX_ycrcba 1 +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 +#endif /* GL_SGIX_ycrcba */ + +#ifndef GL_SGI_color_matrix +#define GL_SGI_color_matrix 1 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#endif /* GL_SGI_color_matrix */ + +#ifndef GL_SGI_color_table +#define GL_SGI_color_table 1 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); +#endif +#endif /* GL_SGI_color_table */ + +#ifndef GL_SGI_texture_color_table +#define GL_SGI_texture_color_table 1 +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#endif /* GL_SGI_texture_color_table */ + +#ifndef GL_SUNX_constant_data +#define GL_SUNX_constant_data 1 +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFinishTextureSUNX (void); +#endif +#endif /* GL_SUNX_constant_data */ + +#ifndef GL_SUN_convolution_border_modes +#define GL_SUN_convolution_border_modes 1 +#define GL_WRAP_BORDER_SUN 0x81D4 +#endif /* GL_SUN_convolution_border_modes */ + +#ifndef GL_SUN_global_alpha +#define GL_SUN_global_alpha 1 +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); +GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); +GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); +GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); +GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); +GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); +#endif +#endif /* GL_SUN_global_alpha */ + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); +#endif +#endif /* GL_SUN_mesh_array */ + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 +#define GL_SLICE_ACCUM_SUN 0x85CC +#endif /* GL_SUN_slice_accum */ + +#ifndef GL_SUN_triangle_list +#define GL_SUN_triangle_list 1 +#define GL_RESTART_SUN 0x0001 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); +GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); +GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); +GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); +GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); +GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); +GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); +#endif +#endif /* GL_SUN_triangle_list */ + +#ifndef GL_SUN_vertex +#define GL_SUN_vertex 1 +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#endif +#endif /* GL_SUN_vertex */ + +#ifndef GL_WIN_phong_shading +#define GL_WIN_phong_shading 1 +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB +#endif /* GL_WIN_phong_shading */ + +#ifndef GL_WIN_specular_fog +#define GL_WIN_specular_fog 1 +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#endif /* GL_WIN_specular_fog */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/3rdparty/opengl/khrplatform.h b/src/3rdparty/opengl/khrplatform.h new file mode 100644 index 0000000000..dd22d92701 --- /dev/null +++ b/src/3rdparty/opengl/khrplatform.h @@ -0,0 +1,290 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2018 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * The master copy of khrplatform.h is maintained in the Khronos EGL + * Registry repository at https://github.com/KhronosGroup/EGL-Registry + * The last semantic modification to khrplatform.h was at commit ID: + * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by filing pull requests or issues on + * the EGL Registry repository linked above. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) +# define KHRONOS_STATIC 1 +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(KHRONOS_STATIC) + /* If the preprocessor constant KHRONOS_STATIC is defined, make the + * header compatible with static linking. */ +# define KHRONOS_APICALL +#elif defined(_WIN32) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#elif defined(__ANDROID__) +# define KHRONOS_APICALL __attribute__((visibility("default"))) +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef _WIN64 +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/src/3rdparty/opengl/wglext.h b/src/3rdparty/opengl/wglext.h new file mode 100644 index 0000000000..70a2613aa4 --- /dev/null +++ b/src/3rdparty/opengl/wglext.h @@ -0,0 +1,845 @@ +#ifndef __wgl_wglext_h_ +#define __wgl_wglext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright 2013-2020 The Khronos Group Inc. +** SPDX-License-Identifier: MIT +** +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** https://github.com/KhronosGroup/OpenGL-Registry +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#define WIN32_LEAN_AND_MEAN 1 +#include +#endif + +#define WGL_WGLEXT_VERSION 20200813 + +/* Generated C header for: + * API: wgl + * Versions considered: .* + * Versions emitted: _nomatch_^ + * Default extensions included: wgl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef WGL_ARB_buffer_region +#define WGL_ARB_buffer_region 1 +#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 +#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 +#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 +#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 +typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); +typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); +typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); +typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); +#ifdef WGL_WGLEXT_PROTOTYPES +HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType); +VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion); +BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height); +BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); +#endif +#endif /* WGL_ARB_buffer_region */ + +#ifndef WGL_ARB_context_flush_control +#define WGL_ARB_context_flush_control 1 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 +#endif /* WGL_ARB_context_flush_control */ + +#ifndef WGL_ARB_create_context +#define WGL_ARB_create_context 1 +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define ERROR_INVALID_VERSION_ARB 0x2095 +typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList); +#ifdef WGL_WGLEXT_PROTOTYPES +HGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList); +#endif +#endif /* WGL_ARB_create_context */ + +#ifndef WGL_ARB_create_context_no_error +#define WGL_ARB_create_context_no_error 1 +#define WGL_CONTEXT_OPENGL_NO_ERROR_ARB 0x31B3 +#endif /* WGL_ARB_create_context_no_error */ + +#ifndef WGL_ARB_create_context_profile +#define WGL_ARB_create_context_profile 1 +#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 +#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 +#define ERROR_INVALID_PROFILE_ARB 0x2096 +#endif /* WGL_ARB_create_context_profile */ + +#ifndef WGL_ARB_create_context_robustness +#define WGL_ARB_create_context_robustness 1 +#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 +#endif /* WGL_ARB_create_context_robustness */ + +#ifndef WGL_ARB_extensions_string +#define WGL_ARB_extensions_string 1 +typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); +#ifdef WGL_WGLEXT_PROTOTYPES +const char *WINAPI wglGetExtensionsStringARB (HDC hdc); +#endif +#endif /* WGL_ARB_extensions_string */ + +#ifndef WGL_ARB_framebuffer_sRGB +#define WGL_ARB_framebuffer_sRGB 1 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 +#endif /* WGL_ARB_framebuffer_sRGB */ + +#ifndef WGL_ARB_make_current_read +#define WGL_ARB_make_current_read 1 +#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 +#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 +typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +HDC WINAPI wglGetCurrentReadDCARB (void); +#endif +#endif /* WGL_ARB_make_current_read */ + +#ifndef WGL_ARB_multisample +#define WGL_ARB_multisample 1 +#define WGL_SAMPLE_BUFFERS_ARB 0x2041 +#define WGL_SAMPLES_ARB 0x2042 +#endif /* WGL_ARB_multisample */ + +#ifndef WGL_ARB_pbuffer +#define WGL_ARB_pbuffer 1 +DECLARE_HANDLE(HPBUFFERARB); +#define WGL_DRAW_TO_PBUFFER_ARB 0x202D +#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E +#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F +#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 +#define WGL_PBUFFER_LARGEST_ARB 0x2033 +#define WGL_PBUFFER_WIDTH_ARB 0x2034 +#define WGL_PBUFFER_HEIGHT_ARB 0x2035 +#define WGL_PBUFFER_LOST_ARB 0x2036 +typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); +typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); +typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); +typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); +typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); +#ifdef WGL_WGLEXT_PROTOTYPES +HPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); +HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer); +int WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC); +BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer); +BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); +#endif +#endif /* WGL_ARB_pbuffer */ + +#ifndef WGL_ARB_pixel_format +#define WGL_ARB_pixel_format 1 +#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_DRAW_TO_BITMAP_ARB 0x2002 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_NEED_PALETTE_ARB 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 +#define WGL_SWAP_METHOD_ARB 0x2007 +#define WGL_NUMBER_OVERLAYS_ARB 0x2008 +#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 +#define WGL_TRANSPARENT_ARB 0x200A +#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 +#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 +#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 +#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A +#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B +#define WGL_SHARE_DEPTH_ARB 0x200C +#define WGL_SHARE_STENCIL_ARB 0x200D +#define WGL_SHARE_ACCUM_ARB 0x200E +#define WGL_SUPPORT_GDI_ARB 0x200F +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_STEREO_ARB 0x2012 +#define WGL_PIXEL_TYPE_ARB 0x2013 +#define WGL_COLOR_BITS_ARB 0x2014 +#define WGL_RED_BITS_ARB 0x2015 +#define WGL_RED_SHIFT_ARB 0x2016 +#define WGL_GREEN_BITS_ARB 0x2017 +#define WGL_GREEN_SHIFT_ARB 0x2018 +#define WGL_BLUE_BITS_ARB 0x2019 +#define WGL_BLUE_SHIFT_ARB 0x201A +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_ALPHA_SHIFT_ARB 0x201C +#define WGL_ACCUM_BITS_ARB 0x201D +#define WGL_ACCUM_RED_BITS_ARB 0x201E +#define WGL_ACCUM_GREEN_BITS_ARB 0x201F +#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 +#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 +#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_STENCIL_BITS_ARB 0x2023 +#define WGL_AUX_BUFFERS_ARB 0x2024 +#define WGL_NO_ACCELERATION_ARB 0x2025 +#define WGL_GENERIC_ACCELERATION_ARB 0x2026 +#define WGL_FULL_ACCELERATION_ARB 0x2027 +#define WGL_SWAP_EXCHANGE_ARB 0x2028 +#define WGL_SWAP_COPY_ARB 0x2029 +#define WGL_SWAP_UNDEFINED_ARB 0x202A +#define WGL_TYPE_RGBA_ARB 0x202B +#define WGL_TYPE_COLORINDEX_ARB 0x202C +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); +BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); +BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +#endif +#endif /* WGL_ARB_pixel_format */ + +#ifndef WGL_ARB_pixel_format_float +#define WGL_ARB_pixel_format_float 1 +#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 +#endif /* WGL_ARB_pixel_format_float */ + +#ifndef WGL_ARB_render_texture +#define WGL_ARB_render_texture 1 +#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 +#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 +#define WGL_TEXTURE_FORMAT_ARB 0x2072 +#define WGL_TEXTURE_TARGET_ARB 0x2073 +#define WGL_MIPMAP_TEXTURE_ARB 0x2074 +#define WGL_TEXTURE_RGB_ARB 0x2075 +#define WGL_TEXTURE_RGBA_ARB 0x2076 +#define WGL_NO_TEXTURE_ARB 0x2077 +#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 +#define WGL_TEXTURE_1D_ARB 0x2079 +#define WGL_TEXTURE_2D_ARB 0x207A +#define WGL_MIPMAP_LEVEL_ARB 0x207B +#define WGL_CUBE_MAP_FACE_ARB 0x207C +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 +#define WGL_FRONT_LEFT_ARB 0x2083 +#define WGL_FRONT_RIGHT_ARB 0x2084 +#define WGL_BACK_LEFT_ARB 0x2085 +#define WGL_BACK_RIGHT_ARB 0x2086 +#define WGL_AUX0_ARB 0x2087 +#define WGL_AUX1_ARB 0x2088 +#define WGL_AUX2_ARB 0x2089 +#define WGL_AUX3_ARB 0x208A +#define WGL_AUX4_ARB 0x208B +#define WGL_AUX5_ARB 0x208C +#define WGL_AUX6_ARB 0x208D +#define WGL_AUX7_ARB 0x208E +#define WGL_AUX8_ARB 0x208F +#define WGL_AUX9_ARB 0x2090 +typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer); +BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer); +BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList); +#endif +#endif /* WGL_ARB_render_texture */ + +#ifndef WGL_ARB_robustness_application_isolation +#define WGL_ARB_robustness_application_isolation 1 +#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 +#endif /* WGL_ARB_robustness_application_isolation */ + +#ifndef WGL_ARB_robustness_share_group_isolation +#define WGL_ARB_robustness_share_group_isolation 1 +#endif /* WGL_ARB_robustness_share_group_isolation */ + +#ifndef WGL_3DFX_multisample +#define WGL_3DFX_multisample 1 +#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 +#define WGL_SAMPLES_3DFX 0x2061 +#endif /* WGL_3DFX_multisample */ + +#ifndef WGL_3DL_stereo_control +#define WGL_3DL_stereo_control 1 +#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 +#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 +#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 +#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 +typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState); +#endif +#endif /* WGL_3DL_stereo_control */ + +#ifndef WGL_AMD_gpu_association +#define WGL_AMD_gpu_association 1 +#define WGL_GPU_VENDOR_AMD 0x1F00 +#define WGL_GPU_RENDERER_STRING_AMD 0x1F01 +#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 +#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 +#define WGL_GPU_RAM_AMD 0x21A3 +#define WGL_GPU_CLOCK_AMD 0x21A4 +#define WGL_GPU_NUM_PIPES_AMD 0x21A5 +#define WGL_GPU_NUM_SIMD_AMD 0x21A6 +#define WGL_GPU_NUM_RB_AMD 0x21A7 +#define WGL_GPU_NUM_SPI_AMD 0x21A8 +typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids); +typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, INT property, GLenum dataType, UINT size, void *data); +typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc); +typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id); +typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList); +typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc); +typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc); +typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); +typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef WGL_WGLEXT_PROTOTYPES +UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids); +INT WINAPI wglGetGPUInfoAMD (UINT id, INT property, GLenum dataType, UINT size, void *data); +UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc); +HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id); +HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList); +BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc); +BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc); +HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void); +VOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* WGL_AMD_gpu_association */ + +#ifndef WGL_ATI_pixel_format_float +#define WGL_ATI_pixel_format_float 1 +#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 +#endif /* WGL_ATI_pixel_format_float */ + +#ifndef WGL_ATI_render_texture_rectangle +#define WGL_ATI_render_texture_rectangle 1 +#define WGL_TEXTURE_RECTANGLE_ATI 0x21A5 +#endif /* WGL_ATI_render_texture_rectangle */ + +#ifndef WGL_EXT_colorspace +#define WGL_EXT_colorspace 1 +#define WGL_COLORSPACE_EXT 0x309D +#define WGL_COLORSPACE_SRGB_EXT 0x3089 +#define WGL_COLORSPACE_LINEAR_EXT 0x308A +#endif /* WGL_EXT_colorspace */ + +#ifndef WGL_EXT_create_context_es2_profile +#define WGL_EXT_create_context_es2_profile 1 +#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 +#endif /* WGL_EXT_create_context_es2_profile */ + +#ifndef WGL_EXT_create_context_es_profile +#define WGL_EXT_create_context_es_profile 1 +#define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 +#endif /* WGL_EXT_create_context_es_profile */ + +#ifndef WGL_EXT_depth_float +#define WGL_EXT_depth_float 1 +#define WGL_DEPTH_FLOAT_EXT 0x2040 +#endif /* WGL_EXT_depth_float */ + +#ifndef WGL_EXT_display_color_table +#define WGL_EXT_display_color_table 1 +typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); +typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length); +typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); +typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); +#ifdef WGL_WGLEXT_PROTOTYPES +GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id); +GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length); +GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id); +VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id); +#endif +#endif /* WGL_EXT_display_color_table */ + +#ifndef WGL_EXT_extensions_string +#define WGL_EXT_extensions_string 1 +typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); +#ifdef WGL_WGLEXT_PROTOTYPES +const char *WINAPI wglGetExtensionsStringEXT (void); +#endif +#endif /* WGL_EXT_extensions_string */ + +#ifndef WGL_EXT_framebuffer_sRGB +#define WGL_EXT_framebuffer_sRGB 1 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 +#endif /* WGL_EXT_framebuffer_sRGB */ + +#ifndef WGL_EXT_make_current_read +#define WGL_EXT_make_current_read 1 +#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 +typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +HDC WINAPI wglGetCurrentReadDCEXT (void); +#endif +#endif /* WGL_EXT_make_current_read */ + +#ifndef WGL_EXT_multisample +#define WGL_EXT_multisample 1 +#define WGL_SAMPLE_BUFFERS_EXT 0x2041 +#define WGL_SAMPLES_EXT 0x2042 +#endif /* WGL_EXT_multisample */ + +#ifndef WGL_EXT_pbuffer +#define WGL_EXT_pbuffer 1 +DECLARE_HANDLE(HPBUFFEREXT); +#define WGL_DRAW_TO_PBUFFER_EXT 0x202D +#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E +#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F +#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 +#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 +#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 +#define WGL_PBUFFER_LARGEST_EXT 0x2033 +#define WGL_PBUFFER_WIDTH_EXT 0x2034 +#define WGL_PBUFFER_HEIGHT_EXT 0x2035 +typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); +typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); +typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); +typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); +typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); +#ifdef WGL_WGLEXT_PROTOTYPES +HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); +HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer); +int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC); +BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer); +BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); +#endif +#endif /* WGL_EXT_pbuffer */ + +#ifndef WGL_EXT_pixel_format +#define WGL_EXT_pixel_format 1 +#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 +#define WGL_DRAW_TO_WINDOW_EXT 0x2001 +#define WGL_DRAW_TO_BITMAP_EXT 0x2002 +#define WGL_ACCELERATION_EXT 0x2003 +#define WGL_NEED_PALETTE_EXT 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 +#define WGL_SWAP_METHOD_EXT 0x2007 +#define WGL_NUMBER_OVERLAYS_EXT 0x2008 +#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 +#define WGL_TRANSPARENT_EXT 0x200A +#define WGL_TRANSPARENT_VALUE_EXT 0x200B +#define WGL_SHARE_DEPTH_EXT 0x200C +#define WGL_SHARE_STENCIL_EXT 0x200D +#define WGL_SHARE_ACCUM_EXT 0x200E +#define WGL_SUPPORT_GDI_EXT 0x200F +#define WGL_SUPPORT_OPENGL_EXT 0x2010 +#define WGL_DOUBLE_BUFFER_EXT 0x2011 +#define WGL_STEREO_EXT 0x2012 +#define WGL_PIXEL_TYPE_EXT 0x2013 +#define WGL_COLOR_BITS_EXT 0x2014 +#define WGL_RED_BITS_EXT 0x2015 +#define WGL_RED_SHIFT_EXT 0x2016 +#define WGL_GREEN_BITS_EXT 0x2017 +#define WGL_GREEN_SHIFT_EXT 0x2018 +#define WGL_BLUE_BITS_EXT 0x2019 +#define WGL_BLUE_SHIFT_EXT 0x201A +#define WGL_ALPHA_BITS_EXT 0x201B +#define WGL_ALPHA_SHIFT_EXT 0x201C +#define WGL_ACCUM_BITS_EXT 0x201D +#define WGL_ACCUM_RED_BITS_EXT 0x201E +#define WGL_ACCUM_GREEN_BITS_EXT 0x201F +#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 +#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 +#define WGL_DEPTH_BITS_EXT 0x2022 +#define WGL_STENCIL_BITS_EXT 0x2023 +#define WGL_AUX_BUFFERS_EXT 0x2024 +#define WGL_NO_ACCELERATION_EXT 0x2025 +#define WGL_GENERIC_ACCELERATION_EXT 0x2026 +#define WGL_FULL_ACCELERATION_EXT 0x2027 +#define WGL_SWAP_EXCHANGE_EXT 0x2028 +#define WGL_SWAP_COPY_EXT 0x2029 +#define WGL_SWAP_UNDEFINED_EXT 0x202A +#define WGL_TYPE_RGBA_EXT 0x202B +#define WGL_TYPE_COLORINDEX_EXT 0x202C +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); +BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); +BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +#endif +#endif /* WGL_EXT_pixel_format */ + +#ifndef WGL_EXT_pixel_format_packed_float +#define WGL_EXT_pixel_format_packed_float 1 +#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 +#endif /* WGL_EXT_pixel_format_packed_float */ + +#ifndef WGL_EXT_swap_control +#define WGL_EXT_swap_control 1 +typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); +typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglSwapIntervalEXT (int interval); +int WINAPI wglGetSwapIntervalEXT (void); +#endif +#endif /* WGL_EXT_swap_control */ + +#ifndef WGL_EXT_swap_control_tear +#define WGL_EXT_swap_control_tear 1 +#endif /* WGL_EXT_swap_control_tear */ + +#ifndef WGL_I3D_digital_video_control +#define WGL_I3D_digital_video_control 1 +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 +#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 +#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 +typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); +typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue); +BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue); +#endif +#endif /* WGL_I3D_digital_video_control */ + +#ifndef WGL_I3D_gamma +#define WGL_I3D_gamma 1 +#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E +#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F +typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); +typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); +typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); +typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue); +BOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue); +BOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); +BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); +#endif +#endif /* WGL_I3D_gamma */ + +#ifndef WGL_I3D_genlock +#define WGL_I3D_genlock 1 +#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 +#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 +#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 +#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 +#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 +#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 +#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A +#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B +#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C +typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); +typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); +typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge); +typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay); +typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglEnableGenlockI3D (HDC hDC); +BOOL WINAPI wglDisableGenlockI3D (HDC hDC); +BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag); +BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource); +BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource); +BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge); +BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge); +BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate); +BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate); +BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay); +BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay); +BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); +#endif +#endif /* WGL_I3D_genlock */ + +#ifndef WGL_I3D_image_buffer +#define WGL_I3D_image_buffer 1 +#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 +#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 +typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); +typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); +typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); +typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count); +#ifdef WGL_WGLEXT_PROTOTYPES +LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags); +BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress); +BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); +BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count); +#endif +#endif /* WGL_I3D_image_buffer */ + +#ifndef WGL_I3D_swap_frame_lock +#define WGL_I3D_swap_frame_lock 1 +typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglEnableFrameLockI3D (void); +BOOL WINAPI wglDisableFrameLockI3D (void); +BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag); +BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag); +#endif +#endif /* WGL_I3D_swap_frame_lock */ + +#ifndef WGL_I3D_swap_frame_usage +#define WGL_I3D_swap_frame_usage 1 +typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage); +typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetFrameUsageI3D (float *pUsage); +BOOL WINAPI wglBeginFrameTrackingI3D (void); +BOOL WINAPI wglEndFrameTrackingI3D (void); +BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); +#endif +#endif /* WGL_I3D_swap_frame_usage */ + +#ifndef WGL_NV_DX_interop +#define WGL_NV_DX_interop 1 +#define WGL_ACCESS_READ_ONLY_NV 0x00000000 +#define WGL_ACCESS_READ_WRITE_NV 0x00000001 +#define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002 +typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void *dxObject, HANDLE shareHandle); +typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void *dxDevice); +typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice); +typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access); +typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject); +typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access); +typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects); +typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglDXSetResourceShareHandleNV (void *dxObject, HANDLE shareHandle); +HANDLE WINAPI wglDXOpenDeviceNV (void *dxDevice); +BOOL WINAPI wglDXCloseDeviceNV (HANDLE hDevice); +HANDLE WINAPI wglDXRegisterObjectNV (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access); +BOOL WINAPI wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject); +BOOL WINAPI wglDXObjectAccessNV (HANDLE hObject, GLenum access); +BOOL WINAPI wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects); +BOOL WINAPI wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects); +#endif +#endif /* WGL_NV_DX_interop */ + +#ifndef WGL_NV_DX_interop2 +#define WGL_NV_DX_interop2 1 +#endif /* WGL_NV_DX_interop2 */ + +#ifndef WGL_NV_copy_image +#define WGL_NV_copy_image 1 +typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#endif +#endif /* WGL_NV_copy_image */ + +#ifndef WGL_NV_delay_before_swap +#define WGL_NV_delay_before_swap 1 +typedef BOOL (WINAPI * PFNWGLDELAYBEFORESWAPNVPROC) (HDC hDC, GLfloat seconds); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglDelayBeforeSwapNV (HDC hDC, GLfloat seconds); +#endif +#endif /* WGL_NV_delay_before_swap */ + +#ifndef WGL_NV_float_buffer +#define WGL_NV_float_buffer 1 +#define WGL_FLOAT_COMPONENTS_NV 0x20B0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 +#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 +#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 +#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 +#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 +#endif /* WGL_NV_float_buffer */ + +#ifndef WGL_NV_gpu_affinity +#define WGL_NV_gpu_affinity 1 +DECLARE_HANDLE(HGPUNV); +struct _GPU_DEVICE { + DWORD cb; + CHAR DeviceName[32]; + CHAR DeviceString[128]; + DWORD Flags; + RECT rcVirtualScreen; +}; +typedef struct _GPU_DEVICE *PGPU_DEVICE; +#define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 +#define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 +typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu); +typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); +typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList); +typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); +typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu); +BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); +HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList); +BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); +BOOL WINAPI wglDeleteDCNV (HDC hdc); +#endif +#endif /* WGL_NV_gpu_affinity */ + +#ifndef WGL_NV_multigpu_context +#define WGL_NV_multigpu_context 1 +#define WGL_CONTEXT_MULTIGPU_ATTRIB_NV 0x20AA +#define WGL_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV 0x20AB +#define WGL_CONTEXT_MULTIGPU_ATTRIB_AFR_NV 0x20AC +#define WGL_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV 0x20AD +#define WGL_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV 0x20AE +#endif /* WGL_NV_multigpu_context */ + +#ifndef WGL_NV_multisample_coverage +#define WGL_NV_multisample_coverage 1 +#define WGL_COVERAGE_SAMPLES_NV 0x2042 +#define WGL_COLOR_SAMPLES_NV 0x20B9 +#endif /* WGL_NV_multisample_coverage */ + +#ifndef WGL_NV_present_video +#define WGL_NV_present_video 1 +DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); +#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 +typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDc, HVIDEOOUTPUTDEVICENV *phDeviceList); +typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList); +typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue); +#ifdef WGL_WGLEXT_PROTOTYPES +int WINAPI wglEnumerateVideoDevicesNV (HDC hDc, HVIDEOOUTPUTDEVICENV *phDeviceList); +BOOL WINAPI wglBindVideoDeviceNV (HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList); +BOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue); +#endif +#endif /* WGL_NV_present_video */ + +#ifndef WGL_NV_render_depth_texture +#define WGL_NV_render_depth_texture 1 +#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 +#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 +#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 +#define WGL_DEPTH_COMPONENT_NV 0x20A7 +#endif /* WGL_NV_render_depth_texture */ + +#ifndef WGL_NV_render_texture_rectangle +#define WGL_NV_render_texture_rectangle 1 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 +#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 +#endif /* WGL_NV_render_texture_rectangle */ + +#ifndef WGL_NV_swap_group +#define WGL_NV_swap_group 1 +typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group); +typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier); +typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier); +typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count); +typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group); +BOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier); +BOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier); +BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers); +BOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count); +BOOL WINAPI wglResetFrameCountNV (HDC hDC); +#endif +#endif /* WGL_NV_swap_group */ + +#ifndef WGL_NV_vertex_array_range +#define WGL_NV_vertex_array_range 1 +typedef void *(WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); +typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); +#ifdef WGL_WGLEXT_PROTOTYPES +void *WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); +void WINAPI wglFreeMemoryNV (void *pointer); +#endif +#endif /* WGL_NV_vertex_array_range */ + +#ifndef WGL_NV_video_capture +#define WGL_NV_video_capture 1 +DECLARE_HANDLE(HVIDEOINPUTDEVICENV); +#define WGL_UNIQUE_ID_NV 0x20CE +#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF +typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); +typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); +typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); +typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); +typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); +UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); +BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice); +BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); +BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice); +#endif +#endif /* WGL_NV_video_capture */ + +#ifndef WGL_NV_video_output +#define WGL_NV_video_output 1 +DECLARE_HANDLE(HPVIDEODEV); +#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 +#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 +#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 +#define WGL_VIDEO_OUT_COLOR_NV 0x20C3 +#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 +#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 +#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 +#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 +#define WGL_VIDEO_OUT_FRAME 0x20C8 +#define WGL_VIDEO_OUT_FIELD_1 0x20C9 +#define WGL_VIDEO_OUT_FIELD_2 0x20CA +#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB +#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC +typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice); +typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice); +typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock); +typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice); +BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice); +BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); +BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer); +BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock); +BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); +#endif +#endif /* WGL_NV_video_output */ + +#ifndef WGL_OML_sync_control +#define WGL_OML_sync_control 1 +typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); +typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator); +typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); +typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); +BOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator); +INT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); +INT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); +BOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); +BOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); +#endif +#endif /* WGL_OML_sync_control */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/3rdparty/os2/CMakeLists.txt b/src/3rdparty/os2/CMakeLists.txt new file mode 100644 index 0000000000..8edc63479e --- /dev/null +++ b/src/3rdparty/os2/CMakeLists.txt @@ -0,0 +1,7 @@ +add_files( + getaddrinfo.c + getaddrinfo.h + getnameinfo.c + getnameinfo.h + CONDITION OPTION_OS2 +) diff --git a/src/3rdparty/squirrel/CMakeLists.txt b/src/3rdparty/squirrel/CMakeLists.txt new file mode 100644 index 0000000000..9602087cdf --- /dev/null +++ b/src/3rdparty/squirrel/CMakeLists.txt @@ -0,0 +1,3 @@ +add_subdirectory(include) +add_subdirectory(sqstdlib) +add_subdirectory(squirrel) diff --git a/src/3rdparty/squirrel/include/CMakeLists.txt b/src/3rdparty/squirrel/include/CMakeLists.txt new file mode 100644 index 0000000000..5237360d31 --- /dev/null +++ b/src/3rdparty/squirrel/include/CMakeLists.txt @@ -0,0 +1,6 @@ +add_files( + sqstdaux.h + sqstdmath.h + sqstdstring.h + squirrel.h +) diff --git a/src/3rdparty/squirrel/sqstdlib/CMakeLists.txt b/src/3rdparty/squirrel/sqstdlib/CMakeLists.txt new file mode 100644 index 0000000000..2b3bd6bb31 --- /dev/null +++ b/src/3rdparty/squirrel/sqstdlib/CMakeLists.txt @@ -0,0 +1,4 @@ +add_files( + sqstdaux.cpp + sqstdmath.cpp +) diff --git a/src/3rdparty/squirrel/squirrel/CMakeLists.txt b/src/3rdparty/squirrel/squirrel/CMakeLists.txt new file mode 100644 index 0000000000..a86a92b7dd --- /dev/null +++ b/src/3rdparty/squirrel/squirrel/CMakeLists.txt @@ -0,0 +1,30 @@ +add_files( + sqapi.cpp + sqarray.h + sqbaselib.cpp + sqclass.cpp + sqclass.h + sqclosure.h + sqcompiler.cpp + sqcompiler.h + sqdebug.cpp + sqfuncproto.h + sqfuncstate.cpp + sqfuncstate.h + sqlexer.cpp + sqlexer.h + sqmem.cpp + sqobject.cpp + sqobject.h + sqopcodes.h + sqpcheader.h + sqstate.cpp + sqstate.h + sqstring.h + sqtable.cpp + sqtable.h + squserdata.h + squtils.h + sqvm.cpp + sqvm.h +) diff --git a/src/3rdparty/squirrel/squirrel/sqarray.h b/src/3rdparty/squirrel/squirrel/sqarray.h index 5c26352079..13ae11619c 100644 --- a/src/3rdparty/squirrel/squirrel/sqarray.h +++ b/src/3rdparty/squirrel/squirrel/sqarray.h @@ -17,9 +17,9 @@ public: return newarray; } #ifndef NO_GARBAGE_COLLECTOR - void Mark(SQCollectable **chain); + void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override; #endif - void Finalize(){ + void Finalize() override { _values.resize(0); } bool Get(const SQInteger nidx,SQObjectPtr &val) @@ -78,9 +78,13 @@ public: ShrinkIfNeeded(); return true; } - void Release() + void Release() override { - sq_delete(this,SQArray); + this->_sharedstate->DelayFinalFree(this); + } + void FinalFree() override + { + sq_delete(this, SQArray); } SQObjectPtrVec _values; }; diff --git a/src/3rdparty/squirrel/squirrel/sqbaselib.cpp b/src/3rdparty/squirrel/squirrel/sqbaselib.cpp index e5de01a635..232c27d2be 100644 --- a/src/3rdparty/squirrel/squirrel/sqbaselib.cpp +++ b/src/3rdparty/squirrel/squirrel/sqbaselib.cpp @@ -1,14 +1,9 @@ /* * see copyright notice in squirrel.h */ -/* - * Needs to be first due to a squirrel header defining type() and type() - * being used in some versions of the headers included by algorithm. - */ #include "../../../stdafx.h" -#include #include "sqpcheader.h" #include "sqvm.h" #include "sqstring.h" diff --git a/src/3rdparty/squirrel/squirrel/sqclass.h b/src/3rdparty/squirrel/squirrel/sqclass.h index 895c053c24..4fb6ecbd97 100644 --- a/src/3rdparty/squirrel/squirrel/sqclass.h +++ b/src/3rdparty/squirrel/squirrel/sqclass.h @@ -59,7 +59,7 @@ public: } void Finalize(); #ifndef NO_GARBAGE_COLLECTOR - void Mark(SQCollectable ** ); + void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue); #endif SQInteger Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval); SQInstance *CreateInstance(); @@ -126,31 +126,33 @@ public: } return false; } - void Release() { + void Release() override { _uiRef++; try { if (_hook) { _hook(_userpointer,0);} } catch (...) { _uiRef--; if (_uiRef == 0) { - SQInteger size = _memsize; - this->~SQInstance(); - SQ_FREE(this, size); + this->_sharedstate->DelayFinalFree(this); } throw; } _uiRef--; if(_uiRef > 0) return; + this->_sharedstate->DelayFinalFree(this); + } + void FinalFree() override + { SQInteger size = _memsize; this->~SQInstance(); SQ_FREE(this, size); } - void Finalize(); + void Finalize() override; #ifndef NO_GARBAGE_COLLECTOR - void Mark(SQCollectable ** ); + void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override; #endif bool InstanceOf(SQClass *trg); - bool GetMetaMethod(SQVM *v,SQMetaMethod mm,SQObjectPtr &res); + bool GetMetaMethod(SQVM *v,SQMetaMethod mm,SQObjectPtr &res) override; SQClass *_class; SQUserPointer _userpointer; diff --git a/src/3rdparty/squirrel/squirrel/sqclosure.h b/src/3rdparty/squirrel/squirrel/sqclosure.h index a42dcd575a..8480fb8af2 100644 --- a/src/3rdparty/squirrel/squirrel/sqclosure.h +++ b/src/3rdparty/squirrel/squirrel/sqclosure.h @@ -32,7 +32,7 @@ public: bool Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write); static bool Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &ret); #ifndef NO_GARBAGE_COLLECTOR - void Mark(SQCollectable **chain); + void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue); void Finalize(){_outervalues.resize(0); } #endif SQObjectPtr _env; @@ -66,7 +66,7 @@ public: bool Yield(SQVM *v); bool Resume(SQVM *v,SQInteger target); #ifndef NO_GARBAGE_COLLECTOR - void Mark(SQCollectable **chain); + void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue); void Finalize(){_stack.resize(0);_closure=_null_;} #endif SQObjectPtr _closure; @@ -106,7 +106,7 @@ public: sq_delete(this,SQNativeClosure); } #ifndef NO_GARBAGE_COLLECTOR - void Mark(SQCollectable **chain); + void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue); void Finalize(){_outervalues.resize(0);} #endif SQInteger _nparamscheck; diff --git a/src/3rdparty/squirrel/squirrel/sqcompiler.cpp b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp index 854d080d2b..00e5df04f4 100644 --- a/src/3rdparty/squirrel/squirrel/sqcompiler.cpp +++ b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp @@ -65,9 +65,9 @@ public: } NORETURN static void ThrowError(void *ud, const SQChar *s) { SQCompiler *c = (SQCompiler *)ud; - c->Error(s); + c->Error("%s", s); } - NORETURN void Error(const SQChar *s, ...) + NORETURN void Error(const SQChar *s, ...) WARN_FORMAT(2, 3) { static SQChar temp[256]; va_list vl; @@ -122,7 +122,7 @@ public: } Error("expected '%s'", etypename); } - Error("expected '%c'", tok); + Error("expected '%c'", (char)tok); } } SQObjectPtr ret; @@ -836,6 +836,7 @@ public: SQInteger val = _fs->PopTarget(); SQInteger key = _fs->PopTarget(); SQInteger attrs = hasattrs ? _fs->PopTarget():-1; + (void)attrs; // assert only assert((hasattrs && attrs == key-1) || !hasattrs); unsigned char flags = (hasattrs?NEW_SLOT_ATTRIBUTES_FLAG:0)|(isstatic?NEW_SLOT_STATIC_FLAG:0); SQInteger table = _fs->TopTarget(); //<_gc_chain, this); \ - AddToChain(chain, this); } - -void SQVM::Mark(SQCollectable **chain) +void SQVM::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) { - START_MARK() - SQSharedState::MarkObject(_lasterror,chain); - SQSharedState::MarkObject(_errorhandler,chain); - SQSharedState::MarkObject(_debughook,chain); - SQSharedState::MarkObject(_roottable, chain); - SQSharedState::MarkObject(temp_reg, chain); - for(SQUnsignedInteger i = 0; i < _stack.size(); i++) SQSharedState::MarkObject(_stack[i], chain); - for(SQUnsignedInteger j = 0; j < _vargsstack.size(); j++) SQSharedState::MarkObject(_vargsstack[j], chain); - for(SQInteger k = 0; k < _callsstacksize; k++) SQSharedState::MarkObject(_callsstack[k]._closure, chain); - END_MARK() + SQSharedState::EnqueueMarkObject(_lasterror,queue); + SQSharedState::EnqueueMarkObject(_errorhandler,queue); + SQSharedState::EnqueueMarkObject(_debughook,queue); + SQSharedState::EnqueueMarkObject(_roottable, queue); + SQSharedState::EnqueueMarkObject(temp_reg, queue); + for(SQUnsignedInteger i = 0; i < _stack.size(); i++) SQSharedState::EnqueueMarkObject(_stack[i], queue); + for(SQUnsignedInteger j = 0; j < _vargsstack.size(); j++) SQSharedState::EnqueueMarkObject(_vargsstack[j], queue); + for(SQInteger k = 0; k < _callsstacksize; k++) SQSharedState::EnqueueMarkObject(_callsstack[k]._closure, queue); } -void SQArray::Mark(SQCollectable **chain) +void SQArray::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) { - START_MARK() - SQInteger len = _values.size(); - for(SQInteger i = 0;i < len; i++) SQSharedState::MarkObject(_values[i], chain); - END_MARK() -} -void SQTable::Mark(SQCollectable **chain) -{ - START_MARK() - if(_delegate) _delegate->Mark(chain); - SQInteger len = _numofnodes; - for(SQInteger i = 0; i < len; i++){ - SQSharedState::MarkObject(_nodes[i].key, chain); - SQSharedState::MarkObject(_nodes[i].val, chain); - } - END_MARK() + SQInteger len = _values.size(); + for(SQInteger i = 0;i < len; i++) SQSharedState::EnqueueMarkObject(_values[i], queue); } -void SQClass::Mark(SQCollectable **chain) +void SQTable::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) { - START_MARK() - _members->Mark(chain); - if(_base) _base->Mark(chain); - SQSharedState::MarkObject(_attributes, chain); - for(SQUnsignedInteger i =0; i< _defaultvalues.size(); i++) { - SQSharedState::MarkObject(_defaultvalues[i].val, chain); - SQSharedState::MarkObject(_defaultvalues[i].attrs, chain); - } - for(SQUnsignedInteger j =0; j< _methods.size(); j++) { - SQSharedState::MarkObject(_methods[j].val, chain); - SQSharedState::MarkObject(_methods[j].attrs, chain); - } - for(SQUnsignedInteger k =0; k< _metamethods.size(); k++) { - SQSharedState::MarkObject(_metamethods[k], chain); - } - END_MARK() + if(_delegate) queue.Enqueue(_delegate); + SQInteger len = _numofnodes; + for(SQInteger i = 0; i < len; i++){ + SQSharedState::EnqueueMarkObject(_nodes[i].key, queue); + SQSharedState::EnqueueMarkObject(_nodes[i].val, queue); + } } -void SQInstance::Mark(SQCollectable **chain) +void SQClass::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) { - START_MARK() - _class->Mark(chain); - SQUnsignedInteger nvalues = _class->_defaultvalues.size(); - for(SQUnsignedInteger i =0; i< nvalues; i++) { - SQSharedState::MarkObject(_values[i], chain); - } - END_MARK() + queue.Enqueue(_members); + if(_base) queue.Enqueue(_base); + SQSharedState::EnqueueMarkObject(_attributes, queue); + for(SQUnsignedInteger i =0; i< _defaultvalues.size(); i++) { + SQSharedState::EnqueueMarkObject(_defaultvalues[i].val, queue); + SQSharedState::EnqueueMarkObject(_defaultvalues[i].attrs, queue); + } + for(SQUnsignedInteger j =0; j< _methods.size(); j++) { + SQSharedState::EnqueueMarkObject(_methods[j].val, queue); + SQSharedState::EnqueueMarkObject(_methods[j].attrs, queue); + } + for(SQUnsignedInteger k =0; k< _metamethods.size(); k++) { + SQSharedState::EnqueueMarkObject(_metamethods[k], queue); + } } -void SQGenerator::Mark(SQCollectable **chain) +void SQInstance::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) { - START_MARK() - for(SQUnsignedInteger i = 0; i < _stack.size(); i++) SQSharedState::MarkObject(_stack[i], chain); - for(SQUnsignedInteger j = 0; j < _vargsstack.size(); j++) SQSharedState::MarkObject(_vargsstack[j], chain); - SQSharedState::MarkObject(_closure, chain); - END_MARK() + queue.Enqueue(_class); + SQUnsignedInteger nvalues = _class->_defaultvalues.size(); + for(SQUnsignedInteger i =0; i< nvalues; i++) { + SQSharedState::EnqueueMarkObject(_values[i], queue); + } } -void SQClosure::Mark(SQCollectable **chain) +void SQGenerator::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) { - START_MARK() - for(SQUnsignedInteger i = 0; i < _outervalues.size(); i++) SQSharedState::MarkObject(_outervalues[i], chain); - for(SQUnsignedInteger i = 0; i < _defaultparams.size(); i++) SQSharedState::MarkObject(_defaultparams[i], chain); - END_MARK() + for(SQUnsignedInteger i = 0; i < _stack.size(); i++) SQSharedState::EnqueueMarkObject(_stack[i], queue); + for(SQUnsignedInteger j = 0; j < _vargsstack.size(); j++) SQSharedState::EnqueueMarkObject(_vargsstack[j], queue); + SQSharedState::EnqueueMarkObject(_closure, queue); } -void SQNativeClosure::Mark(SQCollectable **chain) +void SQClosure::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) { - START_MARK() - for(SQUnsignedInteger i = 0; i < _outervalues.size(); i++) SQSharedState::MarkObject(_outervalues[i], chain); - END_MARK() + for(SQUnsignedInteger i = 0; i < _outervalues.size(); i++) SQSharedState::EnqueueMarkObject(_outervalues[i], queue); + for(SQUnsignedInteger i = 0; i < _defaultparams.size(); i++) SQSharedState::EnqueueMarkObject(_defaultparams[i], queue); } -void SQUserData::Mark(SQCollectable **chain){ - START_MARK() - if(_delegate) _delegate->Mark(chain); - END_MARK() +void SQNativeClosure::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) +{ + for(SQUnsignedInteger i = 0; i < _outervalues.size(); i++) SQSharedState::EnqueueMarkObject(_outervalues[i], queue); +} + +void SQUserData::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue){ + if(_delegate) queue.Enqueue(_delegate); } void SQCollectable::UnMark() { _uiRef&=~MARK_FLAG; } diff --git a/src/3rdparty/squirrel/squirrel/sqobject.h b/src/3rdparty/squirrel/squirrel/sqobject.h index d71e515a8d..9212766eef 100644 --- a/src/3rdparty/squirrel/squirrel/sqobject.h +++ b/src/3rdparty/squirrel/squirrel/sqobject.h @@ -2,6 +2,7 @@ #ifndef _SQOBJECT_H_ #define _SQOBJECT_H_ +#include #include "squtils.h" #define SQ_CLOSURESTREAM_HEAD (('S'<<24)|('Q'<<16)|('I'<<8)|('R')) @@ -344,11 +345,54 @@ struct SQCollectable : public SQRefCounted { SQCollectable *_prev; SQSharedState *_sharedstate; virtual void Release()=0; - virtual void Mark(SQCollectable **chain)=0; + virtual void EnqueueMarkObjectForChildren(class SQGCMarkerQueue &queue)=0; void UnMark(); virtual void Finalize()=0; static void AddToChain(SQCollectable **chain,SQCollectable *c); static void RemoveFromChain(SQCollectable **chain,SQCollectable *c); + + /** + * Helper to perform the final memory freeing of this instance. Since the destructor might + * release more objects, this can cause a very deep recursion. As such, the calls to this + * are to be done via _sharedstate->DelayFinalFree which ensures the calls to this method + * are done in an iterative instead of recursive approach. + */ + virtual void FinalFree() {} +}; + +/** + * Helper container for state to change the garbage collection from a recursive to an iterative approach. + * The iterative approach provides effectively a depth first search approach. + */ +class SQGCMarkerQueue { + std::vector stack; ///< The elements to still process, with the most recent elements at the back. +public: + /** Whether there are any elements left to process. */ + bool IsEmpty() { return this->stack.empty(); } + + /** + * Remove the most recently added element from the queue. + * Removal when the queue is empty results in undefined behaviour. + */ + SQCollectable *Pop() + { + SQCollectable *collectable = this->stack.back(); + this->stack.pop_back(); + return collectable; + } + + /** + * Add a collectable to the queue, but only when it has not been marked yet. + * When adding it to the queue, the collectable will be marked, so subsequent calls + * will not add it again. + */ + void Enqueue(SQCollectable *collectable) + { + if ((collectable->_uiRef & MARK_FLAG) == 0) { + collectable->_uiRef |= MARK_FLAG; + this->stack.push_back(collectable); + } + } }; diff --git a/src/3rdparty/squirrel/squirrel/sqstate.cpp b/src/3rdparty/squirrel/squirrel/sqstate.cpp index 35878e197b..31345d6640 100644 --- a/src/3rdparty/squirrel/squirrel/sqstate.cpp +++ b/src/3rdparty/squirrel/squirrel/sqstate.cpp @@ -99,6 +99,7 @@ SQSharedState::SQSharedState() _notifyallexceptions = false; _scratchpad=NULL; _scratchpadsize=0; + _collectable_free_processing = false; #ifndef NO_GARBAGE_COLLECTOR _gc_chain=NULL; #endif @@ -226,20 +227,48 @@ SQInteger SQSharedState::GetMetaMethodIdxByName(const SQObjectPtr &name) return -1; } +/** + * Helper function that is to be used instead of calling FinalFree directly on the instance, + * so the frees can happen iteratively. This as in the FinalFree the references to any other + * objects are released, which can cause those object to be freed yielding a potentially + * very deep stack in case of for example a link list. + * + * This is done internally by a vector onto which the to be freed instances are pushed. When + * this is called when not already processing, this method will actually call the FinalFree + * function which might cause more elements to end up in the queue which this method then + * picks up continueing until it has processed all instances in that queue. + * @param collectable The collectable to (eventually) free. + */ +void SQSharedState::DelayFinalFree(SQCollectable *collectable) +{ + this->_collectable_free_queue.push_back(collectable); + + if (!this->_collectable_free_processing) { + this->_collectable_free_processing = true; + while (!this->_collectable_free_queue.empty()) { + SQCollectable *collectable = this->_collectable_free_queue.back(); + this->_collectable_free_queue.pop_back(); + collectable->FinalFree(); + } + this->_collectable_free_processing = false; + } +} + + #ifndef NO_GARBAGE_COLLECTOR -void SQSharedState::MarkObject(SQObjectPtr &o,SQCollectable **chain) +void SQSharedState::EnqueueMarkObject(SQObjectPtr &o,SQGCMarkerQueue &queue) { switch(type(o)){ - case OT_TABLE:_table(o)->Mark(chain);break; - case OT_ARRAY:_array(o)->Mark(chain);break; - case OT_USERDATA:_userdata(o)->Mark(chain);break; - case OT_CLOSURE:_closure(o)->Mark(chain);break; - case OT_NATIVECLOSURE:_nativeclosure(o)->Mark(chain);break; - case OT_GENERATOR:_generator(o)->Mark(chain);break; - case OT_THREAD:_thread(o)->Mark(chain);break; - case OT_CLASS:_class(o)->Mark(chain);break; - case OT_INSTANCE:_instance(o)->Mark(chain);break; + case OT_TABLE:queue.Enqueue(_table(o));break; + case OT_ARRAY:queue.Enqueue(_array(o));break; + case OT_USERDATA:queue.Enqueue(_userdata(o));break; + case OT_CLOSURE:queue.Enqueue(_closure(o));break; + case OT_NATIVECLOSURE:queue.Enqueue(_nativeclosure(o));break; + case OT_GENERATOR:queue.Enqueue(_generator(o));break; + case OT_THREAD:queue.Enqueue(_thread(o));break; + case OT_CLASS:queue.Enqueue(_class(o));break; + case OT_INSTANCE:queue.Enqueue(_instance(o));break; default: break; //shutup compiler } } @@ -248,25 +277,36 @@ void SQSharedState::MarkObject(SQObjectPtr &o,SQCollectable **chain) SQInteger SQSharedState::CollectGarbage(SQVM *vm) { SQInteger n=0; - SQCollectable *tchain=NULL; SQVM *vms = _thread(_root_vm); - vms->Mark(&tchain); + SQGCMarkerQueue queue; + queue.Enqueue(vms); +#ifdef WITH_ASSERT SQInteger x = _table(_thread(_root_vm)->_roottable)->CountUsed(); - _refs_table.Mark(&tchain); - MarkObject(_registry,&tchain); - MarkObject(_consts,&tchain); - MarkObject(_metamethodsmap,&tchain); - MarkObject(_table_default_delegate,&tchain); - MarkObject(_array_default_delegate,&tchain); - MarkObject(_string_default_delegate,&tchain); - MarkObject(_number_default_delegate,&tchain); - MarkObject(_generator_default_delegate,&tchain); - MarkObject(_thread_default_delegate,&tchain); - MarkObject(_closure_default_delegate,&tchain); - MarkObject(_class_default_delegate,&tchain); - MarkObject(_instance_default_delegate,&tchain); - MarkObject(_weakref_default_delegate,&tchain); +#endif + _refs_table.EnqueueMarkObject(queue); + EnqueueMarkObject(_registry,queue); + EnqueueMarkObject(_consts,queue); + EnqueueMarkObject(_metamethodsmap,queue); + EnqueueMarkObject(_table_default_delegate,queue); + EnqueueMarkObject(_array_default_delegate,queue); + EnqueueMarkObject(_string_default_delegate,queue); + EnqueueMarkObject(_number_default_delegate,queue); + EnqueueMarkObject(_generator_default_delegate,queue); + EnqueueMarkObject(_thread_default_delegate,queue); + EnqueueMarkObject(_closure_default_delegate,queue); + EnqueueMarkObject(_class_default_delegate,queue); + EnqueueMarkObject(_instance_default_delegate,queue); + EnqueueMarkObject(_weakref_default_delegate,queue); + + SQCollectable *tchain=NULL; + + while (!queue.IsEmpty()) { + SQCollectable *q = queue.Pop(); + q->EnqueueMarkObjectForChildren(queue); + SQCollectable::RemoveFromChain(&_gc_chain, q); + SQCollectable::AddToChain(&tchain, q); + } SQCollectable *t = _gc_chain; SQCollectable *nx = NULL; @@ -289,8 +329,10 @@ SQInteger SQSharedState::CollectGarbage(SQVM *vm) t = t->_next; } _gc_chain = tchain; +#ifdef WITH_ASSERT SQInteger z = _table(_thread(_root_vm)->_roottable)->CountUsed(); assert(z == x); +#endif return n; } #endif @@ -353,12 +395,12 @@ RefTable::~RefTable() } #ifndef NO_GARBAGE_COLLECTOR -void RefTable::Mark(SQCollectable **chain) +void RefTable::EnqueueMarkObject(SQGCMarkerQueue &queue) { RefNode *nodes = (RefNode *)_nodes; for(SQUnsignedInteger n = 0; n < _numofslots; n++) { if(type(nodes->obj) != OT_NULL) { - SQSharedState::MarkObject(nodes->obj,chain); + SQSharedState::EnqueueMarkObject(nodes->obj,queue); } nodes++; } diff --git a/src/3rdparty/squirrel/squirrel/sqstate.h b/src/3rdparty/squirrel/squirrel/sqstate.h index da6bf9ae64..547e6de47d 100644 --- a/src/3rdparty/squirrel/squirrel/sqstate.h +++ b/src/3rdparty/squirrel/squirrel/sqstate.h @@ -34,7 +34,7 @@ struct RefTable { void AddRef(SQObject &obj); SQBool Release(SQObject &obj); #ifndef NO_GARBAGE_COLLECTOR - void Mark(SQCollectable **chain); + void EnqueueMarkObject(SQGCMarkerQueue &queue); #endif void Finalize(); private: @@ -61,9 +61,10 @@ struct SQSharedState public: SQChar* GetScratchPad(SQInteger size); SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name); + void DelayFinalFree(SQCollectable *collectable); #ifndef NO_GARBAGE_COLLECTOR SQInteger CollectGarbage(SQVM *vm); - static void MarkObject(SQObjectPtr &o,SQCollectable **chain); + static void EnqueueMarkObject(SQObjectPtr &o,SQGCMarkerQueue &queue); #endif SQObjectPtrVec *_metamethods; SQObjectPtr _metamethodsmap; @@ -74,6 +75,10 @@ public: SQObjectPtr _registry; SQObjectPtr _consts; SQObjectPtr _constructoridx; + /** Queue to make freeing of collectables iterative. */ + std::vector _collectable_free_queue; + /** Whether someone is already processing the _collectable_free_queue. */ + bool _collectable_free_processing; #ifndef NO_GARBAGE_COLLECTOR SQCollectable *_gc_chain; #endif diff --git a/src/3rdparty/squirrel/squirrel/sqtable.h b/src/3rdparty/squirrel/squirrel/sqtable.h index 52d9ba41ab..fad2fdc605 100644 --- a/src/3rdparty/squirrel/squirrel/sqtable.h +++ b/src/3rdparty/squirrel/squirrel/sqtable.h @@ -50,7 +50,7 @@ public: newtable->_delegate = NULL; return newtable; } - void Finalize(); + void Finalize() override; SQTable *Clone(); ~SQTable() { @@ -60,7 +60,7 @@ public: SQ_FREE(_nodes, _numofnodes * sizeof(_HashNode)); } #ifndef NO_GARBAGE_COLLECTOR - void Mark(SQCollectable **chain); + void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override; #endif inline _HashNode *_Get(const SQObjectPtr &key,SQHash hash) { @@ -81,7 +81,11 @@ public: SQInteger CountUsed(){ return _usednodes;} void Clear(); - void Release() + void Release() override + { + this->_sharedstate->DelayFinalFree(this); + } + void FinalFree() override { sq_delete(this, SQTable); } diff --git a/src/3rdparty/squirrel/squirrel/squserdata.h b/src/3rdparty/squirrel/squirrel/squserdata.h index 3bf1a9dbad..ca4933de2d 100644 --- a/src/3rdparty/squirrel/squirrel/squserdata.h +++ b/src/3rdparty/squirrel/squirrel/squserdata.h @@ -18,7 +18,7 @@ struct SQUserData : SQDelegable return ud; } #ifndef NO_GARBAGE_COLLECTOR - void Mark(SQCollectable **chain); + void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue); void Finalize(){SetDelegate(NULL);} #endif void Release() { diff --git a/src/3rdparty/squirrel/squirrel/sqvm.cpp b/src/3rdparty/squirrel/squirrel/sqvm.cpp index 03ffea2303..ad07ac512d 100644 --- a/src/3rdparty/squirrel/squirrel/sqvm.cpp +++ b/src/3rdparty/squirrel/squirrel/sqvm.cpp @@ -94,7 +94,7 @@ bool SQVM::ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1, if(!StringCat(o1, o2, trg)) return false; } else if(!ArithMetaMethod(op,o1,o2,trg)) { - Raise_Error("arith op %c on between '%s' and '%s'",op,GetTypeName(o1),GetTypeName(o2)); return false; + Raise_Error("arith op %c on between '%s' and '%s'",(char)op,GetTypeName(o1),GetTypeName(o2)); return false; } } return true; @@ -1460,7 +1460,7 @@ bool SQVM::DeleteSlot(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr } } res = t; - } + } break; default: Raise_Error("attempt to delete a slot from a %s",GetTypeName(self)); @@ -1471,8 +1471,8 @@ bool SQVM::DeleteSlot(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr bool SQVM::Call(SQObjectPtr &closure,SQInteger nparams,SQInteger stackbase,SQObjectPtr &outres,SQBool raiseerror,SQBool can_suspend) { -#ifdef _DEBUG -SQInteger prevstackbase = _stackbase; +#ifdef WITH_ASSERT + SQInteger prevstackbase = _stackbase; #endif switch(type(closure)) { case OT_CLOSURE: { @@ -1482,13 +1482,13 @@ SQInteger prevstackbase = _stackbase; bool ret = Execute(closure, _top - nparams, nparams, stackbase,outres,raiseerror); this->_can_suspend = backup_suspend; return ret; - } + } break; - case OT_NATIVECLOSURE:{ + case OT_NATIVECLOSURE: { bool suspend; return CallNative(_nativeclosure(closure), nparams, stackbase, outres,suspend); - } + } break; case OT_CLASS: { SQObjectPtr constr; @@ -1499,12 +1499,12 @@ SQInteger prevstackbase = _stackbase; return Call(constr,nparams,stackbase,temp,raiseerror,false); } return true; - } + } break; default: return false; } -#ifdef _DEBUG +#ifdef WITH_ASSERT if(!_suspended) { assert(_stackbase == prevstackbase); } diff --git a/src/3rdparty/squirrel/squirrel/sqvm.h b/src/3rdparty/squirrel/squirrel/sqvm.h index 97557b1332..dbfe2309c7 100644 --- a/src/3rdparty/squirrel/squirrel/sqvm.h +++ b/src/3rdparty/squirrel/squirrel/sqvm.h @@ -81,7 +81,7 @@ public: SQString *PrintObjVal(const SQObject &o); - void Raise_Error(const SQChar *s, ...); + void Raise_Error(const SQChar *s, ...) WARN_FORMAT(2, 3); void Raise_Error(SQObjectPtr &desc); void Raise_IdxError(const SQObject &o); void Raise_CompareError(const SQObject &o1, const SQObject &o2); @@ -113,7 +113,7 @@ public: #endif #ifndef NO_GARBAGE_COLLECTOR - void Mark(SQCollectable **chain); + void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue); #endif void Finalize(); void GrowCallStack() { diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000000..82fd721afc --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,485 @@ +add_subdirectory(script) +add_subdirectory(settingsgen) +add_subdirectory(strgen) + +if(OPTION_TOOLS_ONLY) + return() +endif() + +add_subdirectory(3rdparty) +add_subdirectory(ai) +add_subdirectory(blitter) +add_subdirectory(citymania) +add_subdirectory(core) +add_subdirectory(game) +add_subdirectory(lang) +add_subdirectory(linkgraph) +add_subdirectory(misc) +add_subdirectory(music) +add_subdirectory(network) +add_subdirectory(os) +add_subdirectory(pathfinder) +add_subdirectory(saveload) +add_subdirectory(sound) +add_subdirectory(spriteloader) +add_subdirectory(table) +add_subdirectory(video) +add_subdirectory(widgets) + +add_files( + viewport_sprite_sorter_sse4.cpp + CONDITION SSE_FOUND +) +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set_compile_flags( + viewport_sprite_sorter_sse4.cpp + COMPILE_FLAGS -msse4.1) +endif() + +add_files( + aircraft.h + aircraft_cmd.cpp + aircraft_gui.cpp + airport.cpp + airport.h + airport_gui.cpp + animated_tile.cpp + animated_tile_func.h + articulated_vehicles.cpp + articulated_vehicles.h + autoreplace.cpp + autoreplace_base.h + autoreplace_cmd.cpp + autoreplace_func.h + autoreplace_gui.cpp + autoreplace_gui.h + autoreplace_type.h + autoslope.h + base_consist.cpp + base_consist.h + base_media_base.h + base_media_func.h + base_station_base.h + bitmap_type.h + bmp.cpp + bmp.h + bootstrap_gui.cpp + bridge.h + bridge_gui.cpp + bridge_map.cpp + bridge_map.h + build_vehicle_gui.cpp + cargo_type.h + cargoaction.cpp + cargoaction.h + cargomonitor.cpp + cargomonitor.h + cargopacket.cpp + cargopacket.h + cargotype.cpp + cargotype.h + cheat.cpp + cheat_func.h + cheat_gui.cpp + cheat_type.h + clear_cmd.cpp + clear_func.h + clear_map.h + cmd_helper.h + command.cpp + command_func.h + command_type.h + company_base.h + company_cmd.cpp + company_func.h + company_gui.cpp + company_gui.h + company_manager_face.h + company_type.h + console.cpp + console_cmds.cpp + console_func.h + console_gui.cpp + console_gui.h + console_internal.h + console_type.h + cpu.cpp + cpu.h + crashlog.cpp + crashlog.h + currency.cpp + currency.h + date.cpp + date_func.h + date_gui.cpp + date_gui.h + date_type.h + debug.cpp + debug.h + dedicated.cpp + depot.cpp + depot_base.h + depot_cmd.cpp + depot_func.h + depot_gui.cpp + depot_map.h + depot_type.h + direction_func.h + direction_type.h + disaster_vehicle.cpp + disaster_vehicle.h + dock_gui.cpp + driver.cpp + driver.h + economy.cpp + economy_base.h + economy_func.h + economy_type.h + effectvehicle.cpp + effectvehicle_base.h + effectvehicle_func.h + elrail.cpp + elrail_func.h + engine.cpp + engine_base.h + engine_func.h + engine_gui.cpp + engine_gui.h + engine_type.h + error.h + error_gui.cpp + fileio.cpp + fileio_func.h + fileio_type.h + fios.cpp + fios.h + fios_gui.cpp + fontcache.cpp + fontcache.h + fontcache_internal.h + fontdetection.h + framerate_gui.cpp + framerate_type.h + gamelog.cpp + gamelog.h + gamelog_internal.h + genworld.cpp + genworld.h + genworld_gui.cpp + gfx.cpp + gfx_func.h + gfx_layout.cpp + gfx_layout.h + gfx_type.h + gfxinit.cpp + gfxinit.h + goal.cpp + goal_base.h + goal_gui.cpp + goal_type.h + graph_gui.cpp + graph_gui.h + ground_vehicle.cpp + ground_vehicle.hpp + group.h + group_cmd.cpp + group_gui.cpp + group_gui.h + group_type.h + gui.h + guitimer_func.h + heightmap.cpp + heightmap.h + highscore.cpp + highscore.h + highscore_gui.cpp + hotkeys.cpp + hotkeys.h + house.h + house_type.h + industry.h + industry_cmd.cpp + industry_gui.cpp + industry_map.h + industry_type.h + industrytype.h + ini.cpp + ini_load.cpp + ini_type.h + intro_gui.cpp + landscape.cpp + landscape.h + landscape_type.h + language.h + livery.h + main_gui.cpp + map.cpp + map_func.h + map_type.h + misc.cpp + misc_cmd.cpp + misc_gui.cpp + mixer.cpp + mixer.h + music.cpp + music_gui.cpp + newgrf.cpp + newgrf.h + newgrf_airport.cpp + newgrf_airport.h + newgrf_airporttiles.cpp + newgrf_airporttiles.h + newgrf_animation_base.h + newgrf_animation_type.h + newgrf_callbacks.h + newgrf_canal.cpp + newgrf_canal.h + newgrf_cargo.cpp + newgrf_cargo.h + newgrf_class.h + newgrf_class_func.h + newgrf_commons.cpp + newgrf_commons.h + newgrf_config.cpp + newgrf_config.h + newgrf_debug.h + newgrf_debug_gui.cpp + newgrf_engine.cpp + newgrf_engine.h + newgrf_generic.cpp + newgrf_generic.h + newgrf_gui.cpp + newgrf_house.cpp + newgrf_house.h + newgrf_industries.cpp + newgrf_industries.h + newgrf_industrytiles.cpp + newgrf_industrytiles.h + newgrf_object.cpp + newgrf_object.h + newgrf_profiling.cpp + newgrf_profiling.h + newgrf_properties.h + newgrf_railtype.cpp + newgrf_railtype.h + newgrf_roadtype.cpp + newgrf_roadtype.h + newgrf_sound.cpp + newgrf_sound.h + newgrf_spritegroup.cpp + newgrf_spritegroup.h + newgrf_station.cpp + newgrf_station.h + newgrf_storage.cpp + newgrf_storage.h + newgrf_text.cpp + newgrf_text.h + newgrf_town.cpp + newgrf_town.h + newgrf_townname.cpp + newgrf_townname.h + news_func.h + news_gui.cpp + news_gui.h + news_type.h + object.h + object_base.h + object_cmd.cpp + object_gui.cpp + object_map.h + object_type.h + openttd.cpp + openttd.h + order_backup.cpp + order_backup.h + order_base.h + order_cmd.cpp + order_func.h + order_gui.cpp + order_type.h + osk_gui.cpp + pbs.cpp + pbs.h + progress.cpp + progress.h + querystring_gui.h + rail.cpp + rail.h + rail_cmd.cpp + rail_gui.cpp + rail_gui.h + rail_map.h + rail_type.h + rev.h + road.cpp + road.h + road_cmd.cpp + road_cmd.h + road_func.h + road_gui.cpp + road_gui.h + road_internal.h + road_map.cpp + road_map.h + road_type.h + roadstop.cpp + roadstop_base.h + roadveh.h + roadveh_cmd.cpp + roadveh_gui.cpp + safeguards.h + screenshot_gui.cpp + screenshot_gui.h + screenshot.cpp + screenshot.h + settings.cpp + settings_func.h + settings_gui.cpp + settings_gui.h + settings_internal.h + settings_type.h + ship.h + ship_cmd.cpp + ship_gui.cpp + signal.cpp + signal_func.h + signal_type.h + signs.cpp + signs_base.h + signs_cmd.cpp + signs_func.h + signs_gui.cpp + signs_type.h + slope_func.h + slope_type.h + smallmap_gui.cpp + smallmap_gui.h + sortlist_type.h + sound.cpp + sound_func.h + sound_type.h + sprite.cpp + sprite.h + spritecache.cpp + spritecache.h + station.cpp + station_base.h + station_cmd.cpp + station_func.h + station_gui.cpp + station_gui.h + station_kdtree.h + station_map.h + station_type.h + statusbar_gui.cpp + statusbar_gui.h + stdafx.h + story.cpp + story_base.h + story_gui.cpp + story_type.h + strgen/strgen.h + string.cpp + string_base.h + string_func.h + string_type.h + stringfilter.cpp + stringfilter_type.h + strings.cpp + strings_func.h + strings_type.h + subsidy.cpp + subsidy_base.h + subsidy_func.h + subsidy_gui.cpp + subsidy_type.h + tar_type.h + terraform_cmd.cpp + terraform_gui.cpp + terraform_gui.h + textbuf.cpp + textbuf_gui.h + textbuf_type.h + texteff.cpp + texteff.hpp + textfile_gui.cpp + textfile_gui.h + textfile_type.h + tgp.cpp + tgp.h + thread.h + tile_cmd.h + tile_map.cpp + tile_map.h + tile_type.h + tilearea.cpp + tilearea_type.h + tilehighlight_func.h + tilehighlight_type.h + tilematrix_type.hpp + timetable.h + timetable_cmd.cpp + timetable_gui.cpp + toolbar_gui.cpp + toolbar_gui.h + town.h + town_cmd.cpp + town_gui.cpp + town_kdtree.h + town_map.h + town_type.h + townname.cpp + townname_func.h + townname_type.h + track_func.h + track_type.h + train.h + train_cmd.cpp + train_gui.cpp + transparency.h + transparency_gui.cpp + transparency_gui.h + transport_type.h + tree_cmd.cpp + tree_gui.cpp + tree_map.h + tunnel_map.cpp + tunnel_map.h + tunnelbridge.h + tunnelbridge_cmd.cpp + tunnelbridge_map.h + vehicle.cpp + vehicle_base.h + vehicle_cmd.cpp + vehicle_func.h + vehicle_gui.cpp + vehicle_gui.h + vehicle_gui_base.h + vehicle_type.h + vehiclelist.cpp + vehiclelist.h + viewport.cpp + viewport_func.h + viewport_gui.cpp + viewport_kdtree.h + viewport_sprite_sorter.h + viewport_type.h + void_cmd.cpp + void_map.h + water.h + water_cmd.cpp + water_map.h + waypoint.cpp + waypoint_base.h + waypoint_cmd.cpp + waypoint_func.h + waypoint_gui.cpp + widget.cpp + widget_type.h + window.cpp + window_func.h + window_gui.h + window_type.h + zoom_func.h + zoom_type.h +) diff --git a/src/ai/CMakeLists.txt b/src/ai/CMakeLists.txt new file mode 100644 index 0000000000..cab886b265 --- /dev/null +++ b/src/ai/CMakeLists.txt @@ -0,0 +1,14 @@ +add_files( + ai.hpp + ai_config.cpp + ai_config.hpp + ai_core.cpp + ai_gui.cpp + ai_gui.hpp + ai_info.cpp + ai_info.hpp + ai_instance.cpp + ai_instance.hpp + ai_scanner.cpp + ai_scanner.hpp +) diff --git a/src/ai/ai_config.cpp b/src/ai/ai_config.cpp index 2afa69d39e..98618feb20 100644 --- a/src/ai/ai_config.cpp +++ b/src/ai/ai_config.cpp @@ -39,7 +39,7 @@ AIConfig::AIConfig(const AIConfig *config) : ScriptConfig(config) * This is necessary because the ScriptConfig constructor will instead call * ScriptConfig::AddRandomDeviation(). */ int start_date = config->GetSetting("start_date"); - this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0); + this->SetSetting("start_date", start_date != 0 ? std::max(1, this->GetSetting("start_date")) : 0); } /* static */ AIConfig *AIConfig::GetConfig(CompanyID company, ScriptSettingSource source) @@ -134,5 +134,5 @@ void AIConfig::AddRandomDeviation() /* start_date = 0 is a special case, where random deviation does not occur. * If start_date was not already 0, then a minimum value of 1 must apply. */ - this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0); + this->SetSetting("start_date", start_date != 0 ? std::max(1, this->GetSetting("start_date")) : 0); } diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index a0552628cd..14fc65cc8c 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -87,11 +87,13 @@ struct AIListWindow : public Window { if (GetConfig(slot)->HasScript()) { ScriptInfo *info = GetConfig(slot)->GetInfo(); int i = 0; - for (ScriptInfoList::const_iterator it = this->info_list->begin(); it != this->info_list->end(); it++, i++) { - if ((*it).second == info) { + for (const auto &item : *this->info_list) { + if (item.second == info) { this->selected = i; break; } + + i++; } } } @@ -127,10 +129,11 @@ struct AIListWindow : public Window { DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_LEFT, y + WD_MATRIX_TOP, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE); y += this->line_height; } - ScriptInfoList::const_iterator it = this->info_list->begin(); - for (int i = 1; it != this->info_list->end(); i++, it++) { + int i = 0; + for (const auto &item : *this->info_list) { + i++; if (this->vscroll->IsVisible(i)) { - DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y + WD_MATRIX_TOP, (*it).second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE); + DrawString(r.left + WD_MATRIX_LEFT, r.right - WD_MATRIX_RIGHT, y + WD_MATRIX_TOP, item.second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE); y += this->line_height; } } @@ -138,9 +141,10 @@ struct AIListWindow : public Window { } case WID_AIL_INFO_BG: { AIInfo *selected_info = nullptr; - ScriptInfoList::const_iterator it = this->info_list->begin(); - for (int i = 1; selected_info == nullptr && it != this->info_list->end(); i++, it++) { - if (this->selected == i - 1) selected_info = static_cast((*it).second); + int i = 0; + for (const auto &item : *this->info_list) { + i++; + if (this->selected == i - 1) selected_info = static_cast(item.second); } /* Some info about the currently selected AI. */ if (selected_info != nullptr) { @@ -232,7 +236,7 @@ struct AIListWindow : public Window { this->vscroll->SetCount((int)this->info_list->size() + 1); /* selected goes from -1 .. length of ai list - 1. */ - this->selected = min(this->selected, this->vscroll->GetCount() - 2); + this->selected = std::min(this->selected, this->vscroll->GetCount() - 2); } }; @@ -311,8 +315,6 @@ struct AISettingsWindow : public Window { this->vscroll = this->GetScrollbar(WID_AIS_SCROLLBAR); this->FinishInitNested(slot); // Initializes 'this->line_height' as side effect. - this->SetWidgetDisabledState(WID_AIS_RESET, _game_mode != GM_MENU && Company::IsValidID(this->slot)); - this->RebuildVisibleSettings(); } @@ -334,11 +336,10 @@ struct AISettingsWindow : public Window { { visible_settings.clear(); - ScriptConfigItemList::const_iterator it = this->ai_config->GetConfigList()->begin(); - for (; it != this->ai_config->GetConfigList()->end(); it++) { - bool no_hide = (it->flags & SCRIPTCONFIG_DEVELOPER) == 0; + for (const auto &item : *this->ai_config->GetConfigList()) { + bool no_hide = (item.flags & SCRIPTCONFIG_DEVELOPER) == 0; if (no_hide || _settings_client.gui.ai_developer_tools) { - visible_settings.push_back(&(*it)); + visible_settings.push_back(&item); } } @@ -348,7 +349,7 @@ struct AISettingsWindow : public Window { void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget == WID_AIS_BACKGROUND) { - this->line_height = max(SETTING_BUTTON_HEIGHT, FONT_HEIGHT_NORMAL) + WD_MATRIX_TOP + WD_MATRIX_BOTTOM; + this->line_height = std::max(SETTING_BUTTON_HEIGHT, FONT_HEIGHT_NORMAL) + WD_MATRIX_TOP + WD_MATRIX_BOTTOM; resize->width = 1; resize->height = this->line_height; @@ -521,10 +522,8 @@ struct AISettingsWindow : public Window { break; case WID_AIS_RESET: - if (_game_mode == GM_MENU || !Company::IsValidID(this->slot)) { - this->ai_config->ResetSettings(); - this->SetDirty(); - } + this->ai_config->ResetEditableSettings(_game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot))); + this->SetDirty(); break; } } @@ -589,7 +588,7 @@ struct AISettingsWindow : public Window { } private: - bool IsEditableItem(const ScriptConfigItem config_item) const + bool IsEditableItem(const ScriptConfigItem &config_item) const { return _game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot)) || (config_item.flags & SCRIPTCONFIG_INGAME) != 0; } @@ -705,16 +704,16 @@ static const NWidgetPart _nested_ai_config_widgets[] = { NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIC_GAMELIST), SetMinimalSize(288, 14), SetFill(1, 0), SetMatrixDataTip(1, 1, STR_AI_CONFIG_GAMELIST_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CHANGE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_CONFIG_CHANGE, STR_AI_CONFIG_CHANGE_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONFIGURE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_CONFIG_CONFIGURE, STR_AI_CONFIG_CONFIGURE_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CLOSE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_SETTINGS_CLOSE, STR_NULL), - EndContainer(), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CHANGE), SetFill(1, 0), SetMinimalSize(93, 0), SetDataTip(STR_AI_CONFIG_CHANGE, STR_AI_CONFIG_CHANGE_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONFIGURE), SetFill(1, 0), SetMinimalSize(93, 0), SetDataTip(STR_AI_CONFIG_CONFIGURE, STR_AI_CONFIG_CONFIGURE_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CLOSE), SetFill(1, 0), SetMinimalSize(93, 0), SetDataTip(STR_AI_SETTINGS_CLOSE, STR_NULL), + EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7), NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), EndContainer(), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONTENT_DOWNLOAD), SetFill(1, 0), SetMinimalSize(279, 12), SetPadding(0, 7, 9, 7), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONTENT_DOWNLOAD), SetFill(1, 0), SetMinimalSize(279, 0), SetPadding(0, 7, 9, 7), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), EndContainer(), }; @@ -880,9 +879,9 @@ struct AIConfigWindow : public Window { case WID_AIC_INCREASE: { int new_value; if (widget == WID_AIC_DECREASE) { - new_value = max(0, GetGameSettings().difficulty.max_no_competitors - 1); + new_value = std::max(0, GetGameSettings().difficulty.max_no_competitors - 1); } else { - new_value = min(MAX_COMPANIES - 1, GetGameSettings().difficulty.max_no_competitors + 1); + new_value = std::min(MAX_COMPANIES - 1, GetGameSettings().difficulty.max_no_competitors + 1); } IConsoleSetSetting("difficulty.max_no_competitors", new_value); break; @@ -1177,7 +1176,7 @@ struct AIDebugWindow : public Window { this->autoscroll = this->vscroll->GetPosition() >= log->used - this->vscroll->GetCapacity(); } if (this->autoscroll) { - int scroll_pos = max(0, log->used - this->vscroll->GetCapacity()); + int scroll_pos = std::max(0, log->used - this->vscroll->GetCapacity()); if (scroll_pos != this->vscroll->GetPosition()) { this->vscroll->SetPosition(scroll_pos); @@ -1407,7 +1406,8 @@ struct AIDebugWindow : public Window { this->SetWidgetLoweredState(WID_AID_MATCH_CASE_BTN, this->case_sensitive_break_check); this->SetWidgetDisabledState(WID_AID_SETTINGS, ai_debug_company == INVALID_COMPANY); - this->SetWidgetDisabledState(WID_AID_RELOAD_TOGGLE, ai_debug_company == INVALID_COMPANY || ai_debug_company == OWNER_DEITY); + extern CompanyID _local_company; + this->SetWidgetDisabledState(WID_AID_RELOAD_TOGGLE, ai_debug_company == INVALID_COMPANY || ai_debug_company == OWNER_DEITY || ai_debug_company == _local_company); this->SetWidgetDisabledState(WID_AID_CONTINUE_BTN, ai_debug_company == INVALID_COMPANY || (ai_debug_company == OWNER_DEITY ? !Game::IsPaused() : !AI::IsPaused(ai_debug_company))); } @@ -1431,7 +1431,7 @@ StringFilter AIDebugWindow::break_string_filter(&AIDebugWindow::case_sensitive_b /** Make a number of rows with buttons for each company for the AI debug window. */ NWidgetBase *MakeCompanyButtonRowsAIDebug(int *biggest_index) { - return MakeCompanyButtonRows(biggest_index, WID_AID_COMPANY_BUTTON_START, WID_AID_COMPANY_BUTTON_END, 8, STR_AI_DEBUG_SELECT_AI_TOOLTIP); + return MakeCompanyButtonRows(biggest_index, WID_AID_COMPANY_BUTTON_START, WID_AID_COMPANY_BUTTON_END, COLOUR_GREY, 8, STR_AI_DEBUG_SELECT_AI_TOOLTIP); } /** diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 2d80003f6b..c5280fe5d6 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -15,6 +15,7 @@ #include "../debug.h" #include "../string_func.h" #include "../rev.h" +#include #include "../safeguards.h" @@ -24,10 +25,8 @@ */ static bool CheckAPIVersion(const char *api_version) { - return strcmp(api_version, "0.7") == 0 || strcmp(api_version, "1.0") == 0 || strcmp(api_version, "1.1") == 0 || - strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || - strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 || - strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0 || strcmp(api_version, "1.10") == 0; + static const std::set versions = { "0.7", "1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11" }; + return versions.find(api_version) != versions.end(); } #if defined(_WIN32) diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index a4d06763fa..9e1f001631 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -24,59 +24,8 @@ /* Manually include the Text glue. */ #include "../script/api/template/template_text.hpp.sq" -/* Convert all AI related classes to Squirrel data. - * Note: this line is a marker in squirrel_export.sh. Do not change! */ -#include "../script/api/ai/ai_accounting.hpp.sq" -#include "../script/api/ai/ai_airport.hpp.sq" -#include "../script/api/ai/ai_base.hpp.sq" -#include "../script/api/ai/ai_basestation.hpp.sq" -#include "../script/api/ai/ai_bridge.hpp.sq" -#include "../script/api/ai/ai_bridgelist.hpp.sq" -#include "../script/api/ai/ai_cargo.hpp.sq" -#include "../script/api/ai/ai_cargolist.hpp.sq" -#include "../script/api/ai/ai_company.hpp.sq" -#include "../script/api/ai/ai_controller.hpp.sq" -#include "../script/api/ai/ai_date.hpp.sq" -#include "../script/api/ai/ai_depotlist.hpp.sq" -#include "../script/api/ai/ai_engine.hpp.sq" -#include "../script/api/ai/ai_enginelist.hpp.sq" -#include "../script/api/ai/ai_error.hpp.sq" -#include "../script/api/ai/ai_event.hpp.sq" -#include "../script/api/ai/ai_event_types.hpp.sq" -#include "../script/api/ai/ai_execmode.hpp.sq" -#include "../script/api/ai/ai_gamesettings.hpp.sq" -#include "../script/api/ai/ai_group.hpp.sq" -#include "../script/api/ai/ai_grouplist.hpp.sq" -#include "../script/api/ai/ai_industry.hpp.sq" -#include "../script/api/ai/ai_industrylist.hpp.sq" -#include "../script/api/ai/ai_industrytype.hpp.sq" -#include "../script/api/ai/ai_industrytypelist.hpp.sq" -#include "../script/api/ai/ai_infrastructure.hpp.sq" -#include "../script/api/ai/ai_list.hpp.sq" -#include "../script/api/ai/ai_log.hpp.sq" -#include "../script/api/ai/ai_map.hpp.sq" -#include "../script/api/ai/ai_marine.hpp.sq" -#include "../script/api/ai/ai_order.hpp.sq" -#include "../script/api/ai/ai_rail.hpp.sq" -#include "../script/api/ai/ai_railtypelist.hpp.sq" -#include "../script/api/ai/ai_road.hpp.sq" -#include "../script/api/ai/ai_roadtypelist.hpp.sq" -#include "../script/api/ai/ai_sign.hpp.sq" -#include "../script/api/ai/ai_signlist.hpp.sq" -#include "../script/api/ai/ai_station.hpp.sq" -#include "../script/api/ai/ai_stationlist.hpp.sq" -#include "../script/api/ai/ai_subsidy.hpp.sq" -#include "../script/api/ai/ai_subsidylist.hpp.sq" -#include "../script/api/ai/ai_testmode.hpp.sq" -#include "../script/api/ai/ai_tile.hpp.sq" -#include "../script/api/ai/ai_tilelist.hpp.sq" -#include "../script/api/ai/ai_town.hpp.sq" -#include "../script/api/ai/ai_townlist.hpp.sq" -#include "../script/api/ai/ai_tunnel.hpp.sq" -#include "../script/api/ai/ai_vehicle.hpp.sq" -#include "../script/api/ai/ai_vehiclelist.hpp.sq" -#include "../script/api/ai/ai_waypoint.hpp.sq" -#include "../script/api/ai/ai_waypointlist.hpp.sq" +/* Convert all AI related classes to Squirrel data. */ +#include "../script/api/ai/ai_includes.hpp" #include "../company_base.h" #include "../company_func.h" @@ -101,111 +50,8 @@ void AIInstance::RegisterAPI() { ScriptInstance::RegisterAPI(); -/* Register all classes */ - SQAIList_Register(this->engine); - SQAIAccounting_Register(this->engine); - SQAIAirport_Register(this->engine); - SQAIBase_Register(this->engine); - SQAIBaseStation_Register(this->engine); - SQAIBridge_Register(this->engine); - SQAIBridgeList_Register(this->engine); - SQAIBridgeList_Length_Register(this->engine); - SQAICargo_Register(this->engine); - SQAICargoList_Register(this->engine); - SQAICargoList_IndustryAccepting_Register(this->engine); - SQAICargoList_IndustryProducing_Register(this->engine); - SQAICargoList_StationAccepting_Register(this->engine); - SQAICompany_Register(this->engine); - SQAIDate_Register(this->engine); - SQAIDepotList_Register(this->engine); - SQAIEngine_Register(this->engine); - SQAIEngineList_Register(this->engine); - SQAIError_Register(this->engine); - SQAIEvent_Register(this->engine); - SQAIEventAircraftDestTooFar_Register(this->engine); - SQAIEventCompanyAskMerger_Register(this->engine); - SQAIEventCompanyBankrupt_Register(this->engine); - SQAIEventCompanyInTrouble_Register(this->engine); - SQAIEventCompanyMerger_Register(this->engine); - SQAIEventCompanyNew_Register(this->engine); - SQAIEventCompanyTown_Register(this->engine); - SQAIEventController_Register(this->engine); - SQAIEventDisasterZeppelinerCleared_Register(this->engine); - SQAIEventDisasterZeppelinerCrashed_Register(this->engine); - SQAIEventEngineAvailable_Register(this->engine); - SQAIEventEnginePreview_Register(this->engine); - SQAIEventExclusiveTransportRights_Register(this->engine); - SQAIEventIndustryClose_Register(this->engine); - SQAIEventIndustryOpen_Register(this->engine); - SQAIEventRoadReconstruction_Register(this->engine); - SQAIEventStationFirstVehicle_Register(this->engine); - SQAIEventSubsidyAwarded_Register(this->engine); - SQAIEventSubsidyExpired_Register(this->engine); - SQAIEventSubsidyOffer_Register(this->engine); - SQAIEventSubsidyOfferExpired_Register(this->engine); - SQAIEventTownFounded_Register(this->engine); - SQAIEventVehicleAutoReplaced_Register(this->engine); - SQAIEventVehicleCrashed_Register(this->engine); - SQAIEventVehicleLost_Register(this->engine); - SQAIEventVehicleUnprofitable_Register(this->engine); - SQAIEventVehicleWaitingInDepot_Register(this->engine); - SQAIExecMode_Register(this->engine); - SQAIGameSettings_Register(this->engine); - SQAIGroup_Register(this->engine); - SQAIGroupList_Register(this->engine); - SQAIIndustry_Register(this->engine); - SQAIIndustryList_Register(this->engine); - SQAIIndustryList_CargoAccepting_Register(this->engine); - SQAIIndustryList_CargoProducing_Register(this->engine); - SQAIIndustryType_Register(this->engine); - SQAIIndustryTypeList_Register(this->engine); - SQAIInfrastructure_Register(this->engine); - SQAILog_Register(this->engine); - SQAIMap_Register(this->engine); - SQAIMarine_Register(this->engine); - SQAIOrder_Register(this->engine); - SQAIRail_Register(this->engine); - SQAIRailTypeList_Register(this->engine); - SQAIRoad_Register(this->engine); - SQAIRoadTypeList_Register(this->engine); - SQAISign_Register(this->engine); - SQAISignList_Register(this->engine); - SQAIStation_Register(this->engine); - SQAIStationList_Register(this->engine); - SQAIStationList_Cargo_Register(this->engine); - SQAIStationList_CargoPlanned_Register(this->engine); - SQAIStationList_CargoPlannedByFrom_Register(this->engine); - SQAIStationList_CargoPlannedByVia_Register(this->engine); - SQAIStationList_CargoPlannedFromByVia_Register(this->engine); - SQAIStationList_CargoPlannedViaByFrom_Register(this->engine); - SQAIStationList_CargoWaiting_Register(this->engine); - SQAIStationList_CargoWaitingByFrom_Register(this->engine); - SQAIStationList_CargoWaitingByVia_Register(this->engine); - SQAIStationList_CargoWaitingFromByVia_Register(this->engine); - SQAIStationList_CargoWaitingViaByFrom_Register(this->engine); - SQAIStationList_Vehicle_Register(this->engine); - SQAISubsidy_Register(this->engine); - SQAISubsidyList_Register(this->engine); - SQAITestMode_Register(this->engine); - SQAITile_Register(this->engine); - SQAITileList_Register(this->engine); - SQAITileList_IndustryAccepting_Register(this->engine); - SQAITileList_IndustryProducing_Register(this->engine); - SQAITileList_StationType_Register(this->engine); - SQAITown_Register(this->engine); - SQAITownEffectList_Register(this->engine); - SQAITownList_Register(this->engine); - SQAITunnel_Register(this->engine); - SQAIVehicle_Register(this->engine); - SQAIVehicleList_Register(this->engine); - SQAIVehicleList_DefaultGroup_Register(this->engine); - SQAIVehicleList_Depot_Register(this->engine); - SQAIVehicleList_Group_Register(this->engine); - SQAIVehicleList_SharedOrders_Register(this->engine); - SQAIVehicleList_Station_Register(this->engine); - SQAIWaypoint_Register(this->engine); - SQAIWaypointList_Register(this->engine); - SQAIWaypointList_Vehicle_Register(this->engine); + /* Register all classes */ + SQAI_RegisterAll(this->engine); if (!this->LoadCompatibilityScripts(this->versionAPI, AI_DIR)) this->Died(); } diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp index ee14fd2147..9b3613712d 100644 --- a/src/ai/ai_scanner.cpp +++ b/src/ai/ai_scanner.cpp @@ -32,8 +32,7 @@ void AIScannerInfo::Initialize() ScriptAllocatorScope alloc_scope(this->engine); /* Create the dummy AI */ - free(this->main_script); - this->main_script = stredup("%_dummy"); + this->main_script = "%_dummy"; extern void Script_CreateDummyInfo(HSQUIRRELVM vm, const char *type, const char *dir); Script_CreateDummyInfo(this->engine->GetVM(), "AI", "ai"); } @@ -61,8 +60,8 @@ void AIScannerInfo::RegisterAPI(class Squirrel *engine) AIInfo *AIScannerInfo::SelectRandomAI() const { uint num_random_ais = 0; - for (ScriptInfoList::const_iterator it = this->info_single_list.begin(); it != this->info_single_list.end(); it++) { - AIInfo *i = static_cast((*it).second); + for (const auto &item : info_single_list) { + AIInfo *i = static_cast(item.second); if (i->UseAsRandomAI()) num_random_ais++; } @@ -101,20 +100,10 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo strecpy(ai_name, nameParam, lastof(ai_name)); strtolower(ai_name); - AIInfo *info = nullptr; - int version = -1; - if (versionParam == -1) { /* We want to load the latest version of this AI; so find it */ if (this->info_single_list.find(ai_name) != this->info_single_list.end()) return static_cast(this->info_single_list[ai_name]); - - /* If we didn't find a match AI, maybe the user included a version */ - char *e = strrchr(ai_name, '.'); - if (e == nullptr) return nullptr; - *e = '\0'; - e++; - versionParam = atoi(e); - /* Continue, like we were calling this function with a version. */ + return nullptr; } if (force_exact_match) { @@ -123,15 +112,18 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo seprintf(ai_name_tmp, lastof(ai_name_tmp), "%s.%d", ai_name, versionParam); strtolower(ai_name_tmp); if (this->info_list.find(ai_name_tmp) != this->info_list.end()) return static_cast(this->info_list[ai_name_tmp]); + return nullptr; } + AIInfo *info = nullptr; + int version = -1; + /* See if there is a compatible AI which goes by that name, with the highest * version which allows loading the requested version */ - ScriptInfoList::iterator it = this->info_list.begin(); - for (; it != this->info_list.end(); it++) { - AIInfo *i = static_cast((*it).second); + for (const auto &item : this->info_list) { + AIInfo *i = static_cast(item.second); if (strcasecmp(ai_name, i->GetName()) == 0 && i->CanLoadFromVersion(versionParam) && (version == -1 || i->GetVersion() > version)) { - version = (*it).second->GetVersion(); + version = item.second->GetVersion(); info = i; } } @@ -164,8 +156,8 @@ AILibrary *AIScannerLibrary::FindLibrary(const char *library, int version) strtolower(library_name); /* Check if the library + version exists */ - ScriptInfoList::iterator iter = this->info_list.find(library_name); - if (iter == this->info_list.end()) return nullptr; + ScriptInfoList::iterator it = this->info_list.find(library_name); + if (it == this->info_list.end()) return nullptr; - return static_cast((*iter).second); + return static_cast((*it).second); } diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 92478a25dc..b0b2976732 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -309,7 +309,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine * v->cargo_type = e->GetDefaultCargoType(); u->cargo_type = CT_MAIL; - v->name = nullptr; + v->name.clear(); v->last_station_visited = INVALID_STATION; v->last_loading_station = INVALID_STATION; @@ -341,8 +341,8 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine * v->date_of_last_service = _date; v->build_year = u->build_year = _cur_year; - v->sprite_seq.Set(SPR_IMG_QUERY); - u->sprite_seq.Set(SPR_IMG_QUERY); + v->sprite_cache.sprite_seq.Set(SPR_IMG_QUERY); + u->sprite_cache.sprite_seq.Set(SPR_IMG_QUERY); v->random_bits = VehicleRandomBits(); u->random_bits = VehicleRandomBits(); @@ -374,7 +374,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine * w->vehstatus = VS_HIDDEN | VS_UNCLICKABLE; w->spritenum = 0xFF; w->subtype = AIR_ROTOR; - w->sprite_seq.Set(SPR_ROTOR_STOPPED); + w->sprite_cache.sprite_seq.Set(SPR_ROTOR_STOPPED); w->random_bits = VehicleRandomBits(); /* Use rotor's air.state to store the rotor animation frame */ w->state = HRS_ROTOR_STOPPED; @@ -497,7 +497,7 @@ static void HelicopterTickHandler(Aircraft *v) if (spd == 0) { u->state = HRS_ROTOR_STOPPED; GetRotorImage(v, EIT_ON_MAP, &seq); - if (u->sprite_seq == seq) return; + if (u->sprite_cache.sprite_seq == seq) return; } else if (tick >= spd) { u->tick_counter = 0; u->state++; @@ -507,7 +507,7 @@ static void HelicopterTickHandler(Aircraft *v) return; } - u->sprite_seq = seq; + u->sprite_cache.sprite_seq = seq; u->UpdatePositionAndViewport(); } @@ -528,7 +528,7 @@ void SetAircraftPosition(Aircraft *v, int x, int y, int z) v->UpdatePosition(); v->UpdateViewport(true, false); if (v->subtype == AIR_HELICOPTER) { - GetRotorImage(v, EIT_ON_MAP, &v->Next()->Next()->sprite_seq); + GetRotorImage(v, EIT_ON_MAP, &v->Next()->Next()->sprite_cache.sprite_seq); } Aircraft *u = v->Next(); @@ -540,7 +540,7 @@ void SetAircraftPosition(Aircraft *v, int x, int y, int z) safe_y = Clamp(u->y_pos, 0, MapMaxY() * TILE_SIZE); u->z_pos = GetSlopePixelZ(safe_x, safe_y); - u->sprite_seq.CopyWithoutPalette(v->sprite_seq); // the shadow is never coloured + u->sprite_cache.sprite_seq.CopyWithoutPalette(v->sprite_cache.sprite_seq); // the shadow is never coloured u->UpdatePositionAndViewport(); @@ -652,7 +652,7 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE, /* adjust speed for broken vehicles */ if (v->vehstatus & VS_AIRCRAFT_BROKEN) { if (SPEED_LIMIT_BROKEN < speed_limit) hard_limit = false; - speed_limit = min(speed_limit, SPEED_LIMIT_BROKEN); + speed_limit = std::min(speed_limit, SPEED_LIMIT_BROKEN); } if (v->vcache.cached_max_speed < speed_limit) { @@ -669,10 +669,10 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE, * speeds to that aircraft do not get to taxi speed straight after * touchdown. */ if (!hard_limit && v->cur_speed > speed_limit) { - speed_limit = v->cur_speed - max(1, ((v->cur_speed * v->cur_speed) / 16384) / _settings_game.vehicle.plane_speed); + speed_limit = v->cur_speed - std::max(1, ((v->cur_speed * v->cur_speed) / 16384) / _settings_game.vehicle.plane_speed); } - spd = min(v->cur_speed + (spd >> 8) + (v->subspeed < t), speed_limit); + spd = std::min(v->cur_speed + (spd >> 8) + (v->subspeed < t), speed_limit); /* updates statusbar only if speed have changed to save CPU time */ if (spd != v->cur_speed) { @@ -737,7 +737,7 @@ void GetAircraftFlightLevelBounds(const Vehicle *v, int *min_level, int *max_lev } /* Make faster planes fly higher so that they can overtake slower ones */ - base_altitude += min(20 * (v->vcache.cached_max_speed / 200) - 90, 0); + base_altitude += std::min(20 * (v->vcache.cached_max_speed / 200) - 90, 0); if (min_level != nullptr) *min_level = base_altitude + AIRCRAFT_MIN_FLYING_ALTITUDE; if (max_level != nullptr) *max_level = base_altitude + AIRCRAFT_MAX_FLYING_ALTITUDE; @@ -856,8 +856,6 @@ static void MaybeCrashAirplane(Aircraft *v); */ static bool AircraftController(Aircraft *v) { - int count; - /* nullptr if station is invalid */ const Station *st = Station::GetIfValid(v->targetairport); /* INVALID_TILE if there is no station */ @@ -908,12 +906,16 @@ static bool AircraftController(Aircraft *v) v->cur_speed = 0; if (--u->cur_speed == 32) { if (!PlayVehicleSound(v, VSE_START)) { - SndPlayVehicleFx(SND_18_HELICOPTER, v); + SoundID sfx = AircraftVehInfo(v->engine_type)->sfx; + /* For compatibility with old NewGRF we ignore the sfx property, unless a NewGRF-defined sound is used. + * The baseset has only one helicopter sound, so this only limits using plane or cow sounds. */ + if (sfx < ORIGINAL_SAMPLE_COUNT) sfx = SND_18_TAKEOFF_HELICOPTER; + SndPlayVehicleFx(sfx, v); } } } else { u->cur_speed = 32; - count = UpdateAircraftSpeed(v); + int count = UpdateAircraftSpeed(v); if (count > 0) { v->tile = 0; @@ -925,7 +927,7 @@ static bool AircraftController(Aircraft *v) v->cur_speed = 0; return true; } - SetAircraftPosition(v, v->x_pos, v->y_pos, min(v->z_pos + count, z_dest)); + SetAircraftPosition(v, v->x_pos, v->y_pos, std::min(v->z_pos + count, z_dest)); } } return false; @@ -945,7 +947,14 @@ static bool AircraftController(Aircraft *v) return false; } - /* Vehicle is now at the airport. */ + /* Vehicle is now at the airport. + * Helicopter has arrived at the target landing pad, so the current position is also where it should land. + * Except for Oilrigs which are special due to being a 1x1 station, and helicopters land outside it. */ + if (st->airport.type != AT_OILRIG) { + x = v->x_pos; + y = v->y_pos; + tile = TileVirtXY(x, y); + } v->tile = tile; /* Find altitude of landing position. */ @@ -961,12 +970,12 @@ static bool AircraftController(Aircraft *v) } u->cur_speed += 4; } else { - count = UpdateAircraftSpeed(v); + int count = UpdateAircraftSpeed(v); if (count > 0) { if (v->z_pos > z) { - SetAircraftPosition(v, v->x_pos, v->y_pos, max(v->z_pos - count, z)); + SetAircraftPosition(v, v->x_pos, v->y_pos, std::max(v->z_pos - count, z)); } else { - SetAircraftPosition(v, v->x_pos, v->y_pos, min(v->z_pos + count, z)); + SetAircraftPosition(v, v->x_pos, v->y_pos, std::min(v->z_pos + count, z)); } } } @@ -1012,16 +1021,23 @@ static bool AircraftController(Aircraft *v) if (amd.flag & AMED_LAND) { speed_limit = SPEED_LIMIT_APPROACH; hard_limit = false; } if (amd.flag & AMED_BRAKE) { speed_limit = SPEED_LIMIT_TAXI; hard_limit = false; } - count = UpdateAircraftSpeed(v, speed_limit, hard_limit); + int count = UpdateAircraftSpeed(v, speed_limit, hard_limit); if (count == 0) return false; + /* If the plane will be a few subpixels away from the destination after + * this movement loop, start nudging him towards the exact position for + * the whole loop. Otherwise, heavily depending on the speed of the plane, + * it is possible we totally overshoot the target, causing the plane to + * make a loop, and trying again, and again, and again .. */ + bool nudge_towards_target = static_cast(count) + 3 > dist; + if (v->turn_counter != 0) v->turn_counter--; do { GetNewVehiclePosResult gp; - if (dist < 4 || (amd.flag & AMED_LAND)) { + if (nudge_towards_target || (amd.flag & AMED_LAND)) { /* move vehicle one pixel towards target */ gp.x = (v->x_pos != (x + amd.x)) ? v->x_pos + ((x + amd.x > v->x_pos) ? 1 : -1) : @@ -1088,6 +1104,19 @@ static bool AircraftController(Aircraft *v) z = GetAircraftFlightLevel(v); } + /* NewGRF airports (like a rotated intercontinental from OpenGFX+Airports) can be non-rectangular + * and their primary (north-most) tile does not have to be part of the airport. + * As such, the height of the primary tile can be different from the rest of the airport. + * Given we are landing/breaking, and as such are not a helicopter, we know that there has to be a hangar. + * We also know that the airport itself has to be completely flat (otherwise it is not a valid airport). + * Therefore, use the height of this hangar to calculate our z-value. */ + int airport_z = v->z_pos; + if ((amd.flag & (AMED_LAND | AMED_BRAKE)) && st != nullptr) { + assert(st->airport.HasHangar()); + TileIndex hangar_tile = st->airport.GetHangarTile(0); + airport_z = GetTileMaxPixelZ(hangar_tile) + 1; // To avoid clashing with the shadow + } + if (amd.flag & AMED_LAND) { if (st->airport.tile == INVALID_TILE) { /* Airport has been removed, abort the landing procedure */ @@ -1099,27 +1128,24 @@ static bool AircraftController(Aircraft *v) continue; } - int curz = GetSlopePixelZ(x + amd.x, y + amd.y) + 1; - /* We're not flying below our destination, right? */ - assert(curz <= z); - int t = max(1U, dist - 4); - int delta = z - curz; + assert(airport_z <= z); + int t = std::max(1U, dist - 4); + int delta = z - airport_z; /* Only start lowering when we're sufficiently close for a 1:1 glide */ if (delta >= t) { - z -= CeilDiv(z - curz, t); + z -= CeilDiv(z - airport_z, t); } - if (z < curz) z = curz; + if (z < airport_z) z = airport_z; } /* We've landed. Decrease speed when we're reaching end of runway. */ if (amd.flag & AMED_BRAKE) { - int curz = GetSlopePixelZ(x, y) + 1; - if (z > curz) { + if (z > airport_z) { z--; - } else if (z < curz) { + } else if (z < airport_z) { z++; } @@ -1274,7 +1300,7 @@ void Aircraft::MarkDirty() this->colourmap = PAL_NONE; this->UpdateViewport(true, false); if (this->subtype == AIR_HELICOPTER) { - GetRotorImage(this, EIT_ON_MAP, &this->Next()->Next()->sprite_seq); + GetRotorImage(this, EIT_ON_MAP, &this->Next()->Next()->sprite_cache.sprite_seq); } } @@ -1302,19 +1328,22 @@ static void CrashAirplane(Aircraft *v) v->Next()->cargo.Truncate(); const Station *st = GetTargetAirportIfValid(v); StringID newsitem; + TileIndex vt; if (st == nullptr) { newsitem = STR_NEWS_PLANE_CRASH_OUT_OF_FUEL; + vt = TileVirtXY(v->x_pos, v->y_pos); } else { SetDParam(1, st->index); newsitem = STR_NEWS_AIRCRAFT_CRASH; + vt = v->tile; } - AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING)); - Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING)); + AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, vt, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING)); + Game::NewEvent(new ScriptEventVehicleCrashed(v->index, vt, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING)); - AddVehicleNewsItem(newsitem, NT_ACCIDENT, v->index, st != nullptr ? st->index : INVALID_STATION); + AddTileNewsItem(newsitem, NT_ACCIDENT, vt, nullptr, st != nullptr ? st->index : INVALID_STATION); - ModifyStationRatingAround(v->tile, v->owner, -160, 30); + ModifyStationRatingAround(vt, v->owner, -160, 30); if (_settings_client.sound.disaster) SndPlayVehicleFx(SND_12_EXPLOSION, v); } diff --git a/src/aircraft_gui.cpp b/src/aircraft_gui.cpp index 311bc497bf..40c72e2700 100644 --- a/src/aircraft_gui.cpp +++ b/src/aircraft_gui.cpp @@ -39,7 +39,8 @@ void DrawAircraftDetails(const Aircraft *v, int left, int right, int y) SetDParam(0, u->engine_type); SetDParam(1, u->build_year); SetDParam(2, u->value); - DrawString(left, right, y, STR_VEHICLE_INFO_BUILT_VALUE); + if (_settings_client.gui.newgrf_developer_tools) SetDParam(3, v->index); // CM + DrawString(left, right, y, _settings_client.gui.newgrf_developer_tools ? STR_CM_VEHICLE_INFO_BUILT_VALUE_WITH_ID : STR_VEHICLE_INFO_BUILT_VALUE); SetDParam(0, u->cargo_type); SetDParam(1, u->cargo_cap); diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index d7acfbdad9..f797f66061 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -47,7 +47,7 @@ void CcBuildAirport(const CommandCost &result, TileIndex tile, uint32 p1, uint32 { if (result.Failed()) return; - if (_settings_client.sound.confirm) SndPlayTileFx(SND_1F_SPLAT_OTHER, tile); + if (_settings_client.sound.confirm) SndPlayTileFx(SND_1F_CONSTRUCTION_OTHER, tile); if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace(); } @@ -57,7 +57,7 @@ void CcBuildAirport(const CommandCost &result, TileIndex tile, uint32 p1, uint32 */ static void PlaceAirport(TileIndex tile) { - if (_settings_client.gui.cm_use_improved_station_join) { + if (citymania::UseImprovedStationJoin()) { citymania::PlaceAirport(tile); return; } @@ -79,6 +79,7 @@ struct BuildAirToolbarWindow : Window { BuildAirToolbarWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) { this->InitNested(window_number); + this->OnInvalidateData(); if (_settings_client.gui.link_terraform_toolbar) ShowTerraformToolbar(this); this->last_user_action = WIDGET_LIST_END; } @@ -98,21 +99,32 @@ struct BuildAirToolbarWindow : Window { { if (!gui_scope) return; - if (!CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) delete this; + bool can_build = CanBuildVehicleInfrastructure(VEH_AIRCRAFT); + this->SetWidgetsDisabledState(!can_build, + WID_AT_AIRPORT, + WIDGET_LIST_END); + if (!can_build) { + DeleteWindowById(WC_BUILD_STATION, TRANSPORT_AIR); + + /* Show in the tooltip why this button is disabled. */ + this->GetWidget(WID_AT_AIRPORT)->SetToolTip(STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE); + } else { + this->GetWidget(WID_AT_AIRPORT)->SetToolTip(STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP); + } } void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_AT_AIRPORT: - if (HandlePlacePushButton(this, WID_AT_AIRPORT, SPR_CURSOR_AIRPORT, HT_RECT)) { + if (HandlePlacePushButton(this, WID_AT_AIRPORT, SPR_CURSOR_AIRPORT, HT_RECT, CM_DDSP_BUILD_AIRPORT)) { ShowBuildAirportPicker(this); this->last_user_action = widget; } break; case WID_AT_DEMOLISH: - HandlePlacePushButton(this, WID_AT_DEMOLISH, ANIMCURSOR_DEMOLISH, HT_RECT | HT_DIAGONAL); + HandlePlacePushButton(this, WID_AT_DEMOLISH, ANIMCURSOR_DEMOLISH, HT_RECT | HT_DIAGONAL, CM_DDSP_DEMOLISH); this->last_user_action = widget; break; @@ -170,7 +182,7 @@ struct BuildAirToolbarWindow : Window { */ static EventState AirportToolbarGlobalHotkeys(int hotkey) { - if (_game_mode != GM_NORMAL || !CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) return ES_NOT_HANDLED; + if (_game_mode != GM_NORMAL) return ES_NOT_HANDLED; Window *w = ShowBuildAirToolbar(); if (w == nullptr) return ES_NOT_HANDLED; return w->OnHotkey(hotkey); @@ -324,7 +336,7 @@ public: const AirportSpec *as = AirportSpec::Get(i); if (!as->enabled) continue; - size->width = max(size->width, GetStringBoundingBox(as->name).width); + size->width = std::max(size->width, GetStringBoundingBox(as->name).width); } this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM; diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp index 4f42c6955c..bdca9a5070 100644 --- a/src/articulated_vehicles.cpp +++ b/src/articulated_vehicles.cpp @@ -439,7 +439,7 @@ void AddArticulatedParts(Vehicle *first) v->max_age = 0; v->engine_type = engine_type; v->value = 0; - v->sprite_seq.Set(SPR_IMG_QUERY); + v->sprite_cache.sprite_seq.Set(SPR_IMG_QUERY); v->random_bits = VehicleRandomBits(); if (flip_image) v->spritenum++; diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index 4b444ae196..fe86917c77 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -20,6 +20,8 @@ #include "vehiclelist.h" #include "road.h" #include "ai/ai.hpp" +#include "news_func.h" +#include "strings_func.h" #include "table/strings.h" @@ -115,7 +117,7 @@ void CheckCargoCapacity(Vehicle *v) assert(dest->cargo.TotalCount() == dest->cargo.ActionCount(VehicleCargoList::MTA_KEEP)); if (dest->cargo.TotalCount() >= dest->cargo_cap || dest->cargo_type != src->cargo_type) continue; - uint amount = min(to_spread, dest->cargo_cap - dest->cargo.TotalCount()); + uint amount = std::min(to_spread, dest->cargo_cap - dest->cargo.TotalCount()); src->cargo.Shift(amount, &dest->cargo); to_spread -= amount; } @@ -157,7 +159,7 @@ static void TransferCargo(Vehicle *old_veh, Vehicle *new_head, bool part_of_chai } if (dest->cargo_type != src->cargo_type) continue; - uint amount = min(src->cargo.TotalCount(), dest->cargo_cap - dest->cargo.TotalCount()); + uint amount = std::min(src->cargo.TotalCount(), dest->cargo_cap - dest->cargo.TotalCount()); if (amount <= 0) continue; src->cargo.Shift(amount, &dest->cargo); @@ -179,9 +181,8 @@ static bool VerifyAutoreplaceRefitForOrders(const Vehicle *v, EngineID engine_ty CargoTypes union_refit_mask_a = GetUnionOfArticulatedRefitMasks(v->engine_type, false); CargoTypes union_refit_mask_b = GetUnionOfArticulatedRefitMasks(engine_type, false); - const Order *o; const Vehicle *u = (v->type == VEH_TRAIN) ? v->First() : v; - FOR_VEHICLE_ORDERS(u, o) { + for (const Order *o : u->Orders()) { if (!o->IsRefit() || o->IsAutoRefit()) continue; CargoID cargo_type = o->GetRefitCargo(); @@ -192,6 +193,29 @@ static bool VerifyAutoreplaceRefitForOrders(const Vehicle *v, EngineID engine_ty return true; } +/** + * Gets the index of the first refit order that is incompatible with the requested engine type + * @param v The vehicle to be replaced + * @param engine_type The type we want to replace with + * @return index of the incompatible order or -1 if none were found + */ +static int GetIncompatibleRefitOrderIdForAutoreplace(const Vehicle *v, EngineID engine_type) +{ + CargoTypes union_refit_mask = GetUnionOfArticulatedRefitMasks(engine_type, false); + + const Order *o; + const Vehicle *u = (v->type == VEH_TRAIN) ? v->First() : v; + + const OrderList *orders = u->orders.list; + for (VehicleOrderID i = 0; i < orders->GetNumOrders(); i++) { + o = orders->GetOrderAt(i); + if (!o->IsRefit()) continue; + if (!HasBit(union_refit_mask, o->GetRefitCargo())) return i; + } + + return -1; +} + /** * Function to find what type of cargo to refit to when autoreplacing * @param *v Original vehicle that is being replaced. @@ -294,7 +318,25 @@ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehic /* Does it need to be refitted */ CargoID refit_cargo = GetNewCargoTypeForReplace(old_veh, e, part_of_chain); - if (refit_cargo == CT_INVALID) return CommandCost(); // incompatible cargoes + if (refit_cargo == CT_INVALID) { + if (!IsLocalCompany()) return CommandCost(); + + SetDParam(0, old_veh->index); + + int order_id = GetIncompatibleRefitOrderIdForAutoreplace(old_veh, e); + if (order_id != -1) { + /* Orders contained a refit order that is incompatible with the new vehicle. */ + SetDParam(1, STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT); + SetDParam(2, order_id + 1); // 1-based indexing for display + } else { + /* Current cargo is incompatible with the new vehicle. */ + SetDParam(1, STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO); + SetDParam(2, CargoSpec::Get(old_veh->cargo_type)->name); + } + + AddVehicleAdviceNewsItem(STR_NEWS_VEHICLE_AUTORENEW_FAILED, old_veh->index); + return CommandCost(); + } /* Build the new vehicle */ cost = DoCommand(old_veh->tile, e | (CT_INVALID << 24), 0, DC_EXEC | DC_AUTOREPLACE, GetCmdBuildVeh(old_veh)); @@ -555,6 +597,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon /* Sell wagon */ CommandCost ret = DoCommand(0, wagon->index, 0, DC_EXEC, GetCmdSellVeh(wagon)); + (void)ret; // assert only assert(ret.Succeeded()); new_vehs[i] = nullptr; @@ -610,6 +653,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon for (int i = num_units - 1; i > 0; i--) { CommandCost ret = CmdMoveVehicle(old_vehs[i], old_head, DC_EXEC | DC_AUTOREPLACE, false); + (void)ret; // assert only assert(ret.Succeeded()); } } diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 19df0f1d80..a412eb6888 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -81,7 +81,7 @@ class ReplaceVehicleWindow : public Window { bool replace_engines; ///< If \c true, engines are replaced, if \c false, wagons are replaced (only for trains). bool reset_sel_engine; ///< Also reset #sel_engine while updating left and/or right and no valid engine selected. GroupID sel_group; ///< Group selected to replace. - int details_height; ///< Minimal needed height of the details panels (found so far). + int details_height; ///< Minimal needed height of the details panels, in text lines (found so far). byte sort_criteria; ///< Criteria of sorting vehicles. bool descending_sort_order; ///< Order of sorting vehicles. bool show_hidden_engines; ///< Whether to show the hidden engines. @@ -229,7 +229,7 @@ public: this->engines[0].ForceRebuild(); this->engines[1].ForceRebuild(); this->reset_sel_engine = true; - this->details_height = ((vehicletype == VEH_TRAIN) ? 10 : 9) * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; + this->details_height = ((vehicletype == VEH_TRAIN) ? 10 : 9); this->sel_engine[0] = INVALID_ENGINE; this->sel_engine[1] = INVALID_ENGINE; this->show_hidden_engines = _engine_sort_show_hidden_engines[vehicletype]; @@ -274,7 +274,7 @@ public: case WID_RV_LEFT_DETAILS: case WID_RV_RIGHT_DETAILS: - size->height = this->details_height; + size->height = FONT_HEIGHT_NORMAL * this->details_height + padding.height; break; case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: { @@ -416,8 +416,8 @@ public: case WID_RV_LEFT_MATRIX: case WID_RV_RIGHT_MATRIX: { int side = (widget == WID_RV_LEFT_MATRIX) ? 0 : 1; - EngineID start = this->vscroll[side]->GetPosition(); // what is the offset for the start (scrolling) - EngineID end = min(this->vscroll[side]->GetCapacity() + start, (uint)this->engines[side].size()); + EngineID start = static_cast(this->vscroll[side]->GetPosition()); // what is the offset for the start (scrolling) + EngineID end = static_cast(std::min(this->vscroll[side]->GetCapacity() + start, this->engines[side].size())); /* Do the actual drawing */ DrawEngineList((VehicleType)this->window_number, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, @@ -475,7 +475,7 @@ public: NWidgetBase *nwi = this->GetWidget(side == 0 ? WID_RV_LEFT_DETAILS : WID_RV_RIGHT_DETAILS); int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT, nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine[side], ted); - needed_height = max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM); + needed_height = std::max(needed_height, (text_end - (int)nwi->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL); } } if (needed_height != this->details_height) { // Details window are not high enough, enlarge them. diff --git a/src/base_consist.cpp b/src/base_consist.cpp index 462f63f2e5..ad9d476b66 100644 --- a/src/base_consist.cpp +++ b/src/base_consist.cpp @@ -14,10 +14,6 @@ #include "safeguards.h" -BaseConsist::~BaseConsist() -{ - free(this->name); -} /** * Copy properties of other BaseConsist. @@ -27,8 +23,7 @@ void BaseConsist::CopyConsistPropertiesFrom(const BaseConsist *src) { if (this == src) return; - free(this->name); - this->name = src->name != nullptr ? stredup(src->name) : nullptr; + this->name = src->name; this->current_order_time = src->current_order_time; this->lateness_counter = src->lateness_counter; diff --git a/src/base_consist.h b/src/base_consist.h index 619229d2a6..a67b9fb6fc 100644 --- a/src/base_consist.h +++ b/src/base_consist.h @@ -12,10 +12,11 @@ #include "order_type.h" #include "date_type.h" +#include /** Various front vehicle properties that are preserved when autoreplacing, using order-backup or switching front engines within a consist. */ struct BaseConsist { - char *name; ///< Name of vehicle + std::string name; ///< Name of vehicle /* Used for timetabling. */ uint32 current_order_time; ///< How many ticks have passed since this order started. @@ -29,8 +30,7 @@ struct BaseConsist { uint16 vehicle_flags; ///< Used for gradual loading and other miscellaneous things (@see VehicleFlags enum) - BaseConsist() : name(nullptr) {} - virtual ~BaseConsist(); + virtual ~BaseConsist() {} void CopyConsistPropertiesFrom(const BaseConsist *src); }; diff --git a/src/base_media_base.h b/src/base_media_base.h index 0b006efbea..790bb9d38c 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -15,6 +15,7 @@ #include "gfx_type.h" #include "textfile_type.h" #include "textfile_gui.h" +#include /* Forward declare these; can't do 'struct X' in functions as older GCCs barf on that */ struct IniFile; @@ -46,7 +47,7 @@ struct MD5File { */ template struct BaseSet { - typedef SmallMap TranslatedStrings; + typedef std::unordered_map TranslatedStrings; /** Number of files in this set */ static const size_t NUM_FILES = Tnum_files; @@ -57,7 +58,7 @@ struct BaseSet { /** Internal names of the files in this set. */ static const char * const *file_names; - const char *name; ///< The name of the base set + std::string name; ///< The name of the base set TranslatedStrings description; ///< Description of the base set uint32 shortname; ///< Four letter short variant of the name uint32 version; ///< The version of this base set @@ -72,13 +73,6 @@ struct BaseSet { /** Free everything we allocated */ ~BaseSet() { - free(this->name); - - for (auto &pair : this->description) { - free(pair.first); - free(pair.second); - } - for (uint i = 0; i < NUM_FILES; i++) { free(this->files[i].filename); free(this->files[i].missing_warning); @@ -116,20 +110,19 @@ struct BaseSet { * @param isocode the isocode to search for * @return the description */ - const char *GetDescription(const char *isocode = nullptr) const + const char *GetDescription(const std::string &isocode) const { - if (isocode != nullptr) { + if (!isocode.empty()) { /* First the full ISO code */ - for (const auto &pair : this->description) { - if (strcmp(pair.first, isocode) == 0) return pair.second; - } + auto desc = this->description.find(isocode); + if (desc != this->description.end()) return desc->second.c_str(); + /* Then the first two characters */ - for (const auto &pair : this->description) { - if (strncmp(pair.first, isocode, 2) == 0) return pair.second; - } + desc = this->description.find(isocode.substr(0, 2)); + if (desc != this->description.end()) return desc->second.c_str(); } /* Then fall back */ - return this->description.front().second; + return this->description.at(std::string{}).c_str(); } /** @@ -174,7 +167,7 @@ protected: static Tbase_set *duplicate_sets; ///< All sets that aren't available, but needed for not downloading base sets when a newer version than the one on BaNaNaS is loaded. static const Tbase_set *used_set; ///< The currently used set - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override; /** * Get the extension that is used to identify this set. @@ -183,7 +176,7 @@ protected: static const char *GetExtension(); public: /** The set as saved in the config file. */ - static const char *ini_set; + static std::string ini_set; /** * Determine the graphics pack that has to be used. @@ -203,7 +196,7 @@ public: static Tbase_set *GetAvailableSets(); - static bool SetSet(const char *name); + static bool SetSet(const std::string &name); static char *GetSetsList(char *p, const char *last); static int GetNumSets(); static int GetIndexOfUsedSet(); @@ -219,7 +212,7 @@ public: static bool HasSet(const ContentInfo *ci, bool md5sum); }; -template /* static */ const char *BaseMedia::ini_set; +template /* static */ std::string BaseMedia::ini_set; template /* static */ const Tbase_set *BaseMedia::used_set; template /* static */ Tbase_set *BaseMedia::available_sets; template /* static */ Tbase_set *BaseMedia::duplicate_sets; diff --git a/src/base_media_func.h b/src/base_media_func.h index 01e184f8ca..f5a5995f17 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -21,7 +21,7 @@ */ #define fetch_metadata(name) \ item = metadata->GetItem(name, false); \ - if (item == nullptr || StrEmpty(item->value)) { \ + if (item == nullptr || !item->value.has_value() || item->value->empty()) { \ DEBUG(grf, 0, "Base " SET_TYPE "set detail loading: %s field missing.", name); \ DEBUG(grf, 0, " Is %s readable for the user running OpenTTD?", full_filename); \ return false; \ @@ -42,28 +42,28 @@ bool BaseSet::FillSetDetails(IniFile *ini, const IniItem *item; fetch_metadata("name"); - this->name = stredup(item->value); + this->name = *item->value; fetch_metadata("description"); - this->description[stredup("")] = stredup(item->value); + this->description[std::string{}] = *item->value; /* Add the translations of the descriptions too. */ for (const IniItem *item = metadata->item; item != nullptr; item = item->next) { - if (strncmp("description.", item->name, 12) != 0) continue; + if (item->name.compare(0, 12, "description.") != 0) continue; - this->description[stredup(item->name + 12)] = stredup(item->value); + this->description[item->name.substr(12)] = item->value.value_or(""); } fetch_metadata("shortname"); - for (uint i = 0; item->value[i] != '\0' && i < 4; i++) { - this->shortname |= ((uint8)item->value[i]) << (i * 8); + for (uint i = 0; (*item->value)[i] != '\0' && i < 4; i++) { + this->shortname |= ((uint8)(*item->value)[i]) << (i * 8); } fetch_metadata("version"); - this->version = atoi(item->value); + this->version = atoi(item->value->c_str()); item = metadata->GetItem("fallback", false); - this->fallback = (item != nullptr && strcmp(item->value, "0") != 0 && strcmp(item->value, "false") != 0); + this->fallback = (item != nullptr && item->value && *item->value != "0" && *item->value != "false"); /* For each of the file types we want to find the file, MD5 checksums and warning messages. */ IniGroup *files = ini->GetGroup("files"); @@ -73,13 +73,12 @@ bool BaseSet::FillSetDetails(IniFile *ini, const MD5File *file = &this->files[i]; /* Find the filename first. */ item = files->GetItem(BaseSet::file_names[i], false); - if (item == nullptr || (item->value == nullptr && !allow_empty_filename)) { + if (item == nullptr || (!item->value.has_value() && !allow_empty_filename)) { DEBUG(grf, 0, "No " SET_TYPE " file for: %s (in %s)", BaseSet::file_names[i], full_filename); return false; } - const char *filename = item->value; - if (filename == nullptr) { + if (!item->value.has_value()) { file->filename = nullptr; /* If we list no file, that file must be valid */ this->valid_files++; @@ -87,15 +86,16 @@ bool BaseSet::FillSetDetails(IniFile *ini, const continue; } + const char *filename = item->value->c_str(); file->filename = str_fmt("%s%s", path, filename); /* Then find the MD5 checksum */ item = md5s->GetItem(filename, false); - if (item == nullptr || item->value == nullptr) { + if (item == nullptr || !item->value.has_value()) { DEBUG(grf, 0, "No MD5 checksum specified for: %s (in %s)", filename, full_filename); return false; } - char *c = item->value; + const char *c = item->value->c_str(); for (uint i = 0; i < sizeof(file->hash) * 2; i++, c++) { uint j; if ('0' <= *c && *c <= '9') { @@ -118,11 +118,11 @@ bool BaseSet::FillSetDetails(IniFile *ini, const /* Then find the warning message when the file's missing */ item = origin->GetItem(filename, false); if (item == nullptr) item = origin->GetItem("default", false); - if (item == nullptr) { + if (item == nullptr || !item->value.has_value()) { DEBUG(grf, 1, "No origin warning message specified for: %s", filename); file->missing_warning = stredup(""); } else { - file->missing_warning = stredup(item->value); + file->missing_warning = stredup(item->value->c_str()); } file->check_result = T::CheckMD5(file, BASESET_DIR); @@ -150,27 +150,27 @@ bool BaseSet::FillSetDetails(IniFile *ini, const } template -bool BaseMedia::AddFile(const char *filename, size_t basepath_length, const char *tar_filename) +bool BaseMedia::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { bool ret = false; - DEBUG(grf, 1, "Checking %s for base " SET_TYPE " set", filename); + DEBUG(grf, 1, "Checking %s for base " SET_TYPE " set", filename.c_str()); Tbase_set *set = new Tbase_set(); IniFile *ini = new IniFile(); - char *path = stredup(filename + basepath_length); + std::string path{ filename, basepath_length }; ini->LoadFromDisk(path, BASESET_DIR); - char *psep = strrchr(path, PATHSEPCHAR); - if (psep != nullptr) { - psep[1] = '\0'; + auto psep = path.rfind(PATHSEPCHAR); + if (psep != std::string::npos) { + path.erase(psep + 1); } else { - *path = '\0'; + path.clear(); } - if (set->FillSetDetails(ini, path, filename)) { + if (set->FillSetDetails(ini, path.c_str(), filename.c_str())) { Tbase_set *duplicate = nullptr; for (Tbase_set *c = BaseMedia::available_sets; c != nullptr; c = c->next) { - if (strcmp(c->name, set->name) == 0 || c->shortname == set->shortname) { + if (c->name == set->name || c->shortname == set->shortname) { duplicate = c; break; } @@ -179,7 +179,7 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, /* The more complete set takes precedence over the version number. */ if ((duplicate->valid_files == set->valid_files && duplicate->version >= set->version) || duplicate->valid_files > set->valid_files) { - DEBUG(grf, 1, "Not adding %s (%i) as base " SET_TYPE " set (duplicate, %s)", set->name, set->version, + DEBUG(grf, 1, "Not adding %s (%i) as base " SET_TYPE " set (duplicate, %s)", set->name.c_str(), set->version, duplicate->valid_files > set->valid_files ? "less valid files" : "lower version"); set->next = BaseMedia::duplicate_sets; BaseMedia::duplicate_sets = set; @@ -195,7 +195,7 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, * version number until a new game is started which isn't a big problem */ if (BaseMedia::used_set == duplicate) BaseMedia::used_set = set; - DEBUG(grf, 1, "Removing %s (%i) as base " SET_TYPE " set (duplicate, %s)", duplicate->name, duplicate->version, + DEBUG(grf, 1, "Removing %s (%i) as base " SET_TYPE " set (duplicate, %s)", duplicate->name.c_str(), duplicate->version, duplicate->valid_files < set->valid_files ? "less valid files" : "lower version"); duplicate->next = BaseMedia::duplicate_sets; BaseMedia::duplicate_sets = duplicate; @@ -209,12 +209,11 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, ret = true; } if (ret) { - DEBUG(grf, 1, "Adding %s (%i) as base " SET_TYPE " set", set->name, set->version); + DEBUG(grf, 1, "Adding %s (%i) as base " SET_TYPE " set", set->name.c_str(), set->version); } } else { delete set; } - free(path); delete ini; return ret; @@ -226,18 +225,18 @@ bool BaseMedia::AddFile(const char *filename, size_t basepath_length, * @return true if it could be loaded */ template -/* static */ bool BaseMedia::SetSet(const char *name) +/* static */ bool BaseMedia::SetSet(const std::string &name) { extern void CheckExternalFiles(); - if (StrEmpty(name)) { + if (name.empty()) { if (!BaseMedia::DetermineBestSet()) return false; CheckExternalFiles(); return true; } for (const Tbase_set *s = BaseMedia::available_sets; s != nullptr; s = s->next) { - if (strcmp(name, s->name) == 0) { + if (name == s->name) { BaseMedia::used_set = s; CheckExternalFiles(); return true; @@ -257,7 +256,7 @@ template { p += seprintf(p, last, "List of " SET_TYPE " sets:\n"); for (const Tbase_set *s = BaseMedia::available_sets; s != nullptr; s = s->next) { - p += seprintf(p, last, "%18s: %s", s->name, s->GetDescription()); + p += seprintf(p, last, "%18s: %s", s->name.c_str(), s->GetDescription({})); int invalid = s->GetNumInvalid(); if (invalid != 0) { int missing = s->GetNumMissing(); @@ -275,7 +274,7 @@ template return p; } -#include "network/network_content.h" +#include "network/core/tcp_content_type.h" template const char *TryGetBaseSetFile(const ContentInfo *ci, bool md5sum, const Tbase_set *s) { @@ -376,11 +375,11 @@ template * @param set_type the type of the BaseSet to instantiate */ #define INSTANTIATE_BASE_MEDIA_METHODS(repl_type, set_type) \ - template const char *repl_type::ini_set; \ + template std::string repl_type::ini_set; \ template const char *repl_type::GetExtension(); \ - template bool repl_type::AddFile(const char *filename, size_t pathlength, const char *tar_filename); \ + template bool repl_type::AddFile(const std::string &filename, size_t pathlength, const std::string &tar_filename); \ template bool repl_type::HasSet(const struct ContentInfo *ci, bool md5sum); \ - template bool repl_type::SetSet(const char *name); \ + template bool repl_type::SetSet(const std::string &name); \ template char *repl_type::GetSetsList(char *p, const char *last); \ template int repl_type::GetNumSets(); \ template int repl_type::GetIndexOfUsedSet(); \ diff --git a/src/base_station_base.h b/src/base_station_base.h index 0467866e50..40543f1b8f 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -54,7 +54,7 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { TrackedViewportSign sign; ///< NOSAVE: Dimensions of sign byte delete_ctr; ///< Delete counter. If greater than 0 then it is decremented until it reaches 0; the waypoint is then is deleted. - char *name; ///< Custom name + std::string name; ///< Custom name StringID string_id; ///< Default name (town area) of station mutable std::string cached_name; ///< NOSAVE: Cache of the resolved name of the station, if not using a custom name @@ -111,7 +111,7 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { inline const char *GetCachedName() const { - if (this->name != nullptr) return this->name; + if (!this->name.empty()) return this->name.c_str(); if (this->cached_name.empty()) this->FillCachedName(); return this->cached_name.c_str(); } diff --git a/src/blitter/32bpp_anim.cpp b/src/blitter/32bpp_anim.cpp index a5228bc327..c24f14bd92 100644 --- a/src/blitter/32bpp_anim.cpp +++ b/src/blitter/32bpp_anim.cpp @@ -74,7 +74,7 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel dst = dst_end - bp->skip_left; dst_end = dst + bp->width; - n = min(n - d, (uint)bp->width); + n = std::min(n - d, (uint)bp->width); goto draw; } dst += n; @@ -89,7 +89,7 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel dst_end += bp->width; while (dst < dst_end) { - n = min(*src_n++, (uint)(dst_end - dst)); + n = std::min(*src_n++, dst_end - dst); if (src_px->a == 0) { anim += n; diff --git a/src/blitter/32bpp_anim_sse2.cpp b/src/blitter/32bpp_anim_sse2.cpp index 5596d91af0..ee243cc21e 100644 --- a/src/blitter/32bpp_anim_sse2.cpp +++ b/src/blitter/32bpp_anim_sse2.cpp @@ -58,7 +58,7 @@ void Blitter_32bppSSE2_Anim::PaletteAnimate(const Palette &palette) if (x < 8 || colour_cmp_result != 0xFFFF || _mm_movemask_epi8(_mm_cmpeq_epi16(_mm_srli_epi16(data, 8), brightness_cmp)) != 0xFFFF) { /* slow path: < 8 pixels left or unexpected brightnesses */ - for (int z = min(x, 8); z != 0 ; z--) { + for (int z = std::min(x, 8); z != 0 ; z--) { int value = _mm_extract_epi16(data, 0); uint8 colour = GB(value, 0, 8); if (colour >= PALETTE_ANIM_START) { diff --git a/src/blitter/32bpp_base.cpp b/src/blitter/32bpp_base.cpp index 6fe11c2350..0678fce38f 100644 --- a/src/blitter/32bpp_base.cpp +++ b/src/blitter/32bpp_base.cpp @@ -174,9 +174,9 @@ Colour Blitter_32bppBase::ReallyAdjustBrightness(Colour colour, uint8 brightness /* Reduce overbright strength */ ob /= 2; return Colour( - r >= 255 ? 255 : min(r + ob * (255 - r) / 256, 255), - g >= 255 ? 255 : min(g + ob * (255 - g) / 256, 255), - b >= 255 ? 255 : min(b + ob * (255 - b) / 256, 255), + r >= 255 ? 255 : std::min(r + ob * (255 - r) / 256, 255), + g >= 255 ? 255 : std::min(g + ob * (255 - g) / 256, 255), + b >= 255 ? 255 : std::min(b + ob * (255 - b) / 256, 255), colour.a); } diff --git a/src/blitter/32bpp_base.hpp b/src/blitter/32bpp_base.hpp index 8e9b53c9b1..f683c78e99 100644 --- a/src/blitter/32bpp_base.hpp +++ b/src/blitter/32bpp_base.hpp @@ -124,6 +124,18 @@ public: return ((r * 13063) + (g * 25647) + (b * 4981)) / 65536; } + /** + * Make a colour dark grey, for specialized 32bpp remapping. + * @param colour the colour to make dark. + * @return the new colour, now darker. + */ + static inline Colour MakeDark(Colour colour) + { + uint8 d = MakeDark(colour.r, colour.g, colour.b); + + return Colour(d, d, d); + } + /** * Make a colour grey - based. * @param colour the colour to make grey. @@ -155,10 +167,20 @@ public: return ReallyAdjustBrightness(colour, brightness); } + static inline uint8 GetColourBrightness(Colour colour) + { + uint8 rgb_max = std::max(colour.r, std::max(colour.g, colour.b)); + + /* Black pixel (8bpp or old 32bpp image), so use default value */ + if (rgb_max == 0) rgb_max = DEFAULT_BRIGHTNESS; + + return rgb_max; + } /* CM */ uint8 cm_mdict[64*64*64] = {0}; uint8 CM_GetMForRGB(uint8 r, uint8 g, uint8 b) { + if (r==0 && g==0 && b==0) return 0; r &= 252; g &= 252; b &= 252; auto key = (r << 10) | (g << 4) | (b >> 2); auto m = this->cm_mdict[key]; diff --git a/src/blitter/32bpp_optimized.cpp b/src/blitter/32bpp_optimized.cpp index 9727b0209e..e6d1960e1e 100644 --- a/src/blitter/32bpp_optimized.cpp +++ b/src/blitter/32bpp_optimized.cpp @@ -24,7 +24,7 @@ static FBlitter_32bppOptimized iFBlitter_32bppOptimized; * @param bp further blitting parameters * @param zoom zoom level at which we are drawing */ -template +template inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom) { const SpriteData *src = (const SpriteData *)bp->sprite; @@ -83,7 +83,7 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL dst = dst_end - bp->skip_left; dst_end = dst + bp->width; - n = min(n - d, (uint)bp->width); + n = std::min(n - d, (uint)bp->width); goto draw; } dst += n; @@ -98,7 +98,7 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL dst_end += bp->width; while (dst < dst_end) { - n = min(*src_n++, (uint)(dst_end - dst)); + n = std::min(*src_n++, dst_end - dst); if (src_px->a == 0) { dst += n; @@ -209,18 +209,29 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL default: if (src_px->a == 255) { /* faster than memcpy(), n is usually low */ - src_n += n; do { - *dst = src_px->data; + if (Tpal_to_rgb && *src_n != 0) { + /* Convert the mapping channel to a RGB value */ + *dst = this->AdjustBrightness(this->LookupColourInPalette(GB(*src_n, 0, 8)), GB(*src_n, 8, 8)).data; + } else { + *dst = src_px->data; + } dst++; src_px++; + src_n++; } while (--n != 0); } else { - src_n += n; do { - *dst = ComposeColourRGBANoCheck(src_px->r, src_px->g, src_px->b, src_px->a, *dst); + if (Tpal_to_rgb && *src_n != 0) { + /* Convert the mapping channel to a RGB value */ + Colour colour = this->AdjustBrightness(this->LookupColourInPalette(GB(*src_n, 0, 8)), GB(*src_n, 8, 8)); + *dst = ComposeColourRGBANoCheck(colour.r, colour.g, colour.b, src_px->a, *dst); + } else { + *dst = ComposeColourRGBANoCheck(src_px->r, src_px->g, src_px->b, src_px->a, *dst); + } dst++; src_px++; + src_n++; } while (--n != 0); } break; @@ -233,6 +244,22 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL } } +template +void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) +{ + switch (mode) { + default: NOT_REACHED(); + case BM_NORMAL: Draw(bp, zoom); return; + case BM_COLOUR_REMAP: Draw(bp, zoom); return; + case BM_TRANSPARENT: Draw(bp, zoom); return; + case BM_CRASH_REMAP: Draw(bp, zoom); return; + case BM_BLACK_REMAP: Draw(bp, zoom); return; + } +} + +template void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); +template void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); + /** * Draws a sprite to a (screen) buffer. Calls adequate templated function. * @@ -242,17 +269,10 @@ inline void Blitter_32bppOptimized::Draw(const Blitter::BlitterParams *bp, ZoomL */ void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) { - switch (mode) { - default: NOT_REACHED(); - case BM_NORMAL: Draw (bp, zoom); return; - case BM_COLOUR_REMAP: Draw(bp, zoom); return; - case BM_TRANSPARENT: Draw (bp, zoom); return; - case BM_CRASH_REMAP: Draw (bp, zoom); return; - case BM_BLACK_REMAP: Draw (bp, zoom); return; - } + this->Draw(bp, mode, zoom); } -Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) { /* streams of pixels (a, r, g, b channels) * @@ -324,22 +344,28 @@ Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloc *dst_n = src->m; if (src->m != 0) { /* Get brightest value */ - uint8 rgb_max = max(src->r, max(src->g, src->b)); + uint8 rgb_max = std::max({ src->r, src->g, src->b }); /* Black pixel (8bpp or old 32bpp image), so use default value */ if (rgb_max == 0) rgb_max = DEFAULT_BRIGHTNESS; *dst_n |= rgb_max << 8; - /* Pre-convert the mapping channel to a RGB value */ - Colour colour = this->AdjustBrightness(this->LookupColourInPalette(src->m), rgb_max); - dst_px->r = colour.r; - dst_px->g = colour.g; - dst_px->b = colour.b; + if (Tpal_to_rgb) { + /* Pre-convert the mapping channel to a RGB value */ + Colour colour = this->AdjustBrightness(this->LookupColourInPalette(src->m), rgb_max); + dst_px->r = colour.r; + dst_px->g = colour.g; + dst_px->b = colour.b; + } else { + dst_px->r = src->r; + dst_px->g = src->g; + dst_px->b = src->b; + } } else { dst_px->r = src->r; dst_px->g = src->g; dst_px->b = src->b; - *dst_n = this->CM_GetMForRGB(src->r, src->g, src->b) | (DEFAULT_BRIGHTNESS << 8); + if (Tpal_to_rgb) *dst_n = this->CM_GetMForRGB(src->r, src->g, src->b) | (DEFAULT_BRIGHTNESS << 8); } dst_px++; dst_n++; @@ -398,3 +424,11 @@ Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloc return dest_sprite; } + +template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); +template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); + +Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +{ + return this->EncodeInternal(sprite, allocator); +} diff --git a/src/blitter/32bpp_optimized.hpp b/src/blitter/32bpp_optimized.hpp index a9c732902e..f0de770b67 100644 --- a/src/blitter/32bpp_optimized.hpp +++ b/src/blitter/32bpp_optimized.hpp @@ -26,7 +26,11 @@ public: const char *GetName() override { return "32bpp-optimized"; } - template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); + template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); + +protected: + template void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); + template Sprite *EncodeInternal(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); }; /** Factory for the optimised 32 bpp blitter (without palette animation). */ diff --git a/src/blitter/32bpp_simple.cpp b/src/blitter/32bpp_simple.cpp index 4c3e6a82a9..e4d2a05e0d 100644 --- a/src/blitter/32bpp_simple.cpp +++ b/src/blitter/32bpp_simple.cpp @@ -131,7 +131,7 @@ Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::Sprite *sprite, Allocato dst[i].v = DEFAULT_BRIGHTNESS; } else { /* Get brightest value */ - uint8 rgb_max = max(src->r, max(src->g, src->b)); + uint8 rgb_max = std::max({src->r, src->g, src->b}); /* Black pixel (8bpp or old 32bpp image), so use default value */ if (rgb_max == 0) rgb_max = DEFAULT_BRIGHTNESS; diff --git a/src/blitter/32bpp_sse2.cpp b/src/blitter/32bpp_sse2.cpp index 731e67b6ac..782d0a74c6 100644 --- a/src/blitter/32bpp_sse2.cpp +++ b/src/blitter/32bpp_sse2.cpp @@ -80,7 +80,7 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::Sprite *sprite, Alloca if (src->m >= PALETTE_ANIM_START) has_anim = true; /* Get brightest value (or default brightness if it's a black pixel). */ - const uint8 rgb_max = max(src->r, max(src->g, src->b)); + const uint8 rgb_max = std::max({src->r, src->g, src->b}); dst_mv->v = (rgb_max == 0) ? Blitter_32bppBase::DEFAULT_BRIGHTNESS : rgb_max; /* Pre-convert the mapping channel to a RGB value. */ diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index ca08b90636..a851e614eb 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -31,7 +31,7 @@ public: uint8 m; uint8 v; }; - assert_compile(sizeof(MapValue) == 2); + static_assert(sizeof(MapValue) == 2); /** Helper for creating specialised functions for specific optimisations. */ enum ReadMode { diff --git a/src/blitter/32bpp_sse_type.h b/src/blitter/32bpp_sse_type.h index 1d63d8052d..33c76d9b4d 100644 --- a/src/blitter/32bpp_sse_type.h +++ b/src/blitter/32bpp_sse_type.h @@ -43,7 +43,7 @@ typedef union ALIGN(16) um128i { #define CLEAR_HIGH_BYTE_MASK _mm_setr_epi8(-1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0) #define ALPHA_CONTROL_MASK _mm_setr_epi8( 6, 7, 6, 7, 6, 7, -1, -1, 14, 15, 14, 15, 14, 15, -1, -1) -#define PACK_LOW_CONTROL_MASK _mm_setr_epi8( 0, 2, 4, -1, 8, 10, 12, -1, -1, -1, -1, -1, -1, -1, -1, -1) +#define PACK_LOW_CONTROL_MASK _mm_setr_epi8( 0, 2, 4, 6, 8, 10, 12, 14, -1, -1, -1, -1, -1, -1, -1, -1) #define PACK_HIGH_CONTROL_MASK _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, 0, 2, 4, -1, 8, 10, 12, -1) #define BRIGHTNESS_LOW_CONTROL_MASK _mm_setr_epi8( 1, 2, 1, 2, 1, 2, 0, 2, 3, 2, 3, 2, 3, 2, 0, 2) #define BRIGHTNESS_DIV_CLEANER _mm_setr_epi8(-1, 1, -1, 1, -1, 1, -1, 0, -1, 1, -1, 1, -1, 1, -1, 0) diff --git a/src/blitter/40bpp_anim.cpp b/src/blitter/40bpp_anim.cpp new file mode 100644 index 0000000000..f5cde00bd1 --- /dev/null +++ b/src/blitter/40bpp_anim.cpp @@ -0,0 +1,518 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD 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, version 2. + * OpenTTD 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 OpenTTD. If not, see . + */ + +/** @file 40bpp_optimized.cpp Implementation of the optimized 40 bpp blitter. */ + +#include "../stdafx.h" +#include "../zoom_func.h" +#include "../settings_type.h" +#include "../video/video_driver.hpp" +#include "40bpp_anim.hpp" +#include "common.hpp" + +#include "../table/sprites.h" + +#include "../safeguards.h" + + +/** Instantiation of the 40bpp with animation blitter factory. */ +static FBlitter_40bppAnim iFBlitter_40bppAnim; + +/** Cached black value. */ +static const Colour _black_colour(0, 0, 0); + + +void Blitter_40bppAnim::SetPixel(void *video, int x, int y, uint8 colour) +{ + if (_screen_disable_anim) { + Blitter_32bppOptimized::SetPixel(video, x, y, colour); + } else { + *((Colour *)video + x + y * _screen.pitch) = _black_colour; + + VideoDriver::GetInstance()->GetAnimBuffer()[((uint32 *)video - (uint32 *)_screen.dst_ptr) + x + y * _screen.pitch] = colour; + } +} + +void Blitter_40bppAnim::DrawRect(void *video, int width, int height, uint8 colour) +{ + if (_screen_disable_anim) { + /* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent DrawRect() */ + Blitter_32bppOptimized::DrawRect(video, width, height, colour); + return; + } + + assert(VideoDriver::GetInstance()->GetAnimBuffer() != nullptr); + uint8 *anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + VideoDriver::GetInstance()->GetAnimBuffer(); + + do { + Colour *dst = (Colour *)video; + uint8 *anim = anim_line; + + for (int i = width; i > 0; i--) { + *dst = _black_colour; + *anim = colour; + dst++; + anim++; + } + video = (uint32 *)video + _screen.pitch; + anim_line += _screen.pitch; + } while (--height); +} + +void Blitter_40bppAnim::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) +{ + if (_screen_disable_anim) { + /* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent DrawRect() */ + Blitter_32bppOptimized::DrawLine(video, x, y, x2, y2, screen_width, screen_height, colour, width, dash); + return; + } + + assert(VideoDriver::GetInstance()->GetAnimBuffer() != nullptr); + uint8 *anim = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + VideoDriver::GetInstance()->GetAnimBuffer(); + + this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) { + *((Colour *)video + x + y * _screen.pitch) = _black_colour; + *(anim + x + y * _screen.pitch) = colour; + }); +} + +/** + * Draws a sprite to a (screen) buffer. It is templated to allow faster operation. + * + * @tparam mode blitter mode + * @param bp further blitting parameters + * @param zoom zoom level at which we are drawing + */ +template +inline void Blitter_40bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom) +{ + const SpriteData *src = (const SpriteData *)bp->sprite; + + /* src_px : each line begins with uint32 n = 'number of bytes in this line', + * then n times is the Colour struct for this line */ + const Colour *src_px = (const Colour *)(src->data + src->offset[zoom][0]); + /* src_n : each line begins with uint32 n = 'number of bytes in this line', + * then interleaved stream of 'm' and 'n' channels. 'm' is remap, + * 'n' is number of bytes with the same alpha channel class */ + const uint16 *src_n = (const uint16 *)(src->data + src->offset[zoom][1]); + + /* skip upper lines in src_px and src_n */ + for (uint i = bp->skip_top; i != 0; i--) { + src_px = (const Colour *)((const byte *)src_px + *(const uint32 *)src_px); + src_n = (const uint16 *)((const byte *)src_n + *(const uint32 *)src_n); + } + + /* skip lines in dst */ + Colour *dst = (Colour *)bp->dst + bp->top * bp->pitch + bp->left; + assert(VideoDriver::GetInstance()->GetAnimBuffer() != nullptr); + uint8 *anim = VideoDriver::GetInstance()->GetAnimBuffer() + ((uint32 *)bp->dst - (uint32 *)_screen.dst_ptr) + bp->top * bp->pitch + bp->left; + + /* store so we don't have to access it via bp everytime (compiler assumes pointer aliasing) */ + const byte *remap = bp->remap; + + for (int y = 0; y < bp->height; y++) { + /* next dst line begins here */ + Colour *dst_ln = dst + bp->pitch; + uint8 *anim_ln = anim + bp->pitch; + + /* next src line begins here */ + const Colour *src_px_ln = (const Colour *)((const byte *)src_px + *(const uint32 *)src_px); + src_px++; + + /* next src_n line begins here */ + const uint16 *src_n_ln = (const uint16 *)((const byte *)src_n + *(const uint32 *)src_n); + src_n += 2; + + /* we will end this line when we reach this point */ + Colour *dst_end = dst + bp->skip_left; + + /* number of pixels with the same alpha channel class */ + uint n; + + while (dst < dst_end) { + n = *src_n++; + + if (src_px->a == 0) { + dst += n; + src_px++; + src_n++; + + if (dst > dst_end) anim += dst - dst_end; + } else { + if (dst + n > dst_end) { + uint d = dst_end - dst; + src_px += d; + src_n += d; + + dst = dst_end - bp->skip_left; + dst_end = dst + bp->width; + + n = std::min(n - d, (uint)bp->width); + goto draw; + } + dst += n; + src_px += n; + src_n += n; + } + } + + dst -= bp->skip_left; + dst_end -= bp->skip_left; + + dst_end += bp->width; + + while (dst < dst_end) { + n = std::min(*src_n++, (uint)(dst_end - dst)); + + if (src_px->a == 0) { + anim += n; + dst += n; + src_px++; + src_n++; + continue; + } + + draw:; + + switch (mode) { + case BM_COLOUR_REMAP: + case BM_CRASH_REMAP: + if (src_px->a == 255) { + do { + uint8 m = GB(*src_n, 0, 8); + /* In case the m-channel is zero, only apply the crash remap by darkening the RGB colour. */ + if (m == 0) { + *dst = mode == BM_CRASH_REMAP ? this->MakeDark(*src_px) : *src_px; + *anim = mode == BM_CRASH_REMAP ? 0 : remap[this->CM_GetMForRGB(src_px->r, src_px->g, src_px->b)]; + } else { + uint r = remap[m]; + if (r != 0) { + *dst = src_px->data; + *anim = r; + } + } + anim++; + dst++; + src_px++; + src_n++; + } while (--n != 0); + } else { + do { + uint8 m = GB(*src_n, 0, 8); + Colour b = this->RealizeBlendedColour(*anim, *dst); + if (m == 0) { + Colour c = mode == BM_CRASH_REMAP ? this->MakeDark(*src_px) : *src_px; + *dst = this->ComposeColourRGBANoCheck(c.r, c.g, c.b, src_px->a, b); + *anim = 0; + } else { + uint r = remap[m]; + if (r != 0) { + *dst = this->ComposeColourPANoCheck(this->LookupColourInPalette(r), src_px->a, b); + *anim = 0; // Animation colours don't work with alpha-blending. + } + } + anim++; + dst++; + src_px++; + src_n++; + } while (--n != 0); + } + break; + + case BM_BLACK_REMAP: + do { + *anim++ = 0; + *dst++ = _black_colour; + src_px++; + src_n++; + } while (--n != 0); + break; + + case BM_TRANSPARENT: + /* TODO -- We make an assumption here that the remap in fact is transparency, not some colour. + * This is never a problem with the code we produce, but newgrfs can make it fail... or at least: + * we produce a result the newgrf maker didn't expect ;) */ + + /* Make the current colour a bit more black, so it looks like this image is transparent */ + src_n += n; + if (src_px->a == 255) { + src_px += n; + do { + /* If the anim buffer contains a color value, the image composition will + * only look at the RGB brightness value. As such, we can simply darken the + * RGB value to darken the anim color. */ + Colour b = *anim != 0 ? Colour(this->GetColourBrightness(*dst), 0, 0) : *dst; + *dst = this->MakeTransparent(b, 3, 4); + anim++; + dst++; + } while (--n != 0); + } else { + do { + Colour b = this->RealizeBlendedColour(*anim, *dst); + *dst = this->MakeTransparent(b, (256 * 4 - src_px->a), 256 * 4); + *anim = 0; // Animation colours don't work with alpha-blending. + anim++; + dst++; + src_px++; + } while (--n != 0); + } + break; + + default: + if (src_px->a == 255) { + do { + *anim++ = GB(*src_n, 0, 8); + *dst++ = src_px->data; + src_px++; + src_n++; + } while (--n != 0); + break; + } else { + do { + uint8 m = GB(*src_n, 0, 8); + Colour b = this->RealizeBlendedColour(*anim, *dst); + + if (m == 0) { + *dst = this->ComposeColourRGBANoCheck(src_px->r, src_px->g, src_px->b, src_px->a, b); + *anim = 0; + } else { + *dst = this->ComposeColourPANoCheck(this->LookupColourInPalette(m), src_px->a, b); + *anim = m; + } + + anim++; + dst++; + src_px++; + src_n++; + } while (--n != 0); + } + } + } + + dst = dst_ln; + anim = anim_ln; + src_px = src_px_ln; + src_n = src_n_ln; + } +} + +/** + * Draws a sprite to a (screen) buffer. Calls adequate templated function. + * + * @param bp further blitting parameters + * @param mode blitter mode + * @param zoom zoom level at which we are drawing + */ +void Blitter_40bppAnim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) +{ + assert(_screen.dst_ptr != nullptr); + + if (_screen_disable_anim || VideoDriver::GetInstance()->GetAnimBuffer() == nullptr) { + /* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent Draw() */ + Blitter_32bppOptimized::Draw(bp, mode, zoom); + return; + } + + switch (mode) { + default: NOT_REACHED(); + case BM_NORMAL: Draw (bp, zoom); return; + case BM_COLOUR_REMAP: Draw(bp, zoom); return; + case BM_TRANSPARENT: Draw (bp, zoom); return; + case BM_CRASH_REMAP: Draw (bp, zoom); return; + case BM_BLACK_REMAP: Draw (bp, zoom); return; + } +} + +void Blitter_40bppAnim::DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) +{ + if (_screen_disable_anim) { + /* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent DrawColourMappingRect() */ + Blitter_32bppOptimized::DrawColourMappingRect(dst, width, height, pal); + return; + } + + Colour *udst = (Colour *)dst; + uint8 *anim = VideoDriver::GetInstance()->GetAnimBuffer() + ((uint32 *)dst - (uint32 *)_screen.dst_ptr); + + if (pal == PALETTE_TO_TRANSPARENT) { + /* If the anim buffer contains a color value, the image composition will + * only look at the RGB brightness value. As such, we can simply darken the + * RGB value to darken the anim color. */ + do { + for (int i = 0; i != width; i++) { + Colour b = *anim != 0 ? Colour(this->GetColourBrightness(*udst), 0, 0) : *udst; + *udst = MakeTransparent(b, 154); + udst++; + anim++; + } + udst = udst - width + _screen.pitch; + anim = anim - width + _screen.pitch; + } while (--height); + } else if (pal == PALETTE_NEWSPAPER) { + const uint8 *remap = GetNonSprite(pal, ST_RECOLOUR) + 1; + do { + for (int i = 0; i != width; i++) { + if (*anim == 0) *udst = MakeGrey(*udst); + *anim = remap[*anim]; + udst++; + anim++; + } + udst = udst - width + _screen.pitch; + anim = anim - width + _screen.pitch; + } while (--height); + } else { + const uint8 *remap = GetNonSprite(pal, ST_RECOLOUR) + 1; + do { + for (int i = 0; i != width; i++) { + *anim = remap[*anim]; + anim++; + } + anim = anim - width + _screen.pitch; + } while (--height); + } +} + +Sprite *Blitter_40bppAnim::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +{ + return this->EncodeInternal(sprite, allocator); +} + + +void Blitter_40bppAnim::CopyFromBuffer(void *video, const void *src, int width, int height) +{ + assert(!_screen_disable_anim); + assert(video >= _screen.dst_ptr && video <= (uint32 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch); + uint32 *dst = (uint32 *)video; + const uint32 *usrc = (const uint32 *)src; + + uint8 *anim_buf = VideoDriver::GetInstance()->GetAnimBuffer(); + if (anim_buf == nullptr) return; + uint8 *anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + anim_buf; + + for (; height > 0; height--) { + memcpy(dst, usrc, width * sizeof(uint32)); + usrc += width; + dst += _screen.pitch; + /* Copy back the anim-buffer */ + memcpy(anim_line, usrc, width * sizeof(uint8)); + usrc = (const uint32 *)((const uint8 *)usrc + width); + anim_line += _screen.pitch; + } +} + +void Blitter_40bppAnim::CopyToBuffer(const void *video, void *dst, int width, int height) +{ + assert(!_screen_disable_anim); + assert(video >= _screen.dst_ptr && video <= (uint32 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch); + uint32 *udst = (uint32 *)dst; + const uint32 *src = (const uint32 *)video; + + uint8 *anim_buf = VideoDriver::GetInstance()->GetAnimBuffer(); + if (anim_buf == nullptr) return; + const uint8 *anim_line = ((const uint32 *)video - (uint32 *)_screen.dst_ptr) + anim_buf; + + for (; height > 0; height--) { + memcpy(udst, src, width * sizeof(uint32)); + src += _screen.pitch; + udst += width; + /* Copy the anim-buffer */ + memcpy(udst, anim_line, width * sizeof(uint8)); + udst = (uint32 *)((uint8 *)udst + width); + anim_line += _screen.pitch; + } +} + +void Blitter_40bppAnim::CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) +{ + uint8 *anim_buf = VideoDriver::GetInstance()->GetAnimBuffer(); + if (anim_buf == nullptr) { + Blitter_32bppOptimized::CopyImageToBuffer(video, dst, width, height, dst_pitch); + return; + } + + uint32 *udst = (uint32 *)dst; + const uint32 *src = (const uint32 *)video; + const uint8 *anim_line = ((const uint32 *)video - (uint32 *)_screen.dst_ptr) + anim_buf; + + for (; height > 0; height--) { + for (int x = 0; x < width; x++) { + udst[x] = this->RealizeBlendedColour(anim_line[x], src[x]).data; + } + src += _screen.pitch; + anim_line += _screen.pitch; + udst += dst_pitch; + } +} + +void Blitter_40bppAnim::ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) +{ + assert(!_screen_disable_anim); + assert(video >= _screen.dst_ptr && video <= (uint32 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch); + uint8 *anim_buf = VideoDriver::GetInstance()->GetAnimBuffer(); + uint8 *dst, *src; + + /* We need to scroll the anim-buffer too */ + if (scroll_y > 0) { + dst = anim_buf + left + (top + height - 1) * _screen.pitch; + src = dst - scroll_y * _screen.pitch; + + /* Adjust left & width */ + if (scroll_x >= 0) { + dst += scroll_x; + } else { + src -= scroll_x; + } + + uint tw = width + (scroll_x >= 0 ? -scroll_x : scroll_x); + uint th = height - scroll_y; + for (; th > 0; th--) { + memcpy(dst, src, tw * sizeof(uint8)); + src -= _screen.pitch; + dst -= _screen.pitch; + } + } else { + /* Calculate pointers */ + dst = anim_buf + left + top * _screen.pitch; + src = dst - scroll_y * _screen.pitch; + + /* Adjust left & width */ + if (scroll_x >= 0) { + dst += scroll_x; + } else { + src -= scroll_x; + } + + /* the y-displacement may be 0 therefore we have to use memmove, + * because source and destination may overlap */ + uint tw = width + (scroll_x >= 0 ? -scroll_x : scroll_x); + uint th = height + scroll_y; + for (; th > 0; th--) { + memmove(dst, src, tw * sizeof(uint8)); + src += _screen.pitch; + dst += _screen.pitch; + } + } + + Blitter_32bppBase::ScrollBuffer(video, left, top, width, height, scroll_x, scroll_y); +} + +int Blitter_40bppAnim::BufferSize(int width, int height) +{ + return width * height * (sizeof(uint32) + sizeof(uint8)); +} + +Blitter::PaletteAnimation Blitter_40bppAnim::UsePaletteAnimation() +{ + return Blitter::PALETTE_ANIMATION_VIDEO_BACKEND; +} + +bool Blitter_40bppAnim::NeedsAnimationBuffer() +{ + return true; +} diff --git a/src/blitter/40bpp_anim.hpp b/src/blitter/40bpp_anim.hpp new file mode 100644 index 0000000000..c0bea15ae0 --- /dev/null +++ b/src/blitter/40bpp_anim.hpp @@ -0,0 +1,64 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD 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, version 2. + * OpenTTD 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 OpenTTD. If not, see . + */ + +/** @file 40bpp_optimized.hpp Optimized 40 bpp blitter. */ + +#ifndef BLITTER_40BPP_OPTIMIZED_HPP +#define BLITTER_40BPP_OPTIMIZED_HPP + + +#include "32bpp_optimized.hpp" +#include "../video/video_driver.hpp" + +/** The optimized 40 bpp blitter (for OpenGL video driver). */ +class Blitter_40bppAnim : public Blitter_32bppOptimized { +public: + + // void *MoveTo(void *video, int x, int y) override; + void SetPixel(void *video, int x, int y, uint8 colour) override; + void DrawRect(void *video, int width, int height, uint8 colour) override; + void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) override; + void CopyFromBuffer(void *video, const void *src, int width, int height) override; + void CopyToBuffer(const void *video, void *dst, int width, int height) override; + void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) override; + void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) override; + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; + void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override; + Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; + int BufferSize(int width, int height) override; + Blitter::PaletteAnimation UsePaletteAnimation() override; + bool NeedsAnimationBuffer() override; + + const char *GetName() override { return "40bpp-anim"; } + int GetBytesPerPixel() override { return 5; } + + template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); + +protected: + static inline Colour RealizeBlendedColour(uint8 anim, Colour c) + { + return anim != 0 ? AdjustBrightness(LookupColourInPalette(anim), GetColourBrightness(c)) : c; + } + +}; + +/** Factory for the 40 bpp animated blitter (for OpenGL). */ +class FBlitter_40bppAnim : public BlitterFactory { +protected: + bool IsUsable() const override + { + return VideoDriver::GetInstance() == nullptr || VideoDriver::GetInstance()->HasAnimBuffer(); + } + +public: + FBlitter_40bppAnim() : BlitterFactory("40bpp-anim", "40bpp Animation Blitter (OpenGL)") {} + Blitter *CreateInstance() override { return new Blitter_40bppAnim(); } +}; + +#endif /* BLITTER_40BPP_OPTIMIZED_HPP */ diff --git a/src/blitter/8bpp_optimized.cpp b/src/blitter/8bpp_optimized.cpp index 5c34bf0674..2e7c142797 100644 --- a/src/blitter/8bpp_optimized.cpp +++ b/src/blitter/8bpp_optimized.cpp @@ -80,7 +80,7 @@ void Blitter_8bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Z dst += trans; width -= trans; if (width <= 0 || pixels == 0) continue; - pixels = min(pixels, (uint)width); + pixels = std::min(pixels, width); width -= pixels; switch (mode) { diff --git a/src/blitter/CMakeLists.txt b/src/blitter/CMakeLists.txt new file mode 100644 index 0000000000..ddcc9a0082 --- /dev/null +++ b/src/blitter/CMakeLists.txt @@ -0,0 +1,62 @@ +add_files( + 32bpp_anim.cpp + 32bpp_anim.hpp + 32bpp_base.cpp + 32bpp_base.hpp + 32bpp_optimized.cpp + 32bpp_optimized.hpp + 32bpp_simple.cpp + 32bpp_simple.hpp + 8bpp_base.cpp + 8bpp_base.hpp + 8bpp_optimized.cpp + 8bpp_optimized.hpp + 8bpp_simple.cpp + 8bpp_simple.hpp + CONDITION NOT OPTION_DEDICATED +) + +add_files( + 32bpp_anim_sse2.cpp + 32bpp_anim_sse2.hpp + 32bpp_anim_sse4.cpp + 32bpp_anim_sse4.hpp + 32bpp_sse2.cpp + 32bpp_sse2.hpp + 32bpp_sse4.cpp + 32bpp_sse4.hpp + 32bpp_sse_func.hpp + 32bpp_sse_type.h + 32bpp_ssse3.cpp + 32bpp_ssse3.hpp + CONDITION NOT OPTION_DEDICATED AND SSE_FOUND +) + +add_files( + 40bpp_anim.cpp + 40bpp_anim.hpp + CONDITION NOT OPTION_DEDICATED AND OPENGL_FOUND +) + + +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set_compile_flags( + 32bpp_anim_sse2.cpp + 32bpp_sse2.cpp + COMPILE_FLAGS -msse2) + set_compile_flags( + 32bpp_ssse3.cpp + COMPILE_FLAGS -mssse3) + set_compile_flags( + 32bpp_anim_sse4.cpp + 32bpp_sse4.cpp + COMPILE_FLAGS -msse4.1) +endif() + +add_files( + base.hpp + common.hpp + factory.hpp + null.cpp + null.hpp +) diff --git a/src/blitter/base.hpp b/src/blitter/base.hpp index 10dfce84b2..4ec25c38dd 100644 --- a/src/blitter/base.hpp +++ b/src/blitter/base.hpp @@ -25,7 +25,7 @@ enum BlitterMode { /** * How all blitters should look like. Extend this class to make your own. */ -class Blitter { +class Blitter : public SpriteEncoder { public: /** Parameters related to blitting. */ struct BlitterParams { @@ -58,6 +58,11 @@ public: */ virtual uint8 GetScreenDepth() = 0; + bool Is32BppSupported() override + { + return this->GetScreenDepth() > 8; + } + /** * Draw an image to the screen, given an amount of params defined above. */ @@ -74,11 +79,6 @@ public: */ virtual void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) = 0; - /** - * Convert a sprite from the loader to our own format. - */ - virtual Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) = 0; - /** * Move the destination pointer the requested amount x and y, keeping in mind * any pitch and bpp of the renderer. @@ -185,6 +185,14 @@ public: */ virtual Blitter::PaletteAnimation UsePaletteAnimation() = 0; + /** + * Does this blitter require a separate animation buffer from the video backend? + */ + virtual bool NeedsAnimationBuffer() + { + return false; + } + /** * Get the name of the blitter, the same as the Factory-instance returns. */ diff --git a/src/blitter/common.hpp b/src/blitter/common.hpp index b5040b1275..aaf63cd6a9 100644 --- a/src/blitter/common.hpp +++ b/src/blitter/common.hpp @@ -45,7 +45,7 @@ void Blitter::DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, in return; } - int frac_diff = width * max(dx, dy); + int frac_diff = width * std::max(dx, dy); if (width > 1) { /* compute frac_diff = width * sqrt(dx*dx + dy*dy) * Start interval: diff --git a/src/blitter/factory.hpp b/src/blitter/factory.hpp index e97fe53de7..94f3f99988 100644 --- a/src/blitter/factory.hpp +++ b/src/blitter/factory.hpp @@ -16,19 +16,16 @@ #include "../core/string_compare_type.hpp" #include -#if defined(WITH_COCOA) -bool QZ_CanDisplay8bpp(); -#endif /* defined(WITH_COCOA) */ /** * The base factory, keeping track of all blitters. */ class BlitterFactory { private: - const char *name; ///< The name of the blitter factory. - const char *description; ///< The description of the blitter. + const std::string name; ///< The name of the blitter factory. + const std::string description; ///< The description of the blitter. - typedef std::map Blitters; ///< Map of blitter factories. + typedef std::map Blitters; ///< Map of blitter factories. /** * Get the map with currently known blitters. @@ -61,29 +58,36 @@ protected: * @pre There is no blitter registered with this name. */ BlitterFactory(const char *name, const char *description, bool usable = true) : - name(stredup(name)), description(stredup(description)) + name(name), description(description) { if (usable) { + Blitters &blitters = GetBlitters(); + assert(blitters.find(this->name) == blitters.end()); /* * Only add when the blitter is usable. Do not bail out or * do more special things since the blitters are always * instantiated upon start anyhow and freed upon shutdown. */ - std::pair P = GetBlitters().insert(Blitters::value_type(this->name, this)); - assert(P.second); + blitters.insert(Blitters::value_type(this->name, this)); } else { DEBUG(driver, 1, "Not registering blitter %s as it is not usable", name); } } + /** + * Is the blitter usable with the current drivers and hardware config? + * @return True if the blitter can be instantiated. + */ + virtual bool IsUsable() const + { + return true; + } + public: virtual ~BlitterFactory() { GetBlitters().erase(this->name); if (GetBlitters().empty()) delete &GetBlitters(); - - free(this->name); - free(this->description); } /** @@ -91,7 +95,7 @@ public: * @param name the blitter to select. * @post Sets the blitter so GetCurrentBlitter() returns it too. */ - static Blitter *SelectBlitter(const char *name) + static Blitter *SelectBlitter(const std::string &name) { BlitterFactory *b = GetBlitterFactory(name); if (b == nullptr) return nullptr; @@ -100,7 +104,7 @@ public: delete *GetActiveBlitter(); *GetActiveBlitter() = newb; - DEBUG(driver, 1, "Successfully %s blitter '%s'", StrEmpty(name) ? "probed" : "loaded", newb->GetName()); + DEBUG(driver, 1, "Successfully %s blitter '%s'", name.empty() ? "probed" : "loaded", newb->GetName()); return newb; } @@ -109,31 +113,23 @@ public: * @param name the blitter factory to select. * @return The blitter factory, or nullptr when there isn't one with the wanted name. */ - static BlitterFactory *GetBlitterFactory(const char *name) + static BlitterFactory *GetBlitterFactory(const std::string &name) { #if defined(DEDICATED) const char *default_blitter = "null"; +#elif defined(WITH_COCOA) + const char *default_blitter = "32bpp-anim"; #else const char *default_blitter = "8bpp-optimized"; - -#if defined(WITH_COCOA) - /* Some people reported lack of fullscreen support in 8 bpp mode. - * While we prefer 8 bpp since it's faster, we will still have to test for support. */ - if (!QZ_CanDisplay8bpp()) { - /* The main display can't go to 8 bpp fullscreen mode. - * We will have to switch to 32 bpp by default. */ - default_blitter = "32bpp-anim"; - } -#endif /* defined(WITH_COCOA) */ -#endif /* defined(DEDICATED) */ +#endif if (GetBlitters().size() == 0) return nullptr; - const char *bname = (StrEmpty(name)) ? default_blitter : name; + const char *bname = name.empty() ? default_blitter : name.c_str(); Blitters::iterator it = GetBlitters().begin(); for (; it != GetBlitters().end(); it++) { BlitterFactory *b = (*it).second; - if (strcasecmp(bname, b->name) == 0) { - return b; + if (strcasecmp(bname, b->name.c_str()) == 0) { + return b->IsUsable() ? b : nullptr; } } return nullptr; @@ -159,7 +155,7 @@ public: Blitters::iterator it = GetBlitters().begin(); for (; it != GetBlitters().end(); it++) { BlitterFactory *b = (*it).second; - p += seprintf(p, last, "%18s: %s\n", b->name, b->GetDescription()); + p += seprintf(p, last, "%18s: %s\n", b->name.c_str(), b->GetDescription().c_str()); } p += seprintf(p, last, "\n"); @@ -169,7 +165,7 @@ public: /** * Get the long, human readable, name for the Blitter-class. */ - const char *GetName() const + const std::string &GetName() const { return this->name; } @@ -177,7 +173,7 @@ public: /** * Get a nice description of the blitter-class. */ - const char *GetDescription() const + const std::string &GetDescription() const { return this->description; } @@ -188,7 +184,7 @@ public: virtual Blitter *CreateInstance() = 0; }; -extern char *_ini_blitter; +extern std::string _ini_blitter; extern bool _blitter_autodetected; #endif /* BLITTER_FACTORY_HPP */ diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index d2445c23a4..7495e08ba5 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -11,9 +11,10 @@ #include "base_media_base.h" #include "blitter/factory.hpp" -#if defined(WITH_FREETYPE) || defined(WITH_UNISCRIBE) +#if defined(WITH_FREETYPE) || defined(WITH_UNISCRIBE) || defined(WITH_COCOA) #include "core/geometry_func.hpp" +#include "error.h" #include "fontcache.h" #include "gfx_func.h" #include "network/network.h" @@ -61,8 +62,65 @@ public: } }; +/** Nested widgets for the error window. */ +static const NWidgetPart _nested_bootstrap_errmsg_widgets[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CAPTION, COLOUR_GREY, WID_BEM_CAPTION), SetDataTip(STR_MISSING_GRAPHICS_ERROR_TITLE, STR_NULL), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY), + NWidget(WWT_PANEL, COLOUR_GREY, WID_BEM_MESSAGE), EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_BEM_QUIT), SetDataTip(STR_MISSING_GRAPHICS_ERROR_QUIT, STR_NULL), SetFill(1, 0), + EndContainer(), + EndContainer(), +}; + +/** Window description for the error window. */ +static WindowDesc _bootstrap_errmsg_desc( + WDP_CENTER, nullptr, 0, 0, + WC_BOOTSTRAP, WC_NONE, + WDF_MODAL, + _nested_bootstrap_errmsg_widgets, lengthof(_nested_bootstrap_errmsg_widgets) +); + +/** The window for a failed bootstrap. */ +class BootstrapErrorWindow : public Window { +public: + BootstrapErrorWindow() : Window(&_bootstrap_errmsg_desc) + { + this->InitNested(1); + } + + ~BootstrapErrorWindow() + { + _exit_game = true; + } + + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override + { + if (widget == WID_BEM_MESSAGE) { + *size = GetStringBoundingBox(STR_MISSING_GRAPHICS_ERROR); + size->height = GetStringHeight(STR_MISSING_GRAPHICS_ERROR, size->width - WD_FRAMETEXT_LEFT - WD_FRAMETEXT_RIGHT) + WD_FRAMETEXT_BOTTOM + WD_FRAMETEXT_TOP; + } + } + + void DrawWidget(const Rect &r, int widget) const override + { + if (widget == WID_BEM_MESSAGE) { + DrawStringMultiLine(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, r.top + WD_FRAMETEXT_TOP, r.bottom - WD_FRAMETEXT_BOTTOM, STR_MISSING_GRAPHICS_ERROR, TC_FROMSTRING, SA_CENTER); + } + } + + void OnClick(Point pt, int widget, int click_count) override + { + if (widget == WID_BEM_QUIT) { + _exit_game = true; + } + } +}; + /** Nested widgets for the download window. */ -static const NWidgetPart _nested_boostrap_download_status_window_widgets[] = { +static const NWidgetPart _nested_bootstrap_download_status_window_widgets[] = { NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_CONTENT_DOWNLOAD_TITLE, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_PANEL, COLOUR_GREY, WID_NCDS_BACKGROUND), NWidget(NWID_SPACER), SetMinimalSize(350, 0), SetMinimalTextLines(3, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 30), @@ -74,7 +132,7 @@ static WindowDesc _bootstrap_download_status_window_desc( WDP_CENTER, nullptr, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WDF_MODAL, - _nested_boostrap_download_status_window_widgets, lengthof(_nested_boostrap_download_status_window_widgets) + _nested_bootstrap_download_status_window_widgets, lengthof(_nested_bootstrap_download_status_window_widgets) ); @@ -86,6 +144,14 @@ public: { } + ~BootstrapContentDownloadStatusWindow() + { + /* If we are not set to exit the game, it means the bootstrap failed. */ + if (!_exit_game) { + new BootstrapErrorWindow(); + } + } + void OnDownloadComplete(ContentID cid) override { /* We have completed downloading. We can trigger finding the right set now. */ @@ -218,7 +284,7 @@ bool HandleBootstrap() if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) goto failure; /* If there is no network or no freetype, then there is nothing we can do. Go straight to failure. */ -#if (defined(_WIN32) && defined(WITH_UNISCRIBE)) || (defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(__APPLE__))) +#if (defined(_WIN32) && defined(WITH_UNISCRIBE)) || (defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(__APPLE__))) || defined(WITH_COCOA) if (!_network_available) goto failure; /* First tell the game we're bootstrapping. */ @@ -253,7 +319,7 @@ bool HandleBootstrap() if (_exit_game) return false; /* Try to probe the graphics. Should work this time. */ - if (!BaseGraphics::SetSet(nullptr)) goto failure; + if (!BaseGraphics::SetSet({})) goto failure; /* Finally we can continue heading for the menu. */ _game_mode = GM_MENU; diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 8d602022cf..ff9a4ca49d 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -64,7 +64,7 @@ typedef GUIList GUIBridgeList; ///< List of bridges, used in #B void CcBuildBridge(const CommandCost &result, TileIndex end_tile, uint32 p1, uint32 p2, uint32 cmd) { if (result.Failed()) return; - if (_settings_client.sound.confirm) SndPlayTileFx(SND_27_BLACKSMITH_ANVIL, end_tile); + if (_settings_client.sound.confirm) SndPlayTileFx(SND_27_CONSTRUCTION_BRIDGE, end_tile); TransportType transport_type = Extract(p2); @@ -202,7 +202,7 @@ public: } sprite_dim.height++; // Sprite is rendered one pixel down in the matrix field. text_dim.height++; // Allowing the bottom row pixels to be rendered on the edge of the matrix field. - resize->height = max(sprite_dim.height, text_dim.height) + 2; // Max of both sizes + account for matrix edges. + resize->height = std::max(sprite_dim.height, text_dim.height) + 2; // Max of both sizes + account for matrix edges. this->bridgetext_offset = WD_MATRIX_LEFT + sprite_dim.width + 1; // Left edge of text, 1 pixel distance from the sprite. size->width = this->bridgetext_offset + text_dim.width + WD_MATRIX_RIGHT; @@ -438,8 +438,7 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo type_check = CheckBridgeAvailability(brd_type, bridge_len); if (type_check.Succeeded()) { /* bridge is accepted, add to list */ - /*C++17: BuildBridgeData &item = */ bl->emplace_back(); - BuildBridgeData &item = bl->back(); + BuildBridgeData &item = bl->emplace_back(); item.index = brd_type; item.spec = GetBridgeSpec(brd_type); /* Add to terraforming & bulldozing costs the cost of the diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 3526e0d843..8e98c23790 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -46,7 +46,7 @@ */ uint GetEngineListHeight(VehicleType type) { - return max(FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM, GetVehicleImageCellSize(type, EIT_PURCHASE).height); + return std::max(FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM, GetVehicleImageCellSize(type, EIT_PURCHASE).height); } static const NWidgetPart _nested_build_vehicle_widgets[] = { @@ -88,8 +88,9 @@ static const NWidgetPart _nested_build_vehicle_widgets[] = { }; /** Special cargo filter criteria */ -static const CargoID CF_ANY = CT_NO_REFIT; ///< Show all vehicles independent of carried cargo (i.e. no filtering) -static const CargoID CF_NONE = CT_INVALID; ///< Show only vehicles which do not carry cargo (e.g. train engines) +static const CargoID CF_ANY = CT_NO_REFIT; ///< Show all vehicles independent of carried cargo (i.e. no filtering) +static const CargoID CF_NONE = CT_INVALID; ///< Show only vehicles which do not carry cargo (e.g. train engines) +static const CargoID CF_ENGINES = CT_AUTO_REFIT; ///< Show only engines (for rail vehicles only) bool _engine_sort_direction; ///< \c false = descending, \c true = ascending. byte _engine_sort_last_criteria[] = {0, 0, 0, 0}; ///< Last set sort criteria, for each vehicle type. @@ -533,16 +534,21 @@ const StringID _engine_sort_listing[][12] = {{ INVALID_STRING_ID }}; -/** Cargo filter functions */ -static bool CDECL CargoFilter(const EngineID *eid, const CargoID cid) +/** Filters vehicles by cargo and engine (in case of rail vehicle). */ +static bool CDECL CargoAndEngineFilter(const EngineID *eid, const CargoID cid) { - if (cid == CF_ANY) return true; - CargoTypes refit_mask = GetUnionOfArticulatedRefitMasks(*eid, true) & _standard_cargo_mask; - return (cid == CF_NONE ? refit_mask == 0 : HasBit(refit_mask, cid)); + if (cid == CF_ANY) { + return true; + } else if (cid == CF_ENGINES) { + return Engine::Get(*eid)->GetPower() != 0; + } else { + CargoTypes refit_mask = GetUnionOfArticulatedRefitMasks(*eid, true) & _standard_cargo_mask; + return (cid == CF_NONE ? refit_mask == 0 : HasBit(refit_mask, cid)); + } } static GUIEngineList::FilterFunction * const _filter_funcs[] = { - &CargoFilter, + &CargoAndEngineFilter, }; static int DrawCargoCapacityInfo(int left, int right, int y, EngineID engine, TestedEngineDetails &te) @@ -1054,10 +1060,10 @@ struct BuildVehicleWindow : Window { EngineID sel_engine; ///< Currently selected engine, or #INVALID_ENGINE EngineID rename_engine; ///< Engine being renamed. GUIEngineList eng_list; - CargoID cargo_filter[NUM_CARGO + 2]; ///< Available cargo filters; CargoID or CF_ANY or CF_NONE - StringID cargo_filter_texts[NUM_CARGO + 3]; ///< Texts for filter_cargo, terminated by INVALID_STRING_ID + CargoID cargo_filter[NUM_CARGO + 3]; ///< Available cargo filters; CargoID or CF_ANY or CF_NONE or CF_ENGINES + StringID cargo_filter_texts[NUM_CARGO + 4]; ///< Texts for filter_cargo, terminated by INVALID_STRING_ID byte cargo_filter_criteria; ///< Selected cargo filter - int details_height; ///< Minimal needed height of the details panels (found so far). + int details_height; ///< Minimal needed height of the details panels, in text lines (found so far). Scrollbar *vscroll; TestedEngineDetails te; ///< Tested cost and capacity after refit. @@ -1117,7 +1123,7 @@ struct BuildVehicleWindow : Window { widget->tool_tip = STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP + type; widget->SetLowered(this->show_hidden_engines); - this->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9) * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; + this->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9); this->FinishInitNested(tile == INVALID_TILE ? (int)type : tile); @@ -1173,9 +1179,15 @@ struct BuildVehicleWindow : Window { this->cargo_filter_texts[filter_items] = STR_PURCHASE_INFO_ALL_TYPES; filter_items++; - /* Add item for vehicles not carrying anything, e.g. train engines. - * This could also be useful for eyecandy vehicles of other types, but is likely too confusing for joe, */ + /* Specific filters for trains. */ if (this->vehicle_type == VEH_TRAIN) { + /* Add item for locomotives only in case of trains. */ + this->cargo_filter[filter_items] = CF_ENGINES; + this->cargo_filter_texts[filter_items] = STR_PURCHASE_INFO_ENGINES_ONLY; + filter_items++; + + /* Add item for vehicles not carrying anything, e.g. train engines. + * This could also be useful for eyecandy vehicles of other types, but is likely too confusing for joe, */ this->cargo_filter[filter_items] = CF_NONE; this->cargo_filter_texts[filter_items] = STR_PURCHASE_INFO_NONE; filter_items++; @@ -1262,7 +1274,7 @@ struct BuildVehicleWindow : Window { bool FilterSingleEngine(EngineID eid) { CargoID filter_type = this->cargo_filter[this->cargo_filter_criteria]; - return (filter_type == CF_ANY || CargoFilter(&eid, filter_type)); + return CargoAndEngineFilter(&eid, filter_type); } /* Figure out what train EngineIDs to put in the list */ @@ -1468,7 +1480,7 @@ struct BuildVehicleWindow : Window { if (sel_eng != INVALID_ENGINE) { CommandCallback *callback = (this->vehicle_type == VEH_TRAIN && RailVehInfo(sel_eng)->railveh_type == RAILVEH_WAGON) ? CcBuildWagon : CcBuildPrimaryVehicle; CargoID cargo = this->cargo_filter[this->cargo_filter_criteria]; - if (cargo == CF_ANY) cargo = CF_NONE; + if (cargo == CF_ANY || cargo == CF_ENGINES) cargo = CF_NONE; DoCommandP(this->window_number, sel_eng | (cargo << 24), 0, GetCmdBuildVeh(this->vehicle_type), callback); } break; @@ -1545,11 +1557,11 @@ struct BuildVehicleWindow : Window { case WID_BV_LIST: resize->height = GetEngineListHeight(this->vehicle_type); size->height = 3 * resize->height; - size->width = max(size->width, GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_left + GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_right + 165); + size->width = std::max(size->width, GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_left + GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_right + 165); break; case WID_BV_PANEL: - size->height = this->details_height; + size->height = FONT_HEIGHT_NORMAL * this->details_height + padding.height; break; case WID_BV_SORT_ASCENDING_DESCENDING: { @@ -1580,7 +1592,18 @@ struct BuildVehicleWindow : Window { { switch (widget) { case WID_BV_LIST: - DrawEngineList(this->vehicle_type, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, &this->eng_list, this->vscroll->GetPosition(), min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->eng_list.size()), this->sel_engine, false, DEFAULT_GROUP); + DrawEngineList( + this->vehicle_type, + r.left + WD_FRAMERECT_LEFT, + r.right - WD_FRAMERECT_RIGHT, + r.top + WD_FRAMERECT_TOP, + &this->eng_list, + this->vscroll->GetPosition(), + static_cast(std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->eng_list.size())), + this->sel_engine, + false, + DEFAULT_GROUP + ); break; case WID_BV_SORT_ASCENDING_DESCENDING: @@ -1605,12 +1628,12 @@ struct BuildVehicleWindow : Window { NWidgetBase *nwi = this->GetWidget(WID_BV_PANEL); int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT, nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine, this->te); - needed_height = max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM); + needed_height = std::max(needed_height, (text_end - (int)nwi->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL); } if (needed_height != this->details_height) { // Details window are not high enough, enlarge them. int resize = needed_height - this->details_height; this->details_height = needed_height; - this->ReInit(0, resize); + this->ReInit(0, resize * FONT_HEIGHT_NORMAL); return; } } diff --git a/src/cargomonitor.h b/src/cargomonitor.h index 9a6a0c44d8..31053c46cb 100644 --- a/src/cargomonitor.h +++ b/src/cargomonitor.h @@ -48,8 +48,8 @@ enum CargoCompanyBits { CCB_COMPANY_LENGTH = 4, ///< Number of bits of the company field. }; -assert_compile(NUM_CARGO <= (1 << CCB_CARGO_TYPE_LENGTH)); -assert_compile(MAX_COMPANIES <= (1 << CCB_COMPANY_LENGTH)); +static_assert(NUM_CARGO <= (1 << CCB_CARGO_TYPE_LENGTH)); +static_assert(MAX_COMPANIES <= (1 << CCB_COMPANY_LENGTH)); /** diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp index f5f7c0c033..86bba0261b 100644 --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -556,9 +556,9 @@ void VehicleCargoList::InvalidateCache() template uint VehicleCargoList::Reassign(uint max_move, TileOrStationID) { - assert_tcompile(Tfrom != MTA_TRANSFER && Tto != MTA_TRANSFER); - assert_tcompile(Tfrom - Tto == 1 || Tto - Tfrom == 1); - max_move = min(this->action_counts[Tfrom], max_move); + static_assert(Tfrom != MTA_TRANSFER && Tto != MTA_TRANSFER); + static_assert(Tfrom - Tto == 1 || Tto - Tfrom == 1); + max_move = std::min(this->action_counts[Tfrom], max_move); this->action_counts[Tfrom] -= max_move; this->action_counts[Tto] += max_move; return max_move; @@ -574,7 +574,7 @@ uint VehicleCargoList::Reassign(uint max_move, TileOrStationID) template<> uint VehicleCargoList::Reassign(uint max_move, TileOrStationID next_station) { - max_move = min(this->action_counts[MTA_DELIVER], max_move); + max_move = std::min(this->action_counts[MTA_DELIVER], max_move); uint sum = 0; for (Iterator it(this->packets.begin()); sum < this->action_counts[MTA_TRANSFER] + max_move;) { @@ -603,7 +603,7 @@ uint VehicleCargoList::Reassignaction_counts[MTA_LOAD], max_move); + max_move = std::min(this->action_counts[MTA_LOAD], max_move); this->PopCargo(CargoReturn(this, dest, max_move, next)); return max_move; } @@ -616,7 +616,7 @@ uint VehicleCargoList::Return(uint max_move, StationCargoList *dest, StationID n */ uint VehicleCargoList::Shift(uint max_move, VehicleCargoList *dest) { - max_move = min(this->count, max_move); + max_move = std::min(this->count, max_move); this->PopCargo(CargoShift(this, dest, max_move)); return max_move; } @@ -633,12 +633,12 @@ uint VehicleCargoList::Unload(uint max_move, StationCargoList *dest, CargoPaymen { uint moved = 0; if (this->action_counts[MTA_TRANSFER] > 0) { - uint move = min(this->action_counts[MTA_TRANSFER], max_move); + uint move = std::min(this->action_counts[MTA_TRANSFER], max_move); this->ShiftCargo(CargoTransfer(this, dest, move)); moved += move; } if (this->action_counts[MTA_TRANSFER] == 0 && this->action_counts[MTA_DELIVER] > 0 && moved < max_move) { - uint move = min(this->action_counts[MTA_DELIVER], max_move - moved); + uint move = std::min(this->action_counts[MTA_DELIVER], max_move - moved); this->ShiftCargo(CargoDelivery(this, move, payment)); moved += move; } @@ -653,7 +653,7 @@ uint VehicleCargoList::Unload(uint max_move, StationCargoList *dest, CargoPaymen */ uint VehicleCargoList::Truncate(uint max_move) { - max_move = min(this->count, max_move); + max_move = std::min(this->count, max_move); this->PopCargo(CargoRemoval(this, max_move)); return max_move; } @@ -668,7 +668,7 @@ uint VehicleCargoList::Truncate(uint max_move) */ uint VehicleCargoList::Reroute(uint max_move, VehicleCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge) { - max_move = min(this->action_counts[MTA_TRANSFER], max_move); + max_move = std::min(this->action_counts[MTA_TRANSFER], max_move); this->ShiftCargo(VehicleCargoReroute(this, dest, max_move, avoid, avoid2, ge)); return max_move; } @@ -768,7 +768,7 @@ uint StationCargoList::ShiftCargo(Taction action, StationIDStack next, bool incl */ uint StationCargoList::Truncate(uint max_move, StationCargoAmountMap *cargo_per_source) { - max_move = min(max_move, this->count); + max_move = std::min(max_move, this->count); uint prev_count = this->count; uint moved = 0; uint loop = 0; @@ -839,7 +839,7 @@ uint StationCargoList::Reserve(uint max_move, VehicleCargoList *dest, TileIndex */ uint StationCargoList::Load(uint max_move, VehicleCargoList *dest, TileIndex load_place, StationIDStack next_station) { - uint move = min(dest->ActionCount(VehicleCargoList::MTA_LOAD), max_move); + uint move = std::min(dest->ActionCount(VehicleCargoList::MTA_LOAD), max_move); if (move > 0) { this->reserved_count -= move; dest->Reassign(move); diff --git a/src/cargopacket.h b/src/cargopacket.h index c058bafdbb..9892956211 100644 --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -423,7 +423,7 @@ public: uint Reroute(uint max_move, VehicleCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge); /** - * Are two the two CargoPackets mergeable in the context of + * Are the two CargoPackets mergeable in the context of * a list of CargoPackets for a Vehicle? * @param cp1 First CargoPacket. * @param cp2 Second CargoPacket. @@ -486,7 +486,7 @@ public: while (!next.IsEmpty()) { if (this->packets.find(next.Pop()) != this->packets.end()) return true; } - /* Packets for INVALID_STTION can go anywhere. */ + /* Packets for INVALID_STATION can go anywhere. */ return this->packets.find(INVALID_STATION) != this->packets.end(); } @@ -538,8 +538,8 @@ public: uint Reroute(uint max_move, StationCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge); /** - * Are two the two CargoPackets mergeable in the context of - * a list of CargoPackets for a Vehicle? + * Are the two CargoPackets mergeable in the context of + * a list of CargoPackets for a Station? * @param cp1 First CargoPacket. * @param cp2 Second CargoPacket. * @return True if they are mergeable. diff --git a/src/cargotype.cpp b/src/cargotype.cpp index 8421c482ed..e30b9899f1 100644 --- a/src/cargotype.cpp +++ b/src/cargotype.cpp @@ -12,7 +12,6 @@ #include "newgrf_cargo.h" #include "string_func.h" #include "strings_func.h" -#include #include "table/sprites.h" #include "table/strings.h" diff --git a/src/cargotype.h b/src/cargotype.h index 9645bf7c59..f6b3eaead5 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -59,7 +59,7 @@ struct CargoSpec { uint8 rating_colour; uint8 weight; ///< Weight of a single unit of this cargo type in 1/16 ton (62.5 kg). uint16 multiplier; ///< Capacity multiplier for vehicles. (8 fractional bits) - uint16 initial_payment; + uint32 initial_payment; ///< Initial payment rate before inflation is applied. uint8 transit_days[2]; bool is_freight; ///< Cargo type is considered to be freight (affects train freight multiplier). diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp index 7290414c00..497276ad66 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -125,7 +125,7 @@ static int32 ClickChangeDateCheat(int32 p1, int32 p2) */ static int32 ClickChangeMaxHlCheat(int32 p1, int32 p2) { - p1 = Clamp(p1, MIN_MAX_HEIGHTLEVEL, MAX_MAX_HEIGHTLEVEL); + p1 = Clamp(p1, MIN_MAP_HEIGHT_LIMIT, MAX_MAP_HEIGHT_LIMIT); /* Check if at least one mountain on the map is higher than the new value. * If yes, disallow the change. */ @@ -133,18 +133,18 @@ static int32 ClickChangeMaxHlCheat(int32 p1, int32 p2) if ((int32)TileHeight(t) > p1) { ShowErrorMessage(STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN, INVALID_STRING_ID, WL_ERROR); /* Return old, unchanged value */ - return _settings_game.construction.max_heightlevel; + return _settings_game.construction.map_height_limit; } } /* Execute the change and reload GRF Data */ - _settings_game.construction.max_heightlevel = p1; + _settings_game.construction.map_height_limit = p1; ReloadNewGRFData(); /* The smallmap uses an index from heightlevels to colours. Trigger rebuilding it. */ InvalidateWindowClassesData(WC_SMALLMAP, 2); - return _settings_game.construction.max_heightlevel; + return _settings_game.construction.map_height_limit; } /** Available cheats. */ @@ -182,17 +182,17 @@ struct CheatEntry { * Order matches with the values of #CheatNumbers */ static const CheatEntry _cheats_ui[] = { - {SLE_INT32, STR_CHEAT_MONEY, &_money_cheat_amount, &_cheats.money.been_used, &ClickMoneyCheat }, - {SLE_UINT8, STR_CHEAT_CHANGE_COMPANY, &_local_company, &_cheats.switch_company.been_used, &ClickChangeCompanyCheat }, - {SLE_BOOL, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, nullptr }, - {SLE_BOOL, STR_CHEAT_CROSSINGTUNNELS, &_cheats.crossing_tunnels.value, &_cheats.crossing_tunnels.been_used, nullptr }, - {SLE_BOOL, STR_CHEAT_NO_JETCRASH, &_cheats.no_jetcrash.value, &_cheats.no_jetcrash.been_used, nullptr }, - {SLE_BOOL, STR_CHEAT_SETUP_PROD, &_cheats.setup_prod.value, &_cheats.setup_prod.been_used, &ClickSetProdCheat }, - {SLE_UINT8, STR_CHEAT_EDIT_MAX_HL, &_settings_game.construction.max_heightlevel, &_cheats.edit_max_hl.been_used, &ClickChangeMaxHlCheat }, - {SLE_INT32, STR_CHEAT_CHANGE_DATE, &_cur_year, &_cheats.change_date.been_used, &ClickChangeDateCheat }, + {SLE_INT32, STR_CHEAT_MONEY, &_money_cheat_amount, &_cheats.money.been_used, &ClickMoneyCheat }, + {SLE_UINT8, STR_CHEAT_CHANGE_COMPANY, &_local_company, &_cheats.switch_company.been_used, &ClickChangeCompanyCheat }, + {SLE_BOOL, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, nullptr }, + {SLE_BOOL, STR_CHEAT_CROSSINGTUNNELS, &_cheats.crossing_tunnels.value, &_cheats.crossing_tunnels.been_used, nullptr }, + {SLE_BOOL, STR_CHEAT_NO_JETCRASH, &_cheats.no_jetcrash.value, &_cheats.no_jetcrash.been_used, nullptr }, + {SLE_BOOL, STR_CHEAT_SETUP_PROD, &_cheats.setup_prod.value, &_cheats.setup_prod.been_used, &ClickSetProdCheat }, + {SLE_UINT8, STR_CHEAT_EDIT_MAX_HL, &_settings_game.construction.map_height_limit, &_cheats.edit_max_hl.been_used, &ClickChangeMaxHlCheat }, + {SLE_INT32, STR_CHEAT_CHANGE_DATE, &_cur_year, &_cheats.change_date.been_used, &ClickChangeDateCheat }, }; -assert_compile(CHT_NUM_CHEATS == lengthof(_cheats_ui)); +static_assert(CHT_NUM_CHEATS == lengthof(_cheats_ui)); /** Widget definitions of the cheat GUI. */ static const NWidgetPart _nested_cheat_widgets[] = { @@ -203,12 +203,14 @@ static const NWidgetPart _nested_cheat_widgets[] = { NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_C_PANEL), SetDataTip(0x0, STR_CHEATS_TOOLTIP), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY), + NWidget(WWT_LABEL, COLOUR_GREY, WID_C_NOTE), SetFill(1, 1), SetDataTip(STR_CHEATS_NOTE, STR_NULL), SetPadding(WD_PAR_VSEP_NORMAL, 4, WD_PAR_VSEP_NORMAL, 4), + EndContainer(), }; /** GUI for the cheats. */ struct CheatWindow : Window { int clicked; - int header_height; int clicked_widget; uint line_height; int box_width; @@ -223,8 +225,7 @@ struct CheatWindow : Window { { if (widget != WID_C_PANEL) return; - int y = r.top + WD_FRAMERECT_TOP + this->header_height; - DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_LEFT, r.top + WD_FRAMERECT_TOP, y, STR_CHEATS_WARNING, TC_FROMSTRING, SA_CENTER); + int y = r.top + WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL; bool rtl = _current_text_dir == TD_RTL; uint box_left = rtl ? r.right - this->box_width - 5 : r.left + 5; @@ -291,9 +292,9 @@ struct CheatWindow : Window { switch (ce->type) { case SLE_BOOL: SetDParam(0, STR_CONFIG_SETTING_ON); - width = max(width, GetStringBoundingBox(ce->str).width); + width = std::max(width, GetStringBoundingBox(ce->str).width); SetDParam(0, STR_CONFIG_SETTING_OFF); - width = max(width, GetStringBoundingBox(ce->str).width); + width = std::max(width, GetStringBoundingBox(ce->str).width); break; default: @@ -301,37 +302,36 @@ struct CheatWindow : Window { /* Display date for change date cheat */ case STR_CHEAT_CHANGE_DATE: SetDParam(0, ConvertYMDToDate(MAX_YEAR, 11, 31)); - width = max(width, GetStringBoundingBox(ce->str).width); + width = std::max(width, GetStringBoundingBox(ce->str).width); break; /* Draw coloured flag for change company cheat */ case STR_CHEAT_CHANGE_COMPANY: SetDParamMaxValue(0, MAX_COMPANIES); - width = max(width, GetStringBoundingBox(ce->str).width + 10 + 10); + width = std::max(width, GetStringBoundingBox(ce->str).width + 10 + 10); break; default: SetDParam(0, INT64_MAX); - width = max(width, GetStringBoundingBox(ce->str).width); + width = std::max(width, GetStringBoundingBox(ce->str).width); break; } break; } } - this->line_height = max(GetSpriteSize(SPR_BOX_CHECKED).height, GetSpriteSize(SPR_BOX_EMPTY).height); - this->line_height = max(this->line_height, SETTING_BUTTON_HEIGHT); - this->line_height = max(this->line_height, FONT_HEIGHT_NORMAL) + WD_PAR_VSEP_NORMAL; + this->line_height = std::max(GetSpriteSize(SPR_BOX_CHECKED).height, GetSpriteSize(SPR_BOX_EMPTY).height); + this->line_height = std::max(this->line_height, SETTING_BUTTON_HEIGHT); + this->line_height = std::max(this->line_height, FONT_HEIGHT_NORMAL) + WD_PAR_VSEP_NORMAL; size->width = width + 20 + this->box_width + SETTING_BUTTON_WIDTH /* stuff on the left */ + 10 /* extra spacing on right */; - this->header_height = GetStringHeight(STR_CHEATS_WARNING, size->width - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT) + WD_PAR_VSEP_WIDE; - size->height = this->header_height + WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL + WD_FRAMERECT_BOTTOM + this->line_height * lengthof(_cheats_ui); + size->height = WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL + WD_FRAMERECT_BOTTOM + this->line_height * lengthof(_cheats_ui); } void OnClick(Point pt, int widget, int click_count) override { const NWidgetBase *wid = this->GetWidget(WID_C_PANEL); - uint btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) / this->line_height; + uint btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - WD_PAR_VSEP_NORMAL) / this->line_height; int x = pt.x - wid->pos_x; bool rtl = _current_text_dir == TD_RTL; if (rtl) x = wid->current_x - x; diff --git a/src/citymania/CMakeLists.txt b/src/citymania/CMakeLists.txt new file mode 100644 index 0000000000..e1eb7f26d4 --- /dev/null +++ b/src/citymania/CMakeLists.txt @@ -0,0 +1,50 @@ +add_subdirectory(extensions) + +add_files( + cm_bitstream.hpp + cm_bitstream.cpp + cm_console_cmds.hpp + cm_console_cmds.cpp + cm_event.hpp + cm_export.hpp + cm_export.cpp + cm_game.hpp + cm_game.cpp + cm_main.hpp + cm_main.cpp + cm_type.hpp + cm_saveload.hpp + cm_saveload.cpp + cm_settings.hpp + + # CityMania client + cm_base64.hpp + cm_base64.cpp + cm_blueprint.hpp + cm_blueprint.cpp + cm_cargo_table_gui.hpp + cm_cargo_table_gui.cpp + cm_commands_gui.hpp + cm_commands_gui.cpp + cm_highlight.hpp + cm_highlight.cpp + cm_highlight_type.hpp + cm_hotkeys.hpp + cm_hotkeys.cpp + cm_locations.hpp + cm_locations.cpp + cm_minimap.hpp + cm_minimap.cpp + cm_misc_gui.hpp + cm_misc_gui.cpp + cm_station_gui.hpp + cm_station_gui.cpp + cm_tooltips.hpp + cm_tooltips.cpp + cm_newgrf_revisions.hpp + cm_watch_gui.hpp + cm_watch_gui.cpp + cm_zoning.hpp + cm_zoning_cmd.cpp + cm_zoning_gui.cpp +) diff --git a/src/cargo_table_gui.cpp b/src/citymania/cm_cargo_table_gui.cpp similarity index 88% rename from src/cargo_table_gui.cpp rename to src/citymania/cm_cargo_table_gui.cpp index d9224de3fc..9eac5a8e97 100644 --- a/src/cargo_table_gui.cpp +++ b/src/citymania/cm_cargo_table_gui.cpp @@ -1,18 +1,21 @@ -/* $Id: cargo_table_gui.cpp 21909 2011-01-26 08:14:36Z TheDude $ */ +#include "../stdafx.h" -#include "stdafx.h" -#include "window_gui.h" -#include "window_func.h" -#include "strings_func.h" -#include "company_func.h" -#include "company_base.h" -#include "table/strings.h" -#include "textbuf_gui.h" -#include "cargotype.h" -#include "zoom_func.h" -#include "widgets/dropdown_type.h" +#include "cm_cargo_table_gui.hpp" -#include "widgets/cargo_table_widget.h" +#include "../window_gui.h" +#include "../window_func.h" +#include "../strings_func.h" +#include "../company_func.h" +#include "../company_base.h" +#include "../table/strings.h" +#include "../textbuf_gui.h" +#include "../cargotype.h" +#include "../zoom_func.h" +#include "../widgets/dropdown_type.h" + +#include "../widgets/cargo_table_widget.h" + +namespace citymania { static const uint CT_LINESPACE = 3; ///< Amount of vertical space for a horizontal (sub-)total line. static const uint CT_ICON_MARGIN = 2; ///< Amount of space between cargo icon and text @@ -62,7 +65,7 @@ struct CargosWindow : Window { void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) { Dimension icon_size = this->GetMaxIconSize(); - int line_height = max(FONT_HEIGHT_NORMAL, (int)icon_size.height); + int line_height = std::max(FONT_HEIGHT_NORMAL, (int)icon_size.height); int icon_space = icon_size.width + ScaleGUITrad(CT_ICON_MARGIN); switch(widget) { case WID_CT_HEADER_AMOUNT: @@ -75,9 +78,9 @@ struct CargosWindow : Window { case WID_CT_LIST: { for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) { const CargoSpec *cs = _sorted_cargo_specs[i]; - size->width = max(GetStringBoundingBox(cs->name).width + icon_space, size->width); + size->width = std::max(GetStringBoundingBox(cs->name).width + icon_space, size->width); } - size->width = max(GetStringBoundingBox(STR_TOOLBAR_CARGOS_HEADER_TOTAL_MONTH).width, size->width); + size->width = std::max(GetStringBoundingBox(STR_TOOLBAR_CARGOS_HEADER_TOTAL_MONTH).width, size->width); break; } } @@ -102,8 +105,8 @@ struct CargosWindow : Window { Dimension size = {0, 0}; FOR_ALL_CARGOSPECS(cs) { Dimension icon_size = GetSpriteSize(cs->GetCargoIcon()); - size.width = max(size.width, icon_size.width); - size.height = max(size.height, icon_size.height); + size.width = std::max(size.width, icon_size.width); + size.height = std::max(size.height, icon_size.height); } return size; } @@ -115,7 +118,7 @@ struct CargosWindow : Window { Money sum_cargo_income = 0; int y = r.top; Dimension max_icon_size = this->GetMaxIconSize(); - int line_height = max(FONT_HEIGHT_NORMAL, (int)(max_icon_size.height)); + int line_height = std::max(FONT_HEIGHT_NORMAL, (int)(max_icon_size.height)); int icon_space = max_icon_size.width + ScaleGUITrad(CT_ICON_MARGIN); int text_y_ofs = (line_height - FONT_HEIGHT_NORMAL); @@ -224,3 +227,4 @@ void ShowCompanyCargos(CompanyID company) AllocateWindowDescFront(&_cargos_desc, company); } +} // namespace citymania diff --git a/src/cargo_table_gui.h b/src/citymania/cm_cargo_table_gui.hpp similarity index 62% rename from src/cargo_table_gui.h rename to src/citymania/cm_cargo_table_gui.hpp index a997899aeb..f8963aa273 100644 --- a/src/cargo_table_gui.h +++ b/src/citymania/cm_cargo_table_gui.hpp @@ -1,14 +1,15 @@ -/* $Id: cargo_table_gui.h 21700 2011-01-03 11:55:08Z $ */ - /** @file cargo_table_gui.h GUI Functions related to cargos. */ -#ifndef CARGO_TABLE_H -#define CARGO_TABLE_H +#ifndef CM_CARGO_TABLE_HPP +#define CM_CARGO_TABLE_HPP #include "company_type.h" -#include "gfx_type.h" + +namespace citymania { void ShowCompanyCargos(CompanyID company); void InvalidateCargosWindows(CompanyID cid); +} // namespace citymania + #endif /* CARGO_TABLE_H */ diff --git a/src/commands_gui.cpp b/src/citymania/cm_commands_gui.cpp similarity index 89% rename from src/commands_gui.cpp rename to src/citymania/cm_commands_gui.cpp index 0d1134a494..c39a687850 100644 --- a/src/commands_gui.cpp +++ b/src/citymania/cm_commands_gui.cpp @@ -1,7 +1,9 @@ -/* $Id: commands_gui.cpp 21909 2011-01-26 08:14:36Z xi $ */ - #include "stdafx.h" -#include + +#include "citymania/cm_commands_gui.hpp" + +#include "citymania/cm_base64.hpp" + #include "core/geometry_func.hpp" //maxdim #include "settings_type.h" #include "settings_func.h" //saveconfig @@ -18,10 +20,12 @@ #include "window_func.h" #include "window_gui.h" -#include "citymania/cm_base64.hpp" +#include -bool _novahost = false; +namespace citymania { + +bool _novahost = true; IniFile *_inilogin = NULL; static const int HTTPBUFLEN = 128; @@ -171,10 +175,8 @@ enum IniLoginKeys { char _inilogindata[6][64]; -void ShowLoginWindow(); void AccountLogin(CommunityName community); void IniReloadLogin(); -char * GetLoginItem(const char * item); bool novahost() { return _novahost; @@ -203,6 +205,52 @@ void UrlEncode(char * buf, const char * buflast, const char * url){ *buf = '\0'; } + +//ini login hadling +void IniLoginInitiate(){ + static const char * const list_login[] = { + CFG_LOGIN_KEY, + NULL + }; + + if(_inilogin != NULL) return; //it was already set + _inilogin = new IniFile(list_login); + _inilogin->LoadFromDisk(CFG_LOGIN_FILE, BASE_DIR); + IniReloadLogin(); +} + +std::string GetLoginItem(const char *itemname){ + IniGroup *group = _inilogin->GetGroup(CFG_LOGIN_KEY); + if(group == NULL) return ""; + IniItem *item = group->GetItem(itemname, true); + if(item == NULL) return ""; + return item->value.value_or(""); +} + +void IniReloadLogin(){ + char str[64]; + for(int i = 0, len = lengthof(INI_LOGIN_KEYS); i < len; i++){ + auto itemvalue = GetLoginItem(INI_LOGIN_KEYS[i]); + if (itemvalue.empty()){ + GetString(str, STR_CM_LOGIN_WINDOW_NOT_SET, lastof(str)); + } + else{ + strecpy(str, itemvalue.c_str(), lastof(str)); + } + strecpy(_inilogindata[i], str, lastof(_inilogindata[i])); + } +} + +void SetLoginItem(const char * itemname, const char * value){ + IniGroup *group = _inilogin->GetGroup(CFG_LOGIN_KEY); + if(group == NULL) return; + IniItem *item = group->GetItem(itemname, true); + if(item == NULL) return; + item->SetValue(value); + _inilogin->SaveToDisk(str_fmt("%s%s", _personal_dir.c_str(), CFG_LOGIN_FILE)); + IniReloadLogin(); +} + /** Commands toolbar window handler. */ struct CommandsToolbarWindow : Window { @@ -319,7 +367,7 @@ struct CommandsToolbarWindow : Window { strecpy(ip, NOVAPOLIS_IPV4_PRIMARY, lastof(ip)); // else strecpy(ip, NOVAPOLIS_IPV4_SECONDARY, lastof(ip)); - NetworkClientConnectGame(NetworkAddress(ip, (3980 + widget - CTW_NS0)), COMPANY_SPECTATOR); + NetworkClientConnectGame(ip, (3980 + widget - CTW_NS0), COMPANY_SPECTATOR); } else if (widget >= CTW_CARGO_FIRST) { int i = widget - CTW_CARGO_FIRST; @@ -533,8 +581,8 @@ static WindowDesc _commands_toolbar_desc( void ShowCommandsToolbar() { - DeleteWindowByClass(WC_COMMAND_TOOLBAR); - AllocateWindowDescFront(&_commands_toolbar_desc, 0); + // DeleteWindowByClass(WC_COMMAND_TOOLBAR); + // AllocateWindowDescFront(&_commands_toolbar_desc, 0); } // login window @@ -567,7 +615,7 @@ public: } virtual void OnFailure() { - ShowErrorMessage(STR_LOGINERROR_NOCONNECT, INVALID_STRING_ID, WL_ERROR); + ShowErrorMessage(STR_CM_LOGIN_ERROR_SIGN_IN_FAILED, INVALID_STRING_ID, WL_ERROR); } void LoginAlready(){ @@ -577,7 +625,7 @@ public: NetworkClientSendChatToServer(msg); } else{ - ShowErrorMessage(STR_LOGINERROR_BADINPUT, INVALID_STRING_ID, WL_ERROR); + ShowErrorMessage(STR_CM_LOGIN_ERROR_BAD_INPUT, INVALID_STRING_ID, WL_ERROR); } this->proccessing = false; } @@ -629,12 +677,12 @@ void AccountLogin(CommunityName community){ NetworkClientSendChatToServer(uri); return; case NICE: - seprintf(uri, lastof(uri), NICE_HTTP_LOGIN, GetLoginItem(NICE_LOGIN), GetLoginItem(NICE_PW)); + seprintf(uri, lastof(uri), NICE_HTTP_LOGIN, GetLoginItem(NICE_LOGIN).c_str(), GetLoginItem(NICE_PW).c_str()); break; case BTPRO: { seprintf(uri, lastof(uri), BTPRO_HTTP_LOGIN, - btpro_encode(GetLoginItem(BTPRO_LOGIN)).c_str(), - btpro_encode(GetLoginItem(BTPRO_PW)).c_str()); + btpro_encode(GetLoginItem(BTPRO_LOGIN).c_str()).c_str(), + btpro_encode(GetLoginItem(BTPRO_PW).c_str()).c_str()); break; } default: @@ -644,51 +692,6 @@ void AccountLogin(CommunityName community){ login.InitiateLoginSequence(); } -//ini login hadling -void IniLoginInitiate(){ - static const char * const list_login[] = { - CFG_LOGIN_KEY, - NULL - }; - - if(_inilogin != NULL) return; //it was already set - _inilogin = new IniFile(list_login); - _inilogin->LoadFromDisk(CFG_LOGIN_FILE, BASE_DIR); - IniReloadLogin(); -} - -void IniReloadLogin(){ - char str[64]; - const char * itemvalue; - for(int i = 0, len = lengthof(INI_LOGIN_KEYS); i < len; i++){ - itemvalue = GetLoginItem(INI_LOGIN_KEYS[i]); - if(itemvalue == NULL){ - GetString(str, STR_LOGIN_NOTSET, lastof(str)); - } - else{ - strecpy(str, itemvalue, lastof(str)); - } - strecpy(_inilogindata[i], str, lastof(_inilogindata[i])); - } -} - -char * GetLoginItem(const char * itemname){ - IniGroup *group = _inilogin->GetGroup(CFG_LOGIN_KEY); - if(group == NULL) return NULL; - IniItem *item = group->GetItem(itemname, true); - if(item == NULL || item->value == NULL) return NULL; - return item->value; -} - -void SetLoginItem(const char * itemname, const char * value){ - IniGroup *group = _inilogin->GetGroup(CFG_LOGIN_KEY); - if(group == NULL) return; - IniItem *item = group->GetItem(itemname, true); - if(item == NULL) return; - item->SetValue(value); - _inilogin->SaveToDisk(str_fmt("%s%s", _personal_dir, CFG_LOGIN_FILE)); - IniReloadLogin(); -} //login window struct LoginWindow : Window { LoginWindowQueryWidgets query_widget; @@ -696,11 +699,11 @@ struct LoginWindow : Window { LoginWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) { this->InitNested(window_number); - if(_novahost || !_networking){ - this->DisableWidget(LWW_NICE); - this->DisableWidget(LWW_BTPRO); - } - if(!_novahost || !_networking) this->DisableWidget(LWW_NOVAPOLIS); + // if(_novahost || !_networking){ + // this->DisableWidget(LWW_NICE); + // this->DisableWidget(LWW_BTPRO); + // } + // if(!_novahost || !_networking) this->DisableWidget(LWW_NOVAPOLIS); } virtual void SetStringParameters(int widget) const @@ -710,19 +713,19 @@ struct LoginWindow : Window { SetDParamStr(0, _inilogindata[NOVAPOLISUSER]); break; case LWW_NOVAPOLIS_PW: - SetDParam(0, (GetLoginItem(NOVAPOLIS_PW) == NULL ? STR_LOGIN_NOTSET : STR_LOGIN_SET)); + SetDParam(0, (GetLoginItem(NOVAPOLIS_PW).empty() ? STR_CM_LOGIN_WINDOW_NOT_SET : STR_CM_LOGIN_WINDOW_SET)); break; case LWW_NICE_LOGIN: SetDParamStr(0, _inilogindata[NICEUSER]); break; case LWW_NICE_PW: - SetDParam(0, (GetLoginItem(NICE_PW) == NULL ? STR_LOGIN_NOTSET : STR_LOGIN_SET)); + SetDParam(0, (GetLoginItem(NICE_PW).empty() ? STR_CM_LOGIN_WINDOW_NOT_SET : STR_CM_LOGIN_WINDOW_SET)); break; case LWW_BTPRO_LOGIN: SetDParamStr(0, _inilogindata[BTPROUSER]); break; case LWW_BTPRO_PW: - SetDParam(0, (GetLoginItem(BTPRO_PW) == NULL ? STR_LOGIN_NOTSET : STR_LOGIN_SET)); + SetDParam(0, (GetLoginItem(BTPRO_PW).empty() ? STR_CM_LOGIN_WINDOW_NOT_SET : STR_CM_LOGIN_WINDOW_SET)); break; } } @@ -731,7 +734,7 @@ struct LoginWindow : Window { { switch (widget) { case LWW_NOVAPOLIS: - if(_novahost && _networking) AccountLogin(CITYMANIA); + if(/*_novahost && */_networking) AccountLogin(CITYMANIA); break; case LWW_NICE: if(_networking) AccountLogin(NICE); @@ -740,13 +743,16 @@ struct LoginWindow : Window { if(_networking) AccountLogin(BTPRO); break; case LWW_NOVAPOLIS_LOGIN: - case LWW_NOVAPOLIS_PW: case LWW_NICE_LOGIN: - case LWW_NICE_PW: case LWW_BTPRO_LOGIN: + this->query_widget = (LoginWindowQueryWidgets)widget; + ShowQueryString(STR_EMPTY, STR_CM_LOGIN_WINDOW_CHANGE_USERNAME, 32, this, CS_ALPHANUMERAL, QSF_NONE); + break; + case LWW_NOVAPOLIS_PW: + case LWW_NICE_PW: case LWW_BTPRO_PW: this->query_widget = (LoginWindowQueryWidgets)widget; - ShowQueryString(STR_EMPTY, STR_LOGIN_CHANGE_USERNAME, 32, this, CS_ALPHANUMERAL, QSF_NONE); + ShowQueryString(STR_EMPTY, STR_CM_LOGIN_WINDOW_CHANGE_PASSWORD, 32, this, CS_ALPHANUMERAL, QSF_NONE); break; } } @@ -780,55 +786,55 @@ struct LoginWindow : Window { static const NWidgetPart _nested_login_window_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_LOGINWINDOW_CAPTION, 0), + NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_CM_LOGIN_WINDOW_CAPTION, 0), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPadding(10), //novapolis NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_TEXT, COLOUR_BROWN, LWW_USERNAME), SetDataTip(STR_LOGIN_USERNAME, 0), + NWidget(WWT_TEXT, COLOUR_BROWN, LWW_USERNAME), SetDataTip(STR_CM_LOGIN_WINDOW_USERNAME, 0), NWidget(NWID_SPACER), SetMinimalSize(20, 0), - NWidget(WWT_TEXT, COLOUR_BROWN, LWW_PASSWORD), SetDataTip(STR_LOGIN_PASSWORD, 0), + NWidget(WWT_TEXT, COLOUR_BROWN, LWW_PASSWORD), SetDataTip(STR_CM_LOGIN_WINDOW_PASSWORD, 0), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 5), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NOVAPOLIS_LOGIN), SetMinimalSize(60, 20), SetFill(1, 0), SetDataTip(STR_LOGIN_USERNAME_DISPLAY, STR_LOGIN_CHANGE_USERNAME), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NOVAPOLIS_LOGIN), SetMinimalSize(60, 20), SetFill(1, 0), SetDataTip(STR_CM_LOGIN_WINDOW_USERNAME_DISPLAY, STR_CM_LOGIN_WINDOW_CHANGE_USERNAME_HELPTEXT), NWidget(NWID_SPACER), SetMinimalSize(20, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NOVAPOLIS_PW), SetMinimalSize(30, 20), SetFill(1, 0), SetDataTip(STR_LOGIN_PASSWORD_DISPLAY, STR_LOGIN_CHANGE_PASSWORD), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NOVAPOLIS_PW), SetMinimalSize(30, 20), SetFill(1, 0), SetDataTip(STR_CM_LOGIN_WINDOW_PASSWORD_DISPLAY, STR_CM_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 10), - NWidget(WWT_PUSHTXTBTN, COLOUR_PURPLE, LWW_NOVAPOLIS), SetMinimalSize(100, 30), SetFill(1, 0), SetDataTip(STR_LOGINWINDOW_CITYMANIA, STR_LOGIN_SEND_LOGIN_TT), + NWidget(WWT_PUSHTXTBTN, COLOUR_PURPLE, LWW_NOVAPOLIS), SetMinimalSize(100, 30), SetFill(1, 0), SetDataTip(STR_CM_LOGIN_WINDOW_CITYMANIA, STR_CM_LOGIN_WINDOW_SIGN_IN_HELPTEXT), NWidget(NWID_SPACER), SetMinimalSize(0, 10), //n-ice NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_TEXT, COLOUR_BROWN, LWW_USERNAME), SetDataTip(STR_LOGIN_USERNAME, 0), + NWidget(WWT_TEXT, COLOUR_BROWN, LWW_USERNAME), SetDataTip(STR_CM_LOGIN_WINDOW_USERNAME, 0), NWidget(NWID_SPACER), SetMinimalSize(20, 0), - NWidget(WWT_TEXT, COLOUR_BROWN, LWW_PASSWORD), SetDataTip(STR_LOGIN_PASSWORD, 0), + NWidget(WWT_TEXT, COLOUR_BROWN, LWW_PASSWORD), SetDataTip(STR_CM_LOGIN_WINDOW_PASSWORD, 0), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 5), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NICE_LOGIN), SetMinimalSize(60, 20), SetFill(1, 0), SetDataTip(STR_LOGIN_USERNAME_DISPLAY, STR_LOGIN_CHANGE_USERNAME), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NICE_LOGIN), SetMinimalSize(60, 20), SetFill(1, 0), SetDataTip(STR_CM_LOGIN_WINDOW_USERNAME_DISPLAY, STR_CM_LOGIN_WINDOW_CHANGE_USERNAME_HELPTEXT), NWidget(NWID_SPACER), SetMinimalSize(20, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NICE_PW), SetMinimalSize(30, 20), SetFill(1, 0), SetDataTip(STR_LOGIN_PASSWORD_DISPLAY, STR_LOGIN_CHANGE_PASSWORD), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NICE_PW), SetMinimalSize(30, 20), SetFill(1, 0), SetDataTip(STR_CM_LOGIN_WINDOW_PASSWORD_DISPLAY, STR_CM_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 10), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, LWW_NICE), SetMinimalSize(100, 30), SetFill(1, 0), SetDataTip(STR_LOGINWINDOW_NICE, STR_LOGIN_SEND_LOGIN_TT), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, LWW_NICE), SetMinimalSize(100, 30), SetFill(1, 0), SetDataTip(STR_CM_LOGIN_WINDOW_NICE, STR_CM_LOGIN_WINDOW_SIGN_IN_HELPTEXT), NWidget(NWID_SPACER), SetMinimalSize(0, 10), //btpro NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_TEXT, COLOUR_BROWN, LWW_USERNAME), SetDataTip(STR_LOGIN_USERNAME, 0), + NWidget(WWT_TEXT, COLOUR_BROWN, LWW_USERNAME), SetDataTip(STR_CM_LOGIN_WINDOW_USERNAME, 0), NWidget(NWID_SPACER), SetMinimalSize(20, 0), - NWidget(WWT_TEXT, COLOUR_BROWN, LWW_PASSWORD), SetDataTip(STR_LOGIN_PASSWORD, 0), + NWidget(WWT_TEXT, COLOUR_BROWN, LWW_PASSWORD), SetDataTip(STR_CM_LOGIN_WINDOW_PASSWORD, 0), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 5), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_BTPRO_LOGIN), SetMinimalSize(60, 20), SetFill(1, 0), SetDataTip(STR_LOGIN_USERNAME_DISPLAY, STR_LOGIN_CHANGE_USERNAME), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_BTPRO_LOGIN), SetMinimalSize(60, 20), SetFill(1, 0), SetDataTip(STR_CM_LOGIN_WINDOW_USERNAME_DISPLAY, STR_CM_LOGIN_WINDOW_CHANGE_USERNAME_HELPTEXT), NWidget(NWID_SPACER), SetMinimalSize(20, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_BTPRO_PW), SetMinimalSize(30, 20), SetFill(1, 0), SetDataTip(STR_LOGIN_PASSWORD_DISPLAY, STR_LOGIN_CHANGE_PASSWORD), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_BTPRO_PW), SetMinimalSize(30, 20), SetFill(1, 0), SetDataTip(STR_CM_LOGIN_WINDOW_PASSWORD_DISPLAY, STR_CM_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 10), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, LWW_BTPRO), SetMinimalSize(100, 30), SetFill(1, 0), SetDataTip(STR_LOGINWINDOW_BTPRO, STR_LOGIN_SEND_LOGIN_TT), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, LWW_BTPRO), SetMinimalSize(100, 30), SetFill(1, 0), SetDataTip(STR_CM_LOGIN_WINDOW_BTPRO, STR_CM_LOGIN_WINDOW_SIGN_IN_HELPTEXT), EndContainer(), EndContainer(), }; @@ -846,3 +852,5 @@ void ShowLoginWindow() DeleteWindowByClass(WC_LOGIN_WINDOW); AllocateWindowDescFront(&_login_window_desc, 0); } + +} // namespace citymania diff --git a/src/citymania/cm_commands_gui.hpp b/src/citymania/cm_commands_gui.hpp new file mode 100644 index 0000000000..8dc4b17f34 --- /dev/null +++ b/src/citymania/cm_commands_gui.hpp @@ -0,0 +1,11 @@ +#ifndef CM_COMMANDS_GUI_HPP +#define CM_COMMANDS_GUI_HPP + +namespace citymania { + +void ShowCommandsToolbar(); +void ShowLoginWindow(); + +} // namespace citymania + +#endif /*ZONING_H_*/ diff --git a/src/citymania/cm_console_cmds.cpp b/src/citymania/cm_console_cmds.cpp index 71aafc25f2..3cae1f1484 100644 --- a/src/citymania/cm_console_cmds.cpp +++ b/src/citymania/cm_console_cmds.cpp @@ -10,8 +10,14 @@ #include "../fileio_type.h" #include "../map_type.h" #include "../map_func.h" +#include "../strings_func.h" +#include "../town.h" #include "../tree_map.h" +#include +#include +#include + #include "../safeguards.h" bool ReadHeightMap(DetailedFileType dft, const char *filename, uint *x, uint *y, byte **map); @@ -97,7 +103,7 @@ bool ConTreeMap(byte argc, char *argv[]) { auto mx = x - x * TileX(tile) / MapSizeX() - 1; auto my = y * TileY(tile) / MapSizeY(); auto t = map[mx + my * x]; - auto tree_count = min(t / 51, 4); + auto tree_count = std::min(t / 51, 4); // auto tree_growth = (uint)(t % 51) * 7 / 50; for (auto i = 0; i < tree_count; i++) { DoCommand(tile, TREE_INVALID, tile, DC_EXEC, CMD_PLANT_TREE); @@ -108,4 +114,87 @@ bool ConTreeMap(byte argc, char *argv[]) { return true; } +extern void (*UpdateTownGrowthRate)(Town *t); + +bool ConResetTownGrowth(byte argc, char *argv[]) { + if (argc == 0) { + IConsoleHelp("Resets growth to normal for all towns."); + IConsoleHelp("Usage: 'cmresettowngrowth'"); + return true; + } + + if (argc > 1) return false; + + for (Town *town : Town::Iterate()) { + ClrBit(town->flags, TOWN_CUSTOM_GROWTH); + UpdateTownGrowthRate(town); + } + return true; +} + +struct FakeCommand { + Date date; + DateFract date_fract; + uint company_id; + uint cmd; + TileIndex tile; + uint32 p1, p2; + std::string text; +}; + +static std::queue _fake_commands; + +void ExecuteFakeCommands(Date date, DateFract date_fract) { + auto backup_company = _current_company; + while (!_fake_commands.empty() && _fake_commands.front().date <= date && _fake_commands.front().date_fract <= date_fract) { + auto &x = _fake_commands.front(); + if (x.date < date || x.date_fract < date_fract) IConsolePrintF(CC_WARNING, + "Queued command is earlier than execution date: %d/%hu vs %d/%hu", + x.date, x.date_fract, date, date_fract); + fprintf(stderr, "Executing command: company=%u cmd=%u tile=%u p1=%u p2=%u text=%s ... ", x.company_id, x.cmd, x.tile, x.p1, x.p2, x.text.c_str()); + _current_company = (CompanyID)x.company_id; + auto res = DoCommandPInternal(x.tile, x.p1, x.p2, x.cmd | CMD_NETWORK_COMMAND, nullptr, x.text.c_str(), false, false); + if (res.Failed()) { + if (res.GetErrorMessage() != INVALID_STRING_ID) { + char buf[DRAW_STRING_BUFFER]; + GetString(buf, res.GetErrorMessage(), lastof(buf)); + fprintf(stderr, "%s\n", buf); + } else { + fprintf(stderr, "FAIL\n"); + } + } else { + fprintf(stderr, "OK\n"); + } + _fake_commands.pop(); + } + _current_company = backup_company; +} + +bool ConLoadCommands(byte argc, char *argv[]) { + if (argc == 0) { + IConsoleHelp("Loads a file with command queue to execute"); + IConsoleHelp("Usage: 'cmloadcommands '"); + return true; + } + + if (argc != 2) return false; + + std::queue().swap(_fake_commands); // clear queue + + std::ifstream file(argv[1], std::ios::in); + std::string str; + while(std::getline(file, str)) + { + std::istringstream ss(str); + FakeCommand cmd; + ss >> cmd.date >> cmd.date_fract >> cmd.company_id >> cmd.cmd >> cmd.p1 >> cmd.p2 >> cmd.tile; + std::string s; + ss.get(); + std::getline(ss, cmd.text); + // fprintf(stderr, "PARSED: company=%u cmd=%u tile=%u p1=%u p2=%u text=%s\n", cmd.company_id, cmd.cmd, cmd.tile, cmd.p1, cmd.p2, cmd.text.c_str()); + _fake_commands.push(cmd); + } + return true; +} + } // namespace citymania diff --git a/src/citymania/cm_console_cmds.hpp b/src/citymania/cm_console_cmds.hpp index 95a1e45ffa..f14df23552 100644 --- a/src/citymania/cm_console_cmds.hpp +++ b/src/citymania/cm_console_cmds.hpp @@ -1,11 +1,16 @@ #ifndef CM_CONSOLE_CMDS_HPP #define CM_CONSOLE_CMDS_HPP +#include "../date_type.h" + namespace citymania { bool ConStep(byte argc, char *argv[]); bool ConExport(byte argc, char *argv[]); bool ConTreeMap(byte argc, char *argv[]); +bool ConResetTownGrowth(byte argc, char *argv[]); +bool ConLoadCommands(byte argc, char *argv[]); +void ExecuteFakeCommands(Date date, DateFract date_fract); } // namespace citymania diff --git a/src/citymania/cm_export.cpp b/src/citymania/cm_export.cpp index 1e247e1868..382ea12938 100644 --- a/src/citymania/cm_export.cpp +++ b/src/citymania/cm_export.cpp @@ -3,6 +3,7 @@ #include "cm_export.hpp" #include "../cargotype.h" +#include "../house.h" #include "../gfx_func.h" #include "../gfx_type.h" #include "../engine_base.h" @@ -139,6 +140,25 @@ public: #define JKV(j, field) j.kv(#field, field) void WriteHouseSpecInfo(JsonWriter &j) { + j.begin_list_with_key("house_specs"); + for (uint i = 0; i < NUM_HOUSES; i++) { + const HouseSpec *hs = HouseSpec::Get(i); + j.begin_dict(); + j.kv("min_year", hs->min_year); + j.kv("max_year", hs->max_year); + j.kv("population", hs->population); + j.kv("removal_cost", hs->removal_cost); + j.kv("name", hs->building_name); + j.kv("mail_generation", hs->mail_generation); + j.kv("flags", hs->building_flags); + j.kv("availability", hs->building_availability); + j.kv("enabled", hs->enabled); + j.end_dict(); + } + j.end_list(); +} + +void WriteCargoSpecInfo(JsonWriter &j) { j.begin_list_with_key("cargo_specs"); const CargoSpec *cs; char buffer[128]; @@ -213,7 +233,7 @@ void WriteEngineInfo(JsonWriter &j) { if (e->type != VEH_TRAIN) continue; j.begin_dict(); JKV(j, e->index); - j.kv("name", (e->name ? e->name : "null")); + j.kv("name", e->name); j.kv("cost", e->GetCost()); j.kv("running_cost", e->GetRunningCost()); { @@ -266,6 +286,7 @@ void WriteEngineInfo(JsonWriter &j) { void ExportOpenttdData(const std::string &filename) { data_export::JsonWriter j(filename); data_export::WriteHouseSpecInfo(j); + data_export::WriteCargoSpecInfo(j); data_export::WritePaletteInfo(j); data_export::WriteEngineInfo(j); } diff --git a/src/citymania/cm_game.hpp b/src/citymania/cm_game.hpp index a9835e0781..5a7f03393d 100644 --- a/src/citymania/cm_game.hpp +++ b/src/citymania/cm_game.hpp @@ -33,8 +33,8 @@ public: auto a = this->towns_growth_tiles.find(tile); auto b = this->towns_growth_tiles_last_month.find(tile); auto as = (a == this->towns_growth_tiles.end() ? TownGrowthTileState::NONE : (*a).second); - auto bs = (b == this->towns_growth_tiles.end() ? TownGrowthTileState::NONE : (*b).second); - return max(as, bs); + auto bs = (b == this->towns_growth_tiles_last_month.end() ? TownGrowthTileState::NONE : (*b).second); + return std::max(as, bs); } }; diff --git a/src/citymania/cm_highlight.cpp b/src/citymania/cm_highlight.cpp index d98c92653e..549be37e31 100644 --- a/src/citymania/cm_highlight.cpp +++ b/src/citymania/cm_highlight.cpp @@ -5,6 +5,7 @@ #include "cm_blueprint.hpp" #include "cm_main.hpp" #include "cm_station_gui.hpp" +#include "cm_zoning.hpp" #include "../core/math_func.hpp" #include "../table/bridge_land.h" @@ -12,7 +13,9 @@ #include "../house.h" #include "../industry.h" #include "../landscape.h" +#include "../newgrf_airporttiles.h" #include "../newgrf_railtype.h" +#include "../newgrf_roadtype.h" #include "../newgrf_station.h" #include "../town.h" #include "../town_kdtree.h" @@ -20,7 +23,8 @@ #include "../tilehighlight_type.h" #include "../tilehighlight_func.h" #include "../viewport_func.h" -#include "../zoning.h" +// #include "../zoning.h" +#include "../table/airporttile_ids.h" #include "../table/track_land.h" #include @@ -38,8 +42,13 @@ extern const Station *_viewport_highlight_station; extern TileHighlightData _thd; extern bool IsInsideSelectedRectangle(int x, int y); extern RailType _cur_railtype; -RoadBits FindRailsToConnect(TileIndex tile); +extern RoadType _cur_roadtype; +extern AirportClassID _selected_airport_class; ///< the currently visible airport class +extern int _selected_airport_index; +extern byte _selected_airport_layout; extern DiagDirection _build_depot_direction; ///< Currently selected depot direction +extern DiagDirection _road_station_picker_orientation; +extern DiagDirection _road_depot_orientation; extern uint32 _realtime_tick; extern void GetStationLayout(byte *layout, int numtracks, int plat_len, const StationSpec *statspec); @@ -53,7 +62,6 @@ struct RailStationGUISettings { }; extern RailStationGUISettings _railstation; ///< Settings of the station builder GUI - namespace citymania { extern void (*DrawTileSelectionRect)(const TileInfo *ti, PaletteID pal); @@ -75,7 +83,7 @@ extern const Station *_station_to_join; extern const Station *_highlight_station_to_join; extern TileArea _highlight_join_area; -std::set, std::greater > > _town_cache; +std::set, std::greater>> _town_cache; // struct { // int w; // int h; @@ -127,12 +135,38 @@ ObjectTileHighlight ObjectTileHighlight::make_rail_tunnel_head(SpriteID palette, return oh; } +ObjectTileHighlight ObjectTileHighlight::make_road_stop(SpriteID palette, RoadType roadtype, DiagDirection ddir, bool is_truck) { + auto oh = ObjectTileHighlight(Type::ROAD_STOP, palette); + oh.u.road.stop.roadtype = roadtype; + oh.u.road.stop.ddir = ddir; + oh.u.road.stop.is_truck = is_truck; + return oh; +} + +ObjectTileHighlight ObjectTileHighlight::make_road_depot(SpriteID palette, RoadType roadtype, DiagDirection ddir) { + auto oh = ObjectTileHighlight(Type::ROAD_DEPOT, palette); + oh.u.road.depot.roadtype = roadtype; + oh.u.road.depot.ddir = ddir; + return oh; +} + +ObjectTileHighlight ObjectTileHighlight::make_airport_tile(SpriteID palette, StationGfx gfx) { + auto oh = ObjectTileHighlight(Type::AIRPORT_TILE, palette); + oh.u.airport_tile.gfx = gfx; + return oh; +} + + bool ObjectHighlight::operator==(const ObjectHighlight& oh) { if (this->type != oh.type) return false; return (this->tile == oh.tile && this->end_tile == oh.end_tile && this->axis == oh.axis && this->ddir == oh.ddir + && this->roadtype == oh.roadtype + && this->is_truck == oh.is_truck + && this->airport_type == oh.airport_type + && this->airport_layout == oh.airport_layout && this->blueprint == oh.blueprint); // switch (this->type) { // case Type::RAIL_DEPOT: return this->tile == oh.tile && this->ddir == oh.ddir; @@ -161,6 +195,32 @@ ObjectHighlight ObjectHighlight::make_rail_station(TileIndex start_tile, TileInd return oh; } +ObjectHighlight ObjectHighlight::make_road_stop(TileIndex start_tile, TileIndex end_tile, RoadType roadtype, DiagDirection orientation, bool is_truck) { + auto oh = ObjectHighlight{ObjectHighlight::Type::ROAD_STOP}; + oh.tile = start_tile; + oh.end_tile = end_tile; + oh.ddir = orientation; + oh.roadtype = roadtype; + oh.is_truck = is_truck; + return oh; +} + +ObjectHighlight ObjectHighlight::make_road_depot(TileIndex tile, RoadType roadtype, DiagDirection orientation) { + auto oh = ObjectHighlight{ObjectHighlight::Type::ROAD_DEPOT}; + oh.tile = tile; + oh.ddir = orientation; + oh.roadtype = roadtype; + return oh; +} + +ObjectHighlight ObjectHighlight::make_airport(TileIndex start_tile, int airport_type, byte airport_layout) { + auto oh = ObjectHighlight{ObjectHighlight::Type::AIRPORT}; + oh.tile = start_tile; + oh.airport_type = airport_type; + oh.airport_layout = airport_layout; + return oh; +} + ObjectHighlight ObjectHighlight::make_blueprint(TileIndex tile, sp blueprint) { auto oh = ObjectHighlight{ObjectHighlight::Type::BLUEPRINT}; oh.tile = tile; @@ -180,7 +240,7 @@ void ObjectHighlight::PlaceExtraDepotRail(TileIndex tile, DiagDirection dir, Tra if (GetRailTileType(tile) != RAIL_TILE_NORMAL) return; if ((GetTrackBits(tile) & DiagdirReachesTracks(dir)) == 0) return; - this->tiles.insert(std::make_pair(tile, ObjectTileHighlight::make_rail_track(true, track))); + this->tiles.insert(std::make_pair(tile, ObjectTileHighlight::make_rail_track(PALETTE_TINT_WHITE, track))); } /** Additional pieces of track to add at the entrance of a depot. */ @@ -273,6 +333,52 @@ void ObjectHighlight::UpdateTiles() { break; } + case Type::ROAD_STOP: { + auto ta = OrthogonalTileArea(this->tile, this->end_tile); + auto palette = (CanBuild( + this->tile, + (uint32)(ta.w | ta.h << 8), + (this->is_truck ? 1 : 0) | (this->ddir >= DIAGDIR_END ? 2 : 0) | (((uint)this->ddir % 4) << 3) | (NEW_STATION << 16), + CMD_BUILD_ROAD_STOP + ) ? PALETTE_TINT_WHITE : PALETTE_TINT_RED_DEEP); + TileIndex tile; + TILE_AREA_LOOP(tile, ta) { + this->tiles.insert(std::make_pair(tile, ObjectTileHighlight::make_road_stop(palette, this->roadtype, this->ddir, this->is_truck))); + } + break; + } + + case Type::ROAD_DEPOT: { + auto palette = (CanBuild( + this->tile, + this->roadtype << 2 | this->ddir, + 0, + CMD_BUILD_ROAD_DEPOT + ) ? PALETTE_TINT_WHITE : PALETTE_TINT_RED_DEEP); + this->tiles.insert(std::make_pair(this->tile, ObjectTileHighlight::make_road_depot(palette, this->roadtype, this->ddir))); + break; + } + + case Type::AIRPORT: { + auto palette = (CanBuild( + this->tile, + this->airport_type | ((uint)this->airport_layout << 8), + 1 | (NEW_STATION << 16), + CMD_BUILD_AIRPORT + ) ? PALETTE_TINT_WHITE : PALETTE_TINT_RED_DEEP); + + const AirportSpec *as = AirportSpec::Get(this->airport_type); + if (!as->IsAvailable() || this->airport_layout >= as->num_table) break; + Direction rotation = as->rotation[this->airport_layout]; + int w = as->size_x; + int h = as->size_y; + if (rotation == DIR_E || rotation == DIR_W) Swap(w, h); + TileArea airport_area = TileArea(this->tile, w, h); + for (AirportTileTableIterator iter(as->table[this->airport_layout], this->tile); iter != INVALID_TILE; ++iter) { + this->tiles.insert(std::make_pair(iter, ObjectTileHighlight::make_airport_tile(palette, iter.GetStationGfx()))); + } + break; + } case Type::BLUEPRINT: if (this->blueprint && this->tile != INVALID_TILE) this->tiles = this->blueprint->GetTiles(this->tile); @@ -406,6 +512,150 @@ void DrawTrainStationSprite(SpriteID palette, const TileInfo *ti, RailType railt DrawRailTileSeq(ti, t, TO_INVALID, total_offset, 0, palette); } +void DrawRoadStop(SpriteID palette, const TileInfo *ti, RoadType roadtype, DiagDirection orientation, bool is_truck) { + int32 total_offset = 0; + const RoadTypeInfo* rti = GetRoadTypeInfo(roadtype); + + uint image = (uint)orientation; + if (image >= 4) { + /* Drive-through stop */ + uint sprite_offset = 5 - image; + + /* Road underlay takes precedence over tram */ + if (rti->UsesOverlay()) { + SpriteID ground = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_GROUND); + DrawSprite(ground + sprite_offset, PAL_NONE, ti->x, ti->y); + + SpriteID overlay = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_OVERLAY); + // if (overlay) DrawSprite(overlay + sprite_offset, PAL_NONE, x, y); + if (overlay) AddSortableSpriteToDraw(overlay + sprite_offset, palette, ti->x, ti->y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, ti->z); + } else if (RoadTypeIsTram(roadtype)) { + // DrawSprite(SPR_TRAMWAY_TRAM + sprite_offset, PAL_NONE, x, y); + AddSortableSpriteToDraw(SPR_TRAMWAY_TRAM + sprite_offset, palette, ti->x, ti->y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, ti->z); + } + } else { + /* Drive-in stop */ + if (RoadTypeIsRoad(roadtype) && rti->UsesOverlay()) { + SpriteID ground = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_ROADSTOP); + // DrawSprite(, PAL_NONE, x, y); + AddSortableSpriteToDraw(ground + image, palette, ti->x, ti->y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, ti->z); + } + } + + const DrawTileSprites *t = GetStationTileLayout(is_truck ? STATION_TRUCK : STATION_BUS, image); + AddSortableSpriteToDraw(t->ground.sprite, palette, ti->x, ti->y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, ti->z); + DrawRailTileSeq(ti, t, TO_INVALID, total_offset, 0, palette); + /* Draw road, tram catenary */ + // DrawRoadCatenary(ti); +} + + +struct DrawRoadTileStruct { + uint16 image; + byte subcoord_x; + byte subcoord_y; +}; + +#include "../table/road_land.h" + +// copied from road_gui.cpp +static uint GetRoadSpriteOffset(Slope slope, RoadBits bits) +{ + if (slope != SLOPE_FLAT) { + switch (slope) { + case SLOPE_NE: return 11; + case SLOPE_SE: return 12; + case SLOPE_SW: return 13; + case SLOPE_NW: return 14; + default: NOT_REACHED(); + } + } else { + static const uint offsets[] = { + 0, 18, 17, 7, + 16, 0, 10, 5, + 15, 8, 1, 4, + 9, 3, 6, 2 + }; + return offsets[bits]; + } +} + + +void DrawRoadDepot(SpriteID palette, const TileInfo *ti, RoadType roadtype, DiagDirection orientation) { + const RoadTypeInfo* rti = GetRoadTypeInfo(roadtype); + int relocation = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_DEPOT); + bool default_gfx = relocation == 0; + if (default_gfx) { + if (HasBit(rti->flags, ROTF_CATENARY)) { + if (_loaded_newgrf_features.tram == TRAMWAY_REPLACE_DEPOT_WITH_TRACK && RoadTypeIsTram(roadtype) && !rti->UsesOverlay()) { + /* Sprites with track only work for default tram */ + relocation = SPR_TRAMWAY_DEPOT_WITH_TRACK - SPR_ROAD_DEPOT; + default_gfx = false; + } else { + /* Sprites without track are always better, if provided */ + relocation = SPR_TRAMWAY_DEPOT_NO_TRACK - SPR_ROAD_DEPOT; + } + } + } else { + relocation -= SPR_ROAD_DEPOT; + } + + const DrawTileSprites *dts = &_road_depot[orientation]; + AddSortableSpriteToDraw(dts->ground.sprite, palette, ti->x, ti->y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, ti->z); + + if (default_gfx) { + uint offset = GetRoadSpriteOffset(SLOPE_FLAT, DiagDirToRoadBits(orientation)); + if (rti->UsesOverlay()) { + SpriteID ground = GetCustomRoadSprite(rti, INVALID_TILE, ROTSG_OVERLAY); + if (ground != 0) AddSortableSpriteToDraw(ground + offset, palette, ti->x, ti->y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, ti->z); + } else if (RoadTypeIsTram(roadtype)) { + AddSortableSpriteToDraw(SPR_TRAMWAY_OVERLAY + offset, palette, ti->x, ti->y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, ti->z); + } + } + + DrawRailTileSeq(ti, dts, TO_INVALID, relocation, 0, palette); +} + +#include "../table/station_land.h" + +void DrawAirportTile(SpriteID palette, const TileInfo *ti, StationGfx gfx) { + int32 total_offset = 0; + const DrawTileSprites *t = nullptr; + gfx = GetTranslatedAirportTileID(gfx); + if (gfx >= NEW_AIRPORTTILE_OFFSET) { + const AirportTileSpec *ats = AirportTileSpec::Get(gfx); + if (ats->grf_prop.spritegroup[0] != nullptr /* && DrawNewAirportTile(ti, Station::GetByTile(ti->tile), gfx, ats) */) { + return; + } + /* No sprite group (or no valid one) found, meaning no graphics associated. + * Use the substitute one instead */ + assert(ats->grf_prop.subst_id != INVALID_AIRPORTTILE); + gfx = ats->grf_prop.subst_id; + } + switch (gfx) { + case APT_RADAR_GRASS_FENCE_SW: + t = &_station_display_datas_airport_radar_grass_fence_sw[0]; + break; + case APT_GRASS_FENCE_NE_FLAG: + t = &_station_display_datas_airport_flag_grass_fence_ne[0]; + break; + case APT_RADAR_FENCE_SW: + t = &_station_display_datas_airport_radar_fence_sw[0]; + break; + case APT_RADAR_FENCE_NE: + t = &_station_display_datas_airport_radar_fence_ne[0]; + break; + case APT_GRASS_FENCE_NE_FLAG_2: + t = &_station_display_datas_airport_flag_grass_fence_ne_2[0]; + break; + } + if (t == nullptr || t->seq == nullptr) t = GetStationTileLayout(STATION_AIRPORT, gfx); + if (t) { + AddSortableSpriteToDraw(t->ground.sprite, palette, ti->x, ti->y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, ti->z); + DrawRailTileSeq(ti, t, TO_INVALID, total_offset, 0, palette); + } +} + enum SignalOffsets { // from rail_cmd.cpp SIGNAL_TO_SOUTHWEST, SIGNAL_TO_NORTHEAST, @@ -557,6 +807,15 @@ void ObjectHighlight::Draw(const TileInfo *ti) { case ObjectTileHighlight::Type::RAIL_TUNNEL_HEAD: DrawTunnelHead(oth.palette, ti, _cur_railtype, oth.u.rail.tunnel_head.ddir); break; + case ObjectTileHighlight::Type::ROAD_STOP: + DrawRoadStop(oth.palette, ti, oth.u.road.stop.roadtype, oth.u.road.stop.ddir, oth.u.road.stop.is_truck); + break; + case ObjectTileHighlight::Type::ROAD_DEPOT: + DrawRoadDepot(oth.palette, ti, oth.u.road.depot.roadtype, oth.u.road.depot.ddir); + break; + case ObjectTileHighlight::Type::AIRPORT_TILE: + DrawAirportTile(oth.palette, ti, oth.u.airport_tile.gfx); + break; default: break; } @@ -593,14 +852,18 @@ std::pair CalcTileBorders(TileIndex tile, F getter) { return std::make_pair(res, z); } +static uint8 _industry_highlight_hash = 0; + +void UpdateIndustryHighlight() { + _industry_highlight_hash++; +} bool CanBuildIndustryOnTileCached(IndustryType type, TileIndex tile) { // if (_mz[tile].industry_fund_type != type || !_mz[tile].industry_fund_result) { - uint8 tick_hash = (_realtime_tick & 255); - if (_mz[tile].industry_fund_update != tick_hash || !_mz[tile].industry_fund_result) { + if (_mz[tile].industry_fund_update != _industry_highlight_hash || !_mz[tile].industry_fund_result) { bool res = CanBuildIndustryOnTile(type, tile); // _mz[tile].industry_fund_type = type; - _mz[tile].industry_fund_update = tick_hash; + _mz[tile].industry_fund_update = _industry_highlight_hash; _mz[tile].industry_fund_result = res ? 2 : 1; return res; } @@ -703,10 +966,10 @@ void CalcCBAcceptanceBorders(TileHighlight &th, TileIndex tile, SpriteID border_ bool in_zone = false; ZoningBorder border = ZoningBorder::NONE; _town_kdtree.FindContained( - (uint16)max(0, tx - radius), - (uint16)max(0, ty - radius), - (uint16)min(tx + radius + 1, MapSizeX()), - (uint16)min(ty + radius + 1, MapSizeY()), + (uint16)std::max(0, tx - radius), + (uint16)std::max(0, ty - radius), + (uint16)std::min(tx + radius + 1, MapSizeX()), + (uint16)std::min(ty + radius + 1, MapSizeY()), [tx, ty, radius, &in_zone, &border] (TownID tid) { Town *town = Town::GetIfValid(tid); if (!town || town->larger_town) @@ -714,7 +977,7 @@ void CalcCBAcceptanceBorders(TileHighlight &th, TileIndex tile, SpriteID border_ int dx = TileX(town->xy) - tx; int dy = TileY(town->xy) - ty; - in_zone = in_zone || (max(abs(dx), abs(dy)) <= radius); + in_zone = in_zone || (std::max(abs(dx), abs(dy)) <= radius); if (dx == radius) border |= ZoningBorder::TOP_RIGHT; if (dx == -radius) border |= ZoningBorder::BOTTOM_LEFT; if (dy == radius) border |= ZoningBorder::TOP_LEFT; @@ -750,10 +1013,10 @@ void CalcCBTownLimitBorder(TileHighlight &th, TileIndex tile, SpriteID border_pa uint radius = IntSqrt(sq); int tx = TileX(tile), ty = TileY(tile); _town_kdtree.FindContained( - (uint16)max(0, tx - radius), - (uint16)max(0, ty - radius), - (uint16)min(tx + radius + 1, MapSizeX()), - (uint16)min(ty + radius + 1, MapSizeY()), + (uint16)std::max(0, tx - radius), + (uint16)std::max(0, ty - radius), + (uint16)std::min(tx + radius + 1, MapSizeX()), + (uint16)std::min(ty + radius + 1, MapSizeY()), [tile, &in_zone, &border] (TownID tid) { Town *town = Town::GetIfValid(tid); if (!town || town->larger_town) @@ -888,69 +1151,16 @@ bool DrawTileSelection(const TileInfo *ti, const TileHighlightType &tht) { if (_thd.drawstyle == CM_HT_BLUEPRINT_PLACE) return true; - if ((_thd.drawstyle & HT_DRAG_MASK) == HT_RECT && _thd.outersize.x > 0) { - // station selector, handled by DrawTileZoning - return true; - } - - if ((_thd.drawstyle & HT_DRAG_MASK) == HT_RECT && IsInsideSelectedRectangle(ti->x, ti->y) - && _cursor.sprite_seq[0].sprite == GetRailTypeInfo(_cur_railtype)->cursor.depot) { - // DrawTileSelectionRect(ti, _thd.make_square_red ? PALETTE_SEL_TILE_RED : PAL_NONE); - - // auto rti = GetRailTypeInfo(_cur_railtype); - // int depot_sprite = GetCustomRailSprite(rti, ti->tile, RTSG_DEPOT); - // auto relocation = depot_sprite != 0 ? depot_sprite - SPR_RAIL_DEPOT_SE_1 : rti->GetRailtypeSpriteOffset(); - // AddSortableSpriteToDraw(relocation, PALETTE_TINT_WHITE, ti->x, ti->y, 0x10, 0x10, 1, ti->z); - // AddSortableSpriteToDraw(SPR_RAIL_DEPOT_SE_1, PALETTE_TINT_WHITE, ti->x, ti->y, 0x10, 0x10, 1, ti->z); - // DrawTrainDepotSprite(r.left + 1 + ScaleGUITrad(31), r.bottom - ScaleGUITrad(31), widget - WID_BRAD_DEPOT_NE + DIAGDIR_NE, _cur_railtype); - // DrawTrainDepotSprite(ti, _cur_railtype, (DiagDirection)(_thd.drawstyle & HT_DIR_MASK)); + if (_thd.select_proc == DDSP_BUILD_STATION || _thd.select_proc == DDSP_BUILD_BUSSTOP + || _thd.select_proc == DDSP_BUILD_TRUCKSTOP || _thd.select_proc == CM_DDSP_BUILD_AIRPORT + || _thd.select_proc == CM_DDSP_BUILD_ROAD_DEPOT || _thd.select_proc == CM_DDSP_BUILD_RAIL_DEPOT) { + // handled by DrawTileZoning return true; } return false; } - -// almost duplicate from road_gui.cpp -static DiagDirection TileFractCoordsToDiagDir(Point pt) { - auto x = pt.x & TILE_UNIT_MASK; - auto y = pt.y & TILE_UNIT_MASK; - bool diag = (x + y) < 16; - if (x < y) { - return diag ? DIAGDIR_NE : DIAGDIR_SE; - } - return diag ? DIAGDIR_NW : DIAGDIR_SW; -} - -// FIXME duplicate from road_gui.cpp -static DiagDirection RoadBitsToDiagDir(RoadBits bits) { - if (bits < ROAD_SE) { - return bits == ROAD_NW ? DIAGDIR_NW : DIAGDIR_SW; - } - return bits == ROAD_SE ? DIAGDIR_SE : DIAGDIR_NE; -} - -DiagDirection AutodetectRailObjectDirection(TileIndex tile, Point pt) { - RoadBits bits = FindRailsToConnect(tile); - // FIXME after this point repeats road autodetection - if (HasExactlyOneBit(bits)) return RoadBitsToDiagDir(bits); - if (bits == ROAD_NONE) bits = ROAD_ALL; - RoadBits frac_bits = DiagDirToRoadBits(TileFractCoordsToDiagDir(pt)); - if (HasExactlyOneBit(frac_bits & bits)) { - return RoadBitsToDiagDir(frac_bits & bits); - } - frac_bits |= MirrorRoadBits(frac_bits); - if (HasExactlyOneBit(frac_bits & bits)) { - return RoadBitsToDiagDir(frac_bits & bits); - } - for (DiagDirection ddir = DIAGDIR_BEGIN; ddir < DIAGDIR_END; ddir++) { - if (DiagDirToRoadBits(ddir) & bits) { - return ddir; - } - } - NOT_REACHED(); -} - TileIndex _autodetection_tile = INVALID_TILE; DiagDirDiff _autodetection_rotation = DIAGDIRDIFF_SAME; @@ -980,6 +1190,7 @@ void ResetRotateAutodetection() { } DiagDirection AddAutodetectionRotation(DiagDirection ddir) { + if (ddir >= DIAGDIR_END) return (DiagDirection)(((uint)ddir + (uint)GetAutodetectionRotation()) % 2 + DIAGDIR_END); return ChangeDiagDir(ddir, GetAutodetectionRotation()); } @@ -987,27 +1198,62 @@ HighLightStyle UpdateTileSelection(HighLightStyle new_drawstyle) { _thd.cm_new = ObjectHighlight(ObjectHighlight::Type::NONE); auto pt = GetTileBelowCursor(); auto tile = (pt.x == -1 ? INVALID_TILE : TileVirtXY(pt.x, pt.y)); + // fprintf(stderr, "UPDATE %d %d %d %d\n", tile, _thd.size.x, _thd.size.y, (int)((_thd.place_mode & HT_DRAG_MASK) == HT_RECT)); if (_thd.place_mode == CM_HT_BLUEPRINT_PLACE) { UpdateBlueprintTileSelection(pt, tile); new_drawstyle = CM_HT_BLUEPRINT_PLACE; - } else if ((_thd.place_mode & HT_DRAG_MASK) == HT_RECT && - _cursor.sprite_seq[0].sprite == GetRailTypeInfo(_cur_railtype)->cursor.depot) { - auto dir = _build_depot_direction; - if (pt.x != -1) { - if (dir >= DiagDirection::DIAGDIR_END) { - dir = AddAutodetectionRotation(AutodetectRailObjectDirection(tile, pt)); - } - _thd.cm_new = ObjectHighlight::make_rail_depot(tile, dir); + } else if (pt.x == -1) { + } else if (_thd.make_square_red) { + } else if (_thd.select_proc == CM_DDSP_BUILD_ROAD_DEPOT) { + auto dir = _road_depot_orientation; + if (dir == DEPOTDIR_AUTO) { + dir = AddAutodetectionRotation(AutodetectRoadObjectDirection(tile, pt, _cur_roadtype)); } + _thd.cm_new = ObjectHighlight::make_road_depot(tile, _cur_roadtype, dir); new_drawstyle = HT_RECT; - } else if (((_thd.place_mode & HT_DRAG_MASK) == HT_RECT || ((_thd.place_mode & HT_DRAG_MASK) == HT_SPECIAL && (_thd.next_drawstyle & HT_DRAG_MASK) == HT_RECT)) && _thd.outersize.x > 0 && !_thd.make_square_red) { // station + } else if (_thd.select_proc == CM_DDSP_BUILD_RAIL_DEPOT) { + auto dir = _build_depot_direction; + if (dir >= DiagDirection::DIAGDIR_END) { + dir = AddAutodetectionRotation(AutodetectRailObjectDirection(tile, pt)); + } + _thd.cm_new = ObjectHighlight::make_rail_depot(tile, dir); + // } else if (((_thd.place_mode & HT_DRAG_MASK) == HT_RECT || ((_thd.place_mode & HT_DRAG_MASK) == HT_SPECIAL && (_thd.next_drawstyle & HT_DRAG_MASK) == HT_RECT)) && _thd.new_outersize.x > 0 && !_thd.make_square_red) { // station + } else if (_thd.select_proc == CM_DDSP_BUILD_AIRPORT) { + auto tile = TileXY(_thd.new_pos.x / TILE_SIZE, _thd.new_pos.y / TILE_SIZE); + const AirportSpec *as = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index); + _thd.cm_new = ObjectHighlight::make_airport(tile, as->GetIndex(), _selected_airport_layout); + new_drawstyle = HT_RECT; + } else if (_thd.select_proc == DDSP_BUILD_STATION || _thd.select_proc == DDSP_BUILD_BUSSTOP + || _thd.select_proc == DDSP_BUILD_TRUCKSTOP) { // station if (_thd.size.x >= (int)TILE_SIZE && _thd.size.y >= (int)TILE_SIZE) { - auto start_tile = TileXY(_thd.pos.x / TILE_SIZE, _thd.pos.y / TILE_SIZE); + auto start_tile = TileXY(_thd.new_pos.x / TILE_SIZE, _thd.new_pos.y / TILE_SIZE); auto end_tile = TileXY( - std::min((_thd.pos.x + _thd.size.x) / TILE_SIZE, MapSizeX()) - 1, - std::min((_thd.pos.y + _thd.size.y) / TILE_SIZE, MapSizeY()) - 1 + std::min((_thd.new_pos.x + _thd.new_size.x) / TILE_SIZE, MapSizeX()) - 1, + std::min((_thd.new_pos.y + _thd.new_size.y) / TILE_SIZE, MapSizeY()) - 1 ); - _thd.cm_new = ObjectHighlight::make_rail_station(start_tile, end_tile, _railstation.orientation); + if (_thd.select_proc == DDSP_BUILD_STATION) + _thd.cm_new = ObjectHighlight::make_rail_station(start_tile, end_tile, _railstation.orientation); + else if (_thd.select_proc == DDSP_BUILD_BUSSTOP || _thd.select_proc == DDSP_BUILD_TRUCKSTOP) { + auto ddir = _road_station_picker_orientation; + auto ta = TileArea(start_tile, end_tile); + if (pt.x != -1) { + if (ddir >= DIAGDIR_END && ddir < STATIONDIR_AUTO) { + // When placed on road autorotate anyway + if (ddir == STATIONDIR_X) { + if (!CheckDriveThroughRoadStopDirection(ta, ROAD_X)) + ddir = STATIONDIR_Y; + } else { + if (!CheckDriveThroughRoadStopDirection(ta, ROAD_Y)) + ddir = STATIONDIR_X; + } + } else if (ddir == STATIONDIR_AUTO) { + ddir = AddAutodetectionRotation(AutodetectRoadObjectDirection(start_tile, pt, _cur_roadtype)); + } else if (ddir == STATIONDIR_AUTO_XY) { + ddir = AddAutodetectionRotation(AutodetectDriveThroughRoadStopDirection(ta, pt, _cur_roadtype)); + } + } + _thd.cm_new = ObjectHighlight::make_road_stop(start_tile, end_tile, _cur_roadtype, ddir, _thd.select_proc == DDSP_BUILD_TRUCKSTOP); + } } new_drawstyle = HT_RECT; } @@ -1093,15 +1339,15 @@ void UpdateTownZoning(Town *town, uint32 prev_edge) { void UpdateAdvertisementZoning(TileIndex center, uint radius, uint8 zone) { uint16 x1, y1, x2, y2; - x1 = (uint16)max(0, TileX(center) - radius); - x2 = (uint16)min(TileX(center) + radius + 1, MapSizeX()); - y1 = (uint16)max(0, TileY(center) - radius); - y2 = (uint16)min(TileY(center) + radius + 1, MapSizeY()); + x1 = (uint16)std::max(0, TileX(center) - radius); + x2 = (uint16)std::min(TileX(center) + radius + 1, MapSizeX()); + y1 = (uint16)std::max(0, TileY(center) - radius); + y2 = (uint16)std::min(TileY(center) + radius + 1, MapSizeY()); for (uint16 y = y1; y < y2; y++) { for (uint16 x = x1; x < x2; x++) { auto tile = TileXY(x, y); if (DistanceManhattan(tile, center) > radius) continue; - _mz[tile].advertisement_zone = max(_mz[tile].advertisement_zone, zone); + _mz[tile].advertisement_zone = std::max(_mz[tile].advertisement_zone, zone); } } } @@ -1147,6 +1393,7 @@ void SetIndustryForbiddenTilesHighlight(IndustryType type) { MarkWholeScreenDirty(); } _industry_forbidden_tiles = type; + UpdateIndustryHighlight(); } diff --git a/src/citymania/cm_highlight.hpp b/src/citymania/cm_highlight.hpp index cab9f53adc..3c6ad65584 100644 --- a/src/citymania/cm_highlight.hpp +++ b/src/citymania/cm_highlight.hpp @@ -92,6 +92,7 @@ ZoningBorder GetAnyStationCatchmentBorder(TileIndex tlie); // SpriteID GetTownTileZoningPalette(TileIndex tile); SpriteID GetIndustryTileZoningPalette(TileIndex tile, Industry *ind); +void UpdateIndustryHighlight(); void SetIndustryForbiddenTilesHighlight(IndustryType type); diff --git a/src/citymania/cm_highlight_type.hpp b/src/citymania/cm_highlight_type.hpp index 40c573abc9..616f9bd0b3 100644 --- a/src/citymania/cm_highlight_type.hpp +++ b/src/citymania/cm_highlight_type.hpp @@ -4,7 +4,9 @@ #include "../bridge.h" #include "../direction_type.h" #include "../map_func.h" +#include "../road_type.h" #include "../signal_type.h" +#include "../station_map.h" #include "../station_type.h" #include "../tile_cmd.h" #include "../tile_type.h" @@ -27,6 +29,9 @@ public: RAIL_SIGNAL, RAIL_BRIDGE_HEAD, RAIL_TUNNEL_HEAD, + ROAD_STOP, + ROAD_DEPOT, + AIRPORT_TILE, END, }; @@ -57,6 +62,20 @@ public: DiagDirection ddir; } tunnel_head; } rail; + struct { + struct { + RoadType roadtype; + DiagDirection ddir; + bool is_truck; + } stop; + struct { + RoadType roadtype; + DiagDirection ddir; + } depot; + } road; + struct { + StationGfx gfx; + } airport_tile; } u; ObjectTileHighlight(Type type, SpriteID palette): type{type}, palette{palette} {} @@ -66,11 +85,15 @@ public: static ObjectTileHighlight make_rail_signal(SpriteID palette, uint pos, SignalType type, SignalVariant variant); static ObjectTileHighlight make_rail_bridge_head(SpriteID palette, DiagDirection ddir, BridgeType type); static ObjectTileHighlight make_rail_tunnel_head(SpriteID palette, DiagDirection ddir); + + static ObjectTileHighlight make_road_stop(SpriteID palette, RoadType roadtype, DiagDirection ddir, bool is_truck); + static ObjectTileHighlight make_road_depot(SpriteID palette, RoadType roadtype, DiagDirection ddir); + static ObjectTileHighlight make_airport_tile(SpriteID palette, StationGfx gfx); }; class TileIndexDiffCCompare{ public: - bool operator()(const TileIndexDiffC &a, const TileIndexDiffC &b) { + bool operator()(const TileIndexDiffC &a, const TileIndexDiffC &b) const { if (a.x < b.x) return true; if (a.x == b.x && a.y < b.y) return true; return false; @@ -90,6 +113,8 @@ public: RAIL_SIGNAL, RAIL_BRIDGE, RAIL_TUNNEL, + ROAD_STOP, + ROAD_DEPOT, END, }; Type type; @@ -128,6 +153,15 @@ public: TileIndexDiffC other_end; } tunnel; } rail; + struct { + struct { + DiagDirection ddir; + TileIndexDiffC other_end; + } stop; + struct { + DiagDirection ddir; + } depot; + } road; } u; Item(Type type, TileIndexDiffC tdiff) : type{type}, tdiff{tdiff} {} @@ -160,7 +194,10 @@ public: NONE = 0, RAIL_DEPOT = 1, RAIL_STATION = 2, - BLUEPRINT = 3, + ROAD_STOP = 3, + ROAD_DEPOT = 4, + AIRPORT = 5, + BLUEPRINT = 6, }; Type type; @@ -168,6 +205,10 @@ public: TileIndex end_tile = INVALID_TILE; Axis axis = INVALID_AXIS; DiagDirection ddir = INVALID_DIAGDIR; + RoadType roadtype = INVALID_ROADTYPE; + bool is_truck = false; + int airport_type = 0; + byte airport_layout = 0; sp blueprint = nullptr; protected: @@ -183,6 +224,9 @@ public: static ObjectHighlight make_rail_depot(TileIndex tile, DiagDirection ddir); static ObjectHighlight make_rail_station(TileIndex start_tile, TileIndex end_tile, Axis axis); + static ObjectHighlight make_road_stop(TileIndex start_tile, TileIndex end_tile, RoadType roadtype, DiagDirection orientation, bool is_truck); + static ObjectHighlight make_road_depot(TileIndex tile, RoadType roadtype, DiagDirection orientation); + static ObjectHighlight make_airport(TileIndex start_tile, int airport_type, byte airport_layout); static ObjectHighlight make_blueprint(TileIndex tile, sp blueprint); void Draw(const TileInfo *ti); diff --git a/src/citymania/cm_hotkeys.cpp b/src/citymania/cm_hotkeys.cpp index 7b849973bb..0fd73df0c2 100644 --- a/src/citymania/cm_hotkeys.cpp +++ b/src/citymania/cm_hotkeys.cpp @@ -14,6 +14,7 @@ #include "../widgets/rail_widget.h" #include "../widgets/road_widget.h" +#include #include #include "../safeguards.h" @@ -27,7 +28,6 @@ struct RailStationGUISettings { byte station_count; ///< Number of custom stations (if newstations is \c true ) }; extern RailStationGUISettings _railstation; ///< Settings of the station builder GUI -extern uint32 _realtime_tick; namespace citymania { @@ -38,32 +38,40 @@ bool _estimate_mod = false; bool _middle_button_down; ///< Is middle mouse button pressed? bool _middle_button_clicked; ///< Is middle mouse button clicked? -uint32 _effective_actions = 0; -uint32 _first_effective_tick = 0; -std::queue _last_actions; +static uint32 _effective_actions = 0; +static std::optional _first_effective_tick = {}; +static std::queue _last_actions; + +const std::chrono::minutes EPM_PERIOD(1); ///< Actions per minute measuring period is, suprisingly, one minute static void PurgeLastActions() { - while (!_last_actions.empty() && _last_actions.front() <= _realtime_tick) + auto now = std::chrono::steady_clock::now(); + while (!_last_actions.empty() && _last_actions.front() <= now) _last_actions.pop(); } void CountEffectiveAction() { - if (!_first_effective_tick) _first_effective_tick = _realtime_tick; + auto now = std::chrono::steady_clock::now(); + if (!_first_effective_tick) _first_effective_tick = now; _effective_actions++; PurgeLastActions(); - _last_actions.push(_realtime_tick + 60000); + _last_actions.push(now + EPM_PERIOD); } void ResetEffectivveActionCounter() { - _first_effective_tick = 0; + _first_effective_tick = {}; _effective_actions = 0; - std::queue().swap(_last_actions); // clear the queue + std::queue().swap(_last_actions); // clear the queue } std::pair GetEPM() { - if (!_first_effective_tick || _realtime_tick <= _first_effective_tick) return std::make_pair(0, 0); + auto now = std::chrono::steady_clock::now(); + if (!_first_effective_tick) return std::make_pair(0, 0); PurgeLastActions(); - return std::make_pair(_effective_actions * 60000 / (_realtime_tick - _first_effective_tick), _last_actions.size()); + auto ms = std::chrono::duration_cast(now - *_first_effective_tick).count(); + if (ms == 0) return std::make_pair(0, 0); + return std::make_pair(_effective_actions * 60000 / ms, + _last_actions.size()); } void UpdateModKeys(bool shift_pressed, bool ctrl_pressed, bool alt_pressed) { diff --git a/src/citymania/cm_main.cpp b/src/citymania/cm_main.cpp index 9953807dfd..8fd8539caa 100644 --- a/src/citymania/cm_main.cpp +++ b/src/citymania/cm_main.cpp @@ -2,8 +2,8 @@ #include "cm_main.hpp" #include "cm_hotkeys.hpp" +#include "cm_minimap.hpp" -#include "../smallmap_gui.h" #include "../window_func.h" #include "../safeguards.h" @@ -22,7 +22,7 @@ void SwitchToMode(SwitchMode new_mode) { } void ToggleSmallMap() { - SmallMapWindow *w = dynamic_cast(FindWindowById(WC_SMALLMAP, 0)); + SmallMapWindow *w = dynamic_cast(FindWindowById(WC_SMALLMAP, 0)); if (w == nullptr) ShowSmallMap(); delete w; } diff --git a/src/citymania/cm_minimap.cpp b/src/citymania/cm_minimap.cpp index 80f24c278e..668fcfebb6 100644 --- a/src/citymania/cm_minimap.cpp +++ b/src/citymania/cm_minimap.cpp @@ -2,8 +2,1864 @@ #include "cm_minimap.hpp" +#include "../clear_map.h" +#include "../industry.h" +#include "../station_map.h" +#include "../landscape.h" +#include "../tree_map.h" +#include "../viewport_func.h" +#include "../town.h" +#include "../tunnelbridge_map.h" +#include "../core/endian_func.hpp" +#include "../vehicle_base.h" +#include "../sound_func.h" +#include "../window_func.h" +#include "../company_base.h" +#include "../guitimer_func.h" + +#include "../smallmap_gui.h" + +// #include "../table/strings.h" + +#include + +#include "cm_hotkeys.hpp" +#include "cm_minimap.hpp" + #include "../safeguards.h" +extern std::bitset _displayed_industries; + namespace citymania { +/* + * This file is part of OpenTTD. + * OpenTTD 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, version 2. + * OpenTTD 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 OpenTTD. If not, see . + */ + +/** @file smallmap_gui.cpp GUI that shows a small map of the world with metadata like owner or height. */ + + +static int _smallmap_industry_count; ///< Number of used industries +static int _smallmap_company_count; ///< Number of entries in the owner legend. +static int _smallmap_cargo_count; ///< Number of cargos in the link stats legend. + +/** Link stat colours shown in legenda. */ +static uint8 _linkstat_colours_in_legenda[] = {0, 1, 3, 5, 7, 9, 11}; + +static const int NUM_NO_COMPANY_ENTRIES = 4; ///< Number of entries in the owner legend that are not companies. + +/** Macro for ordinary entry of LegendAndColour */ +#define MK(a, b) {a, b, INVALID_INDUSTRYTYPE, 0, INVALID_COMPANY, true, false, false} + +/** Macro for a height legend entry with configurable colour. */ +#define MC(col_break) {0, STR_TINY_BLACK_HEIGHT, INVALID_INDUSTRYTYPE, 0, INVALID_COMPANY, true, false, col_break} + +/** Macro for non-company owned property entry of LegendAndColour */ +#define MO(a, b) {a, b, INVALID_INDUSTRYTYPE, 0, INVALID_COMPANY, true, false, false} + +/** Macro used for forcing a rebuild of the owner legend the first time it is used. */ +#define MOEND() {0, 0, INVALID_INDUSTRYTYPE, 0, OWNER_NONE, true, true, false} + +/** Macro for end of list marker in arrays of LegendAndColour */ +#define MKEND() {0, STR_NULL, INVALID_INDUSTRYTYPE, 0, INVALID_COMPANY, true, true, false} + +/** + * Macro for break marker in arrays of LegendAndColour. + * It will have valid data, though + */ +#define MS(a, b) {a, b, INVALID_INDUSTRYTYPE, 0, INVALID_COMPANY, true, false, true} + +/** Legend text giving the colours to look for on the minimap */ +static LegendAndColour _legend_land_contours[] = { + MK(PC_BLACK, STR_SMALLMAP_LEGENDA_ROADS), + MK(PC_GREY, STR_SMALLMAP_LEGENDA_RAILROADS), + MK(PC_LIGHT_BLUE, STR_SMALLMAP_LEGENDA_STATIONS_AIRPORTS_DOCKS), + MK(PC_DARK_RED, STR_SMALLMAP_LEGENDA_BUILDINGS_INDUSTRIES), + MK(PC_WHITE, STR_SMALLMAP_LEGENDA_VEHICLES), + + /* Placeholders for the colours and heights of the legend. + * The following values are set at BuildLandLegend() based + * on each colour scheme and the maximum map height. */ + MC(true), + MC(false), + MC(false), + MC(false), + MC(false), + MC(false), + MC(true), + MC(false), + MC(false), + MC(false), + MC(false), + MC(false), + MKEND() +}; + +static const LegendAndColour _legend_vehicles[] = { + MK(PC_RED, STR_SMALLMAP_LEGENDA_TRAINS), + MK(PC_YELLOW, STR_SMALLMAP_LEGENDA_ROAD_VEHICLES), + MK(PC_LIGHT_BLUE, STR_SMALLMAP_LEGENDA_SHIPS), + MK(PC_WHITE, STR_SMALLMAP_LEGENDA_AIRCRAFT), + + MS(PC_BLACK, STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES), + MK(PC_DARK_RED, STR_SMALLMAP_LEGENDA_BUILDINGS_INDUSTRIES), + MKEND() +}; + +static const LegendAndColour _legend_routes[] = { + MK(PC_BLACK, STR_SMALLMAP_LEGENDA_ROADS), + MK(PC_GREY, STR_SMALLMAP_LEGENDA_RAILROADS), + MK(PC_DARK_RED, STR_SMALLMAP_LEGENDA_BUILDINGS_INDUSTRIES), + + MS(PC_VERY_DARK_BROWN, STR_SMALLMAP_LEGENDA_RAILROAD_STATION), + MK(PC_ORANGE, STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY), + MK(PC_YELLOW, STR_SMALLMAP_LEGENDA_BUS_STATION), + MK(PC_RED, STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT), + MK(PC_LIGHT_BLUE, STR_SMALLMAP_LEGENDA_DOCK), + MKEND() +}; + +static const LegendAndColour _legend_vegetation[] = { + MK(PC_ROUGH_LAND, STR_SMALLMAP_LEGENDA_ROUGH_LAND), + MK(PC_GRASS_LAND, STR_SMALLMAP_LEGENDA_GRASS_LAND), + MK(PC_BARE_LAND, STR_SMALLMAP_LEGENDA_BARE_LAND), + MK(PC_RAINFOREST, STR_SMALLMAP_LEGENDA_RAINFOREST), + MK(PC_FIELDS, STR_SMALLMAP_LEGENDA_FIELDS), + MK(PC_TREES, STR_SMALLMAP_LEGENDA_TREES), + + MS(PC_GREEN, STR_SMALLMAP_LEGENDA_FOREST), + MK(PC_GREY, STR_SMALLMAP_LEGENDA_ROCKS), + MK(PC_ORANGE, STR_SMALLMAP_LEGENDA_DESERT), + MK(PC_LIGHT_BLUE, STR_SMALLMAP_LEGENDA_SNOW), + MK(PC_BLACK, STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES), + MK(PC_DARK_RED, STR_SMALLMAP_LEGENDA_BUILDINGS_INDUSTRIES), + MKEND() +}; + +static LegendAndColour _legend_land_owners[NUM_NO_COMPANY_ENTRIES + MAX_COMPANIES + 1] = { + MO(PC_WATER, STR_SMALLMAP_LEGENDA_WATER), + MO(0x00, STR_SMALLMAP_LEGENDA_NO_OWNER), // This colour will vary depending on settings. + MO(PC_DARK_RED, STR_SMALLMAP_LEGENDA_TOWNS), + MO(PC_DARK_GREY, STR_SMALLMAP_LEGENDA_INDUSTRIES), + /* The legend will be terminated the first time it is used. */ + MOEND(), +}; + +#undef MK +#undef MC +#undef MS +#undef MO +#undef MOEND +#undef MKEND + +/** Legend entries for the link stats view. */ +static LegendAndColour _legend_linkstats[NUM_CARGO + lengthof(_linkstat_colours_in_legenda) + 1]; +/** + * Allow room for all industries, plus a terminator entry + * This is required in order to have the industry slots all filled up + */ +static LegendAndColour _legend_from_industries[NUM_INDUSTRYTYPES + 1]; +/** For connecting industry type to position in industries list(small map legend) */ +static uint _industry_to_list_pos[NUM_INDUSTRYTYPES]; +/** Show heightmap in industry and owner mode of smallmap window. */ +static bool _smallmap_show_heightmap = false; +/** Highlight a specific industry type */ +static IndustryType _smallmap_industry_highlight = INVALID_INDUSTRYTYPE; +/** State of highlight blinking */ +static bool _smallmap_industry_highlight_state; +/** For connecting company ID to position in owner list (small map legend) */ +static uint _company_to_list_pos[MAX_COMPANIES]; + +/** + * Fills an array for the industries legends. + */ +void BuildIndustriesLegend() +{ + uint j = 0; + + /* Add each name */ + for (IndustryType ind : _sorted_industry_types) { + const IndustrySpec *indsp = GetIndustrySpec(ind); + if (indsp->enabled) { + _legend_from_industries[j].legend = indsp->name; + _legend_from_industries[j].colour = indsp->map_colour; + _legend_from_industries[j].type = ind; + _legend_from_industries[j].show_on_map = true; + _legend_from_industries[j].col_break = false; + _legend_from_industries[j].end = false; + + /* Store widget number for this industry type. */ + _industry_to_list_pos[ind] = j; + j++; + } + } + /* Terminate the list */ + _legend_from_industries[j].end = true; + + /* Store number of enabled industries */ + _smallmap_industry_count = j; +} + +/** + * Populate legend table for the link stat view. + */ +void BuildLinkStatsLegend() +{ + /* Clear the legend */ + memset(_legend_linkstats, 0, sizeof(_legend_linkstats)); + + uint i = 0; + for (; i < _sorted_cargo_specs.size(); ++i) { + const CargoSpec *cs = _sorted_cargo_specs[i]; + + _legend_linkstats[i].legend = cs->name; + _legend_linkstats[i].colour = cs->legend_colour; + _legend_linkstats[i].type = cs->Index(); + _legend_linkstats[i].show_on_map = true; + } + + _legend_linkstats[i].col_break = true; + _smallmap_cargo_count = i; + + for (; i < _smallmap_cargo_count + lengthof(_linkstat_colours_in_legenda); ++i) { + _legend_linkstats[i].legend = STR_EMPTY; + _legend_linkstats[i].colour = LinkGraphOverlay::LINK_COLOURS[_linkstat_colours_in_legenda[i - _smallmap_cargo_count]]; + _legend_linkstats[i].show_on_map = true; + } + + _legend_linkstats[_smallmap_cargo_count].legend = STR_LINKGRAPH_LEGEND_UNUSED; + _legend_linkstats[i - 1].legend = STR_LINKGRAPH_LEGEND_OVERLOADED; + _legend_linkstats[(_smallmap_cargo_count + i - 1) / 2].legend = STR_LINKGRAPH_LEGEND_SATURATED; + _legend_linkstats[i].end = true; +} + +static const LegendAndColour * const _legend_table[] = { + _legend_land_contours, + _legend_vehicles, + _legend_from_industries, + _legend_linkstats, + _legend_routes, + _legend_vegetation, + _legend_land_owners, + _legend_from_industries, +}; + +#define MKCOLOUR(x) TO_LE32X(x) + +#define MKCOLOUR_XXXX(x) (MKCOLOUR(0x01010101) * (uint)(x)) +#define MKCOLOUR_X0X0(x) (MKCOLOUR(0x01000100) * (uint)(x)) +#define MKCOLOUR_0X0X(x) (MKCOLOUR(0x00010001) * (uint)(x)) +#define MKCOLOUR_0XX0(x) (MKCOLOUR(0x00010100) * (uint)(x)) +#define MKCOLOUR_X00X(x) (MKCOLOUR(0x01000001) * (uint)(x)) + +#define MKCOLOUR_XYXY(x, y) (MKCOLOUR_X0X0(x) | MKCOLOUR_0X0X(y)) +#define MKCOLOUR_XYYX(x, y) (MKCOLOUR_X00X(x) | MKCOLOUR_0XX0(y)) + +#define MKCOLOUR_0000 MKCOLOUR_XXXX(0x00) +#define MKCOLOUR_0FF0 MKCOLOUR_0XX0(0xFF) +#define MKCOLOUR_F00F MKCOLOUR_X00X(0xFF) +#define MKCOLOUR_FFFF MKCOLOUR_XXXX(0xFF) + +#include "../table/heightmap_colours.h" + +/** Colour scheme of the smallmap. */ +struct SmallMapColourScheme { + uint32 *height_colours; ///< Cached colours for each level in a map. + const uint32 *height_colours_base; ///< Base table for determining the colours + size_t colour_count; ///< The number of colours. + uint32 default_colour; ///< Default colour of the land. +}; + +/** Available colour schemes for height maps. */ +static SmallMapColourScheme _heightmap_schemes[] = { + {nullptr, _green_map_heights, lengthof(_green_map_heights), MKCOLOUR_XXXX(0x54)}, ///< Green colour scheme. + {nullptr, _dark_green_map_heights, lengthof(_dark_green_map_heights), MKCOLOUR_XXXX(0x62)}, ///< Dark green colour scheme. + {nullptr, _violet_map_heights, lengthof(_violet_map_heights), MKCOLOUR_XXXX(0x81)}, ///< Violet colour scheme. + {nullptr, citymania::_yellow_map_heights, lengthof(citymania::_yellow_map_heights), MKCOLOUR_XXXX(0xC1)}, +}; + +/** + * (Re)build the colour tables for the legends. + */ +void BuildLandLegend() +{ + /* The smallmap window has never been initialized, so no need to change the legend. */ + if (_heightmap_schemes[0].height_colours == nullptr) return; + + /* + * The general idea of this function is to fill the legend with an appropriate evenly spaced + * selection of height levels. All entries with STR_TINY_BLACK_HEIGHT are reserved for this. + * At the moment there are twelve of these. + * + * The table below defines up to which height level a particular delta in the legend should be + * used. One could opt for just dividing the maximum height and use that as delta, but that + * creates many "ugly" legend labels, e.g. once every 950 meter. As a result, this table will + * reduce the number of deltas to 7: every 100m, 200m, 300m, 500m, 750m, 1000m and 1250m. The + * deltas are closer together at the lower numbers because going from 12 entries to just 4, as + * would happen when replacing 200m and 300m by 250m, would mean the legend would be short and + * that might not be considered appropriate. + * + * The current method yields at least 7 legend entries and at most 12. It can be increased to + * 8 by adding a 150m and 400m option, but especially 150m creates ugly heights. + * + * It tries to evenly space the legend items over the two columns that are there for the legend. + */ + + /* Table for delta; if max_height is less than the first column, use the second column as value. */ + uint deltas[][2] = { { 24, 2 }, { 48, 4 }, { 72, 6 }, { 120, 10 }, { 180, 15 }, { 240, 20 }, { MAX_TILE_HEIGHT + 1, 25 }}; + uint i = 0; + for (; _settings_game.construction.map_height_limit >= deltas[i][0]; i++) { + /* Nothing to do here. */ + } + uint delta = deltas[i][1]; + + int total_entries = (_settings_game.construction.map_height_limit / delta) + 1; + int rows = CeilDiv(total_entries, 2); + int j = 0; + + for (i = 0; i < lengthof(_legend_land_contours) - 1 && j < total_entries; i++) { + if (_legend_land_contours[i].legend != STR_TINY_BLACK_HEIGHT) continue; + + _legend_land_contours[i].col_break = j % rows == 0; + _legend_land_contours[i].end = false; + _legend_land_contours[i].height = j * delta; + _legend_land_contours[i].colour = _heightmap_schemes[_settings_client.gui.smallmap_land_colour].height_colours[j * delta]; + j++; + } + _legend_land_contours[i].end = true; +} + +/** + * Completes the array for the owned property legend. + */ +void BuildOwnerLegend() +{ + _legend_land_owners[1].colour = _heightmap_schemes[_settings_client.gui.smallmap_land_colour].default_colour; + + int i = NUM_NO_COMPANY_ENTRIES; + for (const Company *c : Company::Iterate()) { + _legend_land_owners[i].colour = _colour_gradient[c->colour][5]; + _legend_land_owners[i].company = c->index; + _legend_land_owners[i].show_on_map = true; + _legend_land_owners[i].col_break = false; + _legend_land_owners[i].end = false; + _company_to_list_pos[c->index] = i; + i++; + } + + /* Terminate the list */ + _legend_land_owners[i].end = true; + + /* Store maximum amount of owner legend entries. */ + _smallmap_company_count = i; +} + +struct AndOr { + uint32 mor; + uint32 mand; +}; + +static inline uint32 ApplyMask(uint32 colour, const AndOr *mask) +{ + return (colour & mask->mand) | mask->mor; +} + + +/** Colour masks for "Contour" and "Routes" modes. */ +static const AndOr _smallmap_contours_andor[] = { + {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_CLEAR + {MKCOLOUR_0XX0(PC_GREY ), MKCOLOUR_F00F}, // MP_RAILWAY + {MKCOLOUR_0XX0(PC_BLACK ), MKCOLOUR_F00F}, // MP_ROAD + {MKCOLOUR_0XX0(PC_DARK_RED ), MKCOLOUR_F00F}, // MP_HOUSE + {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_TREES + {MKCOLOUR_XXXX(PC_LIGHT_BLUE), MKCOLOUR_0000}, // MP_STATION + {MKCOLOUR_XXXX(PC_WATER ), MKCOLOUR_0000}, // MP_WATER + {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_VOID + {MKCOLOUR_XXXX(PC_DARK_RED ), MKCOLOUR_0000}, // MP_INDUSTRY + {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_TUNNELBRIDGE + {MKCOLOUR_0XX0(PC_DARK_RED ), MKCOLOUR_F00F}, // MP_OBJECT + {MKCOLOUR_0XX0(PC_GREY ), MKCOLOUR_F00F}, +}; + +/** Colour masks for "Vehicles", "Industry", and "Vegetation" modes. */ +static const AndOr _smallmap_vehicles_andor[] = { + {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_CLEAR + {MKCOLOUR_0XX0(PC_BLACK ), MKCOLOUR_F00F}, // MP_RAILWAY + {MKCOLOUR_0XX0(PC_BLACK ), MKCOLOUR_F00F}, // MP_ROAD + {MKCOLOUR_0XX0(PC_DARK_RED ), MKCOLOUR_F00F}, // MP_HOUSE + {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_TREES + {MKCOLOUR_0XX0(PC_BLACK ), MKCOLOUR_F00F}, // MP_STATION + {MKCOLOUR_XXXX(PC_WATER ), MKCOLOUR_0000}, // MP_WATER + {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_VOID + {MKCOLOUR_XXXX(PC_DARK_RED ), MKCOLOUR_0000}, // MP_INDUSTRY + {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_TUNNELBRIDGE + {MKCOLOUR_0XX0(PC_DARK_RED ), MKCOLOUR_F00F}, // MP_OBJECT + {MKCOLOUR_0XX0(PC_BLACK ), MKCOLOUR_F00F}, +}; + +/** Mapping of tile type to importance of the tile (higher number means more interesting to show). */ +static const byte _tiletype_importance[] = { + 2, // MP_CLEAR + 8, // MP_RAILWAY + 7, // MP_ROAD + 5, // MP_HOUSE + 2, // MP_TREES + 9, // MP_STATION + 2, // MP_WATER + 1, // MP_VOID + 6, // MP_INDUSTRY + 8, // MP_TUNNELBRIDGE + 2, // MP_OBJECT + 0, +}; + + +/** + * Return the colour a tile would be displayed with in the small map in mode "Contour". + * @param tile The tile of which we would like to get the colour. + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). + * @return The colour of tile in the small map in mode "Contour" + */ +static inline uint32 GetSmallMapContoursPixels(TileIndex tile, TileType t) +{ + const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; + return ApplyMask(cs->height_colours[TileHeight(tile)], &_smallmap_contours_andor[t]); +} + +/** + * Return the colour a tile would be displayed with in the small map in mode "Vehicles". + * + * @param tile The tile of which we would like to get the colour. + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). + * @return The colour of tile in the small map in mode "Vehicles" + */ +static inline uint32 GetSmallMapVehiclesPixels(TileIndex tile, TileType t) +{ + const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; + return ApplyMask(cs->default_colour, &_smallmap_vehicles_andor[t]); +} + +/** + * Return the colour a tile would be displayed with in the small map in mode "Industries". + * + * @param tile The tile of which we would like to get the colour. + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). + * @return The colour of tile in the small map in mode "Industries" + */ +static inline uint32 GetSmallMapIndustriesPixels(TileIndex tile, TileType t) +{ + const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; + return ApplyMask(_smallmap_show_heightmap ? cs->height_colours[TileHeight(tile)] : cs->default_colour, &_smallmap_vehicles_andor[t]); +} + +/** + * Return the colour a tile would be displayed with in the small map in mode "Routes". + * + * @param tile The tile of which we would like to get the colour. + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). + * @return The colour of tile in the small map in mode "Routes" + */ +static inline uint32 GetSmallMapRoutesPixels(TileIndex tile, TileType t) +{ + switch (t) { + case MP_STATION: + switch (GetStationType(tile)) { + case STATION_RAIL: return MKCOLOUR_XXXX(PC_VERY_DARK_BROWN); + case STATION_AIRPORT: return MKCOLOUR_XXXX(PC_RED); + case STATION_TRUCK: return MKCOLOUR_XXXX(PC_ORANGE); + case STATION_BUS: return MKCOLOUR_XXXX(PC_YELLOW); + case STATION_DOCK: return MKCOLOUR_XXXX(PC_LIGHT_BLUE); + default: return MKCOLOUR_FFFF; + } + + case MP_RAILWAY: { + AndOr andor = { + MKCOLOUR_0XX0(GetRailTypeInfo(GetRailType(tile))->map_colour), + _smallmap_contours_andor[t].mand + }; + + const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; + return ApplyMask(cs->default_colour, &andor); + } + + case MP_ROAD: { + const RoadTypeInfo *rti = nullptr; + if (GetRoadTypeRoad(tile) != INVALID_ROADTYPE) { + rti = GetRoadTypeInfo(GetRoadTypeRoad(tile)); + } else { + rti = GetRoadTypeInfo(GetRoadTypeTram(tile)); + } + if (rti != nullptr) { + AndOr andor = { + MKCOLOUR_0XX0(rti->map_colour), + _smallmap_contours_andor[t].mand + }; + + const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; + return ApplyMask(cs->default_colour, &andor); + } + FALLTHROUGH; + } + + default: + /* Ground colour */ + const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; + return ApplyMask(cs->default_colour, &_smallmap_contours_andor[t]); + } +} + +/** + * Return the colour a tile would be displayed with in the small map in mode "link stats". + * + * @param tile The tile of which we would like to get the colour. + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). + * @return The colour of tile in the small map in mode "link stats" + */ +static inline uint32 GetSmallMapLinkStatsPixels(TileIndex tile, TileType t) +{ + return _smallmap_show_heightmap ? GetSmallMapContoursPixels(tile, t) : GetSmallMapRoutesPixels(tile, t); +} + +static const uint32 _vegetation_clear_bits[] = { + MKCOLOUR_XXXX(PC_GRASS_LAND), ///< full grass + MKCOLOUR_XXXX(PC_ROUGH_LAND), ///< rough land + MKCOLOUR_XXXX(PC_GREY), ///< rocks + MKCOLOUR_XXXX(PC_FIELDS), ///< fields + MKCOLOUR_XXXX(PC_LIGHT_BLUE), ///< snow + MKCOLOUR_XXXX(PC_ORANGE), ///< desert + MKCOLOUR_XXXX(PC_GRASS_LAND), ///< unused + MKCOLOUR_XXXX(PC_GRASS_LAND), ///< unused +}; + +/** + * Return the colour a tile would be displayed with in the smallmap in mode "Vegetation". + * + * @param tile The tile of which we would like to get the colour. + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). + * @return The colour of tile in the smallmap in mode "Vegetation" + */ +static inline uint32 GetSmallMapVegetationPixels(TileIndex tile, TileType t) +{ + switch (t) { + case MP_CLEAR: + if (IsClearGround(tile, CLEAR_GRASS)) { + if (GetClearDensity(tile) < 3) return MKCOLOUR_XXXX(PC_BARE_LAND); + if (GetTropicZone(tile) == TROPICZONE_RAINFOREST) return MKCOLOUR_XXXX(PC_RAINFOREST); + } + return _vegetation_clear_bits[GetClearGround(tile)]; + + case MP_INDUSTRY: + return IsTileForestIndustry(tile) ? MKCOLOUR_XXXX(PC_GREEN) : MKCOLOUR_XXXX(PC_DARK_RED); + + case MP_TREES: + if (GetTreeGround(tile) == TREE_GROUND_SNOW_DESERT || GetTreeGround(tile) == TREE_GROUND_ROUGH_SNOW) { + return (_settings_game.game_creation.landscape == LT_ARCTIC) ? MKCOLOUR_XYYX(PC_LIGHT_BLUE, PC_TREES) : MKCOLOUR_XYYX(PC_ORANGE, PC_TREES); + } + return (GetTropicZone(tile) == TROPICZONE_RAINFOREST) ? MKCOLOUR_XYYX(PC_RAINFOREST, PC_TREES) : MKCOLOUR_XYYX(PC_GRASS_LAND, PC_TREES); + + default: + return ApplyMask(MKCOLOUR_XXXX(PC_GRASS_LAND), &_smallmap_vehicles_andor[t]); + } +} + +/** + * Return the colour a tile would be displayed with in the small map in mode "Owner". + * + * @param tile The tile of which we would like to get the colour. + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). + * @return The colour of tile in the small map in mode "Owner" + */ +static inline uint32 GetSmallMapOwnerPixels(TileIndex tile, TileType t) +{ + Owner o; + + switch (t) { + case MP_INDUSTRY: return MKCOLOUR_XXXX(PC_DARK_GREY); + case MP_HOUSE: return MKCOLOUR_XXXX(PC_DARK_RED); + default: o = GetTileOwner(tile); break; + /* FIXME: For MP_ROAD there are multiple owners. + * GetTileOwner returns the rail owner (level crossing) resp. the owner of ROADTYPE_ROAD (normal road), + * even if there are no ROADTYPE_ROAD bits on the tile. + */ + } + + if ((o < MAX_COMPANIES && !_legend_land_owners[_company_to_list_pos[o]].show_on_map) || o == OWNER_NONE || o == OWNER_WATER) { + if (t == MP_WATER) return MKCOLOUR_XXXX(PC_WATER); + const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; + return _smallmap_show_heightmap ? cs->height_colours[TileHeight(tile)] : cs->default_colour; + } else if (o == OWNER_TOWN) { + return MKCOLOUR_XXXX(PC_DARK_RED); + } + + return MKCOLOUR_XXXX(_legend_land_owners[_company_to_list_pos[o]].colour); +} + +static inline uint32 CM_GetSmallMapIMBAPixels(TileIndex tile, TileType t) +{ + // const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; + switch (t) { + // case MP_TREES: + // if (GetTreeGround(tile) == TREE_GROUND_SNOW_DESERT || GetTreeGround(tile) == TREE_GROUND_ROUGH_SNOW) { + // return (_settings_game.game_creation.landscape == LT_ARCTIC) ? MKCOLOUR_XYYX(PC_LIGHT_BLUE, PC_TREES) : MKCOLOUR_XYYX(PC_ORANGE, PC_TREES); + // } + // return MKCOLOUR_XYYX(PC_GRASS_LAND, PC_TREES); + + case MP_CLEAR: + if (IsClearGround(tile, CLEAR_FIELDS) || IsClearGround(tile, CLEAR_DESERT)) { + const SmallMapColourScheme *cs = &_heightmap_schemes[3]; + return cs->height_colours[TileHeight(tile)]; + } + // if (IsClearGround(tile, CLEAR_SNOW)) + // return _vegetation_clear_bits[GetClearGround(tile)]; + FALLTHROUGH; + + default: + const SmallMapColourScheme *cs = &_heightmap_schemes[_settings_client.gui.smallmap_land_colour]; + return ApplyMask(cs->height_colours[TileHeight(tile)], &_smallmap_vehicles_andor[t]); + } +} + +/** Vehicle colours in #SMT_VEHICLES mode. Indexed by #VehicleType. */ +static const byte _vehicle_type_colours[6] = { + PC_RED, PC_YELLOW, PC_LIGHT_BLUE, PC_WHITE, PC_BLACK, PC_RED +}; + + +/** Notify the industry chain window to stop sending newly selected industries. */ +/* static */ void SmallMapWindow::BreakIndustryChainLink() +{ + InvalidateWindowClassesData(WC_INDUSTRY_CARGOES, NUM_INDUSTRYTYPES); +} + +inline Point SmallMapWindow::TileToPixel(int tx, int ty) const +{ + return { + (ty - tx) * 2 / this->zoom + this->scroll_x, + (ty + tx) / this->zoom + this->scroll_y, + }; +} + +/** + * Determine the tile relative to the base tile of the smallmap, and the pixel position at + * that tile for a point in the smallmap. + * @param px Horizontal coordinate of the pixel. + * @param py Vertical coordinate of the pixel. + * @param[out] sub Pixel position at the tile (0..3). + * @param add_sub Add current #subscroll to the position. + * @return Tile being displayed at the given position relative to #scroll_x and #scroll_y. + * @note The #subscroll offset is already accounted for. + */ +inline Point SmallMapWindow::PixelToTile(int px, int py) const + +{ + px -= this->scroll_x; + py -= this->scroll_y; + + return { + (py * 2 - px) * this->zoom / 4, + (py * 2 + px) * this->zoom / 4, + }; +} + +/** + * Initialize or change the zoom level. + * @param change Way to change the zoom level. + * @param zoom_pt Position to keep fixed while zooming. + * @pre \c *zoom_pt should contain a point in the smallmap display when zooming in or out. + */ +void SmallMapWindow::SetZoomLevel(ZoomLevelChange change, const Point *zoom_pt) +{ + // static const int zoomlevels[] = {1, 2, 4, 6, 8}; // Available zoom levels. Bigger number means more zoom-out (further away). + static const int tile_zoomlevels[] = {1, 1, 1, 2, 4, 6, 8}; // Available zoom levels. Bigger number means more zoom-out (further away). + static const int ui_zoomlevels[] = {4, 2, 1, 1, 1, 1, 1}; // Available zoom levels. Bigger number means more zoom-out (further away). + static const int MIN_ZOOM_INDEX = 0; + static const int MAX_ZOOM_INDEX = lengthof(tile_zoomlevels) - 1; + + int new_index, cur_index; + Point tile; + switch (change) { + case ZLC_INITIALIZE: + cur_index = - 1; // Definitely different from new_index. + new_index = Clamp((int)ZOOM_LVL_GUI, MIN_ZOOM_INDEX, MAX_ZOOM_INDEX); + tile.x = tile.y = 0; + break; + + case ZLC_ZOOM_IN: + case ZLC_ZOOM_OUT: + for (cur_index = MIN_ZOOM_INDEX; cur_index <= MAX_ZOOM_INDEX; cur_index++) { + if (this->tile_zoom == tile_zoomlevels[cur_index] && this->ui_zoom == ui_zoomlevels[cur_index]) break; + } + assert(cur_index <= MAX_ZOOM_INDEX); + + tile = this->PixelToTile(zoom_pt->x, zoom_pt->y); + new_index = Clamp(cur_index + ((change == ZLC_ZOOM_IN) ? -1 : 1), MIN_ZOOM_INDEX, MAX_ZOOM_INDEX); + break; + + default: NOT_REACHED(); + } + + if (new_index != cur_index) { + this->tile_zoom = tile_zoomlevels[new_index]; + this->ui_zoom = ui_zoomlevels[new_index]; + this->zoom = this->tile_zoom * TILE_SIZE / this->ui_zoom; + if (cur_index >= 0) { + Point new_tile = this->TileToPixel(tile.x, tile.y); + scroll_x += zoom_pt->x - new_tile.x; + scroll_y += zoom_pt->y - new_tile.y; + } else if (this->map_type == SMT_LINKSTATS) { + this->overlay->SetDirty(); + } + this->SetWidgetDisabledState(WID_SM_ZOOM_IN, this->ui_zoom == ui_zoomlevels[MIN_ZOOM_INDEX]); + this->SetWidgetDisabledState(WID_SM_ZOOM_OUT, this->tile_zoom == tile_zoomlevels[MAX_ZOOM_INDEX]); + this->SetDirty(); + } +} + +/** + * Decide which colours to show to the user for a group of tiles. + * @param ta Tile area to investigate. + * @return Colours to display. + */ +inline uint32 SmallMapWindow::GetTileColours(const TileArea &ta) const +{ + int importance = 0; + TileIndex tile = INVALID_TILE; // Position of the most important tile. + TileType et = MP_VOID; // Effective tile type at that position. + + TILE_AREA_LOOP(ti, ta) { + TileType ttype = GetTileType(ti); + + switch (ttype) { + case MP_TUNNELBRIDGE: { + TransportType tt = GetTunnelBridgeTransportType(ti); + + switch (tt) { + case TRANSPORT_RAIL: ttype = MP_RAILWAY; break; + case TRANSPORT_ROAD: ttype = MP_ROAD; break; + default: ttype = MP_WATER; break; + } + break; + } + + case MP_INDUSTRY: + /* Special handling of industries while in "Industries" smallmap view. */ + if (this->map_type == SMT_INDUSTRY || this->map_type == CM_SMT_IMBA) { + /* If industry is allowed to be seen, use its colour on the map. + * This has the highest priority above any value in _tiletype_importance. */ + IndustryType type = Industry::GetByTile(ti)->type; + if (_legend_from_industries[_industry_to_list_pos[type]].show_on_map) { + if (type == _smallmap_industry_highlight) { + if (_smallmap_industry_highlight_state) return MKCOLOUR_XXXX(PC_WHITE); + } else { + return GetIndustrySpec(type)->map_colour * 0x01010101; + } + } + /* Otherwise make it disappear */ + ttype = IsTileOnWater(ti) ? MP_WATER : MP_CLEAR; + } + break; + + default: + break; + } + + if (_tiletype_importance[ttype] > importance) { + importance = _tiletype_importance[ttype]; + tile = ti; + et = ttype; + } + } + + switch (this->map_type) { + case SMT_CONTOUR: + return GetSmallMapContoursPixels(tile, et); + + case SMT_VEHICLES: + return GetSmallMapVehiclesPixels(tile, et); + + case SMT_INDUSTRY: + return GetSmallMapIndustriesPixels(tile, et); + + case SMT_LINKSTATS: + return GetSmallMapLinkStatsPixels(tile, et); + + case SMT_ROUTES: + return GetSmallMapRoutesPixels(tile, et); + + case SMT_VEGETATION: + return GetSmallMapVegetationPixels(tile, et); + + case SMT_OWNER: + return GetSmallMapOwnerPixels(tile, et); + + case CM_SMT_IMBA: + return CM_GetSmallMapIMBAPixels(tile, et); + + default: NOT_REACHED(); + } +} + +/** + * Draws one column of tiles of the small map in a certain mode onto the screen buffer, skipping the shifted rows in between. + * + * @param dst Pointer to a part of the screen buffer to write to. + * @param xc The X coordinate of the first tile in the column. + * @param yc The Y coordinate of the first tile in the column + * @param pitch Number of pixels to advance in the screen buffer each time a pixel is written. + * @param reps Number of lines to draw + * @param start_pos Position of first pixel to draw. + * @param end_pos Position of last pixel to draw (exclusive). + * @param blitter current blitter + * @note If pixel position is below \c 0, skip drawing. + */ +void SmallMapWindow::DrawSmallMapColumn(void *dst, uint xc, uint yc, int pitch, int reps, int start_pos, int end_pos, int y, int end_y, Blitter *blitter) const +{ + void *dst_ptr_abs_end = blitter->MoveTo(_screen.dst_ptr, 0, _screen.height); + uint min_xy = _settings_game.construction.freeform_edges ? 1 : 0; + + int hidden_x = std::max(0, -start_pos); + int hidden_idx = hidden_x / this->ui_zoom; + int hidden_mod = hidden_x % this->ui_zoom; + do { + /* Check if the tile (xc,yc) is within the map range */ + if (xc >= MapMaxX() || yc >= MapMaxY()) continue; + + /* Check if the dst pointer points to a pixel inside the screen buffer */ + if (dst < _screen.dst_ptr) continue; + if (dst >= dst_ptr_abs_end) continue; + + /* Construct tilearea covered by (xc, yc, xc + this->zoom, yc + this->zoom) such that it is within min_xy limits. */ + TileArea ta; + if (min_xy == 1 && (xc == 0 || yc == 0)) { + if (this->tile_zoom == 1) continue; // The tile area is empty, don't draw anything. + ta = TileArea(TileXY(std::max(min_xy, xc), std::max(min_xy, yc)), this->tile_zoom - (xc == 0), this->tile_zoom - (yc == 0)); + } else { + ta = TileArea(TileXY(xc, yc), this->tile_zoom, this->tile_zoom); + } + ta.ClampToMap(); // Clamp to map boundaries (may contain MP_VOID tiles!). + + uint32 val = this->GetTileColours(ta); + uint8 *val8 = (uint8 *)&val; + if (this->ui_zoom == 1) { + int idx = std::max(0, -start_pos); + if (y >= 0 && y < end_y) { + for (int pos = std::max(0, start_pos); pos < end_pos; pos++) { + blitter->SetPixel(dst, idx, 0, val8[idx]); + idx++; + } + } + } else { + auto ndst = dst; + auto ny = y; + for (auto i = 0; i < this->ui_zoom; i++) { + if (ny >= 0 && ny < end_y) { + int idx = hidden_idx; + int j = hidden_mod; + int x = hidden_x; + for (int pos = std::max(0, start_pos); pos < end_pos; pos++) { + blitter->SetPixel(ndst, x, 0, val8[idx]); + j++; + x++; + if (j == this->ui_zoom) { + idx++; + j = 0; + } + } + } + ndst = blitter->MoveTo(ndst, pitch, 0); + ny++; + } + } + /* Switch to next tile in the column */ + } while (xc += this->tile_zoom, yc += this->tile_zoom, dst = blitter->MoveTo(dst, pitch * this->ui_zoom * 2, 0), y += 2 * this->ui_zoom, --reps != 0); +} + +/** + * Adds vehicles to the smallmap. + * @param dpi the part of the smallmap to be drawn into + * @param blitter current blitter + */ +void SmallMapWindow::DrawVehicles(const DrawPixelInfo *dpi, Blitter *blitter) const +{ + for (const Vehicle *v : Vehicle::Iterate()) { + if (v->type == VEH_EFFECT) continue; + if (v->vehstatus & (VS_HIDDEN | VS_UNCLICKABLE)) continue; + + /* Remap into flat coordinates. */ + Point pt = this->TileToPixel(v->x_pos & ~TILE_UNIT_MASK, v->y_pos & ~TILE_UNIT_MASK); + + int y = pt.y - dpi->top; + int x = pt.x - 1 * this->ui_zoom - dpi->left; // Offset X coordinate. + if (!IsInsideMM(y, -this->ui_zoom + 1, dpi->height)) continue; // y is out of bounds. + + /* Calculate pointer to pixel and the colour */ + byte colour = (this->map_type == SMT_VEHICLES) ? _vehicle_type_colours[v->type] : PC_WHITE; + + /* And draw either one or two pixels depending on clipping */ + auto min_i = std::max(0, -y); + auto max_i = std::min(this->ui_zoom, dpi->height - y); + auto min_j = std::max(0, -x); + auto max_j = std::min(2 * this->ui_zoom, dpi->width - x); + for (auto i = min_i; i < max_i; i++) + for (auto j = min_j; j < max_j; j++) + blitter->SetPixel(dpi->dst_ptr, x + j, y + i, colour); + } +} + +/** + * Adds town names to the smallmap. + * @param dpi the part of the smallmap to be drawn into + */ +void SmallMapWindow::DrawTowns(const DrawPixelInfo *dpi) const +{ + for (const Town *t : Town::Iterate()) { + /* Remap the town coordinate */ + Point pt = this->TileToPixel(TileX(t->xy) * TILE_SIZE, TileY(t->xy) * TILE_SIZE); + int x = pt.x - (t->cache.sign.width_small >> 1); + int y = pt.y; + + /* Check if the town sign is within bounds */ + if (x + t->cache.sign.width_small > dpi->left && + x < dpi->left + dpi->width && + y + FONT_HEIGHT_SMALL > dpi->top && + y < dpi->top + dpi->height) { + /* And draw it. */ + SetDParam(0, t->index); + DrawString(x, x + t->cache.sign.width_small, y, t->larger_town ? STR_SMALLMAP_TOWN_LARGE : STR_SMALLMAP_TOWN); + } + } +} + +/** + * Adds map indicators to the smallmap. + */ +void SmallMapWindow::DrawMapIndicators() const +{ + /* Find main viewport. */ + const Viewport *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; + + Point upper_left_smallmap_coord = InverseRemapCoords2(vp->virtual_left, vp->virtual_top); + Point lower_right_smallmap_coord = InverseRemapCoords2(vp->virtual_left + vp->virtual_width - 1, vp->virtual_top + vp->virtual_height - 1); + + Point upper_left = this->TileToPixel(upper_left_smallmap_coord.x, upper_left_smallmap_coord.y); + Point lower_right = this->TileToPixel(lower_right_smallmap_coord.x, lower_right_smallmap_coord.y); + + SmallMapWindow::DrawVertMapIndicator(upper_left.x, upper_left.y, lower_right.y); + SmallMapWindow::DrawVertMapIndicator(lower_right.x, upper_left.y, lower_right.y); + + SmallMapWindow::DrawHorizMapIndicator(upper_left.x, lower_right.x, upper_left.y); + SmallMapWindow::DrawHorizMapIndicator(upper_left.x, lower_right.x, lower_right.y); +} + +/** + * Draws the small map. + * + * Basically, the small map is draw column of pixels by column of pixels. The pixels + * are drawn directly into the screen buffer. The final map is drawn in multiple passes. + * The passes are: + *
  1. The colours of tiles in the different modes.
  2. + *
  3. Town names (optional)
+ * + * @param dpi pointer to pixel to write onto + */ +void SmallMapWindow::DrawSmallMap(DrawPixelInfo *dpi) const +{ + Blitter *blitter = BlitterFactory::GetCurrentBlitter(); + DrawPixelInfo *old_dpi; + + old_dpi = _cur_dpi; + _cur_dpi = dpi; + + /* Clear it */ + GfxFillRect(dpi->left, dpi->top, dpi->left + dpi->width - 1, dpi->top + dpi->height - 1, PC_BLACK); + + /* Which tile is displayed at (dpi->left, dpi->top)? */ + Point tile = this->PixelToTile(dpi->left, dpi->top); + int tile_x = tile.x / (int)TILE_SIZE + this->tile_zoom; + int tile_y = tile.y / (int)TILE_SIZE - 2 * this->tile_zoom; + tile_x -= tile_x % this->tile_zoom; + tile_y -= tile_y % this->tile_zoom; + Point tile_pos = this->TileToPixel(tile_x * TILE_SIZE, tile_y * TILE_SIZE); + int dx = tile_pos.x - dpi->left; + int dy = tile_pos.y - dpi->top; + + int x = dx - 2 * this->ui_zoom; + int y = dy; + void *ptr = blitter->MoveTo(dpi->dst_ptr, x, y); + bool even = true; + + for (;;) { + /* Distance from left edge */ + if (x > -4 * this->ui_zoom) { + if (x >= dpi->width) break; // Exit the loop. + + int end_pos = std::min(dpi->width, x + 4 * this->ui_zoom); + int reps = (dpi->height - y + 3 * this->ui_zoom - 1) / 2 / this->ui_zoom; // Number of lines. + if (reps > 0) { + this->DrawSmallMapColumn(ptr, tile_x, tile_y, dpi->pitch, reps, x, end_pos, y, dpi->height, blitter); + } + } + if (even) { + tile_y += this->tile_zoom; + y += this->ui_zoom; + ptr = blitter->MoveTo(ptr, 0, this->ui_zoom); + } else { + tile_x -= this->tile_zoom; + y -= this->ui_zoom; + ptr = blitter->MoveTo(ptr, 0, -this->ui_zoom); + } + even = !even; + ptr = blitter->MoveTo(ptr, 2 * this->ui_zoom, 0); + x += 2 * this->ui_zoom; + } + + /* Draw vehicles */ + if (this->map_type == SMT_CONTOUR || this->map_type == SMT_VEHICLES) this->DrawVehicles(dpi, blitter); + + /* Draw link stat overlay */ + if (this->map_type == SMT_LINKSTATS) this->overlay->Draw(dpi); + + /* Draw town names */ + if (this->show_towns) this->DrawTowns(dpi); + + /* Draw map indicators */ + this->DrawMapIndicators(); + + _cur_dpi = old_dpi; +} + +/** + * Function to set up widgets depending on the information being shown on the smallmap. + */ +void SmallMapWindow::SetupWidgetData() +{ + StringID legend_tooltip; + StringID enable_all_tooltip; + StringID disable_all_tooltip; + int plane; + switch (this->map_type) { + case SMT_INDUSTRY: + case CM_SMT_IMBA: + legend_tooltip = STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION; + enable_all_tooltip = STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES; + disable_all_tooltip = STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES; + plane = 0; + break; + + case SMT_OWNER: + legend_tooltip = STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION; + enable_all_tooltip = STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES; + disable_all_tooltip = STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES; + plane = 0; + break; + + case SMT_LINKSTATS: + legend_tooltip = STR_SMALLMAP_TOOLTIP_CARGO_SELECTION; + enable_all_tooltip = STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS; + disable_all_tooltip = STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS; + plane = 0; + break; + + default: + legend_tooltip = STR_NULL; + enable_all_tooltip = STR_NULL; + disable_all_tooltip = STR_NULL; + plane = 1; + break; + } + + this->GetWidget(WID_SM_LEGEND)->SetDataTip(STR_NULL, legend_tooltip); + this->GetWidget(WID_SM_ENABLE_ALL)->SetDataTip(STR_SMALLMAP_ENABLE_ALL, enable_all_tooltip); + this->GetWidget(WID_SM_DISABLE_ALL)->SetDataTip(STR_SMALLMAP_DISABLE_ALL, disable_all_tooltip); + this->GetWidget(WID_SM_SELECT_BUTTONS)->SetDisplayedPlane(plane); + this->SetWidgetDisabledState(WID_SM_SHOW_HEIGHT, this->map_type == CM_SMT_IMBA); +} + + +SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(desc), refresh(GUITimer(FORCE_REFRESH_PERIOD)) +{ + _smallmap_industry_highlight = INVALID_INDUSTRYTYPE; + this->overlay = new LinkGraphOverlay(this, WID_SM_MAP, 0, this->GetOverlayCompanyMask(), 1); + this->InitNested(window_number); + this->LowerWidget(this->map_type + WID_SM_CONTOUR); + + this->RebuildColourIndexIfNecessary(); + + this->SetWidgetLoweredState(WID_SM_SHOW_HEIGHT, _smallmap_show_heightmap); + + this->SetWidgetLoweredState(WID_SM_TOGGLETOWNNAME, this->show_towns); + + this->SetupWidgetData(); + + this->SetZoomLevel(ZLC_INITIALIZE, nullptr); + this->SmallMapCenterOnCurrentPos(); + this->SetOverlayCargoMask(); +} + +SmallMapWindow::~SmallMapWindow() +{ + delete this->overlay; + this->BreakIndustryChainLink(); +} + +/** + * Rebuilds the colour indices used for fast access to the smallmap contour colours based on the heightlevel. + */ +void SmallMapWindow::RebuildColourIndexIfNecessary() +{ + /* Rebuild colour indices if necessary. */ + if (SmallMapWindow::map_height_limit == _settings_game.construction.map_height_limit) return; + + for (uint n = 0; n < lengthof(_heightmap_schemes); n++) { + /* The heights go from 0 up to and including maximum. */ + int heights = _settings_game.construction.map_height_limit + 1; + _heightmap_schemes[n].height_colours = ReallocT(_heightmap_schemes[n].height_colours, heights); + + for (int z = 0; z < heights; z++) { + size_t access_index = (_heightmap_schemes[n].colour_count * z) / heights; + + /* Choose colour by mapping the range (0..max heightlevel) on the complete colour table. */ + _heightmap_schemes[n].height_colours[z] = _heightmap_schemes[n].height_colours_base[access_index]; + } + } + + SmallMapWindow::map_height_limit = _settings_game.construction.map_height_limit; + BuildLandLegend(); +} + +/* virtual */ void SmallMapWindow::SetStringParameters(int widget) const +{ + switch (widget) { + case WID_SM_CAPTION: + SetDParam(0, STR_SMALLMAP_TYPE_CONTOURS + this->map_type); + break; + } +} + +/* virtual */ void SmallMapWindow::OnInit() +{ + uint min_width = 0; + this->min_number_of_columns = INDUSTRY_MIN_NUMBER_OF_COLUMNS; + this->min_number_of_fixed_rows = lengthof(_linkstat_colours_in_legenda); + for (uint i = 0; i < lengthof(_legend_table); i++) { + uint height = 0; + uint num_columns = 1; + for (const LegendAndColour *tbl = _legend_table[i]; !tbl->end; ++tbl) { + StringID str; + if (i == SMT_INDUSTRY || i == CM_SMT_IMBA) { + SetDParam(0, tbl->legend); + SetDParam(1, IndustryPool::MAX_SIZE); + str = STR_SMALLMAP_INDUSTRY; + } else if (i == SMT_LINKSTATS) { + SetDParam(0, tbl->legend); + str = STR_SMALLMAP_LINKSTATS; + } else if (i == SMT_OWNER) { + if (tbl->company != INVALID_COMPANY) { + if (!Company::IsValidID(tbl->company)) { + /* Rebuild the owner legend. */ + BuildOwnerLegend(); + this->OnInit(); + return; + } + /* Non-fixed legend entries for the owner view. */ + SetDParam(0, tbl->company); + str = STR_SMALLMAP_COMPANY; + } else { + str = tbl->legend; + } + } else { + if (tbl->col_break) { + this->min_number_of_fixed_rows = std::max(this->min_number_of_fixed_rows, height); + height = 0; + num_columns++; + } + height++; + str = tbl->legend; + } + min_width = std::max(GetStringBoundingBox(str).width, min_width); + } + this->min_number_of_fixed_rows = std::max(this->min_number_of_fixed_rows, height); + this->min_number_of_columns = std::max(this->min_number_of_columns, num_columns); + } + + /* The width of a column is the minimum width of all texts + the size of the blob + some spacing */ + this->column_width = min_width + LEGEND_BLOB_WIDTH + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; +} + +/* virtual */ void SmallMapWindow::OnPaint() +{ + if (this->map_type == SMT_OWNER) { + for (const LegendAndColour *tbl = _legend_table[this->map_type]; !tbl->end; ++tbl) { + if (tbl->company != INVALID_COMPANY && !Company::IsValidID(tbl->company)) { + /* Rebuild the owner legend. */ + BuildOwnerLegend(); + this->InvalidateData(1); + break; + } + } + } + + this->DrawWidgets(); +} + +/* virtual */ void SmallMapWindow::DrawWidget(const Rect &r, int widget) const +{ + switch (widget) { + case WID_SM_MAP: { + DrawPixelInfo new_dpi; + if (!FillDrawPixelInfo(&new_dpi, r.left + 1, r.top + 1, r.right - r.left - 1, r.bottom - r.top - 1)) return; + this->DrawSmallMap(&new_dpi); + break; + } + + case WID_SM_LEGEND: { + uint columns = this->GetNumberColumnsLegend(r.right - r.left + 1); + uint number_of_rows = this->GetNumberRowsLegend(columns); + bool rtl = _current_text_dir == TD_RTL; + uint y_org = r.top + WD_FRAMERECT_TOP; + uint x = rtl ? r.right - this->column_width - WD_FRAMERECT_RIGHT : r.left + WD_FRAMERECT_LEFT; + uint y = y_org; + uint i = 0; // Row counter for industry legend. + uint row_height = FONT_HEIGHT_SMALL; + + uint text_left = rtl ? 0 : LEGEND_BLOB_WIDTH + WD_FRAMERECT_LEFT; + uint text_right = this->column_width - 1 - (rtl ? LEGEND_BLOB_WIDTH + WD_FRAMERECT_RIGHT : 0); + uint blob_left = rtl ? this->column_width - 1 - LEGEND_BLOB_WIDTH : 0; + uint blob_right = rtl ? this->column_width - 1 : LEGEND_BLOB_WIDTH; + + StringID string = STR_NULL; + switch (this->map_type) { + case SMT_INDUSTRY: + case CM_SMT_IMBA: + string = STR_SMALLMAP_INDUSTRY; + break; + case SMT_LINKSTATS: + string = STR_SMALLMAP_LINKSTATS; + break; + case SMT_OWNER: + string = STR_SMALLMAP_COMPANY; + break; + default: + break; + } + + for (const LegendAndColour *tbl = _legend_table[this->map_type]; !tbl->end; ++tbl) { + if (tbl->col_break || ((this->map_type == SMT_INDUSTRY || this->map_type == SMT_OWNER || this->map_type == SMT_LINKSTATS || this->map_type == CM_SMT_IMBA) && i++ >= number_of_rows)) { + /* Column break needed, continue at top, COLUMN_WIDTH pixels + * (one "row") to the right. */ + x += rtl ? -(int)this->column_width : this->column_width; + y = y_org; + i = 1; + } + + uint8 legend_colour = tbl->colour; + + switch (this->map_type) { + case SMT_INDUSTRY: + case CM_SMT_IMBA: + /* Industry name must be formatted, since it's not in tiny font in the specs. + * So, draw with a parameter and use the STR_SMALLMAP_INDUSTRY string, which is tiny font */ + SetDParam(0, tbl->legend); + SetDParam(1, Industry::GetIndustryTypeCount(tbl->type)); + if (tbl->show_on_map && tbl->type == _smallmap_industry_highlight) { + legend_colour = _smallmap_industry_highlight_state ? PC_WHITE : PC_BLACK; + } + FALLTHROUGH; + + case SMT_LINKSTATS: + SetDParam(0, tbl->legend); + FALLTHROUGH; + + case SMT_OWNER: + if (this->map_type != SMT_OWNER || tbl->company != INVALID_COMPANY) { + if (this->map_type == SMT_OWNER) SetDParam(0, tbl->company); + if (!tbl->show_on_map) { + /* Simply draw the string, not the black border of the legend colour. + * This will enforce the idea of the disabled item */ + DrawString(x + text_left, x + text_right, y, string, TC_GREY); + } else { + DrawString(x + text_left, x + text_right, y, string, TC_BLACK); + GfxFillRect(x + blob_left, y + 1, x + blob_right, y + row_height - 1, PC_BLACK); // Outer border of the legend colour + } + break; + } + FALLTHROUGH; + + default: + if (this->map_type == SMT_CONTOUR) SetDParam(0, tbl->height * TILE_HEIGHT_STEP); + /* Anything that is not an industry or a company is using normal process */ + GfxFillRect(x + blob_left, y + 1, x + blob_right, y + row_height - 1, PC_BLACK); + DrawString(x + text_left, x + text_right, y, tbl->legend); + break; + } + GfxFillRect(x + blob_left + 1, y + 2, x + blob_right - 1, y + row_height - 2, legend_colour); // Legend colour + + y += row_height; + } + break; + } + case CM_WID_SM_IMBA: { + uint offset = this->IsWidgetLowered(CM_WID_SM_IMBA) ? 1 : 0; + Dimension d = GetSpriteSize(SPR_IMG_INDUSTRY); + DrawSprite(SPR_IMG_INDUSTRY, PAL_NONE, (r.left + r.right - d.width) / 2 + offset, (r.top + r.bottom - d.height) / 2 + offset); + break; + } + } +} + +/** + * Select a new map type. + * @param map_type New map type. + */ +void SmallMapWindow::SwitchMapType(SmallMapType map_type) +{ + this->RaiseWidget(this->map_type + WID_SM_CONTOUR); + this->map_type = map_type; + this->LowerWidget(this->map_type + WID_SM_CONTOUR); + + this->SetupWidgetData(); + + if (map_type == SMT_LINKSTATS) this->overlay->SetDirty(); + if (map_type != SMT_INDUSTRY && map_type != CM_SMT_IMBA) this->BreakIndustryChainLink(); + this->SetDirty(); +} + +/** + * Get the number of rows in the legend from the number of columns. Those + * are at least min_number_of_fixed_rows and possibly more if there are so + * many cargoes, industry types or companies that they won't fit in the + * available space. + * @param columns Number of columns in the legend. + * @return Number of rows needed for everything to fit in. + */ +inline uint SmallMapWindow::GetNumberRowsLegend(uint columns) const +{ + /* Reserve one column for link colours */ + uint num_rows_linkstats = CeilDiv(_smallmap_cargo_count, columns - 1); + uint num_rows_others = CeilDiv(std::max(_smallmap_industry_count, _smallmap_company_count), columns); + return std::max(this->min_number_of_fixed_rows, std::max(num_rows_linkstats, num_rows_others)); +} + +/** + * Select and toggle a legend item. When CTRL is pressed, disable all other + * items in the group defined by begin_legend_item and end_legend_item and + * keep the clicked one enabled even if it was already enabled before. If + * the other items in the group are all disabled already and CTRL is pressed + * enable them instead. + * @param click_pos the index of the item being selected + * @param legend the legend from which we select + * @param end_legend_item index one past the last item in the group to be inverted + * @param begin_legend_item index of the first item in the group to be inverted + */ +void SmallMapWindow::SelectLegendItem(int click_pos, LegendAndColour *legend, int end_legend_item, int begin_legend_item) +{ + if (citymania::_fn_mod) { + /* Disable all, except the clicked one */ + bool changes = false; + for (int i = begin_legend_item; i != end_legend_item; i++) { + bool new_state = (i == click_pos); + if (legend[i].show_on_map != new_state) { + changes = true; + legend[i].show_on_map = new_state; + } + } + if (!changes) { + /* Nothing changed? Then show all (again). */ + for (int i = begin_legend_item; i != end_legend_item; i++) { + legend[i].show_on_map = true; + } + } + } else { + legend[click_pos].show_on_map = !legend[click_pos].show_on_map; + } + + if (this->map_type == SMT_INDUSTRY) this->BreakIndustryChainLink(); + if (this->map_type == CM_SMT_IMBA) this->BreakIndustryChainLink(); +} + +/** + * Set the link graph overlay cargo mask from the legend. + */ +void SmallMapWindow::SetOverlayCargoMask() +{ + CargoTypes cargo_mask = 0; + for (int i = 0; i != _smallmap_cargo_count; ++i) { + if (_legend_linkstats[i].show_on_map) SetBit(cargo_mask, _legend_linkstats[i].type); + } + this->overlay->SetCargoMask(cargo_mask); +} + +/** + * Determines the mouse position on the legend. + * @param pt Mouse position. + * @return Legend item under the mouse. + */ +int SmallMapWindow::GetPositionOnLegend(Point pt) +{ + const NWidgetBase *wi = this->GetWidget(WID_SM_LEGEND); + uint line = (pt.y - wi->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_SMALL; + uint columns = this->GetNumberColumnsLegend(wi->current_x); + uint number_of_rows = this->GetNumberRowsLegend(columns); + if (line >= number_of_rows) return -1; + + bool rtl = _current_text_dir == TD_RTL; + int x = pt.x - wi->pos_x; + if (rtl) x = wi->current_x - x; + uint column = (x - WD_FRAMERECT_LEFT) / this->column_width; + + return (column * number_of_rows) + line; +} + +/* virtual */ void SmallMapWindow::OnMouseOver(Point pt, int widget) +{ + IndustryType new_highlight = INVALID_INDUSTRYTYPE; + if (widget == WID_SM_LEGEND && (this->map_type == SMT_INDUSTRY || this->map_type == CM_SMT_IMBA)) { + int industry_pos = GetPositionOnLegend(pt); + if (industry_pos >= 0 && industry_pos < _smallmap_industry_count) { + new_highlight = _legend_from_industries[industry_pos].type; + } + } + if (new_highlight != _smallmap_industry_highlight) { + _smallmap_industry_highlight = new_highlight; + this->refresh.SetInterval(_smallmap_industry_highlight != INVALID_INDUSTRYTYPE ? BLINK_PERIOD : FORCE_REFRESH_PERIOD); + _smallmap_industry_highlight_state = true; + this->SetDirty(); + } +} + +/* virtual */ void SmallMapWindow::OnClick(Point pt, int widget, int click_count) +{ + switch (widget) { + case WID_SM_MAP: { // Map window + if (click_count > 0) this->mouse_capture_widget = widget; + + const NWidgetBase *wid = this->GetWidget(WID_SM_MAP); + Window *w = FindWindowById(WC_MAIN_WINDOW, 0); + pt = this->PixelToTile(pt.x - wid->pos_x, pt.y - wid->pos_y); + ScrollWindowTo(pt.x, pt.y, -1, w); + + this->SetDirty(); + break; + } + + case WID_SM_ZOOM_IN: + case WID_SM_ZOOM_OUT: { + const NWidgetBase *wid = this->GetWidget(WID_SM_MAP); + Point pt = { (int)wid->current_x / 2, (int)wid->current_y / 2}; + this->SetZoomLevel((widget == WID_SM_ZOOM_IN) ? ZLC_ZOOM_IN : ZLC_ZOOM_OUT, &pt); + if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); + break; + } + + case WID_SM_CONTOUR: // Show land contours + case WID_SM_VEHICLES: // Show vehicles + case WID_SM_INDUSTRIES: // Show industries + case WID_SM_LINKSTATS: // Show route map + case WID_SM_ROUTES: // Show transport routes + case WID_SM_VEGETATION: // Show vegetation + case WID_SM_OWNERS: // Show land owners + case CM_WID_SM_IMBA: + this->SwitchMapType((SmallMapType)(widget - WID_SM_CONTOUR)); + if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); + break; + + case WID_SM_CENTERMAP: // Center the smallmap again + this->SmallMapCenterOnCurrentPos(); + this->HandleButtonClick(WID_SM_CENTERMAP); + if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); + break; + + case WID_SM_TOGGLETOWNNAME: // Toggle town names + this->show_towns = !this->show_towns; + this->SetWidgetLoweredState(WID_SM_TOGGLETOWNNAME, this->show_towns); + + this->SetDirty(); + if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); + break; + + case WID_SM_LEGEND: // Legend + if (this->map_type == SMT_INDUSTRY || this->map_type == SMT_LINKSTATS || this->map_type == SMT_OWNER || this->map_type == CM_SMT_IMBA) { + int click_pos = this->GetPositionOnLegend(pt); + if (click_pos < 0) break; + + /* If industry type small map*/ + if (this->map_type == SMT_INDUSTRY || this->map_type == CM_SMT_IMBA) { + /* If click on industries label, find right industry type and enable/disable it. */ + if (click_pos < _smallmap_industry_count) { + this->SelectLegendItem(click_pos, _legend_from_industries, _smallmap_industry_count); + } + } else if (this->map_type == SMT_LINKSTATS) { + if (click_pos < _smallmap_cargo_count) { + this->SelectLegendItem(click_pos, _legend_linkstats, _smallmap_cargo_count); + this->SetOverlayCargoMask(); + } + } else if (this->map_type == SMT_OWNER) { + if (click_pos < _smallmap_company_count) { + this->SelectLegendItem(click_pos, _legend_land_owners, _smallmap_company_count, NUM_NO_COMPANY_ENTRIES); + } + } + this->SetDirty(); + } + break; + + case WID_SM_ENABLE_ALL: + case WID_SM_DISABLE_ALL: { + LegendAndColour *tbl = nullptr; + switch (this->map_type) { + case SMT_INDUSTRY: + case CM_SMT_IMBA: + tbl = _legend_from_industries; + this->BreakIndustryChainLink(); + break; + case SMT_OWNER: + tbl = &(_legend_land_owners[NUM_NO_COMPANY_ENTRIES]); + break; + case SMT_LINKSTATS: + tbl = _legend_linkstats; + break; + default: + NOT_REACHED(); + } + for (;!tbl->end && tbl->legend != STR_LINKGRAPH_LEGEND_UNUSED; ++tbl) { + tbl->show_on_map = (widget == WID_SM_ENABLE_ALL); + } + if (this->map_type == SMT_LINKSTATS) this->SetOverlayCargoMask(); + this->SetDirty(); + break; + } + + case WID_SM_SHOW_HEIGHT: // Enable/disable showing of heightmap. + _smallmap_show_heightmap = !_smallmap_show_heightmap; + this->SetWidgetLoweredState(WID_SM_SHOW_HEIGHT, _smallmap_show_heightmap); + this->SetDirty(); + break; + } +} + +/** + * Some data on this window has become invalid. + * @param data Information about the changed data. + * - data = 0: Displayed industries at the industry chain window have changed. + * - data = 1: Companies have changed. + * - data = 2: Cheat changing the maximum heightlevel has been used, rebuild our heightlevel-to-colour index + * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. + */ +/* virtual */ void SmallMapWindow::OnInvalidateData(int data, bool gui_scope) +{ + if (!gui_scope) return; + + switch (data) { + case 1: + /* The owner legend has already been rebuilt. */ + this->ReInit(); + break; + + case 0: { + if (this->map_type != CM_SMT_IMBA) this->SwitchMapType(CM_SMT_IMBA); + + for (int i = 0; i != _smallmap_industry_count; i++) { + _legend_from_industries[i].show_on_map = _displayed_industries.test(_legend_from_industries[i].type); + } + break; + } + + case 2: + this->RebuildColourIndexIfNecessary(); + break; + + default: NOT_REACHED(); + } + this->SetDirty(); +} + +/* virtual */ bool SmallMapWindow::OnRightClick(Point pt, int widget) +{ + if (widget != WID_SM_MAP || _scrolling_viewport) return false; + + _scrolling_viewport = true; + return true; +} + +/* virtual */ void SmallMapWindow::OnMouseWheel(int wheel) +{ + if (_settings_client.gui.scrollwheel_scrolling != 2) { + const NWidgetBase *wid = this->GetWidget(WID_SM_MAP); + int cursor_x = _cursor.pos.x - this->left - wid->pos_x; + int cursor_y = _cursor.pos.y - this->top - wid->pos_y; + if (IsInsideMM(cursor_x, 0, wid->current_x) && IsInsideMM(cursor_y, 0, wid->current_y)) { + Point pt = {cursor_x, cursor_y}; + this->SetZoomLevel((wheel < 0) ? ZLC_ZOOM_IN : ZLC_ZOOM_OUT, &pt); + } + } +} + +/* virtual */ void SmallMapWindow::OnRealtimeTick(uint delta_ms) +{ + /* Update the window every now and then */ + if (!this->refresh.Elapsed(delta_ms)) return; + + if (this->map_type == SMT_LINKSTATS) { + uint32 company_mask = this->GetOverlayCompanyMask(); + if (this->overlay->GetCompanyMask() != company_mask) { + this->overlay->SetCompanyMask(company_mask); + } else { + this->overlay->SetDirty(); + } + } + _smallmap_industry_highlight_state = !_smallmap_industry_highlight_state; + + this->refresh.SetInterval(_smallmap_industry_highlight != INVALID_INDUSTRYTYPE ? BLINK_PERIOD : FORCE_REFRESH_PERIOD); + this->SetDirty(); +} + +/* virtual */ void SmallMapWindow::OnScroll(Point delta) +{ + if (_settings_client.gui.scroll_mode == VSM_VIEWPORT_RMB_FIXED || _settings_client.gui.scroll_mode == VSM_MAP_RMB_FIXED) _cursor.fix_at = true; + + this->scroll_x -= delta.x; + this->scroll_y -= delta.y; + this->SetDirty(); + if (this->map_type == SMT_LINKSTATS) this->overlay->SetDirty(); +} + +/** + * Center the small map on the current center of the viewport. + */ +void SmallMapWindow::SmallMapCenterOnCurrentPos() +{ + const Viewport *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; + Point viewport_center = InverseRemapCoords2(vp->virtual_left + vp->virtual_width / 2, vp->virtual_top + vp->virtual_height / 2); + + const NWidgetBase *wid = this->GetWidget(WID_SM_MAP); + auto pt = this->TileToPixel(viewport_center.x, viewport_center.y); + this->scroll_x += std::max(0, (int)wid->current_x / 2 - 2) - pt.x; + this->scroll_y += wid->current_y / 2 - pt.y; + this->SetDirty(); + if (this->map_type == SMT_LINKSTATS) this->overlay->SetDirty(); +} + +/** + * Get the center of the given station as point on the screen in the smallmap window. + * @param st Station to find in the smallmap. + * @return Point with coordinates of the station. + */ +Point SmallMapWindow::GetStationMiddle(const Station *st) const +{ + int x = (st->rect.right + st->rect.left + 1) * TILE_SIZE / 2; + int y = (st->rect.bottom + st->rect.top + 1) * TILE_SIZE / 2; + Point ret = this->TileToPixel(x, y); + + /* Same magic 3 as in DrawVehicles; that's where I got it from. + * No idea what it is, but without it the result looks bad. + */ + ret.x -= 3; + return ret; +} + +SmallMapWindow::SmallMapType SmallMapWindow::map_type = CM_SMT_IMBA; +bool SmallMapWindow::show_towns = true; +int SmallMapWindow::map_height_limit = -1; + +/** + * Custom container class for displaying smallmap with a vertically resizing legend panel. + * The legend panel has a smallest height that depends on its width. Standard containers cannot handle this case. + * + * @note The container assumes it has two children, the first is the display, the second is the bar with legends and selection image buttons. + * Both children should be both horizontally and vertically resizable and horizontally fillable. + * The bar should have a minimal size with a zero-size legends display. Child padding is not supported. + */ +class NWidgetSmallmapDisplay : public NWidgetContainer { + const SmallMapWindow *smallmap_window; ///< Window manager instance. +public: + NWidgetSmallmapDisplay() : NWidgetContainer(NWID_VERTICAL) + { + this->smallmap_window = nullptr; + } + + void SetupSmallestSize(Window *w, bool init_array) override + { + NWidgetBase *display = this->head; + NWidgetBase *bar = display->next; + + display->SetupSmallestSize(w, init_array); + bar->SetupSmallestSize(w, init_array); + + this->smallmap_window = dynamic_cast(w); + assert(this->smallmap_window != nullptr); + this->smallest_x = std::max(display->smallest_x, bar->smallest_x + smallmap_window->GetMinLegendWidth()); + this->smallest_y = display->smallest_y + std::max(bar->smallest_y, smallmap_window->GetLegendHeight(smallmap_window->min_number_of_columns)); + this->fill_x = std::max(display->fill_x, bar->fill_x); + this->fill_y = (display->fill_y == 0 && bar->fill_y == 0) ? 0 : std::min(display->fill_y, bar->fill_y); + this->resize_x = std::max(display->resize_x, bar->resize_x); + this->resize_y = std::min(display->resize_y, bar->resize_y); + } + + void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override + { + this->pos_x = x; + this->pos_y = y; + this->current_x = given_width; + this->current_y = given_height; + + NWidgetBase *display = this->head; + NWidgetBase *bar = display->next; + + if (sizing == ST_SMALLEST) { + this->smallest_x = given_width; + this->smallest_y = given_height; + /* Make display and bar exactly equal to their minimal size. */ + display->AssignSizePosition(ST_SMALLEST, x, y, display->smallest_x, display->smallest_y, rtl); + bar->AssignSizePosition(ST_SMALLEST, x, y + display->smallest_y, bar->smallest_x, bar->smallest_y, rtl); + } + + uint bar_height = std::max(bar->smallest_y, this->smallmap_window->GetLegendHeight(this->smallmap_window->GetNumberColumnsLegend(given_width - bar->smallest_x))); + uint display_height = given_height - bar_height; + display->AssignSizePosition(ST_RESIZE, x, y, given_width, display_height, rtl); + bar->AssignSizePosition(ST_RESIZE, x, y + display_height, given_width, bar_height, rtl); + } + + NWidgetCore *GetWidgetFromPos(int x, int y) override + { + if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr; + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { + NWidgetCore *widget = child_wid->GetWidgetFromPos(x, y); + if (widget != nullptr) return widget; + } + return nullptr; + } + + void Draw(const Window *w) override + { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) child_wid->Draw(w); + } +}; + +/** Widget parts of the smallmap display. */ +static const NWidgetPart _nested_smallmap_display[] = { + NWidget(WWT_PANEL, COLOUR_BROWN, WID_SM_MAP_BORDER), + NWidget(WWT_INSET, COLOUR_BROWN, WID_SM_MAP), SetMinimalSize(346, 140), SetResize(1, 1), SetPadding(2, 2, 2, 2), EndContainer(), + EndContainer(), +}; + +/** Widget parts of the smallmap legend bar + image buttons. */ +static const NWidgetPart _nested_smallmap_bar[] = { + NWidget(WWT_PANEL, COLOUR_BROWN), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SM_LEGEND), SetResize(1, 1), + NWidget(NWID_VERTICAL), + /* Top button row. */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_SM_ZOOM_IN), + SetDataTip(SPR_IMG_ZOOMIN, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN), SetFill(1, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_SM_CENTERMAP), + SetDataTip(SPR_IMG_SMALLMAP, STR_SMALLMAP_CENTER), SetFill(1, 1), + NWidget(WWT_IMGBTN, COLOUR_BROWN, CM_WID_SM_IMBA), + SetDataTip(SPR_IMG_SHOW_COUNTOURS, STR_CM_SMALLMAP_TOOLTIP_SHOW_IMBA_ON_MAP), SetFill(1, 1), + NWidget(WWT_IMGBTN, COLOUR_BROWN, WID_SM_CONTOUR), + SetDataTip(SPR_IMG_SHOW_COUNTOURS, STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP), SetFill(1, 1), + NWidget(WWT_IMGBTN, COLOUR_BROWN, WID_SM_VEHICLES), + SetDataTip(SPR_IMG_SHOW_VEHICLES, STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP), SetFill(1, 1), + NWidget(WWT_IMGBTN, COLOUR_BROWN, WID_SM_INDUSTRIES), + SetDataTip(SPR_IMG_INDUSTRY, STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP), SetFill(1, 1), + EndContainer(), + /* Bottom button row. */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHIMGBTN, COLOUR_BROWN, WID_SM_ZOOM_OUT), + SetDataTip(SPR_IMG_ZOOMOUT, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT), SetFill(1, 1), + NWidget(WWT_IMGBTN, COLOUR_BROWN, WID_SM_TOGGLETOWNNAME), + SetDataTip(SPR_IMG_TOWN, STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF), SetFill(1, 1), + NWidget(WWT_IMGBTN, COLOUR_BROWN, WID_SM_LINKSTATS), + SetDataTip(SPR_IMG_CARGOFLOW, STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP), SetFill(1, 1), + NWidget(WWT_IMGBTN, COLOUR_BROWN, WID_SM_ROUTES), + SetDataTip(SPR_IMG_SHOW_ROUTES, STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON), SetFill(1, 1), + NWidget(WWT_IMGBTN, COLOUR_BROWN, WID_SM_VEGETATION), + SetDataTip(SPR_IMG_PLANTTREES, STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP), SetFill(1, 1), + NWidget(WWT_IMGBTN, COLOUR_BROWN, WID_SM_OWNERS), + SetDataTip(SPR_IMG_COMPANY_GENERAL, STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP), SetFill(1, 1), + EndContainer(), + NWidget(NWID_SPACER), SetResize(0, 1), + EndContainer(), + EndContainer(), + EndContainer(), +}; + +static NWidgetBase *SmallMapDisplay(int *biggest_index) +{ + NWidgetContainer *map_display = new NWidgetSmallmapDisplay; + + MakeNWidgets(_nested_smallmap_display, lengthof(_nested_smallmap_display), biggest_index, map_display); + MakeNWidgets(_nested_smallmap_bar, lengthof(_nested_smallmap_bar), biggest_index, map_display); + return map_display; +} + + +static const NWidgetPart _nested_smallmap_widgets[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_BROWN), + NWidget(WWT_CAPTION, COLOUR_BROWN, WID_SM_CAPTION), SetDataTip(STR_SMALLMAP_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, COLOUR_BROWN), + NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), + NWidget(WWT_STICKYBOX, COLOUR_BROWN), + EndContainer(), + NWidgetFunction(SmallMapDisplay), // Smallmap display and legend bar + image buttons. + /* Bottom button row and resize box. */ + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SM_SELECT_BUTTONS), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_SM_ENABLE_ALL), SetDataTip(STR_SMALLMAP_ENABLE_ALL, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_SM_DISABLE_ALL), SetDataTip(STR_SMALLMAP_DISABLE_ALL, STR_NULL), + NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_SM_SHOW_HEIGHT), SetDataTip(STR_SMALLMAP_SHOW_HEIGHT, STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT), + NWidget(WWT_PANEL, COLOUR_BROWN), SetFill(1, 0), SetResize(1, 0), + EndContainer(), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_BROWN), SetFill(1, 0), SetResize(1, 0), + EndContainer(), + EndContainer(), + NWidget(WWT_RESIZEBOX, COLOUR_BROWN), + EndContainer(), +}; + +static WindowDesc _smallmap_desc( + WDP_AUTO, "smallmap", 484, 314, + WC_SMALLMAP, WC_NONE, + 0, + _nested_smallmap_widgets, lengthof(_nested_smallmap_widgets) +); + +/** + * Show the smallmap window. + */ +void ShowSmallMap() +{ + AllocateWindowDescFront(&_smallmap_desc, 0); +} + +/** + * Scrolls the main window to given coordinates. + * @param x x coordinate + * @param y y coordinate + * @param z z coordinate; -1 to scroll to terrain height + * @param instant scroll instantly (meaningful only when smooth_scrolling is active) + * @return did the viewport position change? + */ +bool ScrollMainWindowTo(int x, int y, int z, bool instant) +{ + bool res = ScrollWindowTo(x, y, z, FindWindowById(WC_MAIN_WINDOW, 0), instant); + + /* If a user scrolls to a tile (via what way what so ever) and already is on + * that tile (e.g.: pressed twice), move the smallmap to that location, + * so you directly see where you are on the smallmap. */ + + if (res) return res; + + SmallMapWindow *w = dynamic_cast(FindWindowById(WC_SMALLMAP, 0)); + if (w != nullptr) w->SmallMapCenterOnCurrentPos(); + + return res; +} + + } // namespace citymania diff --git a/src/citymania/cm_minimap.hpp b/src/citymania/cm_minimap.hpp index 2f32ac5092..ce9aa4f847 100644 --- a/src/citymania/cm_minimap.hpp +++ b/src/citymania/cm_minimap.hpp @@ -1,8 +1,10 @@ #ifndef CM_MINIMAP_HPP #define CM_MINIMAP_HPP +#include "../smallmap_gui.h" #include "../core/endian_func.hpp" + namespace citymania { #define MKCOLOUR(x) TO_LE32X(x) @@ -35,6 +37,170 @@ static const uint32 _orange_map_heights[] = { MKCOLOUR(0xC5C5C5C5), }; +void BuildLinkStatsLegend(); + +void BuildIndustriesLegend(); +void ShowSmallMap(); +void BuildLandLegend(); +void BuildOwnerLegend(); + + +class NWidgetSmallmapDisplay; + +/** Class managing the smallmap window. */ +class SmallMapWindow : public Window { +protected: + /** Types of legends in the #WID_SM_LEGEND widget. */ + enum SmallMapType { + SMT_CONTOUR, + SMT_VEHICLES, + SMT_INDUSTRY, + SMT_LINKSTATS, + SMT_ROUTES, + SMT_VEGETATION, + SMT_OWNER, + CM_SMT_IMBA, + }; + + /** Available kinds of zoomlevel changes. */ + enum ZoomLevelChange { + ZLC_INITIALIZE, ///< Initialize zoom level. + ZLC_ZOOM_OUT, ///< Zoom out. + ZLC_ZOOM_IN, ///< Zoom in. + }; + + static SmallMapType map_type; ///< Currently displayed legends. + static bool show_towns; ///< Display town names in the smallmap. + static int map_height_limit; ///< Currently used/cached maximum heightlevel. + + static const uint LEGEND_BLOB_WIDTH = 8; ///< Width of the coloured blob in front of a line text in the #WID_SM_LEGEND widget. + static const uint INDUSTRY_MIN_NUMBER_OF_COLUMNS = 2; ///< Minimal number of columns in the #WID_SM_LEGEND widget for the #SMT_INDUSTRY legend. + static const uint FORCE_REFRESH_PERIOD = 930; ///< map is redrawn after that many milliseconds. + static const uint BLINK_PERIOD = 450; ///< highlight blinking interval in milliseconds. + + uint min_number_of_columns; ///< Minimal number of columns in legends. + uint min_number_of_fixed_rows; ///< Minimal number of rows in the legends for the fixed layouts only (all except #SMT_INDUSTRY). + uint column_width; ///< Width of a column in the #WID_SM_LEGEND widget. + + int32 scroll_x; ///< Horizontal world coordinate of the base tile left of the top-left corner of the smallmap display. + int32 scroll_y; ///< Vertical world coordinate of the base tile left of the top-left corner of the smallmap display. + int32 subscroll; ///< Number of pixels (0..3) between the right end of the base tile and the pixel at the top-left corner of the smallmap display. + int tile_zoom; ///< Zoom level. Bigger number means more zoom-out (further away). + int ui_zoom; ///< Zoom level. Bigger number means more zoom-out (further away). + int zoom; ///< Zoom level. Bigger number means more zoom-out (further away). + + GUITimer refresh; ///< Refresh timer. + LinkGraphOverlay *overlay; + + static void BreakIndustryChainLink(); + Point SmallmapRemapCoords(int x, int y) const; + + /** + * Draws vertical part of map indicator + * @param x X coord of left/right border of main viewport + * @param y Y coord of top border of main viewport + * @param y2 Y coord of bottom border of main viewport + */ + static inline void DrawVertMapIndicator(int x, int y, int y2) + { + GfxFillRect(x, y, x, y + 3, PC_VERY_LIGHT_YELLOW); + GfxFillRect(x, y2 - 3, x, y2, PC_VERY_LIGHT_YELLOW); + } + + /** + * Draws horizontal part of map indicator + * @param x X coord of left border of main viewport + * @param x2 X coord of right border of main viewport + * @param y Y coord of top/bottom border of main viewport + */ + static inline void DrawHorizMapIndicator(int x, int x2, int y) + { + GfxFillRect(x, y, x + 3, y, PC_VERY_LIGHT_YELLOW); + GfxFillRect(x2 - 3, y, x2, y, PC_VERY_LIGHT_YELLOW); + } + + /** + * Compute minimal required width of the legends. + * @return Minimally needed width for displaying the smallmap legends in pixels. + */ + inline uint GetMinLegendWidth() const + { + return WD_FRAMERECT_LEFT + this->min_number_of_columns * this->column_width; + } + + /** + * Return number of columns that can be displayed in \a width pixels. + * @return Number of columns to display. + */ + inline uint GetNumberColumnsLegend(uint width) const + { + return width / this->column_width; + } + + /** + * Compute height given a number of columns. + * @param num_columns Number of columns. + * @return Needed height for displaying the smallmap legends in pixels. + */ + inline uint GetLegendHeight(uint num_columns) const + { + return WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + + this->GetNumberRowsLegend(num_columns) * FONT_HEIGHT_SMALL; + } + + /** + * Get a bitmask for company links to be displayed. Usually this will be + * the _local_company. Spectators get to see all companies' links. + * @return Company mask. + */ + inline uint32 GetOverlayCompanyMask() const + { + return Company::IsValidID(_local_company) ? 1U << _local_company : 0xffffffff; + } + + void RebuildColourIndexIfNecessary(); + uint GetNumberRowsLegend(uint columns) const; + void SelectLegendItem(int click_pos, LegendAndColour *legend, int end_legend_item, int begin_legend_item = 0); + void SwitchMapType(SmallMapType map_type); + void SetNewScroll(int sx, int sy, int sub); + + void DrawMapIndicators() const; + void DrawSmallMapColumn(void *dst, uint xc, uint yc, int pitch, int reps, int start_pos, int end_pos, int y, int end_y, Blitter *blitter) const; + void DrawVehicles(const DrawPixelInfo *dpi, Blitter *blitter) const; + void DrawTowns(const DrawPixelInfo *dpi) const; + void DrawSmallMap(DrawPixelInfo *dpi) const; + + Point TileToPixel(int tx, int ty) const; + Point PixelToTile(int tx, int ty) const; + void SetZoomLevel(ZoomLevelChange change, const Point *zoom_pt); + void SetOverlayCargoMask(); + void SetupWidgetData(); + uint32 GetTileColours(const TileArea &ta) const; + + int GetPositionOnLegend(Point pt); + +public: + friend class citymania::NWidgetSmallmapDisplay; + + SmallMapWindow(WindowDesc *desc, int window_number); + virtual ~SmallMapWindow(); + + void SmallMapCenterOnCurrentPos(); + Point GetStationMiddle(const Station *st) const; + + void SetStringParameters(int widget) const override; + void OnInit() override; + void OnPaint() override; + void DrawWidget(const Rect &r, int widget) const override; + void OnClick(Point pt, int widget, int click_count) override; + void OnInvalidateData(int data = 0, bool gui_scope = true) override; + bool OnRightClick(Point pt, int widget) override; + void OnMouseWheel(int wheel) override; + void OnRealtimeTick(uint delta_ms) override; + void OnScroll(Point delta) override; + void OnMouseOver(Point pt, int widget) override; +}; + } // namespace citymania #endif /* CITYMANIA_MINIMAP_HPP */ diff --git a/src/citymania/cm_misc_gui.cpp b/src/citymania/cm_misc_gui.cpp index 9154070046..75e1ba2bd4 100644 --- a/src/citymania/cm_misc_gui.cpp +++ b/src/citymania/cm_misc_gui.cpp @@ -49,7 +49,7 @@ public: int scr_bot = GetMainViewBottom() - 2; Point pt; pt.y = Clamp(_cursor.pos.y + _cursor.total_size.y + _cursor.total_offs.y + 5, scr_top, scr_bot); - if (pt.y + sm_height > scr_bot) pt.y = min(_cursor.pos.y + _cursor.total_offs.y - 5, scr_bot) - sm_height; + if (pt.y + sm_height > scr_bot) pt.y = std::min(_cursor.pos.y + _cursor.total_offs.y - 5, scr_bot) - sm_height; pt.x = sm_width >= _screen.width ? 0 : Clamp(_cursor.pos.x - (sm_width >> 1), 0, _screen.width - sm_width); return pt; } @@ -87,7 +87,7 @@ public: if (StrEmpty(this->landinfo_data[i])) break; uint width = GetStringBoundingBox(this->landinfo_data[i]).width + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT; - size->width = max(size->width, width); + size->width = std::max(size->width, width); size->height += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL; if (i == 0) size->height += 4; @@ -95,7 +95,7 @@ public: if (!StrEmpty(this->landinfo_data[LAND_INFO_MULTICENTER_LINE])) { uint width = GetStringBoundingBox(this->landinfo_data[LAND_INFO_MULTICENTER_LINE]).width + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT; - size->width = max(size->width, min(ScaleGUITrad(300), width)); + size->width = std::max(size->width, std::min(ScaleGUITrad(300), width)); SetDParamStr(0, this->landinfo_data[LAND_INFO_MULTICENTER_LINE]); size->height += GetStringHeight(STR_JUST_RAW_STRING, size->width - WD_FRAMETEXT_LEFT - WD_FRAMETEXT_RIGHT); } diff --git a/src/newgrf_revisions.hpp b/src/citymania/cm_newgrf_revisions.hpp similarity index 100% rename from src/newgrf_revisions.hpp rename to src/citymania/cm_newgrf_revisions.hpp diff --git a/src/citymania/cm_saveload.cpp b/src/citymania/cm_saveload.cpp index a64cabc145..b9422ca864 100644 --- a/src/citymania/cm_saveload.cpp +++ b/src/citymania/cm_saveload.cpp @@ -259,6 +259,9 @@ void DecodeSettings(BitIStream &bs, Settings &settings) { uint16 _last_client_version = 1512; static u8vector EncodeData() { + // Skip if game is not initialized for some reason (i.e. -d desync) + if (!_game) return {}; + BitOStream bs; bs.Reserve(1000); bs.WriteBytes(SAVEGAME_DATA_FORMAT_VERSION, 2); @@ -400,6 +403,11 @@ static void DecodeData(u8vector &data) { } } +struct FakePersistentStorage { + uint32 grfid; + uint8 *storage; +}; + void Save_PSAC() { /* Write the industries */ for (PersistentStorage *ps : PersistentStorage::Iterate()) { @@ -416,28 +424,27 @@ void Save_PSAC() { return; } - uint32 grfid = CITYMANIA_GRFID; + uint index = 0; + for (PersistentStorage *ps : PersistentStorage::Iterate()) { + if (ps->grfid != CITYMANIA_GRFID) + index = std::max(index, ps->index + 1); + } + u8vector data = EncodeData(); int n_chunks = (data.size() + 1023) / 1024; data.resize(n_chunks * 1024); DEBUG(sl, 2, "Citybuilder data takes %u bytes", (uint)data.size()); - uint8 *ptr = &data[0]; - SaveLoadGlobVarList _desc[] = { - SLEG_CONDVAR(grfid, SLE_UINT32, SLV_6, SL_MAX_VERSION), - SLEG_CONDARR(*ptr, SLE_UINT32, 256, SLV_EXTEND_PERSISTENT_STORAGE, SL_MAX_VERSION), - SLEG_END() + FakePersistentStorage ps{CITYMANIA_GRFID, &data[0]}; + + static const SaveLoad _desc[] = { + SLE_CONDVAR(FakePersistentStorage, grfid, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDARR(FakePersistentStorage, storage, SLE_UINT32, 256, SLV_EXTEND_PERSISTENT_STORAGE, SL_MAX_VERSION), + SLE_END() }; - uint index = 0; - for (PersistentStorage *ps : PersistentStorage::Iterate()) { - if (ps->grfid != CITYMANIA_GRFID) - index = max(index, ps->index + 1); - } - - for (int i = 0; i < n_chunks; i++, ptr += 1024) { - _desc[1].address = (void *)ptr; + for (int i = 0; i < n_chunks; i++, ps.storage += 1024) { SlSetArrayIndex(index + i); - SlGlobList(_desc); + SlObject(&ps, _desc); } } diff --git a/src/citymania/cm_station_gui.cpp b/src/citymania/cm_station_gui.cpp index 56fa9427ea..444720f175 100644 --- a/src/citymania/cm_station_gui.cpp +++ b/src/citymania/cm_station_gui.cpp @@ -8,26 +8,36 @@ #include "../command_type.h" #include "../command_func.h" #include "../company_func.h" +#include "../industry_map.h" +#include "../industry.h" #include "../landscape.h" #include "../newgrf_station.h" // StationClassID +#include "../newgrf_house.h" // GetHouseCallback +#include "../newgrf_cargo.h" // GetCargoTranslation +#include "../object_type.h" +#include "../object_map.h" #include "../station_base.h" +#include "../strings_func.h" // GetString, SetDParam #include "../tilehighlight_type.h" +#include "../town_map.h" +#include "../town.h" #include "../viewport_func.h" #include "../viewport_kdtree.h" #include "../window_gui.h" #include "../zoom_type.h" #include "../zoom_func.h" +#include + + extern const Station *_viewport_highlight_station; extern TileHighlightData _thd; extern void MarkCatchmentTilesDirty(); extern DiagDirection _road_station_picker_orientation; -extern bool CheckDriveThroughRoadStopDirection(TileArea area, RoadBits r); -extern DiagDirection AutodetectRoadObjectDirection(TileIndex tile); -extern DiagDirection AutodetectDriveThroughRoadStopDirection(TileArea area); -extern bool CheckClickOnViewportSign(const ViewPort *vp, int x, int y, const ViewportSign *sign); +extern bool CheckClickOnViewportSign(const Viewport *vp, int x, int y, const ViewportSign *sign); extern Rect ExpandRectWithViewportSignMargins(Rect r, ZoomLevel zoom); +extern RoadBits FindRailsToConnect(TileIndex tile); extern ViewportSignKdtree _viewport_sign_kdtree; extern AirportClassID _selected_airport_class; extern int _selected_airport_index; @@ -58,6 +68,10 @@ TileArea _highlight_join_area; // _station_select.catchment = catchment; // } +bool UseImprovedStationJoin() { + return _settings_client.gui.cm_use_improved_station_join && _settings_game.station.distant_join_stations; +} + void SetStationBiildingStatus(StationBuildingStatus status) { _station_building_status = status; }; @@ -91,10 +105,10 @@ static void UpdateHiglightJoinArea(const Station *station) { auto &r = _station_to_join->rect; auto d = (int)_settings_game.station.station_spread - 1; TileArea ta( - TileXY(max(r.right - d, 0), - max(r.bottom - d, 0)), - TileXY(min(r.left + d, MapSizeX() - 1), - min(r.top + d, MapSizeY() - 1)) + TileXY(std::max(r.right - d, 0), + std::max(r.bottom - d, 0)), + TileXY(std::min(r.left + d, MapSizeX() - 1), + std::min(r.top + d, MapSizeY() - 1)) ); if (_highlight_join_area.tile == ta.tile && _highlight_join_area.w == ta.w && @@ -150,7 +164,7 @@ const Station *CheckClickOnDeadStationSign() { int y = _cursor.pos.y; Window *w = FindWindowFromPt(x, y); if (w == nullptr) return nullptr; - ViewPort *vp = IsPtInWindowViewport(w, x, y); + Viewport *vp = IsPtInWindowViewport(w, x, y); if (!HasBit(_display_opt, DO_SHOW_STATION_NAMES) && !IsInvisibilitySet(TO_SIGNS)) return nullptr; @@ -209,33 +223,141 @@ void JoinAndBuild(CommandContainer cmdcont) { DoCommandP(&cmdcont); } +static DiagDirection TileFractCoordsToDiagDir(Point pt) { + auto x = pt.x & TILE_UNIT_MASK; + auto y = pt.y & TILE_UNIT_MASK; + bool diag = (x + y) < 16; + if (x < y) { + return diag ? DIAGDIR_NE : DIAGDIR_SE; + } + return diag ? DIAGDIR_NW : DIAGDIR_SW; +} + +static DiagDirection RoadBitsToDiagDir(RoadBits bits) { + if (bits < ROAD_SE) { + return bits == ROAD_NW ? DIAGDIR_NW : DIAGDIR_SW; + } + return bits == ROAD_SE ? DIAGDIR_SE : DIAGDIR_NE; +} + +DiagDirection AutodetectRailObjectDirection(TileIndex tile, Point pt) { + RoadBits bits = FindRailsToConnect(tile); + // FIXME after this point repeats road autodetection + if (HasExactlyOneBit(bits)) return RoadBitsToDiagDir(bits); + if (bits == ROAD_NONE) bits = ROAD_ALL; + RoadBits frac_bits = DiagDirToRoadBits(TileFractCoordsToDiagDir(pt)); + if (HasExactlyOneBit(frac_bits & bits)) { + return RoadBitsToDiagDir(frac_bits & bits); + } + frac_bits |= MirrorRoadBits(frac_bits); + if (HasExactlyOneBit(frac_bits & bits)) { + return RoadBitsToDiagDir(frac_bits & bits); + } + for (DiagDirection ddir = DIAGDIR_BEGIN; ddir < DIAGDIR_END; ddir++) { + if (DiagDirToRoadBits(ddir) & bits) { + return ddir; + } + } + NOT_REACHED(); +} + +static RoadBits FindRoadsToConnect(TileIndex tile, RoadType roadtype) { + RoadBits bits = ROAD_NONE; + DiagDirection ddir; + auto cur_rtt = GetRoadTramType(roadtype); + // Prioritize roadbits that head in this direction + for (ddir = DIAGDIR_BEGIN; ddir < DIAGDIR_END; ddir++) { + TileIndex cur_tile = TileAddByDiagDir(tile, ddir); + if (GetAnyRoadBits(cur_tile, cur_rtt, true) & + DiagDirToRoadBits(ReverseDiagDir(ddir))) + { + bits |= DiagDirToRoadBits(ddir); + } + } + if (bits != ROAD_NONE) { + return bits; + } + // Try to connect to any road passing by + for (ddir = DIAGDIR_BEGIN; ddir < DIAGDIR_END; ddir++) { + TileIndex cur_tile = TileAddByDiagDir(tile, ddir); + if (GetTileType(cur_tile) == MP_ROAD && HasTileRoadType(cur_tile, cur_rtt) && + (GetRoadTileType(cur_tile) == ROAD_TILE_NORMAL)) { + bits |= DiagDirToRoadBits(ddir); + } + } + return bits; +} + +bool CheckDriveThroughRoadStopDirection(TileArea area, RoadBits r) { + TILE_AREA_LOOP(tile, area) { + if (GetTileType(tile) != MP_ROAD) continue; + if (GetRoadTileType(tile) != ROAD_TILE_NORMAL) continue; + if (GetAllRoadBits(tile) & ~r) return false; + } + return true; +} + +/* + * Selects orientation for road object (depot, terminal station) + */ +DiagDirection AutodetectRoadObjectDirection(TileIndex tile, Point pt, RoadType roadtype) { + RoadBits bits = FindRoadsToConnect(tile, roadtype); + if (HasExactlyOneBit(bits)) { + return RoadBitsToDiagDir(bits); + } + if (bits == ROAD_NONE){ + bits = ROAD_ALL; + } + RoadBits frac_bits = DiagDirToRoadBits(TileFractCoordsToDiagDir(pt)); + if (HasExactlyOneBit(frac_bits & bits)) { + return RoadBitsToDiagDir(frac_bits & bits); + } + frac_bits |= MirrorRoadBits(frac_bits); + if (HasExactlyOneBit(frac_bits & bits)) { + return RoadBitsToDiagDir(frac_bits & bits); + } + for (DiagDirection ddir = DIAGDIR_BEGIN; ddir < DIAGDIR_END; ddir++) { + if (DiagDirToRoadBits(ddir) & bits) { + return ddir; + } + } + NOT_REACHED(); +} + +/* + * Automaticaly selects direction to use for road stop. + * @param area road stop area + * @return selected direction + */ +DiagDirection AutodetectDriveThroughRoadStopDirection(TileArea area, Point pt, RoadType roadtype) { + bool se_suits, ne_suits; + + // Check which direction is available + // If both are not use SE, building will fail anyway + se_suits = CheckDriveThroughRoadStopDirection(area, ROAD_Y); + ne_suits = CheckDriveThroughRoadStopDirection(area, ROAD_X); + if (!ne_suits) return STATIONDIR_Y; + if (!se_suits) return STATIONDIR_X; + + // Build station along the longer direction + if (area.w > area.h) return STATIONDIR_X; + if (area.w < area.h) return STATIONDIR_Y; + + return DiagDirToAxis(AutodetectRoadObjectDirection(area.tile, pt, roadtype)) == AXIS_X ? STATIONDIR_X : STATIONDIR_Y; +} + void PlaceRoadStop(TileIndex start_tile, TileIndex end_tile, uint32 p2, uint32 cmd) { - uint8 ddir = _road_station_picker_orientation; + assert(_thd.cm.type == citymania::ObjectHighlight::Type::ROAD_STOP); + uint8 ddir = _thd.cm.ddir; + SB(p2, 16, 16, INVALID_STATION); // no station to join TileArea ta(start_tile, end_tile); if (CheckStationJoin(start_tile, end_tile)) return; - if (ddir >= DIAGDIR_END) { - if (ddir < DIAGDIR_END + 2) { - SetBit(p2, 1); // It's a drive-through stop. - ddir -= DIAGDIR_END; // Adjust picker result to actual direction. - // When placed on road autorotate anyway - if (ddir == DIAGDIR_SE) { - if (!CheckDriveThroughRoadStopDirection(ta, ROAD_Y)) - ddir = DIAGDIR_NE; - } else { - if (!CheckDriveThroughRoadStopDirection(ta, ROAD_X)) - ddir = DIAGDIR_SE; - } - } - else if (ddir == DIAGDIR_END + 2) { - ddir = AutodetectRoadObjectDirection(start_tile); - } - else if (ddir == DIAGDIR_END + 3) { - SetBit(p2, 1); // It's a drive-through stop. - ddir = AutodetectDriveThroughRoadStopDirection(ta); - } + if (ddir >= DIAGDIR_END) { // drive-through stops + SetBit(p2, 1); + ddir -= DIAGDIR_END; } p2 |= ddir << 3; // Set the DiagDirecion into p2 bits 3 and 4. @@ -309,7 +431,7 @@ static void FindStationsAroundSelection(const TileArea &location) int x = TileX(location.tile); int y = TileY(location.tile); - TileArea ta(TileXY(max(0, x - 1), max(0, y - 1)), TileXY(min(MapMaxX() - 1, x + location.w + 1), min(MapMaxY() - 1, y + location.h + 1))); + TileArea ta(TileXY(std::max(0, x - 1), std::max(0, y - 1)), TileXY(std::min(MapMaxX() - 1, x + location.w + 1), std::min(MapMaxY() - 1, y + location.h + 1))); Station *adjacent = nullptr; @@ -332,21 +454,21 @@ static void FindStationsAroundSelection(const TileArea &location) _station_building_status = (adjacent == nullptr ? StationBuildingStatus::NEW : StationBuildingStatus::JOIN); } -void CheckRedrawStationCoverage() { +bool CheckRedrawStationCoverage() { // static bool last_ctrl_pressed = false; static TileArea last_location; static bool last_station_mode = false; - static bool last_coverage = false; + static bool last_fn_mod = false; TileArea location(TileVirtXY(_thd.pos.x, _thd.pos.y), _thd.size.x / TILE_SIZE - 1, _thd.size.y / TILE_SIZE - 1); bool station_mode = ((_thd.drawstyle & HT_DRAG_MASK) == HT_RECT && _thd.outersize.x > 0); bool location_changed = (location.tile != last_location.tile || location.w != last_location.w || location.h != last_location.h); bool mode_changed = (last_station_mode != station_mode); - // if (!location_changed && _ctrl_pressed == last_ctrl_pressed && !mode_changed) - // return; + if (!location_changed && citymania::_fn_mod == last_fn_mod && !mode_changed) + return false; - // last_ctrl_pressed = _ctrl_pressed; - // last_location = location; - // last_station_mode = station_mode; + last_fn_mod = citymania::_fn_mod; + last_location = location; + last_station_mode = station_mode; if (citymania::_fn_mod) { Station *st = nullptr; @@ -363,6 +485,7 @@ void CheckRedrawStationCoverage() { FindStationsAroundSelection(location); } } + return true; } @@ -380,4 +503,133 @@ void AbortStationPlacement() { } +uint GetMonthlyFrom256Tick(uint amount) { + return ((amount * DAY_TICKS * 30) >> 8); +} + +uint GetAverageHouseProduction(byte amount) { + static const uint AVG[2][256] = { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 18, 20, 22, 24, 27, 30, 33, 36, 39, 42, 45, 48, 52, 56, 60, 64, 68, 72, 76, 80, 85, 90, 95, 100, 105, 110, 115, 120, 126, 132, 138, 144, 150, 156, 162, 168, 175, 182, 189, 196, 203, 210, 217, 224, 232, 240, 248, 256, 264, 272, 280, 288, 297, 306, 315, 324, 333, 342, 351, 360, 370, 380, 390, 400, 410, 420, 430, 440, 451, 462, 473, 484, 495, 506, 517, 528, 540, 552, 564, 576, 588, 600, 612, 624, 637, 650, 663, 676, 689, 702, 715, 728, 742, 756, 770, 784, 798, 812, 826, 840, 855, 870, 885, 900, 915, 930, 945, 960, 976, 992, 1008, 1024, 1040, 1056, 1072, 1088, 1105, 1122, 1139, 1156, 1173, 1190, 1207, 1224, 1242, 1260, 1278, 1296, 1314, 1332, 1350, 1368, 1387, 1406, 1425, 1444, 1463, 1482, 1501, 1520, 1540, 1560, 1580, 1600, 1620, 1640, 1660, 1680, 1701, 1722, 1743, 1764, 1785, 1806, 1827, 1848, 1870, 1892, 1914, 1936, 1958, 1980, 2002, 2024, 2047, 2070, 2093, 2116, 2139, 2162, 2185, 2208, 2232, 2256, 2280, 2304, 2328, 2352, 2376, 2400, 2425, 2450, 2475, 2500, 2525, 2550, 2575, 2600, 2626, 2652, 2678, 2704, 2730, 2756, 2782, 2808, 2835, 2862, 2889, 2916, 2943, 2970, 2997, 3024, 3052, 3080, 3108, 3136, 3164, 3192, 3220, 3248, 3277, 3306, 3335, 3364, 3393, 3422, 3451, 3480, 3510, 3540, 3570, 3600, 3630, 3660, 3690, 3720, 3751, 3782, 3813, 3844, 3875, 3906, 3937, 3968, 4000, 4032, 4064, 4096, 4128, 4160, 4192}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 246, 252, 258, 264, 270, 276, 282, 288, 294, 300, 306, 312, 318, 324, 330, 336, 343, 350, 357, 364, 371, 378, 385, 392, 399, 406, 413, 420, 427, 434, 441, 448, 456, 464, 472, 480, 488, 496, 504, 512, 520, 528, 536, 544, 552, 560, 568, 576, 585, 594, 603, 612, 621, 630, 639, 648, 657, 666, 675, 684, 693, 702, 711, 720, 730, 740, 750, 760, 770, 780, 790, 800, 810, 820, 830, 840, 850, 860, 870, 880, 891, 902, 913, 924, 935, 946, 957, 968, 979, 990, 1001, 1012, 1023, 1034, 1045, 1056, 1068, 1080, 1092, 1104, 1116, 1128, 1140, 1152, 1164, 1176, 1188, 1200, 1212, 1224, 1236, 1248, 1261, 1274, 1287, 1300, 1313, 1326, 1339, 1352, 1365, 1378, 1391, 1404, 1417, 1430, 1443, 1456, 1470, 1484, 1498, 1512, 1526, 1540, 1554, 1568, 1582, 1596, 1610, 1624, 1638, 1652, 1666, 1680, 1695, 1710, 1725, 1740, 1755, 1770, 1785, 1800, 1815, 1830, 1845, 1860, 1875, 1890, 1905, 1920, 1936, 1952, 1968, 1984, 2000, 2016, 2032, 2048, 2064, 2080, 2096, 2112, 2128, 2144, 2160} + }; + if (amount == 0) return 0; + switch (_settings_game.economy.town_cargogen_mode) { + case TCGM_ORIGINAL: + return GetMonthlyFrom256Tick(AVG[EconomyIsInRecession() ? 1 : 0][amount]); + case TCGM_BITCOUNT: { + uint amt = (amount + 7) / 8; + if (EconomyIsInRecession()) amt += 2; + else amt *= 2; + return GetMonthlyFrom256Tick(amt * 16); + } + default: + NOT_REACHED(); + } + return 0; +} + +static void AddProducedCargo_Town(TileIndex tile, CargoArray &produced) +{ + if (!IsHouseCompleted(tile)) return; + + HouseID house_id = GetHouseType(tile); + const HouseSpec *hs = HouseSpec::Get(house_id); + Town *t = Town::GetByTile(tile); + + if (HasBit(hs->callback_mask, CBM_HOUSE_PRODUCE_CARGO)) { + for (uint i = 0; i < 256; i++) { + uint16 callback = GetHouseCallback(CBID_HOUSE_PRODUCE_CARGO, i, 0, house_id, t, tile); + + if (callback == CALLBACK_FAILED || callback == CALLBACK_HOUSEPRODCARGO_END) break; + + CargoID cargo = GetCargoTranslation(GB(callback, 8, 7), hs->grf_prop.grffile); + + if (cargo == CT_INVALID) continue; + produced[cargo] += GetMonthlyFrom256Tick((uint)GB(callback, 0, 8)) ; + } + } else { + produced[CT_PASSENGERS] += GetAverageHouseProduction(hs->population); + produced[CT_MAIL] += GetAverageHouseProduction(hs->mail_generation); + } +} + +// Similar to ::GetProductionAroundTiles but counts production total +CargoArray GetProductionAroundTiles(TileIndex tile, int w, int h, int rad) +{ + static const uint HQ_AVG_POP[2][5] = { + {48, 64, 84, 128, 384}, + {48, 64, 84, 128, 256}, + }; + static const uint HQ_AVG_MAIL[2][5] = { + {36, 48, 64, 96, 264}, + {36, 48, 64, 96, 196} + }; + + CargoArray produced; + std::set industries; + TileArea ta = TileArea(tile, w, h).Expand(rad); + + /* Loop over all tiles to get the produced cargo of + * everything except industries */ + TILE_AREA_LOOP(tile, ta) { + switch (GetTileType(tile)) { + case MP_INDUSTRY: + industries.insert(GetIndustryIndex(tile)); + break; + case MP_HOUSE: + AddProducedCargo_Town(tile, produced); + break; + case MP_OBJECT: + if (IsObjectType(tile, OBJECT_HQ)) { + produced[CT_PASSENGERS] += GetMonthlyFrom256Tick(HQ_AVG_POP[EconomyIsInRecession() ? 1 : 0][GetAnimationFrame(tile)]); + produced[CT_MAIL] += GetMonthlyFrom256Tick(HQ_AVG_MAIL[EconomyIsInRecession() ? 1 : 0][GetAnimationFrame(tile)]); + } + default: break; + } + } + + /* Loop over the seen industries. They produce cargo for + * anything that is within 'rad' of any one of their tiles. + */ + for (IndustryID industry : industries) { + const Industry *i = Industry::Get(industry); + /* Skip industry with neutral station */ + if (i->neutral_station != nullptr && !_settings_game.station.serve_neutral_industries) continue; + + for (uint j = 0; j < lengthof(i->produced_cargo); j++) { + CargoID cargo = i->produced_cargo[j]; + if (cargo != CT_INVALID) produced[cargo] += ((uint)i->last_month_production[j]) << 8; + } + } + + return produced; +} + +std::string GetStationCoverageProductionText(TileIndex tile, int w, int h, int rad, StationCoverageType sct) { + auto production = GetProductionAroundTiles(tile, w, h, rad); + + std::ostringstream s; + char buffer[DRAW_STRING_BUFFER]; + GetString(buffer, STR_CM_STATION_BUILD_SUPPLIES, lastof(buffer)); + s << buffer; + bool first = true; + for (CargoID i = 0; i < NUM_CARGO; i++) { + switch (sct) { + case SCT_PASSENGERS_ONLY: if (!IsCargoInClass(i, CC_PASSENGERS)) continue; break; + case SCT_NON_PASSENGERS_ONLY: if (IsCargoInClass(i, CC_PASSENGERS)) continue; break; + case SCT_ALL: break; + default: NOT_REACHED(); + } + if (production[i] == 0) continue; + if (!first) s << ", "; + first = false; + SetDParam(0, i); + SetDParam(1, production[i] >> 8); + // GetString(buffer, STR_CM_STATION_BUILD_SUPPLIES_CARGO, lastof(buffer)); + GetString(buffer, STR_JUST_CARGO, lastof(buffer)); + s << buffer; + } + return s.str(); +} + } // namespace citymania diff --git a/src/citymania/cm_station_gui.hpp b/src/citymania/cm_station_gui.hpp index 457bf6e899..2befe59735 100644 --- a/src/citymania/cm_station_gui.hpp +++ b/src/citymania/cm_station_gui.hpp @@ -3,10 +3,18 @@ #include "../core/geometry_type.hpp" #include "../command_type.h" +#include "../road_type.h" +#include "../station_gui.h" #include "../station_type.h" namespace citymania { +const DiagDirection DEPOTDIR_AUTO = DIAGDIR_END; +const DiagDirection STATIONDIR_X = DIAGDIR_END; +const DiagDirection STATIONDIR_Y = (DiagDirection)((uint)DIAGDIR_END + 1); +const DiagDirection STATIONDIR_AUTO = (DiagDirection)((uint)DIAGDIR_END + 2); +const DiagDirection STATIONDIR_AUTO_XY = (DiagDirection)((uint)DIAGDIR_END + 3); + enum class StationBuildingStatus { IMPOSSIBLE = 0, QUERY = 1, @@ -16,7 +24,7 @@ enum class StationBuildingStatus { // void SetStationBiildingStatus(StationBuildingStatus status); // void SetStationTileSelectSize(int w, int h, int catchment); - +bool UseImprovedStationJoin(); void OnStationTileSetChange(const Station *station, bool adding, StationType type); void OnStationPartBuilt(const Station *station, TileIndex tile, uint32 p1, uint32 p2); void PlaceRoadStop(TileIndex start_tile, TileIndex end_tile, uint32 p2, uint32 cmd); @@ -28,9 +36,16 @@ void PlaceAirport(TileIndex tile); void SelectStationToJoin(const Station *station); // const Station *GetStationToJoin(); void MarkCoverageHighlightDirty(); -void CheckRedrawStationCoverage(); +bool CheckRedrawStationCoverage(); void AbortStationPlacement(); +std::string GetStationCoverageProductionText(TileIndex tile, int w, int h, int rad, StationCoverageType sct); + +bool CheckDriveThroughRoadStopDirection(TileArea area, RoadBits r); +DiagDirection AutodetectRoadObjectDirection(TileIndex tile, Point pt, RoadType roadtype); +DiagDirection AutodetectDriveThroughRoadStopDirection(TileArea area, Point pt, RoadType roadtype); +DiagDirection AutodetectRailObjectDirection(TileIndex tile, Point pt); + } // namespace citymania #endif diff --git a/src/citymania/cm_tooltips.cpp b/src/citymania/cm_tooltips.cpp index 0eed6088e9..afd59644e6 100644 --- a/src/citymania/cm_tooltips.cpp +++ b/src/citymania/cm_tooltips.cpp @@ -54,7 +54,7 @@ struct LandTooltipsWindow : public Window int scr_bot = GetMainViewBottom() - 2; Point pt; pt.y = Clamp(_cursor.pos.y + _cursor.total_size.y + _cursor.total_offs.y + 5, scr_top, scr_bot); - if (pt.y + sm_height > scr_bot) pt.y = min(_cursor.pos.y + _cursor.total_offs.y - 5, scr_bot) - sm_height; + if (pt.y + sm_height > scr_bot) pt.y = std::min(_cursor.pos.y + _cursor.total_offs.y - 5, scr_bot) - sm_height; pt.x = sm_width >= _screen.width ? 0 : Clamp(_cursor.pos.x - (sm_width >> 1), 0, _screen.width - sm_width); return pt; } @@ -62,7 +62,7 @@ struct LandTooltipsWindow : public Window virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) { uint icon_size = ScaleGUITrad(10); - uint line_height = max((uint)FONT_HEIGHT_NORMAL, icon_size) + 2; + uint line_height = std::max((uint)FONT_HEIGHT_NORMAL, icon_size) + 2; uint icons_width = icon_size * 3 + 20; size->width = 200; size->height = 6 + FONT_HEIGHT_NORMAL; @@ -74,7 +74,7 @@ struct LandTooltipsWindow : public Window size->width = GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_HOUSE_NAME).width; size->height += line_height; SetDParam(0, hs->population); - size->width = max(size->width, GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_HOUSE_POPULATION).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_HOUSE_POPULATION).width); break; } case MP_INDUSTRY: { @@ -82,7 +82,7 @@ struct LandTooltipsWindow : public Window if(ind == NULL) break; SetDParam(0, ind->index); - size->width = max(GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_INDUSTRY_NAME).width, size->width); + size->width = std::max(GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_INDUSTRY_NAME).width, size->width); for (CargoID i = 0; i < lengthof(ind->produced_cargo); i++) { if (ind->produced_cargo[i] == CT_INVALID) continue; @@ -93,7 +93,7 @@ struct LandTooltipsWindow : public Window SetDParam(1, cs->Index()); SetDParam(2, ind->last_month_production[i]); SetDParam(3, ToPercent8(ind->last_month_pct_transported[i])); - size->width = max(GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_INDUSTRY_CARGO).width + icons_width, size->width); + size->width = std::max(GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_INDUSTRY_CARGO).width + icons_width, size->width); } break; } @@ -102,7 +102,7 @@ struct LandTooltipsWindow : public Window if(st == NULL) break; SetDParam(0, st->index); - size->width = max(GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_STATION_NAME).width, size->width); + size->width = std::max(GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_STATION_NAME).width, size->width); for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) { const CargoSpec *cs = _sorted_cargo_specs[i]; @@ -114,7 +114,7 @@ struct LandTooltipsWindow : public Window SetDParam(1, cargoid); SetDParam(2, st->goods[cargoid].cargo.TotalCount()); SetDParam(3, ToPercent8(st->goods[cargoid].rating)); - size->width = max(GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_STATION_CARGO).width + icons_width, size->width); + size->width = std::max(GetStringBoundingBox(STR_CM_LAND_TOOLTIPS_STATION_CARGO).width + icons_width, size->width); } } break; @@ -129,7 +129,7 @@ struct LandTooltipsWindow : public Window virtual void DrawWidget(const Rect &r, int widget) const { uint icon_size = ScaleGUITrad(10); - uint line_height = max((uint)FONT_HEIGHT_NORMAL, icon_size) + 2; + uint line_height = std::max((uint)FONT_HEIGHT_NORMAL, icon_size) + 2; uint icons_width = icon_size * 3 + 10; uint text_ofs = (line_height - FONT_HEIGHT_NORMAL) >> 1; uint icon_ofs = (line_height - icon_size) >> 1; @@ -309,7 +309,7 @@ public: int scr_bot = GetMainViewBottom() - 2; Point pt; pt.y = Clamp(_cursor.pos.y + _cursor.total_size.y + _cursor.total_offs.y + 5, scr_top, scr_bot); - if (pt.y + sm_height > scr_bot) pt.y = min(_cursor.pos.y + _cursor.total_offs.y - 5, scr_bot) - sm_height; + if (pt.y + sm_height > scr_bot) pt.y = std::min(_cursor.pos.y + _cursor.total_offs.y - 5, scr_bot) - sm_height; pt.x = sm_width >= _screen.width ? 0 : Clamp(_cursor.pos.x - (sm_width >> 1), 0, _screen.width - sm_width); return pt; } @@ -334,7 +334,7 @@ public: if (HasBit(cs->callback_mask, CBM_CARGO_STATION_RATING_CALC)) { uint last_speed = ge->HasVehicleEverTriedLoading() ? ge->last_speed : 0xFF; - uint32 var18 = min(ge->time_since_pickup, 0xFF) | (min(ge->max_waiting_cargo, 0xFFFF) << 8) | (min(last_speed, 0xFF) << 24); + uint32 var18 = std::min(ge->time_since_pickup, 0xFF) | (std::min(ge->max_waiting_cargo, 0xFFFF) << 8) | (std::min(last_speed, 0xFF) << 24); uint32 var10 = (this->st->last_vehicle_type == VEH_INVALID) ? 0x0 : (this->st->last_vehicle_type + 0x10); // TODO can desync uint16 callback = GetCargoCallback(CBID_CARGO_STATION_RATING_CALC, var10, var18, this->cs); @@ -353,15 +353,15 @@ public: GetString(this->data[line_nr], STR_STATION_RATING_TOOLTIP_NEWGRF_RATING, lastof(this->data[line_nr])); line_nr++; - SetDParam(0, min(last_speed, 0xFF)); + SetDParam(0, std::min(last_speed, 0xFF)); GetString(this->data[line_nr], STR_STATION_RATING_TOOLTIP_NEWGRF_SPEED, lastof(this->data[line_nr])); line_nr++; - SetDParam(0, min(ge->max_waiting_cargo, 0xFFFF)); + SetDParam(0, std::min(ge->max_waiting_cargo, 0xFFFF)); GetString(this->data[line_nr], STR_STATION_RATING_TOOLTIP_NEWGRF_WAITUNITS, lastof(this->data[line_nr])); line_nr++; - SetDParam(0, (min(ge->time_since_pickup, 0xFF) * 5 + 1) / 2); + SetDParam(0, (std::min(ge->time_since_pickup, 0xFF) * 5 + 1) / 2); GetString(this->data[line_nr], STR_STATION_RATING_TOOLTIP_NEWGRF_WAITTIME, lastof(this->data[line_nr])); line_nr++; } @@ -452,7 +452,7 @@ public: uint width = GetStringBoundingBox(this->data[i]).width + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT + 2; if (this->newgrf_rating_used && i >= 2 && i <= 4) width += RATING_TOOLTIP_NEWGRF_INDENT; - size->width = max(size->width, width); + size->width = std::max(size->width, width); size->height += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL; } size->height -= WD_PAR_VSEP_NORMAL; diff --git a/src/watch_gui.cpp b/src/citymania/cm_watch_gui.cpp similarity index 96% rename from src/watch_gui.cpp rename to src/citymania/cm_watch_gui.cpp index f252d89bbd..8973c01fcc 100644 --- a/src/watch_gui.cpp +++ b/src/citymania/cm_watch_gui.cpp @@ -1,32 +1,35 @@ -/* $Id: watch_gui.cpp 17678 2009-10-07 20:54:05 muxy $ */ - /** @file watch_gui.cpp GUI that follow other company building. */ -#include "stdafx.h" -#include "watch_gui.h" -#include "widget_type.h" -#include "gfx_type.h" -#include "gfx_func.h" -#include "company_base.h" -#include "company_gui.h" -#include "viewport_func.h" -#include "window_func.h" -#include "strings_func.h" -#include "zoom_func.h" -#include "map_func.h" +#include "../stdafx.h" -#include "network/network.h" -#include "network/network_func.h" -#include "network/network_base.h" -#include "network/network_gui.h" -#include "table/sprites.h" -#include "table/strings.h" +#include "cm_watch_gui.hpp" + +#include "../widget_type.h" +#include "../gfx_type.h" +#include "../gfx_func.h" +#include "../company_base.h" +#include "../company_gui.h" +#include "../viewport_func.h" +#include "../window_func.h" +#include "../strings_func.h" +#include "../zoom_func.h" +#include "../map_func.h" + +#include "../network/network.h" +#include "../network/network_func.h" +#include "../network/network_base.h" +#include "../network/network_gui.h" +#include "../table/sprites.h" +#include "../table/strings.h" + +#include "../textbuf_gui.h" +#include "../company_gui.h" //company window +#include "../network/network_gui.h" //private message +#include "../console_func.h" //IConsolePrintF +#include "../debug.h" + +namespace citymania { -#include "textbuf_gui.h" -#include "company_gui.h" //company window -#include "network/network_gui.h" //private message -#include "console_func.h" //IConsolePrintF -#include "debug.h" /** Make the widgets columns for company button, has_client and activity Blot. * @param biggest_index Storage for collecting the biggest index used in the returned tree. * @return Horizontal container with butons columns. @@ -63,6 +66,7 @@ static NWidgetBase *MakeCompanyButtons(int *biggest_index) widget_container_company->Add( company_panel ); /* Manage Has Client Blot */ + NWidgetBackground *hasclient_panel = new NWidgetBackground( WWT_PANEL, COLOUR_GREY, EWW_HAS_CLIENT_FIRST + company_num ); company_panel->SetMinimalSize( blot_sprite_size.width, blot_sprite_size.height ); company_panel->SetResize( 0, 0 ); @@ -341,7 +345,7 @@ void WatchCompany::OnResize() void WatchCompany::OnScroll(Point delta) { - const ViewPort *vp = IsPtInWindowViewport(this, _cursor.pos.x, _cursor.pos.y); + const Viewport *vp = IsPtInWindowViewport(this, _cursor.pos.x, _cursor.pos.y); if (vp == NULL) return; this->viewport->scrollpos_x += ScaleByZoom(delta.x, vp->zoom); @@ -599,3 +603,4 @@ void ShowWatchWindow(CompanyID company_to_watch = INVALID_COMPANY, int type = EW } } +} // namespace citymania diff --git a/src/watch_gui.h b/src/citymania/cm_watch_gui.hpp similarity index 93% rename from src/watch_gui.h rename to src/citymania/cm_watch_gui.hpp index c1686c77d5..c4aa536211 100644 --- a/src/watch_gui.h +++ b/src/citymania/cm_watch_gui.hpp @@ -1,12 +1,12 @@ -/* $Id: watch_gui.h 17678 2009-10-07 20:54:05 muxy $ */ - /** @file watch_gui.h GUI Functions related to watching. */ -#ifndef WATCH_GUI_H -#define WATCH_GUI_H +#ifndef CM_WATCH_GUI_HPP +#define CM_WATCH_GUI_HPP -#include "window_gui.h" -#include "company_base.h" +#include "../window_gui.h" +#include "../company_base.h" + +namespace citymania { #define MAX_ACTIVITY 30 @@ -87,5 +87,6 @@ public: void ShowWatchWindow(CompanyID company_to_watch, int type); -#endif // COMPANY_GUI_H +} // namespace citymania +#endif // COMPANY_GUI_H diff --git a/src/zoning.h b/src/citymania/cm_zoning.hpp similarity index 89% rename from src/zoning.h rename to src/citymania/cm_zoning.hpp index a7ecd4327e..011cd8521a 100644 --- a/src/zoning.h +++ b/src/citymania/cm_zoning.hpp @@ -1,9 +1,9 @@ -/** @file zoning.h */ +#ifndef CM_ZONING_HPP +#define CM_ZONING_HPP -#ifndef ZONING_H_ -#define ZONING_H_ +#include "../tile_cmd.h" -#include "tile_cmd.h" +namespace citymania { enum EvaluationMode { CHECKNOTHING = 0, @@ -31,4 +31,6 @@ SpriteID TileZoningSpriteEvaluation(TileIndex tile, Owner owner, EvaluationMode void DrawTileZoning(const TileInfo *ti); void ShowZoningToolbar(); +} // namespace citymania + #endif /*ZONING_H_*/ diff --git a/src/zoning_cmd.cpp b/src/citymania/cm_zoning_cmd.cpp similarity index 91% rename from src/zoning_cmd.cpp rename to src/citymania/cm_zoning_cmd.cpp index c5165eeeb4..7e628fcd76 100644 --- a/src/zoning_cmd.cpp +++ b/src/citymania/cm_zoning_cmd.cpp @@ -1,18 +1,23 @@ -/** @file zoning_cmd.cpp */ -#include "stdafx.h" -#include "station_base.h" -#include "industry.h" -#include "viewport_func.h" -#include "town.h" -#include "zoning.h" -#include "genworld.h" +#include "../stdafx.h" + +#include "cm_zoning.hpp" + +#include "cm_highlight.hpp" +#include "cm_game.hpp" +#include "cm_main.hpp" + +#include "../station_base.h" +#include "../industry.h" +#include "../viewport_func.h" +#include "../town.h" +#include "../genworld.h" + #include #include -#include "citymania/cm_highlight.hpp" -#include "citymania/cm_game.hpp" -#include "citymania/cm_main.hpp" +#include "../safeguards.h" +namespace citymania { Zoning _zoning = {CHECKNOTHING, CHECKNOTHING}; static const SpriteID INVALID_SPRITE_ID = UINT_MAX; @@ -388,27 +393,6 @@ SpriteID GetTownZoneBorderColor(uint8 zone) { }; } -void DrawBorderSprites(const TileInfo *ti, citymania::ZoningBorder border, SpriteID color) { - auto b = (uint8)border & 15; - auto tile_sprite = SPR_BORDER_HIGHLIGHT_BASE + _tileh_to_sprite[ti->tileh] * 19; - if (b) { - AddSortableSpriteToDraw(tile_sprite + b - 1, - color, ti->x, ti->y, 0x10, 0x10, 1, ti->z + 7); - } - if (border & citymania::ZoningBorder::TOP_CORNER) - AddSortableSpriteToDraw(tile_sprite + 15, - color, ti->x, ti->y, 0x10, 0x10, 1, ti->z + 7); - if (border & citymania::ZoningBorder::RIGHT_CORNER) - AddSortableSpriteToDraw(tile_sprite + 16, - color, ti->x, ti->y, 0x10, 0x10, 1, ti->z + 7); - if (border & citymania::ZoningBorder::BOTTOM_CORNER) - AddSortableSpriteToDraw(tile_sprite + 17, - color, ti->x, ti->y, 0x10, 0x10, 1, ti->z + 7); - if (border & citymania::ZoningBorder::LEFT_CORNER) - AddSortableSpriteToDraw(tile_sprite + 18, - color, ti->x, ti->y, 0x10, 0x10, 1, ti->z + 7); - -} /** * Draw the the zoning on the tile. @@ -438,3 +422,5 @@ void DrawTileZoning(const TileInfo *ti) { DrawZoningSprites(SPR_INNER_HIGHLIGHT_BASE, TileZoningSpriteEvaluation(ti->tile, _local_company, _zoning.inner), ti); } } + +} // namespace citymania diff --git a/src/zoning_gui.cpp b/src/citymania/cm_zoning_gui.cpp similarity index 93% rename from src/zoning_gui.cpp rename to src/citymania/cm_zoning_gui.cpp index 99ebcb8e92..0015222d97 100644 --- a/src/zoning_gui.cpp +++ b/src/citymania/cm_zoning_gui.cpp @@ -1,12 +1,17 @@ -/** @file zoning_gui.cpp */ -#include "stdafx.h" -#include "widgets/dropdown_func.h" -#include "table/strings.h" -#include "strings_func.h" -#include "gfx_func.h" -#include "core/geometry_func.hpp" -#include "zoning.h" -#include "hotkeys.h" +#include "../stdafx.h" + +#include "cm_zoning.hpp" + +#include "../gfx_func.h" +#include "../hotkeys.h" +#include "../strings_func.h" +#include "../core/geometry_func.hpp" +#include "../table/strings.h" +#include "../widgets/dropdown_func.h" + +#include "../safeguards.h" + +namespace citymania { const StringID _zone_types[] = { //STR_ZONING_NO_ZONING, @@ -42,8 +47,8 @@ struct ZoningWindow : public Window { this->maxheight = 0; for (int i = 0; i < ZONES_COUNT; i++) { dim = GetStringBoundingBox(_zone_types[i]); - this->maxwidth = max(this->maxwidth, dim.width); - this->maxheight = max(this->maxheight, dim.height); + this->maxwidth = std::max(this->maxwidth, dim.width); + this->maxheight = std::max(this->maxheight, dim.height); } this->InitNested(window_number); @@ -198,3 +203,5 @@ static WindowDesc _zoning_desc ( void ShowZoningToolbar() { AllocateWindowDescFront(&_zoning_desc, 0); } + +} // namespace citymania diff --git a/src/citymania/extensions/CMakeLists.txt b/src/citymania/extensions/CMakeLists.txt new file mode 100644 index 0000000000..653a16487b --- /dev/null +++ b/src/citymania/extensions/CMakeLists.txt @@ -0,0 +1,4 @@ +add_files( + cmext_town.hpp + cmext_company.hpp +) diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index 06953884e1..4036313123 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -191,7 +191,7 @@ static void TileLoopClearAlps(TileIndex tile) } /* Update snow density. */ uint current_density = GetClearDensity(tile); - uint req_density = (k < 0) ? 0u : min((uint)k, 3); + uint req_density = (k < 0) ? 0u : std::min(k, 3u); if (current_density < req_density) { AddClearDensity(tile, 1); @@ -338,6 +338,7 @@ void GenerateClearTile() TileIndex tile_new; SetClearGroundDensity(tile, CLEAR_ROCKS, 3); + MarkTileDirtyByTile(tile); do { if (--j == 0) goto get_out; tile_new = tile + TileOffsByDiagDir((DiagDirection)GB(Random(), 0, 2)); diff --git a/src/cmd_helper.h b/src/cmd_helper.h index ee5d445c28..ceb4d4bd9b 100644 --- a/src/cmd_helper.h +++ b/src/cmd_helper.h @@ -24,9 +24,9 @@ template static inline T Extract(U v) { /* Check if there are enough bits in v */ - assert_tcompile(N == EnumPropsT::num_bits); - assert_tcompile(S + N <= sizeof(U) * 8); - assert_tcompile(EnumPropsT::end <= (1 << N)); + static_assert(N == EnumPropsT::num_bits); + static_assert(S + N <= sizeof(U) * 8); + static_assert(EnumPropsT::end <= (1 << N)); U masked = GB(v, S, N); return IsInsideMM(masked, EnumPropsT::begin, EnumPropsT::end) ? (T)masked : EnumPropsT::invalid; } diff --git a/src/command.cpp b/src/command.cpp index b477759515..6fd926f375 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -25,14 +25,14 @@ #include "core/backup_type.hpp" #include "object_base.h" #include "window_func.h" -#include "watch_gui.h" #include "network/network_base.h" #include "window_func.h" #include "table/strings.h" -#include "citymania/cm_hotkeys.hpp" #include "citymania/cm_blueprint.hpp" +#include "citymania/cm_hotkeys.hpp" +#include "citymania/cm_watch_gui.hpp" #include "safeguards.h" @@ -104,6 +104,7 @@ CommandProc CmdInsertOrder; CommandProc CmdChangeServiceInt; CommandProc CmdBuildIndustry; +CommandProc CmdIndustryCtrl; CommandProc CmdSetCompanyManagerFace; CommandProc CmdSetCompanyColour; @@ -177,6 +178,7 @@ CommandProc CmdShowStoryPage; CommandProc CmdRemoveStoryPage; CommandProc CmdRemoveStoryPageElement; CommandProc CmdScrollViewport; +CommandProc CmdStoryPageButton; CommandProc CmdLevelLand; @@ -271,6 +273,8 @@ static const Command _command_proc_table[] = { DEF_CMD(CmdChangeServiceInt, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_CHANGE_SERVICE_INT DEF_CMD(CmdBuildIndustry, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_INDUSTRY + DEF_CMD(CmdIndustryCtrl, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_INDUSTRY_CTRL + DEF_CMD(CmdSetCompanyManagerFace, 0, CMDT_OTHER_MANAGEMENT ), // CMD_SET_COMPANY_MANAGER_FACE DEF_CMD(CmdSetCompanyColour, 0, CMDT_OTHER_MANAGEMENT ), // CMD_SET_COMPANY_COLOUR @@ -337,6 +341,7 @@ static const Command _command_proc_table[] = { DEF_CMD(CmdRemoveStoryPage, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_STORY_PAGE DEF_CMD(CmdRemoveStoryPageElement, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_STORY_ELEMENT_PAGE DEF_CMD(CmdScrollViewport, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_SCROLL_VIEWPORT + DEF_CMD(CmdStoryPageButton, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_STORY_PAGE_BUTTON DEF_CMD(CmdLevelLand, CMD_ALL_TILES | CMD_NO_TEST | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_LEVEL_LAND; test run might clear tiles multiple times, in execution that only happens once @@ -432,7 +437,7 @@ bool IsCommandAllowedWhilePaused(uint32 cmd) CMDPL_NO_ACTIONS, ///< CMDT_SERVER_SETTING CMDPL_NO_ACTIONS, ///< CMDT_CHEAT }; - assert_compile(lengthof(command_type_lookup) == CMDT_END); + static_assert(lengthof(command_type_lookup) == CMDT_END); assert(IsValidCommand(cmd)); return _game_mode == GM_EDITOR || command_type_lookup[_command_proc_table[cmd & CMD_ID_MASK].type] <= _settings_game.construction.command_pause_level; @@ -581,7 +586,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac int x = TileX(tile) * TILE_SIZE; int y = TileY(tile) * TILE_SIZE; - if (_pause_mode != PM_UNPAUSED && !IsCommandAllowedWhilePaused(cmd)) { + if (_pause_mode != PM_UNPAUSED && !IsCommandAllowedWhilePaused(cmd) && !estimate_only) { ShowErrorMessage(GB(cmd, 16, 16), STR_ERROR_NOT_ALLOWED_WHILE_PAUSED, WL_INFO, x, y); return false; } @@ -770,16 +775,16 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, } /* Send Tile Number to Watching Company Windows */ - WatchCompany *wc; + citymania::WatchCompany *wc; for(int watching_window = 0; ; watching_window++){ - wc = dynamic_cast(FindWindowById(WC_WATCH_COMPANY, watching_window)); + wc = dynamic_cast(FindWindowById(WC_WATCH_COMPANY, watching_window)); if(wc != NULL) wc->OnDoCommand(_current_company, tile); else break; } for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (ci->client_playas == _current_company) { - wc = dynamic_cast(FindWindowById(WC_WATCH_COMPANYA, ci->client_id)); + wc = dynamic_cast(FindWindowById(WC_WATCH_COMPANYA, ci->client_id)); if (wc != NULL) wc->OnDoCommand(_current_company, tile); break; } diff --git a/src/command_func.h b/src/command_func.h index 7a0a77e8d8..aa14600591 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -77,7 +77,7 @@ CommandCallback CcBuildBridge; /* dock_gui.cpp */ CommandCallback CcBuildDocks; -CommandCallback CcPlaySound_SPLAT_WATER; +CommandCallback CcPlaySound_CONSTRUCTION_WATER; /* depot_gui.cpp */ CommandCallback CcCloneVehicle; @@ -96,16 +96,15 @@ CommandCallback CcBuildIndustry; CommandCallback CcPlaySound_EXPLOSION; CommandCallback CcPlaceSign; CommandCallback CcTerraform; -CommandCallback CcGiveMoney; /* rail_gui.cpp */ -CommandCallback CcPlaySound_SPLAT_RAIL; +CommandCallback CcPlaySound_CONSTRUCTION_RAIL; CommandCallback CcRailDepot; CommandCallback CcStation; CommandCallback CcBuildRailTunnel; /* road_gui.cpp */ -CommandCallback CcPlaySound_SPLAT_OTHER; +CommandCallback CcPlaySound_CONSTRUCTION_OTHER; CommandCallback CcBuildRoadTunnel; CommandCallback CcRoadDepot; CommandCallback CcRoadStop; diff --git a/src/command_type.h b/src/command_type.h index ed8e71af51..ff44b97059 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -230,6 +230,7 @@ enum Commands { CMD_CHANGE_SERVICE_INT, ///< change the server interval of a vehicle CMD_BUILD_INDUSTRY, ///< build a new industry + CMD_INDUSTRY_CTRL, ///< change industry properties CMD_SET_COMPANY_MANAGER_FACE, ///< set the manager's face of the company CMD_SET_COMPANY_COLOUR, ///< set the colour of the company @@ -295,6 +296,7 @@ enum Commands { CMD_REMOVE_STORY_PAGE, ///< remove a story page CMD_REMOVE_STORY_PAGE_ELEMENT, ///< remove a story page element CMD_SCROLL_VIEWPORT, ///< scroll main viewport of players + CMD_STORY_PAGE_BUTTON, ///< selection via story page button CMD_LEVEL_LAND, ///< level land @@ -347,7 +349,7 @@ enum DoCommandFlag { DC_AUTO = 0x002, ///< don't allow building on structures DC_QUERY_COST = 0x004, ///< query cost only, don't build. DC_NO_WATER = 0x008, ///< don't allow building on water - DC_NO_RAIL_OVERLAP = 0x010, ///< don't allow overlap of rails (used in buildrail) + // 0x010 is unused DC_NO_TEST_TOWN_RATING = 0x020, ///< town rating does not disallow you from building DC_BANKRUPT = 0x040, ///< company bankrupts, skip money check, skip vehicle on tile check in some cases DC_AUTOREPLACE = 0x080, ///< autoreplace/autorenew is in progress, this shall disable vehicle limits when building, and ignore certain restrictions when undoing things (like vehicle attach callback) diff --git a/src/company_base.h b/src/company_base.h index 646889e1de..2531adabf3 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -16,6 +16,7 @@ #include "tile_type.h" #include "settings_type.h" #include "group.h" +#include #include "citymania/extensions/cmext_company.hpp" @@ -57,11 +58,11 @@ extern CompanyPool _company_pool; struct CompanyProperties { uint32 name_2; ///< Parameter of #name_1. StringID name_1; ///< Name of the company if the user did not change it. - char *name; ///< Name of the company if the user changed it. + std::string name; ///< Name of the company if the user changed it. StringID president_name_1; ///< Name of the president if the user did not change it. uint32 president_name_2; ///< Parameter of #president_name_1 - char *president_name; ///< Name of the president if the user changed it. + std::string president_name; ///< Name of the president if the user changed it. CompanyManagerFace face; ///< Face description of the president. @@ -104,17 +105,11 @@ struct CompanyProperties { // TODO: Change some of these member variables to use relevant INVALID_xxx constants CompanyProperties() - : name_2(0), name_1(0), name(nullptr), president_name_1(0), president_name_2(0), president_name(nullptr), + : name_2(0), name_1(0), president_name_1(0), president_name_2(0), face(0), money(0), money_fraction(0), current_loan(0), colour(0), block_preview(0), location_of_HQ(0), last_build_coordinate(0), share_owners(), inaugurated_year(0), months_of_bankruptcy(0), bankrupt_asked(0), bankrupt_timeout(0), bankrupt_value(0), terraform_limit(0), clear_limit(0), tree_limit(0), is_ai(false) {} - - ~CompanyProperties() - { - free(this->name); - free(this->president_name); - } }; struct Company : CompanyPool::PoolItem<&_company_pool>, CompanyProperties { diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 1843b032d7..08ff5f66f2 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -11,6 +11,7 @@ #include "company_base.h" #include "company_func.h" #include "company_gui.h" +#include "core/backup_type.hpp" #include "town.h" #include "news_func.h" #include "cmd_helper.h" @@ -34,6 +35,7 @@ #include "game/game.hpp" #include "goal_base.h" #include "story_base.h" +#include "widgets/statusbar_widget.h" #include "table/strings.h" #include "cargo_type.h" @@ -64,9 +66,9 @@ Company::Company(uint16 name_1, bool is_ai) this->name_1 = name_1; this->location_of_HQ = INVALID_TILE; this->is_ai = is_ai; - this->terraform_limit = _settings_game.construction.terraform_frame_burst << 16; - this->clear_limit = _settings_game.construction.clear_frame_burst << 16; - this->tree_limit = _settings_game.construction.tree_frame_burst << 16; + this->terraform_limit = (uint32)_settings_game.construction.terraform_frame_burst << 16; + this->clear_limit = (uint32)_settings_game.construction.clear_frame_burst << 16; + this->tree_limit = (uint32)_settings_game.construction.tree_frame_burst << 16; for (uint j = 0; j < 4; j++) this->share_owners[j] = COMPANY_SPECTATOR; InvalidateWindowData(WC_PERFORMANCE_DETAIL, 0, INVALID_COMPANY); @@ -126,6 +128,7 @@ void SetLocalCompany(CompanyID new_company) /* ... and redraw the whole screen. */ MarkWholeScreenDirty(); InvalidateWindowClassesData(WC_SIGN_LIST, -1); + InvalidateWindowClassesData(WC_GOALS_LIST); } /** @@ -189,7 +192,7 @@ void InvalidateCompanyWindows(const Company *company) { CompanyID cid = company->index; - if (cid == _local_company) SetWindowDirty(WC_STATUS_BAR, 0); + if (cid == _local_company) SetWindowWidgetDirty(WC_STATUS_BAR, 0, WID_S_RIGHT); SetWindowDirty(WC_FINANCES, cid); } @@ -216,7 +219,7 @@ bool CheckCompanyHasMoney(CommandCost &cost) * @param c Company to pay the bill. * @param cost Money to pay. */ -static void SubtractMoneyFromAnyCompany(Company *c, CommandCost cost) +static void SubtractMoneyFromAnyCompany(Company *c, const CommandCost &cost) { if (cost.GetCost() == 0) return; assert(cost.GetExpensesType() != INVALID_EXPENSES); @@ -245,7 +248,7 @@ static void SubtractMoneyFromAnyCompany(Company *c, CommandCost cost) * Subtract money from the #_current_company, if the company is valid. * @param cost Money to pay. */ -void SubtractMoneyFromCompany(CommandCost cost) +void SubtractMoneyFromCompany(const CommandCost &cost) { Company *c = Company::GetIfValid(_current_company); if (c != nullptr) SubtractMoneyFromAnyCompany(c, cost); @@ -256,7 +259,7 @@ void SubtractMoneyFromCompany(CommandCost cost) * @param company Company paying the bill. * @param cst Cost of a command. */ -void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cst) +void SubtractMoneyFromCompanyFract(CompanyID company, const CommandCost &cst) { Company *c = Company::Get(company); byte m = c->money_fraction; @@ -272,9 +275,9 @@ void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cst) void UpdateLandscapingLimits() { for (Company *c : Company::Iterate()) { - c->terraform_limit = min(c->terraform_limit + _settings_game.construction.terraform_per_64k_frames, (uint32)_settings_game.construction.terraform_frame_burst << 16); - c->clear_limit = min(c->clear_limit + _settings_game.construction.clear_per_64k_frames, (uint32)_settings_game.construction.clear_frame_burst << 16); - c->tree_limit = min(c->tree_limit + _settings_game.construction.tree_per_64k_frames, (uint32)_settings_game.construction.tree_frame_burst << 16); + c->terraform_limit = std::min((uint64)c->terraform_limit + _settings_game.construction.terraform_per_64k_frames, (uint64)_settings_game.construction.terraform_frame_burst << 16); + c->clear_limit = std::min((uint64)c->clear_limit + _settings_game.construction.clear_per_64k_frames, (uint64)_settings_game.construction.clear_frame_burst << 16); + c->tree_limit = std::min((uint64)c->tree_limit + _settings_game.construction.tree_per_64k_frames, (uint64)_settings_game.construction.tree_frame_burst << 16); } } @@ -361,7 +364,7 @@ static void GenerateCompanyName(Company *c) StringID str; uint32 strp; - if (t->name == nullptr && IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1)) { + if (t->name.empty() && IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1)) { str = t->townnametype - SPECSTR_TOWNNAME_START + SPECSTR_COMPANY_NAME_START; strp = t->townnameparts; @@ -561,7 +564,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY) ResetCompanyLivery(c); _company_colours[c->index] = (Colours)c->colour; - c->money = c->current_loan = (100000ll * _economy.inflation_prices >> 16) / 50000 * 50000; + c->money = c->current_loan = (std::min(INITIAL_LOAN, _economy.max_loan) * _economy.inflation_prices >> 16) / 50000 * 50000; c->share_owners[0] = c->share_owners[1] = c->share_owners[2] = c->share_owners[3] = INVALID_OWNER; @@ -587,8 +590,6 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY) AI::BroadcastNewEvent(new ScriptEventCompanyNew(c->index), c->index); Game::NewEvent(new ScriptEventCompanyNew(c->index)); - if (!is_ai) UpdateAllTownVirtCoords(); //coloured rating - return c; } @@ -717,7 +718,7 @@ void OnTick_Companies() if (_next_competitor_start == 0) { /* AI::GetStartNextTime() can return 0. */ - _next_competitor_start = max(1, AI::GetStartNextTime() * DAY_TICKS); + _next_competitor_start = std::max(1, AI::GetStartNextTime() * DAY_TICKS); } if (_game_mode != GM_MENU && AI::CanStartNew() && --_next_competitor_start == 0) { @@ -830,13 +831,6 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 ClientID client_id = (ClientID)p2; NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); -#ifndef DEBUG_DUMP_COMMANDS - /* When replaying the client ID is not a valid client; there - * are actually no clients at all. However, the company has to - * be created, otherwise we cannot rerun the game properly. - * So only allow a nullptr client info in that case. */ - if (ci == nullptr) return CommandCost(); -#endif /* NOT DEBUG_DUMP_COMMANDS */ /* Delete multiplayer progress bar */ DeleteWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); @@ -845,7 +839,9 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 /* A new company could not be created, revert to being a spectator */ if (c == nullptr) { - if (_network_server) { + /* We check for "ci != nullptr" as a client could have left by + * the time we execute this command. */ + if (_network_server && ci != nullptr) { ci->client_playas = COMPANY_SPECTATOR; NetworkUpdateClientInfo(ci->client_id); } @@ -864,6 +860,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 * all clients so everything is in sync */ SyncCompanySettings(); + UpdateAllTownVirtCoords(); // CityMania (for colouring towns) MarkWholeScreenDirty(); } @@ -872,9 +869,16 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } case CCA_NEW_AI: { // Make a new AI company + if (company_id != INVALID_COMPANY && company_id >= MAX_COMPANIES) return CMD_ERROR; + + /* For network games, company deletion is delayed. */ + if (!_networking && company_id != INVALID_COMPANY && Company::IsValidID(company_id)) return CMD_ERROR; + if (!(flags & DC_EXEC)) return CommandCost(); - if (company_id != INVALID_COMPANY && (company_id >= MAX_COMPANIES || Company::IsValidID(company_id))) return CMD_ERROR; + /* For network game, just assume deletion happened. */ + assert(company_id == INVALID_COMPANY || !Company::IsValidID(company_id)); + Company *c = DoStartupNewCompany(true, company_id); if (c != nullptr) NetworkServerNewCompany(c, nullptr); break; @@ -884,6 +888,9 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 CompanyRemoveReason reason = (CompanyRemoveReason)GB(p1, 24, 8); if (reason >= CRR_END) return CMD_ERROR; + /* We can't delete the last existing company in singleplayer mode. */ + if (!_networking && Company::GetNumItems() == 1) return CMD_ERROR; + Company *c = Company::GetIfValid(company_id); if (c == nullptr) return CMD_ERROR; @@ -1053,7 +1060,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1, static bool IsUniqueCompanyName(const char *name) { for (const Company *c : Company::Iterate()) { - if (c->name != nullptr && strcmp(c->name, name) == 0) return false; + if (!c->name.empty() && c->name == name) return false; } return true; @@ -1079,8 +1086,11 @@ CommandCost CmdRenameCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uin if (flags & DC_EXEC) { Company *c = Company::Get(_current_company); - free(c->name); - c->name = reset ? nullptr : stredup(text); + if (reset) { + c->name.clear(); + } else { + c->name = text; + } MarkWholeScreenDirty(); InvalidateWindowClassesData(WC_WATCH_COMPANY, 0); CompanyAdminUpdate(c); @@ -1097,7 +1107,7 @@ CommandCost CmdRenameCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uin static bool IsUniquePresidentName(const char *name) { for (const Company *c : Company::Iterate()) { - if (c->president_name != nullptr && strcmp(c->president_name, name) == 0) return false; + if (!c->president_name.empty() && c->president_name == name) return false; } return true; @@ -1123,14 +1133,13 @@ CommandCost CmdRenamePresident(TileIndex tile, DoCommandFlag flags, uint32 p1, u if (flags & DC_EXEC) { Company *c = Company::Get(_current_company); - free(c->president_name); if (reset) { - c->president_name = nullptr; + c->president_name.clear(); } else { - c->president_name = stredup(text); + c->president_name = text; - if (c->name_1 == STR_SV_UNNAMED && c->name == nullptr) { + if (c->name_1 == STR_SV_UNNAMED && c->name.empty()) { char buf[80]; seprintf(buf, lastof(buf), "%s Transport", text); @@ -1188,3 +1197,50 @@ uint32 CompanyInfrastructure::GetTramTotal() const } return total; } + +/** + * Transfer funds (money) from one company to another. + * To prevent abuse in multiplayer games you can only send money to other + * companies if you have paid off your loan (either explicitly, or implicitly + * given the fact that you have more money than loan). + * @param tile unused + * @param flags operation to perform + * @param p1 the amount of money to transfer; max 20.000.000 + * @param p2 the company to transfer the money to + * @param text unused + * @return the cost of this operation or an error + */ +CommandCost CmdGiveMoney(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) +{ + if (!_settings_game.economy.give_money) return CMD_ERROR; + + const Company *c = Company::Get(_current_company); + CommandCost amount(EXPENSES_OTHER, std::min(p1, 20000000LL)); + CompanyID dest_company = (CompanyID)p2; + + /* You can only transfer funds that is in excess of your loan */ + if (c->money - c->current_loan < amount.GetCost() || amount.GetCost() < 0) return_cmd_error(STR_ERROR_INSUFFICIENT_FUNDS); + if (!Company::IsValidID(dest_company)) return CMD_ERROR; + + if (flags & DC_EXEC) { + /* Add money to company */ + Backup cur_company(_current_company, dest_company, FILE_LINE); + SubtractMoneyFromCompany(CommandCost(EXPENSES_OTHER, -amount.GetCost())); + cur_company.Restore(); + + if (_networking) { + char dest_company_name[MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH]; + SetDParam(0, dest_company); + GetString(dest_company_name, STR_COMPANY_NAME, lastof(dest_company_name)); + + char from_company_name[MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH]; + SetDParam(0, _current_company); + GetString(from_company_name, STR_COMPANY_NAME, lastof(from_company_name)); + + NetworkTextMessage(NETWORK_ACTION_GIVE_MONEY, GetDrawStringCompanyColour(_current_company), false, from_company_name, dest_company_name, amount.GetCost()); + } + } + + /* Subtract money from local-company */ + return amount; +} diff --git a/src/company_func.h b/src/company_func.h index cec6110044..01f5859104 100644 --- a/src/company_func.h +++ b/src/company_func.h @@ -25,8 +25,8 @@ void CompanyAdminBankrupt(CompanyID company_id); void UpdateLandscapingLimits(); bool CheckCompanyHasMoney(CommandCost &cost); -void SubtractMoneyFromCompany(CommandCost cost); -void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cost); +void SubtractMoneyFromCompany(const CommandCost& cost); +void SubtractMoneyFromCompanyFract(CompanyID company, const CommandCost& cost); CommandCost CheckOwnership(Owner owner, TileIndex tile = 0); CommandCost CheckTileOwnership(TileIndex tile); diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 79f770c00c..168c49f890 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -8,6 +8,7 @@ /** @file company_gui.cpp %Company related GUIs. */ #include "stdafx.h" +#include "currency.h" #include "error.h" #include "gui.h" #include "window_gui.h" @@ -113,11 +114,11 @@ struct ExpensesList { ExpensesType et = this->et[i]; if (et == INVALID_EXPENSES) { if (!invalid_expenses_measured) { - width = max(width, GetStringBoundingBox(STR_FINANCES_TOTAL_CAPTION).width); + width = std::max(width, GetStringBoundingBox(STR_FINANCES_TOTAL_CAPTION).width); invalid_expenses_measured = true; } } else { - width = max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width); + width = std::max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width); } } return width; @@ -323,7 +324,7 @@ struct CompanyFinancesWindow : Window { case WID_CF_LOAN_VALUE: case WID_CF_TOTAL_VALUE: SetDParamMaxValue(0, CompanyFinancesWindow::max_money); - size->width = max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width; + size->width = std::max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width; break; case WID_CF_MAXLOAN_GAP: @@ -343,7 +344,7 @@ struct CompanyFinancesWindow : Window { case WID_CF_EXPS_PRICE2: case WID_CF_EXPS_PRICE3: { const Company *c = Company::Get((CompanyID)this->window_number); - int age = min(_cur_year - c->inaugurated_year, 2); + int age = std::min(_cur_year - c->inaugurated_year, 2); int wid_offset = widget - WID_CF_EXPS_PRICE1; if (wid_offset <= age) { DrawYearColumn(r, _cur_year - (age - wid_offset), c->yearly_expenses + (age - wid_offset)); @@ -456,7 +457,7 @@ struct CompanyFinancesWindow : Window { { const Company *c = Company::Get((CompanyID)this->window_number); if (c->money > CompanyFinancesWindow::max_money) { - CompanyFinancesWindow::max_money = max(c->money * 2, CompanyFinancesWindow::max_money * 4); + CompanyFinancesWindow::max_money = std::max(c->money * 2, CompanyFinancesWindow::max_money * 4); this->SetupWidgets(); this->ReInit(); } @@ -527,7 +528,7 @@ public: uint Height(uint width) const override { - return max(FONT_HEIGHT_NORMAL, ScaleGUITrad(12) + 2); + return std::max(FONT_HEIGHT_NORMAL, ScaleGUITrad(12) + 2); } bool Selectable() const override @@ -732,7 +733,7 @@ public: /* Position scrollbar to selected group */ for (uint i = 0; i < this->rows; i++) { if (this->groups[i]->index == sel) { - this->vscroll->SetPosition(Clamp(i - this->vscroll->GetCapacity() / 2, 0, max(this->vscroll->GetCount() - this->vscroll->GetCapacity(), 0))); + this->vscroll->SetPosition(Clamp(i - this->vscroll->GetCapacity() / 2, 0, std::max(this->vscroll->GetCount() - this->vscroll->GetCapacity(), 0))); break; } } @@ -756,14 +757,14 @@ public: } } - size->width = max(size->width, 5 + d.width + WD_FRAMERECT_RIGHT); + size->width = std::max(size->width, 5 + d.width + WD_FRAMERECT_RIGHT); break; } case WID_SCL_MATRIX: { /* 11 items in the default rail class */ this->square = GetSpriteSize(SPR_SQUARE); - this->line_height = max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4; + this->line_height = std::max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4; size->height = 11 * this->line_height; resize->width = 1; @@ -782,9 +783,9 @@ public: this->square = GetSpriteSize(SPR_SQUARE); int padding = this->square.width + NWidgetScrollbar::GetVerticalDimension().width + 10; for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) { - size->width = max(size->width, GetStringBoundingBox(*id).width + padding); + size->width = std::max(size->width, GetStringBoundingBox(*id).width + padding); } - size->width = max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + padding); + size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + padding); break; } } @@ -899,7 +900,7 @@ public: } } } else { - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->groups.size()); + uint max = static_cast(std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.size())); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { const Group *g = this->groups[i]; SetDParam(0, g->index); @@ -1381,7 +1382,7 @@ public: number_dim.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT + arrows_width; number_dim.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; /* Compute width of both buttons. */ - yesno_dim.width = max(yesno_dim.width, number_dim.width); + yesno_dim.width = std::max(yesno_dim.width, number_dim.width); number_dim.width = yesno_dim.width - arrows_width; this->yesno_dim = yesno_dim; @@ -1393,8 +1394,8 @@ public: switch (widget) { case WID_SCMF_FACE: { Dimension face_size = GetSpriteSize(SPR_GRADIENT); - size->width = max(size->width, face_size.width); - size->height = max(size->height, face_size.height); + size->width = std::max(size->width, face_size.width); + size->height = std::max(size->height, face_size.height); break; } @@ -1886,22 +1887,22 @@ struct CompanyInfrastructureWindow : Window case WID_CI_RAIL_DESC: { uint lines = 1; // Starts at 1 because a line is also required for the section title - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width); RailType rt; FOR_ALL_SORTED_RAILTYPES(rt) { if (HasBit(this->railtypes, rt)) { lines++; SetDParam(0, GetRailTypeInfo(rt)->strings.name); - size->width = max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT); + size->width = std::max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT); } } if (this->railtypes != RAILTYPES_NONE) { lines++; - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS).width + WD_FRAMERECT_LEFT); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS).width + WD_FRAMERECT_LEFT); } - size->height = max(size->height, lines * FONT_HEIGHT_NORMAL); + size->height = std::max(size->height, lines * FONT_HEIGHT_NORMAL); break; } @@ -1909,30 +1910,30 @@ struct CompanyInfrastructureWindow : Window case WID_CI_TRAM_DESC: { uint lines = 1; // Starts at 1 because a line is also required for the section title - size->width = max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width); + size->width = std::max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width); RoadType rt; FOR_ALL_SORTED_ROADTYPES(rt) { if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) { lines++; SetDParam(0, GetRoadTypeInfo(rt)->strings.name); - size->width = max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT); + size->width = std::max(size->width, GetStringBoundingBox(STR_WHITE_STRING).width + WD_FRAMERECT_LEFT); } } - size->height = max(size->height, lines * FONT_HEIGHT_NORMAL); + size->height = std::max(size->height, lines * FONT_HEIGHT_NORMAL); break; } case WID_CI_WATER_DESC: - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT).width); - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + WD_FRAMERECT_LEFT); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + WD_FRAMERECT_LEFT); break; case WID_CI_STATION_DESC: - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width); - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + WD_FRAMERECT_LEFT); - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + WD_FRAMERECT_LEFT); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + WD_FRAMERECT_LEFT); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + WD_FRAMERECT_LEFT); break; case WID_CI_RAIL_COUNT: @@ -1946,24 +1947,24 @@ struct CompanyInfrastructureWindow : Window Money max_cost = 10000; // Some random number to reserve enough space. uint32 rail_total = c->infrastructure.GetRailTotal(); for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) { - max_val = max(max_val, c->infrastructure.rail[rt]); - max_cost = max(max_cost, RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total)); + max_val = std::max(max_val, c->infrastructure.rail[rt]); + max_cost = std::max(max_cost, RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total)); } - max_val = max(max_val, c->infrastructure.signal); - max_cost = max(max_cost, SignalMaintenanceCost(c->infrastructure.signal)); + max_val = std::max(max_val, c->infrastructure.signal); + max_cost = std::max(max_cost, SignalMaintenanceCost(c->infrastructure.signal)); uint32 road_total = c->infrastructure.GetRoadTotal(); uint32 tram_total = c->infrastructure.GetTramTotal(); for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) { - max_val = max(max_val, c->infrastructure.road[rt]); - max_cost = max(max_cost, RoadMaintenanceCost(rt, c->infrastructure.road[rt], RoadTypeIsRoad(rt) ? road_total : tram_total)); + max_val = std::max(max_val, c->infrastructure.road[rt]); + max_cost = std::max(max_cost, RoadMaintenanceCost(rt, c->infrastructure.road[rt], RoadTypeIsRoad(rt) ? road_total : tram_total)); } - max_val = max(max_val, c->infrastructure.water); - max_cost = max(max_cost, CanalMaintenanceCost(c->infrastructure.water)); - max_val = max(max_val, c->infrastructure.station); - max_cost = max(max_cost, StationMaintenanceCost(c->infrastructure.station)); - max_val = max(max_val, c->infrastructure.airport); - max_cost = max(max_cost, AirportMaintenanceCost(c->index)); + max_val = std::max(max_val, c->infrastructure.water); + max_cost = std::max(max_cost, CanalMaintenanceCost(c->infrastructure.water)); + max_val = std::max(max_val, c->infrastructure.station); + max_cost = std::max(max_cost, StationMaintenanceCost(c->infrastructure.station)); + max_val = std::max(max_val, c->infrastructure.airport); + max_cost = std::max(max_cost, AirportMaintenanceCost(c->index)); SetDParamMaxValue(0, max_val); uint count_width = GetStringBoundingBox(STR_WHITE_COMMA).width + 20; // Reserve some wiggle room @@ -1971,17 +1972,17 @@ struct CompanyInfrastructureWindow : Window if (_settings_game.economy.infrastructure_maintenance) { SetDParamMaxValue(0, this->GetTotalMaintenanceCost() * 12); // Convert to per year this->total_width = GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL).width + 20; - size->width = max(size->width, this->total_width); + size->width = std::max(size->width, this->total_width); SetDParamMaxValue(0, max_cost * 12); // Convert to per year - count_width += max(this->total_width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL).width); + count_width += std::max(this->total_width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL).width); } - size->width = max(size->width, count_width); + size->width = std::max(size->width, count_width); /* Set height of the total line. */ if (widget == WID_CI_TOTAL) { - size->height = _settings_game.economy.infrastructure_maintenance ? max(size->height, EXP_LINESPACE + FONT_HEIGHT_NORMAL) : 0; + size->height = _settings_game.economy.infrastructure_maintenance ? std::max(size->height, EXP_LINESPACE + FONT_HEIGHT_NORMAL) : 0; } break; } @@ -2175,37 +2176,30 @@ static const NWidgetPart _nested_company_widgets[] = { EndContainer(), NWidget(NWID_VERTICAL), SetPIP(4, 2, 4), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_VIEW_BUILD_HQ), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_VIEW_HQ), SetFill(1, 0), SetDataTip(STR_COMPANY_VIEW_VIEW_HQ_BUTTON, STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_BUILD_HQ), SetFill(1, 0), SetDataTip(STR_COMPANY_VIEW_BUILD_HQ_BUTTON, STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_VIEW_HQ), SetDataTip(STR_COMPANY_VIEW_VIEW_HQ_BUTTON, STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_BUILD_HQ), SetDataTip(STR_COMPANY_VIEW_BUILD_HQ_BUTTON, STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_RELOCATE), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_RELOCATE_HQ), SetFill(1, 0), SetDataTip(STR_COMPANY_VIEW_RELOCATE_HQ, STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS), - NWidget(NWID_SPACER), SetMinimalSize(90, 0), - EndContainer(), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_MOD), - NWidget(NWID_SPACER), SetMinimalSize(0, 0), SetFill(0, 1), - NWidget(NWID_VERTICAL), SetPIP(4, 2, 4), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_JOIN), SetFill(1, 0), SetDataTip(STR_MOD_COMPANY_JOIN_BUTTON, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_TOGGLE_LOCK), SetFill(1, 0), SetDataTip(STR_MOD_TOGGLE_LOCK_BUTTON, STR_NULL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_RESET), SetFill(1, 0), SetDataTip(STR_MOD_COMPANY_RESET_BUTTON, STR_NULL), - EndContainer(), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_RELOCATE_HQ), SetDataTip(STR_COMPANY_VIEW_RELOCATE_HQ, STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS), + NWidget(NWID_SPACER), EndContainer(), + NWidget(NWID_SPACER), SetFill(0, 1), EndContainer(), EndContainer(), NWidget(WWT_TEXT, COLOUR_GREY, WID_C_DESC_COMPANY_VALUE), SetDataTip(STR_COMPANY_VIEW_COMPANY_VALUE, STR_NULL), SetFill(1, 0), - NWidget(NWID_VERTICAL), SetPIP(4, 2, 4), - NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0), - NWidget(NWID_VERTICAL), - NWidget(WWT_TEXT, COLOUR_GREY, WID_C_DESC_INFRASTRUCTURE), SetDataTip(STR_COMPANY_VIEW_INFRASTRUCTURE, STR_NULL), - NWidget(NWID_SPACER), SetFill(0, 1), - EndContainer(), - NWidget(WWT_EMPTY, INVALID_COLOUR, WID_C_DESC_INFRASTRUCTURE_COUNTS), SetMinimalTextLines(5, 0), SetFill(1, 0), - NWidget(NWID_VERTICAL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_VIEW_INFRASTRUCTURE), SetDataTip(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON, STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP), - NWidget(NWID_SPACER), SetFill(0, 1), SetMinimalSize(90, 0), - EndContainer(), + NWidget(NWID_VERTICAL), SetPIP(4, 2, 4), + NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0), + NWidget(NWID_VERTICAL), + NWidget(WWT_TEXT, COLOUR_GREY, WID_C_DESC_INFRASTRUCTURE), SetDataTip(STR_COMPANY_VIEW_INFRASTRUCTURE, STR_NULL), + NWidget(NWID_SPACER), SetFill(0, 1), + EndContainer(), + NWidget(WWT_EMPTY, INVALID_COLOUR, WID_C_DESC_INFRASTRUCTURE_COUNTS), SetMinimalTextLines(5, 0), SetFill(1, 0), + NWidget(NWID_VERTICAL), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_VIEW_INFRASTRUCTURE), SetDataTip(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON, STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP), + NWidget(NWID_SPACER), EndContainer(), EndContainer(), + EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_DESC_OWNERS), NWidget(NWID_VERTICAL), SetPIP(5, 5, 4), @@ -2213,17 +2207,31 @@ static const NWidgetPart _nested_company_widgets[] = { NWidget(NWID_SPACER), SetFill(0, 1), EndContainer(), EndContainer(), + /* Multi player buttons. */ NWidget(NWID_VERTICAL), SetPIP(4, 2, 4), - NWidget(NWID_SPACER), SetMinimalSize(90, 0), SetFill(0, 1), - /* Multi player buttons. */ - NWidget(NWID_HORIZONTAL), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_C_HAS_PASSWORD), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_MULTIPLAYER), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_PASSWORD), SetFill(1, 0), SetDataTip(STR_COMPANY_VIEW_PASSWORD, STR_COMPANY_VIEW_PASSWORD_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_JOIN), SetFill(1, 0), SetDataTip(STR_COMPANY_VIEW_JOIN, STR_COMPANY_VIEW_JOIN_TOOLTIP), + NWidget(NWID_SPACER), SetFill(0, 1), + NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0), + NWidget(NWID_SPACER), SetFill(1, 0), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_GIVE_MONEY), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_GIVE_MONEY), SetDataTip(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON, STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP), EndContainer(), EndContainer(), - EndContainer(), + NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0), + NWidget(WWT_EMPTY, COLOUR_GREY, WID_C_HAS_PASSWORD), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_MULTIPLAYER), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_PASSWORD), SetDataTip(STR_COMPANY_VIEW_PASSWORD, STR_COMPANY_VIEW_PASSWORD_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_JOIN), SetDataTip(STR_COMPANY_VIEW_JOIN, STR_COMPANY_VIEW_JOIN_TOOLTIP), + EndContainer(), + EndContainer(), + // NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_MOD), + // NWidget(NWID_SPACER), SetMinimalSize(0, 0), SetFill(0, 1), + // NWidget(NWID_VERTICAL), SetPIP(4, 2, 4), + // NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_JOIN), SetFill(1, 0), SetDataTip(STR_MOD_COMPANY_JOIN_BUTTON, STR_NULL), + // NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_TOGGLE_LOCK), SetFill(1, 0), SetDataTip(STR_MOD_TOGGLE_LOCK_BUTTON, STR_NULL), + // NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_RESET), SetFill(1, 0), SetDataTip(STR_MOD_COMPANY_RESET_BUTTON, STR_NULL), + // EndContainer(), + // EndContainer(), + EndContainer(), EndContainer(), EndContainer(), EndContainer(), @@ -2316,7 +2324,7 @@ struct CompanyWindow : Window if (plane != wi->shown_plane) { wi->SetDisplayedPlane(plane); this->InvalidateData(); - return; + reinit = true; } /* Build HQ button handling. */ @@ -2324,8 +2332,7 @@ struct CompanyWindow : Window wi = this->GetWidget(WID_C_SELECT_VIEW_BUILD_HQ); if (plane != wi->shown_plane) { wi->SetDisplayedPlane(plane); - this->SetDirty(); - return; + reinit = true; } this->SetWidgetDisabledState(WID_C_VIEW_HQ, c->location_of_HQ == INVALID_TILE); @@ -2335,8 +2342,7 @@ struct CompanyWindow : Window wi = this->GetWidget(WID_C_SELECT_RELOCATE); if (plane != wi->shown_plane) { wi->SetDisplayedPlane(plane); - this->SetDirty(); - return; + reinit = true; } /* Owners of company */ @@ -2353,21 +2359,25 @@ struct CompanyWindow : Window reinit = true; } - /* Multiplayer buttons. */ - plane = ((!_networking) ? (int)SZSP_NONE : (int)(local ? CWP_MP_C_PWD : CWP_MP_C_JOIN)); - wi = this->GetWidget(WID_C_SELECT_MULTIPLAYER); + /* Enable/disable 'Give money' button. */ + plane = ((local || _local_company == COMPANY_SPECTATOR || !_settings_game.economy.give_money) ? SZSP_NONE : 0); + wi = this->GetWidget(WID_C_SELECT_GIVE_MONEY); if (plane != wi->shown_plane) { wi->SetDisplayedPlane(plane); reinit = true; } this->SetWidgetDisabledState(WID_C_COMPANY_JOIN, c->is_ai); - plane = (int)(_networking && _novarole ? CWP_BUTTONS_MOD: CWP_BUTTONS_PLAYER); - wi = this->GetWidget(WID_C_SELECT_MOD); + /* Multiplayer buttons. */ + plane = ((!_networking) ? (int)SZSP_NONE : (int)(local ? CWP_MP_C_PWD : CWP_MP_C_JOIN)); + wi = this->GetWidget(WID_C_SELECT_MULTIPLAYER); + // plane = (int)(_networking && _novarole ? CWP_BUTTONS_MOD: CWP_BUTTONS_PLAYER); + // wi = this->GetWidget(WID_C_SELECT_MOD); if (plane != wi->shown_plane) { wi->SetDisplayedPlane(plane); reinit = true; } + this->SetWidgetDisabledState(WID_C_COMPANY_JOIN, c->is_ai); if (reinit) { this->ReInit(); @@ -2390,8 +2400,8 @@ struct CompanyWindow : Window switch (widget) { case WID_C_FACE: { Dimension face_size = GetSpriteSize(SPR_GRADIENT); - size->width = max(size->width, face_size.width); - size->height = max(size->height, face_size.height); + size->width = std::max(size->width, face_size.width); + size->height = std::max(size->height, face_size.height); break; } @@ -2412,18 +2422,18 @@ struct CompanyWindow : Window case WID_C_DESC_VEHICLE_COUNTS: SetDParamMaxValue(0, 5000); // Maximum number of vehicles for (uint i = 0; i < lengthof(_company_view_vehicle_count_strings); i++) { - size->width = max(size->width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width); + size->width = std::max(size->width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width); } break; case WID_C_DESC_INFRASTRUCTURE_COUNTS: SetDParamMaxValue(0, UINT_MAX); - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width); - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width); - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width); - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width); - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width); - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width); break; case WID_C_DESC_OWNERS: { @@ -2431,11 +2441,27 @@ struct CompanyWindow : Window SetDParamMaxValue(0, 75); SetDParam(1, c2->index); - size->width = max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_SHARES_OWNED_BY).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_SHARES_OWNED_BY).width); } break; } + case WID_C_VIEW_HQ: + case WID_C_BUILD_HQ: + case WID_C_RELOCATE_HQ: + case WID_C_VIEW_INFRASTRUCTURE: + case WID_C_GIVE_MONEY: + case WID_C_COMPANY_PASSWORD: + case WID_C_COMPANY_JOIN: + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_VIEW_HQ_BUTTON).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_BUILD_HQ_BUTTON).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_RELOCATE_HQ).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width); + size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width); + break; + // case CW_WIDGET_COMPANY_RESUME: // case CW_WIDGET_COMPANY_SUSPEND: // case CW_WIDGET_COMPANY_RESET: @@ -2483,7 +2509,7 @@ struct CompanyWindow : Window if (amounts[0] + amounts[1] + amounts[2] + amounts[3] == 0) { DrawString(r.left, r.right, y, STR_COMPANY_VIEW_VEHICLES_NONE); } else { - assert_compile(lengthof(amounts) == lengthof(_company_view_vehicle_count_strings)); + static_assert(lengthof(amounts) == lengthof(_company_view_vehicle_count_strings)); for (uint i = 0; i < lengthof(amounts); i++) { if (amounts[i] != 0) { @@ -2603,7 +2629,7 @@ struct CompanyWindow : Window case WID_C_VIEW_HQ: { TileIndex tile = Company::Get((CompanyID)this->window_number)->location_of_HQ; if (citymania::_fn_mod) { - ShowExtraViewPortWindow(tile); + ShowExtraViewportWindow(tile); } else { ScrollMainWindowToTile(tile); } @@ -2617,7 +2643,7 @@ struct CompanyWindow : Window this->RaiseButtons(); break; } - SetObjectToPlaceWnd(SPR_CURSOR_HQ, PAL_NONE, HT_RECT, this); + SetObjectToPlaceWnd(SPR_CURSOR_HQ, PAL_NONE, HT_RECT, this, CM_DDSP_BUILD_HQ); SetTileSelectSize(2, 2); this->LowerWidget(WID_C_BUILD_HQ); this->SetWidgetDirty(WID_C_BUILD_HQ); @@ -2629,7 +2655,7 @@ struct CompanyWindow : Window this->RaiseButtons(); break; } - SetObjectToPlaceWnd(SPR_CURSOR_HQ, PAL_NONE, HT_RECT, this); + SetObjectToPlaceWnd(SPR_CURSOR_HQ, PAL_NONE, HT_RECT, this, CM_DDSP_BUILD_HQ); SetTileSelectSize(2, 2); this->LowerWidget(WID_C_RELOCATE_HQ); this->SetWidgetDirty(WID_C_RELOCATE_HQ); @@ -2639,6 +2665,11 @@ struct CompanyWindow : Window ShowCompanyInfrastructure((CompanyID)this->window_number); break; + case WID_C_GIVE_MONEY: + this->query_widget = WID_C_GIVE_MONEY; + ShowQueryString(STR_EMPTY, STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION, 30, this, CS_NUMERAL, QSF_NONE); + break; + case WID_C_BUY_SHARE: DoCommandP(0, this->window_number, 0, CMD_BUY_SHARE_IN_COMPANY | CMD_MSG(STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS)); break; @@ -2723,6 +2754,14 @@ struct CompanyWindow : Window switch (this->query_widget) { default: NOT_REACHED(); + case WID_C_GIVE_MONEY: { + Money money = (Money)(strtoull(str, nullptr, 10) / _currency->rate); + uint32 money_c = Clamp(ClampToI32(money), 0, 20000000); // Clamp between 20 million and 0 + + DoCommandP(0, money_c, this->window_number, CMD_GIVE_MONEY | CMD_MSG(STR_ERROR_CAN_T_GIVE_MONEY)); + break; + } + case WID_C_PRESIDENT_NAME: DoCommandP(0, 0, 0, CMD_RENAME_PRESIDENT | CMD_MSG(STR_ERROR_CAN_T_CHANGE_PRESIDENT), nullptr, str); break; diff --git a/src/company_manager_face.h b/src/company_manager_face.h index 2f16656d56..fe6365a121 100644 --- a/src/company_manager_face.h +++ b/src/company_manager_face.h @@ -83,7 +83,7 @@ static const CompanyManagerFaceBitsInfo _cmf_info[] = { /* CMFV_GLASSES */ { 31, 1, { 2, 2, 2, 2 }, { 0x347, 0x347, 0x3AE, 0x3AE } } ///< Depends on CMFV_HAS_GLASSES }; /** Make sure the table's size is right. */ -assert_compile(lengthof(_cmf_info) == CMFV_END); +static_assert(lengthof(_cmf_info) == CMFV_END); /** * Gets the company manager's face bits for the given company manager's face variable diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 21e20804ca..240c02ca71 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -13,6 +13,7 @@ #include "engine_func.h" #include "landscape.h" #include "saveload/saveload.h" +#include "network/core/game_info.h" #include "network/network.h" #include "network/network_func.h" #include "network/network_base.h" @@ -36,6 +37,8 @@ #include "newgrf_profiling.h" #include "console_func.h" #include "engine_base.h" +#include "road.h" +#include "rail.h" #include "game/game.hpp" #include "table/strings.h" #include @@ -45,7 +48,7 @@ #include "safeguards.h" /* scriptfile handling */ -static bool _script_running; ///< Script is running (used to abort execution when #ConReturn is encountered). +static uint _script_current_depth; ///< Depth of scripts running (used to abort execution when #ConReturn is encountered). /** File list storage for the console, for caching the last 'ls' command. */ class ConsoleFileList : public FileList { @@ -147,7 +150,7 @@ DEF_CONSOLE_HOOK(ConHookNeedNetwork) } /** - * Check whether we are in single player mode. + * Check whether we are in singleplayer mode. * @return True when no network is active. */ DEF_CONSOLE_HOOK(ConHookNoNetwork) @@ -893,7 +896,7 @@ DEF_CONSOLE_CMD(ConNetworkReconnect) /* Don't resolve the address first, just print it directly as it comes from the config file. */ IConsolePrintF(CC_DEFAULT, "Reconnecting to %s:%d...", _settings_client.network.last_host, _settings_client.network.last_port); - NetworkClientConnectGame(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port), playas); + NetworkClientConnectGame(_settings_client.network.last_host, _settings_client.network.last_port, playas); return true; } @@ -907,7 +910,6 @@ DEF_CONSOLE_CMD(ConNetworkConnect) } if (argc < 2) return false; - if (_networking) NetworkDisconnect(); // we are in network-mode, first close it! const char *port = nullptr; const char *company = nullptr; @@ -935,7 +937,7 @@ DEF_CONSOLE_CMD(ConNetworkConnect) IConsolePrintF(CC_DEFAULT, " port: %s", port); } - NetworkClientConnectGame(NetworkAddress(ip, rport), join_as); + NetworkClientConnectGame(ip, rport, join_as); return true; } @@ -960,10 +962,16 @@ DEF_CONSOLE_CMD(ConExec) return true; } - _script_running = true; + if (_script_current_depth == 11) { + IConsoleError("Maximum 'exec' depth reached; script A is calling script B is calling script C ... more than 10 times."); + return true; + } + + _script_current_depth++; + uint script_depth = _script_current_depth; char cmdline[ICON_CMDLN_SIZE]; - while (_script_running && fgets(cmdline, sizeof(cmdline), script_file) != nullptr) { + while (fgets(cmdline, sizeof(cmdline), script_file) != nullptr) { /* Remove newline characters from the executing script */ for (char *cmdptr = cmdline; *cmdptr != '\0'; cmdptr++) { if (*cmdptr == '\n' || *cmdptr == '\r') { @@ -972,13 +980,18 @@ DEF_CONSOLE_CMD(ConExec) } } IConsoleCmdExec(cmdline); + /* Ensure that we are still on the same depth or that we returned via 'return'. */ + assert(_script_current_depth == script_depth || _script_current_depth == script_depth - 1); + + /* The 'return' command was executed. */ + if (_script_current_depth == script_depth - 1) break; } if (ferror(script_file)) { IConsoleError("Encountered error while trying to read from script file"); } - _script_running = false; + if (_script_current_depth == script_depth) _script_current_depth--; FioFCloseFile(script_file); return true; } @@ -990,7 +1003,7 @@ DEF_CONSOLE_CMD(ConReturn) return true; } - _script_running = false; + _script_current_depth--; return true; } @@ -1075,6 +1088,23 @@ DEF_CONSOLE_CMD(ConRestart) return true; } +DEF_CONSOLE_CMD(ConReload) +{ + if (argc == 0) { + IConsoleHelp("Reload game. Usage: 'reload'"); + IConsoleHelp("Reloads a game."); + IConsoleHelp(" * if you started from a savegame / scenario / heightmap, that exact same savegame / scenario / heightmap will be loaded."); + IConsoleHelp(" * if you started from a new game, this acts the same as 'restart'."); + return true; + } + + /* Don't copy the _newgame pointers to the real pointers, so call SwitchToMode directly */ + _settings_game.game_creation.map_x = MapLogX(); + _settings_game.game_creation.map_y = FindFirstBit(MapSizeY()); + _switch_mode = SM_RELOADGAME; + return true; +} + /** * Print a text buffer line by line to the console. Lines are separated by '\n'. * @param buf The buffer to print. @@ -1174,7 +1204,24 @@ DEF_CONSOLE_CMD(ConStartAI) AIConfig *config = AIConfig::GetConfig((CompanyID)n); if (argc >= 2) { - config->Change(argv[1], -1, true); + config->Change(argv[1], -1, false); + + /* If the name is not found, and there is a dot in the name, + * try again with the assumption everything right of the dot is + * the version the user wants to load. */ + if (!config->HasScript()) { + char *name = stredup(argv[1]); + char *e = strrchr(name, '.'); + if (e != nullptr) { + *e = '\0'; + e++; + + int version = atoi(e); + config->Change(name, version, true); + } + free(name); + } + if (!config->HasScript()) { IConsoleWarning("Failed to load the specified AI"); return true; @@ -1214,13 +1261,14 @@ DEF_CONSOLE_CMD(ConReloadAI) return true; } - if (Company::IsHumanID(company_id)) { + /* In singleplayer mode the player can be in an AI company, after cheating or loading network save with an AI in first slot. */ + if (Company::IsHumanID(company_id) || company_id == _local_company) { IConsoleWarning("Company is not controlled by an AI."); return true; } /* First kill the company of the AI, then start a new one. This should start the current AI again */ - DoCommandP(0, CCA_DELETE | company_id << 16 | CRR_MANUAL << 24, 0,CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | company_id << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL); DoCommandP(0, CCA_NEW_AI | company_id << 16, 0, CMD_COMPANY_CTRL); IConsolePrint(CC_DEFAULT, "AI reloaded."); @@ -1251,6 +1299,7 @@ DEF_CONSOLE_CMD(ConStopAI) return true; } + /* In singleplayer mode the player can be in an AI company, after cheating or loading network save with an AI in first slot. */ if (Company::IsHumanID(company_id) || company_id == _local_company) { IConsoleWarning("Company is not controlled by an AI."); return true; @@ -1304,7 +1353,9 @@ DEF_CONSOLE_CMD(ConRescanNewGRF) return true; } - ScanNewGRFFiles(nullptr); + if (!RequestNewGRFScan()) { + IConsoleWarning("NewGRF scanning is already running. Please wait until completed to run again."); + } return true; } @@ -1373,46 +1424,80 @@ DEF_CONSOLE_CMD(ConAlias) DEF_CONSOLE_CMD(ConScreenShot) { if (argc == 0) { - IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [big | giant | no_con | minimap] [file name]'"); - IConsoleHelp("'big' makes a zoomed-in screenshot of the visible area, 'giant' makes a screenshot of the " - "whole map, 'no_con' hides the console to create the screenshot. 'big' or 'giant' " - "screenshots are always drawn without console. " - "'minimap' makes a top-viewed minimap screenshot of whole world which represents one tile by one pixel."); + IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [viewport | normal | big | giant | heightmap | minimap] [no_con] [size ] []'"); + IConsoleHelp("'viewport' (default) makes a screenshot of the current viewport (including menus, windows, ..), " + "'normal' makes a screenshot of the visible area, " + "'big' makes a zoomed-in screenshot of the visible area, " + "'giant' makes a screenshot of the whole map, " + "'heightmap' makes a heightmap screenshot of the map that can be loaded in as heightmap, " + "'minimap' makes a top-viewed minimap screenshot of the whole world which represents one tile by one pixel. " + "'no_con' hides the console to create the screenshot (only useful in combination with 'viewport'). " + "'size' sets the width and height of the viewport to make a screenshot of (only useful in combination with 'normal' or 'big')."); return true; } - if (argc > 3) return false; + if (argc > 7) return false; ScreenshotType type = SC_VIEWPORT; - const char *name = nullptr; + uint32 width = 0; + uint32 height = 0; + std::string name{}; + uint32 arg_index = 1; - if (argc > 1) { - if (strcmp(argv[1], "big") == 0) { - /* screenshot big [filename] */ + if (argc > arg_index) { + if (strcmp(argv[arg_index], "viewport") == 0) { + type = SC_VIEWPORT; + arg_index += 1; + } else if (strcmp(argv[arg_index], "normal") == 0) { + type = SC_DEFAULTZOOM; + arg_index += 1; + } else if (strcmp(argv[arg_index], "big") == 0) { type = SC_ZOOMEDIN; - if (argc > 2) name = argv[2]; - } else if (strcmp(argv[1], "giant") == 0) { - /* screenshot giant [filename] */ + arg_index += 1; + } else if (strcmp(argv[arg_index], "giant") == 0) { type = SC_WORLD; - if (argc > 2) name = argv[2]; - } else if (strcmp(argv[1], "minimap") == 0) { - /* screenshot minimap [filename] */ + arg_index += 1; + } else if (strcmp(argv[arg_index], "heightmap") == 0) { + type = SC_HEIGHTMAP; + arg_index += 1; + } else if (strcmp(argv[arg_index], "minimap") == 0) { type = SC_MINIMAP; - if (argc > 2) name = argv[2]; - } else if (strcmp(argv[1], "no_con") == 0) { - /* screenshot no_con [filename] */ - IConsoleClose(); - if (argc > 2) name = argv[2]; - } else if (argc == 2) { - /* screenshot filename */ - name = argv[1]; - } else { - /* screenshot argv[1] argv[2] - invalid */ - return false; + arg_index += 1; } } - MakeScreenshot(type, name); + if (argc > arg_index && strcmp(argv[arg_index], "no_con") == 0) { + if (type != SC_VIEWPORT) { + IConsoleError("'no_con' can only be used in combination with 'viewport'"); + return true; + } + IConsoleClose(); + arg_index += 1; + } + + if (argc > arg_index + 2 && strcmp(argv[arg_index], "size") == 0) { + /* size */ + if (type != SC_DEFAULTZOOM && type != SC_ZOOMEDIN) { + IConsoleError("'size' can only be used in combination with 'normal' or 'big'"); + return true; + } + GetArgumentInteger(&width, argv[arg_index + 1]); + GetArgumentInteger(&height, argv[arg_index + 2]); + arg_index += 3; + } + + if (argc > arg_index) { + /* Last parameter that was not one of the keywords must be the filename. */ + name = argv[arg_index]; + arg_index += 1; + } + + if (argc > arg_index) { + /* We have parameters we did not process; means we misunderstood any of the above. */ + return false; + } + + MakeScreenshot(type, name, width, height); return true; } @@ -1745,7 +1830,7 @@ struct ConsoleContentCallback : public ContentCallback { static void OutputContentState(const ContentInfo *const ci) { static const char * const types[] = { "Base graphics", "NewGRF", "AI", "AI library", "Scenario", "Heightmap", "Base sound", "Base music", "Game script", "GS library" }; - assert_compile(lengthof(types) == CONTENT_TYPE_END - CONTENT_TYPE_BEGIN); + static_assert(lengthof(types) == CONTENT_TYPE_END - CONTENT_TYPE_BEGIN); static const char * const states[] = { "Not selected", "Selected", "Dep Selected", "Installed", "Unknown" }; static const TextColour state_to_colour[] = { CC_COMMAND, CC_INFO, CC_INFO, CC_WHITE, CC_ERROR }; @@ -1763,10 +1848,10 @@ DEF_CONSOLE_CMD(ConContent) } if (argc <= 1) { - IConsoleHelp("Query, select and download content. Usage: 'content update|upgrade|select [all|id]|unselect [all|id]|state [filter]|download'"); + IConsoleHelp("Query, select and download content. Usage: 'content update|upgrade|select [id]|unselect [all|id]|state [filter]|download'"); IConsoleHelp(" update: get a new list of downloadable content; must be run first"); IConsoleHelp(" upgrade: select all items that are upgrades"); - IConsoleHelp(" select: select a specific item given by its id or 'all' to select all. If no parameter is given, all selected content will be listed"); + IConsoleHelp(" select: select a specific item given by its id. If no parameter is given, all selected content will be listed"); IConsoleHelp(" unselect: unselect a specific item given by its id or 'all' to unselect all"); IConsoleHelp(" state: show the download/select state of all downloadable content. Optionally give a filter string"); IConsoleHelp(" download: download all content you've selected"); @@ -1792,7 +1877,13 @@ DEF_CONSOLE_CMD(ConContent) OutputContentState(*iter); } } else if (strcasecmp(argv[2], "all") == 0) { - _network_content_client.SelectAll(); + /* The intention of this function was that you could download + * everything after a filter was applied; but this never really + * took off. Instead, a select few people used this functionality + * to download every available package on BaNaNaS. This is not in + * the spirit of this service. Additionally, these few people were + * good for 70% of the consumed bandwidth of BaNaNaS. */ + IConsoleError("'select all' is no longer supported since 1.11"); } else { _network_content_client.Select((ContentID)atoi(argv[2])); } @@ -1994,7 +2085,7 @@ DEF_CONSOLE_CMD(ConNewGRFProfile) if (started > 0) { IConsolePrintF(CC_DEBUG, "Started profiling for GRFID%s %s", (started > 1) ? "s" : "", grfids.c_str()); if (argc >= 3) { - int days = max(atoi(argv[2]), 1); + int days = std::max(atoi(argv[2]), 1); _newgrf_profile_end_date = _date + days; char datestrbuf[32]{ 0 }; @@ -2074,6 +2165,159 @@ DEF_CONSOLE_CMD(ConFramerateWindow) return true; } +static void ConDumpRoadTypes() +{ + IConsolePrintF(CC_DEFAULT, " Flags:"); + IConsolePrintF(CC_DEFAULT, " c = catenary"); + IConsolePrintF(CC_DEFAULT, " l = no level crossings"); + IConsolePrintF(CC_DEFAULT, " X = no houses"); + IConsolePrintF(CC_DEFAULT, " h = hidden"); + IConsolePrintF(CC_DEFAULT, " T = buildable by towns"); + + std::map grfs; + for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) { + const RoadTypeInfo *rti = GetRoadTypeInfo(rt); + if (rti->label == 0) continue; + uint32 grfid = 0; + const GRFFile *grf = rti->grffile[ROTSG_GROUND]; + if (grf != nullptr) { + grfid = grf->grfid; + grfs.emplace(grfid, grf); + } + IConsolePrintF(CC_DEFAULT, " %02u %s %c%c%c%c, Flags: %c%c%c%c%c, GRF: %08X, %s", + (uint)rt, + RoadTypeIsTram(rt) ? "Tram" : "Road", + rti->label >> 24, rti->label >> 16, rti->label >> 8, rti->label, + HasBit(rti->flags, ROTF_CATENARY) ? 'c' : '-', + HasBit(rti->flags, ROTF_NO_LEVEL_CROSSING) ? 'l' : '-', + HasBit(rti->flags, ROTF_NO_HOUSES) ? 'X' : '-', + HasBit(rti->flags, ROTF_HIDDEN) ? 'h' : '-', + HasBit(rti->flags, ROTF_TOWN_BUILD) ? 'T' : '-', + BSWAP32(grfid), + GetStringPtr(rti->strings.name) + ); + } + for (const auto &grf : grfs) { + IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grf.first), grf.second->filename); + } +} + +static void ConDumpRailTypes() +{ + IConsolePrintF(CC_DEFAULT, " Flags:"); + IConsolePrintF(CC_DEFAULT, " c = catenary"); + IConsolePrintF(CC_DEFAULT, " l = no level crossings"); + IConsolePrintF(CC_DEFAULT, " h = hidden"); + IConsolePrintF(CC_DEFAULT, " s = no sprite combine"); + IConsolePrintF(CC_DEFAULT, " a = always allow 90 degree turns"); + IConsolePrintF(CC_DEFAULT, " d = always disallow 90 degree turns"); + + std::map grfs; + for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) { + const RailtypeInfo *rti = GetRailTypeInfo(rt); + if (rti->label == 0) continue; + uint32 grfid = 0; + const GRFFile *grf = rti->grffile[RTSG_GROUND]; + if (grf != nullptr) { + grfid = grf->grfid; + grfs.emplace(grfid, grf); + } + IConsolePrintF(CC_DEFAULT, " %02u %c%c%c%c, Flags: %c%c%c%c%c%c, GRF: %08X, %s", + (uint)rt, + rti->label >> 24, rti->label >> 16, rti->label >> 8, rti->label, + HasBit(rti->flags, RTF_CATENARY) ? 'c' : '-', + HasBit(rti->flags, RTF_NO_LEVEL_CROSSING) ? 'l' : '-', + HasBit(rti->flags, RTF_HIDDEN) ? 'h' : '-', + HasBit(rti->flags, RTF_NO_SPRITE_COMBINE) ? 's' : '-', + HasBit(rti->flags, RTF_ALLOW_90DEG) ? 'a' : '-', + HasBit(rti->flags, RTF_DISALLOW_90DEG) ? 'd' : '-', + BSWAP32(grfid), + GetStringPtr(rti->strings.name) + ); + } + for (const auto &grf : grfs) { + IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grf.first), grf.second->filename); + } +} + +static void ConDumpCargoTypes() +{ + IConsolePrintF(CC_DEFAULT, " Cargo classes:"); + IConsolePrintF(CC_DEFAULT, " p = passenger"); + IConsolePrintF(CC_DEFAULT, " m = mail"); + IConsolePrintF(CC_DEFAULT, " x = express"); + IConsolePrintF(CC_DEFAULT, " a = armoured"); + IConsolePrintF(CC_DEFAULT, " b = bulk"); + IConsolePrintF(CC_DEFAULT, " g = piece goods"); + IConsolePrintF(CC_DEFAULT, " l = liquid"); + IConsolePrintF(CC_DEFAULT, " r = refrigerated"); + IConsolePrintF(CC_DEFAULT, " h = hazardous"); + IConsolePrintF(CC_DEFAULT, " c = covered/sheltered"); + IConsolePrintF(CC_DEFAULT, " S = special"); + + std::map grfs; + for (CargoID i = 0; i < NUM_CARGO; i++) { + const CargoSpec *spec = CargoSpec::Get(i); + if (!spec->IsValid()) continue; + uint32 grfid = 0; + const GRFFile *grf = spec->grffile; + if (grf != nullptr) { + grfid = grf->grfid; + grfs.emplace(grfid, grf); + } + IConsolePrintF(CC_DEFAULT, " %02u Bit: %2u, Label: %c%c%c%c, Callback mask: 0x%02X, Cargo class: %c%c%c%c%c%c%c%c%c%c%c, GRF: %08X, %s", + (uint)i, + spec->bitnum, + spec->label >> 24, spec->label >> 16, spec->label >> 8, spec->label, + spec->callback_mask, + (spec->classes & CC_PASSENGERS) != 0 ? 'p' : '-', + (spec->classes & CC_MAIL) != 0 ? 'm' : '-', + (spec->classes & CC_EXPRESS) != 0 ? 'x' : '-', + (spec->classes & CC_ARMOURED) != 0 ? 'a' : '-', + (spec->classes & CC_BULK) != 0 ? 'b' : '-', + (spec->classes & CC_PIECE_GOODS) != 0 ? 'g' : '-', + (spec->classes & CC_LIQUID) != 0 ? 'l' : '-', + (spec->classes & CC_REFRIGERATED) != 0 ? 'r' : '-', + (spec->classes & CC_HAZARDOUS) != 0 ? 'h' : '-', + (spec->classes & CC_COVERED) != 0 ? 'c' : '-', + (spec->classes & CC_SPECIAL) != 0 ? 'S' : '-', + BSWAP32(grfid), + GetStringPtr(spec->name) + ); + } + for (const auto &grf : grfs) { + IConsolePrintF(CC_DEFAULT, " GRF: %08X = %s", BSWAP32(grf.first), grf.second->filename); + } +} + + +DEF_CONSOLE_CMD(ConDumpInfo) +{ + if (argc != 2) { + IConsoleHelp("Dump debugging information."); + IConsoleHelp("Usage: dump_info roadtypes|railtypes|cargotypes"); + IConsoleHelp(" Show information about road/tram types, rail types or cargo types."); + return true; + } + + if (strcasecmp(argv[1], "roadtypes") == 0) { + ConDumpRoadTypes(); + return true; + } + + if (strcasecmp(argv[1], "railtypes") == 0) { + ConDumpRailTypes(); + return true; + } + + if (strcasecmp(argv[1], "cargotypes") == 0) { + ConDumpCargoTypes(); + return true; + } + + return false; +} + /******************************* * console command registration *******************************/ @@ -2092,6 +2336,7 @@ void IConsoleStdLibRegister() IConsoleCmdRegister("list_aliases", ConListAliases); IConsoleCmdRegister("newgame", ConNewGame); IConsoleCmdRegister("restart", ConRestart); + IConsoleCmdRegister("reload", ConReload); IConsoleCmdRegister("getseed", ConGetSeed); IConsoleCmdRegister("getdate", ConGetDate); IConsoleCmdRegister("getsysdate", ConGetSysDate); @@ -2211,7 +2456,11 @@ void IConsoleStdLibRegister() IConsoleCmdRegister("reload_newgrfs", ConNewGRFReload, ConHookNewGRFDeveloperTool); IConsoleCmdRegister("newgrf_profile", ConNewGRFProfile, ConHookNewGRFDeveloperTool); - IConsoleCmdRegister("cmstep", citymania::ConStep, ConHookNoNetwork); + IConsoleCmdRegister("dump_info", ConDumpInfo); + IConsoleCmdRegister("cmexport", citymania::ConExport); + IConsoleCmdRegister("cmstep", citymania::ConStep, ConHookNoNetwork); IConsoleCmdRegister("cmtreemap", citymania::ConTreeMap, ConHookNoNetwork); + IConsoleCmdRegister("cmresettowngrowth", citymania::ConResetTownGrowth, ConHookNoNetwork); + IConsoleCmdRegister("cmloadcommands", citymania::ConLoadCommands, ConHookNoNetwork); } diff --git a/src/console_gui.cpp b/src/console_gui.cpp index 3841a59544..7310738667 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -12,6 +12,7 @@ #include "window_gui.h" #include "console_gui.h" #include "console_internal.h" +#include "guitimer_func.h" #include "window_func.h" #include "string_func.h" #include "strings_func.h" @@ -171,6 +172,7 @@ struct IConsoleWindow : Window static int scroll; int line_height; ///< Height of one line of text in the console. int line_offset; + GUITimer truncate_timer; IConsoleWindow() : Window(&_console_window_desc) { @@ -179,6 +181,7 @@ struct IConsoleWindow : Window this->line_offset = GetStringBoundingBox("] ").width + 5; this->InitNested(0); + this->truncate_timer.SetInterval(3000); ResizeWindow(this, _screen.width, _screen.height / 3); } @@ -194,7 +197,7 @@ struct IConsoleWindow : Window */ void Scroll(int amount) { - int max_scroll = max(0, IConsoleLine::size + 1 - this->height / this->line_height); + int max_scroll = std::max(0, IConsoleLine::size + 1 - this->height / this->line_height); IConsoleWindow::scroll = Clamp(IConsoleWindow::scroll + amount, 0, max_scroll); this->SetDirty(); } @@ -227,11 +230,13 @@ struct IConsoleWindow : Window } } - void OnHundredthTick() override + void OnRealtimeTick(uint delta_ms) override { + if (this->truncate_timer.CountElapsed(delta_ms) == 0) return; + if (IConsoleLine::Truncate() && (IConsoleWindow::scroll > IConsoleLine::size)) { - IConsoleWindow::scroll = max(0, IConsoleLine::size - (this->height / this->line_height) + 1); + IConsoleWindow::scroll = std::max(0, IConsoleLine::size - (this->height / this->line_height) + 1); this->SetDirty(); } } @@ -341,7 +346,7 @@ struct IConsoleWindow : Window Point GetCaretPosition() const override { - int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); + int delta = std::min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); Point pt = {this->line_offset + delta + _iconsole_cmdline.caretxoffs, this->height - this->line_height}; return pt; @@ -349,7 +354,7 @@ struct IConsoleWindow : Window Rect GetTextBoundingRect(const char *from, const char *to) const override { - int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); + int delta = std::min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); Point p1 = GetCharPosInString(_iconsole_cmdline.buf, from, FS_NORMAL); Point p2 = from != to ? GetCharPosInString(_iconsole_cmdline.buf, from) : p1; @@ -360,7 +365,7 @@ struct IConsoleWindow : Window const char *GetTextCharacterAtPosition(const Point &pt) const override { - int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); + int delta = std::min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); if (!IsInsideMM(pt.y, this->height - this->line_height, this->height)) return nullptr; diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt new file mode 100644 index 0000000000..96da089326 --- /dev/null +++ b/src/core/CMakeLists.txt @@ -0,0 +1,30 @@ +add_files( + alloc_func.cpp + alloc_func.hpp + alloc_type.hpp + backup_type.hpp + bitmath_func.cpp + bitmath_func.hpp + endian_func.hpp + endian_type.hpp + enum_type.hpp + geometry_func.cpp + geometry_func.hpp + geometry_type.hpp + kdtree.hpp + math_func.cpp + math_func.hpp + mem_func.hpp + multimap.hpp + overflowsafe_type.hpp + pool_func.cpp + pool_func.hpp + pool_type.hpp + random_func.cpp + random_func.hpp + smallmap_type.hpp + smallmatrix_type.hpp + smallstack_type.hpp + smallvec_type.hpp + string_compare_type.hpp +) diff --git a/src/core/endian_func.hpp b/src/core/endian_func.hpp index b1a584785b..e077d977ac 100644 --- a/src/core/endian_func.hpp +++ b/src/core/endian_func.hpp @@ -15,27 +15,27 @@ /* Setup alignment and conversion macros */ #if TTD_ENDIAN == TTD_BIG_ENDIAN - #define FROM_BE16(x) (x) - #define FROM_BE32(x) (x) - #define TO_BE16(x) (x) - #define TO_BE32(x) (x) - #define TO_BE32X(x) (x) - #define FROM_LE16(x) BSWAP16(x) - #define FROM_LE32(x) BSWAP32(x) - #define TO_LE16(x) BSWAP16(x) - #define TO_LE32(x) BSWAP32(x) - #define TO_LE32X(x) BSWAP32(x) +# define FROM_BE16(x) (x) +# define FROM_BE32(x) (x) +# define TO_BE16(x) (x) +# define TO_BE32(x) (x) +# define TO_BE32X(x) (x) +# define FROM_LE16(x) BSWAP16(x) +# define FROM_LE32(x) BSWAP32(x) +# define TO_LE16(x) BSWAP16(x) +# define TO_LE32(x) BSWAP32(x) +# define TO_LE32X(x) BSWAP32(x) #else - #define FROM_BE16(x) BSWAP16(x) - #define FROM_BE32(x) BSWAP32(x) - #define TO_BE16(x) BSWAP16(x) - #define TO_BE32(x) BSWAP32(x) - #define TO_BE32X(x) BSWAP32(x) - #define FROM_LE16(x) (x) - #define FROM_LE32(x) (x) - #define TO_LE16(x) (x) - #define TO_LE32(x) (x) - #define TO_LE32X(x) (x) +# define FROM_BE16(x) BSWAP16(x) +# define FROM_BE32(x) BSWAP32(x) +# define TO_BE16(x) BSWAP16(x) +# define TO_BE32(x) BSWAP32(x) +# define TO_BE32X(x) BSWAP32(x) +# define FROM_LE16(x) (x) +# define FROM_LE32(x) (x) +# define TO_LE16(x) (x) +# define TO_LE32(x) (x) +# define TO_LE32X(x) (x) #endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */ static inline uint16 ReadLE16Aligned(const void *x) diff --git a/src/core/endian_type.hpp b/src/core/endian_type.hpp index 1b927ef45a..f7cae53a8f 100644 --- a/src/core/endian_type.hpp +++ b/src/core/endian_type.hpp @@ -12,10 +12,10 @@ #if defined(ARM) || defined(__arm__) || defined(__alpha__) /** The architecture requires aligned access. */ - #define OTTD_ALIGNMENT 1 +# define OTTD_ALIGNMENT 1 #else /** The architecture does not require aligned access. */ - #define OTTD_ALIGNMENT 0 +# define OTTD_ALIGNMENT 0 #endif /** Little endian builds use this for TTD_ENDIAN. */ @@ -23,30 +23,8 @@ /** Big endian builds use this for TTD_ENDIAN. */ #define TTD_BIG_ENDIAN 1 -/* Windows has always LITTLE_ENDIAN */ -#if defined(_WIN32) || defined(__OS2__) || defined(__HAIKU__) -# define TTD_ENDIAN TTD_LITTLE_ENDIAN -#elif defined(OSX) -# include -# if __DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN -# define TTD_ENDIAN TTD_LITTLE_ENDIAN -# else -# define TTD_ENDIAN TTD_BIG_ENDIAN -# endif -#elif defined(__OpenBSD__) -# include -# if BYTE_ORDER == LITTLE_ENDIAN -# define TTD_ENDIAN TTD_LITTLE_ENDIAN -# else -# define TTD_ENDIAN TTD_BIG_ENDIAN -# endif -#elif !defined(TESTING) -# include -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define TTD_ENDIAN TTD_LITTLE_ENDIAN -# else -# define TTD_ENDIAN TTD_BIG_ENDIAN -# endif -#endif /* _WIN32 || __OS2__ */ +#if !defined(TTD_ENDIAN) +# error "TTD_ENDIAN is not defined; please set it to either TTD_LITTLE_ENDIAN or TTD_BIG_ENDIAN" +#endif /* !TTD_ENDIAN */ #endif /* ENDIAN_TYPE_HPP */ diff --git a/src/core/geometry_func.cpp b/src/core/geometry_func.cpp index 162f2eae57..dccef72ecc 100644 --- a/src/core/geometry_func.cpp +++ b/src/core/geometry_func.cpp @@ -22,7 +22,29 @@ Dimension maxdim(const Dimension &d1, const Dimension &d2) { Dimension d; - d.width = max(d1.width, d2.width); - d.height = max(d1.height, d2.height); + d.width = std::max(d1.width, d2.width); + d.height = std::max(d1.height, d2.height); return d; } + +/** + * Compute the bounding rectangle around two rectangles. + * @param r1 First rectangle. + * @param r2 Second rectangle. + * @return The bounding rectangle, the smallest rectangle that contains both arguments. + */ +Rect BoundingRect(const Rect &r1, const Rect &r2) +{ + /* If either the first or the second is empty, return the other. */ + if (IsEmptyRect(r1)) return r2; + if (IsEmptyRect(r2)) return r1; + + Rect r; + + r.top = std::min(r1.top, r2.top); + r.bottom = std::max(r1.bottom, r2.bottom); + r.left = std::min(r1.left, r2.left); + r.right = std::max(r1.right, r2.right); + + return r; +} diff --git a/src/core/geometry_func.hpp b/src/core/geometry_func.hpp index cd136488ac..41df359454 100644 --- a/src/core/geometry_func.hpp +++ b/src/core/geometry_func.hpp @@ -14,4 +14,16 @@ Dimension maxdim(const Dimension &d1, const Dimension &d2); +/** + * Check if a rectangle is empty. + * @param r Rectangle to check. + * @return True if and only if the rectangle doesn't define space. + */ +static inline bool IsEmptyRect(const Rect &r) +{ + return (r.left | r.top | r.right | r.bottom) == 0; +} + +Rect BoundingRect(const Rect &r1, const Rect &r2); + #endif /* GEOMETRY_FUNC_HPP */ diff --git a/src/core/geometry_type.hpp b/src/core/geometry_type.hpp index 0e9f86e674..92a1d97df6 100644 --- a/src/core/geometry_type.hpp +++ b/src/core/geometry_type.hpp @@ -12,8 +12,8 @@ #if defined(__APPLE__) /* Mac OS X already has both Rect and Point declared */ - #define Rect OTTD_Rect - #define Point OTTD_Point +# define Rect OTTD_Rect +# define Point OTTD_Point #endif /* __APPLE__ */ diff --git a/src/core/kdtree.hpp b/src/core/kdtree.hpp index c37ab8eea2..392e31b8ec 100644 --- a/src/core/kdtree.hpp +++ b/src/core/kdtree.hpp @@ -12,7 +12,6 @@ #include "../stdafx.h" #include -#include #include /** @@ -261,7 +260,7 @@ class Kdtree { best = SelectNearestNodeDistance(best, this->FindNearestRecursive(xy, next, level + 1)); } - limit = min(best.second, limit); + limit = std::min(best.second, limit); /* Check if the distance from current best is worse than distance from target to splitting line, * if it is we also need to check the other side of the split. */ diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index d36dc55f9c..222b4120e3 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -10,66 +10,6 @@ #ifndef MATH_FUNC_HPP #define MATH_FUNC_HPP -/** - * Returns the maximum of two values. - * - * This function returns the greater value of two given values. - * If they are equal the value of a is returned. - * - * @param a The first value - * @param b The second value - * @return The greater value or a if equals - */ -template -static inline T max(const T a, const T b) -{ - return (a >= b) ? a : b; -} - -/** - * Returns the minimum of two values. - * - * This function returns the smaller value of two given values. - * If they are equal the value of b is returned. - * - * @param a The first value - * @param b The second value - * @return The smaller value or b if equals - */ -template -static inline T min(const T a, const T b) -{ - return (a < b) ? a : b; -} - -/** - * Returns the minimum of two integer. - * - * This function returns the smaller value of two given integers. - * - * @param a The first integer - * @param b The second integer - * @return The smaller value - */ -static inline int min(const int a, const int b) -{ - return min(a, b); -} - -/** - * Returns the minimum of two unsigned integers. - * - * This function returns the smaller value of two given unsigned integers. - * - * @param a The first unsigned integer - * @param b The second unsigned integer - * @return The smaller value - */ -static inline uint minu(const uint a, const uint b) -{ - return min(a, b); -} - /** * Returns the absolute value of (scalar) variable. * @@ -112,7 +52,7 @@ static inline T Align(const T x, uint n) template static inline T *AlignPtr(T *x, uint n) { - assert_compile(sizeof(size_t) == sizeof(void *)); + static_assert(sizeof(size_t) == sizeof(void *)); return reinterpret_cast(Align((size_t)x, n)); } @@ -216,7 +156,7 @@ static inline uint16 ClampToU16(const uint64 a) * match for min(uint64, uint) than uint64 min(uint64, uint64). As such we * need to cast the UINT16_MAX to prevent MSVC from displaying its * infinite loads of warnings. */ - return static_cast(min(a, static_cast(UINT16_MAX))); + return static_cast(std::min(a, static_cast(UINT16_MAX))); } /** diff --git a/src/core/pool_func.hpp b/src/core/pool_func.hpp index db79ab2857..dea108f08d 100644 --- a/src/core/pool_func.hpp +++ b/src/core/pool_func.hpp @@ -52,7 +52,7 @@ DEFINE_POOL_METHOD(inline void)::ResizeFor(size_t index) assert(index >= this->size); assert(index < Tmax_size); - size_t new_size = min(Tmax_size, Align(index + 1, Tgrowth_step)); + size_t new_size = std::min(Tmax_size, Align(index + 1, Tgrowth_step)); this->data = ReallocT(this->data, new_size); MemSetT(this->data + this->size, 0, new_size - this->size); @@ -100,7 +100,7 @@ DEFINE_POOL_METHOD(inline void *)::AllocateItem(size_t size, size_t index) { assert(this->data[index] == nullptr); - this->first_unused = max(this->first_unused, index + 1); + this->first_unused = std::max(this->first_unused, index + 1); this->items++; Titem *item; @@ -187,7 +187,7 @@ DEFINE_POOL_METHOD(void)::FreeItem(size_t index) free(this->data[index]); } this->data[index] = nullptr; - this->first_free = min(this->first_free, index); + this->first_free = std::min(this->first_free, index); this->items--; if (!this->cleaning) Titem::PostDestructor(index); } diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 9e6fc8fecd..33f952dde4 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -80,9 +80,9 @@ private: template struct Pool : PoolBase { /* Ensure Tmax_size is within the bounds of Tindex. */ - assert_compile((uint64)(Tmax_size - 1) >> 8 * sizeof(Tindex) == 0); + static_assert((uint64)(Tmax_size - 1) >> 8 * sizeof(Tindex) == 0); - static const size_t MAX_SIZE = Tmax_size; ///< Make template parameter accessible from outside + static constexpr size_t MAX_SIZE = Tmax_size; ///< Make template parameter accessible from outside const char * const name; ///< Name of this pool diff --git a/src/core/random_func.hpp b/src/core/random_func.hpp index 7a40c9b740..ece90ccc35 100644 --- a/src/core/random_func.hpp +++ b/src/core/random_func.hpp @@ -12,7 +12,7 @@ #if defined(__APPLE__) /* Apple already has Random declared */ - #define Random OTTD_Random +# define Random OTTD_Random #endif /* __APPLE__ */ /** @@ -57,13 +57,13 @@ static inline void RestoreRandomSeeds(const SavedRandomSeeds &storage) void SetRandomSeed(uint32 seed); #ifdef RANDOM_DEBUG - #ifdef __APPLE__ - #define OTTD_Random() DoRandom(__LINE__, __FILE__) - #else - #define Random() DoRandom(__LINE__, __FILE__) - #endif +# ifdef __APPLE__ +# define OTTD_Random() DoRandom(__LINE__, __FILE__) +# else +# define Random() DoRandom(__LINE__, __FILE__) +# endif uint32 DoRandom(int line, const char *file); - #define RandomRange(limit) DoRandomRange(limit, __LINE__, __FILE__) +# define RandomRange(limit) DoRandomRange(limit, __LINE__, __FILE__) uint32 DoRandomRange(uint32 limit, int line, const char *file); #else static inline uint32 Random() @@ -126,7 +126,7 @@ static inline bool Chance16I(const uint a, const uint b, const uint32 r) * @return True with (a/b) probability */ #ifdef RANDOM_DEBUG - #define Chance16(a, b) Chance16I(a, b, DoRandom(__LINE__, __FILE__)) +# define Chance16(a, b) Chance16I(a, b, DoRandom(__LINE__, __FILE__)) #else static inline bool Chance16(const uint a, const uint b) { @@ -150,7 +150,7 @@ static inline bool Chance16(const uint a, const uint b) * @return True in (a/b) percent */ #ifdef RANDOM_DEBUG - #define Chance16R(a, b, r) (r = DoRandom(__LINE__, __FILE__), Chance16I(a, b, r)) +# define Chance16R(a, b, r) (r = DoRandom(__LINE__, __FILE__), Chance16I(a, b, r)) #else static inline bool Chance16R(const uint a, const uint b, uint32 &r) { diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index 478e7515a6..744f9fd265 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -11,40 +11,26 @@ #define SMALLMAP_TYPE_HPP #include "smallvec_type.hpp" +#include /** - * Simple pair of data. Both types have to be POD ("Plain Old Data")! - * @tparam T Key type. - * @tparam U Value type. - */ -template -struct SmallPair { - T first; - U second; - - /** Initializes this Pair with data */ - inline SmallPair(const T &first, const U &second) : first(first), second(second) { } - SmallPair() = default; -}; - -/** - * Implementation of simple mapping class. Both types have to be POD ("Plain Old Data")! - * It has inherited accessors from SmallVector(). + * Implementation of simple mapping class. + * It has inherited accessors from std::vector(). * @tparam T Key type. * @tparam U Value type. * @tparam S Unit of allocation. * - * @see SmallVector + * @see std::vector */ template -struct SmallMap : std::vector > { - typedef ::SmallPair Pair; +struct SmallMap : std::vector > { + typedef std::pair Pair; typedef Pair *iterator; typedef const Pair *const_iterator; - /** Creates new SmallMap. Data are initialized in SmallVector constructor */ + /** Creates new SmallMap. Data are initialized in std::vector constructor */ inline SmallMap() { } - /** Data are freed in SmallVector destructor */ + /** Data are freed in std::vector destructor */ inline ~SmallMap() { } /** @@ -156,8 +142,7 @@ struct SmallMap : std::vector > { for (uint i = 0; i < std::vector::size(); i++) { if (key == std::vector::operator[](i).first) return std::vector::operator[](i).second; } - /*C++17: Pair &n = */ std::vector::emplace_back(); - Pair &n = std::vector::back(); + Pair &n = std::vector::emplace_back(); n.first = key; return n.second; } diff --git a/src/core/smallmatrix_type.hpp b/src/core/smallmatrix_type.hpp index 0aeac10e13..03fd1b7908 100644 --- a/src/core/smallmatrix_type.hpp +++ b/src/core/smallmatrix_type.hpp @@ -234,7 +234,7 @@ public: if (x * new_height > new_capacity) continue; (*copy)(new_data + (x - 1) * new_height, this->data + (x - 1) * this->height, - min(this->height, new_height)); + std::min(this->height, new_height)); } } else { /* If matrix is shrinking copy from the front. */ @@ -242,7 +242,7 @@ public: if ((x + 1) * new_height > new_capacity) break; (*copy)(new_data + x * new_height, this->data + x * this->height, - min(this->height, new_height)); + std::min(this->height, new_height)); } } } diff --git a/src/core/smallstack_type.hpp b/src/core/smallstack_type.hpp index bf44f00c8f..c05454b8ae 100644 --- a/src/core/smallstack_type.hpp +++ b/src/core/smallstack_type.hpp @@ -46,7 +46,7 @@ public: if (index < Tmax_size) { this->data[index].valid = true; this->first_free = index + 1; - this->first_unused = max(this->first_unused, this->first_free); + this->first_unused = std::max(this->first_unused, this->first_free); } return index; } @@ -58,7 +58,7 @@ public: inline void Destroy(Tindex index) { this->data[index].valid = false; - this->first_free = min(this->first_free, index); + this->first_free = std::min(this->first_free, index); } private: diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 2f65f02926..92fd938be5 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -13,7 +13,6 @@ #include "alloc_func.hpp" #include "mem_func.hpp" #include -#include /** * Helper function to append an item to a vector if it is not already contained diff --git a/src/cpu.cpp b/src/cpu.cpp index 87aa841324..b93f0fa5ed 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -16,11 +16,18 @@ /* rdtsc for MSC_VER, uses simple inline assembly, or _rdtsc * from external win64.asm because VS2005 does not support inline assembly */ -#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) && !defined(RDTSC_AVAILABLE) +#if defined(_MSC_VER) && !defined(RDTSC_AVAILABLE) #include +#include uint64 ottd_rdtsc() { +#if defined(_M_ARM) + return __rdpmccntr64(); +#elif defined(_M_ARM64) + return _ReadStatusReg(ARM64_PMCCNTR_EL0); +#else return __rdtsc(); +#endif } #define RDTSC_AVAILABLE #endif @@ -66,6 +73,12 @@ uint64 ottd_rdtsc() # define RDTSC_AVAILABLE #endif +#if defined(__EMSCRIPTEN__) && !defined(RDTSC_AVAILABLE) +/* On emscripten doing TIC/TOC would be ill-advised */ +uint64 ottd_rdtsc() {return 0;} +# define RDTSC_AVAILABLE +#endif + /* In all other cases we have no support for rdtsc. No major issue, * you just won't be able to profile your code with TIC()/TOC() */ #if !defined(RDTSC_AVAILABLE) diff --git a/src/crashlog.cpp b/src/crashlog.cpp index 52874ce22e..c394ea79b9 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -56,6 +56,9 @@ #ifdef WITH_LIBLZMA # include #endif +#ifdef WITH_ZSTD +#include +#endif #ifdef WITH_LZO #include #endif @@ -167,15 +170,15 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const " Sound set: %s (%u)\n" " Video driver: %s\n\n", BlitterFactory::GetCurrentBlitter() == nullptr ? "none" : BlitterFactory::GetCurrentBlitter()->GetName(), - BaseGraphics::GetUsedSet() == nullptr ? "none" : BaseGraphics::GetUsedSet()->name, + BaseGraphics::GetUsedSet() == nullptr ? "none" : BaseGraphics::GetUsedSet()->name.c_str(), BaseGraphics::GetUsedSet() == nullptr ? UINT32_MAX : BaseGraphics::GetUsedSet()->version, _current_language == nullptr ? "none" : _current_language->file, MusicDriver::GetInstance() == nullptr ? "none" : MusicDriver::GetInstance()->GetName(), - BaseMusic::GetUsedSet() == nullptr ? "none" : BaseMusic::GetUsedSet()->name, + BaseMusic::GetUsedSet() == nullptr ? "none" : BaseMusic::GetUsedSet()->name.c_str(), BaseMusic::GetUsedSet() == nullptr ? UINT32_MAX : BaseMusic::GetUsedSet()->version, _networking ? (_network_server ? "server" : "client") : "no", SoundDriver::GetInstance() == nullptr ? "none" : SoundDriver::GetInstance()->GetName(), - BaseSounds::GetUsedSet() == nullptr ? "none" : BaseSounds::GetUsedSet()->name, + BaseSounds::GetUsedSet() == nullptr ? "none" : BaseSounds::GetUsedSet()->name.c_str(), BaseSounds::GetUsedSet() == nullptr ? UINT32_MAX : BaseSounds::GetUsedSet()->version, VideoDriver::GetInstance() == nullptr ? "none" : VideoDriver::GetInstance()->GetName() ); @@ -255,6 +258,10 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const buffer += seprintf(buffer, last, " LZMA: %s\n", lzma_version_string()); #endif +#ifdef WITH_ZSTD + buffer += seprintf(buffer, last, " ZSTD: %s\n", ZSTD_versionString()); +#endif + #ifdef WITH_LZO buffer += seprintf(buffer, last, " LZO: %s\n", lzo_version_string()); #endif @@ -368,7 +375,7 @@ char *CrashLog::FillCrashLog(char *buffer, const char *last) const */ bool CrashLog::WriteCrashLog(const char *buffer, char *filename, const char *filename_last) const { - seprintf(filename, filename_last, "%scrash.log", _personal_dir); + seprintf(filename, filename_last, "%scrash.log", _personal_dir.c_str()); FILE *file = FioFOpenFile(filename, "w", NO_DIRECTORY); if (file == nullptr) return false; @@ -403,7 +410,7 @@ bool CrashLog::WriteSavegame(char *filename, const char *filename_last) const try { GamelogEmergency(); - seprintf(filename, filename_last, "%scrash.sav", _personal_dir); + seprintf(filename, filename_last, "%scrash.sav", _personal_dir.c_str()); /* Don't do a threaded saveload. */ return SaveOrLoad(filename, SLO_SAVE, DFT_GAME_FILE, NO_DIRECTORY, false) == SL_OK; diff --git a/src/crashlog.h b/src/crashlog.h index 7f1ff47edd..7d15c3512f 100644 --- a/src/crashlog.h +++ b/src/crashlog.h @@ -114,6 +114,12 @@ public: */ static void InitialiseCrashLog(); + /** + * Prepare crash log handler for a newly started thread. + * @note must be implemented by all implementers of CrashLog. + */ + static void InitThread(); + static void SetErrorMessage(const char *message); static void AfterCrashLogCleanup(); }; diff --git a/src/currency.cpp b/src/currency.cpp index b6d6821055..841f00d56a 100644 --- a/src/currency.cpp +++ b/src/currency.cpp @@ -26,14 +26,14 @@ * | | | | | | | */ /** The original currency specifications. */ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { - { 1, "", CF_NOEURO, "\xC2\xA3", "", 0, STR_GAME_OPTIONS_CURRENCY_GBP }, ///< british pound + { 1, "", CF_NOEURO, u8"\u00a3", "", 0, STR_GAME_OPTIONS_CURRENCY_GBP }, ///< british pound { 2, "", CF_NOEURO, "$", "", 0, STR_GAME_OPTIONS_CURRENCY_USD }, ///< american dollar - { 2, "", CF_ISEURO, "\xE2\x82\xAC", "", 0, STR_GAME_OPTIONS_CURRENCY_EUR }, ///< euro - { 220, "", CF_NOEURO, "\xC2\xA5", "", 0, STR_GAME_OPTIONS_CURRENCY_JPY }, ///< japanese yen + { 2, "", CF_ISEURO, u8"\u20ac", "", 0, STR_GAME_OPTIONS_CURRENCY_EUR }, ///< euro + { 220, "", CF_NOEURO, u8"\u00a5", "", 0, STR_GAME_OPTIONS_CURRENCY_JPY }, ///< japanese yen { 27, "", 2002, "", NBSP "S.", 1, STR_GAME_OPTIONS_CURRENCY_ATS }, ///< austrian schilling { 81, "", 2002, "BEF" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_BEF }, ///< belgian franc { 2, "", CF_NOEURO, "CHF" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_CHF }, ///< swiss franc - { 41, "", CF_NOEURO, "", NBSP "K\xC4\x8D", 1, STR_GAME_OPTIONS_CURRENCY_CZK }, ///< czech koruna + { 41, "", CF_NOEURO, "", NBSP u8"K\u010d", 1, STR_GAME_OPTIONS_CURRENCY_CZK }, ///< czech koruna { 4, "", 2002, "DM" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_DEM }, ///< deutsche mark { 11, "", CF_NOEURO, "", NBSP "kr", 1, STR_GAME_OPTIONS_CURRENCY_DKK }, ///< danish krone { 333, "", 2002, "Pts" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_ESP }, ///< spanish peseta @@ -45,7 +45,7 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 3873, "", 2002, "", NBSP "L.", 1, STR_GAME_OPTIONS_CURRENCY_ITL }, ///< italian lira { 4, "", 2002, "NLG" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_NLG }, ///< dutch gulden { 12, "", CF_NOEURO, "", NBSP "Kr", 1, STR_GAME_OPTIONS_CURRENCY_NOK }, ///< norwegian krone - { 6, "", CF_NOEURO, "", NBSP "z\xC5\x82", 1, STR_GAME_OPTIONS_CURRENCY_PLN }, ///< polish zloty + { 6, "", CF_NOEURO, "", NBSP u8"z\u0142", 1, STR_GAME_OPTIONS_CURRENCY_PLN }, ///< polish zloty { 5, "", CF_NOEURO, "", NBSP "Lei", 1, STR_GAME_OPTIONS_CURRENCY_RON }, ///< romanian leu { 50, "", CF_NOEURO, "", NBSP "p", 1, STR_GAME_OPTIONS_CURRENCY_RUR }, ///< russian rouble { 479, "", 2007, "", NBSP "SIT", 1, STR_GAME_OPTIONS_CURRENCY_SIT }, ///< slovenian tolar @@ -55,7 +55,7 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 4, "", CF_NOEURO, "R$" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_BRL }, ///< brazil real { 31, "", 2011, "", NBSP "EEK", 1, STR_GAME_OPTIONS_CURRENCY_EEK }, ///< estonian krooni { 4, "", 2015, "", NBSP "Lt", 1, STR_GAME_OPTIONS_CURRENCY_LTL }, ///< lithuanian litas - { 1850, "", CF_NOEURO, "\xE2\x82\xA9", "", 0, STR_GAME_OPTIONS_CURRENCY_KRW }, ///< south korean won + { 1850, "", CF_NOEURO, u8"\u20a9", "", 0, STR_GAME_OPTIONS_CURRENCY_KRW }, ///< south korean won { 13, "", CF_NOEURO, "R" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_ZAR }, ///< south african rand { 1, "", CF_NOEURO, "", "", 2, STR_GAME_OPTIONS_CURRENCY_CUSTOM }, ///< custom currency (add further languages below) { 3, "", CF_NOEURO, "", NBSP "GEL", 1, STR_GAME_OPTIONS_CURRENCY_GEL }, ///< Georgian Lari @@ -63,8 +63,11 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 80, "", CF_NOEURO, "", NBSP "rub", 1, STR_GAME_OPTIONS_CURRENCY_RUB }, ///< New Russian Ruble { 24, "", CF_NOEURO, "$", "", 0, STR_GAME_OPTIONS_CURRENCY_MXN }, ///< Mexican peso { 40, "", CF_NOEURO, "NTD" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_NTD }, ///< new taiwan dollar - { 8, "", CF_NOEURO, "\xC2\xA5", "", 0, STR_GAME_OPTIONS_CURRENCY_CNY }, ///< chinese renminbi + { 8, "", CF_NOEURO, u8"\u00a5", "", 0, STR_GAME_OPTIONS_CURRENCY_CNY }, ///< chinese renminbi { 10, "", CF_NOEURO, "HKD" NBSP, "", 0, STR_GAME_OPTIONS_CURRENCY_HKD }, ///< hong kong dollar + { 90, "", CF_NOEURO, u8"\u20b9", "", 0, STR_GAME_OPTIONS_CURRENCY_INR }, ///< Indian Rupee + { 19, "", CF_NOEURO, "Rp", "", 0, STR_GAME_OPTIONS_CURRENCY_IDR }, ///< Indonesian Rupiah + { 5, "", CF_NOEURO, "RM", "", 0, STR_GAME_OPTIONS_CURRENCY_MYR }, ///< Malaysian Ringgit }; /** Array of currencies used by the system */ diff --git a/src/currency.h b/src/currency.h index 58c385a8b4..e97fc6cb84 100644 --- a/src/currency.h +++ b/src/currency.h @@ -11,6 +11,7 @@ #define CURRENCY_H #include "date_type.h" +#include "string_func.h" #include "strings_type.h" static const int CF_NOEURO = 0; ///< Currency never switches to the Euro (as far as known). @@ -61,6 +62,9 @@ enum Currencies { CURRENCY_NTD, ///< New Taiwan Dollar CURRENCY_CNY, ///< Chinese Renminbi CURRENCY_HKD, ///< Hong Kong Dollar + CURRENCY_INR, ///< Indian Rupee + CURRENCY_IDR, ///< Indonesian Rupiah + CURRENCY_MYR, ///< Malaysian Ringgit CURRENCY_END, ///< always the last item }; @@ -82,6 +86,15 @@ struct CurrencySpec { */ byte symbol_pos; StringID name; + + CurrencySpec() = default; + + CurrencySpec(uint16 rate, const char *separator, Year to_euro, const char *prefix, const char *suffix, byte symbol_pos, StringID name) : rate(rate), to_euro(to_euro), symbol_pos(symbol_pos), name(name) + { + strecpy(this->separator, separator, lastof(this->separator)); + strecpy(this->prefix, prefix, lastof(this->prefix)); + strecpy(this->suffix, suffix, lastof(this->suffix)); + } }; extern CurrencySpec _currency_specs[CURRENCY_END]; diff --git a/src/date.cpp b/src/date.cpp index 621b1265c5..601ad6dad9 100644 --- a/src/date.cpp +++ b/src/date.cpp @@ -19,6 +19,7 @@ #include "linkgraph/linkgraph.h" #include "saveload/saveload.h" #include "newgrf_profiling.h" +#include "widgets/statusbar_widget.h" #include "citymania/cm_main.hpp" @@ -30,8 +31,6 @@ Date _date; ///< Current date in days (day counter) DateFract _date_fract; ///< Fractional part of the day. uint16 _tick_counter; ///< Ever incrementing (and sometimes wrapping) tick counter for setting off various events -int32 _old_ending_year_slv_105; ///< Old ending year for savegames before SLV_105 - /** * Set the date. * @param date New date @@ -202,11 +201,13 @@ static void OnNewYear() if (_cur_year == _settings_client.gui.semaphore_build_before) ResetSignalVariant(); - /* check if we reached end of the game (end of ending year) */ - if (_cur_year == _settings_game.game_creation.ending_year + 1) { + /* check if we reached end of the game (end of ending year); 0 = never */ + if (_cur_year == _settings_game.game_creation.ending_year + 1 && _settings_game.game_creation.ending_year != 0) { ShowEndGameChart(); + } + /* check if we reached the maximum year, decrement dates by a year */ - } else if (_cur_year == MAX_YEAR + 1) { + if (_cur_year == MAX_YEAR + 1) { int days_this_year; _cur_year--; @@ -258,7 +259,7 @@ static void OnNewDay() DisasterDailyLoop(); IndustryDailyLoop(); - SetWindowWidgetDirty(WC_STATUS_BAR, 0, 0); + SetWindowWidgetDirty(WC_STATUS_BAR, 0, WID_S_LEFT); EnginesDailyLoop(); /* Refresh after possible snowline change */ diff --git a/src/date_gui.cpp b/src/date_gui.cpp index 4d8ff2a89e..8feb3f8adf 100644 --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -41,8 +41,8 @@ struct SetDateWindow : Window { SetDateWindow(WindowDesc *desc, WindowNumber window_number, Window *parent, Date initial_date, Year min_year, Year max_year, SetDateCallback *callback) : Window(desc), callback(callback), - min_year(max(MIN_YEAR, min_year)), - max_year(min(MAX_YEAR, max_year)) + min_year(std::max(MIN_YEAR, min_year)), + max_year(std::min(MAX_YEAR, max_year)) { assert(this->min_year <= this->max_year); this->parent = parent; diff --git a/src/debug.cpp b/src/debug.cpp index ded6bf1ccd..034af755fd 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -45,8 +45,6 @@ int _debug_console_level; int _debug_random_level; #endif -uint32 _realtime_tick = 0; - struct DebugLevel { const char *name; int *level; @@ -134,7 +132,7 @@ static void debug_print(const char *dbg, const char *buf) char buffer[512]; seprintf(buffer, lastof(buffer), "%sdbg: [%s] %s\n", GetLogPrefix(), dbg, buf); #if defined(_WIN32) - TCHAR system_buf[512]; + wchar_t system_buf[512]; convert_to_fs(buffer, system_buf, lengthof(system_buf), true); _fputts(system_buf, stderr); #else diff --git a/src/debug.h b/src/debug.h index 1a0955b55b..29a7114aa0 100644 --- a/src/debug.h +++ b/src/debug.h @@ -121,7 +121,4 @@ void CDECL ShowInfoF(const char *str, ...) WARN_FORMAT(1, 2); const char *GetLogPrefix(); -/** The real time in the game. */ -extern uint32 _realtime_tick; - #endif /* DEBUG_H */ diff --git a/src/dedicated.cpp b/src/dedicated.cpp index 8ab035e61d..fe3cd7cfb8 100644 --- a/src/dedicated.cpp +++ b/src/dedicated.cpp @@ -8,9 +8,11 @@ /** @file dedicated.cpp Forking support for dedicated servers. */ #include "stdafx.h" +#include "fileio_func.h" +#include -char *_log_file = nullptr; ///< File to reroute output of a forked OpenTTD to -FILE *_log_fd = nullptr; ///< File to reroute output of a forked OpenTTD to +std::string _log_file; ///< File to reroute output of a forked OpenTTD to +std::unique_ptr _log_fd; ///< File to reroute output of a forked OpenTTD to #if defined(UNIX) @@ -38,17 +40,17 @@ void DedicatedFork() case 0: { // We're the child /* Open the log-file to log all stuff too */ - _log_fd = fopen(_log_file, "a"); - if (_log_fd == nullptr) { + _log_fd.reset(fopen(_log_file.c_str(), "a")); + if (!_log_fd) { perror("Unable to open logfile"); exit(1); } /* Redirect stdout and stderr to log-file */ - if (dup2(fileno(_log_fd), fileno(stdout)) == -1) { + if (dup2(fileno(_log_fd.get()), fileno(stdout)) == -1) { perror("Rerouting stdout"); exit(1); } - if (dup2(fileno(_log_fd), fileno(stderr)) == -1) { + if (dup2(fileno(_log_fd.get()), fileno(stderr)) == -1) { perror("Rerouting stderr"); exit(1); } diff --git a/src/depend/depend.cpp b/src/depend/depend.cpp deleted file mode 100644 index 5a3bd868de..0000000000 --- a/src/depend/depend.cpp +++ /dev/null @@ -1,1084 +0,0 @@ -/* - * This file is part of OpenTTD. - * OpenTTD 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, version 2. - * OpenTTD 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 OpenTTD. If not, see . - */ - -/** - * @file depend/depend.cpp Custom implementation of Makedepend. - * - * We previously used makedepend, but that could not handle the amount of - * files we have and does not handle conditional includes in a sane manner. - * This caused many link problems because not enough files were recompiled. - * This has lead to the development of our own dependency generator. It is - * meant to be a substitute to the (relatively slow) dependency generation - * via gcc. It thus helps speeding up compilation. It will also ignore - * system headers making it less error prone when system headers are moved - * or renamed. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/** - * Return the length of an fixed size array. - * Unlike sizeof this function returns the number of elements - * of the given type. - * - * @param x The pointer to the first element of the array - * @return The number of elements - */ -#define lengthof(x) (sizeof(x) / sizeof(x[0])) - -/** - * Get the last element of an fixed size array. - * - * @param x The pointer to the first element of the array - * @return The pointer to the last element of the array - */ -#define lastof(x) (&x[lengthof(x) - 1]) - -/** - * Copies characters from one buffer to another. - * - * Copies the source string to the destination buffer with respect of the - * terminating null-character and the last pointer to the last element in - * the destination buffer. If the last pointer is set to nullptr no boundary - * check is performed. - * - * @note usage: strecpy(dst, src, lastof(dst)); - * @note lastof() applies only to fixed size arrays - * - * @param dst The destination buffer - * @param src The buffer containing the string to copy - * @param last The pointer to the last element of the destination buffer - * @return The pointer to the terminating null-character in the destination buffer - */ -char *strecpy(char *dst, const char *src, const char *last) -{ - assert(dst <= last); - while (dst != last && *src != '\0') { - *dst++ = *src++; - } - *dst = '\0'; - - if (dst == last && *src != '\0') { - fprintf(stderr, "String too long for destination buffer\n"); - exit(-3); - } - return dst; -} - -/** - * Appends characters from one string to another. - * - * Appends the source string to the destination string with respect of the - * terminating null-character and and the last pointer to the last element - * in the destination buffer. If the last pointer is set to nullptr no - * boundary check is performed. - * - * @note usage: strecat(dst, src, lastof(dst)); - * @note lastof() applies only to fixed size arrays - * - * @param dst The buffer containing the target string - * @param src The buffer containing the string to append - * @param last The pointer to the last element of the destination buffer - * @return The pointer to the terminating null-character in the destination buffer - */ -static char *strecat(char *dst, const char *src, const char *last) -{ - assert(dst <= last); - while (*dst != '\0') { - if (dst == last) return dst; - dst++; - } - - return strecpy(dst, src, last); -} - -#if defined(__CYGWIN__) -/** - * Version of strdup copied from glibc. - * Duplicate S, returning an identical malloc'd string. - * @param s The string to duplicate. - */ -char * -strdup (const char *s) -{ - size_t len = strlen(s) + 1; - void *n = malloc(len); - - if (n == NULL) return NULL; - return (char *) memcpy(n, s, len); -} -#endif - -/** - * Version of the standard free that accepts const pointers. - * @param ptr The data to free. - */ -static inline void free(const void *ptr) -{ - free(const_cast(ptr)); -} - -#ifndef PATH_MAX -/** The maximum length of paths, if we don't know it. */ -# define PATH_MAX 260 -#endif - -/** Simple string comparator using strcmp as implementation */ -struct StringCompare { - /** - * Compare a to b using strcmp. - * @param a string to compare. - * @param b string to compare. - * @return whether a is less than b. - */ - bool operator () (const char *a, const char *b) const - { - return strcmp(a, b) < 0; - } -}; -/** Set of C-style strings. */ -typedef std::set StringSet; -/** Mapping of C-style string to a set of C-style strings. */ -typedef std::map StringMap; -/** Pair of C-style string and a set of C-style strings. */ -typedef std::pair StringMapItem; - -/** Include directory to search in. */ -static StringSet _include_dirs; -/** Files that have been parsed/handled with their dependencies. */ -static StringMap _files; -/** Dependencies of headers. */ -static StringMap _headers; -/** The current 'active' defines. */ -static StringSet _defines; - -/** - * Helper class to read a file. - */ -class File { -public: - /** - * Create the helper by opening the given file. - * @param filename the file to open - * @post the file is open; otherwise the application is killed. - */ - File(const char *filename) - { - this->fp = fopen(filename, "r"); - if (this->fp == nullptr) { - fprintf(stdout, "Could not open %s for reading\n", filename); - exit(1); - } - this->dirname = strdup(filename); - char *last = strrchr(this->dirname, '/'); - if (last != nullptr) { - *last = '\0'; - } else { - *this->dirname = '\0'; - } - } - - /** Free everything we have allocated. */ - ~File() - { - fclose(this->fp); - free(this->dirname); - } - - /** - * Get a single character from the file. - * If we are reading beyond the end of the file '\0' is returned. - * @return the read character. - */ - char GetChar() const - { - int c = fgetc(this->fp); - return (c == EOF) ? '\0' : c; - } - - /** - * Get the directory name of the file. - * @return the directory name. - */ - const char *GetDirname() const - { - return this->dirname; - } - -private: - FILE *fp; ///< The currently opened file. - char *dirname; ///< The directory of the file. -}; - -/** A token returned by the tokenizer. */ -enum Token { - TOKEN_UNKNOWN, ///< Unknown token - TOKEN_END, ///< End of document - TOKEN_EOL, ///< End of line - TOKEN_SHARP, ///< # character, usually telling something important comes. - TOKEN_LOCAL, ///< Read a local include - TOKEN_GLOBAL, ///< Read a global include - TOKEN_IDENTIFIER, ///< Identifier within the data. - TOKEN_DEFINE, ///< \c \#define in code - TOKEN_IF, ///< \c \#if in code - TOKEN_IFDEF, ///< \c \#ifdef in code - TOKEN_IFNDEF, ///< \c \#ifndef in code - TOKEN_ELIF, ///< \c \#elif in code - TOKEN_ELSE, ///< \c \#else in code - TOKEN_ENDIF, ///< \c \#endif in code - TOKEN_UNDEF, ///< \c \#undef in code - TOKEN_OR, ///< '||' within \c \#if expression - TOKEN_AND, ///< '&&' within \c \#if expression - TOKEN_DEFINED, ///< 'defined' within \c \#if expression - TOKEN_OPEN, ///< '(' within \c \#if expression - TOKEN_CLOSE, ///< ')' within \c \#if expression - TOKEN_NOT, ///< '!' within \c \#if expression - TOKEN_ZERO, ///< '0' within \c \#if expression - TOKEN_INCLUDE, ///< \c \#include in code -}; - -/** Mapping from a C-style keyword representation to a Token. */ -typedef std::map KeywordList; - -/** - * Lexer of a file. - */ -class Lexer { -public: - /** - * Create the lexer and fill the keywords table. - * @param file the file to read from. - */ - Lexer(const File *file) : file(file), current_char('\0'), string(nullptr), token(TOKEN_UNKNOWN) - { - this->keywords["define"] = TOKEN_DEFINE; - this->keywords["defined"] = TOKEN_DEFINED; - this->keywords["if"] = TOKEN_IF; - this->keywords["ifdef"] = TOKEN_IFDEF; - this->keywords["ifndef"] = TOKEN_IFNDEF; - this->keywords["include"] = TOKEN_INCLUDE; - this->keywords["elif"] = TOKEN_ELIF; - this->keywords["else"] = TOKEN_ELSE; - this->keywords["endif"] = TOKEN_ENDIF; - this->keywords["undef"] = TOKEN_UNDEF; - - /* Initialise currently read character. */ - this->Next(); - - /* Allocate the buffer. */ - this->buf_len = 32; - this->buf = (char*)malloc(sizeof(*this->buf) * this->buf_len); - } - - /** Free everything */ - ~Lexer() - { - free(this->buf); - } - - /** - * Read the next character into 'current_char'. - */ - void Next() - { - this->current_char = this->file->GetChar(); - } - - /** - * Get the current token. - * @return the token. - */ - Token GetToken() const - { - return this->token; - } - - /** - * Read the currently processed string. - * @return the string, can be nullptr. - */ - const char *GetString() const - { - return this->string; - } - - /** - * Perform the lexing/tokenizing of the file till we can return something - * that must be parsed. - */ - void Lex() - { - for (;;) { - free(this->string); - this->string = nullptr; - this->token = TOKEN_UNKNOWN; - - switch (this->current_char) { - /* '\0' means End-Of-File */ - case '\0': this->token = TOKEN_END; return; - - /* Skip some chars, as they don't do anything */ - case '\t': this->Next(); break; - case '\r': this->Next(); break; - case ' ': this->Next(); break; - - case '\\': - this->Next(); - if (this->current_char == '\n') this->Next(); - break; - - case '\n': - this->token = TOKEN_EOL; - this->Next(); - return; - - case '#': - this->token = TOKEN_SHARP; - this->Next(); - return; - - case '"': - this->ReadString('"', TOKEN_LOCAL); - this->Next(); - return; - - case '<': - this->ReadString('>', TOKEN_GLOBAL); - this->Next(); - return; - - case '&': - this->Next(); - if (this->current_char == '&') { - this->Next(); - this->token = TOKEN_AND; - return; - } - break; - - case '|': - this->Next(); - if (this->current_char == '|') { - this->Next(); - this->token = TOKEN_OR; - return; - } - break; - - case '(': - this->Next(); - this->token = TOKEN_OPEN; - return; - - case ')': - this->Next(); - this->token = TOKEN_CLOSE; - return; - - case '!': - this->Next(); - if (this->current_char != '=') { - this->token = TOKEN_NOT; - return; - } - break; - - /* Possible begin of comment */ - case '/': - this->Next(); - switch (this->current_char) { - case '*': { - this->Next(); - char previous_char = '\0'; - while ((this->current_char != '/' || previous_char != '*') && this->current_char != '\0') { - previous_char = this->current_char; - this->Next(); - } - this->Next(); - break; - } - case '/': while (this->current_char != '\n' && this->current_char != '\0') this->Next(); break; - default: break; - } - break; - - default: - if (isalpha(this->current_char) || this->current_char == '_') { - /* If the name starts with a letter, it is an identifier */ - this->ReadIdentifier(); - return; - } - if (isdigit(this->current_char)) { - bool zero = this->current_char == '0'; - this->Next(); - if (this->current_char == 'x' || this->current_char == 'X') Next(); - while (isdigit(this->current_char) || this->current_char == '.' || (this->current_char >= 'a' && this->current_char <= 'f') || (this->current_char >= 'A' && this->current_char <= 'F')) { - zero &= this->current_char == '0'; - this->Next(); - } - if (zero) this->token = TOKEN_ZERO; - return; - } - this->Next(); - break; - } - } - } - -private: - /** - * The token based on keyword with a given name. - * @param name the actual keyword. - * @return the token of the keyword. - */ - Token FindKeyword(const char *name) const - { - KeywordList::const_iterator it = this->keywords.find(name); - if (it == this->keywords.end()) return TOKEN_IDENTIFIER; - return (*it).second; - } - - /** - * Read an identifier. - */ - void ReadIdentifier() - { - size_t count = 0; - - /* Read the rest of the identifier */ - do { - this->buf[count++] = this->current_char; - this->Next(); - - if (count >= buf_len) { - /* Scale the buffer if required */ - this->buf_len *= 2; - this->buf = (char *)realloc(this->buf, sizeof(*this->buf) * this->buf_len); - } - } while ((isalpha(this->current_char) || this->current_char == '_' || isdigit(this->current_char))); - this->buf[count] = '\0'; - - free(this->string); - this->string = strdup(this->buf); - this->token = FindKeyword(this->string); - } - - /** - * Read a string up to a given character, then set the given token. - * @param end the 'marker' for the end of the string. - * @param token the token to set after returning. - */ - void ReadString(char end, Token token) - { - size_t count = 0; - this->Next(); - while (this->current_char != end && this->current_char != ')' && this->current_char != '\n' && this->current_char != '\0') { - this->buf[count++] = this->current_char; - this->Next(); - - if (count >= this->buf_len) { - /* Scale the buffer if required */ - this->buf_len *= 2; - this->buf = (char *)realloc(this->buf, sizeof(*this->buf) * this->buf_len); - } - } - this->buf[count] = '\0'; - free(this->string); - this->string = strdup(this->buf); - this->token = token; - } - - const File *file; ///< The file to read from. - char current_char; ///< The current character to process. - char *string; ///< Currently processed string. - Token token; ///< The current token to process. - char *buf; ///< Temporary buffer. - size_t buf_len; ///< Length of the temporary buffer. - KeywordList keywords; ///< All keywords we know of. -}; - -/** - * Generate a path from a directory name and a relative filename. - * If the file is not local the include directory names will be used instead - * of the passed parameter with directory name. If the file is local both will - * be queried where the parameter takes precedence. - * @param dirname the directory to look in. - * @param filename the file to look for. - * @param local whether to look locally (in dirname) for the file. - * @return the absolute path, or nullptr if the file doesn't exist. - */ -const char *GeneratePath(const char *dirname, const char *filename, bool local) -{ - /* Ignore C++ standard library headers. */ - if (strchr(filename, '.') == nullptr) return nullptr; - - if (local) { - if (access(filename, R_OK) == 0) return strdup(filename); - - char path[PATH_MAX]; - strecpy(path, dirname, lastof(path)); - const char *p = filename; - /* Remove '..' from the begin of the filename. */ - while (*p == '.') { - if (*(++p) == '.') { - char *s = strrchr(path, '/'); - if (s != nullptr) *s = '\0'; - p += 2; - } - } - strecat(path, "/", lastof(path)); - strecat(path, p, lastof(path)); - - if (access(path, R_OK) == 0) return strdup(path); - } - - for (StringSet::iterator it = _include_dirs.begin(); it != _include_dirs.end(); it++) { - char path[PATH_MAX]; - strecpy(path, *it, lastof(path)); - const char *p = filename; - /* Remove '..' from the begin of the filename. */ - while (*p == '.') { - if (*(++p) == '.') { - char *s = strrchr(path, '/'); - if (s != nullptr) *s = '\0'; - p += 2; - } - } - strecat(path, "/", lastof(path)); - strecat(path, p, lastof(path)); - - if (access(path, R_OK) == 0) return strdup(path); - } - - return nullptr; -} - -/** - * Try to parse a 'defined(expr)' expression. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionDefined(Lexer *lexer, StringSet *defines, bool verbose); - -/** - * Try to parse a 'expr || expr' expression. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionOr(Lexer *lexer, StringSet *defines, bool verbose); - -/** - * Try to parse a '!expr' expression. Also parses the '(expr)', '0' and - * identifiers. Finally it also consumes any unknown tokens. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionNot(Lexer *lexer, StringSet *defines, bool verbose) -{ - if (lexer->GetToken() == TOKEN_NOT) { - if (verbose) fprintf(stderr, "!"); - lexer->Lex(); - bool value = !ExpressionDefined(lexer, defines, verbose); - if (verbose) fprintf(stderr, "[%d]", value); - return value; - } - - if (lexer->GetToken() == TOKEN_OPEN) { - if (verbose) fprintf(stderr, "("); - lexer->Lex(); - bool value = ExpressionOr(lexer, defines, verbose); - if (verbose) fprintf(stderr, ")[%d]", value); - lexer->Lex(); - return value; - } - - if (lexer->GetToken() == TOKEN_ZERO) { - if (verbose) fprintf(stderr, "0"); - lexer->Lex(); - if (verbose) fprintf(stderr, "[0]"); - return false; - } - - bool first = true; - while (lexer->GetToken() == TOKEN_UNKNOWN || lexer->GetToken() == TOKEN_IDENTIFIER) { - if (verbose && first) fprintf(stderr, ""); - first = false; - lexer->Lex(); - } - - return true; -} - -/** - * Try to parse a 'defined(expr)' expression. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionDefined(Lexer *lexer, StringSet *defines, bool verbose) -{ - bool value = ExpressionNot(lexer, defines, verbose); - - if (lexer->GetToken() != TOKEN_DEFINED) return value; - lexer->Lex(); - if (verbose) fprintf(stderr, "defined"); - bool open = (lexer->GetToken() == TOKEN_OPEN); - if (open) lexer->Lex(); - if (verbose) fprintf(stderr, open ? "(" : " "); - if (lexer->GetToken() == TOKEN_IDENTIFIER) { - if (verbose) fprintf(stderr, "%s", lexer->GetString()); - value = defines->find(lexer->GetString()) != defines->end(); - } - if (open) { - if (verbose) fprintf(stderr, ")"); - lexer->Lex(); - } - lexer->Lex(); - if (verbose) fprintf(stderr, "[%d]", value); - return value; -} - -/** - * Try to parse a 'expr && expr' expression. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionAnd(Lexer *lexer, StringSet *defines, bool verbose) -{ - bool value = ExpressionDefined(lexer, defines, verbose); - - for (;;) { - if (lexer->GetToken() != TOKEN_AND) return value; - if (verbose) fprintf(stderr, " && "); - lexer->Lex(); - value = value && ExpressionDefined(lexer, defines, verbose); - } -} - -/** - * Try to parse a 'expr || expr' expression. - * @param lexer the lexer to get tokens from. - * @param defines the set of known defines. - * @param verbose whether to give verbose debugging information. - * @return the value of the expression. - */ -bool ExpressionOr(Lexer *lexer, StringSet *defines, bool verbose) -{ - bool value = ExpressionAnd(lexer, defines, verbose); - - for (;;) { - if (lexer->GetToken() != TOKEN_OR) return value; - if (verbose) fprintf(stderr, " || "); - lexer->Lex(); - value = value || ExpressionAnd(lexer, defines, verbose); - } -} - -/** Enumerator to tell how long to ignore 'stuff'. */ -enum Ignore { - NOT_IGNORE, ///< No ignoring. - IGNORE_UNTIL_ELSE, ///< Ignore till a \c \#else is reached. - IGNORE_UNTIL_ENDIF, ///< Ignore till a \c \#endif is reached. -}; - -/** - * Scan a file for includes, defines and the lot. - * @param filename the name of the file to scan. - * @param ext the extension of the filename. - * @param header whether the file is a header or not. - * @param verbose whether to give verbose debugging information. - */ -void ScanFile(const char *filename, const char *ext, bool header, bool verbose) -{ - static StringSet defines; - static std::stack ignore; - /* Copy in the default defines (parameters of depend) */ - if (!header) { - for (StringSet::iterator it = _defines.begin(); it != _defines.end(); it++) { - defines.insert(strdup(*it)); - } - } - - File file(filename); - Lexer lexer(&file); - - /* Start the lexing! */ - lexer.Lex(); - - while (lexer.GetToken() != TOKEN_END) { - switch (lexer.GetToken()) { - /* We reached the end of the file... yay, we're done! */ - case TOKEN_END: break; - - /* The line started with a # (minus whitespace) */ - case TOKEN_SHARP: - lexer.Lex(); - switch (lexer.GetToken()) { - case TOKEN_INCLUDE: - if (verbose) fprintf(stderr, "%s #include ", filename); - lexer.Lex(); - switch (lexer.GetToken()) { - case TOKEN_LOCAL: - case TOKEN_GLOBAL: { - if (verbose) fprintf(stderr, "%s", lexer.GetString()); - if (!ignore.empty() && ignore.top() != NOT_IGNORE) { - if (verbose) fprintf(stderr, " (ignored)"); - break; - } - const char *h = GeneratePath(file.GetDirname(), lexer.GetString(), lexer.GetToken() == TOKEN_LOCAL); - if (h != nullptr) { - StringMap::iterator it = _headers.find(h); - if (it == _headers.end()) { - it = (_headers.insert(StringMapItem(strdup(h), new StringSet()))).first; - if (verbose) fprintf(stderr, "\n"); - ScanFile(h, ext, true, verbose); - } - StringMap::iterator curfile; - if (header) { - curfile = _headers.find(filename); - } else { - /* Replace the extension with the provided extension of '.o'. */ - char path[PATH_MAX]; - strecpy(path, filename, lastof(path)); - *(strrchr(path, '.')) = '\0'; - strecat(path, ext != nullptr ? ext : ".o", lastof(path)); - curfile = _files.find(path); - if (curfile == _files.end()) { - curfile = (_files.insert(StringMapItem(strdup(path), new StringSet()))).first; - } - } - if (it != _headers.end()) { - for (StringSet::iterator header = it->second->begin(); header != it->second->end(); header++) { - if (curfile->second->find(*header) == curfile->second->end()) curfile->second->insert(strdup(*header)); - } - } - if (curfile->second->find(h) == curfile->second->end()) curfile->second->insert(strdup(h)); - free(h); - } - } - /* FALL THROUGH */ - default: break; - } - break; - - case TOKEN_DEFINE: - if (verbose) fprintf(stderr, "%s #define ", filename); - lexer.Lex(); - if (lexer.GetToken() == TOKEN_IDENTIFIER) { - if (verbose) fprintf(stderr, "%s", lexer.GetString()); - if (!ignore.empty() && ignore.top() != NOT_IGNORE) { - if (verbose) fprintf(stderr, " (ignored)"); - break; - } - if (defines.find(lexer.GetString()) == defines.end()) defines.insert(strdup(lexer.GetString())); - lexer.Lex(); - } - break; - - case TOKEN_UNDEF: - if (verbose) fprintf(stderr, "%s #undef ", filename); - lexer.Lex(); - if (lexer.GetToken() == TOKEN_IDENTIFIER) { - if (verbose) fprintf(stderr, "%s", lexer.GetString()); - if (!ignore.empty() && ignore.top() != NOT_IGNORE) { - if (verbose) fprintf(stderr, " (ignored)"); - break; - } - StringSet::iterator it = defines.find(lexer.GetString()); - if (it != defines.end()) { - free(*it); - defines.erase(it); - } - lexer.Lex(); - } - break; - - case TOKEN_ENDIF: - if (verbose) fprintf(stderr, "%s #endif", filename); - lexer.Lex(); - if (!ignore.empty()) ignore.pop(); - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - - case TOKEN_ELSE: { - if (verbose) fprintf(stderr, "%s #else", filename); - lexer.Lex(); - Ignore last = ignore.empty() ? NOT_IGNORE : ignore.top(); - if (!ignore.empty()) ignore.pop(); - if (ignore.empty() || ignore.top() == NOT_IGNORE) { - ignore.push(last == IGNORE_UNTIL_ELSE ? NOT_IGNORE : IGNORE_UNTIL_ENDIF); - } else { - ignore.push(IGNORE_UNTIL_ENDIF); - } - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - } - - case TOKEN_ELIF: { - if (verbose) fprintf(stderr, "%s #elif ", filename); - lexer.Lex(); - Ignore last = ignore.empty() ? NOT_IGNORE : ignore.top(); - if (!ignore.empty()) ignore.pop(); - if (ignore.empty() || ignore.top() == NOT_IGNORE) { - bool value = ExpressionOr(&lexer, &defines, verbose); - ignore.push(last == IGNORE_UNTIL_ELSE ? (value ? NOT_IGNORE : IGNORE_UNTIL_ELSE) : IGNORE_UNTIL_ENDIF); - } else { - ignore.push(IGNORE_UNTIL_ENDIF); - } - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - } - - case TOKEN_IF: { - if (verbose) fprintf(stderr, "%s #if ", filename); - lexer.Lex(); - if (ignore.empty() || ignore.top() == NOT_IGNORE) { - bool value = ExpressionOr(&lexer, &defines, verbose); - ignore.push(value ? NOT_IGNORE : IGNORE_UNTIL_ELSE); - } else { - ignore.push(IGNORE_UNTIL_ENDIF); - } - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - } - - case TOKEN_IFDEF: - if (verbose) fprintf(stderr, "%s #ifdef ", filename); - lexer.Lex(); - if (lexer.GetToken() == TOKEN_IDENTIFIER) { - bool value = defines.find(lexer.GetString()) != defines.end(); - if (verbose) fprintf(stderr, "%s[%d]", lexer.GetString(), value); - if (ignore.empty() || ignore.top() == NOT_IGNORE) { - ignore.push(value ? NOT_IGNORE : IGNORE_UNTIL_ELSE); - } else { - ignore.push(IGNORE_UNTIL_ENDIF); - } - } - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - - case TOKEN_IFNDEF: - if (verbose) fprintf(stderr, "%s #ifndef ", filename); - lexer.Lex(); - if (lexer.GetToken() == TOKEN_IDENTIFIER) { - bool value = defines.find(lexer.GetString()) != defines.end(); - if (verbose) fprintf(stderr, "%s[%d]", lexer.GetString(), value); - if (ignore.empty() || ignore.top() == NOT_IGNORE) { - ignore.push(!value ? NOT_IGNORE : IGNORE_UNTIL_ELSE); - } else { - ignore.push(IGNORE_UNTIL_ENDIF); - } - } - if (verbose) fprintf(stderr, " -> %signore", (!ignore.empty() && ignore.top() != NOT_IGNORE) ? "" : "not "); - break; - - default: - if (verbose) fprintf(stderr, "%s #", filename); - lexer.Lex(); - break; - } - if (verbose) fprintf(stderr, "\n"); - /* FALL THROUGH */ - default: - /* Ignore the rest of the garbage on this line */ - while (lexer.GetToken() != TOKEN_EOL && lexer.GetToken() != TOKEN_END) lexer.Lex(); - lexer.Lex(); - break; - } - } - - if (!header) { - for (StringSet::iterator it = defines.begin(); it != defines.end(); it++) { - free(*it); - } - defines.clear(); - while (!ignore.empty()) ignore.pop(); - } -} - -/** - * Entry point. Arguably the most common function in all applications. - * @param argc the number of arguments. - * @param argv the actual arguments. - * @return return value for the caller to tell we succeed or not. - */ -int main(int argc, char *argv[]) -{ - bool ignorenext = true; - char *filename = nullptr; - char *ext = nullptr; - char *delimiter = nullptr; - bool append = false; - bool verbose = false; - - for (int i = 0; i < argc; i++) { - if (ignorenext) { - ignorenext = false; - continue; - } - if (argv[i][0] == '-') { - /* Append */ - if (strncmp(argv[i], "-a", 2) == 0) append = true; - /* Include dir */ - if (strncmp(argv[i], "-I", 2) == 0) { - if (argv[i][2] == '\0') { - i++; - _include_dirs.insert(strdup(argv[i])); - } else { - _include_dirs.insert(strdup(&argv[i][2])); - } - continue; - } - /* Define */ - if (strncmp(argv[i], "-D", 2) == 0) { - char *p = strchr(argv[i], '='); - if (p != nullptr) *p = '\0'; - _defines.insert(strdup(&argv[i][2])); - continue; - } - /* Output file */ - if (strncmp(argv[i], "-f", 2) == 0) { - if (filename != nullptr) continue; - filename = strdup(&argv[i][2]); - continue; - } - /* Object file extension */ - if (strncmp(argv[i], "-o", 2) == 0) { - if (ext != nullptr) continue; - ext = strdup(&argv[i][2]); - continue; - } - /* Starting string delimiter */ - if (strncmp(argv[i], "-s", 2) == 0) { - if (delimiter != nullptr) continue; - delimiter = strdup(&argv[i][2]); - continue; - } - /* Verbose */ - if (strncmp(argv[i], "-v", 2) == 0) verbose = true; - continue; - } - ScanFile(argv[i], ext, false, verbose); - } - - /* Default output file is Makefile */ - if (filename == nullptr) filename = strdup("Makefile"); - - /* Default delimiter string */ - if (delimiter == nullptr) delimiter = strdup("# DO NOT DELETE"); - - char backup[PATH_MAX]; - strecpy(backup, filename, lastof(backup)); - strecat(backup, ".bak", lastof(backup)); - - char *content = nullptr; - long size = 0; - - /* Read in the current file; so we can overwrite everything from the - * end of non-depend data marker down till the end. */ - FILE *src = fopen(filename, "rb"); - if (src != nullptr) { - fseek(src, 0, SEEK_END); - if ((size = ftell(src)) < 0) { - fprintf(stderr, "Could not read %s\n", filename); - exit(-2); - } - rewind(src); - content = (char*)malloc(size * sizeof(*content)); - if (fread(content, 1, size, src) != (size_t)size) { - fprintf(stderr, "Could not read %s\n", filename); - exit(-2); - } - fclose(src); - } - - FILE *dst = fopen(filename, "w"); - bool found_delimiter = false; - - if (size != 0) { - src = fopen(backup, "wb"); - if (fwrite(content, 1, size, src) != (size_t)size) { - fprintf(stderr, "Could not write %s\n", filename); - exit(-2); - } - fclose(src); - - /* Then append it to the real file. */ - src = fopen(backup, "r"); - while (fgets(content, size, src) != nullptr) { - fputs(content, dst); - if (!strncmp(content, delimiter, strlen(delimiter))) found_delimiter = true; - if (!append && found_delimiter) break; - } - fclose(src); - } - if (!found_delimiter) fprintf(dst, "\n%s\n", delimiter); - - for (StringMap::iterator it = _files.begin(); it != _files.end(); it++) { - for (StringSet::iterator h = it->second->begin(); h != it->second->end(); h++) { - fprintf(dst, "%s: %s\n", it->first, *h); - } - } - - /* Clean up our mess. */ - fclose(dst); - - free(delimiter); - free(filename); - free(ext); - free(content); - - for (StringMap::iterator it = _files.begin(); it != _files.end(); it++) { - for (StringSet::iterator h = it->second->begin(); h != it->second->end(); h++) { - free(*h); - } - it->second->clear(); - delete it->second; - free(it->first); - } - _files.clear(); - - for (StringMap::iterator it = _headers.begin(); it != _headers.end(); it++) { - for (StringSet::iterator h = it->second->begin(); h != it->second->end(); h++) { - free(*h); - } - it->second->clear(); - delete it->second; - free(it->first); - } - _headers.clear(); - - for (StringSet::iterator it = _defines.begin(); it != _defines.end(); it++) { - free(*it); - } - _defines.clear(); - - for (StringSet::iterator it = _include_dirs.begin(); it != _include_dirs.end(); it++) { - free(*it); - } - _include_dirs.clear(); - - return 0; -} diff --git a/src/depot.cpp b/src/depot.cpp index 9207c63629..05e2af3d4a 100644 --- a/src/depot.cpp +++ b/src/depot.cpp @@ -27,8 +27,6 @@ INSTANTIATE_POOL_METHODS(Depot) */ Depot::~Depot() { - free(this->name); - if (CleaningPool()) return; if (!IsDepotTile(this->xy) || GetDepotIndex(this->xy) != this->index) { diff --git a/src/depot_base.h b/src/depot_base.h index aab2b2ae42..f4c52cffe8 100644 --- a/src/depot_base.h +++ b/src/depot_base.h @@ -18,7 +18,7 @@ extern DepotPool _depot_pool; struct Depot : DepotPool::PoolItem<&_depot_pool> { Town *town; - char *name; + std::string name; TileIndex xy; uint16 town_cn; ///< The N-1th depot for this town (consecutive number) diff --git a/src/depot_cmd.cpp b/src/depot_cmd.cpp index a142fbe7d3..9379afb82f 100644 --- a/src/depot_cmd.cpp +++ b/src/depot_cmd.cpp @@ -29,7 +29,7 @@ static bool IsUniqueDepotName(const char *name) { for (const Depot *d : Depot::Iterate()) { - if (d->name != nullptr && strcmp(d->name, name) == 0) return false; + if (!d->name.empty() && d->name == name) return false; } return true; @@ -60,13 +60,11 @@ CommandCost CmdRenameDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } if (flags & DC_EXEC) { - free(d->name); - if (reset) { - d->name = nullptr; + d->name.clear(); MakeDefaultName(d); } else { - d->name = stredup(text); + d->name = text; } /* Update the orders and depot */ diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index cc8b7795bf..18a254af59 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -45,7 +45,11 @@ static const NWidgetPart _nested_train_depot_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_D_SHOW_RENAME), // rename button + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_RENAME), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_DEPOT_RENAME_TOOLTIP), + EndContainer(), NWidget(WWT_CAPTION, COLOUR_GREY, WID_D_CAPTION), SetDataTip(STR_DEPOT_CAPTION, STR_NULL), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_LOCATION), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_NULL), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), @@ -70,10 +74,6 @@ static const NWidgetPart _nested_train_depot_widgets[] = { NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_BUILD), SetDataTip(0x0, STR_NULL), SetFill(1, 1), SetResize(1, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_D_CLONE), SetDataTip(0x0, STR_NULL), SetFill(1, 1), SetResize(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_LOCATION), SetDataTip(STR_BUTTON_LOCATION, STR_NULL), SetFill(1, 1), SetResize(1, 0), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_D_SHOW_RENAME), // rename button - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_RENAME), SetDataTip(STR_BUTTON_RENAME, STR_DEPOT_RENAME_TOOLTIP), SetFill(1, 1), SetResize(1, 0), - EndContainer(), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_D_VEHICLE_LIST), SetDataTip(0x0, STR_NULL), SetFill(0, 1), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_STOP_ALL), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_NULL), SetFill(0, 1), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_D_START_ALL), SetDataTip(SPR_FLAG_VEH_RUNNING, STR_NULL), SetFill(0, 1), @@ -171,12 +171,12 @@ static void InitBlocksizeForVehicles(VehicleType type, EngineImageType image_typ switch (image_type) { case EIT_IN_DEPOT: - _base_block_sizes_depot[type].height = max(ScaleGUITrad(GetVehicleHeight(type)), max_height); + _base_block_sizes_depot[type].height = std::max(ScaleGUITrad(GetVehicleHeight(type)), max_height); _base_block_sizes_depot[type].extend_left = Clamp(max_extend_left, min_extend, max_extend); _base_block_sizes_depot[type].extend_right = Clamp(max_extend_right, min_extend, max_extend); break; case EIT_PURCHASE: - _base_block_sizes_purchase[type].height = max(ScaleGUITrad(GetVehicleHeight(type)), max_height); + _base_block_sizes_purchase[type].height = std::max(ScaleGUITrad(GetVehicleHeight(type)), max_height); _base_block_sizes_purchase[type].extend_left = Clamp(max_extend_left, min_extend, max_extend); _base_block_sizes_purchase[type].extend_right = Clamp(max_extend_right, min_extend, max_extend); break; @@ -271,6 +271,7 @@ struct DepotWindow : Window { ~DepotWindow() { DeleteWindowById(WC_BUILD_VEHICLE, this->window_number); + DeleteWindowById(GetWindowClassForVehicleType(this->type), VehicleListIdentifier(VL_DEPOT_LIST, this->type, this->owner, this->GetDepotIndex()).Pack(), false); OrderBackup::Reset(this->window_number); } @@ -379,7 +380,7 @@ struct DepotWindow : Window { uint16 rows_in_display = wid->current_y / wid->resize_y; uint16 num = this->vscroll->GetPosition() * this->num_columns; - int maxval = min((uint)this->vehicle_list.size(), num + (rows_in_display * this->num_columns)); + uint maxval = static_cast(std::min(this->vehicle_list.size(), num + (rows_in_display * this->num_columns))); int y; for (y = r.top + 1; num < maxval; y += this->resize.step_height) { // Draw the rows for (byte i = 0; i < this->num_columns && num < maxval; i++, num++) { @@ -394,7 +395,7 @@ struct DepotWindow : Window { } } - maxval = min((uint)this->vehicle_list.size() + (uint)this->wagon_list.size(), (this->vscroll->GetPosition() * this->num_columns) + (rows_in_display * this->num_columns)); + maxval = static_cast(std::min(this->vehicle_list.size() + this->wagon_list.size(), (this->vscroll->GetPosition() * this->num_columns) + (rows_in_display * this->num_columns))); /* Draw the train wagons without an engine in front. */ for (; num < maxval; num++, y += this->resize.step_height) { @@ -407,10 +408,8 @@ struct DepotWindow : Window { { if (widget != WID_D_CAPTION) return; - /* locate the depot struct */ - TileIndex tile = this->window_number; SetDParam(0, this->type); - SetDParam(1, (this->type == VEH_AIRCRAFT) ? GetStationIndex(tile) : GetDepotIndex(tile)); + SetDParam(1, this->GetDepotIndex()); } struct GetDepotVehiclePtData { @@ -542,7 +541,7 @@ struct DepotWindow : Window { this->sel = INVALID_VEHICLE; TrainDepotMoveVehicle(v, sel, gdvp.head); } else if (v != nullptr) { - SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); + SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this, CM_DDSP_DEPOT_MOVE); SetMouseCursorVehicle(v, EIT_IN_DEPOT); _cursor.vehchain = citymania::_fn_mod; @@ -652,15 +651,15 @@ struct DepotWindow : Window { this->flag_height = UnScaleGUI(spr->height); if (this->type == VEH_TRAIN || this->type == VEH_ROAD) { - min_height = max(unumber.height + WD_MATRIX_TOP, UnScaleGUI(spr->height)); + min_height = std::max(unumber.height + WD_MATRIX_TOP, UnScaleGUI(spr->height)); this->header_width = unumber.width + this->flag_width + WD_FRAMERECT_LEFT; } else { min_height = unumber.height + UnScaleGUI(spr->height) + WD_MATRIX_TOP + WD_PAR_VSEP_NORMAL + WD_MATRIX_BOTTOM; - this->header_width = max(unumber.width, this->flag_width) + WD_FRAMERECT_RIGHT; + this->header_width = std::max(unumber.width, this->flag_width) + WD_FRAMERECT_RIGHT; } int base_width = this->count_width + this->header_width; - resize->height = max(GetVehicleImageCellSize(this->type, EIT_IN_DEPOT).height, min_height); + resize->height = std::max(GetVehicleImageCellSize(this->type, EIT_IN_DEPOT).height, min_height); if (this->type == VEH_TRAIN) { resize->width = 1; size->width = base_width + 2 * ScaleGUITrad(29); // about 2 parts @@ -712,7 +711,7 @@ struct DepotWindow : Window { for (const Train *v = Train::From(this->vehicle_list[num]); v != nullptr; v = v->Next()) { width += v->GetDisplayImageWidth(); } - max_width = max(max_width, width); + max_width = std::max(max_width, width); } /* Always have 1 empty row, so people can change the setting of the train */ this->vscroll->SetCount((uint)this->vehicle_list.size() + (uint)this->wagon_list.size() + 1); @@ -763,7 +762,7 @@ struct DepotWindow : Window { SPR_CURSOR_CLONE_SHIP, SPR_CURSOR_CLONE_AIRPLANE }; - SetObjectToPlaceWnd(clone_icons[this->type], PAL_NONE, HT_VEHICLE, this); + SetObjectToPlaceWnd(clone_icons[this->type], PAL_NONE, HT_VEHICLE, this, CM_DDSP_DEPOT_CLONE); } else { ResetObjectToPlace(); } @@ -771,7 +770,7 @@ struct DepotWindow : Window { case WID_D_LOCATION: if (citymania::_fn_mod) { - ShowExtraViewPortWindow(this->window_number); + ShowExtraViewportWindow(this->window_number); } else { ScrollMainWindowToTile(this->window_number); } @@ -793,11 +792,8 @@ struct DepotWindow : Window { case WID_D_SELL_ALL: /* Only open the confirmation window if there are anything to sell */ if (this->vehicle_list.size() != 0 || this->wagon_list.size() != 0) { - TileIndex tile = this->window_number; - byte vehtype = this->type; - - SetDParam(0, vehtype); - SetDParam(1, (vehtype == VEH_AIRCRAFT) ? GetStationIndex(tile) : GetDepotIndex(tile)); + SetDParam(0, this->type); + SetDParam(1, this->GetDepotIndex()); ShowQuery( STR_DEPOT_CAPTION, STR_DEPOT_SELL_CONFIRMATION_TEXT, @@ -823,7 +819,7 @@ struct DepotWindow : Window { if (str == nullptr) return; /* Do depot renaming */ - DoCommandP(0, GetDepotIndex(this->window_number), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), nullptr, str); + DoCommandP(0, this->GetDepotIndex(), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), nullptr, str); } bool OnRightClick(Point pt, int widget) override @@ -1067,6 +1063,16 @@ struct DepotWindow : Window { return ES_NOT_HANDLED; } + /** + * Gets the DepotID of the current window. + * In the case of airports, this is the station ID. + * @return Depot or station ID of this window. + */ + inline uint16 GetDepotIndex() const + { + return (this->type == VEH_AIRCRAFT) ? ::GetStationIndex(this->window_number) : ::GetDepotIndex(this->window_number); + } + virtual EventState OnHotkey(int hotkey) { if (this->owner != _local_company) return ES_NOT_HANDLED; diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index 1244f99aba..cc245b38fe 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -110,7 +110,7 @@ void DisasterVehicle::UpdateImage() { SpriteID img = this->image_override; if (img == 0) img = _disaster_images[this->subtype][this->direction]; - this->sprite_seq.Set(img); + this->sprite_cache.sprite_seq.Set(img); } /** @@ -193,7 +193,7 @@ void DisasterVehicle::UpdatePosition(int x, int y, int z) int safe_y = Clamp(y - 1, 0, MapMaxY() * TILE_SIZE); u->x_pos = x; - u->y_pos = y - 1 - (max(z - GetSlopePixelZ(safe_x, safe_y), 0) >> 3); + u->y_pos = y - 1 - (std::max(z - GetSlopePixelZ(safe_x, safe_y), 0) >> 3); safe_y = Clamp(u->y_pos, 0, MapMaxY() * TILE_SIZE); u->z_pos = GetSlopePixelZ(safe_x, safe_y); u->direction = this->direction; @@ -243,7 +243,7 @@ static bool DisasterTick_Zeppeliner(DisasterVehicle *v) v->age = 0; SetDParam(0, GetStationIndex(v->tile)); - AddVehicleNewsItem(STR_NEWS_DISASTER_ZEPPELIN, NT_ACCIDENT, v->index); // Delete the news, when the zeppelin is gone + AddTileNewsItem(STR_NEWS_DISASTER_ZEPPELIN, NT_ACCIDENT, v->tile); AI::NewEvent(GetTileOwner(v->tile), new ScriptEventDisasterZeppelinerCrashed(GetStationIndex(v->tile))); } } @@ -377,7 +377,7 @@ static bool DisasterTick_Ufo(DisasterVehicle *v) if (u->crashed_ctr == 0) { u->Crash(); - AddVehicleNewsItem(STR_NEWS_DISASTER_SMALL_UFO, NT_ACCIDENT, u->index); // delete the news, when the roadvehicle is gone + AddTileNewsItem(STR_NEWS_DISASTER_SMALL_UFO, NT_ACCIDENT, u->tile); AI::NewEvent(u->owner, new ScriptEventVehicleCrashed(u->index, u->tile, ScriptEventVehicleCrashed::CRASH_RV_UFO)); Game::NewEvent(new ScriptEventVehicleCrashed(u->index, u->tile, ScriptEventVehicleCrashed::CRASH_RV_UFO)); @@ -456,7 +456,7 @@ static bool DisasterTick_Aircraft(DisasterVehicle *v, uint16 image_override, boo DestructIndustry(i); SetDParam(0, i->town->index); - AddIndustryNewsItem(news_message, NT_ACCIDENT, i->index); // delete the news, when the industry closes + AddIndustryNewsItem(news_message, NT_ACCIDENT, i->index); if (_settings_client.sound.disaster) SndPlayTileFx(SND_12_EXPLOSION, i->location.tile); } } else if (v->current_order.GetDestination() == 0) { @@ -498,7 +498,7 @@ static bool DisasterTick_Helicopter_Rotors(DisasterVehicle *v) v->tick_counter++; if (HasBit(v->tick_counter, 0)) return true; - SpriteID &cur_image = v->sprite_seq.seq[0].sprite; + SpriteID &cur_image = v->sprite_cache.sprite_seq.seq[0].sprite; if (++cur_image > SPR_ROTOR_MOVING_3) cur_image = SPR_ROTOR_MOVING_1; v->UpdatePositionAndViewport(); diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index 58cf897bfa..b8918411e8 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -45,13 +45,13 @@ void CcBuildDocks(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p { if (result.Failed()) return; - if (_settings_client.sound.confirm) SndPlayTileFx(SND_02_SPLAT_WATER, tile); + if (_settings_client.sound.confirm) SndPlayTileFx(SND_02_CONSTRUCTION_WATER, tile); if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace(); } -void CcPlaySound_SPLAT_WATER(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd) +void CcPlaySound_CONSTRUCTION_WATER(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd) { - if (result.Succeeded() && _settings_client.sound.confirm) SndPlayTileFx(SND_02_SPLAT_WATER, tile); + if (result.Succeeded() && _settings_client.sound.confirm) SndPlayTileFx(SND_02_CONSTRUCTION_WATER, tile); } @@ -75,7 +75,7 @@ static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = n /* Direction the aqueduct is built to. */ TileIndexDiff offset = TileOffsByDiagDir(ReverseDiagDir(dir)); /* The maximum length of the aqueduct. */ - int max_length = min(_settings_game.construction.max_bridge_length, DistanceFromEdgeDir(tile_from, ReverseDiagDir(dir)) - 1); + int max_length = std::min(_settings_game.construction.max_bridge_length, DistanceFromEdgeDir(tile_from, ReverseDiagDir(dir)) - 1); TileIndex endtile = tile_from; for (int length = 0; IsValidTile(endtile) && TileX(endtile) != 0 && TileY(endtile) != 0; length++) { @@ -129,45 +129,55 @@ struct BuildDocksToolbarWindow : Window { DeleteWindowById(WC_BUILD_STATION, TRANSPORT_WATER); DeleteWindowById(WC_BUILD_DEPOT, TRANSPORT_WATER); } + + if (_game_mode != GM_EDITOR) { + if (!can_build) { + /* Show in the tooltip why this button is disabled. */ + this->GetWidget(WID_DT_DEPOT)->SetToolTip(STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE); + this->GetWidget(WID_DT_STATION)->SetToolTip(STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE); + this->GetWidget(WID_DT_BUOY)->SetToolTip(STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE); + } else { + this->GetWidget(WID_DT_DEPOT)->SetToolTip(STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP); + this->GetWidget(WID_DT_STATION)->SetToolTip(STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP); + this->GetWidget(WID_DT_BUOY)->SetToolTip(STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP); + } + } } void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_DT_CANAL: // Build canal button - HandlePlacePushButton(this, WID_DT_CANAL, SPR_CURSOR_CANAL, HT_RECT); + HandlePlacePushButton(this, WID_DT_CANAL, SPR_CURSOR_CANAL, HT_RECT, CM_DDSP_BUILD_CANNAL); break; case WID_DT_LOCK: // Build lock button - HandlePlacePushButton(this, WID_DT_LOCK, SPR_CURSOR_LOCK, HT_SPECIAL); + HandlePlacePushButton(this, WID_DT_LOCK, SPR_CURSOR_LOCK, HT_SPECIAL, CM_DDSP_BUILD_LOCK); break; case WID_DT_DEMOLISH: // Demolish aka dynamite button - HandlePlacePushButton(this, WID_DT_DEMOLISH, ANIMCURSOR_DEMOLISH, HT_RECT | HT_DIAGONAL); + HandlePlacePushButton(this, WID_DT_DEMOLISH, ANIMCURSOR_DEMOLISH, HT_RECT | HT_DIAGONAL, CM_DDSP_DEMOLISH); break; case WID_DT_DEPOT: // Build depot button - if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return; - if (HandlePlacePushButton(this, WID_DT_DEPOT, SPR_CURSOR_SHIP_DEPOT, HT_RECT)) ShowBuildDocksDepotPicker(this); + if (HandlePlacePushButton(this, WID_DT_DEPOT, SPR_CURSOR_SHIP_DEPOT, HT_RECT, CM_DDSP_BUILD_SHIP_DEPOT)) ShowBuildDocksDepotPicker(this); break; case WID_DT_STATION: // Build station button - if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return; - if (HandlePlacePushButton(this, WID_DT_STATION, SPR_CURSOR_DOCK, HT_SPECIAL)) ShowBuildDockStationPicker(this); + if (HandlePlacePushButton(this, WID_DT_STATION, SPR_CURSOR_DOCK, HT_SPECIAL, CM_DDSP_BUILD_DOCK)) ShowBuildDockStationPicker(this); break; case WID_DT_BUOY: // Build buoy button - if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return; - HandlePlacePushButton(this, WID_DT_BUOY, SPR_CURSOR_BUOY, HT_RECT); + HandlePlacePushButton(this, WID_DT_BUOY, SPR_CURSOR_BUOY, HT_RECT, CM_DDSP_BUILD_BUOY); break; case WID_DT_RIVER: // Build river button (in scenario editor) if (_game_mode != GM_EDITOR) return; - HandlePlacePushButton(this, WID_DT_RIVER, SPR_CURSOR_RIVER, HT_RECT); + HandlePlacePushButton(this, WID_DT_RIVER, SPR_CURSOR_RIVER, HT_RECT, CM_DDSP_BUILD_RIVER); break; case WID_DT_BUILD_AQUEDUCT: // Build aqueduct button - HandlePlacePushButton(this, WID_DT_BUILD_AQUEDUCT, SPR_CURSOR_AQUEDUCT, HT_SPECIAL); + HandlePlacePushButton(this, WID_DT_BUILD_AQUEDUCT, SPR_CURSOR_AQUEDUCT, HT_SPECIAL, CM_DDSP_BUILD_AQUEDUCT); break; default: return; @@ -198,7 +208,7 @@ struct BuildDocksToolbarWindow : Window { case WID_DT_STATION: { // Build station button - if (_settings_client.gui.cm_use_improved_station_join) { + if (citymania::UseImprovedStationJoin()) { citymania::PlaceDock(tile); break; } @@ -245,10 +255,10 @@ struct BuildDocksToolbarWindow : Window { GUIPlaceProcDragXY(select_proc, start_tile, end_tile); break; case DDSP_CREATE_WATER: - DoCommandP(end_tile, start_tile, (_game_mode == GM_EDITOR && citymania::_fn_mod) ? WATER_CLASS_SEA : WATER_CLASS_CANAL, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_BUILD_CANALS), CcPlaySound_SPLAT_WATER); + DoCommandP(end_tile, start_tile, (_game_mode == GM_EDITOR && citymania::_fn_mod) ? WATER_CLASS_SEA : WATER_CLASS_CANAL, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_BUILD_CANALS), CcPlaySound_CONSTRUCTION_WATER); break; case DDSP_CREATE_RIVER: - DoCommandP(end_tile, start_tile, WATER_CLASS_RIVER, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_PLACE_RIVERS), CcPlaySound_SPLAT_WATER); + DoCommandP(end_tile, start_tile, WATER_CLASS_RIVER, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_PLACE_RIVERS), CcPlaySound_CONSTRUCTION_WATER); break; default: break; diff --git a/src/driver.cpp b/src/driver.cpp index a642a2f867..cfda1d3d3e 100644 --- a/src/driver.cpp +++ b/src/driver.cpp @@ -9,23 +9,27 @@ #include "stdafx.h" #include "debug.h" +#include "error.h" #include "sound/sound_driver.hpp" #include "music/music_driver.hpp" #include "video/video_driver.hpp" #include "string_func.h" +#include "table/strings.h" +#include +#include #include "safeguards.h" -char *_ini_videodriver; ///< The video driver a stored in the configuration file. +std::string _ini_videodriver; ///< The video driver a stored in the configuration file. std::vector _resolutions; ///< List of resolutions. Dimension _cur_resolution; ///< The current resolution. bool _rightclick_emulate; ///< Whether right clicking is emulated. -char *_ini_sounddriver; ///< The sound driver a stored in the configuration file. +std::string _ini_sounddriver; ///< The sound driver a stored in the configuration file. -char *_ini_musicdriver; ///< The music driver a stored in the configuration file. +std::string _ini_musicdriver; ///< The music driver a stored in the configuration file. -char *_ini_blitter; ///< The blitter as stored in the configuration file. +std::string _ini_blitter; ///< The blitter as stored in the configuration file. bool _blitter_autodetected; ///< Was the blitter autodetected or specified by the user? /** @@ -34,19 +38,15 @@ bool _blitter_autodetected; ///< Was the blitter autodetected or specif * @param name The parameter name we're looking for. * @return The parameter value. */ -const char *GetDriverParam(const char * const *parm, const char *name) +const char *GetDriverParam(const StringList &parm, const char *name) { - size_t len; + if (parm.empty()) return nullptr; - if (parm == nullptr) return nullptr; - - len = strlen(name); - for (; *parm != nullptr; parm++) { - const char *p = *parm; - - if (strncmp(p, name, len) == 0) { - if (p[len] == '=') return p + len + 1; - if (p[len] == '\0') return p + len; + size_t len = strlen(name); + for (auto &p : parm) { + if (p.compare(0, len, name) == 0) { + if (p.length() == len) return ""; + if (p[len] == '=') return p.c_str() + len + 1; } } return nullptr; @@ -58,7 +58,7 @@ const char *GetDriverParam(const char * const *parm, const char *name) * @param name The parameter name we're looking for. * @return The parameter value. */ -bool GetDriverParamBool(const char * const *parm, const char *name) +bool GetDriverParamBool(const StringList &parm, const char *name) { return GetDriverParam(parm, name) != nullptr; } @@ -70,7 +70,7 @@ bool GetDriverParamBool(const char * const *parm, const char *name) * @param def The default value if the parameter doesn't exist. * @return The parameter value. */ -int GetDriverParamInt(const char * const *parm, const char *name, int def) +int GetDriverParamInt(const StringList &parm, const char *name, int def) { const char *p = GetDriverParam(parm, name); return p != nullptr ? atoi(p) : def; @@ -82,12 +82,12 @@ int GetDriverParamInt(const char * const *parm, const char *name, int def) * @param type the type of driver to select * @post Sets the driver so GetCurrentDriver() returns it too. */ -void DriverFactoryBase::SelectDriver(const char *name, Driver::Type type) +void DriverFactoryBase::SelectDriver(const std::string &name, Driver::Type type) { if (!DriverFactoryBase::SelectDriverImpl(name, type)) { - StrEmpty(name) ? + name.empty() ? usererror("Failed to autoprobe %s driver", GetDriverTypeName(type)) : - usererror("Failed to select requested %s driver '%s'", GetDriverTypeName(type), name); + usererror("Failed to select requested %s driver '%s'", GetDriverTypeName(type), name.c_str()); } } @@ -98,11 +98,11 @@ void DriverFactoryBase::SelectDriver(const char *name, Driver::Type type) * @post Sets the driver so GetCurrentDriver() returns it too. * @return True upon success, otherwise false. */ -bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) +bool DriverFactoryBase::SelectDriverImpl(const std::string &name, Driver::Type type) { if (GetDrivers().size() == 0) return false; - if (StrEmpty(name)) { + if (name.empty()) { /* Probe for this driver, but do not fall back to dedicated/null! */ for (int priority = 10; priority > 0; priority--) { Drivers::iterator it = GetDrivers().begin(); @@ -113,11 +113,13 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) if (d->type != type) continue; if (d->priority != priority) continue; + if (type == Driver::DT_VIDEO && !_video_hw_accel && d->UsesHardwareAcceleration()) continue; + Driver *oldd = *GetActiveDriver(type); Driver *newd = d->CreateInstance(); *GetActiveDriver(type) = newd; - const char *err = newd->Start(nullptr); + const char *err = newd->Start({}); if (err == nullptr) { DEBUG(driver, 1, "Successfully probed %s driver '%s'", GetDriverTypeName(type), d->name); delete oldd; @@ -127,27 +129,25 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) *GetActiveDriver(type) = oldd; DEBUG(driver, 1, "Probing %s driver '%s' failed with error: %s", GetDriverTypeName(type), d->name, err); delete newd; + + if (type == Driver::DT_VIDEO && _video_hw_accel && d->UsesHardwareAcceleration()) { + _video_hw_accel = false; + ErrorMessageData msg(STR_VIDEO_DRIVER_ERROR, STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION); + ScheduleErrorMessage(msg); + } } } usererror("Couldn't find any suitable %s driver", GetDriverTypeName(type)); } else { - char *parm; - char buffer[256]; - const char *parms[32]; - /* Extract the driver name and put parameter list in parm */ - strecpy(buffer, name, lastof(buffer)); - parm = strchr(buffer, ':'); - parms[0] = nullptr; - if (parm != nullptr) { - uint np = 0; - /* Tokenize the parm. */ - do { - *parm++ = '\0'; - if (np < lengthof(parms) - 1) parms[np++] = parm; - while (*parm != '\0' && *parm != ',') parm++; - } while (*parm == ','); - parms[np] = nullptr; + std::istringstream buffer(name); + std::string dname; + std::getline(buffer, dname, ':'); + + std::string param; + std::vector parms; + while (std::getline(buffer, param, ',')) { + parms.push_back(param); } /* Find this driver */ @@ -159,7 +159,7 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) if (d->type != type) continue; /* Check driver name */ - if (strcasecmp(buffer, d->name) != 0) continue; + if (strcasecmp(dname.c_str(), d->name) != 0) continue; /* Found our driver, let's try it */ Driver *newd = d->CreateInstance(); @@ -175,7 +175,7 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) *GetActiveDriver(type) = newd; return true; } - usererror("No such %s driver: %s\n", GetDriverTypeName(type), buffer); + usererror("No such %s driver: %s\n", GetDriverTypeName(type), dname.c_str()); } } @@ -221,10 +221,9 @@ DriverFactoryBase::DriverFactoryBase(Driver::Type type, int priority, const char strecpy(buf, GetDriverTypeName(type), lastof(buf)); strecpy(buf + 5, name, lastof(buf)); - const char *longname = stredup(buf); - - std::pair P = GetDrivers().insert(Drivers::value_type(longname, this)); - assert(P.second); + Drivers &drivers = GetDrivers(); + assert(drivers.find(buf) == drivers.end()); + drivers.insert(Drivers::value_type(buf, this)); } /** @@ -240,10 +239,6 @@ DriverFactoryBase::~DriverFactoryBase() Drivers::iterator it = GetDrivers().find(buf); assert(it != GetDrivers().end()); - const char *longname = (*it).first; - GetDrivers().erase(it); - free(longname); - if (GetDrivers().empty()) delete &GetDrivers(); } diff --git a/src/driver.h b/src/driver.h index 3ac4f7f8a4..93aaf61550 100644 --- a/src/driver.h +++ b/src/driver.h @@ -12,11 +12,12 @@ #include "core/enum_type.hpp" #include "core/string_compare_type.hpp" +#include "string_type.h" #include -const char *GetDriverParam(const char * const *parm, const char *name); -bool GetDriverParamBool(const char * const *parm, const char *name); -int GetDriverParamInt(const char * const *parm, const char *name, int def); +const char *GetDriverParam(const StringList &parm, const char *name); +bool GetDriverParamBool(const StringList &parm, const char *name); +int GetDriverParamInt(const StringList &parm, const char *name, int def); /** A driver for communicating with the user. */ class Driver { @@ -26,7 +27,7 @@ public: * @param parm Parameters passed to the driver. * @return nullptr if everything went okay, otherwise an error message. */ - virtual const char *Start(const char * const *parm) = 0; + virtual const char *Start(const StringList &parm) = 0; /** * Stop this driver. @@ -66,7 +67,7 @@ private: const char *name; ///< The name of the drivers of this factory. const char *description; ///< The description of this driver. - typedef std::map Drivers; ///< Type for a map of drivers. + typedef std::map Drivers; ///< Type for a map of drivers. /** * Get the map with drivers. @@ -99,13 +100,22 @@ private: return driver_type_name[type]; } - static bool SelectDriverImpl(const char *name, Driver::Type type); + static bool SelectDriverImpl(const std::string &name, Driver::Type type); protected: DriverFactoryBase(Driver::Type type, int priority, const char *name, const char *description); virtual ~DriverFactoryBase(); + /** + * Does the driver use hardware acceleration (video-drivers only). + * @return True if the driver uses hardware acceleration. + */ + virtual bool UsesHardwareAcceleration() const + { + return false; + } + public: /** * Shuts down all active drivers @@ -118,7 +128,7 @@ public: } } - static void SelectDriver(const char *name, Driver::Type type); + static void SelectDriver(const std::string &name, Driver::Type type); static char *GetDriversInfo(char *p, const char *last); /** diff --git a/src/economy.cpp b/src/economy.cpp index 86abad9b6f..d047e81064 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -51,8 +51,8 @@ #include "table/strings.h" #include "table/pricebase.h" -#include "cargo_table_gui.h" +#include "citymania/cm_cargo_table_gui.hpp" #include "citymania/cm_main.hpp" #include "safeguards.h" @@ -138,7 +138,7 @@ Money CalculateCompanyValue(const Company *c, bool including_loan) if (including_loan) value -= c->current_loan; value += c->money; - return max(value, (Money)1); + return std::max(value, 1); } /** @@ -197,15 +197,15 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) /* Generate statistics depending on recent income statistics */ { - int numec = min(c->num_valid_stat_ent, 12); + int numec = std::min(c->num_valid_stat_ent, 12u); if (numec != 0) { const CompanyEconomyEntry *cee = c->old_economy; Money min_income = cee->income + cee->expenses; Money max_income = cee->income + cee->expenses; do { - min_income = min(min_income, cee->income + cee->expenses); - max_income = max(max_income, cee->income + cee->expenses); + min_income = std::min(min_income, cee->income + cee->expenses); + max_income = std::max(max_income, cee->income + cee->expenses); } while (++cee, --numec); if (min_income > 0) { @@ -218,7 +218,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) /* Generate score depending on amount of transported cargo */ { - int numec = min(c->num_valid_stat_ent, 4); + int numec = std::min(c->num_valid_stat_ent, 4u); if (numec != 0) { const CompanyEconomyEntry *cee = c->old_economy; OverflowSafeInt64 total_delivered = 0; @@ -292,7 +292,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) if (_networking) NetworkClientsToSpectators(old_owner); if (old_owner == _local_company) { /* Single player cheated to AI company. - * There are no spectators in single player, so we must pick some other company. */ + * There are no spectators in singleplayer mode, so we must pick some other company. */ assert(!_networking); Backup cur_company2(_current_company, FILE_LINE); for (const Company *c : Company::Iterate()) { @@ -364,7 +364,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) if (HasBit(t->have_ratings, old_owner)) { if (HasBit(t->have_ratings, new_owner)) { /* use max of the two ratings. */ - t->ratings[new_owner] = max(t->ratings[new_owner], t->ratings[old_owner]); + t->ratings[new_owner] = std::max(t->ratings[new_owner], t->ratings[old_owner]); } else { SetBit(t->have_ratings, new_owner); t->ratings[new_owner] = t->ratings[old_owner]; @@ -610,7 +610,7 @@ static void CompanyCheckBankrupt(Company *c) default: case 10: { if (!_networking && _local_company == c->index) { - /* If we are in offline mode, leave the company playing. Eg. there + /* If we are in singleplayer mode, leave the company playing. Eg. there * is no THE-END, otherwise mark the client as spectator to make sure * he/she is no long in control of this company. However... when you * join another company (cheat) the "unowned" company can bankrupt. */ @@ -727,7 +727,7 @@ bool AddInflation(bool check_year) * inflation doesn't add anything after that either; it even makes playing * it impossible due to the diverging cost and income rates. */ - if (check_year && (_cur_year - _settings_game.game_creation.starting_year) >= (ORIGINAL_MAX_YEAR - ORIGINAL_BASE_YEAR)) return true; + if (check_year && (_cur_year < ORIGINAL_BASE_YEAR || _cur_year >= ORIGINAL_MAX_YEAR)) return true; if (_economy.inflation_prices == MAX_INFLATION || _economy.inflation_payment == MAX_INFLATION) return true; @@ -751,7 +751,7 @@ bool AddInflation(bool check_year) void RecomputePrices() { /* Setup maximum loan */ - _economy.max_loan = (_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / 50000 * 50000; + _economy.max_loan = ((uint64)_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / 50000 * 50000; /* Setup price bases */ for (Price i = PR_BEGIN; i < PR_END; i++) { @@ -916,9 +916,17 @@ void StartupEconomy() { _economy.interest_rate = _settings_game.difficulty.initial_interest; _economy.infl_amount = _settings_game.difficulty.initial_interest; - _economy.infl_amount_pr = max(0, _settings_game.difficulty.initial_interest - 1); + _economy.infl_amount_pr = std::max(0, _settings_game.difficulty.initial_interest - 1); _economy.fluct = GB(Random(), 0, 8) + 168; + if (_settings_game.economy.inflation) { + /* Apply inflation that happened before our game start year. */ + int months = (std::min(_cur_year, ORIGINAL_MAX_YEAR) - ORIGINAL_BASE_YEAR) * 12; + for (int i = 0; i < months; i++) { + AddInflation(false); + } + } + /* Set up prices */ RecomputePrices(); @@ -970,7 +978,7 @@ Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, C /* Use callback to calculate cargo profit, if available */ if (HasBit(cs->callback_mask, CBM_CARGO_PROFIT_CALC)) { - uint32 var18 = min(dist, 0xFFFF) | (min(num_pieces, 0xFF) << 16) | (transit_days << 24); + uint32 var18 = std::min(dist, 0xFFFFu) | (std::min(num_pieces, 0xFFu) << 16) | (transit_days << 24); uint16 callback = GetCargoCallback(CBID_CARGO_PROFIT_CALC, 0, var18, cs); if (callback != CALLBACK_FAILED) { int result = GB(callback, 0, 14); @@ -990,8 +998,8 @@ Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, C const int days1 = cs->transit_days[0]; const int days2 = cs->transit_days[1]; - const int days_over_days1 = max( transit_days - days1, 0); - const int days_over_days2 = max(days_over_days1 - days2, 0); + const int days_over_days1 = std::max( transit_days - days1, 0); + const int days_over_days2 = std::max(days_over_days1 - days2, 0); /* * The time factor is calculated based on the time it took @@ -1003,7 +1011,7 @@ Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, C * - linear decreasing with time with a slope of -2 for slow transports * */ - const int time_factor = max(MAX_TIME_FACTOR - days_over_days1 - days_over_days2, MIN_TIME_FACTOR); + const int time_factor = std::max(MAX_TIME_FACTOR - days_over_days1 - days_over_days2, MIN_TIME_FACTOR); return BigMulS(dist * time_factor * num_pieces, cs->current_payment, 21); } @@ -1047,10 +1055,12 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n /* Check if industry temporarily refuses acceptance */ if (IndustryTemporarilyRefusesCargo(ind, cargo_type)) continue; + if (ind->exclusive_supplier != INVALID_OWNER && ind->exclusive_supplier != st->owner) continue; + /* Insert the industry into _cargo_delivery_destinations, if not yet contained */ include(_cargo_delivery_destinations, ind); - uint amount = min(num_pieces, 0xFFFFU - ind->incoming_cargo_waiting[cargo_index]); + uint amount = std::min(num_pieces, 0xFFFFu - ind->incoming_cargo_waiting[cargo_index]); ind->incoming_cargo_waiting[cargo_index] += amount; ind->last_cargo_accepted_at[cargo_index] = _date; num_pieces -= amount; @@ -1163,7 +1173,7 @@ static void TriggerIndustryProduction(Industry *i) if (cargo_waiting == 0) continue; for (uint ci_out = 0; ci_out < lengthof(i->produced_cargo_waiting); ci_out++) { - i->produced_cargo_waiting[ci_out] = min(i->produced_cargo_waiting[ci_out] + (cargo_waiting * indspec->input_cargo_multiplier[ci_in][ci_out] / 256), 0xFFFF); + i->produced_cargo_waiting[ci_out] = std::min(i->produced_cargo_waiting[ci_out] + (cargo_waiting * indspec->input_cargo_multiplier[ci_in][ci_out] / 256), 0xFFFFu); } i->incoming_cargo_waiting[ci_in] = 0; @@ -1271,7 +1281,7 @@ void PrepareUnload(Vehicle *front_v) assert(front_v->cargo_payment == nullptr); /* One CargoPayment per vehicle and the vehicle limit equals the * limit in number of CargoPayments. Can't go wrong. */ - assert_compile(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE); + static_assert(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE); assert(CargoPayment::CanAllocateItem()); front_v->cargo_payment = new CargoPayment(front_v); @@ -1330,7 +1340,7 @@ static uint GetLoadAmount(Vehicle *v) if (HasBit(e->info.misc_flags, EF_NO_DEFAULT_CARGO_MULTIPLIER) && !air_mail) load_amount = CeilDiv(load_amount * CargoSpec::Get(v->cargo_type)->multiplier, 0x100); /* Zero load amount breaks a lot of things. */ - return max(1u, load_amount); + return std::max(1u, load_amount); } /** @@ -1609,7 +1619,7 @@ static void UpdateLoadUnloadTicks(Vehicle *front, const Station *st, int ticks) } } /* Always wait at least 1, otherwise we'll wait 'infinitively' long. */ - front->load_unload_ticks = max(1, ticks); + front->load_unload_ticks = std::max(1, ticks); } /** @@ -1670,7 +1680,7 @@ static void LoadUnloadVehicle(Vehicle *front) if (HasBit(v->vehicle_flags, VF_CARGO_UNLOADING) && (front->current_order.GetUnloadType() & OUFB_NO_UNLOAD) == 0) { uint cargo_count = v->cargo.UnloadCount(); - uint amount_unloaded = _settings_game.order.gradual_loading ? min(cargo_count, GetLoadAmount(v)) : cargo_count; + uint amount_unloaded = _settings_game.order.gradual_loading ? std::min(cargo_count, GetLoadAmount(v)) : cargo_count; bool remaining = false; // Are there cargo entities in this vehicle that can still be unloaded here? assert(payment != nullptr); @@ -1766,8 +1776,8 @@ static void LoadUnloadVehicle(Vehicle *front) } /* if last speed is 0, we treat that as if no vehicle has ever visited the station. */ - ge->last_speed = min(t, 255); - ge->last_age = min(_cur_year - front->build_year, 255); + ge->last_speed = std::min(t, 255); + ge->last_age = std::min(_cur_year - front->build_year, 255); assert(v->cargo_cap >= v->cargo.StoredCount()); /* Capacity available for loading more cargo. */ @@ -1781,7 +1791,7 @@ static void LoadUnloadVehicle(Vehicle *front) * has capacity for it, load it on the vehicle. */ if ((v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0) && MayLoadUnderExclusiveRights(st, v)) { if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO); - if (_settings_game.order.gradual_loading) cap_left = min(cap_left, GetLoadAmount(v)); + if (_settings_game.order.gradual_loading) cap_left = std::min(cap_left, GetLoadAmount(v)); uint loaded = ge->cargo.Load(cap_left, &v->cargo, st->xy, next_station); if (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0) { @@ -1855,7 +1865,7 @@ static void LoadUnloadVehicle(Vehicle *front) /* We loaded less cargo than possible for all cargo types and it's not full * load and we're not supposed to wait any longer: stop loading. */ if (!anything_unloaded && full_load_amount == 0 && reservation_left == 0 && !(front->current_order.GetLoadType() & OLFB_FULL_LOAD) && - front->current_order_time >= (uint)max(front->current_order.GetTimetabledWait() - front->lateness_counter, 0)) { + front->current_order_time >= (uint)std::max(front->current_order.GetTimetabledWait() - front->lateness_counter, 0)) { SetBit(front->vehicle_flags, VF_STOP_LOADING); } @@ -2127,7 +2137,7 @@ CommandCost CmdBuyCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 /* Disable takeovers when not asked */ if (!HasBit(c->bankrupt_asked, _current_company)) return CMD_ERROR; - /* Disable taking over the local company in single player */ + /* Disable taking over the local company in singleplayer mode */ if (!_networking && _local_company == c->index) return CMD_ERROR; /* Do not allow companies to take over themselves */ diff --git a/src/economy_func.h b/src/economy_func.h index d26b344e9a..69980b4758 100644 --- a/src/economy_func.h +++ b/src/economy_func.h @@ -29,7 +29,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update); void StartupIndustryDailyChanges(bool init_counter); Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type); -uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, SourceID source_id, const StationList *all_stations); +uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, SourceID source_id, const StationList *all_stations, Owner exclusivity = INVALID_OWNER); void PrepareUnload(Vehicle *front_v); void LoadUnloadStation(Station *st); diff --git a/src/economy_type.h b/src/economy_type.h index 87e4482672..85a1bbe4fc 100644 --- a/src/economy_type.h +++ b/src/economy_type.h @@ -15,6 +15,15 @@ typedef OverflowSafeInt64 Money; +/** Type of the game economy. */ +enum EconomyType : uint8 { + ET_BEGIN = 0, + ET_ORIGINAL = 0, + ET_SMOOTH = 1, + ET_FROZEN = 2, + ET_END = 3, +}; + /** Data of the economy. */ struct Economy { Money max_loan; ///< NOSAVE: Maximum possible loan @@ -187,6 +196,8 @@ struct PriceBaseSpec { /** The "steps" in loan size, in British Pounds! */ static const int LOAN_INTERVAL = 10000; +/** The size of loan for a new company, in British Pounds! */ +static const int64 INITIAL_LOAN = 100000; /** * Maximum inflation (including fractional part) without causing overflows in int64 price computations. @@ -211,6 +222,10 @@ static const int INVALID_PRICE_MODIFIER = MIN_PRICE_MODIFIER - 1; static const uint TUNNELBRIDGE_TRACKBIT_FACTOR = 4; /** Multiplier for how many regular track bits a level crossing counts. */ static const uint LEVELCROSSING_TRACKBIT_FACTOR = 2; +/** Multiplier for how many regular track bits a road depot counts. */ +static const uint ROAD_DEPOT_TRACKBIT_FACTOR = 2; +/** Multiplier for how many regular track bits a bay stop counts. */ +static const uint ROAD_STOP_TRACKBIT_FACTOR = 2; /** Multiplier for how many regular tiles a lock counts. */ static const uint LOCK_DEPOT_TILE_FACTOR = 2; diff --git a/src/effectvehicle.cpp b/src/effectvehicle.cpp index f11a92e5d6..9f1f070172 100644 --- a/src/effectvehicle.cpp +++ b/src/effectvehicle.cpp @@ -28,8 +28,8 @@ */ static bool IncrementSprite(EffectVehicle *v, SpriteID last) { - if (v->sprite_seq.seq[0].sprite != last) { - v->sprite_seq.seq[0].sprite++; + if (v->sprite_cache.sprite_seq.seq[0].sprite != last) { + v->sprite_cache.sprite_seq.seq[0].sprite++; return true; } else { return false; @@ -39,7 +39,7 @@ static bool IncrementSprite(EffectVehicle *v, SpriteID last) static void ChimneySmokeInit(EffectVehicle *v) { uint32 r = Random(); - v->sprite_seq.Set(SPR_CHIMNEY_SMOKE_0 + GB(r, 0, 3)); + v->sprite_cache.sprite_seq.Set(SPR_CHIMNEY_SMOKE_0 + GB(r, 0, 3)); v->progress = GB(r, 16, 3); } @@ -55,7 +55,7 @@ static bool ChimneySmokeTick(EffectVehicle *v) } if (!IncrementSprite(v, SPR_CHIMNEY_SMOKE_7)) { - v->sprite_seq.Set(SPR_CHIMNEY_SMOKE_0); + v->sprite_cache.sprite_seq.Set(SPR_CHIMNEY_SMOKE_0); } v->progress = 7; v->UpdatePositionAndViewport(); @@ -66,7 +66,7 @@ static bool ChimneySmokeTick(EffectVehicle *v) static void SteamSmokeInit(EffectVehicle *v) { - v->sprite_seq.Set(SPR_STEAM_SMOKE_0); + v->sprite_cache.sprite_seq.Set(SPR_STEAM_SMOKE_0); v->progress = 12; } @@ -96,7 +96,7 @@ static bool SteamSmokeTick(EffectVehicle *v) static void DieselSmokeInit(EffectVehicle *v) { - v->sprite_seq.Set(SPR_DIESEL_SMOKE_0); + v->sprite_cache.sprite_seq.Set(SPR_DIESEL_SMOKE_0); v->progress = 0; } @@ -120,7 +120,7 @@ static bool DieselSmokeTick(EffectVehicle *v) static void ElectricSparkInit(EffectVehicle *v) { - v->sprite_seq.Set(SPR_ELECTRIC_SPARK_0); + v->sprite_cache.sprite_seq.Set(SPR_ELECTRIC_SPARK_0); v->progress = 1; } @@ -143,7 +143,7 @@ static bool ElectricSparkTick(EffectVehicle *v) static void SmokeInit(EffectVehicle *v) { - v->sprite_seq.Set(SPR_SMOKE_0); + v->sprite_cache.sprite_seq.Set(SPR_SMOKE_0); v->progress = 12; } @@ -173,7 +173,7 @@ static bool SmokeTick(EffectVehicle *v) static void ExplosionLargeInit(EffectVehicle *v) { - v->sprite_seq.Set(SPR_EXPLOSION_LARGE_0); + v->sprite_cache.sprite_seq.Set(SPR_EXPLOSION_LARGE_0); v->progress = 0; } @@ -193,7 +193,7 @@ static bool ExplosionLargeTick(EffectVehicle *v) static void BreakdownSmokeInit(EffectVehicle *v) { - v->sprite_seq.Set(SPR_BREAKDOWN_SMOKE_0); + v->sprite_cache.sprite_seq.Set(SPR_BREAKDOWN_SMOKE_0); v->progress = 0; } @@ -202,7 +202,7 @@ static bool BreakdownSmokeTick(EffectVehicle *v) v->progress++; if ((v->progress & 7) == 0) { if (!IncrementSprite(v, SPR_BREAKDOWN_SMOKE_3)) { - v->sprite_seq.Set(SPR_BREAKDOWN_SMOKE_0); + v->sprite_cache.sprite_seq.Set(SPR_BREAKDOWN_SMOKE_0); } v->UpdatePositionAndViewport(); } @@ -218,7 +218,7 @@ static bool BreakdownSmokeTick(EffectVehicle *v) static void ExplosionSmallInit(EffectVehicle *v) { - v->sprite_seq.Set(SPR_EXPLOSION_SMALL_0); + v->sprite_cache.sprite_seq.Set(SPR_EXPLOSION_SMALL_0); v->progress = 0; } @@ -238,7 +238,7 @@ static bool ExplosionSmallTick(EffectVehicle *v) static void BulldozerInit(EffectVehicle *v) { - v->sprite_seq.Set(SPR_BULLDOZER_NE); + v->sprite_cache.sprite_seq.Set(SPR_BULLDOZER_NE); v->progress = 0; v->animation_state = 0; v->animation_substate = 0; @@ -289,7 +289,7 @@ static bool BulldozerTick(EffectVehicle *v) if ((v->progress & 7) == 0) { const BulldozerMovement *b = &_bulldozer_movement[v->animation_state]; - v->sprite_seq.Set(SPR_BULLDOZER_NE + b->image); + v->sprite_cache.sprite_seq.Set(SPR_BULLDOZER_NE + b->image); v->x_pos += _inc_by_dir[b->direction].x; v->y_pos += _inc_by_dir[b->direction].y; @@ -311,7 +311,7 @@ static bool BulldozerTick(EffectVehicle *v) static void BubbleInit(EffectVehicle *v) { - v->sprite_seq.Set(SPR_BUBBLE_GENERATE_0); + v->sprite_cache.sprite_seq.Set(SPR_BUBBLE_GENERATE_0); v->spritenum = 0; v->progress = 0; } @@ -474,8 +474,8 @@ static bool BubbleTick(EffectVehicle *v) if ((v->progress & 3) != 0) return true; if (v->spritenum == 0) { - v->sprite_seq.seq[0].sprite++; - if (v->sprite_seq.seq[0].sprite < SPR_BUBBLE_GENERATE_3) { + v->sprite_cache.sprite_seq.seq[0].sprite++; + if (v->sprite_cache.sprite_seq.seq[0].sprite < SPR_BUBBLE_GENERATE_3) { v->UpdatePositionAndViewport(); return true; } @@ -499,7 +499,7 @@ static bool BubbleTick(EffectVehicle *v) if (b->y == 4 && b->x == 1) { if (v->z_pos > 180 || Chance16I(1, 96, Random())) { v->spritenum = 5; - if (_settings_client.sound.ambient) SndPlayVehicleFx(SND_2F_POP, v); + if (_settings_client.sound.ambient) SndPlayVehicleFx(SND_2F_BUBBLE_GENERATOR_FAIL, v); } anim_state = 0; } @@ -508,7 +508,7 @@ static bool BubbleTick(EffectVehicle *v) TileIndex tile; anim_state++; - if (_settings_client.sound.ambient) SndPlayVehicleFx(SND_31_EXTRACT, v); + if (_settings_client.sound.ambient) SndPlayVehicleFx(SND_31_BUBBLE_GENERATOR_SUCCESS, v); tile = TileVirtXY(v->x_pos, v->y_pos); if (IsTileType(tile, MP_INDUSTRY) && GetIndustryGfx(tile) == GFX_BUBBLE_CATCHER) AddAnimatedTile(tile); @@ -520,7 +520,7 @@ static bool BubbleTick(EffectVehicle *v) v->x_pos += b->x; v->y_pos += b->y; v->z_pos += b->z; - v->sprite_seq.Set(SPR_BUBBLE_0 + b->image); + v->sprite_cache.sprite_seq.Set(SPR_BUBBLE_0 + b->image); v->UpdatePositionAndViewport(); @@ -546,7 +546,7 @@ static EffectInitProc * const _effect_init_procs[] = { SmokeInit, // EV_BREAKDOWN_SMOKE_AIRCRAFT SmokeInit, // EV_COPPER_MINE_SMOKE }; -assert_compile(lengthof(_effect_init_procs) == EV_END); +static_assert(lengthof(_effect_init_procs) == EV_END); /** Functions for controlling effect vehicles at each tick. */ static EffectTickProc * const _effect_tick_procs[] = { @@ -563,7 +563,7 @@ static EffectTickProc * const _effect_tick_procs[] = { SmokeTick, // EV_BREAKDOWN_SMOKE_AIRCRAFT SmokeTick, // EV_COPPER_MINE_SMOKE }; -assert_compile(lengthof(_effect_tick_procs) == EV_END); +static_assert(lengthof(_effect_tick_procs) == EV_END); /** Transparency options affecting the effects. */ static const TransparencyOption _effect_transparency_options[] = { @@ -580,7 +580,7 @@ static const TransparencyOption _effect_transparency_options[] = { TO_INVALID, // EV_BREAKDOWN_SMOKE_AIRCRAFT TO_INDUSTRIES, // EV_COPPER_MINE_SMOKE }; -assert_compile(lengthof(_effect_transparency_options) == EV_END); +static_assert(lengthof(_effect_transparency_options) == EV_END); /** diff --git a/src/elrail.cpp b/src/elrail.cpp index 1e35978af6..44481dd313 100644 --- a/src/elrail.cpp +++ b/src/elrail.cpp @@ -124,6 +124,9 @@ static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override) */ static TrackBits MaskWireBits(TileIndex t, TrackBits tracks) { + /* Single track bits are never masked out. */ + if (likely(HasAtMostOneBit(tracks))) return tracks; + if (!IsPlainRailTile(t)) return tracks; TrackdirBits neighbour_tdb = TRACKDIR_BIT_NONE; @@ -229,7 +232,8 @@ static int GetPCPElevation(TileIndex tile, DiagDirection PCPpos) * Also note that the result of GetSlopePixelZ() is very special on bridge-ramps. */ - int z = GetSlopePixelZ(TileX(tile) * TILE_SIZE + min(x_pcp_offsets[PCPpos], TILE_SIZE - 1), TileY(tile) * TILE_SIZE + min(y_pcp_offsets[PCPpos], TILE_SIZE - 1)); + int z = GetSlopePixelZ(TileX(tile) * TILE_SIZE + std::min(x_pcp_offsets[PCPpos], TILE_SIZE - 1), + TileY(tile) * TILE_SIZE + std::min(y_pcp_offsets[PCPpos], TILE_SIZE - 1)); return (z + 2) & ~3; // this means z = (z + TILE_HEIGHT / 4) / (TILE_HEIGHT / 2) * (TILE_HEIGHT / 2); } diff --git a/src/engine.cpp b/src/engine.cpp index c3e9329fb7..60b0d42224 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -62,12 +62,11 @@ const uint8 _engine_offsets[4] = { lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_info) + lengthof(_orig_ship_vehicle_info), }; -assert_compile(lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_info) + lengthof(_orig_ship_vehicle_info) + lengthof(_orig_aircraft_vehicle_info) == lengthof(_orig_engine_info)); +static_assert(lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_info) + lengthof(_orig_ship_vehicle_info) + lengthof(_orig_aircraft_vehicle_info) == lengthof(_orig_engine_info)); const uint EngineOverrideManager::NUM_DEFAULT_ENGINES = _engine_counts[VEH_TRAIN] + _engine_counts[VEH_ROAD] + _engine_counts[VEH_SHIP] + _engine_counts[VEH_AIRCRAFT]; Engine::Engine() : - name(nullptr), overrides_count(0), overrides(nullptr) { @@ -140,7 +139,6 @@ Engine::Engine(VehicleType type, EngineID base) Engine::~Engine() { UnloadWagonOverrides(this); - free(this->name); } /** @@ -488,8 +486,7 @@ void EngineOverrideManager::ResetToDefaultMapping() this->clear(); for (VehicleType type = VEH_TRAIN; type <= VEH_AIRCRAFT; type++) { for (uint internal_id = 0; internal_id < _engine_counts[type]; internal_id++) { - /*C++17: EngineIDMapping &eid = */ this->emplace_back(); - EngineIDMapping &eid = this->back(); + EngineIDMapping &eid = this->emplace_back(); eid.type = type; eid.grfid = INVALID_GRFID; eid.internal_id = internal_id; @@ -552,6 +549,7 @@ void SetupEngines() * in any case, and we just cleaned the pool. */ assert(Engine::CanAllocateItem()); const Engine *e = new Engine(eid.type, eid.internal_id); + (void)e; // assert only assert(e->index == index); index++; } @@ -581,7 +579,7 @@ static void CalcEngineReliability(Engine *e) /* Check for early retirement */ if (e->company_avail != 0 && !_settings_game.vehicle.never_expire_vehicles && e->info.base_life != 0xFF) { int retire_early = e->info.retire_early; - uint retire_early_max_age = max(0, e->duration_phase_1 + e->duration_phase_2 - retire_early * 12); + uint retire_early_max_age = std::max(0, e->duration_phase_1 + e->duration_phase_2 - retire_early * 12); if (retire_early != 0 && age >= retire_early_max_age) { /* Early retirement is enabled and we're past the date... */ e->company_avail = 0; @@ -628,7 +626,7 @@ void SetYearEngineAgingStops() YearMonthDay ymd; ConvertDateToYMD(ei->base_intro + (ei->lifelength * DAYS_IN_LEAP_YEAR) / 2, &ymd); - _year_engine_aging_stops = max(_year_engine_aging_stops, ymd.year); + _year_engine_aging_stops = std::max(_year_engine_aging_stops, ymd.year); } } @@ -646,9 +644,8 @@ void StartupOneEngine(Engine *e, Date aging_date) e->company_avail = 0; e->company_hidden = 0; - /* Don't randomise the start-date in the first two years after gamestart to ensure availability - * of engines in early starting games. - * Note: TTDP uses fixed 1922 */ + /* Vehicles with the same base_intro date shall be introduced at the same time. + * Make sure they use the same randomisation of the date. */ SavedRandomSeeds saved_seeds; SaveRandomSeeds(&saved_seeds); SetRandomSeed(_settings_game.game_creation.generation_seed ^ @@ -657,6 +654,9 @@ void StartupOneEngine(Engine *e, Date aging_date) e->GetGRFID()); uint32 r = Random(); + /* Don't randomise the start-date in the first two years after gamestart to ensure availability + * of engines in early starting games. + * Note: TTDP uses fixed 1922 */ e->intro_date = ei->base_intro <= ConvertYMDToDate(_settings_game.game_creation.starting_year + 2, 0, 1) ? ei->base_intro : (Date)GB(r, 0, 9) + ei->base_intro; if (e->intro_date <= _date) { e->age = (aging_date - e->intro_date) >> 5; @@ -664,19 +664,20 @@ void StartupOneEngine(Engine *e, Date aging_date) e->flags |= ENGINE_AVAILABLE; } - e->reliability_start = GB(r, 16, 14) + 0x7AE0; - r = Random(); - e->reliability_max = GB(r, 0, 14) + 0xBFFF; - e->reliability_final = GB(r, 16, 14) + 0x3FFF; + RestoreRandomSeeds(saved_seeds); r = Random(); + e->reliability_start = GB(r, 16, 14) + 0x7AE0; + e->reliability_max = GB(r, 0, 14) + 0xBFFF; + + r = Random(); + e->reliability_final = GB(r, 16, 14) + 0x3FFF; e->duration_phase_1 = GB(r, 0, 5) + 7; e->duration_phase_2 = GB(r, 5, 4) + ei->base_life * 12 - 96; e->duration_phase_3 = GB(r, 9, 7) + 120; e->reliability_spd_dec = ei->decay_speed << 2; - RestoreRandomSeeds(saved_seeds); CalcEngineReliability(e); /* prevent certain engines from ever appearing. */ @@ -693,7 +694,7 @@ void StartupOneEngine(Engine *e, Date aging_date) void StartupEngines() { /* Aging of vehicles stops, so account for that when starting late */ - const Date aging_date = min(_date, ConvertYMDToDate(_year_engine_aging_stops, 0, 1)); + const Date aging_date = std::min(_date, ConvertYMDToDate(_year_engine_aging_stops, 0, 1)); for (Engine *e : Engine::Iterate()) { StartupOneEngine(e, aging_date); @@ -721,11 +722,9 @@ static void EnableEngineForCompany(EngineID eid, CompanyID company) SetBit(e->company_avail, company); if (e->type == VEH_TRAIN) { - assert(e->u.rail.railtype < RAILTYPE_END); - c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date); + c->avail_railtypes = GetCompanyRailtypes(c->index); } else if (e->type == VEH_ROAD) { - assert(e->u.road.roadtype < ROADTYPE_END); - c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, _date); + c->avail_roadtypes = GetCompanyRoadTypes(c->index); } if (company == _local_company) { @@ -735,6 +734,7 @@ static void EnableEngineForCompany(EngineID eid, CompanyID company) InvalidateWindowData(WC_MAIN_TOOLBAR, 0); if (e->type == VEH_ROAD) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_ROAD); if (e->type == VEH_SHIP) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_WATER); + if (e->type == VEH_AIRCRAFT) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_AIR); } } @@ -746,8 +746,14 @@ static void EnableEngineForCompany(EngineID eid, CompanyID company) static void DisableEngineForCompany(EngineID eid, CompanyID company) { Engine *e = Engine::Get(eid); + Company *c = Company::Get(company); ClrBit(e->company_avail, company); + if (e->type == VEH_TRAIN) { + c->avail_railtypes = GetCompanyRailtypes(c->index); + } else if (e->type == VEH_ROAD) { + c->avail_roadtypes = GetCompanyRoadTypes(c->index); + } if (company == _local_company) { AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type); @@ -996,8 +1002,7 @@ static void NewVehicleAvailable(Engine *e) if (e->type == VEH_TRAIN) { /* maybe make another rail type available */ - RailType railtype = e->u.rail.railtype; - assert(railtype < RAILTYPE_END); + assert(e->u.rail.railtype < RAILTYPE_END); for (Company *c : Company::Iterate()) c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date); } else if (e->type == VEH_ROAD) { /* maybe make another road type available */ @@ -1018,6 +1023,7 @@ static void NewVehicleAvailable(Engine *e) /* Update the toolbar. */ if (e->type == VEH_ROAD) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_ROAD); if (e->type == VEH_SHIP) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_WATER); + if (e->type == VEH_AIRCRAFT) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_AIR); /* Close pending preview windows */ DeleteWindowById(WC_ENGINE_PREVIEW, index); @@ -1069,7 +1075,7 @@ void EnginesMonthlyLoop() static bool IsUniqueEngineName(const char *name) { for (const Engine *e : Engine::Iterate()) { - if (e->name != nullptr && strcmp(e->name, name) == 0) return false; + if (!e->name.empty() && e->name == name) return false; } return true; @@ -1097,12 +1103,10 @@ CommandCost CmdRenameEngine(TileIndex tile, DoCommandFlag flags, uint32 p1, uint } if (flags & DC_EXEC) { - free(e->name); - if (reset) { - e->name = nullptr; + e->name.clear(); } else { - e->name = stredup(text); + e->name = text; } MarkWholeScreenDirty(); @@ -1198,7 +1202,7 @@ void CheckEngines() if ((e->flags & ENGINE_AVAILABLE) != 0 && e->company_avail != 0) return; /* Okay, try to find the earliest date. */ - min_date = min(min_date, e->info.base_intro); + min_date = std::min(min_date, e->info.base_intro); } if (min_date < INT32_MAX) { diff --git a/src/engine_base.h b/src/engine_base.h index 203d35f201..2e434b589e 100644 --- a/src/engine_base.h +++ b/src/engine_base.h @@ -19,7 +19,7 @@ typedef Pool EnginePool; extern EnginePool _engine_pool; struct Engine : EnginePool::PoolItem<&_engine_pool> { - char *name; ///< Custom name of engine. + std::string name; ///< Custom name of engine. Date intro_date; ///< Date of introduction of the engine. Date age; uint16 reliability; ///< Current reliability of the engine. @@ -29,7 +29,7 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> { uint16 reliability_final; ///< Final reliability of the engine. uint16 duration_phase_1; ///< First reliability phase in months, increasing reliability from #reliability_start to #reliability_max. uint16 duration_phase_2; ///< Second reliability phase in months, keeping #reliability_max. - uint16 duration_phase_3; ///< Third reliability phase on months, decaying to #reliability_final. + uint16 duration_phase_3; ///< Third reliability phase in months, decaying to #reliability_final. byte flags; ///< Flags of the engine. @see EngineFlags CompanyMask preview_asked; ///< Bit for each company which has already been offered a preview. CompanyID preview_company; ///< Company which is currently being offered a preview \c INVALID_COMPANY means no company. diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 1f72d3ada4..1dd2eea1af 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -95,9 +95,9 @@ struct EnginePreviewWindow : Window { case VEH_SHIP: GetShipSpriteSize( engine, x, y, x_offs, y_offs, image_type); break; case VEH_AIRCRAFT: GetAircraftSpriteSize(engine, x, y, x_offs, y_offs, image_type); break; } - this->vehicle_space = max(40, y - y_offs); + this->vehicle_space = std::max(40, y - y_offs); - size->width = max(size->width, x - x_offs); + size->width = std::max(size->width, x - x_offs); SetDParam(0, GetEngineCategoryName(engine)); size->height = GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, size->width) + WD_PAR_VSEP_WIDE + FONT_HEIGHT_NORMAL + this->vehicle_space; SetDParam(0, engine); diff --git a/src/error.h b/src/error.h index 8aa8ac2258..6dd4b02342 100644 --- a/src/error.h +++ b/src/error.h @@ -13,6 +13,7 @@ #include "strings_type.h" #include "company_type.h" #include "core/geometry_type.hpp" +#include "guitimer_func.h" struct GRFFile; @@ -27,7 +28,7 @@ enum WarningLevel { /** The data of the error message. */ class ErrorMessageData { protected: - uint duration; ///< Length of display of the message. 0 means forever, + GUITimer display_timer; ///< Timer before closing the message. uint64 decode_params[20]; ///< Parameters of the message strings. const char *strings[20]; ///< Copies of raw strings that were used. const GRFFile *textref_stack_grffile; ///< NewGRF that filled the #TextRefStack for the error message. diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 79ca854d34..7b7413228c 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -71,7 +71,7 @@ static WindowDesc _errmsg_face_desc( * @param data The data to copy. */ ErrorMessageData::ErrorMessageData(const ErrorMessageData &data) : - duration(data.duration), textref_stack_grffile(data.textref_stack_grffile), textref_stack_size(data.textref_stack_size), + display_timer(data.display_timer), textref_stack_grffile(data.textref_stack_grffile), textref_stack_size(data.textref_stack_size), summary_msg(data.summary_msg), detailed_msg(data.detailed_msg), position(data.position), face(data.face) { memcpy(this->textref_stack, data.textref_stack, sizeof(this->textref_stack)); @@ -103,7 +103,6 @@ ErrorMessageData::~ErrorMessageData() * @param textref_stack Values to put on the #TextRefStack. */ ErrorMessageData::ErrorMessageData(StringID summary_msg, StringID detailed_msg, uint duration, int x, int y, const GRFFile *textref_stack_grffile, uint textref_stack_size, const uint32 *textref_stack) : - duration(duration), textref_stack_grffile(textref_stack_grffile), textref_stack_size(textref_stack_size), summary_msg(summary_msg), @@ -119,6 +118,8 @@ ErrorMessageData::ErrorMessageData(StringID summary_msg, StringID detailed_msg, if (textref_stack_size > 0) MemCpyT(this->textref_stack, textref_stack, textref_stack_size); assert(summary_msg != INVALID_STRING_ID); + + this->display_timer.SetInterval(duration * 3000); } /** @@ -189,7 +190,7 @@ public: CopyInDParam(0, this->decode_params, lengthof(this->decode_params)); if (this->textref_stack_size > 0) StartTextRefStackUsage(this->textref_stack_grffile, this->textref_stack_size, this->textref_stack); - int text_width = max(0, (int)size->width - WD_FRAMETEXT_LEFT - WD_FRAMETEXT_RIGHT); + int text_width = std::max(0, (int)size->width - WD_FRAMETEXT_LEFT - WD_FRAMETEXT_RIGHT); this->height_summary = GetStringHeight(this->summary_msg, text_width); this->height_detailed = (this->detailed_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->detailed_msg, text_width); @@ -198,13 +199,13 @@ public: uint panel_height = WD_FRAMERECT_TOP + this->height_summary + WD_FRAMERECT_BOTTOM; if (this->detailed_msg != INVALID_STRING_ID) panel_height += this->height_detailed + WD_PAR_VSEP_WIDE; - size->height = max(size->height, panel_height); + size->height = std::max(size->height, panel_height); break; } case WID_EM_FACE: { Dimension face_size = GetSpriteSize(SPR_GRADIENT); - size->width = max(size->width, face_size.width); - size->height = max(size->height, face_size.height); + size->width = std::max(size->width, face_size.width); + size->height = std::max(size->height, face_size.height); break; } } @@ -225,7 +226,7 @@ public: int scr_bot = GetMainViewBottom() - 20; Point pt = RemapCoords(this->position.x, this->position.y, GetSlopePixelZOutsideMap(this->position.x, this->position.y)); - const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; + const Viewport *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; if (this->face == INVALID_COMPANY) { /* move x pos to opposite corner */ pt.x = UnScaleByZoom(pt.x - vp->virtual_left, vp->zoom) + vp->left; @@ -297,16 +298,14 @@ public: void OnMouseLoop() override { /* Disallow closing the window too easily, if timeout is disabled */ - if (_right_button_down && this->duration != 0) delete this; + if (_right_button_down && !this->display_timer.HasElapsed()) delete this; } - void OnHundredthTick() override + void OnRealtimeTick(uint delta_ms) override { - /* Timeout enabled? */ - if (this->duration != 0) { - this->duration--; - if (this->duration == 0) delete this; - } + if (this->display_timer.CountElapsed(delta_ms) == 0) return; + + delete this; } ~ErrmsgWindow() @@ -321,7 +320,7 @@ public: */ bool IsCritical() { - return this->duration == 0; + return this->display_timer.HasElapsed(); } }; @@ -397,6 +396,7 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel bool no_timeout = wl == WL_CRITICAL; + if (_game_mode == GM_BOOTSTRAP) return; if (_settings_client.gui.errmsg_duration == 0 && !no_timeout) return; ErrorMessageData data(summary_msg, detailed_msg, no_timeout ? 0 : _settings_client.gui.errmsg_duration, x, y, textref_stack_grffile, textref_stack_size, textref_stack); @@ -419,9 +419,9 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel /** - * Close active error message window - * @return true if a window was closed. - */ + * Close active error message window + * @return true if a window was closed. + */ bool HideActiveErrorMessage() { ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0); if (w == nullptr) return false; diff --git a/src/fileio.cpp b/src/fileio.cpp index 098e0c73a6..9a9e7e05dc 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -24,13 +24,9 @@ #include #endif #include -#include +#include #include -#ifdef WITH_XDG_BASEDIR -#include -#endif - #include "safeguards.h" /** Size of the #Fio data buffer. */ @@ -39,17 +35,13 @@ /** Structure for keeping several open files with just one data buffer. */ struct Fio { byte *buffer, *buffer_end; ///< position pointer in local buffer and last valid byte of buffer + byte buffer_start[FIO_BUFFER_SIZE]; ///< local buffer when read from file size_t pos; ///< current (system) position in file FILE *cur_fh; ///< current file handle - const char *filename; ///< current filename - FILE *handles[MAX_FILE_SLOTS]; ///< array of file handles we can have open - byte buffer_start[FIO_BUFFER_SIZE]; ///< local buffer when read from file - const char *filenames[MAX_FILE_SLOTS]; ///< array of filenames we (should) have open - char *shortnames[MAX_FILE_SLOTS]; ///< array of short names for spriteloader's use -#if defined(LIMITED_FDS) - uint open_handles; ///< current amount of open handles - uint usage_count[MAX_FILE_SLOTS]; ///< count how many times this file has been opened -#endif /* LIMITED_FDS */ + std::string filename; ///< current filename + std::array handles; ///< array of file handles we can have open + std::array filenames; ///< array of filenames we (should) have open + std::array shortnames;///< array of short names for spriteloader's use }; static Fio _fio; ///< #Fio instance. @@ -57,8 +49,8 @@ static Fio _fio; ///< #Fio instance. /** Whether the working directory should be scanned. */ static bool _do_scan_working_directory = true; -extern char *_config_file; -extern char *_highscore_file; +extern std::string _config_file; +extern std::string _highscore_file; /** * Get position in the current file. @@ -76,7 +68,7 @@ size_t FioGetPos() */ const char *FioGetFilename(uint8 slot) { - return _fio.shortnames[slot]; + return _fio.shortnames[slot].c_str(); } /** @@ -90,22 +82,10 @@ void FioSeekTo(size_t pos, int mode) _fio.buffer = _fio.buffer_end = _fio.buffer_start + FIO_BUFFER_SIZE; _fio.pos = pos; if (fseek(_fio.cur_fh, _fio.pos, SEEK_SET) < 0) { - DEBUG(misc, 0, "Seeking in %s failed", _fio.filename); + DEBUG(misc, 0, "Seeking in %s failed", _fio.filename.c_str()); } } -#if defined(LIMITED_FDS) -static void FioRestoreFile(int slot) -{ - /* Do we still have the file open, or should we reopen it? */ - if (_fio.handles[slot] == nullptr) { - DEBUG(misc, 6, "Restoring file '%s' in slot '%d' from disk", _fio.filenames[slot], slot); - FioOpenFile(slot, _fio.filenames[slot]); - } - _fio.usage_count[slot]++; -} -#endif /* LIMITED_FDS */ - /** * Switch to a different file and seek to a position. * @param slot Slot number of the new file. @@ -113,12 +93,7 @@ static void FioRestoreFile(int slot) */ void FioSeekToFile(uint8 slot, size_t pos) { - FILE *f; -#if defined(LIMITED_FDS) - /* Make sure we have this file open */ - FioRestoreFile(slot); -#endif /* LIMITED_FDS */ - f = _fio.handles[slot]; + FILE *f = _fio.handles[slot]; assert(f != nullptr); _fio.cur_fh = f; _fio.filename = _fio.filenames[slot]; @@ -149,7 +124,7 @@ byte FioReadByte() void FioSkipBytes(int n) { for (;;) { - int m = min(_fio.buffer_end - _fio.buffer, n); + int m = std::min(_fio.buffer_end - _fio.buffer, n); _fio.buffer += m; n -= m; if (n == 0) break; @@ -198,13 +173,9 @@ static inline void FioCloseFile(int slot) if (_fio.handles[slot] != nullptr) { fclose(_fio.handles[slot]); - free(_fio.shortnames[slot]); - _fio.shortnames[slot] = nullptr; + _fio.shortnames[slot].clear(); _fio.handles[slot] = nullptr; -#if defined(LIMITED_FDS) - _fio.open_handles--; -#endif /* LIMITED_FDS */ } } @@ -216,64 +187,32 @@ void FioCloseAll() } } -#if defined(LIMITED_FDS) -static void FioFreeHandle() -{ - /* If we are about to open a file that will exceed the limit, close a file */ - if (_fio.open_handles + 1 == LIMITED_FDS) { - uint i, count; - int slot; - - count = UINT_MAX; - slot = -1; - /* Find the file that is used the least */ - for (i = 0; i < lengthof(_fio.handles); i++) { - if (_fio.handles[i] != nullptr && _fio.usage_count[i] < count) { - count = _fio.usage_count[i]; - slot = i; - } - } - assert(slot != -1); - DEBUG(misc, 6, "Closing filehandler '%s' in slot '%d' because of fd-limit", _fio.filenames[slot], slot); - FioCloseFile(slot); - } -} -#endif /* LIMITED_FDS */ - /** * Open a slotted file. * @param slot Index to assign. * @param filename Name of the file at the disk. * @param subdir The sub directory to search this file in. */ -void FioOpenFile(int slot, const char *filename, Subdirectory subdir) +void FioOpenFile(int slot, const std::string &filename, Subdirectory subdir) { FILE *f; -#if defined(LIMITED_FDS) - FioFreeHandle(); -#endif /* LIMITED_FDS */ f = FioFOpenFile(filename, "rb", subdir); - if (f == nullptr) usererror("Cannot open file '%s'", filename); + if (f == nullptr) usererror("Cannot open file '%s'", filename.c_str()); long pos = ftell(f); - if (pos < 0) usererror("Cannot read file '%s'", filename); + if (pos < 0) usererror("Cannot read file '%s'", filename.c_str()); FioCloseFile(slot); // if file was opened before, close it _fio.handles[slot] = f; _fio.filenames[slot] = filename; /* Store the filename without path and extension */ - const char *t = strrchr(filename, PATHSEPCHAR); - _fio.shortnames[slot] = stredup(t == nullptr ? filename : t); - char *t2 = strrchr(_fio.shortnames[slot], '.'); - if (t2 != nullptr) *t2 = '\0'; + auto t = filename.rfind(PATHSEPCHAR); + std::string sn = filename.substr(t != std::string::npos ? t + 1 : 0); + _fio.shortnames[slot] = sn.substr(0, sn.rfind('.')); strtolower(_fio.shortnames[slot]); -#if defined(LIMITED_FDS) - _fio.usage_count[slot] = 0; - _fio.open_handles++; -#endif /* LIMITED_FDS */ - FioSeekToFile(slot, (uint32)pos); + FioSeekToFile(slot, (size_t)pos); } static const char * const _subdirs[] = { @@ -293,22 +232,38 @@ static const char * const _subdirs[] = { "game" PATHSEP "library" PATHSEP, "screenshot" PATHSEP, }; -assert_compile(lengthof(_subdirs) == NUM_SUBDIRS); +static_assert(lengthof(_subdirs) == NUM_SUBDIRS); -const char *_searchpaths[NUM_SEARCHPATHS]; -TarList _tar_list[NUM_SUBDIRS]; +/** + * The search paths OpenTTD could search through. + * At least one of the slots has to be filled with a path. + * An empty string tells that there is no such path for the + * current operating system. + */ +std::array _searchpaths; +std::array _tar_list; TarFileList _tar_filelist[NUM_SUBDIRS]; typedef std::map TarLinkList; static TarLinkList _tar_linklist[NUM_SUBDIRS]; ///< List of directory links +/** + * Checks whether the given search path is a valid search path + * @param sp the search path to check + * @return true if the search path is valid + */ +bool IsValidSearchPath(Searchpath sp) +{ + return sp < _searchpaths.size() && !_searchpaths[sp].empty(); +} + /** * Check whether the given file exists * @param filename the file to try for existence. * @param subdir the subdirectory to look in * @return true if and only if the file can be opened */ -bool FioCheckFileExists(const char *filename, Subdirectory subdir) +bool FioCheckFileExists(const std::string &filename, Subdirectory subdir) { FILE *f = FioFOpenFile(filename, "rb", subdir); if (f == nullptr) return false; @@ -322,9 +277,9 @@ bool FioCheckFileExists(const char *filename, Subdirectory subdir) * @param filename the file to test. * @return true if and only if the file exists. */ -bool FileExists(const char *filename) +bool FileExists(const std::string &filename) { - return access(OTTD2FS(filename), 0) == 0; + return access(OTTD2FS(filename.c_str()), 0) == 0; } /** @@ -335,70 +290,57 @@ void FioFCloseFile(FILE *f) fclose(f); } -char *FioGetFullPath(char *buf, const char *last, Searchpath sp, Subdirectory subdir, const char *filename) -{ - assert(subdir < NUM_SUBDIRS); - assert(sp < NUM_SEARCHPATHS); - - seprintf(buf, last, "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename); - return buf; -} - /** * Find a path to the filename in one of the search directories. - * @param[out] buf Destination buffer for the path. - * @param last End of the destination buffer. * @param subdir Subdirectory to try. * @param filename Filename to look for. - * @return \a buf containing the path if the path was found, else \c nullptr. + * @return String containing the path if the path was found, else an empty string. */ -char *FioFindFullPath(char *buf, const char *last, Subdirectory subdir, const char *filename) +std::string FioFindFullPath(Subdirectory subdir, const char *filename) { Searchpath sp; assert(subdir < NUM_SUBDIRS); FOR_ALL_SEARCHPATHS(sp) { - FioGetFullPath(buf, last, sp, subdir, filename); + std::string buf = FioGetDirectory(sp, subdir); + buf += filename; if (FileExists(buf)) return buf; #if !defined(_WIN32) /* Be, as opening files, aware that sometimes the filename * might be in uppercase when it is in lowercase on the * disk. Of course Windows doesn't care about casing. */ - if (strtolower(buf + strlen(_searchpaths[sp]) - 1) && FileExists(buf)) return buf; + if (strtolower(buf, _searchpaths[sp].size() - 1) && FileExists(buf)) return buf; #endif } - return nullptr; + return {}; } -char *FioAppendDirectory(char *buf, const char *last, Searchpath sp, Subdirectory subdir) +std::string FioGetDirectory(Searchpath sp, Subdirectory subdir) { assert(subdir < NUM_SUBDIRS); assert(sp < NUM_SEARCHPATHS); - seprintf(buf, last, "%s%s", _searchpaths[sp], _subdirs[subdir]); - return buf; + return _searchpaths[sp] + _subdirs[subdir]; } -char *FioGetDirectory(char *buf, const char *last, Subdirectory subdir) +std::string FioFindDirectory(Subdirectory subdir) { Searchpath sp; /* Find and return the first valid directory */ FOR_ALL_SEARCHPATHS(sp) { - char *ret = FioAppendDirectory(buf, last, sp, subdir); - if (FileExists(buf)) return ret; + std::string ret = FioGetDirectory(sp, subdir); + if (FileExists(ret)) return ret; } /* Could not find the directory, fall back to a base path */ - strecpy(buf, _personal_dir, last); - - return buf; + return _personal_dir; } -static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize) +static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize) { -#if defined(_WIN32) && defined(UNICODE) +#if defined(_WIN32) /* fopen is implemented as a define with ellipses for * Unicode support (prepend an L). As we are not sending * a string, but a variable, it 'renames' the variable, @@ -407,22 +349,22 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s MultiByteToWideChar(CP_ACP, 0, mode, -1, Lmode, lengthof(Lmode)); #endif FILE *f = nullptr; - char buf[MAX_PATH]; + std::string buf; if (subdir == NO_DIRECTORY) { - strecpy(buf, filename, lastof(buf)); + buf = filename; } else { - seprintf(buf, lastof(buf), "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename); + buf = _searchpaths[sp] + _subdirs[subdir] + filename; } #if defined(_WIN32) - if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf)) == INVALID_FILE_ATTRIBUTES) return nullptr; + if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf.c_str())) == INVALID_FILE_ATTRIBUTES) return nullptr; #endif - f = fopen(buf, mode); + f = fopen(buf.c_str(), mode); #if !defined(_WIN32) - if (f == nullptr && strtolower(buf + ((subdir == NO_DIRECTORY) ? 0 : strlen(_searchpaths[sp]) - 1))) { - f = fopen(buf, mode); + if (f == nullptr && strtolower(buf, subdir == NO_DIRECTORY ? 0 : _searchpaths[sp].size() - 1) ) { + f = fopen(buf.c_str(), mode); } #endif if (f != nullptr && filesize != nullptr) { @@ -441,17 +383,17 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s * @return File handle of the opened file, or \c nullptr if the file is not available. * @note The file is read from within the tar file, and may not return \c EOF after reading the whole file. */ -FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize) +FILE *FioFOpenFileTar(const TarFileListEntry &entry, size_t *filesize) { - FILE *f = fopen(entry->tar_filename, "rb"); + FILE *f = fopen(entry.tar_filename.c_str(), "rb"); if (f == nullptr) return f; - if (fseek(f, entry->position, SEEK_SET) < 0) { + if (fseek(f, entry.position, SEEK_SET) < 0) { fclose(f); return nullptr; } - if (filesize != nullptr) *filesize = entry->size; + if (filesize != nullptr) *filesize = entry.size; return f; } @@ -461,7 +403,7 @@ FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize) * @param subdir Subdirectory to open. * @return File handle of the opened file, or \c nullptr if the file is not available. */ -FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize) +FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize) { FILE *f = nullptr; Searchpath sp; @@ -475,11 +417,8 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, /* We can only use .tar in case of data-dir, and read-mode */ if (f == nullptr && mode[0] == 'r' && subdir != NO_DIRECTORY) { - static const uint MAX_RESOLVED_LENGTH = 2 * (100 + 100 + 155) + 1; // Enough space to hold two filenames plus link. See 'TarHeader'. - char resolved_name[MAX_RESOLVED_LENGTH]; - /* Filenames in tars are always forced to be lowercase */ - strecpy(resolved_name, filename, lastof(resolved_name)); + std::string resolved_name = filename; strtolower(resolved_name); /* Resolve ".." */ @@ -490,40 +429,38 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, if (token == "..") { if (tokens.size() < 2) return nullptr; tokens.pop_back(); + } else if (token == ".") { + /* Do nothing. "." means current folder, but you can create tar files with "." in the path. + * This confuses our file resolver. So, act like this folder doesn't exist. */ } else { tokens.push_back(token); } } - resolved_name[0] = '\0'; + + resolved_name.clear(); bool first = true; for (const std::string &token : tokens) { if (!first) { - strecat(resolved_name, PATHSEP, lastof(resolved_name)); + resolved_name += PATHSEP; } - strecat(resolved_name, token.c_str(), lastof(resolved_name)); + resolved_name += token; first = false; } - size_t resolved_len = strlen(resolved_name); - /* Resolve ONE directory link */ for (TarLinkList::iterator link = _tar_linklist[subdir].begin(); link != _tar_linklist[subdir].end(); link++) { const std::string &src = link->first; size_t len = src.length(); - if (resolved_len >= len && resolved_name[len - 1] == PATHSEPCHAR && strncmp(src.c_str(), resolved_name, len) == 0) { + if (resolved_name.length() >= len && resolved_name[len - 1] == PATHSEPCHAR && src.compare(0, len, resolved_name, 0, len) == 0) { /* Apply link */ - char resolved_name2[MAX_RESOLVED_LENGTH]; - const std::string &dest = link->second; - strecpy(resolved_name2, &(resolved_name[len]), lastof(resolved_name2)); - strecpy(resolved_name, dest.c_str(), lastof(resolved_name)); - strecpy(&(resolved_name[dest.length()]), resolved_name2, lastof(resolved_name)); + resolved_name.replace(0, len, link->second); break; // Only resolve one level } } TarFileList::iterator it = _tar_filelist[subdir].find(resolved_name); if (it != _tar_filelist[subdir].end()) { - f = FioFOpenFileTar(&((*it).second), filesize); + f = FioFOpenFileTar(it->second, filesize); } } @@ -553,14 +490,12 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, * If the parent directory does not exist, it will try to create that as well. * @param name the new name of the directory */ -void FioCreateDirectory(const char *name) +void FioCreateDirectory(const std::string &name) { - char dirname[MAX_PATH]; - strecpy(dirname, name, lastof(dirname)); - char *p = strrchr(dirname, PATHSEPCHAR); - if (p != nullptr) { - *p = '\0'; - DIR *dir = ttd_opendir(dirname); + auto p = name.find_last_of(PATHSEPCHAR); + if (p != std::string::npos) { + std::string dirname = name.substr(0, p); + DIR *dir = ttd_opendir(dirname.c_str()); if (dir == nullptr) { FioCreateDirectory(dirname); // Try creating the parent directory, if we couldn't open it } else { @@ -571,11 +506,11 @@ void FioCreateDirectory(const char *name) /* Ignore directory creation errors; they'll surface later on, and most * of the time they are 'directory already exists' errors anyhow. */ #if defined(_WIN32) - CreateDirectory(OTTD2FS(name), nullptr); + CreateDirectory(OTTD2FS(name.c_str()), nullptr); #elif defined(OS2) && !defined(__INNOTEK_LIBC__) - mkdir(OTTD2FS(name)); + mkdir(OTTD2FS(name.c_str())); #else - mkdir(OTTD2FS(name), 0755); + mkdir(OTTD2FS(name.c_str()), 0755); #endif } @@ -583,21 +518,13 @@ void FioCreateDirectory(const char *name) * Appends, if necessary, the path separator character to the end of the string. * It does not add the path separator to zero-sized strings. * @param buf string to append the separator to - * @param last the last element of \a buf. * @return true iff the operation succeeded */ -bool AppendPathSeparator(char *buf, const char *last) +void AppendPathSeparator(std::string &buf) { - size_t s = strlen(buf); + if (buf.empty()) return; - /* Length of string + path separator + '\0' */ - if (s != 0 && buf[s - 1] != PATHSEPCHAR) { - if (&buf[s] >= last) return false; - - seprintf(buf + s, last, "%c", PATHSEPCHAR); - } - - return true; + if (buf.back() != PATHSEPCHAR) buf.push_back(PATHSEPCHAR); } static void TarAddLink(const std::string &srcParam, const std::string &destParam, Subdirectory subdir) @@ -684,16 +611,16 @@ uint TarScanner::DoScan(Subdirectory sd) * @param filename The name of the file to add. * @return True if the additions went correctly. */ -bool TarScanner::AddFile(Subdirectory sd, const char *filename) +bool TarScanner::AddFile(Subdirectory sd, const std::string &filename) { this->subdir = sd; return this->AddFile(filename, 0); } -bool TarScanner::AddFile(const char *filename, size_t basepath_length, const char *tar_filename) +bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { /* No tar within tar. */ - assert(tar_filename == nullptr); + assert(tar_filename.empty()); /* The TAR-header, repeated for every file */ struct TarHeader { @@ -721,16 +648,14 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha TarList::iterator it = _tar_list[this->subdir].find(filename); if (it != _tar_list[this->subdir].end()) return false; - FILE *f = fopen(filename, "rb"); + FILE *f = fopen(filename.c_str(), "rb"); /* Although the file has been found there can be * a number of reasons we cannot open the file. * Most common case is when we simply have not * been given read access. */ if (f == nullptr) return false; - const char *dupped_filename = stredup(filename); - _tar_list[this->subdir][filename].filename = dupped_filename; - _tar_list[this->subdir][filename].dirname = nullptr; + _tar_list[this->subdir][filename] = std::string{}; TarLinkList links; ///< Temporary list to collect links @@ -755,7 +680,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha /* If we have only zeros in the block, it can be an end-of-file indicator */ if (memcmp(&th, &empty[0], 512) == 0) continue; - DEBUG(misc, 0, "The file '%s' isn't a valid tar-file", filename); + DEBUG(misc, 0, "The file '%s' isn't a valid tar-file", filename.c_str()); fclose(f); return false; } @@ -785,7 +710,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha /* Store this entry in the list */ TarFileListEntry entry; - entry.tar_filename = dupped_filename; + entry.tar_filename = filename; entry.size = skip; entry.position = pos; @@ -853,7 +778,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha } if (destpos >= lastof(dest)) { - DEBUG(misc, 0, "The length of a link in tar-file '%s' is too large (malformed?)", filename); + DEBUG(misc, 0, "The length of a link in tar-file '%s' is too large (malformed?)", filename.c_str()); fclose(f); return false; } @@ -874,7 +799,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha /* Store the first directory name we detect */ DEBUG(misc, 6, "Found dir in tar: %s", name); - if (_tar_list[this->subdir][filename].dirname == nullptr) _tar_list[this->subdir][filename].dirname = stredup(name); + if (_tar_list[this->subdir][filename].empty()) _tar_list[this->subdir][filename] = name; break; default: @@ -885,14 +810,14 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha /* Skip to the next block.. */ skip = Align(skip, 512); if (fseek(f, skip, SEEK_CUR) < 0) { - DEBUG(misc, 0, "The file '%s' can't be read as a valid tar-file", filename); + DEBUG(misc, 0, "The file '%s' can't be read as a valid tar-file", filename.c_str()); fclose(f); return false; } pos += skip; } - DEBUG(misc, 1, "Found tar '%s' with " PRINTF_SIZE " new files", filename, num); + DEBUG(misc, 1, "Found tar '%s' with " PRINTF_SIZE " new files", filename.c_str(), num); fclose(f); /* Resolve file links and store directory links. @@ -920,51 +845,48 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha * @param subdir The sub directory the tar is in. * @return false on failure. */ -bool ExtractTar(const char *tar_filename, Subdirectory subdir) +bool ExtractTar(const std::string &tar_filename, Subdirectory subdir) { TarList::iterator it = _tar_list[subdir].find(tar_filename); /* We don't know the file. */ if (it == _tar_list[subdir].end()) return false; - const char *dirname = (*it).second.dirname; + const auto &dirname = (*it).second; /* The file doesn't have a sub directory! */ - if (dirname == nullptr) { - DEBUG(misc, 1, "Extracting %s failed; archive rejected, the contents must be in a sub directory", tar_filename); + if (dirname.empty()) { + DEBUG(misc, 1, "Extracting %s failed; archive rejected, the contents must be in a sub directory", tar_filename.c_str()); return false; } - char filename[MAX_PATH]; - strecpy(filename, tar_filename, lastof(filename)); - char *p = strrchr(filename, PATHSEPCHAR); + std::string filename = tar_filename; + auto p = filename.find_last_of(PATHSEPCHAR); /* The file's path does not have a separator? */ - if (p == nullptr) return false; + if (p == std::string::npos) return false; - p++; - strecpy(p, dirname, lastof(filename)); - DEBUG(misc, 8, "Extracting %s to directory %s", tar_filename, filename); + filename.replace(p + 1, std::string::npos, dirname); + DEBUG(misc, 8, "Extracting %s to directory %s", tar_filename.c_str(), filename.c_str()); FioCreateDirectory(filename); for (TarFileList::iterator it2 = _tar_filelist[subdir].begin(); it2 != _tar_filelist[subdir].end(); it2++) { - if (strcmp((*it2).second.tar_filename, tar_filename) != 0) continue; + if (tar_filename != it2->second.tar_filename) continue; - strecpy(p, (*it2).first.c_str(), lastof(filename)); + filename.replace(p + 1, std::string::npos, it2->first); - DEBUG(misc, 9, " extracting %s", filename); + DEBUG(misc, 9, " extracting %s", filename.c_str()); /* First open the file in the .tar. */ size_t to_copy = 0; - FILE *in = FioFOpenFileTar(&(*it2).second, &to_copy); - if (in == nullptr) { - DEBUG(misc, 6, "Extracting %s failed; could not open %s", filename, tar_filename); + std::unique_ptr in(FioFOpenFileTar(it2->second, &to_copy)); + if (!in) { + DEBUG(misc, 6, "Extracting %s failed; could not open %s", filename.c_str(), tar_filename.c_str()); return false; } /* Now open the 'output' file. */ - FILE *out = fopen(filename, "wb"); - if (out == nullptr) { - DEBUG(misc, 6, "Extracting %s failed; could not open %s", filename, filename); - fclose(in); + std::unique_ptr out(fopen(filename.c_str(), "wb")); + if (!out) { + DEBUG(misc, 6, "Extracting %s failed; could not open %s", filename.c_str(), filename.c_str()); return false; } @@ -972,16 +894,12 @@ bool ExtractTar(const char *tar_filename, Subdirectory subdir) char buffer[4096]; size_t read; for (; to_copy != 0; to_copy -= read) { - read = fread(buffer, 1, min(to_copy, lengthof(buffer)), in); - if (read <= 0 || fwrite(buffer, 1, read, out) != read) break; + read = fread(buffer, 1, std::min(to_copy, lengthof(buffer)), in.get()); + if (read <= 0 || fwrite(buffer, 1, read, out.get()) != read) break; } - /* Close everything up. */ - fclose(in); - fclose(out); - if (to_copy != 0) { - DEBUG(misc, 6, "Extracting %s failed; still %i bytes to copy", filename, (int)to_copy); + DEBUG(misc, 6, "Extracting %s failed; still %i bytes to copy", filename.c_str(), (int)to_copy); return false; } } @@ -1043,18 +961,39 @@ static bool ChangeWorkingDirectoryToExecutable(const char *exe) bool DoScanWorkingDirectory() { /* No working directory, so nothing to do. */ - if (_searchpaths[SP_WORKING_DIR] == nullptr) return false; + if (_searchpaths[SP_WORKING_DIR].empty()) return false; /* Working directory is root, so do nothing. */ - if (strcmp(_searchpaths[SP_WORKING_DIR], PATHSEP) == 0) return false; + if (_searchpaths[SP_WORKING_DIR] == PATHSEP) return false; /* No personal/home directory, so the working directory won't be that. */ - if (_searchpaths[SP_PERSONAL_DIR] == nullptr) return true; + if (_searchpaths[SP_PERSONAL_DIR].empty()) return true; - char tmp[MAX_PATH]; - seprintf(tmp, lastof(tmp), "%s%s", _searchpaths[SP_WORKING_DIR], PERSONAL_DIR); - AppendPathSeparator(tmp, lastof(tmp)); - return strcmp(tmp, _searchpaths[SP_PERSONAL_DIR]) != 0; + std::string tmp = _searchpaths[SP_WORKING_DIR] + PERSONAL_DIR; + AppendPathSeparator(tmp); + + return _searchpaths[SP_PERSONAL_DIR] != tmp; +} + +/** + * Gets the home directory of the user. + * May return an empty string in the unlikely scenario that the home directory cannot be found. + * @return User's home directory + */ +static std::string GetHomeDir() +{ +#ifdef __HAIKU__ + BPath path; + find_directory(B_USER_SETTINGS_DIRECTORY, &path); + return std::string(path.Path()); +#else + const char *home_env = getenv("HOME"); // Stack var, shouldn't be freed + if (home_env != nullptr) return std::string(home_env); + + const struct passwd *pw = getpwuid(getuid()); + if (pw != nullptr) return std::string(pw->pw_dir); +#endif + return {}; } /** @@ -1063,98 +1002,124 @@ bool DoScanWorkingDirectory() */ void DetermineBasePaths(const char *exe) { - char tmp[MAX_PATH]; -#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) - const char *xdg_data_home = xdgDataHome(nullptr); - seprintf(tmp, lastof(tmp), "%s" PATHSEP "%s", xdg_data_home, - PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR); - free(xdg_data_home); + std::string tmp; + const std::string homedir = GetHomeDir(); +#ifdef USE_XDG + const char *xdg_data_home = getenv("XDG_DATA_HOME"); + if (xdg_data_home != nullptr) { + tmp = xdg_data_home; + tmp += PATHSEP; + tmp += PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR; + AppendPathSeparator(tmp); + _searchpaths[SP_PERSONAL_DIR_XDG] = tmp; - AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_PERSONAL_DIR_XDG] = stredup(tmp); -#endif -#if defined(OS2) || !defined(WITH_PERSONAL_DIR) - _searchpaths[SP_PERSONAL_DIR] = nullptr; -#else -#ifdef __HAIKU__ - BPath path; - find_directory(B_USER_SETTINGS_DIRECTORY, &path); - const char *homedir = stredup(path.Path()); -#else - /* getenv is highly unsafe; duplicate it as soon as possible, - * or at least before something else touches the environment - * variables in any way. It can also contain all kinds of - * unvalidated data we rather not want internally. */ - const char *homedir = getenv("HOME"); - if (homedir != nullptr) { - homedir = stredup(homedir); - } + tmp += "content_download"; + AppendPathSeparator(tmp); + _searchpaths[SP_AUTODOWNLOAD_PERSONAL_DIR_XDG] = tmp; + } else if (!homedir.empty()) { + tmp = homedir; + tmp += PATHSEP ".local" PATHSEP "share" PATHSEP; + tmp += PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR; + AppendPathSeparator(tmp); + _searchpaths[SP_PERSONAL_DIR_XDG] = tmp; - if (homedir == nullptr) { - const struct passwd *pw = getpwuid(getuid()); - homedir = (pw == nullptr) ? nullptr : stredup(pw->pw_dir); - } -#endif - - if (homedir != nullptr) { - ValidateString(homedir); - seprintf(tmp, lastof(tmp), "%s" PATHSEP "%s", homedir, PERSONAL_DIR); - AppendPathSeparator(tmp, lastof(tmp)); - - _searchpaths[SP_PERSONAL_DIR] = stredup(tmp); - free(homedir); + tmp += "content_download"; + AppendPathSeparator(tmp); + _searchpaths[SP_AUTODOWNLOAD_PERSONAL_DIR_XDG] = tmp; } else { - _searchpaths[SP_PERSONAL_DIR] = nullptr; + _searchpaths[SP_PERSONAL_DIR_XDG].clear(); + _searchpaths[SP_AUTODOWNLOAD_PERSONAL_DIR_XDG].clear(); + } +#endif + +#if defined(OS2) || !defined(WITH_PERSONAL_DIR) + _searchpaths[SP_PERSONAL_DIR].clear(); +#else + if (!homedir.empty()) { + tmp = homedir; + tmp += PATHSEP; + tmp += PERSONAL_DIR; + AppendPathSeparator(tmp); + _searchpaths[SP_PERSONAL_DIR] = tmp; + + tmp += "content_download"; + AppendPathSeparator(tmp); + _searchpaths[SP_AUTODOWNLOAD_PERSONAL_DIR] = tmp; + } else { + _searchpaths[SP_PERSONAL_DIR].clear(); + _searchpaths[SP_AUTODOWNLOAD_PERSONAL_DIR].clear(); } #endif #if defined(WITH_SHARED_DIR) - seprintf(tmp, lastof(tmp), "%s", SHARED_DIR); - AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_SHARED_DIR] = stredup(tmp); + tmp = SHARED_DIR; + AppendPathSeparator(tmp); + _searchpaths[SP_SHARED_DIR] = tmp; #else - _searchpaths[SP_SHARED_DIR] = nullptr; + _searchpaths[SP_SHARED_DIR].clear(); #endif - if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; - AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_WORKING_DIR] = stredup(tmp); + char cwd[MAX_PATH]; + if (getcwd(cwd, MAX_PATH) == nullptr) *cwd = '\0'; - _do_scan_working_directory = DoScanWorkingDirectory(); + if (_config_file.empty()) { + /* Get the path to working directory of OpenTTD. */ + tmp = cwd; + AppendPathSeparator(tmp); + _searchpaths[SP_WORKING_DIR] = tmp; + + _do_scan_working_directory = DoScanWorkingDirectory(); + } else { + /* Use the folder of the config file as working directory. */ + size_t end = _config_file.find_last_of(PATHSEPCHAR); + if (end == std::string::npos) { + /* _config_file is not in a folder, so use current directory. */ + tmp = cwd; + AppendPathSeparator(tmp); + _searchpaths[SP_WORKING_DIR] = tmp; + } else { + _searchpaths[SP_WORKING_DIR] = _config_file.substr(0, end + 1); + } + } /* Change the working directory to that one of the executable */ if (ChangeWorkingDirectoryToExecutable(exe)) { - if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0'; - AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_BINARY_DIR] = stredup(tmp); + char buf[MAX_PATH]; + if (getcwd(buf, lengthof(buf)) == nullptr) { + tmp.clear(); + } else { + tmp = buf; + } + AppendPathSeparator(tmp); + _searchpaths[SP_BINARY_DIR] = tmp; } else { - _searchpaths[SP_BINARY_DIR] = nullptr; + _searchpaths[SP_BINARY_DIR].clear(); } - if (_searchpaths[SP_WORKING_DIR] != nullptr) { + if (cwd[0] != '\0') { /* Go back to the current working directory. */ - if (chdir(_searchpaths[SP_WORKING_DIR]) != 0) { + if (chdir(cwd) != 0) { DEBUG(misc, 0, "Failed to return to working directory!"); } } #if !defined(GLOBAL_DATA_DIR) - _searchpaths[SP_INSTALLATION_DIR] = nullptr; + _searchpaths[SP_INSTALLATION_DIR].clear(); #else - seprintf(tmp, lastof(tmp), "%s", GLOBAL_DATA_DIR); - AppendPathSeparator(tmp, lastof(tmp)); - _searchpaths[SP_INSTALLATION_DIR] = stredup(tmp); + tmp = GLOBAL_DATA_DIR; + AppendPathSeparator(tmp); + _searchpaths[SP_INSTALLATION_DIR] = tmp; #endif #ifdef WITH_COCOA -extern void cocoaSetApplicationBundleDir(); - cocoaSetApplicationBundleDir(); +extern void CocoaSetApplicationBundleDir(); + CocoaSetApplicationBundleDir(); #else - _searchpaths[SP_APPLICATION_BUNDLE_DIR] = nullptr; + _searchpaths[SP_APPLICATION_BUNDLE_DIR].clear(); #endif } #endif /* defined(_WIN32) */ -const char *_personal_dir; +std::string _personal_dir; /** * Acquire the base paths (personal dir and game data dir), @@ -1166,41 +1131,40 @@ void DeterminePaths(const char *exe) { DetermineBasePaths(exe); -#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) - char config_home[MAX_PATH]; - - const char *xdg_config_home = xdgConfigHome(nullptr); - seprintf(config_home, lastof(config_home), "%s" PATHSEP "%s", xdg_config_home, - PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR); - free(xdg_config_home); - - AppendPathSeparator(config_home, lastof(config_home)); +#ifdef USE_XDG + std::string config_home; + const std::string homedir = GetHomeDir(); + const char *xdg_config_home = getenv("XDG_CONFIG_HOME"); + if (xdg_config_home != nullptr) { + config_home = xdg_config_home; + config_home += PATHSEP; + config_home += PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR; + } else if (!homedir.empty()) { + /* Defaults to ~/.config */ + config_home = homedir; + config_home += PATHSEP ".config" PATHSEP; + config_home += PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR; + } + AppendPathSeparator(config_home); #endif Searchpath sp; FOR_ALL_SEARCHPATHS(sp) { if (sp == SP_WORKING_DIR && !_do_scan_working_directory) continue; - DEBUG(misc, 4, "%s added as search path", _searchpaths[sp]); + DEBUG(misc, 4, "%s added as search path", _searchpaths[sp].c_str()); } - char *config_dir; - if (_config_file != nullptr) { - config_dir = stredup(_config_file); - char *end = strrchr(config_dir, PATHSEPCHAR); - if (end == nullptr) { - config_dir[0] = '\0'; - } else { - end[1] = '\0'; - } + std::string config_dir; + if (!_config_file.empty()) { + config_dir = _searchpaths[SP_WORKING_DIR]; } else { - char personal_dir[MAX_PATH]; - if (FioFindFullPath(personal_dir, lastof(personal_dir), BASE_DIR, "openttd.cfg") != nullptr) { - char *end = strrchr(personal_dir, PATHSEPCHAR); - if (end != nullptr) end[1] = '\0'; - config_dir = stredup(personal_dir); - _config_file = str_fmt("%sopenttd.cfg", config_dir); + std::string personal_dir = FioFindFullPath(BASE_DIR, "openttd.cfg"); + if (!personal_dir.empty()) { + auto end = personal_dir.find_last_of(PATHSEPCHAR); + if (end != std::string::npos) personal_dir.erase(end + 1); + config_dir = personal_dir; } else { -#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) +#ifdef USE_XDG /* No previous configuration file found. Use the configuration folder from XDG. */ config_dir = config_home; #else @@ -1208,33 +1172,31 @@ void DeterminePaths(const char *exe) SP_PERSONAL_DIR, SP_BINARY_DIR, SP_WORKING_DIR, SP_SHARED_DIR, SP_INSTALLATION_DIR }; - config_dir = nullptr; + config_dir.clear(); for (uint i = 0; i < lengthof(new_openttd_cfg_order); i++) { if (IsValidSearchPath(new_openttd_cfg_order[i])) { - config_dir = stredup(_searchpaths[new_openttd_cfg_order[i]]); + config_dir = _searchpaths[new_openttd_cfg_order[i]]; break; } } - assert(config_dir != nullptr); #endif - _config_file = str_fmt("%sopenttd.cfg", config_dir); } + _config_file = config_dir + "openttd.cfg"; } - DEBUG(misc, 3, "%s found as config directory", config_dir); + DEBUG(misc, 3, "%s found as config directory", config_dir.c_str()); - _highscore_file = str_fmt("%shs.dat", config_dir); - extern char *_hotkeys_file; - _hotkeys_file = str_fmt("%shotkeys.cfg", config_dir); - extern char *_windows_file; - _windows_file = str_fmt("%swindows.cfg", config_dir); + _highscore_file = config_dir + "hs.dat"; + extern std::string _hotkeys_file; + _hotkeys_file = config_dir + "hotkeys.cfg"; + extern std::string _windows_file; + _windows_file = config_dir + "windows.cfg"; -#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) +#ifdef USE_XDG if (config_dir == config_home) { /* We are using the XDG configuration home for the config file, * then store the rest in the XDG data home folder. */ _personal_dir = _searchpaths[SP_PERSONAL_DIR_XDG]; - FioCreateDirectory(_personal_dir); } else #endif { @@ -1242,37 +1204,33 @@ void DeterminePaths(const char *exe) } /* Make the necessary folders */ -#if defined(WITH_PERSONAL_DIR) FioCreateDirectory(config_dir); - if (config_dir != _personal_dir) FioCreateDirectory(_personal_dir); +#if defined(WITH_PERSONAL_DIR) + FioCreateDirectory(_personal_dir); #endif - DEBUG(misc, 3, "%s found as personal directory", _personal_dir); + DEBUG(misc, 3, "%s found as personal directory", _personal_dir.c_str()); static const Subdirectory default_subdirs[] = { SAVE_DIR, AUTOSAVE_DIR, SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR, SCREENSHOT_DIR }; for (uint i = 0; i < lengthof(default_subdirs); i++) { - char *dir = str_fmt("%s%s", _personal_dir, _subdirs[default_subdirs[i]]); - FioCreateDirectory(dir); - free(dir); + FioCreateDirectory(_personal_dir + _subdirs[default_subdirs[i]]); } /* If we have network we make a directory for the autodownloading of content */ - _searchpaths[SP_AUTODOWNLOAD_DIR] = str_fmt("%s%s", _personal_dir, "content_download" PATHSEP); + _searchpaths[SP_AUTODOWNLOAD_DIR] = _personal_dir + "content_download" PATHSEP; FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR]); /* Create the directory for each of the types of content */ const Subdirectory dirs[] = { SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR }; for (uint i = 0; i < lengthof(dirs); i++) { - char *tmp = str_fmt("%s%s", _searchpaths[SP_AUTODOWNLOAD_DIR], _subdirs[dirs[i]]); - FioCreateDirectory(tmp); - free(tmp); + FioCreateDirectory(FioGetDirectory(SP_AUTODOWNLOAD_DIR, dirs[i])); } - extern char *_log_file; - _log_file = str_fmt("%sopenttd.log", _personal_dir); + extern std::string _log_file; + _log_file = _personal_dir + "openttd.log"; } /** @@ -1301,28 +1259,27 @@ void SanitizeFilename(char *filename) * @return Pointer to new memory containing the loaded data, or \c nullptr if loading failed. * @note If \a maxsize less than the length of the file, loading fails. */ -void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize) +std::unique_ptr ReadFileToMem(const std::string &filename, size_t &lenp, size_t maxsize) { - FILE *in = fopen(filename, "rb"); + FILE *in = fopen(filename.c_str(), "rb"); if (in == nullptr) return nullptr; + FileCloser fc(in); + fseek(in, 0, SEEK_END); size_t len = ftell(in); fseek(in, 0, SEEK_SET); - if (len > maxsize) { - fclose(in); - return nullptr; - } - byte *mem = MallocT(len + 1); - mem[len] = 0; - if (fread(mem, len, 1, in) != 1) { - fclose(in); - free(mem); - return nullptr; - } - fclose(in); + if (len > maxsize) return nullptr; - *lenp = len; + /* std::unique_ptr assumes new/delete unless a custom deleter is supplied. + * As we don't want to have to carry that deleter all over the place, use + * new directly to allocate the memory instead of malloc. */ + std::unique_ptr mem(static_cast(::operator new(len + 1))); + + mem.get()[len] = 0; + if (fread(mem.get(), len, 1, in) != 1) return nullptr; + + lenp = len; return mem; } @@ -1362,21 +1319,21 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s while ((dirent = readdir(dir)) != nullptr) { const char *d_name = FS2OTTD(dirent->d_name); - char filename[MAX_PATH]; if (!FiosIsValidFile(path, dirent, &sb)) continue; - seprintf(filename, lastof(filename), "%s%s", path, d_name); + std::string filename(path); + filename += d_name; if (S_ISDIR(sb.st_mode)) { /* Directory */ if (!recursive) continue; if (strcmp(d_name, ".") == 0 || strcmp(d_name, "..") == 0) continue; - if (!AppendPathSeparator(filename, lastof(filename))) continue; - num += ScanPath(fs, extension, filename, basepath_length, recursive); + AppendPathSeparator(filename); + num += ScanPath(fs, extension, filename.c_str(), basepath_length, recursive); } else if (S_ISREG(sb.st_mode)) { /* File */ - if (MatchesExtension(extension, filename) && fs->AddFile(filename, basepath_length, nullptr)) num++; + if (MatchesExtension(extension, filename.c_str()) && fs->AddFile(filename, basepath_length, {})) num++; } } @@ -1394,9 +1351,9 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s static uint ScanTar(FileScanner *fs, const char *extension, TarFileList::iterator tar) { uint num = 0; - const char *filename = (*tar).first.c_str(); + const auto &filename = (*tar).first; - if (MatchesExtension(extension, filename) && fs->AddFile(filename, 0, (*tar).second.tar_filename)) num++; + if (MatchesExtension(extension, filename.c_str()) && fs->AddFile(filename, 0, (*tar).second.tar_filename)) num++; return num; } @@ -1415,7 +1372,6 @@ uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool r this->subdir = sd; Searchpath sp; - char path[MAX_PATH]; TarFileList::iterator tar; uint num = 0; @@ -1423,8 +1379,8 @@ uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool r /* Don't search in the working directory */ if (sp == SP_WORKING_DIR && !_do_scan_working_directory) continue; - FioAppendDirectory(path, lastof(path), sp, sd); - num += ScanPath(this, extension, path, strlen(path), recursive); + std::string path = FioGetDirectory(sp, sd); + num += ScanPath(this, extension, path.c_str(), path.size(), recursive); } if (tars && sd != NO_DIRECTORY) { @@ -1457,8 +1413,7 @@ uint FileScanner::Scan(const char *extension, Subdirectory sd, bool tars, bool r */ uint FileScanner::Scan(const char *extension, const char *directory, bool recursive) { - char path[MAX_PATH]; - strecpy(path, directory, lastof(path)); - if (!AppendPathSeparator(path, lastof(path))) return 0; - return ScanPath(this, extension, path, strlen(path), recursive); + std::string path(directory); + AppendPathSeparator(path); + return ScanPath(this, extension, path.c_str(), path.size(), recursive); } diff --git a/src/fileio_func.h b/src/fileio_func.h index dec1931939..f373188fa8 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -12,6 +12,7 @@ #include "core/enum_type.hpp" #include "fileio_type.h" +#include void FioSeekTo(size_t pos, int mode); void FioSeekToFile(uint8 slot, size_t pos); @@ -21,50 +22,38 @@ byte FioReadByte(); uint16 FioReadWord(); uint32 FioReadDword(); void FioCloseAll(); -void FioOpenFile(int slot, const char *filename, Subdirectory subdir); +void FioOpenFile(int slot, const std::string &filename, Subdirectory subdir); void FioReadBlock(void *ptr, size_t size); void FioSkipBytes(int n); -/** - * The search paths OpenTTD could search through. - * At least one of the slots has to be filled with a path. - * nullptr paths tell that there is no such path for the - * current operating system. - */ -extern const char *_searchpaths[NUM_SEARCHPATHS]; - /** * Checks whether the given search path is a valid search path * @param sp the search path to check * @return true if the search path is valid */ -static inline bool IsValidSearchPath(Searchpath sp) -{ - return sp < NUM_SEARCHPATHS && _searchpaths[sp] != nullptr; -} +bool IsValidSearchPath(Searchpath sp); /** Iterator for all the search paths */ #define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp)) void FioFCloseFile(FILE *f); -FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr); -bool FioCheckFileExists(const char *filename, Subdirectory subdir); -char *FioGetFullPath(char *buf, const char *last, Searchpath sp, Subdirectory subdir, const char *filename); -char *FioFindFullPath(char *buf, const char *last, Subdirectory subdir, const char *filename); -char *FioAppendDirectory(char *buf, const char *last, Searchpath sp, Subdirectory subdir); -char *FioGetDirectory(char *buf, const char *last, Subdirectory subdir); -void FioCreateDirectory(const char *name); +FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr); +bool FioCheckFileExists(const std::string &filename, Subdirectory subdir); +std::string FioFindFullPath(Subdirectory subdir, const char *filename); +std::string FioGetDirectory(Searchpath sp, Subdirectory subdir); +std::string FioFindDirectory(Subdirectory subdir); +void FioCreateDirectory(const std::string &name); const char *FiosGetScreenshotDir(); void SanitizeFilename(char *filename); -bool AppendPathSeparator(char *buf, const char *last); +void AppendPathSeparator(std::string &buf); void DeterminePaths(const char *exe); -void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize); -bool FileExists(const char *filename); -bool ExtractTar(const char *tar_filename, Subdirectory subdir); +std::unique_ptr ReadFileToMem(const std::string &filename, size_t &lenp, size_t maxsize); +bool FileExists(const std::string &filename); +bool ExtractTar(const std::string &tar_filename, Subdirectory subdir); -extern const char *_personal_dir; ///< custom directory for personal settings, saves, newgrf, etc. +extern std::string _personal_dir; ///< custom directory for personal settings, saves, newgrf, etc. /** Helper for scanning for files with a given name */ class FileScanner { @@ -85,7 +74,7 @@ public: * @param tar_filename the name of the tar file the file is read from. * @return true if the file is added. */ - virtual bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) = 0; + virtual bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) = 0; }; /** Helper for scanning for files with tar as extension */ @@ -103,9 +92,9 @@ public: ALL = BASESET | NEWGRF | AI | SCENARIO | GAME, ///< Scan for everything. }; - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename = nullptr) override; + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename = {}) override; - bool AddFile(Subdirectory sd, const char *filename); + bool AddFile(Subdirectory sd, const std::string &filename); /** Do the scan for Tars. */ static uint DoScan(TarScanner::Mode mode); @@ -118,14 +107,14 @@ DECLARE_ENUM_AS_BIT_SET(TarScanner::Mode) struct DIR; struct dirent { // XXX - only d_name implemented - TCHAR *d_name; // name of found file + wchar_t *d_name; // name of found file /* little hack which will point to parent DIR struct which will * save us a call to GetFileAttributes if we want information * about the file (for example in function fio_bla) */ DIR *dir; }; -DIR *opendir(const TCHAR *path); +DIR *opendir(const wchar_t *path); struct dirent *readdir(DIR *d); int closedir(DIR *d); #else @@ -159,4 +148,12 @@ public: } }; +/** Helper to manage a FILE with a \c std::unique_ptr. */ +struct FileDeleter { + void operator()(FILE *f) + { + if (f) fclose(f); + } +}; + #endif /* FILEIO_FUNC_H */ diff --git a/src/fileio_type.h b/src/fileio_type.h index 15f886d050..14acf07971 100644 --- a/src/fileio_type.h +++ b/src/fileio_type.h @@ -128,10 +128,10 @@ enum Subdirectory { /** * Types of searchpaths OpenTTD might use */ -enum Searchpath { +enum Searchpath : unsigned { SP_FIRST_DIR, SP_WORKING_DIR = SP_FIRST_DIR, ///< Search in the working directory -#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR) +#ifdef USE_XDG SP_PERSONAL_DIR_XDG, ///< Search in the personal directory from the XDG specification #endif SP_PERSONAL_DIR, ///< Search in the personal directory @@ -140,6 +140,8 @@ enum Searchpath { SP_INSTALLATION_DIR, ///< Search in the installation directory SP_APPLICATION_BUNDLE_DIR, ///< Search within the application bundle SP_AUTODOWNLOAD_DIR, ///< Search within the autodownload directory + SP_AUTODOWNLOAD_PERSONAL_DIR, ///< Search within the autodownload directory located in the personal directory + SP_AUTODOWNLOAD_PERSONAL_DIR_XDG, ///< Search within the autodownload directory located in the personal directory (XDG variant) NUM_SEARCHPATHS }; diff --git a/src/fios.cpp b/src/fios.cpp index 24487174b8..b48bc21089 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -17,8 +17,11 @@ #include "network/network_content.h" #include "screenshot.h" #include "string_func.h" +#include "strings_func.h" #include "tar_type.h" #include +#include +#include #ifndef _WIN32 # include @@ -29,8 +32,7 @@ #include "safeguards.h" /* Variables to display file lists */ -static char *_fios_path; -static const char *_fios_path_last; +static std::string *_fios_path = nullptr; SortingBits _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING; /* OS-specific functions are taken from their respective files (win32/unix/os2 .c) */ @@ -41,7 +43,7 @@ extern void FiosGetDrives(FileList &file_list); extern bool FiosGetDiskFreeSpace(const char *path, uint64 *tot); /* get the name of an oldstyle savegame */ -extern void GetOldSaveGameName(const char *file, char *title, const char *last); +extern void GetOldSaveGameName(const std::string &file, char *title, const char *last); /** * Compare two FiosItem's. Used with sort when sorting the file list. @@ -138,7 +140,7 @@ const FiosItem *FileList::FindItem(const char *file) */ StringID FiosGetDescText(const char **path, uint64 *total_free) { - *path = _fios_path; + *path = _fios_path->c_str(); return FiosGetDiskFreeSpace(*path, total_free) ? STR_SAVELOAD_BYTES_FREE : STR_ERROR_UNABLE_TO_READ_DRIVE; } @@ -152,7 +154,8 @@ const char *FiosBrowseTo(const FiosItem *item) switch (item->type) { case FIOS_TYPE_DRIVE: #if defined(_WIN32) || defined(__OS2__) - seprintf(_fios_path, _fios_path_last, "%c:" PATHSEP, item->title[0]); + assert(_fios_path != nullptr); + *_fios_path = std::string{ item->title[0] } + ":" PATHSEP; #endif break; @@ -160,25 +163,28 @@ const char *FiosBrowseTo(const FiosItem *item) break; case FIOS_TYPE_PARENT: { - /* Check for possible nullptr ptr */ - char *s = strrchr(_fios_path, PATHSEPCHAR); - if (s != nullptr && s != _fios_path) { - s[0] = '\0'; // Remove last path separator character, so we can go up one level. + assert(_fios_path != nullptr); + auto s = _fios_path->find_last_of(PATHSEPCHAR); + if (s != std::string::npos && s != 0) { + _fios_path->erase(s); // Remove last path separator character, so we can go up one level. } - s = strrchr(_fios_path, PATHSEPCHAR); - if (s != nullptr) { - s[1] = '\0'; // go up a directory + + s = _fios_path->find_last_of(PATHSEPCHAR); + if (s != std::string::npos) { + _fios_path->erase(s + 1); // go up a directory } break; } case FIOS_TYPE_DIR: - strecat(_fios_path, item->name, _fios_path_last); - strecat(_fios_path, PATHSEP, _fios_path_last); + assert(_fios_path != nullptr); + *_fios_path += item->name; + *_fios_path += PATHSEP; break; case FIOS_TYPE_DIRECT: - seprintf(_fios_path, _fios_path_last, "%s", item->name); + assert(_fios_path != nullptr); + *_fios_path = item->name; break; case FIOS_TYPE_FILE: @@ -195,26 +201,26 @@ const char *FiosBrowseTo(const FiosItem *item) /** * Construct a filename from its components in destination buffer \a buf. - * @param buf Destination buffer. * @param path Directory path, may be \c nullptr. * @param name Filename. * @param ext Filename extension (use \c "" for no extension). - * @param last Last element of buffer \a buf. + * @return The completed filename. */ -static void FiosMakeFilename(char *buf, const char *path, const char *name, const char *ext, const char *last) +static std::string FiosMakeFilename(const std::string *path, const char *name, const char *ext) { + std::string buf; + if (path != nullptr) { - const char *buf_start = buf; - buf = strecpy(buf, path, last); + buf = *path; /* Remove trailing path separator, if present */ - if (buf > buf_start && buf[-1] == PATHSEPCHAR) buf--; + if (!buf.empty() && buf.back() == PATHSEPCHAR) buf.pop_back(); } /* Don't append the extension if it is already there */ const char *period = strrchr(name, '.'); if (period != nullptr && strcasecmp(period, ext) == 0) ext = ""; - seprintf(buf, last, PATHSEP "%s%s", name, ext); + return buf + PATHSEP + name + ext; } /** @@ -222,27 +228,26 @@ static void FiosMakeFilename(char *buf, const char *path, const char *name, cons * @param buf Destination buffer for saving the filename. * @param name Name of the file. * @param last Last element of buffer \a buf. + * @return The completed filename. */ -void FiosMakeSavegameName(char *buf, const char *name, const char *last) +std::string FiosMakeSavegameName(const char *name) { const char *extension = (_game_mode == GM_EDITOR) ? ".scn" : ".sav"; - FiosMakeFilename(buf, _fios_path, name, extension, last); + return FiosMakeFilename(_fios_path, name, extension); } /** * Construct a filename for a height map. - * @param buf Destination buffer. * @param name Filename. - * @param last Last element of buffer \a buf. + * @return The completed filename. */ -void FiosMakeHeightmapName(char *buf, const char *name, const char *last) +std::string FiosMakeHeightmapName(const char *name) { - char ext[5]; - ext[0] = '.'; - strecpy(ext + 1, GetCurrentScreenshotExtension(), lastof(ext)); + std::string ext("."); + ext += GetCurrentScreenshotExtension(); - FiosMakeFilename(buf, _fios_path, name, ext, last); + return FiosMakeFilename(_fios_path, name, ext.c_str()); } /** @@ -252,13 +257,11 @@ void FiosMakeHeightmapName(char *buf, const char *name, const char *last) */ bool FiosDelete(const char *name) { - char filename[512]; - - FiosMakeSavegameName(filename, name, lastof(filename)); - return unlink(filename) == 0; + std::string filename = FiosMakeSavegameName(name); + return unlink(filename.c_str()) == 0; } -typedef FiosType fios_getlist_callback_proc(SaveLoadOperation fop, const char *filename, const char *ext, char *title, const char *last); +typedef FiosType fios_getlist_callback_proc(SaveLoadOperation fop, const std::string &filename, const char *ext, char *title, const char *last); /** * Scanner to scan for a particular type of FIOS file. @@ -278,7 +281,7 @@ public: fop(fop), callback_proc(callback_proc), file_list(file_list) {} - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override; }; /** @@ -287,25 +290,26 @@ public: * @param basepath_length amount of characters to chop of before to get a relative filename * @return true if the file is added. */ -bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, const char *tar_filename) +bool FiosFileScanner::AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) { - const char *ext = strrchr(filename, '.'); - if (ext == nullptr) return false; + auto sep = filename.rfind('.'); + if (sep == std::string::npos) return false; + std::string ext = filename.substr(sep); char fios_title[64]; fios_title[0] = '\0'; // reset the title; - FiosType type = this->callback_proc(this->fop, filename, ext, fios_title, lastof(fios_title)); + FiosType type = this->callback_proc(this->fop, filename, ext.c_str(), fios_title, lastof(fios_title)); if (type == FIOS_TYPE_INVALID) return false; for (const FiosItem *fios = file_list.Begin(); fios != file_list.End(); fios++) { - if (strcmp(fios->name, filename) == 0) return false; + if (filename == fios->name) return false; } FiosItem *fios = file_list.Append(); #ifdef _WIN32 // Retrieve the file modified date using GetFileTime rather than stat to work around an obscure MSVC bug that affects Windows XP - HANDLE fh = CreateFile(OTTD2FS(filename), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); + HANDLE fh = CreateFile(OTTD2FS(filename.c_str()), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); if (fh != INVALID_HANDLE_VALUE) { FILETIME ft; @@ -324,7 +328,7 @@ bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, cons CloseHandle(fh); #else struct stat sb; - if (stat(filename, &sb) == 0) { + if (stat(filename.c_str(), &sb) == 0) { fios->mtime = sb.st_mtime; #endif } else { @@ -332,13 +336,13 @@ bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, cons } fios->type = type; - strecpy(fios->name, filename, lastof(fios->name)); + strecpy(fios->name, filename.c_str(), lastof(fios->name)); /* If the file doesn't have a title, use its filename */ const char *t = fios_title; if (StrEmpty(fios_title)) { - t = strrchr(filename, PATHSEPCHAR); - t = (t == nullptr) ? filename : (t + 1); + auto ps = filename.rfind(PATHSEPCHAR); + t = filename.c_str() + (ps == std::string::npos ? 0 : ps + 1); } strecpy(fios->title, t, lastof(fios->title)); str_validate(fios->title, lastof(fios->title)); @@ -365,29 +369,34 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c file_list.Clear(); + assert(_fios_path != nullptr); + /* A parent directory link exists if we are not in the root directory */ - if (!FiosIsRoot(_fios_path)) { + if (!FiosIsRoot(_fios_path->c_str())) { fios = file_list.Append(); fios->type = FIOS_TYPE_PARENT; fios->mtime = 0; strecpy(fios->name, "..", lastof(fios->name)); - strecpy(fios->title, ".. (Parent directory)", lastof(fios->title)); + SetDParamStr(0, ".."); + GetString(fios->title, STR_SAVELOAD_PARENT_DIRECTORY, lastof(fios->title)); } /* Show subdirectories */ - if ((dir = ttd_opendir(_fios_path)) != nullptr) { + if ((dir = ttd_opendir(_fios_path->c_str())) != nullptr) { while ((dirent = readdir(dir)) != nullptr) { strecpy(d_name, FS2OTTD(dirent->d_name), lastof(d_name)); /* found file must be directory, but not '.' or '..' */ - if (FiosIsValidFile(_fios_path, dirent, &sb) && S_ISDIR(sb.st_mode) && + if (FiosIsValidFile(_fios_path->c_str(), dirent, &sb) && S_ISDIR(sb.st_mode) && (!FiosIsHiddenFile(dirent) || strncasecmp(d_name, PERSONAL_DIR, strlen(d_name)) == 0) && strcmp(d_name, ".") != 0 && strcmp(d_name, "..") != 0) { fios = file_list.Append(); fios->type = FIOS_TYPE_DIR; fios->mtime = 0; strecpy(fios->name, d_name, lastof(fios->name)); - seprintf(fios->title, lastof(fios->title), "%s" PATHSEP " (Directory)", d_name); + std::string dirname = std::string(d_name) + PATHSEP; + SetDParamStr(0, dirname.c_str()); + GetString(fios->title, STR_SAVELOAD_DIRECTORY, lastof(fios->title)); str_validate(fios->title, lastof(fios->title)); } } @@ -408,7 +417,7 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c /* Show files */ FiosFileScanner scanner(fop, callback_proc, file_list); if (subdir == NO_DIRECTORY) { - scanner.Scan(nullptr, _fios_path, false); + scanner.Scan(nullptr, _fios_path->c_str(), false); } else { scanner.Scan(nullptr, subdir, true, true); } @@ -429,11 +438,10 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c * @param last the last element in the title buffer * @param subdir the sub directory to search in */ -static void GetFileTitle(const char *file, char *title, const char *last, Subdirectory subdir) +static void GetFileTitle(const std::string &file, char *title, const char *last, Subdirectory subdir) { - char buf[MAX_PATH]; - strecpy(buf, file, lastof(buf)); - strecat(buf, ".title", lastof(buf)); + std::string buf = file; + buf += ".title"; FILE *f = FioFOpenFile(buf, "r", subdir); if (f == nullptr) return; @@ -456,7 +464,7 @@ static void GetFileTitle(const char *file, char *title, const char *last, Subdir * @see FiosGetFileList * @see FiosGetSavegameList */ -FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last) +FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last) { /* Show savegame files * .SAV OpenTTD saved game @@ -491,17 +499,11 @@ FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, co */ void FiosGetSavegameList(SaveLoadOperation fop, FileList &file_list) { - static char *fios_save_path = nullptr; - static char *fios_save_path_last = nullptr; + static std::optional fios_save_path; - if (fios_save_path == nullptr) { - fios_save_path = MallocT(MAX_PATH); - fios_save_path_last = fios_save_path + MAX_PATH - 1; - FioGetDirectory(fios_save_path, fios_save_path_last, SAVE_DIR); - } + if (!fios_save_path) fios_save_path = FioFindDirectory(SAVE_DIR); - _fios_path = fios_save_path; - _fios_path_last = fios_save_path_last; + _fios_path = &(*fios_save_path); FiosGetFileList(fop, &FiosGetSavegameListCallback, NO_DIRECTORY, file_list); } @@ -517,7 +519,7 @@ void FiosGetSavegameList(SaveLoadOperation fop, FileList &file_list) * @see FiosGetFileList * @see FiosGetScenarioList */ -static FiosType FiosGetScenarioListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last) +static FiosType FiosGetScenarioListCallback(SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last) { /* Show scenario files * .SCN OpenTTD style scenario file @@ -546,27 +548,19 @@ static FiosType FiosGetScenarioListCallback(SaveLoadOperation fop, const char *f */ void FiosGetScenarioList(SaveLoadOperation fop, FileList &file_list) { - static char *fios_scn_path = nullptr; - static char *fios_scn_path_last = nullptr; + static std::optional fios_scn_path; /* Copy the default path on first run or on 'New Game' */ - if (fios_scn_path == nullptr) { - fios_scn_path = MallocT(MAX_PATH); - fios_scn_path_last = fios_scn_path + MAX_PATH - 1; - FioGetDirectory(fios_scn_path, fios_scn_path_last, SCENARIO_DIR); - } + if (!fios_scn_path) fios_scn_path = FioFindDirectory(SCENARIO_DIR); - _fios_path = fios_scn_path; - _fios_path_last = fios_scn_path_last; + _fios_path = &(*fios_scn_path); - char base_path[MAX_PATH]; - FioGetDirectory(base_path, lastof(base_path), SCENARIO_DIR); - - Subdirectory subdir = (fop == SLO_LOAD && strcmp(base_path, _fios_path) == 0) ? SCENARIO_DIR : NO_DIRECTORY; + std::string base_path = FioFindDirectory(SCENARIO_DIR); + Subdirectory subdir = (fop == SLO_LOAD && base_path == *_fios_path) ? SCENARIO_DIR : NO_DIRECTORY; FiosGetFileList(fop, &FiosGetScenarioListCallback, subdir, file_list); } -static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last) +static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last) { /* Show heightmap files * .PNG PNG Based heightmap files @@ -593,10 +587,9 @@ static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const char * bool match = false; Searchpath sp; FOR_ALL_SEARCHPATHS(sp) { - char buf[MAX_PATH]; - FioAppendDirectory(buf, lastof(buf), sp, HEIGHTMAP_DIR); + std::string buf = FioGetDirectory(sp, HEIGHTMAP_DIR); - if (strncmp(buf, it->second.tar_filename, strlen(buf)) == 0) { + if (buf.compare(0, buf.size(), it->second.tar_filename, 0, buf.size()) == 0) { match = true; break; } @@ -617,22 +610,14 @@ static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const char * */ void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list) { - static char *fios_hmap_path = nullptr; - static char *fios_hmap_path_last = nullptr; + static std::optional fios_hmap_path; - if (fios_hmap_path == nullptr) { - fios_hmap_path = MallocT(MAX_PATH); - fios_hmap_path_last = fios_hmap_path + MAX_PATH - 1; - FioGetDirectory(fios_hmap_path, fios_hmap_path_last, HEIGHTMAP_DIR); - } + if (!fios_hmap_path) fios_hmap_path = FioFindDirectory(HEIGHTMAP_DIR); - _fios_path = fios_hmap_path; - _fios_path_last = fios_hmap_path_last; + _fios_path = &(*fios_hmap_path); - char base_path[MAX_PATH]; - FioGetDirectory(base_path, lastof(base_path), HEIGHTMAP_DIR); - - Subdirectory subdir = strcmp(base_path, _fios_path) == 0 ? HEIGHTMAP_DIR : NO_DIRECTORY; + std::string base_path = FioFindDirectory(HEIGHTMAP_DIR); + Subdirectory subdir = base_path == *_fios_path ? HEIGHTMAP_DIR : NO_DIRECTORY; FiosGetFileList(fop, &FiosGetHeightmapListCallback, subdir, file_list); } @@ -642,14 +627,11 @@ void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list) */ const char *FiosGetScreenshotDir() { - static char *fios_screenshot_path = nullptr; + static std::optional fios_screenshot_path; - if (fios_screenshot_path == nullptr) { - fios_screenshot_path = MallocT(MAX_PATH); - FioGetDirectory(fios_screenshot_path, fios_screenshot_path + MAX_PATH - 1, SCREENSHOT_DIR); - } + if (!fios_screenshot_path) fios_screenshot_path = FioFindDirectory(SCREENSHOT_DIR); - return fios_screenshot_path; + return fios_screenshot_path->c_str(); } /** Basic data to distinguish a scenario. Used in the server list window */ @@ -691,28 +673,25 @@ public: this->scanned = true; } - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override { FILE *f = FioFOpenFile(filename, "r", SCENARIO_DIR); if (f == nullptr) return false; ScenarioIdentifier id; - int fret = fscanf(f, "%i", &id.scenid); + int fret = fscanf(f, "%u", &id.scenid); FioFCloseFile(f); if (fret != 1) return false; - strecpy(id.filename, filename, lastof(id.filename)); + strecpy(id.filename, filename.c_str(), lastof(id.filename)); Md5 checksum; uint8 buffer[1024]; - char basename[MAX_PATH]; ///< \a filename without the extension. size_t len, size; /* open the scenario file, but first get the name. * This is safe as we check on extension which * must always exist. */ - strecpy(basename, filename, lastof(basename)); - *strrchr(basename, '.') = '\0'; - f = FioFOpenFile(basename, "rb", SCENARIO_DIR, &size); + f = FioFOpenFile(filename.substr(0, filename.rfind('.')), "rb", SCENARIO_DIR, &size); if (f == nullptr) return false; /* calculate md5sum */ diff --git a/src/fios.h b/src/fios.h index 6a7b6bf01f..3a16b6426a 100644 --- a/src/fios.h +++ b/src/fios.h @@ -13,7 +13,7 @@ #include "gfx_type.h" #include "company_base.h" #include "newgrf_config.h" -#include "network/core/tcp_content.h" +#include "network/core/tcp_content_type.h" /** Special values for save-load window for the data parameter of #InvalidateWindowData. */ @@ -119,8 +119,7 @@ public: */ inline FiosItem *Append() { - /*C++17: return &*/ this->files.emplace_back(); - return &this->files.back(); + return &this->files.emplace_back(); } /** @@ -221,9 +220,9 @@ const char *FiosBrowseTo(const FiosItem *item); StringID FiosGetDescText(const char **path, uint64 *total_free); bool FiosDelete(const char *name); -void FiosMakeHeightmapName(char *buf, const char *name, const char *last); -void FiosMakeSavegameName(char *buf, const char *name, const char *last); +std::string FiosMakeHeightmapName(const char *name); +std::string FiosMakeSavegameName(const char *name); -FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, const char *ext, char *title, const char *last); +FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last); #endif /* FIOS_H */ diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index bd50810e88..7f7c73e38a 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -360,7 +360,7 @@ public: if (_game_mode != GM_MENU && !_networking && _game_mode != GM_EDITOR) { DoCommandP(0, PM_PAUSED_SAVELOAD, 1, CMD_PAUSE); } - SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0); + SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0, CM_DDSP_ZZZ); this->OnInvalidateData(SLIWD_RESCAN_FILES); @@ -368,22 +368,24 @@ public: /* Select the initial directory. */ o_dir.type = FIOS_TYPE_DIRECT; + std::string dir; switch (this->abstract_filetype) { case FT_SAVEGAME: - FioGetDirectory(o_dir.name, lastof(o_dir.name), SAVE_DIR); + dir = FioFindDirectory(SAVE_DIR); break; case FT_SCENARIO: - FioGetDirectory(o_dir.name, lastof(o_dir.name), SCENARIO_DIR); + dir = FioFindDirectory(SCENARIO_DIR); break; case FT_HEIGHTMAP: - FioGetDirectory(o_dir.name, lastof(o_dir.name), HEIGHTMAP_DIR); + dir = FioFindDirectory(HEIGHTMAP_DIR); break; default: - strecpy(o_dir.name, _personal_dir, lastof(o_dir.name)); + dir = _personal_dir; } + strecpy(o_dir.name, dir.c_str(), lastof(o_dir.name)); switch (this->fop) { case SLO_SAVE: @@ -533,9 +535,9 @@ public: for (auto &pair : _load_check_data.companies) { SetDParam(0, pair.first + 1); const CompanyProperties &c = *pair.second; - if (c.name != nullptr) { + if (!c.name.empty()) { SetDParam(1, STR_JUST_RAW_STRING); - SetDParamStr(2, c.name); + SetDParamStr(2, c.name.c_str()); } else { SetDParam(1, c.name_1); SetDParam(2, c.name_2); @@ -769,14 +771,14 @@ public: } } else if (this->IsWidgetLowered(WID_SL_SAVE_GAME)) { // Save button clicked if (this->abstract_filetype == FT_SAVEGAME || this->abstract_filetype == FT_SCENARIO) { - FiosMakeSavegameName(_file_to_saveload.name, this->filename_editbox.text.buf, lastof(_file_to_saveload.name)); + _file_to_saveload.name = FiosMakeSavegameName(this->filename_editbox.text.buf); if (FioCheckFileExists(_file_to_saveload.name, Subdirectory::SAVE_DIR)) { ShowQuery(STR_SAVELOAD_OVERWRITE_TITLE, STR_SAVELOAD_OVERWRITE_WARNING, this, SaveLoadWindow::SaveGameConfirmationCallback); } else { _switch_mode = SM_SAVE_GAME; } } else { - FiosMakeHeightmapName(_file_to_saveload.name, this->filename_editbox.text.buf, lastof(_file_to_saveload.name)); + _file_to_saveload.name = FiosMakeHeightmapName(this->filename_editbox.text.buf); if (FioCheckFileExists(_file_to_saveload.name, Subdirectory::SAVE_DIR)) { ShowQuery(STR_SAVELOAD_OVERWRITE_TITLE, STR_SAVELOAD_OVERWRITE_WARNING, this, SaveLoadWindow::SaveHeightmapConfirmationCallback); } else { @@ -927,7 +929,5 @@ void ShowSaveLoadDialog(AbstractFileType abstract_filetype, SaveLoadOperation fo sld = (abstract_filetype == FT_HEIGHTMAP) ? &_load_heightmap_dialog_desc : &_load_dialog_desc; } - _file_to_saveload.abstract_ftype = abstract_filetype; - new SaveLoadWindow(sld, abstract_filetype, fop); } diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 9102f356ad..d450deaca6 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -9,6 +9,7 @@ #include "stdafx.h" #include "fontcache.h" +#include "fontcache_internal.h" #include "fontdetection.h" #include "blitter/factory.hpp" #include "core/math_func.hpp" @@ -26,12 +27,13 @@ #include "safeguards.h" static const int ASCII_LETTERSTART = 32; ///< First printable ASCII letter. -static const int MAX_FONT_SIZE = 72; ///< Maximum font size. /** Default heights for the different sizes of fonts. */ static const int _default_font_height[FS_END] = {10, 6, 18, 10}; static const int _default_font_ascender[FS_END] = { 8, 5, 15, 8}; +FreeTypeSettings _freetype; + /** * Create a new font cache. * @param fs The size of the font. @@ -53,6 +55,11 @@ FontCache::~FontCache() Layouter::ResetFontCache(this->fs); } +int FontCache::GetDefaultFontHeight(FontSize fs) +{ + return _default_font_height[fs]; +} + /** * Get height of a character for a given font size. @@ -105,13 +112,13 @@ SpriteFontCache::~SpriteFontCache() this->ClearGlyphToSpriteMap(); } -SpriteID SpriteFontCache::GetUnicodeGlyph(GlyphID key) +SpriteID SpriteFontCache::GetUnicodeGlyph(WChar key) { if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == nullptr) return 0; return this->glyph_to_spriteid_map[GB(key, 8, 8)][GB(key, 0, 8)]; } -void SpriteFontCache::SetUnicodeGlyph(GlyphID key, SpriteID sprite) +void SpriteFontCache::SetUnicodeGlyph(WChar key, SpriteID sprite) { if (this->glyph_to_spriteid_map == nullptr) this->glyph_to_spriteid_map = CallocT(256); if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == nullptr) this->glyph_to_spriteid_map[GB(key, 8, 8)] = CallocT(256); @@ -198,64 +205,6 @@ bool SpriteFontCache::GetDrawGlyphShadow() /* static */ FontCache *FontCache::caches[FS_END] = { new SpriteFontCache(FS_NORMAL), new SpriteFontCache(FS_SMALL), new SpriteFontCache(FS_LARGE), new SpriteFontCache(FS_MONO) }; -#if defined(WITH_FREETYPE) || defined(_WIN32) - -FreeTypeSettings _freetype; - -static const byte FACE_COLOUR = 1; -static const byte SHADOW_COLOUR = 2; - -/** Font cache for fonts that are based on a TrueType font. */ -class TrueTypeFontCache : public FontCache { -protected: - int req_size; ///< Requested font size. - int used_size; ///< Used font size. - - typedef SmallMap > FontTable; ///< Table with font table cache - FontTable font_tables; ///< Cached font tables. - - /** Container for information about a glyph. */ - struct GlyphEntry { - Sprite *sprite; ///< The loaded sprite. - byte width; ///< The width of the glyph. - bool duplicate; ///< Whether this glyph entry is a duplicate, i.e. may this be freed? - }; - - /** - * The glyph cache. This is structured to reduce memory consumption. - * 1) There is a 'segment' table for each font size. - * 2) Each segment table is a discrete block of characters. - * 3) Each block contains 256 (aligned) characters sequential characters. - * - * The cache is accessed in the following way: - * For character 0x0041 ('A'): glyph_to_sprite[0x00][0x41] - * For character 0x20AC (Euro): glyph_to_sprite[0x20][0xAC] - * - * Currently only 256 segments are allocated, "limiting" us to 65536 characters. - * This can be simply changed in the two functions Get & SetGlyphPtr. - */ - GlyphEntry **glyph_to_sprite; - - GlyphEntry *GetGlyphPtr(GlyphID key); - void SetGlyphPtr(GlyphID key, const GlyphEntry *glyph, bool duplicate = false); - - virtual const void *InternalGetFontTable(uint32 tag, size_t &length) = 0; - virtual const Sprite *InternalGetGlyph(GlyphID key, bool aa) = 0; - -public: - TrueTypeFontCache(FontSize fs, int pixels); - virtual ~TrueTypeFontCache(); - virtual int GetFontSize() const { return this->used_size; } - virtual SpriteID GetUnicodeGlyph(WChar key) { return this->parent->GetUnicodeGlyph(key); } - virtual void SetUnicodeGlyph(WChar key, SpriteID sprite) { this->parent->SetUnicodeGlyph(key, sprite); } - virtual void InitializeUnicodeGlyphMap() { this->parent->InitializeUnicodeGlyphMap(); } - virtual const Sprite *GetGlyph(GlyphID key); - virtual const void *GetFontTable(uint32 tag, size_t &length); - virtual void ClearFontCache(); - virtual uint GetGlyphWidth(GlyphID key); - virtual bool GetDrawGlyphShadow(); - virtual bool IsBuiltInFont() { return false; } -}; /** * Create a new TrueTypeFontCache. @@ -328,17 +277,12 @@ void TrueTypeFontCache::SetGlyphPtr(GlyphID key, const GlyphEntry *glyph, bool d this->glyph_to_sprite[GB(key, 8, 8)][GB(key, 0, 8)].duplicate = duplicate; } -static void *AllocateFont(size_t size) -{ - return MallocT(size); -} - /* Check if a glyph should be rendered with anti-aliasing. */ -static bool GetFontAAState(FontSize size) +static bool GetFontAAState(FontSize size, bool check_blitter = true) { /* AA is only supported for 32 bpp */ - if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32) return false; + if (check_blitter && BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32) return false; switch (size) { default: NOT_REACHED(); @@ -402,10 +346,11 @@ const Sprite *TrueTypeFontCache::GetGlyph(GlyphID key) 0, // x_offs 0, // y_offs ST_FONT, + SCC_PAL, builtin_questionmark_data }; - Sprite *spr = BlitterFactory::GetCurrentBlitter()->Encode(&builtin_questionmark, AllocateFont); + Sprite *spr = BlitterFactory::GetCurrentBlitter()->Encode(&builtin_questionmark, SimpleSpriteAlloc); assert(spr != nullptr); GlyphEntry new_glyph; new_glyph.sprite = spr; @@ -434,7 +379,7 @@ const void *TrueTypeFontCache::GetFontTable(uint32 tag, size_t &length) const void *result = this->InternalGetFontTable(tag, length); - this->font_tables.Insert(tag, SmallPair(length, result)); + this->font_tables.Insert(tag, std::pair(length, result)); return result; } @@ -491,7 +436,7 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels) /* Font height is minimum height plus the difference between the default * height for this font size and the small size. */ int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]); - pixels = Clamp(min(head->Lowest_Rec_PPEM, 20) + diff, scaled_height, MAX_FONT_SIZE); + pixels = Clamp(std::min(head->Lowest_Rec_PPEM, MAX_FONT_MIN_REC_SIZE) + diff, scaled_height, MAX_FONT_SIZE); } } else { pixels = ScaleFontTrad(pixels); @@ -560,8 +505,27 @@ static void LoadFreeTypeFont(FontSize fs) } FT_Face face = nullptr; + + /* If font is an absolute path to a ttf, try loading that first. */ FT_Error error = FT_New_Face(_library, settings->font, 0, &face); +#if defined(WITH_COCOA) + extern void MacOSRegisterExternalFont(const char *file_path); + if (error == FT_Err_Ok) MacOSRegisterExternalFont(settings->font); +#endif + + if (error != FT_Err_Ok) { + /* Check if font is a relative filename in one of our search-paths. */ + std::string full_font = FioFindFullPath(BASE_DIR, settings->font); + if (!full_font.empty()) { + error = FT_New_Face(_library, full_font.c_str(), 0, &face); +#if defined(WITH_COCOA) + if (error == FT_Err_Ok) MacOSRegisterExternalFont(full_font.c_str()); +#endif + } + } + + /* Try loading based on font face name (OS-wide fonts). */ if (error != FT_Err_Ok) error = GetFontByFaceName(settings->font, &face); if (error == FT_Err_Ok) { @@ -636,16 +600,17 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa) aa = (slot->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY); /* Add 1 pixel for the shadow on the medium font. Our sprite must be at least 1x1 pixel */ - uint width = max(1U, (uint)slot->bitmap.width + (this->fs == FS_NORMAL)); - uint height = max(1U, (uint)slot->bitmap.rows + (this->fs == FS_NORMAL)); + uint width = std::max(1U, (uint)slot->bitmap.width + (this->fs == FS_NORMAL)); + uint height = std::max(1U, (uint)slot->bitmap.rows + (this->fs == FS_NORMAL)); /* Limit glyph size to prevent overflows later on. */ - if (width > 256 || height > 256) usererror("Font glyph is too large"); + if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) usererror("Font glyph is too large"); /* FreeType has rendered the glyph, now we allocate a sprite and copy the image into it */ SpriteLoader::Sprite sprite; sprite.AllocateData(ZOOM_LVL_NORMAL, width * height); sprite.type = ST_FONT; + sprite.colours = (aa ? SCC_PAL | SCC_ALPHA : SCC_PAL); sprite.width = width; sprite.height = height; sprite.x_offs = slot->bitmap_left; @@ -673,7 +638,7 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa) } GlyphEntry new_glyph; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(&sprite, AllocateFont); + new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(&sprite, SimpleSpriteAlloc); new_glyph.width = slot->advance.x >> 6; this->SetGlyphPtr(key, &new_glyph); @@ -708,324 +673,8 @@ const void *FreeTypeFontCache::InternalGetFontTable(uint32 tag, size_t &length) length = len; return result; } - -#elif defined(_WIN32) - -#include "os/windows/win32.h" -#ifndef ANTIALIASED_QUALITY -#define ANTIALIASED_QUALITY 4 -#endif - -/** Font cache for fonts that are based on a Win32 font. */ -class Win32FontCache : public TrueTypeFontCache { -private: - LOGFONT logfont; ///< Logical font information for selecting the font face. - HFONT font = nullptr; ///< The font face associated with this font. - HDC dc = nullptr; ///< Cached GDI device context. - HGDIOBJ old_font; ///< Old font selected into the GDI context. - SIZE glyph_size; ///< Maximum size of regular glyphs. - - void SetFontSize(FontSize fs, int pixels); - virtual const void *InternalGetFontTable(uint32 tag, size_t &length); - virtual const Sprite *InternalGetGlyph(GlyphID key, bool aa); - -public: - Win32FontCache(FontSize fs, const LOGFONT &logfont, int pixels); - ~Win32FontCache(); - virtual void ClearFontCache(); - virtual GlyphID MapCharToGlyph(WChar key); - virtual const char *GetFontName() { return WIDE_TO_MB(this->logfont.lfFaceName); } - virtual bool IsBuiltInFont() { return false; } - virtual void *GetOSHandle() { return &this->logfont; } -}; - - -/** - * Create a new Win32FontCache. - * @param fs The font size that is going to be cached. - * @param logfont The font that has to be loaded. - * @param pixels The number of pixels this font should be high. - */ -Win32FontCache::Win32FontCache(FontSize fs, const LOGFONT &logfont, int pixels) : TrueTypeFontCache(fs, pixels), logfont(logfont) -{ - this->dc = CreateCompatibleDC(nullptr); - this->SetFontSize(fs, pixels); -} - -Win32FontCache::~Win32FontCache() -{ - this->ClearFontCache(); - DeleteDC(this->dc); - DeleteObject(this->font); -} - -void Win32FontCache::SetFontSize(FontSize fs, int pixels) -{ - if (pixels == 0) { - /* Try to determine a good height based on the minimal height recommended by the font. */ - int scaled_height = ScaleFontTrad(_default_font_height[this->fs]); - pixels = scaled_height; - - HFONT temp = CreateFontIndirect(&this->logfont); - if (temp != nullptr) { - HGDIOBJ old = SelectObject(this->dc, temp); - - UINT size = GetOutlineTextMetrics(this->dc, 0, nullptr); - LPOUTLINETEXTMETRIC otm = (LPOUTLINETEXTMETRIC)AllocaM(BYTE, size); - GetOutlineTextMetrics(this->dc, size, otm); - - /* Font height is minimum height plus the difference between the default - * height for this font size and the small size. */ - int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]); - pixels = Clamp(min(otm->otmusMinimumPPEM, 20) + diff, scaled_height, MAX_FONT_SIZE); - - SelectObject(dc, old); - DeleteObject(temp); - } - } else { - pixels = ScaleFontTrad(pixels); - } - this->used_size = pixels; - - /* Create GDI font handle. */ - this->logfont.lfHeight = -pixels; - this->logfont.lfWidth = 0; - this->logfont.lfOutPrecision = ANTIALIASED_QUALITY; - - if (this->font != nullptr) { - SelectObject(dc, this->old_font); - DeleteObject(this->font); - } - this->font = CreateFontIndirect(&this->logfont); - this->old_font = SelectObject(this->dc, this->font); - - /* Query the font metrics we needed. */ - UINT otmSize = GetOutlineTextMetrics(this->dc, 0, nullptr); - POUTLINETEXTMETRIC otm = (POUTLINETEXTMETRIC)AllocaM(BYTE, otmSize); - GetOutlineTextMetrics(this->dc, otmSize, otm); - - this->units_per_em = otm->otmEMSquare; - this->ascender = otm->otmTextMetrics.tmAscent; - this->descender = otm->otmTextMetrics.tmDescent; - this->height = this->ascender + this->descender; - this->glyph_size.cx = otm->otmTextMetrics.tmMaxCharWidth; - this->glyph_size.cy = otm->otmTextMetrics.tmHeight; - - DEBUG(freetype, 2, "Loaded font '%s' with size %d", FS2OTTD((LPTSTR)((BYTE *)otm + (ptrdiff_t)otm->otmpFullName)), pixels); -} - -/** - * Reset cached glyphs. - */ -void Win32FontCache::ClearFontCache() -{ - /* GUI scaling might have changed, determine font size anew if it was automatically selected. */ - if (this->font != nullptr) this->SetFontSize(this->fs, this->req_size); - - this->TrueTypeFontCache::ClearFontCache(); -} - -/* virtual */ const Sprite *Win32FontCache::InternalGetGlyph(GlyphID key, bool aa) -{ - GLYPHMETRICS gm; - MAT2 mat = { {0, 1}, {0, 0}, {0, 0}, {0, 1} }; - - /* Make a guess for the needed memory size. */ - DWORD size = this->glyph_size.cy * Align(aa ? this->glyph_size.cx : max(this->glyph_size.cx / 8l, 1l), 4); // Bitmap data is DWORD-aligned rows. - byte *bmp = AllocaM(byte, size); - size = GetGlyphOutline(this->dc, key, GGO_GLYPH_INDEX | (aa ? GGO_GRAY8_BITMAP : GGO_BITMAP), &gm, size, bmp, &mat); - - if (size == GDI_ERROR) { - /* No dice with the guess. First query size of needed glyph memory, then allocate the - * memory and query again. This dance is necessary as some glyphs will only render with - * the exact matching size; e.g. the space glyph has no pixels and must be requested - * with size == 0, anything else fails. Unfortunately, a failed call doesn't return any - * info about the size and thus the triple GetGlyphOutline()-call. */ - size = GetGlyphOutline(this->dc, key, GGO_GLYPH_INDEX | (aa ? GGO_GRAY8_BITMAP : GGO_BITMAP), &gm, 0, nullptr, &mat); - if (size == GDI_ERROR) usererror("Unable to render font glyph"); - bmp = AllocaM(byte, size); - GetGlyphOutline(this->dc, key, GGO_GLYPH_INDEX | (aa ? GGO_GRAY8_BITMAP : GGO_BITMAP), &gm, size, bmp, &mat); - } - - /* Add 1 pixel for the shadow on the medium font. Our sprite must be at least 1x1 pixel. */ - uint width = max(1U, (uint)gm.gmBlackBoxX + (this->fs == FS_NORMAL)); - uint height = max(1U, (uint)gm.gmBlackBoxY + (this->fs == FS_NORMAL)); - - /* Limit glyph size to prevent overflows later on. */ - if (width > 256 || height > 256) usererror("Font glyph is too large"); - - /* GDI has rendered the glyph, now we allocate a sprite and copy the image into it. */ - SpriteLoader::Sprite sprite; - sprite.AllocateData(ZOOM_LVL_NORMAL, width * height); - sprite.type = ST_FONT; - sprite.width = width; - sprite.height = height; - sprite.x_offs = gm.gmptGlyphOrigin.x; - sprite.y_offs = this->ascender - gm.gmptGlyphOrigin.y; - - if (size > 0) { - /* All pixel data returned by GDI is in the form of DWORD-aligned rows. - * For a non anti-aliased glyph, the returned bitmap has one bit per pixel. - * For anti-aliased rendering, GDI uses the strange value range of 0 to 64, - * inclusively. To map this to 0 to 255, we shift left by two and then - * subtract one. */ - uint pitch = Align(aa ? gm.gmBlackBoxX : max(gm.gmBlackBoxX / 8u, 1u), 4); - - /* Draw shadow for medium size. */ - if (this->fs == FS_NORMAL && !aa) { - for (uint y = 0; y < gm.gmBlackBoxY; y++) { - for (uint x = 0; x < gm.gmBlackBoxX; x++) { - if (aa ? (bmp[x + y * pitch] > 0) : HasBit(bmp[(x / 8) + y * pitch], 7 - (x % 8))) { - sprite.data[1 + x + (1 + y) * sprite.width].m = SHADOW_COLOUR; - sprite.data[1 + x + (1 + y) * sprite.width].a = aa ? (bmp[x + y * pitch] << 2) - 1 : 0xFF; - } - } - } - } - - for (uint y = 0; y < gm.gmBlackBoxY; y++) { - for (uint x = 0; x < gm.gmBlackBoxX; x++) { - if (aa ? (bmp[x + y * pitch] > 0) : HasBit(bmp[(x / 8) + y * pitch], 7 - (x % 8))) { - sprite.data[x + y * sprite.width].m = FACE_COLOUR; - sprite.data[x + y * sprite.width].a = aa ? (bmp[x + y * pitch] << 2) - 1 : 0xFF; - } - } - } - } - - GlyphEntry new_glyph; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(&sprite, AllocateFont); - new_glyph.width = gm.gmCellIncX; - - this->SetGlyphPtr(key, &new_glyph); - - return new_glyph.sprite; -} - -/* virtual */ GlyphID Win32FontCache::MapCharToGlyph(WChar key) -{ - assert(IsPrintable(key)); - - if (key >= SCC_SPRITE_START && key <= SCC_SPRITE_END) { - return this->parent->MapCharToGlyph(key); - } - - /* Convert characters outside of the BMP into surrogate pairs. */ - WCHAR chars[2]; - if (key >= 0x010000U) { - chars[0] = (WCHAR)(((key - 0x010000U) >> 10) + 0xD800); - chars[1] = (WCHAR)(((key - 0x010000U) & 0x3FF) + 0xDC00); - } else { - chars[0] = (WCHAR)(key & 0xFFFF); - } - - WORD glyphs[2] = {0, 0}; - GetGlyphIndicesW(this->dc, chars, key >= 0x010000U ? 2 : 1, glyphs, GGI_MARK_NONEXISTING_GLYPHS); - - return glyphs[0] != 0xFFFF ? glyphs[0] : 0; -} - -/* virtual */ const void *Win32FontCache::InternalGetFontTable(uint32 tag, size_t &length) -{ - DWORD len = GetFontData(this->dc, tag, 0, nullptr, 0); - - void *result = nullptr; - if (len != GDI_ERROR && len > 0) { - result = MallocT(len); - GetFontData(this->dc, tag, 0, result, len); - } - - length = len; - return result; -} - -/** - * Loads the GDI font. - * If a GDI font description is present, e.g. from the automatic font - * fallback search, use it. Otherwise, try to resolve it by font name. - * @param fs The font size to load. - */ -static void LoadWin32Font(FontSize fs) -{ - static const char *SIZE_TO_NAME[] = { "medium", "small", "large", "mono" }; - - FreeTypeSubSetting *settings = nullptr; - switch (fs) { - default: NOT_REACHED(); - case FS_SMALL: settings = &_freetype.small; break; - case FS_NORMAL: settings = &_freetype.medium; break; - case FS_LARGE: settings = &_freetype.large; break; - case FS_MONO: settings = &_freetype.mono; break; - } - - if (StrEmpty(settings->font)) return; - - LOGFONT logfont; - MemSetT(&logfont, 0); - logfont.lfPitchAndFamily = fs == FS_MONO ? FIXED_PITCH : VARIABLE_PITCH; - logfont.lfCharSet = DEFAULT_CHARSET; - logfont.lfOutPrecision = OUT_OUTLINE_PRECIS; - logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS; - - if (settings->os_handle != nullptr) { - logfont = *(const LOGFONT *)settings->os_handle; - } else if (strchr(settings->font, '.') != nullptr && FileExists(settings->font)) { - /* Might be a font file name, try load it. */ - TCHAR fontPath[MAX_PATH]; - convert_to_fs(settings->font, fontPath, lengthof(fontPath), false); - - if (AddFontResourceEx(fontPath, FR_PRIVATE, 0) != 0) { - /* Try a nice little undocumented function first for getting the internal font name. - * Some documentation is found at: http://www.undocprint.org/winspool/getfontresourceinfo */ - typedef BOOL(WINAPI * PFNGETFONTRESOURCEINFO)(LPCTSTR, LPDWORD, LPVOID, DWORD); -#ifdef UNICODE - static PFNGETFONTRESOURCEINFO GetFontResourceInfo = (PFNGETFONTRESOURCEINFO)GetProcAddress(GetModuleHandle(_T("Gdi32")), "GetFontResourceInfoW"); -#else - static PFNGETFONTRESOURCEINFO GetFontResourceInfo = (PFNGETFONTRESOURCEINFO)GetProcAddress(GetModuleHandle(_T("Gdi32")), "GetFontResourceInfoA"); -#endif - - if (GetFontResourceInfo != nullptr) { - /* Try to query an array of LOGFONTs that describe the file. */ - DWORD len = 0; - if (GetFontResourceInfo(fontPath, &len, nullptr, 2) && len >= sizeof(LOGFONT)) { - LOGFONT *buf = (LOGFONT *)AllocaM(byte, len); - if (GetFontResourceInfo(fontPath, &len, buf, 2)) { - logfont = *buf; // Just use first entry. - } - } - } - - /* No dice yet. Use the file name as the font face name, hoping it matches. */ - if (logfont.lfFaceName[0] == 0) { - TCHAR fname[_MAX_FNAME]; - _tsplitpath(fontPath, nullptr, nullptr, fname, nullptr); - - _tcsncpy_s(logfont.lfFaceName, lengthof(logfont.lfFaceName), fname, _TRUNCATE); - logfont.lfWeight = strcasestr(settings->font, " bold") != nullptr || strcasestr(settings->font, "-bold") != nullptr ? FW_BOLD : FW_NORMAL; // Poor man's way to allow selecting bold fonts. - } - } else { - ShowInfoF("Unable to load file '%s' for %s font, using default windows font selection instead", settings->font, SIZE_TO_NAME[fs]); - } - } - - if (logfont.lfFaceName[0] == 0) { - logfont.lfWeight = strcasestr(settings->font, " bold") != nullptr ? FW_BOLD : FW_NORMAL; // Poor man's way to allow selecting bold fonts. - convert_to_fs(settings->font, logfont.lfFaceName, lengthof(logfont.lfFaceName), false); - } - - HFONT font = CreateFontIndirect(&logfont); - if (font == nullptr) { - ShowInfoF("Unable to use '%s' for %s font, Win32 reported error 0x%lX, using sprite font instead", settings->font, SIZE_TO_NAME[fs], GetLastError()); - return; - } - DeleteObject(font); - - new Win32FontCache(fs, logfont, settings->size); -} - #endif /* WITH_FREETYPE */ -#endif /* defined(WITH_FREETYPE) || defined(_WIN32) */ /** * (Re)initialize the freetype related things, i.e. load the non-sprite fonts. @@ -1042,7 +691,11 @@ void InitFreeType(bool monospace) #ifdef WITH_FREETYPE LoadFreeTypeFont(fs); #elif defined(_WIN32) + extern void LoadWin32Font(FontSize fs); LoadWin32Font(fs); +#elif defined(WITH_COCOA) + extern void LoadCoreTextFont(FontSize fs); + LoadCoreTextFont(fs); #endif } } @@ -1062,3 +715,25 @@ void UninitFreeType() _library = nullptr; #endif /* WITH_FREETYPE */ } + +/** + * Should any of the active fonts be anti-aliased? + * @return True if any of the loaded fonts want anti-aliased drawing. + */ +bool HasAntialiasedFonts() +{ + for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) { + if (!FontCache::Get(fs)->IsBuiltInFont() && GetFontAAState(fs, false)) return true; + } + + return false; +} + +#if !defined(_WIN32) && !defined(__APPLE__) && !defined(WITH_FONTCONFIG) && !defined(WITH_COCOA) + +#ifdef WITH_FREETYPE +FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) { return FT_Err_Cannot_Open_Resource; } +#endif /* WITH_FREETYPE */ + +bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, int winlangid, MissingGlyphSearcher *callback) { return false; } +#endif /* !defined(_WIN32) && !defined(__APPLE__) && !defined(WITH_FONTCONFIG) && !defined(WITH_COCOA) */ diff --git a/src/fontcache.h b/src/fontcache.h index 716b3e7d77..73675cf44e 100644 --- a/src/fontcache.h +++ b/src/fontcache.h @@ -28,6 +28,9 @@ protected: int ascender; ///< The ascender value of the font. int descender; ///< The descender value of the font. int units_per_em; ///< The units per EM value of the font. + + static int GetDefaultFontHeight(FontSize fs); + public: FontCache(FontSize fs); virtual ~FontCache(); @@ -127,7 +130,7 @@ public: * Get the native OS font handle, if there is one. * @return Opaque OS font handle. */ - virtual void *GetOSHandle() + virtual const void *GetOSHandle() { return nullptr; } @@ -209,15 +212,13 @@ static inline bool GetDrawGlyphShadow(FontSize size) return FontCache::Get(size)->GetDrawGlyphShadow(); } -#if defined(WITH_FREETYPE) || defined(_WIN32) - /** Settings for a single freetype font. */ struct FreeTypeSubSetting { char font[MAX_PATH]; ///< The name of the font, or path to the font. uint size; ///< The (requested) size of the font. bool aa; ///< Whether to do anti aliasing or not. - const void *os_handle = nullptr; ///< Optional native OS font info. + const void *os_handle = nullptr; ///< Optional native OS font info. Only valid during font search. }; /** Settings for the freetype fonts. */ @@ -230,9 +231,8 @@ struct FreeTypeSettings { extern FreeTypeSettings _freetype; -#endif /* defined(WITH_FREETYPE) || defined(_WIN32) */ - void InitFreeType(bool monospace); void UninitFreeType(); +bool HasAntialiasedFonts(); #endif /* FONTCACHE_H */ diff --git a/src/fontcache_internal.h b/src/fontcache_internal.h new file mode 100644 index 0000000000..acae3d71de --- /dev/null +++ b/src/fontcache_internal.h @@ -0,0 +1,77 @@ +/* + * This file is part of OpenTTD. + * OpenTTD 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, version 2. + * OpenTTD 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 OpenTTD. If not, see . + */ + +/** @file fontcache_internal.h Support types and functions for platform-specific font support. */ + +#ifndef FONTCACHE_INTERNAL_H +#define FONTCACHE_INTERNAL_H + +#include "core/smallmap_type.hpp" +#include "fontcache.h" + + +static const int MAX_FONT_SIZE = 72; ///< Maximum font size. + +static const byte FACE_COLOUR = 1; +static const byte SHADOW_COLOUR = 2; + +/** Font cache for fonts that are based on a TrueType font. */ +class TrueTypeFontCache : public FontCache { +protected: + static constexpr int MAX_GLYPH_DIM = 256; ///< Maximum glyph dimensions. + static constexpr uint MAX_FONT_MIN_REC_SIZE = 20u; ///< Upper limit for the recommended font size in case a font file contains nonsensical values. + + int req_size; ///< Requested font size. + int used_size; ///< Used font size. + + typedef SmallMap > FontTable; ///< Table with font table cache + FontTable font_tables; ///< Cached font tables. + + /** Container for information about a glyph. */ + struct GlyphEntry { + Sprite *sprite; ///< The loaded sprite. + byte width; ///< The width of the glyph. + bool duplicate; ///< Whether this glyph entry is a duplicate, i.e. may this be freed? + }; + + /** + * The glyph cache. This is structured to reduce memory consumption. + * 1) There is a 'segment' table for each font size. + * 2) Each segment table is a discrete block of characters. + * 3) Each block contains 256 (aligned) characters sequential characters. + * + * The cache is accessed in the following way: + * For character 0x0041 ('A'): glyph_to_sprite[0x00][0x41] + * For character 0x20AC (Euro): glyph_to_sprite[0x20][0xAC] + * + * Currently only 256 segments are allocated, "limiting" us to 65536 characters. + * This can be simply changed in the two functions Get & SetGlyphPtr. + */ + GlyphEntry **glyph_to_sprite; + + GlyphEntry *GetGlyphPtr(GlyphID key); + void SetGlyphPtr(GlyphID key, const GlyphEntry *glyph, bool duplicate = false); + + virtual const void *InternalGetFontTable(uint32 tag, size_t &length) = 0; + virtual const Sprite *InternalGetGlyph(GlyphID key, bool aa) = 0; + +public: + TrueTypeFontCache(FontSize fs, int pixels); + virtual ~TrueTypeFontCache(); + int GetFontSize() const override { return this->used_size; } + SpriteID GetUnicodeGlyph(WChar key) override { return this->parent->GetUnicodeGlyph(key); } + void SetUnicodeGlyph(WChar key, SpriteID sprite) override { this->parent->SetUnicodeGlyph(key, sprite); } + void InitializeUnicodeGlyphMap() override { this->parent->InitializeUnicodeGlyphMap(); } + const Sprite *GetGlyph(GlyphID key) override; + const void *GetFontTable(uint32 tag, size_t &length) override; + void ClearFontCache() override; + uint GetGlyphWidth(GlyphID key) override; + bool GetDrawGlyphShadow() override; + bool IsBuiltInFont() override { return false; } +}; + +#endif /* FONTCACHE_INTERNAL_H */ diff --git a/src/fontdetection.cpp b/src/fontdetection.cpp index 67395882b0..663c9bf326 100644 --- a/src/fontdetection.cpp +++ b/src/fontdetection.cpp @@ -222,7 +222,7 @@ static const char *GetEnglishFontName(const ENUMLOGFONTEX *logfont) offset += buf[pos++]; /* Don't buffer overflow */ - length = min(length, MAX_PATH - 1); + length = std::min(length, MAX_PATH - 1); for (uint j = 0; j < length; j++) font_name[j] = buf[stringOffset + offset + j]; font_name[length] = '\0'; @@ -347,7 +347,7 @@ static int CALLBACK EnumFontCallback(const ENUMLOGFONTEX *logfont, const NEWTEXT PLOGFONT os_data = MallocT(1); *os_data = logfont->elfLogFont; info->callback->SetFontNames(info->settings, font_name, os_data); - if (info->callback->FindMissingGlyphs(nullptr)) return 1; + if (info->callback->FindMissingGlyphs()) return 1; DEBUG(freetype, 1, "Fallback font: %s (%s)", font_name, english_name); return 0; // stop enumerating } @@ -394,51 +394,19 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) OSStatus os_err = -1; CFAutoRelease name(CFStringCreateWithCString(kCFAllocatorDefault, font_name, kCFStringEncodingUTF8)); -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) - if (MacOSVersionIsAtLeast(10, 6, 0)) { - /* Simply creating the font using CTFontCreateWithNameAndSize will *always* return - * something, no matter the name. As such, we can't use it to check for existence. - * We instead query the list of all font descriptors that match the given name which - * does not do this stupid name fallback. */ - CFAutoRelease name_desc(CTFontDescriptorCreateWithNameAndSize(name.get(), 0.0)); - CFAutoRelease mandatory_attribs(CFSetCreate(kCFAllocatorDefault, (const void **)&kCTFontNameAttribute, 1, &kCFTypeSetCallBacks)); - CFAutoRelease descs(CTFontDescriptorCreateMatchingFontDescriptors(name_desc.get(), mandatory_attribs.get())); + /* Simply creating the font using CTFontCreateWithNameAndSize will *always* return + * something, no matter the name. As such, we can't use it to check for existence. + * We instead query the list of all font descriptors that match the given name which + * does not do this stupid name fallback. */ + CFAutoRelease name_desc(CTFontDescriptorCreateWithNameAndSize(name.get(), 0.0)); + CFAutoRelease mandatory_attribs(CFSetCreate(kCFAllocatorDefault, const_cast(reinterpret_cast(&kCTFontNameAttribute)), 1, &kCFTypeSetCallBacks)); + CFAutoRelease descs(CTFontDescriptorCreateMatchingFontDescriptors(name_desc.get(), mandatory_attribs.get())); - /* Loop over all matches until we can get a path for one of them. */ - for (CFIndex i = 0; descs.get() != nullptr && i < CFArrayGetCount(descs.get()) && os_err != noErr; i++) { - CFAutoRelease font(CTFontCreateWithFontDescriptor((CTFontDescriptorRef)CFArrayGetValueAtIndex(descs.get(), i), 0.0, nullptr)); - CFAutoRelease fontURL((CFURLRef)CTFontCopyAttribute(font.get(), kCTFontURLAttribute)); - if (CFURLGetFileSystemRepresentation(fontURL.get(), true, file_path, lengthof(file_path))) os_err = noErr; - } - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) - ATSFontRef font = ATSFontFindFromName(name.get(), kATSOptionFlagsDefault); - if (font == kInvalidFont) return err; - - /* Get a file system reference for the font. */ - FSRef ref; -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - if (MacOSVersionIsAtLeast(10, 5, 0)) { - os_err = ATSFontGetFileReference(font, &ref); - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) && !defined(__LP64__) - /* This type was introduced with the 10.5 SDK. */ -#if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) -#define ATSFSSpec FSSpec -#endif - FSSpec spec; - os_err = ATSFontGetFileSpecification(font, (ATSFSSpec *)&spec); - if (os_err == noErr) os_err = FSpMakeFSRef(&spec, &ref); -#endif - } - - /* Get unix path for file. */ - if (os_err == noErr) os_err = FSRefMakePath(&ref, file_path, sizeof(file_path)); -#endif + /* Loop over all matches until we can get a path for one of them. */ + for (CFIndex i = 0; descs.get() != nullptr && i < CFArrayGetCount(descs.get()) && os_err != noErr; i++) { + CFAutoRelease font(CTFontCreateWithFontDescriptor((CTFontDescriptorRef)CFArrayGetValueAtIndex(descs.get(), i), 0.0, nullptr)); + CFAutoRelease fontURL((CFURLRef)CTFontCopyAttribute(font.get(), kCTFontURLAttribute)); + if (CFURLGetFileSystemRepresentation(fontURL.get(), true, file_path, lengthof(file_path))) os_err = noErr; } if (os_err == noErr) { @@ -451,121 +419,79 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, int winlangid, MissingGlyphSearcher *callback) { + /* Determine fallback font using CoreText. This uses the language isocode + * to find a suitable font. CoreText is available from 10.5 onwards. */ + char lang[16]; + if (strcmp(language_isocode, "zh_TW") == 0) { + /* Traditional Chinese */ + strecpy(lang, "zh-Hant", lastof(lang)); + } else if (strcmp(language_isocode, "zh_CN") == 0) { + /* Simplified Chinese */ + strecpy(lang, "zh-Hans", lastof(lang)); + } else { + /* Just copy the first part of the isocode. */ + strecpy(lang, language_isocode, lastof(lang)); + char *sep = strchr(lang, '_'); + if (sep != nullptr) *sep = '\0'; + } + + /* Create a font descriptor matching the wanted language and latin (english) glyphs. + * Can't use CFAutoRelease here for everything due to the way the dictionary has to be created. */ + CFStringRef lang_codes[2]; + lang_codes[0] = CFStringCreateWithCString(kCFAllocatorDefault, lang, kCFStringEncodingUTF8); + lang_codes[1] = CFSTR("en"); + CFArrayRef lang_arr = CFArrayCreate(kCFAllocatorDefault, (const void **)lang_codes, lengthof(lang_codes), &kCFTypeArrayCallBacks); + CFAutoRelease lang_attribs(CFDictionaryCreate(kCFAllocatorDefault, const_cast(reinterpret_cast(&kCTFontLanguagesAttribute)), (const void **)&lang_arr, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); + CFAutoRelease lang_desc(CTFontDescriptorCreateWithAttributes(lang_attribs.get())); + CFRelease(lang_arr); + CFRelease(lang_codes[0]); + + /* Get array of all font descriptors for the wanted language. */ + CFAutoRelease mandatory_attribs(CFSetCreate(kCFAllocatorDefault, const_cast(reinterpret_cast(&kCTFontLanguagesAttribute)), 1, &kCFTypeSetCallBacks)); + CFAutoRelease descs(CTFontDescriptorCreateMatchingFontDescriptors(lang_desc.get(), mandatory_attribs.get())); + bool result = false; + for (CFIndex i = 0; descs.get() != nullptr && i < CFArrayGetCount(descs.get()); i++) { + CTFontDescriptorRef font = (CTFontDescriptorRef)CFArrayGetValueAtIndex(descs.get(), i); -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - if (MacOSVersionIsAtLeast(10, 5, 0)) { - /* Determine fallback font using CoreText. This uses the language isocode - * to find a suitable font. CoreText is available from 10.5 onwards. */ - char lang[16]; - if (strcmp(language_isocode, "zh_TW") == 0) { - /* Traditional Chinese */ - strecpy(lang, "zh-Hant", lastof(lang)); - } else if (strcmp(language_isocode, "zh_CN") == 0) { - /* Simplified Chinese */ - strecpy(lang, "zh-Hans", lastof(lang)); - } else { - /* Just copy the first part of the isocode. */ - strecpy(lang, language_isocode, lastof(lang)); - char *sep = strchr(lang, '_'); - if (sep != nullptr) *sep = '\0'; + /* Get font traits. */ + CFAutoRelease traits((CFDictionaryRef)CTFontDescriptorCopyAttribute(font, kCTFontTraitsAttribute)); + CTFontSymbolicTraits symbolic_traits; + CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(traits.get(), kCTFontSymbolicTrait), kCFNumberIntType, &symbolic_traits); + + /* Skip symbol fonts and vertical fonts. */ + if ((symbolic_traits & kCTFontClassMaskTrait) == (CTFontStylisticClass)kCTFontSymbolicClass || (symbolic_traits & kCTFontVerticalTrait)) continue; + /* Skip bold fonts (especially Arial Bold, which looks worse than regular Arial). */ + if (symbolic_traits & kCTFontBoldTrait) continue; + /* Select monospaced fonts if asked for. */ + if (((symbolic_traits & kCTFontMonoSpaceTrait) == kCTFontMonoSpaceTrait) != callback->Monospace()) continue; + + /* Get font name. */ + char name[128]; + CFAutoRelease font_name((CFStringRef)CTFontDescriptorCopyAttribute(font, kCTFontDisplayNameAttribute)); + CFStringGetCString(font_name.get(), name, lengthof(name), kCFStringEncodingUTF8); + + /* There are some special fonts starting with an '.' and the last + * resort font that aren't usable. Skip them. */ + if (name[0] == '.' || strncmp(name, "LastResort", 10) == 0) continue; + + /* Save result. */ + callback->SetFontNames(settings, name); + if (!callback->FindMissingGlyphs()) { + DEBUG(freetype, 2, "CT-Font for %s: %s", language_isocode, name); + result = true; + break; } - - /* Create a font descriptor matching the wanted language and latin (english) glyphs. - * Can't use CFAutoRelease here for everything due to the way the dictionary has to be created. */ - CFStringRef lang_codes[2]; - lang_codes[0] = CFStringCreateWithCString(kCFAllocatorDefault, lang, kCFStringEncodingUTF8); - lang_codes[1] = CFSTR("en"); - CFArrayRef lang_arr = CFArrayCreate(kCFAllocatorDefault, (const void **)lang_codes, lengthof(lang_codes), &kCFTypeArrayCallBacks); - CFAutoRelease lang_attribs(CFDictionaryCreate(kCFAllocatorDefault, (const void**)&kCTFontLanguagesAttribute, (const void **)&lang_arr, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); - CFAutoRelease lang_desc(CTFontDescriptorCreateWithAttributes(lang_attribs.get())); - CFRelease(lang_arr); - CFRelease(lang_codes[0]); - - /* Get array of all font descriptors for the wanted language. */ - CFAutoRelease mandatory_attribs(CFSetCreate(kCFAllocatorDefault, (const void **)&kCTFontLanguagesAttribute, 1, &kCFTypeSetCallBacks)); - CFAutoRelease descs(CTFontDescriptorCreateMatchingFontDescriptors(lang_desc.get(), mandatory_attribs.get())); - - for (CFIndex i = 0; descs.get() != nullptr && i < CFArrayGetCount(descs.get()); i++) { - CTFontDescriptorRef font = (CTFontDescriptorRef)CFArrayGetValueAtIndex(descs.get(), i); - - /* Get font traits. */ - CFAutoRelease traits((CFDictionaryRef)CTFontDescriptorCopyAttribute(font, kCTFontTraitsAttribute)); - CTFontSymbolicTraits symbolic_traits; - CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(traits.get(), kCTFontSymbolicTrait), kCFNumberIntType, &symbolic_traits); - - /* Skip symbol fonts and vertical fonts. */ - if ((symbolic_traits & kCTFontClassMaskTrait) == (CTFontStylisticClass)kCTFontSymbolicClass || (symbolic_traits & kCTFontVerticalTrait)) continue; - /* Skip bold fonts (especially Arial Bold, which looks worse than regular Arial). */ - if (symbolic_traits & kCTFontBoldTrait) continue; - /* Select monospaced fonts if asked for. */ - if (((symbolic_traits & kCTFontMonoSpaceTrait) == kCTFontMonoSpaceTrait) != callback->Monospace()) continue; - - /* Get font name. */ - char name[128]; - CFAutoRelease font_name((CFStringRef)CTFontDescriptorCopyAttribute(font, kCTFontDisplayNameAttribute)); - CFStringGetCString(font_name.get(), name, lengthof(name), kCFStringEncodingUTF8); - - /* There are some special fonts starting with an '.' and the last - * resort font that aren't usable. Skip them. */ - if (name[0] == '.' || strncmp(name, "LastResort", 10) == 0) continue; - - /* Save result. */ - callback->SetFontNames(settings, name); - if (!callback->FindMissingGlyphs(nullptr)) { - DEBUG(freetype, 2, "CT-Font for %s: %s", language_isocode, name); - result = true; - break; - } - } - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6) - /* Create a font iterator and iterate over all fonts that - * are available to the application. */ - ATSFontIterator itr; - ATSFontRef font; - ATSFontIteratorCreate(kATSFontContextLocal, nullptr, nullptr, kATSOptionFlagsDefaultScope, &itr); - while (!result && ATSFontIteratorNext(itr, &font) == noErr) { - /* Get font name. */ - char name[128]; - CFStringRef font_name; - ATSFontGetName(font, kATSOptionFlagsDefault, &font_name); - CFStringGetCString(font_name, name, lengthof(name), kCFStringEncodingUTF8); - - bool monospace = IsMonospaceFont(font_name); - CFRelease(font_name); - - /* Select monospaced fonts if asked for. */ - if (monospace != callback->Monospace()) continue; - - /* We only want the base font and not bold or italic variants. */ - if (strstr(name, "Italic") != nullptr || strstr(name, "Bold")) continue; - - /* Skip some inappropriate or ugly looking fonts that have better alternatives. */ - if (name[0] == '.' || strncmp(name, "Apple Symbols", 13) == 0 || strncmp(name, "LastResort", 10) == 0) continue; - - /* Save result. */ - callback->SetFontNames(settings, name); - if (!callback->FindMissingGlyphs(nullptr)) { - DEBUG(freetype, 2, "ATS-Font for %s: %s", language_isocode, name); - result = true; - break; - } - } - ATSFontIteratorRelease(&itr); -#endif } if (!result) { /* For some OS versions, the font 'Arial Unicode MS' does not report all languages it * supports. If we didn't find any other font, just try it, maybe we get lucky. */ callback->SetFontNames(settings, "Arial Unicode MS"); - result = !callback->FindMissingGlyphs(nullptr); + result = !callback->FindMissingGlyphs(); } - callback->FindMissingGlyphs(nullptr); + callback->FindMissingGlyphs(); return result; } @@ -697,7 +623,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i callback->SetFontNames(settings, (const char*)file); - bool missing = callback->FindMissingGlyphs(nullptr); + bool missing = callback->FindMissingGlyphs(); DEBUG(freetype, 1, "Font \"%s\" misses%s glyphs", file, missing ? "" : " no"); if (!missing) { diff --git a/src/fontdetection.h b/src/fontdetection.h index 70b2fe236e..9cf39d2b07 100644 --- a/src/fontdetection.h +++ b/src/fontdetection.h @@ -27,7 +27,6 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face); #endif /* WITH_FREETYPE */ -#if defined(WITH_FREETYPE) || defined(_WIN32) /** * We would like to have a fallback font as the current one * doesn't contain all characters we need. @@ -38,8 +37,6 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face); * @param callback The function to call to check for missing glyphs. * @return true if a font has been set, false otherwise. */ -bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, int winlangid, class MissingGlyphSearcher *callback); - -#endif /* defined(WITH_FREETYPE) || defined(WIN32)*/ +bool SetFallbackFont(struct FreeTypeSettings *settings, const char *language_isocode, int winlangid, class MissingGlyphSearcher *callback); #endif diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 278b6c6e5a..54af735019 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -76,7 +76,7 @@ namespace { this->prev_index = this->next_index; this->next_index += 1; if (this->next_index >= NUM_FRAMERATE_POINTS) this->next_index = 0; - this->num_valid = min(NUM_FRAMERATE_POINTS, this->num_valid + 1); + this->num_valid = std::min(NUM_FRAMERATE_POINTS, this->num_valid + 1); } /** Begin an accumulation of multiple measurements into a single value, from a given start time */ @@ -87,7 +87,7 @@ namespace { this->prev_index = this->next_index; this->next_index += 1; if (this->next_index >= NUM_FRAMERATE_POINTS) this->next_index = 0; - this->num_valid = min(NUM_FRAMERATE_POINTS, this->num_valid + 1); + this->num_valid = std::min(NUM_FRAMERATE_POINTS, this->num_valid + 1); this->acc_duration = 0; this->acc_timestamp = start_time; @@ -115,7 +115,7 @@ namespace { /** Get average cycle processing time over a number of data points */ double GetAverageDurationMilliseconds(int count) { - count = min(count, this->num_valid); + count = std::min(count, this->num_valid); int first_point = this->prev_index - count; if (first_point < 0) first_point += NUM_FRAMERATE_POINTS; @@ -151,6 +151,10 @@ namespace { /* Total duration covered by collected points */ TimingMeasurement total = 0; + /* We have nothing to compare the first point against */ + point--; + if (point < 0) point = NUM_FRAMERATE_POINTS - 1; + while (point != last_point) { /* Only record valid data points, but pretend the gaps in measurements aren't there */ if (this->durations[point] != INVALID_DURATION) { @@ -185,7 +189,7 @@ namespace { PerformanceData(1), // PFE_ACC_GL_AIRCRAFT PerformanceData(1), // PFE_GL_LANDSCAPE PerformanceData(1), // PFE_GL_LINKGRAPH - PerformanceData(GL_RATE), // PFE_DRAWING + PerformanceData(1000.0 / 30), // PFE_DRAWING PerformanceData(1), // PFE_ACC_DRAWWORLD PerformanceData(60.0), // PFE_VIDEO PerformanceData(1000.0 * 8192 / 44100), // PFE_SOUND @@ -270,6 +274,7 @@ void PerformanceMeasurer::SetExpectedRate(double rate) */ /* static */ void PerformanceMeasurer::Paused(PerformanceElement elem) { + PerformanceMeasurer::SetInactive(elem); _pf_data[elem].AddPause(GetPerformanceTimer()); } @@ -395,7 +400,6 @@ struct FramerateWindow : Window { { const double threshold_good = target * 0.95; const double threshold_bad = target * 2 / 3; - value = min(9999.99, value); this->value = (uint32)(value * 100); this->strid = (value > threshold_good) ? STR_FRAMERATE_FPS_GOOD : (value < threshold_bad) ? STR_FRAMERATE_FPS_BAD : STR_FRAMERATE_FPS_WARN; } @@ -404,7 +408,6 @@ struct FramerateWindow : Window { { const double threshold_good = target / 3; const double threshold_bad = target; - value = min(9999.99, value); this->value = (uint32)(value * 100); this->strid = (value < threshold_good) ? STR_FRAMERATE_MS_GOOD : (value > threshold_bad) ? STR_FRAMERATE_MS_BAD : STR_FRAMERATE_MS_WARN; } @@ -422,8 +425,8 @@ struct FramerateWindow : Window { CachedDecimal times_shortterm[PFE_MAX]; ///< cached short term average times CachedDecimal times_longterm[PFE_MAX]; ///< cached long term average times - static const int VSPACING = 3; ///< space between column heading and values - static const int MIN_ELEMENTS = 5; ///< smallest number of elements to display + static constexpr int VSPACING = 3; ///< space between column heading and values + static constexpr int MIN_ELEMENTS = 5; ///< smallest number of elements to display FramerateWindow(WindowDesc *desc, WindowNumber number) : Window(desc) { @@ -435,7 +438,7 @@ struct FramerateWindow : Window { this->next_update.SetInterval(100); /* Window is always initialised to MIN_ELEMENTS height, resize to contain num_displayed */ - ResizeWindow(this, 0, (max(MIN_ELEMENTS, this->num_displayed) - MIN_ELEMENTS) * FONT_HEIGHT_NORMAL); + ResizeWindow(this, 0, (std::max(MIN_ELEMENTS, this->num_displayed) - MIN_ELEMENTS) * FONT_HEIGHT_NORMAL); } void OnRealtimeTick(uint delta_ms) override @@ -464,7 +467,7 @@ struct FramerateWindow : Window { this->speed_gameloop.SetRate(gl_rate / _pf_data[PFE_GAMELOOP].expected_rate, 1.0); if (this->small) return; // in small mode, this is everything needed - this->rate_drawing.SetRate(_pf_data[PFE_DRAWING].GetRate(), _pf_data[PFE_DRAWING].expected_rate); + this->rate_drawing.SetRate(_pf_data[PFE_DRAWING].GetRate(), _settings_client.gui.refresh_rate); int new_active = 0; for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) { @@ -486,7 +489,7 @@ struct FramerateWindow : Window { this->num_active = new_active; Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR); sb->SetCount(this->num_active); - sb->SetCapacity(min(this->num_displayed, this->num_active)); + sb->SetCapacity(std::min(this->num_displayed, this->num_active)); this->ReInit(); } } @@ -555,7 +558,7 @@ struct FramerateWindow : Window { SetDParamStr(1, GetAIName(e - PFE_AI0)); line_size = GetStringBoundingBox(STR_FRAMERATE_AI); } - size->width = max(size->width, line_size.width); + size->width = std::max(size->width, line_size.width); } break; } @@ -567,7 +570,7 @@ struct FramerateWindow : Window { SetDParam(0, 999999); SetDParam(1, 2); Dimension item_size = GetStringBoundingBox(STR_FRAMERATE_MS_GOOD); - size->width = max(size->width, item_size.width); + size->width = std::max(size->width, item_size.width); size->height += FONT_HEIGHT_NORMAL * MIN_ELEMENTS + VSPACING; resize->width = 0; resize->height = FONT_HEIGHT_NORMAL; @@ -769,7 +772,7 @@ struct FrametimeGraphWindow : Window { Dimension size_s_label = GetStringBoundingBox(STR_FRAMERATE_GRAPH_SECONDS); /* Size graph in height to fit at least 10 vertical labels with space between, or at least 100 pixels */ - graph_size.height = max(100, 10 * (size_ms_label.height + 1)); + graph_size.height = std::max(100u, 10 * (size_ms_label.height + 1)); /* Always 2:1 graph area */ graph_size.width = 2 * graph_size.height; *size = graph_size; @@ -980,7 +983,7 @@ struct FrametimeGraphWindow : Window { TextColour tc_peak = (TextColour)(TC_IS_PALETTE_COLOUR | c_peak); GfxFillRect(peak_point.x - 1, peak_point.y - 1, peak_point.x + 1, peak_point.y + 1, c_peak); SetDParam(0, peak_value * 1000 / TIMESTAMP_PRECISION); - int label_y = max(y_max, peak_point.y - FONT_HEIGHT_SMALL); + int label_y = std::max(y_max, peak_point.y - FONT_HEIGHT_SMALL); if (peak_point.x - x_zero > (int)this->graph_size.width / 2) { DrawString(x_zero, peak_point.x - 2, label_y, STR_FRAMERATE_GRAPH_MILLISECONDS, tc_peak, SA_RIGHT | SA_FORCE, false, FS_SMALL); } else { diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt new file mode 100644 index 0000000000..aafb5a7b8d --- /dev/null +++ b/src/game/CMakeLists.txt @@ -0,0 +1,14 @@ +add_files( + game.hpp + game_config.cpp + game_config.hpp + game_core.cpp + game_info.cpp + game_info.hpp + game_instance.cpp + game_instance.hpp + game_scanner.cpp + game_scanner.hpp + game_text.cpp + game_text.hpp +) diff --git a/src/game/game_info.cpp b/src/game/game_info.cpp index 91a463bed5..77725c5e7b 100644 --- a/src/game/game_info.cpp +++ b/src/game/game_info.cpp @@ -13,6 +13,7 @@ #include "game_info.hpp" #include "game_scanner.hpp" #include "../debug.h" +#include #include "../safeguards.h" @@ -22,9 +23,8 @@ */ static bool CheckAPIVersion(const char *api_version) { - return strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || - strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 || - strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0 || strcmp(api_version, "1.10") == 0; + static const std::set versions = {"1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11"}; + return versions.find(api_version) != versions.end(); } #if defined(_WIN32) diff --git a/src/game/game_instance.cpp b/src/game/game_instance.cpp index 57b2213ea9..842b4b3e47 100644 --- a/src/game/game_instance.cpp +++ b/src/game/game_instance.cpp @@ -20,71 +20,8 @@ #include "game_text.hpp" #include "game.hpp" -/* Convert all Game related classes to Squirrel data. - * Note: this line is a marker in squirrel_export.sh. Do not change! */ -#include "../script/api/game/game_accounting.hpp.sq" -#include "../script/api/game/game_admin.hpp.sq" -#include "../script/api/game/game_airport.hpp.sq" -#include "../script/api/game/game_base.hpp.sq" -#include "../script/api/game/game_basestation.hpp.sq" -#include "../script/api/game/game_bridge.hpp.sq" -#include "../script/api/game/game_bridgelist.hpp.sq" -#include "../script/api/game/game_cargo.hpp.sq" -#include "../script/api/game/game_cargolist.hpp.sq" -#include "../script/api/game/game_cargomonitor.hpp.sq" -#include "../script/api/game/game_client.hpp.sq" -#include "../script/api/game/game_clientlist.hpp.sq" -#include "../script/api/game/game_company.hpp.sq" -#include "../script/api/game/game_companymode.hpp.sq" -#include "../script/api/game/game_controller.hpp.sq" -#include "../script/api/game/game_date.hpp.sq" -#include "../script/api/game/game_depotlist.hpp.sq" -#include "../script/api/game/game_engine.hpp.sq" -#include "../script/api/game/game_enginelist.hpp.sq" -#include "../script/api/game/game_error.hpp.sq" -#include "../script/api/game/game_event.hpp.sq" -#include "../script/api/game/game_event_types.hpp.sq" -#include "../script/api/game/game_execmode.hpp.sq" -#include "../script/api/game/game_game.hpp.sq" -#include "../script/api/game/game_gamesettings.hpp.sq" -#include "../script/api/game/game_goal.hpp.sq" -#include "../script/api/game/game_industry.hpp.sq" -#include "../script/api/game/game_industrylist.hpp.sq" -#include "../script/api/game/game_industrytype.hpp.sq" -#include "../script/api/game/game_industrytypelist.hpp.sq" -#include "../script/api/game/game_infrastructure.hpp.sq" -#include "../script/api/game/game_list.hpp.sq" -#include "../script/api/game/game_log.hpp.sq" -#include "../script/api/game/game_map.hpp.sq" -#include "../script/api/game/game_marine.hpp.sq" -#include "../script/api/game/game_news.hpp.sq" -#include "../script/api/game/game_order.hpp.sq" -#include "../script/api/game/game_rail.hpp.sq" -#include "../script/api/game/game_railtypelist.hpp.sq" -#include "../script/api/game/game_road.hpp.sq" -#include "../script/api/game/game_roadtypelist.hpp.sq" -#include "../script/api/game/game_sign.hpp.sq" -#include "../script/api/game/game_signlist.hpp.sq" -#include "../script/api/game/game_station.hpp.sq" -#include "../script/api/game/game_stationlist.hpp.sq" -#include "../script/api/game/game_story_page.hpp.sq" -#include "../script/api/game/game_storypageelementlist.hpp.sq" -#include "../script/api/game/game_storypagelist.hpp.sq" -#include "../script/api/game/game_subsidy.hpp.sq" -#include "../script/api/game/game_subsidylist.hpp.sq" -#include "../script/api/game/game_testmode.hpp.sq" -#include "../script/api/game/game_text.hpp.sq" -#include "../script/api/game/game_tile.hpp.sq" -#include "../script/api/game/game_tilelist.hpp.sq" -#include "../script/api/game/game_town.hpp.sq" -#include "../script/api/game/game_townlist.hpp.sq" -#include "../script/api/game/game_tunnel.hpp.sq" -#include "../script/api/game/game_vehicle.hpp.sq" -#include "../script/api/game/game_vehiclelist.hpp.sq" -#include "../script/api/game/game_viewport.hpp.sq" -#include "../script/api/game/game_waypoint.hpp.sq" -#include "../script/api/game/game_waypointlist.hpp.sq" -#include "../script/api/game/game_window.hpp.sq" +/* Convert all Game related classes to Squirrel data. */ +#include "../script/api/game/game_includes.hpp" #include "../safeguards.h" @@ -107,115 +44,8 @@ void GameInstance::RegisterAPI() { ScriptInstance::RegisterAPI(); -/* Register all classes */ - SQGSList_Register(this->engine); - SQGSAccounting_Register(this->engine); - SQGSAdmin_Register(this->engine); - SQGSAirport_Register(this->engine); - SQGSBase_Register(this->engine); - SQGSBaseStation_Register(this->engine); - SQGSBridge_Register(this->engine); - SQGSBridgeList_Register(this->engine); - SQGSBridgeList_Length_Register(this->engine); - SQGSCargo_Register(this->engine); - SQGSCargoList_Register(this->engine); - SQGSCargoList_IndustryAccepting_Register(this->engine); - SQGSCargoList_IndustryProducing_Register(this->engine); - SQGSCargoList_StationAccepting_Register(this->engine); - SQGSCargoMonitor_Register(this->engine); - SQGSClient_Register(this->engine); - SQGSClientList_Register(this->engine); - SQGSClientList_Company_Register(this->engine); - SQGSCompany_Register(this->engine); - SQGSCompanyMode_Register(this->engine); - SQGSDate_Register(this->engine); - SQGSDepotList_Register(this->engine); - SQGSEngine_Register(this->engine); - SQGSEngineList_Register(this->engine); - SQGSError_Register(this->engine); - SQGSEvent_Register(this->engine); - SQGSEventAdminPort_Register(this->engine); - SQGSEventCompanyBankrupt_Register(this->engine); - SQGSEventCompanyInTrouble_Register(this->engine); - SQGSEventCompanyMerger_Register(this->engine); - SQGSEventCompanyNew_Register(this->engine); - SQGSEventCompanyTown_Register(this->engine); - SQGSEventController_Register(this->engine); - SQGSEventExclusiveTransportRights_Register(this->engine); - SQGSEventGoalQuestionAnswer_Register(this->engine); - SQGSEventIndustryClose_Register(this->engine); - SQGSEventIndustryOpen_Register(this->engine); - SQGSEventRoadReconstruction_Register(this->engine); - SQGSEventStationFirstVehicle_Register(this->engine); - SQGSEventSubsidyAwarded_Register(this->engine); - SQGSEventSubsidyExpired_Register(this->engine); - SQGSEventSubsidyOffer_Register(this->engine); - SQGSEventSubsidyOfferExpired_Register(this->engine); - SQGSEventTownFounded_Register(this->engine); - SQGSEventVehicleCrashed_Register(this->engine); - SQGSEventWindowWidgetClick_Register(this->engine); - SQGSExecMode_Register(this->engine); - SQGSGame_Register(this->engine); - SQGSGameSettings_Register(this->engine); - SQGSGoal_Register(this->engine); - SQGSIndustry_Register(this->engine); - SQGSIndustryList_Register(this->engine); - SQGSIndustryList_CargoAccepting_Register(this->engine); - SQGSIndustryList_CargoProducing_Register(this->engine); - SQGSIndustryType_Register(this->engine); - SQGSIndustryTypeList_Register(this->engine); - SQGSInfrastructure_Register(this->engine); - SQGSLog_Register(this->engine); - SQGSMap_Register(this->engine); - SQGSMarine_Register(this->engine); - SQGSNews_Register(this->engine); - SQGSOrder_Register(this->engine); - SQGSRail_Register(this->engine); - SQGSRailTypeList_Register(this->engine); - SQGSRoad_Register(this->engine); - SQGSRoadTypeList_Register(this->engine); - SQGSSign_Register(this->engine); - SQGSSignList_Register(this->engine); - SQGSStation_Register(this->engine); - SQGSStationList_Register(this->engine); - SQGSStationList_Cargo_Register(this->engine); - SQGSStationList_CargoPlanned_Register(this->engine); - SQGSStationList_CargoPlannedByFrom_Register(this->engine); - SQGSStationList_CargoPlannedByVia_Register(this->engine); - SQGSStationList_CargoPlannedFromByVia_Register(this->engine); - SQGSStationList_CargoPlannedViaByFrom_Register(this->engine); - SQGSStationList_CargoWaiting_Register(this->engine); - SQGSStationList_CargoWaitingByFrom_Register(this->engine); - SQGSStationList_CargoWaitingByVia_Register(this->engine); - SQGSStationList_CargoWaitingFromByVia_Register(this->engine); - SQGSStationList_CargoWaitingViaByFrom_Register(this->engine); - SQGSStationList_Vehicle_Register(this->engine); - SQGSStoryPage_Register(this->engine); - SQGSStoryPageElementList_Register(this->engine); - SQGSStoryPageList_Register(this->engine); - SQGSSubsidy_Register(this->engine); - SQGSSubsidyList_Register(this->engine); - SQGSTestMode_Register(this->engine); - SQGSText_Register(this->engine); - SQGSTile_Register(this->engine); - SQGSTileList_Register(this->engine); - SQGSTileList_IndustryAccepting_Register(this->engine); - SQGSTileList_IndustryProducing_Register(this->engine); - SQGSTileList_StationType_Register(this->engine); - SQGSTown_Register(this->engine); - SQGSTownEffectList_Register(this->engine); - SQGSTownList_Register(this->engine); - SQGSTunnel_Register(this->engine); - SQGSVehicle_Register(this->engine); - SQGSVehicleList_Register(this->engine); - SQGSVehicleList_Depot_Register(this->engine); - SQGSVehicleList_SharedOrders_Register(this->engine); - SQGSVehicleList_Station_Register(this->engine); - SQGSViewport_Register(this->engine); - SQGSWaypoint_Register(this->engine); - SQGSWaypointList_Register(this->engine); - SQGSWaypointList_Vehicle_Register(this->engine); - SQGSWindow_Register(this->engine); + /* Register all classes */ + SQGS_RegisterAll(this->engine); RegisterGameTranslation(this->engine); diff --git a/src/game/game_scanner.cpp b/src/game/game_scanner.cpp index 68efa350c2..1935b78137 100644 --- a/src/game/game_scanner.cpp +++ b/src/game/game_scanner.cpp @@ -40,20 +40,10 @@ GameInfo *GameScannerInfo::FindInfo(const char *nameParam, int versionParam, boo strecpy(game_name, nameParam, lastof(game_name)); strtolower(game_name); - GameInfo *info = nullptr; - int version = -1; - if (versionParam == -1) { /* We want to load the latest version of this Game script; so find it */ if (this->info_single_list.find(game_name) != this->info_single_list.end()) return static_cast(this->info_single_list[game_name]); - - /* If we didn't find a match Game script, maybe the user included a version */ - char *e = strrchr(game_name, '.'); - if (e == nullptr) return nullptr; - *e = '\0'; - e++; - versionParam = atoi(e); - /* Continue like we were calling this function with a version. */ + return nullptr; } if (force_exact_match) { @@ -62,15 +52,18 @@ GameInfo *GameScannerInfo::FindInfo(const char *nameParam, int versionParam, boo seprintf(game_name_tmp, lastof(game_name_tmp), "%s.%d", game_name, versionParam); strtolower(game_name_tmp); if (this->info_list.find(game_name_tmp) != this->info_list.end()) return static_cast(this->info_list[game_name_tmp]); + return nullptr; } + GameInfo *info = nullptr; + int version = -1; + /* See if there is a compatible Game script which goes by that name, with the highest * version which allows loading the requested version */ - ScriptInfoList::iterator it = this->info_list.begin(); - for (; it != this->info_list.end(); it++) { - GameInfo *i = static_cast((*it).second); + for (const auto &item : this->info_list) { + GameInfo *i = static_cast(item.second); if (strcasecmp(game_name, i->GetName()) == 0 && i->CanLoadFromVersion(versionParam) && (version == -1 || i->GetVersion() > version)) { - version = (*it).second->GetVersion(); + version = item.second->GetVersion(); info = i; } } @@ -103,8 +96,8 @@ GameLibrary *GameScannerLibrary::FindLibrary(const char *library, int version) strtolower(library_name); /* Check if the library + version exists */ - ScriptInfoList::iterator iter = this->info_list.find(library_name); - if (iter == this->info_list.end()) return nullptr; + ScriptInfoList::iterator it = this->info_list.find(library_name); + if (it == this->info_list.end()) return nullptr; - return static_cast((*iter).second); + return static_cast((*it).second); } diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 64281c60cb..24f41c93ac 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -58,70 +58,47 @@ void NORETURN CDECL strgen_fatal(const char *s, ...) throw std::exception(); } -/** - * Create a new container for language strings. - * @param language The language name. - * @param end If not nullptr, terminate \a language at this position. - */ -LanguageStrings::LanguageStrings(const char *language, const char *end) -{ - this->language = stredup(language, end != nullptr ? end - 1 : nullptr); -} - -/** Free everything. */ -LanguageStrings::~LanguageStrings() -{ - free(this->language); -} - /** * Read all the raw language strings from the given file. * @param file The file to read from. * @return The raw strings, or nullptr upon error. */ -std::unique_ptr ReadRawLanguageStrings(const char *file) +LanguageStrings ReadRawLanguageStrings(const std::string &file) { - try { - size_t to_read; - FILE *fh = FioFOpenFile(file, "rb", GAME_DIR, &to_read); - if (fh == nullptr) return nullptr; + size_t to_read; + FILE *fh = FioFOpenFile(file, "rb", GAME_DIR, &to_read); + if (fh == nullptr) return LanguageStrings(); - FileCloser fhClose(fh); + FileCloser fhClose(fh); - const char *langname = strrchr(file, PATHSEPCHAR); - if (langname == nullptr) { - langname = file; + auto pos = file.rfind(PATHSEPCHAR); + if (pos == std::string::npos) return LanguageStrings(); + std::string langname = file.substr(pos + 1); + + /* Check for invalid empty filename */ + if (langname.empty() || langname.front() == '.') return LanguageStrings(); + + LanguageStrings ret(langname.substr(0, langname.find('.'))); + + char buffer[2048]; + while (to_read != 0 && fgets(buffer, sizeof(buffer), fh) != nullptr) { + size_t len = strlen(buffer); + + /* Remove trailing spaces/newlines from the string. */ + size_t i = len; + while (i > 0 && (buffer[i - 1] == '\r' || buffer[i - 1] == '\n' || buffer[i - 1] == ' ')) i--; + buffer[i] = '\0'; + + ret.lines.emplace_back(buffer, i); + + if (len > to_read) { + to_read = 0; } else { - langname++; + to_read -= len; } - - /* Check for invalid empty filename */ - if (*langname == '.' || *langname == 0) return nullptr; - - std::unique_ptr ret(new LanguageStrings(langname, strchr(langname, '.'))); - - char buffer[2048]; - while (to_read != 0 && fgets(buffer, sizeof(buffer), fh) != nullptr) { - size_t len = strlen(buffer); - - /* Remove trailing spaces/newlines from the string. */ - size_t i = len; - while (i > 0 && (buffer[i - 1] == '\r' || buffer[i - 1] == '\n' || buffer[i - 1] == ' ')) i--; - buffer[i] = '\0'; - - ret->lines.emplace_back(buffer, i); - - if (len > to_read) { - to_read = 0; - } else { - to_read -= len; - } - } - - return ret; - } catch (...) { - return nullptr; } + + return ret; } @@ -138,7 +115,7 @@ struct StringListReader : StringReader { * @param translation Are we reading a translation? */ StringListReader(StringData &data, const LanguageStrings &strings, bool master, bool translation) : - StringReader(data, strings.language, master, translation), p(strings.lines.begin()), end(strings.lines.end()) + StringReader(data, strings.language.c_str(), master, translation), p(strings.lines.begin()), end(strings.lines.end()) { } @@ -215,12 +192,11 @@ struct StringNameWriter : HeaderWriter { class LanguageScanner : protected FileScanner { private: GameStrings *gs; - char *exclude; + std::string exclude; public: /** Initialise */ - LanguageScanner(GameStrings *gs, const char *exclude) : gs(gs), exclude(stredup(exclude)) {} - ~LanguageScanner() { free(exclude); } + LanguageScanner(GameStrings *gs, const std::string &exclude) : gs(gs), exclude(exclude) {} /** * Scan. @@ -230,12 +206,12 @@ public: this->FileScanner::Scan(".txt", directory, false); } - bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override + bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override { - if (strcmp(filename, exclude) == 0) return true; + if (exclude == filename) return true; auto ls = ReadRawLanguageStrings(filename); - if (ls == nullptr) return false; + if (!ls.IsValid()) return false; gs->raw_strings.push_back(std::move(ls)); return true; @@ -249,17 +225,16 @@ public: GameStrings *LoadTranslations() { const GameInfo *info = Game::GetInfo(); - char filename[512]; - strecpy(filename, info->GetMainScript(), lastof(filename)); - char *e = strrchr(filename, PATHSEPCHAR); - if (e == nullptr) return nullptr; - e++; // Make 'e' point after the PATHSEPCHAR + std::string basename(info->GetMainScript()); + auto e = basename.rfind(PATHSEPCHAR); + if (e == std::string::npos) return nullptr; + basename.erase(e + 1); - strecpy(e, "lang" PATHSEP "english.txt", lastof(filename)); - if (!FioCheckFileExists(filename, GAME_DIR)) return nullptr; + std::string filename = basename + "lang" PATHSEP "english.txt"; + if (!FioCheckFileExists(filename.c_str() , GAME_DIR)) return nullptr; auto ls = ReadRawLanguageStrings(filename); - if (ls == nullptr) return nullptr; + if (!ls.IsValid()) return nullptr; GameStrings *gs = new GameStrings(); try { @@ -267,12 +242,11 @@ GameStrings *LoadTranslations() /* Scan for other language files */ LanguageScanner scanner(gs, filename); - strecpy(e, "lang" PATHSEP, lastof(filename)); - size_t len = strlen(filename); + std::string ldir = basename + "lang" PATHSEP; - const char *tar_filename = info->GetTarFile(); + const std::string tar_filename = info->GetTarFile(); TarList::iterator iter; - if (tar_filename != nullptr && (iter = _tar_list[GAME_DIR].find(tar_filename)) != _tar_list[GAME_DIR].end()) { + if (!tar_filename.empty() && (iter = _tar_list[GAME_DIR].find(tar_filename)) != _tar_list[GAME_DIR].end()) { /* The main script is in a tar file, so find all files that * are in the same tar and add them to the langfile scanner. */ TarFileList::iterator tar; @@ -281,14 +255,14 @@ GameStrings *LoadTranslations() if (tar->second.tar_filename != iter->first) continue; /* Check the path and extension. */ - if (tar->first.size() <= len || tar->first.compare(0, len, filename) != 0) continue; + if (tar->first.size() <= ldir.size() || tar->first.compare(0, ldir.size(), ldir) != 0) continue; if (tar->first.compare(tar->first.size() - 4, 4, ".txt") != 0) continue; - scanner.AddFile(tar->first.c_str(), 0, tar_filename); + scanner.AddFile(tar->first, 0, tar_filename); } } else { /* Scan filesystem */ - scanner.Scan(filename); + scanner.Scan(ldir.c_str()); } gs->Compile(); @@ -303,7 +277,7 @@ GameStrings *LoadTranslations() void GameStrings::Compile() { StringData data(32); - StringListReader master_reader(data, *this->raw_strings[0], true, false); + StringListReader master_reader(data, this->raw_strings[0], true, false); master_reader.ParseFile(); if (_errors != 0) throw std::exception(); @@ -314,12 +288,12 @@ void GameStrings::Compile() for (const auto &p : this->raw_strings) { data.FreeTranslation(); - StringListReader translation_reader(data, *p, false, strcmp(p->language, "english") != 0); + StringListReader translation_reader(data, p, false, p.language != "english"); translation_reader.ParseFile(); if (_errors != 0) throw std::exception(); - this->compiled_strings.emplace_back(new LanguageStrings(p->language)); - TranslationWriter writer(this->compiled_strings.back()->lines); + this->compiled_strings.emplace_back(p.language); + TranslationWriter writer(this->compiled_strings.back().lines); writer.WriteLang(data); } } @@ -387,11 +361,11 @@ void ReconsiderGameScriptLanguage() language++; for (auto &p : _current_data->compiled_strings) { - if (strcmp(p->language, language) == 0) { - _current_data->cur_language = p; + if (p.language == language) { + _current_data->cur_language = &p; return; } } - _current_data->cur_language = _current_data->compiled_strings[0]; + _current_data->cur_language = &_current_data->compiled_strings[0]; } diff --git a/src/game/game_text.hpp b/src/game/game_text.hpp index 20cccff54c..91d85847df 100644 --- a/src/game/game_text.hpp +++ b/src/game/game_text.hpp @@ -18,23 +18,34 @@ void ReconsiderGameScriptLanguage(); /** Container for the raw (unencoded) language strings of a language. */ struct LanguageStrings { - const char *language; ///< Name of the language (base filename). - StringList lines; ///< The lines of the file to pass into the parser/encoder. + std::string language; ///< Name of the language (base filename). Empty string if invalid. + StringList lines; ///< The lines of the file to pass into the parser/encoder. - LanguageStrings(const char *language, const char *end = nullptr); - ~LanguageStrings(); + LanguageStrings() {} + LanguageStrings(const std::string &lang) : language(lang) {} + LanguageStrings(const LanguageStrings &other) : language(other.language), lines(other.lines) {} + LanguageStrings(LanguageStrings &&other) : language(std::move(other.language)), lines(std::move(other.lines)) {} + + bool IsValid() const { return !this->language.empty(); } }; /** Container for all the game strings. */ struct GameStrings { - uint version; ///< The version of the language strings. - std::shared_ptr cur_language; ///< The current (compiled) language. + uint version; ///< The version of the language strings. + LanguageStrings *cur_language; ///< The current (compiled) language. - std::vector> raw_strings; ///< The raw strings per language, first must be English/the master language!. - std::vector> compiled_strings; ///< The compiled strings per language, first must be English/the master language!. - StringList string_names; ///< The names of the compiled strings. + std::vector raw_strings; ///< The raw strings per language, first must be English/the master language!. + std::vector compiled_strings; ///< The compiled strings per language, first must be English/the master language!. + StringList string_names; ///< The names of the compiled strings. void Compile(); + + GameStrings() = default; + + GameStrings(const GameStrings &) = delete; + GameStrings(GameStrings &&) = delete; + GameStrings &operator=(const GameStrings &) = delete; + GameStrings &operator=(GameStrings &&) = delete; }; #endif /* GAME_TEXT_HPP */ diff --git a/src/gamelog.cpp b/src/gamelog.cpp index 156dfe6287..1a4998e40e 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -45,7 +45,7 @@ static const char * GetGamelogRevisionString() { /* Allocate a buffer larger than necessary (git revision hash is 40 bytes) to avoid truncation later */ static char gamelog_revision[48] = { 0 }; - assert_compile(lengthof(gamelog_revision) > GAMELOG_REVISION_LENGTH); + static_assert(lengthof(gamelog_revision) > GAMELOG_REVISION_LENGTH); if (IsReleasedVersion()) { return _openttd_revision; @@ -167,7 +167,7 @@ static const char * const la_text[] = { "emergency savegame", }; -assert_compile(lengthof(la_text) == GLAT_END); +static_assert(lengthof(la_text) == GLAT_END); /** * Information about the presence of a Grf at a certain point during gamelog history @@ -814,7 +814,7 @@ void GamelogInfo(LoggedAction *gamelog_action, uint gamelog_actions, uint32 *las case GLCT_REVISION: *last_ottd_rev = lc->revision.newgrf; - *ever_modified = max(*ever_modified, lc->revision.modified); + *ever_modified = std::max(*ever_modified, lc->revision.modified); break; case GLCT_GRFREM: diff --git a/src/genworld.cpp b/src/genworld.cpp index c76fe309d9..b7b1dfc602 100644 --- a/src/genworld.cpp +++ b/src/genworld.cpp @@ -33,6 +33,7 @@ #include "game/game_instance.hpp" #include "string_func.h" #include "thread.h" +#include "tgp.h" #include "safeguards.h" @@ -59,18 +60,10 @@ GenWorldInfo _gw; /** Whether we are generating the map or not. */ bool _generating_world; -/** - * Tells if the world generation is done in a thread or not. - * @return the 'threaded' status - */ -bool IsGenerateWorldThreaded() -{ - return _gw.threaded && !_gw.quit_thread; -} +class AbortGenerateWorldSignal { }; /** - * Clean up the 'mess' of generation. That is, show windows again, reset - * thread variables, and delete the progress window. + * Generation is done; show windows again and delete the progress window. */ static void CleanupGeneration() { @@ -78,11 +71,10 @@ static void CleanupGeneration() SetMouseCursorBusy(false); /* Show all vital windows again, because we have hidden them */ - if (_gw.threaded && _game_mode != GM_MENU) ShowVitalWindows(); + if (_game_mode != GM_MENU) ShowVitalWindows(); SetModalProgress(false); _gw.proc = nullptr; _gw.abortp = nullptr; - _gw.threaded = false; DeleteWindowByClass(WC_MODAL_PROGRESS); ShowFirstError(); @@ -97,16 +89,14 @@ static void _GenerateWorld() /* Make sure everything is done via OWNER_NONE. */ Backup _cur_company(_current_company, OWNER_NONE, FILE_LINE); - std::unique_lock lock(_modal_progress_work_mutex, std::defer_lock); try { _generating_world = true; - lock.lock(); if (_network_dedicated) DEBUG(net, 1, "Generating map, please wait..."); /* Set the Random() seed to generation_seed so we produce the same map with the same seed */ if (_settings_game.game_creation.generation_seed == GENERATE_NEW_SEED) _settings_game.game_creation.generation_seed = _settings_newgame.game_creation.generation_seed = InteractiveRandom(); _random.SetSeed(_settings_game.game_creation.generation_seed); SetGeneratingWorldProgress(GWP_MAP_INIT, 2); - SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0); + SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0, CM_DDSP_ZZZ); BasePersistentStorageArray::SwitchMode(PSM_ENTER_GAMELOOP); @@ -129,6 +119,8 @@ static void _GenerateWorld() ConvertGroundTilesIntoWaterTiles(); IncreaseGeneratingWorldProgress(GWP_OBJECT); + + _settings_game.game_creation.snow_line_height = DEF_SNOWLINE_HEIGHT; } else { GenerateLandscape(_gw.mode); GenerateClearTile(); @@ -136,14 +128,7 @@ static void _GenerateWorld() /* Only generate towns, tree and industries in newgame mode. */ if (_game_mode != GM_EDITOR) { if (!GenerateTowns(_settings_game.economy.town_layout)) { - _cur_company.Restore(); HandleGeneratingWorldAbortion(); - BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP); - if (_network_dedicated) { - /* Exit the game to prevent a return to main menu. */ - DEBUG(net, 0, "Generating map failed, aborting"); - _exit_game = true; - } return; } GenerateIndustries(); @@ -200,7 +185,6 @@ static void _GenerateWorld() IncreaseGeneratingWorldProgress(GWP_GAME_START); CleanupGeneration(); - lock.unlock(); ShowNewGRFError(); @@ -212,11 +196,19 @@ static void _GenerateWorld() seprintf(name, lastof(name), "dmp_cmds_%08x_%08x.sav", _settings_game.game_creation.generation_seed, _date); SaveOrLoad(name, SLO_SAVE, DFT_GAME_FILE, AUTOSAVE_DIR, false); } - } catch (...) { + } catch (AbortGenerateWorldSignal&) { + CleanupGeneration(); + BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP, true); if (_cur_company.IsValid()) _cur_company.Restore(); - _generating_world = false; - throw; + + if (_network_dedicated) { + /* Exit the game to prevent a return to main menu. */ + DEBUG(net, 0, "Generating map failed, aborting"); + _exit_game = true; + } else { + SwitchToMode(_switch_mode); + } } } @@ -240,23 +232,6 @@ void GenerateWorldSetAbortCallback(GWAbortProc *proc) _gw.abortp = proc; } -/** - * This will wait for the thread to finish up his work. It will not continue - * till the work is done. - */ -void WaitTillGeneratedWorld() -{ - if (!_gw.thread.joinable()) return; - - _modal_progress_work_mutex.unlock(); - _modal_progress_paint_mutex.unlock(); - _gw.quit_thread = true; - _gw.thread.join(); - _gw.threaded = false; - _modal_progress_work_mutex.lock(); - _modal_progress_paint_mutex.lock(); -} - /** * Initializes the abortion process */ @@ -271,7 +246,7 @@ void AbortGeneratingWorld() */ bool IsGeneratingWorldAborted() { - return _gw.abort; + return _gw.abort || _exit_game; } /** @@ -284,11 +259,7 @@ void HandleGeneratingWorldAbortion() if (_gw.abortp != nullptr) _gw.abortp(); - CleanupGeneration(); - - if (_gw.thread.joinable() && _gw.thread.get_id() == std::this_thread::get_id()) throw OTTDThreadExitSignal(); - - SwitchToMode(_switch_mode); + throw AbortGenerateWorldSignal(); } /** @@ -308,8 +279,6 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti _gw.abort = false; _gw.abortp = nullptr; _gw.lc = _local_company; - _gw.quit_thread = false; - _gw.threaded = true; /* This disables some commands and stuff */ SetLocalCompany(COMPANY_SPECTATOR); @@ -317,6 +286,22 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti InitializeGame(_gw.size_x, _gw.size_y, true, reset_settings); PrepareGenerateWorldProgress(); + if (_settings_game.construction.map_height_limit == 0) { + uint estimated_height = 0; + + if (_gw.mode == GWM_EMPTY && _game_mode != GM_MENU) { + estimated_height = _settings_game.game_creation.se_flat_world_height; + } else if (_gw.mode == GWM_HEIGHTMAP) { + estimated_height = _settings_game.game_creation.heightmap_height; + } else if (_settings_game.game_creation.land_generator == LG_TERRAGENESIS) { + estimated_height = GetEstimationTGPMapHeight(); + } else { + estimated_height = 0; + } + + _settings_game.construction.map_height_limit = std::max(MAP_HEIGHT_LIMIT_AUTO_MINIMUM, std::min(MAX_MAP_HEIGHT_LIMIT, estimated_height + MAP_HEIGHT_LIMIT_AUTO_CEILING_ROOM)); + } + /* Load the right landscape stuff, and the NewGRFs! */ GfxLoadSprites(); LoadStringWidthTable(); @@ -326,30 +311,18 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti /* Create toolbars */ SetupColoursAndInitialWindow(); - SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0); - - if (_gw.thread.joinable()) _gw.thread.join(); - - if (!UseThreadedModelProgress() || !VideoDriver::GetInstance()->HasGUI() || !StartNewThread(&_gw.thread, "ottd:genworld", &_GenerateWorld)) { - DEBUG(misc, 1, "Cannot create genworld thread, reverting to single-threaded mode"); - _gw.threaded = false; - _modal_progress_work_mutex.unlock(); - _GenerateWorld(); - _modal_progress_work_mutex.lock(); - return; - } + SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0, CM_DDSP_ZZZ); UnshowCriticalError(); - /* Remove any open window */ DeleteAllNonVitalWindows(); - /* Hide vital windows, because we don't allow to use them */ HideVitalWindows(); - /* Don't show the dialog if we don't have a thread */ ShowGenerateWorldProgress(); /* Centre the view on the map */ if (FindWindowById(WC_MAIN_WINDOW, 0) != nullptr) { ScrollMainWindowToTile(TileXY(MapSizeX() / 2, MapSizeY() / 2), true); } + + _GenerateWorld(); } diff --git a/src/genworld.h b/src/genworld.h index 8014797125..e6def69444 100644 --- a/src/genworld.h +++ b/src/genworld.h @@ -42,25 +42,27 @@ enum TgenSmoothness { TGEN_SMOOTHNESS_END, ///< Used to iterate. }; +static const uint CUSTOM_TERRAIN_TYPE_NUMBER_DIFFICULTY = 5; ///< Value for custom terrain type in difficulty settings. + static const uint CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY = 4; ///< Value for custom sea level in difficulty settings. static const uint CUSTOM_SEA_LEVEL_MIN_PERCENTAGE = 1; ///< Minimum percentage a user can specify for custom sea level. static const uint CUSTOM_SEA_LEVEL_MAX_PERCENTAGE = 90; ///< Maximum percentage a user can specify for custom sea level. +static const uint MAP_HEIGHT_LIMIT_AUTO_MINIMUM = 30; ///< When map height limit is auto, make this the lowest possible map height limit. +static const uint MAP_HEIGHT_LIMIT_AUTO_CEILING_ROOM = 15; ///< When map height limit is auto, the map height limit will be the higest peak plus this value. + typedef void GWDoneProc(); ///< Procedure called when the genworld process finishes typedef void GWAbortProc(); ///< Called when genworld is aborted /** Properties of current genworld process */ struct GenWorldInfo { bool abort; ///< Whether to abort the thread ASAP - bool quit_thread; ///< Do we want to quit the active thread - bool threaded; ///< Whether we run _GenerateWorld threaded GenWorldMode mode; ///< What mode are we making a world in CompanyID lc; ///< The local_company before generating uint size_x; ///< X-size of the map uint size_y; ///< Y-size of the map GWDoneProc *proc; ///< Proc that is called when done (can be nullptr) GWAbortProc *abortp; ///< Proc that is called when aborting (can be nullptr) - std::thread thread; ///< The thread we are in (joinable if a thread was created) }; /** Current stage of world generation process */ @@ -81,10 +83,8 @@ enum GenWorldProgress { }; /* genworld.cpp */ -bool IsGenerateWorldThreaded(); void GenerateWorldSetCallback(GWDoneProc *proc); void GenerateWorldSetAbortCallback(GWAbortProc *proc); -void WaitTillGeneratedWorld(); void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_settings = true); void AbortGeneratingWorld(); bool IsGeneratingWorldAborted(); diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 154097e722..46f2eac246 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -27,6 +27,9 @@ #include "saveload/saveload.h" #include "progress.h" #include "error.h" +#include "newgrf_townname.h" +#include "townname_type.h" +#include "video/video_driver.hpp" #include "widgets/genworld_widget.h" @@ -42,6 +45,15 @@ enum GenerateLandscapeWindowMode { GLWM_SCENARIO, ///< Generate flat land. }; +/** + * Get the map height limit, or if set to "auto", the absolute limit. + */ +static uint GetMapHeightLimit() +{ + if (_settings_newgame.construction.map_height_limit == 0) return MAX_MAP_HEIGHT_LIMIT; + return _settings_newgame.construction.map_height_limit; +} + /** * Changes landscape type and sets genworld window dirty * @param landscape new landscape type @@ -80,11 +92,11 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_MAPSIZE, STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_LAND_GENERATOR, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_TOWNS, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_TERRAIN_TYPE, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_VARIETY, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_QUANTITY_OF_SEA_LAKES, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_TREE_PLACER, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_TOWNS, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_INDUSTRIES, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_BORDER_TYPE, STR_NULL), SetFill(1, 1), EndContainer(), /* Widgets at the right of the labels. */ @@ -96,36 +108,40 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_MAPSIZE_Y_PULLDOWN), SetDataTip(STR_JUST_INT, STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 0), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_LANDSCAPE_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TERRAIN_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_VARIETY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_WATER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TREE_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_BORDERS_RANDOM), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), EndContainer(), NWidget(NWID_VERTICAL), SetPIP(0, 4, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_MAX_HEIGHTLEVEL, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_LINE_HEIGHT, STR_NULL), SetFill(1, 1), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_LABEL), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_COVERAGE, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DESERT_COVERAGE, STR_NULL), SetFill(1, 1), + EndContainer(), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_INDUSTRIES, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SMOOTHNESS, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_QUANTITY_OF_RIVERS, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_GAME_OPTIONS_TOWN_NAMES_FRAME, STR_NULL), SetFill(1, 1), EndContainer(), NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0), - /* Max. heightlevel. */ - NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_MAX_HEIGHTLEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_MAX_HEIGHTLEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_MAX_HEIGHTLEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_MAX_HEIGHTLEVEL_UP), SetFill(0, 1), - EndContainer(), - /* Snow line. */ - NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_LINE_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_LINE_UP), SetFill(0, 1), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR), + /* Snow coverage. */ + NWidget(NWID_HORIZONTAL), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_NULL), SetFill(1, 0), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), + EndContainer(), + /* Desert coverage. */ + NWidget(NWID_HORIZONTAL), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_NULL), SetFill(1, 0), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), + EndContainer(), EndContainer(), /* Starting date. */ NWidget(NWID_HORIZONTAL), @@ -133,9 +149,9 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_BLACK_DATE_LONG, STR_NULL), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), EndContainer(), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_SMOOTHNESS_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP), SetFill(1, 0), EndContainer(), EndContainer(), NWidget(WWT_PUSHTXTBTN, COLOUR_GREEN, WID_GL_GENERATE_BUTTON), SetMinimalSize(84, 0), SetDataTip(STR_MAPGEN_GENERATE, STR_NULL), SetFill(1, 1), @@ -197,18 +213,19 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { /* Labels at the left side. */ NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_NAME, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE_LABEL, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_MAPSIZE, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_ROTATION, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_TOWNS, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_INDUSTRIES, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_QUANTITY_OF_RIVERS, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_TREE_PLACER, STR_NULL), SetFill(1, 1), EndContainer(), /* Widgets at the right of the labels. */ NWidget(NWID_VERTICAL), SetPIP(0, 4, 0), NWidget(WWT_EMPTY, COLOUR_ORANGE, WID_GL_HEIGHTMAP_NAME_TEXT), SetFill(1, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, 5, 0), NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0), + NWidget(WWT_TEXT, COLOUR_ORANGE, WID_GL_HEIGHTMAP_SIZE_TEXT), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE, STR_NULL), SetFill(1, 0), /* Mapsize X * Y. */ NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_MAPSIZE_X_PULLDOWN), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 0), @@ -219,33 +236,42 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TREE_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0), EndContainer(), NWidget(NWID_VERTICAL), SetPIP(0, 4, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE_LABEL, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_LINE_HEIGHT, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_MAX_HEIGHTLEVEL, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_HEIGHT, STR_NULL), SetFill(1, 1), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_LABEL), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_COVERAGE, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DESERT_COVERAGE, STR_NULL), SetFill(1, 1), + EndContainer(), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_GAME_OPTIONS_TOWN_NAMES_FRAME, STR_NULL), SetFill(1, 1), EndContainer(), NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0), - NWidget(WWT_TEXT, COLOUR_ORANGE, WID_GL_HEIGHTMAP_SIZE_TEXT), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE, STR_NULL), SetFill(1, 0), NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_LINE_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_LEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_LINE_UP), SetFill(0, 1), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_HEIGHTMAP_HEIGHT_UP), SetFill(0, 1), EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_MAX_HEIGHTLEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_MAX_HEIGHTLEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0), - NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_MAX_HEIGHTLEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_MAX_HEIGHTLEVEL_UP), SetFill(0, 1), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_SELECTOR), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_NULL), SetFill(1, 0), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_NULL), SetFill(1, 0), + NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), + EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_BLACK_DATE_LONG, STR_NULL), SetFill(1, 0), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), EndContainer(), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP), SetFill(1, 0), EndContainer(), EndContainer(), NWidget(WWT_PUSHTXTBTN, COLOUR_GREEN, WID_GL_GENERATE_BUTTON), SetMinimalSize(84, 0), SetDataTip(STR_MAPGEN_GENERATE, STR_NULL), SetFill(1, 1), @@ -293,18 +319,45 @@ static DropDownList BuildMapsizeDropDown() return list; } -static const StringID _elevations[] = {STR_TERRAIN_TYPE_VERY_FLAT, STR_TERRAIN_TYPE_FLAT, STR_TERRAIN_TYPE_HILLY, STR_TERRAIN_TYPE_MOUNTAINOUS, STR_TERRAIN_TYPE_ALPINIST, INVALID_STRING_ID}; +static DropDownList BuildTownNameDropDown() +{ + DropDownList list; + + /* Add and sort newgrf townnames generators */ + const auto &grf_names = GetGRFTownNameList(); + for (uint i = 0; i < grf_names.size(); i++) { + list.emplace_back(new DropDownListStringItem(grf_names[i], BUILTIN_TOWNNAME_GENERATOR_COUNT + i, false)); + } + std::sort(list.begin(), list.end(), DropDownListStringItem::NatSortFunc); + + size_t newgrf_size = list.size(); + /* Insert newgrf_names at the top of the list */ + if (newgrf_size > 0) { + list.emplace_back(new DropDownListItem(-1, false)); // separator line + newgrf_size++; + } + + /* Add and sort original townnames generators */ + for (uint i = 0; i < BUILTIN_TOWNNAME_GENERATOR_COUNT; i++) { + list.emplace_back(new DropDownListStringItem(STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH + i, i, false)); + } + std::sort(list.begin() + newgrf_size, list.end(), DropDownListStringItem::NatSortFunc); + + return list; +} + + +static const StringID _elevations[] = {STR_TERRAIN_TYPE_VERY_FLAT, STR_TERRAIN_TYPE_FLAT, STR_TERRAIN_TYPE_HILLY, STR_TERRAIN_TYPE_MOUNTAINOUS, STR_TERRAIN_TYPE_ALPINIST, STR_TERRAIN_TYPE_CUSTOM, INVALID_STRING_ID}; static const StringID _sea_lakes[] = {STR_SEA_LEVEL_VERY_LOW, STR_SEA_LEVEL_LOW, STR_SEA_LEVEL_MEDIUM, STR_SEA_LEVEL_HIGH, STR_SEA_LEVEL_CUSTOM, INVALID_STRING_ID}; static const StringID _rivers[] = {STR_RIVERS_NONE, STR_RIVERS_FEW, STR_RIVERS_MODERATE, STR_RIVERS_LOT, INVALID_STRING_ID}; static const StringID _smoothness[] = {STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH, INVALID_STRING_ID}; -static const StringID _tree_placer[] = {STR_CONFIG_SETTING_TREE_PLACER_NONE, STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL, STR_CONFIG_SETTING_TREE_PLACER_IMPROVED, INVALID_STRING_ID}; static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE, INVALID_STRING_ID}; static const StringID _landscape[] = {STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL, STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS, INVALID_STRING_ID}; static const StringID _num_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM, INVALID_STRING_ID}; static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, INVALID_STRING_ID}; static const StringID _variety[] = {STR_VARIETY_NONE, STR_VARIETY_VERY_LOW, STR_VARIETY_LOW, STR_VARIETY_MEDIUM, STR_VARIETY_HIGH, STR_VARIETY_VERY_HIGH, INVALID_STRING_ID}; -assert_compile(lengthof(_num_inds) == ID_END + 1); +static_assert(lengthof(_num_inds) == ID_END + 1); struct GenerateLandscapeWindow : public Window { uint widget_id; @@ -321,10 +374,13 @@ struct GenerateLandscapeWindow : public Window { this->mode = (GenerateLandscapeWindowMode)this->window_number; - /* Disable town, industry and trees in SE */ + /* Disable town and industry in SE */ this->SetWidgetDisabledState(WID_GL_TOWN_PULLDOWN, _game_mode == GM_EDITOR); this->SetWidgetDisabledState(WID_GL_INDUSTRY_PULLDOWN, _game_mode == GM_EDITOR); - this->SetWidgetDisabledState(WID_GL_TREE_PULLDOWN, _game_mode == GM_EDITOR); + + /* In case the map_height_limit is changed, clamp heightmap_height and custom_terrain_type. */ + _settings_newgame.game_creation.heightmap_height = Clamp(_settings_newgame.game_creation.heightmap_height, MIN_HEIGHTMAP_HEIGHT, GetMapHeightLimit()); + _settings_newgame.game_creation.custom_terrain_type = Clamp(_settings_newgame.game_creation.custom_terrain_type, MIN_CUSTOM_TERRAIN_TYPE, GetMapHeightLimit()); this->OnInvalidateData(); } @@ -336,8 +392,9 @@ struct GenerateLandscapeWindow : public Window { case WID_GL_START_DATE_TEXT: SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); break; case WID_GL_MAPSIZE_X_PULLDOWN: SetDParam(0, 1LL << _settings_newgame.game_creation.map_x); break; case WID_GL_MAPSIZE_Y_PULLDOWN: SetDParam(0, 1LL << _settings_newgame.game_creation.map_y); break; - case WID_GL_MAX_HEIGHTLEVEL_TEXT: SetDParam(0, _settings_newgame.construction.max_heightlevel); break; - case WID_GL_SNOW_LEVEL_TEXT: SetDParam(0, _settings_newgame.game_creation.snow_line_height); break; + case WID_GL_HEIGHTMAP_HEIGHT_TEXT: SetDParam(0, _settings_newgame.game_creation.heightmap_height); break; + case WID_GL_SNOW_COVERAGE_TEXT: SetDParam(0, _settings_newgame.game_creation.snow_coverage); break; + case WID_GL_DESERT_COVERAGE_TEXT: SetDParam(0, _settings_newgame.game_creation.desert_coverage); break; case WID_GL_TOWN_PULLDOWN: if (_game_mode == GM_EDITOR) { @@ -350,10 +407,25 @@ struct GenerateLandscapeWindow : public Window { } break; + case WID_GL_TOWNNAME_DROPDOWN: { + uint gen = _settings_newgame.game_creation.town_name; + StringID name = gen < BUILTIN_TOWNNAME_GENERATOR_COUNT ? + STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH + gen : + GetGRFTownNameName(gen - BUILTIN_TOWNNAME_GENERATOR_COUNT); + SetDParam(0, name); + break; + } + case WID_GL_INDUSTRY_PULLDOWN: SetDParam(0, _game_mode == GM_EDITOR ? STR_CONFIG_SETTING_OFF : _num_inds[_settings_newgame.difficulty.industry_density]); break; case WID_GL_LANDSCAPE_PULLDOWN: SetDParam(0, _landscape[_settings_newgame.game_creation.land_generator]); break; - case WID_GL_TREE_PULLDOWN: SetDParam(0, _tree_placer[_settings_newgame.game_creation.tree_placer]); break; - case WID_GL_TERRAIN_PULLDOWN: SetDParam(0, _elevations[_settings_newgame.difficulty.terrain_type]); break; + case WID_GL_TERRAIN_PULLDOWN: + if (_settings_newgame.difficulty.terrain_type == CUSTOM_TERRAIN_TYPE_NUMBER_DIFFICULTY) { + SetDParam(0, STR_TERRAIN_TYPE_CUSTOM_VALUE); + SetDParam(1, _settings_newgame.game_creation.custom_terrain_type); + } else { + SetDParam(0, _elevations[_settings_newgame.difficulty.terrain_type]); break; + } + break; case WID_GL_WATER_PULLDOWN: if (_settings_newgame.difficulty.quantity_sea_lakes == CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY) { @@ -420,20 +492,41 @@ struct GenerateLandscapeWindow : public Window { } /* Disable snowline if not arctic */ - this->SetWidgetDisabledState(WID_GL_SNOW_LEVEL_TEXT, _settings_newgame.game_creation.landscape != LT_ARCTIC); + this->SetWidgetDisabledState(WID_GL_SNOW_COVERAGE_TEXT, _settings_newgame.game_creation.landscape != LT_ARCTIC); + /* Disable desert if not tropic */ + this->SetWidgetDisabledState(WID_GL_DESERT_COVERAGE_TEXT, _settings_newgame.game_creation.landscape != LT_TROPIC); + + /* Set snow/rainforest selections */ + int climate_plane = 0; + switch (_settings_newgame.game_creation.landscape) { + case LT_TEMPERATE: climate_plane = SZSP_VERTICAL; break; + case LT_ARCTIC: climate_plane = 0; break; + case LT_TROPIC: climate_plane = 1; break; + case LT_TOYLAND: climate_plane = SZSP_VERTICAL; break; + } + this->GetWidget(WID_GL_CLIMATE_SEL_LABEL)->SetDisplayedPlane(climate_plane); + this->GetWidget(WID_GL_CLIMATE_SEL_SELECTOR)->SetDisplayedPlane(climate_plane); /* Update availability of decreasing / increasing start date and snow level */ - this->SetWidgetDisabledState(WID_GL_MAX_HEIGHTLEVEL_DOWN, _settings_newgame.construction.max_heightlevel <= MIN_MAX_HEIGHTLEVEL); - this->SetWidgetDisabledState(WID_GL_MAX_HEIGHTLEVEL_UP, _settings_newgame.construction.max_heightlevel >= MAX_MAX_HEIGHTLEVEL); + if (mode == GLWM_HEIGHTMAP) { + this->SetWidgetDisabledState(WID_GL_HEIGHTMAP_HEIGHT_DOWN, _settings_newgame.game_creation.heightmap_height <= MIN_HEIGHTMAP_HEIGHT); + this->SetWidgetDisabledState(WID_GL_HEIGHTMAP_HEIGHT_UP, _settings_newgame.game_creation.heightmap_height >= GetMapHeightLimit()); + } this->SetWidgetDisabledState(WID_GL_START_DATE_DOWN, _settings_newgame.game_creation.starting_year <= MIN_YEAR); this->SetWidgetDisabledState(WID_GL_START_DATE_UP, _settings_newgame.game_creation.starting_year >= MAX_YEAR); - this->SetWidgetDisabledState(WID_GL_SNOW_LEVEL_DOWN, _settings_newgame.game_creation.snow_line_height <= MIN_SNOWLINE_HEIGHT || _settings_newgame.game_creation.landscape != LT_ARCTIC); - this->SetWidgetDisabledState(WID_GL_SNOW_LEVEL_UP, _settings_newgame.game_creation.snow_line_height >= MAX_SNOWLINE_HEIGHT || _settings_newgame.game_creation.landscape != LT_ARCTIC); + this->SetWidgetDisabledState(WID_GL_SNOW_COVERAGE_DOWN, _settings_newgame.game_creation.snow_coverage <= 0 || _settings_newgame.game_creation.landscape != LT_ARCTIC); + this->SetWidgetDisabledState(WID_GL_SNOW_COVERAGE_UP, _settings_newgame.game_creation.snow_coverage >= 100 || _settings_newgame.game_creation.landscape != LT_ARCTIC); + this->SetWidgetDisabledState(WID_GL_DESERT_COVERAGE_DOWN, _settings_newgame.game_creation.desert_coverage <= 0 || _settings_newgame.game_creation.landscape != LT_TROPIC); + this->SetWidgetDisabledState(WID_GL_DESERT_COVERAGE_UP, _settings_newgame.game_creation.desert_coverage >= 100 || _settings_newgame.game_creation.landscape != LT_TROPIC); - /* Do not allow a custom sea level with the original land generator. */ - if (_settings_newgame.game_creation.land_generator == LG_ORIGINAL && - _settings_newgame.difficulty.quantity_sea_lakes == CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY) { - _settings_newgame.difficulty.quantity_sea_lakes = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE; + /* Do not allow a custom sea level or terrain type with the original land generator. */ + if (_settings_newgame.game_creation.land_generator == LG_ORIGINAL) { + if (_settings_newgame.difficulty.quantity_sea_lakes == CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY) { + _settings_newgame.difficulty.quantity_sea_lakes = 1; + } + if (_settings_newgame.difficulty.terrain_type == CUSTOM_TERRAIN_TYPE_NUMBER_DIFFICULTY) { + _settings_newgame.difficulty.terrain_type = 1; + } } } @@ -442,7 +535,7 @@ struct GenerateLandscapeWindow : public Window { { const StringID *strs = nullptr; switch (widget) { - case WID_GL_MAX_HEIGHTLEVEL_TEXT: + case WID_GL_HEIGHTMAP_HEIGHT_TEXT: SetDParam(0, MAX_TILE_HEIGHT); *size = GetStringBoundingBox(STR_JUST_INT); break; @@ -458,9 +551,14 @@ struct GenerateLandscapeWindow : public Window { *size = maxdim(*size, GetStringBoundingBox(STR_JUST_INT)); break; - case WID_GL_SNOW_LEVEL_TEXT: + case WID_GL_SNOW_COVERAGE_TEXT: SetDParamMaxValue(0, MAX_TILE_HEIGHT); - *size = maxdim(*size, GetStringBoundingBox(STR_JUST_INT)); + *size = maxdim(*size, GetStringBoundingBox(STR_MAPGEN_SNOW_COVERAGE_TEXT)); + break; + + case WID_GL_DESERT_COVERAGE_TEXT: + SetDParamMaxValue(0, MAX_TILE_HEIGHT); + *size = maxdim(*size, GetStringBoundingBox(STR_MAPGEN_DESERT_COVERAGE_TEXT)); break; case WID_GL_HEIGHTMAP_SIZE_TEXT: @@ -477,8 +575,13 @@ struct GenerateLandscapeWindow : public Window { case WID_GL_INDUSTRY_PULLDOWN: strs = _num_inds; break; case WID_GL_LANDSCAPE_PULLDOWN: strs = _landscape; break; - case WID_GL_TREE_PULLDOWN: strs = _tree_placer; break; - case WID_GL_TERRAIN_PULLDOWN: strs = _elevations; break; + + case WID_GL_TERRAIN_PULLDOWN: + strs = _elevations; + SetDParamMaxValue(0, MAX_MAP_HEIGHT_LIMIT); + *size = maxdim(*size, GetStringBoundingBox(STR_TERRAIN_TYPE_CUSTOM_VALUE)); + break; + case WID_GL_WATER_PULLDOWN: strs = _sea_lakes; SetDParamMaxValue(0, CUSTOM_SEA_LEVEL_MAX_PERCENTAGE); @@ -513,7 +616,7 @@ struct GenerateLandscapeWindow : public Window { } } size->width += padding.width; - size->height = max(size->height, (uint)(FONT_HEIGHT_NORMAL + WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM)); + size->height = std::max(size->height, (uint)(FONT_HEIGHT_NORMAL + WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM)); } void DrawWidget(const Rect &r, int widget) const override @@ -548,6 +651,10 @@ struct GenerateLandscapeWindow : public Window { ShowDropDownMenu(this, _num_towns, _settings_newgame.difficulty.number_towns, WID_GL_TOWN_PULLDOWN, 0, 0); break; + case WID_GL_TOWNNAME_DROPDOWN: // Townname generator + ShowDropDownList(this, BuildTownNameDropDown(), _settings_newgame.game_creation.town_name, WID_GL_TOWNNAME_DROPDOWN); + break; + case WID_GL_INDUSTRY_PULLDOWN: // Number of industries ShowDropDownMenu(this, _num_inds, _settings_newgame.difficulty.industry_density, WID_GL_INDUSTRY_PULLDOWN, 0, 0); break; @@ -579,22 +686,22 @@ struct GenerateLandscapeWindow : public Window { break; } - case WID_GL_MAX_HEIGHTLEVEL_DOWN: - case WID_GL_MAX_HEIGHTLEVEL_UP: // Height level buttons + case WID_GL_HEIGHTMAP_HEIGHT_DOWN: + case WID_GL_HEIGHTMAP_HEIGHT_UP: // Height level buttons /* Don't allow too fast scrolling */ if (!(this->flags & WF_TIMEOUT) || this->timeout_timer <= 1) { this->HandleButtonClick(widget); - _settings_newgame.construction.max_heightlevel = Clamp(_settings_newgame.construction.max_heightlevel + widget - WID_GL_MAX_HEIGHTLEVEL_TEXT, MIN_MAX_HEIGHTLEVEL, MAX_MAX_HEIGHTLEVEL); + _settings_newgame.game_creation.heightmap_height = Clamp(_settings_newgame.game_creation.heightmap_height + widget - WID_GL_HEIGHTMAP_HEIGHT_TEXT, MIN_HEIGHTMAP_HEIGHT, GetMapHeightLimit()); this->InvalidateData(); } _left_button_clicked = false; break; - case WID_GL_MAX_HEIGHTLEVEL_TEXT: // Height level text - this->widget_id = WID_GL_MAX_HEIGHTLEVEL_TEXT; - SetDParam(0, _settings_newgame.construction.max_heightlevel); - ShowQueryString(STR_JUST_INT, STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT, 4, this, CS_NUMERAL, QSF_ENABLE_DEFAULT); + case WID_GL_HEIGHTMAP_HEIGHT_TEXT: // Height level text + this->widget_id = WID_GL_HEIGHTMAP_HEIGHT_TEXT; + SetDParam(0, _settings_newgame.game_creation.heightmap_height); + ShowQueryString(STR_JUST_INT, STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT, 4, this, CS_NUMERAL, QSF_ENABLE_DEFAULT); break; @@ -616,26 +723,40 @@ struct GenerateLandscapeWindow : public Window { ShowQueryString(STR_JUST_INT, STR_MAPGEN_START_DATE_QUERY_CAPT, 8, this, CS_NUMERAL, QSF_ENABLE_DEFAULT); break; - case WID_GL_SNOW_LEVEL_DOWN: - case WID_GL_SNOW_LEVEL_UP: // Snow line buttons + case WID_GL_SNOW_COVERAGE_DOWN: + case WID_GL_SNOW_COVERAGE_UP: // Snow coverage buttons /* Don't allow too fast scrolling */ if (!(this->flags & WF_TIMEOUT) || this->timeout_timer <= 1) { this->HandleButtonClick(widget); - _settings_newgame.game_creation.snow_line_height = Clamp(_settings_newgame.game_creation.snow_line_height + widget - WID_GL_SNOW_LEVEL_TEXT, MIN_SNOWLINE_HEIGHT, MAX_SNOWLINE_HEIGHT); + _settings_newgame.game_creation.snow_coverage = Clamp(_settings_newgame.game_creation.snow_coverage + (widget - WID_GL_SNOW_COVERAGE_TEXT) * 10, 0, 100); this->InvalidateData(); } _left_button_clicked = false; break; - case WID_GL_SNOW_LEVEL_TEXT: // Snow line text - this->widget_id = WID_GL_SNOW_LEVEL_TEXT; - SetDParam(0, _settings_newgame.game_creation.snow_line_height); - ShowQueryString(STR_JUST_INT, STR_MAPGEN_SNOW_LINE_QUERY_CAPT, 4, this, CS_NUMERAL, QSF_ENABLE_DEFAULT); + case WID_GL_SNOW_COVERAGE_TEXT: // Snow coverage text + this->widget_id = WID_GL_SNOW_COVERAGE_TEXT; + SetDParam(0, _settings_newgame.game_creation.snow_coverage); + ShowQueryString(STR_JUST_INT, STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT, 4, this, CS_NUMERAL, QSF_ENABLE_DEFAULT); break; - case WID_GL_TREE_PULLDOWN: // Tree placer - ShowDropDownMenu(this, _tree_placer, _settings_newgame.game_creation.tree_placer, WID_GL_TREE_PULLDOWN, 0, 0); + case WID_GL_DESERT_COVERAGE_DOWN: + case WID_GL_DESERT_COVERAGE_UP: // Desert coverage buttons + /* Don't allow too fast scrolling */ + if (!(this->flags & WF_TIMEOUT) || this->timeout_timer <= 1) { + this->HandleButtonClick(widget); + + _settings_newgame.game_creation.desert_coverage = Clamp(_settings_newgame.game_creation.desert_coverage + (widget - WID_GL_DESERT_COVERAGE_TEXT) * 10, 0, 100); + this->InvalidateData(); + } + _left_button_clicked = false; + break; + + case WID_GL_DESERT_COVERAGE_TEXT: // Desert line text + this->widget_id = WID_GL_DESERT_COVERAGE_TEXT; + SetDParam(0, _settings_newgame.game_creation.desert_coverage); + ShowQueryString(STR_JUST_INT, STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT, 4, this, CS_NUMERAL, QSF_ENABLE_DEFAULT); break; case WID_GL_LANDSCAPE_PULLDOWN: // Landscape generator @@ -703,8 +824,12 @@ struct GenerateLandscapeWindow : public Window { void OnTimeout() override { - static const int raise_widgets[] = {WID_GL_MAX_HEIGHTLEVEL_DOWN, WID_GL_MAX_HEIGHTLEVEL_UP, WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_SNOW_LEVEL_UP, WID_GL_SNOW_LEVEL_DOWN, WIDGET_LIST_END}; - for (const int *widget = raise_widgets; *widget != WIDGET_LIST_END; widget++) { + static const int newgame_raise_widgets[] = {WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_SNOW_COVERAGE_UP, WID_GL_SNOW_COVERAGE_DOWN, WID_GL_DESERT_COVERAGE_UP, WID_GL_DESERT_COVERAGE_DOWN, WIDGET_LIST_END}; + static const int heightmap_raise_widgets[] = {WID_GL_HEIGHTMAP_HEIGHT_DOWN, WID_GL_HEIGHTMAP_HEIGHT_UP, WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_SNOW_COVERAGE_UP, WID_GL_SNOW_COVERAGE_DOWN, WID_GL_DESERT_COVERAGE_UP, WID_GL_DESERT_COVERAGE_DOWN, WIDGET_LIST_END}; + + const int *widget = (mode == GLWM_HEIGHTMAP) ? heightmap_raise_widgets : newgame_raise_widgets; + + for (; *widget != WIDGET_LIST_END; widget++) { if (this->IsWidgetLowered(*widget)) { this->RaiseWidget(*widget); this->SetWidgetDirty(*widget); @@ -717,7 +842,6 @@ struct GenerateLandscapeWindow : public Window { switch (widget) { case WID_GL_MAPSIZE_X_PULLDOWN: _settings_newgame.game_creation.map_x = index; break; case WID_GL_MAPSIZE_Y_PULLDOWN: _settings_newgame.game_creation.map_y = index; break; - case WID_GL_TREE_PULLDOWN: _settings_newgame.game_creation.tree_placer = index; break; case WID_GL_RIVER_PULLDOWN: _settings_newgame.game_creation.amount_of_rivers = index; break; case WID_GL_SMOOTHNESS_PULLDOWN: _settings_newgame.game_creation.tgen_smoothness = index; break; case WID_GL_VARIETY_PULLDOWN: _settings_newgame.game_creation.variety = index; break; @@ -740,8 +864,23 @@ struct GenerateLandscapeWindow : public Window { _settings_newgame.difficulty.number_towns = index; break; + case WID_GL_TOWNNAME_DROPDOWN: // Town names + if (_game_mode == GM_MENU || Town::GetNumItems() == 0) { + _settings_newgame.game_creation.town_name = index; + SetWindowDirty(WC_GAME_OPTIONS, WN_GAME_OPTIONS_GAME_OPTIONS); + } + break; + case WID_GL_INDUSTRY_PULLDOWN: _settings_newgame.difficulty.industry_density = index; break; - case WID_GL_TERRAIN_PULLDOWN: _settings_newgame.difficulty.terrain_type = index; break; + case WID_GL_TERRAIN_PULLDOWN: { + if ((uint)index == CUSTOM_TERRAIN_TYPE_NUMBER_DIFFICULTY) { + this->widget_id = widget; + SetDParam(0, _settings_newgame.game_creation.custom_terrain_type); + ShowQueryString(STR_JUST_INT, STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT, 4, this, CS_NUMERAL, QSF_NONE); + } + _settings_newgame.difficulty.terrain_type = index; + break; + } case WID_GL_WATER_PULLDOWN: { if ((uint)index == CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY) { @@ -767,19 +906,21 @@ struct GenerateLandscapeWindow : public Window { } else { /* An empty string means revert to the default */ switch (this->widget_id) { - case WID_GL_MAX_HEIGHTLEVEL_TEXT: value = DEF_MAX_HEIGHTLEVEL; break; + case WID_GL_HEIGHTMAP_HEIGHT_TEXT: value = MAP_HEIGHT_LIMIT_AUTO_MINIMUM; break; case WID_GL_START_DATE_TEXT: value = DEF_START_YEAR; break; - case WID_GL_SNOW_LEVEL_TEXT: value = DEF_SNOWLINE_HEIGHT; break; - case WID_GL_TOWN_PULLDOWN: value = 1; break; - case WID_GL_WATER_PULLDOWN: value = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE; break; + case WID_GL_SNOW_COVERAGE_TEXT: value = DEF_SNOW_COVERAGE; break; + case WID_GL_DESERT_COVERAGE_TEXT: value = DEF_DESERT_COVERAGE; break; + case WID_GL_TOWN_PULLDOWN: value = 1; break; + case WID_GL_TERRAIN_PULLDOWN: value = MIN_MAP_HEIGHT_LIMIT; break; + case WID_GL_WATER_PULLDOWN: value = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE; break; default: NOT_REACHED(); } } switch (this->widget_id) { - case WID_GL_MAX_HEIGHTLEVEL_TEXT: - this->SetWidgetDirty(WID_GL_MAX_HEIGHTLEVEL_TEXT); - _settings_newgame.construction.max_heightlevel = Clamp(value, MIN_MAX_HEIGHTLEVEL, MAX_MAX_HEIGHTLEVEL); + case WID_GL_HEIGHTMAP_HEIGHT_TEXT: + this->SetWidgetDirty(WID_GL_HEIGHTMAP_HEIGHT_TEXT); + _settings_newgame.game_creation.heightmap_height = Clamp(value, MIN_HEIGHTMAP_HEIGHT, GetMapHeightLimit()); break; case WID_GL_START_DATE_TEXT: @@ -787,15 +928,24 @@ struct GenerateLandscapeWindow : public Window { _settings_newgame.game_creation.starting_year = Clamp(value, MIN_YEAR, MAX_YEAR); break; - case WID_GL_SNOW_LEVEL_TEXT: - this->SetWidgetDirty(WID_GL_SNOW_LEVEL_TEXT); - _settings_newgame.game_creation.snow_line_height = Clamp(value, MIN_SNOWLINE_HEIGHT, MAX_SNOWLINE_HEIGHT); + case WID_GL_SNOW_COVERAGE_TEXT: + this->SetWidgetDirty(WID_GL_SNOW_COVERAGE_TEXT); + _settings_newgame.game_creation.snow_coverage = Clamp(value, 0, 100); + break; + + case WID_GL_DESERT_COVERAGE_TEXT: + this->SetWidgetDirty(WID_GL_DESERT_COVERAGE_TEXT); + _settings_newgame.game_creation.desert_coverage = Clamp(value, 0, 100); break; case WID_GL_TOWN_PULLDOWN: _settings_newgame.game_creation.custom_town_number = Clamp(value, 1, CUSTOM_TOWN_MAX_NUMBER); break; + case WID_GL_TERRAIN_PULLDOWN: + _settings_newgame.game_creation.custom_terrain_type = Clamp(value, MIN_CUSTOM_TERRAIN_TYPE, GetMapHeightLimit()); + break; + case WID_GL_WATER_PULLDOWN: _settings_newgame.game_creation.custom_sea_level = Clamp(value, CUSTOM_SEA_LEVEL_MIN_PERCENTAGE, CUSTOM_SEA_LEVEL_MAX_PERCENTAGE); break; @@ -831,7 +981,7 @@ static void _ShowGenerateLandscape(GenerateLandscapeWindowMode mode) if (mode == GLWM_HEIGHTMAP) { /* If the function returns negative, it means there was a problem loading the heightmap */ - if (!GetHeightmapDimensions(_file_to_saveload.detail_ftype, _file_to_saveload.name, &x, &y)) return; + if (!GetHeightmapDimensions(_file_to_saveload.detail_ftype, _file_to_saveload.name.c_str(), &x, &y)) return; } WindowDesc *desc = (mode == GLWM_HEIGHTMAP) ? &_heightmap_load_desc : &_generate_landscape_desc; @@ -912,7 +1062,7 @@ struct CreateScenarioWindow : public Window this->SetWidgetDisabledState(WID_CS_START_DATE_DOWN, _settings_newgame.game_creation.starting_year <= MIN_YEAR); this->SetWidgetDisabledState(WID_CS_START_DATE_UP, _settings_newgame.game_creation.starting_year >= MAX_YEAR); this->SetWidgetDisabledState(WID_CS_FLAT_LAND_HEIGHT_DOWN, _settings_newgame.game_creation.se_flat_world_height <= 0); - this->SetWidgetDisabledState(WID_CS_FLAT_LAND_HEIGHT_UP, _settings_newgame.game_creation.se_flat_world_height >= MAX_TILE_HEIGHT); + this->SetWidgetDisabledState(WID_CS_FLAT_LAND_HEIGHT_UP, _settings_newgame.game_creation.se_flat_world_height >= GetMapHeightLimit()); this->SetWidgetLoweredState(WID_CS_TEMPERATE, _settings_newgame.game_creation.landscape == LT_TEMPERATE); this->SetWidgetLoweredState(WID_CS_ARCTIC, _settings_newgame.game_creation.landscape == LT_ARCTIC); @@ -1000,7 +1150,7 @@ struct CreateScenarioWindow : public Window this->HandleButtonClick(widget); this->SetDirty(); - _settings_newgame.game_creation.se_flat_world_height = Clamp(_settings_newgame.game_creation.se_flat_world_height + widget - WID_CS_FLAT_LAND_HEIGHT_TEXT, 0, _settings_game.construction.max_heightlevel); + _settings_newgame.game_creation.se_flat_world_height = Clamp(_settings_newgame.game_creation.se_flat_world_height + widget - WID_CS_FLAT_LAND_HEIGHT_TEXT, 0, GetMapHeightLimit()); } _left_button_clicked = false; break; @@ -1046,7 +1196,7 @@ struct CreateScenarioWindow : public Window case WID_CS_FLAT_LAND_HEIGHT_TEXT: this->SetWidgetDirty(WID_CS_FLAT_LAND_HEIGHT_TEXT); - _settings_newgame.game_creation.se_flat_world_height = Clamp(value, 0, _settings_game.construction.max_heightlevel); + _settings_newgame.game_creation.se_flat_world_height = Clamp(value, 0, GetMapHeightLimit()); break; } @@ -1147,7 +1297,7 @@ struct GenWorldStatus { StringID cls; uint current; uint total; - int timer; + std::chrono::steady_clock::time_point next_update; }; static GenWorldStatus _gws; @@ -1166,7 +1316,7 @@ static const StringID _generation_class_table[] = { STR_GENERATION_PREPARING_SCRIPT, STR_GENERATION_PREPARING_GAME }; -assert_compile(lengthof(_generation_class_table) == GWP_CLASS_COUNT); +static_assert(lengthof(_generation_class_table) == GWP_CLASS_COUNT); static void AbortGeneratingWorldCallback(Window *w, bool confirmed) @@ -1214,7 +1364,7 @@ struct GenerateProgressWindow : public Window { case WID_GP_PROGRESS_TEXT: for (uint i = 0; i < GWP_CLASS_COUNT; i++) { - size->width = max(size->width, GetStringBoundingBox(_generation_class_table[i]).width); + size->width = std::max(size->width, GetStringBoundingBox(_generation_class_table[i]).width); } size->height = FONT_HEIGHT_NORMAL * 2 + WD_PAR_VSEP_NORMAL; break; @@ -1249,11 +1399,11 @@ struct GenerateProgressWindow : public Window { */ void PrepareGenerateWorldProgress() { - _gws.cls = STR_GENERATION_WORLD_GENERATION; + _gws.cls = STR_GENERATION_WORLD_GENERATION; _gws.current = 0; - _gws.total = 0; + _gws.total = 0; _gws.percent = 0; - _gws.timer = 0; // Forces to paint the progress window immediately + _gws.next_update = std::chrono::steady_clock::now(); } /** @@ -1268,13 +1418,19 @@ void ShowGenerateWorldProgress() static void _SetGeneratingWorldProgress(GenWorldProgress cls, uint progress, uint total) { static const int percent_table[] = {0, 5, 14, 17, 20, 40, 60, 65, 80, 85, 95, 99, 100 }; - assert_compile(lengthof(percent_table) == GWP_CLASS_COUNT + 1); + static_assert(lengthof(percent_table) == GWP_CLASS_COUNT + 1); assert(cls < GWP_CLASS_COUNT); - /* Do not run this function if we aren't in a thread */ - if (!IsGenerateWorldThreaded() && !_network_dedicated) return; + /* Check if we really are generating the world. + * For example, placing trees via the SE also calls this function, but + * shouldn't try to update the progress. + */ + if (!HasModalProgress()) return; - if (IsGeneratingWorldAborted()) HandleGeneratingWorldAbortion(); + if (IsGeneratingWorldAborted()) { + HandleGeneratingWorldAbortion(); + return; + } if (total == 0) { assert(_gws.cls == _generation_class_table[cls]); @@ -1287,9 +1443,6 @@ static void _SetGeneratingWorldProgress(GenWorldProgress cls, uint progress, uin _gws.percent = percent_table[cls]; } - /* Don't update the screen too often. So update it once in every once in a while... */ - if (!_network_dedicated && _gws.timer != 0 && _realtime_tick - _gws.timer < MODAL_PROGRESS_REDRAW_TIMEOUT) return; - /* Percentage is about the number of completed tasks, so 'current - 1' */ _gws.percent = percent_table[cls] + (percent_table[cls + 1] - percent_table[cls]) * (_gws.current == 0 ? 0 : _gws.current - 1) / _gws.total; @@ -1308,23 +1461,12 @@ static void _SetGeneratingWorldProgress(GenWorldProgress cls, uint progress, uin DEBUG(net, 1, "Map generation percentage complete: %d", _gws.percent); last_percent = _gws.percent; - /* Don't continue as dedicated never has a thread running */ return; } SetWindowDirty(WC_MODAL_PROGRESS, 0); - MarkWholeScreenDirty(); - /* Release the rights to the map generator, and acquire the rights to the - * paint thread. The 'other' thread already has the paint thread rights so - * this ensures us that we are waiting until the paint thread is done - * before we reacquire the mapgen rights */ - _modal_progress_work_mutex.unlock(); - _modal_progress_paint_mutex.lock(); - _modal_progress_work_mutex.lock(); - _modal_progress_paint_mutex.unlock(); - - _gws.timer = _realtime_tick; + VideoDriver::GetInstance()->GameLoopPause(); } /** diff --git a/src/gfx.cpp b/src/gfx.cpp index eff4335cbc..7f0357232e 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -35,7 +35,7 @@ CursorVars _cursor; bool _ctrl_pressed; ///< Is Ctrl pressed? bool _alt_pressed; ///< Is Alt pressed? bool _shift_pressed; ///< Is Shift pressed? -byte _fast_forward; +uint16 _game_speed = 100; ///< Current game-speed; 100 is 1x, 0 is infinite. bool _left_button_down; ///< Is left mouse button pressed? bool _left_button_clicked; ///< Is left mouse button clicked? bool _right_button_down; ///< Is right mouse button pressed? @@ -61,6 +61,10 @@ static ReusableBuffer _cursor_backup; ZoomLevel _gui_zoom; ///< GUI Zoom level ZoomLevel _font_zoom; ///< Font Zoom level +int8 _gui_zoom_cfg; ///< GUI zoom level in config. +int8 _font_zoom_cfg; ///< Font zoom level in config. + + /** * The rect for repaint. * @@ -265,8 +269,8 @@ void GfxFillPolygon(const std::vector &shape, int colour, FillRectMode mo std::sort(intersections.begin(), intersections.end()); for (size_t i = 1; i < intersections.size(); i += 2) { /* Check clipping. */ - const int x1 = max(0, intersections[i - 1]); - const int x2 = min(intersections[i], dpi->width); + const int x1 = std::max(0, intersections[i - 1]); + const int x2 = std::min(intersections[i], dpi->width); if (x2 < 0) continue; if (x1 >= dpi->width) continue; @@ -329,7 +333,7 @@ static inline void GfxDoDrawLine(void *video, int x, int y, int x2, int y2, int /* prevent integer overflows. */ int margin = 1; - while (INT_MAX / abs(grade_y) < max(abs(clip.left - x), abs(clip.right - x))) { + while (INT_MAX / abs(grade_y) < std::max(abs(clip.left - x), abs(clip.right - x))) { grade_y /= 2; grade_x /= 2; margin *= 2; // account for rounding errors @@ -638,7 +642,7 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left, int DrawString(int left, int right, int top, const char *str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize) { /* The string may contain control chars to change the font, just use the biggest font for clipping. */ - int max_height = max(max(FONT_HEIGHT_SMALL, FONT_HEIGHT_NORMAL), max(FONT_HEIGHT_LARGE, FONT_HEIGHT_MONO)); + int max_height = std::max({FONT_HEIGHT_SMALL, FONT_HEIGHT_NORMAL, FONT_HEIGHT_LARGE, FONT_HEIGHT_MONO}); /* Funny glyphs may extent outside the usual bounds, so relax the clipping somewhat. */ int extra = max_height / 2; @@ -904,6 +908,7 @@ void DrawCharCentered(WChar c, int x, int y, TextColour colour) * Get the size of a sprite. * @param sprid Sprite to examine. * @param[out] offset Optionally returns the sprite position offset. + * @param zoom The zoom level applicable to the sprite. * @return Sprite size in pixels. * @note The size assumes (0, 0) as top-left coordinate and ignores any part of the sprite drawn at the left or above that position. */ @@ -917,8 +922,8 @@ Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom) } Dimension d; - d.width = max(0, UnScaleByZoom(sprite->x_offs + sprite->width, zoom)); - d.height = max(0, UnScaleByZoom(sprite->y_offs + sprite->height, zoom)); + d.width = std::max(0, UnScaleByZoom(sprite->x_offs + sprite->width, zoom)); + d.height = std::max(0, UnScaleByZoom(sprite->y_offs + sprite->height, zoom)); return d; } @@ -1025,10 +1030,10 @@ static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mo bp.height = UnScaleByZoom(sprite->height, zoom); } else { /* Amount of pixels to clip from the source sprite */ - int clip_left = max(0, -sprite->x_offs + sub->left * ZOOM_BASE ); - int clip_top = max(0, -sprite->y_offs + sub->top * ZOOM_BASE ); - int clip_right = max(0, sprite->width - (-sprite->x_offs + (sub->right + 1) * ZOOM_BASE)); - int clip_bottom = max(0, sprite->height - (-sprite->y_offs + (sub->bottom + 1) * ZOOM_BASE)); + int clip_left = std::max(0, -sprite->x_offs + sub->left * ZOOM_BASE ); + int clip_top = std::max(0, -sprite->y_offs + sub->top * ZOOM_BASE ); + int clip_right = std::max(0, sprite->width - (-sprite->x_offs + (sub->right + 1) * ZOOM_BASE)); + int clip_bottom = std::max(0, sprite->height - (-sprite->y_offs + (sub->bottom + 1) * ZOOM_BASE)); if (clip_left + clip_right >= sprite->width) return; if (clip_top + clip_bottom >= sprite->height) return; @@ -1306,7 +1311,7 @@ byte GetDigitWidth(FontSize size) { byte width = 0; for (char c = '0'; c <= '9'; c++) { - width = max(GetCharacterWidth(size, c), width); + width = std::max(GetCharacterWidth(size, c), width); } return width; } @@ -1345,6 +1350,9 @@ void ScreenSizeChanged() void UndrawMouseCursor() { + /* Don't undraw mouse cursor if it is handled by the video driver. */ + if (VideoDriver::GetInstance()->UseSystemCursor()) return; + /* Don't undraw the mouse cursor if the screen is not ready */ if (_screen.dst_ptr == nullptr) return; @@ -1358,6 +1366,9 @@ void UndrawMouseCursor() void DrawMouseCursor() { + /* Don't draw mouse cursor if it is handled by the video driver. */ + if (VideoDriver::GetInstance()->UseSystemCursor()) return; + /* Don't draw the mouse cursor if the screen is not ready */ if (_screen.dst_ptr == nullptr) return; @@ -1417,6 +1428,16 @@ void DrawMouseCursor() _cursor.dirty = false; } +/** + * Repaints a specific rectangle of the screen. + * + * @param left,top,right,bottom The area of the screen that needs repainting + * @pre The rectangle should have been previously marked dirty with \c AddDirtyBlock. + * @see AddDirtyBlock + * @see DrawDirtyBlocks + * @ingroup dirty + * + */ void RedrawScreenRect(int left, int top, int right, int bottom) { assert(right <= _screen.width && bottom <= _screen.height); @@ -1439,7 +1460,9 @@ void RedrawScreenRect(int left, int top, int right, int bottom) /** * Repaints the rectangle blocks which are marked as 'dirty'. * - * @see SetDirtyBlocks + * @see AddDirtyBlock + * + * @ingroup dirty */ void DrawDirtyBlocks() { @@ -1449,29 +1472,6 @@ void DrawDirtyBlocks() int x; int y; - if (HasModalProgress()) { - /* We are generating the world, so release our rights to the map and - * painting while we are waiting a bit. */ - _modal_progress_paint_mutex.unlock(); - _modal_progress_work_mutex.unlock(); - - /* Wait a while and update _realtime_tick so we are given the rights */ - if (!IsFirstModalProgressLoop()) CSleep(MODAL_PROGRESS_REDRAW_TIMEOUT); - _realtime_tick += MODAL_PROGRESS_REDRAW_TIMEOUT; - - /* Modal progress thread may need blitter access while we are waiting for it. */ - VideoDriver::GetInstance()->ReleaseBlitterLock(); - _modal_progress_paint_mutex.lock(); - VideoDriver::GetInstance()->AcquireBlitterLock(); - _modal_progress_work_mutex.lock(); - - /* When we ended with the modal progress, do not draw the blocks. - * Simply let the next run do so, otherwise we would be loading - * the new state (and possibly change the blitter) when we hold - * the drawing lock, which we must not do. */ - if (_switch_mode != SM_NONE && !HasModalProgress()) return; - } - y = 0; do { x = 0; @@ -1542,21 +1542,18 @@ void DrawDirtyBlocks() } /** - * This function extends the internal _invalid_rect rectangle as it - * now contains the rectangle defined by the given parameters. Note - * the point (0,0) is top left. + * Extend the internal _invalid_rect rectangle to contain the rectangle + * defined by the given parameters. Note the point (0,0) is top left. * * @param left The left edge of the rectangle * @param top The top edge of the rectangle * @param right The right edge of the rectangle * @param bottom The bottom edge of the rectangle * @see DrawDirtyBlocks + * @ingroup dirty * - * @todo The name of the function should be called like @c AddDirtyBlock as - * it neither set a dirty rect nor add several dirty rects although - * the function name is in plural. (Progman) */ -void SetDirtyBlocks(int left, int top, int right, int bottom) +void AddDirtyBlock(int left, int top, int right, int bottom) { byte *b; int width; @@ -1601,7 +1598,7 @@ void SetDirtyBlocks(int left, int top, int right, int bottom) */ void MarkWholeScreenDirty() { - SetDirtyBlocks(0, 0, _screen.width, _screen.height); + AddDirtyBlock(0, 0, _screen.width, _screen.height); } /** @@ -1673,7 +1670,7 @@ void UpdateCursorSize() /* Ignore setting any cursor before the sprites are loaded. */ if (GetMaxSpriteID() == 0) return; - assert_compile(lengthof(_cursor.sprite_seq) == lengthof(_cursor.sprite_pos)); + static_assert(lengthof(_cursor.sprite_seq) == lengthof(_cursor.sprite_pos)); assert(_cursor.sprite_count <= lengthof(_cursor.sprite_seq)); for (uint i = 0; i < _cursor.sprite_count; ++i) { const Sprite *p = GetSprite(GB(_cursor.sprite_seq[i].sprite, 0, SPRITE_WIDTH), ST_NORMAL); @@ -1687,8 +1684,8 @@ void UpdateCursorSize() _cursor.total_offs = offs; _cursor.total_size = size; } else { - int right = max(_cursor.total_offs.x + _cursor.total_size.x, offs.x + size.x); - int bottom = max(_cursor.total_offs.y + _cursor.total_size.y, offs.y + size.y); + int right = std::max(_cursor.total_offs.x + _cursor.total_size.x, offs.x + size.x); + int bottom = std::max(_cursor.total_offs.y + _cursor.total_size.y, offs.y + size.y); if (offs.x < _cursor.total_offs.x) _cursor.total_offs.x = offs.x; if (offs.y < _cursor.total_offs.y) _cursor.total_offs.y = offs.y; _cursor.total_size.x = right - _cursor.total_offs.x; @@ -1776,6 +1773,30 @@ void SetAnimatedMouseCursor(const AnimCursor *table) SwitchAnimatedCursor(); } +/** + * Update cursor position on mouse movement for relative modes. + * @param delta_x How much change in the X position. + * @param delta_y How much change in the Y position. + */ +void CursorVars::UpdateCursorPositionRelative(int delta_x, int delta_y) +{ + if (this->fix_at) { + this->delta.x = delta_x; + this->delta.y = delta_y; + } else { + int last_position_x = this->pos.x; + int last_position_y = this->pos.y; + + this->pos.x = Clamp(this->pos.x + delta_x, 0, _cur_resolution.width - 1); + this->pos.y = Clamp(this->pos.y + delta_y, 0, _cur_resolution.height - 1); + + this->delta.x = last_position_x - this->pos.x; + this->delta.y = last_position_y - this->pos.y; + + this->dirty = true; + } +} + /** * Update cursor position on mouse movement. * @param x New X position. @@ -1844,3 +1865,36 @@ void SortResolutions() { std::sort(_resolutions.begin(), _resolutions.end()); } + +/** + * Resolve GUI zoom level, if auto-suggestion is requested. + */ +void UpdateGUIZoom() +{ + /* Determine real GUI zoom to use. */ + if (_gui_zoom_cfg == ZOOM_LVL_CFG_AUTO) { + _gui_zoom = static_cast(Clamp(VideoDriver::GetInstance()->GetSuggestedUIZoom(), _settings_client.gui.zoom_min, _settings_client.gui.zoom_max)); + } else { + /* Ensure the gui_zoom is clamped between min/max. Change the + * _gui_zoom_cfg if it isn't, as this is used to visually show the + * selection in the Game Options. */ + _gui_zoom_cfg = Clamp(_gui_zoom_cfg, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); + _gui_zoom = static_cast(_gui_zoom_cfg); + } + + /* Determine real font zoom to use. */ + if (_font_zoom_cfg == ZOOM_LVL_CFG_AUTO) { + _font_zoom = static_cast(VideoDriver::GetInstance()->GetSuggestedUIZoom()); + } else { + _font_zoom = static_cast(_font_zoom_cfg); + } +} + +void ChangeGameSpeed(bool enable_fast_forward) +{ + if (enable_fast_forward) { + _game_speed = _settings_client.gui.fast_forward_speed_limit; + } else { + _game_speed = 100; + } +} diff --git a/src/gfx_func.h b/src/gfx_func.h index 1a6377050f..c0060a9eff 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -55,7 +55,7 @@ extern CursorVars _cursor; extern bool _ctrl_pressed; ///< Is Ctrl pressed? extern bool _alt_pressed; ///< Is Alt pressed? extern bool _shift_pressed; ///< Is Shift pressed? -extern byte _fast_forward; +extern uint16 _game_speed; extern bool _left_button_down; extern bool _left_button_clicked; @@ -74,10 +74,12 @@ void HandleTextInput(const char *str, bool marked = false, const char *caret = n void HandleCtrlChanged(); void HandleMouseEvents(); void UpdateWindows(); +void ChangeGameSpeed(bool enable_fast_forward); void DrawMouseCursor(); void ScreenSizeChanged(); void GameSizeChanged(); +void UpdateGUIZoom(); void UndrawMouseCursor(); /** Size of the buffer used for drawing strings. */ @@ -113,7 +115,7 @@ int DrawString(int left, int right, int top, StringID str, TextColour colour = T int DrawStringMultiLine(int left, int right, int top, int bottom, const char *str, TextColour colour = TC_FROMSTRING, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FS_NORMAL); int DrawStringMultiLine(int left, int right, int top, int bottom, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FS_NORMAL); -void DrawCharCentered(uint32 c, int x, int y, TextColour colour); +void DrawCharCentered(WChar c, int x, int y, TextColour colour); void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode = FILLRECT_OPAQUE); void GfxFillPolygon(const std::vector &shape, int colour, FillRectMode mode = FILLRECT_OPAQUE); @@ -132,7 +134,7 @@ Point GetCharPosInString(const char *str, const char *ch, FontSize start_fontsiz const char *GetCharAtPosition(const char *str, int x, FontSize start_fontsize = FS_NORMAL); void DrawDirtyBlocks(); -void SetDirtyBlocks(int left, int top, int right, int bottom); +void AddDirtyBlock(int left, int top, int right, int bottom); void MarkWholeScreenDirty(); void GfxInitPalettes(); @@ -165,7 +167,7 @@ void SortResolutions(); bool ToggleFullScreen(bool fs); /* gfx.cpp */ -byte GetCharacterWidth(FontSize size, uint32 key); +byte GetCharacterWidth(FontSize size, WChar key); byte GetDigitWidth(FontSize size = FS_NORMAL); void GetBroadestDigit(uint *front, uint *next, FontSize size = FS_NORMAL); @@ -228,6 +230,7 @@ static const uint8 PC_LIGHT_BLUE = 0x98; ///< Light blue palet static const uint8 PC_ROUGH_LAND = 0x52; ///< Dark green palette colour for rough land. static const uint8 PC_GRASS_LAND = 0x54; ///< Dark green palette colour for grass land. static const uint8 PC_BARE_LAND = 0x37; ///< Brown palette colour for bare land. +static const uint8 PC_RAINFOREST = 0x5C; ///< Pale green palette colour for rainforest. static const uint8 PC_FIELDS = 0x25; ///< Light brown palette colour for fields. static const uint8 PC_TREES = 0x57; ///< Green palette colour for trees. static const uint8 PC_WATER = 0xC9; ///< Dark blue palette colour for water. diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 584a712736..9f1f2742ad 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -116,7 +116,7 @@ void Font::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const le_bool Font::getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const { - return FALSE; + return false; } /** @@ -431,7 +431,7 @@ int FallbackParagraphLayout::FallbackLine::GetLeading() const { int leading = 0; for (const auto &run : *this) { - leading = max(leading, run.GetLeading()); + leading = std::max(leading, run.GetLeading()); } return leading; @@ -747,7 +747,7 @@ Dimension Layouter::GetBounds() { Dimension d = { 0, 0 }; for (const auto &l : *this) { - d.width = max(d.width, l->GetWidth()); + d.width = std::max(d.width, l->GetWidth()); d.height += l->GetLeading(); } return d; diff --git a/src/gfx_layout.h b/src/gfx_layout.h index 4854be6e55..f26545ee4a 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -45,7 +45,7 @@ struct FontState { */ inline void SetColour(TextColour c) { - assert(c >= TC_BLUE && c <= TC_BLACK); + // assert(c >= TC_BLUE && c <= TC_BLACK); CM seems redundant and crashes custom colors (in graphs) if ((this->cur_colour & TC_FORCED) == 0) this->cur_colour = c; } diff --git a/src/gfx_type.h b/src/gfx_type.h index 73d8ce3f4b..9b8094246d 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -157,6 +157,7 @@ struct CursorVars { /* Drag data */ bool vehchain; ///< vehicle chain is dragged + void UpdateCursorPositionRelative(int delta_x, int delta_y); bool UpdateCursorPosition(int x, int y, bool queued_warp); private: @@ -176,7 +177,9 @@ struct DrawPixelInfo { union Colour { uint32 data; ///< Conversion of the channel information to a 32 bit number. struct { -#if TTD_ENDIAN == TTD_BIG_ENDIAN +#if defined(__EMSCRIPTEN__) + uint8 r, g, b, a; ///< colour channels as used in browsers +#elif TTD_ENDIAN == TTD_BIG_ENDIAN uint8 a, r, g, b; ///< colour channels in BE order #else uint8 b, g, r, a; ///< colour channels in LE order @@ -191,7 +194,9 @@ union Colour { * @param a The channel for the alpha/transparency. */ Colour(uint8 r, uint8 g, uint8 b, uint8 a = 0xFF) : -#if TTD_ENDIAN == TTD_BIG_ENDIAN +#if defined(__EMSCRIPTEN__) + r(r), g(g), b(b), a(a) +#elif TTD_ENDIAN == TTD_BIG_ENDIAN a(a), r(r), g(g), b(b) #else b(b), g(g), r(r), a(a) @@ -208,7 +213,7 @@ union Colour { } }; -assert_compile(sizeof(Colour) == sizeof(uint32)); +static_assert(sizeof(Colour) == sizeof(uint32)); /** Available font sizes */ diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index d36c8b995a..d14ce22428 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -105,6 +105,7 @@ static void LoadGrfFileIndexed(const char *filename, const SpriteID *index_tbl, do { bool b = LoadNextSprite(start, file_index, sprite_id, container_ver); + (void)b; // Unused without asserts assert(b); sprite_id++; } while (++start <= end); @@ -122,7 +123,7 @@ void CheckExternalFiles() const GraphicsSet *used_set = BaseGraphics::GetUsedSet(); - DEBUG(grf, 1, "Using the %s base graphics set", used_set->name); + DEBUG(grf, 1, "Using the %s base graphics set", used_set->name.c_str()); static const size_t ERROR_MESSAGE_LENGTH = 256; static const size_t MISSING_FILE_MESSAGE_LENGTH = 128; @@ -137,7 +138,7 @@ void CheckExternalFiles() if (used_set->GetNumInvalid() != 0) { /* Not all files were loaded successfully, see which ones */ - add_pos += seprintf(add_pos, last, "Trying to load graphics set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", used_set->name); + add_pos += seprintf(add_pos, last, "Trying to load graphics set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", used_set->name.c_str()); for (uint i = 0; i < GraphicsSet::NUM_FILES; i++) { MD5File::ChecksumResult res = GraphicsSet::CheckMD5(&used_set->files[i], BASESET_DIR); if (res != MD5File::CR_MATCH) add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", used_set->files[i].filename, res == MD5File::CR_MISMATCH ? "corrupt" : "missing", used_set->files[i].missing_warning); @@ -147,9 +148,9 @@ void CheckExternalFiles() const SoundsSet *sounds_set = BaseSounds::GetUsedSet(); if (sounds_set->GetNumInvalid() != 0) { - add_pos += seprintf(add_pos, last, "Trying to load sound set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", sounds_set->name); + add_pos += seprintf(add_pos, last, "Trying to load sound set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", sounds_set->name.c_str()); - assert_compile(SoundsSet::NUM_FILES == 1); + static_assert(SoundsSet::NUM_FILES == 1); /* No need to loop each file, as long as there is only a single * sound file. */ add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", sounds_set->files->filename, SoundsSet::CheckMD5(sounds_set->files, BASESET_DIR) == MD5File::CR_MISMATCH ? "corrupt" : "missing", sounds_set->files->missing_warning); @@ -190,7 +191,6 @@ static void LoadSpriteTables() i++ ); } - // LoadGrfFile("innerhighlight.grf", SPR_INNER_HIGHLIGHT_BASE, i++); LoadGrfFile("cmclient-3.grf", SPR_INNER_HIGHLIGHT_BASE - 4, i++); /* Initialize the unicode to sprite mapping table */ @@ -245,6 +245,28 @@ static void LoadSpriteTables() } +static void RealChangeBlitter(const char *repl_blitter) +{ + const char *cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName(); + if (strcmp(cur_blitter, repl_blitter) == 0) return; + + DEBUG(driver, 1, "Switching blitter from '%s' to '%s'... ", cur_blitter, repl_blitter); + Blitter *new_blitter = BlitterFactory::SelectBlitter(repl_blitter); + if (new_blitter == nullptr) NOT_REACHED(); + DEBUG(driver, 1, "Successfully switched to %s.", repl_blitter); + + if (!VideoDriver::GetInstance()->AfterBlitterChange()) { + /* Failed to switch blitter, let's hope we can return to the old one. */ + if (BlitterFactory::SelectBlitter(cur_blitter) == nullptr || !VideoDriver::GetInstance()->AfterBlitterChange()) usererror("Failed to reinitialize video driver. Specify a fixed blitter in the config"); + } + + /* Clear caches that might have sprites for another blitter. */ + VideoDriver::GetInstance()->ClearSystemSprites(); + ClearFontCache(); + GfxClearSpriteCache(); + ReInitAllWindows(); +} + /** * Check blitter needed by NewGRF config and switch if needed. * @return False when nothing changed, true otherwise. @@ -264,11 +286,13 @@ static bool SwitchNewGRFBlitter() * between multiple 32bpp blitters, which perform differently with 8bpp sprites. */ uint depth_wanted_by_base = BaseGraphics::GetUsedSet()->blitter == BLT_32BPP ? 32 : 8; - uint depth_wanted_by_grf = _support8bpp == S8BPP_NONE ? 32 : 8; + uint depth_wanted_by_grf = _support8bpp != S8BPP_NONE ? 8 : 32; for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND || HasBit(c->flags, GCF_INIT_ONLY)) continue; if (c->palette & GRFP_BLT_32BPP) depth_wanted_by_grf = 32; } + /* We need a 32bpp blitter for font anti-alias. */ + if (HasAntialiasedFonts()) depth_wanted_by_grf = 32; /* Search the best blitter. */ static const struct { @@ -276,13 +300,14 @@ static bool SwitchNewGRFBlitter() uint animation; ///< 0: no support, 1: do support, 2: both uint min_base_depth, max_base_depth, min_grf_depth, max_grf_depth; } replacement_blitters[] = { + { "8bpp-optimized", 2, 8, 8, 8, 8 }, + { "40bpp-anim", 2, 8, 32, 8, 32 }, #ifdef WITH_SSE { "32bpp-sse4", 0, 32, 32, 8, 32 }, { "32bpp-ssse3", 0, 32, 32, 8, 32 }, { "32bpp-sse2", 0, 32, 32, 8, 32 }, { "32bpp-sse4-anim", 1, 32, 32, 8, 32 }, #endif - { "8bpp-optimized", 2, 8, 8, 8, 8 }, { "32bpp-optimized", 0, 8, 32, 8, 32 }, #ifdef WITH_SSE { "32bpp-sse2-anim", 1, 8, 32, 8, 32 }, @@ -293,8 +318,6 @@ static bool SwitchNewGRFBlitter() const bool animation_wanted = HasBit(_display_opt, DO_FULL_ANIMATION); const char *cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName(); - VideoDriver::GetInstance()->AcquireBlitterLock(); - for (uint i = 0; i < lengthof(replacement_blitters); i++) { if (animation_wanted && (replacement_blitters[i].animation == 0)) continue; if (!animation_wanted && (replacement_blitters[i].animation == 1)) continue; @@ -304,25 +327,15 @@ static bool SwitchNewGRFBlitter() const char *repl_blitter = replacement_blitters[i].name; if (strcmp(repl_blitter, cur_blitter) == 0) { - VideoDriver::GetInstance()->ReleaseBlitterLock(); return false; } if (BlitterFactory::GetBlitterFactory(repl_blitter) == nullptr) continue; - DEBUG(misc, 1, "Switching blitter from '%s' to '%s'... ", cur_blitter, repl_blitter); - Blitter *new_blitter = BlitterFactory::SelectBlitter(repl_blitter); - if (new_blitter == nullptr) NOT_REACHED(); - DEBUG(misc, 1, "Successfully switched to %s.", repl_blitter); + /* Inform the video driver we want to switch blitter as soon as possible. */ + VideoDriver::GetInstance()->QueueOnMainThread(std::bind(&RealChangeBlitter, repl_blitter)); break; } - if (!VideoDriver::GetInstance()->AfterBlitterChange()) { - /* Failed to switch blitter, let's hope we can return to the old one. */ - if (BlitterFactory::SelectBlitter(cur_blitter) == nullptr || !VideoDriver::GetInstance()->AfterBlitterChange()) usererror("Failed to reinitialize video driver. Specify a fixed blitter in the config"); - } - - VideoDriver::GetInstance()->ReleaseBlitterLock(); - return true; } @@ -342,6 +355,7 @@ void GfxLoadSprites() DEBUG(sprite, 2, "Loading sprite set %d", _settings_game.game_creation.landscape); SwitchNewGRFBlitter(); + VideoDriver::GetInstance()->ClearSystemSprites(); ClearFontCache(); GfxInitSpriteMem(); LoadSpriteTables(); @@ -358,11 +372,11 @@ bool GraphicsSet::FillSetDetails(IniFile *ini, const char *path, const char *ful IniItem *item; fetch_metadata("palette"); - this->palette = (*item->value == 'D' || *item->value == 'd') ? PAL_DOS : PAL_WINDOWS; + this->palette = ((*item->value)[0] == 'D' || (*item->value)[0] == 'd') ? PAL_DOS : PAL_WINDOWS; /* Get optional blitter information. */ item = metadata->GetItem("blitter", false); - this->blitter = (item != nullptr && *item->value == '3') ? BLT_32BPP : BLT_8BPP; + this->blitter = (item != nullptr && (*item->value)[0] == '3') ? BLT_32BPP : BLT_8BPP; } return ret; } @@ -406,7 +420,7 @@ MD5File::ChecksumResult MD5File::CheckMD5(Subdirectory subdir, size_t max_size) if (f == nullptr) return CR_NO_FILE; - size = min(size, max_size); + size = std::min(size, max_size); Md5 checksum; uint8 buffer[1024]; diff --git a/src/goal.cpp b/src/goal.cpp index 02ec85255f..63fdd45895 100644 --- a/src/goal.cpp +++ b/src/goal.cpp @@ -248,7 +248,7 @@ CommandCost CmdGoalQuestion(TileIndex tile, DoCommandFlag flags, uint32 p1, uint CompanyID company = (CompanyID)GB(p1, 16, 8); ClientID client = (ClientID)GB(p1, 16, 16); - assert_compile(GOAL_QUESTION_BUTTON_COUNT < 29); + static_assert(GOAL_QUESTION_BUTTON_COUNT < 29); uint32 button_mask = GB(p2, 0, GOAL_QUESTION_BUTTON_COUNT); byte type = GB(p2, 29, 2); bool is_client = HasBit(p2, 31); @@ -256,12 +256,16 @@ CommandCost CmdGoalQuestion(TileIndex tile, DoCommandFlag flags, uint32 p1, uint if (_current_company != OWNER_DEITY) return CMD_ERROR; if (StrEmpty(text)) return CMD_ERROR; if (is_client) { - if (NetworkClientInfo::GetByClientID(client) == nullptr) return CMD_ERROR; + /* Only check during pre-flight; the client might have left between + * testing and executing. In that case it is fine to just ignore the + * fact the client is no longer here. */ + if (!(flags & DC_EXEC) && _network_server && NetworkClientInfo::GetByClientID(client) == nullptr) return CMD_ERROR; } else { if (company != INVALID_COMPANY && !Company::IsValidID(company)) return CMD_ERROR; } - if (CountBits(button_mask) < 1 || CountBits(button_mask) > 3) return CMD_ERROR; - if (type >= GOAL_QUESTION_TYPE_COUNT) return CMD_ERROR; + uint min_buttons = (type == GQT_QUESTION ? 1 : 0); + if (CountBits(button_mask) < min_buttons || CountBits(button_mask) > 3) return CMD_ERROR; + if (type >= GQT_END) return CMD_ERROR; if (flags & DC_EXEC) { if (is_client) { diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index 9fad484faf..135f7e493a 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -48,6 +48,8 @@ struct GoalListWindow : public Window { this->vscroll = this->GetScrollbar(WID_GOAL_SCROLLBAR); this->FinishInitNested(window_number); this->owner = (Owner)this->window_number; + NWidgetStacked *wi = this->GetWidget(WID_GOAL_SELECT_BUTTONS); + wi->SetDisplayedPlane(window_number == INVALID_COMPANY ? 1 : 0); this->OnInvalidateData(0); } @@ -65,37 +67,31 @@ struct GoalListWindow : public Window { void OnClick(Point pt, int widget, int click_count) override { - if (widget != WID_GOAL_LIST) return; + switch (widget) { + case WID_GOAL_GLOBAL_BUTTON: + ShowGoalsList(INVALID_COMPANY); + break; - int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GOAL_LIST, WD_FRAMERECT_TOP); - int num = 0; - for (const Goal *s : Goal::Iterate()) { - if (s->company == INVALID_COMPANY) { - y--; - if (y == 0) { - this->HandleClick(s); - return; + case WID_GOAL_COMPANY_BUTTON: + ShowGoalsList(_local_company); + break; + + case WID_GOAL_LIST: { + int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GOAL_LIST, WD_FRAMERECT_TOP); + for (const Goal *s : Goal::Iterate()) { + if (s->company == this->window_number) { + if (y == 0) { + this->HandleClick(s); + return; + } + y--; + } } - num++; + break; } - } - if (num == 0) { - y--; // "None" line. - if (y < 0) return; - } - - y -= 2; // "Company specific goals:" line. - if (y < 0) return; - - for (const Goal *s : Goal::Iterate()) { - if (s->company == this->window_number && s->company != INVALID_COMPANY) { - y--; - if (y == 0) { - this->HandleClick(s); - return; - } - } + default: + break; } } @@ -150,7 +146,7 @@ struct GoalListWindow : public Window { } if (citymania::_fn_mod) { - ShowExtraViewPortWindow(xy); + ShowExtraViewportWindow(xy); } else { ScrollMainWindowToTile(xy); } @@ -163,65 +159,51 @@ struct GoalListWindow : public Window { uint CountLines() { /* Count number of (non) awarded goals. */ - uint num_global = 0; - uint num_company = 0; + uint num = 0; for (const Goal *s : Goal::Iterate()) { - if (s->company == INVALID_COMPANY) { - num_global++; - } else if (s->company == this->window_number) { - num_company++; - } + if (s->company == this->window_number) num++; } /* Count the 'none' lines. */ - if (num_global == 0) num_global = 1; - if (num_company == 0) num_company = 1; + if (num == 0) num = 1; - /* Global, company and an empty line before the accepted ones. */ - return 3 + num_global + num_company; + return num; } void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_GOAL_LIST) return; - Dimension d = maxdim(GetStringBoundingBox(STR_GOALS_GLOBAL_TITLE), GetStringBoundingBox(STR_GOALS_COMPANY_TITLE)); + Dimension d = GetStringBoundingBox(STR_GOALS_NONE); resize->height = d.height; - uint num = 0; - for (const Goal *s : Goal::Iterate()) { - if (s->company == INVALID_COMPANY || s->company == this->window_number) { - num++; - } - } - - d.height *= (5 + num); + d.height *= 5; d.width += padding.width + WD_FRAMERECT_RIGHT + WD_FRAMERECT_LEFT; d.height += padding.height + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; *size = maxdim(*size, d); } /** - * Draws either the global goals or the company goal section. - * This is a helper method for #DrawWidget. - * @param[in,out] pos Vertical line number to draw. - * @param cap Number of lines to draw in the window. - * @param x Left edge of the text line to draw. - * @param y Vertical position of the top edge of the window. - * @param right Right edge of the text line to draw. - * @param global_section Whether the global goals are printed. + * Draws a given column of the goal list. * @param column Which column to draw. + * @param wid Pointer to the goal list widget. + * @param progress_col_width Width of the progress column. + * @return max width of drawn text */ - void DrawPartialGoalList(int &pos, const int cap, int x, int y, int right, uint progress_col_width, bool global_section, GoalColumn column) const + void DrawListColumn(GoalColumn column, NWidgetBase *wid, uint progress_col_width) const { - if (column == GC_GOAL && IsInsideMM(pos, 0, cap)) DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, global_section ? STR_GOALS_GLOBAL_TITLE : STR_GOALS_COMPANY_TITLE); - pos++; - + /* Get column draw area. */ + int y = wid->pos_y + WD_FRAMERECT_TOP; + int x = wid->pos_x + WD_FRAMERECT_LEFT; + int right = x + wid->current_x - WD_FRAMERECT_RIGHT; bool rtl = _current_text_dir == TD_RTL; + int pos = -this->vscroll->GetPosition(); + const int cap = this->vscroll->GetCapacity(); + uint num = 0; for (const Goal *s : Goal::Iterate()) { - if (global_section ? s->company == INVALID_COMPANY : (s->company == this->window_number && s->company != INVALID_COMPANY)) { + if (s->company == this->window_number) { if (IsInsideMM(pos, 0, cap)) { switch (column) { case GC_GOAL: { @@ -250,38 +232,12 @@ struct GoalListWindow : public Window { if (num == 0) { if (column == GC_GOAL && IsInsideMM(pos, 0, cap)) { - StringID str = !global_section && this->window_number == INVALID_COMPANY ? STR_GOALS_SPECTATOR_NONE : STR_GOALS_NONE; - DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, str); + DrawString(x, right, y + pos * FONT_HEIGHT_NORMAL, STR_GOALS_NONE); } pos++; } } - /** - * Draws a given column of the goal list. - * @param column Which column to draw. - * @param wid Pointer to the goal list widget. - * @param progress_col_width Width of the progress column. - * @return max width of drawn text - */ - void DrawListColumn(GoalColumn column, NWidgetBase *wid, uint progress_col_width) const - { - /* Get column draw area. */ - int y = wid->pos_y + WD_FRAMERECT_TOP; - int x = wid->pos_x + WD_FRAMERECT_LEFT; - int right = x + wid->current_x - WD_FRAMERECT_RIGHT; - - int pos = -this->vscroll->GetPosition(); - const int cap = this->vscroll->GetCapacity(); - - /* Draw partial list with global goals. */ - DrawPartialGoalList(pos, cap, x, y, right, progress_col_width, true, column); - - /* Draw partial list with company goals. */ - pos++; - DrawPartialGoalList(pos, cap, x, y, right, progress_col_width, false, column); - } - void OnPaint() override { this->DrawWidgets(); @@ -300,7 +256,7 @@ struct GoalListWindow : public Window { } NWidgetBase *wid = this->GetWidget(WID_GOAL_LIST); - uint progress_col_width = min(max_width, wid->current_x); + uint progress_col_width = std::min(max_width, wid->current_x); /* Draw goal list. */ this->DrawListColumn(GC_PROGRESS, wid, progress_col_width); @@ -322,6 +278,8 @@ struct GoalListWindow : public Window { { if (!gui_scope) return; this->vscroll->SetCount(this->CountLines()); + this->SetWidgetDisabledState(WID_GOAL_COMPANY_BUTTON, _local_company == COMPANY_SPECTATOR); + this->SetWidgetDirty(WID_GOAL_COMPANY_BUTTON); this->SetWidgetDirty(WID_GOAL_LIST); } }; @@ -331,6 +289,10 @@ static const NWidgetPart _nested_goals_list_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), NWidget(WWT_CAPTION, COLOUR_BROWN, WID_GOAL_CAPTION), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GOAL_SELECT_BUTTONS), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GOAL_GLOBAL_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GOALS_GLOBAL_BUTTON, STR_GOALS_GLOBAL_BUTTON_HELPTEXT), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GOAL_COMPANY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GOALS_COMPANY_BUTTON, STR_GOALS_COMPANY_BUTTON_HELPTEXT), + EndContainer(), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), @@ -366,14 +328,13 @@ void ShowGoalsList(CompanyID company) /** Ask a question about a goal. */ struct GoalQuestionWindow : public Window { - char *question; ///< Question to ask (private copy). - int buttons; ///< Number of valid buttons in #button. - int button[3]; ///< Buttons to display. - byte type; ///< Type of question. + char *question; ///< Question to ask (private copy). + int buttons; ///< Number of valid buttons in #button. + int button[3]; ///< Buttons to display. + TextColour colour; ///< Colour of the question text. - GoalQuestionWindow(WindowDesc *desc, WindowNumber window_number, byte type, uint32 button_mask, const char *question) : Window(desc), type(type) + GoalQuestionWindow(WindowDesc *desc, WindowNumber window_number, TextColour colour, uint32 button_mask, const char *question) : Window(desc), colour(colour) { - assert(type < GOAL_QUESTION_TYPE_COUNT); this->question = stredup(question); /* Figure out which buttons we have to enable. */ @@ -385,10 +346,16 @@ struct GoalQuestionWindow : public Window { if (n == 3) break; } this->buttons = n; - assert(this->buttons > 0 && this->buttons < 4); + assert(this->buttons < 4); this->CreateNestedTree(); - this->GetWidget(WID_GQ_BUTTONS)->SetDisplayedPlane(this->buttons - 1); + if (this->buttons == 0) { + this->GetWidget(WID_GQ_BUTTONS)->SetDisplayedPlane(SZSP_HORIZONTAL); + this->GetWidget(WID_GQ_BUTTON_SPACER)->SetDisplayedPlane(SZSP_HORIZONTAL); + } else { + this->GetWidget(WID_GQ_BUTTONS)->SetDisplayedPlane(this->buttons - 1); + this->GetWidget(WID_GQ_BUTTON_SPACER)->SetDisplayedPlane(0); + } this->FinishInitNested(window_number); } @@ -400,10 +367,6 @@ struct GoalQuestionWindow : public Window { void SetStringParameters(int widget) const override { switch (widget) { - case WID_GQ_CAPTION: - SetDParam(0, STR_GOAL_QUESTION_CAPTION_QUESTION + this->type); - break; - case WID_GQ_BUTTON_1: SetDParam(0, STR_GOAL_QUESTION_BUTTON_CANCEL + this->button[0]); break; @@ -451,15 +414,15 @@ struct GoalQuestionWindow : public Window { if (widget != WID_GQ_QUESTION) return; SetDParamStr(0, this->question); - DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_JUST_RAW_STRING, TC_BLACK, SA_TOP | SA_HOR_CENTER); + DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_JUST_RAW_STRING, this->colour, SA_TOP | SA_HOR_CENTER); } }; /** Widgets of the goal question window. */ -static const NWidgetPart _nested_goal_question_widgets[] = { +static const NWidgetPart _nested_goal_question_widgets_question[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_LIGHT_BLUE), - NWidget(WWT_CAPTION, COLOUR_LIGHT_BLUE, WID_GQ_CAPTION), SetDataTip(STR_WHITE_STRING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_LIGHT_BLUE, WID_GQ_CAPTION), SetDataTip(STR_GOAL_QUESTION_CAPTION_QUESTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), EndContainer(), NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GQ_QUESTION), SetMinimalSize(300, 0), SetPadding(8, 8, 8, 8), SetFill(1, 0), @@ -477,16 +440,119 @@ static const NWidgetPart _nested_goal_question_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_3), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), EndContainer(), EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 8), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTON_SPACER), + NWidget(NWID_SPACER), SetMinimalSize(0, 8), + EndContainer(), EndContainer(), }; -static WindowDesc _goal_question_list_desc( - WDP_CENTER, nullptr, 0, 0, - WC_GOAL_QUESTION, WC_NONE, - WDF_CONSTRUCTION, - _nested_goal_question_widgets, lengthof(_nested_goal_question_widgets) -); +static const NWidgetPart _nested_goal_question_widgets_info[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_LIGHT_BLUE), + NWidget(WWT_CAPTION, COLOUR_LIGHT_BLUE, WID_GQ_CAPTION), SetDataTip(STR_GOAL_QUESTION_CAPTION_INFORMATION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE), + NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GQ_QUESTION), SetMinimalSize(300, 0), SetPadding(8, 8, 8, 8), SetFill(1, 0), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTONS), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(85, 10, 85), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(65, 10, 65), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(25, 10, 25), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_GQ_BUTTON_3), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + EndContainer(), + EndContainer(), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTON_SPACER), + NWidget(NWID_SPACER), SetMinimalSize(0, 8), + EndContainer(), + EndContainer(), +}; + +static const NWidgetPart _nested_goal_question_widgets_warning[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_YELLOW), + NWidget(WWT_CAPTION, COLOUR_YELLOW, WID_GQ_CAPTION), SetDataTip(STR_GOAL_QUESTION_CAPTION_WARNING, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_YELLOW), + NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GQ_QUESTION), SetMinimalSize(300, 0), SetPadding(8, 8, 8, 8), SetFill(1, 0), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTONS), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(85, 10, 85), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(65, 10, 65), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(25, 10, 25), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_3), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + EndContainer(), + EndContainer(), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTON_SPACER), + NWidget(NWID_SPACER), SetMinimalSize(0, 8), + EndContainer(), + EndContainer(), +}; + +static const NWidgetPart _nested_goal_question_widgets_error[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_RED), + NWidget(WWT_CAPTION, COLOUR_RED, WID_GQ_CAPTION), SetDataTip(STR_GOAL_QUESTION_CAPTION_ERROR, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_RED), + NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GQ_QUESTION), SetMinimalSize(300, 0), SetPadding(8, 8, 8, 8), SetFill(1, 0), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTONS), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(85, 10, 85), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(65, 10, 65), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(25, 10, 25), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_1), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_2), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GQ_BUTTON_3), SetDataTip(STR_BLACK_STRING, STR_NULL), SetFill(1, 0), + EndContainer(), + EndContainer(), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GQ_BUTTON_SPACER), + NWidget(NWID_SPACER), SetMinimalSize(0, 8), + EndContainer(), + EndContainer(), +}; + +static WindowDesc _goal_question_list_desc[] = { + { + WDP_CENTER, nullptr, 0, 0, + WC_GOAL_QUESTION, WC_NONE, + WDF_CONSTRUCTION, + _nested_goal_question_widgets_question, lengthof(_nested_goal_question_widgets_question), + }, + { + WDP_CENTER, nullptr, 0, 0, + WC_GOAL_QUESTION, WC_NONE, + WDF_CONSTRUCTION, + _nested_goal_question_widgets_info, lengthof(_nested_goal_question_widgets_info), + }, + { + WDP_CENTER, nullptr, 0, 0, + WC_GOAL_QUESTION, WC_NONE, + WDF_CONSTRUCTION, + _nested_goal_question_widgets_warning, lengthof(_nested_goal_question_widgets_warning), + }, + { + WDP_CENTER, nullptr, 0, 0, + WC_GOAL_QUESTION, WC_NONE, + WDF_CONSTRUCTION, + _nested_goal_question_widgets_error, lengthof(_nested_goal_question_widgets_error), + }, +}; /** * Display a goal question. @@ -497,5 +563,6 @@ static WindowDesc _goal_question_list_desc( */ void ShowGoalQuestion(uint16 id, byte type, uint32 button_mask, const char *question) { - new GoalQuestionWindow(&_goal_question_list_desc, id, type, button_mask, question); + assert(type < GQT_END); + new GoalQuestionWindow(&_goal_question_list_desc[type], id, type == 3 ? TC_WHITE : TC_BLACK, button_mask, question); } diff --git a/src/goal_type.h b/src/goal_type.h index b422e14d99..5bbd8c258c 100644 --- a/src/goal_type.h +++ b/src/goal_type.h @@ -13,7 +13,14 @@ #include "core/enum_type.hpp" static const uint32 GOAL_QUESTION_BUTTON_COUNT = 18; ///< Amount of buttons available. -static const byte GOAL_QUESTION_TYPE_COUNT = 4; ///< Amount of question types. + +enum GoalQuestionType : byte { + GQT_QUESTION = 0, + GQT_INFORMATION = 1, + GQT_WARNING = 2, + GQT_ERROR = 3, + GQT_END = 4, +}; /** Types of goal destinations */ enum GoalType : byte { diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index d6be0fdce7..a4d0bfa219 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -21,6 +21,7 @@ #include "sortlist_type.h" #include "core/geometry_func.hpp" #include "currency.h" +#include "zoom_func.h" #include "widgets/graph_widget.h" @@ -38,6 +39,14 @@ static CargoTypes _legend_excluded_cargo; static const OverflowSafeInt64 INVALID_DATAPOINT(INT64_MAX); // Value used for a datapoint that shouldn't be drawn. static const uint INVALID_DATAPOINT_POS = UINT_MAX; // Used to determine if the previous point was drawn. +static const Colours WINDOW_BG1 = COLOUR_BROWN; +static const Colours WINDOW_BG2 = COLOUR_GREY; + +template +T ChooseGraphColour(T a, T b) { + return _settings_client.gui.cm_graph_background ? b : a; +} + /****************/ /* GRAPH LEGEND */ /****************/ @@ -110,10 +119,10 @@ struct GraphLegendWindow : Window { static NWidgetBase *MakeNWidgetCompanyLines(int *biggest_index) { NWidgetVertical *vert = new NWidgetVertical(); - uint line_height = max(GetSpriteSize(SPR_COMPANY_ICON).height, FONT_HEIGHT_NORMAL) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; + uint line_height = std::max(GetSpriteSize(SPR_COMPANY_ICON).height, FONT_HEIGHT_NORMAL) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; for (int widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) { - NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum); + NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, ChooseGraphColour(WINDOW_BG1, WINDOW_BG2), widnum); panel->SetMinimalSize(246, line_height); panel->SetFill(1, 0); panel->SetDataTip(0x0, STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP); @@ -123,14 +132,14 @@ static NWidgetBase *MakeNWidgetCompanyLines(int *biggest_index) return vert; } -static const NWidgetPart _nested_graph_legend_widgets[] = { +static const NWidgetPart _nested_graph_legend_widgets1[] = { NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_GRAPH_KEY_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_SHADEBOX, COLOUR_GREY), - NWidget(WWT_STICKYBOX, COLOUR_GREY), + NWidget(WWT_CLOSEBOX, WINDOW_BG1), + NWidget(WWT_CAPTION, WINDOW_BG1), SetDataTip(STR_GRAPH_KEY_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, WINDOW_BG1), + NWidget(WWT_STICKYBOX, WINDOW_BG1), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_BACKGROUND), + NWidget(WWT_PANEL, WINDOW_BG1, WID_GL_BACKGROUND), NWidget(NWID_SPACER), SetMinimalSize(0, 2), NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetMinimalSize(2, 0), @@ -140,16 +149,40 @@ static const NWidgetPart _nested_graph_legend_widgets[] = { EndContainer(), }; -static WindowDesc _graph_legend_desc( +static const NWidgetPart _nested_graph_legend_widgets2[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, WINDOW_BG2), + NWidget(WWT_CAPTION, WINDOW_BG2), SetDataTip(STR_GRAPH_KEY_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, WINDOW_BG2), + NWidget(WWT_STICKYBOX, WINDOW_BG2), + EndContainer(), + NWidget(WWT_PANEL, WINDOW_BG2, WID_GL_BACKGROUND), + NWidget(NWID_SPACER), SetMinimalSize(0, 2), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetMinimalSize(2, 0), + NWidgetFunction(MakeNWidgetCompanyLines), + NWidget(NWID_SPACER), SetMinimalSize(2, 0), + EndContainer(), + EndContainer(), +}; + +static WindowDesc _graph_legend_desc1( WDP_AUTO, "graph_legend", 0, 0, WC_GRAPH_LEGEND, WC_NONE, 0, - _nested_graph_legend_widgets, lengthof(_nested_graph_legend_widgets) + _nested_graph_legend_widgets1, lengthof(_nested_graph_legend_widgets1) +); + +static WindowDesc _graph_legend_desc2( + WDP_AUTO, "graph_legend", 0, 0, + WC_GRAPH_LEGEND, WC_NONE, + 0, + _nested_graph_legend_widgets2, lengthof(_nested_graph_legend_widgets2) ); static void ShowGraphLegend() { - AllocateWindowDescFront(&_graph_legend_desc, 0); + AllocateWindowDescFront(ChooseGraphColour(&_graph_legend_desc1, &_graph_legend_desc2), 0); } /** Contains the interval of a graph's data. */ @@ -162,20 +195,26 @@ struct ValuesInterval { /* BASE OF GRAPHS */ /*****************/ +#define GRAPH_BASE_COLOUR (ChooseGraphColour(GREY_SCALE(2), GREY_SCALE(8))) +#define GRAPH_GRID_COLOUR (ChooseGraphColour(GREY_SCALE(3), _colour_gradient[COLOUR_GREY][4])) +#define GRAPH_AXIS_LINE_COLOUR (ChooseGraphColour(GREY_SCALE(3), GREY_SCALE(2))) +#define GRAPH_ZERO_LINE_COLOUR (ChooseGraphColour(GREY_SCALE(8), GREY_SCALE(2))) +#define GRAPH_YEAR_LINE_COLOUR (ChooseGraphColour(GREY_SCALE(5), GREY_SCALE(7))) +#define GRAPH_AXIS_LABEL_COLOUR (ChooseGraphColour((TextColour)((uint)TC_IS_PALETTE_COLOUR | 0xC), TC_BLACK)) +#define GRAPH_OUTLINE_COLOUR (ChooseGraphColour(PC_GREY, GREY_SCALE(6))) + struct BaseGraphWindow : Window { protected: static const int GRAPH_MAX_DATASETS = 64; - static const int GRAPH_AXIS_LINE_COLOUR = PC_BLACK; static const int GRAPH_NUM_MONTHS = 24; ///< Number of months displayed in the graph. static const int MIN_GRAPH_NUM_LINES_Y = 9; ///< Minimal number of horizontal lines to draw. - static const int MIN_GRID_PIXEL_SIZE = 20; ///< Minimum distance between graph lines. + static const int MIN_GRID_PIXEL_SIZE = 10; ///< Minimum distance between graph lines. uint64 excluded_data; ///< bitmask of the datasets that shouldn't be displayed. byte num_dataset; byte num_on_x_axis; byte num_vert_lines; - static const TextColour graph_axis_label_colour = TC_BLACK; ///< colour of the graph axis label. /* The starting month and year that values are plotted against. If month is * 0xFF, use x_values_start and x_values_increment below instead. */ @@ -212,8 +251,8 @@ protected: OverflowSafeInt64 datapoint = this->cost[i][j]; if (datapoint != INVALID_DATAPOINT) { - current_interval.highest = max(current_interval.highest, datapoint); - current_interval.lowest = min(current_interval.lowest, datapoint); + current_interval.highest = std::max(current_interval.highest, datapoint); + current_interval.lowest = std::min(current_interval.lowest, datapoint); } } } @@ -240,7 +279,7 @@ protected: /* Get the required grid size for each side and use the maximum one. */ int64 grid_size_higher = (abs_higher > 0) ? ((int64)abs_higher + num_pos_grids - 1) / num_pos_grids : 0; int64 grid_size_lower = (abs_lower > 0) ? ((int64)abs_lower + num_hori_lines - num_pos_grids - 1) / (num_hori_lines - num_pos_grids) : 0; - grid_size = max(grid_size_higher, grid_size_lower); + grid_size = std::max(grid_size_higher, grid_size_lower); } else { /* If both values are zero, show an empty graph. */ num_pos_grids = num_hori_lines / 2; @@ -289,22 +328,27 @@ protected: /* the colours and cost array of GraphDrawer must accommodate * both values for cargo and companies. So if any are higher, quit */ - assert_compile(GRAPH_MAX_DATASETS >= (int)NUM_CARGO && GRAPH_MAX_DATASETS >= (int)MAX_COMPANIES); + static_assert(GRAPH_MAX_DATASETS >= (int)NUM_CARGO && GRAPH_MAX_DATASETS >= (int)MAX_COMPANIES); assert(this->num_vert_lines > 0); - byte grid_colour = _colour_gradient[COLOUR_GREY][4]; + r.top += ScaleGUITrad(2); + r.left += ScaleGUITrad(2); + r.bottom -= ScaleGUITrad(2); + + GfxFillRect(r.left, r.top, r.right, r.bottom, GRAPH_BASE_COLOUR); /* Rect r will be adjusted to contain just the graph, with labels being * placed outside the area. */ - r.top += 5 + GetCharacterHeight(FS_SMALL) / 2; - r.bottom -= (this->month == 0xFF ? 1 : 3) * GetCharacterHeight(FS_SMALL) + 4; - r.left += 9; - r.right -= 5; + r.top += ScaleGUITrad(5) + GetCharacterHeight(FS_SMALL) / 2; + r.bottom -= (this->month == 0xFF ? 1 : 2) * GetCharacterHeight(FS_SMALL) + ScaleGUITrad(4); + r.left += ScaleGUITrad(9); + r.right -= ScaleGUITrad(5); + int grid_size_y = std::max(ScaleGUITrad(MIN_GRID_PIXEL_SIZE), FONT_HEIGHT_NORMAL + ScaleGUITrad(WD_PAR_VSEP_NORMAL)); /* Initial number of horizontal lines. */ - int num_hori_lines = 160 / MIN_GRID_PIXEL_SIZE; + int num_hori_lines = ScaleGUITrad(160) / grid_size_y; /* For the rest of the height, the number of horizontal lines will increase more slowly. */ - int resize = (r.bottom - r.top - 160) / (2 * MIN_GRID_PIXEL_SIZE); + int resize = (r.bottom - r.top - ScaleGUITrad(160)) / (2 * grid_size_y); if (resize > 0) num_hori_lines += resize; interval = GetValuesInterval(num_hori_lines); @@ -325,31 +369,37 @@ protected: /* Where to draw the X axis. Use floating point to avoid overflowing and results of zero. */ x_axis_offset = (int)((r.bottom - r.top) * (double)interval.highest / (double)interval_size); + /* Draw the background of the graph itself. */ + GfxFillRect(r.left, r.top, r.right, r.bottom, GRAPH_BASE_COLOUR); + // GfxFillRect(r.left, r.top, r.right, r.bottom, GRAPH_BASE_COLOUR); + /* Draw the vertical grid lines. */ - /* Don't draw the first line, as that's where the axis will be. */ - x = r.left + x_sep; + // CityMania don't draw for less clutter + // /* Don't draw the first line, as that's where the axis will be. */ + // x = r.left + x_sep; - for (int i = 0; i < this->num_vert_lines; i++) { - GfxFillRect(x, r.top, x, r.bottom, grid_colour); - x += x_sep; - } + // for (int i = 0; i < this->num_vert_lines; i++) { + // GfxFillRect(x, r.top, x, r.bottom, GRAPH_GRID_COLOUR); + // x += x_sep; + // } /* Draw the horizontal grid lines. */ y = r.bottom; + uint line_rect_sub = (ScaleGUITrad(1) - 1) / 2; + uint line_rect_add = ScaleGUITrad(1) / 2; for (int i = 0; i < (num_hori_lines + 1); i++) { - GfxFillRect(r.left - 3, y, r.left - 1, y, GRAPH_AXIS_LINE_COLOUR); - GfxFillRect(r.left, y, r.right, y, grid_colour); + GfxFillRect(r.left - (i && i != num_hori_lines ? ScaleGUITrad(3) : 0), y - line_rect_sub, r.right, y + line_rect_add, GRAPH_GRID_COLOUR); y -= y_sep; } /* Draw the y axis. */ - GfxFillRect(r.left, r.top, r.left, r.bottom, GRAPH_AXIS_LINE_COLOUR); + GfxFillRect(r.left - line_rect_sub, r.top, r.left + line_rect_add, r.bottom, GRAPH_AXIS_LINE_COLOUR); /* Draw the x axis. */ y = x_axis_offset + r.top; - GfxFillRect(r.left, y, r.right, y, GRAPH_AXIS_LINE_COLOUR); + GfxFillRect(r.left, y - line_rect_sub, r.right, y + line_rect_add, GRAPH_ZERO_LINE_COLOUR); /* Find the largest value that will be drawn. */ if (this->num_on_x_axis == 0) return; @@ -363,16 +413,16 @@ protected: y = r.top - GetCharacterHeight(FS_SMALL) / 2; - for (int i = 0; i < (num_hori_lines + 1); i++) { + for (int i = 0; i < num_hori_lines; i++) { SetDParam(0, this->format_str_y_axis); SetDParam(1, y_label); - DrawString(r.left - label_width - 4, r.left - 4, y, STR_GRAPH_Y_LABEL, graph_axis_label_colour, SA_RIGHT); + if (i) DrawString(r.left - label_width - ScaleGUITrad(4), r.left - ScaleGUITrad(4), y, STR_GRAPH_Y_LABEL, GRAPH_AXIS_LABEL_COLOUR, SA_RIGHT); y_label -= y_label_separation; y += y_sep; } - /* draw strings on the x axis */ + /* Draw x-axis labels and markings for graphs based on financial quarters and years. */ if (this->month != 0xFF) { x = r.left; y = r.bottom + 2; @@ -380,26 +430,28 @@ protected: Year year = this->year; for (int i = 0; i < this->num_on_x_axis; i++) { SetDParam(0, month + STR_MONTH_ABBREV_JAN); - SetDParam(1, month + STR_MONTH_ABBREV_JAN + 2); - SetDParam(2, year); - DrawStringMultiLine(x, x + x_sep, y, this->height, month == 0 ? STR_GRAPH_X_LABEL_MONTH_YEAR : STR_GRAPH_X_LABEL_MONTH, graph_axis_label_colour); + SetDParam(1, year); + if (i) DrawStringMultiLine(x - x_sep / 2, x + x_sep / 2, y + ScaleGUITrad(4), this->height, month == 6 ? STR_GRAPH_X_LABEL_MONTH_YEAR : STR_GRAPH_X_LABEL_MONTH, GRAPH_AXIS_LABEL_COLOUR, SA_HOR_CENTER); month += 3; if (month >= 12) { month = 0; year++; + + /* Draw a lighter grid line between years. Top and bottom adjustments ensure we don't draw over top and bottom horizontal grid lines. */ + GfxFillRect(x + x_sep - line_rect_sub, r.top + 1, x + x_sep + line_rect_add, r.bottom - 1, GRAPH_YEAR_LINE_COLOUR); } x += x_sep; } } else { - /* Draw the label under the data point rather than on the grid line. */ + /* Draw x-axis labels for graphs not based on quarterly performance (cargo payment rates). */ x = r.left; y = r.bottom + 2; uint16 label = this->x_values_start; for (int i = 0; i < this->num_on_x_axis; i++) { SetDParam(0, label); - DrawString(x + 1, x + x_sep - 1, y, STR_GRAPH_Y_LABEL_NUMBER, graph_axis_label_colour, SA_HOR_CENTER); + DrawString(x + 1, x + x_sep - 1, y, STR_GRAPH_Y_LABEL_NUMBER, GRAPH_AXIS_LABEL_COLOUR, SA_HOR_CENTER); label += this->x_values_increment; x += x_sep; @@ -415,7 +467,11 @@ protected: /* Centre the dot between the grid lines. */ x = r.left + (x_sep / 2); - byte colour = this->colours[i]; + Colour c = _cur_palette.palette[this->colours[i]]; + uint sq1000_brightness = c.r * c.r * 299 + c.g * c.g * 587 + c.b * c.b * 114; + if (_settings_client.gui.cm_graph_background == 0 && sq1000_brightness > 64 * 64 * 1000) continue; + if (_settings_client.gui.cm_graph_background == 1 && sq1000_brightness < 192 * 64 * 1000) continue; + uint prev_x = INVALID_DATAPOINT_POS; uint prev_y = INVALID_DATAPOINT_POS; @@ -424,7 +480,7 @@ protected: if (datapoint != INVALID_DATAPOINT) { int mult_range = FindLastBit(x_axis_offset) + FindLastBit(abs(datapoint)); - int reduce_range = max(mult_range - 31, 0); + int reduce_range = std::max(mult_range - 31, 0); if (datapoint < 0) { datapoint = -(abs(datapoint) >> reduce_range); @@ -434,10 +490,10 @@ protected: y = r.top + x_axis_offset - ((r.bottom - r.top) * datapoint) / (interval_size >> reduce_range); /* Draw the point. */ - GfxFillRect(x - pointoffs1 - 1, y - pointoffs1 - 1, x + pointoffs2 + 1, y + pointoffs2 + 1, PC_DARK_GREY); + GfxFillRect(x - pointoffs1 - 1, y - pointoffs1 - 1, x + pointoffs2 + 1, y + pointoffs2 + 1, GRAPH_OUTLINE_COLOUR); /* Draw the line connected to the previous point. */ - if (prev_x != INVALID_DATAPOINT_POS) GfxDrawLine(prev_x, prev_y, x, y, PC_DARK_GREY, linewidth + 2); + if (prev_x != INVALID_DATAPOINT_POS) GfxDrawLine(prev_x, prev_y, x, y, GRAPH_OUTLINE_COLOUR, linewidth + 2); prev_x = x; prev_y = y; @@ -475,7 +531,7 @@ protected: * least significant bits are removed. */ int mult_range = FindLastBit(x_axis_offset) + FindLastBit(abs(datapoint)); - int reduce_range = max(mult_range - 31, 0); + int reduce_range = std::max(mult_range - 31, 0); /* Handle negative values differently (don't shift sign) */ if (datapoint < 0) { @@ -529,14 +585,14 @@ public: uint x_label_width = 0; + /* Draw x-axis labels and markings for graphs based on financial quarters and years. */ if (this->month != 0xFF) { byte month = this->month; Year year = this->year; for (int i = 0; i < this->num_on_x_axis; i++) { SetDParam(0, month + STR_MONTH_ABBREV_JAN); - SetDParam(1, month + STR_MONTH_ABBREV_JAN + 2); - SetDParam(2, year); - x_label_width = max(x_label_width, GetStringBoundingBox(month == 0 ? STR_GRAPH_X_LABEL_MONTH_YEAR : STR_GRAPH_X_LABEL_MONTH).width); + SetDParam(1, year); + x_label_width = std::max(x_label_width, GetStringBoundingBox(month == 0 ? STR_GRAPH_X_LABEL_MONTH_YEAR : STR_GRAPH_X_LABEL_MONTH).width); month += 3; if (month >= 12) { @@ -545,7 +601,7 @@ public: } } } else { - /* Draw the label under the data point rather than on the grid line. */ + /* Draw x-axis labels for graphs not based on quarterly performance (cargo payment rates). */ SetDParamMaxValue(0, this->x_values_start + this->num_on_x_axis * this->x_values_increment, 0, FS_SMALL); x_label_width = GetStringBoundingBox(STR_GRAPH_Y_LABEL_NUMBER).width; } @@ -554,9 +610,9 @@ public: SetDParam(1, INT64_MAX); uint y_label_width = GetStringBoundingBox(STR_GRAPH_Y_LABEL).width; - size->width = max(size->width, 5 + y_label_width + this->num_on_x_axis * (x_label_width + 5) + 9); - size->height = max(size->height, 5 + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->month != 0xFF ? 3 : 1)) * FONT_HEIGHT_SMALL + 4); - size->height = max(size->height, size->width / 3); + size->width = std::max(size->width, ScaleGUITrad(7) + y_label_width + this->num_on_x_axis * (x_label_width + ScaleGUITrad(5)) + ScaleGUITrad(9)); + size->height = std::max(size->height, ScaleGUITrad(8) + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->month != 0xFF ? 3 : 1)) * FONT_HEIGHT_SMALL + ScaleGUITrad(4)); + size->height = std::max(size->height, size->width / 3); } void DrawWidget(const Rect &r, int widget) const override @@ -608,7 +664,7 @@ public: byte nums = 0; for (const Company *c : Company::Iterate()) { - nums = min(this->num_vert_lines, max(nums, c->num_valid_stat_ent)); + nums = std::min(this->num_vert_lines, std::max(nums, c->num_valid_stat_ent)); } int mo = (_cur_month / 3 - nums) * 3; @@ -673,11 +729,11 @@ struct ExcludingCargoBaseGraphWindow : BaseGraphWindow { max_cargo_dim = maxdim(max_cargo_dim, GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO)); } - this->icon_size = max(max_cargo_dim.height, 6); + this->icon_size = std::max(max_cargo_dim.height, 6); this->line_height = this->icon_size + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; size->width = (max_cargo_dim.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT + 1 + (this->show_cargo_colors ? this->icon_size + WD_PAR_VSEP_NORMAL : 0)); - size->height = max(size->height, this->line_height * _sorted_standard_cargo_specs_size); + size->height = std::max(size->height, this->line_height * _sorted_standard_cargo_specs_size); resize->width = 0; resize->height = this->line_height; fill->width = 0; @@ -707,7 +763,7 @@ struct ExcludingCargoBaseGraphWindow : BaseGraphWindow { bool lowered = !HasBit(_legend_excluded_cargo, cs->Index()); /* Redraw box if lowered */ - if (lowered) DrawFrameRect(r.left, y, r.right, y + this->line_height - 1, COLOUR_ORANGE, lowered ? FR_LOWERED : FR_NONE); + if (lowered) DrawFrameRect(r.left, y, r.right, y + this->line_height - 1, ChooseGraphColour(WINDOW_BG1, WINDOW_BG2), lowered ? FR_LOWERED : FR_NONE); byte clk_dif = lowered ? 1 : 0; @@ -817,37 +873,63 @@ struct OperatingProfitGraphWindow : BaseGraphWindow { } }; -static const NWidgetPart _nested_operating_profit_widgets[] = { +static const NWidgetPart _nested_operating_profit_widgets1[] = { NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_GRAPH_OPERATING_PROFIT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), - NWidget(WWT_SHADEBOX, COLOUR_GREY), - NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), - NWidget(WWT_STICKYBOX, COLOUR_GREY), + NWidget(WWT_CLOSEBOX, WINDOW_BG1), + NWidget(WWT_CAPTION, WINDOW_BG1), SetDataTip(STR_GRAPH_OPERATING_PROFIT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_SHADEBOX, WINDOW_BG1), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG1), + NWidget(WWT_STICKYBOX, WINDOW_BG1), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_CV_BACKGROUND), + NWidget(WWT_PANEL, WINDOW_BG1, WID_CV_BACKGROUND), NWidget(NWID_HORIZONTAL), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_CV_GRAPH), SetMinimalSize(576, 160), SetFill(1, 1), SetResize(1, 1), + NWidget(WWT_EMPTY, WINDOW_BG1, WID_CV_GRAPH), SetMinimalSize(576, 160), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetFill(0, 1), SetResize(0, 1), - NWidget(WWT_RESIZEBOX, COLOUR_GREY, WID_CV_RESIZE), + NWidget(WWT_RESIZEBOX, WINDOW_BG1, WID_CV_RESIZE), EndContainer(), EndContainer(), EndContainer(), }; -static WindowDesc _operating_profit_desc( +static const NWidgetPart _nested_operating_profit_widgets2[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, WINDOW_BG2), + NWidget(WWT_CAPTION, WINDOW_BG2), SetDataTip(STR_GRAPH_OPERATING_PROFIT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_SHADEBOX, WINDOW_BG2), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG2), + NWidget(WWT_STICKYBOX, WINDOW_BG2), + EndContainer(), + NWidget(WWT_PANEL, WINDOW_BG2, WID_CV_BACKGROUND), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_EMPTY, WINDOW_BG2, WID_CV_GRAPH), SetMinimalSize(576, 160), SetFill(1, 1), SetResize(1, 1), + NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetFill(0, 1), SetResize(0, 1), + NWidget(WWT_RESIZEBOX, WINDOW_BG2, WID_CV_RESIZE), + EndContainer(), + EndContainer(), + EndContainer(), +}; + +static WindowDesc _operating_profit_desc1( WDP_AUTO, "graph_operating_profit", 0, 0, WC_OPERATING_PROFIT, WC_NONE, 0, - _nested_operating_profit_widgets, lengthof(_nested_operating_profit_widgets) + _nested_operating_profit_widgets1, lengthof(_nested_operating_profit_widgets1) ); +static WindowDesc _operating_profit_desc2( + WDP_AUTO, "graph_operating_profit", 0, 0, + WC_OPERATING_PROFIT, WC_NONE, + 0, + _nested_operating_profit_widgets2, lengthof(_nested_operating_profit_widgets2) +); void ShowOperatingProfitGraph() { - AllocateWindowDescFront(&_operating_profit_desc, 0); + AllocateWindowDescFront(ChooseGraphColour(&_operating_profit_desc1, &_operating_profit_desc2), 0); } @@ -882,26 +964,26 @@ struct IncomeGraphWindow : ExcludingCargoBaseGraphWindow { } }; -static const NWidgetPart _nested_income_graph_widgets[] = { +static const NWidgetPart _nested_income_graph_widgets1[] = { NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_GRAPH_INCOME_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_CPR_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), - NWidget(WWT_SHADEBOX, COLOUR_GREY), - NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), - NWidget(WWT_STICKYBOX, COLOUR_GREY), + NWidget(WWT_CLOSEBOX, WINDOW_BG1), + NWidget(WWT_CAPTION, WINDOW_BG1), SetDataTip(STR_GRAPH_INCOME_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_CPR_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_SHADEBOX, WINDOW_BG1), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG1), + NWidget(WWT_STICKYBOX, WINDOW_BG1), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_CPR_BACKGROUND), + NWidget(WWT_PANEL, WINDOW_BG1, WID_CPR_BACKGROUND), NWidget(NWID_HORIZONTAL), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_CPR_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1), + NWidget(WWT_EMPTY, WINDOW_BG1, WID_CPR_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetMinimalSize(0, 4), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0), NWidget(NWID_SPACER), SetMinimalSize(0, 4), NWidget(NWID_HORIZONTAL), - NWidget(WWT_MATRIX, COLOUR_ORANGE, WID_CPR_MATRIX), SetFill(0, 2), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR), - NWidget(NWID_VSCROLLBAR, COLOUR_ORANGE, WID_CPR_MATRIX_SCROLLBAR), + NWidget(WWT_MATRIX, WINDOW_BG1, WID_CPR_MATRIX), SetFill(0, 2), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, WINDOW_BG1, WID_CPR_MATRIX_SCROLLBAR), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 4), EndContainer(), @@ -909,23 +991,64 @@ static const NWidgetPart _nested_income_graph_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetMinimalSize(WD_RESIZEBOX_WIDTH, 0), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CPR_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL, STR_NULL), + NWidget(WWT_TEXT, WINDOW_BG1, WID_CPR_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL, STR_NULL), NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_RESIZEBOX, COLOUR_GREY, WID_CPR_RESIZE), + NWidget(WWT_RESIZEBOX, WINDOW_BG1, WID_CPR_RESIZE), EndContainer(), EndContainer(), }; -static WindowDesc _income_graph_desc( +static const NWidgetPart _nested_income_graph_widgets2[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, WINDOW_BG2), + NWidget(WWT_CAPTION, WINDOW_BG2), SetDataTip(STR_GRAPH_INCOME_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_CPR_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_SHADEBOX, WINDOW_BG2), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG2), + NWidget(WWT_STICKYBOX, WINDOW_BG2), + EndContainer(), + NWidget(WWT_PANEL, WINDOW_BG2, WID_CPR_BACKGROUND), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_EMPTY, WINDOW_BG2, WID_CPR_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1), + NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetMinimalSize(0, 4), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0), + NWidget(NWID_SPACER), SetMinimalSize(0, 4), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_MATRIX, WINDOW_BG2, WID_CPR_MATRIX), SetFill(0, 2), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, WINDOW_BG2, WID_CPR_MATRIX_SCROLLBAR), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(0, 4), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(0, 1), SetResize(0, 1), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetMinimalSize(WD_RESIZEBOX_WIDTH, 0), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_TEXT, WINDOW_BG2, WID_CPR_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL, STR_NULL), + NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_RESIZEBOX, WINDOW_BG2, WID_CPR_RESIZE), + EndContainer(), + EndContainer(), +}; + +static WindowDesc _income_graph_desc1( WDP_AUTO, "graph_income", 0, 0, WC_INCOME_GRAPH, WC_NONE, 0, - _nested_income_graph_widgets, lengthof(_nested_income_graph_widgets) + _nested_income_graph_widgets1, lengthof(_nested_income_graph_widgets1) +); + +static WindowDesc _income_graph_desc2( + WDP_AUTO, "graph_income", 0, 0, + WC_INCOME_GRAPH, WC_NONE, + 0, + _nested_income_graph_widgets2, lengthof(_nested_income_graph_widgets2) ); void ShowIncomeGraph() { - AllocateWindowDescFront(&_income_graph_desc, 0); + AllocateWindowDescFront(ChooseGraphColour(&_income_graph_desc1, &_income_graph_desc2), 0); } /*******************/ @@ -959,26 +1082,26 @@ struct DeliveredCargoGraphWindow : ExcludingCargoBaseGraphWindow { } }; -static const NWidgetPart _nested_delivered_cargo_graph_widgets[] = { +static const NWidgetPart _nested_delivered_cargo_graph_widgets1[] = { NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_GRAPH_CARGO_DELIVERED_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_CPR_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), - NWidget(WWT_SHADEBOX, COLOUR_GREY), - NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), - NWidget(WWT_STICKYBOX, COLOUR_GREY), + NWidget(WWT_CLOSEBOX, WINDOW_BG1), + NWidget(WWT_CAPTION, WINDOW_BG1), SetDataTip(STR_GRAPH_CARGO_DELIVERED_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_CPR_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_SHADEBOX, WINDOW_BG1), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG1), + NWidget(WWT_STICKYBOX, WINDOW_BG1), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_CPR_BACKGROUND), + NWidget(WWT_PANEL, WINDOW_BG1, WID_CPR_BACKGROUND), NWidget(NWID_HORIZONTAL), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_CPR_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1), + NWidget(WWT_EMPTY, WINDOW_BG1, WID_CPR_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetMinimalSize(0, 4), SetFill(0, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0), NWidget(NWID_SPACER), SetMinimalSize(0, 4), NWidget(NWID_HORIZONTAL), - NWidget(WWT_MATRIX, COLOUR_ORANGE, WID_CPR_MATRIX), SetFill(0, 2), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR), - NWidget(NWID_VSCROLLBAR, COLOUR_ORANGE, WID_CPR_MATRIX_SCROLLBAR), + NWidget(WWT_MATRIX, WINDOW_BG1, WID_CPR_MATRIX), SetFill(0, 2), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, WINDOW_BG1, WID_CPR_MATRIX_SCROLLBAR), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 4), EndContainer(), @@ -986,23 +1109,64 @@ static const NWidgetPart _nested_delivered_cargo_graph_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetMinimalSize(WD_RESIZEBOX_WIDTH, 0), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CPR_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL, STR_NULL), + NWidget(WWT_TEXT, WINDOW_BG1, WID_CPR_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL, STR_NULL), NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_RESIZEBOX, COLOUR_GREY, WID_CPR_RESIZE), + NWidget(WWT_RESIZEBOX, WINDOW_BG1, WID_CPR_RESIZE), EndContainer(), EndContainer(), }; -static WindowDesc _delivered_cargo_graph_desc( +static const NWidgetPart _nested_delivered_cargo_graph_widgets2[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, WINDOW_BG2), + NWidget(WWT_CAPTION, WINDOW_BG2), SetDataTip(STR_GRAPH_CARGO_DELIVERED_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_CPR_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_SHADEBOX, WINDOW_BG2), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG2), + NWidget(WWT_STICKYBOX, WINDOW_BG2), + EndContainer(), + NWidget(WWT_PANEL, WINDOW_BG2, WID_CPR_BACKGROUND), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_EMPTY, WINDOW_BG2, WID_CPR_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1), + NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetMinimalSize(0, 4), SetFill(0, 0), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0), + NWidget(NWID_SPACER), SetMinimalSize(0, 4), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_MATRIX, WINDOW_BG2, WID_CPR_MATRIX), SetFill(0, 2), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, WINDOW_BG2, WID_CPR_MATRIX_SCROLLBAR), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(0, 4), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(0, 1), SetResize(0, 1), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetMinimalSize(WD_RESIZEBOX_WIDTH, 0), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_TEXT, WINDOW_BG2, WID_CPR_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL, STR_NULL), + NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_RESIZEBOX, WINDOW_BG2, WID_CPR_RESIZE), + EndContainer(), + EndContainer(), +}; + +static WindowDesc _delivered_cargo_graph_desc1( WDP_AUTO, "graph_delivered_cargo", 0, 0, WC_DELIVERED_CARGO, WC_NONE, 0, - _nested_delivered_cargo_graph_widgets, lengthof(_nested_delivered_cargo_graph_widgets) + _nested_delivered_cargo_graph_widgets1, lengthof(_nested_delivered_cargo_graph_widgets1) +); + +static WindowDesc _delivered_cargo_graph_desc2( + WDP_AUTO, "graph_delivered_cargo", 0, 0, + WC_DELIVERED_CARGO, WC_NONE, + 0, + _nested_delivered_cargo_graph_widgets2, lengthof(_nested_delivered_cargo_graph_widgets2) ); void ShowDeliveredCargoGraph() { - AllocateWindowDescFront(&_delivered_cargo_graph_desc, 0); + AllocateWindowDescFront(ChooseGraphColour(&_delivered_cargo_graph_desc1, &_delivered_cargo_graph_desc2), 0); } /***********************/ @@ -1028,37 +1192,64 @@ struct PerformanceHistoryGraphWindow : BaseGraphWindow { } }; -static const NWidgetPart _nested_performance_history_widgets[] = { +static const NWidgetPart _nested_performance_history_widgets1[] = { NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_PHG_DETAILED_PERFORMANCE), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_PERFORMANCE_DETAIL_KEY, STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_PHG_KEY), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), - NWidget(WWT_SHADEBOX, COLOUR_GREY), - NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), - NWidget(WWT_STICKYBOX, COLOUR_GREY), + NWidget(WWT_CLOSEBOX, WINDOW_BG1), + NWidget(WWT_CAPTION, WINDOW_BG1), SetDataTip(STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_PHG_DETAILED_PERFORMANCE), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_PERFORMANCE_DETAIL_KEY, STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_PHG_KEY), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_SHADEBOX, WINDOW_BG1), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG1), + NWidget(WWT_STICKYBOX, WINDOW_BG1), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_PHG_BACKGROUND), + NWidget(WWT_PANEL, WINDOW_BG1, WID_PHG_BACKGROUND), NWidget(NWID_HORIZONTAL), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_PHG_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1), + NWidget(WWT_EMPTY, WINDOW_BG1, WID_PHG_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetFill(0, 1), SetResize(0, 1), - NWidget(WWT_RESIZEBOX, COLOUR_GREY, WID_PHG_RESIZE), + NWidget(WWT_RESIZEBOX, WINDOW_BG1, WID_PHG_RESIZE), EndContainer(), EndContainer(), EndContainer(), }; -static WindowDesc _performance_history_desc( +static const NWidgetPart _nested_performance_history_widgets2[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, WINDOW_BG2), + NWidget(WWT_CAPTION, WINDOW_BG2), SetDataTip(STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_PHG_DETAILED_PERFORMANCE), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_PERFORMANCE_DETAIL_KEY, STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_PHG_KEY), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_SHADEBOX, WINDOW_BG2), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG2), + NWidget(WWT_STICKYBOX, WINDOW_BG2), + EndContainer(), + NWidget(WWT_PANEL, WINDOW_BG2, WID_PHG_BACKGROUND), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_EMPTY, WINDOW_BG2, WID_PHG_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1), + NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetFill(0, 1), SetResize(0, 1), + NWidget(WWT_RESIZEBOX, WINDOW_BG2, WID_PHG_RESIZE), + EndContainer(), + EndContainer(), + EndContainer(), +}; +static WindowDesc _performance_history_desc1( WDP_AUTO, "graph_performance", 0, 0, WC_PERFORMANCE_HISTORY, WC_NONE, 0, - _nested_performance_history_widgets, lengthof(_nested_performance_history_widgets) + _nested_performance_history_widgets1, lengthof(_nested_performance_history_widgets1) +); + +static WindowDesc _performance_history_desc2( + WDP_AUTO, "graph_performance", 0, 0, + WC_PERFORMANCE_HISTORY, WC_NONE, + 0, + _nested_performance_history_widgets2, lengthof(_nested_performance_history_widgets2) ); void ShowPerformanceHistoryGraph() { - AllocateWindowDescFront(&_performance_history_desc, 0); + AllocateWindowDescFront(ChooseGraphColour(&_performance_history_desc1, &_performance_history_desc2), 0); } /*****************/ @@ -1078,36 +1269,63 @@ struct CompanyValueGraphWindow : BaseGraphWindow { } }; -static const NWidgetPart _nested_company_value_graph_widgets[] = { +static const NWidgetPart _nested_company_value_graph_widgets1[] = { NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_GRAPH_COMPANY_VALUES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), - NWidget(WWT_SHADEBOX, COLOUR_GREY), - NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), - NWidget(WWT_STICKYBOX, COLOUR_GREY), + NWidget(WWT_CLOSEBOX, WINDOW_BG1), + NWidget(WWT_CAPTION, WINDOW_BG1), SetDataTip(STR_GRAPH_COMPANY_VALUES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_SHADEBOX, WINDOW_BG1), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG1), + NWidget(WWT_STICKYBOX, WINDOW_BG1), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_CV_BACKGROUND), + NWidget(WWT_PANEL, WINDOW_BG1, WID_CV_BACKGROUND), NWidget(NWID_HORIZONTAL), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_CV_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1), + NWidget(WWT_EMPTY, WINDOW_BG1, WID_CV_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetFill(0, 1), SetResize(0, 1), - NWidget(WWT_RESIZEBOX, COLOUR_GREY, WID_CV_RESIZE), + NWidget(WWT_RESIZEBOX, WINDOW_BG1, WID_CV_RESIZE), EndContainer(), EndContainer(), EndContainer(), }; -static WindowDesc _company_value_graph_desc( +static const NWidgetPart _nested_company_value_graph_widgets2[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, WINDOW_BG2), + NWidget(WWT_CAPTION, WINDOW_BG2), SetDataTip(STR_GRAPH_COMPANY_VALUES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_SHADEBOX, WINDOW_BG2), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG2), + NWidget(WWT_STICKYBOX, WINDOW_BG2), + EndContainer(), + NWidget(WWT_PANEL, WINDOW_BG2, WID_CV_BACKGROUND), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_EMPTY, WINDOW_BG2, WID_CV_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1), + NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetFill(0, 1), SetResize(0, 1), + NWidget(WWT_RESIZEBOX, WINDOW_BG2, WID_CV_RESIZE), + EndContainer(), + EndContainer(), + EndContainer(), +}; + +static WindowDesc _company_value_graph_desc1( WDP_AUTO, "graph_company_value", 0, 0, WC_COMPANY_VALUE, WC_NONE, 0, - _nested_company_value_graph_widgets, lengthof(_nested_company_value_graph_widgets) + _nested_company_value_graph_widgets1, lengthof(_nested_company_value_graph_widgets1) +); + +static WindowDesc _company_value_graph_desc2( + WDP_AUTO, "graph_company_value", 0, 0, + WC_COMPANY_VALUE, WC_NONE, + 0, + _nested_company_value_graph_widgets2, lengthof(_nested_company_value_graph_widgets2) ); void ShowCompanyValueGraph() { - AllocateWindowDescFront(&_company_value_graph_desc, 0); + AllocateWindowDescFront(ChooseGraphColour(&_company_value_graph_desc1, &_company_value_graph_desc2), 0); } /*****************/ @@ -1118,11 +1336,11 @@ struct PaymentRatesGraphWindow : ExcludingCargoBaseGraphWindow { PaymentRatesGraphWindow(WindowDesc *desc, WindowNumber window_number) : ExcludingCargoBaseGraphWindow(desc, WID_CPR_GRAPH, STR_JUST_CURRENCY_SHORT, true) { - this->num_on_x_axis = 20; - this->num_vert_lines = 20; + this->num_on_x_axis = 24; + this->num_vert_lines = 24; this->month = 0xFF; - this->x_values_start = 10; - this->x_values_increment = 10; + this->x_values_start = 20; + this->x_values_increment = 20; this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_CPR_MATRIX_SCROLLBAR); @@ -1147,8 +1365,8 @@ struct PaymentRatesGraphWindow : ExcludingCargoBaseGraphWindow { const CargoSpec *cs; FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) { this->colours[i] = cs->legend_colour; - for (uint j = 0; j != 20; j++) { - this->cost[i][j] = GetTransportedGoodsIncome(10, 20, j * 4 + 4, cs->Index()); + for (uint j = 0; j != 24; j++) { + this->cost[i][j] = GetTransportedGoodsIncome(10, 20, 2*(j * 4 + 4), cs->Index()); } i++; } @@ -1156,30 +1374,30 @@ struct PaymentRatesGraphWindow : ExcludingCargoBaseGraphWindow { } }; -static const NWidgetPart _nested_cargo_payment_rates_widgets[] = { +static const NWidgetPart _nested_cargo_payment_rates_widgets1[] = { NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_SHADEBOX, COLOUR_GREY), - NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), - NWidget(WWT_STICKYBOX, COLOUR_GREY), + NWidget(WWT_CLOSEBOX, WINDOW_BG1), + NWidget(WWT_CAPTION, WINDOW_BG1), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, WINDOW_BG1), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG1), + NWidget(WWT_STICKYBOX, WINDOW_BG1), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_CPR_BACKGROUND), SetMinimalSize(568, 128), + NWidget(WWT_PANEL, WINDOW_BG1, WID_CPR_BACKGROUND), SetMinimalSize(568, 128), NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CPR_HEADER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_TITLE, STR_NULL), + NWidget(WWT_TEXT, WINDOW_BG1, WID_CPR_HEADER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_TITLE, STR_NULL), NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_CPR_GRAPH), SetMinimalSize(495, 0), SetFill(1, 1), SetResize(1, 1), + NWidget(WWT_EMPTY, WINDOW_BG1, WID_CPR_GRAPH), SetMinimalSize(495, 0), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetMinimalSize(0, 4), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG1, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0), NWidget(NWID_SPACER), SetMinimalSize(0, 4), NWidget(NWID_HORIZONTAL), - NWidget(WWT_MATRIX, COLOUR_ORANGE, WID_CPR_MATRIX), SetFill(0, 2), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR), - NWidget(NWID_VSCROLLBAR, COLOUR_ORANGE, WID_CPR_MATRIX_SCROLLBAR), + NWidget(WWT_MATRIX, WINDOW_BG1, WID_CPR_MATRIX), SetFill(0, 2), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, WINDOW_BG1, WID_CPR_MATRIX_SCROLLBAR), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 4), EndContainer(), @@ -1187,24 +1405,69 @@ static const NWidgetPart _nested_cargo_payment_rates_widgets[] = { EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetMinimalSize(WD_RESIZEBOX_WIDTH, 0), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CPR_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL, STR_NULL), + NWidget(WWT_TEXT, WINDOW_BG1, WID_CPR_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL, STR_NULL), NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_RESIZEBOX, COLOUR_GREY, WID_CPR_RESIZE), + NWidget(WWT_RESIZEBOX, WINDOW_BG1, WID_CPR_RESIZE), EndContainer(), EndContainer(), }; -static WindowDesc _cargo_payment_rates_desc( +static const NWidgetPart _nested_cargo_payment_rates_widgets2[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, WINDOW_BG2), + NWidget(WWT_CAPTION, WINDOW_BG2), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, WINDOW_BG2), + NWidget(WWT_DEFSIZEBOX, WINDOW_BG2), + NWidget(WWT_STICKYBOX, WINDOW_BG2), + EndContainer(), + NWidget(WWT_PANEL, WINDOW_BG2, WID_CPR_BACKGROUND), SetMinimalSize(568, 128), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_TEXT, WINDOW_BG2, WID_CPR_HEADER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_TITLE, STR_NULL), + NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_EMPTY, WINDOW_BG2, WID_CPR_GRAPH), SetMinimalSize(495, 0), SetFill(1, 1), SetResize(1, 1), + NWidget(NWID_VERTICAL), + NWidget(NWID_SPACER), SetMinimalSize(0, 4), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, WINDOW_BG2, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0), + NWidget(NWID_SPACER), SetMinimalSize(0, 4), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_MATRIX, WINDOW_BG2, WID_CPR_MATRIX), SetFill(0, 2), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, WINDOW_BG2, WID_CPR_MATRIX_SCROLLBAR), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(0, 4), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(0, 1), SetResize(0, 1), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetMinimalSize(WD_RESIZEBOX_WIDTH, 0), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_TEXT, WINDOW_BG2, WID_CPR_FOOTER), SetMinimalSize(0, 6), SetPadding(2, 0, 2, 0), SetDataTip(STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL, STR_NULL), + NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_RESIZEBOX, WINDOW_BG2, WID_CPR_RESIZE), + EndContainer(), + EndContainer(), +}; + +static WindowDesc _cargo_payment_rates_desc1( WDP_AUTO, "graph_cargo_payment_rates", 0, 0, WC_PAYMENT_RATES, WC_NONE, 0, - _nested_cargo_payment_rates_widgets, lengthof(_nested_cargo_payment_rates_widgets) + _nested_cargo_payment_rates_widgets1, lengthof(_nested_cargo_payment_rates_widgets1) +); + +static WindowDesc _cargo_payment_rates_desc2( + WDP_AUTO, "graph_cargo_payment_rates", 0, 0, + WC_PAYMENT_RATES, WC_NONE, + 0, + _nested_cargo_payment_rates_widgets2, lengthof(_nested_cargo_payment_rates_widgets2) ); void ShowCargoPaymentRates() { - AllocateWindowDescFront(&_cargo_payment_rates_desc, 0); + AllocateWindowDescFront(ChooseGraphColour(&_cargo_payment_rates_desc1, &_cargo_payment_rates_desc2), 0); } /************************/ @@ -1232,7 +1495,7 @@ static const StringID _performance_titles[] = { static inline StringID GetPerformanceTitleFromValue(uint value) { - return _performance_titles[minu(value, 1000) >> 6]; + return _performance_titles[std::min(value, 1000u) >> 6]; } class CompanyLeagueWindow : public Window { @@ -1316,7 +1579,7 @@ public: this->ordinal_width = 0; for (uint i = 0; i < MAX_COMPANIES; i++) { - this->ordinal_width = max(this->ordinal_width, GetStringBoundingBox(STR_ORDINAL_NUMBER_1ST + i).width); + this->ordinal_width = std::max(this->ordinal_width, GetStringBoundingBox(STR_ORDINAL_NUMBER_1ST + i).width); } this->ordinal_width += 5; // Keep some extra spacing @@ -1332,13 +1595,13 @@ public: Dimension d = GetSpriteSize(SPR_COMPANY_ICON); this->icon_width = d.width + 2; - this->line_height = max(d.height + 2, FONT_HEIGHT_NORMAL); + this->line_height = std::max(d.height + 2, FONT_HEIGHT_NORMAL); for (const Company *c : Company::Iterate()) { SetDParam(0, c->index); SetDParam(1, c->index); SetDParam(2, _performance_titles[widest_title]); - widest_width = max(widest_width, GetStringBoundingBox(STR_COMPANY_LEAGUE_COMPANY_NAME).width); + widest_width = std::max(widest_width, GetStringBoundingBox(STR_COMPANY_LEAGUE_COMPANY_NAME).width); } this->text_width = widest_width + 30; // Keep some extra spacing @@ -1371,26 +1634,43 @@ public: } }; -static const NWidgetPart _nested_company_league_widgets[] = { +static const NWidgetPart _nested_company_league_widgets1[] = { NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_COMPANY_LEAGUE_TABLE_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_SHADEBOX, COLOUR_GREY), - NWidget(WWT_STICKYBOX, COLOUR_GREY), + NWidget(WWT_CLOSEBOX, WINDOW_BG1), + NWidget(WWT_CAPTION, WINDOW_BG1), SetDataTip(STR_COMPANY_LEAGUE_TABLE_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, WINDOW_BG1), + NWidget(WWT_STICKYBOX, WINDOW_BG1), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_CL_BACKGROUND), SetMinimalSize(400, 0), SetMinimalTextLines(15, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM), + NWidget(WWT_PANEL, WINDOW_BG1, WID_CL_BACKGROUND), SetMinimalSize(400, 0), SetMinimalTextLines(15, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM), }; -static WindowDesc _company_league_desc( +static const NWidgetPart _nested_company_league_widgets2[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, WINDOW_BG2), + NWidget(WWT_CAPTION, WINDOW_BG2), SetDataTip(STR_COMPANY_LEAGUE_TABLE_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, WINDOW_BG2), + NWidget(WWT_STICKYBOX, WINDOW_BG2), + EndContainer(), + NWidget(WWT_PANEL, WINDOW_BG2, WID_CL_BACKGROUND), SetMinimalSize(400, 0), SetMinimalTextLines(15, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM), +}; + +static WindowDesc _company_league_desc1( WDP_AUTO, "league", 0, 0, WC_COMPANY_LEAGUE, WC_NONE, 0, - _nested_company_league_widgets, lengthof(_nested_company_league_widgets) + _nested_company_league_widgets1, lengthof(_nested_company_league_widgets1) +); + +static WindowDesc _company_league_desc2( + WDP_AUTO, "league", 0, 0, + WC_COMPANY_LEAGUE, WC_NONE, + 0, + _nested_company_league_widgets2, lengthof(_nested_company_league_widgets2) ); void ShowCompanyLeagueTable() { - AllocateWindowDescFront(&_company_league_desc, 0); + AllocateWindowDescFront(ChooseGraphColour(&_company_league_desc1, &_company_league_desc2), 0); } /*****************************/ @@ -1438,7 +1718,7 @@ struct PerformanceRatingDetailWindow : Window { uint score_info_width = 0; for (uint i = SCORE_BEGIN; i < SCORE_END; i++) { - score_info_width = max(score_info_width, GetStringBoundingBox(STR_PERFORMANCE_DETAIL_VEHICLES + i).width); + score_info_width = std::max(score_info_width, GetStringBoundingBox(STR_PERFORMANCE_DETAIL_VEHICLES + i).width); } SetDParamMaxValue(0, 1000); score_info_width += GetStringBoundingBox(STR_BLACK_COMMA).width + WD_FRAMERECT_LEFT; @@ -1644,11 +1924,11 @@ static NWidgetBase *MakePerformanceDetailPanels(int *biggest_index) STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP, }; - assert_compile(lengthof(performance_tips) == SCORE_END - SCORE_BEGIN); + static_assert(lengthof(performance_tips) == SCORE_END - SCORE_BEGIN); NWidgetVertical *vert = new NWidgetVertical(NC_EQUALSIZE); for (int widnum = WID_PRD_SCORE_FIRST; widnum <= WID_PRD_SCORE_LAST; widnum++) { - NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, widnum); + NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, ChooseGraphColour(WINDOW_BG1, WINDOW_BG2), widnum); panel->SetFill(1, 1); panel->SetDataTip(0x0, performance_tips[widnum - WID_PRD_SCORE_FIRST]); vert->Add(panel); @@ -1660,32 +1940,52 @@ static NWidgetBase *MakePerformanceDetailPanels(int *biggest_index) /** Make a number of rows with buttons for each company for the performance rating detail window. */ NWidgetBase *MakeCompanyButtonRowsGraphGUI(int *biggest_index) { - return MakeCompanyButtonRows(biggest_index, WID_PRD_COMPANY_FIRST, WID_PRD_COMPANY_LAST, 8, STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP); + return MakeCompanyButtonRows(biggest_index, WID_PRD_COMPANY_FIRST, WID_PRD_COMPANY_LAST, ChooseGraphColour(WINDOW_BG1, WINDOW_BG2), 8, STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP); } -static const NWidgetPart _nested_performance_rating_detail_widgets[] = { +static const NWidgetPart _nested_performance_rating_detail_widgets1[] = { NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_PERFORMANCE_DETAIL, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_SHADEBOX, COLOUR_GREY), - NWidget(WWT_STICKYBOX, COLOUR_GREY), + NWidget(WWT_CLOSEBOX, WINDOW_BG1), + NWidget(WWT_CAPTION, WINDOW_BG1), SetDataTip(STR_PERFORMANCE_DETAIL, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, WINDOW_BG1), + NWidget(WWT_STICKYBOX, WINDOW_BG1), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY), + NWidget(WWT_PANEL, WINDOW_BG1), NWidgetFunction(MakeCompanyButtonRowsGraphGUI), SetPadding(0, 1, 1, 2), EndContainer(), NWidgetFunction(MakePerformanceDetailPanels), }; -static WindowDesc _performance_rating_detail_desc( +static const NWidgetPart _nested_performance_rating_detail_widgets2[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, WINDOW_BG2), + NWidget(WWT_CAPTION, WINDOW_BG2), SetDataTip(STR_PERFORMANCE_DETAIL, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, WINDOW_BG2), + NWidget(WWT_STICKYBOX, WINDOW_BG2), + EndContainer(), + NWidget(WWT_PANEL, WINDOW_BG2), + NWidgetFunction(MakeCompanyButtonRowsGraphGUI), SetPadding(0, 1, 1, 2), + EndContainer(), + NWidgetFunction(MakePerformanceDetailPanels), +}; + +static WindowDesc _performance_rating_detail_desc1( WDP_AUTO, "league_details", 0, 0, WC_PERFORMANCE_DETAIL, WC_NONE, 0, - _nested_performance_rating_detail_widgets, lengthof(_nested_performance_rating_detail_widgets) + _nested_performance_rating_detail_widgets1, lengthof(_nested_performance_rating_detail_widgets1) +); + +static WindowDesc _performance_rating_detail_desc2( + WDP_AUTO, "league_details", 0, 0, + WC_PERFORMANCE_DETAIL, WC_NONE, + 0, + _nested_performance_rating_detail_widgets2, lengthof(_nested_performance_rating_detail_widgets2) ); void ShowPerformanceRatingDetail() { - AllocateWindowDescFront(&_performance_rating_detail_desc, 0); + AllocateWindowDescFront(ChooseGraphColour(&_performance_rating_detail_desc1, &_performance_rating_detail_desc2), 0); } void InitializeGraphGui() diff --git a/src/ground_vehicle.cpp b/src/ground_vehicle.cpp index 74095fc576..f6e44c2e29 100644 --- a/src/ground_vehicle.cpp +++ b/src/ground_vehicle.cpp @@ -38,7 +38,7 @@ void GroundVehicle::PowerChanged() /* Get minimum max speed for this track. */ uint16 track_speed = u->GetMaxTrackSpeed(); - if (track_speed > 0) max_track_speed = min(max_track_speed, track_speed); + if (track_speed > 0) max_track_speed = std::min(max_track_speed, track_speed); } byte air_drag; @@ -48,7 +48,7 @@ void GroundVehicle::PowerChanged() if (air_drag_value == 0) { uint16 max_speed = v->GetDisplayMaxSpeed(); /* Simplification of the method used in TTDPatch. It uses <= 10 to change more steadily from 128 to 196. */ - air_drag = (max_speed <= 10) ? 192 : max(2048 / max_speed, 1); + air_drag = (max_speed <= 10) ? 192 : std::max(2048 / max_speed, 1); } else { /* According to the specs, a value of 0x01 in the air drag property means "no air drag". */ air_drag = (air_drag_value == 1) ? 0 : air_drag_value; @@ -89,7 +89,7 @@ void GroundVehicle::CargoChanged() } /* Store consist weight in cache. */ - this->gcache.cached_weight = max(1, weight); + this->gcache.cached_weight = std::max(1u, weight); /* Friction in bearings and other mechanical parts is 0.1% of the weight (result in N). */ this->gcache.cached_axle_resistance = 10 * weight; @@ -162,8 +162,8 @@ int GroundVehicle::GetAcceleration() const } } else { /* "Kickoff" acceleration. */ - force = (mode == AS_ACCEL && !maglev) ? min(max_te, power) : power; - force = max(force, (mass * 8) + resistance); + force = (mode == AS_ACCEL && !maglev) ? std::min(max_te, power) : power; + force = std::max(force, (mass * 8) + resistance); } if (mode == AS_ACCEL) { @@ -176,9 +176,9 @@ int GroundVehicle::GetAcceleration() const * a hill will never speed up enough to (eventually) get back to the * same (maximum) speed. */ int accel = ClampToI32((force - resistance) / (mass * 4)); - return force < resistance ? min(-1, accel) : max(1, accel); + return force < resistance ? std::min(-1, accel) : std::max(1, accel); } else { - return ClampToI32(min(-force - resistance, -10000) / mass); + return ClampToI32(std::min(-force - resistance, -10000) / mass); } } @@ -191,8 +191,8 @@ bool GroundVehicle::IsChainInDepot() const { const T *v = this->First(); /* Is the front engine stationary in the depot? */ - assert_compile((int)TRANSPORT_RAIL == (int)VEH_TRAIN); - assert_compile((int)TRANSPORT_ROAD == (int)VEH_ROAD); + static_assert((int)TRANSPORT_RAIL == (int)VEH_TRAIN); + static_assert((int)TRANSPORT_ROAD == (int)VEH_ROAD); if (!IsDepotTypeTile(v->tile, (TransportType)Type) || v->cur_speed != 0) return false; /* Check whether the rest is also already trying to enter the depot. */ diff --git a/src/ground_vehicle.hpp b/src/ground_vehicle.hpp index af6e25c806..15aac1f369 100644 --- a/src/ground_vehicle.hpp +++ b/src/ground_vehicle.hpp @@ -369,7 +369,7 @@ protected: * somewhat gradually. But never lower than the maximum speed. */ int tempmax = max_speed; if (this->cur_speed > max_speed) { - tempmax = max(this->cur_speed - (this->cur_speed / 10) - 1, max_speed); + tempmax = std::max(this->cur_speed - (this->cur_speed / 10) - 1, max_speed); } /* Enforce a maximum and minimum speed. Normally we would use something like @@ -377,7 +377,7 @@ protected: * threshold for some reason. That makes acceleration fail and assertions * happen in Clamp. So make it explicit that min_speed overrules the maximum * speed by explicit ordering of min and max. */ - this->cur_speed = spd = max(min(this->cur_speed + ((int)spd >> 8), tempmax), min_speed); + this->cur_speed = spd = std::max(std::min(this->cur_speed + ((int)spd >> 8), tempmax), min_speed); int scaled_spd = this->GetAdvanceSpeed(spd); diff --git a/src/group.h b/src/group.h index aeb7f581a8..1be8d8b01f 100644 --- a/src/group.h +++ b/src/group.h @@ -16,6 +16,7 @@ #include "vehicle_type.h" #include "engine_type.h" #include "livery.h" +#include typedef Pool GroupPool; extern GroupPool _group_pool; ///< Pool of groups. @@ -63,7 +64,7 @@ struct GroupStatistics { /** Group data. */ struct Group : GroupPool::PoolItem<&_group_pool> { - char *name; ///< Group Name + std::string name; ///< Group Name Owner owner; ///< Group Owner VehicleType vehicle_type; ///< Vehicle type of the group @@ -76,7 +77,6 @@ struct Group : GroupPool::PoolItem<&_group_pool> { GroupID parent; ///< Parent group Group(CompanyID owner = INVALID_COMPANY); - ~Group(); }; diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 497d74d68b..bf25dae862 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -290,11 +290,6 @@ Group::Group(Owner owner) this->folded = false; } -Group::~Group() -{ - free(this->name); -} - /** * Create a new vehicle group. @@ -422,10 +417,12 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 } if (flags & DC_EXEC) { - /* Delete the old name */ - free(g->name); /* Assign the new one */ - g->name = reset ? nullptr : stredup(text); + if (reset) { + g->name.clear(); + } else { + g->name = text; + } } } else { /* Set group parent */ @@ -459,6 +456,8 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 InvalidateWindowData(WC_REPLACE_VEHICLE, g->vehicle_type, 1); InvalidateWindowData(GetWindowClassForVehicleType(g->vehicle_type), VehicleListIdentifier(VL_GROUP_LIST, g->vehicle_type, _current_company).Pack()); InvalidateWindowData(WC_COMPANY_COLOUR, g->owner, g->vehicle_type); + InvalidateWindowClassesData(WC_VEHICLE_VIEW); + InvalidateWindowClassesData(WC_VEHICLE_DETAILS); } return CommandCost(); @@ -548,6 +547,8 @@ CommandCost CmdAddVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, u SetWindowDirty(WC_VEHICLE_VIEW, v->index); SetWindowDirty(WC_VEHICLE_DETAILS, v->index); InvalidateWindowData(GetWindowClassForVehicleType(v->type), VehicleListIdentifier(VL_GROUP_LIST, v->type, _current_company).Pack()); + InvalidateWindowData(WC_VEHICLE_VIEW, v->index); + InvalidateWindowData(WC_VEHICLE_DETAILS, v->index); } return CommandCost(); diff --git a/src/group_gui.cpp b/src/group_gui.cpp index e20f5b1fec..89bdaea09e 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -48,7 +48,6 @@ static const NWidgetPart _nested_group_widgets[] = { NWidget(NWID_HORIZONTAL), /* left part */ NWidget(NWID_VERTICAL), - NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalTextLines(1, WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM), SetFill(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_ALL_VEHICLES), SetFill(1, 0), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_DEFAULT_VEHICLES), SetFill(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), @@ -56,23 +55,28 @@ static const NWidgetPart _nested_group_widgets[] = { SetFill(1, 0), SetResize(0, 1), SetScrollbar(WID_GL_LIST_GROUP_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_GL_LIST_GROUP_SCROLLBAR), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_INFO), SetFill(1, 0), EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_INFO), SetFill(1, 1), SetMinimalTextLines(3, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_CREATE_GROUP), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_CREATE_GROUP), SetDataTip(SPR_GROUP_CREATE_TRAIN, STR_GROUP_CREATE_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_DELETE_GROUP), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_DELETE_GROUP), SetDataTip(SPR_GROUP_DELETE_TRAIN, STR_GROUP_DELETE_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_RENAME_GROUP), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_RENAME_GROUP), SetDataTip(SPR_GROUP_RENAME_TRAIN, STR_GROUP_RENAME_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_LIVERY_GROUP), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_LIVERY_GROUP), SetDataTip(SPR_GROUP_LIVERY_TRAIN, STR_GROUP_LIVERY_TOOLTIP), - NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), EndContainer(), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_REPLACE_PROTECTION), SetFill(0, 1), + NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 0), EndContainer(), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_REPLACE_PROTECTION), SetDataTip(SPR_GROUP_REPLACE_OFF_TRAIN, STR_GROUP_REPLACE_PROTECTION_TOOLTIP), EndContainer(), EndContainer(), /* right part */ NWidget(NWID_VERTICAL), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GL_GROUP_BY_ORDER), SetMinimalSize(81, 12), SetDataTip(STR_STATION_VIEW_GROUP, STR_TOOLTIP_GROUP_ORDER), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_GROUP_BY_DROPDOWN), SetMinimalSize(167, 12), SetDataTip(0x0, STR_TOOLTIP_GROUP_ORDER), + NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetResize(1, 0), EndContainer(), + EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_SORT_BY_ORDER), SetMinimalSize(81, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_SORT_BY_DROPDOWN), SetMinimalSize(167, 12), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA), @@ -84,14 +88,14 @@ static const NWidgetPart _nested_group_widgets[] = { EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(1, 0), SetFill(1, 1), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_AVAILABLE_VEHICLES), SetMinimalSize(106, 12), SetFill(0, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_AVAILABLE_VEHICLES), SetMinimalSize(106, 12), SetDataTip(STR_BLACK_STRING, STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP), - NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 1), SetResize(1, 0), EndContainer(), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_MANAGE_VEHICLES_DROPDOWN), SetMinimalSize(118, 12), SetFill(0, 1), + NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetResize(1, 0), EndContainer(), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_MANAGE_VEHICLES_DROPDOWN), SetMinimalSize(118, 12), SetDataTip(STR_VEHICLE_LIST_MANAGE_LIST, STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_STOP_ALL), SetMinimalSize(12, 12), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_STOP_ALL), SetMinimalSize(12, 12), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_START_ALL), SetMinimalSize(12, 12), SetFill(0, 1), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_START_ALL), SetMinimalSize(12, 12), SetDataTip(SPR_FLAG_VEH_RUNNING, STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), @@ -202,14 +206,14 @@ private: this->tiny_step_height = this->column_size[VGC_FOLD].height; this->column_size[VGC_NAME] = maxdim(GetStringBoundingBox(STR_GROUP_DEFAULT_TRAINS + this->vli.vtype), GetStringBoundingBox(STR_GROUP_ALL_TRAINS + this->vli.vtype)); - this->column_size[VGC_NAME].width = max(170u, this->column_size[VGC_NAME].width); - this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_NAME].height); + this->column_size[VGC_NAME].width = std::max(170u, this->column_size[VGC_NAME].width); + this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_NAME].height); this->column_size[VGC_PROTECT] = GetSpriteSize(SPR_GROUP_REPLACE_PROTECT); - this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_PROTECT].height); + this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_PROTECT].height); this->column_size[VGC_AUTOREPLACE] = GetSpriteSize(SPR_GROUP_REPLACE_ACTIVE); - this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_AUTOREPLACE].height); + this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_AUTOREPLACE].height); this->column_size[VGC_PROFIT].width = 0; this->column_size[VGC_PROFIT].height = 0; @@ -218,15 +222,15 @@ private: Dimension d = GetSpriteSize(profit_sprites[i]); this->column_size[VGC_PROFIT] = maxdim(this->column_size[VGC_PROFIT], d); } - this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_PROFIT].height); + this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_PROFIT].height); int num_vehicle = GetGroupNumVehicle(this->vli.company, ALL_GROUP, this->vli.vtype); SetDParamMaxValue(0, num_vehicle, 3, FS_SMALL); SetDParamMaxValue(1, num_vehicle, 3, FS_SMALL); this->column_size[VGC_NUMBER] = GetStringBoundingBox(STR_GROUP_COUNT_WITH_SUBGROUP); - this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_NUMBER].height); + this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_NUMBER].height); - this->tiny_step_height += WD_MATRIX_TOP; + this->tiny_step_height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; return WD_FRAMERECT_LEFT + 8 + this->column_size[VGC_FOLD].width + 2 + @@ -252,7 +256,7 @@ private: { /* Highlight the group if a vehicle is dragged over it */ if (g_id == this->group_over) { - GfxFillRect(left + WD_FRAMERECT_LEFT, y + WD_FRAMERECT_TOP, right - WD_FRAMERECT_RIGHT, y + this->tiny_step_height - WD_FRAMERECT_BOTTOM - WD_MATRIX_TOP, _colour_gradient[COLOUR_GREY][7]); + GfxFillRect(left + WD_FRAMERECT_LEFT, y + WD_FRAMERECT_TOP + 1, right - WD_FRAMERECT_RIGHT, y + this->tiny_step_height - WD_FRAMERECT_BOTTOM - 1, _colour_gradient[COLOUR_GREY][7]); } if (g_id == NEW_GROUP) return; @@ -343,24 +347,12 @@ public: this->vscroll = this->GetScrollbar(WID_GL_LIST_VEHICLE_SCROLLBAR); this->group_sb = this->GetScrollbar(WID_GL_LIST_GROUP_SCROLLBAR); - switch (this->vli.vtype) { - default: NOT_REACHED(); - case VEH_TRAIN: this->sorting = &_sorting.train; break; - case VEH_ROAD: this->sorting = &_sorting.roadveh; break; - case VEH_SHIP: this->sorting = &_sorting.ship; break; - case VEH_AIRCRAFT: this->sorting = &_sorting.aircraft; break; - } - this->vli.index = ALL_GROUP; this->vehicle_sel = INVALID_VEHICLE; this->group_sel = INVALID_GROUP; this->group_rename = INVALID_GROUP; this->group_over = INVALID_GROUP; - this->vehicles.SetListing(*this->sorting); - this->vehicles.ForceRebuild(); - this->vehicles.NeedResort(); - this->BuildVehicleList(); this->SortVehicleList(); @@ -384,7 +376,7 @@ public: ~VehicleGroupWindow() { - *this->sorting = this->vehicles.GetListing(); + *this->sorting = this->vehgroups.GetListing(); } void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override @@ -395,13 +387,13 @@ public: resize->height = this->tiny_step_height; /* Minimum height is the height of the list widget minus all and default vehicles... */ - size->height = 4 * GetVehicleListHeight(this->vli.vtype, this->tiny_step_height) - 2 * this->tiny_step_height; + size->height = 4 * GetVehicleListHeight(this->vli.vtype, this->tiny_step_height); /* ... minus the buttons at the bottom ... */ uint max_icon_height = GetSpriteSize(this->GetWidget(WID_GL_CREATE_GROUP)->widget_data).height; - max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget(WID_GL_RENAME_GROUP)->widget_data).height); - max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget(WID_GL_DELETE_GROUP)->widget_data).height); - max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget(WID_GL_REPLACE_PROTECTION)->widget_data).height); + max_icon_height = std::max(max_icon_height, GetSpriteSize(this->GetWidget(WID_GL_RENAME_GROUP)->widget_data).height); + max_icon_height = std::max(max_icon_height, GetSpriteSize(this->GetWidget(WID_GL_DELETE_GROUP)->widget_data).height); + max_icon_height = std::max(max_icon_height, GetSpriteSize(this->GetWidget(WID_GL_REPLACE_PROTECTION)->widget_data).height); /* ... minus the height of the group info ... */ max_icon_height += (FONT_HEIGHT_NORMAL * 3) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; @@ -438,11 +430,6 @@ public: *size = maxdim(*size, d); break; } - - case WID_GL_INFO: { - size->height = (FONT_HEIGHT_NORMAL * 3) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; - break; - } } } @@ -455,10 +442,10 @@ public: { if (data == 0) { /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */ - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); this->groups.ForceRebuild(); } else { - this->vehicles.ForceResort(); + this->vehgroups.ForceResort(); this->groups.ForceResort(); } @@ -511,8 +498,8 @@ public: this->BuildGroupList(this->owner); - this->group_sb->SetCount((uint)this->groups.size()); - this->vscroll->SetCount((uint)this->vehicles.size()); + this->group_sb->SetCount(static_cast(this->groups.size())); + this->vscroll->SetCount(static_cast(this->vehgroups.size())); /* The drop down menu is out, *but* it may not be used, retract it. */ if (this->vehicles.size() == 0 && this->IsWidgetLowered(WID_GL_MANAGE_VEHICLES_DROPDOWN)) { @@ -551,8 +538,11 @@ public: if (!IsDefaultGroupID(this->vli.index) && !IsAllGroupID(this->vli.index) && Group::Get(this->vli.index)->replace_protection) protect_sprite = SPR_GROUP_REPLACE_ON_TRAIN; this->GetWidget(WID_GL_REPLACE_PROTECTION)->widget_data = protect_sprite + this->vli.vtype; - /* Set text of sort by dropdown */ - this->GetWidget(WID_GL_SORT_BY_DROPDOWN)->widget_data = this->vehicle_sorter_names[this->vehicles.SortType()]; + /* Set text of "group by" dropdown widget. */ + this->GetWidget(WID_GL_GROUP_BY_DROPDOWN)->widget_data = this->vehicle_group_by_names[this->grouping]; + + /* Set text of "sort by" dropdown widget. */ + this->GetWidget(WID_GL_SORT_BY_DROPDOWN)->widget_data = this->GetVehicleSorterNames()[this->vehgroups.SortType()]; this->DrawWidgets(); } @@ -561,21 +551,19 @@ public: { switch (widget) { case WID_GL_ALL_VEHICLES: - DrawGroupInfo(r.top + WD_FRAMERECT_TOP, r.left, r.right, ALL_GROUP); + DrawGroupInfo(r.top, r.left, r.right, ALL_GROUP); break; case WID_GL_DEFAULT_VEHICLES: - DrawGroupInfo(r.top + WD_FRAMERECT_TOP, r.left, r.right, DEFAULT_GROUP); + DrawGroupInfo(r.top, r.left, r.right, DEFAULT_GROUP); break; case WID_GL_INFO: { Money this_year = 0; Money last_year = 0; - uint32 occupancy = 0; - size_t vehicle_count = this->vehicles.size(); + uint64 occupancy = 0; - for (uint i = 0; i < vehicle_count; i++) { - const Vehicle *v = this->vehicles[i]; + for (const Vehicle * const v : this->vehicles) { assert(v->owner == this->owner); this_year += v->GetDisplayProfitThisYear(); @@ -598,6 +586,7 @@ public: y += FONT_HEIGHT_NORMAL; DrawString(left, right, y, STR_GROUP_OCCUPANCY, TC_BLACK); + const size_t vehicle_count = this->vehicles.size(); if (vehicle_count > 0) { SetDParam(0, occupancy / vehicle_count); DrawString(left, right, y, STR_GROUP_OCCUPANCY_VALUE, TC_BLACK, SA_RIGHT); @@ -607,8 +596,8 @@ public: } case WID_GL_LIST_GROUP: { - int y1 = r.top + WD_FRAMERECT_TOP; - int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), (uint)this->groups.size()); + int y1 = r.top; + int max = std::min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.size()); for (int i = this->group_sb->GetPosition(); i < max; ++i) { const Group *g = this->groups[i]; @@ -625,16 +614,16 @@ public: } case WID_GL_SORT_BY_ORDER: - this->DrawSortButtonState(WID_GL_SORT_BY_ORDER, this->vehicles.IsDescSortOrder() ? SBS_DOWN : SBS_UP); + this->DrawSortButtonState(WID_GL_SORT_BY_ORDER, this->vehgroups.IsDescSortOrder() ? SBS_DOWN : SBS_UP); break; case WID_GL_LIST_VEHICLE: - if (this->vli.index != ALL_GROUP) { - /* Mark vehicles which are in sub-groups */ + if (this->vli.index != ALL_GROUP && this->grouping == GB_NONE) { + /* Mark vehicles which are in sub-groups (only if we are not using shared order coalescing) */ int y = r.top; - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->vehicles.size()); + uint max = static_cast(std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehgroups.size())); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { - const Vehicle *v = this->vehicles[i]; + const Vehicle *v = this->vehgroups[i].GetSingleVehicle(); if (v->group_id != this->vli.index) { GfxFillRect(r.left + 1, y + 1, r.right - 1, y + this->resize.step_height - 2, _colour_gradient[COLOUR_GREY][3], FILLRECT_CHECKER); } @@ -660,18 +649,22 @@ public: { switch (widget) { case WID_GL_SORT_BY_ORDER: // Flip sorting method ascending/descending - this->vehicles.ToggleSortOrder(); + this->vehgroups.ToggleSortOrder(); this->SetDirty(); break; + case WID_GL_GROUP_BY_DROPDOWN: // Select grouping option dropdown menu + ShowDropDownMenu(this, this->vehicle_group_by_names, this->grouping, WID_GL_GROUP_BY_DROPDOWN, 0, 0); + return; + case WID_GL_SORT_BY_DROPDOWN: // Select sorting criteria dropdown menu - ShowDropDownMenu(this, this->vehicle_sorter_names, this->vehicles.SortType(), WID_GL_SORT_BY_DROPDOWN, 0, (this->vli.vtype == VEH_TRAIN || this->vli.vtype == VEH_ROAD) ? 0 : (1 << 10)); + ShowDropDownMenu(this, this->GetVehicleSorterNames(), this->vehgroups.SortType(), WID_GL_SORT_BY_DROPDOWN, 0, (this->vli.vtype == VEH_TRAIN || this->vli.vtype == VEH_ROAD) ? 0 : (1 << 10)); return; case WID_GL_ALL_VEHICLES: // All vehicles button if (!IsAllGroupID(this->vli.index)) { this->vli.index = ALL_GROUP; - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); this->SetDirty(); } break; @@ -679,7 +672,7 @@ public: case WID_GL_DEFAULT_VEHICLES: // Ungrouped vehicles button if (!IsDefaultGroupID(this->vli.index)) { this->vli.index = DEFAULT_GROUP; - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); this->SetDirty(); } break; @@ -717,31 +710,56 @@ public: this->group_sel = this->vli.index = this->groups[id_g]->index; - SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); + SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this, CM_DDSP_GROUP); - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); this->SetDirty(); break; } case WID_GL_LIST_VEHICLE: { // Matrix Vehicle uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_VEHICLE); - if (id_v >= this->vehicles.size()) return; // click out of list bound + if (id_v >= this->vehgroups.size()) return; // click out of list bound - const Vehicle *v = this->vehicles[id_v]; - if (VehicleClicked(v)) break; + const GUIVehicleGroup &vehgroup = this->vehgroups[id_v]; - this->vehicle_sel = v->index; + const Vehicle *v = nullptr; - if (citymania::_fn_mod) { - this->SelectGroup(v->group_id); + switch (this->grouping) { + case GB_NONE: { + const Vehicle *v2 = vehgroup.GetSingleVehicle(); + if (VehicleClicked(v2)) break; + v = v2; + break; + } + + case GB_SHARED_ORDERS: { + assert(vehgroup.NumVehicles() > 0); + v = vehgroup.vehicles_begin[0]; + /* + * No VehicleClicked(v) support for now, because don't want + * to enable any contextual actions except perhaps clicking/ctrl-clicking to clone orders. + */ + break; + } + + default: + NOT_REACHED(); + } + if (v) { + this->vehicle_sel = v->index; + + if (citymania::_fn_mod) { + this->SelectGroup(v->group_id); + } + + SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this, CM_DDSP_GROUP); + SetMouseCursorVehicle(v, EIT_IN_LIST); + _cursor.vehchain = true; + + this->SetDirty(); } - SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); - SetMouseCursorVehicle(v, EIT_IN_LIST); - _cursor.vehchain = true; - - this->SetDirty(); break; } @@ -825,7 +843,7 @@ public: { switch (widget) { case WID_GL_DEFAULT_VEHICLES: // Ungrouped vehicles - DoCommandP(0, DEFAULT_GROUP, this->vehicle_sel | (citymania::_fn_mod ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE)); + DoCommandP(0, DEFAULT_GROUP, this->vehicle_sel | (citymania::_fn_mod || this->grouping == GB_SHARED_ORDERS ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE)); this->vehicle_sel = INVALID_VEHICLE; this->group_over = INVALID_GROUP; @@ -842,7 +860,7 @@ public: uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height); GroupID new_g = id_g >= this->groups.size() ? NEW_GROUP : this->groups[id_g]->index; - DoCommandP(0, new_g, vindex | (citymania::_fn_mod ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE), new_g == NEW_GROUP ? CcAddVehicleNewGroup : nullptr); + DoCommandP(0, new_g, vindex | (citymania::_fn_mod || this->grouping == GB_SHARED_ORDERS ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE), new_g == NEW_GROUP ? CcAddVehicleNewGroup : nullptr); break; } @@ -853,11 +871,34 @@ public: this->SetDirty(); uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_VEHICLE); - if (id_v >= this->vehicles.size()) return; // click out of list bound + if (id_v >= this->vehgroups.size()) return; // click out of list bound - const Vehicle *v = this->vehicles[id_v]; - if (!VehicleClicked(v) && vindex == v->index) { - ShowVehicleViewWindow(v); + const GUIVehicleGroup &vehgroup = this->vehgroups[id_v]; + switch (this->grouping) { + case GB_NONE: { + const Vehicle *v = vehgroup.GetSingleVehicle(); + if (!VehicleClicked(v) && vindex == v->index) { + ShowVehicleViewWindow(v); + } + break; + } + + case GB_SHARED_ORDERS: { + const Vehicle *v = vehgroup.vehicles_begin[0]; + /* We do not support VehicleClicked() here since the contextual action may only make sense for individual vehicles */ + + if (vindex == v->index) { + if (vehgroup.NumVehicles() == 1) { + ShowVehicleViewWindow(v); + } else { + ShowVehicleListWindow(v); + } + } + break; + } + + default: + NOT_REACHED(); } break; } @@ -887,8 +928,12 @@ public: void OnDropdownSelect(int widget, int index) override { switch (widget) { + case WID_GL_GROUP_BY_DROPDOWN: + this->UpdateVehicleGroupBy(static_cast(index)); + break; + case WID_GL_SORT_BY_DROPDOWN: - this->vehicles.SetSortType(index); + this->vehgroups.SetSortType(index); break; case WID_GL_MANAGE_VEHICLES_DROPDOWN: @@ -926,7 +971,7 @@ public: void OnGameTick() override { - if (this->groups.NeedResort() || this->vehicles.NeedResort()) { + if (this->groups.NeedResort() || this->vehgroups.NeedResort()) { this->SetDirty(); } } @@ -936,6 +981,7 @@ public: /* abort drag & drop */ this->vehicle_sel = INVALID_VEHICLE; this->DirtyHighlightedGroupWidget(); + this->group_sel = INVALID_GROUP; this->group_over = INVALID_GROUP; this->SetWidgetDirty(WID_GL_LIST_VEHICLE); } @@ -1021,7 +1067,7 @@ public: } this->group_sb->ScrollTowards(id_g); } - this->vehicles.ForceRebuild(); + this->vehgroups.ForceRebuild(); this->SetDirty(); } diff --git a/src/gui.h b/src/gui.h index 16d06ecefa..55d32829c1 100644 --- a/src/gui.h +++ b/src/gui.h @@ -20,7 +20,6 @@ struct Window; /* main_gui.cpp */ -void HandleOnEditText(const char *str); void InitializeGUI(); /* settings_gui.cpp */ @@ -37,10 +36,6 @@ Window *ShowBuildDocksScenToolbar(); /* airport_gui.cpp */ Window *ShowBuildAirToolbar(); -/* commands_gui.cpp */ -void ShowCommandsToolbar(); -void ShowLoginWindow(); - /* tgp_gui.cpp */ void ShowGenerateLandscape(); void ShowHeightmapLoad(); @@ -59,8 +54,8 @@ void ShowStoryBook(CompanyID company, uint16 page_id = INVALID_STORY_PAGE); void ShowEstimatedCostOrIncome(Money cost, int x, int y); -void ShowExtraViewPortWindow(TileIndex tile = INVALID_TILE); -void ShowExtraViewPortWindowForTileUnderCursor(); +void ShowExtraViewportWindow(TileIndex tile = INVALID_TILE); +void ShowExtraViewportWindowForTileUnderCursor(); /* bridge_gui.cpp */ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transport_type, byte bridge_type); diff --git a/src/heightmap.cpp b/src/heightmap.cpp index ef95dc9770..c09e39fccb 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -368,7 +368,7 @@ static void GrayscaleToMapHeights(uint img_width, uint img_height, byte *map) /* 0 is sea level. * Other grey scales are scaled evenly to the available height levels > 0. * (The coastline is independent from the number of height levels) */ - heightmap_height = 1 + (heightmap_height - 1) * _settings_game.construction.max_heightlevel / 255; + heightmap_height = 1 + (heightmap_height - 1) * _settings_game.game_creation.heightmap_height / 255; } SetTileHeight(tile, heightmap_height); diff --git a/src/highscore.cpp b/src/highscore.cpp index d8fe348fe0..4c5b6b1aa2 100644 --- a/src/highscore.cpp +++ b/src/highscore.cpp @@ -20,7 +20,7 @@ #include "safeguards.h" HighScore _highscore_table[SP_HIGHSCORE_END][5]; ///< various difficulty-settings; top 5 -char *_highscore_file; ///< The file to store the highscore data in. +std::string _highscore_file; ///< The file to store the highscore data in. static const StringID _endgame_perf_titles[] = { STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN, @@ -43,7 +43,7 @@ static const StringID _endgame_perf_titles[] = { StringID EndGameGetPerformanceTitleFromValue(uint value) { - value = minu(value / 64, lengthof(_endgame_perf_titles) - 1); + value = std::min(value / 64, lengthof(_endgame_perf_titles) - 1); return _endgame_perf_titles[value]; } @@ -123,7 +123,7 @@ int8 SaveHighScoreValueNetwork() /** Save HighScore table to file */ void SaveToHighScore() { - FILE *fp = fopen(_highscore_file, "wb"); + FILE *fp = fopen(_highscore_file.c_str(), "wb"); if (fp != nullptr) { uint i; @@ -132,7 +132,7 @@ void SaveToHighScore() for (i = 0; i < SP_SAVED_HIGHSCORE_END; i++) { for (hs = _highscore_table[i]; hs != endof(_highscore_table[i]); hs++) { /* First character is a command character, so strlen will fail on that */ - byte length = min(sizeof(hs->company), StrEmpty(hs->company) ? 0 : (int)strlen(&hs->company[1]) + 1); + byte length = std::min(sizeof(hs->company), StrEmpty(hs->company) ? 0 : strlen(&hs->company[1]) + 1); if (fwrite(&length, sizeof(length), 1, fp) != 1 || // write away string length fwrite(hs->company, length, 1, fp) > 1 || // Yes... could be 0 bytes too @@ -151,7 +151,7 @@ void SaveToHighScore() /** Initialize the highscore table to 0 and if any file exists, load in values */ void LoadFromHighScore() { - FILE *fp = fopen(_highscore_file, "rb"); + FILE *fp = fopen(_highscore_file.c_str(), "rb"); memset(_highscore_table, 0, sizeof(_highscore_table)); @@ -163,7 +163,7 @@ void LoadFromHighScore() for (hs = _highscore_table[i]; hs != endof(_highscore_table[i]); hs++) { byte length; if (fread(&length, sizeof(length), 1, fp) != 1 || - fread(hs->company, min(lengthof(hs->company), length), 1, fp) > 1 || // Yes... could be 0 bytes too + fread(hs->company, std::min(lengthof(hs->company), length), 1, fp) > 1 || // Yes... could be 0 bytes too fread(&hs->score, sizeof(hs->score), 1, fp) != 1 || fseek(fp, 2, SEEK_CUR) == -1) { // XXX - placeholder for hs->title, not saved anymore; compatibility DEBUG(misc, 1, "Highscore corrupted"); diff --git a/src/highscore_gui.cpp b/src/highscore_gui.cpp index 68b823966f..b1c428a768 100644 --- a/src/highscore_gui.cpp +++ b/src/highscore_gui.cpp @@ -58,7 +58,7 @@ struct EndGameHighScoreBaseWindow : Window { /** Return the coordinate of the screen such that a window of 640x480 is centered at the screen. */ Point GetTopLeft(int x, int y) { - Point pt = {max(0, (_screen.width / 2) - (x / 2)), max(0, (_screen.height / 2) - (y / 2))}; + Point pt = {std::max(0, (_screen.width / 2) - (x / 2)), std::max(0, (_screen.height / 2) - (y / 2))}; return pt; } @@ -113,7 +113,7 @@ struct EndGameWindow : EndGameHighScoreBaseWindow { this->window_number = SP_MULTIPLAYER; this->rank = SaveHighScoreValueNetwork(); } else { - /* in single player _local company is always valid */ + /* in singleplayer mode _local company is always valid */ const Company *c = Company::Get(_local_company); this->window_number = SP_CUSTOM; this->rank = SaveHighScoreValue(c); @@ -183,7 +183,7 @@ struct HighScoreWindow : EndGameHighScoreBaseWindow { this->SetupHighScoreEndWindow(); Point pt = this->GetTopLeft(ScaleGUITrad(640), ScaleGUITrad(480)); - SetDParam(0, ORIGINAL_END_YEAR); + SetDParam(0, _settings_game.game_creation.ending_year); DrawStringMultiLine(pt.x + ScaleGUITrad(70), pt.x + ScaleGUITrad(570), pt.y, pt.y + ScaleGUITrad(140), !_networking ? STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED : STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME, TC_FROMSTRING, SA_CENTER); /* Draw Highscore peepz */ diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 298551d559..0dd4d5f087 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -16,7 +16,7 @@ #include "safeguards.h" -char *_hotkeys_file; +std::string _hotkeys_file; /** * List of all HotkeyLists. @@ -67,17 +67,27 @@ static const KeycodeNames _keycode_to_name[] = { {"NUM_PLUS", WKC_NUM_PLUS}, {"NUM_ENTER", WKC_NUM_ENTER}, {"NUM_DOT", WKC_NUM_DECIMAL}, - {"/", WKC_SLASH}, - {";", WKC_SEMICOLON}, - {"=", WKC_EQUALS}, - {"[", WKC_L_BRACKET}, - {"\\", WKC_BACKSLASH}, - {"]", WKC_R_BRACKET}, - {"'", WKC_SINGLEQUOTE}, + {"SLASH", WKC_SLASH}, + {"/", WKC_SLASH}, /* deprecated, use SLASH */ + {"SEMICOLON", WKC_SEMICOLON}, + {";", WKC_SEMICOLON}, /* deprecated, use SEMICOLON */ + {"EQUALS", WKC_EQUALS}, + {"=", WKC_EQUALS}, /* deprecated, use EQUALS */ + {"L_BRACKET", WKC_L_BRACKET}, + {"[", WKC_L_BRACKET}, /* deprecated, use L_BRACKET */ + {"BACKSLASH", WKC_BACKSLASH}, + {"\\", WKC_BACKSLASH}, /* deprecated, use BACKSLASH */ + {"R_BRACKET", WKC_R_BRACKET}, + {"]", WKC_R_BRACKET}, /* deprecated, use R_BRACKET */ + {"SINGLEQUOTE", WKC_SINGLEQUOTE}, + {"'", WKC_SINGLEQUOTE}, /* deprecated, use SINGLEQUOTE */ {"COMMA", WKC_COMMA}, - {".", WKC_PERIOD}, - {"-", WKC_MINUS}, + {"PERIOD", WKC_PERIOD}, + {".", WKC_PERIOD}, /* deprecated, use PERIOD */ + {"MINUS", WKC_MINUS}, + {"-", WKC_MINUS}, /* deprecated, use MINUS */ + /* CityMania additions */ {"TAB", WKC_TAB}, {"L_BRACE", WKC_L_BRACE}, {"R_BRACE", WKC_R_BRACE}, @@ -326,7 +336,7 @@ void HotkeyList::Load(IniFile *ini) IniItem *item = group->GetItem(hotkey->name, false); if (item != nullptr) { hotkey->keycodes.clear(); - if (item->value != nullptr) ParseHotkeys(hotkey, item->value); + if (item->value.has_value()) ParseHotkeys(hotkey, item->value->c_str()); } } } diff --git a/src/house.h b/src/house.h index 7d3b8dc5e8..f381fc1e0b 100644 --- a/src/house.h +++ b/src/house.h @@ -64,7 +64,7 @@ enum HouseZonesBits { HZB_TOWN_CENTRE, HZB_END, }; -assert_compile(HZB_END == 5); +static_assert(HZB_END == 5); DECLARE_POSTFIX_INCREMENT(HouseZonesBits) diff --git a/src/industry.h b/src/industry.h index e82033dd13..ce30114cb8 100644 --- a/src/industry.h +++ b/src/industry.h @@ -10,7 +10,6 @@ #ifndef INDUSTRY_H #define INDUSTRY_H -#include #include "newgrf_storage.h" #include "subsidy_type.h" #include "industry_map.h" @@ -34,6 +33,33 @@ enum ProductionLevels { PRODLEVEL_MAXIMUM = 0x80, ///< the industry is running at full speed }; +enum class IndustryAction : byte { + SetControlFlags = 0, ///< Set IndustryControlFlags + SetExclusiveSupplier = 1, ///< Set exclusive supplier + SetExclusiveConsumer = 2, ///< Set exclusive consumer + SetText = 3, ///< Set additional text +}; + +/** + * Flags to control/override the behaviour of an industry. + * These flags are controlled by game scripts. + */ +enum IndustryControlFlags : byte { + /** No flags in effect */ + INDCTL_NONE = 0, + /** When industry production change is evaluated, rolls to decrease are ignored. */ + INDCTL_NO_PRODUCTION_DECREASE = 1 << 0, + /** When industry production change is evaluated, rolls to increase are ignored. */ + INDCTL_NO_PRODUCTION_INCREASE = 1 << 1, + /** + * Industry can not close regardless of production level or time since last delivery. + * This does not prevent a closure already announced. */ + INDCTL_NO_CLOSURE = 1 << 2, + /** Mask of all flags set */ + INDCTL_MASK = INDCTL_NO_PRODUCTION_DECREASE | INDCTL_NO_PRODUCTION_INCREASE | INDCTL_NO_CLOSURE, +}; +DECLARE_ENUM_AS_BIT_SET(IndustryControlFlags); + /** * Defines the internal data of a functional industry. */ @@ -59,6 +85,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { byte random_colour; ///< randomized colour of the industry, for display purpose Year last_prod_year; ///< last year of production byte was_cargo_delivered; ///< flag that indicate this has been the closest industry chosen for cargo delivery by a station. see DeliverGoodsToIndustry + IndustryControlFlags ctlflags; ///< flags overriding standard behaviours PartOfSubsidy part_of_subsidy; ///< NOSAVE: is this industry a source/destination of a subsidy? StationList stations_near; ///< NOSAVE: List of nearby stations. @@ -69,6 +96,9 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { uint8 construction_type; ///< Way the industry was constructed (@see IndustryConstructionType) Date last_cargo_accepted_at[INDUSTRY_NUM_INPUTS]; ///< Last day each cargo type was accepted by this industry byte selected_layout; ///< Which tile layout was used when creating the industry + Owner exclusive_supplier; ///< Which company has exclusive rights to deliver cargo (INVALID_OWNER = anyone) + Owner exclusive_consumer; ///< Which company has exclusive rights to take cargo (INVALID_OWNER = anyone) + std::string text; ///< General text with additional information. uint16 random; ///< Random value used for randomisation of all kinds of things diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index b978bf4073..70dfefc5a9 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -17,6 +17,7 @@ #include "town.h" #include "news_func.h" #include "cheat_type.h" +#include "company_base.h" #include "genworld.h" #include "tree_map.h" #include "newgrf_cargo.h" @@ -39,11 +40,15 @@ #include "object_base.h" #include "game/game.hpp" #include "error.h" +#include "cmd_helper.h" +#include "string_func.h" #include "table/strings.h" #include "table/industry_land.h" #include "table/build_industry.h" +#include "citymania/cm_highlight.hpp" + #include "safeguards.h" IndustryPool _industry_pool("Industry"); @@ -196,6 +201,7 @@ Industry::~Industry() for (Station *st : this->stations_near) { st->industries_near.erase(this); } + citymania::UpdateIndustryHighlight(); } /** @@ -530,7 +536,7 @@ static bool TransportIndustryGoods(TileIndex tile) bool moved_cargo = false; for (uint j = 0; j < lengthof(i->produced_cargo_waiting); j++) { - uint cw = min(i->produced_cargo_waiting[j], 255); + uint cw = std::min(i->produced_cargo_waiting[j], 255u); if (cw > indspec->minimal_cargo && i->produced_cargo[j] != CT_INVALID) { i->produced_cargo_waiting[j] -= cw; @@ -539,7 +545,7 @@ static bool TransportIndustryGoods(TileIndex tile) i->this_month_production[j] += cw; - uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, &i->stations_near); + uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, &i->stations_near, i->exclusive_consumer); i->this_month_transported[j] += am; moved_cargo |= (am != 0); @@ -566,8 +572,8 @@ static void AnimateTile_Industry(TileIndex tile) if (_settings_client.sound.ambient) { switch (m & 7) { - case 2: SndPlayTileFx(SND_2D_RIP_2, tile); break; - case 6: SndPlayTileFx(SND_29_RIP, tile); break; + case 2: SndPlayTileFx(SND_2D_SUGAR_MINE_1, tile); break; + case 6: SndPlayTileFx(SND_29_SUGAR_MINE_2, tile); break; } } @@ -586,7 +592,7 @@ static void AnimateTile_Industry(TileIndex tile) byte m = GetAnimationFrame(tile); if (_industry_anim_offs_toffee[m] == 0xFF && _settings_client.sound.ambient) { - SndPlayTileFx(SND_30_CARTOON_SOUND, tile); + SndPlayTileFx(SND_30_TOFFEE_QUARRY, tile); } if (++m >= 70) { @@ -632,9 +638,9 @@ static void AnimateTile_Industry(TileIndex tile) byte m = GetAnimationFrame(tile) + 1; switch (m) { - case 1: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2C_MACHINERY, tile); break; - case 23: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2B_COMEDY_HIT, tile); break; - case 28: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2A_EXTRACT_AND_POP, tile); break; + case 1: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2C_TOY_FACTORY_1, tile); break; + case 23: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2B_TOY_FACTORY_2, tile); break; + case 28: if (_settings_client.sound.ambient) SndPlayTileFx(SND_2A_TOY_FACTORY_3, tile); break; default: if (m >= 50) { int n = GetIndustryAnimationLoop(tile) + 1; @@ -697,7 +703,7 @@ static void AnimateTile_Industry(TileIndex tile) byte m = GetAnimationFrame(tile); if (!(m & 0x40)) { SetAnimationFrame(tile, m | 0x40); - if (_settings_client.sound.ambient) SndPlayTileFx(SND_0B_MINING_MACHINERY, tile); + if (_settings_client.sound.ambient) SndPlayTileFx(SND_0B_MINE, tile); } if (state & 7) return; } else { @@ -798,7 +804,7 @@ static void TileLoopIndustry_BubbleGenerator(TileIndex tile) { 49, 59, 60, 65 }, }; - if (_settings_client.sound.ambient) SndPlayTileFx(SND_2E_EXTRACT_AND_POP, tile); + if (_settings_client.sound.ambient) SndPlayTileFx(SND_2E_BUBBLE_GENERATOR, tile); int dir = Random() & 3; @@ -896,7 +902,7 @@ static void TileLoop_Industry(TileIndex tile) case GFX_POWERPLANT_SPARKS: if (Chance16(1, 3)) { - if (_settings_client.sound.ambient) SndPlayTileFx(SND_0C_ELECTRIC_SPARK, tile); + if (_settings_client.sound.ambient) SndPlayTileFx(SND_0C_POWER_STATION, tile); AddAnimatedTile(tile); } break; @@ -946,6 +952,9 @@ static void ChangeTileOwner_Industry(TileIndex tile, Owner old_owner, Owner new_ /* If the founder merges, the industry was created by the merged company */ Industry *i = Industry::GetByTile(tile); if (i->founder == old_owner) i->founder = (new_owner == INVALID_OWNER) ? OWNER_NONE : new_owner; + + if (i->exclusive_supplier == old_owner) i->exclusive_supplier = new_owner; + if (i->exclusive_consumer == old_owner) i->exclusive_consumer = new_owner; } /** @@ -1028,7 +1037,7 @@ static void PlantFarmField(TileIndex tile, IndustryID industry) uint size_x = GB(r, 0, 8); uint size_y = GB(r, 8, 8); - TileArea ta(tile - TileDiffXY(min(TileX(tile), size_x / 2), min(TileY(tile), size_y / 2)), size_x, size_y); + TileArea ta(tile - TileDiffXY(std::min(TileX(tile), size_x / 2), std::min(TileY(tile), size_y / 2)), size_x, size_y); ta.ClampToMap(); if (ta.w == 0 || ta.h == 0) return; @@ -1092,7 +1101,7 @@ static bool SearchLumberMillTrees(TileIndex tile, void *user_data) _industry_sound_ctr = 1; _industry_sound_tile = tile; - if (_settings_client.sound.ambient) SndPlayTileFx(SND_38_CHAINSAW, tile); + if (_settings_client.sound.ambient) SndPlayTileFx(SND_38_LUMBER_MILL_1, tile); DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR); @@ -1117,7 +1126,7 @@ static void ChopLumberMillTrees(Industry *i) TileIndex tile = i->location.tile; if (CircularTileSearch(&tile, 40, SearchLumberMillTrees, nullptr)) { // 40x40 tiles to search. - i->produced_cargo_waiting[0] = min(0xffff, i->produced_cargo_waiting[0] + 45); // Found a tree, add according value to waiting cargo. + i->produced_cargo_waiting[0] = std::min(0xffff, i->produced_cargo_waiting[0] + 45); // Found a tree, add according value to waiting cargo. } } @@ -1149,7 +1158,7 @@ static void ProduceIndustryGoods(Industry *i) IndustryBehaviour indbehav = indsp->behaviour; for (size_t j = 0; j < lengthof(i->produced_cargo_waiting); j++) { - i->produced_cargo_waiting[j] = min(0xffff, i->produced_cargo_waiting[j] + i->production_rate[j]); + i->produced_cargo_waiting[j] = std::min(0xffff, i->produced_cargo_waiting[j] + i->production_rate[j]); } if ((indbehav & INDUSTRYBEH_PLANT_FIELDS) != 0) { @@ -1194,10 +1203,10 @@ void OnTick_Industry() _industry_sound_ctr++; if (_industry_sound_ctr == 75) { - if (_settings_client.sound.ambient) SndPlayTileFx(SND_37_BALLOON_SQUEAK, _industry_sound_tile); + if (_settings_client.sound.ambient) SndPlayTileFx(SND_37_LUMBER_MILL_2, _industry_sound_tile); } else if (_industry_sound_ctr == 160) { _industry_sound_ctr = 0; - if (_settings_client.sound.ambient) SndPlayTileFx(SND_36_CARTOON_CRASH, _industry_sound_tile); + if (_settings_client.sound.ambient) SndPlayTileFx(SND_36_LUMBER_MILL_3, _industry_sound_tile); } } @@ -1736,10 +1745,10 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, MemSetT(i->incoming_cargo_waiting, 0, lengthof(i->incoming_cargo_waiting)); MemSetT(i->last_cargo_accepted_at, 0, lengthof(i->last_cargo_accepted_at)); - /* don't use smooth economy for industries using production related callbacks */ - if (indspec->UsesSmoothEconomy()) { + /* Randomize inital production if non-original economy is used and there are no production related callbacks. */ + if (!indspec->UsesOriginalEconomy()) { for (size_t ci = 0; ci < lengthof(i->production_rate); ci++) { - i->production_rate[ci] = min((RandomRange(256) + 128) * i->production_rate[ci] >> 8, 255); + i->production_rate[ci] = std::min((RandomRange(256) + 128) * i->production_rate[ci] >> 8, 255u); } } @@ -1753,6 +1762,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, i->was_cargo_delivered = false; i->last_prod_year = _cur_year; i->founder = founder; + i->ctlflags = INDCTL_NONE; i->construction_date = _date; i->construction_type = (_game_mode == GM_EDITOR) ? ICT_SCENARIO_EDITOR : @@ -1763,6 +1773,9 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, * else, chosen layout + 1 */ i->selected_layout = (byte)(layout_index + 1); + i->exclusive_supplier = INVALID_OWNER; + i->exclusive_consumer = INVALID_OWNER; + i->prod_level = PRODLEVEL_DEFAULT; /* Call callbacks after the regular fields got initialised. */ @@ -1895,6 +1908,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, IDIWD_FORCE_REBUILD); if (!_generating_world) PopulateStationsNearby(i); + citymania::UpdateIndustryHighlight(); } /** @@ -2083,6 +2097,70 @@ CommandCost CmdBuildIndustry(TileIndex tile, DoCommandFlag flags, uint32 p1, uin return CommandCost(EXPENSES_OTHER, indspec->GetConstructionCost()); } +/** + * Change industry properties + * @param tile Unused. + * @param flags Type of operation. + * @param p1 IndustryID + * @param p2 various bitstuffed elements + * - p2 = (bit 0 - 7) - IndustryAction to perform + * - p2 = (bit 8 - 15) - IndustryControlFlags + * (only used with set control flags) + * - p2 = (bit 16 - 23) - CompanyID to set or INVALID_OWNER (available to everyone) or + * OWNER_NONE (neutral stations only) or OWNER_DEITY (no one) + * (only used with set exclusive supplier / consumer) + * @param text - Additional industry text (only used with set text action) + * @return Empty cost or an error. + */ +CommandCost CmdIndustryCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) +{ + if (_current_company != OWNER_DEITY) return CMD_ERROR; + + Industry *ind = Industry::GetIfValid(p1); + if (ind == nullptr) return CMD_ERROR; + + auto action = static_cast(GB(p2, 0, 8)); + + switch (action) { + case IndustryAction::SetControlFlags: { + IndustryControlFlags ctlflags = (IndustryControlFlags)GB(p2, 8, 8) & INDCTL_MASK; + + if (flags & DC_EXEC) ind->ctlflags = ctlflags; + + break; + } + + case IndustryAction::SetExclusiveSupplier: + case IndustryAction::SetExclusiveConsumer: { + Owner company_id = (Owner)GB(p2, 16, 8); + + if (company_id != OWNER_NONE && company_id != INVALID_OWNER && company_id != OWNER_DEITY + && !Company::IsValidID(company_id)) return CMD_ERROR; + + if (flags & DC_EXEC) { + if (action == IndustryAction::SetExclusiveSupplier) { + ind->exclusive_supplier = company_id; + } else { + ind->exclusive_consumer = company_id; + } + } + + break; + } + + case IndustryAction::SetText: { + ind->text.clear(); + if (!StrEmpty(text)) ind->text = text; + InvalidateWindowData(WC_INDUSTRY_VIEW, ind->index); + break; + } + + default: + NOT_REACHED(); + } + + return CommandCost(); +} /** * Create a new industry of random layout. @@ -2100,6 +2178,7 @@ static Industry *CreateNewIndustry(TileIndex tile, IndustryType type, IndustryAv Industry *i = nullptr; size_t layout_index = RandomRange((uint32)indspec->layouts.size()); CommandCost ret = CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, layout_index, seed, GB(seed2, 0, 16), OWNER_NONE, creation_type, &i); + (void)ret; // assert only assert(i != nullptr || ret.Failed()); return i; } @@ -2113,13 +2192,14 @@ static Industry *CreateNewIndustry(TileIndex tile, IndustryType type, IndustryAv static uint32 GetScaledIndustryGenerationProbability(IndustryType it, bool *force_at_least_one) { const IndustrySpec *ind_spc = GetIndustrySpec(it); - uint32 chance = ind_spc->appear_creation[_settings_game.game_creation.landscape] * 16; // * 16 to increase precision + uint32 chance = ind_spc->appear_creation[_settings_game.game_creation.landscape]; if (!ind_spc->enabled || ind_spc->layouts.empty() || (_game_mode != GM_EDITOR && _settings_game.difficulty.industry_density == ID_FUND_ONLY) || (chance = GetIndustryProbabilityCallback(it, IACT_MAPGENERATION, chance)) == 0) { *force_at_least_one = false; return 0; } else { + chance *= 16; // to increase precision /* We want industries appearing at coast to appear less often on bigger maps, as length of coast increases slower than map area. * For simplicity we scale in both cases, though scaling the probabilities of all industries has no effect. */ chance = (ind_spc->check_proc == CHECK_REFINERY || ind_spc->check_proc == CHECK_OIL_RIG) ? ScaleByMapSize1D(chance) : ScaleByMapSize(chance); @@ -2173,7 +2253,7 @@ static uint GetNumberOfIndustries() assert(lengthof(numof_industry_table) == ID_END); uint difficulty = (_game_mode != GM_EDITOR) ? _settings_game.difficulty.industry_density : (uint)ID_VERY_LOW; - return min(IndustryPool::MAX_SIZE, ScaleByMapSize(numof_industry_table[difficulty])); + return std::min(IndustryPool::MAX_SIZE, ScaleByMapSize(numof_industry_table[difficulty])); } /** @@ -2249,7 +2329,7 @@ void IndustryBuildData::MonthlyLoop() /* To prevent running out of unused industries for the player to connect, * add a fraction of new industries each month, but only if the manager can keep up. */ - uint max_behind = 1 + min(99u, ScaleByMapSize(3)); // At most 2 industries for small maps, and 100 at the biggest map (about 6 months industry build attempts). + uint max_behind = 1 + std::min(99u, ScaleByMapSize(3)); // At most 2 industries for small maps, and 100 at the biggest map (about 6 months industry build attempts). if (GetCurrentTotalNumberOfIndustries() + max_behind >= (this->wanted_inds >> 16)) { this->wanted_inds += ScaleByMapSize(NEWINDS_PER_MONTH); } @@ -2317,7 +2397,7 @@ static void UpdateIndustryStatistics(Industry *i) byte pct = 0; if (i->this_month_production[j] != 0) { i->last_prod_year = _cur_year; - pct = min(i->this_month_transported[j] * 256 / i->this_month_production[j], 255); + pct = std::min(i->this_month_transported[j] * 256 / i->this_month_production[j], 255); } i->last_month_pct_transported[j] = pct; @@ -2337,11 +2417,11 @@ static void UpdateIndustryStatistics(Industry *i) void Industry::RecomputeProductionMultipliers() { const IndustrySpec *indspec = GetIndustrySpec(this->type); - assert(!indspec->UsesSmoothEconomy()); + assert(indspec->UsesOriginalEconomy()); /* Rates are rounded up, so e.g. oilrig always produces some passengers */ for (size_t i = 0; i < lengthof(this->production_rate); i++) { - this->production_rate[i] = min(CeilDiv(indspec->production_rate[i] * this->prod_level, PRODLEVEL_DEFAULT), 0xFF); + this->production_rate[i] = std::min(CeilDiv(indspec->production_rate[i] * this->prod_level, PRODLEVEL_DEFAULT), 0xFFu); } } @@ -2474,10 +2554,10 @@ void IndustryBuildData::TryBuildNewIndustry() const Industry *ind = PlaceIndustry(it, IACT_RANDOMCREATION, false); if (ind == nullptr) { this->builddata[it].wait_count = this->builddata[it].max_wait + 1; // Compensate for decrementing below. - this->builddata[it].max_wait = min(1000, this->builddata[it].max_wait + 2); + this->builddata[it].max_wait = std::min(1000, this->builddata[it].max_wait + 2); } else { AdvertiseIndustryOpening(ind); - this->builddata[it].max_wait = max(this->builddata[it].max_wait / 2, 1); // Reduce waiting time of the industry type. + this->builddata[it].max_wait = std::max(this->builddata[it].max_wait / 2, 1); // Reduce waiting time of the industry type. } } @@ -2574,8 +2654,7 @@ static int WhoCanServiceIndustry(Industry *ind) * We cannot check the first of shared orders only, since the first vehicle in such a chain * may have a different cargo type. */ - const Order *o; - FOR_VEHICLE_ORDERS(v, o) { + for (const Order *o : v->Orders()) { if (o->IsType(OT_GOTO_STATION) && !(o->GetUnloadType() & OUFB_TRANSFER)) { /* Vehicle visits a station to load or unload */ Station *st = Station::Get(o->GetDestination()); @@ -2637,8 +2716,8 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) bool standard = false; bool suppress_message = false; bool recalculate_multipliers = false; ///< reinitialize production_rate to match prod_level - /* don't use smooth economy for industries using production related callbacks */ - bool smooth_economy = indspec->UsesSmoothEconomy(); + /* use original economy for industries using production related callbacks */ + bool original_economy = indspec->UsesOriginalEconomy(); byte div = 0; byte mul = 0; int8 increment = 0; @@ -2673,7 +2752,8 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) } } } else { - if (monthly != smooth_economy) return; + if (monthly == original_economy) return; + if (!original_economy && _settings_game.economy.type == ET_FROZEN) return; if (indspec->life_type == INDUSTRYLIFE_BLACK_HOLE) return; } @@ -2681,8 +2761,17 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) /* decrease or increase */ bool only_decrease = (indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) && _settings_game.game_creation.landscape == LT_TEMPERATE; - if (smooth_economy) { - closeit = true; + if (original_economy) { + if (only_decrease || Chance16(1, 3)) { + /* If more than 60% transported, 66% chance of increase, else 33% chance of increase */ + if (!only_decrease && (i->last_month_pct_transported[0] > PERCENT_TRANSPORTED_60) != Chance16(1, 3)) { + mul = 1; // Increase production + } else { + div = 1; // Decrease production + } + } + } else if (_settings_game.economy.type == ET_SMOOTH) { + closeit = !(i->ctlflags & (INDCTL_NO_CLOSURE | INDCTL_NO_PRODUCTION_DECREASE)); for (byte j = 0; j < lengthof(i->produced_cargo); j++) { if (i->produced_cargo[j] == CT_INVALID) continue; uint32 r = Random(); @@ -2705,16 +2794,19 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) /* 4.5% chance for 3-23% (or 1 unit for very low productions) production change, * determined by mult value. If mult = 1 prod. increases, else (-1) it decreases. */ if (Chance16I(1, 22, r >> 16)) { - new_prod += mult * (max(((RandomRange(50) + 10) * old_prod) >> 8, 1U)); + new_prod += mult * (std::max(((RandomRange(50) + 10) * old_prod) >> 8, 1U)); } /* Prevent production to overflow or Oil Rig passengers to be over-"produced" */ new_prod = Clamp(new_prod, 1, 255); - - if (((indspec->behaviour & INDUSTRYBEH_BUILT_ONWATER) != 0) && j == 1) { + if (i->produced_cargo[j] == CT_PASSENGERS && !(indspec->behaviour & INDUSTRYBEH_NO_PAX_PROD_CLAMP)) { new_prod = Clamp(new_prod, 0, 16); } + /* If override flags are set, prevent actually changing production if any was decided on */ + if ((i->ctlflags & INDCTL_NO_PRODUCTION_DECREASE) && new_prod < old_prod) continue; + if ((i->ctlflags & INDCTL_NO_PRODUCTION_INCREASE) && new_prod > old_prod) continue; + /* Do not stop closing the industry when it has the lowest possible production rate */ if (new_prod == old_prod && old_prod > 1) { closeit = false; @@ -2731,27 +2823,22 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) ReportNewsProductionChangeIndustry(i, i->produced_cargo[j], percent); } } - } else { - if (only_decrease || Chance16(1, 3)) { - /* If more than 60% transported, 66% chance of increase, else 33% chance of increase */ - if (!only_decrease && (i->last_month_pct_transported[0] > PERCENT_TRANSPORTED_60) != Chance16(1, 3)) { - mul = 1; // Increase production - } else { - div = 1; // Decrease production - } - } } } + /* If override flags are set, prevent actually changing production if any was decided on */ + if ((i->ctlflags & INDCTL_NO_PRODUCTION_DECREASE) && (div > 0 || increment < 0)) return; + if ((i->ctlflags & INDCTL_NO_PRODUCTION_INCREASE) && (mul > 0 || increment > 0)) return; + if (!callback_enabled && (indspec->life_type & INDUSTRYLIFE_PROCESSING)) { - if ( (byte)(_cur_year - i->last_prod_year) >= 5 && Chance16(1, smooth_economy ? 180 : 2)) { + if ( (byte)(_cur_year - i->last_prod_year) >= 5 && Chance16(1, original_economy ? 2 : 180)) { closeit = true; } } /* Increase if needed */ while (mul-- != 0 && i->prod_level < PRODLEVEL_MAXIMUM) { - i->prod_level = min(i->prod_level * 2, PRODLEVEL_MAXIMUM); + i->prod_level = std::min(i->prod_level * 2, PRODLEVEL_MAXIMUM); recalculate_multipliers = true; if (str == STR_NULL) str = indspec->production_up_text; } @@ -2760,8 +2847,9 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) while (div-- != 0 && !closeit) { if (i->prod_level == PRODLEVEL_MINIMUM) { closeit = true; + break; } else { - i->prod_level = max(i->prod_level / 2, (int)PRODLEVEL_MINIMUM); // typecast to int required to please MSVC + i->prod_level = std::max(i->prod_level / 2, PRODLEVEL_MINIMUM); recalculate_multipliers = true; if (str == STR_NULL) str = indspec->production_down_text; } @@ -2782,7 +2870,7 @@ static void ChangeIndustryProduction(Industry *i, bool monthly) if (recalculate_multipliers) i->RecomputeProductionMultipliers(); /* Close if needed and allowed */ - if (closeit && !CheckIndustryCloseDownProtection(i->type)) { + if (closeit && !CheckIndustryCloseDownProtection(i->type) && !(i->ctlflags & INDCTL_NO_CLOSURE)) { i->prod_level = PRODLEVEL_CLOSURE; SetWindowDirty(WC_INDUSTRY_VIEW, i->index); str = indspec->closure_text; @@ -2853,7 +2941,7 @@ void IndustryDailyLoop() uint perc = 3; // Between 3% and 9% chance of creating a new industry. if ((_industry_builder.wanted_inds >> 16) > GetCurrentTotalNumberOfIndustries()) { - perc = min(9u, perc + (_industry_builder.wanted_inds >> 16) - GetCurrentTotalNumberOfIndustries()); + perc = std::min(9u, perc + (_industry_builder.wanted_inds >> 16) - GetCurrentTotalNumberOfIndustries()); } for (uint16 j = 0; j < change_loop; j++) { if (Chance16(perc, 100)) { @@ -2967,14 +3055,14 @@ Money IndustrySpec::GetRemovalCost() const } /** - * Determines whether this industrytype uses smooth economy or whether it uses standard/newgrf production changes. - * @return true if smooth economy is used. + * Determines whether this industrytype uses standard/newgrf production changes. + * @return true if original economy is used. */ -bool IndustrySpec::UsesSmoothEconomy() const +bool IndustrySpec::UsesOriginalEconomy() const { - return _settings_game.economy.smooth_economy && - !(HasBit(this->callback_mask, CBM_IND_PRODUCTION_256_TICKS) || HasBit(this->callback_mask, CBM_IND_PRODUCTION_CARGO_ARRIVAL)) && // production callbacks - !(HasBit(this->callback_mask, CBM_IND_MONTHLYPROD_CHANGE) || HasBit(this->callback_mask, CBM_IND_PRODUCTION_CHANGE) || HasBit(this->callback_mask, CBM_IND_PROD_CHANGE_BUILD)); // production change callbacks + return _settings_game.economy.type == ET_ORIGINAL || + HasBit(this->callback_mask, CBM_IND_PRODUCTION_256_TICKS) || HasBit(this->callback_mask, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || // production callbacks + HasBit(this->callback_mask, CBM_IND_MONTHLYPROD_CHANGE) || HasBit(this->callback_mask, CBM_IND_PRODUCTION_CHANGE) || HasBit(this->callback_mask, CBM_IND_PROD_CHANGE_BUILD); // production change callbacks } IndustrySpec::~IndustrySpec() diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index e11ba2b917..39bd001299 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -37,6 +37,7 @@ #include "smallmap_gui.h" #include "widgets/dropdown_type.h" #include "widgets/industry_widget.h" +#include "clear_map.h" #include "table/strings.h" #include "hotkeys.h" @@ -45,6 +46,7 @@ #include "citymania/cm_hotkeys.hpp" #include "citymania/cm_highlight.hpp" +#include "citymania/cm_minimap.hpp" #include "safeguards.h" @@ -149,7 +151,7 @@ enum CargoSuffixInOut { template static inline void GetAllCargoSuffixes(CargoSuffixInOut use_input, CargoSuffixType cst, const Industry *ind, IndustryType ind_type, const IndustrySpec *indspec, const TC &cargoes, TS &suffixes) { - assert_compile(lengthof(cargoes) <= lengthof(suffixes)); + static_assert(lengthof(cargoes) <= lengthof(suffixes)); if (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) { /* Reworked behaviour with new many-in-many-out scheme */ @@ -248,6 +250,14 @@ static const NWidgetPart _nested_build_industry_widgets[] = { NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), NWidget(WWT_STICKYBOX, COLOUR_DARK_GREEN), EndContainer(), + NWidget(NWID_SELECTION, COLOUR_DARK_GREEN, WID_DPI_SCENARIO_EDITOR_PANE), + NWidget(NWID_VERTICAL), + NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_DPI_CREATE_RANDOM_INDUSTRIES_WIDGET), SetMinimalSize(0, 12), SetFill(1, 0), SetResize(1, 0), + SetDataTip(STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES, STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_DARK_GREEN, WID_DPI_REMOVE_ALL_INDUSTRIES_WIDGET), SetMinimalSize(0, 12), SetFill(1, 0), SetResize(1, 0), + SetDataTip(STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES, STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP), + EndContainer(), + EndContainer(), NWidget(NWID_HORIZONTAL), NWidget(WWT_MATRIX, COLOUR_DARK_GREEN, WID_DPI_MATRIX_WIDGET), SetMatrixDataTip(1, 0, STR_FUND_INDUSTRY_SELECTION_TOOLTIP), SetFill(1, 0), SetResize(1, 1), SetScrollbar(WID_DPI_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_DARK_GREEN, WID_DPI_SCROLLBAR), @@ -313,12 +323,6 @@ class BuildIndustryWindow : public Window { this->enabled[i] = false; } - if (_game_mode == GM_EDITOR) { // give room for the Many Random "button" - this->index[this->count] = INVALID_INDUSTRYTYPE; - this->enabled[this->count] = true; - this->count++; - this->timer_enabled = false; - } /* Fill the arrays with industries. * The tests performed after the enabled allow to load the industries * In the same way they are inserted by grf (if any) @@ -413,12 +417,9 @@ class BuildIndustryWindow : public Window { public: BuildIndustryWindow(WindowDesc *desc) : Window(desc) { - this->timer_enabled = _loaded_newgrf_features.has_newindustries; - this->selected_index = -1; this->selected_type = INVALID_INDUSTRYTYPE; - this->callback_timer = DAY_TICKS; this->funding_enabled = false; this->CreateNestedTree(); @@ -426,6 +427,13 @@ public: this->FinishInitNested(0); this->SetButtons(); + + /* Show scenario editor tools in editor. */ + if (_game_mode != GM_EDITOR) { + auto *se_tools = this->GetWidget(WID_DPI_SCENARIO_EDITOR_PANE); + se_tools->SetDisplayedPlane(SZSP_HORIZONTAL); + this->ReInit(); + } } ~BuildIndustryWindow() @@ -455,10 +463,11 @@ public: } case WID_DPI_INFOPANEL: { - /* Extra line for cost outside of editor + extra lines for 'extra' information for NewGRFs. */ - int height = 2 + (_game_mode == GM_EDITOR ? 0 : 1) + (_loaded_newgrf_features.has_newindustries ? 4 : 0); + /* Extra line for cost outside of editor. */ + int height = 2 + (_game_mode == GM_EDITOR ? 0 : 1); uint extra_lines_req = 0; uint extra_lines_prd = 0; + uint extra_lines_newgrf = 0; uint max_minwidth = FONT_HEIGHT_NORMAL * MAX_MINWIDTH_LINEHEIGHTS; Dimension d = {0, 0}; for (byte i = 0; i < this->count; i++) { @@ -472,7 +481,7 @@ public: std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); Dimension strdim = GetStringBoundingBox(cargostring.c_str()); if (strdim.width > max_minwidth) { - extra_lines_req = max(extra_lines_req, strdim.width / max_minwidth + 1); + extra_lines_req = std::max(extra_lines_req, strdim.width / max_minwidth + 1); strdim.width = max_minwidth; } d = maxdim(d, strdim); @@ -482,14 +491,19 @@ public: cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); strdim = GetStringBoundingBox(cargostring.c_str()); if (strdim.width > max_minwidth) { - extra_lines_prd = max(extra_lines_prd, strdim.width / max_minwidth + 1); + extra_lines_prd = std::max(extra_lines_prd, strdim.width / max_minwidth + 1); strdim.width = max_minwidth; } d = maxdim(d, strdim); + + if (indsp->grf_prop.grffile != nullptr) { + /* Reserve a few extra lines for text from an industry NewGRF. */ + extra_lines_newgrf = 4; + } } /* Set it to something more sane :) */ - height += extra_lines_prd + extra_lines_req; + height += extra_lines_prd + extra_lines_req + extra_lines_newgrf; size->height = height * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; size->width = d.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; break; @@ -611,9 +625,53 @@ public: } } + static void AskManyRandomIndustriesCallback(Window *w, bool confirmed) + { + if (!confirmed) return; + + if (Town::GetNumItems() == 0) { + ShowErrorMessage(STR_ERROR_CAN_T_GENERATE_INDUSTRIES, STR_ERROR_MUST_FOUND_TOWN_FIRST, WL_INFO); + } else { + extern void GenerateIndustries(); + _generating_world = true; + GenerateIndustries(); + _generating_world = false; + } + } + + static void AskRemoveAllIndustriesCallback(Window *w, bool confirmed) + { + if (!confirmed) return; + + for (Industry *industry : Industry::Iterate()) delete industry; + + /* Clear farmland. */ + for (TileIndex tile = 0; tile < MapSize(); tile++) { + if (IsTileType(tile, MP_CLEAR) && GetRawClearGround(tile) == CLEAR_FIELDS) { + MakeClear(tile, CLEAR_GRASS, 3); + } + } + + MarkWholeScreenDirty(); + } + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { + case WID_DPI_CREATE_RANDOM_INDUSTRIES_WIDGET: { + assert(_game_mode == GM_EDITOR); + this->HandleButtonClick(WID_DPI_CREATE_RANDOM_INDUSTRIES_WIDGET); + ShowQuery(STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION, STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY, nullptr, AskManyRandomIndustriesCallback); + break; + } + + case WID_DPI_REMOVE_ALL_INDUSTRIES_WIDGET: { + assert(_game_mode == GM_EDITOR); + this->HandleButtonClick(WID_DPI_REMOVE_ALL_INDUSTRIES_WIDGET); + ShowQuery(STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION, STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY, nullptr, AskRemoveAllIndustriesCallback); + break; + } + case WID_DPI_MATRIX_WIDGET: { int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_DPI_MATRIX_WIDGET); if (y < this->count) { // Is it within the boundaries of available data? @@ -644,22 +702,13 @@ public: break; case WID_DPI_FUND_WIDGET: { - if (this->selected_type == INVALID_INDUSTRYTYPE) { - this->HandleButtonClick(WID_DPI_FUND_WIDGET); - - if (Town::GetNumItems() == 0) { - ShowErrorMessage(STR_ERROR_CAN_T_GENERATE_INDUSTRIES, STR_ERROR_MUST_FOUND_TOWN_FIRST, WL_INFO); + if (this->selected_type != INVALID_INDUSTRYTYPE) { + if (_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && GetIndustrySpec(this->selected_type)->IsRawIndustry()) { + DoCommandP(0, this->selected_type, InteractiveRandom(), CMD_BUILD_INDUSTRY | CMD_MSG(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY)); + this->HandleButtonClick(WID_DPI_FUND_WIDGET); } else { - extern void GenerateIndustries(); - _generating_world = true; - GenerateIndustries(); - _generating_world = false; + HandlePlacePushButton(this, WID_DPI_FUND_WIDGET, SPR_CURSOR_INDUSTRY, HT_RECT, CM_DDSP_FUND_INDUSTRY); } - } else if (_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && GetIndustrySpec(this->selected_type)->IsRawIndustry()) { - DoCommandP(0, this->selected_type, InteractiveRandom(), CMD_BUILD_INDUSTRY | CMD_MSG(STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY)); - this->HandleButtonClick(WID_DPI_FUND_WIDGET); - } else { - HandlePlacePushButton(this, WID_DPI_FUND_WIDGET, SPR_CURSOR_INDUSTRY, HT_RECT); } break; } @@ -716,25 +765,20 @@ public: if (success && !_settings_client.gui.persistent_buildingtools) ResetObjectToPlace(); } - void OnGameTick() override + void OnHundredthTick() override { - if (!this->timer_enabled) return; - if (--this->callback_timer == 0) { - /* We have just passed another day. - * See if we need to update availability of currently selected industry */ - this->callback_timer = DAY_TICKS; // restart counter + citymania::UpdateIndustryHighlight(); + if (_game_mode == GM_EDITOR) return; + const IndustrySpec *indsp = GetIndustrySpec(this->selected_type); - const IndustrySpec *indsp = GetIndustrySpec(this->selected_type); + if (indsp->enabled) { + bool call_back_result = GetIndustryProbabilityCallback(this->selected_type, IACT_USERCREATION, 1) > 0; - if (indsp->enabled) { - bool call_back_result = GetIndustryProbabilityCallback(this->selected_type, IACT_USERCREATION, 1) > 0; - - /* Only if result does match the previous state would it require a redraw. */ - if (call_back_result != this->enabled[this->selected_index]) { - this->enabled[this->selected_index] = call_back_result; - this->SetButtons(); - this->SetDirty(); - } + /* Only if result does match the previous state would it require a redraw. */ + if (call_back_result != this->enabled[this->selected_index]) { + this->enabled[this->selected_index] = call_back_result; + this->SetButtons(); + this->SetDirty(); } } } @@ -989,6 +1033,13 @@ public: } } } + + if (!i->text.empty()) { + SetDParamStr(0, i->text.c_str()); + y += WD_PAR_VSEP_WIDE; + y = DrawStringMultiLine(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, y, UINT16_MAX, STR_JUST_RAW_STRING, TC_BLACK); + } + return y + WD_FRAMERECT_BOTTOM; } @@ -1042,22 +1093,22 @@ public: case EA_MULTIPLIER: if (button == 1) { if (i->prod_level <= PRODLEVEL_MINIMUM) return; - i->prod_level = max(i->prod_level / 2, PRODLEVEL_MINIMUM); + i->prod_level = std::max(i->prod_level / 2, PRODLEVEL_MINIMUM); } else { if (i->prod_level >= PRODLEVEL_MAXIMUM) return; - i->prod_level = minu(i->prod_level * 2, PRODLEVEL_MAXIMUM); + i->prod_level = std::min(i->prod_level * 2, PRODLEVEL_MAXIMUM); } break; case EA_RATE: if (button == 1) { if (i->production_rate[line - IL_RATE1] <= 0) return; - i->production_rate[line - IL_RATE1] = max(i->production_rate[line - IL_RATE1] / 2, 0); + i->production_rate[line - IL_RATE1] = std::max(i->production_rate[line - IL_RATE1] / 2, 0); } else { if (i->production_rate[line - IL_RATE1] >= 255) return; /* a zero production industry is unlikely to give anything but zero, so push it a little bit */ int new_prod = i->production_rate[line - IL_RATE1] == 0 ? 1 : i->production_rate[line - IL_RATE1] * 2; - i->production_rate[line - IL_RATE1] = minu(new_prod, 255); + i->production_rate[line - IL_RATE1] = std::min(new_prod, 255); } break; @@ -1092,7 +1143,7 @@ public: case WID_IV_GOTO: { Industry *i = Industry::Get(this->window_number); if (citymania::_fn_mod) { - ShowExtraViewPortWindow(i->location.GetCenterTile()); + ShowExtraViewportWindow(i->location.GetCenterTile()); } else { ScrollMainWindowToTile(i->location.GetCenterTile()); } @@ -1156,7 +1207,7 @@ public: const Industry *i = Industry::Get(this->window_number); if (IsProductionAlterable(i)) { const IndustrySpec *ind = GetIndustrySpec(i->type); - this->editable = ind->UsesSmoothEconomy() ? EA_RATE : EA_MULTIPLIER; + this->editable = ind->UsesOriginalEconomy() ? EA_MULTIPLIER : EA_RATE; } else { this->editable = EA_NONE; } @@ -1176,7 +1227,7 @@ public: static void UpdateIndustryProduction(Industry *i) { const IndustrySpec *indspec = GetIndustrySpec(i->type); - if (!indspec->UsesSmoothEconomy()) i->RecomputeProductionMultipliers(); + if (indspec->UsesOriginalEconomy()) i->RecomputeProductionMultipliers(); for (byte j = 0; j < lengthof(i->produced_cargo); j++) { if (i->produced_cargo[j] != CT_INVALID) { @@ -1190,6 +1241,7 @@ static const NWidgetPart _nested_industry_view_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_CREAM), NWidget(WWT_CAPTION, COLOUR_CREAM, WID_IV_CAPTION), SetDataTip(STR_INDUSTRY_VIEW_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_PUSHIMGBTN, COLOUR_CREAM, WID_IV_GOTO), SetMinimalSize(12, 14), SetDataTip(SPR_GOTO_LOCATION, STR_INDUSTRY_VIEW_LOCATION_TOOLTIP), NWidget(WWT_DEBUGBOX, COLOUR_CREAM), NWidget(WWT_SHADEBOX, COLOUR_CREAM), NWidget(WWT_DEFSIZEBOX, COLOUR_CREAM), @@ -1203,7 +1255,6 @@ static const NWidgetPart _nested_industry_view_widgets[] = { NWidget(WWT_PANEL, COLOUR_CREAM, WID_IV_INFO), SetMinimalSize(260, 2), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_PUSHTXTBTN, COLOUR_CREAM, WID_IV_GOTO), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_BUTTON_LOCATION, STR_INDUSTRY_VIEW_LOCATION_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_CREAM, WID_IV_DISPLAY), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_INDUSTRY_DISPLAY_CHAIN, STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP), NWidget(WWT_RESIZEBOX, COLOUR_CREAM), EndContainer(), @@ -1330,14 +1381,14 @@ protected: CargoID cargo_filter[NUM_CARGO + 2]; ///< Available cargo filters; CargoID or CF_ANY or CF_NONE StringID cargo_filter_texts[NUM_CARGO + 3]; ///< Texts for filter_cargo, terminated by INVALID_STRING_ID - CargoID produced_cargo_filter_criteria; ///< Selected produced cargo filter - CargoID accepted_cargo_filter_criteria; ///< Selected accepted cargo filter + byte produced_cargo_filter_criteria; ///< Selected produced cargo filter index + byte accepted_cargo_filter_criteria; ///< Selected accepted cargo filter index /** * Set cargo filter list item index. * @param index The index of the cargo to be set */ - void SetProducedCargoFilterIndex(int index) + void SetProducedCargoFilterIndex(byte index) { if (this->produced_cargo_filter_criteria != index) { this->produced_cargo_filter_criteria = index; @@ -1354,7 +1405,7 @@ protected: * Set cargo filter list item index. * @param index The index of the cargo to be set */ - void SetAcceptedCargoFilterIndex(int index) + void SetAcceptedCargoFilterIndex(byte index) { if (this->accepted_cargo_filter_criteria != index) { this->accepted_cargo_filter_criteria = index; @@ -1372,7 +1423,7 @@ protected: */ void SetCargoFilterArray() { - uint filter_items = 0; + byte filter_items = 0; /* Add item for disabling filtering. */ this->cargo_filter[filter_items] = CF_ANY; @@ -1544,7 +1595,7 @@ protected: } /* Display first 3 cargos */ - for (size_t j = 0; j < min(3, cargos.size()); j++) { + for (size_t j = 0; j < std::min(3, cargos.size()); j++) { CargoInfo ci = cargos[j]; SetDParam(p++, STR_INDUSTRY_DIRECTORY_ITEM_INFO); SetDParam(p++, std::get<0>(ci)); @@ -1703,7 +1754,7 @@ public: uint p = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_ID_INDUSTRY_LIST, WD_FRAMERECT_TOP); if (p < this->industries.size()) { if (citymania::_fn_mod) { - ShowExtraViewPortWindow(this->industries[p]->location.tile); + ShowExtraViewportWindow(this->industries[p]->location.tile); } else { ScrollMainWindowToTile(this->industries[p]->location.tile); } @@ -2277,8 +2328,8 @@ private: } }; -assert_compile(MAX_CARGOES >= cpp_lengthof(IndustrySpec, produced_cargo)); -assert_compile(MAX_CARGOES >= cpp_lengthof(IndustrySpec, accepts_cargo)); +static_assert(MAX_CARGOES >= cpp_lengthof(IndustrySpec, produced_cargo)); +static_assert(MAX_CARGOES >= cpp_lengthof(IndustrySpec, accepts_cargo)); int CargoesField::small_height; ///< Height of the header row. int CargoesField::normal_height; ///< Height of the non-header rows. @@ -2475,10 +2526,10 @@ struct IndustryCargoesWindow : public Window { const IndustrySpec *indsp = GetIndustrySpec(it); if (!indsp->enabled) continue; this->ind_textsize = maxdim(this->ind_textsize, GetStringBoundingBox(indsp->name)); - CargoesField::max_cargoes = max(CargoesField::max_cargoes, std::count_if(indsp->accepts_cargo, endof(indsp->accepts_cargo), IsCargoIDValid)); - CargoesField::max_cargoes = max(CargoesField::max_cargoes, std::count_if(indsp->produced_cargo, endof(indsp->produced_cargo), IsCargoIDValid)); + CargoesField::max_cargoes = std::max(CargoesField::max_cargoes, std::count_if(indsp->accepts_cargo, endof(indsp->accepts_cargo), IsCargoIDValid)); + CargoesField::max_cargoes = std::max(CargoesField::max_cargoes, std::count_if(indsp->produced_cargo, endof(indsp->produced_cargo), IsCargoIDValid)); } - d.width = max(d.width, this->ind_textsize.width); + d.width = std::max(d.width, this->ind_textsize.width); d.height = this->ind_textsize.height; this->ind_textsize = maxdim(this->ind_textsize, GetStringBoundingBox(STR_INDUSTRY_CARGOES_SELECT_INDUSTRY)); @@ -2496,7 +2547,7 @@ struct IndustryCargoesWindow : public Window { d.width += 2 * HOR_TEXT_PADDING; /* Ensure the height is enough for the industry type text, for the horizontal connections, and for the cargo labels. */ uint min_ind_height = CargoesField::VERT_CARGO_EDGE * 2 + CargoesField::max_cargoes * FONT_HEIGHT_NORMAL + (CargoesField::max_cargoes - 1) * CargoesField::VERT_CARGO_SPACE; - d.height = max(d.height + 2 * VERT_TEXT_PADDING, min_ind_height); + d.height = std::max(d.height + 2 * VERT_TEXT_PADDING, min_ind_height); CargoesField::industry_width = d.width; CargoesField::normal_height = d.height + CargoesField::VERT_INTER_INDUSTRY_SPACE; @@ -2513,11 +2564,11 @@ struct IndustryCargoesWindow : public Window { break; case WID_IC_IND_DROPDOWN: - size->width = max(size->width, this->ind_textsize.width + padding.width); + size->width = std::max(size->width, this->ind_textsize.width + padding.width); break; case WID_IC_CARGO_DROPDOWN: - size->width = max(size->width, this->cargo_textsize.width + padding.width); + size->width = std::max(size->width, this->cargo_textsize.width + padding.width); break; } } @@ -2701,8 +2752,7 @@ struct IndustryCargoesWindow : public Window { _displayed_industries.set(it); this->fields.clear(); - /*C++17: CargoesRow &row = */ this->fields.emplace_back(); - CargoesRow &row = this->fields.back(); + CargoesRow &row = this->fields.emplace_back(); row.columns[0].MakeHeader(STR_INDUSTRY_CARGOES_PRODUCERS); row.columns[1].MakeEmpty(CFT_SMALL_EMPTY); row.columns[2].MakeEmpty(CFT_SMALL_EMPTY); @@ -2715,10 +2765,9 @@ struct IndustryCargoesWindow : public Window { /* Make a field consisting of two cargo columns. */ int num_supp = CountMatchingProducingIndustries(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)) + houses_supply; int num_cust = CountMatchingAcceptingIndustries(central_sp->produced_cargo, lengthof(central_sp->produced_cargo)) + houses_accept; - int num_indrows = max(3, max(num_supp, num_cust)); // One is needed for the 'it' industry, and 2 for the cargo labels. + int num_indrows = std::max(3, std::max(num_supp, num_cust)); // One is needed for the 'it' industry, and 2 for the cargo labels. for (int i = 0; i < num_indrows; i++) { - /*C++17: CargoesRow &row = */ this->fields.emplace_back(); - CargoesRow &row = this->fields.back(); + CargoesRow &row = this->fields.emplace_back(); row.columns[0].MakeEmpty(CFT_EMPTY); row.columns[1].MakeCargo(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)); row.columns[2].MakeEmpty(CFT_EMPTY); @@ -2781,8 +2830,7 @@ struct IndustryCargoesWindow : public Window { _displayed_industries.reset(); this->fields.clear(); - /*C++17: CargoesRow &row = */ this->fields.emplace_back(); - CargoesRow &row = this->fields.back(); + CargoesRow &row = this->fields.emplace_back(); row.columns[0].MakeHeader(STR_INDUSTRY_CARGOES_PRODUCERS); row.columns[1].MakeEmpty(CFT_SMALL_EMPTY); row.columns[2].MakeHeader(STR_INDUSTRY_CARGOES_CUSTOMERS); @@ -2793,10 +2841,9 @@ struct IndustryCargoesWindow : public Window { bool houses_accept = HousesCanAccept(&cid, 1); int num_supp = CountMatchingProducingIndustries(&cid, 1) + houses_supply + 1; // Ensure room for the cargo label. int num_cust = CountMatchingAcceptingIndustries(&cid, 1) + houses_accept; - int num_indrows = max(num_supp, num_cust); + int num_indrows = std::max(num_supp, num_cust); for (int i = 0; i < num_indrows; i++) { - /*C++17: CargoesRow &row = */ this->fields.emplace_back(); - CargoesRow &row = this->fields.back(); + CargoesRow &row = this->fields.emplace_back(); row.columns[0].MakeEmpty(CFT_EMPTY); row.columns[1].MakeCargo(&cid, 1); row.columns[2].MakeEmpty(CFT_EMPTY); @@ -2989,7 +3036,7 @@ struct IndustryCargoesWindow : public Window { if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (this->IsWidgetLowered(WID_IC_NOTIFY)) { - if (FindWindowByClass(WC_SMALLMAP) == nullptr) ShowSmallMap(); + if (FindWindowByClass(WC_SMALLMAP) == nullptr) citymania::ShowSmallMap(); this->NotifySmallmap(); } break; diff --git a/src/industrytype.h b/src/industrytype.h index ec4f8f85df..d5f1ba96a7 100644 --- a/src/industrytype.h +++ b/src/industrytype.h @@ -80,6 +80,7 @@ enum IndustryBehaviour { INDUSTRYBEH_NOBUILT_MAPCREATION = 1 << 16, ///< Do not force one instance of this type to appear on map generation INDUSTRYBEH_CANCLOSE_LASTINSTANCE = 1 << 17, ///< Allow closing down the last instance of this type INDUSTRYBEH_CARGOTYPES_UNLIMITED = 1 << 18, ///< Allow produced/accepted cargoes callbacks to supply more than 2 and 3 types + INDUSTRYBEH_NO_PAX_PROD_CLAMP = 1 << 19, ///< Do not clamp production of passengers. (smooth economy only) }; DECLARE_ENUM_AS_BIT_SET(IndustryBehaviour) @@ -143,7 +144,7 @@ struct IndustrySpec { bool IsProcessingIndustry() const; Money GetConstructionCost() const; Money GetRemovalCost() const; - bool UsesSmoothEconomy() const; + bool UsesOriginalEconomy() const; ~IndustrySpec(); }; diff --git a/src/ini.cpp b/src/ini.cpp index a02d4c14da..4988c778ee 100644 --- a/src/ini.cpp +++ b/src/ini.cpp @@ -12,9 +12,14 @@ #include "ini_type.h" #include "string_func.h" #include "fileio_func.h" +#include +#ifdef __EMSCRIPTEN__ +# include +#endif #if (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309L) || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 500) # include +# include #endif #ifdef _WIN32 @@ -38,38 +43,40 @@ IniFile::IniFile(const char * const *list_group_names) : IniLoadFile(list_group_ * @param filename the file to save to. * @return true if saving succeeded. */ -bool IniFile::SaveToDisk(const char *filename) +bool IniFile::SaveToDisk(const std::string &filename) { /* * First write the configuration to a (temporary) file and then rename * that file. This to prevent that when OpenTTD crashes during the save * you end up with a truncated configuration file. */ - char file_new[MAX_PATH]; + std::string file_new{ filename }; + file_new.append(".new"); - strecpy(file_new, filename, lastof(file_new)); - strecat(file_new, ".new", lastof(file_new)); - FILE *f = fopen(file_new, "w"); - if (f == nullptr) return false; + std::ofstream os(OTTD2FS(file_new.c_str())); + if (os.fail()) return false; for (const IniGroup *group = this->group; group != nullptr; group = group->next) { - if (group->comment) fputs(group->comment, f); - fprintf(f, "[%s]\n", group->name); + os << group->comment << "[" << group->name << "]\n"; for (const IniItem *item = group->item; item != nullptr; item = item->next) { - if (item->comment != nullptr) fputs(item->comment, f); + os << item->comment; /* protect item->name with quotes if needed */ - if (strchr(item->name, ' ') != nullptr || - item->name[0] == '[') { - fprintf(f, "\"%s\"", item->name); + if (item->name.find(' ') != std::string::npos || + item->name[0] == '[') { + os << "\"" << item->name << "\""; } else { - fprintf(f, "%s", item->name); + os << item->name; } - fprintf(f, " = %s\n", item->value == nullptr ? "" : item->value); + os << " = " << item->value.value_or("") << "\n"; } } - if (this->comment) fputs(this->comment, f); + os << this->comment; + + os.flush(); + os.close(); + if (os.fail()) return false; /* * POSIX (and friends) do not guarantee that when a file is closed it is @@ -78,25 +85,22 @@ bool IniFile::SaveToDisk(const char *filename) * (modification date etc.) is not important to us; only the real data is. */ #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 - int ret = fdatasync(fileno(f)); - fclose(f); + int f = open(file_new.c_str(), O_RDWR); + int ret = fdatasync(f); + close(f); if (ret != 0) return false; -#else - fclose(f); #endif #if defined(_WIN32) - /* _tcsncpy = strcpy is TCHAR is char, but isn't when TCHAR is wchar. */ - #undef strncpy /* Allocate space for one more \0 character. */ - TCHAR tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1]; - _tcsncpy(tfilename, OTTD2FS(filename), MAX_PATH); - _tcsncpy(tfile_new, OTTD2FS(file_new), MAX_PATH); + wchar_t tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1]; + wcsncpy(tfilename, OTTD2FS(filename.c_str()), MAX_PATH); + wcsncpy(tfile_new, OTTD2FS(file_new.c_str()), MAX_PATH); /* SHFileOperation wants a double '\0' terminated string. */ tfilename[MAX_PATH - 1] = '\0'; tfile_new[MAX_PATH - 1] = '\0'; - tfilename[_tcslen(tfilename) + 1] = '\0'; - tfile_new[_tcslen(tfile_new) + 1] = '\0'; + tfilename[wcslen(tfilename) + 1] = '\0'; + tfile_new[wcslen(tfile_new) + 1] = '\0'; /* Rename file without any user confirmation. */ SHFILEOPSTRUCT shfopt; @@ -107,15 +111,19 @@ bool IniFile::SaveToDisk(const char *filename) shfopt.pTo = tfilename; SHFileOperation(&shfopt); #else - if (rename(file_new, filename) < 0) { - DEBUG(misc, 0, "Renaming %s to %s failed; configuration not saved", file_new, filename); + if (rename(file_new.c_str(), filename.c_str()) < 0) { + DEBUG(misc, 0, "Renaming %s to %s failed; configuration not saved", file_new.c_str(), filename.c_str()); } #endif +#ifdef __EMSCRIPTEN__ + EM_ASM(if (window["openttd_syncfs"]) openttd_syncfs()); +#endif + return true; } -/* virtual */ FILE *IniFile::OpenFile(const char *filename, Subdirectory subdir, size_t *size) +/* virtual */ FILE *IniFile::OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) { /* Open the text file in binary mode to prevent end-of-line translations * done by ftell() and friends, as defined by K&R. */ diff --git a/src/ini_load.cpp b/src/ini_load.cpp index dd72831308..5c208548f3 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -19,12 +19,10 @@ * Construct a new in-memory item of an Ini file. * @param parent the group we belong to * @param name the name of the item - * @param last the last element of the name of the item */ -IniItem::IniItem(IniGroup *parent, const char *name, const char *last) : next(nullptr), value(nullptr), comment(nullptr) +IniItem::IniItem(IniGroup *parent, const std::string &name) : next(nullptr) { - this->name = stredup(name, last); - str_validate(this->name, this->name + strlen(this->name)); + this->name = str_validate(name); *parent->last_item = this; parent->last_item = &this->next; @@ -33,10 +31,6 @@ IniItem::IniItem(IniGroup *parent, const char *name, const char *last) : next(nu /** Free everything we loaded. */ IniItem::~IniItem() { - free(this->name); - free(this->value); - free(this->comment); - delete this->next; } @@ -46,20 +40,21 @@ IniItem::~IniItem() */ void IniItem::SetValue(const char *value) { - free(this->value); - this->value = stredup(value); + if (value == nullptr) { + this->value.reset(); + } else { + this->value.emplace(value); + } } /** * Construct a new in-memory group of an Ini file. * @param parent the file we belong to * @param name the name of the group - * @param last the last element of the name of the group */ -IniGroup::IniGroup(IniLoadFile *parent, const char *name, const char *last) : next(nullptr), type(IGT_VARIABLES), item(nullptr), comment(nullptr) +IniGroup::IniGroup(IniLoadFile *parent, const std::string &name) : next(nullptr), type(IGT_VARIABLES), item(nullptr) { - this->name = stredup(name, last); - str_validate(this->name, this->name + strlen(this->name)); + this->name = str_validate(name); this->last_item = &this->item; *parent->last_group = this; @@ -67,7 +62,7 @@ IniGroup::IniGroup(IniLoadFile *parent, const char *name, const char *last) : ne if (parent->list_group_names != nullptr) { for (uint i = 0; parent->list_group_names[i] != nullptr; i++) { - if (strcmp(this->name, parent->list_group_names[i]) == 0) { + if (this->name == parent->list_group_names[i]) { this->type = IGT_LIST; return; } @@ -75,7 +70,7 @@ IniGroup::IniGroup(IniLoadFile *parent, const char *name, const char *last) : ne } if (parent->seq_group_names != nullptr) { for (uint i = 0; parent->seq_group_names[i] != nullptr; i++) { - if (strcmp(this->name, parent->seq_group_names[i]) == 0) { + if (this->name == parent->seq_group_names[i]) { this->type = IGT_SEQUENCE; return; } @@ -86,9 +81,6 @@ IniGroup::IniGroup(IniLoadFile *parent, const char *name, const char *last) : ne /** Free everything we loaded. */ IniGroup::~IniGroup() { - free(this->name); - free(this->comment); - delete this->item; delete this->next; } @@ -100,16 +92,16 @@ IniGroup::~IniGroup() * @param create whether to create an item when not found or not. * @return the requested item or nullptr if not found. */ -IniItem *IniGroup::GetItem(const char *name, bool create) +IniItem *IniGroup::GetItem(const std::string &name, bool create) { for (IniItem *item = this->item; item != nullptr; item = item->next) { - if (strcmp(item->name, name) == 0) return item; + if (item->name == name) return item; } if (!create) return nullptr; /* otherwise make a new one */ - return new IniItem(this, name, nullptr); + return new IniItem(this, name); } /** @@ -129,7 +121,6 @@ void IniGroup::Clear() */ IniLoadFile::IniLoadFile(const char * const *list_group_names, const char * const *seq_group_names) : group(nullptr), - comment(nullptr), list_group_names(list_group_names), seq_group_names(seq_group_names) { @@ -139,7 +130,6 @@ IniLoadFile::IniLoadFile(const char * const *list_group_names, const char * cons /** Free everything we loaded. */ IniLoadFile::~IniLoadFile() { - free(this->comment); delete this->group; } @@ -147,26 +137,21 @@ IniLoadFile::~IniLoadFile() * Get the group with the given name. If it doesn't exist * and \a create_new is \c true create a new group. * @param name name of the group to find. - * @param len the maximum length of said name (\c 0 means length of the string). * @param create_new Allow creation of group if it does not exist. * @return The requested group if it exists or was created, else \c nullptr. */ -IniGroup *IniLoadFile::GetGroup(const char *name, size_t len, bool create_new) +IniGroup *IniLoadFile::GetGroup(const std::string &name, bool create_new) { - if (len == 0) len = strlen(name); - /* does it exist already? */ for (IniGroup *group = this->group; group != nullptr; group = group->next) { - if (!strncmp(group->name, name, len) && group->name[len] == 0) { - return group; - } + if (group->name == name) return group; } if (!create_new) return nullptr; /* otherwise make a new one */ - IniGroup *group = new IniGroup(this, name, name + len - 1); - group->comment = stredup("\n"); + IniGroup *group = new IniGroup(this, name); + group->comment = "\n"; return group; } @@ -182,7 +167,7 @@ void IniLoadFile::RemoveGroup(const char *name) /* does it exist already? */ for (group = this->group; group != nullptr; prev = group, group = group->next) { - if (strncmp(group->name, name, len) == 0) { + if (group->name.compare(0, len, name) == 0) { break; } } @@ -207,7 +192,7 @@ void IniLoadFile::RemoveGroup(const char *name) * @param subdir the sub directory to load the file from. * @pre nothing has been loaded yet. */ -void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) +void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) { assert(this->last_group == &this->group); @@ -241,7 +226,7 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) uint a = comment_alloc; /* add to comment */ if (ns > a) { - a = max(a, 128U); + a = std::max(a, 128U); do a *= 2; while (a < ns); comment = ReallocT(comment, comment_alloc = a); } @@ -260,17 +245,17 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) e--; } s++; // skip [ - group = new IniGroup(this, s, e - 1); + group = new IniGroup(this, std::string(s, e - s)); if (comment_size != 0) { - group->comment = stredup(comment, comment + comment_size - 1); + group->comment.assign(comment, comment_size); comment_size = 0; } } else if (group != nullptr) { if (group->type == IGT_SEQUENCE) { /* A sequence group, use the line as item name without further interpretation. */ - IniItem *item = new IniItem(group, buffer, e - 1); + IniItem *item = new IniItem(group, std::string(buffer, e - buffer)); if (comment_size) { - item->comment = stredup(comment, comment + comment_size - 1); + item->comment.assign(comment, comment_size); comment_size = 0; } continue; @@ -286,9 +271,9 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) } /* it's an item in an existing group */ - IniItem *item = new IniItem(group, s, t - 1); + IniItem *item = new IniItem(group, std::string(s, t - s)); if (comment_size != 0) { - item->comment = stredup(comment, comment + comment_size - 1); + item->comment.assign(comment, comment_size); comment_size = 0; } @@ -304,8 +289,11 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) *e = '\0'; /* If the value was not quoted and empty, it must be nullptr */ - item->value = (!quoted && e == t) ? nullptr : stredup(t); - if (item->value != nullptr) str_validate(item->value, item->value + strlen(item->value)); + if (!quoted && e == t) { + item->value.reset(); + } else { + item->value = str_validate(std::string(t)); + } } else { /* it's an orphan item */ this->ReportFileError("ini: '", buffer, "' outside of group"); @@ -313,7 +301,7 @@ void IniLoadFile::LoadFromDisk(const char *filename, Subdirectory subdir) } if (comment_size > 0) { - this->comment = stredup(comment, comment + comment_size - 1); + this->comment.assign(comment, comment_size); comment_size = 0; } diff --git a/src/ini_type.h b/src/ini_type.h index 679969efda..160ba7619c 100644 --- a/src/ini_type.h +++ b/src/ini_type.h @@ -11,6 +11,8 @@ #define INI_TYPE_H #include "fileio_type.h" +#include +#include /** Types of groups */ enum IniGroupType { @@ -21,12 +23,12 @@ enum IniGroupType { /** A single "line" in an ini file. */ struct IniItem { - IniItem *next; ///< The next item in this group - char *name; ///< The name of this item - char *value; ///< The value of this item - char *comment; ///< The comment associated with this item + IniItem *next; ///< The next item in this group + std::string name; ///< The name of this item + std::optional value; ///< The value of this item + std::string comment; ///< The comment associated with this item - IniItem(struct IniGroup *parent, const char *name, const char *last = nullptr); + IniItem(struct IniGroup *parent, const std::string &name); ~IniItem(); void SetValue(const char *value); @@ -38,13 +40,13 @@ struct IniGroup { IniGroupType type; ///< type of group IniItem *item; ///< the first item in the group IniItem **last_item; ///< the last item in the group - char *name; ///< name of group - char *comment; ///< comment for group + std::string name; ///< name of group + std::string comment; ///< comment for group - IniGroup(struct IniLoadFile *parent, const char *name, const char *last = nullptr); + IniGroup(struct IniLoadFile *parent, const std::string &name); ~IniGroup(); - IniItem *GetItem(const char *name, bool create); + IniItem *GetItem(const std::string &name, bool create); void Clear(); }; @@ -52,17 +54,17 @@ struct IniGroup { struct IniLoadFile { IniGroup *group; ///< the first group in the ini IniGroup **last_group; ///< the last group in the ini - char *comment; ///< last comment in file + std::string comment; ///< last comment in file const char * const *list_group_names; ///< nullptr terminated list with group names that are lists const char * const *seq_group_names; ///< nullptr terminated list with group names that are sequences. IniLoadFile(const char * const *list_group_names = nullptr, const char * const *seq_group_names = nullptr); virtual ~IniLoadFile(); - IniGroup *GetGroup(const char *name, size_t len = 0, bool create_new = true); + IniGroup *GetGroup(const std::string &name, bool create_new = true); void RemoveGroup(const char *name); - void LoadFromDisk(const char *filename, Subdirectory subdir); + void LoadFromDisk(const std::string &filename, Subdirectory subdir); /** * Open the INI file. @@ -71,7 +73,7 @@ struct IniLoadFile { * @param[out] size Size of the opened file. * @return File handle of the opened file, or \c nullptr. */ - virtual FILE *OpenFile(const char *filename, Subdirectory subdir, size_t *size) = 0; + virtual FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) = 0; /** * Report an error about the file contents. @@ -86,9 +88,9 @@ struct IniLoadFile { struct IniFile : IniLoadFile { IniFile(const char * const *list_group_names = nullptr); - bool SaveToDisk(const char *filename); + bool SaveToDisk(const std::string &filename); - virtual FILE *OpenFile(const char *filename, Subdirectory subdir, size_t *size); + virtual FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size); virtual void ReportFileError(const char * const pre, const char * const buffer, const char * const post); }; diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 37b0fa93b2..cac4148657 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -287,19 +287,6 @@ static void AskExitGameCallback(Window *w, bool confirmed) void AskExitGame() { -#if defined(_WIN32) - SetDParam(0, STR_OSNAME_WINDOWS); -#elif defined(__APPLE__) - SetDParam(0, STR_OSNAME_OSX); -#elif defined(__HAIKU__) - SetDParam(0, STR_OSNAME_HAIKU); -#elif defined(__OS2__) - SetDParam(0, STR_OSNAME_OS2); -#elif defined(SUNOS) - SetDParam(0, STR_OSNAME_SUNOS); -#else - SetDParam(0, STR_OSNAME_UNIX); -#endif ShowQuery( STR_QUIT_CAPTION, STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD, diff --git a/src/landscape.cpp b/src/landscape.cpp index e97d9cff03..6ea3af75b6 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -31,6 +31,7 @@ #include "pathfinder/npf/aystar.h" #include "saveload/saveload.h" #include "framerate_type.h" +#include #include #include @@ -116,7 +117,7 @@ Point InverseRemapCoords2(int x, int y, bool clamp_to_map, bool *clamped) /* Bring the coordinates near to a valid range. At the top we allow a number * of extra tiles. This is mostly due to the tiles on the north side of * the map possibly being drawn higher due to the extra height levels. */ - int extra_tiles = CeilDiv(_settings_game.construction.max_heightlevel * TILE_HEIGHT, TILE_PIXELS); + int extra_tiles = CeilDiv(_settings_game.construction.map_height_limit * TILE_HEIGHT, TILE_PIXELS); Point old_pt = pt; pt.x = Clamp(pt.x, -extra_tiles * TILE_SIZE, max_x); pt.y = Clamp(pt.y, -extra_tiles * TILE_SIZE, max_y); @@ -130,12 +131,12 @@ Point InverseRemapCoords2(int x, int y, bool clamp_to_map, bool *clamped) * So give it a z-malus of 4 in the first iterations. */ int z = 0; if (clamp_to_map) { - for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + max(z, 4) - 4, min_coord, max_x), Clamp(pt.y + max(z, 4) - 4, min_coord, max_y)) / 2; - for (int m = 3; m > 0; m--) z = GetSlopePixelZ(Clamp(pt.x + max(z, m) - m, min_coord, max_x), Clamp(pt.y + max(z, m) - m, min_coord, max_y)) / 2; + for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + std::max(z, 4) - 4, min_coord, max_x), Clamp(pt.y + std::max(z, 4) - 4, min_coord, max_y)) / 2; + for (int m = 3; m > 0; m--) z = GetSlopePixelZ(Clamp(pt.x + std::max(z, m) - m, min_coord, max_x), Clamp(pt.y + std::max(z, m) - m, min_coord, max_y)) / 2; for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + z, min_coord, max_x), Clamp(pt.y + z, min_coord, max_y)) / 2; } else { - for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + max(z, 4) - 4, pt.y + max(z, 4) - 4) / 2; - for (int m = 3; m > 0; m--) z = GetSlopePixelZOutsideMap(pt.x + max(z, m) - m, pt.y + max(z, m) - m) / 2; + for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + std::max(z, 4) - 4, pt.y + std::max(z, 4) - 4) / 2; + for (int m = 3; m > 0; m--) z = GetSlopePixelZOutsideMap(pt.x + std::max(z, m) - m, pt.y + std::max(z, m) - m) / 2; for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + z, pt.y + z ) / 2; } @@ -630,8 +631,8 @@ void SetSnowLine(byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]) for (uint i = 0; i < SNOW_LINE_MONTHS; i++) { for (uint j = 0; j < SNOW_LINE_DAYS; j++) { - _snow_line->highest_value = max(_snow_line->highest_value, table[i][j]); - _snow_line->lowest_value = min(_snow_line->lowest_value, table[i][j]); + _snow_line->highest_value = std::max(_snow_line->highest_value, table[i][j]); + _snow_line->lowest_value = std::min(_snow_line->lowest_value, table[i][j]); } } } @@ -811,7 +812,7 @@ void RunTileLoop() static const uint32 feedbacks[] = { 0xD8F, 0x1296, 0x2496, 0x4357, 0x8679, 0x1030E, 0x206CD, 0x403FE, 0x807B8, 0x1004B2, 0x2006A8, 0x4004B2, 0x800B87 }; - assert_compile(lengthof(feedbacks) == 2 * MAX_MAP_SIZE_BITS - 2 * MIN_MAP_SIZE_BITS + 1); + static_assert(lengthof(feedbacks) == 2 * MAX_MAP_SIZE_BITS - 2 * MIN_MAP_SIZE_BITS + 1); const uint32 feedback = feedbacks[MapLogX() + MapLogY() - 2 * MIN_MAP_SIZE_BITS]; /* We update every tile every 256 ticks, so divide the map size by 2^8 = 256 */ @@ -865,7 +866,8 @@ static void GenerateTerrain(int type, uint flag) uint x = r & MapMaxX(); uint y = (r >> MapLogX()) & MapMaxY(); - if (x < 2 || y < 2) return; + uint edge_distance = 1 + (_settings_game.construction.freeform_edges ? 1 : 0); + if (x <= edge_distance || y <= edge_distance) return; DiagDirection direction = (DiagDirection)GB(r, 22, 2); uint w = templ->width; @@ -900,8 +902,8 @@ static void GenerateTerrain(int type, uint flag) } } - if (x + w >= MapMaxX() - 1) return; - if (y + h >= MapMaxY() - 1) return; + if (x + w >= MapMaxX()) return; + if (y + h >= MapMaxY()) return; TileIndex tile = TileXY(x, y); @@ -966,11 +968,10 @@ static void GenerateTerrain(int type, uint flag) #include "table/genland.h" -static void CreateDesertOrRainForest() +static void CreateDesertOrRainForest(uint desert_tropic_line) { TileIndex update_freq = MapSize() / 4; const TileIndexDiffC *data; - uint max_desert_height = CeilDiv(_settings_game.construction.max_heightlevel, 4); for (TileIndex tile = 0; tile != MapSize(); ++tile) { if ((tile % update_freq) == 0) IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); @@ -980,7 +981,7 @@ static void CreateDesertOrRainForest() for (data = _make_desert_or_rainforest_data; data != endof(_make_desert_or_rainforest_data); ++data) { TileIndex t = AddTileIndexDiffCWrap(tile, *data); - if (t != INVALID_TILE && (TileHeight(t) >= max_desert_height || IsTileType(t, MP_WATER))) break; + if (t != INVALID_TILE && (TileHeight(t) >= desert_tropic_line || IsTileType(t, MP_WATER))) break; } if (data == endof(_make_desert_or_rainforest_data)) { SetTropicZone(tile, TROPICZONE_DESERT); @@ -1061,6 +1062,7 @@ static bool MakeLake(TileIndex tile, void *user_data) TileIndex t2 = tile + TileOffsByDiagDir(d); if (IsWaterTile(t2)) { MakeRiver(tile, Random()); + MarkTileDirtyByTile(tile); /* Remove desert directly around the river tile. */ TileIndex t = tile; CircularTileSearch(&t, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr); @@ -1134,6 +1136,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current) TileIndex tile = path->node.tile; if (!IsWaterTile(tile)) { MakeRiver(tile, Random()); + MarkTileDirtyByTile(tile); /* Remove desert directly around the river tile. */ CircularTileSearch(&tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr); } @@ -1186,8 +1189,8 @@ static void BuildRiver(TileIndex begin, TileIndex end) */ static bool FlowRiver(TileIndex spring, TileIndex begin) { - #define SET_MARK(x) marks.insert(x) - #define IS_MARKED(x) (marks.find(x) != marks.end()) +# define SET_MARK(x) marks.insert(x) +# define IS_MARKED(x) (marks.find(x) != marks.end()) uint height = TileHeight(begin); if (IsWaterTile(begin)) return DistanceManhattan(spring, begin) > _settings_game.game_creation.min_river_length; @@ -1246,6 +1249,7 @@ static bool FlowRiver(TileIndex spring, TileIndex begin) DistanceManhattan(spring, lakeCenter) > _settings_game.game_creation.min_river_length) { end = lakeCenter; MakeRiver(lakeCenter, Random()); + MarkTileDirtyByTile(lakeCenter); /* Remove desert directly around the river tile. */ CircularTileSearch(&lakeCenter, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr); lakeCenter = end; @@ -1290,6 +1294,115 @@ static void CreateRivers() } } +/** + * Calculate what height would be needed to cover N% of the landmass. + * + * The function allows both snow and desert/tropic line to be calculated. It + * tries to find the closests height which covers N% of the landmass; it can + * be below or above it. + * + * Tropic has a mechanism where water and tropic tiles in mountains grow + * inside the desert. To better approximate the requested coverage, this is + * taken into account via an edge histogram, which tells how many neighbouring + * tiles are lower than the tiles of that height. The multiplier indicates how + * severe this has to be taken into account. + * + * @param coverage A value between 0 and 100 indicating a percentage of landmass that should be covered. + * @param edge_multiplier How much effect neighbouring tiles that are of a lower height level have on the score. + * @return The estimated best height to use to cover N% of the landmass. + */ +static uint CalculateCoverageLine(uint coverage, uint edge_multiplier) +{ + const DiagDirection neighbour_dir[] = { + DIAGDIR_NE, + DIAGDIR_SE, + DIAGDIR_SW, + DIAGDIR_NW, + }; + + /* Histogram of how many tiles per height level exist. */ + std::array histogram = {}; + /* Histogram of how many neighbour tiles are lower than the tiles of the height level. */ + std::array edge_histogram = {}; + + /* Build a histogram of the map height. */ + for (TileIndex tile = 0; tile < MapSize(); tile++) { + uint h = TileHeight(tile); + histogram[h]++; + + if (edge_multiplier != 0) { + /* Check if any of our neighbours is below us. */ + for (auto dir : neighbour_dir) { + TileIndex neighbour_tile = AddTileIndexDiffCWrap(tile, TileIndexDiffCByDiagDir(dir)); + if (IsValidTile(neighbour_tile) && TileHeight(neighbour_tile) < h) { + edge_histogram[h]++; + } + } + } + } + + /* The amount of land we have is the map size minus the first (sea) layer. */ + uint land_tiles = MapSizeX() * MapSizeY() - histogram[0]; + int best_score = land_tiles; + + /* Our goal is the coverage amount of the land-mass. */ + int goal_tiles = land_tiles * coverage / 100; + + /* We scan from top to bottom. */ + uint h = MAX_TILE_HEIGHT; + uint best_h = h; + + int current_tiles = 0; + for (; h > 0; h--) { + current_tiles += histogram[h]; + int current_score = goal_tiles - current_tiles; + + /* Tropic grows from water and mountains into the desert. This is a + * great visual, but it also means we* need to take into account how + * much less desert tiles are being created if we are on this + * height-level. We estimate this based on how many neighbouring + * tiles are below us for a given length, assuming that is where + * tropic is growing from. + */ + if (edge_multiplier != 0 && h > 1) { + /* From water tropic tiles grow for a few tiles land inward. */ + current_score -= edge_histogram[1] * edge_multiplier; + /* Tropic tiles grow into the desert for a few tiles. */ + current_score -= edge_histogram[h] * edge_multiplier; + } + + if (std::abs(current_score) < std::abs(best_score)) { + best_score = current_score; + best_h = h; + } + + /* Always scan all height-levels, as h == 1 might give a better + * score than any before. This is true for example with 0% desert + * coverage. */ + } + + return best_h; +} + +/** + * Calculate the line from which snow begins. + */ +static void CalculateSnowLine() +{ + /* We do not have snow sprites on coastal tiles, so never allow "1" as height. */ + _settings_game.game_creation.snow_line_height = std::max(CalculateCoverageLine(_settings_game.game_creation.snow_coverage, 0), 2u); +} + +/** + * Calculate the line (in height) between desert and tropic. + * @return The height of the line between desert and tropic. + */ +static uint8 CalculateDesertLine() +{ + /* CalculateCoverageLine() runs from top to bottom, so we need to invert the coverage. */ + return CalculateCoverageLine(100 - _settings_game.game_creation.desert_coverage, 4); +} + void GenerateLandscape(byte mode) { /** Number of steps of landscape generation */ @@ -1304,7 +1417,7 @@ void GenerateLandscape(byte mode) if (mode == GWM_HEIGHTMAP) { SetGeneratingWorldProgress(GWP_LANDSCAPE, steps + GLS_HEIGHTMAP); - LoadHeightmap(_file_to_saveload.detail_ftype, _file_to_saveload.name); + LoadHeightmap(_file_to_saveload.detail_ftype, _file_to_saveload.name.c_str()); IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); } else if (_settings_game.game_creation.land_generator == LG_TERRAGENESIS) { SetGeneratingWorldProgress(GWP_LANDSCAPE, steps + GLS_TERRAGENESIS); @@ -1367,11 +1480,27 @@ void GenerateLandscape(byte mode) /* Do not call IncreaseGeneratingWorldProgress() before FixSlopes(), * it allows screen redraw. Drawing of broken slopes crashes the game */ FixSlopes(); - IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); - ConvertGroundTilesIntoWaterTiles(); + MarkWholeScreenDirty(); IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); - if (_settings_game.game_creation.landscape == LT_TROPIC) CreateDesertOrRainForest(); + ConvertGroundTilesIntoWaterTiles(); + MarkWholeScreenDirty(); + IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); + + switch (_settings_game.game_creation.landscape) { + case LT_ARCTIC: + CalculateSnowLine(); + break; + + case LT_TROPIC: { + uint desert_tropic_line = CalculateDesertLine(); + CreateDesertOrRainForest(desert_tropic_line); + break; + } + + default: + break; + } CreateRivers(); } diff --git a/src/lang/CMakeLists.txt b/src/lang/CMakeLists.txt new file mode 100644 index 0000000000..f3aedca4b4 --- /dev/null +++ b/src/lang/CMakeLists.txt @@ -0,0 +1,130 @@ +set(MASTER_LANG_FILE + ${CMAKE_CURRENT_SOURCE_DIR}/english.txt +) + +set(LANG_SOURCE_FILES + ${MASTER_LANG_FILE} + ${CMAKE_CURRENT_SOURCE_DIR}/afrikaans.txt + ${CMAKE_CURRENT_SOURCE_DIR}/arabic_egypt.txt + ${CMAKE_CURRENT_SOURCE_DIR}/basque.txt + ${CMAKE_CURRENT_SOURCE_DIR}/belarusian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/brazilian_portuguese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/bulgarian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/catalan.txt + ${CMAKE_CURRENT_SOURCE_DIR}/croatian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/czech.txt + ${CMAKE_CURRENT_SOURCE_DIR}/danish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/dutch.txt + ${CMAKE_CURRENT_SOURCE_DIR}/english_AU.txt + ${CMAKE_CURRENT_SOURCE_DIR}/english_US.txt + ${CMAKE_CURRENT_SOURCE_DIR}/esperanto.txt + ${CMAKE_CURRENT_SOURCE_DIR}/estonian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/faroese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/finnish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/french.txt + ${CMAKE_CURRENT_SOURCE_DIR}/gaelic.txt + ${CMAKE_CURRENT_SOURCE_DIR}/galician.txt + ${CMAKE_CURRENT_SOURCE_DIR}/german.txt + ${CMAKE_CURRENT_SOURCE_DIR}/greek.txt + ${CMAKE_CURRENT_SOURCE_DIR}/hebrew.txt + ${CMAKE_CURRENT_SOURCE_DIR}/hungarian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/icelandic.txt + ${CMAKE_CURRENT_SOURCE_DIR}/indonesian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/irish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/italian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/japanese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/korean.txt + ${CMAKE_CURRENT_SOURCE_DIR}/latin.txt + ${CMAKE_CURRENT_SOURCE_DIR}/latvian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/lithuanian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/luxembourgish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/malay.txt + ${CMAKE_CURRENT_SOURCE_DIR}/norwegian_bokmal.txt + ${CMAKE_CURRENT_SOURCE_DIR}/norwegian_nynorsk.txt + ${CMAKE_CURRENT_SOURCE_DIR}/polish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/portuguese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/romanian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/russian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/serbian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/simplified_chinese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/slovak.txt + ${CMAKE_CURRENT_SOURCE_DIR}/slovenian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/spanish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/spanish_MX.txt + ${CMAKE_CURRENT_SOURCE_DIR}/swedish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/tamil.txt + ${CMAKE_CURRENT_SOURCE_DIR}/thai.txt + ${CMAKE_CURRENT_SOURCE_DIR}/traditional_chinese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/turkish.txt + ${CMAKE_CURRENT_SOURCE_DIR}/ukrainian.txt + ${CMAKE_CURRENT_SOURCE_DIR}/vietnamese.txt + ${CMAKE_CURRENT_SOURCE_DIR}/welsh.txt +) + +set(LANG_BINARY_DIR ${CMAKE_BINARY_DIR}/lang) + +if (HOST_BINARY_DIR) + include(${HOST_BINARY_DIR}/strgen.cmake) +endif() + +# Walk over all the (finished) language files, and generate a command to compile them +foreach(LANG_SOURCE_FILE IN LISTS LANG_SOURCE_FILES) + get_filename_component(LANG_SOURCE_FILE_NAME_WE ${LANG_SOURCE_FILE} NAME_WE) + + set(LANG_BINARY_FILE ${LANG_BINARY_DIR}/${LANG_SOURCE_FILE_NAME_WE}.lng) + + add_custom_command(OUTPUT ${LANG_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E make_directory ${LANG_BINARY_DIR} + COMMAND strgen + -s ${CMAKE_CURRENT_SOURCE_DIR} + -d ${LANG_BINARY_DIR} + ${LANG_SOURCE_FILE} + DEPENDS strgen ${MASTER_LANG_FILE} + MAIN_DEPENDENCY ${LANG_SOURCE_FILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Compiling language ${LANG_SOURCE_FILE_NAME_WE}" + ) + + list(APPEND LANG_BINARY_FILES ${LANG_BINARY_FILE}) +endforeach() + +# Create a new target which compiles all language files +add_custom_target(language_files + DEPENDS + ${LANG_BINARY_FILES} +) +set_target_properties(language_files + PROPERTIES LANG_SOURCE_FILES "${LANG_SOURCE_FILES}" +) + + +set(GENERATED_BINARY_DIR ${CMAKE_BINARY_DIR}/generated) +set(TABLE_BINARY_DIR ${GENERATED_BINARY_DIR}/table) + +# Generate a command and target to create the strings table +add_custom_command_timestamp(OUTPUT ${TABLE_BINARY_DIR}/strings.h + COMMAND ${CMAKE_COMMAND} -E make_directory ${TABLE_BINARY_DIR} + COMMAND strgen + -s ${CMAKE_CURRENT_SOURCE_DIR} + -d ${TABLE_BINARY_DIR} + DEPENDS strgen ${MASTER_LANG_FILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating table/strings.h" +) +add_custom_target_timestamp(table_strings + DEPENDS + ${TABLE_BINARY_DIR}/strings.h +) + +add_library(languages + INTERFACE +) +target_include_directories(languages + INTERFACE + ${GENERATED_BINARY_DIR} +) +add_dependencies(languages + language_files + table_strings +) +add_library(openttd::languages ALIAS languages) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 76648bbcec..a598df6299 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Koring STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Suiker STR_CARGO_PLURAL_TOYS :Speelgoed -STR_CARGO_PLURAL_CANDY :Lekkers +STR_CARGO_PLURAL_SWEETS :Lekkers STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Spookasem +STR_CARGO_PLURAL_CANDYFLOSS :Spookasem STR_CARGO_PLURAL_BUBBLES :Borrels STR_CARGO_PLURAL_TOFFEE :Toffie STR_CARGO_PLURAL_BATTERIES :Batterye @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Koring STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Suiker STR_CARGO_SINGULAR_TOY :Speelding -STR_CARGO_SINGULAR_CANDY :Lekker +STR_CARGO_SINGULAR_SWEETS :Lekker STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Spookasem +STR_CARGO_SINGULAR_CANDYFLOSS :Spookasem STR_CARGO_SINGULAR_BUBBLE :Borrel STR_CARGO_SINGULAR_TOFFEE :Toffie STR_CARGO_SINGULAR_BATTERY :Battery @@ -133,7 +133,7 @@ STR_ABBREV_PASSENGERS :{TINY_FONT}PS STR_ABBREV_COAL :{TINY_FONT}SK STR_ABBREV_MAIL :{TINY_FONT}PS STR_ABBREV_OIL :{TINY_FONT}OL -STR_ABBREV_LIVESTOCK :{TINY_FONT}LH +STR_ABBREV_LIVESTOCK :{TINY_FONT}VE STR_ABBREV_GOODS :{TINY_FONT}GD STR_ABBREV_GRAIN :{TINY_FONT}GR STR_ABBREV_WOOD :{TINY_FONT}HT @@ -234,8 +234,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Kies hoe STR_TOOLTIP_SORT_CRITERIA :{BLACK}Kies kriterea om volgens te rangskik STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Kies kriteria om volgens te filter STR_BUTTON_SORT_BY :{BLACK}Sorteer volgens -STR_BUTTON_LOCATION :{BLACK}Ligging -STR_BUTTON_RENAME :{BLACK}Hernoem STR_BUTTON_CATCHMENT :{BLACK}Dekking STR_TOOLTIP_CATCHMENT :{BLACK}Wissel dekking van die vertoonarea @@ -316,6 +314,8 @@ STR_SORT_BY_RANGE :Afstand STR_SORT_BY_POPULATION :Bevolking STR_SORT_BY_RATING :Waardering +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Onderbreek spel STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Vinnig vooruit die spel @@ -403,7 +403,7 @@ STR_FILE_MENU_EXIT :Verlaat # map menu STR_MAP_MENU_MAP_OF_WORLD :Kaart van wêreld -STR_MAP_MENU_EXTRA_VIEW_PORT :Ekstra toonvenster +STR_MAP_MENU_EXTRA_VIEWPORT :Ekstra toonvenster STR_MAP_MENU_LINGRAPH_LEGEND :Vragverspreidingsleutel STR_MAP_MENU_SIGN_LIST :Teken lys @@ -474,7 +474,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Vee alle boodsk ############ range ends here ############ range for about menu starts -STR_ABOUT_MENU_LAND_BLOCK_INFO :Gebied informasie +STR_ABOUT_MENU_LAND_BLOCK_INFO :Terreininligting STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Skakel terminaal STR_ABOUT_MENU_AI_DEBUG :AI/Spel skript ontfout @@ -569,8 +569,8 @@ STR_MONTH_DEC :Desember # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Sleutel STR_GRAPH_KEY_TOOLTIP :{BLACK}Wys sleutel van grafieke -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -885,7 +885,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK} die dorpsraad van {TOWN} het 'n kontrak met {STRING} aan gegaan vir een jaaar se eksklusiewe vervoer regte # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Toonvenster {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Toonvenster {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Verander toonvenster STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Dupliseer die ligging van die hooftoonvenster na die toonvenster STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Verander hoofaansig @@ -938,8 +938,6 @@ STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminb STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Pad voertuie -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Kies kant van pad waarop voertuie ry STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Bestuur aan linkerkant STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Bestuur aan regterkant @@ -991,6 +989,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Skerm re STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Kies die skerm resolusie om te gebruik STR_GAME_OPTIONS_RESOLUTION_OTHER :ander + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK} Koppelvlak groote STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK} Kies die koppelvlak element groote om te gebruik @@ -1004,6 +1004,8 @@ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normaal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dubbele grootte STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad grootte + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis-grafikastel STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kies die basis-grafikastel stel om te gebruik STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} verlore / korrupte ler{P "" s} @@ -1179,8 +1181,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Skakel rampe aa STR_CONFIG_SETTING_CITY_APPROVAL :Stadsraad se gesindheid teenoor omgewings-konstruksie: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Kies hoeveel invloed klank en skade aan die omgewing deur maatskappye aan die stadswaardering het en verderde bouwerk in die stad. -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maksimum kaarthoogte: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Stel die maksimum toegelate berghoogte STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Kan nie die berghoogte verander nie - daar is hoër berge as hierdie op die kaart STR_CONFIG_SETTING_AUTOSLOPE :Laat landargitektuur toe onder geboue, spore, ens.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Laat Landargitektuur onder geboue en spore sonder om dit te verwyder @@ -1545,8 +1545,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Telling jaarein STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Die jaar wat die speletjie eindig vir telling doeleindes. Aan die einde van hierdie jaar word die maatskappy se telling aangeteken en die skerm met 'n hoogste telling word vertoon, maar die spelers kan daarna speel.{} As dit voor die beginjaar is, word die skerm met 'n hoogste telling nooit vertoon nie. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nooit -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktiveer geleike ekonomie (meer, kleiner veranderings): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :As dit geaktiveer is sal nywerheidsvervaarding meer gereeld verander met kleiner veranderinge elke keer. Hierdie stelling het gewoonlik geen effek met nywerhede van NewGRFs nie. STR_CONFIG_SETTING_ALLOW_SHARES :Laat die koop van aandeele van ander maatskappye toe: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :As dit geaktiveer is, kan aandele in maatskappye gekoop en verkoop word. Aandele is net in maatskappye beskikbaar na 'n sekere aantal jaar. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum maatskappyouderdom om aandele te verhandel: {STRING} @@ -1598,9 +1596,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineêre STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Binne speletjie plasing van bome: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheer die ewekansige voorkoms van bome tydens die spel. Dit kan 'n invloed op nywerhede hê wat staatmaak op die groei van bome, byvoorbeeld hout meulens -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Geen {RED}(breek timmerhout meul) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Slegs in reënwoude -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Orals STR_CONFIG_SETTING_TOOLBAR_POS :Posisie van hoof werktuigbaan: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horisontale posisie van die hoof nutsbalk aan die bokant van die skerm @@ -1756,6 +1751,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Program is uit geheue uit STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Allokering van {BYTES} kasgeheue vir grafika het gefaal. Die kasgeheue is verminder na {BYTES}. Dit sal OpenTDD stadiger maak. Om geheue-aanvraag te verminder, kan u 32bpp grafika en/of zoom-vlakke afskakel. +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1798,18 +1795,9 @@ STR_INTRO_TRANSLATION :{BLACK}Die vert # Quit window STR_QUIT_CAPTION :{WHITE}Verlaat -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Is u seker u wil OpenTTD verlaat en terug keer na {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nee -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Verlaat Spel STR_ABANDON_GAME_QUERY :{YELLOW}Is jy seker jy wil die speletjie verlaat? @@ -1818,7 +1806,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Is jy s # Cheat window STR_CHEATS :{WHITE}Kullery STR_CHEATS_TOOLTIP :{BLACK}Keuseblokkies wys aan as jy die kulkode voorheen gebruik het -STR_CHEATS_WARNING :{BLACK}Waarskuwing! U staan op die punt om jou mededinger te veraai. Hou in gedagte dat so 'n skande vir ewigheid sal onthou word. STR_CHEAT_MONEY :{LTBLUE}Vermeerder geld met {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Speel as maatskappy: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Tower stootskraper (verwyder nywerhede, onbeweegbare voorwerpe): {ORANGE}{STRING} @@ -1930,10 +1917,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multispeler -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Openbaar -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Kies tussen 'n openbare (internet) of 'n plaaslike (LAN) spel -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Speler naam: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Die is die naam waarmee ander spelers sal jou aanwys @@ -1974,8 +1957,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Verbind STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Vervris verskaffer STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Vervris die verskaffer inligting -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Soek bediener -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Versoek netwerk vir 'n verskaffer STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Voeg bediender by STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Voeg 'n verskaffer by die lys wat altyd ondersoek sal word vir speletjies wat reeds aan die gang is STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Begin bediener @@ -1992,6 +1973,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Die spel STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Stel wagwoord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskerm jou spel met 'n wagwoord as jy wil dit nie publieke toepassing laat wees nie +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen 'n openbare (internet) of 'n plaaslike (LAN) spel STR_NETWORK_START_SERVER_UNADVERTISED :Nee STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Klient{P "" e} @@ -2105,7 +2088,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nuwe maatskapy # Network client list STR_NETWORK_CLIENTLIST_KICK :Skop STR_NETWORK_CLIENTLIST_BAN :Verbod -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Gee geld STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Praat met almal STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Praat met maatskappy STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privaate boodskap @@ -2114,8 +2096,6 @@ STR_NETWORK_SERVER :Verskaffer STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Aanskouers -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Sleutel die bedrag geld in wat u wil gee - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Moenie die ingesleutelde wagwoord bewaar nie STR_COMPANY_PASSWORD_OK :{BLACK}Gee die maatskappy die nuwe wagwoord @@ -2216,8 +2196,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} he STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} het 'n nuwe maatskappy gestig (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} het die spel verlaat ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} het sy/haar naam verander na {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} het jou besigheid {2:CURRENCY_LONG} gegee -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Jy het {1:STRING} {2:CURRENCY_LONG} gegee STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Die verskaffer het die sessie toegemaak STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Die verskaffer is besig om te weerbegin...{}Wag asb... STR_NETWORK_MESSAGE_KICKED :*** {STRING} is geskop. Rede: ({STRING}) @@ -2295,6 +2273,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ja, laai die grafika af STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nee, verlaat OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Deursigtigheid Opsies STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Wissel deursigtigheid vir stasietekens. Ctrl+klik om te sluit @@ -2336,6 +2315,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Bou 'n STR_JOIN_WAYPOINT_CAPTION :{WHITE}Verbind roetebaken STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bou 'n aparte roetebaken +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Spoorwegkonstruksie STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektriese spoorwegkonstruksie @@ -2523,7 +2504,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: STR_OBJECT_CLASS_LTHS :Vuurtorings STR_OBJECT_CLASS_TRNS :Stuurders -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Boome STR_PLANT_TREE_TOOLTIP :{BLACK}Kies tipe boom om te plant. Indien die teel reeds 'n boom op het sal enige tipe bome by geplant word, ongeag van die gekose tipe STR_TREES_RANDOM_TYPE :{BLACK}Bome van lukraake tipe @@ -2605,7 +2586,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Kies die STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Kies die nywerheid om te vertoon # Land area window -STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Land gebied informasie +STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Terreininligting STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Koste om skoon te maak: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Koste om skoon te maak: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Wins waneer skoon maak: {LTBLUE}{CURRENCY_LONG} @@ -2808,14 +2789,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Hoev. dorpe: STR_MAPGEN_DATE :{BLACK}Datum: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Hoev. nywerhede: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maksimum kaarthoogte -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Verhoog berge met een teël -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Verminder berghoogte met een teël -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Sneeu lyn hoogte: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Beweeg die sneeu lyn een op -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Beweeg die sneeu lyn een af STR_MAPGEN_LAND_GENERATOR :{BLACK}Land genereerder: -STR_MAPGEN_TREE_PLACER :{BLACK}Boom algoritme: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terrein tipe: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Seevlak: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Riviere: @@ -2840,8 +2814,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Reliëfk STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Grootte: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Verander maksimum kaarthoogte -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Verander sneeu lyn hoogte STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Verander begin jaar # SE Map generation @@ -3126,13 +3098,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Koop di STR_GOALS_CAPTION :{WHITE}{COMPANY} Doelwitte STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globale Doelwitte STR_GOALS_SPECTATOR :Globale doelwitte -STR_GOALS_GLOBAL_TITLE :{BLACK}Globale doelwitte: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Geen - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Nie van toepassing - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Maatskappy doelwitte: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op doel om skerm oor die industrie/stad/teël te sentreer. Ctrl+klik maak 'n nuwe venster vir die industrie/stad/teël oop # Goal question window @@ -3703,10 +3672,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Maak aut # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Skuif skerm na trein. Ctrl+klik om die skerm die trein te laat volg -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Skuif skerm na voertuig. Ctrl+klik om die skerm die voertuig te laat volg -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Skuif skerm na skip. Ctrl+klik om die skerm die skip te laat volg -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Skuif skerm na vliegtuig. Ctrl+klik om die skerm die vliegtuig te laat volg STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur trein na diensstasie. Ctrl+klik om net te diens STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur voertuig na diensstasie. Ctrl+klik om net te diens @@ -3738,10 +3703,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Wys pad STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Wys skip se aanwyse STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Toon vliegtuig aanwyse -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Huidige treinaksie - klik hier om trein te stop/aanskakel. Ctrl+klik om na bestemming te skuif. -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Huidige voertuigaksie - klik hier om voertuig to stop/aanskakel. Ctrl+klik om na bestemming te skuif. -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Huidige skipaksie - klik hier om skip te stop/aanskakel. Ctrl+klik om na bestemming te skuif. -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Huidige vliegtuigaksie - klik hier om vliegtuig te stop/aanskakel. Ctrl+klik om na bestemming te skuif. + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Laai / Aflaai diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 819b3488ac..bb89534dad 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :قمح STR_CARGO_PLURAL_RUBBER :مطاط STR_CARGO_PLURAL_SUGAR :سكر STR_CARGO_PLURAL_TOYS :دُمَي -STR_CARGO_PLURAL_CANDY :حلويات +STR_CARGO_PLURAL_SWEETS :حلويات STR_CARGO_PLURAL_COLA :كولا -STR_CARGO_PLURAL_COTTON_CANDY :سكر نبات +STR_CARGO_PLURAL_CANDYFLOSS :سكر نبات STR_CARGO_PLURAL_BUBBLES :فقاعات STR_CARGO_PLURAL_TOFFEE :توفي STR_CARGO_PLURAL_BATTERIES :بطاريات @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :قمح STR_CARGO_SINGULAR_RUBBER :مطاط STR_CARGO_SINGULAR_SUGAR :سكر STR_CARGO_SINGULAR_TOY :دُمِيه -STR_CARGO_SINGULAR_CANDY :حلويات +STR_CARGO_SINGULAR_SWEETS :حلويات STR_CARGO_SINGULAR_COLA :كولا -STR_CARGO_SINGULAR_COTTON_CANDY :سكر نبات +STR_CARGO_SINGULAR_CANDYFLOSS :سكر نبات STR_CARGO_SINGULAR_BUBBLE :فقاعات STR_CARGO_SINGULAR_TOFFEE :توفي STR_CARGO_SINGULAR_BATTERY :بطاريات @@ -187,11 +187,13 @@ STR_COLOUR_ORANGE :برتقالي STR_COLOUR_BROWN :بني STR_COLOUR_GREY :رمادي STR_COLOUR_WHITE :ابيض +STR_COLOUR_DEFAULT :الإفتراضي # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}ميل/س STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}كم/س STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}م/ث +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}مربعات/ اليوم STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}حصان STR_UNITS_POWER_METRIC :{COMMA}{NBSP}حصان @@ -217,20 +219,23 @@ STR_UNITS_HEIGHT_IMPERIAL :{COMMA}{NBSP} STR_UNITS_HEIGHT_SI :{COMMA}{NBSP} متر # Common window strings +STR_LIST_FILTER_TITLE :{BLACK}تصفية القائمة STR_LIST_FILTER_OSKTITLE :{BLACK} ادخل فلتر STR_LIST_FILTER_TOOLTIP :{BLACK} اختر كلمة اساسية لفلترة القائمة +STR_TOOLTIP_GROUP_ORDER :{BLACK}حدد ترتيب التجميع STR_TOOLTIP_SORT_ORDER :{BLACK} اختر طريقة الترتيب - تنازلي / تصاعدي STR_TOOLTIP_SORT_CRITERIA :{BLACK} اختر نوع الترتيب STR_TOOLTIP_FILTER_CRITERIA :{BLACK}حدد معايير المُرَشِح STR_BUTTON_SORT_BY :{BLACK} رتب بـ -STR_BUTTON_LOCATION :{BLACK}الموقع -STR_BUTTON_RENAME :{BLACK}اعادة تسمية +STR_BUTTON_CATCHMENT :{BLACK}مدى التغطية +STR_TOOLTIP_CATCHMENT :{BLACK}عرض منطقة التغطية STR_TOOLTIP_CLOSE_WINDOW :{BLACK}اغلاق الاطار STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}عنوان الاطار- اسحب لتحريك الاطار STR_TOOLTIP_SHADE :{BLACK}نافذة الظل - تعرض العنوان فقط STR_TOOLTIP_DEBUG :{BLACK}اظهر معلومات صائد اخطاء الاضافات الجديدة. +STR_TOOLTIP_DEFSIZE :{BLACK}تغيير حجم النافذة إلى الحجم الافتراضي. Ctrl + Click لتخزين الحجم الحالي كإعداد افتراضي STR_TOOLTIP_STICKY :{BLACK}علم هذه النافذة كغير قابلة للإقفال باستخدام زر إغلاق كل النوافذ, اضغط مع Ctrl لجعل الأمر إفتراضيا STR_TOOLTIP_RESIZE :{BLACK}اضغط واسحب لتعديل حجم الاطار STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}تبديل حجم الاطار كبير / صغير @@ -239,7 +244,15 @@ STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}عمود STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}هدم المباني و غيرها في مربع من الأرض. # Show engines button +STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}عرض المخفي +STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE :{BLACK}عرض المخفي +STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}عرض المخفي +STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}عرض المخفي +STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}من خلال تمكين هذا الزر ، يتم أيضًا عرض عربات القطار المخفية +STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE_TOOLTIP :{BLACK}من خلال تمكين هذا الزر ، يتم أيضًا عرض مركبات الطرق المخفية +STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}من خلال تمكين هذا الزر ، يتم أيضًا عرض السفن المخفية +STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}من خلال تمكين هذا الزر ، يتم أيضًا عرض الطائرات المخفية # Query window STR_BUTTON_DEFAULT :{BLACK}افتراضي @@ -291,6 +304,10 @@ STR_SORT_BY_CARGO_CAPACITY :سعة الشح STR_SORT_BY_RANGE :مدى STR_SORT_BY_POPULATION :عدد السكان +# Group by options for vehicle list +STR_GROUP_BY_NONE :لا شيء +STR_GROUP_BY_SHARED_ORDERS :لأوامر المشتركة + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}ايقاف اللعبة STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}سرع اللعبه @@ -302,6 +319,8 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}اظها STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}عرض قائمة محطات الشركة. STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}عرض السجل المالي للشركة STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}عرض معلومات الشركة +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}عرض كتاب القصص +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}عرض قائمة الأهداف STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}عرض المخططات STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}عرض جدول ترتيب الشركات STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}موّل انشاء مصنع / عرض كل المصانع @@ -313,6 +332,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}تكبي STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}تصغير الصورة STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}ادوات بناء سكة حديد STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}ادوات بناء الطرق +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}بناء خطوط الترام STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}ادوات السفن STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}بناء مطارات STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}افتح مدير تحرير التضاريس لرفع / خفض الارض, زراعة الاشجار, الخ. @@ -374,7 +394,8 @@ STR_FILE_MENU_EXIT :خروج # map menu STR_MAP_MENU_MAP_OF_WORLD :خريطة العالم -STR_MAP_MENU_EXTRA_VIEW_PORT :شاشة عرض اضافية +STR_MAP_MENU_EXTRA_VIEWPORT :شاشة عرض اضافية +STR_MAP_MENU_LINGRAPH_LEGEND :مفتاح تدفق البضائع STR_MAP_MENU_SIGN_LIST :قائمة العلامات ############ range for town menu starts @@ -398,10 +419,12 @@ STR_GRAPH_MENU_CARGO_PAYMENT_RATES :معدل تكل ############ range for company league menu starts STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :ترتيب الشركات STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :تقييم أداء مفصل +STR_GRAPH_MENU_HIGHSCORE :قائمه المتفوقين ############ range ends here ############ range for industry menu starts STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :دليل المصانع +STR_INDUSTRY_MENU_INDUSTRY_CHAIN :سلاسل الصناعة STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :مول بناء مصنع ############ range ends here @@ -438,6 +461,7 @@ STR_TOOLBAR_SOUND_MUSIC :الموسيق ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :الرسالة الأخيرة/التقرير الجديد STR_NEWS_MENU_MESSAGE_HISTORY_MENU :الرسائل السابقة +STR_NEWS_MENU_DELETE_ALL_MESSAGES :احذف كل الرسائل ############ range ends here ############ range for about menu starts @@ -446,9 +470,11 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :توقل كونسول STR_ABOUT_MENU_AI_DEBUG :مكتشف اخطاء الذكاء الصناعي STR_ABOUT_MENU_SCREENSHOT :صورة من الشاشة - Ctrl-S - +STR_ABOUT_MENU_SHOW_FRAMERATE :سرعة عرض الإطارات STR_ABOUT_MENU_ABOUT_OPENTTD :حول 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :موائم العفريتات STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :اضهار /اخفاء مربح الحوارات/الخيارات +STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :تبديل ألوان الكتل المتسخة ############ range ends here ############ range for ordinal numbers used for the place in the highscore window @@ -534,8 +560,8 @@ STR_MONTH_DEC :ديسمبر # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}مفتاح STR_GRAPH_KEY_TOOLTIP :{BLACK}اظهار مفتاح الرسم البياني -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -836,7 +862,7 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLAC STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK} فوضى طرق عارمة في مدينة {TOWN}!{}{}اعادة ترميم الطرق مولت من قبل شركة {STRING}{} تجلي ستة أشهر من الشقاء لعربات الطريق. # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}شاشة العرض {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}شاشة العرض {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}انسخ لشاشة العرض STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}انسخ موقع الشاشة الرئيسية لشاشة العرض هذه STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}لصق من شاشة العرض @@ -876,11 +902,14 @@ STR_GAME_OPTIONS_CURRENCY_TRY :ليرة ترك STR_GAME_OPTIONS_CURRENCY_SKK :كرونا سلوفاكية (SKK) STR_GAME_OPTIONS_CURRENCY_BRL :ريال برازيلي (BRL) STR_GAME_OPTIONS_CURRENCY_EEK :كرونا استونية (EEK) +STR_GAME_OPTIONS_CURRENCY_KRW :وون كوريا الجنوبية (KRW) +STR_GAME_OPTIONS_CURRENCY_ZAR :راند جنوب أفريقيا (ZAR) STR_GAME_OPTIONS_CURRENCY_CUSTOM :مخصص ... +STR_GAME_OPTIONS_CURRENCY_GEL :(GEL) لاري جورجي +STR_GAME_OPTIONS_CURRENCY_CNY :(CNY) الرنمينبي الصيني +STR_GAME_OPTIONS_CURRENCY_HKD :(HKD) دولار هونج كونج ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}العربات البرية -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}اختار الجانب الذي تسير فيه المركبات STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :القيادة على اليسار STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :القيادة على اليمين @@ -932,6 +961,11 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}دقة STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}اختر دقة الشاشة STR_GAME_OPTIONS_RESOLUTION_OTHER :اخرى +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}تسريع الأجهزة +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}حدد هذا المربع للسماح لـ OpenTTD بمحاولة استخدام تسريع الأجهزة. سيتم تطبيق الإعداد الذي تم تغييره فقط عند إعادة تشغيل اللعبة +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}لن يعمل الإعداد إلا بعد إعادة تشغيل اللعبة + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}حجم اللوحة STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}حدد العنصر المطلوب @@ -939,7 +973,21 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :تقريب عا STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :تقريب ×2 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :تقريب ×4 +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}حجم الخط +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}حدد حجم خط الواجهة المراد استخدامه +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(كشف أوتوماتيكي) +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :عادي +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :حجم مزدوج +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :حجم رباعي + +STR_GAME_OPTIONS_GRAPHICS :{BLACK}الرسومات + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}معدل تحديث الشاشة +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}حدد معدل تحديث الشاشة +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :أخرى +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}هرتز +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}قد تؤثر معدلات التحديث الأعلى من 60 هرتز على الأداء. STR_GAME_OPTIONS_BASE_GRF :{BLACK} الواجهة الرسومية الاساسية STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK} اختر مجموعة الواجهة الرسومية @@ -952,7 +1000,7 @@ STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}معلو STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}قاعده الموسيقى الاساسيه STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}اختر الموسيقى الاساسية التي تود استخدامها -STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} ملف غير صالح{P ""} +STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} ملف غير صالح STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}معلومات اضافية عن الموسيقى الاساسية STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}فشل في استرداد قائمة الدقة المدعومة @@ -1046,6 +1094,7 @@ STR_WARNING_NO_SUITABLE_AI :{WHITE}لايو STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}الإعدادات STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}مدد الكل STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}إسحب الكل +STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(لا يوجد تفسير متوفر) STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK} فئة: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}نوع: @@ -1077,11 +1126,15 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :يسار STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :متوسط STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :يمين +STR_CONFIG_SETTING_CONSTRUCTION_SPEED ::سرعة البناء {STRING} +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS ::تعطلات العربة {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :حد ارتفاع الخريطة:{STRING} STR_CONFIG_SETTING_AUTOSLOPE :السماح بتحريك الأرض تحت المباني, الطرق, الخ : {STRING} STR_CONFIG_SETTING_CATCHMENT :السماح بحدود اكثر واقعية للمحطات بحسب الحجم: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE :السماح بحذف اكثر من الطرق المملوكة للمدينة و الجسور و غيرها: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT :كمية دخان/شرار القطارات:{STRING} +STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :حدد مقدار الدخان أو عدد الشرارت من المركبات STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :موديل تسارع القطارات: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :نمط تسارع عربات الطريق: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG :منع القطارات والسفن من الدوران بزاوية تسعين درجة : {STRING} @@ -1092,6 +1145,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :بدون STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :ككل المصانع الأخرى STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :تنقيب STR_CONFIG_SETTING_MULTIPINDTOWN :السماح بوجود أكثر من مصنع من نفس النوع في المدينة الواحدة: {STRING} +STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :على جانب القيادة STR_CONFIG_SETTING_SHOWFINANCES :أعرض نافذة المالية في آخر السنة: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :الامر الجديد - بدون توقف - قياسيا: {STRING} STR_CONFIG_SETTING_STOP_LOCATION :اوامر القطار الجديدة تتوقف قياسيا في {STRING} رصيف المحطة @@ -1111,6 +1165,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :منخفض STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :طبيعي STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :السماح للعربات بالعبور خلال المواقف المملوكة داخل المدن: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :السماح بمرور العربات خلال المحطات المملوكة للمنافسين: {STRING} +STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :السماح ببناء مواقف السيارات على الطرق المملوكة لشركات أخرى STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}تغير هذا الخيار غير متاح عندما يكون هناك عربات STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :صيانة البنية التحتية: {STRING} @@ -1125,6 +1180,7 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :لكل العر STR_CONFIG_SETTING_WARN_INCOME_LESS :حذر عندما يكون الدخل سالبا :{STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :المركبات لا تنتهي صلاحيتها ابدا : {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE :جدد العربات عندما تصبح قديمة : {STRING} +STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :عند التمكين ، يتم استبدال العربة التي اقتربت من نهاية عمرها عند اكتمال شروط التجديد STR_CONFIG_SETTING_AUTORENEW_MONEY :التجديد التلقائي عند توفر السيولة الدنيا للتجديد: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL :أعرض عدد السكان مع الاسم على العلامة: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :سمك الخطوط في العرض: {STRING} @@ -1237,6 +1293,7 @@ STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :عطل ادوا STR_CONFIG_SETTING_MAX_TRAINS :الحد الأعلى لعدد القطارات لكل شركة: {STRING} STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :الحد الأعلى لعدد العربات لكل شركة: {STRING} STR_CONFIG_SETTING_MAX_AIRCRAFT :الحد الأعلى لعدد الطائرات لكل شركة: {STRING} +STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :الحد الأقصى لعدد الطائرات التي يمكن أن تمتلكها الشركة STR_CONFIG_SETTING_MAX_SHIPS :الحد الأعلى لعدد السفن لكل شركة: {STRING} STR_CONFIG_SETTING_AI_BUILDS_TRAINS :حظر القطارات على الحاسوب: {STRING} @@ -1244,11 +1301,13 @@ STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :حظر العر STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :حظر الطائرات على الحاسوب: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS :حظر السفن على الحاسوب: {STRING} +STR_CONFIG_SETTING_AI_PROFILE_EASY :سهل STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :السماح بالذكاء الصناعي في اللعب الجماعي : {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes قبل تعليق الاسكربت: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT :فترات الصيانة بالنسبة المئوية : {STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT ::مدة فحص الطائرة الإفتراضي{STRING} STR_CONFIG_SETTING_NOSERVICE :الغاء الصيانة عندما يكون التعطيل للمركبات غير مفعل: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS :السماح بتحديد سرعة العربات: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS :تعطيل سكة القطار الكهربائي: {STRING} @@ -1281,8 +1340,9 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :ممتلئ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :الاخبار الملونة تظهر في: {STRING} STR_CONFIG_SETTING_STARTING_YEAR :سنة البدايه: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :السماح بأقتصاد ثابت )تغيرات صغيرة اكثر): {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :لا تنتهي STR_CONFIG_SETTING_ALLOW_SHARES :السماح بشراء حصص من الشركات الاخرى: {STRING} +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :عند السحب ، ضع الإشارات كل: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :اتاحة استخدام الأشارات بالأعلام قبل :{STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :السماح باستخدام اشارات واجهة المستخدم الرسومية: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :نوع الاشارة الذي يبنى قياسيا: {STRING} @@ -1309,9 +1369,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :مسموح STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :مسموح - نمط مدينة قابل للتعديل STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :اضافة الاشجار اثناء اللعب: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :بدون {RED}-المشغولات الخشبية معطل- -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :الغابات الماطرة فقط -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :كل مكان STR_CONFIG_SETTING_TOOLBAR_POS :موقع شريط الأدوات الرئيسي: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS :موقع شريط المعلومات: {STRING} @@ -1332,12 +1389,19 @@ STR_CONFIG_SETTING_TOWN_GROWTH_FAST :سريع STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :سريع جدا STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :مضاعف المدن المبدئي: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :الوقت بين عمليات إعادة الحساب المتتابعة للرسم البياني الرابط. تحسب كل عملية إعادة حساب الخطط لمكون واحد من الرسم البياني. هذا يعني أن القيمة X لهذا الإعداد لا تعني أنه سيتم تحديث الرسم البياني كل X أيام. إلا بعض المكونات. كلما قمت بتعيينه أقل، كلما زاد وقت الCPU لحسابها. كلما قمت بضبطها لفترة أطول ، كلما اسغرق الوقت حتى يتم بدأ توزيع البضائع على طرق جديدة. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :ضبط هذا إلى أقل من 100٪ يؤدي إلى جعل التوزيع المتماثل يتصرف مثل التوزيع غير المتماثل. سيتم إعادة شحنات أقل غصبا إذا تم إرسال مبلغ معين إلى المحطة. إذا قمت بتعيينه على 0٪ ، فإن التوزيع المتماثل يتصرف تمامًا مثل التوزيع غير المتماثل + +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :(متري (كم / ساعة +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :(متري (طن +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE ::وحدات جهد الجر {STRING} - +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :إمبراطوري (قدم) +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :م) متري) STR_CONFIG_SETTING_GRAPHICS :رسوميات {ORANGE} STR_CONFIG_SETTING_SOUND :{ORANGE}الصوت @@ -1386,6 +1450,8 @@ STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :غير متطا STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :مجهول STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... نسبة الضغط '{STRING}' غير صحيحة +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1411,12 +1477,13 @@ STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}بدأ STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}انشاء خريطة عالم خاصة STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK} ابدأ لعبة جماعية -STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}اختيار المناطق الثلجية -STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}اختيار المناطق الصحراوية +STR_INTRO_TOOLTIP_TEMPERATE :{BLACK} اختيار المناطق المعتدلة +STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK} اختيار المناطق الثلجية STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}اختيار المناطق الصحراوية -STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}اختيار نمط الألعاب +STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK} اختيار مناطق عالم الألعب STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}عرض خيارات اللعبة +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}عرض قائمه المتفوقين STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}إعدادات العرض STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}عرض إعدادات اﻹضافات STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK} ابحث عن محتوى جديد او تحديث @@ -1426,18 +1493,10 @@ STR_INTRO_TRANSLATION :{BLACK}هذة # Quit window STR_QUIT_CAPTION :{WHITE}انهاء -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}هل تود اغلاق النسخة المفتوحة و العودة لـ {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}هل أنت متأكد أنك تريد إغلاق OpenTTD؟ STR_QUIT_YES :{BLACK}نعم STR_QUIT_NO :{BLACK}لا -# Supported OSes -STR_OSNAME_WINDOWS :ويندوز -STR_OSNAME_UNIX :يونكس -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :هايكو -STR_OSNAME_OS2 :او اس/2 -STR_OSNAME_SUNOS :صن - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}إغلاق اللعبه STR_ABANDON_GAME_QUERY :{YELLOW}أمتأكد من رغبتك فى إغلاق اللعبه؟ @@ -1446,7 +1505,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}هل ت # Cheat window STR_CHEATS :{WHITE}اسرار STR_CHEATS_TOOLTIP :{BLACK}علامة صح اذا استخدمت هذا السرمن قبل -STR_CHEATS_WARNING :{BLACK}تحذير! انت على وشك ان تغش منافسيك. إعلم انهم سيتذكرون عليك هذا العار للإبد STR_CHEAT_MONEY :{LTBLUE}زيادة السيولة بـ {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}العب كشركة{ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}الجرافة السحرية - لازالة المصانع و الاجسام غير القابلة للازالة.{ORANGE}{STRING} @@ -1595,8 +1653,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}أنضم STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}حدث الخادم STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}حدث معلومات الخادم -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}إبحث عن خوادم -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}أبحث في الشبكة عن خادم STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}اضف خادم - سيرفر STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}اضف خادم (سيرفر) و الذي سوف يفحص اذا كان هناك لعبة قيد التشغيل حاليا STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}أبدأ الخادم @@ -1723,7 +1779,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :شركة جدي # Network client list STR_NETWORK_CLIENTLIST_KICK :اطرد STR_NETWORK_CLIENTLIST_BAN :بان -STR_NETWORK_CLIENTLIST_GIVE_MONEY :اعط اموال STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :تحدث مع الكل STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :تحدث لشركة STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :رسالة خاصة @@ -1732,8 +1787,6 @@ STR_NETWORK_SERVER :خادم STR_NETWORK_CLIENT :عميل STR_NETWORK_SPECTATORS :المشاهدين -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}ادخل رقم المبلغ الذى تود إعطائه - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}لا تحفظ كلمة المرور المدخلة STR_COMPANY_PASSWORD_OK :{BLACK}اعط الشركة كلمة المرور الجديدة @@ -1823,8 +1876,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ا STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} قد بدأ شركة جديدة: (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} قد غادر اللعبة : - {2:STRING}- STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} قد غير اسمه / اسمها الى {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} اعطى شركتك : {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** انت اعطيت {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}اقفل الخادم الجلسة STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}يتم بدأ الخادم من جديد ...{} الرجاء الأنتظار @@ -1841,7 +1892,10 @@ STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK} اخت STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK} ضع علامة على التحديثات للمحتويات الموجودة و التي سيتم تحميلها STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK} مسح الكل STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK} ضع علامة على المحتوى التي لن يتم تحميلها +STR_CONTENT_SEARCH_EXTERNAL :{BLACK}بحث المواقع الخارجية STR_CONTENT_FILTER_TITLE :{BLACK}مُرَشِح: +STR_CONTENT_OPEN_URL :{BLACK} زيارة الموقع +STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}قم بزيارة الموقع لهذا المحتوى STR_CONTENT_DOWNLOAD_CAPTION :{BLACK} تحميل STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK} ابدأ تحميل المحتويات المختارة STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER} حجم البيانات التي سيتم تحميلها: {WHITE}{BYTES} @@ -1893,6 +1947,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}تحتا STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}نعم, حمل الرسومات STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}لا, اغلق اللعبة + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}خيارات الشفافية STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}بدل شفافية اسماء المحطات. مفتاح كنترول للاغلاق. @@ -1907,8 +1962,16 @@ STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}غير STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}اخفاء الاجرام تماما بدلا من الشفافية # Linkgraph legend window +STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}مفتاح تدفق البضائع +STR_LINKGRAPH_LEGEND_ALL :{BLACK}الكل +STR_LINKGRAPH_LEGEND_NONE :{BLACK}لا شيء +STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}حدد الشركات المراد عرضها +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap +STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}غير مستخدم +STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLACK}عادي الاستخدام +STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}زائد الاستخدام # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}وضح منطقة التغطية @@ -1926,6 +1989,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW} بنا STR_JOIN_WAYPOINT_CAPTION :{WHITE}اربط نقطة العبور STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW} ابني نقطة عبور مستقلة +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :بناء السكك الحديدية STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :بناء سكة القطار الكهربائية @@ -2028,7 +2093,10 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}بناء STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}بناء نفق ترام STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}بدل بناء/إزالة الطرق STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}بدل بناء / ازالة طرق الترام +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}تحويل / ترقية نوع الطريق. Shift يبدل بين البناء / إظهار تقدير التكلفة +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}تحويل / ترقية نوع الطريق. Shift يبدل بين البناء / إظهار تقدير التكلفة +STR_ROAD_NAME_TRAM :خط الترام # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}اتجاه ورشة الصيانة @@ -2109,7 +2177,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}حجم: STR_OBJECT_CLASS_LTHS :مناراة ضوئية STR_OBJECT_CLASS_TRNS :النواقل -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}اشجار STR_PLANT_TREE_TOOLTIP :{BLACK} اختر نوع الشجر لزراعتة, اذا المربع يحتوي على اشجار فهذا الامر يضيف المزيد STR_TREES_RANDOM_TYPE :{BLACK}شجر عشوائي @@ -2185,9 +2253,14 @@ STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}اعرض STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}اعرض المصانع التي تمد و تقبل البضائع STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}اربط بالخريطة المصغرة STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}اعرض المصانع المختارة في الخرائط المصغرة ايضا. +STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}اختر البضائع +STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}حدد البضائع التي تريد عرضها +STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}اختر الصناعة +STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}حدد الصناعة التي تريد عرضها # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}معلومات ارض +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}قم بتوسيط الشاشة على موقع المربع. يؤدي الضغط على Ctrl + النقر بالماوس إلى فتح منفذ عرض جديد على موقع المربع STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK} تكلفة الازالة : {LTBLUE} غير متاح STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}تكلفة الازالة : {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK} الدخل عند للتجديد: {LTBLUE}{CURRENCY_LONG} @@ -2208,6 +2281,8 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}اسم STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}الشحنة المقبولة: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA} /8 {STRING}) +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}:نوع الطريق {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}:نوع الترام {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}حدود سرعة سكة الحديد: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}حدود سرعه الطريق: {LTBLUE}{VELOCITY} @@ -2309,9 +2384,12 @@ STR_ABOUT_VERSION :{BLACK}النس STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-{STRING} فريق النسخة المفتوحة # Framerate display window +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} صورة في الثانية ############ Leave those lines in this order!! +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMESCRIPT :كتابة اللعبة ############ End of leave-in-this-order @@ -2337,21 +2415,19 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}تفاص STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}لا توجد معلومات متاحة STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}اضافات جديدة: {WHITE}{STRING} +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}الكتابة على الملف STR_SAVELOAD_OSKTITLE :{BLACK}ادخل اسم الحفظ للعبة # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}مولد الخريطة STR_MAPGEN_MAPSIZE :{BLACK}حجم الخريطة +STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK} حدد حجم الخريطة بالمربعات. سيكون عدد المربعات المتاحة أصغر قليلاً STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}عدد المدن: STR_MAPGEN_DATE :{BLACK}التاريخ: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}عدد المصانع: -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK} ارتفاع خط الثلج -STR_MAPGEN_SNOW_LINE_UP :{BLACK}ارفع خط الثلج مستوى واحد -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}خفض خط الثلج مستوى واحد STR_MAPGEN_LAND_GENERATOR :{BLACK}مولد الخريطة: -STR_MAPGEN_TREE_PLACER :{BLACK} لوغاريثم الشجر: STR_MAPGEN_TERRAIN_TYPE :{BLACK} نوع التضاريس STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}مستوى البحر STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}انهار: @@ -2376,8 +2452,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}اسم STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}الحجم: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} * {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}تغيير أعلى ارتفاع للخريطة -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}غير مستوى خط الثلج STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}غير سنة البداية # SE Map generation @@ -2588,6 +2662,7 @@ STR_TOWN_POPULATION :{BLACK}سكان STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} - مدينة - STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}السكان: {ORANGE}{COMMA}{BLACK} المنازل: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} الشهر الماضي: {ORANGE}{COMMA}{BLACK} الأقصى: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK} نمو المدينة يتطلب بضائع STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} مطلوب STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK}مطلوب في الشتاء @@ -2612,6 +2687,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :اعادة تس # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}بلدية {TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}المنطقة +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}عرض منطقة حدود السلطة المحلية STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}تقييم اداء الشركات STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}الخيارات المتاحة @@ -2638,6 +2715,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW} اشت STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW} ارشي السلطات المحلية لزيادة كفائة الشركة. هناك عقاب شديد اذا ما اكتشفت الرشوة.{} التكلفة: {CURRENCY_LONG} # Goal window +STR_GOALS_SPECTATOR :الأهداف العالمية STR_GOALS_TEXT :{ORANGE}{STRING} # Goal question window @@ -2647,6 +2725,9 @@ STR_GOAL_QUESTION_CAPTION_WARNING :تحذير STR_GOAL_QUESTION_CAPTION_ERROR :خطا ############ Start of Goal Question button list +STR_GOAL_QUESTION_BUTTON_YES :نعم +STR_GOAL_QUESTION_BUTTON_RETRY :إعادة المحاولة +STR_GOAL_QUESTION_BUTTON_RESTART :إعادة تشغيل ############ End of Goal Question button list # Subsidies window @@ -2659,6 +2740,7 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}اضغط على الخدمة لتوسيط الخريطة على المصنع/المدينة. اضغط + كنترول لفتح شاشة عرض جديدة للمدينة. # Story book window +STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}كتاب القصص # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}اسم المحطة - اضغط على اسم المحطة لتوسيطها في الشاشة. اضغط + كنترول لفتح شاشة عرض جديدة بمنطقة المحطة. @@ -2680,10 +2762,15 @@ STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}يستق STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}عرض لائحة بالبضائع المقبولة STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}يقبل: {WHITE}{CARGO_LIST} +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} اشترى حقوق النقل الحصرية في هذه المدينة. STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}معدل النقل STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}اظهار معدل النقل للمحطة +STR_STATION_VIEW_GROUP :{BLACK}جمع بواسطة +STR_STATION_VIEW_WAITING_AMOUNT :الكمية: في الانتظار +STR_STATION_VIEW_FROM :{YELLOW}{CARGO_SHORT} من {STATION} +STR_STATION_VIEW_TO :{YELLOW}{CARGO_SHORT} إلى {STATION} ############ range for rating starts @@ -2712,7 +2799,7 @@ STR_STATION_VIEW_RENAME_STATION_CAPTION :اعادة تس STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK} ركز شاشة العرض على نقطة العبور STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}غير اسم نقطة العبور -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK} ضع العوامة في مركز شاشة العرض +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK} ضع العوامة في مركز الشاشة STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK} غير اسم العومة STR_EDIT_WAYPOINT_NAME :{WHITE}عدل اسم نقطة العبور @@ -2745,6 +2832,7 @@ STR_FINANCES_BORROW_BUTTON :{BLACK}اقتر STR_FINANCES_BORROW_TOOLTIP :{BLACK}زيادة حجم القرض المسموح به STR_FINANCES_REPAY_BUTTON :{BLACK}تسديد{CURRENCY_LONG} STR_FINANCES_REPAY_TOOLTIP :{BLACK}اعادة جزء من القرض +STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}البنية التحتية # Company view STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY} {BLACK}{COMPANY_NUM} @@ -2760,6 +2848,13 @@ STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}بدون STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}قيمة الشركة: {WHITE}{CURRENCY_LONG} STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}( {COMMA}% مملوكة بواسطة {COMPANY}) +STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}البنية تحتية: +STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} قطعة السكك الحديدية +STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} قطعة الطريق +STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} مربعات الماء +STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} مربع من المحطة +STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} مطار +STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}لا شيء STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}بناء مقر الشركة الرئيسي STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}ابني مقر الشركة @@ -2767,6 +2862,10 @@ STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}عرض STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}اعرض مقر الشركة STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}اعادة بناء مقر الشركة STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}اعادة بناء مقر الشركة بمكان آخر و بتكلفة 1% من قيمة الشركة. +STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}التفاصيل +STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}عرض تفاصيل حسابات البنية التحتية +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}أعطاء المال +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}إعطاء المال لهذه الشركة STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}وجة جديد STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}اختر وجة جديد للمدير @@ -2784,16 +2883,29 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}بيع 2 STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :اسم الشركة STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :اسم صاحب الشركة +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :أدخل مبلغ المال الذي تريد تقديمه STR_BUY_COMPANY_MESSAGE :{WHITE}نحن نبحث عن شركة لتشتري شركتنا.{}{} عل ترغب في شراء {COMPANY} بـ {CURRENCY_LONG}؟ # Company infrastructure window +STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}البنية التحتية لـ {COMPANY} +STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}قطع السكك الحديدية: +STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}إشارات +STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}قطع الطريق: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}قطع الترام: +STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}مربعات من الماء: +STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}القنوات +STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}المحطات: +STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}مربعات من المحطة +STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}المطارات # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}صناعات STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}-بدون- STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}اسماء المصانع - اضغط على اسم المصنع لتوسيط الشاشة عليه. اضغط + كنترول لفتح شاشة عرض جديدة لمنطقة المصنع. +STR_INDUSTRY_DIRECTORY_FILTER_NONE :بدون # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -2803,6 +2915,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}وسط STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}نسبة الانتاج: {YELLOW}{COMMA}% +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}:يتطلب STR_CONFIG_GAME_PRODUCTION :{WHITE}تغيير الانتاج مضاعف من 8 الى 2040 STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}غير مستوى الانتاج{}نسبة مئوية حتى 800%. @@ -2867,6 +2980,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :أزل جميع STR_GROUP_RENAME_CAPTION :{BLACK}إعادة تسمية مجموعة +STR_GROUP_PROFIT_THIS_YEAR :دخل هذه السنة: +STR_GROUP_PROFIT_LAST_YEAR :دخل السنة الماضية: +STR_GROUP_OCCUPANCY :الاستخدام الحالي: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :عربات قطار جديدة @@ -2899,8 +3015,10 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK} الس STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK} العربات ذات الطاقة: {GOLD}+{POWER}{BLACK} الوزن: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}يمكن تعديلها الى: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :كل انواع الحمولة +STR_PURCHASE_INFO_NONE :بدون STR_PURCHASE_INFO_ALL_BUT :الكل الا {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}تأثير الجذب القصى: {GOLD}{FORCE} +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}نوع الطائرة:{GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}قائمة اختيار القطارات - اضغط على العربة لعرض معلوماتها STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}قائمة اختيار العربات - اضغط على العربة لاظهار معلوماتها @@ -2912,6 +3030,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}شراء STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}شراء سفينة STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}شراء طائرة +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}شراء العربة وتجديد بضائعها STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}شراء العربة الموضحة STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}شراء العربة @@ -2929,8 +3048,17 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK} اعا STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}اعادة تسمية نوع السفينة STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}اعادة تسمية نوع الطائرة +STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}إخفاء +STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}إخفاء +STR_BUY_VEHICLE_SHIP_HIDE_TOGGLE_BUTTON :{BLACK}إخفاء +STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :{BLACK}إخفاء +STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON :{BLACK}عرض +STR_BUY_VEHICLE_ROAD_VEHICLE_SHOW_TOGGLE_BUTTON :{BLACK}عرض +STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}عرض +STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}عرض +STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK} تبيدل بين إخفاء / عرض نوع الطائرة STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}اعادة تسمية عربات القطار STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}اعادة تسمية العربة @@ -3058,6 +3186,7 @@ STR_REPLACE_ELRAIL_VEHICLES :سكة حديد STR_REPLACE_MONORAIL_VEHICLES :عربات احادية السكة STR_REPLACE_MAGLEV_VEHICLES :مركبات ممغنطة +STR_REPLACE_TRAM_VEHICLES :مركبات الترام STR_REPLACE_REMOVE_WAGON :{BLACK} إزالة العربات: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK} المحافظة على طول القطار بازالة عربات ابتداء من المقدمة عند التبديل - عندما يكون التبدل ينتج قطارا اطول. @@ -3065,10 +3194,7 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK} الم # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}ضع القطار في مركز شاشة العرض. مفتاح كنترول لمتابعة حركة القطار. -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}وضع العربة في مركز شاشة العرض. مفتاح كنترول سيتابع حركة العربة. -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}عرض السفينة في مركز الشاشة. مفتاح كنترول سيتابع حركة السفينة. -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}وضع الطائرة في مركز الشاشة. مفتاح كنترول سيتابع حركة الطائرة +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}وسط الشاشة على موقع السيارة.النقر بالماوس مرتين لمتابعة السيارة. يفتح Ctrl + النقر بالماوس منفذ عرض جديد على موقع السيارة STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK} ارسل القطار للورشة - مفتاح التحكم (كنترول) + الضغط سيرسله لصيانة فقط STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}ارسل العربة الى الورشة. مفتاح التحكم (كنترول) + الضغط ترسل للصيانة فقط @@ -3100,10 +3226,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}عرض STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}عرض تفاصيل السفينة STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}عرض تفاصيل الطائرة -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}حركة القطار الحالية - اضغط هنا لايقاف / تشغيل القطار -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}حركة العربة الحالية - اضغط هنا لايقاف / تشغيل العربة -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}امر السفينة الحالي - اضغط لايقاف / تشغيل السفينة -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}وضع الطائرة الحالي - اضغط هنا لايقاف / تشغيل الطائرة + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}تحميل / تفريغ @@ -3161,6 +3284,7 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}فترا STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}زيادة فترات الصيانة بقدر 10. ومع مفتاح كنترول بمقدار 5. STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK} انقاص فترات الصيانة بمعدل 10. Ctrl+ الضغط الانقاص بمعدل 5. +STR_VEHICLE_DETAILS_DAYS :الأيام STR_QUERY_RENAME_TRAIN_CAPTION :{WHITE}اسم القطار STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}تسمية العربة @@ -3194,6 +3318,7 @@ STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}السع STR_REFIT_CAPTION :{WHITE}{VEHICLE} (تغيير) STR_REFIT_TITLE :{GOLD}اختر نوع الحمولة ... STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO_LONG}{}{BLACK}تكلفة التغيير: {RED}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}:المساحة الجديدة {GOLD}{CARGO_LONG}{}{BLACK}:الدخل من التجديد {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}تكلفة اعادة التهيئة: {RED}{CURRENCY_LONG} STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}اختر العربة لاعادة تهيئتها. اسحب بالفارة لاختيار عدة عربات. اضغط على مساحة خالية لاختيار كل العربات. اضغط + كنترول لاختيار العربة الحالية وما بعدها. @@ -3396,6 +3521,7 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}جدول STR_TIMETABLE_STATUS_START_AT :{BLACK}جدولة الاعمال ستبدأ فى {STRING} STR_TIMETABLE_STARTING_DATE :{BLACK}تاريخ البدأ +STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}حدد تاريخًا كنقطة بداية لهذا الجدول الزمني. يحدد Ctrl + Click نقطة البداية لهذا الجدول الزمني ويوزع جميع المركبات التي تشارك هذا الطلب بالتساوي بناءً على ترتيبها النسبي ، إذا كان الطلب محددًا بجدول زمني كامل STR_TIMETABLE_CHANGE_TIME :{BLACK}غير الوقت STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}غير مقدار الزمن الذي يستغرقه هذا الامر @@ -3458,6 +3584,7 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW} شاش STR_AI_CONFIG_CAPTION :{WHITE}إعدادات الذكاء الصناعي STR_AI_CONFIG_HUMAN_PLAYER :لاعب انساني STR_AI_CONFIG_RANDOM_AI :ذكاء صناعي عشوائي +STR_AI_CONFIG_NONE :(لا شيء) STR_AI_CONFIG_MOVE_UP :{BLACK}انقل للاعلى STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}انقل الذكاء الاصطناعي المختار للاعلى @@ -3481,6 +3608,8 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK} اخت STR_AI_LIST_CANCEL :{BLACK} الغاء STR_AI_LIST_CANCEL_TOOLTIP :{BLACK} لا تغير الذكاء الصناعي +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}التقط لقطة شاشة كاملة +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}صور الخاريطة الكاملة # AI Parameters STR_AI_SETTINGS_CLOSE :{BLACK} اغلاق @@ -3492,6 +3621,7 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}اقراني {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} سجل التغيير ل{STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING}رخصة {STRING} +STR_TEXTFILE_WRAP_TEXT :{WHITE}التفاف النص STR_TEXTFILE_VIEW_README :{BLACK}اعرض ملف التعليمات ريدمي STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}اعرض سجل التغييرات STR_TEXTFILE_VIEW_LICENCE :{BLACK}الرخصة @@ -3636,6 +3766,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... يم STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... يمكن بنائة في الغابات المطيرة فقط STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... يمكن بنائة في المناطق الصحراوية فقط STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... يبنى فقط في المدن +STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... لا يمكن بناؤها إلا بقرب وسط المدن STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... يمكن بنائه في المناطق المنخفضة فقط STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... يمكن بنائة على اطراف الخريطة فقط STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... يمكن زراعة الغابة فوق خط الثلج فقط @@ -3754,6 +3885,7 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}تعذر STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}تعذر إزاله سكه الترام من هنا... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... لا يوجد طريق STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... لا يوجد سكه ترام هنا +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}لا يوجد ترام مناسب # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}تعذر بناء القناه هنا... diff --git a/src/lang/basque.txt b/src/lang/basque.txt index ec593bd55b..b9f89ac069 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Garia STR_CARGO_PLURAL_RUBBER :Goma STR_CARGO_PLURAL_SUGAR :Azukrea STR_CARGO_PLURAL_TOYS :Jostailuak -STR_CARGO_PLURAL_CANDY :Gozokiak +STR_CARGO_PLURAL_SWEETS :Gozokiak STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Kotoiezko Azukrea +STR_CARGO_PLURAL_CANDYFLOSS :Kotoiezko Azukrea STR_CARGO_PLURAL_BUBBLES :Burbuilak STR_CARGO_PLURAL_TOFFEE :Gozoki lehengaia STR_CARGO_PLURAL_BATTERIES :Pilak @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Garia STR_CARGO_SINGULAR_RUBBER :Goma STR_CARGO_SINGULAR_SUGAR :Azukrea STR_CARGO_SINGULAR_TOY :Jostailua -STR_CARGO_SINGULAR_CANDY :Gozoki +STR_CARGO_SINGULAR_SWEETS :Gozoki STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Kotoiezko Azukrea +STR_CARGO_SINGULAR_CANDYFLOSS :Kotoiezko Azukrea STR_CARGO_SINGULAR_BUBBLE :Burbuila STR_CARGO_SINGULAR_TOFFEE :Gozoki lehengaia STR_CARGO_SINGULAR_BATTERY :Pila @@ -232,8 +232,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Hautatu STR_TOOLTIP_SORT_CRITERIA :{BLACK}Aukeratu ordenatze irizpideak STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Aukeratu iragazki irizpideak STR_BUTTON_SORT_BY :{BLACK}Ordenatu -STR_BUTTON_LOCATION :{BLACK}Kokapena -STR_BUTTON_RENAME :{BLACK}Berrizendatu STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Lehioa itxi STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Leiho izena - Arrastatu hau leihoa mugitzeko @@ -308,6 +306,8 @@ STR_SORT_BY_RANGE :Irismena STR_SORT_BY_POPULATION :Biztanleria STR_SORT_BY_RATING :Balorazioa +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Jokoa pausatu STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Jokoa bizkortu @@ -392,7 +392,7 @@ STR_FILE_MENU_EXIT :Irten # map menu STR_MAP_MENU_MAP_OF_WORLD :Munduko mapa -STR_MAP_MENU_EXTRA_VIEW_PORT :lehio extra +STR_MAP_MENU_EXTRA_VIEWPORT :lehio extra STR_MAP_MENU_SIGN_LIST :Seinale zerrenda ############ range for town menu starts @@ -555,8 +555,8 @@ STR_MONTH_DEC :Abendua # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Giltza STR_GRAPH_KEY_TOOLTIP :{BLACK}Erakutsi giltza grafikoetan -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -861,7 +861,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN}ko udaletxeak {STRING}rekin urte beterako erabateko garraio-eskubideen kontratua sinatu du! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Leihoa {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Leihoa {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Leihora kopiatu STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK} Leiho nagusian ikusten dena leiho honetara kopiatu STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Aldatu ikuspen nagusia @@ -909,8 +909,6 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgiarra STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniarra (IRR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Errepideko garraioak -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Aukeratu ibilgailuen gidatzeko norabidea STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Ezkerretik gidatu STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Eskuinetik gidatu @@ -962,6 +960,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Pantaila STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Pantailaren resulozioa aukeratu STR_GAME_OPTIONS_RESOLUTION_OTHER :besteak + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Interfaze tamaina STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normala @@ -970,6 +970,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Tamaina laukoit + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafiko basea markatu STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Aukeratu erabili beharreko grafiko paketea STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} galdutako/hautsitako artxiboa{P "" k} @@ -1452,8 +1454,6 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Kolorezko albis STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Egunkarien mezuak kolorean imprimatuko diren urtea. Urte hau baino lehenago txuri/beltz monokromoa erabiliko da STR_CONFIG_SETTING_STARTING_YEAR :Hasierako urtea: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Gaitu ekonomia leuna (aldaketa gehiago baina txikiagoak): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Gaitua dagoenean, industrien ekoizpena gehiagotan aldatuko da baina urrats txikiagotan. Aukera honek gehienetan ez du eraginik izango industriak NewGRF batek ezartzen baditu STR_CONFIG_SETTING_ALLOW_SHARES :Beste konpainien akzioak erostea baimendu: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Gaitua dagoenean, konpainiaren akzioak erostea eta saltzea baimendu. Konpainiak akzioak izateko gutxiengo adin batera iritsi beharko dira STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Elikadura sistemetan ordaindu beharreko irabazien ehunekoa: {STRING} @@ -1499,9 +1499,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Gaitua herrien STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Zuhaitzen landaketa jokoan: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Jokoa bitartean zuhaitzen ausazko landatzea kontrolatu. Zuhaitzen landatzean oinarritzen diren industriei eragin dezake, zerrategiei adibidez -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ezer ez {RED}(Paisai tropikalean zerrategiak hautsiko ditu) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Bakarrik basoetan -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Leku guztietan STR_CONFIG_SETTING_TOOLBAR_POS :Tresna barra nagusiaren kokapena: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Tresna barra nagusia posizio horizontalean pantailaren goiko aldean @@ -1632,6 +1629,8 @@ STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... jara STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... jaramonik ez egiten musika paketeari'{STRING}': ez da aurkitu STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memoriaz kanpo +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1674,18 +1673,9 @@ STR_INTRO_TRANSLATION :{BLACK}Itzultze # Quit window STR_QUIT_CAPTION :{WHITE}Irten -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Zihur zaude OpenTTD-tik irten nahi duzula eta {STRING}-ra itzuli? STR_QUIT_YES :{BLACK}Bai STR_QUIT_NO :{BLACK}Ez -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Jokoa Utzi STR_ABANDON_GAME_QUERY :{YELLOW}Ziur zaude joko hau utzi nahi duzula? @@ -1694,7 +1684,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}¿Segur # Cheat window STR_CHEATS :{WHITE}Trukoak STR_CHEATS_TOOLTIP :{BLACK}Kontrol laukiek erakutsiko dute trukoak erabili badituzu -STR_CHEATS_WARNING :{BLACK}Abisua! Zure kideak traizionatzear zaude. Gogoratu traizioa ez dela inoiz ahaztuko STR_CHEAT_MONEY :{LTBLUE}Dirua {CURRENCY_LONG}-etan areagotu STR_CHEAT_CHANGE_COMPANY :{LTBLUE} {ORANGE}{COMMA} konpainiarekin jolastu STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer magikoa (edozer ezabatzen du): {ORANGE}{STRING} @@ -1803,8 +1792,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Aldatu k # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijokalaria -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ez -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Bai STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Jokalariaren izena: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Izen honen bidez ezagutua izango zara beste jokalarien artean @@ -1845,8 +1832,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Jokoan s STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Zerbitzaria freskatu STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Zerbitzariaren informazioa freskatu -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Zerbitzaria bilatu -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Sarean zerbitzariak bilatu STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Zerbitzaria gehitu STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Zerrendara zerbitzari bat gehitu martxa dauden jokoak bilatuko dituena STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Zerbitzari bat sortu @@ -1975,7 +1960,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Konpainia berri # Network client list STR_NETWORK_CLIENTLIST_KICK :Kanporatu STR_NETWORK_CLIENTLIST_BAN :Debekatu -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Dirua eman STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Guztiei hitz egin STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Konpainiari hitz egin STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mezu pribatua @@ -1984,8 +1968,6 @@ STR_NETWORK_SERVER :Zerbitzaria STR_NETWORK_CLIENT :Bezeroa STR_NETWORK_SPECTATORS :Ikusleak -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Eman nahi duzun diru kantitatea ezarri - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ez gorde sartutako pasahitza STR_COMPANY_PASSWORD_OK :{BLACK}Konpainiari pasahitz berria ezarri @@ -2085,8 +2067,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ik STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} konpainia berria sortu du (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} jokoa utzi du ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING}-k bere izena {STRING}-ra aldatu du -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} zure empresa eman {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Zuk eman diozu {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Zebitzariak saioa itxi du STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Zerbitzaria berriro hasten ari da...{}Mesedez itxaron... @@ -2161,6 +2141,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD- STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Bai, grafikoak jaitsi STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Ez, OpenTTD itxi + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Gardentasun aukerak STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Seinaleen gardentasuna aldatu. Ktrl+Klik blokeatzeko @@ -2198,6 +2179,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Geltoki STR_JOIN_WAYPOINT_CAPTION :{WHITE}Bidepuntua lotu STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Ibilbide puntu bereizitua eraiki +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Trenbidea eraiki STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Trenbide elektrikoa eraiki @@ -2381,7 +2364,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Tamainua STR_OBJECT_CLASS_LTHS :Itsasargiak STR_OBJECT_CLASS_TRNS :Igorgailuak -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Zuhaitzak STR_PLANT_TREE_TOOLTIP :{BLACK} Aukeratu landatuko diren zuhaitz motak. Laukiak zuhaitza badauka mota ezberdinetako zuhaitz gehio geituko ditu STR_TREES_RANDOM_TYPE :{BLACK}Ausazko zuhaitz motak @@ -2630,11 +2613,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Herri kopurua: STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Industria kopurua: -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Elur garaiera: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Igo puntu batean elur garaiera -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Jeitsi puntu batean elur garaiera STR_MAPGEN_LAND_GENERATOR :{BLACK}Paisaia sortzailea: -STR_MAPGEN_TREE_PLACER :{BLACK}Zuhaitz algoritmoa: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Lur mota: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Itsaso kopurua: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Errekak: @@ -2659,8 +2638,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Garaiera STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamaina: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Aldatu maparen garaiera maximoa -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Elur garaiera aldatu STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Hasierako urtea aldatu # SE Map generation @@ -2928,13 +2905,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Udaletx # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Helburuak STR_GOALS_SPECTATOR_CAPTION :{WHITE}Helburu orokorrak -STR_GOALS_GLOBAL_TITLE :{BLACK}Helburu orokorrak: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Ezer ez - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Ez aplikagarria - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Konpainiaren helburuak: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikatu helburuan ikupegi nagusia industrian/herrian/laukian zentratzeko. Ktrl+Klik ikuspegi lehio berria irekiko du industri/herri/laukiaren kokapenean # Goal question window @@ -3450,10 +3424,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Ordezkat # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Ikuspegi nagusia trenean kokatu. Ktrl+klik trena ikuspegi nagusiarekin jarraitzeko -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Ikuspegi nagusia errepide ibilgailuan kokatu. Ktrl+klik errepide ibilgailua ikuspegi nagusiarekin jarraitzeko -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Ikuspegi nagusia itsasontzian kokatu. Ktrl+klik itsasontzia ikuspegi nagusiarekin jarraitzeko -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Ikuspegi nagusia hegazkinean kokatu. Ktrl+klik hegazkina ikuspegi nagusiarekin jarraitzeko STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Trena gordailura bidali. Ktrl+klik bakarrik mantenimendua egiteko STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Errepide ibilgailua gordailura bidali. Ktrl+klik bakarrik mantenimendua egiteko @@ -3485,10 +3455,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Errepide STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Itsasontziaren xehetasunak ikusi STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Hegazkinaren xehetasunak ikusi -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Trena orain egiten ari den ekitza - Klik trena gelditzeko/abiarazteko. Krtl+klik helmugara bideratzeko -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Ibilgailua orain egiten ari duen ekitza - Klik ibilgailua gelditzeko/abiarazteko. Krtl+klik helmugara bideratzeko -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Itsasontzia orain egiten ari duen ekitza - Klik itsasontzia gelditzeko/abiarazteko. Krtl+klik helmugara bideratzeko -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Hegazkina orain egiten ari duen ekitza - Klik hegazkina gelditzeko/abiarazteko. Krtl+klik helmugara bideratzeko + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Kargatzen/Deskargatzen diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 23fd735b62..9a9c84ba6e 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -166,24 +166,24 @@ STR_CARGO_PLURAL_TOYS.dat :цацкам STR_CARGO_PLURAL_TOYS.acc :цацкі STR_CARGO_PLURAL_TOYS.abl :цацкамі STR_CARGO_PLURAL_TOYS.pre :цацках -STR_CARGO_PLURAL_CANDY :{G=p}Цукеркi -STR_CARGO_PLURAL_CANDY.gen :цукерак -STR_CARGO_PLURAL_CANDY.dat :цукеркам -STR_CARGO_PLURAL_CANDY.acc :цукеркі -STR_CARGO_PLURAL_CANDY.abl :цукеркамі -STR_CARGO_PLURAL_CANDY.pre :цукерках +STR_CARGO_PLURAL_SWEETS :{G=p}Цукеркi +STR_CARGO_PLURAL_SWEETS.gen :цукерак +STR_CARGO_PLURAL_SWEETS.dat :цукеркам +STR_CARGO_PLURAL_SWEETS.acc :цукеркі +STR_CARGO_PLURAL_SWEETS.abl :цукеркамі +STR_CARGO_PLURAL_SWEETS.pre :цукерках STR_CARGO_PLURAL_COLA :{G=f}Кола STR_CARGO_PLURAL_COLA.gen :колы STR_CARGO_PLURAL_COLA.dat :коле STR_CARGO_PLURAL_COLA.acc :колу STR_CARGO_PLURAL_COLA.abl :колай STR_CARGO_PLURAL_COLA.pre :коле -STR_CARGO_PLURAL_COTTON_CANDY :{G=f}Цукровая баўна -STR_CARGO_PLURAL_COTTON_CANDY.gen :цукровай баўны -STR_CARGO_PLURAL_COTTON_CANDY.dat :цукровай баўне -STR_CARGO_PLURAL_COTTON_CANDY.acc :цукровую баўну -STR_CARGO_PLURAL_COTTON_CANDY.abl :цукровай баўнай -STR_CARGO_PLURAL_COTTON_CANDY.pre :цукровай баўне +STR_CARGO_PLURAL_CANDYFLOSS :{G=f}Цукровая баўна +STR_CARGO_PLURAL_CANDYFLOSS.gen :цукровай баўны +STR_CARGO_PLURAL_CANDYFLOSS.dat :цукровай баўне +STR_CARGO_PLURAL_CANDYFLOSS.acc :цукровую баўну +STR_CARGO_PLURAL_CANDYFLOSS.abl :цукровай баўнай +STR_CARGO_PLURAL_CANDYFLOSS.pre :цукровай баўне STR_CARGO_PLURAL_BUBBLES :{G=p}Бурбалкi STR_CARGO_PLURAL_BUBBLES.gen :бурбалак STR_CARGO_PLURAL_BUBBLES.dat :бурбалкам @@ -355,24 +355,24 @@ STR_CARGO_SINGULAR_TOY.dat :цаццы STR_CARGO_SINGULAR_TOY.acc :цацку STR_CARGO_SINGULAR_TOY.abl :цацкай STR_CARGO_SINGULAR_TOY.pre :цаццы -STR_CARGO_SINGULAR_CANDY :{G=f}Цукерка -STR_CARGO_SINGULAR_CANDY.gen :цукеркі -STR_CARGO_SINGULAR_CANDY.dat :цукерцы -STR_CARGO_SINGULAR_CANDY.acc :цукерку -STR_CARGO_SINGULAR_CANDY.abl :цукеркай -STR_CARGO_SINGULAR_CANDY.pre :цукерцы +STR_CARGO_SINGULAR_SWEETS :{G=f}Цукерка +STR_CARGO_SINGULAR_SWEETS.gen :цукеркі +STR_CARGO_SINGULAR_SWEETS.dat :цукерцы +STR_CARGO_SINGULAR_SWEETS.acc :цукерку +STR_CARGO_SINGULAR_SWEETS.abl :цукеркай +STR_CARGO_SINGULAR_SWEETS.pre :цукерцы STR_CARGO_SINGULAR_COLA :{G=f}Кола STR_CARGO_SINGULAR_COLA.gen :колы STR_CARGO_SINGULAR_COLA.dat :коле STR_CARGO_SINGULAR_COLA.acc :колу STR_CARGO_SINGULAR_COLA.abl :колай STR_CARGO_SINGULAR_COLA.pre :коле -STR_CARGO_SINGULAR_COTTON_CANDY :{G=f}Цукровая баўна -STR_CARGO_SINGULAR_COTTON_CANDY.gen :цукровай баўны -STR_CARGO_SINGULAR_COTTON_CANDY.dat :цукровай баўне -STR_CARGO_SINGULAR_COTTON_CANDY.acc :цукровую баўну -STR_CARGO_SINGULAR_COTTON_CANDY.abl :цукровай баўнай -STR_CARGO_SINGULAR_COTTON_CANDY.pre :цукровай баўне +STR_CARGO_SINGULAR_CANDYFLOSS :{G=f}Цукровая баўна +STR_CARGO_SINGULAR_CANDYFLOSS.gen :цукровай баўны +STR_CARGO_SINGULAR_CANDYFLOSS.dat :цукровай баўне +STR_CARGO_SINGULAR_CANDYFLOSS.acc :цукровую баўну +STR_CARGO_SINGULAR_CANDYFLOSS.abl :цукровай баўнай +STR_CARGO_SINGULAR_CANDYFLOSS.pre :цукровай баўне STR_CARGO_SINGULAR_BUBBLE :{G=f}Бурбалка STR_CARGO_SINGULAR_BUBBLE.gen :бурбалкі STR_CARGO_SINGULAR_BUBBLE.dat :бурбалцы @@ -545,8 +545,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Зьме STR_TOOLTIP_SORT_CRITERIA :{BLACK}Зьмена крытэрыю сартаваньня STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Выберыце фiльтр STR_BUTTON_SORT_BY :{BLACK}Сартаваньне -STR_BUTTON_LOCATION :{BLACK}Агляд -STR_BUTTON_RENAME :{BLACK}Перайменаваць STR_BUTTON_CATCHMENT :{BLACK}Ахоп STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Закрыць вакно @@ -626,6 +624,8 @@ STR_SORT_BY_RANGE :Далёкас STR_SORT_BY_POPULATION :Насельніцтва STR_SORT_BY_RATING :Рэйтынґ +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Паўза STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Паскорыць гульню @@ -712,7 +712,7 @@ STR_FILE_MENU_EXIT :Выхад # map menu STR_MAP_MENU_MAP_OF_WORLD :Мапа сусьвету -STR_MAP_MENU_EXTRA_VIEW_PORT :Дадатковае вакно прагляду +STR_MAP_MENU_EXTRA_VIEWPORT :Дадатковае вакно прагляду STR_MAP_MENU_LINGRAPH_LEGEND :Леґенда грузаперавозак STR_MAP_MENU_SIGN_LIST :Сьпіс таблічак @@ -878,8 +878,8 @@ STR_MONTH_DEC :Сьнежан # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Леґенда STR_GRAPH_KEY_TOOLTIP :{BLACK}Паказаць леґенду да ґрафікаў -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -1194,7 +1194,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Мясцовыя ўлады г. {TOWN} падпісалі кантракт з {STRING} на адзін год эксклюзыўных транспартных правоў! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Вакно прагляду {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Вакно прагляду {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Капіяваць у вакно прагляду STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Скапіяваць бягучую пазыцыю ў вакно прагляду STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}У асноўнае акно @@ -1244,10 +1244,9 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Мексіка STR_GAME_OPTIONS_CURRENCY_NTD :Новы тайваньскі даляр (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Кітайскі юань (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Ганконскі даляр (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Індыйская рупія (INR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Дарожны рух -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Па якім баку дарогі рухаецца аўтатранспарт STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Езьдзіць леваруч STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Езьдзіць праваруч @@ -1299,6 +1298,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Выра STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Выбар вырашэньня экрана STR_GAME_OPTIONS_RESOLUTION_OTHER :Iншае + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Памер элементаў інтэрфейсу STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Выберыце памер элементаў інтэрфейсу @@ -1311,6 +1312,8 @@ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Абяр STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Звычайны + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Набор базавай ґрафікі STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Выбар базавага набору ґрафічных аб'ектаў STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} адсутнічаюч{P ы ых ых}/пашкоджан{P ы ых ых} файл{P "" ы аў} @@ -1486,8 +1489,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Пераклю STR_CONFIG_SETTING_CITY_APPROVAL :Стаўленьне гарадзкой рады да рэструктурызацыі навакольляў: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Выберыце ўзровень шуму й забруджваньня навакольнага асяроддзя кампаніямі, які ўплывае на іх рэйтынґ у гарадах і магчымасьць далейшага будаўніцтва каля гарадоў -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Максімальная вышыня: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Усталёўка максімальна дапушчальнай вышыні гор на мапе STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Немагчыма зьмяніць максімальную вышыню. На мапе ёсць горы вышэй гэтага значэньня. STR_CONFIG_SETTING_AUTOSLOPE :Дазволіць зьмену ляндшафту пад будынкамі, дарогамі й г. д. (аўтаспускі): {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Дазволіць зьмену ляндшафту пад будынкамі й рэйкамi, не выдаляючы іx @@ -1853,8 +1854,6 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Год, у як STR_CONFIG_SETTING_STARTING_YEAR :Год пачатку гульні: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Ніколі -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Уключыць лагодную эканоміку (больш дробных зьменаў): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Калі ўключана, вытворчасьць прадпрыемстваў зьмяняецца часьцей ды малымі крокамі. Гэтая наладка звычайна не дае эфэкту, калі тыпы прадпрыемстваў вызначае набор новай ґрафікі (NewGRF). STR_CONFIG_SETTING_ALLOW_SHARES :Дазволіць купляць акцыі іншых кампаніяў: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Калі ўключана, дазваляецца купляць і прадаваць долі ў кампаніях. Акцыі даступны для кампаніяў, якія дасягнулі пэўнага ўзросту. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Мін. узрост кампаніі для выпуску акцыяў: {STRING} @@ -1906,9 +1905,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :лінейна STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Расстаноўка дрэваў у гульні: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Кантроль адвольнага з'яўленьня дрэваў падчас гульні. Гэта можа закрануць прадпрыемствы, якія залежаць ад росту дрэваў, напрыклад, пільні. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :адключана {RED}(пільні ня змогуць працаваць) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :толькі ў трапічных джунґлях -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :усюды STR_CONFIG_SETTING_TOOLBAR_POS :Разьмяшчэньне галоўнай панэлі: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Гарызантальнае разьмяшчэньне галоўнай панэлі інструмэнтаў зьверху экрана. @@ -2064,6 +2060,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... на STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Недахоп апэратыўнай памяці STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Не атрымалася вылучыць {BYTES} для кэша спрайтаў. Памер кэша зніжаны да {BYTES}. Гэта адмоўна адаб'ецца на прадукцыйнасьці OpenTTD. Каб зьменшыць выдаткі памяці, адключыце 32-бітную ґрафіку й зьменшыце максімальны ўзровень набліжэньня. +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2107,18 +2105,9 @@ STR_INTRO_TRANSLATION :{BLACK}На г # Quit window STR_QUIT_CAPTION :{WHITE}Выхад -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Вы ўпэўнены, што жадаеце перапыніць гульню й вярнуцца ў {STRING}? STR_QUIT_YES :{BLACK}Так STR_QUIT_NO :{BLACK}Не -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}У галоўнае мэню STR_ABANDON_GAME_QUERY :{YELLOW}Вы сапраўды жадаеце пакінуць гульню? @@ -2127,7 +2116,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Вы ў # Cheat window STR_CHEATS :{WHITE}Махлярства (чыты) STR_CHEATS_TOOLTIP :{BLACK}Птушкі паказваюць, ці выкарыстоўвалі Вы гэты чыт раней -STR_CHEATS_WARNING :{BLACK}Увага, Вы зьбіраецеся здрадзіць сваім спаборнікам! Гэтага вам ніколі не даруюць! STR_CHEAT_MONEY :{LTBLUE}Дадаць {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Гульня за кампанію: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Чароўны дынамiт (знос УСЯГО): {ORANGE}{STRING} @@ -2239,10 +2227,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Зьмя # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Сеткавая гульня -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Інтэрнэт -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Выберыце паміж гульнёй праз Інтэрнэт або ў лакальнай сетцы -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Не -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Так STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Імя гульца: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Гэта ваша імя, якое будзе бачна іншым гульцам @@ -2283,8 +2267,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Далу STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Абнавіць сэрвэр STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Абнавіць iнфармацыю аб сэрвэры -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Знайсьці сэрвэр -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Знайсьці сэрвэры, якія зараз ёсьць у сетцы STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Дадаць сэрвэр STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Дадаць сэрвэр у сьпіс, які будзе аўтаматычна правярацца на ідучыя гульні STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Запуск сэрвэра @@ -2301,6 +2283,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Назв STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Усталяваць пароль STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Абараніце вашу гульню паролем, калі ня хочаце рабіць яе публічна даступнай +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Інтэрнэт +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Выберыце паміж гульнёй праз Інтэрнэт або ў лакальнай сетцы STR_NETWORK_START_SERVER_UNADVERTISED :Не STR_NETWORK_START_SERVER_ADVERTISED :Так STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клiент{P "" ы аў} @@ -2414,7 +2398,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Новая ка # Network client list STR_NETWORK_CLIENTLIST_KICK :Выкінуць гульца STR_NETWORK_CLIENTLIST_BAN :Бан -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Передаць грошай STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Пагутарыць з усімі STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Пагутарыць з кампаніяй STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Прыватнае паведамленьне @@ -2423,8 +2406,6 @@ STR_NETWORK_SERVER :Сэрвэр STR_NETWORK_CLIENT :Кліент STR_NETWORK_SPECTATORS :Назіральнікі -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Увядзіце суму грошай, якую вы хочаце перадаць - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Не захоўваць уведзены пароль STR_COMPANY_PASSWORD_OK :{BLACK}Даць кампаніі новы пароль @@ -2525,8 +2506,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} д STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} распачаў новую кампанію (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} выйшаў з гульні ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} зьмяніў сваё імя на {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} перадаў вашай кампаніі {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Вы перадалі {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Гэты сэрвэр закрыў сэсію STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Гэты сэрвэр перазапускаецца...{}Пачакайце, калі ласка @@ -2619,6 +2598,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Так, спампаваць ґрафiку STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Не, выйсьцi з OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Наладкі празрыстасьці STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Пераключэньне празрыстасьці надпісаў. Ctrl+пстрычка — заблякаваць. @@ -2660,6 +2640,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Паб STR_JOIN_WAYPOINT_CAPTION :{WHITE}Аб'яднаць пункты шляху STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Пабудаваць асобны пункт шляху +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Чыгунка STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Электрыфікаваная чыгунка @@ -2848,7 +2830,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Паме STR_OBJECT_CLASS_LTHS :Маякi STR_OBJECT_CLASS_TRNS :Перадатчыкi -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Дрэвы STR_PLANT_TREE_TOOLTIP :{BLACK}Выберыце тып дрэваў для пасадкі. Калі на ўчастку ўжо ёсьць дрэвы, будуць дададзены некалькі дрэваў рознага тыпу, незалежна ад выбранага. STR_TREES_RANDOM_TYPE :{BLACK}Дрэвы розных відаў @@ -3128,14 +3110,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Колькасьць гарадоў: STR_MAPGEN_DATE :{BLACK}Дата: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Колькасьць прадпрыемстваў: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Макс. вышыня мапы: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Павялічыць максімальную вышыню мапы на 1 -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Паменшыць максімальную вышыню мапы на 1 -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Вышыня сьнегавой лініі: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Падняць сьнегавую лінію -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Апусьціць сьнегавую лінію STR_MAPGEN_LAND_GENERATOR :{BLACK}Ґенэратар ляндшафту: -STR_MAPGEN_TREE_PLACER :{BLACK}Альґарытм дрэваў: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Тып ляндшафту: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Колькасьць азёраў/мораў: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Колькасьць рэк: @@ -3160,8 +3135,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Назв STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Памер: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} * {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Максімальная вышыня мапы -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Зьмяніць вышыню сьнегавой лініі STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Зьмяніць год пачатку гульні # SE Map generation @@ -3447,13 +3420,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Дац STR_GOALS_CAPTION :{WHITE}Задачы кампаніі «{COMPANY}» STR_GOALS_SPECTATOR_CAPTION :{WHITE}Глабальныя задачы STR_GOALS_SPECTATOR :Агульныя задачы -STR_GOALS_GLOBAL_TITLE :{BLACK}Агульныя задачы: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Няма - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Непрыстасоўна - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Задачы кампаніі: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Пстрыкніце па задачы, каб паказаць прадпрыемства/горад/клетку. Ctrl+пстрычка паказвае ў новым вакне. # Goal question window @@ -4030,10 +4000,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Дазв # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Паказаць цягнiк у галоўным вакне. Ctrl+клік — сачыць за цягнiком у галоўным вакне. -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Паказаць аўтамабiль у галоўным вакне. Ctrl+клік — сачыць за ім у галоўным вакне. -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Паказаць карабель у галоўным вакне. Ctrl+клік будзе сачыць за караблём у галоўным вакне. -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Паказаць паветранае судна у галоўным вакне. Ctrl+клік — сачыць за ім у галоўным вакне. STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Паслаць цягнiк у дэпо. Ctrl+клік — толькі для абслугоўваньня. STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Паслаць аўтамабiль у гараж. Ctrl+клік — толькі для абслугоўваньня. @@ -4065,10 +4031,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Пака STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Паказаць зьвесткі аб караблi STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Паказаць зьвесткі аб авiятранспарце -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Бягучае дзеяньне цягнiка; клікніце для яго спыненьня/запуску. Ctrl+клік — агляд пункта прызначэньня. -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Бягучае дзеяньне аўтамабiля; клікніце для яго спыненьня/запуску. Ctrl+клік — агляд пункта прызначэньня. -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Бягучае дзеяньне карабля; клікніце для яго спыненьня/запуску. Ctrl+клік — агляд пункта прызначэньня. -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Бягучае дзеяньне паветранага судна; клікніце для яго спыненьня/запуску. Ctrl+клік — агляд пункта прызначэньня. + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Разгрузка / Пагрузка diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index adbf2a4cdf..3c1083f5bc 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=m}Trigo STR_CARGO_PLURAL_RUBBER :{G=f}Borracha STR_CARGO_PLURAL_SUGAR :{G=m}Açúcar STR_CARGO_PLURAL_TOYS :{G=m}Brinquedos -STR_CARGO_PLURAL_CANDY :{G=m}Doces +STR_CARGO_PLURAL_SWEETS :{G=m}Doces STR_CARGO_PLURAL_COLA :{G=f}Cola -STR_CARGO_PLURAL_COTTON_CANDY :{G=m}Algodão Doce +STR_CARGO_PLURAL_CANDYFLOSS :{G=m}Algodão Doce STR_CARGO_PLURAL_BUBBLES :{G=f}Bolhas STR_CARGO_PLURAL_TOFFEE :{G=m}Caramelo STR_CARGO_PLURAL_BATTERIES :{G=f}Pilhas @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=m}Trigo STR_CARGO_SINGULAR_RUBBER :{G=f}Borracha STR_CARGO_SINGULAR_SUGAR :{G=m}Açúcar STR_CARGO_SINGULAR_TOY :{G=m}Brinquedo -STR_CARGO_SINGULAR_CANDY :{G=m}Doce +STR_CARGO_SINGULAR_SWEETS :{G=m}Doce STR_CARGO_SINGULAR_COLA :{G=m}Cola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=m}Algodão doce +STR_CARGO_SINGULAR_CANDYFLOSS :{G=m}Algodão doce STR_CARGO_SINGULAR_BUBBLE :{G=f}Bolha STR_CARGO_SINGULAR_TOFFEE :{G=m}Caramelo STR_CARGO_SINGULAR_BATTERY :{G=f}Pilha @@ -188,11 +188,14 @@ STR_COLOUR_ORANGE :Laranja STR_COLOUR_BROWN :Marrom STR_COLOUR_GREY :Cinza STR_COLOUR_WHITE :Branco +STR_COLOUR_RANDOM :Aleatório +STR_COLOUR_DEFAULT :Padrão # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}quadrados/dia STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp STR_UNITS_POWER_METRIC :{COMMA}{NBSP}cv @@ -232,8 +235,8 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Selecion STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecione critério de classificação STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selecione critério para filtração STR_BUTTON_SORT_BY :{BLACK}Classificar por -STR_BUTTON_LOCATION :{BLACK}Local -STR_BUTTON_RENAME :{BLACK}Renomear +STR_BUTTON_CATCHMENT :{BLACK}Cobertura +STR_TOOLTIP_CATCHMENT :{BLACK}Alternar a visão da área de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela @@ -262,6 +265,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ao ativa STR_BUTTON_DEFAULT :{BLACK}Padrão STR_BUTTON_CANCEL :{BLACK}Cancelar STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Aviso: os administradores do servidor podem ler qualquer texto inserido aqui. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -310,6 +314,15 @@ STR_SORT_BY_CARGO_CAPACITY :Capacidade de C STR_SORT_BY_RANGE :Alcance STR_SORT_BY_POPULATION :População STR_SORT_BY_RATING :Classificação +STR_SORT_BY_NUM_VEHICLES :Número de veículos +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Lucro total do ano passado +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Lucro total deste ano +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Lucro médio do ano passado +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Lucro médio deste ano + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Nenhum +STR_GROUP_BY_SHARED_ORDERS :Ordens compartilhadas # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar jogo @@ -335,6 +348,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Ampliar STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Reduzir a visão STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir linha ferroviária STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construir rodovias +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construir bondes STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construir docas STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construir aeroportos STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir a barra de paisagismo para elevar ou abaixar terreno, plantar árvores, etc. @@ -355,6 +369,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Geraçã STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Geração de cidades STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Geração de indústria STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Contrução de rodovias +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construção de trilho de bonde STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Shift alterna construção/exibição de preço estimado STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar placa STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Shift alterna construção/preço estimado @@ -363,7 +378,7 @@ STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Salvar cenário STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :Carregar cenário STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Salvar mapa topográfico -STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Carregar mapa de elevação +STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Carregar mapa topográfico STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Sair do editor de cenários STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Sair @@ -396,7 +411,7 @@ STR_FILE_MENU_EXIT :Sair # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa do mundo -STR_MAP_MENU_EXTRA_VIEW_PORT :Janela extra +STR_MAP_MENU_EXTRA_VIEWPORT :Janela extra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda do Fluxo de Carga STR_MAP_MENU_SIGN_LIST :Lista de sinais @@ -463,6 +478,7 @@ STR_TOOLBAR_SOUND_MUSIC :Som/música ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Última mensagem/notícia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Histórico de Mensagens +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Apagar todas as mensagens ############ range ends here ############ range for about menu starts @@ -561,8 +577,8 @@ STR_MONTH_DEC :Dezembro # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Chave STR_GRAPH_KEY_TOOLTIP :{BLACK}Exibir chave aos gráficos -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{} {NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -732,6 +748,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Terreno Irregular STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Gramado STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Terreno Descoberto +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Floresta Tropical STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Campos STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Árvores STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Rochas @@ -763,6 +780,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Exibe to STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Exibir a última mensagem ou notícia STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * PAUSADO * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUSADO (aguardando atualização do gráfico de links) * * STR_STATUSBAR_AUTOSAVE :{RED}Salvo Automaticamente STR_STATUSBAR_SAVING_GAME :{RED}* * SALVANDO JOGO * * @@ -857,6 +875,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G o a} {STRING} já está disponível! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Abrir a janela do grupo focado no grupo do veículo STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} não aceita mais {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} não aceita mais {STRING} ou {STRING} @@ -876,7 +895,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Prefeitura de {TOWN} assina contrato de exclusividade com {STRING} por um ano! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Janela {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Janela {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Alterar visualização STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiar o local da tela principal para esta janela STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Colar da visualização principal @@ -920,13 +939,18 @@ STR_GAME_OPTIONS_CURRENCY_LTL :Litas Lituano ( STR_GAME_OPTIONS_CURRENCY_KRW :Won Sul-Coreano (KRW) STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Sul-Africano (ZAR) STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizado... -STR_GAME_OPTIONS_CURRENCY_GEL :Lari da Georgia -STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano +STR_GAME_OPTIONS_CURRENCY_GEL :Lari da Georgia (GEL) +STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Novo Rublo Russo (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexicano (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Novo dólar de Taiwan (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi chinês (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Dólar de Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Rúpia Indiana (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Rupia Indonésia (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaio (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automóveis -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Selecionar lado da rodovia para automóveis dirigirem STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Dirigem na esquerda STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Dirigem na direita @@ -977,15 +1001,38 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Marcar e STR_GAME_OPTIONS_RESOLUTION :{BLACK}Resolução da tela STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Selecionar a resolução da tela para usar STR_GAME_OPTIONS_RESOLUTION_OTHER :outra +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Aceleração de hardware +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque esta caixa para permitir que o OpenTTD tente usar a aceleração de hardware. Qualquer mudança nesta configuração só será aplicada após reiniciar o jogo. +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A configuração só terá efeito após reiniciar o jogo + +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para habilitar o v-sync na tela. Qualquer mudança nesta configuração só será aplicada após reiniciar o jogo. Só funciona com a aceleração de hardware habilitada STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Tamanho da interface STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Selecione o tamanho de elemento de interface a ser usado +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(detecção automática) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobro STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quádruplo +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Tamanho da fonte +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Selecione o tamanho da fonte da interface a ser usado +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(detecção automática) +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Tamanho duplo +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Tamanho quádruplo + +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Gráficos + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Taxa de atualização da tela +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Selecione a taxa de atualização da tela a ser usada +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :outra +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Taxas de atualização superiores a 60Hz podem afetar o desempenho. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecionar o conjunto de gráficos base para usar @@ -1081,6 +1128,8 @@ STR_TERRAIN_TYPE_FLAT :Plano STR_TERRAIN_TYPE_HILLY :Acidentado STR_TERRAIN_TYPE_MOUNTAINOUS :Montanhoso STR_TERRAIN_TYPE_ALPINIST :Alpinista +STR_TERRAIN_TYPE_CUSTOM :Altura personalizada +STR_TERRAIN_TYPE_CUSTOM_VALUE :Altura personalizada ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Permissivo STR_CITY_APPROVAL_TOLERANT :Tolerante @@ -1162,13 +1211,17 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Alterna desastr STR_CONFIG_SETTING_CITY_APPROVAL :Atitude da prefeitura em relação à restruturação local: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Escolhe como a poluição sonoroa e ambiental afeta a classificação na cidade e as ações futuras naquela área -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Altura máx. do mapa: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Define a altitude máxima para montanhas no mapa -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Impossível definir a altitude máx. do mapa para esse valor. Há ao menos uma montanha mais alta que isso +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Limite de altura do mapa: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Define a altura máxima do terreno do mapa. Com "(automático)", um bom valor será escolhido após a geração do terreno +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(automático) +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Impossível definir o limite de altura do mapa para este valor. Há ao menos uma montanha mais alta que isso STR_CONFIG_SETTING_AUTOSLOPE :Permitir paisagismo sob edifícios, trilhos, etc.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite paisagismo sob edifícios e vias sem precisar removê-las STR_CONFIG_SETTING_CATCHMENT :Dimensionamento mais realista das áreas de abrangência: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Exibe áreas de abrangência de para diferentes tipos de estações e aeroportos +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Estações de companhias podem servir indústrias com estações neutras conectadas: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quando habilitado, os setores com estações conectadas (como plataformas de petróleo) também podem ser atendidos por estações de propriedade da empresa construídas nas proximidades. Quando desativados, esses setores só podem ser atendidos por suas estações anexas. Qualquer estação próxima da empresa não será capaz de atendê-los, nem a estação anexa servirá qualquer outra coisa que não seja a indústria STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir a remoção de mais rodovias, pontes, etc. das cidades: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Torna mais fácil remover infraestrutura e edifícios de cidades STR_CONFIG_SETTING_TRAIN_LENGTH :Tamanho máximo de trens: {STRING} @@ -1254,6 +1307,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Impossí STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenção de Infraestrutura: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quando ativado, infraestrutura gera custos de manutenção. O custo aumenta proporcionalmente à malha de transportes, afetando companhias maiores mais do que as menores +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Cor inicial para a empresa: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolha a cor inicial para a empresa STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca saem de linha: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ativando essa config. mantém todos os tipos de aeroportos disponíveis à construção após sua introdução @@ -1288,6 +1343,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Exibir populaç STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Exibe a população das cidades nos nomes, no mapa STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Espessura das linhas nos gráficos: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da linha nos gráficos. Linhas finas são mais precisas, enquanto linhas grossas são mais fáceis de distinguir. +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adicione uma linha à janela de construção do veículo, mostrando de qual NewGRF o veículo selecionado vem. STR_CONFIG_SETTING_LANDSCAPE :Terreno: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :O terreno define a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das cidades. NewGRF's e Scripts de Jogo permitem um controle mais fino @@ -1302,7 +1359,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Define quantas STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Dist máx da borda para Refinarias de Óleo: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Refinarias são construídas apenas nas bordas, ou no litoral, para ilhas STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a que altitude a neve começa nos climas sub-árticos. Neve também afeta geração de indústrias e necessidades para o crescimento das cidades +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a que altitude a neve começa nos climas sub-árticos. Neve também afeta geração de indústrias e necessidades para o crescimento das cidades. Só pode ser modificado por meio do Editor de cenário ou é de outra forma calculado por meio de "cobertura de neve" +STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controla a quantidade aproximada de neve no terreno subártico. A neve também afeta os requisitos de geração de indústria e crescimento de cidades. Usado apenas durante a geração de mapas. Terreno logo acima do nível do mar é sempre sem neve +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Controla a quantidade aproximada de deserto no terreno tropical. O deserto também afeta a geração de indústrias. Usado apenas durante a geração do mapa +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregularidade do terreno: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis apenas) Escolhe a frequência de colinas: Terrenos planos têm menos colinas, mais espalhadas. Montanhosos tem mais colinas, que pode se tornar repetitivo STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Muito Regular @@ -1416,6 +1479,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Manter a barra STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Mantém as ferramentas de construção para pontes, túneis, etc abertas após o uso STR_CONFIG_SETTING_EXPENSES_LAYOUT :Agrupar despesas na janela de financas da companhia: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Define o layout para os gastos da companhia +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automaticamente remove sinais durante a construção de ferrovias: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automaticamente remove sinais durante a construção de ferrovias se os sinais estiverem no caminho. Note que isso pode levar a acidentes ferroviários. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limite de velocidade de avanço rápido: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limita o quão rápido o jogo vai quando o avanço rápido está ativado. 0 = sem limite (o máximo que o seu computador suporta). Valores abaixo de 100% tornam o jogo mais lento. O limite máximo depende das especificações do seu computador e pode variar dependendo do jogo. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% a velocidade normal do jogo +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sem limite (o máximo que o seu computador suporta) STR_CONFIG_SETTING_SOUND_TICKER :Notícias: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Toca um som para mensagens resumidas @@ -1464,6 +1533,9 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IA em STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite jogadores controlados pelo computador participar em jogos multijogador STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos de computação que um script pode tomar em um turno +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Memória máxima usada por script: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quanta memória um único script pode consumir antes de ser encerrado à força. Isso pode precisar ser aumentado para mapas grandes. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Os intervalos de serviço são em percentagem: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Define se a manutenção de veículos é ativada pelo tempo passado desde a última manutenção ou quando a confiabilidade alcança um certo valor @@ -1522,10 +1594,19 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completa STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Noticias coloridas aparecem em: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano a partir do qual os jornais são impressos em cor. Antes disso, serão em preto-e-branco STR_CONFIG_SETTING_STARTING_YEAR :Data de início: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Ativar economia regular (alterações menores): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Quando ativado, a produção de indústrias muda com mais frequência, e mais sutilmente +STR_CONFIG_SETTING_ENDING_YEAR :Pontuação no fim do ano: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Ano em que o jogo termina para fins de pontuação. No final deste ano, a pontuação da empresa é registrada e a tela de pontuação máxima é exibida, mas os jogadores podem continuar jogando depois disso.{} Se isso for antes do ano inicial, a tela de pontuação máxima nunca será exibida. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca +STR_CONFIG_SETTING_ECONOMY_TYPE :Tipo de economia: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Economia suave faz mudanças de produção com mais frequência, e em etapas menores. Economia congelada impede mudanças de produção e fechamentos de indústrias. Esta configuração pode não ter efeito se os tipos de indústria forem fornecidos por um NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suave +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Congelada STR_CONFIG_SETTING_ALLOW_SHARES :Permite comprar ações de outras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Se ativado, permite a compra e venda de ações de companhias. Ações de outras empresas poderão serem compradas após um período de tempo após a fundação da empresa +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da companhia para trocar ações: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Defina a idade mínima de uma companhia para as outras estarem aptas a comprar e vender ações entre elas. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentagem paga em cada etapa em sistemas de baldeação: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem do lucro dado a cada estação de baldeação em sistemas de mais de um transporte, dando mais controle de lucro STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Ao arrastar, colocar sinais a cada: {STRING} @@ -1566,12 +1647,17 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Se ativado, per STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Proibido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, layout de cidades customizável +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Geração de carga da cidade: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quanta carga é produzida pelas casas nas cidades, em relação à população geral da cidade.{} Crescimento quadrático: uma cidade com o dobro do tamanho gera quatro vezes mais passageiros.{} Crescimento linear: uma cidade com o dobro do tamanho gera o dobro da quantidade de passageiros. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadrático (original) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Posicionamento de árvores: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla o nascimento aleatório de árvores durante o jogo. Isso pode afetar indústrias que dependem do crescimento de árvores, como serrarias -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nenhum {RED}(extingue a serraria) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Apenas nas florestas tropicais -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Em todo o lugar +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Crescer sem espalhar {RED}(afeta serrarias) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Crescer, mas apenas espalhar em florestas tropicais +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Crescer e espalhar em todos os lugares +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Não crescer, não espalhar {RED}(afeta serrarias) STR_CONFIG_SETTING_TOOLBAR_POS :Posição da barra de ferramentas principal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posição horizontal da barra de ferramentas principal no topo da tela @@ -1589,12 +1675,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :Nível máximo STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Zoom adentro máximo para janelas de visualização. Note que ativar zoom maiores aumenta o uso de memória STR_CONFIG_SETTING_ZOOM_MAX :Nível máximo de zoom afora: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Zoom afora máximo para janelas de visualização. Note que ativar zoom maiores causa lag durante o jogo +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Resolução máxima de sprites a serem usados: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita a resolução máxima a ser usada para sprites. Limitar a resolução de sprites evitará o uso de gráficos de alta resolução, mesmo quando estiverem disponíveis. Isso pode ajudar a manter a aparência do jogo uniforme quando estiver usando uma mistura de arquivos GRF com e sem gráficos de alta resolução. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normal STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Velocidade de crescimento de cidade: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocidade com a qual as cidades expandem STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Nenhum @@ -1638,6 +1729,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Sempre que uma STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Métrico (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unidades de jogo (quadr./dia) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unidade de potência veicular: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Sempre que a potência de um veículo for exibida na interface de usuário, será exibida na unidade selecionada @@ -1727,6 +1819,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Sem memória STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}A alocação {BYTES} de spritecache falhou. O spritecache foi reduzido a {BYTES}. A performance do jogo será reduzida. Para reduzir a necessidade de memória tente disabilitar 32bpp gráficos e/ou reduzir o zoom. +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}Erro nas configurações de vídeo... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nenhuma GPU compatível encontrada. Aceleração de hardware desativada + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1770,27 +1866,19 @@ STR_INTRO_TRANSLATION :{BLACK}Faltam { # Quit window STR_QUIT_CAPTION :{WHITE}Sair -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Tem a certeza que deseja abandonar este jogo e voltar ao {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Tem a certeza que quer sair do OpenTTD? STR_QUIT_YES :{BLACK}Sim STR_QUIT_NO :{BLACK}Não -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandonar jogo -STR_ABANDON_GAME_QUERY :{YELLOW}Você tem certeza que deseja abandonar este jogo? +STR_ABANDON_GAME_QUERY :{YELLOW}Você tem certeza que quer abandonar este jogo? STR_ABANDON_SCENARIO_QUERY :{YELLOW}Você tem certeza que quer abandonar este cenário? # Cheat window STR_CHEATS :{WHITE}Trapaças STR_CHEATS_TOOLTIP :{BLACK}As caixas de verificação indicam se você usou esta trapaça antes -STR_CHEATS_WARNING :{BLACK}Atenção! Você está prestes a trair os seus companheiros oponentes. Tenha em mente que tal desgraça será lembrada pela eternidade +STR_CHEATS_NOTE :{BLACK}Nota: qualquer uso dessas configurações será gravado pelo jogo salvo STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando pela Co.: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadeira mágica (destrói indústrias, objetos estáticos): {ORANGE}{STRING} @@ -1807,6 +1895,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mudar an STR_CHEAT_SETUP_PROD :{LTBLUE}Ativar modificação de valores de produção: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Esquema de cores STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Exibir esquemas de cor gerais STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibe esquemas de cor de trens @@ -1901,10 +1990,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Alterar # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multi-jogador -STR_NETWORK_SERVER_LIST_ADVERTISED :[BLACK}Publicado -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Selecione entre um jogo publicado (internet) ou não publicado (Rede de Área Local, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Não -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sim STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Este é o nome pelo qual os outros jogadores irão te identificar @@ -1945,8 +2030,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Entrar n STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Atualizar dados STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Atualiza as informações sobre o servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Localizar servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Pesquisar por um servidor na rede +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Procurar na internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Procura servidores públicos na internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Buscar na LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Procura servidores na rede local STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Adicionar servidor STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adiciona um servidor à lista que será sempre verificada se existem jogos ocorrendo STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor @@ -1963,6 +2050,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Definir senha STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que seja publicamente acessível +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :[BLACK}Publicado +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Selecione entre um jogo publicado (internet) ou não publicado (Rede de Área Local, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Não STR_NETWORK_START_SERVER_ADVERTISED :Sim STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} @@ -2066,6 +2155,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconec STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor está protegido. Digite a senha STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa está protegida. Digite a senha +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista de clientes # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes @@ -2075,7 +2165,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova Companhia # Network client list STR_NETWORK_CLIENTLIST_KICK :Banir STR_NETWORK_CLIENTLIST_BAN :Banir -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Dar dinheiro STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Falar com todos STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Falar com a empresa STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mensagem privada @@ -2084,8 +2173,6 @@ STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente STR_NETWORK_SPECTATORS :Espectadores -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Entre a quantia a ser dada - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Não salvar a senha digitada STR_COMPANY_PASSWORD_OK :{BLACK}Dar à empresa uma nova senha @@ -2130,6 +2217,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Senha in STR_NETWORK_ERROR_SERVER_FULL :{WHITE}O servidor está cheio STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Você foi banido deste servidor STR_NETWORK_ERROR_KICKED :{WHITE}Você foi expulso do jogo +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Motivo: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Trapaceiros não são permitidos neste servidor STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Você enviou comandos demais ao servidor STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Você demorou demais para digitar a senha @@ -2171,11 +2259,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Jogo ainda paus STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Jogo ainda pausado ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Jogo ainda pausado ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Jogo ainda pausado ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Jogo ainda pausado ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Jogo despausado ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :número de jogadores STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :clientes conectando-se STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manual STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :{G=m}script do jogo +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :aguardando atualização do gráfico de links ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :saindo STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} entrou no jogo @@ -2185,10 +2275,10 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} es STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} abriu uma nova companhia (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} saiu do jogo ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} mudou seu nome para {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} deu à sua companhia{2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Você deu a {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} deu {2:CURRENCY_LONG} a {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}O servidor fechou a sessão STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servidor está reiniciando...{}Aguarde... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} foi kickado. Motivo: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Baixando conteúdo @@ -2224,7 +2314,7 @@ STR_CONTENT_DETAIL_NAME :{SILVER}Nome: { STR_CONTENT_DETAIL_VERSION :{SILVER}Versão: {WHITE}{STRING} STR_CONTENT_DETAIL_DESCRIPTION :{SILVER}Descrição: {WHITE}{STRING} STR_CONTENT_DETAIL_URL :{SILVER}URL: {WHITE}{STRING} -STR_CONTENT_DETAIL_TYPE :{SILVER}Tipp: {WHITE}{STRING} +STR_CONTENT_DETAIL_TYPE :{SILVER}Tipo: {WHITE}{STRING} STR_CONTENT_DETAIL_FILESIZE :{SILVER}Tamanho: {WHITE}{BYTES} STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER}Selecionado pois: {WHITE}{STRING} STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}Dependentes: {WHITE}{STRING} @@ -2240,7 +2330,7 @@ STR_CONTENT_TYPE_AI_LIBRARY :Biblioteca de I STR_CONTENT_TYPE_SCENARIO :Cenário STR_CONTENT_TYPE_HEIGHTMAP :Mapa topográfico STR_CONTENT_TYPE_BASE_SOUNDS :Sons padrão -STR_CONTENT_TYPE_BASE_MUSIC :Músicsas padrão +STR_CONTENT_TYPE_BASE_MUSIC :Músicas padrão STR_CONTENT_TYPE_GAME_SCRIPT :Script do jogo STR_CONTENT_TYPE_GS_LIBRARY :Biblioteca de GS's @@ -2263,6 +2353,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Sim, baixar os gráficos STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Não, sair do OpenTTD +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}O download falhou +STR_MISSING_GRAPHICS_ERROR :{BLACK}O download de gráficos falhou.{}Por favor, baixe os gráficos manualmente. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Sair do OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Opções de Transparência STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Alternar transparência para sinais de estação. Ctrl+Clique para travar @@ -2304,6 +2398,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Constru STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir ponto de controle STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construir um ponto de controle separado +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Desativado pois não há nenhum veículo disponível para essa infraestrutura + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construir ferrovias STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construir ferrovias (elétricas) @@ -2406,7 +2503,11 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel de bonde. Shift altera construção/preço estimado STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Alternar construir/remover para contrução rodoviária STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Alternar construir/remover linhas de bonde e sinais +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/atualizar o tipo de estrada. Shift altera construção/exibição de estimativa de custo +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Melhorar o tipo de bonde. Shift troca construção/amostra custo estimado +STR_ROAD_NAME_ROAD :Estrada +STR_ROAD_NAME_TRAM :Bonde # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientação da Garagem @@ -2487,13 +2588,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: STR_OBJECT_CLASS_LTHS :Faróis STR_OBJECT_CLASS_TRNS :Transmissores -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Árvores STR_PLANT_TREE_TOOLTIP :{BLACK}Selecionar um tipo de árvore para plantar. Se o local já tiver uma árvore, isso irá adicionar mais árvores do tipo misto indepentendemente do tipo selecionado STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar árvores de tipo aleatório, Shift alterna entre construção/preço estimado STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Planta árvores aleatoriamente pelo terreno +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Planta árvores isoladas ao arrastar pelo terreno. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Bosque +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Planta pequenas florestas ao arrastar pelo terreno. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Floresta +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Planta florestas grandes ao arrastar pelo terreno. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Gerar Terreno @@ -2504,10 +2611,10 @@ STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Diminui STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Gera terreno aleatório STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Criar novo cenário STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Limpar terreno -STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Remover todas as propriedades da companhia do mapa +STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Remove todas as propriedades da empresa do mapa STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Limpar Terreno -STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Tem certeza que deseja remover todas as propriedades da companhia? +STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Tem certeza que quer remover todas as propriedades da empresa? # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Gerar Cidades @@ -2544,12 +2651,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Randômi # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Financiar nova indústria STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Escolha a indústria apropriada -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Várias indústrias aleatórias +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Criar indústrias aleatórias STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cobrir o mapa com indústrias colocadas aleatoriamente +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Criar indústrias aleatórias +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Você tem certeza que quer criar várias indústrias aleatoriamente? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Custo: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prosperir STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Construir STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Fundar +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Remover todas as indústrias +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Remove todas as indústrias atualmente presentes no mapa +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Remover todas as indústrias +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Você tem certeza que quer remover todas as indústrias? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadeia de indústrias para a indústria: {STRING} @@ -2570,6 +2683,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Selecion # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informações do Terreno +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centraliza a janela no local da área de terreno. Ctrl+Clique abre uma nova janela no local da área de terreno STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Preço para limpar: {LTBLUE}N/D STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Preço para limpar: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Ganhos pela limpeza: {LTBLUE}{CURRENCY_LONG} @@ -2591,8 +2705,11 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceita: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de ferrovia: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Tipo de estrada: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tipo de bonde: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Velocidade limite do trilho: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Limite de velocidade da rua: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Limite de vel. do Trem Elétrico: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Rochas @@ -2702,6 +2819,7 @@ STR_FRAMERATE_SPEED_FACTOR :{WHITE}Fator de STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está sendo executado, comparado com a velocidade esperada na simulação normal STR_FRAMERATE_CURRENT :{WHITE}Atual STR_FRAMERATE_AVERAGE :{WHITE}Médio +STR_FRAMERATE_MEMORYUSE :{WHITE}Memória STR_FRAMERATE_DATA_POINTS :{WHITE}Dados baseados em {COMMA} medidas STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms @@ -2709,31 +2827,44 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{ STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} quadros/s STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} quadros/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} quadros/s +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} +STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Loop total do jogo: STR_FRAMERATE_GL_ECONOMY :{WHITE} Manuseio de carga: STR_FRAMERATE_GL_TRAINS :{WHITE} Tiques de trem: STR_FRAMERATE_GL_ROADVEHS :{WHITE} Tiques de automóveis: STR_FRAMERATE_GL_SHIPS :{WHITE} Tiques de embarcação: STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Tiques de aeronave: STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Tiques do mundo: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Atraso no gráfico de link: STR_FRAMERATE_DRAWING :{WHITE}Renderizações de gráficos: STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Visualizações do mundo: STR_FRAMERATE_VIDEO :{WHITE}Saída de vídeo: STR_FRAMERATE_SOUND :{WHITE}Mixagem de áudio: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI total: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Script do jogo: +STR_FRAMERATE_AI :{BLACK} IA {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Loop de jogo STR_FRAMETIME_CAPTION_GL_ECONOMY :Manuseio de carga STR_FRAMETIME_CAPTION_GL_TRAINS :Tiques de trem STR_FRAMETIME_CAPTION_GL_ROADVEHS :Tiques de automóveis STR_FRAMETIME_CAPTION_GL_SHIPS :Tiques de embarcação STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Tiques de aeronave: STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Tiques do mundo +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Atraso no gráfico de link STR_FRAMETIME_CAPTION_DRAWING :Renderizações de gráficos STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderização da janela principal STR_FRAMETIME_CAPTION_VIDEO :Saída de vídeo STR_FRAMETIME_CAPTION_SOUND :Mixagem de áudio +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Total de scripts GS/AI +STR_FRAMETIME_CAPTION_GAMESCRIPT :Script de jogo +STR_FRAMETIME_CAPTION_AI :IA {NUM} {STRING} ############ End of leave-in-this-order @@ -2759,6 +2890,11 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalhes STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nenhuma informação disponível STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtro: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Substituir ficheiro +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Tem certeza de que deseja substituir o arquivo existente? +STR_SAVELOAD_DIRECTORY :{STRING} (Diretório) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Diretório raiz) STR_SAVELOAD_OSKTITLE :{BLACK}Coloque o nome para o jogo salvo @@ -2770,14 +2906,18 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}No. de cidades: STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}No. de indústrias: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Altitude máx. do mapa: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Aumenta a altitude máxima das montanhas no mapa em uma unidade -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Diminui a altitude máxima das montanhas no mapa em uma unidade -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Linha da neve -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Aumentar a linha da neve em um ponto -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Diminuir a linha da neve em um ponto +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Pico mais alto: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Aumentar a altura máxima do pico mais alto no mapa por um +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Diminuir a altura máxima do pico mais alto no mapa por um +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Cobertura de neve: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Aumentar em dez porcento a cobertura de neve +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Reduzir em dez porcento a cobertura de neve +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Cobertura do deserto: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Aumentar a cobertura do deserto em dez por cento +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Diminuir a cobertura do deserto em dez por cento +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Gerador de terra -STR_MAPGEN_TREE_PLACER :{BLACK}Algorítimo de árvores STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipo de terreno STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Nível do mar: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rios: @@ -2802,8 +2942,10 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Alterar a altitude máxima do mapa -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Mudar linha da neve +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura alvo do pico +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Pico mais alto +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Cobertura de neve (%) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Cobertura do deserto (%) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Mudar data de início # SE Map generation @@ -2876,7 +3018,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versão: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versão compatível: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}SomaMD5 (verf. de segurança): {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Padrão (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Padrão (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legado (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legado (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parâmetros: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nenhum STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Sem informação disponível STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Arquivo correspondente não encontrado @@ -2957,6 +3104,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Leitura após o STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF requeridos indisponíveis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desativado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de layout de sprite inválido/desconhecido (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Muitos elementos na lista de valores da propriedade (sprite {3:NUM}, property {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Retorno de produção da indústria inválido (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Cuidado! @@ -2988,6 +3137,7 @@ STR_NEWGRF_BUGGY :{WHITE}O NewGRF STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informação de carga/readaptação para '{1:ENGINE}' difere da lista de aquisição após a construção. Isso pode causar a autorenovação/-substituição à falhar a readaptação corretamente. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' causou um loop infinito no callback da produção STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Retorno {1:HEX} retornou um resultado desconhecido/inválido {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' retornou tipo de carga inválido no retorno de chamada de produção em {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3012,6 +3162,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Ativa/De # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Editar texto da placa +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centraliza janela no local da placa. Ctrl+Clique abre uma nova janela no local da placa STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Próxima Placa STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Placa anterior @@ -3054,6 +3205,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Renomear Cidade # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Prefeitura de {TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostrar zona dentro dos limites da prefeitura STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Avaliações das empresas STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Ações disponíveis: @@ -3070,32 +3223,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financiar novos STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar exclusividade da rede de transportes STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a prefeitura -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Iniciar uma pequena campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Preço: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Iniciar uma campanha publicitária média, para atrair mais passageiros e carga para seus serviços de transporte.{}Preço: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Iniciar uma grande campanha publicitária, para atrair mais passageiros e cargas para seus serviços de transporte.{}Preço: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW} Financiar a reconstrução da malha rodoviária urbana. Causa engarrafamentos consideráveis ao tráfego por até 6 meses.{}Preço: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW} Construir uma estátua em honra para sua empresa.{} Preço: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW} Financiar a construção de edifícios comerciais novos na cidade.{}Preço: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW} Comprar a exclusividade dos serviços durante 1 ano na cidade. A prefeitura da cidade permitirá que os passageiros e cargas usem somente estações de sua empresa.{} Preço: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Iniciar uma pequena campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um pequeno raio ao redor do centro da cidade.{}Preço: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Iniciar uma campanha publicitária média, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um raio médio ao redor do centro da cidade.{}Preço: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Iniciar uma grande campanha publicitária, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um grande raio ao redor do centro da cidade.{}Preço: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financiar a reconstrução da malha rodoviária urbana.{}Causa engarrafamentos consideráveis ao tráfego por até 6 meses.{}Preço: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Fornece um aumento permanente na avaliação da estação nesta cidade.{}Preço: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financiar a construção de edifícios comerciais novos na cidade.{}Fornece um aumento temporário do crescimento da cidade nesta cidade.{}Preço: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Comprar a exclusividade dos serviços durante 1 ano na cidade.{}A prefeitura da cidade não permitirá que passageiros e cargas usem as estações de seus concorrentes.{}Preço: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Subornar a prefeitura para aumentar a sua avaliação, correndo o risco de uma penalidade severa se apanhado.{}Preço: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Objetivos STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objetivos globais -STR_GOALS_GLOBAL_TITLE :{G=m}{BLACK}Objetivos globais: +STR_GOALS_SPECTATOR :Objetivos Globais +STR_GOALS_GLOBAL_BUTTON :{BLACK}Globais +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Mostra objetivos globais +STR_GOALS_COMPANY_BUTTON :{BLACK}Empresa +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Mostra objetivos da empresa STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{G=m}{ORANGE}- Nenhum - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Não aplicável - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{G=m}{BLACK}Objetivos da empresa: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique num objetivo para centralizar a visualização principal numa indústria/cidade.Ctrl+Clique abre uma nova janela na localização da indústria/cidade # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Pergunta -STR_GOAL_QUESTION_CAPTION_INFORMATION :Informação -STR_GOAL_QUESTION_CAPTION_WARNING :Alerta -STR_GOAL_QUESTION_CAPTION_ERROR :Erro +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Pergunta +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informação +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Alerta +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Erro ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Cancelar @@ -3130,6 +3285,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique n # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Livro de Histórias de {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Livro de Histórias Global +STR_STORY_BOOK_SPECTATOR :Livro de Histórias Global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pág. {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Vai para uma página específicao selecionar da lista @@ -3219,7 +3375,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Impedir STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrar visão no local do ponto de caminho. Ctrl+Clique abre uma nova janela no local do ponto de caminho STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Renomear ponto de controle -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrar visão no local da bóia. Ctrl+Clique abre uma nova janela no local da bóia +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centraliza janela no local da bóia. Ctrl+Clique abre uma nova janela no local da bóia STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Renomear bóia STR_EDIT_WAYPOINT_NAME :{WHITE}Editar nome do ponto de controle @@ -3284,6 +3440,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Mover se STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruir sede da empresa em outro local por 1% do valor da empresa. Shift+Clique mostra o preço estimado sem reconstruir a sede STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalhes STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Ver informações detalhadas de infraestrutura +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dar dinheiro +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Dá dinheiro a essa empresa STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Novo Rosto STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Selecionar novo rosto para o presidente @@ -3301,6 +3459,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Vender 2 STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nome da Empresa STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do Presidente +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Inserir a quantidade de dinheiro que você quer dar STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos à procura de uma empresa de transportes para comprar a nossa empresa{}{}Deseja comprar {COMPANY} por {CURRENCY_LONG}? @@ -3309,6 +3468,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraest STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Partes de ferrovias: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinais STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Partes de rodovias: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Peças do bonde: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Partes d'água: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canais STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estações: @@ -3319,8 +3479,17 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Indústrias STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Nenhum - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportado){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} e {NUM} mais... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nomes das indústrias - clique no nome para centralizar a visçao principal na indústria. Ctrl+Clique abre uma nova janela na localização da indústria +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Carga aceita: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Carga produzida: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Todos os tipos de carga +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Nenhum # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3330,6 +3499,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou fechamento iminente! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Necessita: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3383,15 +3555,17 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Automóveis sem STR_GROUP_DEFAULT_SHIPS :Embarcações sem grupo STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sem grupo +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clique em um grupo para listar seus veículos. Clique e arraste para organizar a hierarquia. STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Remove o grupo selecionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Renomeia o grupo selecionado +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a pintura do grupo selecionado STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para excluir esse grupo da substituição automática STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Remover grupo -STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Tem certeza que deseja remover esse grupo e seus descendentes? +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Tem certeza que quer remover esse grupo e seus descendentes? STR_GROUP_ADD_SHARED_VEHICLE :Adicionar veículos compartilhados STR_GROUP_REMOVE_ALL_VEHICLES :Remover todos os veículos @@ -3410,14 +3584,17 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nova Locomotiva STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nova Locomotiva Maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Novos Automóveis +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Novo Veículo Elétrico ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Trens +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Novo Veículo Terrestre STR_BUY_VEHICLE_SHIP_CAPTION :Novas Embarcações STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nova Aeronave ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Preço: {GOLD}{CURRENCY_LONG}{BLACK} Peso: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo de Troca: {GOLD}{CURRENCY_LONG}{BLACK}) Peso: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Velocidade: {GOLD}{VELOCITY}{BLACK} Potência: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Velocidade: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Velocidade em oceanos: {GOLD}{VELOCITY} @@ -3428,12 +3605,16 @@ STR_PURCHASE_INFO_REFITTABLE :(adaptável) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Desenvolvida: {GOLD}{NUM}{BLACK} Vida: {GOLD}{COMMA} ano{P "" s} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Confiabilidade Máx.: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Preço: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo para Reequipar: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Peso: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Preço: {GOLD}{CURRENCY_LONG}{BLACK} Velocidade: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo de Troca: {GOLD}{CURRENCY_LONG}{BLACK}) Velocidade: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacidade: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagões energizados: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Adaptável para: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Todos as cargas +STR_PURCHASE_INFO_NONE :Nenhum +STR_PURCHASE_INFO_ENGINES_ONLY :Apenas motores STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Tração máx : {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} quadrados @@ -3449,12 +3630,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar Embarcação STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar Aeronave +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e reequipar veículo +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Reequipar Veículo +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Repor Navio +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e reequipar aeronaves -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra o veículo ferroviário selecionado. Shift+Clique mostra preço estimado sem a compra -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra o veículo selecionado. Shift+Clique mostra preço estimado sem a compra +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra o veículo ferroviário selecionado. Shift+Clique mostra preço estimado +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra o veículo selecionado. Shift+Clique mostra preço estimado STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Compra a embarcação selecionada. Shift+Clique mostra preço estimado sem a compra STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Compra a aeronave selecionada. Shift+Clique mostra o preço estimado sem a compra +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra e troque o trem destacado. Shift+Click mostra o custo estimado +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compre e troque o veículo terrestre destacado. Shift+Clique mostra o custo estimado sem comprá-lo +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :Compre e reequipa o navio selecionado. Shift+Clique mostra o custo estimado +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra e reequipa a aeronave selecionada. Shift+Clique mostra o custo estimado STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renomear @@ -3540,9 +3729,9 @@ STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Isso ir STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Isso irá comprar uma cópia de uma aeronave. Clique nesse botão e depois em uma aeronave dentro ou fora do hangar. Ctrl+Clique compartilhará as ordens. Shift+Clique mostra o preço estimado sem a compra STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrar visão no local de um depósito ferroviário. Ctrl+Clique abre uma nova janela no local do depósito de trem -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização da garagem. Ctrl+Clique abre uma nova janela de visualização -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centrar visão no local do depósito naval. Ctrl+Clique abre uma nova janela no local do depósito naval -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrar visão no local do hangar. Ctrl+Clique abre uma nova janela no local do hangar +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centraliza a janela na localização da garagem. Ctrl+Clique abre uma nova janela na localização da garagem. +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centraliza visão no local do depósito naval. Ctrl+Clique abre uma nova janela no local do depósito naval +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centraliza a janela no local do hangar. Ctrl+Clique abre uma nova janela no local do hangar STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Obtém uma lista de todos os trens com este depósito em suas ordens STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Obtém uma lista de todos os automóveis com esta garagem em suas ordens @@ -3566,10 +3755,12 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Mensagem STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Projetamos um novo {STRING} - estaria interessado em um ano de exclusividade do uso deste veículo, de modo a que possamos avaliar a sua performance antes de o disponibilizar para todos ? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :locomotiva ferroviária +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :locomotiva ferroviária eletrificada STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :locomotiva monotrilho STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :locomotiva maglev STR_ENGINE_PREVIEW_ROAD_VEHICLE :automóvel +STR_ENGINE_PREVIEW_TRAM_VEHICLE :bonde STR_ENGINE_PREVIEW_AIRCRAFT :aeronave STR_ENGINE_PREVIEW_SHIP :embarcação @@ -3611,14 +3802,18 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Troca en STR_REPLACE_ENGINES :Motores STR_REPLACE_WAGONS :Vagões STR_REPLACE_ALL_RAILTYPE :Todos os veículos ferroviários +STR_REPLACE_ALL_ROADTYPE :Todos os automóveis STR_REPLACE_HELP_RAILTYPE :{BLACK}Escolha o tipo de ferrovia para o qual deseja efetuar a substituição dos motores +STR_REPLACE_HELP_ROADTYPE :{BLACK}Escolha qual tipo de estrada você quer trocar os motores STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Exibe o tipo de motor que substituirá o que está selecionado à esquerda, se algum STR_REPLACE_RAIL_VEHICLES :Trens STR_REPLACE_ELRAIL_VEHICLES :Locomotivas Elétricas STR_REPLACE_MONORAIL_VEHICLES :Monotrilho STR_REPLACE_MAGLEV_VEHICLES :Maglevs +STR_REPLACE_ROAD_VEHICLES :Veículos terrestres +STR_REPLACE_TRAM_VEHICLES :Bondes STR_REPLACE_REMOVE_WAGON :{BLACK}Remoção de vagões: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Faz autosubstituição manter o tamanho do trem removendo vagões (começando pela frente), se ao substituir a locomotiva o trem ficar maior @@ -3626,10 +3821,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Faz auto # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrar visão no local do trem. Ctrl+Clique seguirá o trem na visão principal. -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centralizar visualização na localização do veículo. Ctrl+Clique segue o veículo -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrar visão no local da embarcação. Ctrl+Clique seguirá o navio na visão -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrar visão no local da aeronave. Ctrl+Clique seguirá a aeronave na visão +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centraliza a janela na localização do trem. Clique duplo para seguir o trem. Ctrl+Clique abre uma nova janela na localização do trem +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centraliza a janela na localização do veículo. Clique duplo para seguir o veículo. Ctrl+Clique abre uma nova janela na localização do veículo. +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centraliza a janela na localização do navio. Clique duplo para seguir o navio. Ctrl+Clique para abrir uma nova janela na localização do navio. +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centraliza a janela na localização da aeronave. Clique duplo para seguir a aeronave. Ctrl+Clique abre uma nova janela na localização da aeronave. STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar trem para o depósito STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar veículo para a garagem. CTRL+clique irá apenas reparar @@ -3654,17 +3849,19 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Forçar STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Exibe ordens do trem. Ctrl+Clique para exibir o plano de horário STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Exibe ordens do veículo. Ctrl+Clique para exibir o plano de horário STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Exibe ordens da embarcação. Ctrl+Clique para exibir o plano de horário -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Exibir ordens da aeronave. Ctrl+Clique para exibir o plano de horário +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Exibe ordens da aeronave. Ctrl+Clique para exibir o plano de horário -STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Exibir detalhes do trem -STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Exibir detalhes do automóvel -STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Exibir detalhes da embarcação -STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Exibir detalhes da aeronave +STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Exibe detalhes do trem +STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Exibe detalhes do veículo +STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Exibe detalhes da embarcação +STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Exibe detalhes da aeronave -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Tarefa atual do trem - clique aqui para iniciar/parar o trem. Ctrl+Clique para mostrar o destino -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Tarefa atual do veículo - clique aqui para iniciar/parar veículo. Ctrl+Clique para mostrar o destino. -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Tarefa atual da embarcação - clique aqui para iniciar/parar embarcação. Ctrl+Clique para mostrar o destino. -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Tarefa atual da aeronave - clique aqui para iniciar/parar a aeronave. Ctrl+Clique para mostrar o destino. +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Ação atual do trem - clique para iniciar/parar o trem +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Ação atual do veículo - clique para iniciar/parar o veículo +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Ação atual do navio - clique para iniciar/parar o navio +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Ação atual da aeronave - clique para iniciar/parar a aeronave + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centraliza janela no destino da ordem. Ctrl+Clique abre uma nova janela no local de destino da ordem # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Carregando / descarregando @@ -3839,6 +4036,7 @@ STR_ORDER_CONDITIONAL_AGE :Idade (anos) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Necessita de manutenção STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Sempre STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tempo de vida restante (anos) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Confiabilidade máxima STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comprarar os dados do veículo com o valor fornecido STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :é igual a @@ -3891,6 +4089,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Adaptar a {STR STR_ORDER_STOP_ORDER :(Parar) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Não pode usar a estação){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Implícito) @@ -4069,6 +4268,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Selecion STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mudar o script +STR_SCREENSHOT_CAPTION :{WHITE}Tirar uma captura de tela +STR_SCREENSHOT_SCREENSHOT :{BLACK}Captura de tela normal +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Zoom máximo na captura de tela +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Zoom padrão na captura de tela +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura de tela do mapa todo +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de tela do mapa topográfico +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de tela do minimapa # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros @@ -4128,6 +4334,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo salvo é f STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Arquivo não legível STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Arquivo não gravável STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Verificação de integridade de dados falhou +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Jogo salvo é feito com uma versão modificada STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Jogo foi salvo numa versão sem suporte a bondes. Todos os bondes foram removidos @@ -4155,6 +4362,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Apenas u STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Captura de tela gigante STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}A captura de tela terá uma resolução de {COMMA}x{COMMA} pixels. Pode levar algum tempo. Deseja continuar? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Mapa topográfico salvo com sucesso como '{STRING}'. O pico mais alto é {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Foto salvado com sucesso como '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Falha ao tirar foto! @@ -4208,6 +4416,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... não STR_ERROR_CURRENCY_REQUIRED :{WHITE}... precisa de {CURRENCY_LONG} STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Impossível pagar empréstimo... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Impossível dar o dinheiro emprestado do banco +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Impossível dar dinheiro a esta empresa STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Impossível comprar empresa... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Impossível construir sede da empresa... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Impossível comprar 25% das ações desta empresa... @@ -4237,7 +4446,7 @@ STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... muit STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... deve construir uma cidade antes STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... só é permitido uma por cidade STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... só pode ser construído em cidades com pelo menos 1200 habitantes -STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... só pode ser construído em zonas florestais +STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... só pode ser construído em florestas tropicais STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... só pode ser construído em áreas desérticas STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... só se pode ser construído em cidades (substituindo casas) STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... só pode ser construído próximo aos centros de cidades @@ -4334,6 +4543,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósi STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} fica grande demais para ser substituído STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Regras de autosubstituição/renovação não estão ativadas STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(limite de dinheiro) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Novo veículo não pode transportar {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Novo veículo não pode ser reequipado na ordem {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Impossível combinação de linhas @@ -4342,6 +4553,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tipo de STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Remova a ferrovia antes STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Rua é mão única ou está bloqueada STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Cruzamentos de nível não são permitidos para esse tipo de trilho +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Passagens de nível não permitidas para este tipo de estrada STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Impossível construir sinais aqui... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Impossível construir ferrovia aqui... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Impossível remover a ferrovia daqui... @@ -4361,6 +4573,11 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Impossí STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Impossível remover bonde daqui... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...não há rodovias STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...não há linha de bonde +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada aqui ... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de trilho aqui... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Sem estrada adequada +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Nenhum bonde adequado +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... bonde incompatível # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Impossível construir canais aqui... @@ -4413,6 +4630,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Impossí STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Impossível remover grupo... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Impossível renomear grupo... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Impossível definir grupo ascendente... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... loops na hierarquia do grupo não é permitido STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Impossível remover todos os veículos desse grupo... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Impossível adicionar veículo a esse grupo STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Impossível adicionar veículos compartilhados a esse grupo... @@ -4608,10 +4826,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=f}Mina de A ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Sem nome -STR_SV_TRAIN_NAME :Trem {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Automóvel {COMMA} -STR_SV_SHIP_NAME :Embarcação {COMMA} -STR_SV_AIRCRAFT_NAME :Aeronave {COMMA} +STR_SV_TRAIN_NAME :Trem #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Veículo #{COMMA} +STR_SV_SHIP_NAME :Navio #{COMMA} +STR_SV_AIRCRAFT_NAME :Aeronave #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :Norte de {STRING} @@ -4878,13 +5096,13 @@ STR_VEHICLE_NAME_AIRCRAFT_DARWIN_400 :Darwin 400 STR_VEHICLE_NAME_AIRCRAFT_DARWIN_500 :Darwin 500 STR_VEHICLE_NAME_AIRCRAFT_DARWIN_600 :Darwin 600 STR_VEHICLE_NAME_AIRCRAFT_GURU_GALAXY :Guru Galaxy -STR_VEHICLE_NAME_AIRCRAFT_AIRTAXI_A21 :Táxi Aéreo A21 -STR_VEHICLE_NAME_AIRCRAFT_AIRTAXI_A31 :Táxi Aéreo A31 -STR_VEHICLE_NAME_AIRCRAFT_AIRTAXI_A32 :Táxi Aéreo A32 -STR_VEHICLE_NAME_AIRCRAFT_AIRTAXI_A33 :Táxi Aéreo A33 +STR_VEHICLE_NAME_AIRCRAFT_AIRTAXI_A21 :Airtaxi A21 +STR_VEHICLE_NAME_AIRCRAFT_AIRTAXI_A31 :Airtaxi A31 +STR_VEHICLE_NAME_AIRCRAFT_AIRTAXI_A32 :Airtaxi A32 +STR_VEHICLE_NAME_AIRCRAFT_AIRTAXI_A33 :Airtaxi A33 STR_VEHICLE_NAME_AIRCRAFT_YATE_AEROSPACE_YAE46 :Yate Aerospace YAe46 STR_VEHICLE_NAME_AIRCRAFT_DINGER_100 :Dinger 100 -STR_VEHICLE_NAME_AIRCRAFT_AIRTAXI_A34_1000 :Táxi Aéreo A34-1000 +STR_VEHICLE_NAME_AIRCRAFT_AIRTAXI_A34_1000 :AirTaxi A34-1000 STR_VEHICLE_NAME_AIRCRAFT_YATE_Z_SHUTTLE :Yate Z-Shuttle STR_VEHICLE_NAME_AIRCRAFT_KELLING_K1 :Kelling K1 STR_VEHICLE_NAME_AIRCRAFT_KELLING_K6 :Kelling K6 @@ -4913,6 +5131,7 @@ STR_FORMAT_BUOY_NAME :{TOWN} Bóia STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Bóia #{COMMA} STR_FORMAT_COMPANY_NUM :(Companhia {COMMA}) STR_FORMAT_GROUP_NAME :Agrupar {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} de {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Ponto de controle {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Ponto de controle {TOWN} #{COMMA} diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 8c8c24f9c0..3f40d2c0af 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -50,9 +50,9 @@ STR_CARGO_PLURAL_WHEAT :Пшеница STR_CARGO_PLURAL_RUBBER :Каучук STR_CARGO_PLURAL_SUGAR :Захар STR_CARGO_PLURAL_TOYS :Играчки -STR_CARGO_PLURAL_CANDY :Сладки +STR_CARGO_PLURAL_SWEETS :Сладки STR_CARGO_PLURAL_COLA :Кола -STR_CARGO_PLURAL_COTTON_CANDY :Захарен памук +STR_CARGO_PLURAL_CANDYFLOSS :Захарен памук STR_CARGO_PLURAL_BUBBLES :Балони STR_CARGO_PLURAL_TOFFEE :Карамел STR_CARGO_PLURAL_BATTERIES :Батерии @@ -84,9 +84,9 @@ STR_CARGO_SINGULAR_WHEAT :Пшеница STR_CARGO_SINGULAR_RUBBER :Каучук STR_CARGO_SINGULAR_SUGAR :Захар STR_CARGO_SINGULAR_TOY :Играчки -STR_CARGO_SINGULAR_CANDY :Сладки +STR_CARGO_SINGULAR_SWEETS :Сладки STR_CARGO_SINGULAR_COLA :Кола -STR_CARGO_SINGULAR_COTTON_CANDY :Захарен памук +STR_CARGO_SINGULAR_CANDYFLOSS :Захарен памук STR_CARGO_SINGULAR_BUBBLE :Балони STR_CARGO_SINGULAR_TOFFEE :Карамел STR_CARGO_SINGULAR_BATTERY :Батерии @@ -233,8 +233,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Избе STR_TOOLTIP_SORT_CRITERIA :{BLACK}Избери критерий за сортиране STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Избери критерии за филтриране STR_BUTTON_SORT_BY :{BLACK}Сортирай по -STR_BUTTON_LOCATION :{BLACK}Позиция -STR_BUTTON_RENAME :{BLACK}Преименувай STR_BUTTON_CATCHMENT :{BLACK}Покритие STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Затвори прозореца @@ -312,6 +310,8 @@ STR_SORT_BY_RANGE :Обхват STR_SORT_BY_POPULATION :Население STR_SORT_BY_RATING :Рейтинг +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Пауза STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Бързо превъртане на играта @@ -396,7 +396,7 @@ STR_FILE_MENU_EXIT :Изход # map menu STR_MAP_MENU_MAP_OF_WORLD :Карта на света -STR_MAP_MENU_EXTRA_VIEW_PORT :Допълнителна камера +STR_MAP_MENU_EXTRA_VIEWPORT :Допълнителна камера STR_MAP_MENU_SIGN_LIST :Списък с табели ############ range for town menu starts @@ -561,8 +561,8 @@ STR_MONTH_DEC :Декемвр # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Легенда STR_GRAPH_KEY_TOOLTIP :{BLACK}Покажи легендата на графиката -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -867,7 +867,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Местните власти на {TOWN} подписаха договор с {STRING} за едногодишни ексклузивни транспортни права # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Камера {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Камера {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Преместване на камерата STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Преместване на тази камера до глобалната STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Преместване глобалната камера @@ -917,8 +917,6 @@ STR_GAME_OPTIONS_CURRENCY_NTD :Нов тайв STR_GAME_OPTIONS_CURRENCY_HKD :Хонгконгски долар (HKD) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Движение по пътищата -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Избор посоката на движение по пътищата STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :ляво STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :дясно @@ -970,6 +968,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Разм STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Избор размера на екран STR_GAME_OPTIONS_RESOLUTION_OTHER :друго + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Интерфейс размер STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Изберете размера на интерфейс елемент за използване @@ -979,6 +979,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Четирик + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базов графичен набор STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Изберете базов графичен набор STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} липсващи/повредени файлове @@ -1158,8 +1160,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Включва STR_CONFIG_SETTING_CITY_APPROVAL :Отношението на градския съвет към реструктурирането на района: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Изберете какво количество шум и поражения по околната среда причинени от компаниите афектират техния рейтинг в града и бъдещи конструкции в района. -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Максимална височина на картата: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Определете максималната допустима височина за планини на картата STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Не можете да зададете максималната височина на картата на тази стойност. Поне една планина на карта е по-висока STR_CONFIG_SETTING_AUTOSLOPE :Тераформиране под постройки (autoslope): {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Разреши промяна на наклона на терена под постройки и пътища без необходимост от премахване @@ -1501,8 +1501,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Пълно STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Цветни новини се появяват през: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Годината, когато вестникарските заглавия, ще станат цветни. Преди тази година, те са черно-бели STR_CONFIG_SETTING_STARTING_YEAR :Начална година: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Разреши плавна икономика (повече по-малки промени): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ако тази опция бъде активирана, промишленото производство ще се променя по-често и по-плавно. Тази опция обикновено няма ефект, ако даденият вид промишленост е предоставен от NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Разреши купуване на акции от други компании: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ако тази опция бъде активирана, ще можете да купувате и продавате дялове на компании. Това ще бъде възможно единствено когато дадената компания достигне определена възраст STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Процент от leg profit to pay in feeder systems: {STRING} @@ -1548,9 +1546,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Разреше STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Разпределяне на дърветата в гората: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Контролирайте случайното появяване на дървета по време на игра. Това може да засегне промишленостите, които зависят от растежа на дървета, като например дърводелниците -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Без {RED}(разваля дъскорезницата) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Само в дъждовни гори -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Навсякъде STR_CONFIG_SETTING_TOOLBAR_POS :Позиция на лентата за инструменти: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Хоризонтално позициониране на основната лента в горната част на екрана @@ -1678,6 +1673,8 @@ STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... пр STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... пропруска набора от основни песни '{STRING}': не е открит STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Отвъд паметта +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1720,18 +1717,9 @@ STR_INTRO_TRANSLATION :{BLACK}На т # Quit window STR_QUIT_CAPTION :{WHITE}Изход -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Желаете ли да прекъснете играта и да се върнете към {STRING}? STR_QUIT_YES :{BLACK}Да STR_QUIT_NO :{BLACK}Не -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Прекъсване на играта STR_ABANDON_GAME_QUERY :{YELLOW}Искате ли да прекъснете играта? @@ -1740,7 +1728,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Иск # Cheat window STR_CHEATS :{WHITE}Кодове STR_CHEATS_TOOLTIP :{BLACK}Кутийките показват дали този код е бил използван -STR_CHEATS_WARNING :{BLACK}Внимание! По този начин ще измамите своите съперници. Имайте в предвид, че това безчестие ще бъде запомнено вовеки веков. STR_CHEAT_MONEY :{LTBLUE}Увеличаване на парите с {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Играе като компания: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Магически булдозер (премахва промишленост, неподвижни обекти): {ORANGE}{STRING} @@ -1851,10 +1838,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cмен # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Онлайн играчи -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Рекламирана -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Избери игра измежду рекламирана през интернет или нерекламирана през Локален интернет хост или ЛАН -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Не -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Да STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Име на играч: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Чрез това име другите играчи ще ви идентифицират @@ -1895,8 +1878,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Прис STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Обновяване сървъра STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Обновява информацията за съръра -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Търсене на сървър -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Претърсване на мрежата за сървър STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Добави сървър STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Добяви сървър към списакът, който винаги ще бъде проверяван за активни игри. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Пускане на сървър @@ -1913,6 +1894,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Имет STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Поставяне на парола STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защитаване на вашата игра с парола за да не е публично достъпна +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Рекламирана +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Избери игра измежду рекламирана през интернет или нерекламирана през Локален интернет хост или ЛАН STR_NETWORK_START_SERVER_UNADVERTISED :Не STR_NETWORK_START_SERVER_ADVERTISED :Да STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" s} @@ -2025,7 +2008,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Нова фир # Network client list STR_NETWORK_CLIENTLIST_KICK :Изгони STR_NETWORK_CLIENTLIST_BAN :Бан -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Дай пари STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Кажи на всички STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Кажи на компания STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Лично съобщение @@ -2034,8 +2016,6 @@ STR_NETWORK_SERVER :Сървър STR_NETWORK_CLIENT :Клиент STR_NETWORK_SPECTATORS :Наблюдатели -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Въведете количеството пари, което искате да дадете - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Незапазвай паролата STR_COMPANY_PASSWORD_OK :{BLACK}Дай на компанията новата парола @@ -2135,8 +2115,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} с STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} създаде нова компания (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} напусна играта ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} си промени името на {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} изпрати {2:CURRENCY_LONG} на твоята компания -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Ти даде {2:CURRENCY_LONG} на {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Сървърът прекъсна сесията STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Сървърът се рестартира...{}Моля изчакайте... @@ -2212,6 +2190,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Да, изтегли графиките STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Не, изход от OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Настройки на прозрачност STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Превключва прозрачност за знаци. Ctrl за заключване @@ -2251,6 +2230,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Нап STR_JOIN_WAYPOINT_CAPTION :{WHITE}Съедини пътеводител STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Построи отделен пътеводител +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Конструкции за Двурелсов път STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Строене на електрифицирана ЖП мрежа @@ -2435,7 +2416,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Разм STR_OBJECT_CLASS_LTHS :Фарове STR_OBJECT_CLASS_TRNS :Предаватели -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Дървета STR_PLANT_TREE_TOOLTIP :{BLACK}Избор на вид дърво за засаждане. Ако на полето вече съществува дърво, ще бъдат добавени повече дървета от различни видове, независимо от избора на вид STR_TREES_RANDOM_TYPE :{BLACK}Дървета от произволен тип @@ -2689,14 +2670,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Брой градове: STR_MAPGEN_DATE :{BLACK}Дата: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Брой индустрии: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Максимална височина на картата: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Увеличаване на максималната височина на планините на карта с едно -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Намаляне максималната височина на планините на карта с едно -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Снежна линия: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Преместване снежната линия нагоре -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Преместване снежната линия надолу STR_MAPGEN_LAND_GENERATOR :{BLACK}Земегенератор: -STR_MAPGEN_TREE_PLACER :{BLACK}Дърворазсад: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Тип на терен: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Морско ниво: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Реки: @@ -2721,8 +2695,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Име STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Размер: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Промяна на максималната височина на картата -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Височина на снежната линия STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Промяна началната година # SE Map generation @@ -2995,12 +2967,9 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW} Под # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Цели STR_GOALS_SPECTATOR_CAPTION :{WHITE}Глобални цели -STR_GOALS_GLOBAL_TITLE :{BLACK}Основни цели: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Никакви - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Неприложимо- STR_GOALS_PROGRESS :{ORANGE}напредък{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Цели на компанията: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Кликни на задачата за да центрирате камерата на фабрика/град/плочка. Ctrl+Click отваря нов прозорец центриран на фабрика/град/плочка # Goal question window @@ -3532,10 +3501,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Авто # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Позициониране на главният изглед върху влака.При Ctrl+Click ще проследява влака в главният изглед -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Позициониране на главния изглед върху МПС-то. При Ctrl+Click МПС-то ще бъде проследявано в главния изглед -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Фокусирай общия план върху местонахождението на кораба -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Позициониране на главния изглед върху летателната машина. При Ctrl-click летателната машина ще бъде проследяван в главния изглед STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Изпращане влака в депо STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Изпращане на ПС в депо. CTRL+натискане ще изпрати само за преглед @@ -3567,10 +3532,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Пока STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Покажи детайлите за кораба STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Информация за самолета -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Текущо състояние на влака - натиснете за спиране/пускане. Ctrl-click за да скролирате до целта -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Текущо действие - натиснете за спиране/пускане на превозното средство. С Ctrl-click можеш да скролираш до целта -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Настоящо корабно действие - натисни тук, за да спреш/задвижиш кораба. С Ctrl-click можеш да скролираш до целта -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Състояние на самолета - натиснете за спиране/пускане. С Ctrl-click можете да скролирате до целта + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Товарене/ Разтоварване diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 78a431ee39..c627b328ac 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=Masculin}Bla STR_CARGO_PLURAL_RUBBER :{G=Masculin}Cautxú STR_CARGO_PLURAL_SUGAR :{G=Masculin}Sucre STR_CARGO_PLURAL_TOYS :{G=Femenin}Joguines -STR_CARGO_PLURAL_CANDY :{G=Masculin}Dolços +STR_CARGO_PLURAL_SWEETS :{G=Masculin}Dolços STR_CARGO_PLURAL_COLA :{G=Masculin}Refrescos -STR_CARGO_PLURAL_COTTON_CANDY :{G=Masculin}Cotó de sucre +STR_CARGO_PLURAL_CANDYFLOSS :{G=Masculin}Cotó de sucre STR_CARGO_PLURAL_BUBBLES :{G=Femenin}Bombolles STR_CARGO_PLURAL_TOFFEE :{G=Masculin}Caramels STR_CARGO_PLURAL_BATTERIES :{G=Femenin}Piles @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=Masculin}Bla STR_CARGO_SINGULAR_RUBBER :{G=Masculin}Cautxú STR_CARGO_SINGULAR_SUGAR :{G=Masculin}Sucre STR_CARGO_SINGULAR_TOY :{G=Femenin}Joguina -STR_CARGO_SINGULAR_CANDY :{G=Masculin}Dolç +STR_CARGO_SINGULAR_SWEETS :{G=Masculin}Dolç STR_CARGO_SINGULAR_COLA :{G=Masculin}Refresc -STR_CARGO_SINGULAR_COTTON_CANDY :{G=Masculin}Cotó de sucre +STR_CARGO_SINGULAR_CANDYFLOSS :{G=Masculin}Cotó de sucre STR_CARGO_SINGULAR_BUBBLE :{G=Femenin}Bombolla STR_CARGO_SINGULAR_TOFFEE :{G=Masculin}Caramel STR_CARGO_SINGULAR_BATTERY :{G=Femenin}Pila @@ -195,6 +195,7 @@ STR_COLOUR_DEFAULT :Per defecte STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}cel·les/dia STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}cv STR_UNITS_POWER_METRIC :{COMMA}{NBSP}cv @@ -234,8 +235,7 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Seleccio STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecciona el criteri per ordenar la llista STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Filtra per tipus de càrrega STR_BUTTON_SORT_BY :{BLACK}Ordena per: -STR_BUTTON_LOCATION :{G=Masculin}{BLACK}Lloc -STR_BUTTON_RENAME :{BLACK}Canvia el nom +STR_BUTTON_CATCHMENT :{BLACK}Cobertura STR_TOOLTIP_CATCHMENT :{BLACK}Mostra/Amaga l'àrea de cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Tanca la finestra @@ -314,6 +314,15 @@ STR_SORT_BY_CARGO_CAPACITY :Capacitat de c STR_SORT_BY_RANGE :Abast STR_SORT_BY_POPULATION :Població STR_SORT_BY_RATING :Qualificació +STR_SORT_BY_NUM_VEHICLES :Nombre de vehicles +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Benefici total de l'any passat +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Benefici total d'aquest any +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Benefici mitjà de l'any passat +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Benefici mitjà aquest any + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Cap +STR_GROUP_BY_SHARED_ORDERS :Ordres compartides # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Posa en pausa o reprèn la partida @@ -339,6 +348,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Apropar- STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Allunyar-se STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construeix vies STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construeix carreteres +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construeix vies de tramvia STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construeix ports STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construeix aeroports STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Obre la barra d'eines del terreny per elevar/rebaixar el terreny, plantar arbres, etc. @@ -359,6 +369,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Generaci STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generació de poblacions STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generació d'indústries STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construcció de carreteres +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construcció de vies de tramvia STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Planta arbres. Shift per sols mostrar el cost estimat. STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Situa un senyal STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Situa objecte. Shift per sols mostrar el cost estimat. @@ -376,7 +387,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Surt ############ range for settings menu starts STR_SETTINGS_MENU_GAME_OPTIONS :Opcions de la partida STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configuració -STR_SETTINGS_MENU_SCRIPT_SETTINGS :Paràmetres de les IA i de l'script de la partida +STR_SETTINGS_MENU_SCRIPT_SETTINGS :Paràmetres dels scripts d'IA/partida STR_SETTINGS_MENU_NEWGRF_SETTINGS :Extensions NewGRF STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opcions de transparència STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostra els noms de les poblacions @@ -400,7 +411,7 @@ STR_FILE_MENU_EXIT :Surt # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa del món -STR_MAP_MENU_EXTRA_VIEW_PORT :Vista extra +STR_MAP_MENU_EXTRA_VIEWPORT :Vista extra STR_MAP_MENU_LINGRAPH_LEGEND :Llegenda del flux de càrrega STR_MAP_MENU_SIGN_LIST :Llista de senyals @@ -566,8 +577,8 @@ STR_MONTH_DEC :Desembre # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Llegenda STR_GRAPH_KEY_TOOLTIP :{BLACK}Mostra la llegenda dels gràfics -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -737,6 +748,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Terreny irregular STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Gespa STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Terreny erm +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Selva tropical STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Camps de conreu STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Arbres STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Roques @@ -768,6 +780,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Mostra t STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Mostra el darrer missatge o notícia STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * EN PAUSA * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * EN PAUSA (s'espera que s'actualitzi el graf de distribució) * * STR_STATUSBAR_AUTOSAVE :{RED}DESADA AUTOMÀTICA STR_STATUSBAR_SAVING_GAME :{RED}* * DESANT PARTIDA * * @@ -862,6 +875,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}No{G u va} {STRING} disponible! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Obre la finestra del grup amb el focus en el vehicle. STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ja no accepta més {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ja no accepta més {STRING} ni {STRING} @@ -881,7 +895,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}L'autoritat local de {TOWN} signa un contracte amb {STRING} per l'explotació en exclusiva dels drets de transport durant un any # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vista {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vista {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Canvia la vista extra STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Mou aquesta vista on està la vista principal STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Canvia vista principal @@ -929,11 +943,14 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgià ( STR_GAME_OPTIONS_CURRENCY_IRR :Rial iranià (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Ruble rus modern (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicà (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Nou dòlar taiwanès (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi xinès (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Dòlar de Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Rúpia índia (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Rupia indonèsia (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehicles de carretera -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Escull el sentit de circulació dels automòbils STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Conducció per l'esquerra STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Conducció per la dreta @@ -984,10 +1001,19 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Marqueu STR_GAME_OPTIONS_RESOLUTION :{BLACK}Resolució de pantalla STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Selecciona la resolució de pantalla STR_GAME_OPTIONS_RESOLUTION_OTHER :altres +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Acceleració per maquinari +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Seleccioneu aquesta opció per permetre que l'OpenTTD provi d'usar acceleració per maquinari. Si es canvia l'opció, s'aplicarà quan es reiniciï el programa. +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}La configuració tindrà efecte quan es reiniciï el programa. + +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Selecciona aquesta casella per activar la sincronització vertical de la pantalla. Els canvis s'aplicaran quan es reiniciï el programa. Només funciona si s'activa l'acceleració per maquinari. STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Mida de la interfície STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Escull la mida dels elements de la interfície +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(detecta automàticament) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doble STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quàdruple @@ -995,10 +1021,19 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quàdruple STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Mida de la lletra STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Seleccioneu la mida de les fonts de la interfície. +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(detecta automàticament) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Doble STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quàdruple +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Gràfics + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Rati de refresc de la pantalla +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Seleccioneu el rati de refresc de la pantalla que voleu usar. +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :altres +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}{NBSP}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Ratis de refresc major a 60{NBSP}Hz poden causar problemes de rendiment. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunt de gràfics base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona el conjunt de gràfics base a utilitzar STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arxiu{P "" s} absent{P "" s} o corromput{P "" s}. @@ -1093,6 +1128,8 @@ STR_TERRAIN_TYPE_FLAT :Pla STR_TERRAIN_TYPE_HILLY :Accidentat STR_TERRAIN_TYPE_MOUNTAINOUS :Muntanyós STR_TERRAIN_TYPE_ALPINIST :Escarpat +STR_TERRAIN_TYPE_CUSTOM :Alçada personalitzada +STR_TERRAIN_TYPE_CUSTOM_VALUE :Alçada personalitzada ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Permissiva STR_CITY_APPROVAL_TOLERANT :Tolerant @@ -1174,14 +1211,17 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Permet o no que STR_CONFIG_SETTING_CITY_APPROVAL :Actitud de l'alcaldia de la població enfront les reestructuracions a la zona: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Establiu com afecta al prestigi de les companyies el soroll i els danys ambientals que provoquen. Aquest prestigi influirà en la futura acceptació o denegació d'accions de construcció a la zona. -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Alçada màxima del mapa: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Estableix l'alçada màxima permesa del terreny en el mapa -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}No es pot escollir aquesta alçada màxima del mapa: hi ha alguna zona del mapa actual que és més alta. +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Alçada màxima del mapa: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Estableix l'alçada màxima del terreny del mapa. Amb «Automàtica», s'escollirà un valor adequat després que es generi el terreny. +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :Automàtica +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}No es pot escollir aquest límit d'alçada del mapa. Hi ha almenys una muntanya al mapa que és més alta. STR_CONFIG_SETTING_AUTOSLOPE :Permet la modificació del terreny sota edificis, rails, etc.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permet modelar el terreny sota les vies, els edificis i altres elements sense eliminar-los. STR_CONFIG_SETTING_CATCHMENT :Estableix una mida més real de l'àrea d'influència: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Permet tenir diferents mides de zones de captació de càrrega per diferents tipus d'estacions (aeroports, estacions de tren, etc.). STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Les estacions de la companyia poden donar servei a industries amb estacions neutrals: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quan s'activa, les indústries amb estacions pròpies, com ara les plataformes petrolíferes, es poden servir amb estacions properes de les companyies. Quan es desactiva, aquestes indústries només es poden servir amb les estacions de la indústria: qualsevol estació propera que no sigui la de l'estació no la podrà servir, ni l'estació de la indústria podrà servir res que no provingui d'aquesta indústria. STR_CONFIG_SETTING_EXTRADYNAMITE :Permet l'esborrat de carreteres, ponts i túnels propietat de les poblacions: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Aquesta opció permet fer més fàcil l'esborrat d'infraestructures i construccions propietat de la població STR_CONFIG_SETTING_TRAIN_LENGTH :Longitud màxima dels trens: {STRING} @@ -1307,7 +1347,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostra el nom d STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Afegeix una línia a la finestra de construcció de vehicles que mostri de quin NewGRF és el vehicle seleccionat. STR_CONFIG_SETTING_LANDSCAPE :Paisatge: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :El tipus de paisatge defineix escenaris amb diferents tipus de càrrega i requisits per al creixement de les poblacions. Els NewGRF i l'script de la partida poden modificar-ne l'aparença i el comportament +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :El tipus de paisatge defineix escenaris amb diferents tipus de càrrega i requisits per al creixement de les poblacions. Els NewGRF i l'script de partida poden modificar-ne l'aparença i el comportament. STR_CONFIG_SETTING_LAND_GENERATOR :Generador de terrenys: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :L'algorisme generador original depèn del tipus de gràfics base i crea formes de terreny predefinides. TerraGenesis és un generador basat en el soroll Perlin que permet una configuració més precisa STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original @@ -1316,10 +1356,16 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Tipus de terren STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Només TerraGenesis) Escollir el tipus de terreny: des de molt pla fins a escarpat STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densitat d'indústries: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Fixa el nombre d'indústries que s'haurien de generar i mantenir durant la partida -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distància màxima des de la vora a les refineries de petroli: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Les refineries de petroli només es construeixen a prop de les vores del mapa, això és a la costa en els mapes d'illes +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distància màxima des de la vora a les indústries de petroli: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limita a quina distància del mapa es poden construir refineries de petroli i plataformes petrolíferes. En mapes amb illes, serveix per assegurar que estan prop de la costa. En mapes de més de 256 caselles, aquest valor s'escala automàticament. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Alçada dels estatges amb neu: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a quina alçada la neu comença en el paisatge subàrtic. La neu també afecta la generació d'indústries i els requisits per al creixement de les poblacions +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a quina alçada la neu comença en el paisatge subàrtic. La neu també afecta la generació d'indústries i els requisits per al creixement de les poblacions. Només es pot modificar a l'editor d'escenaris; altrament, es calcula fent servir la proporció de terreny nevat. +STR_CONFIG_SETTING_SNOW_COVERAGE :Terreny nevat: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controla la quantitat aproximada de terreny nevat que hi ha en els paisatges subàrtics. La neu afecta a la generació d'indústries i el creixement de les poblacions. Només s'usa durant la generació de mapes. El terreny d'alçada propera al nivell del mar mai està nevat. +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}{NBSP}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Terreny desèrtic: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Controla la quantitat aproximada de terreny desèrtic que hi ha en els paisatges tropicals. Els deserts afecten a la generació d'indústries. Només s'usa durant la generació de mapes. +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}{NBSP}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Geografia del terreny: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Només TerraGenesis) Escollir la suavitat del paisatge: els terrenys suaus tenen menys turons i són regulars; els terrenys més rugosos són irregulars i tenen molts turons STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Molt suau @@ -1404,7 +1450,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :llarga (31 Des STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :curta (31-12-2008) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) -STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Posa en pausa automàticament quan comenci una nova partida: {STRING} +STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Posa en pausa automàticament quan comenci una partida nova: {STRING} STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Quan està activat, el joc es posa en pausa automàticament quan es comenci una partida nova, permetent a l'usuari estudiar el mapa més detalladament STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Accions permeses mentre s'està fent una pausa a la partida: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Seleccioneu quines accions es poden realitzar mentre s'està fent una pausa a la partida. @@ -1422,7 +1468,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostra l'arriba STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostra als horaris l'arribada anticipadament i les hores de sortida STR_CONFIG_SETTING_QUICKGOTO :Creació ràpida d'ordres per a vehicles: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Preselecciona el botó 'Vés a' quan s'obri la finestra d'ordres -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipus predeterminat de via (en nova partida/càrrega de partida): {STRING} +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipus predeterminat de via (després de carregar una partida o crear-ne una nova): {STRING} STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipus de via a seleccionar després de començar o carregar una partida. 'El més antic disponible' selecciona el tipus de vies més antic disponible, 'El més modern disponible' selecciona el tipus de vies més modern, i 'El més utilitzat disponible' selecciona el tipus de vies que s'utilitzi més actualment STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :El més antic disponible STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :El més modern disponible @@ -1433,6 +1479,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Mantingues les STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Mantingues les eines de construcció pels ponts, túnels, etc. obertes després d'utilitzar-les STR_CONFIG_SETTING_EXPENSES_LAYOUT :Agrupa les despeses a la finestra de finances de la companyia: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Defineix la disposició de la companyia a la finestra de despeses +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Treu automàticament els senyals durant la construcció ferroviària: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Treu automàticament els senyals ferroviaris que hi hagi pel mig durant la construcció de rail. Aneu amb compte ja que pot provocar col·lisions de trens. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Límit de velocitat de la partida: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Estableix el límit de velocitat de la partida quan s'activa l'avanç ràpid del temps. 0 = sense límit (tan ràpid com pugui el vostre ordinador). Els valors per sota de 100{NBSP}% alenteixen la partida. El límit de velocitat depèn de les característiques del vostre ordinador i de la partida que esteu jugant (mida del mapa, nombre de vehicles, longitud de les rutes...). +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}{NBSP}% de la velocitat normal +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Sense límit (tan ràpid com pugui el vostre ordinador) STR_CONFIG_SETTING_SOUND_TICKER :Barra de notícies: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Reprodueix un so quan apareixen les notícies resumides a la barra inferior @@ -1472,7 +1524,7 @@ STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactiva els v STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Activant aquesta opció fa que sigui impossible construir vaixells als jugadors IA. STR_CONFIG_SETTING_AI_PROFILE :Perfil de paràmetres predeterminat: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Escolliu quin perfil de paràmetres utilitzar per les IA aleatòries o com a valors inicials quan s'afegeix una nova IA o script de la partida. +STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Escolliu el perfil de paràmetres de les IA aleatòries o els valors inicials quan s'afegeix una nova IA o script de partida. STR_CONFIG_SETTING_AI_PROFILE_EASY :Fàcil STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Mitjà STR_CONFIG_SETTING_AI_PROFILE_HARD :Difícil @@ -1482,6 +1534,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permet a les IA STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes abans de suspendre els scripts: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Màxim nombre de passos de càlcul que un script pot fer en un torn STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Ús de memòria màxim per script: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Quantitat de memòria que pot usar un sol script abans que es forci la seva parada. Per a mapes grans, pot ser necessari incrementar aquest valor. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA}{NBSP}MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Els intervals de revisions es mostren en percentatges: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Escull si les revisions dels vehicles depenen del temps passat des de la darrera revisió o de la caiguda d'un cert percentatge de la fiabilitat màxima @@ -1490,11 +1544,11 @@ STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Estableix l'int STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}di{P 0 a es}/% STR_CONFIG_SETTING_SERVINT_DISABLED :Desactivat STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Interval per defecte de servei per als vehicles: {STRING} -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Estableix l'interval de revisió predeterminat pels nous vehicles de caretera, si no hi ha un interval de revisió explícit pel vehicle +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Estableix l'interval de revisió predeterminat pels vehicles de carretera que es comprin, si no hi ha un interval de revisió explícit pel vehicle. STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Interval per defecte de servei per a les aeronaus: {STRING} STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Estableix l'interval de revisió predeterminat pels nous avions, si no hi ha un interval de revisió explícit pel vehicle STR_CONFIG_SETTING_SERVINT_SHIPS :Interval per defecte de servei per als vaixells: {STRING} -STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Estableix l'interval de revisió predeterminat pels nous vaixells, si no hi ha un interval de revisió explícit pel vehicle +STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Estableix l'interval de revisió predeterminat pels vaixells que es comprin, si no hi ha un interval de revisió explícit pel vehicle. STR_CONFIG_SETTING_NOSERVICE :Desactiva les revisions quan les avaries s'estableixen a cap: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quan està activat, els vehicles no són revisats si no es poden espatllar STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activa límits de velocitat per als vagons: {STRING} @@ -1524,7 +1578,7 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Altres canvis d STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Mostra les notícies de canvis als nivells de producció de les indústries que no estan proveïdes ni per la companyia ni pels competidors STR_CONFIG_SETTING_NEWS_ADVICE :Alertes / informació sobre els vehicles de la companyia: {STRING} STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Mostra missatges sobre vehicles que necessitin atenció -STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nous vehicles: {STRING} +STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Vehicles nous: {STRING} STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Mostra les notícies d'aparicions de nous tipus de vehicles STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Canvis en l'admissió de càrrega: {STRING} STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Mostra missatges sobre les estacions que canviïn l'acceptació d'alguna càrrega @@ -1540,12 +1594,19 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Complet STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Les notícies en color apareixen el: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Any en què els diaris comencen a fer anuncis en color. Abans d'aquest any, imprimiran en blanc i negre. STR_CONFIG_SETTING_STARTING_YEAR :Any d'inici: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Any de puntuació final: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Estableix l'any en què finalitza la partida i es puntua les companyies. Al final d'aquest any, la puntuació de la companyia es guarda i es mostra a la llista de classificació, però els jugadors poden continuar jugant.{}Si l'any de finalització és anterior a l'any d'inici, no es guardaran les puntuacions ni es mostrarà la llista de classificació. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Mai -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Activa economia suau (més canvis però més petits): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Quan està activat, els canvis de producció de la indústria són més habituals, i en passos més petits. Aquest paràmetre usualment no té efecte, si el tipus d'indústria estan proveïts per un NewGRF +STR_CONFIG_SETTING_ECONOMY_TYPE :Tipus d'economia: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Una economia suau implica canvis freqüents però petits en productivitat. En una economia congelada no hi ha canvis de productivitat ni tancament d'indústries. Aquesta configuració pot no tenir cap efecte si els tipus d'indústria venen predeterminats per un NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Suau +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :{G=Femenin}Congelada STR_CONFIG_SETTING_ALLOW_SHARES :Permet comprar participacions d'altres companyies: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Permet comprar i vendre accions de les companyies. Les accions només estan disponibles per companyies d'una certa edat. STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edat mínima de la companyia per negociar participacions: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Estableix l'edat mínima d'una companyia per tal que els altres competidors puguin comprar-ne o vendre accions. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentatge del benefici total a pagar en transferències: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentatge del benefici donat a branques intermediàries dins els sistemes, donant més control sobre els beneficis STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :En arrossegar, col·locar senyals cada: {STRING} @@ -1570,10 +1631,10 @@ STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Totes STR_CONFIG_SETTING_TOWN_LAYOUT :Disposició de carreteres per les noves poblacions: {STRING} STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Disposició per la xarxa de carreteres de les poblacions -STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :Original -STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :Millors carreteres -STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :graella 2x2 -STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :graella 3x3 +STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :Distribució millorada +STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :Distribució millorada +STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :Graella 2x2 +STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :Graella 3x3 STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatori STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Les poblacions poden construir carreteres: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permet a les poblacions construir carreteres per créixer. Desactiveu aquesta opció per evitar que les poblacions construeixin carreteres. @@ -1593,9 +1654,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Disposició de nous arbres durant la partida: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla l'aparició aleatòria dels arbres durant una partida. Això podria afectar a les indústries que es basen en el creixement dels arbres, per exemple les serradores -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Cap {RED}(inhabilita la serradora) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Només a les selves tropicals -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :A tot arreu +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Creixen però no n'apareixen més {RED}(trenca el funcionament de les serradores) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Creixen però només n'apareixen més a la selva tropical +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Creixen i n'apareixen per tot arreu +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :No creixen ni n'apareixen més {RED}(trenca el funcionament les serradores) STR_CONFIG_SETTING_TOOLBAR_POS :Posició de la barra d'eines principal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posició horitzontal de la barra principal a la part superior de la pantalla @@ -1613,12 +1675,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :Zoom màxim d'a STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Nivell de zoom d'apropament màxim a les vistes. Un major nivell de zoom d'apropament incrementa les necessitats de memòria STR_CONFIG_SETTING_ZOOM_MAX :Zoom màxim d'allunyament: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Nivell de zoom d'allunyament màxim a les vistes. Un nivell elevat de zoom d'allunyament pot causar alentiments +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Resolució de sprites màxima que es pot usar: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita la resolució màxima dels sprites que s'empraran. Aquest límit pot evitar que s'usin els sprites amb resolució elevada quan estiguin disponibles. Això pot ajudar a millorar l'aparença general quan s'empren diferents fitxers GRF amb gràfics de diferents resolucions màximes. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normal STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :x4 +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :x2 +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :x1 STR_CONFIG_SETTING_TOWN_GROWTH :Velocitat de creixement de les poblacions: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocitat de creixement de les poblacions STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Cap @@ -1662,6 +1729,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Quan es mostren STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Mètric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unitats del joc (cel·les/dia) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unitats de potència dels vehicles: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Quan es mostra la potència d'un vehicle a la interfície d'usuari, presenta-la en les unitats seleccionades @@ -1751,10 +1819,14 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}...s'ign STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memòria exhaurida STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}L'assignació de {BYTES} de memòria cau de sprites ha fallat. S'ha reduït aquest tipus de memòria a {BYTES}. Això reduirà el rendiment de l'OpenTTD. Per reduir els requeriments de memòria, proveu de desactivar els gràfics de 32bpp i/o els nivells extra de zoom. +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}S'ha produït un error en la configuració de vídeo... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... no s'ha trobat cap GPU compatible. Es desactiva l'acceleració per programari. + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} -STR_INTRO_NEW_GAME :{BLACK}Nova partida +STR_INTRO_NEW_GAME :{BLACK}Partida nova STR_INTRO_LOAD_GAME :{BLACK}Carrega una partida STR_INTRO_PLAY_SCENARIO :{BLACK}Juga un escenari STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Juga un mapa d'alçades @@ -1766,7 +1838,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Taula de STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Configuració STR_INTRO_NEWGRF_SETTINGS :{BLACK}Extensions NewGRF STR_INTRO_ONLINE_CONTENT :{BLACK}Contingut en línia -STR_INTRO_SCRIPT_SETTINGS :{BLACK}Paràmetres de les IA/script de la partida +STR_INTRO_SCRIPT_SETTINGS :{BLACK}Paràmetres dels scripts d'IA/partida STR_INTRO_QUIT :{BLACK}Surt STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Comença una partida nova. Ctrl+Clic salta la configuració del mapa @@ -1786,26 +1858,18 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Mostra l STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Mostra la finestra de configuració STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Mostra la configuració de les extensions NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Comprova si hi ha continguts nous i actualitzats per a descarregar -STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Mostra els paràmetres de les IA/Script de la partida +STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Mostra els paràmetres dels scripts d'IA/partida STR_INTRO_TOOLTIP_QUIT :{BLACK}Surt de l'OpenTTD. -STR_INTRO_BASESET :{WHITE}Al joc de gràfics base seleccionat li falten {NUM} sprite{P "" s}.{}Si us plau, comproveu-ne si hi ha actualitzacions disponibles. +STR_INTRO_BASESET :{WHITE}Al joc de gràfics base seleccionat li falten {NUM} sprite{P "" s}.{}Si us plau, comproveu si hi ha actualitzacions disponibles. STR_INTRO_TRANSLATION :{BLACK}A aquesta traducció li falten {NUM} caden{P a es}. Si us plau, ajudeu a fer millor l'OpenTTD unint-vos com a traductor. Vegeu el fitxer readme.txt per més detalls. # Quit window STR_QUIT_CAPTION :{WHITE}Surt -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Esteu segur que voleu abandonar aquesta partida i tornar a {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Esteu segur que voleu sortir de l'OpenTTD? STR_QUIT_YES :{BLACK}Sí STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandona la partida STR_ABANDON_GAME_QUERY :{YELLOW}Esteu segur que voleu abandonar la partida? @@ -1814,7 +1878,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Esteu s # Cheat window STR_CHEATS :{WHITE}Trampes STR_CHEATS_TOOLTIP :{BLACK}Les caselles de selecció indiquen si heu fet servir aquesta trampa. -STR_CHEATS_WARNING :{BLACK}Atenció! Esteu a punt d'enredar als altres jugadors. Penseu que una cosa així serà recordada per tota l'eternitat. +STR_CHEATS_NOTE :{BLACK}Nota: Qualsevol ús d'aquests paràmetres serà enregistrat per la partida guardada STR_CHEAT_MONEY :{LTBLUE}Augmenta els diners de la companyia actual en {CURRENCY_LONG}. STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Juga amb la companyia: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Eruga màgica (treu indústries i altres objectes inamovibles): {ORANGE}{STRING} @@ -1926,10 +1990,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Canvia l # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Anunciat -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Escull entre una partida anunciada (internet) i una partida no anunciada (xarxa d'àrea local, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sí STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom del jugador: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Aquest és el nom amb el que els altres jugadors t'identificaran @@ -1970,8 +2030,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Connecta STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Actualitza servidor STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Actualitza la informació del servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Busca servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Cercant un servidor a la xarxa +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Cerca a Internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Cerca servidors públics a Internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Cerca a la LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Cerca servidors a la xarxa local STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Afegeix un servidor STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Afegeix un servidor a la llista que sempre es comprovarà per buscar partides en marxa STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Inicia el servidor @@ -1988,6 +2050,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}El nom d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Posa una contrasenya STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegeix la teva partida amb una contrasenya si no vols que sigui accessible a desconeguts +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciat +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escull entre una partida anunciada (internet) i una partida no anunciada (xarxa d'àrea local, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Sí STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} @@ -2101,7 +2165,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova companyia # Network client list STR_NETWORK_CLIENTLIST_KICK :Breu STR_NETWORK_CLIENTLIST_BAN :Prohibit -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Entrega diners STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parla a tothom STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parla amb la companyia STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Missatge Privat @@ -2110,8 +2173,6 @@ STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Espectadors -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introdueix la quantitat de diners que vols donar - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}No desis la nova contrasenya. STR_COMPANY_PASSWORD_OK :{BLACK}Estableix aquesta nova contrasenya per a la companyia. @@ -2140,7 +2201,7 @@ STR_NETWORK_CHAT_ALL :[Tothom] {STRIN STR_NETWORK_CHAT_OSKTITLE :{BLACK}Posa el text pel xat de xarxa # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}No s'han trobat dispositius de xarxa o s'ha compilat sense l'opció ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}No s'han trobat dispositius de xarxa. STR_NETWORK_ERROR_NOSERVER :{WHITE}No s'ha pogut trobar cap partida en xarxa STR_NETWORK_ERROR_NOCONNECTION :{WHITE}El servidor no ha contestat a la petició STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}No s'ha pogut connectar degut a una diferència de NewGRF @@ -2156,6 +2217,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contrase STR_NETWORK_ERROR_SERVER_FULL :{WHITE}El servidor està ple STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Estàs exclòs d'aquest servidor STR_NETWORK_ERROR_KICKED :{WHITE}T'han fet fora de la partida +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Motiu: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}No es permet fer trampes en aquest servidor STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Estaves enviant massa ordres al servidor STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Has tardat massa a introduir la contrasenya @@ -2197,11 +2259,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Partida encara STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Partida encara en pausa ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Partida encara en pausa ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :La partida encara està en pausa ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :La partida encara està en pausa ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Partida represa ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :nombre de jugadors STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :connectant clients STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manual -STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :script de la partida +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :script de partida +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :s'està esperant que s'actualitzi el graf de distribució ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :deixant STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} s'ha unit a la partida @@ -2211,10 +2275,10 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} s' STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ha començat una nova companyia (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} ha deixat la partida ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} ha canviat el seu nom a {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ha donat a la teva companyia {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Has donat {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ha donat {2:CURRENCY_LONG} a {1:STRING}. STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}El servidor ha tancat la sessió STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}El servidor està reiniciant...{}Espera un moment... +STR_NETWORK_MESSAGE_KICKED :*** S'ha expulsat {STRING}. Motiu: {STRING} # Content downloading window STR_CONTENT_TITLE :{WHITE}Descàrregues de contingut @@ -2267,7 +2331,7 @@ STR_CONTENT_TYPE_SCENARIO :Escenari STR_CONTENT_TYPE_HEIGHTMAP :Mapa d'alçades STR_CONTENT_TYPE_BASE_SOUNDS :Sons base STR_CONTENT_TYPE_BASE_MUSIC :Música base -STR_CONTENT_TYPE_GAME_SCRIPT :Script de la partida +STR_CONTENT_TYPE_GAME_SCRIPT :Script de partida STR_CONTENT_TYPE_GS_LIBRARY :Llibreria GS # Content downloading progress window @@ -2279,7 +2343,7 @@ STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES}{ # Content downloading error messages STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}No s'ha pogut connectar amb el servidor de continguts... -STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}Descàrrega fallida... +STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}La descàrrega ha fallat... STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_CONNECTION_LOST :{WHITE}... connexió perduda STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... no es pot escriure al fitxer STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}No s'han pogut descomprimir els arxius descarregats @@ -2289,6 +2353,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}L'OpenTT STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Sí, descarregar els gràfics STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}No, surt de l'OpenTTD. +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Ha fallat la descàrrega. +STR_MISSING_GRAPHICS_ERROR :{BLACK}La descàrrega de gràfics ha fallat.{}Si us plau, baixeu els gràfics manualment. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Surt de l'OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Opcions de transparència STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Commuta la transparència dels senyals. Ctrl+Clic per bloquejar @@ -2330,6 +2398,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Constru STR_JOIN_WAYPOINT_CAPTION :{WHITE}Uneix punt de pas STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construeix un punt de pas separat +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}S'ha desactivat ja que actualment no disposeu de vehicles per usar aquesta infraestructura. + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construcció de ferrocarril STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construcció de ferrocarril elèctric @@ -2368,7 +2439,7 @@ STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Nombre d STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Selecciona el nombre d'andanes de l'estació de tren STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Mida de les andanes STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Selecciona la mida de les andanes de l'estació de tren -STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrossega i Deixa +STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrossega i deixa STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construeix una estació arrossegant i deixant STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Selecciona un tipus de estació a mostrar @@ -2436,6 +2507,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converte STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converteix/Millora el tipus de tramvia. Shift commuta construeix/mostra el cost estimat. STR_ROAD_NAME_ROAD :Carretera +STR_ROAD_NAME_TRAM :Tramvia # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientació de la cotxera @@ -2516,69 +2588,81 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Mida: {G STR_OBJECT_CLASS_LTHS :Fars STR_OBJECT_CLASS_TRNS :Transmissors -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Arbres STR_PLANT_TREE_TOOLTIP :{BLACK}Selecciona el tipus d'arbre a plantar. Si la casella ja conté un arbre, s'afegiran més arbres d'altres espècies independentment de quin estigui seleccionat STR_TREES_RANDOM_TYPE :{BLACK}Arbres de tipus aleatori STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Situar arbres de tipus aleatori. Shift commuta construeix/mostra el cost estimat -STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Arbres Aleatoris +STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Planta arbres STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Planta arbres aleatòriament al paisatge +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Planta un arbre a cada casella arrossegant el ratolí pel paisatge. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Arbreda +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Planta petits boscos arrossegant el ratolí pel paisatge. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Bosc +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Planta grans boscos arrossegant el ratolí pel paisatge. # Land generation window (SE) -STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generador de Terreny +STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generador de terreny STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Situa àrees de roques al paisatge STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Defineix àrea de desert.{}Mantingues apretat Ctrl per treure'l STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Augmenta la mida de l'àrea de terreny a rebaixar/elevar STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Disminueix la mida de l'àrea de terreny a rebaixar/elevar STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Genera un terreny aleatori -STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Crear nou escenari -STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Restableix paisatge -STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Treure totes les propietats pertanyents a companyies del mapa +STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Crea un escenari nou +STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Restableix el paisatge +STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Treu del mapa totes les propietats de les companyies. STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Restableix Paisatge STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Estàs segur que vols treure totes les propietats pertanyents a companyies? # Town generation window (SE) -STR_FOUND_TOWN_CAPTION :{WHITE}Generació de Poblacions -STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nova Població -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Funda una nova població. Shift+Clic mostra el cost estimat -STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Localitat Aleatòria +STR_FOUND_TOWN_CAPTION :{WHITE}Generació de poblacions +STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Població nova +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Funda una població. Shift+Clic en mostra el cost estimat. +STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Crea una població aleatòria STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Funda una població en un lloc aleatori -STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Moltes poblacions aleatòries +STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Crea moltes poblacions aleatòries STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Omple el mapa amb poblacions situades aleatòriament -STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nom de la població: +STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nom de la població nova: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introdueix el nom de la població STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clica per introduir el nom de la població STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nom aleatori STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Genera un nom aleatori nou STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Mida de població: -STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Petit -STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Mitjà +STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Petita +STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Mitjana STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Gran -STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Aleatori +STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Aleatòria STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Selecciona la mida de la població STR_FOUND_TOWN_CITY :{BLACK}Ciutat STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Les ciutats creixen més ràpid que els pobles{}Depenent de la configuració, són més grans quan es funden STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Disposició de les carreteres de la població: STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Selecciona la disposició de les carreteres utilitzades per a aquesta població -STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Original -STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Millors carreteres -STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}graella 2x2 -STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}graella 3x3 -STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aleatori +STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Distribució original +STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Distribució millorada +STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}Graella 2x2 +STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Graella 3x3 +STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aleatòria # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Finança una nova indústria STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Escolleix el tipus d'indústria adequada d'aquesta llista -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Moltes indústries aleatòries +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Crea indústries aleatòries STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Omple el mapa amb indústries situades aleatòriament +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Crea indústries aleatòries +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Esteu segur que voleu crear moltes indústries aleatòries? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Cost: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospecciona STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Construeix STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Finança +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Treu totes les indústries +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Treu totes les indústries que hi ha actualment al mapa. +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Treu totes les indústries +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Esteu segur que voleu treure totes les indústries? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadena industrial per la indústria {STRING} @@ -2599,6 +2683,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Seleccio # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informació del terreny +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centra la vista principal al lloc on està la casella. Amb Ctrl+clic s'obre una vista nova al lloc de la casella. STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Cost de neteja: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Cost de neteja: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Ingressos en netejar: {LTBLUE}{CURRENCY_LONG} @@ -2607,7 +2692,7 @@ STR_LAND_AREA_INFORMATION_OWNER :{BLACK}Propieta STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Propietari de la carretera: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propietari del rail del tramvia: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Propietari del rail: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoritat Local: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoritat local: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Cap STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenades: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construït: {LTBLUE}{DATE_LONG} @@ -2620,8 +2705,11 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Càrrega acceptada: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipus de via: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Tipus de carretera: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tipus de tramvia: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Límit de velocitat de la via: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Límit de velocitat de la carretera: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Límit de velocitat dels tramvies: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Roques @@ -2731,6 +2819,7 @@ STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor d STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quant ràpid va la partida actual, comparant-ho amb l'estimació de la velocitat normal. STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Mitjana +STR_FRAMERATE_MEMORYUSE :{WHITE}Memòria STR_FRAMERATE_DATA_POINTS :{BLACK}Dades basades en {COMMA} mesures. STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{NBSP}ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{NBSP}ms @@ -2738,7 +2827,9 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{ STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{NBSP}fps STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{NBSP}fps STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{NBSP}fps +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA}{NBSP}ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA}{NBSP}s ############ Leave those lines in this order!! @@ -2802,6 +2893,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Cadena de filtre: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sobreescriu fitxer STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Esteu segur que voleu sobreescriure el fitxer? +STR_SAVELOAD_DIRECTORY :{STRING} (carpeta) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (carpeta superior) STR_SAVELOAD_OSKTITLE :{BLACK}Posa el nom amb què desar la partida actual @@ -2813,14 +2906,18 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nombre de poblacions: STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Nombre d'indústries: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Alçada màxima del mapa: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Augmenta l'alçada màxima del terreny en el mapa en una unitat -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Disminueix l'alçada màxima del mapa en una unitat -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Alçada dels estatges amb neu: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Mou els estatges amb neu un pas amunt -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Mou els estatges amb neu un pas avall +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Alçada del cim més alt: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Augmenta l'alçada màxima o l'alçada màxima dels cims en una unitat +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Redueix l'alçada màxima o l'alçada màxima dels cims en una unitat +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Proporció de terreny nevat: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Augmenta un 10 % la proporció de terreny nevat +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Redueix un 10 % la proporció de terreny nevat +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}{NBSP}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Proporció de terreny desèrtic: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Augmenta un 10 % la proporció de terreny desèrtic +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Redueix un 10 % la proporció de terreny desèrtic +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}{NBSP}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Generació de terrenys: -STR_MAPGEN_TREE_PLACER :{BLACK}Algoritme d'arbres: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipus de terreny: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Nivell de mar: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Quantitat de rius: @@ -2845,8 +2942,10 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nom del STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Mida: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Canvia l'alçada màxima del mapa -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Canvia l'alçada d'inici d'estatges amb neu +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Alçada desitjada dels cims +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Alçada màxima dels cims +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Percentatge de terreny amb neu +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Percentatge de terreny desèrtic STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Canviar l'any inicial # SE Map generation @@ -3038,6 +3137,7 @@ STR_NEWGRF_BUGGY :{WHITE}El NewGR STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}La informació de càrrega/remodelació per '{1:ENGINE}' no encaixa amb la llista de compres després de la construcció. Això podria causar un mal funcionament de autorenova/-substitueix STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' ha provocat un bucle infinit en la crida de producció STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}'Callback' {1:HEX} ha retornat un resultat desconegut/invàlid {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}«{1:STRING}» ha retornat un tipus de càrrega no vàlid a {2:HEX}. # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3062,6 +3162,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Commuta # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Edita el text del senyal +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centra la vista principal en la senyal. Amb Ctrl+Clic, obre una nova vista centrada en la senyal. STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Vés al proper senyal STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Vés al senyal anterior @@ -3105,6 +3206,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Canvia el nom d # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} autoritat local STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostra la zona que pertany a l'autoritat local. STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Ratis de la companyia de transports: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Accions disponibles: @@ -3121,33 +3223,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Finança nous e STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Compra els drets de transport en exclusiva STR_LOCAL_AUTHORITY_ACTION_BRIBE :Suborna les autoritats locals -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Inicia una petita campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Inicia una mitjana campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Inicia una gran campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Finança la reconstrucció de la xarxa local de carrers. Dificulta notablement el trànsit durant 6 mesos.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Construeix una estàtua en honor a la teva companyia.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Finança la construcció de nous edificis comercials a la població.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Compra per 1 any els drets exclusius de transport en la població. L'autoritat local només permetrà utilitzar les instal·lacions de la teva companyia de transports als passatgers i les mercaderies.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Inicia una petita campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins d'un radi petit al voltant del centre de la població.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Inicia una mitjana campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins un radi mitjà al voltant del centre de la població.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Inicia una gran campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins d'un radi gran al voltant del centre de la població.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Finança la reconstrucció de la xarxa local de carrers. Dificulta notablement el trànsit durant 6 mesos.{}Causa molèsties considerables al trànsit de vehicles de carretera durant 6 mesos.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Construeix una estàtua en honor a la teva companyia.{}Proporciona una millora permanent dels ratis d'estació de la població.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Finança la construcció de nous edificis comercials a la població.{}Proporciona una millora temporal del creixement d'aquesta població.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Compra per 1 any els drets exclusius de transport en la població. L'autoritat local només permetrà utilitzar les instal·lacions de la teva companyia de transports als passatgers i les mercaderies.{}L'autoritat local no permetrà que els passatgers i càrregues locals usin les estacions dels oponents.{}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Suborna les autoritats locals per incrementar el teu rati, a risc de greus penalitzacions si et pesquen.{}Cost: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Objectius STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objectius globals STR_GOALS_SPECTATOR :Objectius globals -STR_GOALS_GLOBAL_TITLE :{BLACK}Objectius globals: +STR_GOALS_GLOBAL_BUTTON :{BLACK}Global +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Mostra els objectius globals +STR_GOALS_COMPANY_BUTTON :{BLACK}Companyia +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Mostra els objectius de la companyia STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Cap - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- No aplicable - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Objectius de la companyia: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clica sobre l'objectiu per centrar la vista principal sobre la indústria/població/cel·la. Ctrl+clic per obrir una nova vista sobre la indústria/població/cel·la # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Pregunta -STR_GOAL_QUESTION_CAPTION_INFORMATION :Informació -STR_GOAL_QUESTION_CAPTION_WARNING :Alerta -STR_GOAL_QUESTION_CAPTION_ERROR :Error +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Pregunta +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informació +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Avís +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Error ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Cancel·la @@ -3282,24 +3385,24 @@ STR_FINANCES_CAPTION :{WHITE}Finances STR_FINANCES_EXPENDITURE_INCOME_TITLE :{WHITE}Despeses/Ingressos STR_FINANCES_YEAR :{WHITE}{NUM} STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Construcció -STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Nous Vehicles -STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Desp. de Circ. de Trens -STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Desp. de Circ. de Vehicles -STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Desp. de Circ. d'Avions -STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Desp. de Circ. de Vaixells -STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}Manteniment de Propietats -STR_FINANCES_SECTION_TRAIN_INCOME :{GOLD}Ingressos de Trens -STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Ingressos de Vehicles -STR_FINANCES_SECTION_AIRCRAFT_INCOME :{GOLD}Ingressos d'Avions -STR_FINANCES_SECTION_SHIP_INCOME :{GOLD}Ingressos de Vaixells -STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Interessos del Préstec +STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Compra de vehicles +STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Desp. de circ. de trens +STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Desp. de circ. de vehicles +STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Desp. de circ. d'aeronaus +STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Desp. de circ. de vaixells +STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}Manteniment de propietats +STR_FINANCES_SECTION_TRAIN_INCOME :{GOLD}Ingressos de trens +STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Ingressos de vehicles +STR_FINANCES_SECTION_AIRCRAFT_INCOME :{GOLD}Ingressos d'avions +STR_FINANCES_SECTION_SHIP_INCOME :{GOLD}Ingressos de vaixells +STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Interessos del préstec STR_FINANCES_SECTION_OTHER :{GOLD}Altres STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} STR_FINANCES_TOTAL_CAPTION :{WHITE}Total: -STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanç del Banc +STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanç bancari STR_FINANCES_LOAN_TITLE :{WHITE}Préstec -STR_FINANCES_MAX_LOAN :{WHITE}Préstec Màxim: {BLACK}{CURRENCY_LONG} +STR_FINANCES_MAX_LOAN :{WHITE}Préstec màxim: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Demana {CURRENCY_LONG} STR_FINANCES_BORROW_TOOLTIP :{BLACK}Augmenta l'import del préstec Ctrl+Clic per demanar tants diners com sigui possible @@ -3337,6 +3440,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Trasllad STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Trasllada la seu a un altre lloc amb el cost d'un 1% del valor de la companyia. Amb Maj+Clic, mostra el cost estimat sense traslladar la seu. STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalls STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Veure els detalls de la infraestructura de la companyia. +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dóna diners +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Doneu diners a aquesta companyia. STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Modifica la cara STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Modifica la cara del president de la companyia. @@ -3354,6 +3459,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Ven un 2 STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nom de la companyia STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nom del president +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Escriviu la quantitat de diners que voleu donar STR_BUY_COMPANY_MESSAGE :{WHITE}Estem venent la nostra companyia de transports.{}{}Vols comprar {COMPANY} per {CURRENCY_LONG}? @@ -3375,8 +3481,15 @@ STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Indústr STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Cap - STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} (transportat: {COMMA}{NBSP}%){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING} i {STRING}. +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} i {NUM} més... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nom de les indústries - clica al nom per centrar la vista en la indústria. Ctrl+Clic obre una nova vista al lloc de la indústria +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Càrrega acceptada: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Càrrega produïda: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Tots els tipus de càrrega +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Cap # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3442,8 +3555,9 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Vehicles desagr STR_GROUP_DEFAULT_SHIPS :Vaixells desagrupats STR_GROUP_DEFAULT_AIRCRAFTS :Avions desagrupats +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grups - Clica en un grup per llistar tots els vehicles d'aquest grup. Arrossega i solta per a canviar-ne la jerarquia. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grups - Clica en un grup per llistar tots els vehicles d'aquest grup. Arrossega i deixa per a canviar-ne la jerarquia. STR_GROUP_CREATE_TOOLTIP :{BLACK}Clica per crear un grup STR_GROUP_DELETE_TOOLTIP :{BLACK}Elimina el grup seleccionat STR_GROUP_RENAME_TOOLTIP :{BLACK}Canvia el nom del grup seleccionat @@ -3464,21 +3578,23 @@ STR_GROUP_OCCUPANCY :Ocupació actua STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window -STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Compra de nous vehicles ferroviaris -STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Compra de nous vehicles ferroviaris per vies electrificades -STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Compra de nous vehicles monorail -STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Compra de nous vehicles Maglev +STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Compra de vehicles ferroviaris +STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Compra de vehicles ferroviaris per vies electrificades +STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Compra de vehicles monorail +STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Compra de vehicles Maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Compra de nous vehicles de carretera +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Compra de vehicles de tramvia ############ range for vehicle availability starts -STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Compra de nous vehicles sobre vies -STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Automòbils nous -STR_BUY_VEHICLE_SHIP_CAPTION :Compra de nous vaixells -STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Compra de noves aeronaus +STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Compra de vehicles sobre vies +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Compra automòbils +STR_BUY_VEHICLE_SHIP_CAPTION :Compra de vaixells +STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Compra d'aeronaus ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} Pes: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Cost de la remodelació: {GOLD}{CURRENCY_LONG}{BLACK}) Pes: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Velocitat: {GOLD}{VELOCITY}{BLACK} Potència: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Velocitat: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Velocitat al mar: {GOLD}{VELOCITY} @@ -3492,11 +3608,13 @@ STR_PURCHASE_INFO_COST :{BLACK}Cost: {G STR_PURCHASE_INFO_COST_REFIT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Cost del remodelat: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Pes: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} Velocitat: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Cost de la remodelació: {GOLD}{CURRENCY_LONG}{BLACK}) Velocitat: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacitat: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagons Automotrius: {GOLD}+{POWER}{BLACK} Pes: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Remodelable a: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Totes les càrregues STR_PURCHASE_INFO_NONE :Cap +STR_PURCHASE_INFO_ENGINES_ONLY :Només locomotores STR_PURCHASE_INFO_ALL_BUT :Qualsevol excepte {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Esforç de tracció màxim: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Abast: {GOLD}{COMMA} cel·les @@ -3513,12 +3631,19 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Compra e STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Compra l'aeronau STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra i remodela vehicles +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra i remodela el vehicle +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra i remodela el vaixell +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra i remodela aeronaus STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el tren/vagó seleccionat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el vehicle marcat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el vaixell seleccionat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Compra l'aeronau marcada. Amb Maj+Clic, mostra el cost estimat sense comprar-la. +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra i remodela el vehicle de tren seleccionat. Amb Maj + Clic es mostra el cost estimat sense comprar-lo. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra i remodela el vehicle de carretera seleccionat. Amb Maj + Clic es mostra el cost estimat sense comprar-lo. +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra i remodela el vaixell seleccionat. Amb Maj + Clic es mostra el cost estimat sense comprar-lo. +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra i remodela l'aeronau seleccionada. Amb Maj + Clic es mostra el cost estimat sense comprar-la. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Canvia el nom STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Canvia el nom @@ -3583,20 +3708,20 @@ STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Autosubs STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Autosubstitueix tots els vaixells de la drassana STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Autosubstitueix tots els avions de l'hangar -STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nous Vehicles -STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Nous Vehicles -STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Nous Vaixells -STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nou Avió +STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Compra vehicles +STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Compra vehicles +STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Compra vaixells +STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Compra avions -STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Compra un nou vehicle ferroviari -STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Compra un nou automòbil -STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Compra un nou vaixell -STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Compra un nou avió +STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Compra vehicles ferroviaris. +STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Compra automòbils nous. +STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Compra vaixells nous. +STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Compra avions nous. -STR_DEPOT_CLONE_TRAIN :{BLACK}Clona Tren -STR_DEPOT_CLONE_ROAD_VEHICLE :{BLACK}Clona Vehicle -STR_DEPOT_CLONE_SHIP :{BLACK}Clona Vaixell -STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Clona Avió +STR_DEPOT_CLONE_TRAIN :{BLACK}Clona un tren +STR_DEPOT_CLONE_ROAD_VEHICLE :{BLACK}Clona un vehicle +STR_DEPOT_CLONE_SHIP :{BLACK}Clona un vaixell +STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Clona aeronau STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Això comprarà una còpia del tren inclosos tots els vagons. Clica aquest botó i després en un tren dins o fora de les cotxeres. Control+Clic compartirà les ordres. Shift+Clic mostra el cost estimat sense comprar-lo STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Això comprarà una còpia del vehicle. Clica aquest botó i després en un vehicle dins o fora de les cotxeres. Control+Clic compartirà les ordres. Shift+Clic mostra el cost estimat sense comprar-lo @@ -3630,6 +3755,7 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Missatge STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Acabem de dissenyar {G un una} {G nou nova} {STRING}. Esteu interessats en fer ús exclusiu d'aquest vehicle durant un any, per veure com va, abans del seu llançament mundial? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=Femenin}locomotora de tren +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :locomotora de ferrocarril electrificat STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=Femenin}locomotora de monorail STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=Femenin}locomotora de maglev @@ -3676,8 +3802,10 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Canvia e STR_REPLACE_ENGINES :Motors STR_REPLACE_WAGONS :Vagons STR_REPLACE_ALL_RAILTYPE :Tots els vehicles ferroviaris +STR_REPLACE_ALL_ROADTYPE :Tots els vehicles de carretera STR_REPLACE_HELP_RAILTYPE :{BLACK}Tria el tipus de via dels models de vehicle que vols substituir +STR_REPLACE_HELP_ROADTYPE :{BLACK}Escolliu el tipus de carretera per a la qual voleu canviar els vehicles. STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Mostra quin model dels seleccionats a l'esquerra es substitueix, si n'hi ha STR_REPLACE_RAIL_VEHICLES :Trens de Vapor i Dièsel STR_REPLACE_ELRAIL_VEHICLES :Trens Elèctrics @@ -3693,10 +3821,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Fer que # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centra la vista principal al lloc del tren. Ctrl+Clic per seguir el tren a la vista principal -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centra la vista principal al lloc del vehicle. Ctrl+Clic per seguir el vehicle a la vista principal -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centra la vista principal al lloc del vaixell. Ctrl+Clic per seguir el vaixell a la vista principal -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centra la vista principal al lloc de l'avió. Ctrl+Clic per seguir l'avió a la vista principal +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centra la vista principal al lloc on està el tren. Si feu doble clic, se'l seguirà a la vista principal. Amb Ctrl+clic s'obre una vista nova al lloc on està el tren. +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centra la vista principal al lloc on està el vehicle. Si feu doble clic, se'l seguirà a la vista principal. Amb Ctrl+clic s'obre una vista nova al lloc on està el vehicle. +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centra la vista principal al lloc on està el vaixell. Si feu doble clic, se'l seguirà a la vista principal. Amb Ctrl+clic s'obre una vista nova al lloc on està el vaixell. +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centra la vista principal al lloc on està l'aeronau. Si feu doble clic, se la seguirà a la vista principal. Amb Ctrl+clic s'obre una vista nova al lloc on està l'aeronau. STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Envia el tren a cotxera STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Envia el vehicle a cotxera @@ -3728,10 +3856,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Mostra e STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Mostra els detalls del vaixell STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Mostra els detalls de l'avió -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Acció sobre el tren actual - clica aquí per parar/engegar el tren. Ctrl+Clic per saltar a la destinació -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Acció sobre el vehicle actual - clica aquí per parar/engegar el vehicle. Ctrl+Clic per saltar a la destinació -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Accions sobre el vaixell actual - clica aquí per parar/engegar el vaixell. Ctrl+Clic per saltar a la destinació -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Accions sobre l'avió actual - clica aquí per parar/engegar l'avió. Ctrl+Clic per saltar a la destinació +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Acció actual del tren - Feu clic per parar-lo o engegar-lo. +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Acció actual del vehicle - Feu clic per parar-lo o engegar-lo. +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Acció actual del vaixell - Feu clic per parar-lo o engegar-lo. +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Acció actual de l'aeronau - Feu clic per parar-la o engegar-la. + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centra la vista principal a la destinació de l'ordre. Amb Ctrl+clic s'obre una vista nova al lloc de la destinació de l'ordre. # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Carregant / Descarregant @@ -3753,8 +3883,8 @@ STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Revisi # Vehicle stopped/started animations STR_VEHICLE_COMMAND_STOPPED_SMALL :{TINY_FONT}{RED}Parat STR_VEHICLE_COMMAND_STOPPED :{RED}Parat -STR_VEHICLE_COMMAND_STARTED_SMALL :{TINY_FONT}{GREEN}Començat -STR_VEHICLE_COMMAND_STARTED :{GREEN}Començat +STR_VEHICLE_COMMAND_STARTED_SMALL :{TINY_FONT}{GREEN}Engegat +STR_VEHICLE_COMMAND_STARTED :{GREEN}Engegat # Vehicle details STR_VEHICLE_DETAILS_CAPTION :{WHITE}{VEHICLE} (Detalls) @@ -3959,6 +4089,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Remodela a {ST STR_ORDER_STOP_ORDER :(Para) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(No pot usar l'estació){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Implícit) @@ -4095,11 +4226,11 @@ STR_AI_GAME_SCRIPT :{BLACK}Script d STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Mostra el registre de l'script de partida. STR_ERROR_AI_NO_AI_FOUND :No s'ha trobat una IA adequada per carregar.{}Aquesta IA és una IA falsa i no farà res.{}Pots descarregar diverses IA via el sistema de "Contingut en línia" -STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Un dels scripts executant-se s'ha penjat. Si us plau, informeu-ne a l'autor de l'script amb una captura de pantalla de la finestra de depuració IA/script de la partida. -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La finestra de depuració de les IA i l'script de la partida només està disponible al servidor. +STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Un dels scripts que s'estava executant ha fallat. Si us plau, informeu l'autor de l'script amb una captura de pantalla de la finestra de depuració de l'script d'IA/partida. +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La finestra de depuració de les IA i l'script de partida només està disponible al servidor. # AI configuration window -STR_AI_CONFIG_CAPTION :{WHITE}Configuració de la IA/script de partida +STR_AI_CONFIG_CAPTION :{WHITE}Configuració dels scripts de les IA/partida STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Aquest és l'script que s'usarà a la propera partida. STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Aquesta llista conté les IA que es carregaran a la propera partida. STR_AI_CONFIG_HUMAN_PLAYER :Jugador humà @@ -4137,8 +4268,11 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Seleccio STR_AI_LIST_CANCEL :{BLACK}Cancel·la STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}No canviïs l'script. +STR_SCREENSHOT_CAPTION :{WHITE}Pren una captura de pantalla STR_SCREENSHOT_SCREENSHOT :{BLACK}Captura de pantalla normal +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Captura de pantalla amb el nivell d'apropament màxim STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Zoom de la captura de pantalla per defecte +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura de pantalla del mapa sencer STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de pantalla del mapa d'alçades STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de pantalla del minimapa @@ -4200,6 +4334,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida est STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :No es pot llegir l'arxiu STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :No es pot escriure a l'arxiu STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :El test d'integritat de dades ha fallat +STR_GAME_SAVELOAD_ERROR_PATCHPACK :La desada es va fer amb una versió modificada. STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}La partida es va desar amb una versió sense suport de tramvies. S'han eliminat tots els tramvies @@ -4227,6 +4362,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Només s STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Captura de pantalla enorme STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}La captura de pantalla tindrà una resolució de {COMMA} x {COMMA} píxels. Es tardarà una estona a fer la captura. Vols continuar? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Mapa d'alçades desat correctament amb el nom «{STRING}». El cim més alt té alçada {NUM}. STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Captura de pantalla desada correctament com a '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Error en la captura de pantalla! @@ -4280,6 +4416,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... No q STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} necessaris STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}No es pot amortitzar préstec... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}No es poden regalar els diners deixats pel banc... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}No podeu donar diners a aquesta companyia... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}No pots comprar la companyia... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}No es pot construir la seu de la companyia... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}No pots comprar el 25% de participació en aquesta companyia... @@ -4406,6 +4543,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipus de cotxer STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} és massa llarg després de la substitució STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No s'han aplicat normes d'autosubstitució/renovació STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(límit de diners) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}El vehicle nou no pot portar {STRING}. +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}El vehicle nou no pot complir el remodelat de l'ordre {NUM}. # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinació de vies impossible @@ -4434,6 +4573,10 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Aquí no STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}No puc treure la via de tramvia d'aquí... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... no hi ha carretera STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... no hi ha via de tramvia +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Aquí no es pot convertir el tipus de carretera... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Aquí no es pot convertir el tipus de tramvia... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}No hi ha una carretera adequada. +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}No hi ha vies de tramvia adequades. STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... El tipus de tramvia és incompatible. # Waterway construction errors @@ -4487,6 +4630,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}No es po STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}No puc eliminar aquest grup... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}No puc canviar el nom del grup... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}No es pot establir la jerarquia de grups... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... no es permeten bucles en la jerarquia de grups. STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}No puc eliminar tots els vehicles d'aquest grup... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}No puc afegir el vehicle a aquest grup... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}No puc afegir vehicles compartits al grup... @@ -4545,7 +4689,7 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vehi STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}No hi haurà cap vehicle disponible STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Canvia la teva configuració dels NewGRF STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Encara no hi ha vehicles disponibles -STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Iniciar una nova partida després de {DATE_SHORT} o usar un NewGRF que proporcioni vehicles primerencs +STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Inicieu una partida nova després de {DATE_SHORT} o useu un NewGRF que proporcioni vehicles primerencs. # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}No pots fer que un tren passi d'una senyal amb perill... @@ -4682,10 +4826,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=Femenin}Mina ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Sense nom -STR_SV_TRAIN_NAME :{G=Masculin}Tren {COMMA} -STR_SV_ROAD_VEHICLE_NAME :{G=Masculin}Automòbil {COMMA} -STR_SV_SHIP_NAME :{G=Masculin}Vaixell {COMMA} -STR_SV_AIRCRAFT_NAME :{G=Masculin}Avió {COMMA} +STR_SV_TRAIN_NAME :{G=Masculin}Tren #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :{G=Masculin}Automòbil #{COMMA} +STR_SV_SHIP_NAME :{G=Masculin}Vaixell #{COMMA} +STR_SV_AIRCRAFT_NAME :{G=Masculin}Avió #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} Nord @@ -4987,6 +5131,7 @@ STR_FORMAT_BUOY_NAME :Boia de {TOWN} STR_FORMAT_BUOY_NAME_SERIAL :Boia de {TOWN} #{COMMA} STR_FORMAT_COMPANY_NUM :{G=Femenin}(Companyia {COMMA}) STR_FORMAT_GROUP_NAME :{G=Masculin}Grup {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN}: {STRING} STR_FORMAT_WAYPOINT_NAME :Punt de pas de {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Punt de pas de {TOWN} #{COMMA} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 50e69c9ba4..f534c46cdc 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -73,12 +73,12 @@ STR_CARGO_PLURAL_SUGAR :Šećer STR_CARGO_PLURAL_SUGAR.gen :šećera STR_CARGO_PLURAL_TOYS :Igračke STR_CARGO_PLURAL_TOYS.gen :igračaka -STR_CARGO_PLURAL_CANDY :Slatkiši -STR_CARGO_PLURAL_CANDY.gen :slatkiša +STR_CARGO_PLURAL_SWEETS :Slatkiši +STR_CARGO_PLURAL_SWEETS.gen :slatkiša STR_CARGO_PLURAL_COLA :Cola STR_CARGO_PLURAL_COLA.gen :cole -STR_CARGO_PLURAL_COTTON_CANDY :Šećerna vuna -STR_CARGO_PLURAL_COTTON_CANDY.gen :šećerne vune +STR_CARGO_PLURAL_CANDYFLOSS :Šećerna vuna +STR_CARGO_PLURAL_CANDYFLOSS.gen :šećerne vune STR_CARGO_PLURAL_BUBBLES :Baloni STR_CARGO_PLURAL_BUBBLES.gen :balona STR_CARGO_PLURAL_TOFFEE :Mliječne karamele @@ -161,15 +161,15 @@ STR_CARGO_SINGULAR_SUGAR.aku :šećer STR_CARGO_SINGULAR_TOY :Igračka STR_CARGO_SINGULAR_TOY.gen :igračaka STR_CARGO_SINGULAR_TOY.aku :igračku -STR_CARGO_SINGULAR_CANDY :Slatkiš -STR_CARGO_SINGULAR_CANDY.gen :slatkiša -STR_CARGO_SINGULAR_CANDY.aku :slatkiš +STR_CARGO_SINGULAR_SWEETS :Slatkiš +STR_CARGO_SINGULAR_SWEETS.gen :slatkiša +STR_CARGO_SINGULAR_SWEETS.aku :slatkiš STR_CARGO_SINGULAR_COLA :Cola STR_CARGO_SINGULAR_COLA.gen :cole STR_CARGO_SINGULAR_COLA.aku :colu -STR_CARGO_SINGULAR_COTTON_CANDY :Šećerna vuna -STR_CARGO_SINGULAR_COTTON_CANDY.gen :šećerne vune -STR_CARGO_SINGULAR_COTTON_CANDY.aku :šećernu vunu +STR_CARGO_SINGULAR_CANDYFLOSS :Šećerna vuna +STR_CARGO_SINGULAR_CANDYFLOSS.gen :šećerne vune +STR_CARGO_SINGULAR_CANDYFLOSS.aku :šećernu vunu STR_CARGO_SINGULAR_BUBBLE :Balon STR_CARGO_SINGULAR_BUBBLE.gen :balona STR_CARGO_SINGULAR_BUBBLE.aku :balon @@ -329,8 +329,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Odaberi STR_TOOLTIP_SORT_CRITERIA :{BLACK}Odaberi kriterij za sortiranje STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Odaberi kriterij filtriranja STR_BUTTON_SORT_BY :{BLACK}Sortiraj prema -STR_BUTTON_LOCATION :{BLACK}Lokacija -STR_BUTTON_RENAME :{BLACK}Preimenuj STR_BUTTON_CATCHMENT :{BLACK}Područje pokrivanja STR_TOOLTIP_CATCHMENT :{BLACK}Uključi prikaz područja pokrivanja @@ -411,6 +409,8 @@ STR_SORT_BY_RANGE :Domet STR_SORT_BY_POPULATION :Stanovništvo STR_SORT_BY_RATING :Rejting +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Zaustavi igru STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Premotaj igru naprijed @@ -498,7 +498,7 @@ STR_FILE_MENU_EXIT :Izlaz # map menu STR_MAP_MENU_MAP_OF_WORLD :Karta svijeta -STR_MAP_MENU_EXTRA_VIEW_PORT :Dodatni pogled +STR_MAP_MENU_EXTRA_VIEWPORT :Dodatni pogled STR_MAP_MENU_LINGRAPH_LEGEND :Legenda protoka tereta STR_MAP_MENU_SIGN_LIST :Popis znakova @@ -664,8 +664,8 @@ STR_MONTH_DEC :Prosinac # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Ključ STR_GRAPH_KEY_TOOLTIP :{BLACK}Pokaži ključeve na grafikonima -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -980,7 +980,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Lokalna vlast {TOWN} potpisuje ugovor sa {STRING} za jednogodišnja ekskluzivna prava transporta! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Mini pogled {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Mini pogled {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Promijeni pogled STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopiraj lokaciju globalnog pogleda u ovaj mini pogled STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Promijeni glavni pogled @@ -1031,10 +1031,9 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksički Pesos STR_GAME_OPTIONS_CURRENCY_NTD :Novi Tajvanski Dolar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Kineski Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hongkonški Dolar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indijska Rupija (INR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Cestovna vozila -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Odaberi na kojoj će strani ceste vozila prometovati STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Vozi na lijevoj strani STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Vozi na desnoj strani @@ -1086,6 +1085,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Razluči STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Odaberi razlučivost zaslona STR_GAME_OPTIONS_RESOLUTION_OTHER :ostalo + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Veličina sučelja STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Odaberite koju ćete veličinu elementa sučelja koristiti @@ -1100,6 +1101,8 @@ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normalno STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dvostruka veličina STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Četvorostruka veličina + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Osnovni set grafike STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Odaberi osnovni grafički set za igru STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} datotek{P a e a} nedostaj{P e u e}/korumpiran{P a e o} @@ -1275,8 +1278,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Uključivanje n STR_CONFIG_SETTING_CITY_APPROVAL :Stav gradske uprave prema restrukturiranju područja: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Odaberi koliko buka i ekološka šteta utječu na gradsku ocjenu pojedine tvrtke i na daljnja građevinska djelovanja u njihovim područjima -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Najveća visina karte: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Postavi najveću dopuštenu visinu planina na karti STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Nije moguće postaviti najveću visinu karte na ovu vrijednost. Barem jedna planina na karti je viša. STR_CONFIG_SETTING_AUTOSLOPE :Dopusti uređivanje krajolika ispod građevina, tračnica, itd.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Dopusti uređivanje krajolika ispod građevina i pruga bez njihovog uklanjanja @@ -1648,8 +1649,6 @@ STR_CONFIG_SETTING_ENDING_YEAR :Godina kraja bo STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Godina koje igra završava u smislu bodovanja. Na kraju ove godine, bilježe se bodovi kompanije i prikazuje se tablica najviših bodova ali igrači mogu nastaviti igru.{}Ako je ovo prije početne godine, tablica najviših bodova se nikada neće prikazati. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikada -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Uključi stabilno gospodarstvo (više manjih izazova): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Kada je uključeno, promjene u industrijskoj proizvodnji su češće ali u manjim rasponima. Ova postavka obično nema efekta ukoliko su industrije postavljene iz nekog NewGRF-a STR_CONFIG_SETTING_ALLOW_SHARES :Dopusti kupovanje udjela u drugim tvrtkama: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kada je uključeno, dopušta se kupnja i prodaja dionica tvrtki. Dionice će postati dostupne samo za tvrtke određene starosti STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Najmanja starost tvrtke za trgovanje udjelima: {STRING} @@ -1701,9 +1700,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linearno STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Smještaj drveća u igri: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroliraj nasumično pojavljivanje stabala tijekom igre. Ovo može utjecati na industrije koje ovise o rastu stabala, npr. pilane -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nigdje {RED}(uništava pilanu) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Samo u kišnim šumama -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Posvuda STR_CONFIG_SETTING_TOOLBAR_POS :Položaj glavne alatne trake: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Vodoravna pozicija glavne alatne trake na vrhu zaslona @@ -1859,6 +1855,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... zaob STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Nedostaje memorije STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Dodjeljivanje {BYTES} predmemorije spriteova nije uspjelo. Predmemorija spriteova je smanjena na {BYTES}. Ovo će smanjiti performanse OpenTTD-a. Za smanjivanje potreba memorije you možete pokušati isključiti 32bpp grafiku i/ili razine zumiranja. +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1902,18 +1900,9 @@ STR_INTRO_TRANSLATION :{BLACK}Ovom pri # Quit window STR_QUIT_CAPTION :{WHITE}Izlaz -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Jesi li siguran da želiš napustiti OpenTTD i vratiti se u {STRING}e? STR_QUIT_YES :{BLACK}Da STR_QUIT_NO :{BLACK}Ne -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Napusti igru STR_ABANDON_GAME_QUERY :{YELLOW}Doista želiš napustiti ovu igru? @@ -1922,7 +1911,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Doista # Cheat window STR_CHEATS :{WHITE}Varanje STR_CHEATS_TOOLTIP :{BLACK}Kvačice ukazuju na to jesi li koristio ovo varanje prije -STR_CHEATS_WARNING :{BLACK}Upozorenje! Upravo se spremaš izdati svoj kolege natjecatelje. Imaj na umu da se takva sramota pamti zauvijek STR_CHEAT_MONEY :{LTBLUE}Povećaj novce za iznos {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Igraj kao tvrtka: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magični buldožer (uklanja industrije, nepokretne objekte): {ORANGE}{STRING} @@ -2034,10 +2022,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Promijen # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Više igrača -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Sa oglasima -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Odaberi između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Da STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igrača: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Ovo je ime po kojem će te drugi igrači raspoznavati @@ -2078,8 +2062,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Pridruž STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Osvježi poslužitelj STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Osvježi podatke o poslužitelju -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Pronađi poslužitelj -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Pronađi poslužitelje u mreži STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Dodaj poslužitelj STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Dodaje poslužitelj na popis koji će uvijek biti provjeren postoje li igre u tijeku. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Pokreni poslužitelj @@ -2096,6 +2078,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Ime igre STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Postavi zaporku STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zaštiti svoju igru pomoću zaporke ukoliko ne želiš da bude javno dostupna +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sa oglasima +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Odaberi između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Ne STR_NETWORK_START_SERVER_ADVERTISED :Da STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klijen{P t ta ata} @@ -2209,7 +2193,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova tvrtka # Network client list STR_NETWORK_CLIENTLIST_KICK :Izbaci STR_NETWORK_CLIENTLIST_BAN :Zabrana -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Daj novac STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Razgovaraj sa svima STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Razgovaraj s tvrtkom STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privatna poruka @@ -2218,8 +2201,6 @@ STR_NETWORK_SERVER :Poslužitelj STR_NETWORK_CLIENT :Klijent STR_NETWORK_SPECTATORS :Promatrači -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Unesite iznos novca koji želite dati - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Nemoj spremiti upisanu zaporku STR_COMPANY_PASSWORD_OK :{BLACK}Daj tvrtci novu zaporku @@ -2320,8 +2301,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} se STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} je osnovao novu tvrtku (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} je izašao iz igre ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} je promijenio/la ime u {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} je dao vašoj tvrtki {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Dao si {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Poslužitelj je zatvorio sesiju STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Poslužitelj se ponovno pokreće...{}Molimo pričekajte... STR_NETWORK_MESSAGE_KICKED :*** {STRING} je izbačen. Razlog: ({STRING}) @@ -2399,6 +2378,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Da, preuzmi grafike STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Ne, izađi iz OpenTTD-a + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Postavke prozirnosti STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Namjesti prozirnost za znakove. Ctrl+klik za zaključavanje @@ -2440,6 +2420,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Izgradi STR_JOIN_WAYPOINT_CAPTION :{WHITE}Spoji čvorište STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Izgradi zasebno čvorište +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Izgradnja željeznice STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Izgradnja elektrificirane željeznice @@ -2627,7 +2609,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Veličin STR_OBJECT_CLASS_LTHS :Svjetionici STR_OBJECT_CLASS_TRNS :Odašiljači -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Drveće STR_PLANT_TREE_TOOLTIP :{BLACK}Odaberi vrstu drveta za sadnju. Ako polje već ima drvo, ovo će dodati još drveća raznih vrsta neovisno o odabranoj vrsti STR_TREES_RANDOM_TYPE :{BLACK}Raznovrsno drveće @@ -2930,14 +2912,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Broj gradova: STR_MAPGEN_DATE :{BLACK}Datum: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Broj industrija: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Najveća visina karte: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Povećaj za jedan najveću visinu planina na karti -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Smanji za jedan najveću visinu planina na karti -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Visina linije snijega -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Pomakni visinu linije snijega za jedan gore -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Pomakni visinu linije snijega za jedan dolje STR_MAPGEN_LAND_GENERATOR :{BLACK}Izrađivač zemljišta: -STR_MAPGEN_TREE_PLACER :{BLACK} Algoritam za drveće: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Vrsta terena: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Razina mora: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rijeke: @@ -2962,8 +2937,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Ime visi STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Veličina: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Promijeni najveću visinu karte -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Promijeni visinu linije snijega STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Promijeni početnu godinu # SE Map generation @@ -3253,13 +3226,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Podmiti STR_GOALS_CAPTION :{WHITE}{COMPANY} Ciljevi STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globalni ciljevi STR_GOALS_SPECTATOR :Globalni ciljevi -STR_GOALS_GLOBAL_TITLE :{BLACK}Globalni ciljevi: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nijedan - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Nije primjenjivo - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Ciljevi tvrtke: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikni na cilj za centriranje središnjeg pogleda na industriju/grad/polje. Ctrl+Klik otvara novi prozor s pogledom na lokaciju industrije/grada/polja # Goal question window @@ -3833,10 +3803,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Automats # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centriranje glavnog prozora na lokaciju vlaka. Ctrl+klik slijedi vlak u glavni prozor -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centriranje glavnog prozora na lokaciju vozila. Ctrl+klik slijedi vozilo u glavni prozor -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centriranje glavnog prozora na lokaciju broda. Ctrl+klik slijedi brod u glavni prozor -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centriranje glavnog prozora na lokaciju zrakoplova. Ctrl+klik slijedi zrakoplov u glavni prozor STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Pošalji vlak u spremište. CTRL+klik će samo servisirati STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Pošalji vozilo u spremište. Ctrl+klik će samo servisirati @@ -3868,10 +3834,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Pokaži STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Pokaži detalje broda STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Pokaži detalje zrakoplova -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Trenutna radnja vlaka - pritisni za zaustavljanje/pokretanje vlaka. Ctrl+klik za odlazak do odredišta. -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Trenutna radnja vozila - pritisni za zaustavljanje/pokretanje vozila. Ctlr+klik za odlazak do odredišta. -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Trenutna radnja broda - pritisni za zaustavljanje/pokretanje broda. Ctrl+klik za odlazak do odredišta. -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Trenutna radnja zrakoplova - pritisni za zaustavljanje/pokretanje zrakoplova. Ctrl+klik za odlazak do odredišta. + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Ukrcaj / Iskrcaj diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 959b340a1e..eefb64a7ea 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -102,17 +102,17 @@ STR_CARGO_PLURAL_SUGAR.big :Cukr STR_CARGO_PLURAL_TOYS :hračky STR_CARGO_PLURAL_TOYS.gen :hraček STR_CARGO_PLURAL_TOYS.big :Hračky -STR_CARGO_PLURAL_CANDY :bonbony -STR_CARGO_PLURAL_CANDY.gen :bonbonů -STR_CARGO_PLURAL_CANDY.big :Bonbony +STR_CARGO_PLURAL_SWEETS :bonbony +STR_CARGO_PLURAL_SWEETS.gen :bonbonů +STR_CARGO_PLURAL_SWEETS.big :Bonbony STR_CARGO_PLURAL_COLA :kola STR_CARGO_PLURAL_COLA.gen :koly STR_CARGO_PLURAL_COLA.acc :kolu STR_CARGO_PLURAL_COLA.big :Kola -STR_CARGO_PLURAL_COTTON_CANDY :cukrová vata -STR_CARGO_PLURAL_COTTON_CANDY.gen :cukrové vaty -STR_CARGO_PLURAL_COTTON_CANDY.acc :cukrovou vatu -STR_CARGO_PLURAL_COTTON_CANDY.big :Cukrová vata +STR_CARGO_PLURAL_CANDYFLOSS :cukrová vata +STR_CARGO_PLURAL_CANDYFLOSS.gen :cukrové vaty +STR_CARGO_PLURAL_CANDYFLOSS.acc :cukrovou vatu +STR_CARGO_PLURAL_CANDYFLOSS.big :Cukrová vata STR_CARGO_PLURAL_BUBBLES :bubliny STR_CARGO_PLURAL_BUBBLES.gen :bublin STR_CARGO_PLURAL_BUBBLES.big :Bubliny @@ -157,9 +157,9 @@ STR_CARGO_SINGULAR_WHEAT :pšenice STR_CARGO_SINGULAR_RUBBER :kaučuku STR_CARGO_SINGULAR_SUGAR :cukru STR_CARGO_SINGULAR_TOY :hraček -STR_CARGO_SINGULAR_CANDY :bonbonů +STR_CARGO_SINGULAR_SWEETS :bonbonů STR_CARGO_SINGULAR_COLA :koly -STR_CARGO_SINGULAR_COTTON_CANDY :cukrové vaty +STR_CARGO_SINGULAR_CANDYFLOSS :cukrové vaty STR_CARGO_SINGULAR_BUBBLE :bublin STR_CARGO_SINGULAR_TOFFEE :karamelu STR_CARGO_SINGULAR_BATTERY :baterií @@ -269,6 +269,7 @@ STR_COLOUR_DEFAULT :Výchozí STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}m{P íle íle il}/h STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}políčka/den STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp @@ -308,8 +309,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Vyber zp STR_TOOLTIP_SORT_CRITERIA :{BLACK}Vyber, podle čeho se má třídit STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Vyber třídící podmínku STR_BUTTON_SORT_BY :{BLACK}Řadit podle -STR_BUTTON_LOCATION :{BLACK}Umístění -STR_BUTTON_RENAME :{BLACK}Přejmenovat STR_BUTTON_CATCHMENT :{BLACK}Pokrytí STR_TOOLTIP_CATCHMENT :{BLACK}Zapnout/vypnout zvýrazňování oblasti pokrytí @@ -362,7 +361,7 @@ STR_SORT_BY_PRODUCTION :produkce STR_SORT_BY_TYPE :typu STR_SORT_BY_TRANSPORTED :přepravy STR_SORT_BY_NUMBER :čísla -STR_SORT_BY_PROFIT_LAST_YEAR :hrubého zisku minulý rok +STR_SORT_BY_PROFIT_LAST_YEAR :hrubého zisku loňský rok STR_SORT_BY_PROFIT_THIS_YEAR :hrubého zisku za tento rok STR_SORT_BY_AGE :stáří STR_SORT_BY_RELIABILITY :spolehlivosti @@ -389,6 +388,15 @@ STR_SORT_BY_CARGO_CAPACITY :přepravní kap STR_SORT_BY_RANGE :dosah STR_SORT_BY_POPULATION :Podle populace STR_SORT_BY_RATING :Hodnocení +STR_SORT_BY_NUM_VEHICLES :Počet vozidel +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Letošní celkový zisk +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Celkový letošní zisk +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Loňský průměrný zisk +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Průměrný letošní zisk + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Neseskupovat +STR_GROUP_BY_SHARED_ORDERS :Sdílené příkazy # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauza @@ -477,7 +485,7 @@ STR_FILE_MENU_EXIT :Ukončit progra # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa světa -STR_MAP_MENU_EXTRA_VIEW_PORT :Další pohled +STR_MAP_MENU_EXTRA_VIEWPORT :Další pohled STR_MAP_MENU_LINGRAPH_LEGEND :Legenda toku nákladu STR_MAP_MENU_SIGN_LIST :Seznam popisků @@ -655,8 +663,8 @@ STR_MONTH_DEC.gen :prosince # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Legenda STR_GRAPH_KEY_TOOLTIP :{BLACK}Zobrazit legendu ke grafům -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -826,6 +834,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Hrbolatá zem STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Travnatá zem STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Holá zem +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Deštný prales STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Pole STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Stromy STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Kameny @@ -857,6 +866,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Zobraz v STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Ukázat poslední zprávu nebo článek STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * PAUZA * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * POZASTAVENO (čekám na aktualizaci grafu spojení) * * STR_STATUSBAR_AUTOSAVE :{RED}Automatické ukládání STR_STATUSBAR_SAVING_GAME :{RED}* * HRA SE UKLÁDÁ * * @@ -951,6 +961,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G ý á é í é é á} {STRING} k dispozici! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Otevřít okno skupin s předvybranou skupinou daného vozidla STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} už dále nepřijímá {STRING.acc} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} už dále nepřijímá {STRING.acc} ani {STRING.acc} @@ -970,7 +981,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Místní správa města {TOWN} podepsala dohodu s {STRING} na jeden rok exkluzivní dopravy! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Pohled {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Pohled {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Nastavit jako pohled STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Nastavit současné zorné pole jako pohled STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Změnit hlavní pohled @@ -1021,10 +1032,11 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexické peso ( STR_GAME_OPTIONS_CURRENCY_NTD :Nový taiwanský dolar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Čínský renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hongkongský dolar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indická rupie (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Indonéská rupie (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Malajsijský Ringgit (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Silniční vozidla jezdí -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Výběr strany, na které jezdí silnični vozidla STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Vlevo STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Vpravo @@ -1075,10 +1087,17 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Zaškrtn STR_GAME_OPTIONS_RESOLUTION :{BLACK}Rozlišení obrazovky STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Zvolit rozlišení obrazovky STR_GAME_OPTIONS_RESOLUTION_OTHER :jiné +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardwarová akcelerace +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Zaškrtni, pokud chceš OpenTTD povolit použití hardwarové akcelerace. Změněné nastavení bude aplikováno po restartu hry +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Nastavení vstoupí v platnost pouze po restartu hry + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Velikost rozhraní STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Zvolit velikost prvků uživatelského rozhraní +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(zjistit automaticky) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normální STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvojnásobná velikost STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Čtyřnásobná velikost @@ -1086,10 +1105,19 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Čtyřnásobná STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Velikost písma STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Zvolit velikost písma +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(zjistit automaticky) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Běžné STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dvojnásobná velikost STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Čtyřnásobná velikost +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafiky + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Obnovovací frekvence obrazovky +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Zvolit obnovovací frekvenci obrazovky +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :ostatní +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Obnovovací frekvence vyšší než 60Hz může mít dopad výkon. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Základní sada grafiky STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zvol základní sadu grafiky STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} chybějící{P "" "" ch}/poškozen{P ý é ých} soubor{P "" y ů} @@ -1184,6 +1212,8 @@ STR_TERRAIN_TYPE_FLAT :plochá STR_TERRAIN_TYPE_HILLY :kopcovitá STR_TERRAIN_TYPE_MOUNTAINOUS :hornatá STR_TERRAIN_TYPE_ALPINIST :Alpské +STR_TERRAIN_TYPE_CUSTOM :Vlastní výška +STR_TERRAIN_TYPE_CUSTOM_VALUE :Vlastní výška ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :nezaujatý STR_CITY_APPROVAL_TOLERANT :tolerantní @@ -1265,9 +1295,11 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Katastrofy, kte STR_CONFIG_SETTING_CITY_APPROVAL :Postoj městské rady k úpravám v oblasti: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Vyber jak moc hluku a změn prostředí poškozuje hodnocení společnosti u města a tak dále komplikuje budoucí stavbu na jeho území -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximální výška mapy: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Nastavit maximální povolenou výšku hor na mapě -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Nemůžete změnit maximální výšku mapy na tuto hodnotu. Alespoň jedna hora na mapě je vyšší. +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Maximální výška mapy: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Nastav maximální výšku terénu. S volbou "(automaticky)" bude po vygenerování terénu vybrána dobrá hodnota. +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(automaticky) +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Nelze změnit maximální výšku mapy na tuto hodnotu. Alespoň jedna hora na mapě je vyšší. STR_CONFIG_SETTING_AUTOSLOPE :Povolit srovnání terénu pod budovami, kolejemi atd. (autoslope): {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Povoluje změnu terénu pod budovami a tratěmi bez jejich odstranění STR_CONFIG_SETTING_CATCHMENT :Povolit u oblasti pokrytí realističtější velikost: {STRING} @@ -1411,7 +1443,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Nastavuje množ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximální vzdálenost ropného průmyslu od okraje mapy: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Omezení, jak daleko od okrajů mapy mohou být postaveny rafinerie a ropné vrty. Je-li při okraji mapy voda, toto omezení zajišťuje, že se rafinerie a ropné vrty vyskytují poblíž pobřeží. Na mapách větších než 256 polí je toto omezení úměrně přizpůsobeno. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Výška sněhové čáry: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Určuje o jaké výšky se vyskytuje sníh u subarktického klimatu. Sníh rovněž ovlivňuje vytváření průmyslu a požadavky na růst měst +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Určuje od jaké výšky se sníh vyskytuje v subarktickém klimatu. Sníh ovlivňuje vytváření průmyslu a požadavky na růst měst. Sněžná čára může být upravena jen v editoru scénáře. V ostatních případech bývá počítána pomocí "pokrytí sněhem" +STR_CONFIG_SETTING_SNOW_COVERAGE :Pokrytí sněhem: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Určuje přibližné množství sněhu v subarktické krajině. Sníh rovněž ovlivňuje generování průmyslu a požadavky na růst měst. Použito pouze při generování mapy. Terén těsně nad úrovní výšky moře zůstane bez sněhu. +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Pokrytí pouštěmi: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Určuje přibližné množství pouště v tropické krajině. Pouště rovněž ovlivňují generování průmyslu. Použito pouze při generování mapy. +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Členitost krajiny: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Pouze TerraGenesis) Zvol množství hor: Rovinatý terén má méně hor, které jsou však rozlehlejší. Členitý terén má mnoho hor, u kterých se může zdát, že se opakují STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :velmi rovná @@ -1525,6 +1563,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Nevypínat po p STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Nechat nástroje pro stavbu mostů, tunelů, atd. po použití otevřené STR_CONFIG_SETTING_EXPENSES_LAYOUT :Zobrazovat odděleně příjmy a výdaje v přehledu financí: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Určuje rozložení okna s firemními výdaji +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automaticky odstraňovat návěstidla během výstavby železnice: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automaticky odstraňovat návěstidla, pokud překáží během výstavby železnice. Poznámka: Může způsobit kolize vlaků. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Rychlostní omezení zrychleného běhu hry: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Omez jak rychle hra beží při zrychleném běhu. 0 = neomezeno (tak rychle, jak tvůj počítač dovolí). Hodnoty pod 100% zpomalí hru. Horní limit záleží na specifikacích tvého počítače a může se v každé hře lišit. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normální rychlosti hry +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Bez omezení (tak rychle, jak jen tvůj počítač dovolí) STR_CONFIG_SETTING_SOUND_TICKER :Noviny - shrnutí: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Přehrávat zvuk při zobrazení shrnutí zprávy @@ -1638,8 +1682,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Rok vyhodnocen STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Rok, kdy je ve hře uzavřeno hodnocení společností. Na konci tohoto roku je zaznamenáno skóre společností a je zobrazena tabulka nejlepších společností, ale ve hře je možné pokračovat i dál.{}Pokud je nastaven rok před rokem počátku hry, tabulka s hodnocením nebude zobrazena nikdy. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nikdy -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Plynulé změny ekonomiky (více menších změn): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Pokud je zapnuto, produkce průmyslu se mění častěji ale změny jsou menší. Toto nastavení většinou nemá vliv na průmysl, který je přidaný novou grafikou +STR_CONFIG_SETTING_ECONOMY_TYPE :Druh ekonomiky: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Plynulá ekonomika dělá změny produkce častěji, ale v menších krocích. Zmražená ekonomika zastaví změny v produkci a zavírání průmyslu. Toto nastavení nemusí mít vliv na typy průmyslu vycházející z "NewGRF". +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Původní +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Plynulá +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Zmražená STR_CONFIG_SETTING_ALLOW_SHARES :Povolit kupování podílu z ostatních společností: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Pokud je zapnuto, umožní kupovaní akcií ve společnostech. Akcie jsou k dispozici pouze u společností od určitého stáří STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimální stáří společnosti pro obchod s akciemi: {STRING} @@ -1691,9 +1738,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineární STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Umístění stromů ve hře: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Náhodné umisťování stromů během hry. Může ovlivnit průmysl závisející na růstu stromů, například pily. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Žádné {RED}(nefunguje pila) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Jen v deštných pralesech -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Všude +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Růst, ale nerozšiřovat{RED}(rozbije pilu) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Růst, ale rozšiřovat pouze v deštných pralesech +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Růst a rozšiřovat všude +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Nerůst, nerozšiřovat {RED}(rozbije pilu) STR_CONFIG_SETTING_TOOLBAR_POS :Umístění hlavní lišty: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontální pozice hlavního panelu v horní části obrazovky @@ -1711,12 +1759,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :Maximální úr STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Maximální přiblížení pohledu. Nastavení většího přiblížení má větší nároky na paměť počítače STR_CONFIG_SETTING_ZOOM_MAX :Maximální úroveň oddálení: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Maximální oddálení pohledu. Příliš velké nastavení může způsobovat velké odezvy +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Nejvyšší dovolené rozlišení spritů: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Omezit maximální dovolené rozlišení spritů. Omezení rozlišení spritů zabrání použití grafik ve vysokém rozlišení, jsou-li dostupné. Tímto lze docílit jednotného vzhledu hry, pokud je použit mix GRF souborů s grafikami ve vysokém rozlišení, i bez nich. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normální STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Rychlost růstu měst: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Rychlost růstu měst STR_CONFIG_SETTING_TOWN_GROWTH_NONE :nulová @@ -1760,6 +1813,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kdykoliv se ryc STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiální (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrické (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Herní jednotky (políčko/den) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Jednotky výkonu vozidla: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Kdykoliv se výkon vozidla zobrazí v uživatelském rozhraní, bude ve zvolených jednotkách @@ -1849,6 +1903,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Nedostatek paměti STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Alokování {BYTES} grafické mezipaměti selhalo. Grafická mezipaměť byla zredukována na {BYTES}. To sníží výkon OpenTTD. Pro snížení paměťových nároků můžeš zkusit vypnout 32bpp grafiku a/nebo úrovně přiblížení +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}Chyba v nastavení zobrazení... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nebyla nalezené kompatibilní grafická karta. Hardwarová akcelerace zakázana + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1892,18 +1950,10 @@ STR_INTRO_TRANSLATION :{BLACK}Tento p # Quit window STR_QUIT_CAPTION :{WHITE}Konec -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Opravdu chceš opustit tuto hru a odejít do {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Opravdu chceš ukončit OpenTTD? STR_QUIT_YES :{BLACK}Ano STR_QUIT_NO :{BLACK}Ne -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unixu -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Konec hry STR_ABANDON_GAME_QUERY :{YELLOW}Opravdu chceš ukončit tuto hru? @@ -1912,7 +1962,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Určite # Cheat window STR_CHEATS :{WHITE}Cheaty STR_CHEATS_TOOLTIP :{BLACK}Zaškrtávací políčka ukazují, jestli jsi tento cheat už použil -STR_CHEATS_WARNING :{BLACK}Varování! Chystáš se podvést ostatní hráče. Pamatuj si, že tento podlý čin nebude nikdy zapomenut! +STR_CHEATS_NOTE :{BLACK}Poznámka: jakékoliv použití těchto nastavení bude zaznamenáno v uložené hře STR_CHEAT_MONEY :{LTBLUE}Navýšit peníze o {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Hrát jako společnost: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magický buldozer (odstraní průmysl a další objekty): {ORANGE}{STRING} @@ -2024,10 +2074,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Změnit # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Vypsané -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Vyber mezi propagovanou (internet) a nepropagovanou (Místní síť, LAN) hrou -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ne -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ano STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Jméno hráče: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Podle tohoto jména tě ostatní hráči poznají @@ -2068,8 +2114,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Přidat STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Obnovit info STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Znovu načte informace o serveru -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Najít server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Hledat server v síti +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Prohledat internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Hledat veřejné servery v internetu +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Prohledat místní siť +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Hledat servery v místní síti STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Přidat server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Přidá server do seznamu, ve kterém se budou hledat běžící hry STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Spustit server @@ -2086,6 +2134,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Jméno h STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nastavit heslo STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Svoji hru si můžeš ochránit heslem, když nechceš, aby se ti do ni hlásili jiní lidé +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Vypsané +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vyber mezi propagovanou (internet) a nepropagovanou (Místní síť, LAN) hrou STR_NETWORK_START_SERVER_UNADVERTISED :Ne STR_NETWORK_START_SERVER_ADVERTISED :Ano STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i ů} @@ -2199,7 +2249,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nová společno # Network client list STR_NETWORK_CLIENTLIST_KICK :Vyhodit STR_NETWORK_CLIENTLIST_BAN :Ban -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Darovat peníze STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Napsat všem STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Napsat společnosti STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Soukromá zpráva @@ -2208,8 +2257,6 @@ STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Pozorovatelé -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Napiš částku, kterou chceš poskytnout - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Neukládat zadané heslo STR_COMPANY_PASSWORD_OK :{BLACK}Změnit heslo společnosti @@ -2296,11 +2343,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Hra stále poza STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Hra stále pozastavena ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Hra stále pozastavena ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Hra je stále pozastavena ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Hra je stále pozastavena ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Hra obnovena ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :nedostatek hráčů STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :připojují se klienti STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :ručně STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :herní skript +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :čekám na aktualizaci grafu spojení ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :odpojování STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} se připojil do hry @@ -2310,8 +2359,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} se STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} zakládá novou společnost (č. {2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} opouští hru ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} si mění jméno na {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} poslal(a) tvé společnosti {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Dal(a) jsi {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} poslal(a) {2:CURRENCY_LONG} společnosti {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server ukončil relaci STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server se restartuje...{}Počkejte prosím... STR_NETWORK_MESSAGE_KICKED :*** {STRING} byl vyhozen. Důvod: ({STRING}) @@ -2385,10 +2433,14 @@ STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... do s STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Nešlo rozbalit stažený soubor STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Chybějící grafika -STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD vyžaduje grafiky, které nebyly nalezeny. Povolíte OpenTTD stáhnout a nainstalovat tyto grafiky? +STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD vyžaduje grafiky, které nebyly nalezeny. Povolíš OpenTTD stáhnout a nainstalovat tyto grafiky? STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ano, stáhnout grafiky STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Ne, ukončit OpenTTD +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Stahování selhalo +STR_MISSING_GRAPHICS_ERROR :{BLACK}Stahování grafik selhalo.{}Stáhněte, prosím, grafiky ručně. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Opustit OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Nastavení průhlednosti STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Změna průhlednosti popisků. Nastavení se zamkne Ctrl+kliknutím @@ -2430,6 +2482,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Postavi STR_JOIN_WAYPOINT_CAPTION :{WHITE}Spojování směrování STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Postavit samostatné směrování +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Zakázáno, protože pro tento typ infrastruktury aktuálně nejsou dostupná žádná vozidla + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Výstavba železnice STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Výstavba elektrifikované železnice @@ -2617,13 +2672,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Velikost STR_OBJECT_CLASS_LTHS :Majáky STR_OBJECT_CLASS_TRNS :Vysílače -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Stromy STR_PLANT_TREE_TOOLTIP :{BLACK}Zvol druh stromu na vysazení. Pokud se na políčku už nějaký strom nachází, přidá se k němu několik různých druhů bez ohledu na výběr druhu STR_TREES_RANDOM_TYPE :{BLACK}Různé stromy STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umístit nahodné stromy. Stisknutý Shift pro zobrazení odhadu ceny STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Náhodné stromy STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Umístit stromy náhodně po krajině +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normální +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Vysadit jednotlivé stromy tažením přes krajinu. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Háj +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Vysadit malé lesy tažením přes krajinu +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Les +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Vysadit velké lesy tažením přes krajinu # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generovat zemi @@ -2674,12 +2735,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Náhodn # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Investovat do průmyslu STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Vyber si vhodnou továrnu ze seznamu -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Hodně náhodného průmyslu +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Vytvořit náhodný průmysl STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Pokryje krajinu náhodným průmyslem +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Vytvořit náhodný průmysl +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Opravdu chceš vytvořit tolik náhodného průmyslu? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Cena: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Hledat STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Postavit STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Financovat +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Odstranit veškerý průmysl +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Odstranit veškerý aktuálně přítomný průmysl +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Odstranit veškerý průmysl +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Opravdu chceš odstranit veškerý průmysl? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Průmyslový řetěz pro průmysl {STRING} @@ -2706,6 +2773,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Vyber pr # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informace o uzemí +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na políčko. Ctrl+Klik otevře nové okno náhledu STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Cena za vyčištění: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Cena za vyčištění: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Příjem za odklizení: {LTBLUE}{CURRENCY_LONG} @@ -2915,6 +2983,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}Grafiky STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtr: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Přepsat soubor STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Opravdu chcete přepsat existující soubor? +STR_SAVELOAD_DIRECTORY :{STRING} (Adresář) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (rodičovský adresář) STR_SAVELOAD_OSKTITLE :{BLACK}Zadej jméno pro uloženou hru @@ -2926,14 +2996,18 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Množství měst: STR_MAPGEN_DATE :{BLACK}Datum: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Množství průmyslu: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximální výška mapy: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Zvýšit maximální výšku hor na mapě o jeden stupeň -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Snížit maximální výšku hor na mapě o jeden stupeň -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Výška sněžné čáry: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Zvýšit sněžnou čáru o jednu úroveň -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Snížit sněžnou čáru o jednu úroveň +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Nejvyšší vrchol: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Zvýšit maximální možnou výšku nejvyššího vrcholu na mapě o jednu úroveň +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Snížit maximální možnou výšku nejvyššího vrcholu na mapě o jednu úroveň +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Pokrytí sněhem: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Zvýšit pokrytí sněhem o deset procent +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Snížit pokrytí sněhem o deset procent +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Pokrytí pouštěmi: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Zvětšit pokrytí pouštěmi o deset procent +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Zmenšit pokrytí pouštěmi o deset procent +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Generátor krajiny: -STR_MAPGEN_TREE_PLACER :{BLACK}Sázení stromů: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Typ krajiny: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Četnost jezer: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Řeky: @@ -2958,8 +3032,10 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Jméno v STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Velikost: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Změnit maximální výšku mapy -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Změnit výšku sněžne čáry +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Cílová výška vrcholu +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Nejvyšší vrchol +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Pokrytí sněhem (v %) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Pokrytí pouštěmi (v %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Změnit počáteční rok # SE Map generation @@ -3119,6 +3195,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Požadované zd STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} byla vypnuta {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Neplatný/neznámý sprite layout formát (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Příliš mnoho prvků v seznamu hodnot vlastností (sprite {3:NUM}, vlastnost {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Neplatné zpětné volání průmyslové produkce (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varování! @@ -3150,6 +3227,7 @@ STR_NEWGRF_BUGGY :{WHITE}Grafika STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informace o nákladu/možnosti přestavby pro '{1:ENGINE}' se po nákupu změnily. To může způsobit problémy při automatické výměně vozidel STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}Grafika '{1:STRING}' způsobila nekonečnou smyčku v callbacku produkce průmyslu STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Funkce {1:HEX} vrátila neznámý / neplatný výsledek {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' vrátil neplatný typ nákladu ve zpětném volání produkce na {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3174,6 +3252,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Přepne # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Upravit text popisku +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na značku. Ctrl+Klik otevře nový pohled STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Na další návěstidlo STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Na předešlé návěstidlo @@ -3234,33 +3313,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Dotovat nové b STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Koupit výhradní právo k přepravě STR_LOCAL_AUTHORITY_ACTION_BRIBE :Podplatit místní správu -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Zahájit malou reklamní kampaň, která přiláká více cestujících a nákladu.{}Cena: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Zahájit středně velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Cena: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Zahájit velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Cena: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Dotovat rekonstrukci místní silniční sítě. Způsobí problémy v dopravě po dobu 6 měsíců.{}Cena: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Postavit sochu vlastníka jako poctu tvé společnosti.{}Cena: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Dotovat stavbu nových obchodních budov ve městě.{}Cena: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Koupit roční výhradní práva k přepravě zboží z tohoto města po dobu jednoho roku. Místní správa dovolí cestujícím a nákladu používat pouze stanice tvé společnosti.{}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Zahájit malou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy v blízkém okolí městského centra.{}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Zahájit středně velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy ve středně širokém okolí městského centra.{}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Zahájit velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy v širokém okolí městského centra.{}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Dotovat rekonstrukci sítě místních ulic.{}Způsobí problémy v dopravě po dobu až 6ti měsíců.{}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Postavit sochu jako poctu tvé společnosti.{}Poskytuje trvalý bonus k hodnocení stanic v tomto městě.{}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Dotovat stavbu nových obchodních budov ve městě.{}Poskytuje dočasné zvýšení rychlosti růstu města.{}Cena: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Koupit 1 roční výhradní přepravní práva z tohoto města. Místní správa nedovolí dovolí cestujícím ani nákladu používat stanice tvých konkurentů.{}Cena: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Podplatit místní správu pro zvýšení hodnocení společnosti. Riziko trestu v případě přistižení.{}Cena: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Cíle STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globální cíle STR_GOALS_SPECTATOR :Globální cíle -STR_GOALS_GLOBAL_TITLE :{BLACK}Globální cíle: +STR_GOALS_GLOBAL_BUTTON :{BLACK}Globální +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Zobrazit globání cíle +STR_GOALS_COMPANY_BUTTON :{BLACK}Společnost +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Zobrazit cíle společnosti STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Žádné - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Nelze - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Cíle společnosti: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikni na cíl pro zaměření pohledu na průmysl/město/pole. Ctrl+Klik otevře nové okno s pohledem na průmyslu/městu/poli. # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Dotaz -STR_GOAL_QUESTION_CAPTION_INFORMATION :Informace -STR_GOAL_QUESTION_CAPTION_WARNING :Varování -STR_GOAL_QUESTION_CAPTION_ERROR :Chyba +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Dotaz +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informace +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Varování +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Chyba ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Zrušit @@ -3385,7 +3465,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Zabráni STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Vystředit pohled na směrování. Ctrl+Klik otevře nový pohled STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Přejmenovat směrování -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Vystředit pohled na bójku. Ctrl+Klik otevře nový pohled +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Vystředit pohled na bójku. Ctrl+Klik otevře nové okno náhledu STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Přejmenovat bójku STR_EDIT_WAYPOINT_NAME :{WHITE}Přejmenovat směrování @@ -3450,6 +3530,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Přesíd STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Sídlo společnosti můžeš vystavit jinde za 1{NBSP}% její hodnoty. Stisknutý Shift pro zobrazení odhadu ceny STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detaily STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Zobrazit detaily a souhrny o infrastruktuře +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Poslat peníze +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Poslat peníze této společnosti STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nový obličej STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Zvol nový obličej prezidenta @@ -3467,6 +3549,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Prodat 2 STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Jméno společnosti STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Jméno prezidenta +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Zadej částku, kterou chceš poslat STR_BUY_COMPANY_MESSAGE :{WHITE}Hledáme společnost, která převezme naši společnost.{}{}Chcete zakoupit {COMPANY} za {CURRENCY_LONG}? @@ -3621,6 +3704,7 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Poháně STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Refitovatelné na: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Všechny druhy nákladu STR_PURCHASE_INFO_NONE :Žádné +STR_PURCHASE_INFO_ENGINES_ONLY :Pouze lokomotivy STR_PURCHASE_INFO_ALL_BUT :Všechny kromě {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. tažná síla: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Dosah: {GOLD}{COMMA} polí @@ -3735,9 +3819,9 @@ STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Vytvoř STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Vytvoří se kopie letadla. Klepni na toto tlačítko a pak na letadlo v nebo vně hangáru. Se stisknutým Ctrl se budou sdílet příkazy. Stisknutý Shift pro zobrazení odhadu ceny STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na vlakové depo. Ctrl+Klik otevře nový pohled -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na garáž. Ctrl+Klik otevře nový pohled -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na lodní depo. Ctrl+Klik otevře nový pohled -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na hangár. Ctrl+Klik otevře nový pohled +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na garáž. Ctrl+Klik otevře nové okno náhledu +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na lodní depo. Ctrl+Klik otevře nové okno náhledu +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na hangár. Ctrl+Klik otevře nové okno náhledu STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Ukázat seznam všech vlaků, které mají toto depo v jízdním řádu STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Ukázat seznam všech silničních vozidel, které mají toto depo v jízdním řádu @@ -3830,10 +3914,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Funkce a # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Vycentrovat pohled na vlak. Ctrl+Klik otevře nový pohled -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vycentrovat pohled na vozidlo. Ctrl+Klik otevře nový pohled -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Vycentrovat pohled na loď. Ctrl+Klik otevře nový pohled -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vycentrovat pohled na letadlo. Ctrl+Klik otevře nový pohled +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Vystředit pohled na vlak. Dvojklikem budeš následovat vlak v hlavním okně. Ctrl+Klik otevře nové okno náhledu +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Vystředit pohled na vozidlo. Dvojklikem budeš následovat vozidlo v hlavním okně. Ctrl+Klik otevře nové okno náhledu +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Vystředit pohled na loď. Dvojklikem budeš loď následovat v hlavním okně. Ctrl+Klik otevře nový pohled +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Vystředit pohled na letadlo. Dvojklikem budeš následovat letadlo v hlavním okně. Ctrl+Klik otevře nové okno náhledu STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Poslat vlak do depa. Ctrl+Klik pouze pro provedení oprav STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Pošli vozidlo do garáže. Ctrl+Klik pouze provede opravy @@ -3865,10 +3949,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Ukaž de STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Ukázat detaily lodi STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Ukázat detaily letadla -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Současná činnost vlaku - když sem klikneš, vlak se zastaví nebo rozjede. Když ještě podržíš Ctrl, pohled se posune na cílovou stanici -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Současná činnost vozidla - klikni sem pro zastavení/rozjetí -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Současná činnost plavidla - pro zastavení či rozjetí, klikni sem -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Činnost letadla - stiskni pro rozjetí/zastavení letadla +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Stávající činnost - klikni pro zastavení/rozjez vlaku +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Stávající činnost - klikni pro zastavení/rozjezd vozidla +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Stávající činnost - klikni pro zastavení/rozjezd lodě +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Stávající činnost - klikni pro zastavení/odlet letadla + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Vystředit pohled na cíl přikazu. Ctrl+Klik otevře nový pohled # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Nakládá nebo vykládá @@ -4096,6 +4182,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Přestavět na STR_ORDER_STOP_ORDER :(Zastavit) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Nemůže použít stanici){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Automaticky) @@ -4340,6 +4427,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Uložená hra j STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Soubor je nečitelný STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Do souboru nelze zapisovat STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Kontrola integrity dat selhala +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Uložená hra byla pořízena v upravené verzi STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Hra byla uložena ve verzi bez podpory tramvají. Všechny tramvaje se odstraní @@ -4367,6 +4455,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Byl nale STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Velký screenshot STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Snímek obrazovky bude mít rozlišení {COMMA} x {COMMA} pixelů. Toto může nějakou chvíli trvat. Chcete pokračovat? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Výšková mapa úspěšně uložena jako '{STRING}'. Nejvyšší vrchol je {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Screenshot úspěšně uložen jako '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Screenshot neuložen! @@ -4420,6 +4509,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... žá STR_ERROR_CURRENCY_REQUIRED :{WHITE}... je potřeba {CURRENCY_LONG} STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Nelze splatit dluh... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Nelze darovat peníze půjčené z banky... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Této společnosti nemůžeš poslat peníze... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Nelze koupit společnost... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nelze postavit ředitelství společnosti... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Nelze koupit podíl v této společnosti... @@ -4546,6 +4636,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Nevhodný druh STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} je po výměně moc dlouhý STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Žádné pravidlo pro výměnu vozidel se nepoužilo STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(finanční limit) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Nové vozidlo nemůže převážet {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Nové vozidlo nemůže být přestavěno (příkaz {NUM}) # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Nemožná kombinace kolejí @@ -4945,10 +5037,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE.small :cukerný důl ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Beze jména -STR_SV_TRAIN_NAME :{G=m}Vlak {COMMA} -STR_SV_ROAD_VEHICLE_NAME :{G=n}Silniční vozidlo {COMMA} -STR_SV_SHIP_NAME :{G=f}Loď {COMMA} -STR_SV_AIRCRAFT_NAME :{G=n}Letadlo {COMMA} +STR_SV_TRAIN_NAME :Vlak #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :{G=n}Silniční vozidlo #{COMMA} +STR_SV_SHIP_NAME :Loď #{COMMA} +STR_SV_AIRCRAFT_NAME :Letadlo #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} sever @@ -5251,6 +5343,7 @@ STR_FORMAT_BUOY_NAME :Bójka {TOWN} STR_FORMAT_BUOY_NAME_SERIAL :Bójka {TOWN} č. {COMMA} STR_FORMAT_COMPANY_NUM :(společnost {COMMA}) STR_FORMAT_GROUP_NAME :Skupina {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_INDUSTRY_NAME.gen :{1:STRING.gen} {0:TOWN} STR_FORMAT_INDUSTRY_NAME.loc :{1:STRING.loc} {0:TOWN} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 92ce8b7294..7f0e804fec 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Hvede STR_CARGO_PLURAL_RUBBER :Gummi STR_CARGO_PLURAL_SUGAR :Sukker STR_CARGO_PLURAL_TOYS :Legetøj -STR_CARGO_PLURAL_CANDY :Slik +STR_CARGO_PLURAL_SWEETS :Slik STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Candyfloss +STR_CARGO_PLURAL_CANDYFLOSS :Candyfloss STR_CARGO_PLURAL_BUBBLES :Bobler STR_CARGO_PLURAL_TOFFEE :Karamel STR_CARGO_PLURAL_BATTERIES :Batterier @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Hvede STR_CARGO_SINGULAR_RUBBER :Gummi STR_CARGO_SINGULAR_SUGAR :Sukker STR_CARGO_SINGULAR_TOY :Legetøj -STR_CARGO_SINGULAR_CANDY :Slik +STR_CARGO_SINGULAR_SWEETS :Slik STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Candyfloss +STR_CARGO_SINGULAR_CANDYFLOSS :Candyfloss STR_CARGO_SINGULAR_BUBBLE :Boble STR_CARGO_SINGULAR_TOFFEE :Karamel STR_CARGO_SINGULAR_BATTERY :Batteri @@ -233,8 +233,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Vælg so STR_TOOLTIP_SORT_CRITERIA :{BLACK}Vælg sorteringskriterie STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Vælg filtreringskriterier STR_BUTTON_SORT_BY :{BLACK}Sortér på -STR_BUTTON_LOCATION :{BLACK}Lokalitet -STR_BUTTON_RENAME :{BLACK}Omdøb STR_BUTTON_CATCHMENT :{BLACK}Dækning STR_TOOLTIP_CATCHMENT :{BLACK}Aktiver visning af dækningsområde @@ -315,6 +313,8 @@ STR_SORT_BY_RANGE :Interval STR_SORT_BY_POPULATION :Indbyggertal STR_SORT_BY_RATING :Værdi +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Sæt spillet på pause STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Kør spillet hurtigere @@ -402,7 +402,7 @@ STR_FILE_MENU_EXIT :Afslut # map menu STR_MAP_MENU_MAP_OF_WORLD :Kort over verden -STR_MAP_MENU_EXTRA_VIEW_PORT :Nyt lokalitetsvindue +STR_MAP_MENU_EXTRA_VIEWPORT :Nyt lokalitetsvindue STR_MAP_MENU_LINGRAPH_LEGEND :Laststrømforklaring STR_MAP_MENU_SIGN_LIST :Liste over skilte @@ -568,8 +568,8 @@ STR_MONTH_DEC :december # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Nøgle STR_GRAPH_KEY_TOOLTIP :{BLACK}Vis nøglen til grafer -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Myndighederne i {TOWN} skriver kontrakt med {STRING} på et års eksklusive transportrettigheder! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Lokalitetsvindue {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Lokalitetsvindue {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Hent hovedvisning STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Bevæg denne visning til samme sted som hovedvisningen STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Flyt hovedvisning @@ -935,10 +935,9 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksikansk Peso STR_GAME_OPTIONS_CURRENCY_NTD :Ny Taiwan dollar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Kinesisk Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indisk rupi (INR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vejkøretøjer -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Vælg den side af vejen, køretøjer skal kører i STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Kør i venstre side STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Kør i højre side @@ -990,6 +989,9 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Skærmop STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Vælg ønsket skærmopløsning STR_GAME_OPTIONS_RESOLUTION_OTHER :andet +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardware-acceleration + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}grænseflade størrelse STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Vælg den grænseflade størrelse du ønsker at benytte @@ -1004,6 +1006,8 @@ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dobbelt størrelse STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad (4x) størrelse + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis-grafiksæt STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vælg det basis-grafiksæt der skal bruges STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} forsvund{P en ne}/ødelagt{P "" e} fil{P "" er} @@ -1179,8 +1183,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Slå katastrofe STR_CONFIG_SETTING_CITY_APPROVAL :Byrådets holdning til omstrukturering: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Vælg hvor meget selskaber støj og miljømæssige skader påvirker byvurdering og fremtidige byggeretigheder i området -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maksimal map højde: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Indstil den maksimale tilladte højde for bjerge på kortet STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Du kan ikke sætte den maksimale kortet højde for denne værdi. Mindst et bjerg på kortet er højere STR_CONFIG_SETTING_AUTOSLOPE :Tillad landskabsformning under bygninger, spor, etc. (autoslope): {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tillad landskabsformning under bygninger og spor uden at fjerne dem @@ -1439,6 +1441,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Hold byggeværk STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Hold bygnings-værktøjer til broer, tunneler, mv. åben efter brug STR_CONFIG_SETTING_EXPENSES_LAYOUT :Grupper udgifter i firmaets finansvindue: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definer layout for firmaets udgifter-vindue +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal simulationshastighed STR_CONFIG_SETTING_SOUND_TICKER :Nyhedssymbol: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Afspil lyd for opsummerede nyheds beskeder @@ -1552,8 +1555,7 @@ STR_CONFIG_SETTING_ENDING_YEAR :Slutår for poi STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Årstal hvor spillet slutter pointoptælling. Ved slutningen af dette år bliver selskabets point optaget, og topresultater-skærmen bliver vist. Spillerne kan fortsætte med at spille efter dette.{}Hvis dette er før spillets start år, bliver topresultater-skærmen aldrig vist. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Aldrig -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktiver rolig økonomi (flere små ændringer): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Når slået til, ændre industriproduktion oftere, og i små trin. Denne indstilling har normalt ingen effekt, hvis industrityper er fastsat af NewGRF +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Smooth STR_CONFIG_SETTING_ALLOW_SHARES :Tillad at købe aktier i andre selskaber: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Hvis aktiveret, tillades køb og salg af selskabsaktier. Aktier vil kun være tilgængelige for selskaber der er nået en hvis alder STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Mindste selskabsalder for aktiehandel: {STRING} @@ -1605,9 +1607,7 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineær STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Placering af træer i spillet: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroller den tilfældige fremkomst af træer i løbet af spillet. Dette vil påvirke industrier der afhænger træers vækst, f.eks. savværker -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ingen {RED}(ødelægger træfabrik) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Kun i regnskove -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Alle steder +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Voks og spred ud overalt STR_CONFIG_SETTING_TOOLBAR_POS :Placering af værktøjslinje: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horisontal placering af hovedværktøjlinjen i toppen af skærmen @@ -1763,6 +1763,9 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Utilstrækkelig hukommelse STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Allokering af {BYTES} spritecache fejlede. Spritecachen blev indskrænket til {BYTES}. Dette vil sænke OpenTTDs ydelse. Du kan forsøge at slå 32bpp grafik og/eller zoom-ind niveauer for at reducere hukommelseskravet +# Video initalization errors +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... ingen kompatibel GPU fundet. Hardware-acceleration deaktiveret + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1806,18 +1809,9 @@ STR_INTRO_TRANSLATION :{BLACK}Denne ov # Quit window STR_QUIT_CAPTION :{WHITE}Afslut -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Er du sikker på, at du vil forlade dette spil og returnere til {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nej -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Forlad spillet STR_ABANDON_GAME_QUERY :{YELLOW}Er du sikker på du vil forlade dette spil ? @@ -1826,7 +1820,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Er du s # Cheat window STR_CHEATS :{WHITE}Snydefunktioner STR_CHEATS_TOOLTIP :{BLACK}Checkbokse viser, om du har brugt denne snydefunktion før -STR_CHEATS_WARNING :{BLACK}Advarsel! Du er ved at forråde dine modstandere. Tænk lige på at dette vil blive husket i al evighed. STR_CHEAT_MONEY :{LTBLUE}Forøg kassebeholdning med {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spiller som firmaet: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk bulldozer (nedriv ting, som normalt ikke kan fjernes): {ORANGE}{STRING} @@ -1938,10 +1931,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ændre s # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netværksspil -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Offentlig -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Vælg mellem et offentligt (internet) og et ikke offentligt (lokalnetværk, LAN) spil -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nej -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spiller navn: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Dette er det navn, som andre spillere vil kende dig ved @@ -1982,8 +1971,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Tilslut STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Genopfrisk server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Genopfrisk serverens info -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Find server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Søg netværket for en server STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Tilføj server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Tilføjer en server til listen, som altid vil blive tjekket for kørerende spil. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server @@ -2000,6 +1987,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Navnet v STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Sæt kodeord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskyt dit spil med et kodeord hvis du ikke vil have fremmede med +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Offentlig +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vælg mellem et offentligt (internet) og et ikke offentligt (lokalnetværk, LAN) spil STR_NETWORK_START_SERVER_UNADVERTISED :Nej STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} @@ -2113,7 +2102,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nyt firma # Network client list STR_NETWORK_CLIENTLIST_KICK :Smid ud STR_NETWORK_CLIENTLIST_BAN :Ban (Forvis spiller) -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Giv penge STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tal til alle STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Tal til selskab STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privat besked @@ -2122,8 +2110,6 @@ STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Tilskuere -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv beløbet du vil give - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Gem ikke den indtastede adgangskode STR_COMPANY_PASSWORD_OK :{BLACK}Giv firmaet den nye adgangskode @@ -2224,8 +2210,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ha STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} har startet et nyt selskab (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} har forladt spillet ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} har ændret sit navn til {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gav dit selskab {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Du gav {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Serveren har lukket ned for dette spil STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Serveren genstarter...{}Vent venligst... STR_NETWORK_MESSAGE_KICKED :*** {STRING} blev sparket ud. Grund: ({STRING}) @@ -2303,6 +2287,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}Grafikfi STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ja, download grafikfilerne STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nej, afslut OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Gennemsigtighedsvalg STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Skift gennemsigtighed for skilte. CTRL+Klik for at låse værdi. @@ -2344,6 +2329,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Byg en STR_JOIN_WAYPOINT_CAPTION :{WHITE}Forbind waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Byg et separat waypoint +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Jernbanekonstruktion STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektrisk jernbanekonstruktion @@ -2531,7 +2518,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Størrel STR_OBJECT_CLASS_LTHS :Fyrtårn STR_OBJECT_CLASS_TRNS :Sendere -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Træer STR_PLANT_TREE_TOOLTIP :{BLACK}Vælg typen af træer der skal plantes. Hvis feltet allerede har et træ, vil dette tilføje flere træer i blandede typer, uafhængigt af den valgte type STR_TREES_RANDOM_TYPE :{BLACK}Træer af tilfældig type @@ -2834,14 +2821,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Antal byer: STR_MAPGEN_DATE :{BLACK}Dato: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Antal industrier: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maksimal map højde: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Øge den maksimale højde af bjerge på kortet med en -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Formindsk den maksimale højde af bjerge på kortet med en -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Snegrænse -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Flyt snegrænsen een op -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Flyt snegrænsen een ned STR_MAPGEN_LAND_GENERATOR :{BLACK}Terrængenerator: -STR_MAPGEN_TREE_PLACER :{BLACK}Træalgoritme: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terræntype: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Havniveau STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Floder: @@ -2866,8 +2846,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Højdeko STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Størrelse: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Skift maksimal kort højde -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Ændre snegrænsen STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Ændre startår # SE Map generation @@ -3084,6 +3062,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Vis matc # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Ændre skiltets tekst +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centrér skærmen ved skiltets placering. Ctrl+klik åbner et nyt vindue ved skiltets placering STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Gå til næste skilt STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Gå til forrige skilt @@ -3157,13 +3136,11 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Bestik STR_GOALS_CAPTION :{WHITE}{COMPANY} Mål STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globale Mål STR_GOALS_SPECTATOR :Globale Mål -STR_GOALS_GLOBAL_TITLE :{BLACK}Globale mål: +STR_GOALS_GLOBAL_BUTTON :{BLACK}Global STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Ingen - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Ikke anvendelig - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Selskabsmål: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik på mål for at centrere hovedvinduet over industri/by/felt Ctrl+klik åbner et nyt vindue over industri/by/felt lokation # Goal question window @@ -3295,7 +3272,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Forhindr STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrer skærmen over vejpunktets lokalitet. Ctrl+Klik åbner et nyt vindue ved waypointets lokalitet. STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Omdøb waypoint -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrer skræmen over bøjens lokalitet. Ctrl+Klik åbner et nyt vindue ved bøjens lokalitet. +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrér skærmen ved bøjens placering. Ctrl+klik åbner et nyt vindue ved bøjens placering STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Ændre navnet på bøjen STR_EDIT_WAYPOINT_NAME :{WHITE}Omdøb waypoint @@ -3360,6 +3337,7 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Flyt hov STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Flyt selskabets hovedkvarter for 1% af selskabsværdien. Shift skifter mellem at flytte og vise prisoverslag. STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detaljer STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Se detaljerede infrastruktur-tal +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Giv penge STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nyt ansigt STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Vælg nyt ansigt til direktøren @@ -3644,10 +3622,10 @@ STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Dette vi STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Dette vil købe en kopi af skibet. Klik på denne knap og så på et skib indeni eller udenfor dokken. Ctrl-klik vil dele ordrer. Shift-klik vil vise prisoverslag. STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dette vil købe en kopi af et fly. Klik på denne knap og så på et fly indeni eller udenfor hangaren. Ctrl-klik vil dele ordrer. Shift-klik viser estimerede omkostninger uden at indkøbe -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over remisens lokalitet. Ctrl+Klik åbner et nyt vindue ved remisens lokalitet. -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over værkstedets lokalitet. Ctrl+Klik åbner et nyt vindue ved køretøjsværkstedets lokalitet. -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over skibsdokkens lokalitet. Ctrl+Klik åbner et nyt vindue ved skibsdokkens lokalitet. -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrér skærmen over hangarens lokalitet. Ctrl+Klik åbner et nyt vindue ved hangarens lokalitet. +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrér skærmen over remisens placering. Ctrl+klik åbner et nyt vindue ved remisens placering +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrér skærmen ved værkstedets placering. Ctrl+klik åbner et nyt vindue ved køretøjsværkstedets placering +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centrér skærmen ved skibsdokkens placering. Ctrl+klik åbner et nyt vindue ved skibsdokkens placering +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrér skærmen ved hangarens placering. Ctrl+klik åbner et nyt vindue ved hangarens placering STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Vis en liste over alle tog med denne remise i ordrelisten STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Vis liste over alle køretøjer med dette værksted i ordrelisten @@ -3737,10 +3715,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Få auto # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrér skærmen over togets lokalitet. Ctrl-Klik vil følge toget i hovedvinduet -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrér skærmen over køretøjets lokalitet. Ctrl-Klik vil følge køretøjet i hovedvinduet -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrér skærmen over skibets lokalitet. Ctrl-Klik vil følge skibet i hovedvinduet -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrér skærmen over flyets lokalitet. Ctrl+Klik vil følge flyet i hovedvinduet STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send toget til remise. CTRL+klik vil kun servicere STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send køretøjet til værksted. CTRL+klik vil kun servicere @@ -3772,10 +3746,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Vis kør STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Vis detaljer omkring skibet STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Vis detaljet omkring flyet -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Nuværende opførsel - klik her for at starte/stoppe toget. Ctrl+Click for at scrolle til destinationen -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Nuværende opførsel - klik her for at stoppe/starte køretøjet. Ctrl+Click for at scrolle til destinationen -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Nuværende opførsel - klik her for at starte/stoppe skibet. Ctrl+Click for at scrolle til destinationen -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Nuværende opførsel - klik her for at starte/stoppe flyet. Ctrl+Click for at scrolle til destinationen + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Læsser / Aflæsser @@ -3823,7 +3794,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Vægt: { STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Overskud i år: {LTBLUE}{CURRENCY_LONG} (sidste år: {CURRENCY_LONG}) STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Pålidelighed: {LTBLUE}{COMMA}% {BLACK}Nedbrud siden sidste service: {LTBLUE}{COMMA} -STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Kapacitet: {LTBLUE}Ingen{STRING} STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapacitet: {LTBLUE}{CARGO_LONG}{3:STRING} STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapacitet: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) @@ -4003,6 +3974,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Tilpas til {ST STR_ORDER_STOP_ORDER :(Stop) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan ikke bruge station){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Automatisk) @@ -4453,6 +4425,7 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Forkert depotty STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} er blevet for langt efter udskiftning STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ingen autoudskiftning/-fornyelse foretaget. STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(ikke penge nok) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Nyt køretøj kan ikke auto-tilpasses i ordren{NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Umulig sporkombination diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3a3448de1b..a37ef26ed7 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Tarwe STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Suiker STR_CARGO_PLURAL_TOYS :Speelgoed -STR_CARGO_PLURAL_CANDY :Snoep +STR_CARGO_PLURAL_SWEETS :Snoep STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Suikerspin +STR_CARGO_PLURAL_CANDYFLOSS :Suikerspin STR_CARGO_PLURAL_BUBBLES :Bellen STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Batterijen @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Tarwe STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Suiker STR_CARGO_SINGULAR_TOY :Speelgoed -STR_CARGO_SINGULAR_CANDY :Snoep +STR_CARGO_SINGULAR_SWEETS :Snoep STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Suikerspin +STR_CARGO_SINGULAR_CANDYFLOSS :Suikerspin STR_CARGO_SINGULAR_BUBBLE :Bubbel STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Batterij @@ -194,6 +194,7 @@ STR_COLOUR_DEFAULT :Standaard STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/u STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}tegels/dag STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}pk STR_UNITS_POWER_METRIC :{COMMA}{NBSP}pk @@ -233,8 +234,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Selectee STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecteer de sorteercriteria STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selecteer de filtercriteria STR_BUTTON_SORT_BY :{BLACK}Sorteren op -STR_BUTTON_LOCATION :{BLACK}Locatie -STR_BUTTON_RENAME :{BLACK}Hernoemen STR_BUTTON_CATCHMENT :{BLACK}Dekking STR_TOOLTIP_CATCHMENT :{BLACK}Schakelt weergave van dekkingsgebied om @@ -314,6 +313,15 @@ STR_SORT_BY_CARGO_CAPACITY :Vrachtcapacitei STR_SORT_BY_RANGE :Bereik STR_SORT_BY_POPULATION :Aantal inwoners STR_SORT_BY_RATING :Waardering +STR_SORT_BY_NUM_VEHICLES :Aantal voertuigen +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Totale winst vorig jaar +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Totale winst dit jaar +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Gemiddelde winst vorig jaar +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Gemiddelde winst dit jaar + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Geen +STR_GROUP_BY_SHARED_ORDERS :Gedeelde orders # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Hiermee pauzeer je het spel @@ -349,9 +357,9 @@ STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Landinfo STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Knoppenbalken wisselen # Extra tooltips for the scenario editor toolbar -STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Scenario opslaan of laden, scenario-editor verlaten, afsluiten +STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Scenario opslaan of laden, scenariobewerker verlaten, afsluiten STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD -STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Scenario-editor +STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Scenariobewerker STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Startdatum 1 jaar terugzetten STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Startdatum 1 jaar vooruitzetten STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Klik om het startjaar op te geven @@ -370,7 +378,7 @@ STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Scenario opslaa STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :Scenario laden STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Hoogtekaart opslaan STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Hoogtekaart laden -STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Scenario-editor sluiten +STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Scenariobewerker sluiten STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Afsluiten ############ range for SE file menu starts @@ -402,7 +410,7 @@ STR_FILE_MENU_EXIT :Afsluiten # map menu STR_MAP_MENU_MAP_OF_WORLD :Wereldkaart -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra kijkvenster +STR_MAP_MENU_EXTRA_VIEWPORT :Extra kijkvenster STR_MAP_MENU_LINGRAPH_LEGEND :Vrachtstroomlegende STR_MAP_MENU_SIGN_LIST :Bordjeslijst @@ -568,8 +576,8 @@ STR_MONTH_DEC :December # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Legenda STR_GRAPH_KEY_TOOLTIP :{BLACK}Legenda bij deze grafiek weergeven -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -739,6 +747,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Ruw land STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Grasland STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Braakliggend land +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Regenwoud STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Akkers STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Bomen STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Rotsen @@ -770,6 +779,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Alle vra STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Laatste (nieuws-)bericht weergeven STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * GEPAUZEERD * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * GEPAUZEERD (wacht op bijwerken koppelinggrafiek) * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOMATISCH OPSLAAN STR_STATUSBAR_SAVING_GAME :{RED}* * SPEL WORDT OPGESLAGEN * * @@ -884,7 +894,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Gemeentebestuur van {TOWN} tekent contract met {STRING} voor een jaar exclusieve transportrechten! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Kijkvenster {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Kijkvenster {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Verander kijkvenster STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopieer de locatie van het algemene scherm naar dit kijkvenster STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Verander algemeen scherm @@ -935,10 +945,11 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexicaanse peso STR_GAME_OPTIONS_CURRENCY_NTD :Nieuwe Taiwanse dollar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indiase rupee (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Indonesische roepia (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Maleisische Ringgit (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Wegvoertuigen -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Kiest aan welke kant van de weg voertuigen moeten rijden STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Links rijden STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Rechts rijden @@ -989,10 +1000,19 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Vink dit STR_GAME_OPTIONS_RESOLUTION :{BLACK}Schermresolutie STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Selecteer de schermresolutie STR_GAME_OPTIONS_RESOLUTION_OTHER :Anders +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardwareversnelling +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Selecteer dit vakje om OpenTTD hardwareversnelling te laten gebruiken. De gewijzigde instelling wordt pas van kracht nadat het spel opnieuw is gestart. +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}De instelling wordt pas van kracht als het spel opnieuw is gestart + +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Selecteer dit vakje om het scherm verticaal te synchroniseren. De wijziging gaat pas in nadat je het spel opnieuw hebt opgestart. Werkt alleen als hardwareversnelling is ingeschakeld STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Menupuntgrootte STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Kiest de grootte van bedieningselementen +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(automatische detectie) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normaal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dubbele grootte STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4x Grootte @@ -1000,10 +1020,19 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4x Grootte STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Lettergrootte STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Hiermee kies je hoe groot de letters op het scherm moeten zijn +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(auto-detect)Status: Vermist STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normaal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dubbele grootte STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Viervoudige grootte +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafische elementen + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Verversingssnelheid weergeven +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Selecteer de gewenste schermverversingssnelheid +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :overige +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Verversingssnelheden boven 60 Hz kunnen de prestaties beïnvloeden. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisset voor graphics STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kiest de te gebruiken basisset voor grafische elementen STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ontbrekend{P "" e}/beschadigd{P "" e} bestand{P "" en} @@ -1098,6 +1127,8 @@ STR_TERRAIN_TYPE_FLAT :Vlak STR_TERRAIN_TYPE_HILLY :Heuvelachtig STR_TERRAIN_TYPE_MOUNTAINOUS :Bergachtig STR_TERRAIN_TYPE_ALPINIST :Berglandschap +STR_TERRAIN_TYPE_CUSTOM :Aangepaste hoogte +STR_TERRAIN_TYPE_CUSTOM_VALUE :Aangepaste hoogte ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Toegeeflijk STR_CITY_APPROVAL_TOLERANT :Neutraal @@ -1179,8 +1210,10 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Rampen in-uitsc STR_CONFIG_SETTING_CITY_APPROVAL :Houding van gemeentebestuur ten opzichte van herstructurering omgeving: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Bepaalt in hoeverre lawaai en schade aan het milieu door bedrijven de stadswaardering en verdere bouwacties beïnvloeden in hun omgeving -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximale kaarthoogte: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Maximaal toegestane hoogte voor bergen op de kaart instellen +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Limiet voor kaarthoogte: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Stelt de maximale hoogte voor het terrein op de kaart in. Met '(auto)' wordt een goede waarde genomen nadat het terrein is gegenereerd +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(auto) STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Je kunt de maximale kaarthoogte niet in deze waarde wijzigen. Minstens één berg op de kaart is hoger. STR_CONFIG_SETTING_AUTOSLOPE :Omgeving aanpassen onder gebouwen, spoorwegen enz. toestaan: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Staat het aanpassen van funderingen onder gebouwen en sporen toe zonder deze te verwijderen @@ -1303,7 +1336,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duur voor het w STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} seconde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY :Knopinfo weergeven: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Vertraging voordat knopinfo worden weergegeven wanneer je de muis boven een besturingselement houdt. Wanneer de waarde 0 is, wordt knopinfo aan de rechtermuisknop gebonden. -STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Muis stilhouden gedurende {COMMA} seconde{P 0 "" n} +STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Muis stilhouden gedurende {COMMA} milliseconde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Rechtsklik STR_CONFIG_SETTING_POPULATION_IN_LABEL :Inwoneraantal bij stad weergeven: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Aantal inwoners van een stad weergeven bij naam op de kaart @@ -1325,7 +1358,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Stelt in hoevee STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximumafstand van de rand voor olieraffinaderijen: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olieraffinaderijen worden alleen gebouwd nabij de kaartgrens, dat is aan de kust van eilandkaarten STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sneeuwhoogte: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Stelt in op welke hoogte de sneeuw begint in subarctisch landschap. Sneeuw heeft ook invloed op het ontstaan van industrieën en op de vereisten voor stadsgroei. +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Stelt in op welke hoogte de sneeuw begint in subarctisch landschap. Sneeuw heeft ook invloed op het ontstaan van industrieën en op de vereisten voor stadsgroei. Kan alleen worden aangepast in de scenariobewerker of wordt berekend met behulp van 'sneeuwoppervlak' +STR_CONFIG_SETTING_SNOW_COVERAGE :Sneeuwoppervlak: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Bepaalt de hoeveelheid sneeuw in het subarctische landschap. Sneeuw is ook van invloed op de industrieën en de groei van steden. Wordt alleen gebruikt tijdens het maken van de kaart. Land net boven zeeniveau krijgt nooit sneeuw +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Woestijnoppervlak: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Bepaalt de hoeveelheid woestijn in het tropische landschap. Woestijn is ook van invloed op industrieën. Wordt alleen gebruikt tijdens het maken van de kaart +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Ruwheid van het terrein: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Alleen TerraGenesis) Kiest de frequentie van heuvels: gladde landschappen hebben minder, meer wijdverspreide heuvels. Ruwe landschappen hebben veel heuvels, die repetitief kunnen lijken. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Erg glad @@ -1439,6 +1478,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Bouwgereedschap STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Houd de bouwhulpmiddelen voor bruggen, tunnels, enz. open na gebruik STR_CONFIG_SETTING_EXPENSES_LAYOUT :Uitgaven in bedrijfsfinanciënvenster groeperen: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definieer de lay-out voor het bedrijfsuitgavenvenster +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatisch seinen verwijderen tijdens spooraanleg: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Seinen automatisch verwijderen tijdens spooraanleg als deze in de weg staan. Dit kan botsingen veroorzaken. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limiet verhoogde spelsnelheid: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Beperkt de snelheid van het spel wanneer de spelsnelheid is verhoogt. 0 = geen limiet (alleen beperkt door de computer zelf). Waarden onder 100% vertragen het spel. De hoogste waarde hangt af van de specifcaties van de computer en kan afhankelijk van het spel variëren. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normale spelsnelheid +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Geen limiet (alleen beperkt door de computer zelf) STR_CONFIG_SETTING_SOUND_TICKER :Nieuwsticker: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Speel geluidseffecten af bij korte nieuwsberichten @@ -1552,8 +1597,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Eindjaar voor s STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Jaar dat het spel eindigt ten behoeve van de score. Aan het einde van dit jaar wordt de score van het bedrijf vastgelegd en verschijnt het venster met topscores. De spelers kunnen echter doorgaan met spelen.{}Als dit voor het startjaar ligt, verschijnt het venster met topscores niet. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nooit -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Vloeiende economie inschakelen (meer, kleinere veranderingen): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wanneer dit is ingeschakeld, verandert de productie van industrieën vaker en in kleinere stappen. Deze instelling heeft meestal geen effect als de industriesoorten worden geleverd door een NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE :Type economie: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Bij gelijkmatige economie zijn er vaker wijzigingen in productie, die in kleinere stappen verlopen. Bij vaste economie zijn er geen wijzigingen in productie en sluiten bedrijven niet. Deze instelling werkt misschien niet als de soorten industrie worden geleverd in een NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Origineel +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Gelijkmatig +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Vast STR_CONFIG_SETTING_ALLOW_SHARES :Kopen van aandelen in andere bedrijven toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Wanneer ingeschakeld is het toegestaan om bedrijfsaandelen te kopen en te verkopen. Aandelen zullen alleen beschikbaar zijn voor bedrijven die een bepaalde leeftijd hebben bereikt STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimale leeftijd van bedrijf om aandelen te kunnen verhandelen: {STRING} @@ -1605,9 +1653,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineair STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plaatsing van bomen in het spel: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheert het willekeurig verschijnen van bomen tijdens het spel. Dit kan gevolgen hebben voor industrietakken die afhankelijk zijn van groei van bomen, bijvoorbeeld houtzagerijen. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Geen {RED}(houtzagerijen werken niet) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Alleen in regenwouden -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Overal +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Groeien maar niet verspreiden {RED}(houtzagerijen werken niet meer) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Groeien, maar alleen verspreiden in regenwoud +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Overal groeien en verspreiden +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Niet groeien, niet verspreiden {RED}(houtzagerijen werken niet meer) STR_CONFIG_SETTING_TOOLBAR_POS :Positie van algemene knoppenbalk: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontale positie van de algemene taakbalk aan de bovenkant van het scherm. @@ -1625,12 +1674,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :Maximaal inzoom STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Het maximale inzoomniveau voor kijkvensters. Merk op dat hogere inzoomniveaus hogere eisen stellen aan het geheugen. STR_CONFIG_SETTING_ZOOM_MAX :Maximaal uitzoomniveau: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :De maximale zoom-uit niveau voor kijkvensters. Hogere zoom-uit niveaus kunnen leiden tot vertraging bij gebruik +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Hoogste resolutie die sprites mogen gebruiken: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Beperk de maximale resolutie die voor sprites wordt gebruikt. Door deze beperking worden geen grafische elementen in hoge resolutie gebruikt, ook niet als ze beschikbaar zijn. Zo kan de weergave van het spel consistent blijven wanneer je verschillende GRF-bestanden gebruikt met en zonder grafische elementen in hoge resolutie. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normaal STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Groeisnelheid steden: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Groeisnelheid van steden. STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Niet @@ -1674,6 +1728,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Wanneer een sne STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiaal (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisch (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Speleenheden (tegels/dag) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Voertuigkrachteenheden: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Als het verbruik van een voertuig wordt weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden @@ -1763,6 +1818,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... nege STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Geen geheugen meer STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Toewijzen van {BYTES} van spritecache mislukt. De spritecache werd teruggebracht tot {BYTES}. Dit verlaagt de prestaties van OpenTTD. Om het benodigde geheugen te verminderen, kun je proberen om 32bpp-beeldelementen en/of inzoomniveaus uit te schakelen +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}Fout met video-instellingen... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... geen compatibele GPU gevonden. Hardwareversnelling is uitgeschakeld + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1806,18 +1865,10 @@ STR_INTRO_TRANSLATION :{BLACK}Deze ver # Quit window STR_QUIT_CAPTION :{WHITE}Afsluiten -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Weet je zeker dat je OpenTTD wilt verlaten en terug wilt keren naar {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Weet je zeker dat je OpenTTD wilt verlaten? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nee -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Spel sluiten STR_ABANDON_GAME_QUERY :{YELLOW}Weet je zeker dat je dit spel wilt sluiten? @@ -1826,7 +1877,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Weet je # Cheat window STR_CHEATS :{WHITE}Valsspelen STR_CHEATS_TOOLTIP :{BLACK}Keuzevakjes geven aan of je deze manier van valsspelen eerder hebt gebruikt -STR_CHEATS_WARNING :{BLACK}Waarschuwing! Je staat op het punt je medespelers te verraden. Onthoud dat zo'n schande eeuwig wordt onthouden +STR_CHEATS_NOTE :{BLACK}Opmerking: al deze instellingen worden opgeslagen in het opgeslagen spel STR_CHEAT_MONEY :{LTBLUE}Kapitaal vergroten met {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spelen als bedrijf: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magische bulldozer (industrieën en andere onverplaatsbare objecten verwijderen): {ORANGE}{STRING} @@ -1938,10 +1989,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netwerkspel -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Openbaar -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet-openbaar (Local Area Network, LAN) spel -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelersnaam: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Dit is de naam waarmee andere spelers je herkennen @@ -1982,8 +2029,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Meespele STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Ververs server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Ververs de informatie over deze server -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Server zoeken -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Zoek op het netwerk naar een server +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Op internet zoeken +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Op het internet zoeken naar openbare servers +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Op LAN zoeken +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Op lokaal netwerk zoeken naar servers STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Voeg server toe STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Voegt een server toe aan de lijst die altijd gecontroleerd zal worden op draaiende spellen STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server @@ -1993,13 +2042,15 @@ STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Vul je n STR_NETWORK_SERVER_LIST_ENTER_IP :{BLACK}Voer het IP-adres van de server in # Start new multiplayer server -STR_NETWORK_START_SERVER_CAPTION :{WHITE}Start nieuw multiplayerspel +STR_NETWORK_START_SERVER_CAPTION :{WHITE}Nieuw spel met meerdere spelers starten STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Spelnaam: -STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De spelnaam wordt weergegeven aan andere spelers in het multiplayerspelselectiemenu +STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De spelnaam wordt weergegeven aan andere spelers in het spelselectiemenu voor meerdere spelers STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Wachtwoord instellen STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beveilig je spel met een wachtwoord als je niet wilt dat dit algemeen toegankelijk is +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet-openbaar (Local Area Network, LAN) spel STR_NETWORK_START_SERVER_UNADVERTISED :Nee STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} speler{P "" s} @@ -2113,7 +2164,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nieuw bedrijf # Network client list STR_NETWORK_CLIENTLIST_KICK :Uit het spel schoppen STR_NETWORK_CLIENTLIST_BAN :Verbannen -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Geld geven STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Met iedereen praten STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Met bedrijf praten STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privébericht @@ -2122,8 +2172,6 @@ STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Speler STR_NETWORK_SPECTATORS :Toeschouwers -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Voer de hoeveelheid geld die je wilt geven in - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ingevoerd wachtwoord niet opslaan STR_COMPANY_PASSWORD_OK :{BLACK}Bedrijf het nieuwe wachtwoord geven @@ -2210,11 +2258,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Spel nog steeds STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spel nog steeds gepauzeerd ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spel vervolgd ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :aantal spelers STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :spelers maken verbinding STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :Handmatig STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spelscript +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :wacht op bijwerken koppelinggrafiek ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :vertrekt STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} heeft zich bij het spel gevoegd @@ -2224,8 +2274,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ki STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} heeft een nieuw bedrijf opgericht (nr. {2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} heeft het spel verlaten ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} heeft zijn/haar naam gewijzigd naar {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gaf je bedrijf {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Je gaf {2:CURRENCY_LONG} aan {1:STRING} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gaf {2:CURRENCY_LONG} aan {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}De server heeft de sessie gesloten STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De server wordt opnieuw gestart...{}Wacht alstublieft... STR_NETWORK_MESSAGE_KICKED :*** {STRING} is eruit geschopt. Reden: ({STRING}) @@ -2303,6 +2352,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ja, grafische elementen downloaden STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nee, OpenTTD afsluiten +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Downloaden mislukt +STR_MISSING_GRAPHICS_ERROR :{BLACK}Grafische elementen downloaden mislukt.{}Download de grafische elementen handmatig. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}OpenTTD afsluiten + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Doorzichtigheidsopties STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Transparantie voor stationsnamen aan-uit. Ctrl+klik om vast te zetten. @@ -2344,6 +2397,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Een los STR_JOIN_WAYPOINT_CAPTION :{WHITE}Routepunt samenvoegen STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Los routepunt bouwen +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Momenteel uitgeschakeld omdat er geen voertuigen zijn voor deze infrastructuur + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Spoorwegen bouwen STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Geëlektrificeerde spoorwegen bouwen @@ -2531,13 +2587,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: STR_OBJECT_CLASS_LTHS :Vuurtorens STR_OBJECT_CLASS_TRNS :Zendmasten -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Bomen STR_PLANT_TREE_TOOLTIP :{BLACK}Kies een soort boom om te planten. Als de tegel al bomen bevat, komen er meer bomen van verschillende typen bij, onafhankelijk van het geselecteerde type. STR_TREES_RANDOM_TYPE :{BLACK}Willekeurige soorten bomen STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Shift+klik wisselt tussen bouwen/verwachte kosten. STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Willekeurige bomen STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Hiermee plant je bomen willekeurig over het landschap +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normaal +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Losse bomen planten door over het landschap te slepen +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Groepje bomen +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Kleine bossen planten door over het landschap te slepen +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Bos +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Grote bossen planten door over het landschap te slepen # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Landontwikkeling @@ -2588,12 +2650,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Willekeu # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Nieuwe industrie financieren STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Kiest de gewenste industrie in de lijst -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Veel willekeurige industrieën +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Willekeurige industrieën maken STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Bedek de kaart met willekeurig geplaatste industrieën +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Willekeurige industrieën maken +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Weet je zeker dat je veel willekeurige industrieën wilt hebben? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Kosten: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Onderzoeken STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Bouw STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Betaal +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Alle industrieën verwijderen +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Alle industrieën op de kaart verwijderen +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Alle industrieën verwijderen +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Weet je zeker dat je alle industrieën wilt verwijderen? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrieketen voor {STRING} industrie @@ -2614,6 +2682,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Bedrijf # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Landinformatie +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de tegel. Ctrl+klik opent een nieuw venster op de locatie van de tegel. STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Sloopkosten: {LTBLUE}niet mogelijk STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Sloopkosten: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Opbrengst bij verwijdering: {LTBLUE}{CURRENCY_LONG} @@ -2823,6 +2892,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtertekenreeks: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Bestand overschrijven STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Weet je zeker dat je het bestaande bestand wilt overschrijven? +STR_SAVELOAD_DIRECTORY :{STRING} (Map) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Bovenliggende map) STR_SAVELOAD_OSKTITLE :{BLACK}Voer een naam in voor het spel dat moet worden opgeslagen @@ -2834,14 +2905,18 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Aantal steden: STR_MAPGEN_DATE :{BLACK}Datum: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Aantal industrieën: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximale kaarthoogte -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Verhoog de maximale hoogte van bergen op de kaart met één -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Verklein de maximale hoogte van bergen op de kaart met één -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Hoogte van sneeuwgrens: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Verhoog de sneeuwgrens met één -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Verlaag de sneeuwgrens met één +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Hoogste berg: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Verhoogt de maximale hoogte van de hoogste berg op de kaart met één +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Verlaagt de maximale hoogte van de hoogste berg op de kaart met één +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Sneeuwoppervlak: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Vergroot het sneeuwoppervlak met tien procent +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Verkleint het sneeuwoppervlak met tien procent +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Woestijnoppervlak: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Vergroot het woestijnoppervlak met tien procent +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Verkleint het woestijnoppervlak met tien procent +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Landgenerator: -STR_MAPGEN_TREE_PLACER :{BLACK}Bosalgoritme: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terreintype: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Zeeniveau: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rivieren: @@ -2866,8 +2941,10 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Naam van STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Grootte: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Maximale kaarthoogte wijzigen -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Hoogte van sneeuwgrens wijzigen +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Gewenste hoogte van bergen +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Hoogste berg +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Sneeuwoppervlak (in %) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Woestijnoppervlak (in %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Verander startjaar # SE Map generation @@ -3084,6 +3161,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Schakel # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Wijzig tekst van bord +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van het sein. Ctrl+klik opent een nieuw venster op de locatie van het sein. STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Ga naar volgende bord STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Ga naar vorige bord @@ -3112,7 +3190,7 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Stad gro STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Stad groeit iedere {ORANGE}{COMMA}{BLACK}{NBSP}dag{P "" en} (gefinancierd) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Stad groeit {RED}niet{BLACK} STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Geluidslimiet in stad: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het scherm op de locatie van de stad. Ctrl+klik opent een nieuw kijkvenster op de locatie van de stad +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de stad. Ctrl+klik opent een nieuw kijkvenster op de locatie van de stad STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Gemeente STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Geef informatie over de gemeente weer STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je deze plaats @@ -3144,33 +3222,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Nieuwe gebouwen STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Exclusieve transportrechten kopen STR_LOCAL_AUTHORITY_ACTION_BRIBE :Gemeentebestuur omkopen -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Begin een kleine reclamecampagne om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Begin een middelgrote reclamecampagne om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Begin een grote reclamecampagne om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financier een reconstructie van het wegennetwerk. Veroorzaakt tot 6 maanden lang een aanzienlijke verstoring van het wegverkeer.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Een standbeeld bouwen ter ere van jouw bedrijf.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}De bouw van nieuwe commerciële gebouwen in de stad financieren.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}1 jaar exclusieve transportrechten kopen in deze plaats. Het gemeentebestuur staat alleen passagiers en vracht toe bij jouw stations.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Begin een kleine reclamecampagne om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Zorgt voor een tijdelijk hogere stationswaardering in een klein gebied rondom het centrum.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Begin een middelgrote reclamecampagne om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Zorgt voor een tijdelijk hogere stationswaardering in een middelgroot gebied rondom het centrum.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Begin een grote reclamecampagne om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Zorgt voor een tijdelijk hogere stationswaardering in een groot gebied rondom het centrum.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financier een reconstructie van het wegennetwerk.{}Veroorzaakt tot 6 maanden lang een aanzienlijke verstoring van het wegverkeer.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Een standbeeld bouwen ter ere van jouw bedrijf.{}Zorgt voor een blijvend hogere stationswaardering in deze stad.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}De bouw van nieuwe gebouwen in de stad financieren.{}Zorgt voor een tijdelijk hogere groei van deze stad.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}1 jaar exclusieve transportrechten kopen in deze plaats.{}Het gemeentebestuur staat alleen passagiers en vracht toe bij jouw stations.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Koop het plaatselijk gezag om om je reputatie te verhogen met het risico op een strenge sanctie wanneer je gepakt wordt.{}Kosten: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Doelen STR_GOALS_SPECTATOR_CAPTION :{WHITE}Algemene doelen STR_GOALS_SPECTATOR :Algemene doelen -STR_GOALS_GLOBAL_TITLE :{BLACK}Algemene doelen: +STR_GOALS_GLOBAL_BUTTON :{BLACK}Algemeen +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Algemene doelen weergeven +STR_GOALS_COMPANY_BUTTON :{BLACK}Bedrijf +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Bedrijfsdoelen weergeven STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Geen - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Niet van toepassing - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Bedrijfsdoelen: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op doel centreert venster op industrie/stad/tegel. Ctrl+Klik opent een nieuw venster op de locatie van de industrie/stad/tegel. # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Vraag -STR_GOAL_QUESTION_CAPTION_INFORMATION :Informatie -STR_GOAL_QUESTION_CAPTION_WARNING :Waarschuwing -STR_GOAL_QUESTION_CAPTION_ERROR :Fout +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Vraag +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informatie +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Waarschuwing +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Fout ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Annuleren @@ -3278,7 +3357,7 @@ STR_CARGO_RATING_EXCELLENT :Uitstekend STR_CARGO_RATING_OUTSTANDING :Voortreffelijk ############ range for rating ends -STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het scherm op de locatie van het station. Ctrl+klik opent een nieuw venster op de locatie van het station +STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van het station. Ctrl+klik opent een nieuw venster op de locatie van het station STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Station hernoemen STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Geef alle treinen weer die dit station in hun opdrachtenlijst hebben @@ -3293,9 +3372,9 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Voorkom # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Scherm centreren op routepunt. Ctrl+klik opent nieuw venster op locatie van routepunt. +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op het routepunt. Ctrl+klik opent nieuw venster op locatie van routepunt. STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Naam routepunt aanpassen -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Hoofdscherm centreren op locatie van boei. Ctrl+klik opent een nieuw venster op de locatie van de boei. +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de boei. Ctrl+klik opent een nieuw venster op de locatie van de boei. STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Naam van boei aanpassen STR_EDIT_WAYPOINT_NAME :{WHITE}Naam routepunt aanpassen @@ -3360,6 +3439,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Hoofdkan STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Hoofdkantoor verplaatsen voor 1% van de bedrijfswaarde. Shift+klik geeft de verwachte kosten zonder hoofdkantoor te verplaatsen. STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Gedetailleerde aantallen infrastructuur bekijken +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Geld geven +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Geld geven aan dit bedrijf STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nieuw gezicht STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Nieuw gezicht voor directeur kiezen @@ -3377,6 +3458,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Verkoop STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Bedrijfsnaam STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Naam van directeur +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Voer het bedrag in om weg te geven STR_BUY_COMPANY_MESSAGE :{WHITE}We zoeken een transportbedrijf dat ons bedrijf over kan nemen.{}{}Wil je {COMPANY} kopen voor {CURRENCY_LONG}? @@ -3412,7 +3494,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :Geen STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Productie vorige maand: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% vervoerd) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van de industrie. Ctrl+klik opent een nieuws venster op de locatie van de industrie +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de industrie. Ctrl+klik opent een nieuws venster op de locatie van de industrie STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd! @@ -3531,6 +3613,7 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Aangedre STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Om te bouwen naar: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Alle vrachttypen STR_PURCHASE_INFO_NONE :Geen +STR_PURCHASE_INFO_ENGINES_ONLY :Alleen voertuigen STR_PURCHASE_INFO_ALL_BUT :Alles behalve {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. trekkracht: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Bereik: {GOLD}{COMMA} tegels @@ -3644,10 +3727,10 @@ STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Hiermee STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Hiermee koop je een kopie van een schip. Klik op deze knop en dan op een schip binnen of buiten het dok. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen. STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Hiermee koop je een kopie van een vliegtuig. Klik op deze knop en dan op een vliegtuig binnen of buiten de hangar. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen. -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Scherm centreren op remise. Ctrl+klik opent een nieuw scherm op locatie van remise. -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van de garage. Ctrl+klik opent een nieuw scherm op de locatie van de garage +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de remise. Ctrl+klik opent een nieuw scherm op locatie van remise. +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de garage. Ctrl+klik opent een nieuw scherm op de locatie van de garage STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centreer hoofdscherm op de locatie van het dok. Ctrl+klik opent een nieuw scherm op de locatie van het dok -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Scherm centreren op hangar. Ctrl+klik opent een nieuw venster op de hangarlocatie. +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op de hangar. Ctrl+klik opent een nieuw venster op de hangarlocatie. STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Geef een lijst van alle treinen met dit depot in hun orders STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Geef een lijst van alle wegvoertuigen met deze garage in hun orders @@ -3737,10 +3820,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}De te ve # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van de trein. Ctrl+klik volgt de trein in het hoofdscherm -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van het wegvoertuig. Ctrl+klik volgt het voertuig in het hoofdscherm -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van het schip. Ctrl+klik volgt het schip op het hoofdscherm -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centreer het scherm op de locatie van het vliegtuig. Ctrl+klik volgt het vliegtuig op het hoofdscherm +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van de trein. Met dubbelklik volg je de trein op het hoofdscherm. Ctrl+klik opent een nieuw scherm op de locatie van de trein. +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van het voertuig. Met dubbelklik volg je het voertuig op het hoofdscherm. Ctrl+klik opent een nieuw venster op de locatie van het voertuig +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van het schip. Met dubbelklik volg je het schip op het hoofdscherm. Ctrl+klik opent een nieuw venster op de locatie van het schip +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centreer het hoofdscherm op de locatie van het vliegtuig. Met dubbelklik volg je het vliegtuig op het hoofdscherm. Ctrl+klik opent een nieuw scherm op de locatie van het vliegtuig. STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur trein naar depot. Ctrl+klik voor alleen onderhoud STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur wegvoertuig naar garage. Ctrl+klik voor alleen onderhoud @@ -3749,10 +3832,10 @@ STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur vl STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Hiermee koop je een kopie van deze trein, inclusief wagons. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen. STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Hiermee koop je een kopie van dit wegvoertuig. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen. -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Hiermee koop je een kopie gekocht van dit schip. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen. +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Hiermee koop je een kopie van dit schip. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen. STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Hiermee koop je een kopie van dit vliegtuig. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen. -STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forceer trein verder te rijden zonder te wachten op een groen sein +STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forceer trein om verder te rijden zonder te wachten op een groen sein STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Trein ombouwen voor een ander vrachttype STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Wegvoertuig ombouwen voor een ander vrachttype @@ -3772,10 +3855,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Details STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Details van schip weergeven STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Details van vliegtuig weergeven -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van trein - klik hier om de trein te starten-stoppen. Ctrl+klik om naar bestemming te verplaatsen. -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van wegvoertuig - klik hier om voertuig te starten-stoppen. Ctrl+klik om naar bestemming te verplaatsen. -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van schip - klik hier om te starten-stoppen. Ctrl+klik om naar bestemming te verplaatsen. -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van vliegtuig - klik hier om het vliegtuig te stoppen-starten. Ctrl+klik om naar bestemming te verplaatsen. +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Huidige treinactie - klik om de trein te starten of stoppen +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Huidige voertuigactie - klik om het voertuig te starten of stoppen +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Huidige scheepsactie - klik om het schip te starten of stoppen +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Huidige vliegtuigactie - klik om het vliegtuig te starten of stoppen + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centreer het hoofdscherm op het doel van de order. Ctrl+klik opent een nieuw venster op het doel van de order. # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}In- en uitladen @@ -4003,6 +4088,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Ombouwen naar STR_ORDER_STOP_ORDER :(Stop) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Kan station niet gebruiken){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Impliciet) @@ -4247,6 +4333,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Opgeslagen spel STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Bestand is niet leesbaar STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Bestand is niet schrijfbaar STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Data-integriteitscontrole mislukt +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Opgeslagen spel is gemaakt met een aangepaste versie STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spel was opgeslagen in een versie zonder tramondersteuning. Alle trams zijn verwijderd @@ -4274,6 +4361,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Alleen b STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Grote schermfoto STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}De schermfoto heeft een resolutie van {COMMA} x {COMMA} pixels. Het maken van de schermfoto kan even duren. Verder gaan? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Hoogtekaart opgeslagen als '{STRING}'. Hoogste berg is {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Schermafbeelding opgeslagen als '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Schermfoto mislukt! @@ -4327,6 +4415,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... geen STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} benodigd STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Kan de lening niet afbetalen.. STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Kan geen geld weggeven dat van de bank geleend is... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Kan geen geld weggeven aan dit bedrijf... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Kan het bedrijf niet kopen... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan bedrijfshoofdkantoor niet bouwen... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Kan geen 25% aandeel in dit bedrijf kopen... @@ -4453,6 +4542,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Verkeerd depot- STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is te lang na het vervangen STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Geen automatische regels voor vervangen/vernieuwen toegepast STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(onvoldoende geld) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Nieuw voertuig is niet geschikt voor {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Nieuw voertuig kan niet ombouwen in order {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Onmogelijke spoorcombinatie @@ -4734,10 +4825,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :Suikermijn ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Geen naam -STR_SV_TRAIN_NAME :Trein {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Wegvoertuig {COMMA} -STR_SV_SHIP_NAME :Schip {COMMA} -STR_SV_AIRCRAFT_NAME :Vliegtuig {COMMA} +STR_SV_TRAIN_NAME :Trein #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Wegvoertuig #{COMMA} +STR_SV_SHIP_NAME :Schip #{COMMA} +STR_SV_AIRCRAFT_NAME :Vliegtuig #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} Noord @@ -5039,6 +5130,7 @@ STR_FORMAT_BUOY_NAME :Boei {TOWN} STR_FORMAT_BUOY_NAME_SERIAL :Boei {TOWN} {COMMA} STR_FORMAT_COMPANY_NUM :(Bedrijf {COMMA}) STR_FORMAT_GROUP_NAME :Groep {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Routepunt {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Routepunt {TOWN} {COMMA} diff --git a/src/lang/english.txt b/src/lang/english.txt index b4599caac9..afd43c149b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Wheat STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Sugar STR_CARGO_PLURAL_TOYS :Toys -STR_CARGO_PLURAL_CANDY :Sweets +STR_CARGO_PLURAL_SWEETS :Sweets STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Candyfloss +STR_CARGO_PLURAL_CANDYFLOSS :Candyfloss STR_CARGO_PLURAL_BUBBLES :Bubbles STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Batteries @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Wheat STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Sugar STR_CARGO_SINGULAR_TOY :Toy -STR_CARGO_SINGULAR_CANDY :Sweet +STR_CARGO_SINGULAR_SWEETS :Sweet STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Candyfloss +STR_CARGO_SINGULAR_CANDYFLOSS :Candyfloss STR_CARGO_SINGULAR_BUBBLE :Bubble STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Battery @@ -194,6 +194,7 @@ STR_COLOUR_DEFAULT :Default STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}tiles/day STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp @@ -236,8 +237,6 @@ STR_BUTTON_FILTER :{BLACK}Filter STR_BUTTON_FILTER_SELECT_ALL :Select All STR_BUTTON_FILTER_SELECT_NONE :Select None STR_BUTTON_SORT_BY :{BLACK}Sort by -STR_BUTTON_LOCATION :{BLACK}Location -STR_BUTTON_RENAME :{BLACK}Rename STR_BUTTON_CATCHMENT :{BLACK}Coverage STR_TOOLTIP_CATCHMENT :{BLACK}Toggle coverage area display @@ -318,6 +317,15 @@ STR_SORT_BY_CARGO_CAPACITY :Cargo capacity STR_SORT_BY_RANGE :Range STR_SORT_BY_POPULATION :Population STR_SORT_BY_RATING :Rating +STR_SORT_BY_NUM_VEHICLES :Number of vehicles +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Total profit last year +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Total profit this year +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Average profit last year +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Average profit this year + +# Group by options for vehicle list +STR_GROUP_BY_NONE :None +STR_GROUP_BY_SHARED_ORDERS :Shared orders # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pause game @@ -409,7 +417,7 @@ STR_FILE_MENU_EXIT :Exit # map menu STR_MAP_MENU_MAP_OF_WORLD :Map of world -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra viewport +STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend STR_MAP_MENU_SIGN_LIST :Sign list STR_MAP_MENU_WATCH_COMPANY :Watch Company @@ -577,8 +585,8 @@ STR_MONTH_DEC :December # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Key STR_GRAPH_KEY_TOOLTIP :{BLACK}Show key to graphs -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING2} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -613,7 +621,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Transport Coord STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Route Supervisor STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Director STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Chief Executive -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Chairman +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Chairperson STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :President STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Tycoon @@ -696,7 +704,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Click on STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top companies who reached {NUM} STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Company League Table in {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. -STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Businessman +STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Businessperson STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industrialist STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Capitalist @@ -748,6 +756,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Rough Land STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Grass Land STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Bare Land +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Rainforest STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Fields STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Trees STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Rocks @@ -779,6 +788,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Display STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Show last message or news report STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * PAUSED * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUSED (waiting for link graph update) * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * * @@ -893,7 +903,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Local authority of {TOWN} signs contract with {RAW_STRING} for one year of exclusive transport rights! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Viewport {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Change viewport STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copy the location of the main view to this viewport STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Change main view @@ -944,10 +954,11 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexican Peso (M STR_GAME_OPTIONS_CURRENCY_NTD :New Taiwan Dollar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indian Rupee (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Indonesian Rupiah (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringgit (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Road vehicles -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Select side of road for vehicles to drive on STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Drive on left STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Drive on right @@ -998,10 +1009,19 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Check th STR_GAME_OPTIONS_RESOLUTION :{BLACK}Screen resolution STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Select the screen resolution to use STR_GAME_OPTIONS_RESOLUTION_OTHER :other +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardware acceleration +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Check this box to allow OpenTTD to try to use hardware acceleration. A changed setting will only be applied upon game restart +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}The setting will only take effect after a game restart + +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Check this box to v-sync the screen. A changed setting will only be applied upon game restart. Only works with hardware acceleration enabled STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Interface size STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Select the interface element size to use +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(auto-detect) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Double size STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad size @@ -1009,10 +1029,19 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad size STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Font size STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Select the interface font size to use +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(auto-detect) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Double size STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad size +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Graphics + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Display refresh rate +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Select the screen refresh rate to use +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :other +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Refresh rates higher than 60Hz might impact performance. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base graphics set STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s} @@ -1107,6 +1136,8 @@ STR_TERRAIN_TYPE_FLAT :Flat STR_TERRAIN_TYPE_HILLY :Hilly STR_TERRAIN_TYPE_MOUNTAINOUS :Mountainous STR_TERRAIN_TYPE_ALPINIST :Alpinist +STR_TERRAIN_TYPE_CUSTOM :Custom height +STR_TERRAIN_TYPE_CUSTOM_VALUE :Custom height ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Permissive STR_CITY_APPROVAL_TOLERANT :Tolerant @@ -1188,9 +1219,11 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Toggle disaster STR_CONFIG_SETTING_CITY_APPROVAL :Town council's attitude towards area restructuring: {STRING2} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Choose how much noise and environmental damage by companies affect their town rating and further construction actions in their area -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximum map height: {STRING2} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Set the maximum allowed height for mountains on the map -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}You can't set the maximum map height to this value. At least one mountain on the map is higher +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Map height limit: {STRING2} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Set the maximum height of the map terrain. With "(auto)" a good value will be picked after terrain generation +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(auto) +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}You can't set the map height limit to this value. At least one mountain on the map is higher STR_CONFIG_SETTING_AUTOSLOPE :Allow landscaping under buildings, tracks, etc.: {STRING2} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Allow landscaping under buildings and tracks without removing them STR_CONFIG_SETTING_CATCHMENT :Allow more realistically sized catchment areas: {STRING2} @@ -1322,7 +1355,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from. STR_CONFIG_SETTING_LANDSCAPE :Landscape: {STRING2} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landscapes define basic gameplay scenarios with different cargos and town growth requirements. NewGRF and Game Scripts allow finer control though +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landscapes define basic gameplay scenarios with different cargoes and town growth requirements. NewGRF and Game Scripts allow finer control though STR_CONFIG_SETTING_LAND_GENERATOR :Land generator: {STRING2} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :The original generator depends on the base graphics set, and composes fixed landscape shapes. TerraGenesis is a Perlin noise based generator with finer control settings STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original @@ -1334,7 +1367,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Set how many in STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum distance from edge for Oil industries: {STRING2} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how far from the map border oil refineries and oil rigs can be constructed. On island maps this ensures they are near the coast. On maps larger than 256 tiles, this value is scaled up. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snow line height: {STRING2} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Control at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controls at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" +STR_CONFIG_SETTING_SNOW_COVERAGE :Snow coverage: {STRING2} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controls the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Land just above sea level is always without snow +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Desert coverage: {STRING2} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Control the approximate amount of desert on the tropical landscape. Desert also affects industry generation. Only used during map generation +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Roughness of terrain: {STRING2} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only) Choose the frequency of hills: Smooth landscapes have fewer, more wide-spread hills. Rough landscapes have many hills, which may look repetitive STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Very Smooth @@ -1449,9 +1488,15 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Keep the buildi STR_CONFIG_SETTING_PERSISTENT_DEPOTTOOLS :Keep depot building tools active after usage: {STRING2} STR_CONFIG_SETTING_PERSISTENT_DEPOTTOOLS_HELPTEXT :Keep the building tools for road, train and ship depots (reversible by placing with Ctrl). STR_CM_CONFIG_SETTING_IMPROVED_STATION_JOIN :Use improved station joining controls: {STRING2} -STR_CM_CONFIG_SETTING_IMPROVED_STATION_JOIN_HELPTEXT :Use Ctrl-click on station tile to select or deselect station to join. If station has no tiles Ctrl-click its sign. Ctrl-click empty tile for a new station. Also recently built station is automatically selected as a station to join. +STR_CM_CONFIG_SETTING_IMPROVED_STATION_JOIN_HELPTEXT :Use Ctrl-click on station tile to select or deselect station to join. If station has no tiles Ctrl-click its sign. Ctrl-click empty tile for a new station. Also recently built station is automatically selected as a station to join. {RED}Doesn't work if joining stations not directly adjacent(distant join) is not allowed in settings. STR_CONFIG_SETTING_EXPENSES_LAYOUT :Group expenses in company finance window: {STRING2} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Define the layout for the company expenses window +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatically remove signals during rail construction: {STRING2} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatically remove signals during rail construction if the signals are in the way. Note that this can potentially lead to train crashes. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Fast forward speed limit: {STRING2} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit on how fast the game goes when fast forward is enabled. 0 = no limit (as fast as your computer allows). Values below 100% slow the game down. The upper-limit depends on the specification of your computer and can vary depending on the game. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal game speed +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :No limit (as fast as your computer allows) STR_CONFIG_SETTING_SOUND_TICKER :News ticker: {STRING2} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Play sound for summarised news messages @@ -1565,8 +1610,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Scoring end yea STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Year the game ends for scoring purposes. At the end of this year, the company's score is recorded and the high-score screen is displayed, but the players can continue playing after that.{}If this is before the starting year, the high-score screen is never displayed. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Never -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Enable smooth economy (more, smaller changes): {STRING2} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :When enabled, industry production changes more often, and in smaller steps. This setting has usually no effect, if industry types are provided by a NewGRF +STR_CONFIG_SETTING_ECONOMY_TYPE :Economy type: {STRING2} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Smooth economy makes production changes more often, and in smaller steps. Frozen economy stops production changes and industry closures. This setting may have no effect if industry types are provided by a NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Smooth +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Frozen STR_CONFIG_SETTING_ALLOW_SHARES :Allow buying shares from other companies: {STRING2} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :When enabled, allow buying and selling of company shares. Shares will only be available for companies reaching a certain age STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum company age to trade shares: {STRING2} @@ -1618,9 +1666,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :In game placement of trees: {STRING2} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Control random appearance of trees during the game. This might affect industries which rely on tree growth, for example lumber mills -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :None {RED}(breaks lumber mill) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Only in rain forests -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Everywhere +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Grow but don't spread {RED}(breaks lumber mill) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Grow but only spread in rain forests +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Grow and spread everywhere +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Don't grow, don't spread {RED}(breaks lumber mill) STR_CONFIG_SETTING_TOOLBAR_POS :Position of main toolbar: {STRING2} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontal position of the main toolbar at the top of the screen @@ -1638,12 +1687,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :Maximum zoom in STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :The maximum zoom-in level for viewports. Note that enabling higher zoom-in levels increases memory requirements STR_CONFIG_SETTING_ZOOM_MAX :Maximum zoom out level: {STRING2} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :The maximum zoom-out level for viewports. Higher zoom-out levels might cause lag when used +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Highest resolution sprites to use: {STRING2} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limit the maximum resolution to use for sprites. Limiting sprite resolution will avoid using high resolution graphics even when available. This can help keep the game appearance unified when using a mix of GRF files with and without high resolution graphics. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normal STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Town growth speed: {STRING2} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Speed of town growth STR_CONFIG_SETTING_TOWN_GROWTH_NONE :None @@ -1687,6 +1741,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Whenever a spee STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Game units (tiles/day) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Vehicle power units: {STRING2} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Whenever a vehicle's power is shown in the user interface, show it in the selected units @@ -1796,6 +1851,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Out of memory STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Allocating {BYTES} of spritecache failed. The spritecache was reduced to {BYTES}. This will reduce the performance of OpenTTD. To reduce memory requirements you can try to disable 32bpp graphics and/or zoom-in levels +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}Error with video settings... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... no compatible GPU found. Hardware acceleration disabled + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1839,18 +1898,10 @@ STR_INTRO_TRANSLATION :{BLACK}This tra # Quit window STR_QUIT_CAPTION :{WHITE}Exit -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Are you sure you want to exit OpenTTD and return to {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Are you sure you want to exit OpenTTD? STR_QUIT_YES :{BLACK}Yes STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandon Game STR_ABANDON_GAME_QUERY :{YELLOW}Are you sure you want to abandon this game? @@ -1859,7 +1910,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Are you # Cheat window STR_CHEATS :{WHITE}Cheats STR_CHEATS_TOOLTIP :{BLACK}Checkboxes indicate if you have used this cheat before -STR_CHEATS_WARNING :{BLACK}Warning! You are about to betray your fellow competitors. Keep in mind that such a disgrace will be remembered for eternity +STR_CHEATS_NOTE :{BLACK}Note: any usage of these settings will be recorded by the savegame STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovable objects): {ORANGE}{STRING1} @@ -1971,10 +2022,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change t # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Advertised -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Yes STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}This is the name other players will identify you by @@ -2015,8 +2062,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Join gam STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Refresh server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Refresh the server info -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Find server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Search network for a server +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Search internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Search internet for public servers +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Search LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Search local area network for servers STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Add server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adds a server to the list which will always be checked for running games STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server @@ -2033,6 +2082,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Yes STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} @@ -2146,7 +2197,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company # Network client list STR_NETWORK_CLIENTLIST_KICK :Kick STR_NETWORK_CLIENTLIST_BAN :Ban -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Give money STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message @@ -2155,8 +2205,6 @@ STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectators -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password STR_COMPANY_PASSWORD_OK :{BLACK}Give the company the new password @@ -2243,11 +2291,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Game still paus STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Game still paused ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Game still paused ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Game still paused ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Game still paused ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Game unpaused ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :number of players STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :connecting clients STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manual STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :game script +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :waiting for link graph update ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :leaving STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {RAW_STRING} has joined the game @@ -2257,8 +2307,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {RAW_STRING STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {RAW_STRING} has started a new company (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {RAW_STRING} has left the game ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {RAW_STRING} has changed his/her name to {RAW_STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {RAW_STRING} gave your company {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** You gave {1:RAW_STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {RAW_STRING} gave {2:CURRENCY_LONG} to {1:RAW_STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}The server closed the session STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}The server is restarting...{}Please wait... STR_NETWORK_MESSAGE_KICKED :*** {RAW_STRING} was kicked. Reason: ({RAW_STRING}) @@ -2336,6 +2385,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Yes, download the graphics STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}No, exit OpenTTD +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Downloading failed +STR_MISSING_GRAPHICS_ERROR :{BLACK}Downloading graphics failed.{}Please download graphics manually. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Exit OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Transparency Options STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Toggle transparency for signs. Ctrl+Click to lock @@ -2377,6 +2430,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Build a STR_JOIN_WAYPOINT_CAPTION :{WHITE}Join waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Disabled as currently no vehicles are available for this infrastructure + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railway Construction STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railway Construction @@ -2569,13 +2625,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Size: {G STR_OBJECT_CLASS_LTHS :Lighthouses STR_OBJECT_CLASS_TRNS :Transmitters -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Trees STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Shift toggles building/showing cost estimate STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant single trees by dragging over the landscape. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Grove +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant small forests by dragging over the landscape. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Forest +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant large forests by dragging over the landscape. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Land Generation @@ -2626,12 +2688,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Random # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Fund new industry STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Choose the appropriate industry from this list -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Many random industries +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Create random industries STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cover the map with randomly placed industries +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Create random industries +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Are you sure you want to create many random industries? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Cost: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospect STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Build STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Fund +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Remove all industries +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Remove all industries currently present on the map +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Remove all industries +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Are you sure you want to remove all industries? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industry chain for {STRING} industry @@ -2652,6 +2720,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Select t # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Land Area Information +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centre the main view on tile location. Ctrl+Click opens a new viewport on tile location STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Cost to clear: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Cost to clear: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Revenue when cleared: {LTBLUE}{CURRENCY_LONG} @@ -2861,6 +2930,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter string: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overwrite File STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Are you sure you want to overwrite the existing file? +STR_SAVELOAD_DIRECTORY :{RAW_STRING} (Directory) +STR_SAVELOAD_PARENT_DIRECTORY :{RAW_STRING} (Parent directory) STR_SAVELOAD_OSKTITLE :{BLACK}Enter a name for the savegame @@ -2872,14 +2943,18 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}No. of towns: STR_MAPGEN_DATE :{BLACK}Date: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}No. of industries: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximum map height: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Increase the maximum height of mountains on the map by one -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Decrease the maximum height of mountains on the map by one -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Snow line height: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Move the snow line height one up -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Move the snow line height one down +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Highest peak: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Increase the maximum height of highest peak on the map by one +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Decrease the maximum height of highest peak on the map by one +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Snow coverage: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Increase snow coverage by ten percent +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Decrease snow coverage by ten percent +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Desert coverage: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Increase desert coverage by ten percent +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Decrease desert coverage by ten percent +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Land generator: -STR_MAPGEN_TREE_PLACER :{BLACK}Tree algorithm: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terrain type: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Sea level: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rivers: @@ -2904,8 +2979,10 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Heightma STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Size: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Change maximum map height -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Change snow line height +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Target peak height +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Highest peak +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Snow coverage (in %) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Desert coverage (in %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Change starting year # SE Map generation @@ -3122,6 +3199,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Toggle m # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Edit sign text +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centre the main view on sign location. Ctrl+Click opens a new viewport on sign location STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Go to next sign STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Go to previous sign @@ -3182,33 +3260,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Fund new buildi STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Buy exclusive transport rights STR_LOCAL_AUTHORITY_ACTION_BRIBE :Bribe the local authority -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Initiate a small local advertising campaign, to attract more passengers and cargo to your transport services.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Initiate a medium local advertising campaign, to attract more passengers and cargo to your transport services.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Initiate a large local advertising campaign, to attract more passengers and cargo to your transport services.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Fund the reconstruction of the urban road network. Causes considerable disruption to road traffic for up to 6 months.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Build a statue in honour of your company.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Fund the construction of new commercial buildings in the town.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Buy 1 year's exclusive transport rights in town. Town authority will only allow passengers and cargo to use your company's stations.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Initiate a small local advertising campaign, to attract more passengers and cargo to your transport services.{}Provides a temporary boost to station rating in a small radius around the town centre.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Initiate a medium local advertising campaign, to attract more passengers and cargo to your transport services.{}Provides a temporary boost to station rating in a medium radius around the town centre.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Initiate a large local advertising campaign, to attract more passengers and cargo to your transport services.{}Provides a temporary boost to station rating in a large radius around the town centre.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Fund the reconstruction of the urban road network.{}Causes considerable disruption to road traffic for up to 6 months.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Build a statue in honour of your company.{}Provides a permanent boost to station rating in this town.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Fund the construction of new buildings in the town.{}Provides a temporary boost to town growth in this town.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Buy 1 year's exclusive transport rights in town.{}Town authority will not allow passengers and cargo to use your competitors' stations.{}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Bribe the local authority to increase your rating, at the risk of a severe penalty if caught.{}Cost: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Goals STR_GOALS_SPECTATOR_CAPTION :{WHITE}Global Goals STR_GOALS_SPECTATOR :Global Goals -STR_GOALS_GLOBAL_TITLE :{BLACK}Global goals: +STR_GOALS_GLOBAL_BUTTON :{BLACK}Global +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Show global goals +STR_GOALS_COMPANY_BUTTON :{BLACK}Company +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Show company goals STR_GOALS_TEXT :{ORANGE}{RAW_STRING} STR_GOALS_NONE :{ORANGE}- None - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Not applicable - STR_GOALS_PROGRESS :{ORANGE}{RAW_STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{RAW_STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Company goals: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click on goal to centre main view on industry/town/tile. Ctrl+Click opens a new viewport on industry/town/tile location # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Question -STR_GOAL_QUESTION_CAPTION_INFORMATION :Information -STR_GOAL_QUESTION_CAPTION_WARNING :Warning -STR_GOAL_QUESTION_CAPTION_ERROR :Error +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Question +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Information +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Warning +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Error ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Cancel @@ -3398,6 +3477,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Relocate STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Rebuild company headquarters elsewhere for 1% cost of company value. Shift+Click shows estimated cost without relocating HQ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}View detailed infrastructure counts +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Give money +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Give money to this company STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}New Face STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Select new face for manager @@ -3415,6 +3496,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Sell 25% STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Company Name STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Manager's Name +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Enter the amount of money you want to give STR_BUY_COMPANY_MESSAGE :{WHITE}We are looking for a transport company to take-over our company.{}{}Do you want to purchase {COMPANY} for {CURRENCY_LONG}? @@ -3569,6 +3651,7 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Powered STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Refittable to: {GOLD}{STRING2} STR_PURCHASE_INFO_ALL_TYPES :All cargo types STR_PURCHASE_INFO_NONE :None +STR_PURCHASE_INFO_ENGINES_ONLY :Engines only STR_PURCHASE_INFO_ALL_BUT :All but {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Tractive Effort: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Range: {GOLD}{COMMA} tiles @@ -3775,10 +3858,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Make aut # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centre main view on train's location. Ctrl+Click will follow train in main view -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centre main view on vehicle's location. Ctrl+Click will follow vehicle in main view -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centre main view on ship's location. Ctrl+Click will follow ship in main view -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centre main view on aircraft's location. Ctrl+Click will follow aircraft in main view +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centre main view on train's location. Double click will follow train in main view. Ctrl+Click opens a new viewport on train's location +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centre main view on vehicle's location. Double click will follow vehicle in main view. Ctrl+Click opens a new viewport on vehicle's location +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centre main view on ship's location. Double click will follow ship in main view. Ctrl+Click opens a new viewport on ship's location +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centre main view on aircraft's location. Double click will follow aircraft in main view. Ctrl+Click opens a new viewport on aircraft's location STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send train to depot. Ctrl+Click will only service STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send vehicle to depot. Ctrl+Click will only service @@ -3810,10 +3893,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Show roa STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Show ship details STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Show aircraft details -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Current train action - click to stop/start train. Ctrl+Click to scroll to destination -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Current vehicle action - click to stop/start vehicle. Ctrl+Click to scroll to destination -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Current ship action - click to stop/start ship. Ctrl+Click to scroll to destination -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Current aircraft action - click to stop/start aircraft. Ctrl+Click to scroll to destination +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Current train action - click to stop/start train +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Current vehicle action - click to stop/start vehicle +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Current ship action - click to stop/start ship +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Current aircraft action - click to stop/start aircraft + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centre main view on order destination. Ctrl+Click opens a new viewport on the order destination's location # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Loading / Unloading @@ -3862,6 +3947,7 @@ STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit t STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Reliability: {LTBLUE}{COMMA}% {BLACK}Breakdowns since last service: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY_LONG} +STR_CM_VEHICLE_INFO_BUILT_VALUE_WITH_ID :{LTBLUE}{ENGINE} {BLACK}Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY_LONG}{BLACK} ID: {LTBLUE}{NUM} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Capacity: {LTBLUE}None{STRING} STR_VEHICLE_INFO_CAPACITY :{BLACK}Capacity: {LTBLUE}{CARGO_LONG}{3:STRING} STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Capacity: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) @@ -3886,7 +3972,9 @@ STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Name air # Extra buttons for train details windows STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY_LONG} +STR_CM_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE_WITH_ID :{LTBLUE}{ENGINE}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY_LONG}{BLACK} ID: {LTBLUE}{NUM} STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE :{LTBLUE}{ENGINE}{BLACK} Value: {LTBLUE}{CURRENCY_LONG} +STR_CM_VEHICLE_DETAILS_TRAIN_WAGON_VALUE_WITH_ID :{LTBLUE}{ENGINE}{BLACK} Value: {LTBLUE}{CURRENCY_LONG}{BLACK} ID: {LTBLUE}{NUM} STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT :{BLACK}Total cargo capacity of this train: STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) @@ -4041,6 +4129,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Refit to {STRI STR_ORDER_STOP_ORDER :(Stop) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING1} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Can't use station){POP_COLOUR} {STRING} {STATION} {STRING1} STR_ORDER_IMPLICIT :(Implicit) @@ -4285,6 +4374,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is mad STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :File not readable STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :File not writeable STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Data integrity check failed +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Savegame is made with a modified version STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Game was saved in version without tram support. All trams have been removed @@ -4312,6 +4402,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Only a f STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Huge screenshot STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}The screenshot will have a resolution of {COMMA} x {COMMA} pixels. Taking the screenshot may take a while. Do you want to continue? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Heightmap successfully saved as '{RAW_STRING}'. Highest peak is {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Screenshot successfully saved as '{RAW_STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Screenshot failed! @@ -4365,6 +4456,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... no l STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} required STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Can't repay loan... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Can't give away money that is loaned from the bank... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Can't give away money to this company... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Can't buy company... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Can't build company headquarters... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Can't buy 25% share in this company... @@ -4491,6 +4583,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Wrong depot typ STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is too long after replacement STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No autoreplace/renew rules applied STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(money limit) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}New vehicle can't carry {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}New vehicle can't do refit in order {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Impossible track combination @@ -4772,10 +4866,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :Sugar Mine ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Unnamed -STR_SV_TRAIN_NAME :Train {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Road Vehicle {COMMA} -STR_SV_SHIP_NAME :Ship {COMMA} -STR_SV_AIRCRAFT_NAME :Aircraft {COMMA} +STR_SV_TRAIN_NAME :Train #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Road Vehicle #{COMMA} +STR_SV_SHIP_NAME :Ship #{COMMA} +STR_SV_AIRCRAFT_NAME :Aircraft #{COMMA} STR_SV_STNAME :{STRING1} STR_SV_STNAME_NORTH :{STRING1} North @@ -5077,6 +5171,7 @@ STR_FORMAT_BUOY_NAME :{TOWN} Buoy STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Buoy #{COMMA} STR_FORMAT_COMPANY_NUM :(Company {COMMA}) STR_FORMAT_GROUP_NAME :Group {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} STR_FORMAT_WAYPOINT_NAME :{TOWN} Waypoint STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN} Waypoint #{COMMA} @@ -5334,23 +5429,6 @@ STR_TOOLBAR_COMMANDS_RANK_TOOLTIP :{BLACK}Show top STR_TOOLBAR_COMMANDS_ME_CAPTION :{BLACK}My Rank STR_TOOLBAR_COMMANDS_ME_TOOLTIP :{BLACK}Show your ranking position -#login window -STR_LOGINWINDOW_CAPTION :{WHITE}Login Window -STR_LOGINWINDOW_CITYMANIA :{BLACK}CityMania -STR_LOGINWINDOW_NICE :{BLACK}N-ice -STR_LOGINWINDOW_BTPRO :{BLACK}BTPro -STR_LOGINERROR_NOCONNECT :{WHITE}Failed to connect -STR_LOGINERROR_BADINPUT :{WHITE}Bad username or password -STR_LOGIN_USERNAME :{WHITE}Username -STR_LOGIN_PASSWORD :{WHITE}Password -STR_LOGIN_SET :{WHITE}Set -STR_LOGIN_NOTSET :{WHITE}Not Set -STR_LOGIN_CHANGE_USERNAME :{WHITE}Change username -STR_LOGIN_CHANGE_PASSWORD :{WHITE}Change password -STR_LOGIN_SEND_LOGIN_TT :{WHITE}Send Login - you must but on the correct community server -STR_LOGIN_USERNAME_DISPLAY :{WHITE}{RAW_STRING} -STR_LOGIN_PASSWORD_DISPLAY :{WHITE}{STRING} - #cargo table STR_TOOLBAR_CARGOS_HEADER_CARGO :{BLACK}Cargo Name STR_TOOLBAR_CARGOS_HEADER_AMOUNT :{BLACK}Amount @@ -5394,7 +5472,7 @@ STR_CB_ADVERT_REGULAR :{BLACK}Adv. Reg STR_CB_ADVERT_REGULAR_TT :{BLACK}Automatically advertise town whenever stations rating drops below a certain point STR_CB_POWERFUND :{BLACK}Powerfund STR_CB_ADVERT_REGULAR_RATING_TO_KEEP :{BLACK}Keep station rating at -STR_CB_POWERFUND_TT :{BLACK}Continiously funds town with maximum speed possible +STR_CB_POWERFUND_TT :{BLACK}Continuously funds town with maximum speed possible STR_TOWN_CB_FUNDING :{ORANGE}Funded for {YELLOW}{COMMA}{ORANGE} month{P "" s} STR_TOWN_CB_GROWING :{GREEN}Town is growing! @@ -5495,7 +5573,7 @@ STR_STATION_RATING_TOOLTIP_STATUE_NO :{GOLD}no, 0% STR_STATION_RATING_TOOLTIP_STATUE_YES :{GREEN}yes, +10% STR_IGNORE_VERSION_CHECK_WARNING : WARNING! You're about to join server running a different version of the game! -STR_IGNORE_VERSION_CHECK_WARNING_DETAILS : OpenTTD was never indended to work in such way. If you're lucky you may be able to play it but most likely something is going to break sooner or later. Desyncs or crashes are to be expected. So proceed at your own risk and don't report any errors you encounter there. +STR_IGNORE_VERSION_CHECK_WARNING_DETAILS : OpenTTD was never intended to work in such way. If you're lucky you may be able to play it but most likely something is going to break sooner or later. Desyncs or crashes are to be expected. So proceed at your own risk and don't report any errors you encounter there. STR_CM_STATION_BUILD_TOWN :{BLACK}Town: {GOLD}{TOWN} STR_CM_STATION_BUILD_TOWN_LARGE :{BLACK}Town: {GOLD}{TOWN} (L) STR_CM_STATION_BUILD_TOWN_MEDIUM :{BLACK}Town: {GOLD}{TOWN} (M) @@ -5503,7 +5581,7 @@ STR_CM_STATION_BUILD_TOWN_SMALL :{BLACK}Town: {GOLD}{TOWN} (S) STR_CM_CONFIG_SETTING_OPEN_VEHICLE_FOR_SHARED_CLONE :Open vehicle window for shared clones: {STRING2} STR_CM_CONFIG_SETTING_OPEN_VEHICLE_FOR_SHARED_CLONE_HELPTEXT :Open vehicle window when cloning vehicles with shared orders (as it does for non-shared ones) STR_CM_CONFIG_SETTING_OPEN_ORDERS_FOR_NEW_VEHICLES :Open orders window for new vehicles: {STRING2} -STR_CM_CONFIG_SETTING_OPEN_ORDERS_FOR_NEW_VEHICLES_HELPTEXT :Automatically open oreders windown along with a vehicle window for a new vehicles +STR_CM_CONFIG_SETTING_OPEN_ORDERS_FOR_NEW_VEHICLES_HELPTEXT :Automatically open orders window along with a vehicle window for a new vehicles STR_CM_PURCHASE_ENGINE_ID :{BLACK}Engine ID: {GOLD}{NUM} STR_CM_SMALLMAP_TOOLTIP_SHOW_IMBA_ON_MAP :{BLACK}Show industries on map combined with land contours and vegetation STR_CM_CONFIG_SETTING_PAUSE_AFTER_LOAD :Pause the game after loading: {STRING2} @@ -5523,27 +5601,53 @@ STR_CM_LAND_TOOLTIPS_INDUSTRY_CARGO :{WHITE}{STRING} {BLACK}{CARG STR_CM_LAND_TOOLTIPS_STATION_NAME :{LTBLUE}{STATION} STR_CM_LAND_TOOLTIPS_STATION_CARGO :{WHITE}{STRING} {BLACK}{CARGO_SHORT} {YELLOW}{NUM} % -STR_LAND_AREA_INFORMATION_POP :{BLACK}Population: {LTBLUE}{NUM} +STR_LAND_AREA_INFORMATION_POP :{BLACK}Population: {LTBLUE}{NUM} -STR_CM_CONFIG_SETTING_MODIFIER_FN : Additional function modifier key: {STRING2} -STR_CM_CONFIG_SETTING_MODIFIER_FN_HELPTEXT : Modifier key for accessing additional functions. -STR_CM_CONFIG_SETTING_MODIFIER_REMOVE : Remove modifier key: {STRING2} -STR_CM_CONFIG_SETTING_MODIFIER_REMOVE_HELPTEXT : Modifier key for removal mode on building tools. -STR_CM_CONFIG_SETTING_MODIFIER_ESTIMATE : Estimate modifier key: {STRING2} -STR_CM_CONFIG_SETTING_MODIFIER_ESTIMATE_HELPTEXT : Modifier key for estimating action cost. -STR_CM_CONFIG_SETTING_MODIFIER_NONE : None -STR_CM_CONFIG_SETTING_MODIFIER_SHIFT : Shift -STR_CM_CONFIG_SETTING_MODIFIER_CTRL : Ctrl -STR_CM_CONFIG_SETTING_MODIFIER_ALT : Alt +STR_CM_CONFIG_SETTING_MODIFIER_FN :Additional function modifier key: {STRING2} +STR_CM_CONFIG_SETTING_MODIFIER_FN_HELPTEXT :Modifier key for accessing additional functions. +STR_CM_CONFIG_SETTING_MODIFIER_REMOVE :Remove modifier key: {STRING2} +STR_CM_CONFIG_SETTING_MODIFIER_REMOVE_HELPTEXT :Modifier key for removal mode on building tools. +STR_CM_CONFIG_SETTING_MODIFIER_ESTIMATE :Estimate modifier key: {STRING2} +STR_CM_CONFIG_SETTING_MODIFIER_ESTIMATE_HELPTEXT :Modifier key for estimating action cost. +STR_CM_CONFIG_SETTING_MODIFIER_NONE :None +STR_CM_CONFIG_SETTING_MODIFIER_SHIFT :Shift +STR_CM_CONFIG_SETTING_MODIFIER_CTRL :Ctrl +STR_CM_CONFIG_SETTING_MODIFIER_ALT :Alt -STR_CM_CONFIG_SETTING_SHADED_TREES : Shaded trees: {STRING2} -STR_CM_CONFIG_SETTING_SHADED_TREES_HELPTEXT : Change tree brightness depending on a slope. Enhances visual appeal of mountaneous forests. -STR_CM_CONFIG_SETTING_SHADED_TREES_OFF : Always off -STR_CM_CONFIG_SETTING_SHADED_TREES_ON : Always on -STR_CM_CONFIG_SETTING_SHADED_TREES_SERVER : As server +STR_CM_CONFIG_SETTING_SHADED_TREES :Shaded trees: {STRING2} +STR_CM_CONFIG_SETTING_SHADED_TREES_HELPTEXT :Change tree brightness depending on a slope. Enhances visual appeal of mountainous forests. +STR_CM_CONFIG_SETTING_SHADED_TREES_OFF :Always off +STR_CM_CONFIG_SETTING_SHADED_TREES_ON :Always on +STR_CM_CONFIG_SETTING_SHADED_TREES_SERVER :As server -STR_CM_CONFIG_SETTING_SHOW_APM : Show APM counter: {STRING2} -STR_CM_CONFIG_SETTING_SHOW_APM_HELPTEXT : Adds APM (actions per minute) counter to the statusbar. -STR_CM_STATUSBAR_APM : {WHITE}APM: {NUM} AVG: {NUM} +STR_CM_CONFIG_SETTING_SHOW_APM :Show APM counter: {STRING2} +STR_CM_CONFIG_SETTING_SHOW_APM_HELPTEXT :Adds APM (actions per minute) counter to the statusbar. +STR_CM_STATUSBAR_APM :{WHITE}APM: {NUM} AVG: {NUM} + +STR_CM_STATION_BUILD_SUPPLIES :{BLACK}Supplies: {GOLD} + +STR_CM_CONFIG_SETTING_GRAPH_BACKGROUND :Graph background colour: {STRING2} +STR_CM_CONFIG_SETTING_GRAPH_BACKGROUND_HELPTEXT :Main background colour for the graph windows. Other related colours are changed accordingly. +STR_CM_CONFIG_SETTING_GRAPH_BACKGROUND_BLACK :Black +STR_CM_CONFIG_SETTING_GRAPH_BACKGROUND_GREY :Light grey + +# Community login window +STR_CM_LOGIN_WINDOW_CAPTION :{WHITE}Login Window +STR_CM_LOGIN_WINDOW_CITYMANIA :{BLACK}CityMania +STR_CM_LOGIN_WINDOW_NICE :{BLACK}N-ice +STR_CM_LOGIN_WINDOW_BTPRO :{BLACK}BTPro +STR_CM_LOGIN_ERROR_SIGN_IN_FAILED :{WHITE}Failed to connect +STR_CM_LOGIN_ERROR_BAD_INPUT :{WHITE}Bad username or password +STR_CM_LOGIN_WINDOW_USERNAME :{WHITE}Username +STR_CM_LOGIN_WINDOW_PASSWORD :{WHITE}Password +STR_CM_LOGIN_WINDOW_SET :{WHITE}Set +STR_CM_LOGIN_WINDOW_NOT_SET :{WHITE}Not Set +STR_CM_LOGIN_WINDOW_CHANGE_USERNAME :{WHITE}Change username +STR_CM_LOGIN_WINDOW_CHANGE_PASSWORD :{WHITE}Change password +STR_CM_LOGIN_WINDOW_CHANGE_USERNAME_HELPTEXT :{BLACK}Change username +STR_CM_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT :{BLACK}Change password +STR_CM_LOGIN_WINDOW_SIGN_IN_HELPTEXT :{BLACK}Sign in (you must be on the correct community server) +STR_CM_LOGIN_WINDOW_USERNAME_DISPLAY :{WHITE}{RAW_STRING} +STR_CM_LOGIN_WINDOW_PASSWORD_DISPLAY :{WHITE}{STRING} STR_CM_RAIL_TOOLBAR_TOOLTIP_BLUEPRINT : {BLACK}Rail blueprint tool (copy-paste) diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 412afd6db5..3c3c52cefb 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Wheat STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Sugar STR_CARGO_PLURAL_TOYS :Toys -STR_CARGO_PLURAL_CANDY :Lollies +STR_CARGO_PLURAL_SWEETS :Lollies STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Fairy Floss +STR_CARGO_PLURAL_CANDYFLOSS :Fairy Floss STR_CARGO_PLURAL_BUBBLES :Bubbles STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Batteries @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Wheat STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Sugar STR_CARGO_SINGULAR_TOY :Toy -STR_CARGO_SINGULAR_CANDY :lollies +STR_CARGO_SINGULAR_SWEETS :lollies STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Fairy Floss +STR_CARGO_SINGULAR_CANDYFLOSS :Fairy Floss STR_CARGO_SINGULAR_BUBBLE :Bubble STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Battery @@ -231,8 +231,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Select s STR_TOOLTIP_SORT_CRITERIA :{BLACK}Select sorting criteria STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Select filtering criteria STR_BUTTON_SORT_BY :{BLACK}Sort by -STR_BUTTON_LOCATION :{BLACK}Location -STR_BUTTON_RENAME :{BLACK}Rename STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Close window STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Window title - drag this to move window @@ -303,6 +301,8 @@ STR_SORT_BY_RANGE :Range STR_SORT_BY_POPULATION :Population STR_SORT_BY_RATING :Rating +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pause game STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Fast forward the game @@ -387,7 +387,7 @@ STR_FILE_MENU_EXIT :Exit # map menu STR_MAP_MENU_MAP_OF_WORLD :Map of world -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra viewport +STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend STR_MAP_MENU_SIGN_LIST :Sign list @@ -551,8 +551,8 @@ STR_MONTH_DEC :December # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Key STR_GRAPH_KEY_TOOLTIP :{BLACK}Show key to graphs -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -861,7 +861,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Local authority of {TOWN} signs contract with {STRING} for one year of exclusive transport rights! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Viewport {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copy to viewport STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copy the location of the main view to this viewport STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Paste from viewport @@ -909,8 +909,6 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Georgian Lari ( STR_GAME_OPTIONS_CURRENCY_IRR :Iranian Rial (IRR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Road vehicles -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Select side of road for vehicles to drive on STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Drive on left STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Drive on right @@ -966,6 +964,10 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :other + + + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base graphics set STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s} @@ -1486,8 +1488,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Full STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Coloured news appears in: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Year that the newspaper announcements get printed in colour. Before this year, it uses monochrome black/white STR_CONFIG_SETTING_STARTING_YEAR :Starting year: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Enable smooth economy (more, smaller changes): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :When enabled, industry production changes more often, and in smaller steps. This setting has usually no effect, if industry types are provided by a NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Allow buying shares from other companies: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :When enabled, allow buying and selling of company shares. Shares will only be available for companies reaching a certain age STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentage of leg profit to pay in feeder systems: {STRING} @@ -1533,9 +1533,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Allowed, custom STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :In game placement of trees: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Control random appearance of trees during the game. This might affect industries which rely on tree growth, for example lumber mills -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :None {RED}(breaks lumber mill) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Only in rain forests -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Everywhere STR_CONFIG_SETTING_TOOLBAR_POS :Position of main toolbar: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontal position of the main toolbar at the top of the screen @@ -1691,6 +1688,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Out of memory STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Allocating {BYTES} of spritecache failed. The spritecache was reduced to {BYTES}. This will reduce the performance of OpenTTD. To reduce memory requirements you can try to disable 32bpp graphics and/or zoom-in levels +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1731,18 +1730,9 @@ STR_INTRO_TRANSLATION :{BLACK}This tra # Quit window STR_QUIT_CAPTION :{WHITE}Exit -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Are you sure you want to exit OpenTTD and return to {STRING}? STR_QUIT_YES :{BLACK}Yes STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandon Game STR_ABANDON_GAME_QUERY :{YELLOW}Are you sure you want to abandon this game? @@ -1751,7 +1741,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Are you # Cheat window STR_CHEATS :{WHITE}Cheats STR_CHEATS_TOOLTIP :{BLACK}Checkboxes indicate if you have used this cheat before -STR_CHEATS_WARNING :{BLACK}Warning! You are about to betray your fellow competitors. Keep in mind that such a disgrace will be remembered for eternity STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovable objects): {ORANGE}{STRING} @@ -1860,10 +1849,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change t # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Advertised -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Yes STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}This is the name other players will identify you by @@ -1904,8 +1889,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Join gam STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Refresh server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Refresh the server info -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Find server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Search network for a server STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Add server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adds a server to the list which will always be checked for running games STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server @@ -1922,6 +1905,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Yes STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} @@ -2034,7 +2019,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company # Network client list STR_NETWORK_CLIENTLIST_KICK :Kick STR_NETWORK_CLIENTLIST_BAN :Ban -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Give money STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message @@ -2043,8 +2027,6 @@ STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectators -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password STR_COMPANY_PASSWORD_OK :{BLACK}Give the company the new password @@ -2144,8 +2126,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ha STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} has started a new company (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} has left the game ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} has changed his/her name to {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gave your company {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** You gave {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}The server closed the session STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}The server is restarting...{}Please wait... @@ -2222,6 +2202,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Yes, download the graphics STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}No, exit OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Transparency Options STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Toggle transparency for signs. Ctrl+Click to lock @@ -2262,6 +2243,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Build a STR_JOIN_WAYPOINT_CAPTION :{WHITE}Join waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railway Construction STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railway Construction @@ -2445,7 +2428,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Size: {G STR_OBJECT_CLASS_LTHS :Lighthouses STR_OBJECT_CLASS_TRNS :Transmitters -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Trees STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type @@ -2688,11 +2671,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}No. of towns: STR_MAPGEN_DATE :{BLACK}Date: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}No. of industries: -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Snow line height: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Move the snow line height one up -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Move the snow line height one down STR_MAPGEN_LAND_GENERATOR :{BLACK}Land generator: -STR_MAPGEN_TREE_PLACER :{BLACK}Tree algorithm: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terrain type: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Sea level: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rivers: @@ -2717,7 +2696,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Heightma STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Size: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Change snow line height STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Change starting year # SE Map generation @@ -2990,13 +2968,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Bribe t # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Goals STR_GOALS_SPECTATOR_CAPTION :{WHITE}Global Goals -STR_GOALS_GLOBAL_TITLE :{BLACK}Global goals: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- None - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Not applicable - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Company goals: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click on goal to centre main view on industry/town/tile. Ctrl+Click opens a new viewport on industry/town/tile location # Goal question window @@ -3505,10 +3480,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Make aut # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centre main view on train's location. Ctrl+Click will follow train in main view -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centre main view on vehicle's location. Ctrl+Click will follow vehicle in main view -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centre main view on ship's location. Ctrl+Click will follow ship in main view -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centre main view on aircraft's location. Ctrl+Click will follow aircraft in main view STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send train to depot. Ctrl+Click will only service STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send vehicle to depot. Ctrl+Click will only service @@ -3540,10 +3511,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Show roa STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Show ship details STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Show aircraft details -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Current train action - click to stop/start train. Ctrl+Click to scroll to destination -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Current vehicle action - click to stop/start vehicle. Ctrl+Click to scroll to destination -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Current ship action - click to stop/start ship. Ctrl+Click to scroll to destination -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Current aircraft action - click to stop/start aircraft. Ctrl+Click to scroll to destination + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Loading / Unloading diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 020c825a66..f32a4889eb 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Wheat STR_CARGO_PLURAL_RUBBER :Rubber STR_CARGO_PLURAL_SUGAR :Sugar STR_CARGO_PLURAL_TOYS :Toys -STR_CARGO_PLURAL_CANDY :Candy +STR_CARGO_PLURAL_SWEETS :Candy STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Cotton Candy +STR_CARGO_PLURAL_CANDYFLOSS :Cotton Candy STR_CARGO_PLURAL_BUBBLES :Bubbles STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Batteries @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Wheat STR_CARGO_SINGULAR_RUBBER :Rubber STR_CARGO_SINGULAR_SUGAR :Sugar STR_CARGO_SINGULAR_TOY :Toy -STR_CARGO_SINGULAR_CANDY :Candy +STR_CARGO_SINGULAR_SWEETS :Candy STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Cotton Candy +STR_CARGO_SINGULAR_CANDYFLOSS :Cotton Candy STR_CARGO_SINGULAR_BUBBLE :Bubble STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Battery @@ -194,6 +194,7 @@ STR_COLOUR_DEFAULT :Default STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}tiles/day STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp @@ -233,8 +234,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Select s STR_TOOLTIP_SORT_CRITERIA :{BLACK}Select sorting criteria STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Select filtering criteria STR_BUTTON_SORT_BY :{BLACK}Sort by -STR_BUTTON_LOCATION :{BLACK}Location -STR_BUTTON_RENAME :{BLACK}Rename STR_BUTTON_CATCHMENT :{BLACK}Coverage STR_TOOLTIP_CATCHMENT :{BLACK}Toggle coverage area display @@ -315,6 +314,15 @@ STR_SORT_BY_CARGO_CAPACITY :Cargo capacity STR_SORT_BY_RANGE :Range STR_SORT_BY_POPULATION :Population STR_SORT_BY_RATING :Rating +STR_SORT_BY_NUM_VEHICLES :Number of vehicles +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Total profit last year +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Total profit this year +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Average profit last year +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Average profit this year + +# Group by options for vehicle list +STR_GROUP_BY_NONE :None +STR_GROUP_BY_SHARED_ORDERS :Shared orders # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pause game @@ -403,7 +411,7 @@ STR_FILE_MENU_EXIT :Quit # map menu STR_MAP_MENU_MAP_OF_WORLD :Map of world -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra viewport +STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend STR_MAP_MENU_SIGN_LIST :Sign list @@ -569,8 +577,8 @@ STR_MONTH_DEC :December # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Key STR_GRAPH_KEY_TOOLTIP :{BLACK}Show key to graphs -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -605,7 +613,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Transport Coord STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Route Supervisor STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Director STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Chief Executive -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Chairman +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Chairperson STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :President STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Tycoon @@ -688,7 +696,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Click on STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top companies who reached {NUM} STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Company League Table in {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. -STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Businessman +STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Businessperson STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industrialist STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Capitalist @@ -740,6 +748,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Rough Land STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Grass Land STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Bare Land +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Rainforest STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Fields STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Trees STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Rocks @@ -771,6 +780,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Display STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Show last message or news report STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * PAUSED * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUSED (waiting for link graph update) * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * * @@ -885,7 +895,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Local authority of {TOWN} signs contract with {STRING} for one year of exclusive transport rights! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Viewport {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Change viewport STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copy the location of the main view to this viewport STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Change main view @@ -936,10 +946,11 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexican Peso (M STR_GAME_OPTIONS_CURRENCY_NTD :New Taiwan Dollar (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Chinese Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indian Rupee (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Indonesian Rupiah (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringgit (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Road vehicles -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Select side of road for vehicles to drive on STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Drive on left STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Drive on right @@ -990,10 +1001,19 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Check th STR_GAME_OPTIONS_RESOLUTION :{BLACK}Screen resolution STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Select the screen resolution to use STR_GAME_OPTIONS_RESOLUTION_OTHER :other +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardware acceleration +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Check this box to allow OpenTTD to try to use hardware acceleration. A changed setting will only be applied upon game restart +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}The setting will only take effect after a game restart + +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Check this box to v-sync the screen. A changed setting will only be applied upon game restart. Only works with hardware acceleration enabled STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Interface size STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Select the interface element size to use +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(auto-detect) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Double size STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad size @@ -1001,10 +1021,19 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad size STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Font size STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Select the interface font size to use +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(auto-detect) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Double size STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad size +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Graphics + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Display refresh rate +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Select the screen refresh rate to use +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :other +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Refresh rates higher than 60Hz might impact performance. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base graphics set STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s} @@ -1099,6 +1128,8 @@ STR_TERRAIN_TYPE_FLAT :Flat STR_TERRAIN_TYPE_HILLY :Hilly STR_TERRAIN_TYPE_MOUNTAINOUS :Mountainous STR_TERRAIN_TYPE_ALPINIST :Alpinist +STR_TERRAIN_TYPE_CUSTOM :Custom height +STR_TERRAIN_TYPE_CUSTOM_VALUE :Custom height ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Permissive STR_CITY_APPROVAL_TOLERANT :Tolerant @@ -1180,9 +1211,11 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Toggle disaster STR_CONFIG_SETTING_CITY_APPROVAL :Town council's attitude towards area restructuring: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Choose how much noise and environmental damage by companies affect their town rating and further construction actions in their area -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximum map height: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Set the maximum allowed height for mountains on the map -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}You can't set the maximum map height to this value. At least one mountain on the map is higher +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Map height limit: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Set the maximum height of the map terrain. With "(auto)" a good value will be picked after terrain generation +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(auto) +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}You can't set the map height limit to this value. At least one mountain on the map is higher STR_CONFIG_SETTING_AUTOSLOPE :Allow terraforming under buildings, tracks, etc.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Allow terraforming under buildings and tracks without removing them STR_CONFIG_SETTING_CATCHMENT :Allow more realistically sized catchment areas: {STRING} @@ -1310,6 +1343,7 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Show town popul STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Display the population of towns in their label on the map STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Thickness of lines in graphs: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Width of the line in the graphs. A thin line is more precisely readable, a thicker line is easier to see and colors are easier to distinguish +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF's name in the build vehicle window: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from. STR_CONFIG_SETTING_LANDSCAPE :Landscape: {STRING} @@ -1325,7 +1359,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Set how many in STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum distance from edge for Oil industries: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how far from the map border oil refineries and oil rigs can be constructed. On island maps this ensures they are near the coast. On maps larger than 256 tiles, this value is scaled up. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snow line height: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Control at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controls at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" +STR_CONFIG_SETTING_SNOW_COVERAGE :Snow coverage: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controls the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Land just above sea level is always without snow +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Desert coverage: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Control the approximate amount of desert on the tropical landscape. Desert also affects industry generation. Only used during map generation +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Roughness of terrain: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only) Choose the frequency of hills: Smooth landscapes have fewer, more wide-spread hills. Rough landscapes have many hills, which may look repetitive STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Very Smooth @@ -1439,6 +1479,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Keep building t STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Keep the building tools for bridges, tunnels, etc. open after use STR_CONFIG_SETTING_EXPENSES_LAYOUT :Group expenses in company finance window: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Define the layout for the company expenses window +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automatically remove signals during track construction: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatically remove signals during track construction if the signals are in the way. Note that this can potentially lead to train crashes. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Fast forward speed limit: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limit on how fast the game goes when fast forward is enabled. 0 = no limit (as fast as your computer allows). Values below 100% slow the game down. The upper-limit depends on the specification of your computer and can vary depending on the game. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% normal game speed +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :No limit (as fast as your computer allows) STR_CONFIG_SETTING_SOUND_TICKER :News ticker: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Play sound for summarized news messages @@ -1552,8 +1598,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Scoring end yea STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Year the game ends for scoring purposes. At the end of this year, the company's score is recorded and the high-score screen is displayed, but the players can continue playing after that.{}If this is before the starting year, the high-score screen is never displayed. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Never -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Enable smooth economy (more, smaller changes): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :When enabled, industry production changes more often, and in smaller steps. This setting has usually no effect, if industry types are provided by a NewGRF +STR_CONFIG_SETTING_ECONOMY_TYPE :Economy type: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Smooth economy makes production changes more often, and in smaller steps. Frozen economy stops production changes and industry closures. This setting may have no effect if industry types are provided by a NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Smooth +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Frozen STR_CONFIG_SETTING_ALLOW_SHARES :Allow buying shares from other companies: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :When enabled, allow buying and selling of company shares. Shares will only be available for companies reaching a certain age STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum company age to trade shares: {STRING} @@ -1605,9 +1654,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :In-game placement of trees: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Control random appearance of trees during the game. This might affect industries which rely on tree growth, for example lumber mills -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :None {RED}(breaks lumber mill) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Only in rain forests -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Everywhere +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Grow but don't spread {RED}(breaks lumber mill) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Grow but only spread in rain forests +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Grow and spread everywhere +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Don't grow, don't spread {RED}(breaks lumber mill) STR_CONFIG_SETTING_TOOLBAR_POS :Position of main toolbar: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontal position of the main toolbar at the top of the screen @@ -1625,12 +1675,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :Maximum zoom in STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :The maximum zoom-in level for viewports. Note that enabling higher zoom-in levels increases memory requirements STR_CONFIG_SETTING_ZOOM_MAX :Maximum zoom out level: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :The maximum zoom-out level for viewports. Higher zoom-out levels might cause lag when used +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Highest resolution sprites to use: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limit the maximum resolution to use for sprites. Limiting sprite resolution will avoid using high resolution graphics even when available. This can help keep the game appearance unified when using a mix of GRF files with and without high resolution graphics. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normal STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Town growth speed: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Speed of town growth STR_CONFIG_SETTING_TOWN_GROWTH_NONE :None @@ -1674,6 +1729,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Whenever a spee STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Game units (tiles/day) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Vehicle power units: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Whenever a vehicle's power is shown in the user interface, show it in the selected units @@ -1763,6 +1819,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Out of memory STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Allocating {BYTES} of spritecache failed. The spritecache was reduced to {BYTES}. This will reduce the performance of OpenTTD. To reduce memory requirements you can try to disable 32bpp graphics and/or zoom-in levels +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}Error with video settings... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... no compatible GPU found. Hardware acceleration disabled + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1806,18 +1866,10 @@ STR_INTRO_TRANSLATION :{BLACK}This tra # Quit window STR_QUIT_CAPTION :{WHITE}Quit -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Are you sure you want to quit OpenTTD and return to {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Are you sure you want to exit OpenTTD? STR_QUIT_YES :{BLACK}Yes STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandon Game STR_ABANDON_GAME_QUERY :{YELLOW}Are you sure you want to abandon this game? @@ -1826,7 +1878,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Are you # Cheat window STR_CHEATS :{WHITE}Cheats STR_CHEATS_TOOLTIP :{BLACK}Checkboxes indicate if you have used this cheat before -STR_CHEATS_WARNING :{BLACK}Warning! You are about to betray your fellow competitors. Keep in mind that such a disgrace will be remembered for eternity +STR_CHEATS_NOTE :{BLACK}Note: any usage of these settings will be recorded by the savegame STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Playing as company: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovable objects): {ORANGE}{STRING} @@ -1938,10 +1990,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change t # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Advertised -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Yes STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}This is the name other players will identify you by @@ -1982,8 +2030,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Join gam STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Refresh server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Refresh the server info -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Find server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Search network for a server +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Search internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Search internet for public servers +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Search LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Search local area network for servers STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Add server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adds a server to the list which will always be checked for running games STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start server @@ -2000,6 +2050,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Yes STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} @@ -2113,7 +2165,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company # Network client list STR_NETWORK_CLIENTLIST_KICK :Kick STR_NETWORK_CLIENTLIST_BAN :Ban -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Give money STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message @@ -2122,8 +2173,6 @@ STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectators -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password STR_COMPANY_PASSWORD_OK :{BLACK}Give the company the new password @@ -2168,6 +2217,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Wrong pa STR_NETWORK_ERROR_SERVER_FULL :{WHITE}The server is full STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}You are banned from this server STR_NETWORK_ERROR_KICKED :{WHITE}You were kicked out of the game +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Reason: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Cheating is not allowed on this server STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}You were sending too many commands to the server STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}You took too long to enter the password @@ -2209,11 +2259,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Game still paus STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Game still paused ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Game still paused ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Game still paused ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Game still paused ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Game unpaused ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :number of players STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :connecting clients STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manual STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :game script +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :waiting for link graph update ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :leaving STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} has joined the game @@ -2223,10 +2275,10 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ha STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} has started a new company (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} has left the game ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} has changed his/her name to {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gave your company {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** You gave {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gave {2:CURRENCY_LONG} to {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}The server closed the session STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}The server is restarting...{}Please wait... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} was kicked. Reason: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Content downloading @@ -2301,6 +2353,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Yes, download the graphics STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}No, quit OpenTTD +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Downloading failed +STR_MISSING_GRAPHICS_ERROR :{BLACK}Downloading graphics failed.{}Please download graphics manually. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Exit OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Transparency Options STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Toggle transparency for signs. Ctrl+Click to lock @@ -2342,6 +2398,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Build a STR_JOIN_WAYPOINT_CAPTION :{WHITE}Join waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Build a separate waypoint +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Disabled as currently no vehicles are available for this infrastructure + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Railroad Construction STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railroad Construction @@ -2529,13 +2588,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Size: {G STR_OBJECT_CLASS_LTHS :Lighthouses STR_OBJECT_CLASS_TRNS :Transmitters -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Trees STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Shift toggles building/showing cost estimate STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plant single trees by dragging over the landscape. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Grove +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plant small forests by dragging over the landscape. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Forest +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plant large forests by dragging over the landscape. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Land Generation @@ -2586,12 +2651,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Random # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Fund new industry STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Choose the appropriate industry from this list -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Many random industries +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Create random industries STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cover the map with randomly placed industries +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Create random industries +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Are you sure you want to create many random industries? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Cost: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospect STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Build STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Fund +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Remove all industries +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Remove all industries currently present on the map +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Remove all industries +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Are you sure you want to remove all industries? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industry chain for {STRING} industry @@ -2612,6 +2683,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Select t # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Land Area Information +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Center the main view on tile location. Ctrl+Click opens a new viewport on tile location STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Cost to clear: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Cost to clear: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Revenue when cleared: {LTBLUE}{CURRENCY_LONG} @@ -2821,6 +2893,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter string: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overwrite File STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Are you sure you want to overwrite the existing file? +STR_SAVELOAD_DIRECTORY :{STRING} (Directory) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Parent directory) STR_SAVELOAD_OSKTITLE :{BLACK}Enter a name for the savegame @@ -2832,14 +2906,18 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}No. of towns: STR_MAPGEN_DATE :{BLACK}Date: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}No. of industries: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximum map height: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Increase the maximum height of mountains on the map by one -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Decrease the maximum height of mountains on the map by one -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Snow line height: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Move the snow line height up one -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Move the snow line height down one +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Highest peak: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Increase the maximum height of highest peak on the map by one +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Decrease the maximum height of highest peak on the map by one +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Snow coverage: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Increase snow coverage by ten percent +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Decrease snow coverage by ten percent +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Desert coverage: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Increase desert coverage by ten percent +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Decrease desert coverage by ten percent +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Land generator: -STR_MAPGEN_TREE_PLACER :{BLACK}Tree algorithm: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terrain type: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Sea level: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rivers: @@ -2864,8 +2942,10 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Heightma STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Size: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Change maximum map height -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Change snow line height +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Target peak height +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Highest peak +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Snow coverage (in %) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Desert coverage (in %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Change starting year # SE Map generation @@ -3082,6 +3162,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Toggle m # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Edit sign text +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Center the main view on sign location. Ctrl+Click opens a new viewport on sign location STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Go to next sign STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Go to previous sign @@ -3142,33 +3223,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Fund new buildi STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Buy exclusive transport rights STR_LOCAL_AUTHORITY_ACTION_BRIBE :Bribe the local authority -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Initiate a small local advertising campaign, to attract more passengers and cargo to your transport services.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Initiate a medium local advertising campaign, to attract more passengers and cargo to your transport services.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Initiate a large local advertising campaign, to attract more passengers and cargo to your transport services.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Fund the reconstruction of the urban road network. Causes considerable disruption to road traffic for up to 6 months.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Build a statue in honor of your company.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Fund the construction of new commercial buildings in the town.{}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Buy 1 year's exclusive transport rights in town. Town authority will only allow passengers and cargo to use your company's stations.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Initiate a small local advertising campaign, to attract more passengers and cargo to your transport services.{}Provides a temporary boost to station rating in a small radius around the town center.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Initiate a medium local advertising campaign, to attract more passengers and cargo to your transport services.{}Provides a temporary boost to station rating in a medium radius around the town center.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Initiate a large local advertising campaign, to attract more passengers and cargo to your transport services.{}Provides a temporary boost to station rating in a large radius around the town center.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Fund the reconstruction of the urban road network.{}Causes considerable disruption to road traffic for up to 6 months.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Build a statue in honor of your company.{}Provides a permanent boost to station rating in this town.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Fund the construction of new buildings in the town.{}Provides a temporary boost to town growth in this town.{}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Buy 1 year's exclusive transport rights in town.{}Town authority will not allow passengers and cargo to use your competitors' stations.{}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Bribe the local authority to increase your rating, at the risk of a severe penalty if caught.{}Cost: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Goals STR_GOALS_SPECTATOR_CAPTION :{WHITE}Global Goals STR_GOALS_SPECTATOR :Global Goals -STR_GOALS_GLOBAL_TITLE :{BLACK}Global goals: +STR_GOALS_GLOBAL_BUTTON :{BLACK}Global +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Show global goals +STR_GOALS_COMPANY_BUTTON :{BLACK}Company +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Show company goals STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- None - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Not applicable - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Company goals: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click on goal to center main view on industry/town/tile. Ctrl+Click opens a new viewport on industry/town/tile location # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Question -STR_GOAL_QUESTION_CAPTION_INFORMATION :Information -STR_GOAL_QUESTION_CAPTION_WARNING :Warning -STR_GOAL_QUESTION_CAPTION_ERROR :Error +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Question +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Information +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Warning +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Error ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Cancel @@ -3358,6 +3440,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Relocate STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Rebuild company headquarters elsewhere for 1% cost of company value. Shift+Click shows estimated cost without relocating HQ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}View detailed infrastructure counts +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Give money +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Give money to this company STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}New Face STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Select new face for president @@ -3375,6 +3459,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Sell 25% STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Company Name STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :President's Name +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Enter the amount of money you want to give STR_BUY_COMPANY_MESSAGE :{WHITE}We are looking for a transport company to take-over our company.{}{}Do you want to purchase {COMPANY} for {CURRENCY_LONG}? @@ -3394,8 +3479,17 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industries STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- None - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transported){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} and {NUM} more... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industry names - click on name to center main view on industry. Ctrl+Click opens a new viewport on industry location +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Accepted cargo: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produced cargo: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :All cargo types +STR_INDUSTRY_DIRECTORY_FILTER_NONE :None # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3520,6 +3614,7 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Powered STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Refittable to: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :All cargo types STR_PURCHASE_INFO_NONE :None +STR_PURCHASE_INFO_ENGINES_ONLY :Engines only STR_PURCHASE_INFO_ALL_BUT :All but {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Tractive Effort: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Range: {GOLD}{COMMA} tiles @@ -3726,10 +3821,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Make aut # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Center main view on train's location. Ctrl+Click will follow train in main view -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Center main view on vehicle's location. Ctrl+Click will follow vehicle in main view -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Center main view on ship's location. Ctrl+Click will follow ship in main view -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Center main view on aircraft's location. Ctrl+Click will follow aircraft in main view +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Center main view on train's location. Double click will follow train in main view. Ctrl+Click opens a new viewport on train's location +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Center main view on vehicle's location. Double click will follow vehicle in main view. Ctrl+Click opens a new viewport on vehicle's location +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Center main view on ship's location. Double click will follow ship in main view. Ctrl+Click opens a new viewport on ship's location +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Center main view on aircraft's location. Double click will follow aircraft in main view. Ctrl+Click opens a new viewport on aircraft's location STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send train to depot. Ctrl+Click will only service STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Send vehicle to depot. Ctrl+Click will only service @@ -3761,10 +3856,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Show roa STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Show ship details STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Show aircraft details -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Current train action - click to stop/start train. Ctrl+Click to scroll to destination -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Current vehicle action - click to stop/start vehicle. Ctrl+Click to scroll to destination -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Current ship action - click to stop/start ship. Ctrl+Click to scroll to destination -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Current aircraft action - click to stop/start aircraft. Ctrl+Click to scroll to destination +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Current train action - click to stop/start train +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Current vehicle action - click to stop/start vehicle +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Current ship action - click to stop/start ship +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Current aircraft action - click to stop/start aircraft + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Center main view on order destination. Ctrl+Click opens a new viewport on the order destination's location # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Loading / Unloading @@ -3992,6 +4089,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Refit to {STRI STR_ORDER_STOP_ORDER :(Stop) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Can't use station){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Implicit) @@ -4236,6 +4334,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is mad STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :File not readable STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :File not writable STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Data integrity check failed +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Savegame is made with a modified version STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Game was saved in version without streetcar support. All streetcars have been removed @@ -4263,6 +4362,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Only a f STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Huge screenshot STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}The screenshot will have a resolution of {COMMA} x {COMMA} pixels. Taking the screenshot may take a while. Do you want to continue? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Heightmap successfully saved as '{STRING}'. Highest peak is {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Screenshot successfully saved as '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Screenshot failed! @@ -4316,6 +4416,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... no l STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} required STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Can't repay loan... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Can't give away money that is loaned from the bank... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Can't give away money to this company... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Can't buy company... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Can't build company headquarters... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Can't buy 25% share in this company... @@ -4442,6 +4543,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Wrong depot typ STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is too long after replacement STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}No autoreplace/renew rules applied STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(money limit) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}New vehicle can't carry {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}New vehicle can't do refit in order {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Impossible track combination @@ -4723,10 +4826,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :Sugar Mine ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Unnamed -STR_SV_TRAIN_NAME :Train {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Road Vehicle {COMMA} -STR_SV_SHIP_NAME :Ship {COMMA} -STR_SV_AIRCRAFT_NAME :Aircraft {COMMA} +STR_SV_TRAIN_NAME :Train #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Road Vehicle #{COMMA} +STR_SV_SHIP_NAME :Ship #{COMMA} +STR_SV_AIRCRAFT_NAME :Aircraft #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} North @@ -5028,6 +5131,7 @@ STR_FORMAT_BUOY_NAME :{TOWN} Buoy STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Buoy #{COMMA} STR_FORMAT_COMPANY_NUM :(Company {COMMA}) STR_FORMAT_GROUP_NAME :Group {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} STR_FORMAT_WAYPOINT_NAME :{TOWN} Waypoint STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN} Waypoint #{COMMA} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index ba7a07f802..c8893d3ab4 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Tritiko STR_CARGO_PLURAL_RUBBER :Kaŭĉuko STR_CARGO_PLURAL_SUGAR :Sukero STR_CARGO_PLURAL_TOYS :Ludiloj -STR_CARGO_PLURAL_CANDY :Dolĉaĵoj +STR_CARGO_PLURAL_SWEETS :Dolĉaĵoj STR_CARGO_PLURAL_COLA :Kolao -STR_CARGO_PLURAL_COTTON_CANDY :Sukerŝpinaĵoj +STR_CARGO_PLURAL_CANDYFLOSS :Sukerŝpinaĵoj STR_CARGO_PLURAL_BUBBLES :Vezikoj STR_CARGO_PLURAL_TOFFEE :Tofeoj STR_CARGO_PLURAL_BATTERIES :Baterioj @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Tritiko STR_CARGO_SINGULAR_RUBBER :Kaŭĉuko STR_CARGO_SINGULAR_SUGAR :Sukero STR_CARGO_SINGULAR_TOY :Ludilo -STR_CARGO_SINGULAR_CANDY :Dolĉaĵo +STR_CARGO_SINGULAR_SWEETS :Dolĉaĵo STR_CARGO_SINGULAR_COLA :Kolao -STR_CARGO_SINGULAR_COTTON_CANDY :Sukerŝpinaĵo +STR_CARGO_SINGULAR_CANDYFLOSS :Sukerŝpinaĵo STR_CARGO_SINGULAR_BUBBLE :Veziko STR_CARGO_SINGULAR_TOFFEE :Tofeo STR_CARGO_SINGULAR_BATTERY :Baterio @@ -232,8 +232,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Elektu v STR_TOOLTIP_SORT_CRITERIA :{BLACK}Elektu ordigaj kondiĉoj STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selektu kriteriojn por filtrado STR_BUTTON_SORT_BY :{BLACK}Ordigu laŭ -STR_BUTTON_LOCATION :{BLACK}Loko -STR_BUTTON_RENAME :{BLACK}Alinomi STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fermu fenestron STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Fenestra titolo - tiru por movi la fenestron @@ -304,6 +302,8 @@ STR_SORT_BY_CARGO_CAPACITY :Ŝarĝkapablo STR_SORT_BY_RANGE :Atingopovo STR_SORT_BY_POPULATION :Enloĝantaro +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Paŭzigu la ludon STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Rapide pluirigu la ludon @@ -389,7 +389,7 @@ STR_FILE_MENU_EXIT :Fermu # map menu STR_MAP_MENU_MAP_OF_WORLD :Mondomapo -STR_MAP_MENU_EXTRA_VIEW_PORT :Plia vidujo +STR_MAP_MENU_EXTRA_VIEWPORT :Plia vidujo STR_MAP_MENU_LINGRAPH_LEGEND :Legendo de ŝarĝfluo STR_MAP_MENU_SIGN_LIST :Afiŝa listo @@ -553,8 +553,8 @@ STR_MONTH_DEC :Decembro # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Ŝlosilo STR_GRAPH_KEY_TOOLTIP :{BLACK}Montru ŝlosilon al grafikoj -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -856,7 +856,7 @@ STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transporta monopolo! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vidujo {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vidujo {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopiu al vidujo STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopiu la lokon de la ĉefvido al ĉi tiu vidujo STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Gluu de vidujo @@ -901,8 +901,6 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Kartvela Lario STR_GAME_OPTIONS_CURRENCY_IRR :Irana Rialo (IRR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Stratveturiloj -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Elektu stratflankon kie veturu veturiloj STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Veturu maldekstre STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Veturu dekstre @@ -954,6 +952,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Ekrana m STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Elektu uzotan ekranan montrograndon STR_GAME_OPTIONS_RESOLUTION_OTHER :alia + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Interfacgrandeco STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normala @@ -962,6 +962,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Kvaroble grande + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Baza grafikaro STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selektu la uzendan bazgrafikaron STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} mankanta{P "" j}/koruptita{P "" j} dosiero{P "" j} @@ -1297,7 +1299,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Plene STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Koloraj novaĵoj aperas en: {STRING} STR_CONFIG_SETTING_STARTING_YEAR :Komenca jaro: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktivigu glatan ekonomion (pliaj, etaj ŝanĝoj): {STRING} STR_CONFIG_SETTING_ALLOW_SHARES :Permesu aĉetadon de dividaĵoj en aliaj kompanioj: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Aŭtomate konstruu semaforojn antaŭ: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Ebligu la signal-GUI-on: {STRING} @@ -1325,9 +1326,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :permesate STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :permesate, kutimo urbomapo STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :En ludo metanta de arbojn: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :neniu {RED}(rompas ligno muelilo) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :nur en tropika praarbaroj -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Ĉie STR_CONFIG_SETTING_TOOLBAR_POS :Loko de ĉefa ilbreto: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS :Loko de kondiĉbaro: {STRING} @@ -1373,6 +1371,8 @@ STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Ŝanĝu # Config errors +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1413,18 +1413,9 @@ STR_INTRO_TRANSLATION :{BLACK}Ĉi tiu # Quit window STR_QUIT_CAPTION :{WHITE}Forlasi -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Ĉu vi vere volas fermi la ludon kaj reiri al {STRING}? STR_QUIT_YES :{BLACK}Jes STR_QUIT_NO :{BLACK}Ne -# Supported OSes -STR_OSNAME_WINDOWS :Vindozo -STR_OSNAME_UNIX :Unikso -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Foriri de la ludo STR_ABANDON_GAME_QUERY :{YELLOW}Ĉu vi certas ke vi volas foriri? @@ -1433,7 +1424,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Ĉu vi # Cheat window STR_CHEATS :{WHITE}Filudaĵoj STR_CHEATS_TOOLTIP :{BLACK}La kvadratetoj indikas ĉu vi jam uzis la filudaĵon antaŭe. -STR_CHEATS_WARNING :{BLACK}Atentu! Vi preskaŭ perfidos viajn kunulajn konkurantojn. Memoru ke io tia rememoriĝos eterne STR_CHEAT_MONEY :{LTBLUE}Altigu monkvanton per {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Ludanta kiel kompanio: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magia forigilo (forviŝu industriojn, nemovebla objektoj): {ORANGE}{STRING} @@ -1582,8 +1572,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Aliĝu a STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Refreŝigu servilon STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Refreŝigu servilajn informojn -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Trovu servilon -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Serĉu reton por servilo STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Aldonu servilon STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Aldonas servilon al la listo kiu ĉiam estos kontrolata pri kurantaj ludoj STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Startu servilon @@ -1710,7 +1698,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova kompanio # Network client list STR_NETWORK_CLIENTLIST_KICK :Forbatu STR_NETWORK_CLIENTLIST_BAN :Bari -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Donu monon STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parolu al ĉiuj STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parolu al kompanio STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privata mesaĝo @@ -1719,8 +1706,6 @@ STR_NETWORK_SERVER :Servilo STR_NETWORK_CLIENT :Kliento STR_NETWORK_SPECTATORS :Spektantoj -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Tajpu kiom da mono vi volas doni - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ne konservu la pasvorton. STR_COMPANY_PASSWORD_OK :{BLACK}Donu la novan pasvorton al la kompanio. @@ -1808,8 +1793,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} i STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ekis novan kompanion (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} ĉesis la ludon ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} ŝanĝis sian nomon al {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} donis al via kompanio {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Vi donis {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}La servilo fermis la seancon STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}La servilo restartiĝas...{}Bonvolu atendi... @@ -1879,6 +1862,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Jes, elŝuti la grafikojn STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Ne, fermi OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Ebloj por travidebleco STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Baskuligi travideblecon de signoj. Ctrl+Klak por ŝlosi @@ -1911,6 +1895,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Konstru STR_JOIN_WAYPOINT_CAPTION :{WHITE}Ligi vojpunkton STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Krei apartan vojpunkton +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Konstruado de Fervojo STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Konstruado de Elektrofervojo @@ -2074,7 +2060,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Grandeco STR_OBJECT_CLASS_LTHS :Lumturoj STR_OBJECT_CLASS_TRNS :Transigantoj -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Arboj STR_PLANT_TREE_TOOLTIP :{BLACK}Elektu arbo-tipon por planti. Kiam la regiono jam havas arbojn, aliaj arb-tipoj plantiĝos STR_TREES_RANDOM_TYPE :{BLACK}Arboj de hazardaj tipoj @@ -2292,11 +2278,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Kiom da urboj: STR_MAPGEN_DATE :{BLACK}Dato: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Kiom da industrioj: -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Neĝlinia alteco: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Altigu la neĝlinion per unu -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Malaltigu la neĝlinion per unu STR_MAPGEN_LAND_GENERATOR :{BLACK}Landgenerilo: -STR_MAPGEN_TREE_PLACER :{BLACK}Arba algoritmo: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terentipo: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Marnivelo: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Riveroj: @@ -2321,7 +2303,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Mapa nom STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Grandeco: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Ŝanĝu altecon de la neĝlinio STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Ŝanĝu komencjaron # SE Map generation @@ -2981,10 +2962,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Ĉe aŭt # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centre vidu trajnan lokon en la ĉefvido. Ctrl+klak sekvas trajnon en la ĉefvido -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centre vidu la veturilon en la ĉefvido. Ctrl+klak sekvas veturlilon en la ĉefvido -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centre vidu ŝipon en ĉefvido. Ctrl+klak sekvas ŝipon en la ĉefvido -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centre vidu aviadilon en la ĉefvido. Ctrl-klak sekvas aviadilon en la ĉefvido STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Sendi trajnon al garaĝo. Stir+Klak nur prizorgos STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Sendi veturilon al garaĝo. Stir+Klak nur prizorgos @@ -3016,10 +2993,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Montru s STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Montru ŝipajn detalojn STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Montru aviadilajn detalojn -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Nuna trajna ago - klaku por haltigi/starti la trajnon. Ctrl+klak rulumas al trajncelo -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Nuna veturila ago - klaku ĉi tie por haltigi/starti veturilon. Ctrl+klak rulumas al veturilcelo -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Nuna ŝipa ago - klaku ĉi tie por haltigi/starti ŝipon. Ctrl+klak rulumas al ŝipcelo -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Nuna aviadila ago - klaku ĉi tie por haltigi/starti aviadilon. Ctrl+klak rulumas al aviadilcelo + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Ŝarĝante / Deŝarĝante diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 5f9b3e4455..2f6ac4b7cc 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -46,8 +46,8 @@ STR_CARGO_PLURAL_IRON_ORE :Rauamaak STR_CARGO_PLURAL_IRON_ORE.g :Rauamaagi STR_CARGO_PLURAL_STEEL :Teras STR_CARGO_PLURAL_STEEL.g :Terase -STR_CARGO_PLURAL_VALUABLES :Väärisasjad -STR_CARGO_PLURAL_VALUABLES.g :Väärisasjade +STR_CARGO_PLURAL_VALUABLES :Väärisesemed +STR_CARGO_PLURAL_VALUABLES.g :Väärisesemete STR_CARGO_PLURAL_COPPER_ORE :Vasemaak STR_CARGO_PLURAL_COPPER_ORE.g :Vasemaagi STR_CARGO_PLURAL_MAIZE :Mais @@ -72,12 +72,12 @@ STR_CARGO_PLURAL_SUGAR :Suhkur STR_CARGO_PLURAL_SUGAR.g :Suhkru STR_CARGO_PLURAL_TOYS :Mänguasjad STR_CARGO_PLURAL_TOYS.g :Mänguasjade -STR_CARGO_PLURAL_CANDY :Maiustused -STR_CARGO_PLURAL_CANDY.g :Maiustuste +STR_CARGO_PLURAL_SWEETS :Maiustused +STR_CARGO_PLURAL_SWEETS.g :Maiustuste STR_CARGO_PLURAL_COLA :Koola STR_CARGO_PLURAL_COLA.g :Koola -STR_CARGO_PLURAL_COTTON_CANDY :Suhkruvatt -STR_CARGO_PLURAL_COTTON_CANDY.g :Suhkruvati +STR_CARGO_PLURAL_CANDYFLOSS :Suhkruvatt +STR_CARGO_PLURAL_CANDYFLOSS.g :Suhkruvati STR_CARGO_PLURAL_BUBBLES :Mullid STR_CARGO_PLURAL_BUBBLES.g :Mullide STR_CARGO_PLURAL_TOFFEE :Iiris @@ -137,9 +137,9 @@ STR_CARGO_SINGULAR_SUGAR :Suhkur STR_CARGO_SINGULAR_SUGAR.g :Suhkru STR_CARGO_SINGULAR_TOY :Mänguasjad STR_CARGO_SINGULAR_TOY.g :Mänguasjade -STR_CARGO_SINGULAR_CANDY :Maiustus +STR_CARGO_SINGULAR_SWEETS :Maiustus STR_CARGO_SINGULAR_COLA :Koola -STR_CARGO_SINGULAR_COTTON_CANDY :Suhkruvatt +STR_CARGO_SINGULAR_CANDYFLOSS :Suhkruvatt STR_CARGO_SINGULAR_BUBBLE :Mullid STR_CARGO_SINGULAR_TOFFEE :Iiris STR_CARGO_SINGULAR_TOFFEE.g :Iirise @@ -160,7 +160,7 @@ STR_QUANTITY_GRAIN :{WEIGHT_LONG} t STR_QUANTITY_WOOD :{WEIGHT_LONG} puitu STR_QUANTITY_IRON_ORE :{WEIGHT_LONG} rauamaaki STR_QUANTITY_STEEL :{WEIGHT_LONG} terast -STR_QUANTITY_VALUABLES :{COMMA} kotitäi{P s t} väärisasju +STR_QUANTITY_VALUABLES :{COMMA}{NBSP}kotitäi{P s t} väärisesemeid STR_QUANTITY_COPPER_ORE :{WEIGHT_LONG} vasemaaki STR_QUANTITY_MAIZE :{WEIGHT_LONG} maisi STR_QUANTITY_FRUIT :{WEIGHT_LONG} puuvilju @@ -173,7 +173,7 @@ STR_QUANTITY_WHEAT :{WEIGHT_LONG} n STR_QUANTITY_RUBBER :{VOLUME_LONG} kummi STR_QUANTITY_SUGAR :{WEIGHT_LONG} suhkrut STR_QUANTITY_TOYS :{COMMA} mänguas{P i ja} -STR_QUANTITY_SWEETS :{COMMA} kontitäi{P s t} maiustusi +STR_QUANTITY_SWEETS :{COMMA}{NBSP}kotitäi{P s t} maiustusi STR_QUANTITY_COLA :{VOLUME_LONG} koolat STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} suhkruvatti STR_QUANTITY_BUBBLES :{COMMA} mull{P "" i} @@ -244,11 +244,14 @@ STR_COLOUR_ORANGE :Oranž STR_COLOUR_BROWN :Pruun STR_COLOUR_GREY :Hall STR_COLOUR_WHITE :Valge +STR_COLOUR_RANDOM :Suvaline +STR_COLOUR_DEFAULT :Esialgne # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA} miili tunnis STR_UNITS_VELOCITY_METRIC :{COMMA} km/h STR_UNITS_VELOCITY_SI :{COMMA} m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}ruutu/päev STR_UNITS_POWER_IMPERIAL :{COMMA}hj STR_UNITS_POWER_METRIC :{COMMA}hj @@ -279,17 +282,17 @@ STR_UNITS_HEIGHT_METRIC :{COMMA} m STR_UNITS_HEIGHT_SI :{COMMA} m # Common window strings -STR_LIST_FILTER_TITLE :{BLACK}Filtri tekst: -STR_LIST_FILTER_OSKTITLE :{BLACK}Sisesta filterkirjend +STR_LIST_FILTER_TITLE :{BLACK}Märksõna: +STR_LIST_FILTER_OSKTITLE :{BLACK}Sisesta märksõna STR_LIST_FILTER_TOOLTIP :{BLACK}Sisesta märksõna mida loendist otsida -STR_TOOLTIP_GROUP_ORDER :{BLACK}Vali rühmitamise järjestus -STR_TOOLTIP_SORT_ORDER :{BLACK}Vali järjekord (kahanev/kasvav) -STR_TOOLTIP_SORT_CRITERIA :{BLACK}Vali järjekord +STR_TOOLTIP_GROUP_ORDER :{BLACK}Vali jaotamise järjestus +STR_TOOLTIP_SORT_ORDER :{BLACK}Vali järjestus (kahanev/kasvav) +STR_TOOLTIP_SORT_CRITERIA :{BLACK}Vali järjestus STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Vali sõelumisalused -STR_BUTTON_SORT_BY :{BLACK}Järjekord: -STR_BUTTON_LOCATION :{BLACK}Asukoht -STR_BUTTON_RENAME :{BLACK}Nimevahetus +STR_BUTTON_SORT_BY :{BLACK}Järjestus: +STR_BUTTON_CATCHMENT :{BLACK}Mõjupiirkond +STR_TOOLTIP_CATCHMENT :{BLACK}Vahelda mõjuala näitamist STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Sulge aken STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Akna pealkiri. Liigutamiseks lohista seda hiirega. @@ -301,7 +304,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Klõpsa STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Lülita aken suureks/väikseks STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Kerimisriba - kerib nimistut üles/alla STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Kerimisriba - kerib listi üles/alla -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Ruudul asuvate hoonete jms. lammutamine. Ctrl valib ala diagonaalselt. Shift valib ehitamise/hinna kuvamise režiimi +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Ruudul asuvate hoonete jms. õhkamine. Ctrl valib ala diagonaalselt. Shift-nupuga vaheldub ehitamine ja maksumuse hindamine # Show engines button STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Näita peidetud @@ -312,7 +315,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Näita p STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}Selle nupu lubamisega kuvatakse ka peidetud rongid STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE_TOOLTIP :{BLACK}Selle nupu lubamisega kuvatakse ka peidetud sõidukid STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Selle nupu lubamisega kuvatakse ka peidetud laevad -STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Selle nupu lubamisega kuvatakse ka peidetud lennukid +STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Selle nupu lubamisega kuvatakse ka peidetud õhusõidukeid # Query window STR_BUTTON_DEFAULT :{BLACK}Esialgne @@ -350,7 +353,7 @@ STR_SORT_BY_MODEL :Mudel STR_SORT_BY_VALUE :Väärtus STR_SORT_BY_LENGTH :Pikkus STR_SORT_BY_LIFE_TIME :Amortiseerumiseni -STR_SORT_BY_TIMETABLE_DELAY :Hilinemine sõiduplaanis +STR_SORT_BY_TIMETABLE_DELAY :Hilinemine graafikus STR_SORT_BY_FACILITY :Jaama tüüp STR_SORT_BY_WAITING_TOTAL :Kaupa kokku STR_SORT_BY_WAITING_AVAILABLE :Kaupa saadaval @@ -367,14 +370,23 @@ STR_SORT_BY_CARGO_CAPACITY :Kandevõime STR_SORT_BY_RANGE :Vahekaugus STR_SORT_BY_POPULATION :Rahvaarv STR_SORT_BY_RATING :Hinnang +STR_SORT_BY_NUM_VEHICLES :Sõidukite koguarv +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Eelmise aasta kogukasum +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Selle aasta kogukasum +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Eelmise aasta keskmine kasum +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Selle aasta keskmine kasum + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Puudub +STR_GROUP_BY_SHARED_ORDERS :Jagatud korraldused # Tooltips for the main toolbar -STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Seiska mäng +STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Mängu paus STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Kiirenda mängu STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Seadistus STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Mängu salvestamine/jätkamine, mängust lahkumine, väljumine STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Ava kaart, vaateaken või siltide loend -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Ava linnade register +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Ava asustuste register STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Ava toetuste loend STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Avab ettevõtte jaamade registri STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Ava ettevõtte rahavoogude aruanne @@ -384,14 +396,15 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Näita e STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Ava graafik STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Ava ettevõtete edetabel STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Uue tööstuse rajamise rahastamine või tööstuste registri avamine -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Ava ettevõtte rongide register. Rühma- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Ava ettevõtte mootorsõidukite register. Rühma- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Ava ettevõtte laevade register. Rühma- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Ava ettevõtte õhusõidukite register. Rühma- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Ava ettevõtte rongide register. Jaotus- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Ava ettevõtte mootorsõidukite register. Jaotus- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Ava ettevõtte laevade register. Jaotus- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Ava ettevõtte õhusõidukite register. Jaotus- ja sõidukiregistrit vahetatakse Ctrl+klõpsu abil STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Suurenda vaadet STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Vähenda vaadet STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Ehita raudtee STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Ehita maantee +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Ehita trammiteid STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Ehita laevakai STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Ehita lennuväli STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Ava riba maastikutarvikutega, millega saab maad tõsta/langetada, puid istutada, jne. @@ -407,9 +420,9 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Stsenaa STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Alguse liigutamine 1 aasta võrra tagasi STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Alguse liigutamine 1 aasta võrra edasi STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Alustamise aasta valikuks klõpsi siin -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Ava kaart, linnade register +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Ava kaart, asustuste register STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Maastiku tekitamine -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Linnade tekitamine +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Asustuste tekitamine STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Tööstuste tekitamine STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Maanteede ehitamine STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Trammiteede ehitamine @@ -430,10 +443,10 @@ STR_SCENEDIT_FILE_MENU_QUIT :Välju ############ range for settings menu starts STR_SETTINGS_MENU_GAME_OPTIONS :Mängu seadistus STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Seaded -STR_SETTINGS_MENU_SCRIPT_SETTINGS :Tehismõistuse / Mängu skriptide seaded +STR_SETTINGS_MENU_SCRIPT_SETTINGS :AI/GameScripti seaded STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-i seadistus STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läbipaistvuse seadistus -STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Näidatavad linnanimed +STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Näidatavad asustuste nimed STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Näidatavad jaamanimed STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Näidatavad meldepunktid STR_SETTINGS_MENU_SIGNS_DISPLAYED :Näidatavad sildid @@ -454,13 +467,13 @@ STR_FILE_MENU_EXIT :Välju # map menu STR_MAP_MENU_MAP_OF_WORLD :Maailmakaart -STR_MAP_MENU_EXTRA_VIEW_PORT :Lisa vaateaken +STR_MAP_MENU_EXTRA_VIEWPORT :Lisa vaateaken STR_MAP_MENU_LINGRAPH_LEGEND :Kaubavoo legend STR_MAP_MENU_SIGN_LIST :Siltide register ############ range for town menu starts -STR_TOWN_MENU_TOWN_DIRECTORY :Linnade register -STR_TOWN_MENU_FOUND_TOWN :Raja linn +STR_TOWN_MENU_TOWN_DIRECTORY :Asustuste register +STR_TOWN_MENU_FOUND_TOWN :Raja asustus ############ range ends here ############ range for subsidies menu starts @@ -470,16 +483,16 @@ STR_SUBSIDIES_MENU_SUBSIDIES :Toetused ############ range for graph menu starts STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Opereerimiskasumi graafik STR_GRAPH_MENU_INCOME_GRAPH :Tulugraafik -STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Kaubavoo graafik +STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Äraveetud kauba graafik STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Tegevustulemuste graafik -STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Firmaväärtuse graafik +STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Firmaväärtuste graafik STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Veotasude määrad ############ range ends here ############ range for company league menu starts STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Ettevõtete edetabel STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Täpsustatud tulemushinnang -STR_GRAPH_MENU_HIGHSCORE :Punktitabel +STR_GRAPH_MENU_HIGHSCORE :Edetabel ############ range ends here ############ range for industry menu starts @@ -521,14 +534,15 @@ STR_TOOLBAR_SOUND_MUSIC :Heli/muusika ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Viimane teade STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Teadete ajalugu +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Kustuta kõik teated ############ range ends here ############ range for about menu starts STR_ABOUT_MENU_LAND_BLOCK_INFO :Maa-ala andmed STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Lülita konsool sisse/välja -STR_ABOUT_MENU_AI_DEBUG :Arvutivea otsing -STR_ABOUT_MENU_SCREENSHOT :Kuvapaugutus +STR_ABOUT_MENU_AI_DEBUG :AI/GameScripti debugimine +STR_ABOUT_MENU_SCREENSHOT :Ekraanipilt STR_ABOUT_MENU_SHOW_FRAMERATE :Näita kaadrisagedust STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' kohta STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner @@ -602,37 +616,37 @@ STR_MONTH_ABBREV_OCT :okt STR_MONTH_ABBREV_NOV :nov STR_MONTH_ABBREV_DEC :dets -STR_MONTH_JAN :Jaanuar -STR_MONTH_FEB :Veebruar -STR_MONTH_MAR :Märts -STR_MONTH_APR :Aprill -STR_MONTH_MAY :Mai -STR_MONTH_JUN :Juuni -STR_MONTH_JUL :Juuli -STR_MONTH_AUG :August -STR_MONTH_SEP :September -STR_MONTH_OCT :Oktoober -STR_MONTH_NOV :November -STR_MONTH_DEC :Detsember +STR_MONTH_JAN :jaanuar +STR_MONTH_FEB :veebruar +STR_MONTH_MAR :märts +STR_MONTH_APR :aprill +STR_MONTH_MAY :mai +STR_MONTH_JUN :juuni +STR_MONTH_JUL :juuli +STR_MONTH_AUG :august +STR_MONTH_SEP :september +STR_MONTH_OCT :oktoober +STR_MONTH_NOV :november +STR_MONTH_DEC :detsember ############ range for months ends # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Selgitus STR_GRAPH_KEY_TOOLTIP :{BLACK}Näita selgitust graafikute juures -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Opereerimiskasumi graafik STR_GRAPH_INCOME_CAPTION :{WHITE}Tulugraafik -STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Veetud veoste kogus +STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Äraveetud kaubaühikute arv STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Ettevõtte tegevushinnang (suurim hinnang saab olla 1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Firmaväärtus +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Firmaväärtused -STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Veoste hinnagraafik -STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Päevi teel -STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Makstav summa 10 ühiku (või 10'000 liitri) veo eest iga 20 ruudu kohta +STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Veotariifid +STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Teelolekuaeg päevades +STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Tasu 10 ühiku (või 10 000 liitri) kauba äraveo eest üle 20 ruudu STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Kõik sisse STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Kõik välja STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Näita kõiki kaubatüüpe kaubamaksumuste määrade graafikul @@ -650,14 +664,14 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Klõpsa, STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Ettevõtete edetabel STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Insener -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Liiklusmänedžer -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Transpordi koordineerija -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Liiniinspektor +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Liikluskorraldaja +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Transpordikorraldaja +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Logistik STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Direktor STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Tegevjuht STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Esimees STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :President -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnaat +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Ärioligarh # Performance detail window STR_PERFORMANCE_DETAIL :{WHITE}Täpsustatud tulemushinnang @@ -672,7 +686,7 @@ STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Jaamad: STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Vähim kasum: STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Vähim tulu: STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Suurim tulu: -STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Kohale toimetatud: +STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Äraveetud: STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Veoseid: STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Raha: STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Laen: @@ -683,7 +697,7 @@ STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Hiljuti STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Madalaima tuluga sõiduki kasum (arvestatakse vaid üle kaheaastaseid sõidukeid) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Vähim kvartalikasum viimase 12 kvartali jooksul STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Suurim kvartalikasum viimase 12 kvartali jooksul -STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Viimasel neljal kvartalil kohale toimetatud kaubaühikute koguarv +STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Viimasel neljal kvartalil äraveetud kaubaühikute koguarv STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Viimasel kvartalil kohale toimetatud veoseliikide koguarv STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Rahakogus sellel firmal pangas STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}Selle ettevõtte kogulaen @@ -695,13 +709,14 @@ STR_MUSIC_PLAYLIST_ALL :{TINY_FONT}{BLA STR_MUSIC_PLAYLIST_OLD_STYLE :{TINY_FONT}{BLACK}Vana stiil STR_MUSIC_PLAYLIST_NEW_STYLE :{TINY_FONT}{BLACK}Uus stiil STR_MUSIC_PLAYLIST_EZY_STREET :{TINY_FONT}{BLACK}Ezy Street -STR_MUSIC_PLAYLIST_CUSTOM_1 :{TINY_FONT}{BLACK}Omatehtud 1 -STR_MUSIC_PLAYLIST_CUSTOM_2 :{TINY_FONT}{BLACK}Omatehtud 2 +STR_MUSIC_PLAYLIST_CUSTOM_1 :{TINY_FONT}{BLACK}Isiklik 1 +STR_MUSIC_PLAYLIST_CUSTOM_2 :{TINY_FONT}{BLACK}Isiklik 2 STR_MUSIC_MUSIC_VOLUME :{TINY_FONT}{BLACK}Muusika helitugevus STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLACK}Efektide helitugevus STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Muusika pole saadaval STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Lugu STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Pealkiri @@ -716,31 +731,34 @@ STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Vali 'k STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Vali 'vanas stiilis muusika' programm STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Vali 'uues stiilis muusika' programm STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}'Ezy Street' stiilis muusikaprogrammi valimine -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Vali 'omatehtud 1' programm -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Vali 'omatehtud 2' programm +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Vali 'isiklik 1' programm +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Vali 'isiklik 2' programm STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Lülita lugude segamine sisse ja välja STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Näita muusikalugude valimise akent # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Muusikaprogramm - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Loo number STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programm - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Puhasta -STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Tühjenda valitud programm (ainult omatehtud 1 ja omatehtud 2) -STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Vajuta loole, et seda programmi lisada (ainult omatehtud 1 ja omatehtud 2) +STR_PLAYLIST_CHANGE_SET :{BLACK}Muuda kogu +STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Tühjenda valitud programm (ainult isiklik 1 ja isiklik 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Vaheta muusikavalik teise paigaldatud kogumi vastu +STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Vajuta loole, et seda programmi lisada (ainult isiklik 1 ja isiklik 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Vajuta laulule, et see eemaldada praegusest progammist (Custom1 või Custom2 ainult) # Highscore window STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Parimad ettevõtted aastal {NUM} STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Ettevõtete edetabelis {NUM} kohal STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. -STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Ärimees +STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Äriinimene STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Ettevõtja STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Tööstur STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Kapitalist STR_HIGHSCORE_PERFORMANCE_TITLE_MAGNATE :Magnaat STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Mogul -STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Sajandi suurärimees +STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Sajandi ärioligarh STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY} STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA}) STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} saavutas '{STRING}' staatuse! @@ -786,17 +804,18 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Konarlik maa STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Rohuväli STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Lage maa +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Vihmamets STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Põllud STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Puud STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Kivid STR_SMALLMAP_LEGENDA_WATER :{TINY_FONT}{BLACK}Vesi STR_SMALLMAP_LEGENDA_NO_OWNER :{TINY_FONT}{BLACK}Omanikuta -STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Linnad +STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Asustused STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLACK}Tööstused STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Kõrb STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Lumi -STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Linnanimede sisse- ja välja lülitamine +STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Asustuste nimede sisse- ja välja lülitamine STR_SMALLMAP_CENTER :{BLACK}Näita väikekaardil praegust asukohta STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} @@ -817,7 +836,8 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Näita k STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Näita viimast teadet STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * SEISATUS * * -STR_STATUSBAR_AUTOSAVE :{RED}AUTOMAATSALVESTUS +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * SEISATUD (transpordisõlmede graafiku uuenduse ootel) * * +STR_STATUSBAR_AUTOSAVE :{RED}VÄLPSALVESTUS STR_STATUSBAR_SAVING_GAME :{RED}* * MÄNGU SALVESTAMINE * * # News message history @@ -828,43 +848,44 @@ STR_MESSAGE_NEWS_FORMAT :{STRING} - {S STR_NEWS_MESSAGE_CAPTION :{WHITE}Teade STR_NEWS_CUSTOM_ITEM :{BIG_FONT}{BLACK}{STRING} -STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Rahvas rõõmustab. . .{}{STATION} jaama saabus esimene rong! -STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Rahvas rõõmustab . . .{}{STATION} jaama saabus esimene buss! -STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Rahvas rõõmustab . . .{} esimene veok saabus {STATION} jaama! -STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Kodanikud tähistavad . . .{}Esimene reisitramm saabus trammijaama {STATION}! -STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Kodanikud tähistavad . . .{}Esimene kaubatramm saabus trammijaama {STATION}! -STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Rahvas rõõmustab . . .{}{STATION} terminali saabus esimene laev! -STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Rahvas rõõmustab . . .{}{STATION} terminali saabus esimene lennuk! +STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Rahvas tervitab. . .{}{STATION} jaama saabus esimene rong! +STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Rahvas tervitab. . .{}{STATION} jaama saabus esimene buss! +STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Rahvas tervitab. . .{} esimene veok saabus {STATION} jaama! +STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Rahvas tervitab . . .{}Esimene reisitramm saabus trammijaama {STATION}! +STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Rahvas tervitab . . .{}Esimene kaubatramm saabus trammijaama {STATION}! +STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Rahvas tervitab . . .{}{STATION} terminali saabus esimene laev! +STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Rahvas tervitab. . .{}{STATION} terminali saabus esimene lennuk! STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}RONGIKOKKUPÕRGE!{}{COMMA} surid tules peale kokkusõitmist -STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Rongikokkupõrge!{}Juht suri peale õnnetust tules +STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Rongikokkupõrge!{}Juht hukkus kokkupõrgest põhjustatud tulekeras STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Mootorsõiduki kokkupõrge rongiga!{}{COMMA} inimest suri õnnetuses STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Lennuõnnetus!{}{COMMA} hukkus tules. {STATION} suletud. -STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Lennuõnnetus!{}Lennukil lõppes kütus, {COMMA} surid tules! +STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Lennuõnnetus!{}Õhusõidukil lõppes kütus, {COMMA} tulekeras hukkunut STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Tsepeliini õnnetus {STATION}s! STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Mootorsõiduk plahvatas kokkupõrkes 'UFO-ga'! STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Naftatöötlustehase plahvatus {TOWN} lähedal! STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Tehas purunes teadmata põhjustel {TOWN} lähedal! STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}'UFO' maandus {TOWN} lähedal! -STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Söekaevanduse vajumine jättis endast linna {TOWN} lähedal purustused! +STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Söekaevanduse vajumine jättis endast asustuse {TOWN} lähedal purustused! STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Üleujutused!{}Vähemalt {COMMA} kadunut arvatakse surnuks peale olulist üleujutust! STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Ettevõttel on probleeme! -STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}Ettevõte {STRING} müüakse maha ja kuulutatakse pankrot, kui tulemused peatselt ei parane! +STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}Ettevõte {STRING} müüakse maha või kuulutatakse pankrotistunuks, kui tulemused peatselt ei parane! STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLACK}Ettevõtete ühinemine! STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} müüdi ettevõttele {STRING} {CURRENCY_LONG} eest! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Pankrot! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} suleti asutajate poolt ja kõik varad müüakse maha! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Loodi uus ettevõte! -STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}Ettevõte {STRING} alustas linna {TOWN} lähedal ehitustöid! +STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}Ettevõte {STRING} alustas asustuse {TOWN} lähedal ehitustöid! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} võeti üle ettevõtte {STRING} poolt! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(President) -STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} rahastas uue linna {TOWN} rajamist! +STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} rahastas uue asustuse {TOWN} rajamist! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uus linn nimega {TOWN} on asutatud! -STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Uus {STRING} on linna {TOWN} lähedal ehitamisel! -STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Uus {STRING} on istutatud linna {TOWN} lähedale! +STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Uus {STRING} on asustuse {TOWN} lähedal ehitamisel! +STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Uus {STRING} on istutatud asustuse {TOWN} lähedale! STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING} juhtkond teatab sulgemisest! STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}{STRING} teatab sulgemisest varustusprobleemide tõttu! @@ -886,13 +907,13 @@ STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLAC STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} ootab depoos STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} ootab depoos STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} ootab depoos -STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} ootab lennukiangaaris +STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} ootab õhusõidukiangaaris # Order review system / warnings -STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE} sõiduplaanis on liiga vähe ülesandeid -STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}Sõidukil {VEHICLE} on tühistatud ülesanne -STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Sõidukil {VEHICLE} on topeltülesandeid -STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}Sõiduki «{VEHICLE}» ülesannetes on kõlbmatu jaam +STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE}: graafikus pole piisavalt korraldusi +STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}Sõidukil {VEHICLE} on tühistatud korraldus +STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Sõidukil {VEHICLE} on topeltkorraldusi +STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}Sõiduki «{VEHICLE}» korraldustes on kõlbmatu jaam STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} lennugraafikus on lennujaam, mille maandumisrada on liiga lühike STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} on vanaks saamas @@ -910,6 +931,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uus {STRING} saadaval! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Ava sõiduki jaole fokuseeritud jaoaken STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Jaam {STATION} ei võta enam vastu veost {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Jaam {STATION} ei võta enam vastu veoseid {STRING}, ega {STRING} @@ -918,18 +940,18 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}Jaam {ST STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Toetuse pakkumine lõppes:{}{}{STRING.g} kohast {STRING} kohta {STRING} veoste eest ei maksta enam toetusi STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Toetuse maksmise aeg sai läbi:{}{}{STRING}kohast {STRING} kohta {STRING} eest ei maksta enam edaspidi toetust -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Veoteenusele pakutakse toetust:{}{}{STRING.g}veo eest linnast {STRING} linna {STRING}. Esimesele teenusepakkujale makstakse aasta läbi toetusi! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Veoteenusele pakutakse toetust:{}{}{STRING.g}veo eest asustusest {STRING} asustusse {STRING}. Esimesele teenusepakkujale makstakse aasta läbi toetusi! STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Teenusetoetust makstakse ettevõttele {STRING}!{}{}{STRING} kohast {STRING} kohta {STRING} teenuse eest makstakse järgmisel aastal 50% rohkem! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Teenusetoetust makstakse ettevõttele {STRING}!{}{}{STRING} kohast {STRING} kohta {STRING} teenuse eest makstakse järgmisel aastal kahekordselt! STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Teenusetoetust makstakse ettevõttele {STRING}!{}{}{STRING} kohast {STRING} kohta {STRING} teenuse eest makstakse järgmisel aastal kolmekordselt! STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Teenusetoetust makstakse ettevõttele {STRING}!{}{}{STRING} kohast {STRING} kohta {STRING} teenuse eest makstakse järgmisel aastal neljakordselt! -STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Liikluskaos linnas {TOWN}!{}{}Ettevõtte {STRING} poolt rahastatud teedeehitus tekitab 6 kuu jooksul maanteedel liiklushäireid! +STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Liikluskaos asustuses {TOWN}!{}{}Ettevõtte {STRING} poolt rahastatud teede ümberehitus tekitab 6 kuu jooksul maanteedel liiklushäireid! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transpordimonopol! -STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Kohalik linnavõim{TOWN} allkirjastab lepingu {STRING} transpordi ainuõiguseks üheks aastaks! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Asustuse {TOWN} omavalitsus allkirjastab lepingu {STRING} veoste ainuõiguseks üheks aastaks! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vaateaken {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vaateaken {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopeeri vaateaknasse STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopeeri praegune vaade vaateaknasse STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Muuda peamist vaadet @@ -977,22 +999,25 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Gruusia lari (G STR_GAME_OPTIONS_CURRENCY_IRR :Iraani rial (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Uus Vene rubla (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Mehhiko Peeso (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Uus Taiwani dollar (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Hiina renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kongi dollar (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :India ruupia (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Indoneesia ruupia (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Malaisia ringit (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Sõidukid -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Vali, kummal pool teed mootorsõidukid liiklevad STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Vasakpoolne liiklus STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Parempoolne liiklus -STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Linnanimed -STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Vali linnanimede stiil +STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Asulate nimed +STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Vali asulanimede stiil ############ start of townname region -STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Inglise (originaalne) +STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Inglise (algne) STR_GAME_OPTIONS_TOWN_NAME_FRENCH :Prantsusmaa STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Saksamaa -STR_GAME_OPTIONS_TOWN_NAME_ADDITIONAL_ENGLISH :Inglise (Lisa) +STR_GAME_OPTIONS_TOWN_NAME_ADDITIONAL_ENGLISH :Inglise (täiendatud) STR_GAME_OPTIONS_TOWN_NAME_LATIN_AMERICAN :Ladina-Ameerika STR_GAME_OPTIONS_TOWN_NAME_SILLY :Tobedad STR_GAME_OPTIONS_TOWN_NAME_SWEDISH :Rootsi @@ -1012,15 +1037,15 @@ STR_GAME_OPTIONS_TOWN_NAME_ITALIAN :Itaalia STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Katalaani ############ end of townname region -STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Isesalvestamine -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Vali automaatselt mängu salvestamise vahemik +STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Salvestusvälp +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Vali salvestamise välp ############ start of autosave dropdown STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Väljas -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_1_MONTH :Iga kuu -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_3_MONTHS :Iga 3 kuu tagant -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_6_MONTHS :Iga 6 kuu tagant -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Iga 12 kuu tagant +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_1_MONTH :1 kuu +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_3_MONTHS :3 kuud +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_6_MONTHS :6 kuud +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :12 kuud ############ end of autosave dropdown STR_GAME_OPTIONS_LANGUAGE :{BLACK}Keel @@ -1032,31 +1057,50 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Märgi s STR_GAME_OPTIONS_RESOLUTION :{BLACK}Ekraanilahutus STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Ekraanilahutuse valimine STR_GAME_OPTIONS_RESOLUTION_OTHER :muu +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Riistvarakiirendus +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Märkides selle ruudu, lubad OpenTTD-l üritada kasutada riistvarakiirendust. Muudetud seade omab mõju pärast mängu taaskäivitust +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Seade omab mõju alles pärast mängu taaskäivitust + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Liidese suurus STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Vali kasutatav liideseelementide suurus +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(automaattuvastus) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Tavaline STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Topeltsuurus -STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Ruudu suurus +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Neljakordne suurus +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Kirja suurus STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Vali kasutatav liideseelementide suurus -STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Ruudu suurus +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(automaattuvastus) +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Tavaline +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Topeltsuurus +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Neljakordne suurus -STR_GAME_OPTIONS_BASE_GRF :{BLACK}Alusgraafika kogu -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Valib kasutatava alusgraafika kogu +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Graafika + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Ekraani värskendussagedus +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Vali, mis värskendussagedust kasutada +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :muu +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Värskendussagedused üle 60Hz võivad jõudlusele löögi anda. + +STR_GAME_OPTIONS_BASE_GRF :{BLACK}Lähtegraafikakogu +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Valib kasutatava lähtegraafikakogu STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} puuduv{P "" ad}/viga{P ne sed} fail{P "" id} -STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Lisateave alusgraafika kogu kohta +STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Lisateave lähtegraafikakogu kohta -STR_GAME_OPTIONS_BASE_SFX :{BLACK}Alushelide kogu -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Valib kasutatava põhihelide kogu -STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Lisateave alushelide kogu kohta +STR_GAME_OPTIONS_BASE_SFX :{BLACK}Lähtehelikogu +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Valib kasutatava lähtehelikogu +STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Lisateave lähtehelikogu kohta -STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Alusmuusika kogu -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Valib alusmuusikamuusika kogu +STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Lähtemuusikakogu +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Valib kasutatava lähtemuusikakogu STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} viga{P "ne" "sed"} fail{P "" "id"} -STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Rohkem teavet alusmuusika kogu kohta +STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Rohkem teavet lähtemuusikakogu kohta STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Ei õnnestunud tuvastada toetatud resulutsioone STR_ERROR_FULLSCREEN_FAILED :{WHITE}Täisekraanrežiim ebaõnnestus @@ -1138,55 +1182,57 @@ STR_TERRAIN_TYPE_FLAT :Tasane STR_TERRAIN_TYPE_HILLY :Künklik STR_TERRAIN_TYPE_MOUNTAINOUS :Mägine STR_TERRAIN_TYPE_ALPINIST :Alpinist +STR_TERRAIN_TYPE_CUSTOM :Määratud kõrgus +STR_TERRAIN_TYPE_CUSTOM_VALUE :Määratud kõrgus ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Soodustav STR_CITY_APPROVAL_TOLERANT :Salliv STR_CITY_APPROVAL_HOSTILE :Vaenulik -STR_WARNING_NO_SUITABLE_AI :{WHITE}Sobiv tehismõistus puudub...{}Tehismõistuseid võib laadida Internetisisu laadimise aknast. +STR_WARNING_NO_SUITABLE_AI :{WHITE}Sobiv AI puudub...{}Mitmesuguseid AI-sid saab alla laadida 'aineste allalaadimise' kaudu # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Seaded -STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtri tekst: +STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Märksõna: STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Ava kõik STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sulge kõik STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(seletus puudub) STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Vaikeväärtus: {ORANGE}{STRING} -STR_CONFIG_SETTING_TYPE :{LTBLUE}Seade rühm: {ORANGE}{STRING} -STR_CONFIG_SETTING_TYPE_CLIENT :Kliendi seade (ei salvestu koos mänguga; mõjutab kõiki mänge) +STR_CONFIG_SETTING_TYPE :{LTBLUE}Seade liik: {ORANGE}{STRING} +STR_CONFIG_SETTING_TYPE_CLIENT :Kliendiseade (ei salvestu koos mänguga; mõjutab kõiki mänge) STR_CONFIG_SETTING_TYPE_GAME_MENU :Mängu seade (salvestub koos mänguga; mõjutab ainult uusi mänge) STR_CONFIG_SETTING_TYPE_GAME_INGAME :Mängu seaded (hoitakse salvestuses; mõjutab ainult praegust mängu) STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Ettevõtte seaded (hoitakse salvestuses; mõjutab ainult uusi mänge) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Ettevõtte seaded (hoitakse salvestuses; mõjutab ainult praegust ettevõtet) -STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Rühm: +STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Jagu: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Liik: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Piirab varem tehtud filtridega alljärgnevat loendit STR_CONFIG_SETTING_RESTRICT_BASIC :Põhilised (kuva vaid tähtsad seaded) -STR_CONFIG_SETTING_RESTRICT_ADVANCED :Edasijõudnud (enim seadeid) -STR_CONFIG_SETTING_RESTRICT_ALL :Ekspert (kuva kõik seaded, isegi veidrad) -STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Seaded mis erinevad vaikeväärtustest -STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Seaded mis erinevad sinu valitud uue mängu seadetest +STR_CONFIG_SETTING_RESTRICT_ADVANCED :Täpsustatud (näita enamikke seadeid) +STR_CONFIG_SETTING_RESTRICT_ALL :Asjatundja (näita kõiki seaded, s.h. ebatavalisi) +STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Lähteväärtusest muudetud seaded +STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Uue mängu seadetest erineva väärtusega seaded STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Piirab allolevat nimekirja valitud sätte tüübi järgi STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Kõik seadistused -STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Kliendi seade (ei salvestu koos mänguga; mõjutab kõiki mänge) +STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Kliendiseade (ei salvestu koos mänguga; mõjutab kõiki mänge) STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Mängu seaded (hoitakse salvestuses; mõjutab ainult uusi mänge) STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Mängu seaded (hoitakse salvestuses; mõjutab ainult praegust mängu) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Firma seaded (hoitakse salvestuses; mõjutab ainult uusi mänge) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Firma seaded (hoitakse salvestuses; mõjutab ainult praegust firmat) -STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Kõiki otsingu tulemusi näeb, kui{}{SILVER}rühm {BLACK}on {WHITE}{STRING} +STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Kõiki otsingu tulemusi näeb, kui{}{SILVER}jagu {BLACK}on {WHITE}{STRING} STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Kõiki otsingu tulemusi näeb, kui{}{SILVER}liik {BLACK}on {WHITE}Kõik seadistuste liigid -STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Kõiki otsingu tulemusi näeb, kui{}{SILVER}rühm {BLACK}on {WHITE}{STRING} {BLACK}ja {SILVER}liik {BLACK}on {WHITE}Kõik seadistuste liigid +STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Kõiki otsingu tulemusi näeb, kui{}{SILVER}jagu {BLACK}on {WHITE}{STRING} {BLACK}ja {SILVER}liik {BLACK}on {WHITE}Kõik seadistuste liigid STR_CONFIG_SETTINGS_NONE :{WHITE}- Puudub - STR_CONFIG_SETTING_OFF :Väljas -STR_CONFIG_SETTING_ON :Sees +STR_CONFIG_SETTING_ON :Peal STR_CONFIG_SETTING_DISABLED :väljas STR_CONFIG_SETTING_COMPANIES_OFF :Väljas -STR_CONFIG_SETTING_COMPANIES_OWN :Oma ettevõttel -STR_CONFIG_SETTING_COMPANIES_ALL :Igal ettevõttel +STR_CONFIG_SETTING_COMPANIES_OWN :Enda ettevõttes +STR_CONFIG_SETTING_COMPANIES_ALL :Igas ettevõttes STR_CONFIG_SETTING_NONE :Pole STR_CONFIG_SETTING_ORIGINAL :Originaal @@ -1196,7 +1242,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Vasakul STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Keskel STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Paremal -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Stardilaenu ülempiir: {STRING} +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Stardilaenu ülempiirang: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurim summa, mida ettevõte saab laenata (arvestamata inflatsiooni) STR_CONFIG_SETTING_INTEREST_RATE :Intressimäär: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Laenu intressimäär; ühtlasi juhib inflatsiooni, kui inflatsioon on aktiveeritud @@ -1216,20 +1262,24 @@ STR_CONFIG_SETTING_TRAIN_REVERSING :Keela rongide STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Kui on aktiveeritud, siis ei pööra rongid vahejaamades ringi isegi siis kui ringi pööramisel oleks teekond järgmisse sihtpunkti lühem STR_CONFIG_SETTING_DISASTERS :Katastroofid: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Lülita sisse/välja katastroofid, mis aeg-ajalt hävitavad sõidukeid ja taristut -STR_CONFIG_SETTING_CITY_APPROVAL :Linnavalitusese suhtumine pinnase restruktureerimisse: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL :Astuse omavalitsuse suhtumine pinnase restruktureerimisse: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Vali kui suurt mõju tekitavad müra ning keskkonna muudatused ettevõtte mainele ja edasistele ehitustoimingutele antud piirkonnas -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maksimaalne mägede kõrgus: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Sätesta kaardi maksimaalne lubatud mägede kõrgus -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Kaardi maksimaalset kõrgust pole sellisele kõrgusele võimalik sätestada. Vähemalt üks mägi on antud kõrgusest suurem. +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Kaardi kõrguspiir: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Määra ülempiir kaardil oleva maastiku kõrgusele. "(Auto)" leiab sobiva väärtuse pärast, kui maastik on tekitatud +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(auto) +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Sellist väärtust ei saa kaardi kõrguspiirile anda. Vähemalt üks mägi kaardil on kõrgem STR_CONFIG_SETTING_AUTOSLOPE :Maastikukujundus majade, rööbaste jms. all (autoslope): {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Lase maja- ja rööpaalust maad kujundada ilma neid eemaldamata STR_CONFIG_SETTING_CATCHMENT :Reaalsemad veekogud: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Erineva suurusega püüdmisala erinevat tüüpi jaamadele ja lennujaamadele. -STR_CONFIG_SETTING_EXTRADYNAMITE :Linnateede, -sildade, -tunnelite jne lammutamine: {STRING} -STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Lihtsusta linnale kuuluva taristu ja majade eemaldamist -STR_CONFIG_SETTING_TRAIN_LENGTH :Rongi pikkuse ülempiir: {STRING} -STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Määrab rongide pikkuse ülempiiri +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Ettevõtte jaamad teenindavad ka liidetud, erapooletu jaamaga tööstuseid: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Kui lubatud, saavad liidetud jaamaga tööstuseid (nagu naftaplatvormid) teenindada ka lähedalolevad ettevõttele kuuluvad jaamad. Muidu võivad neid tööstuseid teenindada vaid nendega liidetud jaamad. Lähedale ehitatud ettevõtte jaamad neid teenindada ei saa, ning liidetud jaamad ei teeninda teisi tööstuseid +STR_CONFIG_SETTING_EXTRADYNAMITE :Asulateede, -sildade, -tunnelite jne lammutamine: {STRING} +STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Lihtsusta asulatele kuuluva taristu ja hoonete eemaldamist +STR_CONFIG_SETTING_TRAIN_LENGTH :Rongipikkuse ülempiirang: {STRING} +STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Määrab rongide pikkusele ülempiirangu STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} ruut{P 0 "" u} STR_CONFIG_SETTING_SMOKE_AMOUNT :Vedurisuitsu ja -sädemete hulk: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Määra kui palju suitsu või sädemeid eraldub sõidukist @@ -1248,12 +1298,12 @@ STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Mitte kõrvuti STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Lubab lisada uusi jaamade osi ilma puudutamata olemasolevaid osi. Vajalik Ctrl+Vajutus, kui asetada uut osa STR_CONFIG_SETTING_INFLATION :Inflatsioon: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Tekitab majandusinflatsiooni, kus hinnad tõusevad pisut kiiremini kui maksed -STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Maksimaalne silla pikkus: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Maksimaalne pikkus ehitatud sildadele -STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Maksimaalne silla kõrgus: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Maksimaalne sildade ehitamise kõrgus -STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Maksimaalne tunneli pikkus: {STRING} -STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Maksimaalne pikkus ehitatud tunnelitele +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Sildade ülempikkus: {STRING} +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Ülempikkus sildade ehitamisele +STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Sildade ülemkõrgus: {STRING} +STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Ülemkõrgus sildade ehitamisele +STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Tunnelite ülempikkus: {STRING} +STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Ülempikkus tunnelite ehitamisele STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Toorainetööstuse rajamise viis: {STRING} STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Toorainetööstuse rajamise viis. Valides 'pole' ei saa üldse toorainetööstuseid rajada, 'uuringutega' rajatakse tööstus suvalisse kohta, ning 'nagu kõik tööstused' ehitatakse toorainetööstuseid nagu töötlevat tööstust STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Pole @@ -1261,41 +1311,41 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Nagu kõik tö STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Uuringutega STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Tasane ala ümber tehaste: {STRING} STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Summa kui palju tasast maad on ümber tehase. See tagab et ruumi jääb saadavale ehitiste jaoks -STR_CONFIG_SETTING_MULTIPINDTOWN :Samalaadsed tööstused ühes linnas: {STRING} -STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Tavaliselt, linn ei taha rohkem kui ühte tööstustharu igast tüübist. See seade lubab rohkem kui ühe tööstusharu samasse linna -STR_CONFIG_SETTING_SIGNALSIDE :Signaalid on: {STRING} -STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Vali, kus pool rada signaalid asuvad +STR_CONFIG_SETTING_MULTIPINDTOWN :Mitu samalaadset tööstust ühe asula piires: {STRING} +STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Tavaliselt asula ei taha rohkem kui ühte tööstustharu igast liigist. Selle seadega lubatakse rohkem kui üks samalaadne tööstus ühe asula piires +STR_CONFIG_SETTING_SIGNALSIDE :Signaale näidatakse: {STRING} +STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Vali kummale poole rada signaalid paigutatakse STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Vasakul -STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :Sõltuvalt suunast +STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :Liikluse suunas STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Paremal STR_CONFIG_SETTING_SHOWFINANCES :Aasta lõpul näidatakse rahavoogude aruannet: {STRING} STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Sisse lülitamisel ilmub iga aasta lõpus rahavoogude aruanne, mis annab hea ülevaate ettevõtte rahalisest olukorrast -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Ülesanded on esialgselt «Peatusteta»: {STRING} +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Uued korraldused on esialgselt vahepeatusteta: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Tavaliselt peatub sõiduk igas peatuses, mida ta läbib. Selle seadega sõidab sõiduk lõppsihini ilma vahejaamades peatumata. NB! See seade määrab vaid uute korralduste esialgse seadistuse. Korraldusi saab hiljem eraldi ümber seadistada -STR_CONFIG_SETTING_STOP_LOCATION :Esialgne platvormi peatumisosa uute rongide ülesannetes: {STRING} +STR_CONFIG_SETTING_STOP_LOCATION :Esialgne platvormi peatumisosa uute rongide korraldustes: {STRING} STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Esialgne peatumiskoht rongiplatvormil. «alguses» tähendab sisenemispunkti lähistel. «keskel» tähendab keset platvormi. «lõpus» tähendab sisenemispunktist kaugeimal. NB! See seade määrab vaid uute korralduste esialgse seadistuse. Korraldusi saab hiljem eraldi ümber seadistada STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :alguses STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :keskel STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :lõpus -STR_CONFIG_SETTING_AUTOSCROLL :Vaate liikumine, kui hiireosuti on akna servas: {STRING} +STR_CONFIG_SETTING_AUTOSCROLL :Vaade liigub, kui hiireosuti on servas: {STRING} STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Sisse lülitamisel liigub vaade, kui hiireosuti on aknaserva lähedal -STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Väljas -STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Peamine vaateaken, ainult täisekraan -STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Peamine vaateaken -STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Kõik vaateaknad +STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Ei võimalda +STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Põhivaates, ainult täisekraaniga +STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Põhivaates +STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Igas vaates STR_CONFIG_SETTING_BRIBE :Altkäemaksud kohalikele omavalitsustele: {STRING} -STR_CONFIG_SETTING_BRIBE_HELPTEXT :Võimaldab linna omavalitsusele altkäemaksu pakkuda. Vahele jäämise korral võetakse ettevõttelt kuueks kuuks ära õigus tegutseda linnas +STR_CONFIG_SETTING_BRIBE_HELPTEXT :Võimaldab asulate omavalitsustele altkäemaksu pakkuda. Tabamise korral võetakse ettevõttelt kuueks kuuks ära õigus asulas tegutseda STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Ainuveoõiguste ostmine: {STRING} -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Kui ettevõte ostab linnalt kaubaveo ainuõiguse, siis teised ettevõtted ei saa üks aasta uusi kaupu ega reisijaid +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Kui ettevõte ostab asulalt kaubaveo ainuõiguse, siis teised ettevõtted ei saa üks aasta uusi kaupu ega reisijaid STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Luba ehitiste rahastamine: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Võimaldab ettevõttel linna kinnisvaraehitust rahastada +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Võimaldab ettevõttel asulate kinnisvaraehitust rahastada STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Kohaliku omavalitsuse teede rekonstrueerimise rahastamine: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Võimaldab ettevõtetel linna tee-ehitustöid rahastada, šaboteerides sellega autode kaubavedu +STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Võimaldab ettevõtetel asulate tee-ehitustöid rahastada, šaboteerides sellega autode kaubavedu STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Raha saatmine teistele ettevõtetele: {STRING} STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Luba mitmikmängus kanda raha erinevate ettevõtete vahel STR_CONFIG_SETTING_FREIGHT_TRAINS :Raskete rongide simuleerimiseks kasutatav raskustegur: {STRING} STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Seadke kaupa vedavate rongide mõju. Suurem väärtus muudab kauba vedamise rongide jaoks raskemaks, eriti mägedes -STR_CONFIG_SETTING_PLANE_SPEED :Kiiruse tegur lennukitele: {STRING} +STR_CONFIG_SETTING_PLANE_SPEED :Lennukite kiiruskordaja: {STRING} STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Määra suhteline kiirus lennukitele võrreldes teiste sõiduki tüüpidega, et vähendada lennukite sissetulekut STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Lennuõnnetusi: {STRING} @@ -1303,14 +1353,15 @@ STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Määrab lennu STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ei STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Vähem STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Keskmiselt -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Läbisõidupeatused linnateedel: {STRING} -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Lubab linnale kuuluvatel teedel ehitada läbisõidupeatuseid +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Läbisõidupeatused asulate kuuluvatel teedel: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Lubab asulatele kuuluvatele teedele ehitada läbisõidupeatuseid STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Läbisõidupeatused konkurentide teedel: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Lubab teisele ettevõttele kuulaval teel ehitada läbisõidupeatuseid STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Sõidukite olemasolul ei saa seda seadet muuta STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Taristu hooldamine: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Taristuga kaasnevad halduskulud. Kulud kasvavad taristu hulga suhtes ebaproportsionaalselt, ning mõjutavad pigem suurettevõtteid +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Ettevõtte esialgne värv: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Vali ettevõttele esialgne värvus STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aegumatud lennuväljad: {STRING} @@ -1318,23 +1369,23 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Selle seade sis STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Hoiata kui sõiduk on eksinud: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Tekita teateid kui sõidukid ei suuda leida teekonda nendele määratud sihtkohani -STR_CONFIG_SETTING_ORDER_REVIEW :Sõiduki ülesannete ülevaade: {STRING} +STR_CONFIG_SETTING_ORDER_REVIEW :Sõiduki korralduste ülevaade: {STRING} STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Kui on aktiveeritud, siis kontrollitakse perioodiliselt sõidukitele antud käsklusi ja leitud vead raporteeritakse uudistena STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Ei -STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Jah, kuid jäta välja seisatud veovahendid -STR_CONFIG_SETTING_ORDER_REVIEW_ON :Kõikidest veovahenditest -STR_CONFIG_SETTING_WARN_INCOME_LESS :Hoiata kui rongi sissetulek on negatiivne: {STRING} +STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :V.a. seisatud sõidukid +STR_CONFIG_SETTING_ORDER_REVIEW_ON :Kõik sõidukid +STR_CONFIG_SETTING_WARN_INCOME_LESS :Hoiata, kui sõiduk on miinuses: {STRING} STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Kui on aktiveeritud, siis teavitatakse mängijat sõidukitest mis ei ole viimase aasta jooksul suutnud kasumit teenida STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Sõidukid ei aegu: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kui on aktiveeritud, siis jäävad kõik sõidukite tüübid igavesti avatuks STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Vananenud sõidukite uuendamine: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Kui on sisse lülitatud, siis uuendatalse kõik kasutusaja lõpu lähedal olevad sõidukid automaatselt, järgides uuendamise tingimusi -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Automaatne sõiduki uuendamine kui sõduk on {STRING} maksimaalse vanuse +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Sõiduk uuendatakse automaatselt {STRING} sõiduki ülemvanust STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relatiivne sõiduki iga mille järel on peaks sõiduk saama automaatselt uuendatud STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuu{P 0 "" d} enne STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} kuu{P 0 "" d} pärast -STR_CONFIG_SETTING_AUTORENEW_MONEY :Nõutud rahasumma uuendamiseks: {STRING} -STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Pangakontol oleva raha alammäär sõidukite uuendamiseks +STR_CONFIG_SETTING_AUTORENEW_MONEY :Saldo alampiir automaatsete uuendamiste jaoks: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Väikseim pangasaldo, mis arvel peab olema, enne kui sõidukeid hakatakse automaatselt uuendama STR_CONFIG_SETTING_ERRMSG_DURATION :Veateadete kestvus: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Punases aknas olevate veateadete näitamise kestvus. On ka mõned (tähtsad) veateated, mis ise ei sulgu, vaid mis tuleb käsitsi sulgeda STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P 0 "" it} @@ -1342,15 +1393,17 @@ STR_CONFIG_SETTING_HOVER_DELAY :Vihjeid näidat STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Viivitus, kui kaua peab hiirega liidese osale osutama, enne kui selle kohta vihjet näidatakse. On ka võimalik vihjeid parema hiireklõpsuga näidata STR_CONFIG_SETTING_HOVER_DELAY_VALUE :{COMMA} sekundilist osutamist STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Paremklõpsu -STR_CONFIG_SETTING_POPULATION_IN_LABEL :Linna rahvaarv nimesildil: {STRING} -STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Näitab linna nimesildil rahvaarvu +STR_CONFIG_SETTING_POPULATION_IN_LABEL :Asula rahvaarv nimesildil: {STRING} +STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Näitab asula nimesildil rahvaarvu STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Graafikujoone laius: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Graafikutes kasutatava joone laius. Peenem joon on täpsem, laiem joon on paremini näha ja värvid on selgemini eristatavad +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Näita sõidukiehitusaknas NewGRF-i nime: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisa sõidukiehitusaknasse uus rida, mis näitab millisest NewGRF-ist sõiduk on pärit. STR_CONFIG_SETTING_LANDSCAPE :Maastik: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Igal maastikul on oma kaubatüübid ja nõuded linnade kasvamiseks. Täpsemaid muudatusi saab teha NewGRFi ja mänguskriptide abil. +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maastikud määravad põhilised mängustsenaariumid erinevate veoste ja nõuetega linnade kasvamiseks. NewGRF ja GameScript abil saab siiski täpsemalt kontrollida STR_CONFIG_SETTING_LAND_GENERATOR :Maatekituse meetod: {STRING} -STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Originaalne generaator sõltub alusgraafikast ja tekitab kindlaksmääratud maastikuvorme. TerraGenesis on Perlini müral põhinev generaator, mida saab täpsemalt seadistada +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Originaalne generaator sõltub lähtegraafikast ja tekitab kindlaksmääratud maastikuvorme. TerraGenesis on Perlini müral põhinev generaator, mida saab täpsemalt seadistada STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Algupärane STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Maapinna tüüp: {STRING} @@ -1360,7 +1413,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Määrab, kui p STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimaalne kaugus kaardi servast naftatöötlustehase jaoks: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Naftatöötlemistehased ehitatakse ainult kaardi piirile, see on rannikul saartega mängitaval kaardil. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Lumepiiri kõrgus: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Määra, millisel kõrgusel algab sub-arktiline maastik. Lumi mõjutab ka tööstuste loomist ja linna kasvamise tingimusi +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Määra, millisel kõrgusel algab sub-arktiline maastik. Lumi mõjutab ka tööstuste loomist ja asulate kasvamise nõudeid +STR_CONFIG_SETTING_SNOW_COVERAGE :Lumekatvus: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Mõjutab umbkaudset lume osakaalu lähisartikilisel maastikul. Lumi mõjutab ka tööstuste tekitamist ja asulate kasvuvajadusi. Kasutatakse vaid kaardi tekitamisel. Vahetult merepiiri kohal on maa alati lumevaba +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Kõrbekatvus: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Mõjuta umbkaudset kõrbe osakaalu troopilisel maastikul. Kõrb mõjutab ka tööstuste tekitamist. Kasutatakse vaid kaardi tekitamisel +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Maastiku järskus (ainult TerraGenesis) : {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only) Vali mägede tihedus: Laugetel maastikel on vähem, laiema ulatusega mägesid. Mägistel maastikel on palju mägesid, mis võivad näha välja samasugused STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Väga lauge @@ -1378,15 +1437,15 @@ STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Algupärane STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Täiustatud STR_CONFIG_SETTING_ROAD_SIDE :Sõidukid: {STRING} STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Vali liikluse suund -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Kõrgustekaardi pööramine: {STRING} -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Vastu-päevapidi -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Päevapidi +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Kõrguskaardi pööre: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Vastupäeva +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Päripäeva STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Kõrguse level kui kõrgele lapik kaart läheb: {STRING} STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Üks või enam ruutu põhjaäärel pole tühjad STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Üks või enam ääreruutu pole vesi -STR_CONFIG_SETTING_STATION_SPREAD :Jaama küljepikkuse ülempiir: {STRING} -STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Jaama ühe külje pikkuse ülempiir. Suur väärtus teeb mängu aeglaseks +STR_CONFIG_SETTING_STATION_SPREAD :Jaama küljepikkuse ülempiirang: {STRING} +STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Jaama ühe külje pikkuse ülempiirang. Suur väärtus teeb mängu aeglaseks STR_CONFIG_SETTING_SERVICEATHELIPAD :Automaatne helikopterihooldus maandumisplatsidel: {STRING} STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Hoolda helikoptereid peale igat maandumist, isegi kui lennujaamas pole depood STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Maastikuriba sidumine rööbas-, maa-, vee- ja lennuväljaribadega: {STRING} @@ -1396,9 +1455,15 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Maa värv väik STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Roheline STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Tumeroheline STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violetne -STR_CONFIG_SETTING_SMOOTH_SCROLLING :Vaade keskendatakse sujuvalt: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Vaateakna asukohale keskendamise viis, kui vajutatakse väikesele kaardile, või kui vaade keskendatakse mõnele rekvisiidile. Sisse lülitades on liikumine sujuv, välja lülitades läheb vaade kohe sihtpunkti -STR_CONFIG_SETTING_MEASURE_TOOLTIP :Ehitamisel mõõtude arvesti näitamine: {STRING} +STR_CONFIG_SETTING_SCROLLMODE :Vaate liigutamine: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Kaardil liikumise viis +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :RMB liigutab vaadet, osuti seisab paigal +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :RMB liigutab kaarti, osuti seisab paigal +STR_CONFIG_SETTING_SCROLLMODE_RMB :RMB liigutab kaarti +STR_CONFIG_SETTING_SCROLLMODE_LMB :Kaarti liigutatakse vasaku hiireklahviga +STR_CONFIG_SETTING_SMOOTH_SCROLLING :Keskenda vaade sujuvalt: {STRING} +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Mõjutab, kuidas põhivõõde liigub sihtpunkti pärast pisikaardil klõpsamist, või vaate muutmise käsu sisestamist. Sisse lüliitades liigub vaade sujuvalt, muidu hüppab vaade kohe sihtpunkti +STR_CONFIG_SETTING_MEASURE_TOOLTIP :Näita ehitustarvikute kasutamisel mõõdistamisabi: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Näitab ehitamise ajal kahe ruudu kaugus- ja kõrgusvahemikke STR_CONFIG_SETTING_LIVERIES :Ettevõtte värve näidatakse: {STRING} STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Vali, kas sõiduki värv sõltub sõiduki liigist või ettevõttest @@ -1409,13 +1474,13 @@ STR_CONFIG_SETTING_PREFER_TEAMCHAT :«ENTER» avab STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Vahetab «ENTER» ja «Ctrl+ENTER» klahvidega ettevõttesisese ja avaliku vestluse avamise STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Hiirerulli otstarve: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Võimaldab vaadet liigutada kahesuunalise hiirerulliga -STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Kaardi suurendamine -STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Kaardil liikumine -STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Väljas +STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Suurendab kaarti +STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Liigutab kaarti +STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Puudub STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Hiirerulli tundlikkus: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Muudab hiirerulli tundlikkust -STR_CONFIG_SETTING_OSK_ACTIVATION :Klaviatuuri näitamine ekraanil: {STRING} -STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Ekraaniklaviatuuri avamise viis. Ekraaniklaviatuur võimaldab teksti sisestamist ainult hiireosutiga. See on mõeldud kasutamiseks väikeste seadmetega, millel ei ole klaviatuuri +STR_CONFIG_SETTING_OSK_ACTIVATION :Virtuaalne klaviatuur: {STRING} +STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Vali viis, kuidas avada virtuaalne klaviatuur hiireosuti abil teksti sisestamiseks. See on mõeldud klaviatuurita väikeseadmetele STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Väljas STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Topeltklõpsuga STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Ühe klõpsuga (kui on fookuses) @@ -1427,10 +1492,11 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+klõps STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+klõps STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Väljas -STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Akna sulgemine paremklõpsuga: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Aken suletakse paremklõpsuga: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Sulgeb akna, kui selles paremklõps teha. Lülitab välja paremklõpsuga vihjed! -STR_CONFIG_SETTING_AUTOSAVE :Automaatne salvestamine: {STRING} -STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vali automaatse salvestamise intervall +STR_CONFIG_SETTING_AUTOSAVE :Välpsalvestus: {STRING} +STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vali välpsalvestuste vaheline ajavahemik STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Salvestatud mängu nimes kasutatakse {STRING} kuupäevavormingut STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Kuupäeva vorming salvestatud mängu nimes @@ -1438,35 +1504,41 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :pikka (31. dets STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :lühikest (31-12-2008) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) -STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Mängu alguses mäng seisab: {STRING} -STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Sisse lülitamisel mängu alguses aeg seisab, et oleks rohkem aega kaardiga tutvuda -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Lubatud seisaku ajal: {STRING} -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Vali tegevuseg millede teostamine on lubatud mängu pausi ajal -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Mitte ükski toiming -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Kõik mitte-ehituslikud toimingud -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Kõik peale maastikku muutvate toimingute -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Kõik tõimingud +STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Uus mäng algab pausiga: {STRING} +STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Kui võimaldatud, siis uus mäng algab automaatselt pausiga, et anda kaardiga tutvumiseks aega +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Pausi ajal on lubatud: {STRING} +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Vali, mis tegevusi saab pausi ajal teha +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Mitte ükski tegevus +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Kõik tegevused peale ehitamise +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Kõik tegevused peale maastikukujunduse +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Kõik tegevused STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Põhjalikku sõidukiregistrit näidatakse: {STRING} -STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Lubab kasutada põhjalikke sõidukiregistreid, kus saab sõidukeid rühmitada -STR_CONFIG_SETTING_LOADING_INDICATORS :Laadimisnäidikute kasutamine: {STRING} -STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Vali, kas näidata sõiduki peale- ja mahalaadimise ajal laadimisnäidikut -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Sõiduplaan on sammudes, mitte päevades: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Sõiduplaanis on ajad märgitud mitte päevades, vaid sammudes -STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Sõiduplaanis on saabumis- ja väljumisajad: {STRING} -STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Sõiduki sõiduplaanis esitatakse eeldatavaid saabumis- ja väljumisaegu -STR_CONFIG_SETTING_QUICKGOTO :Sõidukile määratakse kohe ülesandeid: {STRING} -STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Sõiduki sihtide avamisel saab kohe «Mine» ülesandeid anda +STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Laseb kasutada põhjalikke sõidukiregistreid sõidukite jaotamiseks +STR_CONFIG_SETTING_LOADING_INDICATORS :Kasuta laadimisnäidikuid: {STRING} +STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Vali, kas koorma peale- ja mahalaadimisel näidatakse laadimisnäidikuid +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Graafik on sammudes, mitte päevades: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Graafikus on ajad märgitud mitte päevades, vaid sammudes +STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Graafikus on saabumis- ja väljumisajad: {STRING} +STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Sõiduki graafikus esitatakse eeldatavaid saabumis- ja väljumisaegu +STR_CONFIG_SETTING_QUICKGOTO :Sõiduki korralduste kiirloomine: {STRING} +STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Sõiduki sihtide avamisel saab kohe «Mine» korraldusi anda STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Algne rööbastee liik (mängu alustamisel/jätkamisel): {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Määrab mängu alguses või selle jätkamisel käibel oleva rööbastee liigi. «Esimesena saadaval» valib kõige vanema rööbastee liigi, «Viimasena saadaval» valib kõige uuema rööbastee liigi, ning «Enim kasutatud» valib kõige rohkem kasutatud rööbastee liigi -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Esimesena saadaval -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Viimasena saadaval +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Määrab mängu alguses või selle jätkamisel käibel oleva rööbastee liigi. «Vanim» valib kõige vanema rööbastee liigi, «Uusim» valib kõige uuema rööbastee liigi, ning «Enim kasutatud» valib kõige rohkem kasutatud rööbastee liigi +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Vanim +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Uusim STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Enim kasutatud -STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Kinnise raudteelõigu näitamine: {STRING} -STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Värvib kinnise raudtee teist värvi. Lihtsustab vigade leidmist, kui rongid ei kasuta raudteelõiku -STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Ehitustarvikud jäävad kasutamisel käibele: {STRING} -STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Sildade, tunnelite jne ehitamise tarvikud on kasutamise järel veel käibel -STR_CONFIG_SETTING_EXPENSES_LAYOUT :Kulutuste rühmitamine rahavoogude aruandes: {STRING} +STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Hõivatud blokkpiirkondade näitamine: {STRING} +STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Värvib hõivatud blokkpiirkonnad eri värvi, abistamaks tõrgete puhul, kus rongid ei sisene trajektoorijärgsetesse blokkidesse +STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Säilita tegev ehitustarvik pärast kasutamist: {STRING} +STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Säilita sildade, tunnelite, jms. ehitustarvikud pärast kasutamist +STR_CONFIG_SETTING_EXPENSES_LAYOUT :Kulutuste jaotamine rahavoogude aruandes: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Määrab rahavoogude aruande ülesehituse +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Rööbastee ehitamisel on signaalid isekõrvalduvad: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Rööbastee ehitamisel kõrvaldatakse ette jäävad signaalid automaatselt. Silmas pidada, et see võib põhjustada rongide kokkupõrkeid. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Kiirendatud mängu kiiruspiirang: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Piira mängukiirust, kui mäng on kiirendatud. 0 = piiramatu (nii kiire, kui arvuti võimaldab). Väärtused alla 100% aeglustavad mängu. Kõrgeim kiirus sõltub arvutiomadustest, ning võib mänguti erineda. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% harilikust mängukiirusest +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Piiramatu (nii kiire, kui arvuti võimaldab) STR_CONFIG_SETTING_SOUND_TICKER :Lühiteadetes: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Lühiteate ilmumisel kostub helisignaal @@ -1483,38 +1555,40 @@ STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Õnnetustes ja STR_CONFIG_SETTING_SOUND_VEHICLE :Sõidukitel: {STRING} STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Kostuvad sõidukite helid STR_CONFIG_SETTING_SOUND_AMBIENT :Taustahelid: {STRING} -STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Maastikult, tööstustest ja linnadest kostuvad taustahelid +STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Maastikult, tööstustest ja asulatest kostuvad taustahelid STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Sobivate sõidukite puudumisel on taristu ehitamine keelatud: {STRING} STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Sisse lülitamisel on taristu ehitamine võimalik ainult juhul, kui sellega seonduvad sõidukid on juba saadaval. Väldib mõttetut raha ja aja kulu, kui ehitatakse taristu, mida ei saa kasutada -STR_CONFIG_SETTING_MAX_TRAINS :Ettevõtte rongide ülempiir: {STRING} -STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Ettevõttele kuuluvate rongide arvu ülempiir -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Ettevõtte mootorsõidukite ülempiir: {STRING} -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Ettevõttele kuuluvate mootorsõidukite arvu ülempiir -STR_CONFIG_SETTING_MAX_AIRCRAFT :Ettevõtte õhusõidukite ülempiir: {STRING} -STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Ettevõttele kuuluvate lennukite arvu ülempiir -STR_CONFIG_SETTING_MAX_SHIPS :Ettevõtte laevade ülempiir: {STRING} -STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Ettevõttele kuuluvate laevade arvu ülempiir +STR_CONFIG_SETTING_MAX_TRAINS :Ettevõtte rongide ülempiirang: {STRING} +STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Ettevõttele kuuluvate rongide arvu ülempiirang +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Ettevõtte mootorsõidukite ülempiirang: {STRING} +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Ettevõttele kuuluvate mootorsõidukite arvu ülempiirang +STR_CONFIG_SETTING_MAX_AIRCRAFT :Ettevõtte õhusõidukite ülempiirang: {STRING} +STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Ettevõttele kuuluvate lennukite arvu ülempiirang +STR_CONFIG_SETTING_MAX_SHIPS :Ettevõtte laevade ülempiirang: {STRING} +STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Ettevõttele kuuluvate laevade arvu ülempiirang STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Rongikeeld arvutile: {STRING} STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Selle seade sisse lülitamise korral ei ole arvuti juhitud mängijal lubatud rongide ehitamine STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Sõidukikeeld arvutile: {STRING} STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Selle seade sisse lülitamise korral ei ole arvuti juhitud mängijal lubatud veokite ehitamine STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Õhusõidukikeeld arvutile: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Selle seade sisse lülitamise korral ei ole arvuti juhitud mängijal lubatud lennukite ehitamine +STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Selle seade sisse lülitamise korral ei ole arvuti juhitud mängijal lubatud õhusõidukite ehitamine STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Laevakeeld arvutile: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Selle seade sisse lülitamise korral ei ole arvuti juhitud mängijal lubatud laevade ehitamine STR_CONFIG_SETTING_AI_PROFILE :Vaikeseadistus: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Valib suvalise tehismõistuse ja lisatava tehismõistuse ja mänguskripti vaikeseadistuse +STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Vali seadistus, mida kasutada suvalistes AI-des või uue AI/GameScripti lisamisel STR_CONFIG_SETTING_AI_PROFILE_EASY :Lihtne STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Keskmine STR_CONFIG_SETTING_AI_PROFILE_HARD :Keeruline -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tehismõistus mitmikmängus: {STRING} +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :AI mitmikmängus: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Võimaldab arvutil osaleda mitmikmängudes -STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcode-d ennem skripte on peatatud: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maksimaalne arv arvutamise käike mida skript võib teha ühel sammul +STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Tehete piirang skriptide peatamiseks: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Suurim lubatud arv arvutustehteid, mida skript saab ühe käigu jooksul teha +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Mälukasutuspiirang skripti kohta: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kui palju vahemälu võib skript tarbida enne selle sunniviisilist kõrvaldamist. Suurtel kaartidel võib olla vajalik suurendada. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Hooldusvälp protsentides: {STRING} @@ -1525,7 +1599,7 @@ STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} päev{P STR_CONFIG_SETTING_SERVINT_DISABLED :Väljas STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Mootorsõiduki hooldusvälba vaikeväärtus: {STRING} STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Määrab uute mootorsõidukite hooldusvälba, kui sõidukile eraldi hooldusvälpa ei määrata -STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Lennuki hooldusvälba vaikeväärtus: {STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Õhusõidukite hooldusvälba vaikeväärtus: {STRING} STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Määrab uute õhusõidukite hooldusvälba, kui sõidukile eraldi hooldusvälpa ei määrata STR_CONFIG_SETTING_SERVINT_SHIPS :Laevade hooldusvälba vaikeväärtus: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Määrab uute laevade hooldusvälba, kui sõidukile eraldi hooldusvälpa ei määrata @@ -1574,10 +1648,19 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Täielik STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Värvilised uudised ilmuvad aastast {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Värviliste uudiste ilmumise algusaasta. Varasematel aastatel ilmuvad uudised must-valgelt STR_CONFIG_SETTING_STARTING_YEAR :Alustamise aeg: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Sujuv majandus (rohkem, kuid väikesed muutused): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Toodangumahtude muutused on väiksemad ja sagedasemad. Juhul kui tööstused tulevad NewGRF-ist ei oma see seade tavaliselt mõju +STR_CONFIG_SETTING_ENDING_YEAR :Edetabeli lõppaasta: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Aasta, millal edetabeli pidamine lõppeb. Selle aasta lõpus jäädvustatakse ettevõtte punktid, ning näidatakse edetabelit, kuid mängijad saavad pärast jätkata.{}Kui see on enne algusaastat, ei näidata edetabelit kunagi. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Mitte kunagi +STR_CONFIG_SETTING_ECONOMY_TYPE :Majandusliik: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Sujuvas majanduses muutub toodang sagedamini, kuid vähehaaval. Külmas majanduses on toodang muutumatu ja tööstuseid ei suleta. NewGRF-iga lisatud tööstusliigid võivad seda seadistust eirata. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Algupärane +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Sujuv +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Külm STR_CONFIG_SETTING_ALLOW_SHARES :Aktsiatehingud teiste ettevõtetega: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kui on aktiveeritud siis on ettevõtte aktsiate ostmine ja müümine lubatud. Aktsiad on saadaval ainult ettevõtetel mille vanus on üle teatud piiri +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Ettevõtte vanuse alampiir aktsiakauplemiseks: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Määra alampiir ettevõtte vanusele, enne kui teised saavad selle aktsiaid osta ja müüa. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Protsent tuludest mis läheb 'kanna edasi' süsteemis alumistesse lülidesse: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Protsent tuludest mis antakse edasi 'kanna edasi' süsteemidele. Lubab täpsemalt jaotada kasumit erinevate harude vahel. STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Kui lohistatakse siis paigutatakse foorid iga: {STRING} @@ -1600,30 +1683,35 @@ STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Ainult tavaline STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Ainult täiustatud STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Kõik -STR_CONFIG_SETTING_TOWN_LAYOUT :Uute linnade tänavaplaneering: {STRING} -STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Teedevõrgu paigutus linnades +STR_CONFIG_SETTING_TOWN_LAYOUT :Uute asulate teeplaneering: {STRING} +STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Teedevõrgu paigutus asulates STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :Esialgne STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :Paremad teed STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2 võrgustik STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 võrgustik STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Suvaline -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Linnapoolne teedeehitus: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Luba linnadel ehitada teid, et soodustada kasvu. Lülita välja, et keelata linnadel rajada teid -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Linnadel on lubatud ehitada ülesõidukohti: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Selle seade sisse lülitamine lubab linnadel ehitada ülesõidukohti -STR_CONFIG_SETTING_NOISE_LEVEL :Lennujaamade mürapiirangud linnades: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Kui seade ei ole sisse lülitatud, siis igasse linna on lubatud ehitada kuni kaks lennuvälja. Kui see seade on lubatud, siis lennuväljade arvu ülempiiri määrab linna müratundlikkus, mis sõltub rahvaarvust ja lennuvälja suurusest ja kaugusest -STR_CONFIG_SETTING_TOWN_FOUNDING :Linnade rajamine keset mängu: {STRING} -STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Võimaldab ettevõttel uusi linnu rajada +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Asulatel on lubatud teederajamine: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Luba asulatele teederajamine, et soodustada kasvu. Lülita välja, et keelata asulatele teederajamine +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Asulatel on lubatud ehitada ülesõidukohti: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Selle seade sisse lülitamine lubab asulatel ehitada ülesõidukohti +STR_CONFIG_SETTING_NOISE_LEVEL :Lennujaamade mürapiirangud asulates: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Kui seade ei ole sisse lülitatud, siis igasse asulasse on lubatud ehitada kuni kaks lennuvälja. Kui see seade on lubatud, siis lennuväljade arvu ülempiiri määrab asustuse müratundlikkus, mis sõltub rahvaarvust ja lennuvälja suurusest ja kaugusest +STR_CONFIG_SETTING_TOWN_FOUNDING :Asulate rajamine keset mängu: {STRING} +STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Võimaldab ettevõttel uusi asulaid rajada STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Keelatud STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Lubatud -STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Lubatud, koos linnaskeemi valimisega +STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Lubatud, koos asulaskeemi valimisega +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Kauba tekkimine asulates: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Kui palju kaupa toodavad majad asulates, võrreldes elanike arvuga.{}Ruutfunktsioon: kaks korda suurem asula tekitab neli korda rohkem reisijaid.{}Lineaarne: kaks korda suurem asula tekitab kaks korda rohkem reisijaid. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Ruutfunktsioon (algupärane) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineaarne STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Mängu jooksul kasvavad puud: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Juhib suvalist puude kasvu mängu jooksul. See seade võib mõjutada osade tööstuste tööd, mis sõltuvad puude kasvust (näiteks saekaater) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ei {RED}(saeveski ei tööta) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Ainult vihmametsades -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Igal pool +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Kasvavad, aga ei laiene {RED}(saeveski kasutamatu) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Kasvavad, kuid laienevad vaid vihmametsas +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Kasvab ja laieneb kõikjal +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Ei kasva, ei laiene {RED}(saeveski kasutamatu) STR_CONFIG_SETTING_TOOLBAR_POS :Peamine tarvikuriba paikneb: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Tarvikuriba rõhtne paiknemine ekraani ülaosas @@ -1633,32 +1721,37 @@ STR_CONFIG_SETTING_SNAP_RADIUS :Akende haardumi STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Akendevaheline kaugus, enne, kui liigutatav aken joondatakse kõrvalakendega STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} piks{P 0 el lit} STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Väljas -STR_CONFIG_SETTING_SOFT_LIMIT :Suletavate akende arvu ülempiir: {STRING} +STR_CONFIG_SETTING_SOFT_LIMIT :Suletavate akende arvu ülempiirang: {STRING} STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Suletavate akende arv, enne, kui vanad aknad suletakse, et uutele akendele ruumi teha STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :väljas STR_CONFIG_SETTING_ZOOM_MIN :Suurim suurendusaste: {STRING} -STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Vaateakna suurendusastme ülempiir. Kõrgete suurendusastmete lubamisega kaasneb suurem vahemälu kasutamine +STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Vaateakna suurendusastme ülempiirang. Kõrgete suurendusastmete lubamisega kaasneb suurem vahemälu kasutamine STR_CONFIG_SETTING_ZOOM_MAX :Väikseim suurendusaste: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Vaateakna suurendusastme alampiir. Madalate suurendusastmete kasutamine võib põhjustata viivitusi +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Sprite'ide ekraanilahutus kuni: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Piirab ekraanilahutust, mida sprite'ide jaoks kasutatakse. Sprite'ide ekraanilahutust piirates ei kasutata kõrge ekraanilahutusega graafikat ka siis, kui see on saadaval. Võib aidata ühtsustada mängu väljanägemist, kui osad GRF failid on kõrge ekraanilahutusega ja teised mitte. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Tavaline STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x -STR_CONFIG_SETTING_TOWN_GROWTH :Linna kasvutempo: {STRING} -STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Linna kasvamise kiirus +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x +STR_CONFIG_SETTING_TOWN_GROWTH :Asulate kasvutempo: {STRING} +STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Asulate kasvutempo STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Pole STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Aeglane STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normaalne STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Kiire STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Väga Kiire -STR_CONFIG_SETTING_LARGER_TOWNS :Proportsioon asulatest millest kasvavad linnad: {STRING} +STR_CONFIG_SETTING_LARGER_TOWNS :Linnadeks kasvavate asulate osakaal: {STRING} STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Asulate arv mis kasvavad tulevikus linnadeks, elik asulate arv mis on alguses suuremad ja kasvavad kiiremini kui ülejäänud asulad STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 iga {COMMA} kohta STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Mitte ühtegi -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Algne linnade suurustegur: {STRING} +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Algne linnade suuruskordaja: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Keskmine linna suurus võrreldes tavalise asulaga mängu alguses STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Jaotusgraafikuid uuendatakse igal {STRING}. päeval @@ -1672,9 +1765,9 @@ STR_CONFIG_SETTING_DISTRIBUTION_PAX :Reisijate jaotu STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Kui jaamast A läheb jaama B umbes sama hulk reisijaid, kui jaamast B jaama A, siis jaotus on «sümeetriline». Kui mõlemas suunas võib liikuda ükskõik, kui palju resijaid, siis jaotus on «asümeetriline». Kui reisijate liikumist ei jaotata, siis jaotus on «väljas». STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Posti jaotuse viis: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :Kui jaamast A viiakse jaama B umbes sama hulk posti, kui jaamast B jaama A, siis jaotus on «sümeetriline». Kui mõlemas suunas viiakse ükskõik, kui palju posti, siis jaotus on «asümeetriline». Kui posti liikumist ei jaotata, siis jaotus on «väljas». -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :SOOMUSTATUD kaubarühma jaotuse viis: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Parasvöötmes on SOOMUSTATUD kaubarühm väärisasjad, lähistroopikas teemandid, ning lähisartikas kuld. Neid saab lisada NewGRF-iga. Kui jaamast A viiakse jaama B umbes sama hulk kaupa, kui jaamast B jaama A, siis jaotus on «sümeetriline». Kui mõlemas suunas viiakse ükskõik, kui palju kaupa, siis jaotus on «asümeetriline». Kui posti liikumist ei jaotata, siis jaotus on «väljas». Lähisartikas valida asümeetriline või väljas, sest pankadest kulda tagasi ei tule. Parasvöötmes ja lähistroopikas on võimalik valida ka sümeetriline, sest pangad saadavad lähtepanka väärisasju tagasi. -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Teiste kaubarühmade jaotuse viis: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :SOOMUSTATUD veoseliigi jaotuse viis: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Parasvöötmes on SOOMUSTATUD veoseliik väärisesemed, lähistroopikas teemandid, ning lähisartikas kuld. Neid saab lisada NewGRF-iga. Kui jaamast A viiakse jaama B umbes sama hulk kaupa, kui jaamast B jaama A, siis jaotus on «sümeetriline». Kui mõlemas suunas viiakse ükskõik, kui palju kaupa, siis jaotus on «asümeetriline». Kui posti liikumist ei jaotata, siis jaotus on «väljas». Lähisartikas valida asümeetriline või väljas, sest pankadest kulda tagasi ei tule. Parasvöötmes ja lähistroopikas on võimalik valida ka sümeetriline, sest pangad saadavad lähtepanka väärisesemed tagasi. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Teiste veoseliikide jaotuse viis: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Kui jaamast A viiakse jaama B umbes sama hulk kaupa, kui jaamast B jaama A, siis jaotus on «sümeetriline». Kui mõlemas suunas viiakse ükskõik, kui palju kaupa, siis jaotus on «asümeetriline». Kui posti liikumist ei jaotata, siis jaotus on «väljas». Tavaliselt on head valikud «asümeetriline» ja «väljas». STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Jaotuse täpsus: {STRING} STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Kõrgema väärtusega kasutatakse ahelgraafiku koostamiseks protsessorit rohkem. Kui see võtab liiga kaua, võib täheldada viivitusi. Madala väärtusega tekib ebatäpne jaotus, ning kaup ei pruugi õigesse sihtpunkti jõuda. @@ -1690,6 +1783,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Liideses näida STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Inglise mõõdustik (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Meetermõõdustik (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI-süsteem (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Mänguühikud (ruutu/päev) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Võimsusühikud: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Liideses näidatakse võimsust valitud mõõdustikus @@ -1726,11 +1820,11 @@ STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Graafik STR_CONFIG_SETTING_SOUND :{ORANGE}Heliefektid STR_CONFIG_SETTING_INTERFACE :{ORANGE}Liides STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Üldine -STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Vaateavad +STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Vaated STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Ehitus STR_CONFIG_SETTING_ADVISORS :{ORANGE}Uudised / Nõunikud STR_CONFIG_SETTING_COMPANY :{ORANGE}Ettevõte -STR_CONFIG_SETTING_ACCOUNTING :{ORANGE}Raamatupidamine +STR_CONFIG_SETTING_ACCOUNTING :{ORANGE}Arveldamine STR_CONFIG_SETTING_VEHICLES :{ORANGE}Sõidukid STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}Füüsika STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Marsruutimine @@ -1738,8 +1832,8 @@ STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Piirang STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Katastroofid / Õnnetused STR_CONFIG_SETTING_GENWORLD :{ORANGE}Maailma tekitamine STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Keskkond -STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Linnavõimud -STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Linnad +STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Omavalitsus +STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Asulad STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Tööstused STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Kaubajaotus STR_CONFIG_SETTING_AI :{ORANGE}Konkurendid @@ -1773,28 +1867,32 @@ STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :Mitteühilduv s STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :tundmatu STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... tihendusaste «{STRING}» ei sobi STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... mängu salvestamise vormingut «{STRING}» ei ole. Taastatakse «{STRING}» -STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... eiratakse alusgraafika kogu «{STRING}»: ei leitud -STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... eiratakse alushelide kogu «{STRING}»: ei leitud -STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... eiratakse alusmuusika kogu «{STRING}»: ei leitud +STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... eiratakse lähtegraafikakogu «{STRING}»: ei leitud +STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... eiratakse lähtehelikogu «{STRING}»: ei leitud +STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... eiratakse lähtemuusikakogu «{STRING}»: ei leitud STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Vahemälu on täis -STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Pildipuhvri (ingl k «spritecache») suurendamine {BYTES} võrra ebaõnnestus. Pildipuhvri uus suurus on {BYTES}. Seetõttu on OpenTTD nüüd aeglasem. 32 bpp graafika keelamine ja suurendusastme ülempiiri vähendamine piirab vahemälu tarbimist +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Pildipuhvri (ingl k «spritecache») suurendamine {BYTES} võrra ebaõnnestus. Pildipuhvri uus suurus on {BYTES}. Seetõttu on OpenTTD nüüd aeglasem. 32 bpp graafika keelamine ja suurendusastme ülempiirangu vähendamine piirab vahemälu tarbimist + +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}Videoseadete viga... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... ei leitud ühilduvat GPU-d. Riistvarakiirendus väljalülitatud # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} STR_INTRO_NEW_GAME :{BLACK}Uus mäng -STR_INTRO_LOAD_GAME :{BLACK}Jätkuv mäng +STR_INTRO_LOAD_GAME :{BLACK}Mängu jätk STR_INTRO_PLAY_SCENARIO :{BLACK}Stsenaarium STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Kõrguskaart STR_INTRO_SCENARIO_EDITOR :{BLACK}Stsenaariumiredaktor STR_INTRO_MULTIPLAYER :{BLACK}Mitmikmäng STR_INTRO_GAME_OPTIONS :{BLACK}Liidese seadistus -STR_INTRO_HIGHSCORE :{BLACK}Punktitabel +STR_INTRO_HIGHSCORE :{BLACK}Edetabel STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Seaded STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-i seadistus STR_INTRO_ONLINE_CONTENT :{BLACK}Aineste allalaadimine -STR_INTRO_SCRIPT_SETTINGS :{BLACK}Arvuti seadistus +STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI/GameScripti seaded STR_INTRO_QUIT :{BLACK}Välju STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Alusta uut mängu. Ctrl+klõps jätab kaardi seadistamise vahele @@ -1805,34 +1903,27 @@ STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Loo oma STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Alusta mitmikmängu STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Vali 'parasvöötme' maastik -STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Vali 'lähispolaarne' maastik +STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Vali 'lähisarktiline' maastik STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Vali 'lähistroopiline' maastik STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vali 'mänguasjamaa' maastik STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Ava liidese seadistamine -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Ava punktitabel +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Ava edetabel STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Ava seaded STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Ava NewGRF-i seadistamine STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Otsi allalaadimiseks uusi ja uuendatud aineseid -STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Ava arvuti seadistamine +STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Ava AI/GameScripti seaded STR_INTRO_TOOLTIP_QUIT :{BLACK}Välju 'OpenTTD'st -STR_INTRO_TRANSLATION :{BLACK}{NUM} tõlge{P "" t} on puudu. Palun aita teha OpenTTD veel paremaks, ning hakka tõlkijaks. Rohkem teavet leiad «readme.txt» failist. +STR_INTRO_BASESET :{BLACK}Hetkel valitud lähtegraafikakogust puudub {NUM} sprite{P "" 'i}. Kontrolli, kas lähtekogule on uuendusi. +STR_INTRO_TRANSLATION :{BLACK}Puudub {NUM} tõlge{P "" t}. Aita teha OpenTTD paremaks, panusta tõlkimisega. Rohkem teavet leiad «readme.txt» failist. # Quit window STR_QUIT_CAPTION :{WHITE}Mängust väljumine -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Kas soovite OpenTTD sulgeda ja minna tagasi süsteemi {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Kas olete kindel, et soovite OpenTTD-st väljuda? STR_QUIT_YES :{BLACK}Jah STR_QUIT_NO :{BLACK}Ei -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Mängu lõpetamine STR_ABANDON_GAME_QUERY :{YELLOW}Kas lõpetada mäng? @@ -1841,16 +1932,16 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Kas sa # Cheat window STR_CHEATS :{WHITE}Petmine STR_CHEATS_TOOLTIP :{BLACK}Märgistatud kastid näitavad et, kas sa oled varem seda pettust kasutanud -STR_CHEATS_WARNING :{BLACK}Hoiatus! Sa kavatsed oma konkurente reeta. Pea meeles, et sellisest häbist ei saa sa enam kunagi lahti +STR_CHEATS_NOTE :{BLACK}Tähelepanu: nende seadete kasutamine jäädvustub salvestatud mängu STR_CHEAT_MONEY :{LTBLUE}Suurenda raha hulka {CURRENCY_LONG} võrra STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Mängimine ettevõttena: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Võlubuldooser (eemaldab tööstused, paiksed objektid): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnelid võivad üksteist läbida: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}Reaktiivlennukid ei kuku (tihti) väikestel lennuväljadel alla: {ORANGE} {STRING} -STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Muuda maksimaalset kaardi kõrgust {ORANGE}{NUM} -STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Muuda kaardi maksimaalset mägede kõrgust +STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Muuda kaardi ülemkõrgust {ORANGE}{NUM} +STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Muuda kaardil olevate mägede ülemkõrgust STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Parasvöötme maastik -STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Arktiline maastik +STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Lähisarktiline maastik STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Troopiline maastik STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Mänguasjamaa STR_CHEAT_CHANGE_DATE :{LTBLUE}Muuda kuupäeva: {ORANGE} {DATE_SHORT} @@ -1864,7 +1955,7 @@ STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näita STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näita rongide värvistikke STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Näita mootorsõidukite värvistikke STR_LIVERY_SHIP_TOOLTIP :{BLACK}Näita laevavärvistikke -STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Näita lennukivärvistikke +STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Näita õhusõidukite värvistikke STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Vali põhivärv värvistikule. Ctrl+Klikk valib selle värvi tervele värvistikule STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Vali teine värv valitud värvistikule. Ctrl+Klõps valib selle värvi tervele värvistikule STR_LIVERY_PANEL_TOOLTIP :{BLACK}Vali muudetav värvivalik - või mitu Ctrl+klõps abil. Klõpsa kastil, et muuta värvivaliku kasutust @@ -1953,10 +2044,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaheta k # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mitmikmäng -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Reklaamitav -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Valib reklaamitava (internet) või mittereklaamitava (kohtvõrk, LAN) mängu -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ei -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Jah STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Mängija nimi: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Teised mängijad tunnevad sind selle nime järgi @@ -1990,15 +2077,17 @@ STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Aeg het STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Kaitstud salasõnaga! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVER ON MAAS STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERVER ON TÄIS -STR_NETWORK_SERVER_LIST_VERSION_MISMATCH :{SILVER}OSAD EI SOBI +STR_NETWORK_SERVER_LIST_VERSION_MISMATCH :{SILVER}ÜHILDUMATUD VERSIOONID STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEWGRF SOBIMATUS STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Liitu mänguga STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Uuenda andmeid STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Serveri info värskendamine -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Uuenda loendit -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Uuenda võrgus asuvate serverite loendit +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Otsing internetis +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Internetis avalike serverite otsimine +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Otsing LANis +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Kohtvõrgus serverite otsimine STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Sisesta server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Sisesta loendisse uus server, milles toimuvaid mänge jälgida STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Tee server @@ -2015,19 +2104,21 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Serveril STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Määra salasõna STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Et server ei oleks avalik, kaitse oma mäng salasõnaga -STR_NETWORK_START_SERVER_UNADVERTISED :Jah +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Reklaami +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valib reklaamitava (internet) või mittereklaamitava (kohtvõrk, LAN) mängu +STR_NETWORK_START_SERVER_UNADVERTISED :Ei STR_NETWORK_START_SERVER_ADVERTISED :Jah STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Kliente kuni: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS.in :sees -STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Määrab klientide arvule ülempiiri. Kõiki vabu kohti ei pea täitma +STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Määrab klientide arvule ülempiirangu. Kõiki vabu kohti ei pea täitma STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} ettevõte{P "" t} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Ettevõtteid kuni: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Piirab serveris olevate ettevõtete arvu STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} vaatleja{P "" t} STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Vaatlejaid kuni: STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Piirab serveris olevate vaatlejate arvu -STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Räägitav keel: +STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Suhtluskeel: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Teavitab teisi mängijaid, mis keeles serveris rääkida STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Sisesta mitmikmängu nimi @@ -2129,7 +2220,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Uus ettevõte # Network client list STR_NETWORK_CLIENTLIST_KICK :Viska välja STR_NETWORK_CLIENTLIST_BAN :Bänn -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Anna raha STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Räägi kõigiga STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Räägi ettevõttega STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privaatne sõnum @@ -2138,8 +2228,6 @@ STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Vaatlejad -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Sisesta summa mida anda - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Sisestatud salasõna ei salvestata STR_COMPANY_PASSWORD_OK :{BLACK}Määra ettevõtte uus salasõna @@ -2177,7 +2265,7 @@ STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Mitmikm STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Salvestatud mängu laadimine ebaõnnestus STR_NETWORK_ERROR_SERVER_START :{WHITE}Ei saa uut serverit alustada STR_NETWORK_ERROR_CLIENT_START :{WHITE}Ei õnnestu ühendada -STR_NETWORK_ERROR_TIMEOUT :{WHITE}#{NUM}. ühendus aegus +STR_NETWORK_ERROR_TIMEOUT :{WHITE}Ühendus nr {NUM} aegus STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Tekkis protokolliviga ja ühendus katkes STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Kliendi osa ei vasta serveri osaga STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Vale salasõna @@ -2226,24 +2314,26 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Mäng on endise STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Mäng on endiselt seisatud ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Mäng on endiselt seisatud ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Mäng on endiselt peatatud ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Mäng on endiselt seisatud ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Mäng jätkub ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :pole piisavalt mängijaid STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :klientide ühendamine STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuaalne STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :mängu skript +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :transpordisõlmede graafiku uuenduse ootel ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :lahkub STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} liitus mänguga STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} liitus mänguga ({2:NUM}. klient) STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} liitus {2:NUM}. ettevõttega STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} liitus vaatlejatega -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} alustas uue ettevõtte (#{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} alustas uue ettevõtte (nr {2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} lahkus mängust ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} uus nimi on {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} andis su ettevõttele {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Sa andsid {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} saatis {2:CURRENCY_LONG} ettevõttele {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server sulges sessiooni STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server restardib...{}Palun oota... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} visati välja. Põhjendus: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Aineste allalaadimine @@ -2258,11 +2348,11 @@ STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Märgi u STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Märgi kõik aineste uuendused allalaadimiseks STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Eemalda märgistus kõigilt STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Eemaldatakse allalaadimise märgistus -STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Otsi kolmandatest lehtedest +STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Otsi välistest veebilehtedest STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Otsi OpenTTD-st sõltumatutest lehtedest aineseid, mida OpenTTD aineste keskserverist ei saa STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Sa oled lahkumas OpenTTD-st! -STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Kolmandatest lehtedest allalaadimise tingimused sõltuvad lehest.{}Aineste paigaldamisel kasutada kolmandate lehtede juhiseid.{}Kas jätkata? -STR_CONTENT_FILTER_TITLE :{BLACK}Sildi- ja nimefilter: +STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Välistest veebilehtedest aineste allalaadimisel võivad kasutustingimused vahelduda.{}Paigaldusjuhiseid otsida samadest välistest veebilehtedest.{}Kas jätkata? +STR_CONTENT_FILTER_TITLE :{BLACK}Tähiste/nimede märksõna: STR_CONTENT_OPEN_URL :{BLACK}Külasta lehekülge STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Külasta lehekülge selle sisu jaoks. STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Laadi alla @@ -2276,26 +2366,26 @@ STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Sul on STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}See ei ole ainesena tuvastatav, seega OpenTTD ei saa seda alla laadida STR_CONTENT_DETAIL_UPDATE :{SILVER}See on asendus olemasolevale {STRING} STR_CONTENT_DETAIL_NAME :{SILVER}Nimi: {WHITE}{STRING} -STR_CONTENT_DETAIL_VERSION :{SILVER}Osa: {WHITE}{STRING} +STR_CONTENT_DETAIL_VERSION :{SILVER}Versioon: {WHITE}{STRING} STR_CONTENT_DETAIL_DESCRIPTION :{SILVER}Seletus: {WHITE}{STRING} STR_CONTENT_DETAIL_URL :{SILVER}Aadress: {WHITE}{STRING} STR_CONTENT_DETAIL_TYPE :{SILVER}Liik: {WHITE}{STRING} -STR_CONTENT_DETAIL_FILESIZE :{SILVER}Faili maht: {WHITE}{BYTES} +STR_CONTENT_DETAIL_FILESIZE :{SILVER}Allalaadimise suurus: {WHITE}{BYTES} STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER}Valitud kuna: {WHITE}{STRING} STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}Sõltuvused: {WHITE}{STRING} -STR_CONTENT_DETAIL_TAGS :{SILVER}Sildid: {WHITE}{STRING} +STR_CONTENT_DETAIL_TAGS :{SILVER}Tähised: {WHITE}{STRING} STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD on kompileeritud ilma «zlib» toeta... STR_CONTENT_NO_ZLIB_SUB :{WHITE}... aineste allalaadimine pole võimalik! # Order of these is important! -STR_CONTENT_TYPE_BASE_GRAPHICS :Alusgraafika +STR_CONTENT_TYPE_BASE_GRAPHICS :Lähtegraafika STR_CONTENT_TYPE_NEWGRF :NewGRF -STR_CONTENT_TYPE_AI :Tehismõistus -STR_CONTENT_TYPE_AI_LIBRARY :Tehismõistuse teek +STR_CONTENT_TYPE_AI :AI +STR_CONTENT_TYPE_AI_LIBRARY :AI teek STR_CONTENT_TYPE_SCENARIO :Stsenaarium STR_CONTENT_TYPE_HEIGHTMAP :Kõrguskaart -STR_CONTENT_TYPE_BASE_SOUNDS :Alushelid -STR_CONTENT_TYPE_BASE_MUSIC :Alusmuusika +STR_CONTENT_TYPE_BASE_SOUNDS :Lähtehelid +STR_CONTENT_TYPE_BASE_MUSIC :Lähtemuusika STR_CONTENT_TYPE_GAME_SCRIPT :Mängu skript STR_CONTENT_TYPE_GS_LIBRARY :GS teek @@ -2303,8 +2393,8 @@ STR_CONTENT_TYPE_GS_LIBRARY :GS teek STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Aineste allalaadimine... STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}Küsin faile... STR_CONTENT_DOWNLOAD_FILE :{WHITE}Hetkel laaditakse alla {STRING} ({NUM}/{NUM}) -STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}Allalaadimine valmis -STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES}/{BYTES} baiti alla laaditud ({NUM} %) +STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}Allalaadimise lõpp +STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES}/{BYTES} baiti allalaaditud ({NUM} %) # Content downloading error messages STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}Aineste keskserveriga ei õnnestu ühenduda... @@ -2318,6 +2408,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Jah, laadi graafika alla STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Ei, välju OpenTTD-st +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Allalaadimine ebaõnnestus +STR_MISSING_GRAPHICS_ERROR :{BLACK}Graafika allalaadimine ebaõnnestus.{}Palun laadida graafika alla käsitsi. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Välju OpenTTD-st + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Läbipaistvuse seadistus STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Muuda jaamamärkide läbipaistvust. Ctrl+klõps lukustab @@ -2336,6 +2430,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Kaubavoo STR_LINKGRAPH_LEGEND_ALL :{BLACK}Kõik STR_LINKGRAPH_LEGEND_NONE :{BLACK}Mitte ükski STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Vali näitamiseks ettevõtted +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}ei kasutata @@ -2358,6 +2453,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Ehita e STR_JOIN_WAYPOINT_CAPTION :{WHITE}Liida teemärgis STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Ehita eraldi teemärgis +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Välja lülitatud, sest ükski saadaval sõiduk ei sobi selle infrastruktuuriga + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Rööbasteede ehitamine STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektriraudtee ehitamine @@ -2390,7 +2488,7 @@ STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Vali mel # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Raudteejaama valik -STR_STATION_BUILD_ORIENTATION :{BLACK}Orientatsioon +STR_STATION_BUILD_ORIENTATION :{BLACK}Suund STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Raudteejaamale suuna valimine STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Radade arv STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Vali raudteejaama perroonide arv @@ -2399,8 +2497,8 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Vali rau STR_STATION_BUILD_DRAG_DROP :{BLACK}Lohistamine STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Ehita jaam kasutades hiirega lohistamist -STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Vali jaama klass mida tahad näidata -STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vali ehitatava jaama tüüp +STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Vali näidatav jaamarühm +STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Vali näidatav jaamaliik STR_STATION_CLASS_DFLT :Esialgne jaam STR_STATION_CLASS_WAYP :Meldepunktid @@ -2460,8 +2558,11 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Ehita tu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Ehita trammitunnel. Shift valib ehitamise/hinna kuvamise režiimi STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Lülitu maanteede ehitamise ja lammutamise vahel STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Lülitu trammitee ehitamise ja lammutamise vahel +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Muuda/uuenda teeliiki. Shift vaheldab ehitamist/eeldatavat maksumust +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Vaheta/uuenda trammiliiki. Shift-nupuga vahelduvad ehitamine ja eeldatav hind STR_ROAD_NAME_ROAD :Sõidutee +STR_ROAD_NAME_TRAM :Trammitee # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Depoo suund @@ -2474,7 +2575,7 @@ STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Bussijaa STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Vali bussijaamale suund STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Laadimisplatsi suund STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Vali laadimisplatsile suund -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Reisitrammi Jaama Suund +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Reisitrammijaama suund STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Vali reisitrammijaama suund STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Kaubatrammi Jaama Suund STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Vali kaubatrammijaama suund @@ -2486,8 +2587,8 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Ehita ka STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Lüüsi ehitamine. Shift valib ehitamise/hinna kuvamise režiimi STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Ehita laevaremonditehas (laevade ehitamiseks ja hoolduseks). Shift valib ehitamise/hinna kuvamise režiimi STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Ehita laevadokk. Ctrl võimaldab jaamu ühendada. Shift valib ehitamise/hinna kuvamise režiimi -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Paigalda poi mis on kasutatav teemärgisena. Shift valib ehitamise/hinna kuvamise režiimi -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Ehita veejuhe. Shift valib ehitamise/hinna kuvamise režiimi +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Paigalda poi, mis on kasutatav teemärgisena. Shift valib ehitamise/hinna kuvamise režiimi +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Ehita veesild. Shift valib ehitamise/hinna kuvamise režiimi STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Määratle veealad.{}Ehita kanal. Veekõrgusel Ctrl-klahvi all hoidmine ujutab ümbruskonna üle STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Jõgede paigutamine @@ -2505,23 +2606,23 @@ STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Ehita le # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Lennuvälja valik STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Vali lennuvälja suurus ja tüüp -STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Lennujaama tüüp +STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Lennuvälja järk STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Paigutus {NUM} STR_AIRPORT_SMALL :Väike -STR_AIRPORT_CITY :Linn -STR_AIRPORT_METRO :Metropoli lennujaam -STR_AIRPORT_INTERNATIONAL :Rahvusvaheline lennujaam -STR_AIRPORT_COMMUTER :Turisti -STR_AIRPORT_INTERCONTINENTAL :Ülemaailmne lennuväli -STR_AIRPORT_HELIPORT :Kopteriväljak -STR_AIRPORT_HELIDEPOT :Helikopteridepoo -STR_AIRPORT_HELISTATION :Helijaam +STR_AIRPORT_CITY :Linna +STR_AIRPORT_METRO :Suurlinna +STR_AIRPORT_INTERNATIONAL :Rahvusvaheline +STR_AIRPORT_COMMUTER :Pendelrände +STR_AIRPORT_INTERCONTINENTAL :Kontinentidevaheline +STR_AIRPORT_HELIPORT :Kopteriterminal +STR_AIRPORT_HELIDEPOT :Kopteriväljak +STR_AIRPORT_HELISTATION :Kopterijaam -STR_AIRPORT_CLASS_SMALL :Väikesed lennuväljad -STR_AIRPORT_CLASS_LARGE :Suured lennuväljad -STR_AIRPORT_CLASS_HUB :Suured lennuväljad -STR_AIRPORT_CLASS_HELIPORTS :Helikopteri lennuväljad +STR_AIRPORT_CLASS_SMALL :Väikelennujaamad +STR_AIRPORT_CLASS_LARGE :Suurlennujaamad +STR_AIRPORT_CLASS_HUB :Sõlmlennujaamad +STR_AIRPORT_CLASS_HELIPORTS :Kopterilennuväljad STR_STATION_BUILD_NOISE :{BLACK}Tekitatud müra: {GOLD}{COMMA} @@ -2535,20 +2636,26 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Maa ostm # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objekti valik STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vali ehitatav objekt. Shift valib ehitamise/hinna kuvamise režiimi -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vali ehitatava objekti klass +STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vali ehitatava objekti järk STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objekti eelvaade STR_OBJECT_BUILD_SIZE :{BLACK}Suurus: {GOLD}{NUM} x {NUM} ruutu STR_OBJECT_CLASS_LTHS :Majakad STR_OBJECT_CLASS_TRNS :Saatejaamad -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Puud STR_PLANT_TREE_TOOLTIP :{BLACK}Vali istutatava puu liik. Kui ruudus juba on puu, siis lisatakse rohkem eri liikide puid, olenemata valikust STR_TREES_RANDOM_TYPE :{BLACK}Suvalised puutüübid STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Istutab suvalisi puid. Shift valib ehitamise/hinna kuvamise režiimi STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Suvalised puud STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Istutab puid suvaliselt üle kogu maa-ala +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Tavaline +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Istuta üksikuid puid lohistades selleks üle maastiku. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Metsatukk +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Istuta väikeseid metsi selleks üle maastiku lohistades +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Mets +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Istuta suuri metsi selleks üle maastiku lohistades. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Maa tekitamine @@ -2565,31 +2672,31 @@ STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Nulli ma STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Kas oled kindel, et tahad lammutada kõik mängija omandid? # Town generation window (SE) -STR_FOUND_TOWN_CAPTION :{WHITE}Linnade tekitamine -STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Uus linn -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Ehita uus linn. Shift+klõpsuga kuvatakse eeldatav maksumus -STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Suvaline linn -STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Ehita linn suvalisse kohta -STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Palju suvalisi linnu -STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Kaardi katmine suvaliselt asetatud linnadega +STR_FOUND_TOWN_CAPTION :{WHITE}Asulate tekitamine +STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Uus asula +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Raja uus asula. Shift+klõpsuga kuvatakse eeldatav maksumus +STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Suvaline asula +STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Raja asula suvalisse kohta +STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Palju suvalisi asulaid +STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Kaardi katmine suvaliselt paigutatud asulatega -STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Linnanimi: -STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Sisesta linnanimi -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Klõpsa linnale nime andmiseks +STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Asula nimi: +STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Sisesta asula nimi +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Klõpsa asulale nime andmiseks STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Suvaline nimi STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Loo suvaline nimi -STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Linna suurus: +STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Asula suurus: STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Väike STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Keskmine STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Suur STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Suvaline -STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Vali linna suurus +STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Vali asula suurus STR_FOUND_TOWN_CITY :{BLACK}Linn -STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Suuremad linnad kasvavad kiiremini kui väikesed{}Sõltuvalt seadetest on need ka alguses suuremad +STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Linnad kasvavad kiiremini, kui tavalised asulad{}Sõltuvalt seadetest on need ka alguses suuremad -STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Linna teeplaneering -STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Vali linnas kasutatav teeplaneering +STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Asula teeplaneering +STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Vali selle asula teeplaneering STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Algne STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Paremad teed STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}2x2 ruudustik @@ -2599,15 +2706,21 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Suvaline # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Uue tööstuse rahastamine STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Vali siit nimistust sobiv tööstus -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Palju suvalisi tööstusi +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Tekita suvalised tööstused STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Katab kaardi suvaliselt paigutatud tööstustega +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Tekita suvalised tööstused +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Kas oled kindel, et sa tahad tekitada palju suvalisi tööstuseid? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Hind: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Rahasta STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Ehita STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Rahasta +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Kõrvalda kõik tööstused +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Kõrvalda kõik hetkel kaardil asuvad tööstused +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Kõrvalda kõik tööstused +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Kas oled kindel, et sa tahad kõrvaldada kõik tööstused? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Tööstuse {STRING} tööstuahel +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Tööstuse {STRING} tööstusahel STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Kauba {STRING} tööstusahel STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Tootvad tööstused STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Vastuvõtvad tööstused @@ -2625,9 +2738,10 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Vali tö # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Maa-ala andmed -STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Puhastustasu: {LTBLUE}N/A -STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Puhastustasu: {RED}{CURRENCY_LONG} -STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Sissetulek puhastamisel: {LTBLUE}{CURRENCY_LONG} +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Keskenda vaade ruudu asukohale. Ctrl+klõps avab asukohas uue vaate +STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Tühjendamise hind: {LTBLUE}N/A +STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Tühjendamise hind: {RED}{CURRENCY_LONG} +STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Tühjendamise tulu: {LTBLUE}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_OWNER_N_A :puudub STR_LAND_AREA_INFORMATION_OWNER :{BLACK}Omanik: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Maantee omanik: {LTBLUE}{STRING} @@ -2637,17 +2751,20 @@ STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Kohalik STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :puudub STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaadid: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Ehitatud: {LTBLUE}{DATE_LONG} -STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Jaama liik: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Jaama rühm: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Lennujaama liik: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Jaama järk: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Jaama liik: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Lennuvälja liik: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Lennujaama nimi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Lennujaama osa nimi: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Vastuvõetavad veosed: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Rööpa liik: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Teeliik: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Trammi tüüp: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Raudtee kiiruspiirang: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Lubatud piirkiirus: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Trammi kiiruspiirang: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Kaljud @@ -2733,7 +2850,7 @@ STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Puidust autotee STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Betoonist autoteesild STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Torujas autoteesild -STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Akvedukt +STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Veesild STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Retranslaator STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Tuletorn @@ -2743,30 +2860,66 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ettevõtte maa # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}OpenTTD lisainfo STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Algne autorikaitse {COPYRIGHT} 1995 Chris Sawyer, kõik õigused kaitstud -STR_ABOUT_VERSION :{BLACK}OpenTTD osa {REV} +STR_ABOUT_VERSION :{BLACK}OpenTTD versioon {REV} STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} OpenTTD meeskond # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Kaadrisagedus +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK} Simuleerimissagedus: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Simuleeritud mänguhetkede arv sekundis. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Graafika kaadrisagedus: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Renderdatud videokaadrite arv sekundis. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Mängu kiiruskordaja hetkel: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Kui kiiresti mäng jookseb võrreldes eeldatava kiirusega tavapärase simuleerimiskiiruse juures +STR_FRAMERATE_CURRENT :{WHITE}Hetkel STR_FRAMERATE_AVERAGE :{WHITE}Keskmine +STR_FRAMERATE_MEMORYUSE :{WHITE}Mälu +STR_FRAMERATE_DATA_POINTS :{BLACK}Andmed põhinevad {COMMA} mõõtmisel STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} kaadrit/s STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kaadrit/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kaadrit/s +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} +STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! STR_FRAMERATE_GAMELOOP :{BLACK}Mängutsükli lõppkokkuvõte: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Veoste käsitlemine: +STR_FRAMERATE_GL_TRAINS :{BLACK} Rongide sammud: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Maanteesõiduki sammud: +STR_FRAMERATE_GL_SHIPS :{BLACK} Laevade sammud: STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Õhusõiduki sammud: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Maailma sammud: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Ahelgraafiku viide: STR_FRAMERATE_DRAWING :{BLACK}Graafika renderdamine: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Maalmavaated: STR_FRAMERATE_VIDEO :{BLACK}Videoväljund: +STR_FRAMERATE_SOUND :{BLACK}Helide segamine: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI kokku: +STR_FRAMERATE_GAMESCRIPT :{BLACK} GameScript: +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Mängutsükkel +STR_FRAMETIME_CAPTION_GL_ECONOMY :Veoste käsitlemine +STR_FRAMETIME_CAPTION_GL_TRAINS :Rongi sammud +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Maanteesõidukite sammud +STR_FRAMETIME_CAPTION_GL_SHIPS :Laeva sammud STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Õhusõiduki sammud +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Maailma sammud +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Transpordisõlmede graafiku viivitus STR_FRAMETIME_CAPTION_DRAWING :Graafika renderdamine +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Maailmavaate renderdamine +STR_FRAMETIME_CAPTION_VIDEO :Videoväljund +STR_FRAMETIME_CAPTION_SOUND :Helide segamine +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI skriptide üldarv +STR_FRAMETIME_CAPTION_GAMESCRIPT :GameScript +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order @@ -2792,25 +2945,34 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Mängust STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Andmed puuduvad STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Märksõna: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Ülekirjuta fail +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Kas oled kindel, et soovid olemasoleva faili üle kirjutada? +STR_SAVELOAD_DIRECTORY :{STRING} (Kataloog) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Ülemkataloog) STR_SAVELOAD_OSKTITLE :{BLACK}Sisesta salvestatavale mängule nimi # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Maailma tekitamine STR_MAPGEN_MAPSIZE :{BLACK}Kaardi mõõtmed: -STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Määrab maakaardi mõõtmed ruutudes. Ruute, mida saab kasutada, on pisut vähem +STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Määrab kaardi mõõtmed ruutudes. Ruute, mida saab kasutada, on pisut vähem STR_MAPGEN_BY :{BLACK}* -STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Linnade sagedus: +STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Asustuste arv: STR_MAPGEN_DATE :{BLACK}Algus: -STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Tööstuste sagedus: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maksimaalne kaardi kõrgus: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Tõsta maksimaalset kaardi mägede kõrgust ühe võrra -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Langeta maksimaalset kaardi mägede kõrgust ühe võrra -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Lumepiiri kõrgus: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Lumepiiri liigutamine ühe võrra üles -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Lumepiiri liigutamine ühe võrra alla +STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Tööstustihedus: +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Kõrgpunkt: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Suurenda kaardi kõrgpunkti ühe võrra +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Vähenda kaardi kõrgpunkti ühe võrra +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Lumekatvus: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Suurenda lumekatvust kümne protsendi võrra +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Vähenda lumekatvust kümne protsendi võrra +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Kõrbekatvus: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Suurenda kõrbekatvust kümne protsendi võrra +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Vähenda kõrbekatvust kümne protsendi võrra +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Maatekituse meetod: -STR_MAPGEN_TREE_PLACER :{BLACK}Puude algoritm: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Maapinna tüüp: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Merepinna tase: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Jõgesid: @@ -2830,13 +2992,15 @@ STR_MAPGEN_BORDER_RANDOM :{BLACK}Suvaline STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Suvaline STR_MAPGEN_BORDER_MANUAL :{BLACK}Määratud -STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Kõrgustekaardi pööre: -STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Kõrgusekaardi nimi: +STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Kõrguskaardi pööre: +STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Kõrguskaardi nimi: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Suurus: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Muuda maksimaalset kaardi kõrgust -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Muuda lumepiiri kõrgust +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Soovitud kõrgpunkt +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Kõrgpunkt +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Lumekatvus (%) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Kõrbekatvus (%) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Muuda algusaastat # SE Map generation @@ -2872,8 +3036,8 @@ STR_NEWGRF_SETTINGS_CAPTION :{WHITE}NewGRF-i STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Põhjalikud NewGRF-i andmed STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Tegusad NewGRF failid STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Mittetegusad NewGRF failid -STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Vali väärtus: -STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtreeri sõna: +STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Eelseadistus: +STR_NEWGRF_FILTER_TITLE :{ORANGE}Märksõna: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Laadi valitud eelseadistused STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Salvesta eelseadistus STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Salvesta praegune loend eelseadistusena @@ -2906,11 +3070,15 @@ STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Proovi p STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Faili nimi: {SILVER}{STRING} STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF ID: {SILVER}{STRING} STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versioon: {SILVER}{NUM} -STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. ühilduv versioon: {SILVER}{NUM} +STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Vanim ühilduv versioon: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palett: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Vaikimisi (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Vaikimisi (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Pärand (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Pärand (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameetrid: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Puudub STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Andmed puuduvad STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Sobivat faili ei leitud @@ -2972,13 +3140,13 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Hoiatus: { STR_NEWGRF_ERROR_MSG_ERROR :{RED}Viga: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Saatuslik viga: {SILVER}{STRING} STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Esines raske NewGRF-i tõrge:{}{STRING} -STR_NEWGRF_ERROR_VERSION_NUMBER :OpenTTD väitel {1:STRING} ei tööta selle TTDPatch osaga. +STR_NEWGRF_ERROR_VERSION_NUMBER :OpenTTD väitel {1:STRING} ei tööta selle TTDPatch versiooniga. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on {STRING} TTD osa jaoks. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} on mõeldud kasutamiseks {STRING} STR_NEWGRF_ERROR_INVALID_PARAMETER :kõlbmatu «{1:STRING}» parameeter: parameeter {STRING} ({NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} peab olema laetud enne {STRING} STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} peab olema laetud pärast {STRING} -STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} nõuab OpenTTD osa {STRING} või uuemat +STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} nõuab OpenTTD versiooni {STRING} või uuemat STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF fail, mis tehti tõlkimiseks, STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Liiga palju NewGRF-e on laaditud STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Laadides {1:STRING} staatilise NewGRF-na koos {STRING} võib põhjustada sünkrooni katkemist. @@ -2991,6 +3159,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Loe pseudo-spri STR_NEWGRF_ERROR_GRM_FAILED :Soovitud GRFi ressursid ei ole saadaval (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} blokeeriti {STRING} poolt STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :«Sprite» paigutus kõlbmatus vormis («sprite» {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Liiga palju elemente omaduse väärtuse loendis (sprite {3:NUM}, omadus {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Vigane tööstustoodangu callback (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Ettevaatust! @@ -3022,6 +3192,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Veose/ümberseadistamise teave sõidukil '{1:ENGINE}' erineb ehitamisaegsest ostunimekirjast. Seetõttu võib uuendamisel või asendamisel ümberseadistamine ebaõnnestuda STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' põhjustas toodangu tagasikutsumises lõpmatu korduse STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Tagasikutse «{1:HEX}» tulemus «{2:HEX}» on kõlbmatu +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' vastas vigase veoseliigiga toodangu callback'is asukohas {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3046,53 +3217,55 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Lülita # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Sildi muutmine +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Keskenda põhivaade sildi asukohale. Ctrl+klõps avab sildi asukohas uue vaate STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Mine järgmise märgi juurde STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Mine eelmise märgi juurde STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Sisesta sildile nimi # Town directory window -STR_TOWN_DIRECTORY_CAPTION :{WHITE}Linnad +STR_TOWN_DIRECTORY_CAPTION :{WHITE}Asustused STR_TOWN_DIRECTORY_NONE :{ORANGE}- Puudub - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Linn){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Linnanimed - vajuta linnanimele, et viia vaade linnale. Ctrl+klõps avab uue vaate linna asukohast -STR_TOWN_POPULATION :{BLACK}Maailma rahvastik: {COMMA} +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Astuste nimed - vajuta nimele, et viia vaade asustusele. Ctrl+klõps avab uue vaate linna asukohas +STR_TOWN_POPULATION :{BLACK}Maailma rahvaarv: {COMMA} # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Linn) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Rahvaarv: {ORANGE}{COMMA}{BLACK} Ehitisi: {ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} eelmisel kuul: {ORANGE}{COMMA}{BLACK} Suurim: {ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Veoseid linna kasvamiseks: +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} eelmisel kuul: {ORANGE}{COMMA}{BLACK} Kuni: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Asula kasvuks nõutud veosed: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} vajalik STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} on talvel vajalik -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} kohale toimetatud +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} äraveetud STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (ikka veel vaja) -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (kohale toimetatud) -STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Linn kasvab {ORANGE}{COMMA}{BLACK} päevaga -STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Linn kasvab iga {ORANGE}{COMMA}{BLACK} päeva tagant (rahastatud) -STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Linn {RED}ei{BLACK} kasva -STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Mürapiirang linnas: {ORANGE}{COMMA}{BLACK} suurim: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Vaate viimine linnale +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (äraveetud) +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Asustus kasvab igal {ORANGE}{COMMA}{BLACK}.{NBSP}päeval +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Asustus kasvab igal {ORANGE}{COMMA}{BLACK}.{NBSP}päeval (rahastatud) +STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Asustus {RED}ei{BLACK} kasva +STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Mürapiirang asustuses: {ORANGE}{COMMA}{BLACK} suurim: {ORANGE}{COMMA} +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Keskenda vaade asustusele. Ctrl+klõps avab asustuse kohal uue vaate STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Omavalitsus STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Näita teavet kohaliku omavalitsuse kohta -STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Linna nime muutmine +STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Muuda linna nime STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Laienda -STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Linna suuruse suurendamine +STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Asustuse suurendamine STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Kustuta -STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Hävita see linn täielikult +STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Hävita see asustus täielikult -STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Linna nime vahetamine +STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Ümbernimeta linn # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} kohalik omavalitsus +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Ala STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Näita kohaliku omavalitsuse haldusala STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Ettevõtete hinnangud: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Pakutavad toimingud: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Nimekiri asjadest, mida saab siin linnas teha - klõpsa esemel, et saada rohkem andmeid +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Nimekiri asjadest, mida saab selles asulas teha - täpsustused esemele klõpsatel STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Soorita toiming STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Soorita ülalpool valitud toiming @@ -3105,32 +3278,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Rahasta uute ho STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Osta monopoolsed veoõigused STR_LOCAL_AUTHORITY_ACTION_BRIBE :Paku kohalikule omavalitsusele altkäemaksu -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW} Pisikese kohaliku reklaamikampaania korraldamine meelitab rohkem reisijaid ja kaupu sinu veoteenuseid kasutama.{} Hind: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW} Keskmise reklaamikampaania korraldamine, et meelitada rohkem reisijaid ja kaupu sinu teenuste juurede.{} Hind: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW} Suure reklaamikampaania korraldamine, et meelitada rohkem reisijaid ja kaupu sinu teenuste juurede.{} Hind: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW} Teehoiutööde rahastamine. Põhjustab linnatänavatel tõsiseid liiklusprobleeme kuni 6 kuuks.{} Hind: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW} Oma ettevõtte auks kuju ehitamine.{} Hind: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW} Uute ärihoonete ehitamise rahastamine selles linnas.{} Hind: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW} Üheks aastaks monopoolsete veoõiguste ostmine selles linnas. Linna omavalitsus lubab reisijate ja kauba veoks kasutada ainult sinu jaamasid.{} Hind: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW} Linna omavalitusele ettevõtte hinnangu tõstmise eesmärgil altkäemaksu pakkumine. Vahele jäädes tuleb trahvi maksta.{} Hind: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW} Pisikese kohaliku reklaamikampaania korraldamine meelitab rohkem reisijaid ja kaupu sinu veoteenuseid kasutama.{} Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW} Keskmise reklaamikampaania korraldamine, et meelitada rohkem reisijaid ja kaupu sinu teenuste juurede.{} Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW} Suure reklaamikampaania korraldamine, et meelitada rohkem reisijaid ja kaupu sinu teenuste juurede.{} Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW} Linna teedevõrgu ümberehituse rahastamine. Põhjustab liikluses tõsiseid häireid kuni 6 kuuks.{} Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW} Oma ettevõtte auks kuju ehitamine.{} Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW} Uute ärihoonete ehitamise rahastamine selles asulas.{} Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW} Üheks aastaks monopoolsete veoõiguste ostmine selles asulas. Asula omavalitsus lubab reisijate ja kauba veoks kasutada ainult sinu jaamasid.{} Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW} Kohalikule omavalitusele ettevõtte hinnangu tõstmise eesmärgil altkäemaksu pakkumine. Vahele jäädes tuleb trahvi maksta.{} Maksumus: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} eesmärgid STR_GOALS_SPECTATOR_CAPTION :{WHITE}Üldeesmärgid -STR_GOALS_GLOBAL_TITLE :{BLACK}Üldised eesmärgid: +STR_GOALS_SPECTATOR :Üleilmsed eesmärgid +STR_GOALS_GLOBAL_BUTTON :{BLACK}Üleilmne +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Näita üleilmseid eesmärke +STR_GOALS_COMPANY_BUTTON :{BLACK}Ettevõte +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Näita ettevõtte eesmärke STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Mitte ühtegi - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Kehtetu - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Ettevõtte eesmärgid: -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klõpsa eesmärgil, et liigutada vaateaken tööstuse/linna/ruudu asukohale. Ctrl+klõps avab uue vaateakna tööstuse/linna/ruudu asukohas +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klõpsa eesmärgil, et liigutada vaateaken tööstuse/asula/ruudu asukohale. Ctrl+klõps avab uue vaateakna tööstuse/asula/ruudu asukohas # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Küsimus -STR_GOAL_QUESTION_CAPTION_INFORMATION :Teave -STR_GOAL_QUESTION_CAPTION_WARNING :Hoiatus -STR_GOAL_QUESTION_CAPTION_ERROR :Viga +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Küsimus +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Teave +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Hoiatus +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Viga ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Tühista @@ -3160,11 +3335,12 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}Mitte ühtegi STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Juba toetatavad veoteenused: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} kohast {STRING} kohta {STRING}{YELLOW} ({COMPANY}{YELLOW}, kuni {DATE_SHORT}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Vajuta pakkumisele, et näha linna või tööstuse asukohta. Ctrl+klõps avab uue vaate ettevõtte/linna asukohast +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Vajuta pakkumisele, et keskendada vaade tööstusele/asustusele. Ctrl+klõps avab uue vaate ettevõtte/asustuse asukohas # Story book window STR_STORY_BOOK_CAPTION :{WHITE}«{COMPANY}» juturaamat STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Üldjuturaamat +STR_STORY_BOOK_SPECTATOR :Üleilmne juturaamat STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Lehekülg {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Vali lehekülg rippmenüüst. @@ -3195,17 +3371,17 @@ STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Võtab v STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Näita vastuvõetavate veoste nimistut STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Võtab vastu: {WHITE}{CARGO_LIST} -STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Antud jaamal on eksklusiivsed transpordiõigused selles linnas. -STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} ostis eksklusiivsed transpordiõigused antud linnas. +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Sellel jaamal on asulas vedude ainuõigus. +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} ostis vedude ainuõiguse selles asustuses. STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Hinnangud STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Näita jaamahinnangut STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Tarne kuus ja kohalik hinnang: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) -STR_STATION_VIEW_GROUP :{BLACK}Rühmitusalus +STR_STATION_VIEW_GROUP :{BLACK}Jaotusalus STR_STATION_VIEW_WAITING_STATION :Jaam: ootel -STR_STATION_VIEW_WAITING_AMOUNT :Summa: ootel +STR_STATION_VIEW_WAITING_AMOUNT :Kogus: ootel STR_STATION_VIEW_PLANNED_STATION :Jaam: eeldatav STR_STATION_VIEW_PLANNED_AMOUNT :Summa: eeldatav STR_STATION_VIEW_FROM :{YELLOW}{CARGO_SHORT} jaamast {STATION} @@ -3217,14 +3393,14 @@ STR_STATION_VIEW_VIA_ANY :{RED}{CARGO_SHO STR_STATION_VIEW_FROM_HERE :{GREEN}{CARGO_SHORT} sellest jaamast STR_STATION_VIEW_VIA_HERE :{GREEN}{CARGO_SHORT} peatumas selles jaamas STR_STATION_VIEW_TO_HERE :{GREEN}{CARGO_SHORT} siia jaama -STR_STATION_VIEW_NONSTOP :{YELLOW}{CARGO_SHORT} ilma peatumata +STR_STATION_VIEW_NONSTOP :{YELLOW}{CARGO_SHORT} vahepeatusteta -STR_STATION_VIEW_GROUP_S_V_D :Lähe-Läbi-Siht -STR_STATION_VIEW_GROUP_S_D_V :Lähe-Siht-Läbi -STR_STATION_VIEW_GROUP_V_S_D :Läbi-Lähe-Siht -STR_STATION_VIEW_GROUP_V_D_S :Läbi-Siht-Lähe -STR_STATION_VIEW_GROUP_D_S_V :Siht-Lähe-Läbi -STR_STATION_VIEW_GROUP_D_V_S :Siht-Läbi-Lähe +STR_STATION_VIEW_GROUP_S_V_D :Algus-, vahe- ja sihtpunkt +STR_STATION_VIEW_GROUP_S_D_V :Algus-, siht- ja vahepunkt +STR_STATION_VIEW_GROUP_V_S_D :Vahe-, algus- ja sihtpunkt +STR_STATION_VIEW_GROUP_V_D_S :Vahe-, siht- ja alguspunkt +STR_STATION_VIEW_GROUP_D_S_V :Siht-, algus- ja vahepunkt +STR_STATION_VIEW_GROUP_D_V_S :Siht-, vahe- ja alguspunkt ############ range for rating starts STR_CARGO_RATING_APPALLING :Kohutav @@ -3242,13 +3418,13 @@ STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Muuda ja STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Näita kõiki ronge, mille sõidugraafik sisaldab seda rongijaama STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Näita kõiki mootorsõidukeid, mille sõidugraafik sisaldab seda jaama -STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Näita kõiki lennukeid, mille sõidugraafik sisaldab seda lennujaama +STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Näita kõiki õhusõidukeid, mille graafik sisaldab seda jaama STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Näita kõiki laevu, mille sõidugraafik sisaldab seda sadamat -STR_STATION_VIEW_RENAME_STATION_CAPTION :Jaama nime vahetamine +STR_STATION_VIEW_RENAME_STATION_CAPTION :Ümbernimeta jaam/laadimisala STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Sulge lennujaam -STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Keela lennukite maandumine selles lennujaamas +STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Keela õhusõidukite maandumine selles lennujaamas # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} @@ -3269,23 +3445,23 @@ STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Rongide k STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Mootorsõidukite käituskulud STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Õhusõidukite käituskulud STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Laevade käituskulud -STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}Taristu hooldamine +STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}Omandi korrashoid STR_FINANCES_SECTION_TRAIN_INCOME :{GOLD}Rongide tulud STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Mootorsõidukite tulud STR_FINANCES_SECTION_AIRCRAFT_INCOME :{GOLD}Õhusõidukite tulud STR_FINANCES_SECTION_SHIP_INCOME :{GOLD}Laevade tulud -STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Laenuintress +STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Laenuintressid STR_FINANCES_SECTION_OTHER :{GOLD}Muud STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} STR_FINANCES_TOTAL_CAPTION :{WHITE}Kokku: STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Kontojääk STR_FINANCES_LOAN_TITLE :{WHITE}Laen -STR_FINANCES_MAX_LOAN :{WHITE}Laenupiir: {BLACK}{CURRENCY_LONG} +STR_FINANCES_MAX_LOAN :{WHITE}Laenulimiit: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Laena {CURRENCY_LONG} STR_FINANCES_BORROW_TOOLTIP :{BLACK}Laena raha -STR_FINANCES_REPAY_BUTTON :{BLACK}Tagasta {CURRENCY_LONG} +STR_FINANCES_REPAY_BUTTON :{BLACK}Tagasimakse {CURRENCY_LONG} STR_FINANCES_REPAY_TOOLTIP :{BLACK}Maksa laen osaliselt tagasi STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Taristu @@ -3298,17 +3474,17 @@ STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Värvival STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Sõidukeid: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} rong{P "" i} STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} veok {P "" it} -STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} lennuk +STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} õhusõiduk STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} laev{P "" a} STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Mitte ühtegi STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Firmaväärtus: {WHITE}{CURRENCY_LONG} STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}({COMMA}% on ettevõtte {COMPANY} käes) STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Taristu: -STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} röö{P bas pad} -STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} sõidutee tük{P k id} -STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} veekogu ruu{P t dud} -STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} jaama ruu{P t dud} -STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} lennuväl{P i jad} +STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} rööpajupp{P "" i} +STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} teejupp{P "" i} +STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} veeruut{P "" u} +STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} jaamaruut{P "" u} +STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} lennuväl{P i ja} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Puudub STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Ehita peakorter @@ -3319,6 +3495,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Liiguta STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Ehita ettevõtte peakorter mujale 1% firmaväärtuse tasu eest. Shift+klõps näitab toimingu eeldatavat maksumust STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Täpsustused STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Vaata täpset taristu hulka +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Saada raha +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Saada sellele ettevõttele raha STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Uus nägu STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Vali presidendile uus nägu @@ -3336,6 +3514,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Müü 25 STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Ettevõtte nimi STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Presidendi nimi +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Sisesta saadetav rahasumma STR_BUY_COMPANY_MESSAGE :{WHITE}Otsime ettevõtet, kes võtaks meie firma üle.{}{}Kas soovite osta ettevõtte {COMPANY} {CURRENCY_LONG} eest? @@ -3344,6 +3523,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE} {COMPAN STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Raudtee tükid: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signaalid STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Tee tükid: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Trammiosad: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Veekogu ruudud: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanalid STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Jaamad: @@ -3354,20 +3534,33 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Tööstused STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Puudub - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% äraveetud){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} ja veel {NUM}... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Tööstuste nimed - klõpsates keskendatakse vaade tööstusele. Ctrl+klõps avab uue vaate ettevõtte asukohast +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Vastuvõetud veosed: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Toodetud veosed: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Kõik veoseliigid +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Puudub # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} -STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Eelmise kuu valmistoodang: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Eelmise kuu toodang: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% veetud) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vaate keskendamine tööstusele STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tootlikkuse tase: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Tööstus teatab kohesest sulgemisest! STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Vajab: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Toodab: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Nõuab: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ootel{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Tootlikuse muutmine (kaheksaga jaguv, kuni 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuda tootlikkuse taset (protsent, kuni 800%) @@ -3376,14 +3569,14 @@ STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuda to STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} rong{P "" i} STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} mootorsõiduk{P "" it} STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} laev{P "" a} -STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} lennuk{P "" it} +STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} õhusõiduk{P "" it} STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Rongid - vajuta rongile info jaoks STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Veokid - info saamiseks vajuta veokile STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Laevad - info saamiseks klõpsa laevale -STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Lennuk - info saamiseks vajuta lennukile +STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Õhusõiduk - info saamiseks vajuta õhusõidukile -STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Kasum sellel aastal: {CURRENCY_LONG} (eelneval: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Selle aasta kasum: {CURRENCY_LONG} (eelneval: {CURRENCY_LONG}) STR_VEHICLE_LIST_AVAILABLE_TRAINS :Saadaval rongid STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Saadaval sõidukid @@ -3410,29 +3603,33 @@ STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}{COMMA} STR_GROUP_ALL_TRAINS :Kõik raudteeveerem STR_GROUP_ALL_ROAD_VEHICLES :Kõik mootorsõidukid STR_GROUP_ALL_SHIPS :Kõik laevad -STR_GROUP_ALL_AIRCRAFTS :Kõik lennukid +STR_GROUP_ALL_AIRCRAFTS :Kõik õhusõidukid -STR_GROUP_DEFAULT_TRAINS :Rühmitamata rongid -STR_GROUP_DEFAULT_ROAD_VEHICLES :Rühmitamata sõidukid -STR_GROUP_DEFAULT_SHIPS :Rühmitamata laevad -STR_GROUP_DEFAULT_AIRCRAFTS :Rühmitamata õhusõidukid +STR_GROUP_DEFAULT_TRAINS :Jaotamata rongid +STR_GROUP_DEFAULT_ROAD_VEHICLES :Jaotamata maanteesõidukid +STR_GROUP_DEFAULT_SHIPS :Jaotamata laevad +STR_GROUP_DEFAULT_AIRCRAFTS :Jaotamata õhusõidukid +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Rühm - Klõpsa rühmal, et kõiki seal olevaid sõidukeid järjestada -STR_GROUP_CREATE_TOOLTIP :{BLACK}Klõpsa rühma loomiseks -STR_GROUP_DELETE_TOOLTIP :{BLACK}Eemalda valitud rühm -STR_GROUP_RENAME_TOOLTIP :{BLACK}Valitud rühma nime vahetamine -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klõpsa, et seda rühma üldise automaatse asenduse eest kaitsta +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Jagu - jaol klõpsates loetletakse kõik jakku kuuluvad sõidukit. Jagusid lohistades saab luua hierarhia. +STR_GROUP_CREATE_TOOLTIP :{BLACK}Klõpsa jao loomiseks +STR_GROUP_DELETE_TOOLTIP :{BLACK}Eemalda valitud jagu +STR_GROUP_RENAME_TOOLTIP :{BLACK}Ümbernimeta valitud jagu +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Muuda valitud jao värvistikku +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klõpsa, et kaitsta seda jagu globaalse automaatasenduse eest -STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Kustuta Grupp +STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Kõrvalda jagu STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Kas oled kindel, et tahad kustutada selle grupi ja kõik järglased? STR_GROUP_ADD_SHARED_VEHICLE :Kõik jagatud sõidukid STR_GROUP_REMOVE_ALL_VEHICLES :Eemalda kõik sõidukid -STR_GROUP_RENAME_CAPTION :{BLACK}Rühma nime vahetamine +STR_GROUP_RENAME_CAPTION :{BLACK}Ümbernimeta jagu -STR_GROUP_PROFIT_THIS_YEAR :Kasum sellel aastal: +STR_GROUP_PROFIT_THIS_YEAR :Selle aasta kasum: +STR_GROUP_PROFIT_LAST_YEAR :Eelmise aasta kasum: +STR_GROUP_OCCUPANCY :Koormatus: STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window @@ -3442,14 +3639,17 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Uus monorelsss STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Uus magnethõljuksõiduk STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Uued mootorsõidukid +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Uued trammid ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Rööbassõidukid +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Uued maanteesõidukid STR_BUY_VEHICLE_SHIP_CAPTION :Uued laevad -STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Uus lennuk +STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Uus õhusõiduk ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Hind: {GOLD}{CURRENCY_LONG}{BLACK} Tühimass: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Maksumus: {GOLD}{CURRENCY_LONG}{BLACK} (Ümberseadistamise maksumus: {GOLD}{CURRENCY_LONG}{BLACK}) Mass: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Tippkiirus: {GOLD}{VELOCITY}{BLACK} Võimsus: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Tippkiirus: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Kiirus ookeanil: {GOLD}{VELOCITY} @@ -3460,44 +3660,55 @@ STR_PURCHASE_INFO_REFITTABLE :(ümberseadista STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Kujundatud: {GOLD}{NUM}{BLACK} Vanus: {GOLD}{COMMA} aasta{P "" t} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Parim tehnoseisund: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Hind: {GOLD}{CURRENCY_LONG} -STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Mass: {GOLD}{WEIGHT_SHORT} {WEIGHT_SHORT}) +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Maksumus: {GOLD}{CURRENCY_LONG}{BLACK} (Ümberseadistamise maksumus: {GOLD}{CURRENCY_LONG}{BLACK}) +STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Mass: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Hind: {GOLD}{CURRENCY_LONG}{BLACK} Tippkiirus: {GOLD}{VELOCITY} STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Hind: {GOLD}{CURRENCY_LONG}{BLACK} (Ümberseadistamise maksumus: {GOLD}{CURRENCY_LONG}{BLACK}) Kiirus: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kandevõime: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Kiirendavad vagunid: {GOLD}+{POWER}{BLACK} Mass: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Ümberseadistatav: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Kõik kaubatüübid +STR_PURCHASE_INFO_NONE :Puudub +STR_PURCHASE_INFO_ENGINES_ONLY :Vaid vedurid STR_PURCHASE_INFO_ALL_BUT :Kõik, välja arvatud {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Suurim veojõud: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Tegevusradius: {GOLD}{COMMA} ruutu +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Õhusõiduki liik: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Nimekiri raudteesõidukitest - andmete saamiseks klõpsa raudteesõidukile STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Mootorsõidukite nimekiri - andmete saamiseks klõpsa sõidukile STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Laevade nimekiri - info saamiseks klõps laevale -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lennukite nimekiri - info saamiseks vajuta lennukile +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Õhusõidukite loend - info saamiseks vajuta õhusõidukile. Ctrl + klõps vaheldab õhusõiduki liigi peitmist STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Ehita sõiduk STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Ehita veovahend STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Ehita laev -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Ehita lennuk +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Ehita õhusõiduk -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja seadista lennuk ümber +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja ümberseadista sõiduk +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja ümberseadista sõiduk +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja ümberseadista laev +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja ümberseadista lennuk STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud raudteesõiduk. Shift+klõpsuga kuvatakse eeldatav ostuhind STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud mootorsõiduk. Shift+klõpsuga kuvatakse eeldatav ostuhind STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud laev. Shift+klõpsuga kuvatakse eeldatav ostuhind STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud õhusõiduk. Shift+klõpsuga kuvatakse eeldatav ostuhind +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud rööbassõiduk. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud maanteesõiduk. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud laev. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja ümberseadista valitud õhusõiduk. Shift+klõps näitab eeldatava maksumuse ilma ostu sooritamata -STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Nimevahetus -STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Nimevahetus -STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Nimevahetus -STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Nimevahetus +STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Ümbernimeta +STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Ümbernimeta +STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Ümbernimeta +STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Ümbernimeta -STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Muuda raudteesõiduki tüübinime -STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Muuda mootorsõiduki tüübinime -STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Laeva tüübinime muutmine -STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Lennuki tüübinime muutmine +STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Ümbernimeta rööbassõiduki liik +STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Ümbernimeta maanteesõiduki liik +STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Ümbernimeta laeva liik +STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Ümbernimeta õhusõiduki liik STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Peida STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}Peida @@ -3512,18 +3723,18 @@ STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Näita STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Sätesta rongitüübi peitmine/kuvamine STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Sätesta sõidukitüübi peitmine/kuvamine STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Sätesta laevatüübi peitmine/kuvamine -STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Sätesta lennukitüübi peitmine/kuvamine +STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Vahelda õhusõiduki liigi peitmist/näitamist -STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Vaheta rongivaguni tüübinime -STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Vaheta mootorsõiduki tüübinime -STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Laeva tüübinime vahetamine -STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Lennuki tüübinime vahetamine +STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Ümbernimeta rööbassõiduki liik +STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Ümbernimeta maanteesõiduki liik +STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Ümbernimeta laeva liik +STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Ümbernimeta õhusõiduki liik # Depot window STR_DEPOT_CAPTION :{WHITE}{DEPOT} STR_DEPOT_RENAME_TOOLTIP :{BLACK}Muuda depoo nime -STR_DEPOT_RENAME_DEPOT_CAPTION :Muuda depoo nime +STR_DEPOT_RENAME_DEPOT_CAPTION :Ümbernimeta depoo STR_DEPOT_NO_ENGINE :{BLACK}- STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING} @@ -3538,14 +3749,14 @@ STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Õhusõi STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Tiri rongi veok siia et müüa STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Et müüa, tiri sõiduk siia STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Müügiks tiri laev siia -STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Müümiseks tiri lennuk siia +STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Müümiseks tiri õhusõiduk siia -STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Tõsta vedur siia, et kogu rong maha müüa +STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Tõsta rongi vedur siia, et müüa rong täies koosseisus STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP :{BLACK}Müü kõik rongid jaamast STR_DEPOT_SELL_ALL_BUTTON_ROAD_VEHICLE_TOOLTIP :{BLACK}Müü kõik autod garaažist STR_DEPOT_SELL_ALL_BUTTON_SHIP_TOOLTIP :{BLACK}Müü kõik laevad sadamast -STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TOOLTIP :{BLACK}Müü kõik lennukid angaarist +STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TOOLTIP :{BLACK}Müü kõik õhusõidukid angaarist STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}Asenda kõik rongid jaamas ise STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Asenda kõik depoos olevad mootorsõidukid ise @@ -3555,71 +3766,74 @@ STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Asenda k STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Uus rong STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Ostmine STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Uus laev -STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Uus lennuk +STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Uus õhusõiduk STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uus rongi veok STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Ehita uus mootorsõiduk STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uus laev -STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Ehita uus lennuk +STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Ehita uus õhusõiduk STR_DEPOT_CLONE_TRAIN :{BLACK}Klooni rong STR_DEPOT_CLONE_ROAD_VEHICLE :{BLACK}Kloonimine STR_DEPOT_CLONE_SHIP :{BLACK}Klooni laev -STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klooni lennuk +STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klooni õhusõiduk -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Ostetakse samasugune rong koos kõikide vagunitega. Vajuta sellele nupule, ning seejärel rongile depoo sees või väljas. «Ctrl»+klõps jagab ülesandeid. «Shift»+klõps näitab eeldatavat ostuhinda -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Ostetakse samasugune mootorsõiduk. Vajuta sellele nupule, ning seejärel mootorsõidukil depoos või sellest väljas. «Ctrl»+klõps jagab ülesandeid. «Shift»+klõps näitab eeldatavat ostuhinda -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Ostetakse samasugune laev. Vajuta sellele nupule, ning seejärel laevale laevaremonditehase sees või väljas. «Ctrl»+klõps jagab ülesandeid. «Shift»+klõps näitab eeldatavat ostuhinda -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Ostetakse samasugune õhusõiduk. Vajuta sellele nupule, ning seejärel lennukile angaari sees või väljas. «Ctrl»+klõps jagab ülesandeid. «Shift»+klõps näitab eeldatavat ostuhinda +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Ostetakse samasugune rong koos kõikide vagunitega. Vajuta sellele nupule, ning seejärel rongile depoo sees või väljas. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Ostetakse samasugune mootorsõiduk. Vajuta sellele nupule, ning seejärel mootorsõidukil depoos või sellest väljas. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Ostetakse samasugune laev. Vajuta sellele nupule, ning seejärel laevale laevaremonditehase sees või väljas. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Ostetakse samasugune õhusõiduk. Vajuta sellele nupule, ning seejärel lennukile angaari sees või väljas. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Keskenda põhivaade rongidepoo kohale STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Vii vaade garaažile. Ctrl+klõps avab garaažil uue vaate. STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Vii pea vaade paadikuuri juurde STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vii vaade angaarile -STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Koosta nimekiri kõikidest rongidest, mille ülesannete hulgas on see depoo -STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Koosta nimekiri kõikidest mootorsõidukitest, mille ülesannete hulgas on see depoo -STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Koosta nimekiri kõikidest laevadest, mille ülesannete hulgas on see angaar -STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Koosta nimekiri kõikidest rongidest, mille ülesannete hulgas on selle lennujaama angaar +STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Koosta nimekiri kõikidest rongidest, mille korralduste hulgas on see depoo +STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Koosta nimekiri kõikidest mootorsõidukitest, mille korralduste hulgas on see depoo +STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Koosta nimekiri kõikidest laevadest, mille korralduste hulgas on see angaar +STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Koosta nimekiri kõikidest rongidest, mille korralduste hulgas on selle lennujaama angaar STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Vajuta, kui tahad seisata kõiki ronge jaamas STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Vajuta, kui tahad seisata kõiki masinaid garaažis STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Klõpsa, et peatada kõik sadamas olevad laevad. -STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Vajuta, kui tahad seisata kõiki lennukeid angaaris +STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Vajuta, kui tahad seisata kõiki õhusõidukeid angaaris STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Klõpsa kõikide depoos asuvate rongide käivitamiseks STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Klõpsa, et käivitada kõik depoos olevad mootorsõidukid STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Klõpsa kõikide angaaris asuvate laevade käivitamiseks -STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Klõpsa kõikide angaaris asuvate lennukite käivitamiseks +STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Klõpsa kõikide angaaris asuvate õhusõidukite käivitamiseks STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Sa oled müümas kõiki depoos asuvaid masinaid. Kas sa oled kindel? # Engine preview window STR_ENGINE_PREVIEW_CAPTION :{WHITE}Teade veovahendite tootjalt -STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Me töötasime välja uue {STRING}. Kas te oleksite huvitatud selle ainuõiguslikust katsetamisest järgneva aasta jooksul, et me saaksime jälgida kuidas see toimib? +STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Me töötasime välja uue {STRING}. Kas te oleksite huvitatud selle ainuõiguslikust katsetamisest ühe aasta jooksul, et me saaksime seda enne turule laskmist jälgida? -STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :raudteevedur -STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :monorelssvedur -STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnethõljukvedur +STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :raudteeveduri +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :elektrirongivedur +STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :monorelssveduri +STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnethõljukveduri -STR_ENGINE_PREVIEW_ROAD_VEHICLE :mootorsõiduk +STR_ENGINE_PREVIEW_ROAD_VEHICLE :mootorsõiduki +STR_ENGINE_PREVIEW_TRAM_VEHICLE :tramm -STR_ENGINE_PREVIEW_AIRCRAFT :lennuk -STR_ENGINE_PREVIEW_SHIP :laev +STR_ENGINE_PREVIEW_AIRCRAFT :lennuki +STR_ENGINE_PREVIEW_SHIP :laeva STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Hind: {CURRENCY_LONG} Tühimass: {WEIGHT_SHORT}{}Tippkiirus: {VELOCITY} Võimsus: {POWER}{}Käituskulud: {CURRENCY_LONG}/aastas{}Kandevõime: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Hind: {CURRENCY_LONG} Tühimass: {WEIGHT_SHORT}{}Kiirus: {VELOCITY} Võimsus: {POWER} Veojõud: {6:FORCE}{}Käituskulud: {4:CURRENCY_LONG}/aasta{}Mahutavus: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Kandevõime: {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Lennuki tüüp: {STRING}{}kandevõime: {CARGO_LONG}{}Käitluskulud: {CURRENCY_LONG}/a -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Lennuki tüüp: {STRING} Lennukaugus: {COMMA} ruutu{}Kandevõime: {CARGO_LONG}, {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Lennuki tüüp: {STRING} Lennukaugus: {COMMA} ruutu{}Kandevõime: {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Maksumus: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Õhusõiduki liik: {STRING}{}Mahutavus: {CARGO_LONG}, {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/aasta +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Õhusõiduki liik: {STRING}{}kandevõime: {CARGO_LONG}{}Käitluskulud: {CURRENCY_LONG}/a +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Õhusõiduki liik: {STRING} Lennuulatus: {COMMA} ruutu{}Kandevõime: {CARGO_LONG}, {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Õhusõiduki liik: {STRING} Lennuulatus: {COMMA} ruutu{}Kandevõime: {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Asenda {STRING} - {STRING} -STR_REPLACE_VEHICLE_TRAIN :Rong -STR_REPLACE_VEHICLE_ROAD_VEHICLE :Sõiduk -STR_REPLACE_VEHICLE_SHIP :Laev -STR_REPLACE_VEHICLE_AIRCRAFT :Õhusõiduk +STR_REPLACE_VEHICLE_TRAIN :ronge +STR_REPLACE_VEHICLE_ROAD_VEHICLE :maanteesõidukeid +STR_REPLACE_VEHICLE_SHIP :laevu +STR_REPLACE_VEHICLE_AIRCRAFT :õhusõidukeid STR_REPLACE_VEHICLE_VEHICLES_IN_USE :{YELLOW}Kasutuses sõidukid STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP :{BLACK}Tulp sõidukitega, mida omad @@ -3629,21 +3843,24 @@ STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}Tulp sõ STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Vali asendatav veduritüüp STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Vali uus vedur, millega sa soovid vasakult valitud vedurit asendada. -STR_REPLACE_VEHICLES_START :{BLACK}Alusta sõidukite vahetamist +STR_REPLACE_VEHICLES_START :{BLACK}Alusta sõidukite asendamist STR_REPLACE_VEHICLES_NOW :Asenda kohe kõik sõidukid STR_REPLACE_VEHICLES_WHEN_OLD :Asenda ainult vanu sõidukeid STR_REPLACE_HELP_START_BUTTON :{BLACK}Vajuta vasakul asuva veduri asendamiseks paremal valitud veduriga STR_REPLACE_NOT_REPLACING :{BLACK}Ei asenda praegu -STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Ühtegi veovahendit pole valitud +STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Ühtegi sõidukit pole valitud STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} kui vana -STR_REPLACE_VEHICLES_STOP :{BLACK}Lõpeta Sõidukite Asendamine +STR_REPLACE_VEHICLES_STOP :{BLACK}Lõpeta sõidukite asendamine STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Vajuta lõpetamaks vasakult valitud veduri asendust STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Vaheta aken mootori ja vaguni asendamise aknate vahel STR_REPLACE_ENGINES :Vedurid -STR_REPLACE_WAGONS :Vaguneid +STR_REPLACE_WAGONS :Vagunid +STR_REPLACE_ALL_RAILTYPE :Kõik rööbassõidukid +STR_REPLACE_ALL_ROADTYPE :Kõik maanteesõidukid STR_REPLACE_HELP_RAILTYPE :{BLACK}Vali rööbasteetüüp mille vedureid sa soovid asendada +STR_REPLACE_HELP_ROADTYPE :{BLACK}Vali teeliik, mille vedureid vahetada STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Näitab mis veduriga soovitakse vasakult valitud vedurit asendada, kui üldse STR_REPLACE_RAIL_VEHICLES :Raudteesõidukid STR_REPLACE_ELRAIL_VEHICLES :Elektrirongid @@ -3651,52 +3868,55 @@ STR_REPLACE_MONORAIL_VEHICLES :Monorelssveerem STR_REPLACE_MAGLEV_VEHICLES :Magnethõljukveerem STR_REPLACE_ROAD_VEHICLES :Maanteesõidukid +STR_REPLACE_TRAM_VEHICLES :Trammid -STR_REPLACE_REMOVE_WAGON :{BLACK}Vagunite eemaldus: {ORANGE}{STRING} -STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Sunni automaatset asendust hoidma rongi pikkust selleks (eest alustades) veeremit eemaldades, juhul kui uus vagun muudaks rongi pikemaks. +STR_REPLACE_REMOVE_WAGON :{BLACK}Vagunite kõrvaldamine: {ORANGE}{STRING} +STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Automaatne asendamine hoiab rongi pikkuse samana, vajadusel kõrvaldab vaguneid (alates esiotsast), kui muidu rongikoosseis suureneks # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Vaate viimine rongi asukohale -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Keskenda vaade veovahendile -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Vii vaade laeva asukohale -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Vii peavaade lennukile +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Keskenda vaade rongi asukohale. Tõpeltklõpsuga jälitatakse rongi põhivaates. Ctrl+klõps avab rongi asukohas uue vaate +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Keskenda põhivaade sõiduki asukohale. Topeltklõpsuga jälitatakse sõidukit põhivaates. Ctrl+klõps avab sõiduki asukohas uue vaate +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Keskenda põhivaade laeva asukohale. Topeltklõpsuga jälitatakse laeva põhivaates. Ctrl+klõps avab laeva asukohas uue vaate +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Keskenda vaade õhusõiduki asukohale.Topeltklõps jälitab õhusõidukit põhivaates. Ctrl+klõps avab õhusõiduki asukohas uue vaate. STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada rong depoosse STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada sõiduk garaaži. Ctrl+klõps, et ainult teenindada STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada laev angaari. Ctrl+klõps ainult teenindab -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada lennuk angaari +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Saada õhusõiduk angaari. Ctrl + klõps ainult hooldab -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Ostab samasuguse rongi koos kõikide vagunitega. «Ctrl»+klõps jagab ülesandeid. «Shift»+klõps näitab eeldatavat ostuhinda -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Ostab samasuguse maanteesõiduki. «Ctrl»+klõps jagab ülesandeid. «Shift»+klõps näitab eeldatavat ostuhinda -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Ostab samasuguse laeva. Vajuta sellele nuppule, ning seejärel laevale laevaremonditehase sees või väljas. «Ctrl»+klõps jagab ülesandeid. «Shift»+klõps näitab eeldatavat ostuhinda +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Ostab samasuguse rongi koos kõikide vagunitega. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Ostab samasuguse maanteesõiduki. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Ostab samasuguse laeva. Vajuta sellele nuppule, ning seejärel laevale laevaremonditehase sees või väljas. «Ctrl»+klõps jagab korraldusi. «Shift»+klõps näitab eeldatavat ostuhinda STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Ostab samasuguse õhusõiduki. Ctrl+klõpsuga jagatakse sihtpunkte. Shift+klõpsuga kuvatakse eeldatav ostuhind STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Sunni rongi signaale eirama -STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Rongi seadistamine mõne teise laadungi vedamiseks -STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Seadista mootorsõidukit kandmaks teist tüüpi veost -STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Seadista kaubalaev teisele veosele -STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Seadista lennuk teistsuguse kauba kandmiseks ümber +STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Ümberseadista rong muu veoseliigi jaoks +STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Ümberseadista maanteesõiduk muu veoseliigi jaoks +STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Ümberseadista laev muu veoseliigi jaoks +STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Ümberseadista õhusõiduk muu veoseliigi jaoks STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Pööra rong ümber STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Sunni veovahendit ümber pöörama -STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Näita rongi ülesandeid. «Ctrl»+klõps näitab rongi sõiduplaani -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Näita mootorsõiduki ülesandeid. «Ctrl»+klõps näitab mootorsõiduki sõiduplaani -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Näita laeva ülesanded. «Ctrl»+klõps näitab laeva sõiduplaani -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Näita lennuki ülesandeid. «Ctrl»+klõps näitab õhusõiduki sõiduplaani +STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Näita rongi korraldusi. «Ctrl»+klõps näitab rongi graafikut +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Näita mootorsõiduki korraldusi. «Ctrl»+klõps näitab mootorsõiduki graafikut +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Näita laeva korraldusi. «Ctrl»+klõps näitab laeva graafikut +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Näita lennuki korraldusi. «Ctrl»+klõps näitab õhusõiduki graafikut STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Näita rongi täpsustusi STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Näita mootorsõiduki täpsustusi STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Näita laeva täpsustusi -STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Näita lennuki täpsustusi +STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Näita õhusõiduki täpsustusi -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Praegune rongi tegevus - rongi käivitamiseks või peatamiseks vajuta siia. Ctrl+klõps näitab sihtkohta -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Transpordivahendi praegune tegevus - sõiduki peatamiseks või startimiseks klõpsa siia. Ctrl+klõps näitab sihtkohta -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Praegune laeva tegevus - Laeva käivitamiseks või peatamiseks vajuta siia. Ctrl+klõps näitab sihtkohta -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Praegune lennuki tegevus - lennuki peatamiseks või käivitamiseks vajuta siia. Ctrl+klõps näitab sihtkohta +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Valitud rongi tegevus - klõpsa rongi käivitamiseks/peatamiseks +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Valitud sõiduki tegevus - klõpsa sõiduki käivatamiseks/peatamiseks +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Valitud laeva tegevus - klõpsa laeva käivitamiseks/peatamiseks +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Valitud õhusõiduki tegevus - klõpsa õhusõiduki käivitamiseks/peatamiseks + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Keskenda põhivaade korralduse sihtpunktile. Ctrl+klõps avab korralduse sihtpunktis uue vaate # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Veose ümberlaadimine @@ -3710,10 +3930,10 @@ STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Vaba ra STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Liiga pikk vahemaa järgmise sihtpunktini STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Siht: {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Sihita, {VELOCITY} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Sihitu, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Suundub {WAYPOINT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Suundub {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Teenus kohas {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Järelevaatus: {DEPOT}, {VELOCITY} # Vehicle stopped/started animations STR_VEHICLE_COMMAND_STOPPED_SMALL :{TINY_FONT}{RED}peatatud @@ -3725,10 +3945,10 @@ STR_VEHICLE_COMMAND_STARTED :{GREEN}Started STR_VEHICLE_DETAILS_CAPTION :{WHITE}{VEHICLE} (täpsustused) STR_VEHICLE_NAME_BUTTON :{BLACK}Nimi -STR_VEHICLE_DETAILS_TRAIN_RENAME :{BLACK}Rongi nimi -STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Nimeta mootorsõidukit -STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Anna laevale nimi -STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Nimeta lennuk ümber +STR_VEHICLE_DETAILS_TRAIN_RENAME :{BLACK}Nimeta rong +STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Nimeta maanteesõiduk +STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Nimeta laev +STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Nimeta õhusõiduk STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Vanus: {LTBLUE}{STRING}{BLACK} Käituskulud: {LTBLUE}{CURRENCY_LONG}/a # The next two need to stay in this order @@ -3736,7 +3956,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} aasta{P STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} aasta{P "" t} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Lennuki tüüp: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Õhusõiduki liik: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Õhusõiduki liik: {LTBLUE}{STRING} {BLACK}Lennuulatus: {LTBLUE}{COMMA} ruutu STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Tühimass: {LTBLUE}{WEIGHT_SHORT} {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Tippkiirus: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Tühimass: {LTBLUE}{WEIGHT_SHORT} {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Veojõud: {LTBLUE}{FORCE} @@ -3761,10 +3982,10 @@ STR_VEHICLE_DETAILS_DEFAULT :Esialgne STR_VEHICLE_DETAILS_DAYS :Päevad STR_VEHICLE_DETAILS_PERCENT :Protsendid -STR_QUERY_RENAME_TRAIN_CAPTION :{WHITE}Anna rongile nimi -STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Nimeta mootorsõiduk ümber -STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Anna laevale nimi -STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Anna lennukile nimi +STR_QUERY_RENAME_TRAIN_CAPTION :{WHITE}Nimeta rong +STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Nimeta maanteesõiduk +STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Nimeta laev +STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Nimeta lennuk # Extra buttons for train details windows STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} Ehitatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY_LONG} @@ -3784,83 +4005,83 @@ STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Andmed STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Näita täpsutusi rongivagunite kohta STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Kandevõimed STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Näita iga rongivaguni kandevõimet -STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Veoseid kokku +STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Veoste üldarv STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Näita kogu rongi mahtu, jagatud veoseliigi järgi STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Kandevõime: {LTBLUE} # Vehicle refit -STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Seadista ümber) +STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Ümberseadista) STR_REFIT_TITLE :{GOLD}Vali veetav veoseliik: STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Uus kandevõime: {GOLD}{CARGO_LONG}{}{BLACK}Laeva ümberseadistamise hind: {RED}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Uus mahtuvus: {GOLD}{CARGO_LONG}{}{BLACK}Sissetulek veoseliigi muutusest: {GREEN}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Uus mahtuvus: {GOLD}{CARGO_LONG}{}{BLACK}Ümberseadistamise tulu: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Uus kandevõime: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Ümberseadistamise maksumus: {RED}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Uus mahtuvus: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Sissetulek veoseliigi muutusest: {GREEN}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Uus mahtuvus: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Ümberseadistamise tulu: {GREEN}{CURRENCY_LONG} STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Vali ümberseadistatavad sõidukid. Hiirega lohistades saab valida mitu sõidukit. Klõpsates tühjal kohal valitakse terve sõiduk. Ctrl+klõps valib sõiduki ja temale järgneva keti STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Vali rongi veetav veoseliik STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vali maanteesõiduki veetav veoseliik STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Vali kaubalaeva veetav veoseliik -STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vali lennuki veetav veoseliik +STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vali õhusõiduki veetav veoseliik -STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Seadista ümber -STR_REFIT_ROAD_VEHICLE_REFIT_BUTTON :{BLACK}Muuda mootorsõiduki seadistust -STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Seadista laev ümber -STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Seadista lennuk ümber +STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Ümberseadista +STR_REFIT_ROAD_VEHICLE_REFIT_BUTTON :{BLACK}Ümberseadista maanteesõiduk +STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Ümberseadista laev +STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Ümberseadista õhusõiduk -STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Rongi ümberseadistamine valitud laadungi vedamiseks -STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Seadista mootorsõidukit kandma valitud veotüüpi -STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Seadista laev ümber valitud kaubatüübi jaoks -STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Seadista lennuk ümber, et kanda valitud kaubatüüpi +STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Ümberseadista rong valitud veoseliigi jaoks +STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Ümberseadista maantesõiduk valitud veoseliigi jaoks +STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Ümberseadista laev valitud veoseliigi jaoks +STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Ümberseadista õhusõiduk valitud veoseliigi jaoks # Order view -STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (ülesanded) -STR_ORDERS_TIMETABLE_VIEW :{BLACK}Sõiduplaan -STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Näita sõiduplaani +STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (korraldused) +STR_ORDERS_TIMETABLE_VIEW :{BLACK}Graafik +STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Näita graafikut -STR_ORDERS_LIST_TOOLTIP :{BLACK}Ülesannete register - ülesanne valitakse klõpsamisega. Ctrl+klõps keskendab vaate ülesande sihile +STR_ORDERS_LIST_TOOLTIP :{BLACK}Korralduste register - korraldus valitakse klõpsamisega. Ctrl+klõps keskendab vaate korralduse sihtpunktile STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} -STR_ORDERS_END_OF_ORDERS :- - Ülesannete lõpp - - -STR_ORDERS_END_OF_SHARED_ORDERS :- - Jagatud käskluste lõpp - - +STR_ORDERS_END_OF_ORDERS :- - Korralduste lõpp - - +STR_ORDERS_END_OF_SHARED_ORDERS :- - Jagatud korralduste lõpp - - # Order bottom buttons -STR_ORDER_NON_STOP :{BLACK}Peatusteta -STR_ORDER_GO_TO :Mine -STR_ORDER_GO_NON_STOP_TO :Mine peatumata -STR_ORDER_GO_VIA :Mine läbi -STR_ORDER_GO_NON_STOP_VIA :Mine peatumata läbi -STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Valitud ülesande peatumisprotseduuri muutmine +STR_ORDER_NON_STOP :{BLACK}Vahepeatusteta +STR_ORDER_GO_TO :Siht +STR_ORDER_GO_NON_STOP_TO :Siht vahepeatusteta +STR_ORDER_GO_VIA :Siht läbi +STR_ORDER_GO_NON_STOP_VIA :Siht peatumata läbi +STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Valitud korralduse peatumisprotseduuri muutmine -STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Laadi üks täis +STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Täislaadi üks veos STR_ORDER_DROP_LOAD_IF_POSSIBLE :Laadi peale -STR_ORDER_DROP_FULL_LOAD_ALL :Laadi kõik kaubad täis -STR_ORDER_DROP_FULL_LOAD_ANY :Laadi üks kaup täis -STR_ORDER_DROP_NO_LOADING :Mitte laadida -STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}Valitud ülesande pealelaadimisprotseduuri muutmine +STR_ORDER_DROP_FULL_LOAD_ALL :Täislaadi kõik veosed +STR_ORDER_DROP_FULL_LOAD_ANY :Täislaadi üks veos +STR_ORDER_DROP_NO_LOADING :Ei laadi +STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}Valitud korralduse pealelaadimisprotseduuri muutmine -STR_ORDER_TOGGLE_UNLOAD :{BLACK}Laadi kõik maha -STR_ORDER_DROP_UNLOAD_IF_ACCEPTED :Laadi tühjaks nõudlusel -STR_ORDER_DROP_UNLOAD :Laadi tühjaks -STR_ORDER_DROP_TRANSFER :Laadi ümber -STR_ORDER_DROP_NO_UNLOADING :Mitte maha laadida -STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Valitud ülesande mahalaadimisprotseduuri muutmine +STR_ORDER_TOGGLE_UNLOAD :{BLACK}Mahalaadi kõik +STR_ORDER_DROP_UNLOAD_IF_ACCEPTED :Mahalaadi nõudlusel +STR_ORDER_DROP_UNLOAD :Mahalaadi kõik +STR_ORDER_DROP_TRANSFER :Ümberlaadi +STR_ORDER_DROP_NO_UNLOADING :Ei mahalaadi +STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Valitud korralduse tühjendusprotseduuri muutmine -STR_ORDER_REFIT :{BLACK}Taasseadista -STR_ORDER_REFIT_TOOLTIP :{BLACK}Vali, millist laadungit ümber seadistada selles järjestuses. Ümberseadistuse käsu eemaldamiseks hoia klõpsamise ajal all Control nuppu -STR_ORDER_REFIT_AUTO :{BLACK}Automaatne ümberseadistamine -STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Vali kauba tüüp millele peaks automaatse ümberseadistamisega üle minema. Ctrl-klõps eemaldab valiku. Automaatne ümberseadistamine saab toimuda ainult siis kui sõiduk seda lubab. +STR_ORDER_REFIT :{BLACK}Ümberseadista +STR_ORDER_REFIT_TOOLTIP :{BLACK}Vali, mis veoseliigile ümberseadistada. Ctrl+klõps kõrvaldab ümberseadistamise korralduse +STR_ORDER_REFIT_AUTO :{BLACK}Ümberseadista jaamas +STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Vali, millisele veoseliigile ümberseadistada. Ctrl-klõps eemaldab ümberseadistamise korralduse. Jaamas ümberseadistamine toimub ainult, kui sõiduk võimaldab STR_ORDER_DROP_REFIT_AUTO :Fikseeritud kaubatüüp STR_ORDER_DROP_REFIT_AUTO_ANY :Võimalikud kaubad STR_ORDER_SERVICE :{BLACK}Hooldus -STR_ORDER_DROP_GO_ALWAYS_DEPOT :Alati mine -STR_ORDER_DROP_SERVICE_DEPOT :Vajadusel hoolda +STR_ORDER_DROP_GO_ALWAYS_DEPOT :Alati +STR_ORDER_DROP_SERVICE_DEPOT :Vajadusel STR_ORDER_DROP_HALT_DEPOT :Peatu STR_ORDER_SERVICE_TOOLTIP :{BLACK}Jäta see käsk vahele, kui hooldust ei vajata -STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Sõiduki andmed, millel ülesande vahetamine põhineb +STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Sõiduki andmed, millel korralduse vahelejätmine põhineb # Conditional order variables, must follow order of OrderConditionVariable enum STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Koorem protsentides @@ -3870,6 +4091,7 @@ STR_ORDER_CONDITIONAL_AGE :Vanus (aastates STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Vajab hooldust STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Alati STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Amortiseerumiseni (aastaid) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Kõrgeim tehnoseisund STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Kuidas sõiduki andmeid antud väärtusega võrreldakse STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :on võrdne @@ -3885,74 +4107,75 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Väärtu STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Sisesta väärtus, millega võrrelda STR_ORDERS_SKIP_BUTTON :{BLACK}Jäta vahele -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Jäta praegune ülesannete vahele ja alusta järgmisega. Ctrl+klõps valib ülesande ja jätab teised ülesanded vahele +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Jäta praegune korraldus vahele ja alusta järgmisega. Ctrl+klõps valib korralduse ja jätab teised korraldused vahele STR_ORDERS_DELETE_BUTTON :{BLACK}Kustuta -STR_ORDERS_DELETE_TOOLTIP :{BLACK}Kustuta valitud ülesanne -STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Tühjenda sihiloend +STR_ORDERS_DELETE_TOOLTIP :{BLACK}Kustuta valitud korraldus +STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Eemalda kõik korraldused STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Lõpeta jagamine -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Lõpeta sihiloendi jagamine. Sihiloend tühjendatakse Ctrl+klõpsu abil +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Lõpeta korralduste jagamine. Ctrl+klõps eemaldab kõik selle sõiduki korraldused -STR_ORDERS_GO_TO_BUTTON :{BLACK}Mine -STR_ORDER_GO_TO_NEAREST_DEPOT :Mine lähimasse depoosse -STR_ORDER_GO_TO_NEAREST_HANGAR :Mine lähimasse angaari -STR_ORDER_CONDITIONAL :Ülesande vahetamine tingimusel -STR_ORDER_SHARE :Jaga korraldusi -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisa valitud käsu ette uus ülesanne, või kui ülesannet ei ole valitud, siis nimekirja lõppu. «Ctrl» määrab jaama puhul ülesandeks «peale laadida üks kaup», meldepunkti puhul «peatuseta» ja depoo puhul «hooldus». «Jaga korraldusi» või «Ctrl» klahv lubab sellel sõidukil jagada ülesandeid valitud sõidukiga. Klõpsates teisel sõidukil, dubleeritakse selle ülesanded +STR_ORDERS_GO_TO_BUTTON :{BLACK}Siht +STR_ORDER_GO_TO_NEAREST_DEPOT :Siht lähim depoo +STR_ORDER_GO_TO_NEAREST_HANGAR :Siht lähim angaar +STR_ORDER_CONDITIONAL :Korralduste tinglik vahelejätmine +STR_ORDER_SHARE :Korralduste jagamine +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisa uus korraldus valitud korralduse ette, või nimekirja lõppu. «Ctrl» annab jaamas korralduse «täislaadida üks veos», meldepunktis korralduse «peatuseta», ning depoos korralduse «hooldus». «Korralduste jagamine» või «Ctrl» laseb sellel sõidukil jagada korraldusi valitud sõidukiga. Sõidukil klõpsates dubleeritakse selle korraldused. Depookorralduste olemasolul sõiduk ise hoolduses ei käi STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Näita kõiki sama sõidugraafikuga mootorsõidukeid # String parts to build the order string -STR_ORDER_GO_TO_WAYPOINT :Läbi punkti {WAYPOINT} -STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Läbi peatumata punkti{WAYPOINT} +STR_ORDER_GO_TO_WAYPOINT :Siht läbida {WAYPOINT} +STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Siht peatumata läbida {WAYPOINT} STR_ORDER_SERVICE_AT :Hooldus -STR_ORDER_SERVICE_NON_STOP_AT :Hooldus ilma peatumata +STR_ORDER_SERVICE_NON_STOP_AT :Hooldus vahepeatusteta STR_ORDER_NEAREST_DEPOT :lähim STR_ORDER_NEAREST_HANGAR :lähim angaar -STR_ORDER_TRAIN_DEPOT :rongidepoos -STR_ORDER_ROAD_VEHICLE_DEPOT :sõidukidepoos -STR_ORDER_SHIP_DEPOT :laevaremonditehases +STR_ORDER_TRAIN_DEPOT :rongidepoo +STR_ORDER_ROAD_VEHICLE_DEPOT :maanteesõidukidepoo +STR_ORDER_SHIP_DEPOT :laevaremonditehas STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} -STR_ORDER_REFIT_ORDER :(Taasseadista {STRING}) -STR_ORDER_REFIT_STOP_ORDER :(Seadista ümber {STRING} jaoks ja peatu) +STR_ORDER_REFIT_ORDER :(Ümberseadista: {STRING}) +STR_ORDER_REFIT_STOP_ORDER :(Ümberseadista: {STRING}, peatu) STR_ORDER_STOP_ORDER :(Peatu) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Ei saa jaama kasutada){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Automaatne) -STR_ORDER_FULL_LOAD :(Laadida kõik kaubad täis) -STR_ORDER_FULL_LOAD_ANY :(Laadida üks kaup täis) -STR_ORDER_NO_LOAD :(Mitte laadida) -STR_ORDER_UNLOAD :(Laadida tühjaks ja laadida peale) -STR_ORDER_UNLOAD_FULL_LOAD :(Laadida tühjaks ja laadida kõik kaubad täis) -STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Laadida tühjaks ja laadida üks kaup täis) -STR_ORDER_UNLOAD_NO_LOAD :(Laadida tühjaks ja peale mitte laadida) -STR_ORDER_TRANSFER :(Laadida ümber ja laadida peale) -STR_ORDER_TRANSFER_FULL_LOAD :(Laadida ümber ja laadida kõik kaubad täis) -STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Laadida ümber ja laadida üks kaup täis) -STR_ORDER_TRANSFER_NO_LOAD :(Laadida ümber ja peale mitte laadida) -STR_ORDER_NO_UNLOAD :(Maha mitte laadida ja laadida peale) -STR_ORDER_NO_UNLOAD_FULL_LOAD :(Maha mitte laadida ja laadida kõik kaubad täis) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Maha mitte laadida ja laadida üks kaup täis) -STR_ORDER_NO_UNLOAD_NO_LOAD :(Maha ei laadita ja peale ei laadita) +STR_ORDER_FULL_LOAD :(Täislaadi kõik) +STR_ORDER_FULL_LOAD_ANY :(Täislaadi üks veos) +STR_ORDER_NO_LOAD :(Ei laadi) +STR_ORDER_UNLOAD :(Mahalaadi, laadi) +STR_ORDER_UNLOAD_FULL_LOAD :(Mahalaadi, täislaadi kõik) +STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Mahalaadi, täislaadi üks) +STR_ORDER_UNLOAD_NO_LOAD :(Mahalaadi, jäta tühjaks) +STR_ORDER_TRANSFER :(Ümberlaadi, laadi) +STR_ORDER_TRANSFER_FULL_LOAD :(Ümberlaadi, täislaadi kõik) +STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Ümberlaadi, täislaadi üks) +STR_ORDER_TRANSFER_NO_LOAD :(Ümberlaadi, jäta tühjaks) +STR_ORDER_NO_UNLOAD :(Ei mahalaadi, laadi) +STR_ORDER_NO_UNLOAD_FULL_LOAD :(Ei mahalaadi, täislaadi kõik) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Ei mahalaadi, täislaadi üks) +STR_ORDER_NO_UNLOAD_NO_LOAD :(Ei mahalaadi, ei laadi) -STR_ORDER_AUTO_REFIT :(Automaatne ümberseadistus tüüpile {STRING}) -STR_ORDER_FULL_LOAD_REFIT :(Laadida kõik kaubad täis ja seadistada kaubale {STRING}) -STR_ORDER_FULL_LOAD_ANY_REFIT :(Laadida üks kaup täis ja seadistada kaubale {STRING}) -STR_ORDER_UNLOAD_REFIT :(Laadida tühjaks, laadida peale ja seadistada kaubale {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Laadida tühjaks, laadida kõik kaubad täis ja seadistada kaubale {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Laadida tühjaks, laadida üks kaup täis ja seadistada kaubale {STRING}) -STR_ORDER_TRANSFER_REFIT :(Laadida ümber, laadida peale ja seadistada kaubale {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Laadida ümber, laadida kõik kaubad täis ja seadistada kaubale {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Laadida ümber, laadida üks kaup täis ja seadistada kaubale {STRING}) -STR_ORDER_NO_UNLOAD_REFIT :(Maha mitte laadida, laadida peale ja seadistada kaubale {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Maha mitte laadida, laadida kõik kaubad täis ja seadistada kaubale {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Maha mitte laadida, laadida üks kaup täis ja seadistada kaubale {STRING}) +STR_ORDER_AUTO_REFIT :(Ümberseadistamine: {STRING}) +STR_ORDER_FULL_LOAD_REFIT :(Täislaadi kõik, ümberseadista: {STRING}) +STR_ORDER_FULL_LOAD_ANY_REFIT :(Täislaadi üks veos, ümberseadista: {STRING}) +STR_ORDER_UNLOAD_REFIT :(Mahalaadi, laadi, ümberseadista: {STRING}) +STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Mahalaadi, täislaadi kõik, ümberseadista: {STRING}) +STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Mahalaadi, täislaadi üks, ümberlaadi: {STRING}) +STR_ORDER_TRANSFER_REFIT :(Ümberlaadi, laadi, ümberseadista: {STRING}) +STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Ümberlaadi, täislaadi kõik, ümberseadista: {STRING}) +STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Ümberlaadi, täislaadi üks, ümberseadista: {STRING}) +STR_ORDER_NO_UNLOAD_REFIT :(Ei mahalaadi, laadi veos, ümberseadista: {STRING}) +STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Ei mahalaadi, täislaadi kõik, ümberseadista: {STRING}) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Ei mahalaadi, täislaadi üks, ümberseadista: {STRING}) STR_ORDER_AUTO_REFIT_ANY :võimalikud kaubad @@ -3966,63 +4189,63 @@ STR_ORDER_CONDITIONAL_UNCONDITIONAL :Mine sihtpunkti STR_ORDER_CONDITIONAL_NUM :Mine sihtpunkti {COMMA}, kui {STRING} {STRING} {COMMA} STR_ORDER_CONDITIONAL_TRUE_FALSE :Mine sihtpunkti{COMMA}, kui {STRING} {STRING} -STR_INVALID_ORDER :{RED} (Kõlbmatu ülesanne) +STR_INVALID_ORDER :{RED} (Kõlbmatu korraldus) # Time table window -STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Sõiduplaan) +STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Graafik) STR_TIMETABLE_ORDER_VIEW :{BLACK}Korraldused STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Lülita korralduste vaatesse -STR_TIMETABLE_TOOLTIP :{BLACK}Sõiduplaan - ülesanne märgitakse klõpsuga +STR_TIMETABLE_TOOLTIP :{BLACK}Graafik - korraldus märgitakse klõpsuga STR_TIMETABLE_NO_TRAVEL :Sõitu pole STR_TIMETABLE_NOT_TIMETABLEABLE :Reisi (automaatne; ajakava järgmise manuaalse käsu järgi) -STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Sõitmine (sõiduplaanita) +STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Sõitmine (graafikuta) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Reisi kõike suurema {2:VELOCITY} (ei ole ajastatud) STR_TIMETABLE_TRAVEL_FOR :Sõida {STRING} STR_TIMETABLE_TRAVEL_FOR_SPEED :Reisi selleks {STRING} kõige rohkema {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Sõit ({STRING}, ei ole ajastatud) STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Sõit ({STRING}, ei ole ajastatud) kuni {VELOCITY} -STR_TIMETABLE_STAY_FOR_ESTIMATED :({STRING} oode, ei ole ajastatud) -STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :({STRING} sõidukestus, ei ole ajastatud) +STR_TIMETABLE_STAY_FOR_ESTIMATED :(Oode {STRING}, ajastamata) +STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :({STRING} sõidukestus, ajastamata) STR_TIMETABLE_STAY_FOR :ja oota {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :ja sõida {STRING} jaoks STR_TIMETABLE_DAYS :{COMMA} päev{P "" a} STR_TIMETABLE_TICKS :{COMMA} samm{P "" u} -STR_TIMETABLE_TOTAL_TIME :{BLACK}Selle sõiduplaani täitmine võtab {STRING} -STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Selle sõiduplaani täitmine võtab vähemalt {STRING} (kõik ei ole planeeritud) +STR_TIMETABLE_TOTAL_TIME :{BLACK}Selle graafiku läbimine võtab {STRING} +STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Selle graafiku läbimine võtab vähemalt {STRING} (kõik ei ole planeeritud) STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Sõiduk on graafikus STR_TIMETABLE_STATUS_LATE :{BLACK}See sõiduk on {STRING} hiljaks jäämas STR_TIMETABLE_STATUS_EARLY :{BLACK}See sõiduk on {STRING} varajane -STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Sõiduplaani pole veel alustatud -STR_TIMETABLE_STATUS_START_AT :{BLACK}Sõiduplaani alustatakse {STRING} +STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Graafikuga pole veel alustatud +STR_TIMETABLE_STATUS_START_AT :{BLACK}Graafikuga alustatakse {STRING} STR_TIMETABLE_STARTING_DATE :{BLACK}Alguskuupäev -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vali sõiduplaani alguskuupäev. Ctrl-klõps määrab sõiduplaani alguskuupäeva ja jaotab sõidukid ühtlaselt, kasutades järjestust, kui sihid on planeeritud +STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vali graafiku alguskuupäev. Ctrl-klõps määrab graafiku alguskuupäeva ja jaotab sõidukid ühtlaselt, kasutades järjestust, kui sihid on planeeritud STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuda aega -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuda märgitud ülesandeks vajalikku aega +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuda märgitud korraldusele määratud aega STR_TIMETABLE_CLEAR_TIME :{BLACK}Tühista aeg -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Eemalda ülesandeks vajalik aeg +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Tühista korralduse täitmiseks määratud aeg STR_TIMETABLE_CHANGE_SPEED :{BLACK}Muuda kiiruspiirangut STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Muuda märgitud korralduse kiiruspiirangut -STR_TIMETABLE_CLEAR_SPEED :{BLACK}Tühjenda kiiruselimiit +STR_TIMETABLE_CLEAR_SPEED :{BLACK}Kustuta kiiruspiirang STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Eemalda märgitud korralduse kiiruspiirang -STR_TIMETABLE_RESET_LATENESS :{BLACK}Tühista hilinemisarvesti -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Tühista hilinemisarvesti, et sõiduk ei jääks hiljaks +STR_TIMETABLE_RESET_LATENESS :{BLACK}Nulli hilinemisarvesti +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nulli hilinemisarvesti, nii et sõiduk oleks graafikus -STR_TIMETABLE_AUTOFILL :{BLACK}Täida ise +STR_TIMETABLE_AUTOFILL :{BLACK}Isetäituv STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Kasuta liiniplaani täitmiseks järgmise sõidu andmeid (Ctrl+klõps säilitab ooteajad) STR_TIMETABLE_EXPECTED :{BLACK}Eeldatav STR_TIMETABLE_SCHEDULED :{BLACK}Plaanis -STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Vaheta eeldatava ja graafikupõhise sõiduplaani vahel +STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Vaheta eeldatava ja graafiku vahel STR_TIMETABLE_ARRIVAL_ABBREVIATION :S: STR_TIMETABLE_DEPARTURE_ABBREVIATION :V: @@ -4031,64 +4254,65 @@ STR_TIMETABLE_DEPARTURE_ABBREVIATION :V: # Date window (for timetable) STR_DATE_CAPTION :{WHITE}Määra kuupäev STR_DATE_SET_DATE :{BLACK}Määra kuupäev -STR_DATE_SET_DATE_TOOLTIP :{BLACK}Kasuta sõiduplaani alguskuupäevana +STR_DATE_SET_DATE_TOOLTIP :{BLACK}Kasuta graafiku alguskuupäevana STR_DATE_DAY_TOOLTIP :{BLACK}Vali päev STR_DATE_MONTH_TOOLTIP :{BLACK}Vali kuu STR_DATE_YEAR_TOOLTIP :{BLACK}Vali aasta # AI debug window -STR_AI_DEBUG :{WHITE}Arvutivea otsing +STR_AI_DEBUG :{WHITE}AI/GameScripti debugimine STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (ver{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Skripti nimi STR_AI_DEBUG_SETTINGS :{BLACK}Seaded STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Skripti seadistamine -STR_AI_DEBUG_RELOAD :{BLACK}Laadi tehismõistus uuesti -STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Sulge tehismõistus, laadi skript uuesti ning taaskäivita tehismõistus -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Enable/disable breaking when an AI log message matches the break string +STR_AI_DEBUG_RELOAD :{BLACK}Laadi AI uuesti +STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Sulge AI, laadi skript uuesti ning taaskäivita AI +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Võimalda/ei võimalda peatamist kui AI logisõnum sisaldab peatamiskirjet STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Vahe sees: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Vahe sees STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Kui AI logi sõnum vastab selle stringiga, mäng seisatakse. -STR_AI_DEBUG_MATCH_CASE :{BLACK}Sobita tähemärgisuurus -STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Toggle matching case when comparing AI log messages against the break string +STR_AI_DEBUG_MATCH_CASE :{BLACK}Tõstutundlik +STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Vaheldab tõstutundlikkust, kui AI debug-sõnumeid võrreldakse peatamiskirjega STR_AI_DEBUG_CONTINUE :{BLACK}Jätka -STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Jätka tee ja tee edasi AI-d -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vaata selle AI silumisinfo väljundit -STR_AI_GAME_SCRIPT :{BLACK}Mängu Skript -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Vaata Mängu Skripti logi +STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Lõpeta paus ja jätka AI-d +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Vaata selle AI debug-väljundit +STR_AI_GAME_SCRIPT :{BLACK}GameScript +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Kontrolli GameScripti logi -STR_ERROR_AI_NO_AI_FOUND :Laadimiseks sobivat tehismõistust ei leitud.{}See on asendustehismõistus, ning ei tee midagi.{}Tehismõistuseid saab laadida kasutades 'Internetisisu' süsteemi. -STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Tõrge ühe töötava tehismõistusega. Palun teavitage sellest tehismõistuse autorit koos kuvapaugutusega tehismõistuse tõrkeotsingu aknast. -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tehismõistuse / GameScript-i silumise akent saab vaadata ainult server +STR_ERROR_AI_NO_AI_FOUND :Laadimiseks sobivat AI-d ei leitud.{}See AI on makett, ning ei tee midagi.{}AI-sid alla saab laadida kasutades 'aineste allalaadimise' süsteemi. +STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Üks skriptidest jooksis kokku. Palun teatada sellest skripti autorit koos ekraanipildiga AI/GamesScripti debugimise aknast +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/GameScripti debugimise akent saab kasutada ainult serveris # AI configuration window -STR_AI_CONFIG_CAPTION :{WHITE}Arvuti seadistus -STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}GameScript-id mis laetakse järgmise mänguga -STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Tehismõistused mis laetakse järgmise mänguga +STR_AI_CONFIG_CAPTION :{WHITE}AI/Game Script seadistus +STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Järgmises mängus laaditav GameScript +STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI-d järgmises mängus STR_AI_CONFIG_HUMAN_PLAYER :Inimene -STR_AI_CONFIG_RANDOM_AI :Suvaline tehismõistus +STR_AI_CONFIG_RANDOM_AI :Suvaline AI STR_AI_CONFIG_NONE :(mitte ühtegi) -STR_AI_CONFIG_MOVE_UP :{BLACK}Liigutamine ülespoole -STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Valitud tehismõistuse liigutamine loendis ülespoole -STR_AI_CONFIG_MOVE_DOWN :{BLACK}Liigutamine allapoole -STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Valitud tehismõistuse liigutamine loendis allapoole +STR_AI_CONFIG_MOVE_UP :{BLACK}Tõsta +STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Valitud AI liigutamine loendis ülespoole +STR_AI_CONFIG_MOVE_DOWN :{BLACK}Langeta +STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Valitud AI liigutamine loendis allapoole STR_AI_CONFIG_GAMESCRIPT :{SILVER}GameScript -STR_AI_CONFIG_AI :{SILVER}Tehismõistused +STR_AI_CONFIG_AI :{SILVER}AI-d -STR_AI_CONFIG_CHANGE :{BLACK}Vali {STRING} +STR_AI_CONFIG_CHANGE :{BLACK}{STRING.g} valimine STR_AI_CONFIG_CHANGE_NONE : -STR_AI_CONFIG_CHANGE_AI :Tehismõistus +STR_AI_CONFIG_CHANGE_AI :AI STR_AI_CONFIG_CHANGE_GAMESCRIPT :GameScript +STR_AI_CONFIG_CHANGE_GAMESCRIPT.g :GameScripti STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Lae teine skript -STR_AI_CONFIG_CONFIGURE :{BLACK}Seadista +STR_AI_CONFIG_CONFIGURE :{BLACK}Seadistamine STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Muuda skripti parameetreid # Available AIs window STR_AI_LIST_CAPTION :{WHITE}Kasutatav {STRING} -STR_AI_LIST_CAPTION_AI :Tehismõistused -STR_AI_LIST_CAPTION_GAMESCRIPT :GameScript-id +STR_AI_LIST_CAPTION_AI :AI-d +STR_AI_LIST_CAPTION_GAMESCRIPT :GameScriptid STR_AI_LIST_TOOLTIP :{BLACK}Klõpsa skripti valimiseks STR_AI_LIST_AUTHOR :{LTBLUE}Autor: {ORANGE}{STRING} @@ -4100,22 +4324,22 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vali esi STR_AI_LIST_CANCEL :{BLACK}Loobu STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ära skripti muuda -STR_SCREENSHOT_CAPTION :{WHITE}Tee kuvapaugutus -STR_SCREENSHOT_SCREENSHOT :{BLACK}Tavaline kuvapaugutus -STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Täiesti sisse suumitud kuvapaugutus -STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Vaikimisi kuvapaugutuse suum -STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Terve kaardi kuvapaugutus -STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Kõrguskaardi kuvapaugutus -STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Väikese kaardi kuvapaugutus +STR_SCREENSHOT_CAPTION :{WHITE}Tee ekraanipilt +STR_SCREENSHOT_SCREENSHOT :{BLACK}Tavaline ekraanipilt +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Täissuurendusega ekraanipilt +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Ekraanipildi vaikimisi suurendus +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Terve kaardi ekraanipilt +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Kõrguskaardi ekraanipilt +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Pisikaardi ekraanipilt # AI Parameters -STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameetrid -STR_AI_SETTINGS_CAPTION_AI :Tehismõistus +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} parameetrid +STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CAPTION_GAMESCRIPT :GameScript STR_AI_SETTINGS_CLOSE :{BLACK}Sulge STR_AI_SETTINGS_RESET :{BLACK}Nulli STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} -STR_AI_SETTINGS_START_DELAY :Päevade arv eelmise tehismõistuse alustamisest pärast mida antud tehismõistus alustab (umbkaudne): {ORANGE}{STRING} +STR_AI_SETTINGS_START_DELAY :Päevade arv pärast eelmise AI lõpetamist, millal see AI käivitub (umbkaudselt): {ORANGE}{STRING} # Textfile window @@ -4150,12 +4374,12 @@ STR_FEEDER_INCOME_TINY :{TINY_FONT}{YEL STR_FEEDER_INCOME :{YELLOW}Ümberlaadimine: {CURRENCY_LONG}{WHITE} / {GREEN}Sissetulek: {CURRENCY_LONG} STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Ümberlaadimine: {CURRENCY_LONG}{WHITE} / {RED}Hind: {CURRENCY_LONG} STR_FEEDER_COST :{YELLOW}Ümberlaadimine: {CURRENCY_LONG}{WHITE} / {RED}Hind: {CURRENCY_LONG} -STR_MESSAGE_ESTIMATED_COST :{WHITE}Eeldatav hind: {CURRENCY_LONG} +STR_MESSAGE_ESTIMATED_COST :{WHITE}Eeldatav kulu: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Eeldatavad tulud: {CURRENCY_LONG} # Saveload messages STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ikka salvestamisel,{}palun oota salvestuse lõpuni! -STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automaatsalvestus ebaõnnestus +STR_ERROR_AUTOSAVE_FAILED :{WHITE}Välpsalvestus ebaõnnestus STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ei suuda kettalt lugeda STR_ERROR_GAME_SAVE_FAILED :{WHITE}Mängu salvestamine nurjus{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Faili ei saa kustutada @@ -4166,12 +4390,13 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvestus on te STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Fail pole loetav STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Faili ei saanud kirjutada STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Andmeterviklikkuse kontrolli ei läbitud +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Mäng on salvestatud muudetud versiooniga STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Mäng on salvestatud osas, kus trammid ei olnud toetatud. Kõik trammid on eemaldatud # Map generation messages -STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kaardi tekitamine katkes...{}... linnadele pole sobilike kohti -STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... kaardil puudub linn +STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kaardi tekitamine katkes...{}... pole sobivaid kohti asulatele +STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... stsenaariumis pole ühtegi asulat STR_ERROR_PNGMAP :{WHITE}Ei suuda laadida maastiku PNG failist... STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... faili ei leitud @@ -4193,8 +4418,9 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Mäng ei STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Hiiglaslik kuvapaugutus STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Kuvapaugutuse mõõtmed saavad olema {COMMA} x {COMMA} pikslit. Kuvapaugutuse tegemine võib võtta tükk aega. Kas sa oled kindel, et sa soovid jätkata? -STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Kuvapaugutus on edukalt salvestatud nimega '{STRING}' -STR_ERROR_SCREENSHOT_FAILED :{WHITE}Kuvapaugutuse tegemine nurjus! +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Kõrguskaart edukalt salvestatud, kui '{STRING}'. Kõrgpunkt on {NUM} +STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Ekraanipilt on edukalt salvestatud nimega '{STRING}' +STR_ERROR_SCREENSHOT_FAILED :{WHITE}Ekraanipildi tegemine nurjus! # Error message titles STR_ERROR_MESSAGE_CAPTION :{YELLOW}Sõnum @@ -4208,21 +4434,21 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Maapind STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Maa on vales suunas kaldu STR_ERROR_CAN_T_DO_THIS :{WHITE}Seda ei saa teha... STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Hoone tuleb enne lammutada -STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Seda ala ei saa puhastada... +STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Seda ala ei saa tühjendada... STR_ERROR_SITE_UNSUITABLE :{WHITE}... ebasobiv koht STR_ERROR_ALREADY_BUILT :{WHITE}... juba ehitatud STR_ERROR_OWNED_BY :{WHITE}... omanik on {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... ala kuulub teisele ettevõttele -STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... maastikukujunduse limiit ületatud -STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... puhastatavate ruutude piir on ületatud -STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... puu istutamise limiit ületatud +STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... maastikukujunduse limiit täis +STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... ruudutühjenduse limiit täis +STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... puu istutamise limiit täis STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Nime ei tohi korduda STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} on ees STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Pole lubatud kui mäng seisab # Local authority errors STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN} kohalik omavalitsus keeldub seda lubamast -STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}Linna {TOWN} kohalik omavalitsus keeldub uut lennujaama lubamast +STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}Asula {TOWN} omavalitsus keeldub uut lennujaama lubamast STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN} kohalik omavalitsus keeldub ehitusluba lennujaamale väljastamast kuna on mures müra pärast STR_ERROR_BRIBE_FAILED :{WHITE}Teie altkäemaksu andmise katse on avastatud kohaliku uurija poolt @@ -4246,6 +4472,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... pole STR_ERROR_CURRENCY_REQUIRED :{WHITE}... vajad {CURRENCY_LONG} STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Ei saa laenu tagasi maksta... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Ei saa anda raha, mis on laenatud pangast. +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Ei saa sellele ettevõttele raha saata... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Ettevõtet ei saa osta... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Ettevõtte peakorterit ei saa ehitada... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Selle ettevõtte aktsiatest ei saa 25% osta... @@ -4253,18 +4480,18 @@ STR_ERROR_CAN_T_SELL_25_SHARE_IN :{WHITE}Selle et STR_ERROR_PROTECTED :{WHITE}See ettevõtte pole veel piisavalt vana, et aktsiaid vahetada... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Ei saa ühtegi linna ehitada... -STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Linna nime ei saa vahetada... -STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Siia ei saa linna ehitada... -STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Linna ei saa laiendada... +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Ei saa ühtegi asulat ehitada... +STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Ei saa linna ümbernimetada... +STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Siia ei saa asulat rajada... +STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Asulat ei saa laiendada... STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... liiga lähedal kaardi servale -STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... liiga lähedal teisele linnale -STR_ERROR_TOO_MANY_TOWNS :{WHITE}... liiga palju linnu +STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... liiga lähedal teisele asulale +STR_ERROR_TOO_MANY_TOWNS :{WHITE}... liiga palju asulaid STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... pole enam ruumi kaardil -STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Linn ei ehita teid. Teedeehituse lubamiseks Põhjalik seadistus->Majandus->Linnad +STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Asula ei ehita teid. Teedeehituse lubamiseks Põhjalik seadistus->Majandus->Asulad STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Teede ehitamine -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Seda linna ei saa kustutada...{}Jaam või depoo viitab linnale või mõnd linna omanduses olevat tükki ei saa kustutada -STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... linnakeskuses ei leidu kujule sobivat kohta +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Seda asulat ei saa kõrvaldada...{}Jaam või depoo viitab asulale, või asulale kuuluvat ruutu ei saa kõrvaldada +STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... asula keskuses ei leidu kujule sobivat kohta # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... liiga palju tööstuseid @@ -4272,13 +4499,13 @@ STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Tööstu STR_ERROR_CAN_T_BUILD_HERE :{WHITE}{STRING} ei saa siia ehitada... STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Seda tüüpi tööstust ei saa siia ehitada... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... liiga lähedal mõnele teisele tööstusele -STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... enne pead linna ehitama -STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... iga linna kohta lubatud ainult üks -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... saab ainult ehitada linna, mille rahvastikuarv ületab 1200 +STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... enne pead asula rajama +STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... iga asula kohta lubatud ainult üks +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... saab ainult ehitada asulatesse, mille elanikearv ületab 1200 STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... saab ehitada ainult vihmametsadesse STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... saab ehitada ainult kõrbesse -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... saab ainult linnadesse ehitada -STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... saab ainult linna keskpunkti lähedale ehitada +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... saab ainult asulatesse ehitada (majade asemele) +STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... saab ainult asulekeskuste lähedale ehitada STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... saab ainult madalatele aladele ehitada STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... saab ainult ehitada kaardi serva STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... metsa saab istutada ainult lumepiirist kõrgemale @@ -4305,8 +4532,8 @@ STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Liiga pa STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Liiga palju laadimisplatvorme STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Liiga lähedal teisele dokile STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Liiga lähedal teisele lennuväljale -STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Jaama nime ei saa vahetada... -STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... see tee on omatud linna poolt +STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Ei saa jaama ümbernimetada... +STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... see on asulale kuuluv tee STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... tee on vales suunas STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... nurgad ei saa läbisõidupeatustes olla STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... ristmikud ei saa olla läbisõidupeatustes @@ -4348,7 +4575,7 @@ STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Siia ei STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Trammidepood ei saa siia rajada STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Laevaremonditehast ei saa siia ehitada... -STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Ei saa muuta depoo nime... +STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Ei saa depood ümbernimetada... STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... peab olema depoos peatatud STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... peab garaažis peatatud olema @@ -4372,6 +4599,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Vale depootüü STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} on pärast asendamist liiga pikk STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Automaatse asendamise/uuendamise reegleid ei ole rakendatud STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(rahalimiit) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Uus sõiduk ei saa vedada {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Uus sõiduk ei saa ümberseadistada korralduses {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Teostamatu rööbasteede kooslus @@ -4380,6 +4609,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Sobiv ro STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Rööbastee tuleb eelnevalt lammutada STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Läbipääsmatu või ühesuunaline maantee STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Ülesõidukohad on selle raudteetüübi puhul keelatud +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}See teeliik ei luba tasaseid ristmikke STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Siia ei saa signaale rajada... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Siia ei saa raudteed ehitada... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Siit ei saa raudteed lammutada... @@ -4399,6 +4629,11 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Siinset STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Siinset trammiteed ei saa lammutada... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... siin pole autoteed STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... siin pole trammiteed +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Siin ei saa teeliiki ümber muuta... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Siin ei saa trammiliiki ümber muuta... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Puudub sobilik tee +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Puudub sobiv trammitee +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... mitteühilduv trammitee # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Siia ei saa kanaleid ehitada... @@ -4410,7 +4645,7 @@ STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... ei s STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... ei saa ehitada kanali peale STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... ei saa ehitada jõe peale STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Kanal tuleb enne lammutada -STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Siia ei saa veejuhet ehitada... +STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Siia ei saa veesilda ehitada... # Tree related errors STR_ERROR_TREE_ALREADY_HERE :{WHITE}... siin on juba puu olemas @@ -4447,59 +4682,60 @@ STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Seda maa STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... see on juba sinu oma! # Group related errors -STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Ei saa rühma luua... -STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Seda rühma ei saa eemaldada... -STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Rühma nime ei saa vahetada... -STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Ülemrühma ei saa määrata... -STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Ei saa kõiki sõidukeid sellest rühmast eemaldada... -STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Antud sõidukit ei saa sellesse rühma lisada... -STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Jagatud sõidukeid ei saa rühma lisada... +STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Ei saa jagu luua... +STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Seda jagu ei saa kõrvaldada... +STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Ei saa jagu ümbernimetada... +STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Ülemjagu ei saa määrata... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... jaotuste hierarhias ei tohi olla ringseoseid +STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Ei saa kõiki sõidukeid sellest jaost kõrvaldada... +STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Antud sõidukit ei saa sellesse jakku lisada... +STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Jagatud sõidukeid ei saa jakku lisada... # Generic vehicle errors STR_ERROR_TRAIN_IN_THE_WAY :{WHITE}Rong on ees STR_ERROR_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Mootorsõiduk takistab teed STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Laev on ees -STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}Lennuk on teel +STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}Õhusõiduk on teel -STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}Ei ole võimalik ümber seadistada... -STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}Mootorsõiduki seadistust ei saa ümber muuta -STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Ei saa laeva ümber seadistada... -STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}Ei saa lennukit ümber seadistada... +STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}Ei saa rongi ümberseadistada... +STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}Ei saa maanteesõidukit ümberseadistada... +STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Ei saa laeva ümberseadistada... +STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}Ei saa õhusõidukit ümberseadistada... -STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}Ei saa nimetada rongi... -STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Ei saa maanteveokit ümber nimetada... -STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}Ei saa laeva ümber nimetada... -STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}Ei saa lennukile nime anda +STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}Ei saa rongi ümbernimetada... +STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Ei saa maanteesõidukit ümbernimetada... +STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}Ei saa laeva ümbernimetada... +STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}Ei saa õhusõidukit ümbernimetada... STR_ERROR_CAN_T_STOP_START_TRAIN :{WHITE}Ei saa peatada/startida rongi... STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Ei saa veokit peatada, ega startida... STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Ei saa peatada/käivitada laeva... -STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Ei saa lennukit peatada/käivitada... +STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Ei saa õhusõidukit peatada/käivitada... STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Rongi ei saa depoosse saata... STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Ei saa veokit garaaži saata STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Ei saa laeva angaari saata... -STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Ei saa lennukit angaari saata... +STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Ei saa õhusõidukit angaari saata... STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Rööbassõidukit ei saa osta... STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Mootorsõidukit ei saa osta... STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Laeva ei saa osta... -STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Lennukit ei saa osta... +STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Õhusõidukit ei saa osta... -STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Raudteesõiduki tüübinime ei saa vahetada... -STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Mootorsõiduki tüübinime ei saa vahetada... -STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Laeva tüübinime ei saa vahetada... -STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Lennuki tüübinime ei saa vahetada... +STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Ei saa rööbassõiduki liiki ümbernimetada... +STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Ei saa maanteesõiduki liiki ümbernimetada... +STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Ei saa laevaliiki ümbernimetada... +STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Ei saa õhusõiduki liiki ümbernimetada... STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Rööbassõidukit ei saa müüa... STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Ei saa veokit müüa... STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Ei saa laeva müüa -STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Ei saa lennukit müüa... +STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Ei saa õhusõidukit müüa... STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Sõiduk pole saadaval STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Sõiduk pole saadaval STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Laev pole saadaval -STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Lennuk pole saadaval +STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Õhusõiduk pole saadaval STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Mängus on liiga palju veovahendeid STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Hooldusvahemikku ei saa muuta... @@ -4518,29 +4754,29 @@ STR_ERROR_TRAIN_START_NO_POWER :Rongil puudub j STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}Maanteesõiduk ei saa ümber pöörata... -STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Lennuk on õhus +STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Õhusõiduk lendab # Order related errors -STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Ülesannetele pole rohkem ruumi -STR_ERROR_TOO_MANY_ORDERS :{WHITE}Liiga palju ülesandeid -STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Ei saa lisada uut ülesannet... -STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Seda ülesannet ei saa kustutada... -STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Seda ülesannet ei saa muuta... -STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Seda ülesannet ei saa liigutada... -STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Praegust ülesannet ei ole saa vahele jätta... -STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Teisi ülesandeid ei saa vahele jätta... +STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Korraldustele pole rohkem ruumi +STR_ERROR_TOO_MANY_ORDERS :{WHITE}Liiga palju korraldusi +STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Ei saa lisada uut korraldust... +STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Seda korraldust ei saa kustutada... +STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Seda korraldust ei saa muuta... +STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Seda korraldust ei saa liigutada... +STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Praegust korraldust pole võimalik vahele jätta... +STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Teisi korraldusi ei saa vahele jätta... STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}sõiduk ei saa igasse jaama minna STR_ERROR_CAN_T_ADD_ORDER :{WHITE}sõiduk ei saa antud jaama minna -STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... seda ülesannet jagav sõiduk ei saa sinna jaama minna +STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... seda korraldust jagav sõiduk ei saa sinna jaama minna STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Sihtpunktide nimekirja ei saa jagada... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Korralduste jagamist ei saa peatada... STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Sihtpunktide nimekirja ei saa kopeerida... STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... liiga kaugel eelmisest sihtpunktist -STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... lennukil pole piisavalt pikka tegevusraadiust +STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... ebapiisav õhusõiduki lennuulatus # Timetable related errors -STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Sõidukile ei saa sõiduplaani anda... +STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Sõidukile ei saa graafikut määrata... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Sõidukid saavad ainult peatustes oodata STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}See sõiduk ei peatu selles jaamas @@ -4562,6 +4798,7 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Algse Transport STR_BASESOUNDS_NONE_DESCRIPTION :Helikogu ilma helideta. STR_BASEMUSIC_WIN_DESCRIPTION :Algse Transport Tycoon Deluxe Windowsi versiooni muusika. STR_BASEMUSIC_DOS_DESCRIPTION :Algse Transport Tycoon Deluxe DOSi versiooni muusika. +STR_BASEMUSIC_TTO_DESCRIPTION :Algupärase Transport Tycooni (Original/World Editor) DOS-versiooni muusika. STR_BASEMUSIC_NONE_DESCRIPTION :Muusikakogu ilma muusikata. ##id 0x2000 @@ -4571,7 +4808,7 @@ STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_1 :Büroohoone STR_TOWN_BUILDING_NAME_SMALL_BLOCK_OF_FLATS_1 :Väike kortermaja STR_TOWN_BUILDING_NAME_CHURCH_1 :Kirik STR_TOWN_BUILDING_NAME_LARGE_OFFICE_BLOCK_1 :Suur büroohoone -STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Linna majad +STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Asustuse majad STR_TOWN_BUILDING_NAME_HOTEL_1 :Hotell STR_TOWN_BUILDING_NAME_STATUE_1 :Kuju STR_TOWN_BUILDING_NAME_FOUNTAIN_1 :Purskkaev @@ -4645,10 +4882,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :suhkrukaevandus ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Nimetu -STR_SV_TRAIN_NAME :Rong {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Mootorsõiduk {COMMA} -STR_SV_SHIP_NAME :Laev {COMMA} -STR_SV_AIRCRAFT_NAME :Õhusõiduk {COMMA} +STR_SV_TRAIN_NAME :Rong nr {COMMA} +STR_SV_ROAD_VEHICLE_NAME :Mootorsõiduk nr {COMMA} +STR_SV_SHIP_NAME :Laev nr {COMMA} +STR_SV_AIRCRAFT_NAME :Õhusõiduk nr {COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :Põhja {STRING} @@ -4942,24 +5179,25 @@ STR_VEHICLE_NAME_AIRCRAFT_POWERNAUT_HELICOPTER :Powernaut helik ##id 0x8800 # Formatting of some strings STR_FORMAT_DATE_TINY :{STRING}-{STRING}-{NUM} -STR_FORMAT_DATE_SHORT :{STRING} {NUM} +STR_FORMAT_DATE_SHORT :{1:NUM}. {0:STRING} STR_FORMAT_DATE_LONG :{STRING} {STRING} {NUM} STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING} STR_FORMAT_BUOY_NAME :{TOWN} Poi STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Poi nr. {COMMA} STR_FORMAT_COMPANY_NUM :(Ettevõte {COMMA}) -STR_FORMAT_GROUP_NAME :Rühm {COMMA} +STR_FORMAT_GROUP_NAME :Jagu {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} nr {COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} STR_FORMAT_WAYPOINT_NAME :{TOWN} meldepunkt -STR_FORMAT_WAYPOINT_NAME_SERIAL :Meldepunkt {TOWN} #{COMMA} +STR_FORMAT_WAYPOINT_NAME_SERIAL :Meldepunkt {TOWN} nr {COMMA} STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Rongi depoo -STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Rongi depoo #{COMMA} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Teesõidukite depoo -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Teesõidukite depoo #{COMMA} +STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Rongi depoo nr {COMMA} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Maanteesõidukite depoo +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Teesõidukite depoo nr {COMMA} STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Laeva depoo -STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Laeva depoo #{COMMA} +STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Laeva depoo nr {COMMA} STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hangaar STR_UNKNOWN_STATION :tundmatu jaam diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index b6bf7ab2d5..e6519df5f2 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=n}Hveiti STR_CARGO_PLURAL_RUBBER :{G=n}Gummi STR_CARGO_PLURAL_SUGAR :{G=n}Sukur STR_CARGO_PLURAL_TOYS :{G=n}Leikutoy -STR_CARGO_PLURAL_CANDY :{G=n}Góðgæti +STR_CARGO_PLURAL_SWEETS :{G=n}Góðgæti STR_CARGO_PLURAL_COLA :{G=n}Kola -STR_CARGO_PLURAL_COTTON_CANDY :{G=n}Kandifloss +STR_CARGO_PLURAL_CANDYFLOSS :{G=n}Kandifloss STR_CARGO_PLURAL_BUBBLES :{G=f}Sápiblørir STR_CARGO_PLURAL_TOFFEE :{G=n}Toffee STR_CARGO_PLURAL_BATTERIES :{G=n}Battarí @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=n}Hveiti STR_CARGO_SINGULAR_RUBBER :{G=n}Gummi STR_CARGO_SINGULAR_SUGAR :{G=n}Sukur STR_CARGO_SINGULAR_TOY :{G=n}Leikutoy -STR_CARGO_SINGULAR_CANDY :{G=n}Góðgæti +STR_CARGO_SINGULAR_SWEETS :{G=n}Góðgæti STR_CARGO_SINGULAR_COLA :{G=n}Kola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=n}Kandifloss +STR_CARGO_SINGULAR_CANDYFLOSS :{G=n}Kandifloss STR_CARGO_SINGULAR_BUBBLE :{G=f}Sápibløra STR_CARGO_SINGULAR_TOFFEE :{G=n}Toffee STR_CARGO_SINGULAR_BATTERY :{G=n}Battarí @@ -224,8 +224,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Vel rað STR_TOOLTIP_SORT_CRITERIA :{BLACK}Set raðfestingar treytir STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Set filtrerings treytir STR_BUTTON_SORT_BY :{BLACK}Sortera eftur -STR_BUTTON_LOCATION :{BLACK}Stað -STR_BUTTON_RENAME :{BLACK}Endurdoyp STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Lat glugga aftur STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Glugga heiti - drag her fyri at fyta glugga @@ -292,6 +290,8 @@ STR_SORT_BY_RANGE :Vídd STR_SORT_BY_POPULATION :Fólkatal STR_SORT_BY_RATING :Virði +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Steðga spælinum STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Skunda undir spæli @@ -374,7 +374,7 @@ STR_FILE_MENU_EXIT :Gevst # map menu STR_MAP_MENU_MAP_OF_WORLD :Heimskort -STR_MAP_MENU_EXTRA_VIEW_PORT :Eyka synisgluggi +STR_MAP_MENU_EXTRA_VIEWPORT :Eyka synisgluggi STR_MAP_MENU_SIGN_LIST :Listi yvur tekin ############ range for town menu starts @@ -538,8 +538,8 @@ STR_MONTH_DEC :Desembur # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Lykil STR_GRAPH_KEY_TOOLTIP :{BLACK}Vís lykil til graf -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -841,7 +841,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Mynduleikanir í {TOWN} skriva undir sáttmála við {STRING} fyri einkarrætt av flutningi í eitt ár! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Sýnisgluggi {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Sýnisgluggi {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Rita til sýnisglugga STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Avrita staðið í høvuðsglugganum inn hendan sýnisgluggan STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Set inn frá sýnisglugga @@ -889,8 +889,6 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Georgiskur Lari STR_GAME_OPTIONS_CURRENCY_IRR :Iranskur Rial ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Akfør -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Áset hvørja síðu á vegnum akfør skulu koyra á STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Vinstrakoyring STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Høgrakoyring @@ -946,6 +944,10 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :annað + + + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base grafikk sett STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vel ta base grafikk setti tú vil brúka STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} vantandi/oyðiløgd fíl{P a ir} @@ -1441,8 +1443,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Fult STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Litaði tíðindir koma frám í: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ári har tíðindabløð verða prentaði í litum. Áðrenn hetta ári eru tíðindabløð svørt/hvít STR_CONFIG_SETTING_STARTING_YEAR :Byrjunar ár: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Gilda mjúkan búskap (fleiri, smærri broytingar): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Um gilda, ídnaðar framleiðsla broytist títtari og í smærri stigum. Henda ásetanin hevur vanliga onga ávirkan um ídnaðinir koma frá einum NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Loyv keypi av partabrøvum frá øðrum fyritøkum: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Um gilda, er loyvt at keypa og selja fyritøku partabrøv. Partabrøv verða einans tøk hjá fyritøkum ið hava rokki ein ávísan aldur STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prosentpartur av deilvinningi at gjalda í veitingar kervum: {STRING} @@ -1537,6 +1537,8 @@ STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :ókendur STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Einki minni eftir STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Leitan eftir {BYTES} av spritecache eydnaðist ikki. Spritecache var skerd til {BYTES}. Hetta vil skerja framførsluna av OpenTTD. Fyri at minka um minnis krøvini kann tú royna at sløkkja fyri 32bpp grafikki og/ella suma-in stig +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1577,18 +1579,9 @@ STR_INTRO_TRANSLATION :{BLACK}Hesi ums # Quit window STR_QUIT_CAPTION :{WHITE}Gevst -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Er tú vís/vísur í at tú vil gevast at spæla OpenTTD og fara aftur til {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nei -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Far frá spæli STR_ABANDON_GAME_QUERY :{YELLOW}Er tú vís/vísur í at tú vil fara frá hesum spæli? @@ -1597,7 +1590,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Er tú # Cheat window STR_CHEATS :{WHITE}Snýt STR_CHEATS_TOOLTIP :{BLACK}Flugubeins kassanir vísa um tú hevur nýtt hetta snýti áður -STR_CHEATS_WARNING :{BLACK}Ávaring! Tú er í holt við at svíkja tínar kappingarneytar. Hav í huga at ein slík vanæra verður aldrin gloymd á ævini STR_CHEAT_MONEY :{LTBLUE}Hækka pening við {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spælir sum fyritøka: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Gandaður bulldosari (bein burtur ídnaðir, lutir ið ikki kunnu flytast): {ORANGE}{STRING} @@ -1706,8 +1698,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Broyt sl # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hópspæl -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nei -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spælara navn: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Hetta er navni aðrir spælarir fara at kenna teg vi @@ -1748,8 +1738,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Tak lut STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Endurnýggja servara STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Endurnýggja kunning um servara -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Finn servara -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Leita eftir servara á netverki STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Legg servara aftrat STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Leggur ein servara til listan sum altíð verður kannaður fyri koyrandi spøl STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Set servara í gongd @@ -1878,7 +1866,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nýggja fyritø # Network client list STR_NETWORK_CLIENTLIST_KICK :Sparka STR_NETWORK_CLIENTLIST_BAN :Bannað -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Gev pening STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tosa við øll STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Tosa við fyritøku STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Persónligt boð @@ -1887,8 +1874,6 @@ STR_NETWORK_SERVER :Servari STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Eygleiðarar -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriva nøgdina av peningi tú vil geva - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Goym ikki skrivaða loyniorðið STR_COMPANY_PASSWORD_OK :{BLACK}Gev fyritøkuni tað nýggja loyniorðið @@ -1988,8 +1973,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} er STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} hevur stovnað eina nýggja fyritøku (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} er farin úr spælinum ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} hevur broytt sítt navn til {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} handaði tínari fyritøku {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Tú handaði {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Servarin endaði setuna STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Servarin endurbyrjar...{}Vinarliga bíða... @@ -2066,6 +2049,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ja, heinta niður grafikkin STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nei, gevst at spæla OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Gjøgnumskygnis møguleikar STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Sløkk/tendra gjøgnumskygni fyri skelti. Ctrl+trýst fyri at læsa @@ -2096,6 +2080,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Bygg se STR_JOIN_WAYPOINT_CAPTION :{WHITE}Bind waypoint saman STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bygg eitt serstakt waypoint +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Jarnbreyta bygging STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Ravmagns jarnbreyta bygging @@ -2220,7 +2206,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Stødd: STR_OBJECT_CLASS_LTHS :Vitar STR_OBJECT_CLASS_TRNS :Sendarir -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Trø STR_TREES_RANDOM_TYPE :{BLACK}Tilvildarlig træ sløg STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Tilvildarlig trø @@ -2453,11 +2439,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nr. av bygdum: STR_MAPGEN_DATE :{BLACK}Dato: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Nr. av ídnaðum: -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Hædd á kava linju: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Flyt kava linjuna eitt upp -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Flyt kava linjuna eitt niður STR_MAPGEN_LAND_GENERATOR :{BLACK}Lendis framleiðari: -STR_MAPGEN_TREE_PLACER :{BLACK}Træ algoritma: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Slag av lendi: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Sjóvarmáli: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Løkar: @@ -2482,7 +2464,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Navn á STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Stødd: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} * {NUM} -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Broyt hædd á kava linju STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Broyt byrjunar ár # SE Map generation @@ -2692,10 +2673,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Keyp 1 STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Mutra mynduleikan á staðnum fyri at økju um tína meting, við vanda fyri hvassari revsing um tað verður avdúka.{}Kostnaður: {CURRENCY_LONG} # Goal window -STR_GOALS_GLOBAL_TITLE :{BLACK}Heimsfevnandi mál: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Einki - -STR_GOALS_COMPANY_TITLE :{BLACK}Fyritøku mál: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Trýst á mál fyri at savna høvuðs sýni á ídnað/bygd/punt. Ctrl+trýst letur upp nýggjan sýnisglugga á ídnað/bygd/punt # Goal question window @@ -3176,6 +3155,7 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Lessar / Avlessar STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Fer avstað diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 4780b8c9aa..7a54d30c0d 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Vehnää STR_CARGO_PLURAL_RUBBER :Kumia STR_CARGO_PLURAL_SUGAR :Sokeria STR_CARGO_PLURAL_TOYS :Leluja -STR_CARGO_PLURAL_CANDY :Karkkia +STR_CARGO_PLURAL_SWEETS :Karkkia STR_CARGO_PLURAL_COLA :Limsaa -STR_CARGO_PLURAL_COTTON_CANDY :Hattaraa +STR_CARGO_PLURAL_CANDYFLOSS :Hattaraa STR_CARGO_PLURAL_BUBBLES :Kuplia STR_CARGO_PLURAL_TOFFEE :Toffeeta STR_CARGO_PLURAL_BATTERIES :Paristoja @@ -59,37 +59,37 @@ STR_CARGO_PLURAL_FIZZY_DRINKS :Sihijuomaa # Singular cargo name STR_CARGO_SINGULAR_NOTHING : -STR_CARGO_SINGULAR_PASSENGER :Matkustaja -STR_CARGO_SINGULAR_COAL :Kivihiili -STR_CARGO_SINGULAR_MAIL :Posti -STR_CARGO_SINGULAR_OIL :Öljy -STR_CARGO_SINGULAR_LIVESTOCK :Karja -STR_CARGO_SINGULAR_GOODS :Tavara -STR_CARGO_SINGULAR_GRAIN :Vilja -STR_CARGO_SINGULAR_WOOD :Raakapuu -STR_CARGO_SINGULAR_IRON_ORE :Rautamalmi -STR_CARGO_SINGULAR_STEEL :Teräs -STR_CARGO_SINGULAR_VALUABLES :Arvotavara -STR_CARGO_SINGULAR_COPPER_ORE :Kuparimalmi -STR_CARGO_SINGULAR_MAIZE :Maissi -STR_CARGO_SINGULAR_FRUIT :Hedelmä -STR_CARGO_SINGULAR_DIAMOND :Jalokivi -STR_CARGO_SINGULAR_FOOD :Ruoka -STR_CARGO_SINGULAR_PAPER :Paperi -STR_CARGO_SINGULAR_GOLD :Kulta -STR_CARGO_SINGULAR_WATER :Vesi -STR_CARGO_SINGULAR_WHEAT :Vehnä -STR_CARGO_SINGULAR_RUBBER :Kumi -STR_CARGO_SINGULAR_SUGAR :Sokeri -STR_CARGO_SINGULAR_TOY :Lelu -STR_CARGO_SINGULAR_CANDY :Karkki -STR_CARGO_SINGULAR_COLA :Limsa -STR_CARGO_SINGULAR_COTTON_CANDY :Hattara -STR_CARGO_SINGULAR_BUBBLE :Kupla -STR_CARGO_SINGULAR_TOFFEE :Toffee -STR_CARGO_SINGULAR_BATTERY :Paristo -STR_CARGO_SINGULAR_PLASTIC :Muovi -STR_CARGO_SINGULAR_FIZZY_DRINK :Sihijuoma +STR_CARGO_SINGULAR_PASSENGER :matkustaja +STR_CARGO_SINGULAR_COAL :kivihiili +STR_CARGO_SINGULAR_MAIL :posti +STR_CARGO_SINGULAR_OIL :öljy +STR_CARGO_SINGULAR_LIVESTOCK :karja +STR_CARGO_SINGULAR_GOODS :tavara +STR_CARGO_SINGULAR_GRAIN :vilja +STR_CARGO_SINGULAR_WOOD :raakapuu +STR_CARGO_SINGULAR_IRON_ORE :rautamalmi +STR_CARGO_SINGULAR_STEEL :teräs +STR_CARGO_SINGULAR_VALUABLES :arvotavara +STR_CARGO_SINGULAR_COPPER_ORE :kuparimalmi +STR_CARGO_SINGULAR_MAIZE :maissi +STR_CARGO_SINGULAR_FRUIT :hedelmä +STR_CARGO_SINGULAR_DIAMOND :timantti +STR_CARGO_SINGULAR_FOOD :ruoka +STR_CARGO_SINGULAR_PAPER :paperi +STR_CARGO_SINGULAR_GOLD :kulta +STR_CARGO_SINGULAR_WATER :vesi +STR_CARGO_SINGULAR_WHEAT :vehnä +STR_CARGO_SINGULAR_RUBBER :kumi +STR_CARGO_SINGULAR_SUGAR :sokeri +STR_CARGO_SINGULAR_TOY :lelu +STR_CARGO_SINGULAR_SWEETS :karkki +STR_CARGO_SINGULAR_COLA :limsa +STR_CARGO_SINGULAR_CANDYFLOSS :hattara +STR_CARGO_SINGULAR_BUBBLE :kupla +STR_CARGO_SINGULAR_TOFFEE :toffee +STR_CARGO_SINGULAR_BATTERY :paristo +STR_CARGO_SINGULAR_PLASTIC :muovi +STR_CARGO_SINGULAR_FIZZY_DRINK :sihijuoma # Quantity of cargo STR_QUANTITY_NOTHING : @@ -194,6 +194,7 @@ STR_COLOUR_DEFAULT :Oletus STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}ruutua/vrk STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hv STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hv @@ -228,13 +229,11 @@ STR_LIST_FILTER_TITLE :{BLACK}Suodatin STR_LIST_FILTER_OSKTITLE :{BLACK}Syötä suodatinteksti STR_LIST_FILTER_TOOLTIP :{BLACK}Syötä avainsana suodattaaksesi listan -STR_TOOLTIP_GROUP_ORDER :{BLACK}Valitse ryhmittelyjärjestys +STR_TOOLTIP_GROUP_ORDER :{BLACK}Valitse ryhmittelytapa STR_TOOLTIP_SORT_ORDER :{BLACK}Valitse järjestys (laskeva/nouseva) STR_TOOLTIP_SORT_CRITERIA :{BLACK}Valitse järjestyskriteeri STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Valitse suodatuskriteerit STR_BUTTON_SORT_BY :{BLACK}Lajittele -STR_BUTTON_LOCATION :{BLACK}Sijainti -STR_BUTTON_RENAME :{BLACK}Nimeä uudelleen STR_BUTTON_CATCHMENT :{BLACK}Vaikutusalue STR_TOOLTIP_CATCHMENT :{BLACK}Valitse, näytetäänkö vaikutusalue @@ -242,8 +241,8 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Sulje ik STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Ikkunan otsake – siirrä ikkunaa vetämällä tästä STR_TOOLTIP_SHADE :{BLACK}Pienennä ikkuna – näytä vain otsikko STR_TOOLTIP_DEBUG :{BLACK}Näytä NewGRF-vianmääritystiedot -STR_TOOLTIP_DEFSIZE :{BLACK}Palauta ikkunan oletuskoko. Ctrl+Klik tallentaa nykyisen koon oletukseksi -STR_TOOLTIP_STICKY :{BLACK}Aseta ikkuna säilymään "Sulje kaikki ikkunat" -napista huolimatta. Ctrl+Klik tallentaa tilan oletukseksi +STR_TOOLTIP_DEFSIZE :{BLACK}Palauta ikkunan oletuskoko. Ctrl+napsautus tallentaa nykyisen koon oletukseksi. +STR_TOOLTIP_STICKY :{BLACK}Aseta ikkuna säilymään ”Sulje kaikki ikkunat” -napista huolimatta. Ctrl+napsautus tallentaa tilan oletukseksi. STR_TOOLTIP_RESIZE :{BLACK}Napsauta ja vedä muuttaaksesi tämän ikkunan kokoa STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Suurenna/pienennä ikkuna STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki – luettelon vieritys ylös/alas @@ -273,9 +272,9 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :½!"#¤%&/()=?` # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Pituus: {NUM} -STR_MEASURE_AREA :{BLACK}Pinta-ala: {NUM} x {NUM} +STR_MEASURE_AREA :{BLACK}Pinta-ala: {NUM}×{NUM} STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Pituus: {NUM}{}Korkeusero: {HEIGHT} -STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Pinta-ala: {NUM} x {NUM}{}Korkeusero: {HEIGHT} +STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Pinta-ala: {NUM}×{NUM}{}Korkeusero: {HEIGHT} # These are used in buttons @@ -314,6 +313,15 @@ STR_SORT_BY_CARGO_CAPACITY :Rahtikapasiteet STR_SORT_BY_RANGE :Toimintasäde STR_SORT_BY_POPULATION :Asukasluku STR_SORT_BY_RATING :Arvio +STR_SORT_BY_NUM_VEHICLES :Kulkuneuvojen määrä +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Kokonaistuotto viime vuonna +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Kokonaistuotto tänä vuonna +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Keskimääräinen tuotto viime vuonna +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Keskimääräinen tuotto tänä vuonna + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Ei mitään +STR_GROUP_BY_SHARED_ORDERS :Jaetut käskyt # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Tauko @@ -331,10 +339,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Näytä STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Näytä kuvaajat STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Näytä yhtiökilpataulukko STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Rahoita uuden teollisuuden rakentamista ja näytä teollisuushakemisto -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Näytä luettelo yhtiön junista. Ctrl+Klik avaa ryhmä/kulkuneuvolistan -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Näytä luettelo yhtiön ajoneuvoista. Ctrl+Klik avaa ryhmä/kulkuneuvoikkunan -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Näytä luettelo yhtiön laivoista. Ctrl+Klik avaa ryhmä/kulkuneuvoikkunan -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Näytä luettelo yhtiön ilma-aluksista. Ctrl+Klik avaa ryhmä/kulkuneuvoikkunan +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Näytä luettelo yhtiön junista. Ctrl+napsautus näyttää luettelon ilman ryhmäluetteloa. +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Näytä luettelo yhtiön ajoneuvoista. Ctrl+napsautus näyttää luettelon ilman ryhmäluetteloa. +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Näytä luettelo yhtiön laivoista. Ctrl+napsautus näyttää luettelon ilman ryhmäluetteloa. +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Näytä luettelo yhtiön ilma-aluksista. Ctrl+napsautus näyttää luettelon ilman ryhmäluetteloa. STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Lähennä näkymää STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Loitonna näkymää STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Rakenna rautateitä @@ -402,7 +410,7 @@ STR_FILE_MENU_EXIT :Sulje # map menu STR_MAP_MENU_MAP_OF_WORLD :Maailmankartta -STR_MAP_MENU_EXTRA_VIEW_PORT :Lisänäkymä +STR_MAP_MENU_EXTRA_VIEWPORT :Lisänäkymä STR_MAP_MENU_LINGRAPH_LEGEND :Rahtivirran selitys STR_MAP_MENU_SIGN_LIST :Kylttilista @@ -568,8 +576,8 @@ STR_MONTH_DEC :Joulukuu # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Selite STR_GRAPH_KEY_TOOLTIP :{BLACK}Näytä kuvaajan selite -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -678,18 +686,18 @@ STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLA STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Soittolista – ”{STRING}” STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Tyhjennä STR_PLAYLIST_CHANGE_SET :{BLACK}Vaihda kokoelma -STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Tyhjennä nykyinen soittolista (vain Oma1 tai Oma2) +STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Tyhjennä nykyinen soittolista (vain oma{NBSP}1 tai oma{NBSP}2) STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Valitse toinen asennettu kokoelma musiikkivalikoimaksesi -STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Valitse musiikkiraita lisätäksesi sen nykyiseen soittolistaan (vain Oma1 tai Oma2). -STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Poista musiikkiraita nykyseiltä soittolistalta napsauttamalla (ainoastaan Custom1 tai Custom2) +STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Valitse musiikkiraita lisätäksesi sen nykyiseen soittolistaan (vain oma{NBSP}1 tai oma{NBSP}2). +STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Poista musiikkiraita nykyiseltä soittolistalta napsauttamalla (vain oma{NBSP}1 tai oma{NBSP}2) # Highscore window STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Parhaat yhtiöt, jotka saavuttivat vuoden {NUM} STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Yhtiökilpailutaulukko vuonna {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. -STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Liikemies +STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Kaupantekijä STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Yrittäjä -STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Teollisuusmies +STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Teollisuudenharjoittaja STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Kapitalisti STR_HIGHSCORE_PERFORMANCE_TITLE_MAGNATE :Magnaatti STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Moguli @@ -716,9 +724,9 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Näytä STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Näytä kuljetusreitit kartalla STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Näytä kasvillisuus kartalla STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Näytä maanomistajat kartalla -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Napsauta teollisuustyyppiä näyttääksesi sen. Ctrl+Klik näyttää valitun tyypin. Ctrl+Klik uudestaan näyttää kaikki teollisuustyypit -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Napsauta yhtiötä näyttääksesi sen omaisuuden. Ctrl+Klik näyttää ainoastaan valitun yhtiön. Ctrl+Klik uudestaan näyttää kaikki yhtiöt -STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Napsauta rahtia näyttääksesi tai piilottaaksesi sen. Ctrl+Klik piilottaa kaikki paitsi valitun rahdin. Ctrl+Klik uudelleen palauttaa kaikki rahdit näkyviin +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Napsauta teollisuustyyppiä piilottaaksesi tai näyttääksesi sen. Ctrl+napsautus näyttää vain valitun tyypin. Ctrl+napsautus uudestaan näyttää kaikki teollisuustyypit. +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Napsauta yhtiötä piilottaaksesi tai näyttääksesi yhtiön maaomistuksen. Ctrl+napsautus näyttää ainoastaan valitun yhtiön. Ctrl+napsautus uudestaan näyttää kaikki yhtiöt. +STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Napsauta rahtityyppiä näyttääksesi tai piilottaaksesi sen. Ctrl+napsautus piilottaa kaikki paitsi valitun rahdin. Ctrl+napsautus uudelleen palauttaa kaikki rahdit näkyviin. STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Tiet STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Rautatiet @@ -739,6 +747,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Kumpuilevaa maata STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Ruohikkoa STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Paljasta maata +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Sademetsää STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Peltoja STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Puita STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Kiviä @@ -746,7 +755,7 @@ STR_SMALLMAP_LEGENDA_WATER :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_NO_OWNER :{TINY_FONT}{BLACK}Ei omistajaa STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Taajamia STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLACK}Teollisuutta -STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Autiomaata +STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Aavikko STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Lunta STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Näytä kuntien nimet kartalla @@ -770,6 +779,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Näytä STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Näytä viimeisin viesti tai uutisraportti STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * TAUKO * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * TAUKO (odotetaan yhteyskuvaajan päivittymistä) * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOMAATTITALLENNUS STR_STATUSBAR_SAVING_GAME :{RED}* * TALLENNETAAN PELIÄ * * @@ -884,7 +894,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN} ja {STRING} allekirjoittavat sopimuksen vuoden pituisesta kuljetusyksinoikeudesta! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Näkymä {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Näkymä {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Päänäkymästä tähän STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopioi päänäkymän sijainti tähän näkymään STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Vaihda päänäkymää @@ -935,10 +945,11 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksikon peso ( STR_GAME_OPTIONS_CURRENCY_NTD :Uusi Taiwanin dollari (TWD) STR_GAME_OPTIONS_CURRENCY_CNY :Kiinan renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hongkongin dollari (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Intian rupia (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Indonesian rupia (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Malesian ringgit (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kulkuneuvot -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Valitse kummalla puolella tietä ajetaan STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Vasemmanpuolinen liikenne STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Oikeanpuolinen liikenne @@ -989,10 +1000,19 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Valitse STR_GAME_OPTIONS_RESOLUTION :{BLACK}Näytön tarkkuus STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Valitse käytettävä näytön tarkkuus STR_GAME_OPTIONS_RESOLUTION_OTHER :muu +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}×{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Laitteistokiihdytys +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Valitse tämä, jos haluat, että OpenTTD yrittää käyttää laitteistokiihdytystä. Muutettu asetus tulee voimaan vasta pelin uudelleenkäynnistyksen jälkeen. +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Asetus tulee voimaan vasta pelin uudelleenkäynnistyksen jälkeen + +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}Pystytahdistus +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Valitse tämä ottaaksesi käyttöön näytön pystytahdistuksen. Muutettu asetus tulee voimaan vasta pelin uudelleenkäynnistyksen jälkeen. Edellyttää, että laitteistokiihdytys on käytössä. STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Käyttöliittymän koko STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Valitse käyttöliittymäelementtien koko +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(tunnista automaattisesti) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Tavallinen STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Kaksinkertainen STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Nelinkertainen @@ -1000,10 +1020,19 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Nelinkertainen STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Kirjasinkoko STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Valitse käyttöliittymän kirjasinkoko +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(tunnista automaattisesti) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normaali STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Kaksinkertainen koko STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Nelinkertainen koko +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafiikka + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Näytön virkistystaajuus +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Valitse käytettävä näytönvirkistystaajuus +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :muu +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM} Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Yli 60 Hz:n virkistystaajuudet saattavat vaikuttaa suorituskykyyn. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Perusgrafiikat STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Valitse käytettävät perusgrafiikat STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} puuttuva{P "" a}/korruptoitunut{P "" ta} tiedosto{P "" a} @@ -1024,7 +1053,7 @@ STR_ERROR_FULLSCREEN_FAILED :{WHITE}Täyskuv # Custom currency window STR_CURRENCY_WINDOW :{WHITE}Oma valuutta -STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Vaihtokurssi: {ORANGE}{CURRENCY_LONG} = £ {COMMA} +STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Vaihtokurssi: {ORANGE}{CURRENCY_LONG} = {COMMA} £ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Pienennä vaihtokurssia verrattuna puntaan (£) STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Suurenna vaihtokurssia verrattuna puntaan (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Aseta vaihtokurssi valuutallesi verrattuna puntaan (£) @@ -1098,6 +1127,8 @@ STR_TERRAIN_TYPE_FLAT :Tasainen STR_TERRAIN_TYPE_HILLY :Kukkulainen STR_TERRAIN_TYPE_MOUNTAINOUS :Vuoristoinen STR_TERRAIN_TYPE_ALPINIST :Vuorikiipeilijä +STR_TERRAIN_TYPE_CUSTOM :Oma korkeus +STR_TERRAIN_TYPE_CUSTOM_VALUE :Oma korkeus ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Salliva STR_CITY_APPROVAL_TOLERANT :Suvaitseva @@ -1179,9 +1210,11 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ottaa käyttö STR_CONFIG_SETTING_CITY_APPROVAL :Valtuuston asenne alueiden uudelleenjärjestelyyn: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Valitse, kuinka paljon yhtiöiden aiheuttama melu ja ympäristövahingot vaikuttavat niiden arvioihin sekä tuleviin rakennustoimiin alueella -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Kartan suurin sallittu korkeus: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Määritä suurin sallittu korkeus vuorille -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Tämä arvo ei kelpaa kartan suurimmaksi sallituksi korkeudeksi, sillä kartalla on ainakin yksi sitä korkeampi vuori +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Kartan korkeusraja: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Aseta kartan maaston maksimikorkeus. Kun valittuna on ”(auto)”, sopiva arvo valitaan maaston luomisen jälkeen +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(auto) +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Tämä arvo ei kelpaa kartan korkeusrajaksi, sillä kartalla on ainakin yksi sitä korkeampi vuori STR_CONFIG_SETTING_AUTOSLOPE :Salli maaston muokkaaminen rakennusten, raiteiden jne. juurella: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Sallii maaston muokkaamisen rakennusten ja ratojen alta tuhoamatta niitä STR_CONFIG_SETTING_CATCHMENT :Realistisemman kokoiset vaikutusalueet: {STRING} @@ -1259,7 +1292,7 @@ STR_CONFIG_SETTING_FREIGHT_TRAINS :Rahdin painoker STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Määritä rahdin kuljettamisen vaikutus junissa. Korkeammat arvot tekevät rahdin kuljettamisesta raskaampaa junille, erityisesti mäissä STR_CONFIG_SETTING_PLANE_SPEED :Lentokoneiden nopeuskerroin: {STRING} STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Määritä lentokoneiden suhteellinen nopeus verrattuna toisiin kulkuneuvotyyppeihin, jotta vähennetään ilma-alusksilla tehtyjen kuljetusten tuottoa -STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} +STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1/{COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Lento-onnettomuuksien määrä: {STRING} STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Määrittää lento-onnettomuuksien todennäköisyyden.{}¹ Isot lentokoneet voivat kuitenkin aina tuhoutua pienille lentokentille laskeutuessaan. STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ei yhtään¹ @@ -1294,7 +1327,7 @@ STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uudista kulkune STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Mikäli käytössä, lähellä käyttöikänsä loppua oleva kulkuneuvo korvataan automaattisesti STR_CONFIG_SETTING_AUTORENEW_MONTHS :Uudista automaattisesti {STRING} STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Suhteellinen ikä, jonka jälkeen kulkuneuvo voidaan uudistaa automaattisesti -STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 tta tta} ennen kulkuneuvon käyttöiän loppua +STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 si tta} ennen kulkuneuvon käyttöiän loppua STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} kuukau{P 0 si tta} jälkeen kulkuneuvon käyttöiän lopun STR_CONFIG_SETTING_AUTORENEW_MONEY :Vähimmäisrahamäärä kulkuneuvon automaattiseen uudistukseen: {STRING} STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Pienin rahamäärä, joka on oltava pankissa ennen kulkuneuvojen automaattista uudistamista @@ -1313,7 +1346,7 @@ STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Näytä NewGRF: STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisää kulkuneuvovalikoimaikkunaan rivin, joka kertoo mistä NewGRF:stä valittu kulkuneuvo on peräisin. STR_CONFIG_SETTING_LANDSCAPE :Maasto: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kuntien kasvuedellytyksiin. NewGRF:t ja peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kuntien kasvuedellytyksiin. NewGRF:t ja peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun. STR_CONFIG_SETTING_LAND_GENERATOR :Maastogeneraattori: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Alkuperäinen maastonluoja riippuu perusgrafiikkapaketista ja luo ennalta määritettyjä maastonmuotoja. TerraGenesis luo maastoa Perlin-kohinan perusteella ja mahdollistaa asetusten tarkemman määrittelyn STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Alkuperäinen @@ -1325,7 +1358,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Määritä, kui STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Suurin sallittu etäisyys kartan reunoilta öljyteollisuudelle: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Öljynjalostamojen ja öljylauttojen suurin etäisyys kartan reunasta. Saarikartoilla tämä takaa sen, että ne ovat lähellä rannikkoa. Yli 256 ruudun kartoilla tätä arvoa suurennetaan suhteessa kartan kokoon. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Lumirajan korkeus: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Määritä, millä korkeudella lumiraja on pohjoisessa maastotyypissä. Lumi vaikuttaa teollisuuslaitosten luontiin sekä kuntien kasvuedellytyksiin +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Määritä, millä korkeudella lumiraja on pohjoisessa maastotyypissä. Lumi vaikuttaa teollisuuslaitosten luontiin sekä kuntien kasvuedellytyksiin. Voidaan muuttaa vain Skenaariomuokkaimessa, muuten lasketaan ”lumen peiton” perusteella +STR_CONFIG_SETTING_SNOW_COVERAGE :Lumen peitto: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Säätele lumen määrän suuruusluokkaa pohjoisessa maastossa. Lumi vaikuttaa myös teollisuuden luontiin ja kuntien kasvuedellytyksiin. Käytetään vain karttaa luodessa. Juuri merenpinnan yläpuolella oleva maa on aina lumetonta +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}{NBSP}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Aavikon peitto: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Säätele aavikon määrän suuruusluokkaa subtrooppisessa maastossa. Aavikko vaikuttaa myös teollisuuden luontiin. Käytetään vain karttaa luodessa +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}{NBSP}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Maaston epätasaisuus: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Vain TerraGenesis) Määritä mäkien tiheys: Tasaisessa maastossa mäet ovat laajempia ja niitä on vähemmän. Epätasaisessa maastossa on enemmän mäkiä, mikä voi saada maaston näyttämään itseään toistavalta STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Erittäin tasainen @@ -1368,7 +1407,7 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Siirrä karttaa STR_CONFIG_SETTING_SCROLLMODE_RMB :Siirrä karttaa hiiren oikealla painikkeella STR_CONFIG_SETTING_SCROLLMODE_LMB :Siirrä karttaa hiiren vasemmalla painikkeella STR_CONFIG_SETTING_SMOOTH_SCROLLING :Näkymän tasainen vieritys: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Hallitse miten päänäkymä siirtyy valittuun paikkaan karttaa klikattaessa tai käytettäessä komentoa joka muuttaa näkymän sijaintia. Mikäli käytössä, päänäkymä siirtyy uuteen sijaintiin pehmeäesti, muutoin se hyppää suoraan valittuun sijaintiin +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Hallitse, kuinka päänäkymä siirtyy valittuun paikkaan napsautettaessa karttaa tai käytettäessä näkymän sijaintia muuttavaa komentoa. Mikäli käytössä, päänäkymä siirtyy uuteen sijaintiin pehmeästi, muutoin se hyppää suoraan valittuun sijaintiin. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Näytä mittauksen työkaluvihje, kun käytetään rakennustyökaluja: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Näytä etäisyydet ja korkeuserot vedettäessä rakennustoimintojen aikana STR_CONFIG_SETTING_LIVERIES :Näytä kulkuneuvotyypille ominaiset tunnukset: {STRING} @@ -1394,8 +1433,8 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Yksi napsautus STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Oikean painikkeen emulointi: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Valitse, miten hiiren oikean painikkeen painalluksia emuloidaan -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Klik +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Komento+napsautus +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+napsautus STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Pois STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Sulje ikkuna hiiren oikealla painikkeella napsauttamalla: {STRING} @@ -1439,6 +1478,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Pidä rakennust STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Pidä siltojen, tunneleiden, jne. rakennustyökalut käytössä käytön jälkeen STR_CONFIG_SETTING_EXPENSES_LAYOUT :Ryhmitä kulut yhtiön rahoitusikkunassa: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Määritä asettelu yhtiön rahoitusikkunalle +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Poista automaattisesti opastimia rautateitä rakennettaessa: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Poista automaattisesti opastimia, jos ne ovat rautatien rakentamisen tiellä. Huomaa, että tämä saattaa johtaa junien yhteentörmäyksiin. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Nopeutetun pelin enimmäisnopeus: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Yläraja pelin nopeudelle, kun pelin nopeutus on käytössä. 0 = ei rajoitusta (niin nopeasti kuin tietokoneesi sallii). Alle 100 %:n arvot hidastavat peliä. Yläraja riippuu tietokoneesi ominaisuuksista ja voi vaihdella pelistä riippuen. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM} % pelin normaalinopeudesta +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Ei rajoitusta (niin nopeasti kuin koneesi sallii) STR_CONFIG_SETTING_SOUND_TICKER :Uutiset: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Toista ääni tiivistetyille uutisviesteille @@ -1485,7 +1530,7 @@ STR_CONFIG_SETTING_AI_PROFILE_HARD :Vaikea STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Salli tekoälyt moninpelissä: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Sallii tietokonepelaajien osallistumisen moninpeleihin -STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodet ennen skriptin pysäyttämistä: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Operaatiokoodien määrä ennen skriptin pysäyttämistä: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Suurin sallittu määrä laskutoimituksia, jonka skripti voi suorittaa yhden vuoron aikana STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Skriptikohtainen muistinkäyttö enintään: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Kuinka paljon muistia yksittäinen skripti saa käyttää, ennen kuin se pakotetaan lopettamaan. Jos kartta on iso, tätä arvoa voi joutua suurentamaan. @@ -1552,8 +1597,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Pistelaskun pä STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Pelin päättymisvuosi pisteiden laskemista varten. Tämän vuoden lopussa talletetaan yhtiön pistemäärä ja näytetään ennätysluettelo; pelaajat voivat jatkaa pelaamista tämän jälkeenkin.{}Jos päättymisvuosi on ennen alkamisvuotta, ennätyksiä ei näytetä koskaan. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Ei koskaan -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Tasainen talous (enemmän pieniä muutoksia): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Mikäli käytössä, teollisuuden tuotanto muuttuu useammin ja vähemmän kerrallaan. Tällä asetuksella ei ole yleensä vaikutusta mikäli teollisuustyypit ovat NewGRF:n tarjoamia +STR_CONFIG_SETTING_ECONOMY_TYPE :Talouden laji: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Tasaisessa taloudessa tuotanto muuttuu useammin, ja pienemmissä askeleissa, kuin alkuperäisessä. Jäädytetty talous estää tuotantomuutokset ja laitosten sulkeutumiset. Tämä asetus ei välttämättä vaikuta, jos teollisuustyypit tulevat NewGRF:stä. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Alkuperäinen +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Tasainen +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Jäädytetty STR_CONFIG_SETTING_ALLOW_SHARES :Salli toisten yhtiöiden osakkeiden ostaminen: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Mikäli käytössä, toisten yhtiöiden osakkeiden ostaminen ja myyminen on mahdollista. Osakkeet ovat saatavilla vain yhtiöille, jotka ovat saavuttaneet tietyn iän STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Yhtiön vähimmäisikä osakekaupoille: {STRING} @@ -1604,10 +1652,11 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Neliöllinen (a STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineaarinen STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Puiden istutus pelissä: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Määrittää puiden sattumanvaraisen luomisen. Tämä voi vaikuttaa teollisuuslaitoksiin jotka ovat riippuvaisia puiden kasvamisesta, esimerkiksi sahat -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ei ollenkaan {RED}(rikkoo sahan) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Vain sademetsiin -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Kaikkialle +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Määrittää puiden sattumanvaraisen luomisen. Tämä voi vaikuttaa teollisuuslaitoksiin, jotka ovat riippuvaisia puiden kasvamisesta, esimerkiksi sahat. +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Puut kasvavat, mutta eivät leviä {RED}(rikkoo subtrooppisen sahan) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Puut kasvavat, mutta leviävät vain sademetsissä +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Puut kasvavat ja leviävät kaikkialla +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Puut eivät kasva eivätkä leviä {RED}(rikkoo subtrooppisen sahan) STR_CONFIG_SETTING_TOOLBAR_POS :Päätyökalupalkin sijainti: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Ruudun yläreunassa olevan työkalupalkin sijainti vaakasuunnassa @@ -1625,12 +1674,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :Suurin sallittu STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Suurin mahdollinen lähennystaso näkymille. Huomioi, että suuret lähennystasot vaativat enemmän muistia STR_CONFIG_SETTING_ZOOM_MAX :Suurin sallittu pienennystaso: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Pienin mahdollinen lähennystaso näkymille. Pienet lähennystasot voivat aiheuttaa suorituskykyongelmia +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Korkein käytettävä sprite-resoluutio: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Rajoita suurinta spriteille käytettävää resoluutiota. Resoluution rajoittaminen estää korkean tarkkuuden grafiikoiden käyttämisen vaikka niitä olisi saatavilla. Tämä voi auttaa pitämään pelin ulkoasun yhtenäisenä käytettäessä sekaisin GRF-tiedostoja, joista osalla on ja osalla ei ole korkean tarkkuuden grafiikoita. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Tavallinen STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Kuntien kasvunopeus: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Kunnan kasvunopeus STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ei kasvua @@ -1640,7 +1694,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Nopea STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Erittäin nopea STR_CONFIG_SETTING_LARGER_TOWNS :Kaupunkien osuus: {STRING} STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Kaupunkien määrä: kaupungit ovat isompia jo alussa ja kasvavat nopeammin kuin muut kunnat -STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 / {COMMA} +STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1/{COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ei yhtään STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Kasvukerroin alussa: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Kaupunkien keskimääräinen koko suhteessa muihin kuntiin pelin alussa @@ -1674,6 +1728,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kun käyttölii STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Brittiläinen (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrinen (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Pelin yksiköt (ruutuja vuorokaudessa) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Kulkuneuvon tehon yksikkö: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Kun käyttöliittymässä näytetään kulkuneuvon teho, näytä se valittua yksikköä käyttäen @@ -1763,6 +1818,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ohit STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Muisti lopussa STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES} sprite-välimuistin varaaminen epäonnistui. Sprite-välimuistin kooksi valittiin {BYTES}. Tämä heikentää OpenTTD:n suorituskykyä. Vähentääksesi muistivaatimuksia voit kokeilla poistaa käytöstä 32bpp-grafiikat ja/tai lähennystasoja +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}Virhe näyttöasetuksissa… +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}… yhteensopivaa grafiikkasuoritinta ei löytynyt. Laitteistokiihdytystä ei käytetä. + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1781,7 +1840,7 @@ STR_INTRO_ONLINE_CONTENT :{BLACK}Tarkista STR_INTRO_SCRIPT_SETTINGS :{BLACK}Tekoälyn/peliskriptin asetukset STR_INTRO_QUIT :{BLACK}Sulje -STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Aloita uusi peli. Ctrl+Klik ohittaa kartan asetukset +STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Aloita uusi peli. Ctrl+napsautus ohittaa kartan asetusten valinnan. STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Lataa tallennettu peli STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Aloita uusi peli, käyttäen korkeuskarttaa maastona STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Aloita uusi peli käyttäen omaa skenaariota @@ -1806,18 +1865,10 @@ STR_INTRO_TRANSLATION :{BLACK}Tästä # Quit window STR_QUIT_CAPTION :{WHITE}Sulje -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Suljetaanko peli ja palataan {STRING}-järjestelmään? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Haluatko varmasti poistua OpenTTD:stä? STR_QUIT_YES :{BLACK}Kyllä STR_QUIT_NO :{BLACK}Ei -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Pelin lopetus STR_ABANDON_GAME_QUERY :{YELLOW}Lopetetaanko peli? @@ -1826,7 +1877,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Lopetet # Cheat window STR_CHEATS :{WHITE}Huijaukset STR_CHEATS_TOOLTIP :{BLACK}Valintaruudut osoittavat, oletko käyttänyt huijausta aiemmin -STR_CHEATS_WARNING :{BLACK}Varoitus! Olet juuri pettämässä kanssakilpailijoitasi. Pidä mielessä, että tällainen häväistys pidetään mielessä ikuisuuden ajan +STR_CHEATS_NOTE :{BLACK}Huom.: näiden asetusten käyttö tallentuu pelitallenteeseen STR_CHEAT_MONEY :{LTBLUE}Anna lisää rahaa: {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Hallinnassa oleva yhtiö: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Taikapuskutraktori (poista teollisuutta, liikuttamattomia kohteita): {ORANGE}{STRING} @@ -1850,8 +1901,8 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näytä STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Näytä tieajoneuvojen väriteemat STR_LIVERY_SHIP_TOOLTIP :{BLACK}Näytä laivojen väriteemat STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Näytä ilma-alusten väriteemat -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Valitse valitulle teemalle ensisijainen väri. Ctrl+Klik asettaa tämän värin jokaiselle teemalle -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Valitse valitulle teemalle toissijainen väri. Ctrl+Klik asettaa tämän värin jokaiselle teemalle +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Valitse valitun kaavan ensisijainen väri. Ctrl+napsautus asettaa tämän värin kaikille kaavoille. +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Valitse valitun kaavan toissijainen väri. Ctrl+napsautus asettaa tämän värin kaikille kaavoille. STR_LIVERY_PANEL_TOOLTIP :{BLACK}Valitse muutettava väriteema, tai valitse useita Ctrl pohjassa. Paina valintalaatikkoa valitaksesi teeman STR_LIVERY_DEFAULT :Normaalit tunnusvärit @@ -1938,10 +1989,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaihda s # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Moninpeli -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Mainostettu -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Valitse mainostettu (internet) tai ei-mainostettu (paikallisverkko, LAN) peli -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ei -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Kyllä STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Pelaajan nimi STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Pelaajat tunnistetaan ja erotetaan toisistaan nimien avulla @@ -1982,8 +2029,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Liity pe STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Päivitä STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Päivitä palvelintiedot -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Etsi palvelin -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Etsi palvelin verkosta +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Etsi internetistä +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Etsi julkisia palvelimia internetistä +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Etsi lähiverkosta +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Etsi palvelimia lähiverkosta STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Lisää palvelin STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Lisää palvelin listaan, joka käydään läpi aina uusia pelejä haettaessa STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Käynnistä palvelin @@ -2000,6 +2049,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nimi nä STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Aseta salasana STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Jos peliin ei halua ulkopuolisia, voi sen suojata salasanalla +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Mainostettu +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valitse mainostettu (internet) tai ei-mainostettu (paikallisverkko, LAN) peli STR_NETWORK_START_SERVER_UNADVERTISED :Ei STR_NETWORK_START_SERVER_ADVERTISED :Kyllä STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} asiakas{P "" ta} @@ -2113,7 +2164,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Uusi yhtiö # Network client list STR_NETWORK_CLIENTLIST_KICK :Potkaise STR_NETWORK_CLIENTLIST_BAN :Kiellä -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Anna rahaa STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Puhu kaikille STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Puhu yhtiölle STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Yksityinen viesti @@ -2122,8 +2172,6 @@ STR_NETWORK_SERVER :Palvelin STR_NETWORK_CLIENT :Pelaaja STR_NETWORK_SPECTATORS :Katsojat -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Syötä rahamäärä, jonka haluat antaa - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Älä tallenna syötettyä salasanaa STR_COMPANY_PASSWORD_OK :{BLACK}Anna yhtiölle uusi salasana @@ -2161,13 +2209,14 @@ STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Verkkope STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Palvelimen pelitallennetta ei voi ladata STR_NETWORK_ERROR_SERVER_START :{WHITE}Palvelinta ei voitu käynnistää STR_NETWORK_ERROR_CLIENT_START :{WHITE}Yhdistäminen ei onnistunut -STR_NETWORK_ERROR_TIMEOUT :{WHITE}Yhteys #{NUM} aikakatkaistiin +STR_NETWORK_ERROR_TIMEOUT :{WHITE}Yhteys nro {NUM} aikakatkaistiin STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Protokollavirhe tapahtui ja yhteys suljettiin STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Tämän asiakkaan versio ei vastaa palvelimen versiota STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Väärä salasana STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Palvelin on täynnä STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Sinut on kielletty palvelimelta STR_NETWORK_ERROR_KICKED :{WHITE}Sinut potkittiin pihalle palvelimelta +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Syy: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Huijaaminen ei ole sallittua tällä palvelimella STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Lähetit liian monta komentoa palvelimelle STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Käytit liian paljon aikaa salasanan syöttämiseen @@ -2209,24 +2258,26 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Peli yhä pysä STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Peli yhä pysäytetty ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Peli yhä pysäytetty ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Peli yhä pysäytetty ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Peli yhä pysäytetty ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Peliä jatketaan ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :pelaajien määrä STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :yhdistäviä pelaajia STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuaalinen STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :peliskripti +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :odotetaan yhteyskuvaajan päivittymistä ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :poistutaan STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} on liittynyt peliin -STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} liittyi peliin (Asiakas #{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} on liittynyt yhtiöön #{2:NUM} +STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} liittyi peliin (asiakas nro {2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} on liittynyt yhtiöön nro {2:NUM} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} on liittynyt katselijoihin -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} on aloittanut uuden yhtiön (#{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} on aloittanut uuden yhtiön (nro {2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} on poistunut pelistä ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} on muuttanut nimekseen {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} antoi yhtiöllesi {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Annoit yhtiölle {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} antoi {2:CURRENCY_LONG} yhtiölle {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Palvelin sulki istunnon STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Palvelin käynnistyy uudelleen...{}Odota, ole hyvä... +STR_NETWORK_MESSAGE_KICKED :{STRING} potkaistiin ulos. Syy: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Sisällön lataus @@ -2299,19 +2350,23 @@ STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Ei voitu STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Puuttuvat grafiikat STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD vaatii toimiakseen grafiikat, mutta niitä ei löydetty. Sallitaanko grafiikoiden lataus ja asennus? STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Kyllä, lataa grafiiikat -STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Ei, sulje OpenTTD +STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Ei, lopeta OpenTTD + +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Lataus epäonnistui +STR_MISSING_GRAPHICS_ERROR :{BLACK}Grafiikoiden lataus epäonnistui.{}Lataa grafiikat manuaalisesti. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Lopeta OpenTTD # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Läpinäkyvyysasetukset -STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Muuta kylttien läpinäkyvyyttä. Ctrl+Klik lukitaksesi -STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Muuta puiden läpinäkyvyyttä. Ctrl+Klik lukitaksesi -STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Muuta talojen läpinäkyvyyttä. Ctrl+Klik lukitaksesi -STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Muuta teollisuuden läpinäkyvyyttä. Ctrl+Klik lukitaksesi -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Muuta asemien, varikoiden, reittipisteiden ja sähkölinjojen läpinäkyvyyttä. Ctrl+Klik lukitaksesi -STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Muuta siltojen läpinäkyvyyttä. Ctrl+Klik lukitaksesi -STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Muuta rakenteiden, kuten majakoiden ja antennien, läpinäkyvyyttä. Ctrl+Klik lukitaksesi -STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Muuta sähköradan johtimien läpinäkyvyyttä. Ctrl+Klik lukitaksesi -STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Muuta lastausilmaisimien läpinäkyvyyttä. Ctrl+Klik lukitaksesi +STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Muuta kylttien läpinäkyvyyttä. Ctrl+napsautus lukitsee. +STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Muuta puiden läpinäkyvyyttä. Ctrl+napsautus lukitsee. +STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Muuta talojen läpinäkyvyyttä. Ctrl+napsautus lukitsee. +STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Muuta tuotantolaitosten läpinäkyvyyttä. Ctrl+napsautus lukitsee. +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Muuta asemien, varikoiden, reittipisteiden ja sähkölinjojen läpinäkyvyyttä. Ctrl+napsautus lukitsee. +STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Muuta siltojen läpinäkyvyyttä. Ctrl+napsautus lukitsee. +STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Muuta majakoiden ja lähetysmastojen tapaisten rakennelmien läpinäkyvyyttä. Ctrl+napsautus lukitsee. +STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Muuta sähköratarakenteiden läpinäkyvyyttä. Ctrl+napsautus lukitsee. +STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Muuta lastausilmaisimien läpinäkyvyyttä. Ctrl+napsautus lukitsee. STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Tee kohteista läpinäkyvyyden sijaan näkymättömiä # Linkgraph legend window @@ -2342,6 +2397,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Rakenna STR_JOIN_WAYPOINT_CAPTION :{WHITE}Liitä reittipiste STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Rakenna erillinen reittipiste +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Ei käytössä, koska tälle infrastruktuurille ei ole kulkuneuvoja tällä hetkellä + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Rautatien rakentaminen STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Sähköradan rakentaminen @@ -2403,7 +2461,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Poistumi STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Yhdistelmäopastin (valo-opastin){}Yhdistelmäopastin toimii yhtä aikaa tulo- ja poistumisopastimena. Tämän avulla on mahdollista luoda suuria "opastinpuita" STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Reittiopastin (valo-opastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Tavalliset reittiopastimet voi ohittaa takakautta STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Yksisuuntainen reittiopastin (valo-opastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Yksisuuntaisia opastimia ei voi ohittaa takakautta -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Opastinten muuntaminen{}Kun tämä on valittu, olemassaolevan opastimen napsauttaminen muuntaa siitä valituntyyppisen ja -muotoisen. Ctrl+Klik vaihtaa nykyistä opastimen muotoa. Shift+Klik näyttää muuntamisen kustannusarvion +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Opastinten muuntaminen{}Kun tämä on valittu, olemassaolevan opastimen napsauttaminen muuntaa sen valituntyyppiseksi ja -muotoiseksi. Ctrl+napsautus vaihtaa nykyistä opastimen muotoa. Vaihto+napsautus näyttää muuntamisen kustannusarvion. STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Opastimien väli vetämällä lisättäessä STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Pienennä opastimien väliä vetämällä lisättäessä STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenna opastimien väliä vetämällä lisättäessä @@ -2524,18 +2582,24 @@ STR_OBJECT_BUILD_CAPTION :{WHITE}Objektin STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Valitse rakennettavan objektin luokka STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objektin esikatselu -STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM} × {NUM} ruutua +STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM}×{NUM} ruutua STR_OBJECT_CLASS_LTHS :Majakat STR_OBJECT_CLASS_TRNS :Lähettimet -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Puita STR_PLANT_TREE_TOOLTIP :{BLACK}Valitse istutettava puutyyppi. Jos ruudussa on jo puu, tämä lisää uusia puita riippumatta valitun puun tyypistä STR_TREES_RANDOM_TYPE :{BLACK}Sattumanvaraisia puita STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Aseta sattumanvaraisia puita. Shift vaihtaa istutustilan ja kustannusarvion välillä STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Satunnaisia puita. STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Istuta puita satunnaisesti maastoon +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Tavallinen +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Istuta yksittäisiä puita vetämällä. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Metsikkö +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Istuta pieniä metsiä vetämällä. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Metsä +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Istuta isoja metsiä vetämällä. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Maanrakennus @@ -2554,7 +2618,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Haluatko # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Luo kuntia STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Uusi kunta -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Perusta uusi kunta. Shift+Klik näyttää vain kustannusarvion +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Perusta uusi kunta. Vaihto+napsautus näyttää vain kustannusarvion. STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Satunnainen kunta STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Perusta kunta satunnaiseen paikkaan STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Monta satunnaista kuntaa @@ -2586,12 +2650,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Sattuman # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Rakenna uutta teollisuutta STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Valitse tehdas listasta -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Monta satunnaista teollisuusaluetta +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Luo satunnaisia tuotantolaitoksia STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Sijoita teollisuuslaitokset satunnaisesti +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Luo satunnaista teollisuutta +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Oletko varma, että haluat luoda monta satunnaista tuotantolaitosta? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Kustannus: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Koekaivaus STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Rakenna STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Perusta +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Poista kaikki tuotantolaitokset +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Poista kaikki kartalla olevat tuotantolaitokset +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Poista kaikki tuotantolaitokset +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Oletko varma, että haluat poistaa kaikki tuotantolaitokset? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Teollisuusketju teollisuudelle {STRING} @@ -2612,6 +2682,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Valitse # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Maa-aluetiedot +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Keskitä päänäkymä ruudun sijaintiin. Ctrl+napsautus avaa uuden näkymäikkunan ruudun sijaintiin. STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Raivaamisen hinta: {LTBLUE}- STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Raivaamisen hinta: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Tulo kun tyhjennetty: {LTBLUE}{CURRENCY_LONG} @@ -2622,7 +2693,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Raitioti STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Rautatien omistaja: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Kunta: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Ei mitään -STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaatit: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordinaatit: {LTBLUE}{NUM}×{NUM}×{NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Rakennettu: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Aseman luokka: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Aseman tyyppi: {LTBLUE}{STRING} @@ -2821,6 +2892,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Suodatinteksti: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Tiedosto on jo olemassa STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Haluatko varmasti korvata olemassaolevan tiedoston? +STR_SAVELOAD_DIRECTORY :{STRING} (hakemisto) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (ylähakemisto) STR_SAVELOAD_OSKTITLE :{BLACK}Syötä nimi tallennustiedostolle @@ -2832,14 +2905,18 @@ STR_MAPGEN_BY :{BLACK}× STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Kuntien määrä: STR_MAPGEN_DATE :{BLACK}Päivämäärä: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Teollisuuden määrä: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Suurin sallittu kartan korkeus: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Kasvata suurinta sallittua vuorten korkeutta yhdellä -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Vähennä suurinta sallittua vuorten korkeutta yhdellä -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Lumirajan korkeus: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Siirrä lumirajaa yksi taso ylöspäin -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Siirrä lumirajaa yksi taso alaspäin +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Korkein huippu: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Korota kartan korkeimman huipun maksimikorkeutta yhdellä +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Madalla kartan korkeimman huipun maksimikorkeutta yhdellä +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Lumen peitto: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Kasvata lumen peittoa 10 prosentilla +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Vähennä lumen peittoa 10 prosentilla +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}{NBSP}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Aavikon peitto: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Kasvata aavikon peittoa 10 prosentilla +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Vähennä aavikon peittoa 10 prosentilla +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}{NBSP}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Maastogeneraattori: -STR_MAPGEN_TREE_PLACER :{BLACK}Puiden algoritmi: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Maaston tyyppi: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Merenpinta: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Joet: @@ -2862,10 +2939,12 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuaali STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Korkeuskartan kierto: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Korkeuskartan nimi: STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Koko: -STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} +STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM}×{NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Muuta suurinta sallittua kartan korkeutta -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Vaihda lumirajan korkeutta +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Huipun tavoitekorkeus +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Korkein huippu +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Lumen peitto (%) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Aavikon peitto (%) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Vaihda aloitusvuosi # SE Map generation @@ -2885,7 +2964,7 @@ STR_GENERATION_ABORT :{BLACK}Peruuta STR_GENERATION_ABORT_CAPTION :{WHITE}Keskeytä maailman luominen STR_GENERATION_ABORT_MESSAGE :{YELLOW}Haluatko varmasti keskeyttää maan luomisen? STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% valmiina -STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} +STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM}/{NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Maailman luominen STR_GENERATION_RIVER_GENERATION :{BLACK}Jokien luominen STR_GENERATION_TREE_GENERATION :{BLACK}Puiden luominen @@ -2989,7 +3068,7 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Mene val STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Edelinen sprite STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Jatka edelliseen tavalliseen spriteen ja hyppää yli kaikki pseudo-/uudelleenväritetyt/fontti- spritet ja mene loppuun kun päästään ensimmäiseen STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Valitun spriten näyttö. Sijaintia ei huomioida spriteä piirrettäessä -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liikuta spriteä ympäriinsä, muuttaen X- ja Y-sijainteja. Ctrl+Klik siirtää spriteä kahdeksan yksikköä kerralla +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liikuta spriteä ympäriinsä, muuttaen X- ja Y-sijainteja. Ctrl+napsautus siirtää spriteä kahdeksan yksikköä kerralla. STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Nollaa suhteelliset STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Nollaa suhteelliset erotukset STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-erotus: {NUM}, Y-erotus: {NUM} (absoluuttinen) @@ -3072,7 +3151,7 @@ STR_INVALID_VEHICLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Peli tallennettiin versiossa, joka ei tue raitiovaunuja. Kaikki raitiovaunut on poistettu @@ -4272,6 +4361,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Vain til STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Suuri kuvankaappaus STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Kuvankaappauksen tarkkuus tulee olemaan {COMMA} x {COMMA} pikseliä. Kuvankaappauksen ottaminen voi kestää jonkin aikaa. Haluatko jatkaa? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Korkeuskartta tallennettu nimellä ”{STRING}”. Korkein huippu on {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Kuvakaappaus tallennettu nimellä ”{STRING}”. STR_ERROR_SCREENSHOT_FAILED :{WHITE}Kuvakaappaus epäonnistui! @@ -4325,6 +4415,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... ei l STR_ERROR_CURRENCY_REQUIRED :{WHITE}... tarvitaan {CURRENCY_LONG}. STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Lainaa ei voi lyhentää... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Pankista lainattua rahaa ei voi antaa pois... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Tälle yhtiölle ei voi antaa rahaa… STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Yhtiötä ei voi ostaa... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Yhtiön päärakennusta ei voi rakentaa... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Tästä yhtiöstä ei voi ostaa 25{NBSP}%:n osuutta... @@ -4376,7 +4467,7 @@ STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Ei voi r STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Satamaa ei voi rakentaa tähän... STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Lentokenttää ei voi rakentaa... -STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Liitä yhteen useampi asema/lastausalue. +STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Vieressä on useampi kuin yksi olemassaoleva asema tai kuormausalue. STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... asema liian levittäytynyt STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Liian monta asemaa ja lastausaluetta. STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Rautatieasema on jakautunut liian moneen osaan @@ -4409,7 +4500,7 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Satama p STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Lentokenttä pitää tuhota ensin. # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Liittää useamman kuin yhden reittipisteen +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Vieressä on useampi kuin yksi olemassaoleva reittipiste. STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Liian lähellä toista reittipistettä STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Junien reittipistettä ei voi rakentaa tähän... @@ -4451,6 +4542,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Väärä varikk STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} on liian pitkä korvaamisen jälkeen STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Ei käytössä olevia itsekorvaus- tai itseuudistussääntöjä STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(rahoitusraja) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Uusi kulkuneuvo ei voi kuljettaa {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Uutta kulkuneuvoa ei voida uudelleensovittaa käskyssä {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Mahdoton ratayhdistelmä. @@ -4548,7 +4641,7 @@ STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Laiva on STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}Ilma-alus on tiellä STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}Junaa ei voi sovittaa... -STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}Ajoneuvoa ei voida korjata. +STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}Ajoneuvoa ei voi sovittaa… STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Laivaa ei voi sovittaa... STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}Ilma-alusta ei voi sovittaa... @@ -4706,7 +4799,7 @@ STR_INDUSTRY_NAME_FOOD_PROCESSING_PLANT :Ruoanjalostamo STR_INDUSTRY_NAME_PAPER_MILL :Paperitehdas STR_INDUSTRY_NAME_GOLD_MINE :Kultakaivos STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC :Pankki -STR_INDUSTRY_NAME_DIAMOND_MINE :Jalokivikaivos +STR_INDUSTRY_NAME_DIAMOND_MINE :Timanttikaivos STR_INDUSTRY_NAME_IRON_ORE_MINE :Rautakaivos STR_INDUSTRY_NAME_FRUIT_PLANTATION :Hedelmäviljelmä STR_INDUSTRY_NAME_RUBBER_PLANTATION :Kumiviljelmä @@ -4714,7 +4807,7 @@ STR_INDUSTRY_NAME_WATER_SUPPLY :Lähde STR_INDUSTRY_NAME_WATER_TOWER :Vesitorni STR_INDUSTRY_NAME_FACTORY_2 :Tehdas STR_INDUSTRY_NAME_FARM_2 :Maatila -STR_INDUSTRY_NAME_LUMBER_MILL :Hakkuualue +STR_INDUSTRY_NAME_LUMBER_MILL :Saha STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :Hattarametsä STR_INDUSTRY_NAME_CANDY_FACTORY :Karkkitehdas STR_INDUSTRY_NAME_BATTERY_FARM :Paristomaatila @@ -4764,7 +4857,7 @@ STR_SV_STNAME_UPPER :Ylä-{STRING} STR_SV_STNAME_LOWER :Ala-{STRING} STR_SV_STNAME_HELIPORT :{STRING}, helikopterikenttä STR_SV_STNAME_FOREST :{STRING}, metsä -STR_SV_STNAME_FALLBACK :{STRING}, asema #{NUM} +STR_SV_STNAME_FALLBACK :{STRING}, asema {NUM} ############ end of savegame specific region! ##id 0x8000 @@ -5033,20 +5126,21 @@ STR_FORMAT_DATE_SHORT :{STRING} {NUM} STR_FORMAT_DATE_LONG :{STRING} {STRING} {NUM} STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING} -STR_FORMAT_BUOY_NAME :{TOWN} Poiju -STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Poiju #{COMMA} -STR_FORMAT_COMPANY_NUM :(Yhtiö {COMMA}) +STR_FORMAT_BUOY_NAME :{TOWN}, poiju +STR_FORMAT_BUOY_NAME_SERIAL :{TOWN}, poiju {COMMA} +STR_FORMAT_COMPANY_NUM :(yhtiö {COMMA}) STR_FORMAT_GROUP_NAME :Ryhmä {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} {COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} ({STRING}) -STR_FORMAT_WAYPOINT_NAME :Reittipiste: {TOWN} -STR_FORMAT_WAYPOINT_NAME_SERIAL :Reittipiste: {TOWN} #{COMMA} +STR_FORMAT_WAYPOINT_NAME :{TOWN}, reittipiste +STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN}, reittipiste {COMMA} -STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Veturitalli -STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Veturitalli #{COMMA} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Ajoneuvovarikko -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Ajoneuvovarikko #{COMMA} -STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Telakka -STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Telakka #{COMMA} +STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN}, veturitalli +STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN}, veturitalli {COMMA} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN}, ajoneuvovarikko +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN}, ajoneuvovarikko {COMMA} +STR_FORMAT_DEPOT_NAME_SHIP :{TOWN}, telakka +STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN}, telakka {COMMA} STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Lentokonehalli STR_UNKNOWN_STATION :tuntematon asema diff --git a/src/lang/french.txt b/src/lang/french.txt index 5ba67d4afb..0ce8e81a12 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Blé STR_CARGO_PLURAL_RUBBER :Caoutchouc STR_CARGO_PLURAL_SUGAR :Sucre STR_CARGO_PLURAL_TOYS :Jouets -STR_CARGO_PLURAL_CANDY :Bonbons +STR_CARGO_PLURAL_SWEETS :Bonbons STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Barbe à papa +STR_CARGO_PLURAL_CANDYFLOSS :Barbe à papa STR_CARGO_PLURAL_BUBBLES :Bulles STR_CARGO_PLURAL_TOFFEE :Caramel STR_CARGO_PLURAL_BATTERIES :Batteries @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Blé STR_CARGO_SINGULAR_RUBBER :Caoutchouc STR_CARGO_SINGULAR_SUGAR :Sucre STR_CARGO_SINGULAR_TOY :Jouet -STR_CARGO_SINGULAR_CANDY :Bonbon +STR_CARGO_SINGULAR_SWEETS :Bonbon STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Barbe à papa +STR_CARGO_SINGULAR_CANDYFLOSS :Barbe à papa STR_CARGO_SINGULAR_BUBBLE :Bulle STR_CARGO_SINGULAR_TOFFEE :Caramel STR_CARGO_SINGULAR_BATTERY :Batterie @@ -161,7 +161,7 @@ STR_ABBREV_BATTERIES :{TINY_FONT}BA STR_ABBREV_PLASTIC :{TINY_FONT}PL STR_ABBREV_FIZZY_DRINKS :{TINY_FONT}GZ STR_ABBREV_NONE :{TINY_FONT}NO -STR_ABBREV_ALL :{TINY_FONT}ALL +STR_ABBREV_ALL :{TINY_FONT}TOUT # 'Mode' of transport for cargoes STR_PASSENGERS :{COMMA}{NBSP}passager{P "" s} @@ -195,6 +195,7 @@ STR_COLOUR_DEFAULT :Défaut STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}cases/jour STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp STR_UNITS_POWER_METRIC :{COMMA}{NBSP}ch @@ -234,8 +235,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Choisir STR_TOOLTIP_SORT_CRITERIA :{BLACK}Choisir le critère de tri STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Choisir le critère de filtrage STR_BUTTON_SORT_BY :{BLACK}Trier par -STR_BUTTON_LOCATION :{BLACK}Emplacement -STR_BUTTON_RENAME :{BLACK}Renommer STR_BUTTON_CATCHMENT :{BLACK}Couverture STR_TOOLTIP_CATCHMENT :{BLACK}Basculer l'affichage de la zone couverte @@ -315,6 +314,15 @@ STR_SORT_BY_CARGO_CAPACITY :Capacité STR_SORT_BY_RANGE :Rayon d'action STR_SORT_BY_POPULATION :Population STR_SORT_BY_RATING :Qualité de service +STR_SORT_BY_NUM_VEHICLES :Nombre de véhicules +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Profit total l'année précédente +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Profit total cette année +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Profit moyen l'année précédente +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Profit moyen cette année + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Aucun +STR_GROUP_BY_SHARED_ORDERS :Ordres partagés # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Mettre le jeu en pause @@ -403,7 +411,7 @@ STR_FILE_MENU_EXIT :Quitter le jeu # map menu STR_MAP_MENU_MAP_OF_WORLD :Carte du monde -STR_MAP_MENU_EXTRA_VIEW_PORT :Vue supplémentaire +STR_MAP_MENU_EXTRA_VIEWPORT :Vue supplémentaire STR_MAP_MENU_LINGRAPH_LEGEND :Légende du flux de marchandises STR_MAP_MENU_SIGN_LIST :Liste des panneaux @@ -569,8 +577,8 @@ STR_MONTH_DEC :Décembre # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Légende STR_GRAPH_KEY_TOOLTIP :{BLACK}Afficher la légende -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -605,7 +613,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Coordinateur de STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Superviseur de route STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Directeur STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Directeur Général -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Vice-président +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Secrétaire général(e) STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Président STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Tycoon @@ -688,7 +696,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Cliquer STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Meilleures compagnies qui ont atteint {NUM} STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tableau du Championnat des compagnies en {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. -STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Homme d'affaires +STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Personne d'affaires STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industriel STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Capitaliste @@ -740,6 +748,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Terre en friche STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Herbe STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Terre nue +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Région tropicale STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Champs STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Arbres STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Rochers @@ -771,6 +780,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Afficher STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Afficher le dernier message ou bulletin STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * SUSPENDU * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * SUSPENDU (en attente du recalcul des liens du graphique) * * STR_STATUSBAR_AUTOSAVE :{RED}ENREGISTREMENT AUTOMATIQUE STR_STATUSBAR_SAVING_GAME :{RED}* * SAUVEGARDE EN COURS * * @@ -885,14 +895,14 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Les autorités locales de {TOWN} signent avec {STRING} un contrat d'exclusivité des transports valable un an{NBSP}! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vue {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vue {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Modifier cette vue STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copier l'emplacement de la vue principale vers cette vue STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Modifier la vue principale STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copier l'emplacement de cette vue vers la vue principale # Game options window -STR_GAME_OPTIONS_CAPTION :{WHITE}Options +STR_GAME_OPTIONS_CAPTION :{WHITE}Options du jeu STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Devise STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Sélectionner l'unité monétaire @@ -936,10 +946,11 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Peso méxicain STR_GAME_OPTIONS_CURRENCY_NTD :Nouveau Dollar de Taïwan (TWD) STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi Chinois (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Dollar de Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Roupie indienne (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Roupie indonésienne (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringgit (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Véhicules routiers -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Choisir le côté de la route pour la conduite STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Conduite à gauche STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Conduite à droite @@ -990,10 +1001,19 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Cocher c STR_GAME_OPTIONS_RESOLUTION :{BLACK}Résolution STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Sélectionner la résolution d'écran à utiliser STR_GAME_OPTIONS_RESOLUTION_OTHER :autre +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK} Accélération matérielle +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Cochez cette case permet à OpenTTD d'utiliser l'accélération matérielle, si possible. Un paramètre modifié ne sera pris en compte qu'au redémarrage du jeu +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Les paramètres ne prendront effet qu'après le redémarrage du jeu + +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Cochez cette case pour activer la synchronisation verticale de l'écran. La modification de ce paramètres ne sera effective qu'après le redémarrage du jeu. Fonctionne uniquement si l’accélération matérielle est active STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Taille d'interface STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Choisir la taille d'élément d'interface à utiliser +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(auto-détection) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Taille double STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Taille quadruple @@ -1001,10 +1021,19 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Taille quadrupl STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Taille de police STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Choisir la taille de police d'interface à utiliser +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(auto-détection) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Taille double STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Taille quadruple +STR_GAME_OPTIONS_GRAPHICS :{BLACK} Graphiques + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK} Taux de rafraîchissement de l'affichage +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK} Sélectionnez la fréquence de rafraîchissement à utiliser +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :autres +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE} Les taux de rafraîchissement supérieurs à 60Hz peuvent avoir un impact sur les performances. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Graphiques de base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Sélectionner les graphiques de base à utiliser STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fichier{P "" s} manquant{P "" s}/corrompu{P "" s} @@ -1099,6 +1128,8 @@ STR_TERRAIN_TYPE_FLAT :Plat STR_TERRAIN_TYPE_HILLY :Collinaire STR_TERRAIN_TYPE_MOUNTAINOUS :Montagneux STR_TERRAIN_TYPE_ALPINIST :Alpin +STR_TERRAIN_TYPE_CUSTOM :Hauteur personnalisée +STR_TERRAIN_TYPE_CUSTOM_VALUE :Hauteur personnalisée ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Laxiste STR_CITY_APPROVAL_TOLERANT :Tolérante @@ -1180,9 +1211,11 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Activer/Désact STR_CONFIG_SETTING_CITY_APPROVAL :Attitude du conseil municipal envers la restructuration de la zone{NBSP}: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Définit comment le bruit et les dommages environnementaux des compagnies affectent leur réputation et leurs prochaines actions de constructions dans la zone -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Altitude maximum de la carte{NBSP}: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Définir l'altitude maximum autorisée pour les montagnes sur la carte -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Vous ne pouvez pas régler l'altitude maximum de la carte sur cette valeur. Au moins une montagne sur la carte est plus haute +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Hauteur limite de la carte: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Définissez la hauteur maximale du terrain de la carte. Avec "(auto)", une bonne valeur sera choisie après la création du terrain +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(auto) +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Vous ne pouvez pas définir la hauteur limite de la carte sur cette valeur. Il y a uu moins une montagne sur la carte qui est plus haute STR_CONFIG_SETTING_AUTOSLOPE :Terrassement sous les bâtiments, voies, etc.{NBSP}: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Autoriser le terrassement sous les bâtiments et les voies sans les retirer STR_CONFIG_SETTING_CATCHMENT :Autoriser des zones de desserte plus réalistes{NBSP}: {STRING} @@ -1326,7 +1359,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Définit combie STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distance maximum depuis les bords pour les industries pétrolières{NBSP}: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distance par rapport au bord de la carte où les raffineries et les plateformes pétrolières peuvent être construites. Sur les cartes d'îles cela assure qu'elles sont près de la côte. Sur les cartes plus large que 256 tuiles, cette valeur est mise à l'échelle. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altitude d'enneigement{NBSP}: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Contrôle à quelle altitude la neige commence dans le climat sub-arctique.La neige affecte aussi la génération des industries et les exigences pour la croissance des villes +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Contrôle à quelle altitude la neige commence dans le climat sub-arctique. La neige affecte aussi la génération des industries et les exigences pour la croissance des villes. Ne peut être modifié que via l'éditeur de scénario autrement il est calculé via "couverture de neige" +STR_CONFIG_SETTING_SNOW_COVERAGE :Couverture de neige: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Contrôle la quantité approximative de neige sur le paysage sub-arctique. La neige affecte également la production des industrielles et les besoins de croissance des villes. Seulement utilisé lors de la création de la carte. La terre juste au-dessus du niveau de la mer est toujours sans neige +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Couverture du désert: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Contrôlez la quantité approximative de zone du désert sur le paysage tropical. Le désert affecte également la création du nombre d'industries. Uniquement utilisé lors de la création de la carte +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Rugosité du terrain{NBSP}: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only) Choisir la fréquence des collines{NBSP}: Les paysages doux ont des collines moins nombreuses et plus éloignées. Les paysages rudes ont beaucoup de collines, ce qui peut sembler répétitif STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Très lisse @@ -1440,6 +1479,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Conserver les o STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Garde les outils de construction de ponts, tunnels, etc. ouverts après usage STR_CONFIG_SETTING_EXPENSES_LAYOUT :Regrouper les dépenses dans la fenêtre des finances{NBSP}: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Définit la mise en forme de la fenêtre des dépenses de la compagnie +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Retire automatiquement les signaux durant la construction de la voie ferrée: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Retire automatiquement les signaux durant la construction de la voie ferrée si les signaux sont sur le chemin. A noter que ça peut potentiellement mener à des accidents de trains. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Seuil de vitesse d'avancement rapide: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite de la vitesse du jeu lorsque l'avance rapide est activée. 0 = pas de limite (aussi rapidement que votre ordinateur le permet). Les valeurs inférieures à 100% ralentissent le jeu. Le limites supérieure dépend des spécifications de votre ordinateur et peut varier en fonction du jeu +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% de la vitesse normal +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Aucune limite (aussi rapidement que votre ordinateur le permet) STR_CONFIG_SETTING_SOUND_TICKER :Bulletin{NBSP}: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Jouer un son pour les bulletins @@ -1553,8 +1598,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Année de fin d STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :À la fin de cette année, le score de la compagnie est enregistré et la fenêtre des meilleurs scores est affichée. Il est quand même possible de continuer de jouer après, mais le score ne sera pas enregistré.{}Si le jeu commence après cette année, les meilleurs scores ne sont jamais affichés. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Jamais -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Permettre une économie stable (petits changements plus nombreux){NBSP}: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Lorsqu'il est activé, la production des industries change plus souvent, et plus faiblement. Ce paramètre est généralement sans effets si les types d'industries sont fournis par un NewGRF +STR_CONFIG_SETTING_ECONOMY_TYPE :Type d'économie{NBSP}: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Une économie stable entraîne des changements de production plus fréquents, mais de plus faible intensité. Une économie gelée bloque les changements de production et les fermetures d'industries. Ce paramètre peut n'avoir aucun effet si les types d'industries proviennent d'un NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Stable +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Gelée STR_CONFIG_SETTING_ALLOW_SHARES :Permettre d'acheter des actions d'autres compagnies{NBSP}: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Lorsqu'il est activé, l'achat et la vente des parts de compagnie sont autorisées. Les parts ne seront disponibles que pour les compagnies ayant atteint un certain âge STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Âge minimum de la compagnie pour la vente d'actions{NBSP}: {STRING} @@ -1606,9 +1654,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linéaire STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plantation d'arbres durant la partie{NBSP}: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Contrôle l'apparition aléatoire des arbres durant la partie. Cela peut affecter les industries qui dépendent de la croissance des arbres, par exemple les scieries -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nulle part {RED}(les scieries ne fonctionneront plus) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Seulement dans les forêts tropicales -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Partout +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Croissance sans propagation {RED}(casse les scieries) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Croissance mais propagation uniquement dans les régions tropicales +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Croissance et propagation partout +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Pas de croissance, pas de propagation {RED}(casse les scieries) STR_CONFIG_SETTING_TOOLBAR_POS :Position de la barre d'outils principale{NBSP}: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Position horizontale de la barre d'outils principale en haut de l'écran @@ -1626,12 +1675,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :Zoom avant maxi STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Le zoom avant maximum pour les vues. Noter qu'activer un plus grand zoom avant augment les besoins en mémoire STR_CONFIG_SETTING_ZOOM_MAX :Zoom arrière maximum{NBSP}: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Le zoom arrière maximum pour les vues. Noter que l'usage d'un plus grand zoom arrière peut causer un retard +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Résolution maximale des sprites{NBSP}: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limite la résolution des graphismes. Même si des sprites de plus haute résolution sont disponibles, ils ne seront pas utilisés. Cela peut aider à garder un aspect cohérent quand plusieurs fichiers GRF avec des résolutions différentes sont utilisés. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normal STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Vitesse de croissance des villes{NBSP}: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Vitesse de croissance des villes STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Aucune @@ -1646,10 +1700,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Aucune STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicateur initial pour la taille des métropoles{NBSP}: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Taille moyenne des métropoles par rapport aux villes normales au début de la partie -STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Réactualiser le graphique de la distribution tous les {STRING}{NBSP}jour{P 0:2 "" s} -STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Intervalle entre la recalculation des liens du graphique. À chaque itération, une seule composante du graphique est recalculée. Donc, une valeur X pour ce réglage ne signifie pas que le graphique est réactualisé entièrement tous les X jours. Plus l'intervalle est court, plus de temps CPU est nécessaire pour la recalculation. Plus il est long, et plus de temps sera nécessaire pour que la distribution s'effectue sur de nouvelles routes. +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Recalculer le graphe de distribution tous les {STRING}{NBSP}jour{P 0:2 "" s} +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Intervalle entre le recalcul du graphe de distribution. À chaque itération, une seule composante du graphe est recalculée. Donc, une valeur X pour ce réglage ne signifie pas que le graphe est réactualisé entièrement tous les X jours. Plus l'intervalle est court, plus de temps CPU est nécessaire pour la recalcul. Plus il est long, et plus de temps sera nécessaire pour que la distribution s'effectue sur de nouvelles routes. STR_CONFIG_SETTING_LINKGRAPH_TIME :Prendre {STRING}{NBSP}jour{P 0:2 "" s} pour recalculer le graphe de distribution -STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Durée maximale (en jours) de la réactualisation d'une composante du graphique. À chaque itération, un thread est initié, qui a une durée maximale définie par ce réglage. Plus celui-ci est court, plus la probabilité que le thread ne termine pas sa tâche à temps est élevée. Le jeu s'interrompt alors jusqu'à la fin de la recalculation ("lag"). Plus le réglage est long, et moins rapidement la distribution sera réactualisée en cas de changement de routes. +STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Durée maximale (en jours) du recalcul d'une composante du graphe. À chaque itération, un thread est initié, qui a une durée maximale définie par ce réglage. Plus celui-ci est court, plus la probabilité que le thread ne termine pas sa tâche à temps est élevée. Le jeu s'interrompt alors jusqu'à la fin du recalcul ("lag"). Plus le réglage est long, et moins rapidement la distribution sera réactualisée en cas de changement de routes. STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuel STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymétrique STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symétrique @@ -1662,7 +1716,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de ca STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Type de distribution pour les autres classes de cargaison{NBSP}: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymétrique" signifie qu'une quantité arbitraire de cargaison peut être envoyée dans les deux directions. "manuel" signifie qu'aucune distribution n'est mise en place pour la cargaison. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Précision de la distribution{NBSP}: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Plus ce réglage est élevé, plus la réactualisation du graphique de distribution occupe de temps CPU. S'il est trop élevé, cela peut produire de la latence ("lag"). Au contraire, plus la valeur est basse, plus la distribution sera imprécise et l'on risque de voir des cargaisons ne pas aller vers la destination attendue. +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Plus ce réglage est élevé, plus le recalcul du graphe de distribution occupe de temps CPU. S'il est trop élevé, cela peut produire de la latence ("lag"). Au contraire, plus la valeur est basse, plus la distribution sera imprécise et l'on risque de voir des cargaisons ne pas aller vers la destination attendue. STR_CONFIG_SETTING_DEMAND_DISTANCE :Effet de la distance sur la demande{NBSP}: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Si cette valeur est supérieure à 0, la distance entre la station d'origine A d'une cargaison et une possible destination B a un impact sur la quantité de cargaison envoyée de A vers B. Plus la distance est grande entre les deux, moins de cargaison sera envoyée. Plus cette valeur est élevée, moins de cargaison sera envoyée vers des stations lointaines, et plus vers les stations plus proches. STR_CONFIG_SETTING_DEMAND_SIZE :Quantité de cargaison renvoyée en mode symétrique{NBSP}: {STRING} @@ -1675,6 +1729,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Quand une vites STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Impérial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Métrique (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unités du jeu (cases/jour) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unité de puissance de véhicule{NBSP}: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Quand une puissance de véhicule est affichée dans l'interface utilisateur, utiliser l'unité sélectionnée @@ -1764,6 +1819,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... musi STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Plus de mémoire STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}L'allocation de {BYTES} pour le cache des sprites a échoué. Le cache des sprites a été réduit à {BYTES}. Cela va réduire les performances d'OpenTTD. Pour diminuer les besoins en mémoire vous pouvez essayer de désactiver les graphismes 32bpp et/ou les niveaux de zoom avant +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE} Erreur avec les paramètres vidéo... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE} ... aucun GPU compatible trouvé. l'accélération matérielle est désactivée + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1779,7 +1838,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Meilleur STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Paramètres STR_INTRO_NEWGRF_SETTINGS :{BLACK}Paramètres NewGRF STR_INTRO_ONLINE_CONTENT :{BLACK}Vérifier le contenu en ligne -STR_INTRO_SCRIPT_SETTINGS :{BLACK}Configuration des scripts +STR_INTRO_SCRIPT_SETTINGS :{BLACK}Paramètres des IA/script jeu STR_INTRO_QUIT :{BLACK}Quitter STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Démarrer une nouvelle partie. Ctrl-clic pour passer outre la configuration du terrain. @@ -1807,18 +1866,10 @@ STR_INTRO_TRANSLATION :{BLACK}Il manqu # Quit window STR_QUIT_CAPTION :{WHITE}Quitter -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Êtes-vous sûr de vouloir quitter OpenTTD et retourner à {STRING}{NBSP}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Êtes-vous sûr de vouloir quitter OpenTTD{NBSP}? STR_QUIT_YES :{BLACK}Oui STR_QUIT_NO :{BLACK}Non -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandonner la partie STR_ABANDON_GAME_QUERY :{YELLOW}Êtes-vous sûr de vouloir abandonner cette partie{NBSP}? @@ -1827,7 +1878,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Êtes-v # Cheat window STR_CHEATS :{WHITE}Triches STR_CHEATS_TOOLTIP :{BLACK}Les cases à cocher montrent si vous avez déjà utilisé cette triche auparavant -STR_CHEATS_WARNING :{BLACK}Attention{NBSP}! Vous êtes sur le point de trahir vos adversaires. Vous et votre famille serez déshonoré pour l'éternité. +STR_CHEATS_NOTE :{BLACK}Note{}: tout usage de ces paramètres sera enregistré dans la sauvegarde STR_CHEAT_MONEY :{LTBLUE}Augmenter l'argent de {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jouer en tant que compagnie{NBSP}: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer magique (enlèvement des industries et des objets fixes){NBSP}: {ORANGE}{STRING} @@ -1939,10 +1990,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Modifier # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijoueurs -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Publiée -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Choisir entre une partie publiée (internet) et une partie non publiée (Réseau local, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Non -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Oui STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom du joueur{NBSP}: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Ceci est le nom sous lequel vous serez connu des autres joueurs @@ -1983,11 +2030,13 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Rejoindr STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Actualiser STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Actualiser les informations sur le serveur -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Trouver un serveur -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Chercher un serveur sur le réseau +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Recherche internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Rechercher des serveurs publiés sur internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Recherche LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Rechercher des serveurs sur le réseau local STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Ajouter un serveur STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Ajouter un serveur à la liste de ceux parmi lesquels des parties en cours seront toujours cherchées -STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Démarrer le serveur +STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Héberger/créer un serveur de jeu STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Démarrer son propre serveur, sur cet ordinateur-ci STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Entrer votre nom @@ -2001,6 +2050,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Les autr STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Choisir le mot de passe STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protégez votre partie avec un mot de passe si vous ne souhaitez pas que d'autres l'utilisent +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publiée +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choisir entre une partie publiée (internet) et une partie non publiée (Réseau local, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Non STR_NETWORK_START_SERVER_ADVERTISED :Oui STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} @@ -2077,7 +2128,7 @@ STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Joueurs STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nouvelle compagnie STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Créer une nouvelle compagnie -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Observer une partie +STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Observer la partie STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Observer une partie en tant que spectateur STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Rejoindre la compagnie STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Aider à gérer cette compagnie @@ -2114,7 +2165,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nouvelle compag # Network client list STR_NETWORK_CLIENTLIST_KICK :Exclure STR_NETWORK_CLIENTLIST_BAN :Bannir -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Donner de l'argent STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parler à tous STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parler à la compagnie STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Message privé @@ -2123,8 +2173,6 @@ STR_NETWORK_SERVER :Serveur STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectateurs -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Entrer le montant que vous voulez donner - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ne pas sauver le mot de passe entré STR_COMPANY_PASSWORD_OK :{BLACK}Donner un nouveau mot de passe à la compagnie @@ -2211,11 +2259,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Partie toujours STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Partie toujours suspendue ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Partie toujours suspendue ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Partie toujours suspendue ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Partie toujours suspendue ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Reprise de la partie ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :nombre de joueurs STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :connexion de clients STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuel STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :script de jeu +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :en attente du recalcul du graphe de liens ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :départ STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} a rejoint la partie @@ -2225,8 +2275,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} a STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} a lancé une nouvelle compagnie (n°{NBSP}{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} a quitté la partie ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} a changé son nom en {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} a donné {2:CURRENCY_LONG} à votre compagnie -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Vous avez donné {2:CURRENCY_LONG} à {1:STRING} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} a donné {2:CURRENCY_LONG} à {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Le serveur a fermé la session STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Le serveur redémarre...{}Veuillez patienter... STR_NETWORK_MESSAGE_KICKED :*** {STRING} a été exclu. Raison{NBSP}: ({STRING}) @@ -2304,6 +2353,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Oui, télécharger les graphiques STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Non, quitter OpenTTD +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Téléchargement échoué +STR_MISSING_GRAPHICS_ERROR :{BLACK}Le téléchargement des graphismes a échoué.{}Il faudrait les télécharger manuellement. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Quitter OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Options de transparence STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Transparence des panneaux.{}Ctrl-clic pour verrouiller. @@ -2345,6 +2398,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Constru STR_JOIN_WAYPOINT_CAPTION :{WHITE}Joindre un point de contrôle STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construire un point de contrôle séparé +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Désactivé car aucun véhicule n'est actuellement disponible pour cette infrastructure + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construction de voie ferrée STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construction de voie ferrée électrifiée @@ -2532,13 +2588,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Taille{N STR_OBJECT_CLASS_LTHS :Phares STR_OBJECT_CLASS_TRNS :Transmetteurs -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Arbres STR_PLANT_TREE_TOOLTIP :{BLACK}Choix du type d'arbre. S'il y a déjà un arbre dans la case, plusieurs arbres de types différents y seront ajoutés, indépendamment du type sélectionné. STR_TREES_RANDOM_TYPE :{BLACK}Au hasard STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Planter des arbres provenant d'espèces choisies au hasard.{}Shift pour afficher seulement le coût estimé. STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Ajouter des arbres au hasard STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Semer des arbres au hasard sur l'ensemble du terrain +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Planter de simples arbres en glissant sur le terrain +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Bosquet +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Planter de petites forêts en glissant sur le terrain +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Forêt +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Planter de larges forêts en glissant sur le terrain # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Création du terrain @@ -2589,12 +2651,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aléatoi # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Financer une nouvelle industrie STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Choisir l'industrie appropriée dans cette liste -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Beaucoup d'industries au hasard +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Créer des industries au hasard STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Couvrir la carte d'industries placées au hasard +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Créer des industries au hasard +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Êtes-vous sûr de vouloir créer beaucoup d'industries au hasard{NBSP}? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Prix{NBSP}: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospecter STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Construire STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Fonder +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Enlever toutes les industries +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Enlève toutes les industries présentes sur la carte +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Enlever toutes les industries +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Êtes-vous sûr de vouloir enlever toutes les industries{NBSP}? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Chaîne industrielle pour l'industrie «{NBSP}{STRING}{NBSP}» @@ -2615,6 +2683,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Choisir # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informations sur le terrain +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur la case. Ctrl-clic pour ouvrir une nouvelle vue sur la case STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Coût si démolition{NBSP}: {LTBLUE}N/D STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Coût si démolition{NBSP}: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Gain si démolition{NBSP}: {LTBLUE}{CURRENCY_LONG} @@ -2771,7 +2840,7 @@ STR_FRAMERATE_GL_ROADVEHS :{WHITE} Ticks STR_FRAMERATE_GL_SHIPS :{BLACK} Ticks des navires{NBSP}: STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ticks des aéroplanes{NBSP}: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Ticks du monde{NBSP}: -STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Délai du flux des marchandises{NBSP}: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Délai du graphe de distribution{NBSP}: STR_FRAMERATE_DRAWING :{BLACK}Rendu des graphismes{NBSP}: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Vues{NBSP}: STR_FRAMERATE_VIDEO :{BLACK}Sortie vidéo{NBSP}: @@ -2788,7 +2857,7 @@ STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ticks des véhi STR_FRAMETIME_CAPTION_GL_SHIPS :Ticks des navires STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ticks des aéroplanes STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Ticks du monde -STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Délai du flux des marchandises +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Délai du graphe de distribution STR_FRAMETIME_CAPTION_DRAWING :Rendu des graphismes STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Rendu des vues STR_FRAMETIME_CAPTION_VIDEO :Sortie vidéo @@ -2824,6 +2893,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF{ STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtre{NBSP}: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Écraser le fichier STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Êtes-vous sûr de vouloir écraser le fichier existant{NBSP}? +STR_SAVELOAD_DIRECTORY :{STRING} (Répertoire) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Répertoire parent) STR_SAVELOAD_OSKTITLE :{BLACK}Entrer un nom pour la sauvegarde @@ -2835,14 +2906,18 @@ STR_MAPGEN_BY :{BLACK}{NBSP}× STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nb. de villes{NBSP}: STR_MAPGEN_DATE :{BLACK}Date{NBSP}: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Nb. d'industries{NBSP}: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Altitude maximum de la carte -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Augmenter l'altitude maximum des montagnes sur la carte de 1 -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Réduire l'altitude maximum des montagne sur la carte de 1 -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Alt. d'enneigement{NBSP}: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Augmenter l'altitude d'enneigement -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Baisser l'altitude d'enneigement +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Sommet le plus élevé: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Augmenter la hauteur maximale du plus haut sommet de la carte de un +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Diminuer la hauteur maximale du plus haut sommet de la carte de un +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Couverture de la neige: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Augmenter la couverture de neige de dix pour cent +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Diminuer la couverture de neige de dix pour cent +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Couverture du désert: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Augmenter la couverture du désert de dix pour cent +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Diminuer la couverture du désert de dix pour cent +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Générateur{NBSP}: -STR_MAPGEN_TREE_PLACER :{BLACK}Ajout des arbres{NBSP}: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Type de terrain{NBSP}: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Niveau de la mer{NBSP}: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Nb. de rivières{NBSP}: @@ -2867,8 +2942,10 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nom de l STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Taille{NBSP}: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM}{NBSP}×{NBSP}{NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Modifier l'altitude maximum de la carte -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Modifier l'altitude d'enneigement +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Hauteur du pic +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Le point le plus haut +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Couverture de neige (en %) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Couverture du désert (en %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Modifier l'année de départ # SE Map generation @@ -3085,6 +3162,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Activer # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Éditer le texte du panneau +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur le panneau. Ctrl-clic pour ouvrir une nouvelle vue sur le panneau STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Aller au panneau suivant STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Aller au panneau précédent @@ -3145,33 +3223,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financer de nou STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Acheter les droits de transports exclusifs STR_LOCAL_AUTHORITY_ACTION_BRIBE :Corrompre la municipalité -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Lancer une petite campagne de publicité, pour attirer plus de voyageurs et de marchandises sur vos lignes.{}Coût{NBSP}: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Lancer une campagne de publicité moyenne, pour attirer plus de voyageurs et de marchandises sur vos lignes.{}Coût{NBSP}: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Lancer une grande campagne de publicité, pour attirer plus de voyageurs et de marchandises sur vos lignes.{}Coût{NBSP}: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financer la reconstruction du réseau routier local. Provoque de nombreux problèmes de trafic routier pendant 6 mois.{}Coût{NBSP}: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Construire une statue en l'honneur de votre compagnie.{}Coût{NBSP}: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financer la construction de nouveaux immeubles commerciaux.{}Coût{NBSP}: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Acheter les droits de transport exclusifs dans cette ville pour 1 an. Seules vos lignes seront autorisées dans la ville.{}Coût{NBSP}: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Lancez une petite campagne de publicité locale pour attirer plus de passagers et de marchandises vers vos services de transport.{} Augmente temporairement le classement des gares dans un petit rayon autour du centre-ville.{}Coût: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Lancer une campagne de publicité moyenne, pour attirer plus de voyageurs et de marchandises sur vos lignes.{}Augmente temporairement le classement de vos gares dans un rayon moyen autour du centre-ville.{}Coût:{CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Lancer une grande campagne de publicité, pour attirer plus de voyageurs et de marchandises sur vos lignes.{}Augmente temporairement le classement des gares dans un rayon important autour du centre-ville.{}Coût: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financer la reconstruction du réseau routier local. Provoque de nombreux problèmes de trafic routier pendant 6 mois.{}Coût: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Construire une statue en l'honneur de votre compagnie.{}Augmente en permanence le classement de vos stations dans cette ville.{}Coût:{CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financer la construction de nouveaux immeubles commerciaux.{}Stimule temporairement la croissance dans cette ville.{}Coût:{CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Achetez les droits de transport exclusifs d'un an pour la ville.{} La municipalité n'autorisera pas les passagers et les marchandises à utiliser les gares de vos concurrents.{} Coût: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Corrompre la municipalité pour améliorer votre réputation. Risque de pénalisation si le pot-de-vin est dévoilé.{}Coût{NBSP}: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}Objectifs de {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objectifs globaux STR_GOALS_SPECTATOR :Objectifs globaux -STR_GOALS_GLOBAL_TITLE :{BLACK}Objectifs globaux{NBSP}: +STR_GOALS_GLOBAL_BUTTON :{BLACK} Globaux +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK} Afficher les objectifs généraux +STR_GOALS_COMPANY_BUTTON :{BLACK} compagnie +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK} Afficher les objectifs de votre compagnie STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}− Aucun − -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Pas applicable - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Objectifs de la compagnie{NBSP}: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Cliquer sur l'objectif pour centrer la vue principale sur l'industrie, la ville ou la case. Ctrl-clic pour ouvrir une nouvelle vue sur l'industrie, la ville ou la case. # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Question -STR_GOAL_QUESTION_CAPTION_INFORMATION :Informations -STR_GOAL_QUESTION_CAPTION_WARNING :Attention -STR_GOAL_QUESTION_CAPTION_ERROR :Erreur +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Question +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informations +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Attention +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Erreur ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Annuler @@ -3361,6 +3440,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Déména STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruire ailleurs le siège de la compagnie pour le prix de 1{NBSP}% de sa valeur.{}Shift-clic pour afficher seulement le coût estimé. STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Détails STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Afficher le détail des calculs d'infrastructure +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Donner de l’argent +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Donner de l’argent à cette compagnie STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nouveau visage STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Choix d'un nouveau visage pour le P.D.G. @@ -3378,6 +3459,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Vendre 2 STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nom de la société STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nom du P.D.G. +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Entrer le montant que vous souhaiter donner STR_BUY_COMPANY_MESSAGE :{WHITE}Nous sommes à la recherche d'un repreneur pour notre compagnie{}{}Voulez-vous acheter {COMPANY} pour {CURRENCY_LONG}{NBSP}? @@ -3532,6 +3614,7 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Wagons m STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Réaménageable pour{NBSP}: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Tous les types de cargaison STR_PURCHASE_INFO_NONE :Aucune cargaison +STR_PURCHASE_INFO_ENGINES_ONLY :Moteurs uniquement STR_PURCHASE_INFO_ALL_BUT :Tous sauf {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Effort de traction max.{NBSP}: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rayon d'action{NBSP}: {GOLD}{COMMA}{NBSP}cases @@ -3738,10 +3821,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Si l'aut # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur le train. Ctrl-clic pour le suivre dans la vue principale. -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur le véhicule. Ctrl-clic pour le suivre dans la vue principale. -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur le navire. Ctrl-clic pour le suivre dans la vue principale. -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur l'aéronef. Ctrl-clic pour le suivre dans la vue principale. +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centrer la vue sur le train. Double clic pour le suivre dans la vue principale. Ctrl-clic pour ouvrir une nouvelle vue sur le train +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centrer la vue sur le véhicule. Double clic pour le suivre dans la vue principale. Ctrl-clic pour ouvrir une nouvelle vue sur le véhicule +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centrer la vue sur le navire. Double clic pour le suivre dans la vue principale. Ctrl-clic pour ouvrir une nouvelle vue sur le navire +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centrer la vue sur l'aéronef. Double clic pour le suivre dans la vue principale. Ctrl-clic pour ouvrir une nouvelle vue sur l'aéronef STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Envoyer le train au dépôt.{}Ctrl-clic pour un entretien seul. STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Envoyer le véhicule au dépôt.{}Ctrl-clic pour un entretien seul. @@ -3773,10 +3856,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Afficher STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Afficher les détails du navire STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Afficher les détails de l'aéronef -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Action courante du train - Cliquer pour le démarrer/l'arrêter. Ctrl-clic pour centrer la vue sur sa destination. -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Action courante du véhicule routier - Cliquer pour le démarrer/l'arrêter. Ctrl-clic pour centrer la vue sur sa destination. -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Action courante du navire - Cliquer pour le démarrer/l'arrêter. Ctrl-clic pour centrer la vue sur sa destination. -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Action courante de l'aéronef - Cliquer pour le démarrer/l'arrêter. Ctrl-clic pour centrer la vue sur sa destination. +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Action courante du train - cliquer pour le démarrer/l'arrêter +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Action courante du véhicule - cliquer pour le démarrer/l'arrêter +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Action courante du navire - cliquer pour le démarrer/l'arrêter +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Action courante de l'aéronef - cliquer pour le démarrer/l'arrêter + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centrer la vue sur la destination. Ctrl-clic pour ouvrir une nouvelle vue sur la destination # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Chargement/Déchargement @@ -4004,6 +4089,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Réaménager p STR_ORDER_STOP_ORDER :(Arrêt) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Station inutilisable){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Implicite) @@ -4248,6 +4334,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Sauvegarde modi STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Fichier illisible STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Fichier protégé en écriture STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Échec du contrôle d'intégrité des données +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Sauvegarde créée avec une version modifiée STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Partie sauvegardée avec une version sans support des tramways. Tous les tramways ont été supprimés. @@ -4275,6 +4362,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Seuls le STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Très grande capture d'écran STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}La capture d'écran aura une résolution de {COMMA} x {COMMA} pixels. Faire cette capture peut prendre un moment . Êtes-vous sûr de vouloir continuer{NBSP}? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}La carte de hauteur a bien été enregistrée sous '{STRING}'. Le pic le plus élevé est {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Copie d'écran enregistrée avec succès sous "{STRING}" STR_ERROR_SCREENSHOT_FAILED :{WHITE}Échec de la copie d'écran{NBSP}! @@ -4328,6 +4416,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... empr STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} nécessaires STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Impossible de rembourser... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Impossible de distribuer de l'argent emprunté à la banque... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Vous ne pouvez pas donner de l’argent à cette compagnie STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Impossible d'acheter la compagnie... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Impossible de construire le siège... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Impossible d'acheter 25{NBSP}% des parts... @@ -4454,6 +4543,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Dépôt incompa STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} est trop long après remplacement STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Aucune règle de remplacement/renouvellement automatique appliquée STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(limite d'argent) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Le nouveau véhicule ne peut pas transporter {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Le nouveau véhicule ne peut être réaménagé à l'ordre {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinaison de rails impossible @@ -4661,7 +4752,7 @@ STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_1 :Immeuble de bur STR_TOWN_BUILDING_NAME_SMALL_BLOCK_OF_FLATS_1 :Petit immeuble résidentiel STR_TOWN_BUILDING_NAME_CHURCH_1 :Église STR_TOWN_BUILDING_NAME_LARGE_OFFICE_BLOCK_1 :Gros immeuble de bureaux -STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Bâtiments municipaux +STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Maisons de ville STR_TOWN_BUILDING_NAME_HOTEL_1 :Hôtel STR_TOWN_BUILDING_NAME_STATUE_1 :Statue STR_TOWN_BUILDING_NAME_FOUNTAIN_1 :Fontaine @@ -5040,6 +5131,7 @@ STR_FORMAT_BUOY_NAME :Bouée de {TOWN STR_FORMAT_BUOY_NAME_SERIAL :Bouée de {TOWN} n°{NBSP}{COMMA} STR_FORMAT_COMPANY_NUM :(Compagnie {COMMA}) STR_FORMAT_GROUP_NAME :Groupe {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} {COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} - {STRING} STR_FORMAT_WAYPOINT_NAME :Point de contrôle de {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Point de contrôle de {TOWN} n°{NBSP}{COMMA} diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 8e9b6be1e6..7e15bd033d 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -119,18 +119,18 @@ STR_CARGO_PLURAL_TOYS :{G=f}Dèideagan STR_CARGO_PLURAL_TOYS.nom :Dèideagan STR_CARGO_PLURAL_TOYS.gen :Dhèideagan STR_CARGO_PLURAL_TOYS.dat :Dèideagan -STR_CARGO_PLURAL_CANDY :{G=m}Mìlseanan -STR_CARGO_PLURAL_CANDY.nom :Mìlseanan -STR_CARGO_PLURAL_CANDY.gen :Mhìlseanan -STR_CARGO_PLURAL_CANDY.dat :Mìlseanan +STR_CARGO_PLURAL_SWEETS :{G=m}Mìlseanan +STR_CARGO_PLURAL_SWEETS.nom :Mìlseanan +STR_CARGO_PLURAL_SWEETS.gen :Mhìlseanan +STR_CARGO_PLURAL_SWEETS.dat :Mìlseanan STR_CARGO_PLURAL_COLA :{G=m}Cola STR_CARGO_PLURAL_COLA.nom :Cola STR_CARGO_PLURAL_COLA.gen :Cola STR_CARGO_PLURAL_COLA.dat :Cola -STR_CARGO_PLURAL_COTTON_CANDY :{G=f}Canach-shiùcair -STR_CARGO_PLURAL_COTTON_CANDY.nom :Canach-shiùcair -STR_CARGO_PLURAL_COTTON_CANDY.gen :Canaich-siùcair -STR_CARGO_PLURAL_COTTON_CANDY.dat :Canach-shiùcair +STR_CARGO_PLURAL_CANDYFLOSS :{G=f}Canach-shiùcair +STR_CARGO_PLURAL_CANDYFLOSS.nom :Canach-shiùcair +STR_CARGO_PLURAL_CANDYFLOSS.gen :Canaich-siùcair +STR_CARGO_PLURAL_CANDYFLOSS.dat :Canach-shiùcair STR_CARGO_PLURAL_BUBBLES :{G=m}Builgeanan STR_CARGO_PLURAL_BUBBLES.nom :Builgeanan STR_CARGO_PLURAL_BUBBLES.gen :Bhuilgeanan @@ -246,18 +246,18 @@ STR_CARGO_SINGULAR_TOY :{G=f}Dèideag STR_CARGO_SINGULAR_TOY.nom :Dèideag STR_CARGO_SINGULAR_TOY.gen :Dèideig STR_CARGO_SINGULAR_TOY.dat :Dèideag -STR_CARGO_SINGULAR_CANDY :{G=m}Mìlsean -STR_CARGO_SINGULAR_CANDY.nom :Mìlsean -STR_CARGO_SINGULAR_CANDY.gen :Mìlsein -STR_CARGO_SINGULAR_CANDY.dat :Mìlsean +STR_CARGO_SINGULAR_SWEETS :{G=m}Mìlsean +STR_CARGO_SINGULAR_SWEETS.nom :Mìlsean +STR_CARGO_SINGULAR_SWEETS.gen :Mìlsein +STR_CARGO_SINGULAR_SWEETS.dat :Mìlsean STR_CARGO_SINGULAR_COLA :{G=m}Cola STR_CARGO_SINGULAR_COLA.nom :Cola STR_CARGO_SINGULAR_COLA.gen :Cola STR_CARGO_SINGULAR_COLA.dat :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=f}Canach-shiùcair -STR_CARGO_SINGULAR_COTTON_CANDY.nom :Canach-shiùcair -STR_CARGO_SINGULAR_COTTON_CANDY.gen :Canaich-siùcair -STR_CARGO_SINGULAR_COTTON_CANDY.dat :Canach-shiùcair +STR_CARGO_SINGULAR_CANDYFLOSS :{G=f}Canach-shiùcair +STR_CARGO_SINGULAR_CANDYFLOSS.nom :Canach-shiùcair +STR_CARGO_SINGULAR_CANDYFLOSS.gen :Canaich-siùcair +STR_CARGO_SINGULAR_CANDYFLOSS.dat :Canach-shiùcair STR_CARGO_SINGULAR_BUBBLE :{G=m}Builgean STR_CARGO_SINGULAR_BUBBLE.nom :Builgean STR_CARGO_SINGULAR_BUBBLE.gen :Builgein @@ -419,8 +419,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Tagh òr STR_TOOLTIP_SORT_CRITERIA :{BLACK}Tagh cuspairean-deuchainn an t-seòrsachaidh STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Tagh cuspairean-deuchainn a' chriathraidh STR_BUTTON_SORT_BY :{BLACK}Seòrsaich a-rèir -STR_BUTTON_LOCATION :{BLACK}Ionad -STR_BUTTON_RENAME :{BLACK}Thoir ainm ùr air STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Dùin an uinneag STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Tiotal na h-uinneige - slaod seo gus an uinneag a ghluasad @@ -498,6 +496,8 @@ STR_SORT_BY_RANGE :Dlùths STR_SORT_BY_POPULATION :Àireamh-shluaigh STR_SORT_BY_RATING :Rangachadh +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Cuir an geama na stad / a' dol STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Cuir an geama air adhart gu luath @@ -583,7 +583,7 @@ STR_FILE_MENU_EXIT :Fàg an-seo # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa an t-saoghail -STR_MAP_MENU_EXTRA_VIEW_PORT :Port-seallaidh a bharrachd +STR_MAP_MENU_EXTRA_VIEWPORT :Port-seallaidh a bharrachd STR_MAP_MENU_LINGRAPH_LEGEND :Clàr-mìneachaidh an t-srutha carago STR_MAP_MENU_SIGN_LIST :Liosta nan sanas @@ -758,8 +758,8 @@ STR_MONTH_DEC.dat :Dùbhlachd # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Iuchair STR_GRAPH_KEY_TOOLTIP :{BLACK}Seall iuchair nan graf -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -1074,7 +1074,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Chuir an t-ùghdarras ionadail aig {TOWN} a làimh ri cùmhnant le {STRING} air còraichean giùlain às-dùnach fad bliadhna! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Port-seallaidh {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Port-seallaidh {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Atharraich am port-seallaidh STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Cuir lethbhreac dhen ionad air a' phrìomh shealladh sa phort-seallaidh seo STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Atharraich am prìomh phort-seallaidh @@ -1122,8 +1122,6 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Lari Cairtbheil STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iorànach (IRR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Carbadan-rathaid -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Tagh taobh an rathaid air a dhràibheas na carbadan STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Draibheadh air an taobh chlì STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Draibheadh air an taobh deas @@ -1175,6 +1173,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Dùmhlac STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Tagh dùmhlachd-bhreacaidh na sgrìn a chleachdas tu STR_GAME_OPTIONS_RESOLUTION_OTHER :Gnàthaichte + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Meud na h-eadar-aghaidh STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Tagh am meud airson rud san eadar-aghaidh @@ -1184,6 +1184,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Ceithir uiread + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Seata grafaigeachd bunasach STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Tagh an seata grafaigeachd bunasach a chleachdas tu STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} {P fhaidhle fhaidhle faidhlichean faidhle} a dhìth/coirbte @@ -1359,8 +1361,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Toglaich dunaid STR_CONFIG_SETTING_CITY_APPROVAL :Beachdan comhairle a' bhaile air leasachadh raointean: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Tagh am meud dhe dh'fhuaim is milleadh na h-àrainneachd le companaidhean a tha a dhìth mus bi buaidh air luachadh a' bhaile is barrachd togail san sgìre -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Àirde as motha a’ mhapa: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Suidhich an àirde as motha aig beanntan a bhios ceadaichte air a’ mhapa STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Chan urrainn dhut àirde as motha a’ mhapa a shuidheachadh air an luach seo. Tha beinn air a’ mhapa a tha nas àirde. STR_CONFIG_SETTING_AUTOSLOPE :Ceadaich atharrachadh crutha-tìre fo thogalaichean, slighean agus msaa.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Ceadaich atharrachadh crutha-tìre fo thogalaichean is slighean gun a bhith gan toirt air falbh @@ -1716,8 +1716,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Slàn STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Nochdaidh naidheachdan dathte ann an: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Am bliadhna a thèid pàipear-naidheachd dathte a chlò-bhualadh a' chiad turas. Bidh na pàipearan-naidheachd ann an dubh is geal roimhe seo STR_CONFIG_SETTING_STARTING_YEAR :Bliadhna tòiseachaidh: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Cuir eaconamaidh rèidh an comas (atharraichean nas trice is nas beaga): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ma tha seo air, atharraichidh saothrachadh nan gnìomhachasan nas trice is le ceuman nas lugha. Chan eil buaidh aig seo air seòrsaichean gnìomhachais a chaidh a sholar le NewGRF mar as trice STR_CONFIG_SETTING_ALLOW_SHARES :Ceadaich gun tèid stoca a cheannach bho chompanaidhean eile: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ma tha seo air, ’s urrainn dhut stocan chompanaidhean a cheannach is a reic. Cha bhi stoca ri làimh ach aig companaidhean aig a bheil aois shònraichte STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :A' cheudad dhen phrothaid a gheibh carbadan le tar-aiseag carago: {STRING} @@ -1763,9 +1761,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Ceadaichte, co- STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Cur nan craobh sa gheama: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Cùm smachd air na craobhan a nochdas sa gheama air thuaiream. Dh'fhaoidte gun toir seo buaidh air gnìomhachasan a tha an eisimeil fàs nan craobhan a leithid muileannan-fiodha -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Chan eil gin {RED}(brisidh seo muileannan-fiodha) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Ann an coilltean-uisge a-mhàin -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Àite sam bith STR_CONFIG_SETTING_TOOLBAR_POS :Ionad a' phrìomh bhàir-inneal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Ionad còmhnard a' phrìomh bhàir-inneal air barr na sgrìn @@ -1921,6 +1916,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... a' l STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Chan eil cuimhne gu leòr agad STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Dh'fhàillig le sònrachadh aig {BYTES} dhe thasgadan nam sprites. Chaidh tasgadan nam sprites a lùghdachadh gu {BYTES}. Le sin, bidh an dèanadas aig OpenTTD nas lugha. Gus nach bidh feum ann airson a leithid dhe chuimhne, feuch an cuir thu grafaigeachd 32bpp is/no leibheilean sùmaidh à comas +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1964,18 +1961,9 @@ STR_INTRO_TRANSLATION :{BLACK}Tha {NUM # Quit window STR_QUIT_CAPTION :{WHITE}Fàg an-seo -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}A bheil thu cinnteach gu bheil thu airson OpenTTD fhàgail is tilleadh dha {STRING}? STR_QUIT_YES :{BLACK}Tha STR_QUIT_NO :{BLACK}Chan eil -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Fàg an geama STR_ABANDON_GAME_QUERY :{YELLOW}A bheil thu cinnteach gu bheil thu airson an geama seo fhàgail? @@ -1984,7 +1972,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}A bheil # Cheat window STR_CHEATS :{WHITE}Cealgaireachd STR_CHEATS_TOOLTIP :{BLACK}Is ciall dha bhogsaichean-cromaige gun deach a' chealgaireachd seo a chleachdadh roimhe -STR_CHEATS_WARNING :{BLACK}Rabhadh! Tha thu gu bhith a' mealladh nan co-fharpaiseach agad. Thoir an aire gun cumar cuimhne air an tàmailt seo gu bràth tuilleadh STR_CHEAT_MONEY :{LTBLUE}Meudaich an t-airgead le {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}A' cluich mar a' chompanaidh: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer draoidheach (thoir air falbh gnìomhachasan, oibseactan do-ghluasad): {ORANGE}{STRING} @@ -2096,10 +2083,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Atharrai # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ioma-chluicheadair -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Sanasaichte -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Dèan taghadh eadar geama sanasaichte (eadar-lìon) no gun sanasachadh (lìonra ionadail, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Gun sanasachadh -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sanasaichte STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ainm cluicheadair: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Seo an t-ainm leis an aithnich cluicheadairean eile thu @@ -2140,8 +2123,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Gabh sa STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Ath-nuadhaich am frithealaiche STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Ath-nuadhaich fiosrachadh an fhrithealaiche -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Lorg frithealaiche -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Lorg san lìonraidh airson frithealaiche STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Cuir frithealaiche ris STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Cuiridh seo frithealaiche ris an liosta gus an tèid sùil a thoirt air airson geamannan nan ruith STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Tòisich frithealaiche @@ -2158,6 +2139,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Thèid a STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Suidhich facal-faire STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Dìon an geama agad le facal-faire ach nach eil e ri fhaighinn gu poblach +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sanasaichte +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Dèan taghadh eadar geama sanasaichte (eadar-lìon) no gun sanasachadh (lìonra ionadail, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Chan eil STR_NETWORK_START_SERVER_ADVERTISED :Tha STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} {P chliant chliant cliantan cliant} @@ -2270,7 +2253,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Companaidh ùr # Network client list STR_NETWORK_CLIENTLIST_KICK :Thoir a bhròg dha STR_NETWORK_CLIENTLIST_BAN :Toirmisg -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Thoir airgead dha STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Bruidhinn ris a h-uile duine STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Bruidhinn ris a' chompanaidh STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Teachdaireachd phrìobhaideach @@ -2279,8 +2261,6 @@ STR_NETWORK_SERVER :Frithealaiche STR_NETWORK_CLIENT :Cliant STR_NETWORK_SPECTATORS :Amharcaichean -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Cuir a-steach na tha thu airson toirt seachad - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Na sàbhail am facal-faire air a chur a-steach STR_COMPANY_PASSWORD_OK :{BLACK}Thoir am facal-faire ùr dhan chompanaidh @@ -2380,8 +2360,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** Ghabh {STRI STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** Stèidhich {STRING} companaidh ùr ({2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** Dh'fhalbh {STRING} an geama ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** Dh'atharraich {0:STRING} (a h-)ainm gu {1:STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** Thug {STRING} {2:CURRENCY_LONG} dhan chompanaidh agad -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Thug thu {2:CURRENCY_LONG} dha {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Dhùin am frithealaiche an seisean STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Tha am frithealaiche ag ath-thòiseachadh...{}Fuirich greis... @@ -2458,6 +2436,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}Tha graf STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Bheir, luchdaich a' ghrafaigeachd a-nuas STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Cha toir, fàg OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Roghainnean trìd-shoilleireachd STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Toglaich trìd-shoilleireachd nan sanasan. Ctrl+Briogadh airson glasadh @@ -2498,6 +2477,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Tog st STR_JOIN_WAYPOINT_CAPTION :{WHITE}Co-aonaich a' phuing-thurais STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Tog puing-thurais fa leth +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Tog rathad-iarainn STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Togail rathaid-iarainn dealain @@ -2702,7 +2683,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Meud: {G STR_OBJECT_CLASS_LTHS :Taighean-solais STR_OBJECT_CLASS_TRNS :Tùir chraobh-sgaoilidh -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Craobhan STR_PLANT_TREE_TOOLTIP :{BLACK}Tagh seòrsa na craoibhe airson cur. Ma tha craobh air an leac mu thràth, cuiridh seo barrachd chraobhan aig a bheil caochladh dhe sheòrsachan a tha neo-eisimeileach on t-seòrsa a thagh thu STR_TREES_RANDOM_TYPE :{BLACK}Craobhan dhe sheòrsa air thuaiream @@ -2985,14 +2966,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Bailtean: STR_MAPGEN_DATE :{BLACK}Ceann-latha: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Gnìomhachasan: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Àirde as motha a’ mhapa -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Meudaich an àirde as motha dhe bheanntan air a’ mhapa le a h-aon -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Lùghdaich an àirde as motha dhe bheanntan air a’ mhapa le a h-aon -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Àirde na loidhne-shneachda: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Gluais an loidhne-shneachda suas aon cheum -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Gluais an loidhne-shneachda sìos aon cheum STR_MAPGEN_LAND_GENERATOR :{BLACK}Gineadair crutha-thìre: -STR_MAPGEN_TREE_PLACER :{BLACK}Algairim chraobhan: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Seòrsa a' chrutha-thìre: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Àirde na mara: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Aibhnichean: @@ -3017,8 +2991,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Ainm a' STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Meud: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Atharraich an àirde as motha air mapa -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Atharraich àirde na loidhne-shneachda STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Atharraich am bliadhna-tòiseachaidh # SE Map generation @@ -3301,13 +3273,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Ceannai STR_GOALS_CAPTION :{WHITE}Amasan aig {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Amasan coitcheann STR_GOALS_SPECTATOR :Amasan coitcheann -STR_GOALS_GLOBAL_TITLE :{BLACK}Amasan coitcheann: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Chan eil gin - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Chan eil seo iomchaidh - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Amasan na companaidh: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Briog air an amas gus am prìomh-shealladh a mheadhanachadh air gnìomhachas/baile/leac. Fosglaidh Ctrl+briogadh port-seallaidh ùr air ionad a' ghnìomhachais/a' bhaile/na lice # Goal question window @@ -3846,10 +3815,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Glèidh # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Meadhanaich am prìomh-shealladh air an trèan. Fosglaidh Ctrl+briogadh port-seallaidh ùr air ionad na trèan -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Meadhanaich am prìomh-shealladh air a' charbad. Fosglaidh Ctrl+briogadh port-seallaidh ùr air ionad a' charbaid -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Meadhanaich am prìomh-shealladh air an long. Fosglaidh Ctrl+briogadh port-seallaidh ùr air ionad na luinge -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Meadhanaich am prìomh-shealladh air a' charbad-adhair. Fosglaidh Ctrl+briogadh port-seallaidh ùr air ionad a' charbaid-adhair STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Cuir an trèan dhan trèan-lann. Cha dèan Ctrl+briogadh ach obair-ghlèidhidh STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Cuir carbad dhan gharaids. Cha dèan Ctrl+briogadh ach obair-ghlèidhidh @@ -3881,10 +3846,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Seall mi STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Seall mion-fhiosrachadh na luinge STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Seall mion-fhiosrachadh a' charbaid -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Gnìomh na trèan seo - briog gus an trèan a chur a' dol/na stad. Sgrolaich dhan cheann-uidhe le Ctrl+briogadh -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Gnìomh a' charbaid seo - briog gus an carbad a chur a' dol/na stad. Sgrolaich dhan cheann-uidhe le Ctrl+briogadh -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Gnìomh na luinge seo - briog gus an long a chur a' dol/na stad. Sgrolaich dhan cheann-uidhe le Ctrl+briogadh -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Gnìomh a' charbaid-adhair seo - briog gus an carbad a chur a' dol/na stad. Sgrolaich dhan cheann-uidhe le Ctrl+briogadh + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}A' luchdadh / dì-luchdadh diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 9185638ee4..d993322b42 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Trigo STR_CARGO_PLURAL_RUBBER :Caucho STR_CARGO_PLURAL_SUGAR :Azucre STR_CARGO_PLURAL_TOYS :Xoguetes -STR_CARGO_PLURAL_CANDY :Lambetadas +STR_CARGO_PLURAL_SWEETS :Lambetadas STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Algodón de azucre +STR_CARGO_PLURAL_CANDYFLOSS :Algodón de azucre STR_CARGO_PLURAL_BUBBLES :Burbullas STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Pilas @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Trigo STR_CARGO_SINGULAR_RUBBER :Caucho STR_CARGO_SINGULAR_SUGAR :Azucre STR_CARGO_SINGULAR_TOY :Xoguete -STR_CARGO_SINGULAR_CANDY :Lambetada +STR_CARGO_SINGULAR_SWEETS :Lambetada STR_CARGO_SINGULAR_COLA :Cola -STR_CARGO_SINGULAR_COTTON_CANDY :Algodón de azucre +STR_CARGO_SINGULAR_CANDYFLOSS :Algodón de azucre STR_CARGO_SINGULAR_BUBBLE :Burbulla STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Pila @@ -234,8 +234,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Seleccio STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecciona o criterio de ordenación STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selecciona o criterio de filtrado STR_BUTTON_SORT_BY :{BLACK}Ordenar por -STR_BUTTON_LOCATION :{BLACK}Situación -STR_BUTTON_RENAME :{BLACK}Renomear STR_BUTTON_CATCHMENT :{BLACK}Cobertura STR_TOOLTIP_CATCHMENT :{BLACK}Alternar amosar área de cobertura @@ -316,6 +314,8 @@ STR_SORT_BY_RANGE :Autonomía STR_SORT_BY_POPULATION :Poboación STR_SORT_BY_RATING :Puntuación +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar partida STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avance rápido da partida @@ -403,7 +403,7 @@ STR_FILE_MENU_EXIT :Saír # map menu STR_MAP_MENU_MAP_OF_WORLD :Mapa do mundo -STR_MAP_MENU_EXTRA_VIEW_PORT :Xanela extra +STR_MAP_MENU_EXTRA_VIEWPORT :Xanela extra STR_MAP_MENU_LINGRAPH_LEGEND :Lenda de tomar carga STR_MAP_MENU_SIGN_LIST :Lista de rótulos @@ -569,8 +569,8 @@ STR_MONTH_DEC :Decembro # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Lenda STR_GRAPH_KEY_TOOLTIP :{BLACK}Amosa-la lenda das gráficas -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -884,7 +884,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}As autoridades locáis de {TOWN} asinan un contrato con {STRING} por un ano de dereitos de transporte exclusivos! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vista {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Vista {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Cambiar xanela STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copia-la sitaución da vista principal a esta vista STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Cambia a vista principal @@ -937,8 +937,6 @@ STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi chiné STR_GAME_OPTIONS_CURRENCY_HKD :Dólar de Hong Kong (HKD) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehículos de estrada -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Selecciona o lado da estrada polo que circularán os vehículos STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Conducir pola esquerda STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Conducir pola dereita @@ -990,6 +988,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Resoluci STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Selecciona a resolución de pantalla a empregar STR_GAME_OPTIONS_RESOLUTION_OTHER :outra + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Tamaño da interface STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Seleciona o tamaño de elementos da interface a usar @@ -1004,6 +1004,8 @@ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Tamaño doble STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Tamaño do cadro + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conxunto básico de gráficos STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona o conxunto de gráficos básico a empregar STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arquivo{P "" s} inexistente{P "" s}/erróneo{P "" s} @@ -1179,8 +1181,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Activa os desas STR_CONFIG_SETTING_CITY_APPROVAL :Actitude das autoridades locáis cara a restruturacións de áreas: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Escolle ata que punto o ruido e danos medioambientais producidos polas compañias afectan á súa valoración municipal e ás próximas actividades construtivas na súa área -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Altura máxima do mapa: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Establecer a altura máxima permitida para os montes do mapa STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Non podes establecer a altura máxima do mapa a este valor. Canda menos un monte do mapa é maior STR_CONFIG_SETTING_AUTOSLOPE :Permitir modificacións do terreo baixo edificios, vías, etc. (autopendente): {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite modificar o terreo baixo edificacións e vías sen retiralos @@ -1546,8 +1546,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completo STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Data de aparición das novas en cor: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Ano no que os avisos dos xornais son impresos en cor. Antes deste ano, emprégase monocromo branco e negro STR_CONFIG_SETTING_STARTING_YEAR :Data de comezo: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Habilita-la economía "estable" (máis cambios, pero máis pequenos): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Cando se activa, as producións industriais cambian máis frecuentemente, e a pasos máis curtos STR_CONFIG_SETTING_ALLOW_SHARES :Permiti-la compra de accións de outras compañías: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Cando se activa, permite comprar ou vender accións da compañía. As accións só estarán dispoñíbeis para compañías que acaden certa idade STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da compañía para compraventa de accións: {STRING} @@ -1599,9 +1597,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Colocación de árbores durante a partida: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla a aparición aleatoria de árbores durante a partida. Isto pode afectar ás industrias que dependan do crecemento arbóreo, por exemplo o serradoiro -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Ningún {RED}(rompe o serradoiro) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Só nos bosques -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :En todas partes STR_CONFIG_SETTING_TOOLBAR_POS :Posición da barra de ferramentas principal: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posición horizontal da barra de ferramentas principal da parte superior da pantalla @@ -1757,6 +1752,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}...ignor STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memoria esgotada STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE} Fallo ao reservar {BYTES} de caché de sprites. A caché de sprites reduciuse a {BYTES}. Isto reducirá o rendemento de OpenTTD. Para reducir os requisitos de memoria podes tentar deshabilitar os gráficos 32bpp e/ou niveles de zoom +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1800,18 +1797,9 @@ STR_INTRO_TRANSLATION :{BLACK}A ista t # Quit window STR_QUIT_CAPTION :{WHITE}Saír -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Estás seguro de que queres saír e voltar a {STRING}? STR_QUIT_YES :{BLACK}Si STR_QUIT_NO :{BLACK}Non -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Saír da partida STR_ABANDON_GAME_QUERY :{YELLOW}Estás seguro de que queres saír desta partida? @@ -1820,7 +1808,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Estás # Cheat window STR_CHEATS :{WHITE}Trampulladas STR_CHEATS_TOOLTIP :{BLACK}As caixas de confirmación indican se usaches esta trampa antes -STR_CHEATS_WARNING :{BLACK}Coidado! Estás a piques de traizoar aos teus competidores. Ten en conta que un escándalo coma este vai ser lembrado eternamente STR_CHEAT_MONEY :{LTBLUE}Incrementar os cartos en {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Xogando coma compañía: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadora máxica (elimina industrias, obxectos non eliminables): {ORANGE}{STRING} @@ -1932,10 +1919,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambia-l # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multixogador -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Anunciado -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Escolle entre unha partida con anuncios (internet) ou sen eles (LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Non -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Si STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome do xogador: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Este é o nome polo que te identificarán os outros xogadores @@ -1976,8 +1959,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Unirse STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Actualizar servidor STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Actualiza-la información do servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Procurar servidor -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Buscar un servidor na rede STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Engadir servidor STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Engade un servidor á lista que será comprobado sempre para buscar partidas. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor @@ -1994,6 +1975,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Establecer contrasinal STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protexe a túa partida cun contrasinal se non queres ser accesible públicamente +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciado +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escolle entre unha partida con anuncios (internet) ou sen eles (LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Non STR_NETWORK_START_SERVER_ADVERTISED :Si STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} @@ -2107,7 +2090,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova compañía # Network client list STR_NETWORK_CLIENTLIST_KICK :Chimpar STR_NETWORK_CLIENTLIST_BAN :Bloquear -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Dar cartos STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Falar a todos STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Falar con compañía STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mensaxe privada @@ -2116,8 +2098,6 @@ STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente STR_NETWORK_SPECTATORS :Espectadores -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introduce a cantidade de cartos que queres dar - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Non grava-lo contrasinal introducido STR_COMPANY_PASSWORD_OK :{BLACK}Asignar á compañía o novo contrasinal @@ -2217,8 +2197,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} un STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} comezou unha nova compañía (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} saiu da partida ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} cambiou o seu nome a {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} deu á túa companía {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Diches a {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} deu {2:CURRENCY_LONG} a {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}O servidor pechou a sesión STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servidor estase a reiniciar...{}Agarda por favor... @@ -2295,6 +2274,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Si, descarga os gráficos STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Non, abandona OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Opcións de Transparencia STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Habilitar transparencia para os rótulos. CTRL+Click para bloquear @@ -2336,6 +2316,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Constru STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unir punto de ruta STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Constrúe un un punto de ruta separado +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construción de Ferrocarrís STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construción de Vías Electrificadas @@ -2523,7 +2505,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Tamaño: STR_OBJECT_CLASS_LTHS :Faros STR_OBJECT_CLASS_TRNS :Transmisores -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Árbores STR_PLANT_TREE_TOOLTIP :{BLACK}Selecciona-lo tipo de árbore a plantar. Se xa hai unha árbore no cadro, isto engadirá máis árbores de varios tipos independentemente do tipo seleccionado STR_TREES_RANDOM_TYPE :{BLACK}Árbores de tipo aleatorio @@ -2826,14 +2808,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nº de cidades: STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Nº de industrias: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Altura máxima do mapa: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Aumenta a altura máxima dos montes do mapa en un -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Diminiuir a altura máxima dos montes do mapa en un -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Cota de neve: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Subir a cota de neve unha altura -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Baixar a cota de neve unha altura STR_MAPGEN_LAND_GENERATOR :{BLACK}Xerador de terreo: -STR_MAPGEN_TREE_PLACER :{BLACK}Algoritmo para árbores: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipo de terreo: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Nivel do mar: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Ríos: @@ -2858,8 +2833,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamaño: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Cambiar altura máxima do mapa -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Cambiar a altura da cota de neve STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Cambia-lo ano de inicio # SE Map generation @@ -3149,13 +3122,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Suborna STR_GOALS_CAPTION :{WHITE}{COMPANY} Obxectivos STR_GOALS_SPECTATOR_CAPTION :{WHITE}Obxectivos globais STR_GOALS_SPECTATOR :Obxectivos globais -STR_GOALS_GLOBAL_TITLE :{BLACK}Obxectivos globais: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Ningún - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Non aplicábel - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Obxectivos da compañía: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Pincha nun obxectivo para centra-la vista principal na industria/cidade/cadro. Ctrl+Click abre unha nova ventá na localización da industria/cidade/cadro # Goal question window @@ -3725,10 +3695,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Facer qu # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrar a vista principal na situación do tren. Ctrl+click seguirá ao tren na vista principal -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrar a vista principal na situación do vehículo. Ctrl+click seguirá ao vehículo na vista principal -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrar a vista principal na situación do barco. Ctrl+click seguirá ao barco na vista principal -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centra-la vista principal na situación do avión. Ctrl+click seguirá ao avión na vista principal STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Enviar tren ao depósito. Ctrl+click para facer só servizo STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Envia-lo vehículo ao depósito. Ctrl click para facer só servizo @@ -3760,10 +3726,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Mostra-l STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Mostra-los detalles do barco STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Mostra-los detalles do avión -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual do tren - pincha para deter/arrancar o tren. Ctrl+click para desprazarse ao destino -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual do vehículo - pincha para parar/arrancar o vehículo. Ctrl+click para desprazarse ao destino -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual do barco - pincha para parar/arrancar o barco. Ctrl+click para desprazarse ao destino -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Acción actual do avión - pincha para parar/arrancar o avión. Ctrl+click para desprazarse ao destino + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Cargando / Descargando diff --git a/src/lang/german.txt b/src/lang/german.txt index 6e8debe354..26d9b4dc8c 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=m}Weizen STR_CARGO_PLURAL_RUBBER :{G=m}Kautschuk STR_CARGO_PLURAL_SUGAR :{G=m}Zucker STR_CARGO_PLURAL_TOYS :{G=p}Spielzeuge -STR_CARGO_PLURAL_CANDY :{G=p}Bonbons +STR_CARGO_PLURAL_SWEETS :{G=p}Bonbons STR_CARGO_PLURAL_COLA :{G=w}Cola -STR_CARGO_PLURAL_COTTON_CANDY :{G=w}Zuckerwatte +STR_CARGO_PLURAL_CANDYFLOSS :{G=w}Zuckerwatte STR_CARGO_PLURAL_BUBBLES :{G=p}Luftblasen STR_CARGO_PLURAL_TOFFEE :{G=n}Karamell STR_CARGO_PLURAL_BATTERIES :{G=p}Batterien @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=n}Weizen STR_CARGO_SINGULAR_RUBBER :{G=m}Kautschuk STR_CARGO_SINGULAR_SUGAR :{G=m}Zucker STR_CARGO_SINGULAR_TOY :{G=n}Spielzeug -STR_CARGO_SINGULAR_CANDY :{G=m}Bonbon +STR_CARGO_SINGULAR_SWEETS :{G=m}Bonbon STR_CARGO_SINGULAR_COLA :{G=w}Cola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=w}Zuckerwatte +STR_CARGO_SINGULAR_CANDYFLOSS :{G=w}Zuckerwatte STR_CARGO_SINGULAR_BUBBLE :{G=w}Luftblase STR_CARGO_SINGULAR_TOFFEE :{G=n}Karamell STR_CARGO_SINGULAR_BATTERY :{G=w}Batterie @@ -195,6 +195,7 @@ STR_COLOUR_DEFAULT :Standard STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}Kacheln/Tag STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}PS STR_UNITS_POWER_METRIC :{COMMA}{NBSP}PS @@ -233,21 +234,25 @@ STR_TOOLTIP_GROUP_ORDER :{BLACK}Gruppier STR_TOOLTIP_SORT_ORDER :{BLACK}Sortierreihenfolge auswählen (absteigend/aufsteigend) STR_TOOLTIP_SORT_CRITERIA :{BLACK}Sortierkriterien auswählen STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Filterkriterien auswählen +STR_BUTTON_FILTER :{BLACK}Filter +STR_BUTTON_FILTER_SELECT_ALL :Alle auswählen +STR_BUTTON_FILTER_SELECT_NONE :Keine auswählen STR_BUTTON_SORT_BY :{BLACK}Sortieren nach -STR_BUTTON_LOCATION :{BLACK}Standort -STR_BUTTON_RENAME :{BLACK}Umbenennen +STR_BUTTON_CATCHMENT :{BLACK}Einzugsgebiet +STR_TOOLTIP_CATCHMENT :{BLACK}Anzeige des Einzugsgebietes umschalten STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fenster schließen STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Titelleiste klicken und ziehen, um das Fenster zu verschieben -STR_TOOLTIP_SHADE :{BLACK}Fenster einklappen - Nur die Titelleiste zeigen +STR_TOOLTIP_SHADE :{BLACK}Fenster einklappen – Nur die Titelleiste zeigen STR_TOOLTIP_DEBUG :{BLACK}Zeige Daten für NewGRF-Fehlerbeseitigung STR_TOOLTIP_DEFSIZE :{BLACK}Standardgröße des Fensters wieder herstellen. Strg+Klick um die aktuelle Größe als Standard zu speichern -STR_TOOLTIP_STICKY :{BLACK}Fenster wird nicht durch die "Schließe alle Fenster"-Taste geschlossen. Strg+Klick, um den Status als Standard zu speichern +STR_TOOLTIP_STICKY :{BLACK}Fenster wird nicht durch die „Schließe alle Fenster“-Taste geschlossen. Strg+Klick, um den Status als Standard zu speichern STR_TOOLTIP_RESIZE :{BLACK}Klicken und Ziehen zum Ändern der Größe des Fensters STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Zwischen Fenstergrößen umschalten STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Bildlaufleiste: In der Liste auf- und abwärts blättern STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Bildlaufleiste: In der Liste nach links und rechts blättern -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Gebäude etc. von einem Planquadrat abreißen. Strg wählt ein diagonales Gebiet aus. Shift schaltet zwischen Bauen und Kostenvoranschlag um +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Gebäude etc. von einem Planquadrat abreißen. Strg wählt ein diagonales Gebiet aus. Umschalt schaltet zwischen Bauen und Kostenvoranschlag um +STR_TOOLTIP_DEMOLISH_TREES :{BLACK}Nur Bäume von einem Planquadrat abreißen. Strg wählt ein diagonales Gebiet aus # Show engines button STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Alle einblenden @@ -264,6 +269,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Zeigt au STR_BUTTON_DEFAULT :{BLACK}Standard STR_BUTTON_CANCEL :{BLACK}Abbrechen STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Warnung: Serveradministratoren können diesen Text einsehen. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :^1234567890ß'€qwertzuiopü+asdfghjklöä# @@ -3033,7 +3189,7 @@ STR_INVALID_VEHICLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spiel wurde in einer Version ohne Straßenbahnunterstützung gespeichert. Alle Straßenbahnen wurden entfernt # Map generation messages -STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Spielfeldgenerierung wurde abgebrochen...{}... kein geeigneter Platz für eine Stadt gefunden +STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Spielfeldgenerierung wurde abgebrochen ...{}... kein geeigneter Platz für eine Stadt gefunden STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... in diesem Szenario gibt es keine Stadt STR_ERROR_PNGMAP :{WHITE}Landschaft kann nicht aus PNG-Datei geladen werden... @@ -4185,7 +4388,7 @@ STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... Date STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... Bildtyp kann nicht umgewandelt werden. 8- oder 24-bit-PNG-Datei erforderlich STR_ERROR_PNGMAP_MISC :{WHITE}... irgendetwas ging schief. (Vielleicht eine kaputte Datei?) -STR_ERROR_BMPMAP :{WHITE}Landschaft kann nicht aus BMP-Datei geladen werden... +STR_ERROR_BMPMAP :{WHITE}Landschaft kann nicht aus BMP-Datei geladen werden ... STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... Bildtyp kann nicht umgewandelt werden STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... Bild ist zu groß @@ -4198,9 +4401,10 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Nur ein # Screenshot related messages STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Riesiger Screenshot -STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Der Screenshot wird die Auflösung von {COMMA} x {COMMA} Pixeln haben. Das kann einige Zeit dauern. Soll fortgefahren werden? +STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Der Screenshot wird die Auflösung von {COMMA} × {COMMA} Pixeln haben. Das kann einige Zeit dauern. Soll fortgefahren werden? -STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Screenshot gespeichert als '{STRING}' +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Reliefkarte erfolgreich als „{STRING}“ gespeichert. Der höchste Gipfel ist {NUM} +STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Screenshot gespeichert als „{STRING}“ STR_ERROR_SCREENSHOT_FAILED :{WHITE}Screenshot fehlgeschlagen # Error message titles @@ -4210,12 +4414,12 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Nachric # Generic construction errors STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Zu weit vom Spielfeldrand entfernt STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Zu nahe am Spielfeldrand -STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Nicht genug Geld - Es werden {CURRENCY_LONG} benötigt +STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Nicht genug Geld – Es werden {CURRENCY_LONG} benötigt STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Ebenes Land erforderlich STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Das Land neigt sich in die falsche Richtung -STR_ERROR_CAN_T_DO_THIS :{WHITE}Befehl nicht ausführbar... +STR_ERROR_CAN_T_DO_THIS :{WHITE}Befehl nicht ausführbar ... STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Gebäude muss erst abgerissen werden -STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Gebiet kann nicht geräumt werden... +STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Gebiet kann nicht geräumt werden ... STR_ERROR_SITE_UNSUITABLE :{WHITE}... ungeeigneter Standort STR_ERROR_ALREADY_BUILT :{WHITE}... ist bereits gebaut STR_ERROR_OWNED_BY :{WHITE}... Eigentum von {STRING} @@ -4234,9 +4438,9 @@ STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}Die Stad STR_ERROR_BRIBE_FAILED :{WHITE}Der Bestechungsversuch wurde von einem Ermittler entdeckt. # Levelling errors -STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Land kann nicht angehoben werden... -STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Land kann nicht abgesenkt werden... -STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Land kann nicht eingeebnet werden... +STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Land kann nicht angehoben werden ... +STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Land kann nicht abgesenkt werden ... +STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Land kann nicht eingeebnet werden ... STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}Die Ausschachtung würde den Tunnel zerstören STR_ERROR_ALREADY_AT_SEA_LEVEL :{WHITE}... ist bereits auf Meereshöhe STR_ERROR_TOO_HIGH :{WHITE}... zu hoch @@ -4244,40 +4448,41 @@ STR_ERROR_ALREADY_LEVELLED :{WHITE}... ist STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}Anschließend wäre die Brücke darüber zu hoch. # Company related errors -STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Firmenname kann nicht geändert werden... -STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Managername kann nicht geändert werden... +STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Firmenname kann nicht geändert werden ... +STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Managername kann nicht geändert werden ... STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... maximale Kredithöhe beträgt {CURRENCY_LONG} STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Weitere Kreditaufnahme nicht möglich ... STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... Kredit bereits getilgt STR_ERROR_CURRENCY_REQUIRED :{WHITE}... erfordert {CURRENCY_LONG} -STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Kredit kann nicht getilgt werden... -STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Von der Bank geliehenes Geld kann nicht abgegeben werden... -STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Firmenkauf nicht möglich... +STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Kredit kann nicht getilgt werden ... +STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Von der Bank geliehenes Geld kann nicht abgegeben werden ... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Geld kann nicht an diese Firma verschenkt werden ... +STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Firmenkauf nicht möglich ... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Firmensitz kann nicht gebaut werden ... -STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Kauf von 25% der Aktien dieser Firma nicht möglich... -STR_ERROR_CAN_T_SELL_25_SHARE_IN :{WHITE}Verkauf von 25% der Aktien dieser Firma nicht möglich... +STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Kauf von 25% der Aktien dieser Firma nicht möglich ... +STR_ERROR_CAN_T_SELL_25_SHARE_IN :{WHITE}Verkauf von 25% der Aktien dieser Firma nicht möglich ... STR_ERROR_PROTECTED :{WHITE}Diese Firma ist noch nicht alt genug, um an der Börse gehandelt zu werden... # Town related errors STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Bau von Städten unmöglich -STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Die Stadt kann nicht umbenannt werden... -STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Stadt kann hier nicht gegründet werden... -STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Stadt kann nicht vergrößert werden... +STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Die Stadt kann nicht umbenannt werden ... +STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Stadt kann hier nicht gegründet werden ... +STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Stadt kann nicht vergrößert werden ... STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... zu dicht am Spielfeldrand STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... zu dicht an einer anderen Stadt STR_ERROR_TOO_MANY_TOWNS :{WHITE}... zu viele Städte STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... es ist kein Platz mehr auf dem Spielfeld STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Städte bauen im Moment keine Straßen. Städtischer Straßenbau kann mittels Einstellungen->Umgebung->Städte eingestellt werden STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Straßenarbeiten sind im Gange -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Stadt kann nicht gelöscht werden...{}Eine Station oder ein Depot bezieht sich auf diese Stadt oder ein Feld im städtischen Besitz kann nicht entfernt werden. +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Stadt kann nicht gelöscht werden ...{}Eine Station oder ein Depot bezieht sich auf diese Stadt oder ein Feld im städtischen Besitz kann nicht entfernt werden. STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... es gibt keinen geeigneten Standort für die Statue im Zentrum dieser Stadt # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... zu viele Industrien -STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Industrie kann nicht erzeugt werden... -STR_ERROR_CAN_T_BUILD_HERE :{WHITE}{STRING} kann hier nicht gebaut werden... -STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Industrie kann hier nicht gebaut werden... +STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Industrie kann nicht erzeugt werden ... +STR_ERROR_CAN_T_BUILD_HERE :{WHITE}{STRING} kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Industrie kann hier nicht gebaut werden ... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... zu nah an einer anderen Industrie STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... erst muss eine Stadt gegründet werden STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... pro Stadt nur einmal erlaubt @@ -4292,41 +4497,41 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... Wald STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... kann nur oberhalb der Schneegrenze errichtet werden STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... kann nur unterhalb der Schneegrenze errichtet werden -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Es konnten für die Industrie '{STRING}' keine geeigneten Standorte gefunden werden -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Ändere die Karteneinstellungen, um eine bessere Karte zu erzeugen +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Es konnten für die Industrie „{STRING}“ keine geeigneten Standorte gefunden werden +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Karteneinstellungen ändern, um eine bessere Karte zu erzeugen # Station construction related errors -STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Bahnhof kann hier nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Bushaltestelle kann nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Lkw-Ladeplatz kann nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Straßenbahnhaltestelle kann hier nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Güterverladestelle kann hier nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Hafen kann hier nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Flughafen kann hier nicht gebaut werden... +STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Bahnhof kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Bushaltestelle kann nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Lkw-Ladeplatz kann nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Straßenbahnhaltestelle kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Güterverladestelle kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Hafen kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Flughafen kann hier nicht gebaut werden ... STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Grenzt an mehr als eine vorhandene Station -STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}...Station ist zu groß +STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... Station ist zu groß STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Zu viele Stationen im Umkreis STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Zu viele Bahnsteigteile STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Zu viele Bushaltestellen STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Zu viele Lkw-Ladeplätze STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Zu dicht an einem anderen Hafen STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Zu dicht an einem anderen Flughafen -STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Station kann nicht umbenannt werden... +STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Station kann nicht umbenannt werden ... STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... diese Straße ist in kommunaler Trägerschaft STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... Straße verläuft in die falsche Richtung STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... Bus- und Lkw-Haltestellen können nicht um die Kurve gehen STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... Bus- und Lkw-Haltestellen können keine Abzweigung haben # Station destruction related errors -STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Dieser Teil der Station kann nicht entfernt werden... +STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Dieser Teil der Station kann nicht entfernt werden ... STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Bahnhof muss erst abgerissen werden -STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Bushaltestelle kann nicht entfernt werden... -STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}LKW-Ladestelle kann nicht entfernt werden... -STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Straßenbahnhaltestelle kann nicht entfernt werden... -STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Güterverladestelle kann nicht entfernt werden... +STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Bushaltestelle kann nicht entfernt werden ... +STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Lkw-Ladestelle kann nicht entfernt werden ... +STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Straßenbahnhaltestelle kann nicht entfernt werden ... +STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Güterverladestelle kann nicht entfernt werden ... STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Haltestelle muss erst entfernt werden -STR_ERROR_THERE_IS_NO_STATION :{WHITE}...hier ist keine Station +STR_ERROR_THERE_IS_NO_STATION :{WHITE}... hier ist keine Station STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Bahnhof muss erst abgerissen werden STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Bushaltestelle muss erst abgerissen werden @@ -4340,35 +4545,35 @@ STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Flughafe STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Grenzt an mehr als einen vorhandenen Wegpunkt STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Zu nahe an einem anderen Wegpunkt -STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Wegpunkt kann hier nicht gebaut werden... -STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Boje kann hier nicht platziert werden... -STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Wegpunktname kann nicht geändert werden... +STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Wegpunkt kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Boje kann hier nicht platziert werden ... +STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Wegpunktname kann nicht geändert werden ... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Wegpunkt kann hier nicht entfernt werden... +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Wegpunkt kann hier nicht entfernt werden ... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Wegpunkt muss erst abgerissen werden STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... Boje ist im Weg STR_ERROR_BUOY_IS_IN_USE :{WHITE}... Boje wird von einer anderen Firma benutzt! # Depot related errors -STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Zugdepot kann hier nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Fahrzeugdepot kann hier nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Straßenbahndepot kann hier nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Werft kann hier nicht gebaut werden... +STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Zugdepot kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Fahrzeugdepot kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Straßenbahndepot kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Werft kann hier nicht gebaut werden ... -STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Depot kann nicht umbenannt werden... +STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Depot kann nicht umbenannt werden ... -STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}...der Zug muss dazu im Depot halten -STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}...das Straßenfahrzeug muss dazu in einem Depot halten -STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}...das Schiff muss dazu in der Werft halten -STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}...das Flugzeug muss dazu im Hangar halten +STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... der Zug muss dazu im Depot halten +STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... das Straßenfahrzeug muss dazu in einem Depot halten +STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... das Schiff muss dazu in der Werft halten +STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... das Flugzeug muss dazu im Hangar halten STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Züge können nur verändert werden, wenn sie im Depot halten STR_ERROR_TRAIN_TOO_LONG :{WHITE}Zug zu lang -STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Fahrzeug kann nicht umgedreht werden... +STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Fahrzeug kann nicht umgedreht werden ... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}Fahrzeuge, die aus mehreren Einheiten bestehen, können nicht umgedreht werden STR_ERROR_INCOMPATIBLE_RAIL_TYPES :inkompatible Gleistypen -STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Fahrzeug kann nicht bewegt werden... +STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Fahrzeug kann nicht bewegt werden ... STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}Hintere Lok folgt immer der vorderen Lok STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Weg zum Depot kann nicht gefunden werden STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Fahrzeugdepot unauffindbar @@ -4379,54 +4584,61 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Falscher Depott STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} ist nach Ersetzung zu lang STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Es treffen keine Ersetzungs-/Erneuerungsregeln zu STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(Geld fehlt) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Neues Fahrzeug kann diesen Frachttyp nicht transportieren. {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Neues Fahrzeug kann nicht wie geplant umgerüstet werden {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Unmögliche Gleisverbindung -STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Signal muß zuerst entfernt werden +STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Signal muss zuerst entfernt werden STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Keine geeigneten Gleise STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Gleise müssen erst abgerissen werden STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Einbahnstraße oder blockierter Weg STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Bahnübergänge sind für diesen Schienentyp nicht erlaubt -STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Signal kann hier nicht aufgestellt werden... -STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Gleise können hier nicht verlegt werden... -STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Gleise können nicht abgerissen werden... -STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Signale können hier nicht entfernt werden... -STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Kann Signaltyp hier nicht ändern... +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Bahnübergänge sind für diesen Straßentyp nicht erlaubt +STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Signal kann hier nicht aufgestellt werden ... +STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Gleise können hier nicht verlegt werden ... +STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Gleise können nicht abgerissen werden ... +STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Signale können hier nicht entfernt werden ... +STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Kann Signaltyp hier nicht ändern ... STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}... hier ist kein Gleis STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... hier sind keine Signale -STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Gleistyp kann hier nicht geändert werden... +STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Gleistyp kann hier nicht geändert werden ... # Road construction errors STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Straße muss erst entfernt werden STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... Einbahnstraßen können keine Abzweigung haben -STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Straße kann hier nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Straßenbahngleise können hier nicht gebaut werden... -STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Diese Straße kann nicht entfernt werden... -STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Straßenbahngleise können hier nicht entfernt werden... -STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...hier ist keine Straße -STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...hier ist kein Straßenbahngleis -STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Straßenbahngleistyp kann hier nicht geändert werden... +STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Straße kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Straßenbahngleise können hier nicht gebaut werden ... +STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Diese Straße kann nicht entfernt werden ... +STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Straßenbahngleise können hier nicht entfernt werden ... +STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... hier ist keine Straße +STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... hier ist kein Straßenbahngleis +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Straßentyp kann hier nicht geändert werden ... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Straßenbahngleistyp kann hier nicht geändert werden ... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Keine geeignete Straße +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Keine geeigneten Straßenbahnschienen +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... inkompatible Straßenbahngleise # Waterway construction errors -STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kanal kann hier nicht gebaut werden... -STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Schleuse kann hier nicht gebaut werden... -STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Flüsse können hier nicht platziert werden... +STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kanal kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Schleuse kann hier nicht gebaut werden ... +STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Flüsse können hier nicht platziert werden ... STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... muss auf Wasser gebaut werden STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... kann nicht auf Wasser gebaut werden STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... kann nicht auf offener See errichtet werden STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... kann nicht auf Kanal errichtet werden -STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... kann nicht auf Fluß errichtet werden +STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... kann nicht auf Fluss errichtet werden STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Kanal muss erst abgerissen werden -STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Aquädukt kann hier nicht gebaut werden... +STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Aquädukt kann hier nicht gebaut werden ... # Tree related errors STR_ERROR_TREE_ALREADY_HERE :{WHITE}... hier sind bereits Bäume STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE :{WHITE}... falsches Gelände für die Baumart -STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Baum kann hier nicht gepflanzt werden... +STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Baum kann hier nicht gepflanzt werden ... # Bridge related errors -STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Brücke kann hier nicht gebaut werden... +STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Brücke kann hier nicht gebaut werden ... STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Die Brücke muss erst abgerissen werden STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Anfang und Ende können nicht im selben Feld liegen STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Brückenköpfe nicht auf der selben Höhe @@ -4438,7 +4650,7 @@ STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... Brü STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Die Brücke würde außerhalb der Karte enden # Tunnel related errors -STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Tunnel kann hier nicht gebaut werden... +STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Tunnel kann hier nicht gebaut werden ... STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Platz ist nicht für einen Tunnel geeignet STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Der Tunnel muss zuerst abgerissen werden STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Ein anderer Tunnel ist im Weg @@ -4448,20 +4660,21 @@ STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... Tunn # Object related errors STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... zu viele Objekte -STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Objekt kann nicht gebaut werden... -STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Gegenstand im Weg +STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Objekt kann nicht gebaut werden ... +STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Objekt im Weg STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... Firmensitz ist im Weg -STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Das Land kann nicht erworben werden... +STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Das Land kann nicht erworben werden ... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... ist bereits im Besitz der eigenen Firma! # Group related errors -STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Gruppe kann nicht erstellt werden... -STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Gruppe kann nicht gelöscht werden... -STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Gruppe kann nicht umbenannt werden... -STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Übergeordnete Gruppe kann nicht gesetzt werden... -STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Entfernen aller Fahrzeuge dieser Gruppe nicht möglich... -STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Fahrzeug kann nicht zu dieser Gruppe hinzugefügt werden... -STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Fahrzeuge mit gemeinsamen Fahrplan können nicht zur Gruppe hinzugefügt werden... +STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Gruppe kann nicht erstellt werden ... +STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Gruppe kann nicht gelöscht werden ... +STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Gruppe kann nicht umbenannt werden ... +STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Übergeordnete Gruppe kann nicht gesetzt werden ... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... Schleifen sind in der Gruppenhierarchie nicht erlaubt +STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Entfernen aller Fahrzeuge dieser Gruppe nicht möglich ... +STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Fahrzeug kann nicht zu dieser Gruppe hinzugefügt werden ... +STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Fahrzeuge mit gemeinsamen Fahrplan können nicht zur Gruppe hinzugefügt werden ... # Generic vehicle errors STR_ERROR_TRAIN_IN_THE_WAY :{WHITE}Zug ist im Weg @@ -4469,40 +4682,40 @@ STR_ERROR_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Fahrzeug STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Schiff ist im Weg STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}Flugzeug ist auf dem Weg -STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}Zug kann nicht umgerüstet werden... -STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}Straßenfahrzeug kann nicht umgerüstet werden... -STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Schiff kann nicht umgerüstet werden... +STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}Zug kann nicht umgerüstet werden ... +STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}Straßenfahrzeug kann nicht umgerüstet werden ... +STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Schiff kann nicht umgerüstet werden ... STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}Flugzeug kann nicht umgerüstet werden... -STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}Zug kann nicht benannt werden... -STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht benannt werden... -STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}Schiff kann nicht benannt werden... -STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}Flugzeug kann nicht benannt werden... +STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}Zug kann nicht benannt werden ... +STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht benannt werden ... +STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}Schiff kann nicht benannt werden ... +STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}Flugzeug kann nicht benannt werden ... STR_ERROR_CAN_T_STOP_START_TRAIN :{WHITE}Zug kann nicht angehalten{} oder losgeschickt werden ... -STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht angehalten{} oder losgeschickt werden... -STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Schiff kann nicht angehalten{} oder losgeschickt werden... -STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Flugzeug kann nicht angehalten{} oder losgeschickt werden... +STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht angehalten{} oder losgeschickt werden ... +STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Schiff kann nicht angehalten{} oder losgeschickt werden ... +STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Flugzeug kann nicht angehalten{} oder losgeschickt werden ... -STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Zug kann nicht ins Depot geschickt werden... -STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Fahrzeug kann nicht ins Depot geschickt werden... -STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Schiff kann nicht in die Werft geschickt werden... -STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Flugzeug kann nicht in den Hangar geschickt werden... +STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Zug kann nicht ins Depot geschickt werden ... +STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Fahrzeug kann nicht ins Depot geschickt werden ... +STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Schiff kann nicht in die Werft geschickt werden ... +STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Flugzeug kann nicht in den Hangar geschickt werden ... -STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Schienenfahrzeug kann nicht gekauft werden... -STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht gekauft werden... -STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Schiff kann nicht gekauft werden... -STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Flugzeug kann nicht gekauft werden... +STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Schienenfahrzeug kann nicht gekauft werden ... +STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht gekauft werden ... +STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Schiff kann nicht gekauft werden ... +STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Flugzeug kann nicht gekauft werden ... -STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Zugtyp kann nicht umbenannt werden... -STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Fahrzeug kann nicht umbenannt werden... -STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Schiffstyp kann nicht umbenannt werden... -STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Flugzeug kann nicht umbenannt werden... +STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Zugtyp kann nicht umbenannt werden ... +STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Fahrzeug kann nicht umbenannt werden ... +STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Schiffstyp kann nicht umbenannt werden ... +STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Flugzeug kann nicht umbenannt werden ... -STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Schienenfahrzeug kann nicht verkauft werden... -STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht verkauft werden... -STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Schiff kann nicht verkauft werden... -STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Flugzeug kann nicht verkauft werden... +STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Schienenfahrzeug kann nicht verkauft werden ... +STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Fahrzeug kann nicht verkauft werden ... +STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Schiff kann nicht verkauft werden ... +STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Flugzeug kann nicht verkauft werden ... STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Fahrzeug nicht verfügbar STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Fahrzeug nicht verfügbar @@ -4510,7 +4723,7 @@ STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Schiff n STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Flugzeug nicht verfügbar STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Zu viele Fahrzeuge im Spiel -STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Das Wartungsintervall kann nicht geändert werden... +STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Das Wartungsintervall kann nicht geändert werden ... STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... Fahrzeug ist zerstört @@ -4520,58 +4733,58 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Noch kei STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Ein neues Spiel nach {DATE_SHORT} beginnen oder ein NewGRF-Fahrzeugset mit früher verfügbaren Fahrzeugen verwenden # Specific vehicle errors -STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Der Zug kann das Signal nicht gefahrlos passieren... -STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Die Zugbewegung kann nicht umgekehrt werden... +STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Der Zug kann das Signal nicht gefahrlos passieren ... +STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Die Zugbewegung kann nicht umgekehrt werden ... STR_ERROR_TRAIN_START_NO_POWER :Der Zug hat keine Antriebsenergie -STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}Das Fahrzeug kann nicht wenden... +STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}Das Fahrzeug kann nicht wenden ... STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Das Flugzeug ist in der Luft # Order related errors STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Kein Platz für weitere Aufträge STR_ERROR_TOO_MANY_ORDERS :{WHITE}Zu viele Aufträge -STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Neuer Auftrag kann nicht hinzugefügt werden... -STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Auftrag kann nicht gelöscht werden... -STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Auftrag kann nicht bearbeitet werden... -STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Auftrag kann nicht verschoben werden... -STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Auftrag kann nicht ausgelassen werden... -STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Springen zum ausgewählten Auftrag nicht möglich... +STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Neuer Auftrag kann nicht hinzugefügt werden ... +STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Auftrag kann nicht gelöscht werden ... +STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Auftrag kann nicht bearbeitet werden ... +STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Auftrag kann nicht verschoben werden ... +STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Auftrag kann nicht ausgelassen werden ... +STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Springen zum ausgewählten Auftrag nicht möglich ... STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... Fahrzeug kann nicht alle Stationen erreichen STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... Fahrzeug kann diese Station nicht erreichen STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... ein Fahrzeug, welches diesen gemeinsamen Fahrplan nutzt, kann die Station nicht erreichen -STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Fehler beim Erstellen eines gemeinsam genutzten Fahrplans... +STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Fehler beim Erstellen eines gemeinsam genutzten Fahrplans ... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Gemeinsame Aufträge können nicht aufgehoben werden... -STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Fahrplan kann nicht kopiert werden... +STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Fahrplan kann nicht kopiert werden ... STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... zu weit vom vorherigen Bestimmungsort entfernt STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... Luftfahrzeug hat zu geringe Reichweite # Timetable related errors -STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Fahrplan kann nicht erstellt werden... +STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Fahrplan kann nicht erstellt werden ... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Fahrzeuge halten nur an Stationen STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Das Fahrzeug hält nicht an dieser Station # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... zu viele Schilder -STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}Schild kann hier nicht aufgestellt werden... -STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}Schildtext kann nicht geändert werden... +STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}Schild kann hier nicht aufgestellt werden ... +STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}Schildtext kann nicht geändert werden ... STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Kann Schild nicht löschen... # Translatable comment for OpenTTD's desktop shortcut STR_DESKTOP_SHORTCUT_COMMENT :Ein auf der Idee von Transport Tycoon Deluxe basierendes Spiel # Translatable descriptions in media/baseset/*.ob* files -STR_BASEGRAPHICS_DOS_DESCRIPTION :Original Transport Tycoon Deluxe DOS Basisgrafiken. -STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Original Transport Tycoon Deluxe DOS (Deutsch) Basisgrafiken. -STR_BASEGRAPHICS_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Basisgrafiken. -STR_BASESOUNDS_DOS_DESCRIPTION :Original Transport Tycoon Deluxe DOS Basissounds. -STR_BASESOUNDS_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Basissounds. -STR_BASESOUNDS_NONE_DESCRIPTION :Basissounds ohne Sound. -STR_BASEMUSIC_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Musikset. -STR_BASEMUSIC_DOS_DESCRIPTION :Original Transport Tycoon Deluxe DOS edition music. -STR_BASEMUSIC_TTO_DESCRIPTION :Original Transport Tycoon (Original/World Editor) DOS edition music. -STR_BASEMUSIC_NONE_DESCRIPTION :Ein Musikset ohne Musik. +STR_BASEGRAPHICS_DOS_DESCRIPTION :Originale „Transport Tycoon Deluxe“-DOS-Basisgrafiken. +STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Originale „Transport Tycoon Deluxe“-DOS-Basisgrafiken (Deutsch). +STR_BASEGRAPHICS_WIN_DESCRIPTION :Originale „Transport Tycoon Deluxe“-Windows-Basisgrafiken. +STR_BASESOUNDS_DOS_DESCRIPTION :Originale „Transport Tycoon Deluxe“-DOS-Basissounds. +STR_BASESOUNDS_WIN_DESCRIPTION :Originale „Transport Tycoon Deluxe“-Windows-Basissounds. +STR_BASESOUNDS_NONE_DESCRIPTION :Ein Soundpaket ohne Sounds. +STR_BASEMUSIC_WIN_DESCRIPTION :Originale Musik von Transport Tycoon Deluxe in der Windows-Edition. +STR_BASEMUSIC_DOS_DESCRIPTION :Originale Musik von Transport Tycoon Deluxe in der DOS-Edition. +STR_BASEMUSIC_TTO_DESCRIPTION :Originale Musik von Transport Tycoon (Original / World Editor) in der DOS-Edition. +STR_BASEMUSIC_NONE_DESCRIPTION :Ein Musikpaket ohne Musik. ##id 0x2000 # Town building names @@ -4654,10 +4867,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=w}Zuckermine ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Unbenannt -STR_SV_TRAIN_NAME :Zug {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Straßenfahrzeug {COMMA} -STR_SV_SHIP_NAME :Schiff {COMMA} -STR_SV_AIRCRAFT_NAME :Flugzeug {COMMA} +STR_SV_TRAIN_NAME :Zug #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Straßenfahrzeug #{COMMA} +STR_SV_SHIP_NAME :Schiff #{COMMA} +STR_SV_AIRCRAFT_NAME :Flugzeug #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} Nord @@ -4674,13 +4887,13 @@ STR_SV_STNAME_LAKESIDE :{STRING} Seebli STR_SV_STNAME_EXCHANGE :{STRING} Abzweigung STR_SV_STNAME_AIRPORT :{STRING} Flughafen STR_SV_STNAME_OILFIELD :{STRING} Ölfeld -STR_SV_STNAME_MINES :{STRING} Mine +STR_SV_STNAME_MINES :{STRING} Bergwerk STR_SV_STNAME_DOCKS :{STRING} Hafen -STR_SV_STNAME_BUOY :{STRING} +STR_SV_STNAME_BUOY :{STRING} Boje STR_SV_STNAME_WAYPOINT :{STRING} ##id 0x6020 STR_SV_STNAME_ANNEXE :{STRING} Anbau -STR_SV_STNAME_SIDINGS :{STRING} Nebengleis +STR_SV_STNAME_SIDINGS :{STRING} Seite STR_SV_STNAME_BRANCH :{STRING} Abzweig STR_SV_STNAME_UPPER :Ober-{STRING} STR_SV_STNAME_LOWER :Unter-{STRING} @@ -4699,25 +4912,25 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Cho STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut Diesel STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut Diesel STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (Dampf) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (Dampf) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (Dampf) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (Dampf) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney „Jubilee“ (Dampf) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu „A4“ (Dampf) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH „8P“ (Dampf) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel VT (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (Diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :„Dash“ (Diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry „25“ (Diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU „37“ (Diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss „47“ (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_2400_DIESEL :CS 2400 (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CENTENNIAL_DIESEL :Centennial (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH „125“ (Diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH „30“ (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH „40“ (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :„T.I.M.“ (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :„AsiaStar“ (Elektrisch) STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Passagierwaggon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Postwaggon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Kohlenwaggon @@ -4745,8 +4958,8 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Spielzeugtransp STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Batterietransporter STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Limonadentransporter STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Plastiktransporter -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :„X2001“ (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :„Millennium Z1“ (Elektrisch) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Passagierwaggon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Postwaggon @@ -4775,12 +4988,12 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Spielwarentrans STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Batterietransporter STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Limonadetransporter STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Plastikwaggon -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 „Leviathan“ (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 „Cyclops“ (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 „Pegasus“ (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 „Chimaera“ (Elektrisch) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Passagierwaggon (Magnetschwebebahn) +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Passagierwaggon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Postwaggon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COAL_CAR :Kohlewaggon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_OIL_TANKER :Öltanker @@ -4807,105 +5020,105 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOY_VAN :Spielwarentrans STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BATTERY_TRUCK :Batterielaster STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FIZZY_DRINK_TRUCK :Limonadetransporter STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PLASTIC_TRUCK :Plastikwaggon -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_REGAL_BUS :MPS Regal Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_LEOPARD_BUS :Hereford Leopard Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_BUS :Foster Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_MKII_SUPERBUS :Foster MkII Superbus -STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKI_BUS :Ploddyphut MkI Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKII_BUS :Ploddyphut MkII Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :Ploddyphut MkIII Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_COAL_TRUCK :Balogh Kohlelaster -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COAL_TRUCK :Uhl Kohlelaster -STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :DW Kohlelaster -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :MPS Postwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Reynard Postwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Perry Postwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :MightyMover Postwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Powernaught Postwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Wizzowow Postwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :Witcombe Öltanker -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :Foster Öltanker -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :Perry Öltanker -STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :Talbott Viehtransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :Uhl Viehtransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :Foster Viehtransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :Balogh Gütertransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :Craighead Gütertransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :Goss Gütertransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_GRAIN_TRUCK :Hereford Getreidetransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_THOMAS_GRAIN_TRUCK :Thomas Getreidetransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GRAIN_TRUCK :Goss Getreidetransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_WOOD_TRUCK :Witcombe Holzlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_WOOD_TRUCK :Foster Holzlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :Moreland Holzlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_IRON_ORE_TRUCK :MPS Eisenerzlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_IRON_ORE_TRUCK :Uhl Eisenerzlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_IRON_ORE_TRUCK :Chippy Eisenerzlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :Balogh Stahltransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :Uhl Stahltransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Kelling Stahltransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :Balogh Sicherheitstransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :Uhl Sicherheitstransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :Foster Sicherheitstransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Foster Nahrungstransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Perry Nahrungstransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Chippy Nahrungstransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_PAPER_TRUCK :Uhl Papierlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_PAPER_TRUCK :Balogh Papierlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_PAPER_TRUCK :MPS Papierlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_COPPER_ORE_TRUCK :MPS Kupfererzlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COPPER_ORE_TRUCK :Uhl Kupfererzlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_COPPER_ORE_TRUCK :Goss Kupfererzlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_WATER_TANKER :Uhl Wassertankwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_WATER_TANKER :Balogh Wassertankwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_WATER_TANKER :MPS Wassertankwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_FRUIT_TRUCK :Balogh Früchtetransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_FRUIT_TRUCK :Uhl Früchtetransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_FRUIT_TRUCK :Kelling Früchtetransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_RUBBER_TRUCK :Balogh Kautschuklaster -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Uhl Kautschuklaster -STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :RMT Kautschuklaster -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :MightyMover Zuckertransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_SUGAR_TRUCK :Powernaught Zuckertransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :Wizzowow Zuckertransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :MightyMover Cola-Tankwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :Powernaught Cola-Tankwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Wizzowow Cola-Tankwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :MightyMover Zuckerwattelaster -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :Powernaught Zuckerwattelaster -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Wizzowow Zuckerwattelaster -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :MightyMover Karamelllaster -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :Powernaught Karamelllaster -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :Wizzowow Karamelllaster -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :MightyMover Spielwarentransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :Powernaught Spielwarentransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_REGAL_BUS :MPS-Regal-Bus +STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_LEOPARD_BUS :Hereford-Leopard-Bus +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_BUS :Foster-Bus +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_MKII_SUPERBUS :Foster-MkII-Superbus +STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKI_BUS :Ploddyphut-MkI-Bus +STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKII_BUS :Ploddyphut-MkII-Bus +STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :Ploddyphut-MkIII-Bus +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_COAL_TRUCK :Balogh-Kohlelaster +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COAL_TRUCK :Uhl-Kohlelaster +STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :DW-Kohlelaster +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :MPS-Postwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Reynard-Postwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Perry-Postwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :MightyMover-Postwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Powernaught-Postwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Wizzowow-Postwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :Witcombe-Öltanker +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :Foster-Öltanker +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :Perry-Öltanker +STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :Talbott-Viehtransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :Uhl-Viehtransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :Foster-Viehtransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :Balogh-Gütertransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :Craighead-Gütertransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :Goss-Gütertransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_GRAIN_TRUCK :Hereford-Getreidetransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_THOMAS_GRAIN_TRUCK :Thomas-Getreidetransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GRAIN_TRUCK :Goss-Getreidetransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_WOOD_TRUCK :Witcombe-Holzlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_WOOD_TRUCK :Foster-Holzlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :Moreland-Holzlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_IRON_ORE_TRUCK :MPS-Eisenerzlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_IRON_ORE_TRUCK :Uhl-Eisenerzlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_IRON_ORE_TRUCK :Chippy-Eisenerzlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :Balogh-Stahltransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :Uhl-Stahltransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Kelling-Stahltransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :Balogh-Sicherheitstransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :Uhl-Sicherheitstransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :Foster-Sicherheitstransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Foster-Nahrungstransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Perry-Nahrungstransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Chippy-Nahrungstransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_PAPER_TRUCK :Uhl-Papierlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_PAPER_TRUCK :Balogh-Papierlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_PAPER_TRUCK :MPS-Papierlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_COPPER_ORE_TRUCK :MPS-Kupfererzlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COPPER_ORE_TRUCK :Uhl-Kupfererzlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_COPPER_ORE_TRUCK :Goss-Kupfererzlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_WATER_TANKER :Uhl-Wassertankwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_WATER_TANKER :Balogh-Wassertankwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_WATER_TANKER :MPS-Wassertankwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_FRUIT_TRUCK :Balogh-Früchtetransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_FRUIT_TRUCK :Uhl-Früchtetransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_FRUIT_TRUCK :Kelling-Früchtetransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_RUBBER_TRUCK :Balogh-Kautschuklaster +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Uhl-Kautschuklaster +STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :RMT-Kautschuklaster +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :MightyMover-Zuckertransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_SUGAR_TRUCK :Powernaught-Zuckertransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :Wizzowow-Zuckertransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :MightyMover-Cola-Tankwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :Powernaught-Cola-Tankwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Wizzowow-Cola-Tankwagen +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :MightyMover-Zuckerwattelaster +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :Powernaught-Zuckerwattelaster +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Wizzowow-Zuckerwattelaster +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :MightyMover-Karamelllaster +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :Powernaught-Karamelllaster +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :Wizzowow-Karamelllaster +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :MightyMover-Spielwarentransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :Powernaught-Spielwarentransporter STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :Wizzowow Spielwarentransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_CANDY_TRUCK :MightyMover Bonbontransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :Powernaught Bonbontransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :Wizzowow Bonbontransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BATTERY_TRUCK :MightyMover Batterielaster -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BATTERY_TRUCK :Powernaught Batterielaster -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :Wizzowow Batterielaster -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :MightyMover Limonadentanker -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :Powernaught Limonadentanker -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Wizzowow Limonadentanker -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :MightyMover Plastiktransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :Powernaught Plastiktransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Wizzowow Plastiktransporter -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :MightyMover Luftblasenlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :Powernaught Luftblasenlaster -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Wizzowow Luftblasenlaster -STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :MPS Öltanker -STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :CS-Inc. Öltanker -STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :MPS Passagierschiff -STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :FFP Passagierschiff -STR_VEHICLE_NAME_SHIP_BAKEWELL_300_HOVERCRAFT :Bakewell 300 Luftkissenboot -STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Chugger-Chug Passagierschiff -STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Shivershake Passagierschiff -STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Yate Frachter -STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Bakewell Frachter -STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :MightyMover Frachter -STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Powernaut Frachter +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_CANDY_TRUCK :MightyMover-Bonbontransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :Powernaught-Bonbontransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :Wizzowow-Bonbontransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BATTERY_TRUCK :MightyMover-Batterielaster +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BATTERY_TRUCK :Powernaught-Batterielaster +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :Wizzowow-Batterielaster +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :MightyMover-Limonadentanker +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :Powernaught-Limonadentanker +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Wizzowow-Limonadentanker +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :MightyMover-Plastiktransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :Powernaught-Plastiktransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Wizzowow-Plastiktransporter +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :MightyMover-Luftblasenlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :Powernaught-Luftblasenlaster +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Wizzowow-Luftblasenlaster +STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :MPS-Öltanker +STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :CS-Inc.-Öltanker +STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :MPS-Passagierschiff +STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :FFP-Passagierschiff +STR_VEHICLE_NAME_SHIP_BAKEWELL_300_HOVERCRAFT :Bakewell-300-Luftkissenboot +STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Chugger-Chug-Passagierschiff +STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Shivershake-Passagierschiff +STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Yate-Frachter +STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Bakewell-Frachter +STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :MightyMover-Frachter +STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Powernaut-Frachter STR_VEHICLE_NAME_AIRCRAFT_SAMPSON_U52 :Sampson U52 STR_VEHICLE_NAME_AIRCRAFT_COLEMAN_COUNT :Coleman Count STR_VEHICLE_NAME_AIRCRAFT_FFP_DART :FFP Dart @@ -4944,13 +5157,13 @@ STR_VEHICLE_NAME_AIRCRAFT_PLODDYPHUT_500 :Ploddyphut 500 STR_VEHICLE_NAME_AIRCRAFT_FLASHBANG_X1 :Flashbang X1 STR_VEHICLE_NAME_AIRCRAFT_JUGGERPLANE_M1 :Juggerplane M1 STR_VEHICLE_NAME_AIRCRAFT_FLASHBANG_WIZZER :Flashbang Wizzer -STR_VEHICLE_NAME_AIRCRAFT_TRICARIO_HELICOPTER :Tricario Hubschrauber -STR_VEHICLE_NAME_AIRCRAFT_GURU_X2_HELICOPTER :Guru X2 Hubschrauber -STR_VEHICLE_NAME_AIRCRAFT_POWERNAUT_HELICOPTER :Powernaut Hubschrauber +STR_VEHICLE_NAME_AIRCRAFT_TRICARIO_HELICOPTER :Tricario-Hubschrauber +STR_VEHICLE_NAME_AIRCRAFT_GURU_X2_HELICOPTER :Guru-X2-Hubschrauber +STR_VEHICLE_NAME_AIRCRAFT_POWERNAUT_HELICOPTER :Powernaut-Hubschrauber ##id 0x8800 # Formatting of some strings -STR_FORMAT_DATE_TINY :{STRING}-{STRING}-{NUM} +STR_FORMAT_DATE_TINY :{STRING}.{STRING}.{NUM} STR_FORMAT_DATE_SHORT :{STRING} {NUM} STR_FORMAT_DATE_LONG :{STRING} {STRING} {NUM} STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING} @@ -4959,14 +5172,15 @@ STR_FORMAT_BUOY_NAME :{TOWN} Boje STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Boje #{COMMA} STR_FORMAT_COMPANY_NUM :(Firma {COMMA}) STR_FORMAT_GROUP_NAME :Gruppe {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} STR_FORMAT_WAYPOINT_NAME :Wegpunkt {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Wegpunkt {TOWN} #{COMMA} STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Zugdepot STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Zugdepot #{COMMA} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Straßenfahrzeug - Depot -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Straßenfahrzeug - Depot #{COMMA} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Straßenfahrzeug – Depot +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Straßenfahrzeug – Depot #{COMMA} STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Werft STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Werft #{COMMA} STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hangar @@ -4979,10 +5193,18 @@ STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STR STR_SAVEGAME_NAME_SPECTATOR :Zuschauer, {1:STRING} # Viewport strings +STR_VIEWPORT_TOWN_POP_VERY_POOR_RATING :{WHITE}{TOWN} {RED}({COMMA}) +STR_VIEWPORT_TOWN_POP_MEDIOCRE_RATING :{WHITE}{TOWN} {ORANGE}({COMMA}) +STR_VIEWPORT_TOWN_POP_GOOD_RATING :{WHITE}{TOWN} {YELLOW}({COMMA}) STR_VIEWPORT_TOWN_POP :{WHITE}{TOWN} ({COMMA}) +STR_VIEWPORT_TOWN_POP_EXCELLENT_RATING :{WHITE}{TOWN} {GREEN}({COMMA}) STR_VIEWPORT_TOWN :{WHITE}{TOWN} STR_VIEWPORT_TOWN_TINY_BLACK :{TINY_FONT}{BLACK}{TOWN} +STR_VIEWPORT_TOWN_TINY_VERY_POOR_RATING :{TINY_FONT}{RED}{TOWN} +STR_VIEWPORT_TOWN_TINY_MEDIOCRE_RATING :{TINY_FONT}{ORANGE}{TOWN} +STR_VIEWPORT_TOWN_TINY_GOOD_RATING :{TINY_FONT}{YELLOW}{TOWN} STR_VIEWPORT_TOWN_TINY_WHITE :{TINY_FONT}{WHITE}{TOWN} +STR_VIEWPORT_TOWN_TINY_EXCELLENT_RATING :{TINY_FONT}{GREEN}{TOWN} STR_VIEWPORT_SIGN_SMALL_BLACK :{TINY_FONT}{BLACK}{SIGN} STR_VIEWPORT_SIGN_SMALL_WHITE :{TINY_FONT}{WHITE}{SIGN} @@ -5068,3 +5290,362 @@ STR_PLANE :{BLACK}{PLANE} STR_SHIP :{BLACK}{SHIP} STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY}) + +### PATCH +STR_TOWN_DIRECTORY_CAPTION_EXTRA :{WHITE}Städte ({YELLOW}{COMMA}{WHITE} / {ORANGE}{COMMA}{WHITE}) +STR_LOCAL_AUTHORITY_COMPANY_RATING_NUM :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} {BLACK}({COMMA}) +STR_TOWN_VIEW_GROWTH :{BLACK}GR: {ORANGE}{COMMA}{STRING} {BLACK}Nächste: {ORANGE}{COMMA} {BLACK}RH: {ORANGE}{COMMA} {BLACK}Flag {ORANGE}{NUM} {BLACK}FB: {ORANGE}{NUM} {BLACK}Monat{P "" e} +STR_TOWN_VIEW_GROWTH_RATE_CUSTOM :* +STR_TOWN_VIEW_GROWTH_TILES :{BLACK}HS: {ORANGE}{COMMA}(+{COMMA}) {BLACK}CS: {ORANGE}{COMMA}(+{COMMA}) {BLACK}HR: {ORANGE}{COMMA}(+{COMMA}) +STR_TOWN_VIEW_REALPOP_RATE :{BLACK}Reale Bevölkerung: {YELLOW}{COMMA} {BLACK}Bewertung: {YELLOW}{COMMA} +STR_TOWN_VIEW_HOUSE_STATE :{BLACK}Gebäude: UC {ORANGE}{COMMA} {BLACK}RTM: {ORANGE}{COMMA} {BLACK}DTM: {ORANGE}{COMMA} +STR_CB_DISTANCE_CHECK :CB Stadt-Annahme: {STRING} + +###ADMIN +STR_WATCH_WINDOW_TITLE :{WHITE}Beobachtet {STRING}. +STR_WATCH_CLICK_TO_WATCH_COMPANY :{BLACK}Hier klicken, um Firmensitz zu beobachten +STR_WATCH_CLICK_NEW_WINDOW :{BLACK}Hier klicken, um ein neues Beobachtungsfenster zu öffnen + +STR_WATCH_WINDOW_TITLE_CLIENT :{WHITE}{STRING} in {STRING}({NUM}). +STR_XI_KICK :{BLACK}Kick +STR_XI_KICKC :{BLACK}Kick von cp +STR_XI_BAN :{BLACK}Ban +STR_XI_BAN1 :{BLACK}Ban (1 Tag) +STR_XI_LOCK :{BLACK}Sperren +STR_XI_UNLOCK :{BLACK}Entsperren +STR_XI_JOIN :{BLACK}Firma beitreten +STR_XI_RESET :{BLACK}Firma zurücksetzen +STR_XI_WATCH :Beobachten +STR_MOD_COMPANY_RESET_BUTTON :{BLACK}Zurücksetzen +STR_MOD_COMPANY_JOIN_BUTTON :{BLACK}Als Mod beitreten +STR_MOD_TOGGLE_LOCK_BUTTON :{BLACK}Sperren/Entsperren +STR_XI_ENABLE :{BLACK}En/Dis +STR_XI_SIGN_TOOLTIP :{BLACK}Schild platzieren um Spieler aufmerksam zu machen +STR_XI_PLAYERS_TOOLTIP :{BLACK}Clients anzeigen +STR_XI_COMPANYW_TOOLTIP :{BLACK}Firmenfenster öffnen +STR_XI_COMPANYHQ :{BLACK}HQ +STR_XI_COMPANYHQ_TOOLTIP :{BLACK}Zu Firmensitz gehen +STR_XI_PRIVATE_PLAYER_MESSAGE :{BLACK}.{GREEN}P{BLACK}. +STR_XI_PRIVATE_PLAYER_MESSAGE_TOOLTIP :{BLACK}Eine benutzerdefinierte private Nachricht an diesen Spieler senden +STR_XI_PRIVATE_COMPANY_MESSAGE :{BLACK}.{GREEN}C{BLACK}. +STR_XI_PRIVATE_COMPANY_MESSAGE_TOOLTIP :{BLACK}Eine benutzerdefinierte private Nachricht an diese Firma senden + +STR_XI_BAN_QUERY :{WHITE} +STR_XI_BAN_DAYSDEFAULT :1 +STR_XI_REALY_RESET :{WHITE}Sind Sie sicher? +STR_XI_RESET_CAPTION :{WHITE}Zurücksetzen + +STR_NETWORK_CLIENT_EXTRA :{WHITE}(#{NUM} in c#{NUM}) + +######## Zoning toolbar + +STR_ZONING_TOOLBAR :{WHITE}Zonen-Werkzeugleiste +STR_ZONING_OUTER :{BLACK}Äußere Feldränder: +STR_ZONING_INNER :{BLACK}Innere Feldränder: +STR_ZONING_OUTER_INFO :{BLACK}Typ der gewünschten Zone auf dem äußeren Rand eines Felds auswählen. +STR_ZONING_INNER_INFO :{BLACK}Typ der gewünschten Zone auf dem inneren Rand eines Felds auswählen. + +STR_ZONING_NO_ZONING :{BLACK}Nichts +STR_ZONING_AUTHORITY :{BLACK}Stadtverwaltung +STR_ZONING_CAN_BUILD :{BLACK}Wo ich nicht bauen kann +STR_ZONING_STA_CATCH :{BLACK}Einzugsgebiet der Station +STR_ZONING_IND_CATCH :{BLACK}Einzugsgebiet der Industrie +STR_ZONING_BUL_CATCH :{BLACK}Einzugsgebiet der Stadt +STR_ZONING_BUL_UNSER :{BLACK}Unbediente Gebäude +STR_ZONING_IND_UNSER :{BLACK}Unbediente Industrien +STR_ZONING_TOWN_ZONES :{BLACK}Stadtzonen +STR_ZONING_CB_ACCEPTANCE :{BLACK}CB Frachtannahme +STR_ZONING_CB_TOWN_LIMIT :{BLACK}CB Stadtlimit +STR_ZONING_ADVERTISEMENT_ZONES :{BLACK}Werbekampagne +STR_ZONING_TOWN_GROWTH_TILES :{BLACK}Stadtwachstumsfelder +STR_ZONING_ACTIVE_STATIONS :{BLACK}Aktive Stationen + +# Commands toolbar +STR_TOOLBAR_COMMANDS_CAPTION :{WHITE}Kommandos +STR_TOOLBAR_COMMANDS_GOAL_CAPTION :{BLACK}Ziel +STR_TOOLBAR_COMMANDS_GOAL_TOOLTIP :{BLACK}Kommando !goal an den Server schicken. +STR_TOOLBAR_COMMANDS_QUEST_CAPTION :{BLACK}Auftragsliste +STR_TOOLBAR_COMMANDS_QUEST_TOOLTIP :{BLACK}Kommando !quest an den Server schicken. +STR_TOOLBAR_COMMANDS_SCORE_CAPTION :{BLACK}Punkte +STR_TOOLBAR_COMMANDS_SCORE_TOOLTIP :{BLACK}Kommando !score an den Server schicken. +STR_TOOLBAR_COMMANDS_TOWN_CAPTION :{BLACK}Stadt +STR_TOOLBAR_COMMANDS_TOWN_TOOLTIP :{BLACK}Kommando !town an den Server schicken. +STR_TOOLBAR_COMMANDS_TOWN_ID_CAPTION :{BLACK}Stadt-ID +STR_TOOLBAR_COMMANDS_TOWN_ID_TOOLTIP :{BLACK}Kommando !town c-id an den Server schicken. +STR_TOOLBAR_COMMANDS_HINT_CAPTION :{BLACK}CB-Hinweis +STR_TOOLBAR_COMMANDS_HINT_TOOLTIP :{BLACK}Kommando !hint an den Server schicken (zeigt Bedürfnisse der Stadt im CB-Modus). +STR_TOOLBAR_COMMANDS_LOGIN_CAPTION :{BLACK}Login +STR_TOOLBAR_COMMANDS_LOGIN_TOOLTIP :{BLACK}Kommando !login an den Server schicken. +STR_TOOLBAR_COMMANDS_TIMELEFT_CAPTION :{BLACK}Timeleft +STR_TOOLBAR_COMMANDS_TIMELEFT_TOOLTIP :{BLACK}Kommando !timeleft an den Server schicken. +STR_TOOLBAR_COMMANDS_NS_CAPTION :{BLACK}CM{NUM} +STR_TOOLBAR_COMMANDS_NS_TOOLTIP :{BLACK}CM beitreten{NUM} +STR_TOOLBAR_COMMANDS_RESETME_CAPTION :{BLACK}ResetMe +STR_TOOLBAR_COMMANDS_RESETME_TOOLTIP :{BLACK}Kommando !resetme an den Server schicken. +STR_TOOLBAR_COMMANDS_SAVEME_CAPTION :{BLACK}SaveMe +STR_TOOLBAR_COMMANDS_SAVEME_TOOLTIP :{BLACK}Kommando !saveme an den Server schicken. +STR_TOOLBAR_COMMANDS_NAME_CAPTION :{BLACK}Neuer Name +STR_TOOLBAR_COMMANDS_NAME_TOOLTIP :{BLACK}Kommando !name an den Server schicken. +STR_TOOLBAR_COMMANDS_INFO_CAPTION :{BLACK}Info +STR_TOOLBAR_COMMANDS_INFO_TOOLTIP :{BLACK}Kommando !info an den Server schicken. + +STR_TOOLBAR_COMMANDS_OPTION_CARGO_CAPTION :{BLACK}Beide +STR_TOOLBAR_COMMANDS_OPTION_CARGO_TOOLTIP :{BLACK}Wechselt Frachtschaltflächen zu Menge und Einkommen +STR_TOOLBAR_COMMANDS_OPTION_CARGO_I_CAPTION :{BLACK}Einkommen +STR_TOOLBAR_COMMANDS_OPTION_CARGO_A_CAPTION :{BLACK}Menge +STR_TOOLBAR_COMMANDS_OPTION_CARGO_A_TOOLTIP :{BLACK}Wechelt Frachtschaltflächen zu Menge +STR_TOOLBAR_COMMANDS_OPTION_CARGO_I_TOOLTIP :{BLACK}Wechelt Frachtschaltflächen zu Einkommen + + +STR_TOOLBAR_COMMANDS_TOWN_QUERY :{WHITE}Firmen-ID: +STR_TOOLBAR_COMMANDS_LOGIN_NAME_QUERY :{WHITE} +STR_TOOLBAR_COMMANDS_LOGIN_PASSWORD_QUERY :{WHITE}Passwort: +STR_TOOLBAR_COMMANDS_NAME_NEWNAME_QUERY :{WHITE}Neuer Name: + +STR_TOOLBAR_COMMANDS_TOPICS_CAPTION :{BLACK}Themen +STR_TOOLBAR_COMMANDS_TOPICS_TOOLTIP :{BLACK}Hilfethemen anzeigen +STR_TOOLBAR_COMMANDS_TOPIC1_CAPTION :{BLACK}HILFE Login +STR_TOOLBAR_COMMANDS_TOPIC1_TOOLTIP :{BLACK}Wie verwende ich den Login? +STR_TOOLBAR_COMMANDS_TOPIC2_CAPTION :{BLACK}HILFE Akzeptanz von Kohle +STR_TOOLBAR_COMMANDS_TOPIC2_TOOLTIP :{BLACK}Was ich tun muss, wenn die Stadt keine Kohle akzeptiert +STR_TOOLBAR_COMMANDS_TOPIC3_CAPTION :{BLACK}HELP Akzeptanz von Nahrung +STR_TOOLBAR_COMMANDS_TOPIC3_TOOLTIP :{BLACK}Was ich tun muss, wenn die Stadt keine Nahrung akzeptiert +STR_TOOLBAR_COMMANDS_TOPIC4_CAPTION :{BLACK}HILFE Energie +STR_TOOLBAR_COMMANDS_TOPIC4_TOOLTIP :{BLACK}Was sind Touristen, Geschäftspost oder Energie? +STR_TOOLBAR_COMMANDS_TOPIC5_CAPTION :{BLACK}HILFE Admin +STR_TOOLBAR_COMMANDS_TOPIC5_TOOLTIP :{BLACK}Wie verwende ich das Admin-Kommando? +STR_TOOLBAR_COMMANDS_TOPIC6_CAPTION :{BLACK}HILFE Neue Firma +STR_TOOLBAR_COMMANDS_TOPIC6_TOOLTIP :{BLACK}Warum kann keine neue Firma gestartet werden? + +STR_TOOLBAR_COMMANDS_HELP_CAPTION :{BLACK}Hilfe +STR_TOOLBAR_COMMANDS_HELP_TOOLTIP :{BLACK}Hilfe anzeigen +STR_TOOLBAR_COMMANDS_RULES_CAPTION :{BLACK}REGELN +STR_TOOLBAR_COMMANDS_RULES_TOOLTIP :{BLACK}Regeln anzeigen +STR_TOOLBAR_COMMANDS_CBHINT_CAPTION :{BLACK}CB-Hinweis +STR_TOOLBAR_COMMANDS_CBHINT_TOOLTIP :{BLACK}Hilfe für City builder anzeigen +STR_TOOLBAR_COMMANDS_BEST_CAPTION :{BLACK}Beste +STR_TOOLBAR_COMMANDS_BEST_TOOLTIP :{BLACK}Die 5 besten Spiele anzeigen +STR_TOOLBAR_COMMANDS_RANK_CAPTION :{BLACK}Rang +STR_TOOLBAR_COMMANDS_RANK_TOOLTIP :{BLACK}Die 10 besten Spieler anzeigen +STR_TOOLBAR_COMMANDS_ME_CAPTION :{BLACK}Mein Rang +STR_TOOLBAR_COMMANDS_ME_TOOLTIP :{BLACK}Ihren Rang anzeigen + +#cargo table +STR_TOOLBAR_CARGOS_HEADER_CARGO :{BLACK}Frachtname +STR_TOOLBAR_CARGOS_HEADER_AMOUNT :{BLACK}Menge +STR_TOOLBAR_CARGOS_HEADER_INCOME :{BLACK}Einkommen +STR_TOOLBAR_CARGOS_HEADER_TOTAL :{BLACK}Total +STR_TOOLBAR_CARGOS_HEADER_TOTAL_MONTH :{BLACK}Total dieser Monat + +STR_TOOLBAR_CARGOS_UNITS :{BLACK}{COMMA} +STR_TOOLBAR_CARGOS_UNITS_TOTAL :{BLACK}{COMMA} +STR_TOOLBAR_CARGOS_CAPTION :{WHITE}{COMPANY} Fracht transportiert {BLACK}{COMPANY_NUM} +STR_TOOLBAR_CARGOS_NAME :{BLACK}{STRING} + +#towns +STR_TOWN_DIRECTORY_TOWN_COLOUR :{ORANGE}{TOWN}{BLACK} ({COMMA}->{COMMA}) {YELLOW}{COMMA} Gebäude +STR_TOWN_DIRECTORY_CITY_COLOUR :{YELLOW}{TOWN}{BLACK} ({COMMA}->{COMMA}) {YELLOW}{COMMA} Gebäude +STR_OLD_DEPOT_TRAINT_LENGTH :Altes Depotlängenformat: {STRING} +STR_SMALLMAP_TOWN_LARGE :{TINY_FONT}{YELLOW}{TOWN} + +STR_SORT_BY_HOUSES :Gebäude +STR_SORT_BY_REAL_POPULATION :Reale Bevölkerung +STR_ORDER_DIST :{NUM}, {NUM} + +#server list +STR_NETWORK_SELECT_CITYMANIA :{BLACK}CityMania +STR_NETWORK_SELECT_NICE :{BLACK}N-ice +STR_NETWORK_SELECT_BTPRO :{BLACK}BTPro +STR_NETWORK_SELECT_REDDIT :{BLACK}reddit +STR_NETWORK_SELECT_SERVER_TOOLTIP :{BLACK}Diesen filtern + +### Town CB gui +STR_BUTTON_CB :{STRING} +STR_BUTTON_CB_YES :{BLACK}CB +STR_TOWN_VIEW_CB_CAPTION :{WHITE}{TOWN} + +STR_CB_LARGE_ADVERTISING_CAMPAIGN :{BLACK}Große Werbekampagne +STR_CB_NEW_BUILDINGS :{BLACK}Gebäude finanzieren +STR_CB_FUND_REGULAR :{BLACK}Regelmäßig finanzieren +STR_CB_FUND_REGULAR_TT :{BLACK}Jedes Mal, wenn die Gebäudefinanzierung null ist und die Firma genug Geld hat, werden Gebäude automatisch finanziert +STR_CB_FUNDED_REGULARLY :{GREEN}Stadt wird regelmäßig finanziert +STR_CB_ADVERT_REGULAR :{BLACK}Regelmäßige Werbek. +STR_CB_ADVERT_REGULAR_TT :{BLACK}Bewirbt die Stadt automatisch, wenn die Stationsbewertung unter einen bestimmten Wert fällt +STR_CB_POWERFUND :{BLACK}Powerfund +STR_CB_ADVERT_REGULAR_RATING_TO_KEEP :{BLACK}Stationsbewertung auf diesem Wert halten +STR_CB_POWERFUND_TT :{BLACK}Finanziert die Stadt fortlaufend mit maximal möglicher Geschwindigkeit + +STR_TOWN_CB_FUNDING :{ORANGE}Für {YELLOW}{COMMA}{ORANGE} Monat{P "" e} finanziert +STR_TOWN_CB_GROWING :{GREEN}Stadt wächst! +STR_TOWN_CB_NOT_GROWING :{WHITE}Stadt wächst nicht +STR_TOWN_CB_GROWING_DETAIL :{ORANGE}1 Gebäude in {YELLOW}{COMMA} {ORANGE}Tag{P "" en} ({YELLOW}{COMMA}%{ORANGE}). Nächstes Haus in {YELLOW}{COMMA} {ORANGE}Tag{P "" en} + +STR_TOWN_GROWTH_HEADER_CARGO :{BLACK}Fracht +STR_TOWN_GROWTH_HEADER_AMOUNT :{BLACK}Geliefert +STR_TOWN_GROWTH_HEADER_REQ :{BLACK}Benötigt +STR_TOWN_GROWTH_HEADER_LAST :{BLACK}Letzter Monat +STR_TOWN_GROWTH_HEADER_STORE :{BLACK}Gelagert +STR_TOWN_GROWTH_HEADER_STORE_PCT :{BLACK}%-Verwendet +STR_TOWN_GROWTH_HEADER_FROM :{BLACK}Von + +STR_TOWN_CB_CARGO_NAME :{BLACK}{STRING}: + +STR_TOWN_CB_CARGO_AMOUNT_GOOD :{GREEN}{COMMA} +STR_TOWN_CB_CARGO_AMOUNT_BAD :{YELLOW}{COMMA} +STR_TOWN_CB_CARGO_AMOUNT_NOT :{SILVER}{COMMA} + +STR_TOWN_CB_CARGO_REQ_YES :{ORANGE}{COMMA} +STR_TOWN_CB_CARGO_REQ_NOT :{SILVER}{COMMA} + +STR_TOWN_CB_CARGO_STORE_YES :{LTBLUE}{COMMA} +STR_TOWN_CB_CARGO_STORE_NOT :{SILVER}{COMMA} +STR_TOWN_CB_CARGO_STORE_DECAY :{BLACK}- + +STR_TOWN_CB_CARGO_STORE_PCT_YES :{LTBLUE}{COMMA}% +STR_TOWN_CB_CARGO_STORE_PCT_NOT :{SILVER}{COMMA}% + +STR_TOWN_CB_CARGO_PREVIOUS_YES :{GREEN}{COMMA} +STR_TOWN_CB_CARGO_PREVIOUS_EDGE :{YELLOW}{COMMA} +STR_TOWN_CB_CARGO_PREVIOUS_BAD :{RED}{COMMA} +STR_TOWN_CB_CARGO_PREVIOUS_NOT :{SILVER}{COMMA} + +STR_TOWN_CB_CARGO_FROM_YES :{YELLOW}{COMMA} +STR_TOWN_CB_CARGO_FROM_NOT :{SILVER}{COMMA} + +#polyrail double click option +STR_CONFIG_SETTING_POLYRAIL_DOUBLECLICK_TOOLTIPS :Abschließen der Polylinie mit einem Doppelklick erlauben{STRING} + +# Industry funding forbidden tiles +STR_FUND_INDUSTRY_FORBIDDEN_TILES_TITLE :{BLACK}Verbotene Gebiete hervorheben +STR_FUND_INDUSTRY_FORBIDDEN_TILES_OFF :{BLACK}Aus +STR_FUND_INDUSTRY_FORBIDDEN_TILES_ON :{BLACK}An +STR_FUND_INDUSTRY_FORBIDDEN_TILES_OFF_TOOLTIP :{BLACK}Gebiete in denen eine bestimmte Industrie nicht finanziert werden kann nicht hervorheben +STR_FUND_INDUSTRY_FORBIDDEN_TILES_ON_TOOLTIP :{BLACK}Gebiete in denen eine bestimmte Industrie nicht finanziert werden kann hervorheben + +STR_CB_GUI_TOWN_VIEW_BUTTON :{BLACK}Stadtansicht +STR_CB_GUI_TOWN_VIEW_TOOLTIP :{BLACK}Informationen über die Stadt anzeigen + +STR_CONFIG_SETTING_WARN_IF_RUNWAY_IS_TOO_SHORT :Warnen, falls ein Flugzeug einen Flughafen mit einer zu kurzen Landebahn in seinen Aufträgen hat + +STR_CONFIG_SETTING_POWERFUND_MONEY :Powerfund benötigt mindestens {STRING} zur Finanzierung +STR_CONFIG_SETTING_POWERFUND_HOUSES :Powerfund kann maximal bis zu {STRING} Gebäude finanzieren + +STR_STATION_RATING_TOOLTIP_RATING_DETAILS :{STRING} Bewertungsdetails +STR_STATION_RATING_TOOLTIP_TOTAL_RATING :Gesamte Zielbewertung: {LTBLUE}{NUM}% +STR_STATION_RATING_TOOLTIP_NEWGRF_RATING :NewGRF-Stationsbewertung: {STRING} {BLACK}basierend auf +STR_STATION_RATING_TOOLTIP_NEWGRF_RATING_0 :{GOLD}{NUM}% +STR_STATION_RATING_TOOLTIP_NEWGRF_RATING_1 :{LTBLUE}+{NUM}% +STR_STATION_RATING_TOOLTIP_NEWGRF_SPEED :Maximale Geschwindigkeit des letzten Fahrzeugs: {LTBLUE}{VELOCITY} +STR_STATION_RATING_TOOLTIP_NEWGRF_WAITUNITS :Wartende Frachteinheiten: {LTBLUE}{NUM} +STR_STATION_RATING_TOOLTIP_NEWGRF_WAITTIME :Zeit seit letzter Abholung: {LTBLUE}{NUM} Tag{P "" e} + +STR_STATION_RATING_TOOLTIP_SPEED :Maximale Geschwindigkeit des letzten Fahrzeugs (max. 17%): {STRING} +STR_STATION_RATING_TOOLTIP_SPEED_MAX :{GREEN}{VELOCITY} oder mehr, +{NUM}% +STR_STATION_RATING_TOOLTIP_SPEED_ZERO :{RED}{VELOCITY}, {NUM}% +STR_STATION_RATING_TOOLTIP_SPEED_0 :{ORANGE}{VELOCITY}, +{NUM}% +STR_STATION_RATING_TOOLTIP_SPEED_1 :{GOLD}{VELOCITY}, +{NUM}% +STR_STATION_RATING_TOOLTIP_SPEED_2 :{YELLOW}{VELOCITY}, +{NUM}% +STR_STATION_RATING_TOOLTIP_SPEED_3 :{GREEN}{VELOCITY}, +{NUM}% + +STR_STATION_RATING_TOOLTIP_AGE :Alter des letzten Fahrzeugs (max. 13%): {STRING} +STR_STATION_RATING_TOOLTIP_AGE_0 :{ORANGE}{NUM} Jahr{P "" e}, {NUM}% +STR_STATION_RATING_TOOLTIP_AGE_1 :{GOLD}{NUM} Jahr{P "" e}, +{NUM}% +STR_STATION_RATING_TOOLTIP_AGE_2 :{YELLOW}{NUM} Jahr{P "" e}, +{NUM}% +STR_STATION_RATING_TOOLTIP_AGE_3 :{GREEN}{NUM} Jahr{P "" e}, +{NUM}% + +STR_STATION_RATING_TOOLTIP_WAITTIME :Zeit seit letzter Abholung (max. 51%): {STRING} +STR_STATION_RATING_TOOLTIP_WAITTIME_SHIP :Zeit seit letzter Abholung (max. 51%): {STRING} (durch Schiff) +STR_STATION_RATING_TOOLTIP_WAITTIME_0 :{RED}{NUM} Tag{P "" e}, {NUM}% +STR_STATION_RATING_TOOLTIP_WAITTIME_1 :{ORANGE}{NUM} Tag{P "" e}, +{NUM}% +STR_STATION_RATING_TOOLTIP_WAITTIME_2 :{GOLD}{NUM} Tag{P "" e}, +{NUM}% +STR_STATION_RATING_TOOLTIP_WAITTIME_3 :{YELLOW}{NUM} Tag{P "" e}, +{NUM}% +STR_STATION_RATING_TOOLTIP_WAITTIME_4 :{GREEN}{NUM} Tag{P "" e}, +{NUM}% + +STR_STATION_RATING_TOOLTIP_WAITUNITS :Wartende Frachteinheiten (max. 16%): {STRING} +STR_STATION_RATING_TOOLTIP_WAITUNITS_0 :{RED}{NUM}, {NUM}% +STR_STATION_RATING_TOOLTIP_WAITUNITS_1 :{ORANGE}{NUM}, {NUM}% +STR_STATION_RATING_TOOLTIP_WAITUNITS_2 :{GOLD}{NUM}, {NUM}% +STR_STATION_RATING_TOOLTIP_WAITUNITS_3 :{YELLOW}{NUM}, +{NUM}% +STR_STATION_RATING_TOOLTIP_WAITUNITS_4 :{YELLOW}{NUM}, +{NUM}% +STR_STATION_RATING_TOOLTIP_WAITUNITS_5 :{GREEN}{NUM}, +{NUM}% + +STR_STATION_RATING_TOOLTIP_STATUE :Statue in der Stadt (max. 10%): {STRING} +STR_STATION_RATING_TOOLTIP_STATUE_NO :{GOLD}nein, 0% +STR_STATION_RATING_TOOLTIP_STATUE_YES :{GREEN}ja, +10% + +STR_IGNORE_VERSION_CHECK_WARNING :WARNUNG! Sie sind dabei, einem Server mit einer anderen Version des Spiels beizutreten! +STR_IGNORE_VERSION_CHECK_WARNING_DETAILS :OpenTTD wurde nie dafür ausgelegt auf diese Art zu funktionieren. Falls Sie Glück haben, können Sie vielleicht spielen, jedoch wird vermutlich früher oder später etwas schief laufen. Desyncs oder Abstürze sind zu erwarten. Fahren Sie auf eigene Gefahr fort und melden Sie keine Fehler die dadurch auftreten. +STR_CM_STATION_BUILD_TOWN :{BLACK}Stadt: {GOLD}{TOWN} +STR_CM_STATION_BUILD_TOWN_LARGE :{BLACK}Stadt: {GOLD}{TOWN} (L) +STR_CM_STATION_BUILD_TOWN_MEDIUM :{BLACK}Stadt: {GOLD}{TOWN} (M) +STR_CM_STATION_BUILD_TOWN_SMALL :{BLACK}Stadt: {GOLD}{TOWN} (S) +STR_CM_CONFIG_SETTING_OPEN_VEHICLE_FOR_SHARED_CLONE :Fahrzeugfenster für geteilte Klone öffnen: {STRING} +STR_CM_CONFIG_SETTING_OPEN_VEHICLE_FOR_SHARED_CLONE_HELPTEXT :Fahrzeugfenster beim Klonen von Fahrzeugen mit geteilten Aufträgen öffnen (wie es bei den nicht-geteilten der Fall ist) +STR_CM_CONFIG_SETTING_OPEN_ORDERS_FOR_NEW_VEHICLES :Auftragsfenster für neue Fahrzeuge öffnen: {STRING} +STR_CM_CONFIG_SETTING_OPEN_ORDERS_FOR_NEW_VEHICLES_HELPTEXT :Auftragsfenster automatisch zusammen mit dem Fahrzeugfenster für neue Fahrzeuge öffnen +STR_CM_PURCHASE_ENGINE_ID :{BLACK}Fahrzeug-ID: {GOLD}{NUM} +STR_CM_SMALLMAP_TOOLTIP_SHOW_IMBA_ON_MAP :{BLACK}Industrien zusammen mit Landkonturen und Vegetation auf der Karte anzeigen +STR_CM_CONFIG_SETTING_PAUSE_AFTER_LOAD :Spiel nach dem Laden pausieren: {STRING} +STR_CM_CONFIG_SETTING_PAUSE_AFTER_LOAD_HELPTEXT :Beeinflusst ob das Spiel nach dem Laden pausiert werden soll (falls es noch nicht pausiert ist). Zum Desync-Debugging nützlich. + + +STR_CM_CONFIG_SETTING_LAND_TOOLTIPS_FOR_HOUSES :Info beim Hovern über Gebäuden anzeigen: {STRING} +STR_CM_CONFIG_SETTING_LAND_TOOLTIPS_FOR_INDUSTRIES :Info beim Hovern über Industrien anzeigen: {STRING} +STR_CM_CONFIG_SETTING_LAND_TOOLTIPS_FOR_STATIONS :Info beim Hovern über Stationen anzeigen: {STRING} +STR_CM_CONFIG_SETTING_LAND_TOOLTIPS_FOR_HOUSES_HELPTEXT :Info beim Hovern über Gebäuden in der Zusatzansicht anzeigen. {GOLD}(CityMania addon) +STR_CM_CONFIG_SETTING_LAND_TOOLTIPS_FOR_INDUSTRIES_HELPTEXT :Info beim Hovern über Industrien in der Zusatzansicht anzeigen. {GOLD}(CityMania addon) +STR_CM_CONFIG_SETTING_LAND_TOOLTIPS_FOR_STATIONS_HELPTEXT :Info beim Hovern über Stationen in der Zusatzansicht anzeigen. {GOLD}(CityMania addon) +STR_CM_LAND_TOOLTIPS_HOUSE_NAME :{LTBLUE}{STRING} +STR_CM_LAND_TOOLTIPS_HOUSE_POPULATION :{BLACK}Bevölkerung: {NUM} +STR_CM_LAND_TOOLTIPS_INDUSTRY_NAME :{LTBLUE}{INDUSTRY} +STR_CM_LAND_TOOLTIPS_INDUSTRY_CARGO :{WHITE}{STRING} {BLACK}{CARGO_SHORT} {YELLOW}{NUM} % +STR_CM_LAND_TOOLTIPS_STATION_NAME :{LTBLUE}{STATION} +STR_CM_LAND_TOOLTIPS_STATION_CARGO :{WHITE}{STRING} {BLACK}{CARGO_SHORT} {YELLOW}{NUM} % + +STR_LAND_AREA_INFORMATION_POP :{BLACK}Bevölkerung: {LTBLUE}{NUM} + +STR_CM_CONFIG_SETTING_MODIFIER_FN :Zusätzliche Funktionen für Steuerungstaste: {STRING} +STR_CM_CONFIG_SETTING_MODIFIER_FN_HELPTEXT :Steuerungstaste um auf zusätzliche Funktionen zuzugreifen. +STR_CM_CONFIG_SETTING_MODIFIER_REMOVE :Entfernen-Steuerungstaste: {STRING} +STR_CM_CONFIG_SETTING_MODIFIER_REMOVE_HELPTEXT :Steuerungstaste zum Entfernungsmodus für Bauwerkzeuge. +STR_CM_CONFIG_SETTING_MODIFIER_ESTIMATE :Schätzen-Steuerungstaste: {STRING} +STR_CM_CONFIG_SETTING_MODIFIER_ESTIMATE_HELPTEXT :Steuerungstaste zum Schätzen der Kosten. +STR_CM_CONFIG_SETTING_MODIFIER_NONE :Keine +STR_CM_CONFIG_SETTING_MODIFIER_SHIFT :Umschalt +STR_CM_CONFIG_SETTING_MODIFIER_CTRL :Strg +STR_CM_CONFIG_SETTING_MODIFIER_ALT :Alt + +STR_CM_CONFIG_SETTING_SHADED_TREES :Schattierte Bäume: {STRING} +STR_CM_CONFIG_SETTING_SHADED_TREES_HELPTEXT :Baum-Helligkeit in Abhängikeit zum Gefälle anpassen. Verbessert die Optik von Gebirgswäldern. +STR_CM_CONFIG_SETTING_SHADED_TREES_OFF :Immer aus +STR_CM_CONFIG_SETTING_SHADED_TREES_ON :Immer an +STR_CM_CONFIG_SETTING_SHADED_TREES_SERVER :Wie Server + +STR_CM_CONFIG_SETTING_SHOW_APM :Zeige APM-Zähler: {STRING} +STR_CM_CONFIG_SETTING_SHOW_APM_HELPTEXT :Fügt einen APM-Zähler (Aktionen pro Minute) zur Statusleiste hinzu. +STR_CM_STATUSBAR_APM :{WHITE}APM: {NUM} AVG: {NUM} +STR_CM_STATION_BUILD_SUPPLIES :{BLACK}Liefert: {GOLD} + +STR_CM_CONFIG_SETTING_GRAPH_BACKGROUND :Hintergrundfarbe von Graphen: {STRING} +STR_CM_CONFIG_SETTING_GRAPH_BACKGROUND_HELPTEXT :Haupt-Hintergrundfarbe von Fenstern mit Graphen. Andere zugehörige Farben werden entsprechend geändert. +STR_CM_CONFIG_SETTING_GRAPH_BACKGROUND_BLACK :Schwarz +STR_CM_CONFIG_SETTING_GRAPH_BACKGROUND_GREY :Hellgrau + +# Community login window +STR_CM_LOGIN_WINDOW_CAPTION :{WHITE}Login-Fenster +STR_CM_LOGIN_WINDOW_CITYMANIA :{BLACK}CityMania +STR_CM_LOGIN_WINDOW_NICE :{BLACK}N-ice +STR_CM_LOGIN_WINDOW_BTPRO :{BLACK}BTPro +STR_CM_LOGIN_ERROR_SIGN_IN_FAILED :{WHITE}Verbindung fehlgeschlagen +STR_CM_LOGIN_ERROR_BAD_INPUT :{WHITE}Falscher Benutzername oder Passwort +STR_CM_LOGIN_WINDOW_USERNAME :{WHITE}Benutzername +STR_CM_LOGIN_WINDOW_PASSWORD :{WHITE}Passwort +STR_CM_LOGIN_WINDOW_SET :{WHITE}Gesetzt +STR_CM_LOGIN_WINDOW_NOT_SET :{WHITE}Nicht gesetzt +STR_CM_LOGIN_WINDOW_CHANGE_USERNAME :{WHITE}Benutzernamen ändern +STR_CM_LOGIN_WINDOW_CHANGE_PASSWORD :{WHITE}Passwort ändern +STR_CM_LOGIN_WINDOW_CHANGE_USERNAME_HELPTEXT :{BLACK}Benutzernamen ändern +STR_CM_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT :{BLACK}Passwort ändern +STR_CM_LOGIN_WINDOW_SIGN_IN_HELPTEXT :{BLACK}Login abschicken (sie müssen auf dem richtigen Community-Server sein) +STR_CM_LOGIN_WINDOW_USERNAME_DISPLAY :{WHITE}{STRING} +STR_CM_LOGIN_WINDOW_PASSWORD_DISPLAY :{WHITE}{STRING} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index a2971e0f8f..6593038b4f 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -72,12 +72,12 @@ STR_CARGO_PLURAL_SUGAR :{G=f}Ζάχαρ STR_CARGO_PLURAL_SUGAR.geniki :Ζάχαρης STR_CARGO_PLURAL_TOYS :{G=n}Παιχνίδια STR_CARGO_PLURAL_TOYS.geniki :Παιχνιδιών -STR_CARGO_PLURAL_CANDY :{G=n}Γλυκίσματα -STR_CARGO_PLURAL_CANDY.geniki :Γλυκισμάτων +STR_CARGO_PLURAL_SWEETS :{G=n}Γλυκίσματα +STR_CARGO_PLURAL_SWEETS.geniki :Γλυκισμάτων STR_CARGO_PLURAL_COLA :{G=f}Κόλα STR_CARGO_PLURAL_COLA.geniki :Κόλας -STR_CARGO_PLURAL_COTTON_CANDY :{G=n}Μαλλιά της γριάς -STR_CARGO_PLURAL_COTTON_CANDY.geniki :Μαλλιών της γριάς +STR_CARGO_PLURAL_CANDYFLOSS :{G=n}Μαλλιά της γριάς +STR_CARGO_PLURAL_CANDYFLOSS.geniki :Μαλλιών της γριάς STR_CARGO_PLURAL_BUBBLES :{G=f}Φυσαλίδες STR_CARGO_PLURAL_BUBBLES.geniki :Φυσαλίδων STR_CARGO_PLURAL_TOFFEE :{G=n}Καραμέλες βουτύρου @@ -136,11 +136,11 @@ STR_CARGO_SINGULAR_SUGAR :{G=f}Ζάχαρ STR_CARGO_SINGULAR_SUGAR.subs :Ζάχαρες STR_CARGO_SINGULAR_TOY :{G=n}Παιχνίδι STR_CARGO_SINGULAR_TOY.subs :Παιχνίδια -STR_CARGO_SINGULAR_CANDY :{G=n}Γλυκό -STR_CARGO_SINGULAR_CANDY.subs :Γλυκα +STR_CARGO_SINGULAR_SWEETS :{G=n}Γλυκό +STR_CARGO_SINGULAR_SWEETS.subs :Γλυκα STR_CARGO_SINGULAR_COLA :{G=f}Κόλα -STR_CARGO_SINGULAR_COTTON_CANDY :{G=n}Μαλλί της γριάς -STR_CARGO_SINGULAR_COTTON_CANDY.subs :Μαλλί της γριάς +STR_CARGO_SINGULAR_CANDYFLOSS :{G=n}Μαλλί της γριάς +STR_CARGO_SINGULAR_CANDYFLOSS.subs :Μαλλί της γριάς STR_CARGO_SINGULAR_BUBBLE :{G=f}Φυσαλίδα STR_CARGO_SINGULAR_BUBBLE.subs :Φυσαλίδες STR_CARGO_SINGULAR_TOFFEE :{G=n}Καραμέλα βουτύρου @@ -294,8 +294,8 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Επιλ STR_TOOLTIP_SORT_CRITERIA :{BLACK}Επιλογή κριτηρίου ταξινόμησης STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Επιλέξτε κριτήρια φιλτραρίσματος STR_BUTTON_SORT_BY :{BLACK}Ταξινόμηση κατά -STR_BUTTON_LOCATION :{BLACK}Τοποθεσία -STR_BUTTON_RENAME :{BLACK}Μετονομασία +STR_BUTTON_CATCHMENT :{BLACK}Κάλυψη +STR_TOOLTIP_CATCHMENT :{BLACK}Εναλλαγή επίδειξης περιοχής κάλυψης STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Κλείσιμο παραθύρου STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Τίτλος παραθύρου - σύρετε το για να το μετακινήσετε @@ -372,6 +372,13 @@ STR_SORT_BY_CARGO_CAPACITY :Χωρητικ STR_SORT_BY_RANGE :Εμβέλεια STR_SORT_BY_POPULATION :Πληθυσμός STR_SORT_BY_RATING :Εκτίμηση +STR_SORT_BY_NUM_VEHICLES :Αριθμός οχημάτων +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Συνολικό κέρδος τρέχοντος έτους +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Μέσος όρος κέρδους τρέχοντος έτους + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Καμία +STR_GROUP_BY_SHARED_ORDERS :Κοινές εντολές # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Παύση παιχνιδιού @@ -397,6 +404,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Μεγέ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Σμίκρυνση εικόνας STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Κατασκευή σιδηροτροχιάς STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Κατασκευάστε δρόμους +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Κτίσιμο τραχιοδρόμων STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Κατασκευή λιμένων STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Κατασκευάστε αεροδρόμια STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Ανοίξτε την μπάρα εργαλείων μορφοποίησης εδάφους για ανύψωση/βύθιση γης, δενδροφύτευση, κλπ. @@ -458,7 +466,7 @@ STR_FILE_MENU_EXIT :Έξοδος # map menu STR_MAP_MENU_MAP_OF_WORLD :Χάρτης του κόσμου -STR_MAP_MENU_EXTRA_VIEW_PORT :Πρόσθετη εμφάνιση +STR_MAP_MENU_EXTRA_VIEWPORT :Πρόσθετη εμφάνιση STR_MAP_MENU_LINGRAPH_LEGEND :Υπόμνημα Ροής Φορτίου STR_MAP_MENU_SIGN_LIST :Λίστα πινακίδων @@ -670,8 +678,8 @@ STR_MONTH_DEC :Δεκέμβρ # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Υπόμνημα STR_GRAPH_KEY_TOOLTIP :{BLACK}Εμφάνιση υπομνήματος στα γραφήματα -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -706,7 +714,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Συντονι STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Επόπτης Διαδρομών STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Διευθυντής STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Ανώτερος Υπάλληλος -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Διαχειριστής +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Πρόεδρος STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Πρόεδρος STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Μεγιστάνας @@ -841,6 +849,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Τραχύ Έδαφος STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Γρασίδι STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Γυμνό Έδαφος +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Τροπικό δάσος STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Χωράφια STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Δέντρα STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Βράχοι @@ -872,6 +881,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Εμφά STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Εμφάνιση τελευταίου μηνύματος ή αναφοράς ειδήσεων STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * ΠΑΥΣΗ * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}** ΠΑΎΣΗ (αναμονή για ενημέρωση γραφήματος συνδέσμου) ** STR_STATUSBAR_AUTOSAVE :{RED}ΑΥΤΟΜΑΤΗ ΑΠΟΘΗΚΕΥΣΗ STR_STATUSBAR_SAVING_GAME :{RED}* * ΑΠΟΘΗΚΕΥΣΗ ΠΑΙΧΝΙΔΙΟΥ * * @@ -966,6 +976,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ένα νέο {STRING} είναι πλέον διαθέσιμο! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Ανοίξτε το παράθυρο ομάδων εστιασμένος στην ομάδα του οχήματος STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Ο σταθμός {STATION} δεν δέχεται πια {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Ο σταθμός {STATION} δεν δέχεται πια ούτε {STRING} ούτε {STRING} @@ -985,7 +996,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Οι τοπικές αρχές της πόλης {TOWN} υπογράφουν συμβόλαιο με την εταιρεία {STRING} για αποκλειστικά δικαιώματα μεταφορών ενός έτους! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Εμφάνιση {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Εμφάνιση {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Αντιγραφή στο παράθυρο εμφάνισης STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Αντιγραφή της τοποθεσίας της κύριας προβολής σε αυτό το παράθυρο εμφάνισης STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Επικόλληση από παράθυρο εμφάνισης @@ -1033,10 +1044,11 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Γεοργια STR_GAME_OPTIONS_CURRENCY_IRR :Ιρανικό Ριάλ (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Νεο Ρώσικο Ρούβλι (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Πεσος Μεξικου (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Δολλάριο Νέας Ταϊβάν (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Ρενμίνμπι Κίνας (CNY) +STR_GAME_OPTIONS_CURRENCY_INR :Ρουπία Ινδίας (INR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Οχήματα δρόμου -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Επιλογή πλευράς δρόμου όπου τα οχήματα οδηγούν STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Οδηγούν από αριστερά STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Οδηγούν από δεξιά @@ -1088,9 +1100,12 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Ανάλ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Διαλέξτε την ανάλυση της οθόνης που θέλετε STR_GAME_OPTIONS_RESOLUTION_OTHER :άλλη + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Μέγεθος διεπαφής STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Επιλέξτε το μέγεθος στοιχείου διεπαφής +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(αυτόματη ανίχνευση) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Κανονικό STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Διπλό μέγεθος STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Τετραπλό μέγεθος @@ -1102,6 +1117,8 @@ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Κανονικ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Διπλό μέγεθος STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Τετραπλό μέγεθος + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Βασικό σετ γραφικών STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Επιλογή του βασικού σετ γραφικών που θα χρησιμοποιηθεί STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} αρχεί{P ο α} που λείπ{P ει ουν} ή είναι κατεστραμμέν{P ο α} @@ -1277,8 +1294,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Εναλλαγ STR_CONFIG_SETTING_CITY_APPROVAL :Στάση δημοτικού συμβουλίου ως προς τον μετασχηματισμό της περιοχής: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Επιλογή πόσο ο θόρυβος και η περιβαλλοντικη καταστροφή άπο εταιρίες επηρεάζουν τα ποσοστά αποδοχής και περαιτέρω έργα στη περιοχή -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Μέγιστο ύψος χάρτη: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Ορισμός του μέγιστου επιτρεπτού ύψους βουνών στο χάρτη STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE} Δεν μπορείτε να θέσετε το μέγιστο ύψος χάρτη σε αυτή τη τιμή. Τουλάχιστον ένα βουνό στο χάρτη είναι πιο ψηλό. STR_CONFIG_SETTING_AUTOSLOPE :Να επιτρέπεται η διαμόρφωση εδάφους κάτω από κτίρια, γραμμές, κλπ.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Επιτρέπεται η διαμόρφωση του εδάφους κάτω από κτίρια και σιδηροτροχιές χωρίς αυτά να αφαιρούνται @@ -1535,6 +1550,8 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Διατήρη STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Διατήρηση ανοικτών των εργαλείων για γέφυρες, σήραγγες, κλπ μετά από τη χρήση STR_CONFIG_SETTING_EXPENSES_LAYOUT :Ομαδοποίηση εξόδων στο παράθυρο οικονομικών της εταιρίας: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Ορίστε τη μορφή για το παράθυρο των εξόδων της εταιρείας +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Όριο ταχύτητας γρήγορης κίνησης: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Όριο ταχύτητας του παιχνιδιού όταν είναι ενεργοποιημένη η γρήγορη ταχύτητα. 0 = κανένα όριο (όσο γρήγορα επιτρέπει ο υπολογιστής σας). Τιμές κάτω του 100% επιβραδύνουν το παιχνίδι. Το ανώτατο όριο εξαρτάται από τις προδιαγραφές του υπολογιστή σας και μπορεί να μεταβάλλεται ανάλογα με το παιχνίδι. STR_CONFIG_SETTING_SOUND_TICKER :Ήχος ειδήσεων: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Παίζει ήχο για περιληπτικά μηνύματα ειδήσεων @@ -1583,6 +1600,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Επιτρέπ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Επιτρέπεται η συμμετοχή παικτών υπολογιστή AI σε παιχνίδια πολλαπλών παικτών STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#εντολών πριν την παύση δεσμών ενεργειών: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Μέγιστος αριθμός βημάτων υπολογισμού που κάνει κάποιο σενάριο σε κάθε σειρά +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Πόση μνήμη μπορεί να καταναλώσει ένα script προτού τερματιστεί αναγκαστικά. Μπορεί να χρειαστεί να αυξηθεί για μεγαλύτερους χάρτες. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Τα διαστήματα μεταξύ συντήρησης είναι σε ποσοστά: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Επιλέξτε εάν η επισκευή των οχημάτων εξαρτάται από τον χρόνο που πέρασε από την τελευταία επισκευή ή από την μείωση της αξιοπιστίας κατά ένα συγκεκριμένο ποσοστό της μέγιστης αξιοπιστίας @@ -1641,10 +1660,13 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Ολόκληρ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Τα έγχρωμα νέα εμφανίζονται από το: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Το έτος κατά το οποίο οι ανακοινώσεις στην εφημερίδα εκτυπώνονται έγχρωμες. Πριν από αυτό το έτος, εκτυπώνονται μονόχρωμες και ασπρόμαυρες STR_CONFIG_SETTING_STARTING_YEAR :Έτος εκκίνησης: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Ενεργοποίηση ομαλής οικονομίας (περισσότερες, μικρότερες αλλαγές): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Όταν είναι ενεργοποιημένη, η παραγωγή των βιομηχανιών αλλάζει συχνότερα και σε μικρότερα βήματα. Αυτή η ρύθμιση συνήθως δεν έχει καμία επίδραση όταν οι τύποι των βιομηχανιών παρέχονται από NewGRF +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ECONOMY_TYPE :Τύπος οικονομίας: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Η ομαλή οικονομία κάνει διαφοροποιήσεις στην παραγωγή πιο συχνά, και σε μικρότερα βήματα. Η παγωμένη οικονομία σταματά τις διαφοροποιήσεις στην παραγωγή και το κλείσιμο των βιομηχανιών. Αυτή η ρύθμιση μπορεί να μην έχει καμία αλλαγή εάν οι τύποι βιομηχανιών προσφέρονται από ένα NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Ομαλή STR_CONFIG_SETTING_ALLOW_SHARES :Ενεργοποίηση της δυνατότητας αγοράς μετοχών από άλλες εταιρίες: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Όταν είναι ενεργοποιημένη, επιτρέπεται η αγοραπωλησία εταιρικών μετοχών. Οι μετοχές θα είναι διαθέσιμες μόνο όταν οι εταιρείες φτάνουν μια ορισμένη ηλικία +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Ελάχιστη ηλικία εταιρίας για συναλλαγή μετοχών: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Το ποσοστό κέρδους από το σκέλος μεταφοράς στα συστήματα τροφοδότησης: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Το ποσοστό του εισοδήματος που δίνεται στα ενδιάμεσα σκέλη των συστημάτων τροφοδότησης, δίνοντας μεγαλύτερο έλεγχο στο εισόδημα STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Όταν σύρετε, τοποθετούνται σήματα κάθε: {STRING} @@ -1692,9 +1714,7 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Γραμμικ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Τοποθέτηση δέντρων εντός παιχνιδιού: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Έλεγχος της τυχαίας εμφάνισης δέντρων κατά τη διάρκεια του παιχνιδιού. Αυτό είναι πιθανό να επηρεάσει βιομηχανίες που εξαρτώνται από την ανάπτυξη των δέντρων, όπως για παράδειγμα οι υλοτομίες -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Κανένα {RED}(καταστρέφει το ξυλουργείο) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Μόνο σε τροπικά δάση -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Παντού +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Φυτρώνει αλλά εξαπλώνεται μόνο σε τροπικό δάσος STR_CONFIG_SETTING_TOOLBAR_POS :Θέση κύριας εργαλειοθήκης: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Οριζόντια τοποθέτηση της κύριας γραμμής εργαλείων στο επάνω μέρος της οθόνης @@ -1850,6 +1870,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... αγ STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Έλληψη μνήμης STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Η κατανομή {BYTES} του spritecache απέτυχε. Το spritecache μειώθηκε σε {BYTES}. Αυτό θα μειώσει την απόδοση του OpenTTD. Για να μειώσετε τις ανάγκες μνήμς μπορείτε να απενεργοποιήσετε τα γραφικά 32bpp graphics ή/και τα επίπεδα μεγέθυνσης +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1893,18 +1915,10 @@ STR_INTRO_TRANSLATION :{BLACK}Λείπ # Quit window STR_QUIT_CAPTION :{WHITE}Έξοδος -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Είστε σίγουροι ότι θέλετε να εγκαταλείψετε το OpenTTD και να επιστρέψετε στο λειτουργικό {STRING}; +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Είστε σίγουροι ότι θέλετε να εγκαταλείψετε το OpenTTD; STR_QUIT_YES :{BLACK}Ναι STR_QUIT_NO :{BLACK}Όχι -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Εγκατάλειψη Παιχνιδιού STR_ABANDON_GAME_QUERY :{YELLOW}Είστε σίγουροι ότι θέλετε να εγκαταλείψετε το παιχνίδι; @@ -1913,7 +1927,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Είσ # Cheat window STR_CHEATS :{WHITE}Απατεωνιές STR_CHEATS_TOOLTIP :{BLACK}Τα κουτάκια δείχνουν αν έχετε ξαναχρησιμοποιήσει αυτή την απατεωνιά -STR_CHEATS_WARNING :{BLACK}Προσοχή! Είστε έτοιμοι να προδώσετε τους φίλους ανταγωνιστές σας. Θυμηθείτε ότι αυτή η ντροπή θα μείνει για πάντα. +STR_CHEATS_NOTE :{BLACK}Σημείωση: κάθε χρήση αυτών των ρυθμίσεων θα καταγραφεί από το αρχείο αποθήκευσης STR_CHEAT_MONEY :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Παίζετε με την εταιρία: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Μαγική μπουλντόζα (αφαιρεί βιομηχανίες, αμετακίνητα αντικείμενα): {ORANGE}{STRING} @@ -2025,10 +2039,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Αλλα # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Παιχνίδι πολλών παικτών -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Διαφημιζόμενο -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Επιλογή ανάμεσα σε ένα διαφημιζόμενο (διαδίκτυο) ή μη διαφημιζόμενο (Τοπικό Δίκτυο/LAN) παιχνίδι -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Όχι -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ναι STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Όνομα παίκτη: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Αυτό είναι το όνομα με το οποίο θα σας αναγνωρίζουν οι άλλοι παίκτες @@ -2069,8 +2079,7 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Συμμ STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Ανανέωση διακομιστή STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Ανανεώση πληροφοριών του διακομιστή -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Αναζήτηση διακομιστή -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Ψάξτε το δίκτυο για ένα διακομιστή +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Αναζήτηση στο διαδίκτυο για δημόσιους διακομιστές STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Προσθήκη διακομιστή STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Προσθέτει ένα διακομιστή στη λίστα ο οποίος θα ελέγχεται κάθε φορά για ενεργά παιχνίδια. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Εκκίνηση διακομιστή @@ -2087,6 +2096,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Το ό STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Θέση κωδικού STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Προστατέψτε το παιχνίδι με έναν κωδικό εάν δε θέλετε να είναι δημοσίως προσβάσιμο +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Διαφημιζόμενο +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Επιλογή ανάμεσα σε ένα διαφημιζόμενο (διαδίκτυο) ή μη διαφημιζόμενο (Τοπικό Δίκτυο/LAN) παιχνίδι STR_NETWORK_START_SERVER_UNADVERTISED :Όχι STR_NETWORK_START_SERVER_ADVERTISED :Ναι STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} συμπαίκτ{P ης ες} @@ -2200,7 +2211,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Νέα εται # Network client list STR_NETWORK_CLIENTLIST_KICK :Εκδίωξη STR_NETWORK_CLIENTLIST_BAN :Απαγόρευση -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Δώστε χρήματα STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Μιλήστε σε όλους STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Μιλήστε στην εταιρεία STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Προσωπικό μήνυμα @@ -2209,8 +2219,6 @@ STR_NETWORK_SERVER :Διακομι STR_NETWORK_CLIENT :Πελάτης STR_NETWORK_SPECTATORS :Θεατές -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Εισάγετε το πόσο των χρημάτων που θέλετε να δώσετε - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Να μην αποθηκευτεί ο κωδικός STR_COMPANY_PASSWORD_OK :{BLACK}Δώστε στην εταιρεία νέο κωδικό @@ -2255,6 +2263,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Λανθ STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Ο διακομιστής είναι γεμάτος STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Έχει απαγορευτεί η είσοδος σας από τον διακομιστή STR_NETWORK_ERROR_KICKED :{WHITE}Έχετε εκδιωχθεί από το παιχνίδι +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Λόγος: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Η χρήση απατεωνιών δεν επιτρέπεται σε αυτόν τον διακομιστή STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Αποστείλατε πάρα πολλές εντολές στον διακομιστή STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Χρειαστήκατε πολύ χρόνο για να συμπληρώσετε τον κωδικό @@ -2296,11 +2305,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Παιχνίδ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Παιχνίδι ακόμα σε παύση ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Παιχνίδι ακόμα σε παύση ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Παιχνίδι ακόμα σε παύση ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Παιχνίδι ακόμα σε παύση ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Συνεχίση παιχνιδιού ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :αριθμός παιχτών STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :σύνδεση πελατών STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :χειροκίνητο STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :δέσμη ενεργειών παιχνιδιού +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :αναμονή για ενημέρωση γραφήματος συνδέσμου ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :αποχώρηση STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} συμμετέχει στο παιχνίδι @@ -2310,10 +2321,10 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} σ STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ξεκίνησε μια νέα εταιρία (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} αποχώρησε από το παιχνίδι ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} άλλαξαν το όνομά τους σε {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} έδωσαν στην εταιρία σας {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Δώσατε {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} έδωσε {2:CURRENCY_LONG} σε {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Ο διακομιστής έκλεισε την συνεδρία STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Ο διακομιστής επανεκκινεί...{}Παρακαλώ περιμένετε... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} εκδιώχθηκε. Λόγος: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Περιεχόμενο κατεβαίνει @@ -2388,6 +2399,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}Το Ope STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ναι, κατέβασε τα γραφικά STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Όχι, έξοδος από το OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Ρυθμίσεις Διαφάνειας STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για τις πινακίδες. Ctrl+Κλικ για να την κλειδώσετε @@ -2429,6 +2441,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Χτί STR_JOIN_WAYPOINT_CAPTION :{WHITE}Συνένωση σημείου καθοδήγησης STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Κτίσιμο ενός ξεχωριστού σημείου καθοδήγησης +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Κατασκευή Σιδηρόδρομου STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Κατασκευή Ηλεκτροδοτημένου Σιδηρόδρομου @@ -2532,6 +2546,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Κατα STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης για αυτοκινητόδρομους STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Εναλλαγή κτισίματος/αφαίρεσης της κατασκευής τροχιόδρομου +STR_ROAD_NAME_ROAD :Δρόμος +STR_ROAD_NAME_TRAM :Τροχιόδρομος # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Προσανατολισμός Σταθμού Οχημάτων @@ -2612,13 +2628,17 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Μέγε STR_OBJECT_CLASS_LTHS :Φάροι STR_OBJECT_CLASS_TRNS :Αναμεταδότες -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Δέντρα STR_PLANT_TREE_TOOLTIP :{BLACK}Επιλέξτε τύπο δέντρου για φύτευση. Αν το τετραγωνίδιο έχει ήδη ένα δέντρο, αυτό θα προσθέσει περισσότερα δέντρα μεικτών τύπων ανεξάρτητα από τον επιλεγμένο τύπο STR_TREES_RANDOM_TYPE :{BLACK}Δέντρα τυχαίου τύπου STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Τοποθετήστε δέντρα τυχαίου τύπου. Το Shift εναλλάσσει κτίσιμο/εμφάνιση εκτίμησης κόστους STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Τυχαία Δέντρα STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Φυτέψτε δέντρα τυχαία στο έδαφος +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Κανονικό +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Φυτέψτε μοναδικά δέντρα σέρνοντας πάνω από το τοπίο. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Άλσος +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Φυτέψτε μικρά δάση σέρνοντας πάνω από το τοπίο. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Δημιουργία Γης @@ -2669,12 +2689,14 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Τυχα # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Χρηματοδότηση νέας βιομηχανίας STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Επιλέξτε την κατάλληλη βιομηχανία από την λίστα -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Πολλές τυχαίες βιομηχανίες +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Δημιουργία τυχαίων βιομηχανιών STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Γέμισε τον χάρτη με τυχαία τοποθετημένες βιομηχανίες STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Κόστος: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Διερεύνηση STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Κατασκευή STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Χρηματοδότηση +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Αφαίρεση όλων των βιομηχανιών +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Αφαίρεση όλων των βιομηχανιών που υπάρχουν αυτή την στιγμή στον χάρτι # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Αλυσίδα βιομηχανιών για τη βιομηχανία {STRING} @@ -2716,8 +2738,10 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Αποδεκτά εμπορεύματα: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Τύπος σιδηροτροχιάς: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Τύπος τραμ: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Όριο ταχύτητας σιδηροτροχιάς: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Όριο ταχύτητας δρόμου: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Όριο ταχύτητας τραμ: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Πέτρες @@ -2834,6 +2858,7 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} καρέ/δευτερόλεπτο STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} καρέ/δευτερόλεπτο STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} καρέ/δευτερόλεπτο +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} ς ############ Leave those lines in this order!! @@ -2897,6 +2922,7 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :Φιλτράρισμα κειμένου: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Αντικατάσταση Αρχείου STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Είστε σίγουροι οτι θέλετε να αντικαταστήσετε το υπάρχων αρχείο; +STR_SAVELOAD_DIRECTORY :{STRING} (Κατάλογος) STR_SAVELOAD_OSKTITLE :{BLACK}Δώστε το όνομα του παιχνιδιού προς αποθήκευση @@ -2908,14 +2934,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Αριθμός πόλεων: STR_MAPGEN_DATE :{BLACK}Ημερομηνία: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Αριθμός βιομηχανιών: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Μέγιστο ύψος χάρτη -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Αύξηση του μέγιστου ύψους βουνών του χάρτη κατά ένα -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Μείωση του μέγιστου ύψους βουνών του χάρτη κατά ένα -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Ύψος γραμμής χιονιού: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Μετακίνηση του ύψους της γραμμής χιονιού ένα πάνω -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Μετακίνηση του ύψους της γραμμής χιονιού ένα κάτω STR_MAPGEN_LAND_GENERATOR :{BLACK}Δημιουργός εδάφους: -STR_MAPGEN_TREE_PLACER :{BLACK}Αλγόριθμος δέντρων: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Τύπος εδάφους: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Επίπεδο θάλασσας: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Ποτάμια: @@ -2940,8 +2959,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Όνομ STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Μέγεθος: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} × {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Αλλαγή μέγιστου ύψους χάρτη -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Άλλαγη του ύψους της γράμμης χιονιού STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Αλλαγή έτους έναρξης # SE Map generation @@ -3158,6 +3175,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Εναλ # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Επεξεργασία κειμένου πινακίδας +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στη τοποθεσία της πινακίδας. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της πινακίδας STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Μετάβαση στην επόμενη πινακίδα STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Μετάβαση στη προηγούμενη πινακίδα @@ -3200,6 +3218,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Μετονομ # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Τοπική αρχή της πόλης {TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Ζώνη STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Ποσοστά εταιρίας μεταφορών: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Διαθέσιμες πράξεις: @@ -3229,20 +3248,17 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Δωρ STR_GOALS_CAPTION :{WHITE}{COMPANY} Στόχοι: STR_GOALS_SPECTATOR_CAPTION :{WHITE}Καθολικοί στόχοι: STR_GOALS_SPECTATOR :Καθολικοί στόχοι -STR_GOALS_GLOBAL_TITLE :{BLACK}Καθολικοί στόχοι: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Κανένας - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Μη εφαρμόσιμος - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Εταιρικοί στόχοι: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Πατήστε στον στόχο για να επικεντρωθεί η οθόνη στη βιομηχανία/πόλη/τετραγωνίδιο. Με Ctrl+Κλικ ανοίγει το παράθυρο θέασης στην τοποθεσία της βιομηχανίας/πόλης/τετραγωνίδιου # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Ερώτηση -STR_GOAL_QUESTION_CAPTION_INFORMATION :Πληροφορίες -STR_GOAL_QUESTION_CAPTION_WARNING :Προειδοποίηση -STR_GOAL_QUESTION_CAPTION_ERROR :Σφάλμα +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Ερώτηση +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Πληροφορίες +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Προειδοποίηση +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Σφάλμα ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Ακύρωση @@ -3432,6 +3448,7 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Ανοι STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Εποικοδόμηση της έδρας της εταιρίας σε άλλο μέρος, με κόστος το 1% της αξίας της εταιρίας. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς επανατοποθέτηση της έδρας STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Λεπτομέρειες STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Προβολή λεπτομερούς μέτρησης υποδομών +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Δώστε χρήματα σε αυτή την εταρία STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Νέο Πρόσωπο STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Επιλογή νέου προσώπου διευθυντή @@ -3449,6 +3466,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Πώλη STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Όνομα Εταιρίας STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Όνομα Διευθυντή +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Εισάγετε το χρηματικό ποσό που θέλετε να δώσετε STR_BUY_COMPANY_MESSAGE :{WHITE}Ψάχνουμε μία εταιρία μεταφορών για να εξαγοράσει την εταιρία μας.{}{}Θέλετε να εξαγοράσετε την {COMPANY} για {CURRENCY_LONG}; @@ -3457,6 +3475,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Υποδ STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Κομμάτια σιδηροτροχιάς: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Σήματα STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Κομμάτια δρόμου: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Κομμάτια τραμ: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Τετραγωνίδια νερού: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Κανάλια STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Σταθμοί: @@ -3468,7 +3487,13 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Βιομηχανίες STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Τίποτα - STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Ονόματα βιομηχανιών - πατήστε στο όνομα για κεντράρισμα στη βιομηχανία. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία της βιομηχανίας +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Αποδεκτό φορτίο: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Παραγόμενο εμπόρευμα: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Όλοι οι τύποι φορτίου # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3562,6 +3587,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Νέα Οχήμ STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Νέα Οχήματα Maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Νέα Οχήματα Δρόμου +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Νέα οχήματα τραμ ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Νέα Οχήματα Σιδηρόδρομου @@ -3731,6 +3757,7 @@ STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Μόλι STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=f}ατμομηχανή STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE.geniki :ατμομηχανής +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :Μηχανή ηλεκτροδοτουμένου σιδηροδρόμου STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=f}μηχανής μονοτρόχιου STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE.geniki :μηχανής monorail STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=f}μηχανής maglev @@ -3738,6 +3765,7 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE.geniki :μηχανής STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=n}οχήματος δρόμου STR_ENGINE_PREVIEW_ROAD_VEHICLE.geniki :Οχήματος δρόμου +STR_ENGINE_PREVIEW_TRAM_VEHICLE :όχημα τροχιοδρόμου STR_ENGINE_PREVIEW_AIRCRAFT :{G=n}αεροσκάφους STR_ENGINE_PREVIEW_AIRCRAFT.geniki :αεροσκάφους @@ -3783,12 +3811,14 @@ STR_REPLACE_WAGONS :Βαγόνια STR_REPLACE_ALL_RAILTYPE :Όλα τα οχήματα σιδηρόδρομου STR_REPLACE_HELP_RAILTYPE :{BLACK}Επιλέξτε τον τύπο σιδηροδρόμου για τον οποίο θέλετε να γίνει η αντικατάσταση των μηχανών +STR_REPLACE_HELP_ROADTYPE :{BLACK}Επιλέξτε τον τύπο δρόμου για τον οποίο θέλετε να γίνει η αντικατάσταση των μηχανών STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Εμφανίζει ποια μηχανή αυτή στα αριστερά θα αντικατασταθεί, εάν υπάρχει STR_REPLACE_RAIL_VEHICLES :Οχήματα Σιδηροδρόμου STR_REPLACE_ELRAIL_VEHICLES :Οχήματα Ηλεκτρικού Σιδηροδρόμου STR_REPLACE_MONORAIL_VEHICLES :Οχήματα Μονοτρόχιου STR_REPLACE_MAGLEV_VEHICLES :Οχήματα Maglev +STR_REPLACE_TRAM_VEHICLES :Οχήματα τροχιοδρόμου STR_REPLACE_REMOVE_WAGON :{BLACK}Αφαίρεση βαγονιού: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Υποχρεώνει την αυτόματη αντικατάσταση να διατηρεί σταθερό το μήκος του τρένου αφαιρώντας βαγόνια (ξεκινώντας από μπροστά), όταν η αντικατάσταση της μηχανής κάνει το τρένο μεγαλύτερο @@ -3796,10 +3826,8 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Υποχ # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του τρένου. Με Ctrl+Κλικ ακολουθεί το τρένο στην κύρια προβολή -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του οχήματος δρόμου. Με Ctrl+Κλικ ακολουθεί το όχημα στην κύρια προβολή -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στη τοποθεσία του πλοίου. Με Ctrl+Κλικ ακολουθεί το πλοίο στην κύρια προβολή -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του αεροσκάφους. Με Ctrl+Κλικ ακολουθεί το αεροσκάφος στην κύρια προβολή +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του οχήματος. Με διπλό κλικ θα ακολουθείται το αυτοκίνητο στην κύρια προβολή. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του οχήματος +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Κεντράρισμα της κύριας προβολής στην τοποθεσία του πλοίου. Με διπλό κλικ θα ακολουθείται το πλοίο στην κύρια προβολή. Με Ctrl+Κλικ ανοίγει νέο παράθυρο προβολής στην τοποθεσία του πλοίου STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το τρένο στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο επισκευή STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το όχημα στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο επισκευή @@ -3831,10 +3859,8 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφά STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφάνιση λεπτομερειών πλοίου STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Εμφάνιση λεπτομερειών αεροσκάφους -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Τρέχουσα ενέργεια τρένου - πατήστε εδώ για ξεκινήσετε/σταματήσετε το τρένο. Με Ctrl+Κλικ πηγαίνετε στον προορισμό -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Τρέχουσα ενέργεια οχήματος - πατήστε εδώ για ξεκινήσετε/σταματήσετε το όχημα. Με Ctrl+Κλικ πηγαίνετε στον προορισμό -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Τρέχουσα ενέργεια πλοίου - πατήστε εδώ για ξεκινήσετε/σταματήσετε το πλοίο. Με Ctrl+Κλικ πηγαίνετε στον προορισμό -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Τρέχουσα ενέργεια αεροσκάφους - πατήστε εδώ για ξεκινήσετε/σταματήσετε το πλοίο. Με Ctrl+Κλικ πηγαίνετε στον προορισμό +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Τρέχων ενέργεια οχήματος - κάντε κλικ για να σταματήσετε/ξεκινήσετε το όχημα + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Φόρτωση / Εκφόρτωση @@ -4062,6 +4088,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Μετατρο STR_ORDER_STOP_ORDER :(Στάση) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Δεν μπορείτε να χρησιμοποιήσετε τον σταθμό){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Σιωπηρή) @@ -4240,6 +4267,9 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Αποδ STR_AI_LIST_CANCEL :{BLACK}Άκυρωση STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Να μην γίνει αλλαγή δέσμης ενεργειών +STR_SCREENSHOT_CAPTION :{WHITE}Βγάλτε στιγμιότυπο εικόνας +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Το στιγμιότυπο οθόνης έχει μεγεθυνθεί πλήρως +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Στιγμιότυπο χάρτη υψομετρίας # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Παράμετροι @@ -4505,6 +4535,7 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Λάθος τύ STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Το {VEHICLE} είναι πολύ μεγάλο μετά την ανανέωση STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Χωρίς εφαρμογή κανόνων αυτόματης ανανέωσης/αντικατάστασης STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(χρηματικό όριο) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Το καινούριο όχημα δεν μπορεί να επανεξοπλιστεί σε σειρά {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Αδύνατος συνδυασμός σιδηροδρόμου @@ -4532,6 +4563,11 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Αδύν STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Δεν μπορεί να αφαιρεθεί τροχιόδρομος από εδώ... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... δεν υπάρχει δρόμος STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... δεν υπάρχει τροχιόδρομος +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Δε γίνεται να μετατραπεί ο τύπος δρόμου εδώ... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Δε γίνεται να μετατραπεί ο τύπος τραμ εδώ... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Δεν υπάρχει κατάλληλος δρόμος +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Καμία κατάλληλη γραμμή του τραμ +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... μη συμβατός τραχιοδρόμος # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Δεν μπορεί να κτιστεί κανάλι εδώ @@ -4779,13 +4815,13 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=n}Ορυχε ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Ανώνυμο -STR_SV_TRAIN_NAME :{G=n}Τρένο {COMMA} +STR_SV_TRAIN_NAME :{G=n}Τρένο #{COMMA} STR_SV_TRAIN_NAME.geniki :Τρένου {COMMA} -STR_SV_ROAD_VEHICLE_NAME :{G=n}Όχημα Δρόμου {COMMA} +STR_SV_ROAD_VEHICLE_NAME :{G=n}Όχημα Δρόμου #{COMMA} STR_SV_ROAD_VEHICLE_NAME.geniki :Οχήματος Δρόμου {COMMA} -STR_SV_SHIP_NAME :{G=n}Πλοίο {COMMA} +STR_SV_SHIP_NAME :{G=n}Πλοίο #{COMMA} STR_SV_SHIP_NAME.geniki :Πλοίου {COMMA} -STR_SV_AIRCRAFT_NAME :{G=n}Αεροσκάφος {COMMA} +STR_SV_AIRCRAFT_NAME :{G=n}Αεροσκάφος #{COMMA} STR_SV_AIRCRAFT_NAME.geniki :Αεροσκάφους {COMMA} STR_SV_STNAME :{STRING} @@ -5088,6 +5124,7 @@ STR_FORMAT_BUOY_NAME :Σημαδού STR_FORMAT_BUOY_NAME_SERIAL :Σημαδούρα {TOWN} #{COMMA} STR_FORMAT_COMPANY_NUM :(Εταιρία {COMMA}) STR_FORMAT_GROUP_NAME :Ομάδα {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Σημείο Καθοδήγησης {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Σημείο Καθοδήγησης {TOWN} #{COMMA} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index a944e7d5e6..ba5d417ab0 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -50,9 +50,9 @@ STR_CARGO_PLURAL_WHEAT :חיטה STR_CARGO_PLURAL_RUBBER :גומי STR_CARGO_PLURAL_SUGAR :סוכר STR_CARGO_PLURAL_TOYS :צעצועים -STR_CARGO_PLURAL_CANDY :ממתקים +STR_CARGO_PLURAL_SWEETS :ממתקים STR_CARGO_PLURAL_COLA :קולה -STR_CARGO_PLURAL_COTTON_CANDY :שערות סבתא +STR_CARGO_PLURAL_CANDYFLOSS :שערות סבתא STR_CARGO_PLURAL_BUBBLES :בועות STR_CARGO_PLURAL_TOFFEE :טופי STR_CARGO_PLURAL_BATTERIES :סוללות @@ -92,10 +92,10 @@ STR_CARGO_SINGULAR_RUBBER :גומי STR_CARGO_SINGULAR_SUGAR :סוכר STR_CARGO_SINGULAR_TOY :צעצוע STR_CARGO_SINGULAR_TOY.plural :צעצועים -STR_CARGO_SINGULAR_CANDY :ממתק -STR_CARGO_SINGULAR_CANDY.plural :ממתקים +STR_CARGO_SINGULAR_SWEETS :ממתק +STR_CARGO_SINGULAR_SWEETS.plural :ממתקים STR_CARGO_SINGULAR_COLA :קולה -STR_CARGO_SINGULAR_COTTON_CANDY :צמר גפן מתוק +STR_CARGO_SINGULAR_CANDYFLOSS :צמר גפן מתוק STR_CARGO_SINGULAR_BUBBLE :בועה STR_CARGO_SINGULAR_BUBBLE.plural :בועות STR_CARGO_SINGULAR_TOFFEE :טופי @@ -245,8 +245,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}(בחר( STR_TOOLTIP_SORT_CRITERIA :{BLACK}בחר\י קרטריון מיון STR_TOOLTIP_FILTER_CRITERIA :{BLACK}בחר קריטריון סינון STR_BUTTON_SORT_BY :{BLACK}מיון לפי -STR_BUTTON_LOCATION :{BLACK}מיקום -STR_BUTTON_RENAME :{BLACK}שנה שם STR_TOOLTIP_CLOSE_WINDOW :{BLACK}סגור חלון STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}כותרת החלון - גרור להזזה @@ -324,6 +322,8 @@ STR_SORT_BY_RANGE :טווח STR_SORT_BY_POPULATION :אכלוסיה STR_SORT_BY_RATING :דרוג +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}השהה משחק STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}הרץ את הזמן במהירות @@ -409,7 +409,7 @@ STR_FILE_MENU_EXIT :יציאה # map menu STR_MAP_MENU_MAP_OF_WORLD :מפת העולם -STR_MAP_MENU_EXTRA_VIEW_PORT :השקפה נוספת +STR_MAP_MENU_EXTRA_VIEWPORT :השקפה נוספת STR_MAP_MENU_LINGRAPH_LEGEND :מקרא זרימת מטענים STR_MAP_MENU_SIGN_LIST :רשימת שלטים @@ -574,8 +574,8 @@ STR_MONTH_DEC :דצמבר # Graph window STR_GRAPH_KEY_BUTTON :{BLACK} STR_GRAPH_KEY_TOOLTIP :{BLACK}הצג מפתחות לגרפים -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -887,7 +887,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}הרשות המקומית של {TOWN} חותמת חוזה עם {STRING} המעניק זכויות תעבורה בלעדיות למשך שנה! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}השקפה {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}השקפה {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}העתק להשקפה STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}העתק את מיקום חלון התצוגה הראשי לחלון תצוגה זה STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}עבור למיקום שנמצא בחלון התצוגה @@ -936,8 +936,6 @@ STR_GAME_OPTIONS_CURRENCY_IRR :ריאל איר STR_GAME_OPTIONS_CURRENCY_RUB :רובל רוסי (RUB) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}רכבי כביש -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}בחר את צד הכביש בו יסעו כלי הרכב STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :סע בצד שמאל STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :סע בצד ימין @@ -989,6 +987,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}רזלו STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}בחר את רזולוציית המסך STR_GAME_OPTIONS_RESOLUTION_OTHER :אחר + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}גודל ממשק STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}בחר את ממשק גודל העצם לשימוש @@ -998,6 +998,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :גודל מרו + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}ערכת גרפיקה בסיסית STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}בחר בערכת גרפיקה בסיסית לשימוש STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{P 0 "קובץ " ""}{NUM}{P "" " קבצים"} חסר{P 0 "" ים}/הושחט{P 0 "" ו} @@ -1173,8 +1175,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :אפשר/מנע STR_CONFIG_SETTING_CITY_APPROVAL :יחס מועצת העיר כלפי שינוי מבנה אזורי: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :בחר באיזו מידה רעש ונזק סביבתי ע"י חברות משפיעים על הדירוג העירוני שלהן ופעולות בנייה עתידיות באזור -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :גובה מפה מקסימלי: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :קבע את הגובה המקסימלי להרים במפה STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}לא ניתן לקבוע את הגובה המקסימלי במפה לערך זה. קיים לפחות הר אחד גבוה יותר STR_CONFIG_SETTING_AUTOSLOPE :אפשר יצירת מילוי עפר תחת מבנים, פסי רכבת וכו': {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :אפשר שינוי פני השטח מתחת לבניינים ולמסילות ללא הסרתם @@ -1531,8 +1531,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :מלא STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :{STRING} :הצג חדשות צבעוניות החל משנת STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :השנה בה הודעות העיתונות מודפסות בצבע. לפני שנה זו הן מודפסות בשחור-לבן. STR_CONFIG_SETTING_STARTING_YEAR :{STRING} :שנת התחלה -STR_CONFIG_SETTING_SMOOTH_ECONOMY :אפשר כלכלה עדינה (יותר, שינויים קטנים יותר): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :כאשר מאופשר, הייצור של תעשיה משתנה לעיתים קרובות יותר, ובצעדים קטנים יותר. להגדרה זו בדרך כלל אין שום השפעה אם סוגי תעשיות מסופקים ע"י NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :אפשר קניית מניות מחברות אחרות: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :כאשר מאופשר, מתיר קנייה ומכירה של מניות של חברות. מניות יהיו זמינות רק עבור חברות המגיעות לגיל מסוים STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :אחוז הרווח מקטע נסיעה לתשלום במערכות הזנה: {STRING} @@ -1578,9 +1576,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :מותר, מת STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :מיקום עצים במהלך המשחק: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :שלוט בהופעה אקראית של עצים במהלך המשחק. זה עלול להשפיע על תעשיות המסתמכות על צמיחת עצים, לדוגמא מנסרות -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :ללא {RED}(שובר מנסרת עץ) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :רק ביערות גשם -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :בכל מקום STR_CONFIG_SETTING_TOOLBAR_POS :{STRING} :מיקום הסרגל העיקרי STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :מיקום אופקי של סרגל הכלים הראשי בראש המסך @@ -1736,6 +1731,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... מת STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}הזיכרון התמלא STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE} הקצאת {BYTES} בתים של מטמון נכשלה. המטמון הופחת ל-{BYTES} בתים. דבר זה יפחית את הביצועים של OpenTTD. כדי להפחית את דרישות הזיכרון ניתן לנסות לבטל את הגרפיקה ב-32bbp ו/או רמות ה-זום-אין +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1779,18 +1776,9 @@ STR_INTRO_TRANSLATION :{BLACK}בתרג # Quit window STR_QUIT_CAPTION :{WHITE}צא -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}אתה בטוח שברצונך לצאת ולחזור ל{STRING}? STR_QUIT_YES :{BLACK}כן STR_QUIT_NO :{BLACK}לא -# Supported OSes -STR_OSNAME_WINDOWS :חלונות -STR_OSNAME_UNIX :יוניקס -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :הייקו -STR_OSNAME_OS2 :מערכת הפעלה או.אס שתיים -STR_OSNAME_SUNOS :סולריס - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}עזיבת משחק STR_ABANDON_GAME_QUERY :{YELLOW}?האם אתה בטוח שברצונך לעזוב את המשחק @@ -1799,7 +1787,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}האם # Cheat window STR_CHEATS :{WHITE}(cheats) טריקים STR_CHEATS_TOOLTIP :{BLACK}תיבות הסימון מציינות האם השתמשת בטריק הנתון בעבר -STR_CHEATS_WARNING :{BLACK}אזהרה! את/ה עומ/ת לבגוד בחבריך למשחק. קח/י בחשבון שחרפה כזו תיזכר לנצח. STR_CHEAT_MONEY :{LTBLUE}{CURRENCY_LONG}- הגדל את כמות הכסף במאזנך ל STR_CHEAT_CHANGE_COMPANY :{ORANGE}{COMMA}{LTBLUE} :שחק כבעלי החברה STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}טרקטור אימתני (הסרת מפעלים, רכיבים שאי אפשר להזיז): {ORANGE}{STRING} @@ -1910,10 +1897,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK} שנה # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}משחק רשת -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}מפורסם -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}בחר בין משחק מפורסם (אינטרנטי) ומשחק לא מפורסם (רשת מקומית, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :לא -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :כן STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK} :שם השחקן STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}זהו שמך כפי שיצפה ע"י המשתתפים האחרים @@ -1954,8 +1937,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}הצטר STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}רענן שרת STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}רענן את המידע המוצג לגבי השרת -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}אתר שרת -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}סרוק את הרשת לאיתור שרת STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}הוסף שרת STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}מוסיף שרת לרשימה שתמיד תבדק למשחקים פעילים. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}הפעל שרת @@ -1972,6 +1953,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}השם STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}קבע סיסמה STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}הגן על המשחק שלך עם סיסמה אם אתה לא רוצה שהוא יהיה זמין לכולם +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}מפורסם +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}בחר בין משחק מפורסם (אינטרנטי) ומשחק לא מפורסם (רשת מקומית, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :לא STR_NETWORK_START_SERVER_ADVERTISED :כן STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} לקוח{P "" "ות"} @@ -2084,7 +2067,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :חברה חדש # Network client list STR_NETWORK_CLIENTLIST_KICK :בעט STR_NETWORK_CLIENTLIST_BAN :חסימה -STR_NETWORK_CLIENTLIST_GIVE_MONEY :נתן כסף STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :דבר לכולם STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :דבר לחברה STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :הודעה פרטית @@ -2093,8 +2075,6 @@ STR_NETWORK_SERVER :שרת STR_NETWORK_CLIENT :לקוח STR_NETWORK_SPECTATORS :צופים -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}הכנס סכום כסף שברצונך לתת - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}בטל שמירת הסיסמה החדשה STR_COMPANY_PASSWORD_OK :{BLACK}שמור את הסיסמה החדשה @@ -2194,8 +2174,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :.הצטרף ל STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :{2:NUM} הקים חברה חדשה {NBSP}{0:STRING} *** STR_NETWORK_MESSAGE_CLIENT_LEFT :({2:STRING}) עזב את המשחק {NBSP}{0:STRING} *** STR_NETWORK_MESSAGE_NAME_CHANGE :{STRING} שינה את שמו ל {STRING} *** -STR_NETWORK_MESSAGE_GIVE_MONEY :{2:CURRENCY_LONG} נתן לחברתך {NBSP}{0:STRING} *** -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :{2:CURRENCY_LONG} {1:STRING} נתת ל *** STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}השרת סגר את המשחק STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}השרת מופעל מחדש...{}אנא המתן... @@ -2272,6 +2250,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}כן, הורד את הגרפיקה STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}לא, צא מ-OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}הגדרות שקיפות STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK} שנה שקיפות עבור שלטי תחנות. Ctrl+לחיצה לנעילה @@ -2312,6 +2291,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}בנה STR_JOIN_WAYPOINT_CAPTION :{WHITE}חבר נקודות ציון STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}בנה נקודת ציון נפרדת +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :בניית מסילות STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :בניית מסילות חשמליות @@ -2495,7 +2476,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}גודל STR_OBJECT_CLASS_LTHS :מגדלורים STR_OBJECT_CLASS_TRNS :אנטנות -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}עצים STR_PLANT_TREE_TOOLTIP :{BLACK}בחר סוג עץ לנטיעה. במידה ויש עץ במשבצת, יתווספו עצים נוספים מסוגים שונים ללא קשר לסוג הנבחר STR_TREES_RANDOM_TYPE :{BLACK}עצים מסוג אקראי @@ -2769,14 +2750,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK} :מספר העיירות STR_MAPGEN_DATE :{BLACK} :תאריך STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK} :מספר התעשיות -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}גובה מפה מקסימלי: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}הגדל את הגובה המקסימלי של הרים במפה ביחידה אחת -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}הקטן את הגובה המקסימלי במפה ביחידה אחת -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}גובה קו השלג -STR_MAPGEN_SNOW_LINE_UP :{BLACK}הגבה את קו השלג -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}הנמך את קו השלג STR_MAPGEN_LAND_GENERATOR :{BLACK} :מחולל פני שטח -STR_MAPGEN_TREE_PLACER :{BLACK}אלגוריתם העצים: STR_MAPGEN_TERRAIN_TYPE :{BLACK} :סוג הקרקע STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK} :כמות ימים/אגמים STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}נהרות: @@ -2801,8 +2775,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK} :שם STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}גודל: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} על {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}שינוי הגובה המקסימלי במפה -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}שנה את גובה קו השלג STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}שנה את שנת הפתיחה # SE Map generation @@ -3080,13 +3052,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}שחד # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} מטרות STR_GOALS_SPECTATOR_CAPTION :{WHITE}מטרות גלובליות -STR_GOALS_GLOBAL_TITLE :{BLACK}מטרות גלובליות: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- אין - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- לא זמין - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}מטרות חברה: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}הקלק על מטרה כדי למרכז את התצוגה הראשית על תעשיה/עיירה/משבצת. קליק תוך כדי לחיצה על מקש Ctrl פותח חלון תצוגה חדש במיקום התעשיה/העיירה/המשבצת # Goal question window @@ -3624,10 +3593,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}שמור # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}מרכז את התצוגה על מיקום הרכבת. Ctrl+לחיצה יעקוב אחרי הרכבת בתצוגה הראשית -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}מרכז את התצוגה על מיקומו של כלי הרכב. Ctrl+לחיצה יעקוב אחרי כלי הרכב בתצוגה הראשית -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}מקד את התצוגה הראשית על כלי השייט. Ctrl+לחיצה יעקוב אחרי כל השייט בתצוגה הראשית -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}מקד את התצוגה הראשית על כלי הטייס. Ctrl+לחיצה יעקוב אחרי כלי הטייס בתצוגה הראשית STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}.שלח את הרכבת למוסך STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}.שלח את כלי הרכב למוסך @@ -3659,10 +3624,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}הצג STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}הצג פרטי כלי שייט STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}הצג פרטי כלי טייס -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}פעולה רכבת נוכחית - לחץ כדי לעצור/להפעיל את הרכבת. Ctrl+לחיצה על מנת לגרור ליעד -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}פעולת כלי רכב נוכחי - לחץ כדי לעצור/להפעיל את כלי הרכב. Ctrl+לחיצה כדי לגלול ליעד -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}פעולת כלי שייט נוכחי - לחץ כדי לעצור/להפעיל את כלי השייט. Ctrl+לחיצה כדי לגלול ליעד -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}פעולת כלי טייס נוכחי - לחץ כדי לעצור/להפעיל את כלי השייט. Ctrl+לחיצה כדי לגלול ליעד + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}טעינה / פריקה diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 8a98f311e3..f98be25ca8 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -72,12 +72,12 @@ STR_CARGO_PLURAL_SUGAR :Cukor STR_CARGO_PLURAL_SUGAR.t :cukrot STR_CARGO_PLURAL_TOYS :Játék STR_CARGO_PLURAL_TOYS.t :játékot -STR_CARGO_PLURAL_CANDY :Cukorka -STR_CARGO_PLURAL_CANDY.t :cukorkát +STR_CARGO_PLURAL_SWEETS :Cukorka +STR_CARGO_PLURAL_SWEETS.t :cukorkát STR_CARGO_PLURAL_COLA :Kóla STR_CARGO_PLURAL_COLA.t :kólát -STR_CARGO_PLURAL_COTTON_CANDY :Vattacukor -STR_CARGO_PLURAL_COTTON_CANDY.t :vattacukrot +STR_CARGO_PLURAL_CANDYFLOSS :Vattacukor +STR_CARGO_PLURAL_CANDYFLOSS.t :vattacukrot STR_CARGO_PLURAL_BUBBLES :Buborék STR_CARGO_PLURAL_BUBBLES.t :buborékot STR_CARGO_PLURAL_TOFFEE :Tejkaramella @@ -137,12 +137,12 @@ STR_CARGO_SINGULAR_SUGAR :cukor STR_CARGO_SINGULAR_SUGAR.t :cukrot STR_CARGO_SINGULAR_TOY :játék STR_CARGO_SINGULAR_TOY.t :játékot -STR_CARGO_SINGULAR_CANDY :cukorka -STR_CARGO_SINGULAR_CANDY.t :cukorkát +STR_CARGO_SINGULAR_SWEETS :cukorka +STR_CARGO_SINGULAR_SWEETS.t :cukorkát STR_CARGO_SINGULAR_COLA :kóla STR_CARGO_SINGULAR_COLA.t :kólát -STR_CARGO_SINGULAR_COTTON_CANDY :vattacukor -STR_CARGO_SINGULAR_COTTON_CANDY.t :vattacukrot +STR_CARGO_SINGULAR_CANDYFLOSS :vattacukor +STR_CARGO_SINGULAR_CANDYFLOSS.t :vattacukrot STR_CARGO_SINGULAR_BUBBLE :buborék STR_CARGO_SINGULAR_BUBBLE.t :buborékot STR_CARGO_SINGULAR_TOFFEE :tejkaramella @@ -257,6 +257,7 @@ STR_COLOUR_DEFAULT :Alapértelmezet STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mi/h STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}mező/nap STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}LE STR_UNITS_POWER_METRIC :{COMMA}{NBSP}LE @@ -296,8 +297,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Csökken STR_TOOLTIP_SORT_CRITERIA :{BLACK}Sorbarendezési feltétel STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Szűrési feltétel kiválasztása STR_BUTTON_SORT_BY :{BLACK}Rendezés -STR_BUTTON_LOCATION :{BLACK}Megnéz -STR_BUTTON_RENAME :{BLACK}Átnevez STR_BUTTON_CATCHMENT :{BLACK}Lefedett terület STR_TOOLTIP_CATCHMENT :{BLACK}Az állomás által lefedett terület mutatása @@ -377,6 +376,15 @@ STR_SORT_BY_CARGO_CAPACITY :Szállítási k STR_SORT_BY_RANGE :Hatótávolság STR_SORT_BY_POPULATION :Lakosság STR_SORT_BY_RATING :Értékelés +STR_SORT_BY_NUM_VEHICLES :Járművek száma +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Tavalyi összes profit +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Idei összes profit +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Tavalyi átlagos profit +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Idei átlagos profit + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Nincs +STR_GROUP_BY_SHARED_ORDERS :Megosztott utasítások # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Játék szüneteltetése @@ -465,7 +473,7 @@ STR_FILE_MENU_EXIT :Kilépés # map menu STR_MAP_MENU_MAP_OF_WORLD :Világtérkép -STR_MAP_MENU_EXTRA_VIEW_PORT :Extra látkép +STR_MAP_MENU_EXTRA_VIEWPORT :Extra látkép STR_MAP_MENU_LINGRAPH_LEGEND :Rakományáramlási jelmagyarázat STR_MAP_MENU_SIGN_LIST :Feliratok listája @@ -631,8 +639,8 @@ STR_MONTH_DEC :december # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Jelkulcs STR_GRAPH_KEY_TOOLTIP :{BLACK}A grafikonok jelmagyarázata -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -803,6 +811,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Göröngyös Talaj STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Füves Talaj STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Csupasz Föld +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Esőerdő STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Szántóföld STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Fa STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Kő @@ -834,6 +843,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Minden r STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Utolsó üzenet vagy újsághír megmutatása STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * SZÜNET * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * SZÜNET (várakozás a kapcsolati gráf frissítésére) * * STR_STATUSBAR_AUTOSAVE :{RED}Automatikus mentés STR_STATUSBAR_SAVING_GAME :{RED}* * JÁTÉK MENTÉSE * * @@ -948,7 +958,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN} önkormányzata és {STRING} szerződést kötött egy éves kizárólagos szállítási jogokra! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}{COMMA}. látkép +STR_EXTRA_VIEWPORT_TITLE :{WHITE}{COMMA}. látkép STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Látkép átállítása STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}A látképre a fő nézet pozícióját másolja STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Fő nézet ideállítása @@ -999,10 +1009,11 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexikói Peso ( STR_GAME_OPTIONS_CURRENCY_NTD :Új Tajvani Dollár (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Kínai Renminbi (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Hongkongi Dollár (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indiai Rúpia (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Indonéz rúpia (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Maláj ringgit (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Közúti járművek -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}A közúti közlekedés oldalának kiválasztása STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Balra hajtás STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Jobbra hajtás @@ -1053,10 +1064,19 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Jelöld STR_GAME_OPTIONS_RESOLUTION :{BLACK}Képernyő felbontás STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Játékhoz használt felbontás kiválasztása STR_GAME_OPTIONS_RESOLUTION_OTHER :egyéb +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardveres gyorsítás +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Bekapcsolásával az OpenTTD hardveres gyorsítást próbál alkalmazni. A beállítás csak a játék újraindítása után lép érvénybe. +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Ez a beállítás csak a játék újraindítása után lép érvénybe + +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync (Vertikális Szinkronizáció) +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Jelöld be ezt a négyzetet hogy engedélyezd a v-sync-et. A változtatás csak a játék újraindítása után fog érvényesülni. Kizárólag hardware gyorsítással működik! STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Felület mérete STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Használni kívánt felületméret kiválasztása +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(automatikus) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normál STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dupla méret STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Négyszeres méret @@ -1064,10 +1084,19 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Négyszeres mé STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Betűméret STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Használni kívánt betűméret kiválasztása +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(automatikus) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normál STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dupla méret STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Négyszeres méret +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafika + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Képernyőfrissítési frekvencia +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Játékhoz használt képernyőfrissítési frekvencia kiválasztása +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :egyéb +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}A 60 Hz-nél nagyobb frekvencia befolyással lehet a teljesítményre. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafikus alapcsomag STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}A játékhoz használandó grafikus alapcsomag kiválasztása STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} hiányzó/hibás fájl @@ -1162,6 +1191,8 @@ STR_TERRAIN_TYPE_FLAT :Sík STR_TERRAIN_TYPE_HILLY :Dombos STR_TERRAIN_TYPE_MOUNTAINOUS :Hegyvidéki STR_TERRAIN_TYPE_ALPINIST :Alpesi +STR_TERRAIN_TYPE_CUSTOM :Egyéni magasság +STR_TERRAIN_TYPE_CUSTOM_VALUE :Egyéni magasság ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Engedékeny STR_CITY_APPROVAL_TOLERANT :Toleráns @@ -1243,8 +1274,10 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ha engedélyezv STR_CONFIG_SETTING_CITY_APPROVAL :Városi tanács hozzáállása a területének az átépítéséhez: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Válaszd ki, hogy mennyi zaj és környezeti kár okozása befolyásolja a cég megítélését egy városban, mely hatással van a cég további építési lehetőségeire a város területén belül -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximális térképmagasság: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :A térképen található hegyek maximális magasságának beállítása +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Térkép magasságkorlátja: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Beállíthatod a térkép legmagasabb pontjának tengerszint feletti magasságát. "(automatikus)" esetén az értéket a térképgenerátor határozza meg. +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(automatikus) STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Nem állíthatod erre az értékre a maximális térképmagasságot. Legalább egy hegy magasabb ennél STR_CONFIG_SETTING_AUTOSLOPE :Épületek, vágányok stb. alatti tereprendezés engedélyezése: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tájrendezés engedélyezése épületek és utak alatt azok eltávolítása nélkül @@ -1389,7 +1422,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Mennyi gazdasá STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Olajfinomítók és olajfúró tornyok maximális távolsága a térkép szélétől: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Megadhatod, hogy a térkép szélétől milyen messze épülhetnek olajfinomítók és olajfúró tornyok. Sziget jellegű térképek esetén így a part közelében fognak épülni. 256 mezőnél szélesebb, ill. hosszabb térképek esetén ez az érték felszorzódik. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Hóhatár magassága: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Ezzel a beállítással szabályozhatod a szub-arktikus táj hóhatárát. A hó befolyással lehet a gazdasági épületek generálására és a települések növekedésére. +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Ezzel a beállítással szabályozhatod a szub-arktikus táj hóhatárát. A hó befolyással lehet a gazdasági épületek generálására és a települések növekedésére. Csak a pályaszerkesztőben lehet állítani, más esetben a havas terület százalékos kiterjedéséből kerül kiszámításra. +STR_CONFIG_SETTING_SNOW_COVERAGE :Havas terület kiterjedése: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Beállíthatod, hogy a szub-arktikus tájon a térkép mekkora részét fedje hó. A hó befolyással van a gazdasági épületek elhelyezésére és a települések növekedésére. A beállítás csak a térképgenerátort érinti. A tengerszint feletti legelső szintet sosem fedheti hó. +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Sivatag kiterjedése: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Beállíthatod, hogy a szubtrópusi tájon a térkép mekkora részét fedje sivatag. A sivatag hatással van a gazdasági épületek elhelyezésére és a települések növekedésére. A beállítás csak a térképgenerátort érinti. +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :A terep durvasága: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(csak TerraGenesis esetén) Kiválaszthatod a hegyek mennyiségét: a sima térképeken kevesebb, de kiterjedtebb hegy van, míg a durva térképeken sok hegy van, amik kissé ismétlődőnek tűnhetnek. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Nagyon sima @@ -1503,6 +1542,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Építő eszkö STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Az építő eszközök, pl. hidak, alagutak stb. aktívan tartása használatuk után STR_CONFIG_SETTING_EXPENSES_LAYOUT :Kiadási/bevételi adatok csoportosítása a pénzügyi ablakban: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :A pénzügyi adatok ablak elrendezésének beállítása +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Jelzők automatikus eltávolítása vasúti pálya építésekor: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automatikusan eltávolítja a jelzőket vasúti pálya építésekor, ha útban vannak. Potenciálisan vasúti baleseteket okozhat! +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :A játék gyorsításának maximális értéke: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Megadja, hogy milyen gyorsan fusson a játék, ha a gyorsítás be van kapcsolva. 0 esetén nincs korlát, olyan gyorsan fog futni, ahogyan a számítógéped bírja. 100% alatt a játék lassabb lesz. A felső határ a számítógéped teljesítményétől és magától a játéktól is függ. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :A normál sebesség {NUM}%-a +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Nincs korlát (ahogyan a számítógéped bírja) STR_CONFIG_SETTING_SOUND_TICKER :Hírsáv: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Hang lejátszása új hír érkezésekor @@ -1616,8 +1661,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Játék végi p STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :A játék ebben az évben ér véget pontozás szempontjából. Ennek az évnek a végén a vállalat teljesítménypontszáma rögzítésre kerül, és adott esetben megjelenik a rekord táblán, de a játékosok ezután folytathatják a játékot.{}Ha ez a kezdő év elé van állítva, akkor a rekord tábla sosem jelenik meg. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Soha -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Egyenletes gazdaság (több, kisebb változás): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Bekapcsolva a gazdasági épületek termelése gyakrabban és kisebb lépésekben változik. Ennek a beállításnak általában nincs hatása, ha a gazdasági épületeket NewGRF nyújta +STR_CONFIG_SETTING_ECONOMY_TYPE :Gazdaság típusa: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Egyenletes gazdaság esetén a termelés gyakrabban, de kisebb mértékben változik. Stagnáló gazdaság esetén a termelés egyáltalán nem változik, a gazdasági épületek nem zárnak be. NewGRF-ből származó gazdasági épületek esetén ennek a beállításnak lehet, hogy nem lesz hatása. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Eredeti +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Egyenletes +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Stagnáló STR_CONFIG_SETTING_ALLOW_SHARES :Más vállalatokból lehet részvényt vásárolni: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Bekapcsolva engedélyezi más vállalatok részvényeinek megvásárlását. A részvények csak akkor elérhetőek, ha a vállalat elért egy bizonyos kort STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Vállalatok minimális életkora részvénykibocsátáshoz: {STRING} @@ -1669,9 +1717,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineáris STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Játékbeli faelhelyezkedés: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Fák véletlenszerű megjelenésének szabályozása a játék során. Ez befolyásolhatja a gazdasági épületeket, melyek a fák növekedésétől függnek, mint a favágók -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :sehol {RED}(favágók ellehetetlenítése) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :csak esőerdőkben -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :mindenhol +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Növekedjenek, de ne terjedjenek {RED}(favágók ellehetetlenítése) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Növekedjenek és esőerdőkben terjedjenek +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Növekedjenek és mindenhol terjedjenek +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Ne növekedjenek és ne terjedjenek {RED}(favágók ellehetetlenítése) STR_CONFIG_SETTING_TOOLBAR_POS :A fő eszközsor helye: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :A fő eszközsor vízszintes elhelyezésének beállítása a képernyő tetején @@ -1689,12 +1738,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :A nagyítás ma STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Maximális nagyítás mértéke. A nagyobb nagyítási mérték több memóriát igényel STR_CONFIG_SETTING_ZOOM_MAX :A kicsinyítés maximális mértéke: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Maximális kicsinyítés mértéke. A nagyobb kicsinyítési mérték szaggatást okozhat +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Sprite-ok maximális felbontása: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Meghatározhatod a sprite-ok maximális felbontását. Ha korlátozod a maximális felbontást, akkor abban az esetben is kisebb felbontású sprite-ok fognak megjelenni, ha egyébként lenne nagyobb felbontású is. Ez akkor lehet hasznos, ha olyan NewGRF-ek keverékét használod, amelyek különböző felbontással rendelkeznek, konzisztensebb megjelenést biztosítva a játéknak. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normál STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Települések növekedési sebessége: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :A települések növekedési sebessége STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Nincs @@ -1738,6 +1792,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :A sebességért STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Angolszász (mi/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrikus (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Játékbeli egység (mező/nap) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Teljesítmény mértékegysége: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :A teljesítményértékek a kiválasztott mértékegységben fognak megjelenni a felhasználói felületen @@ -1827,6 +1882,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... érv STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Kevés a memória STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES} memória gyorsítótár kiosztása sikertelen. A gyorsítótár le lett csökkentve {BYTES}ra. Ez csökkenti az OpenTTD teljesítményét. Csökkentheted a memóriaigényt, ha kikapcsolod a 32bpp grafikát és/vagy a nagyítási szinteket +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}Hiba a videobeállításokban... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nem található kompatibilis GPU. Hardveres gyorsítás kikapcsolva. + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1870,18 +1929,10 @@ STR_INTRO_TRANSLATION :{BLACK}Ebből a # Quit window STR_QUIT_CAPTION :{WHITE}Kilépés -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Biztosan bezárod ezt a programot és kilépsz a {STRING}ba? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Biztosan bezárod ezt a programot? STR_QUIT_YES :{BLACK}Igen STR_QUIT_NO :{BLACK}Nem -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Kilépés a játékból STR_ABANDON_GAME_QUERY :{YELLOW}Biztosan kilépsz ebből a játékból? @@ -1890,7 +1941,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Biztosa # Cheat window STR_CHEATS :{WHITE}Csalások STR_CHEATS_TOOLTIP :{BLACK}A kijelölőnégyzetek jelzik a csalások eddigi használatát -STR_CHEATS_WARNING :{BLACK}Figyelem! Te épp a versenytársaidat készülöd elárulni. Sose felejtsd el, hogy egy ilyen szégyenletes tett sose merül feledésbe +STR_CHEATS_NOTE :{BLACK}Megjegyzés: a csalások használata mentve lesz a játékmentésben. STR_CHEAT_MONEY :{LTBLUE}Tőkeemelés {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Irányított vállalat: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Csodabuldózer (lerombol gazdasági épületeket, mozgathatatlan objektumokat): {ORANGE}{STRING} @@ -2002,10 +2053,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Nyakkend # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hálózati játék -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Hírdetett -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Válassz hírdetett (internet) és nem hírdetett (helyi hálózat, LAN) játék közül. -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nem -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Igen STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Játékos neve: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}A többi játékos ilyen néven fog ismerni Téged. @@ -2046,8 +2093,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Csatlako STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Szerver frissítése STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Szerver infó frissítése -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Szerver keresése -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Szerver keresése a hálózaton +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Keresés interneten +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Nyilvános szerverek keresése az interneten +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Keresés helyi hálózaton +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Szerverek keresése a helyi hálózaton STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Szerver hozzáadása STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Hozzáadja a szervert a listához, így később gyorsabban tudsz hozzá csatlakozni STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Szerver indítása @@ -2064,6 +2113,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}A játé STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Jelszó beállítása STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Védd le a játékodat jelszóval, ha nem akarod hogy illetéktelenek csatlakozzanak +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Hírdetett +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Válassz hírdetett (internet) és nem hírdetett (helyi hálózat, LAN) játék közül. STR_NETWORK_START_SERVER_UNADVERTISED :Nem STR_NETWORK_START_SERVER_ADVERTISED :Igen STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} kliens @@ -2177,7 +2228,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Új vállalat # Network client list STR_NETWORK_CLIENTLIST_KICK :Kirúgás STR_NETWORK_CLIENTLIST_BAN :Kitiltás -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Pénz adományozása STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Üzenet mindenkinek STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Üzenet a vállalatnak STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privát üzenet @@ -2186,8 +2236,6 @@ STR_NETWORK_SERVER :Szerver STR_NETWORK_CLIENT :Kliens STR_NETWORK_SPECTATORS :Megfigyelők -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Add meg a küldeni kívánt pénz mennyiségét - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ne mentsd el a megadott jelszót STR_COMPANY_PASSWORD_OK :{BLACK}Add meg az új vállalati jelszót @@ -2274,11 +2322,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :A játék tová STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :A játék továbbra is szünetel ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :A játék továbbra is szünetel ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :A játék továbbra is szünetel ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :A játék továbbra is szünetel ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :A játék folytatódik ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :játékosok száma STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :kapcsolódó kliensek STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :kézi STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :játékszkript +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :várakozás a kapcsolati gráf frissítésére ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :kilépés STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} csatlakozott a játékhoz @@ -2288,8 +2338,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} cs STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} új vállalatot alapított (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} kilépett a játékból ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} nevet változtatott. Új neve: {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} a következő összeget utalta vállalatodnak: {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** {1:STRING} vállalatnak sikeresen átutaltál {2:CURRENCY_LONG}-t +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} a következő összeget utalta {1:STRING} részére: {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}A szerver leállította a játékot STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}A szerver újraindul...{}Türelem... STR_NETWORK_MESSAGE_KICKED :*** {STRING} ki lett rúgva. Oka: ({STRING}) @@ -2367,6 +2416,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}Az OpenT STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Igen, a grafikai alapcsomag letöltése STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nem, kilépés az OpenTTD-ből +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Letöltés sikertelen +STR_MISSING_GRAPHICS_ERROR :{BLACK}A grafikus alapcsomag letöltése sikertelen.{}Tölts le manuálisan egy grafikus alapcsomagot! +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Kilépés az OpenTTD-ből + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Átlátszósági beállítások STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Átlátszó feliratok bekapcsolása. Ctrl+kattintással zárolható @@ -2408,6 +2461,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Külön STR_JOIN_WAYPOINT_CAPTION :{WHITE}Ellenőrző pont egyesítése STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Különálló ellenőrző pont építése +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Kikapcsolva, mivel semmilyen jármű sem tudná használni + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Vasút építése STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Villamosított vasút építése @@ -2595,13 +2651,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Méret: STR_OBJECT_CLASS_LTHS :Világítótornyok STR_OBJECT_CLASS_TRNS :Adótornyok -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Fák STR_PLANT_TREE_TOOLTIP :{BLACK}Ültetendő fa kiválasztása. Ha már van fa a mezőn, akkor újabb fák ültetése a kiválasztott fatípustól függetlenül STR_TREES_RANDOM_TYPE :{BLACK}Véletlenszerű fafélék STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Véletlenszerűen kiválasztott fákat helyez el. Shift lenyomásával megmutatja a várható telepítési költséget STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Véletlenszerű fák STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Véletlenszerűen fákat ültet a térképre +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normál +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}A tájon való húzással egyesével fákat ültet. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Liget +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}A tájon való húzással kis erdőket, ligeteket ültet. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Erdő +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}A tájon való húzással nagy erdőket ültet. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Táj szerkesztése @@ -2652,12 +2714,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Véletle # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Új gazdasági épület STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Megfelelő gazdasági épülettípus kiválasztása a listából -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Sok véletlen gazdasági épület +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Sok véletlen gazdasági épület STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Elhelyez a térképen véletlenszerüen sok gazdasági épületet +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Sok véletlen gazdasági épület +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Tényleg szeretnél sok véletlen gazdasági épületet felépíteni? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Ár: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Kutatás STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Épít STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Alapít +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Összes gazdasági épület eltávolítása +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Eltávolítja az összes, a térképen található gazdasági épületet +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Összes gazdasági épület eltávolítása +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Biztosan el akarod távolítani az összes gazdasági épületet? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Ipari láncolat {STRING} gazdasági épületnek @@ -2678,6 +2746,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Válaszd # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Terület-információ +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}A főnézetet a csempére állítja. Ctrl+Klikk megnyit egy új főnézetet a csempén. STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}{LTBLUE}Nem lehet lerombolni STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}A megtisztítás költsége: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Bevétel lerombolás esetén: {LTBLUE}{CURRENCY_LONG} @@ -2887,6 +2956,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Szűrő: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Fájl felülírása STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Biztos vagy benne, hogy felülírod a létező fájlt? +STR_SAVELOAD_DIRECTORY :{STRING} (Könyvtár) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Szülőkönyvtár) STR_SAVELOAD_OSKTITLE :{BLACK}Add meg a játékmentés nevét @@ -2898,14 +2969,18 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Várossűrűség: STR_MAPGEN_DATE :{BLACK}Dátum: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Gazd. épületek száma: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximum térképmagasság: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}A hegyek maximális magasságának növelése a térképen eggyel -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}A hegyek maximális magasságának csökkentése a térképen eggyel -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Hóhatár: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}A hóhatár megnövelése eggyel -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}A hóhatár csökkentése eggyel +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Legmagasabb pont: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}A térkép legmagasabb pontjának tengerszint feletti magasságának növelése eggyel +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}A térkép legmagasabb pontjának tengerszint feletti magasságának csökkentése eggyel +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Havas terület kiterjedése: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}A havas terület kiterjedésének növelése 10%-kal +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}A havas terület kiterjedésének csökkentése 10%-kal +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Sivatag kiterjedése: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}A sivatag kiterjedésének növelése 10%-kal +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}A sivatag kiterjedésének csökkentése 10%-kal +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Térkép generátor: -STR_MAPGEN_TREE_PLACER :{BLACK}Fa algoritmus: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tereptípus: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Tengerszint: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Folyók: @@ -2930,8 +3005,10 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Magassá STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Méret: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Térkép maximális magasságának megváltozatása -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Hóhatár megváltoztatása +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}A legmagasabb pont tengerszint feletti magassága +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Legmagasabb pont +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}A havas terület kiterjedése (százalékban) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}A sivatag kiterjedése (százalékban) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Kezdő év megváltoztatása # SE Map generation @@ -3148,6 +3225,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Kis- és # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Felirat szerkesztése +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}A fő nézetet a felirat helyére állítja. Ctrl+kattintás esetén új nézetet nyit a felirat helyére. STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Következő felirat STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Előző felirat @@ -3208,33 +3286,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Új épületek STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Kizárólagos szállítási jogok vásárlása STR_LOCAL_AUTHORITY_ACTION_BRIBE :Önkormányzat megvesztegetése -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Kis helyi reklámhadjárat indítása, hogy több utast és rakományt vonzz a megállóidba.{}Ára: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Közepes helyi reklámhadjárat indítása, hogy több utast és rakományt vonzz a megállóidba.{}Ára: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Nagy helyi reklámhadjárat indítása, hogy több utast és rakományt vonzz a megállóidba.{}Ára: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}A városi úthálózat felújításának támogatása. Hat hónapig jelentősen összezavarja a közúti forgalmat.{}Ára: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Szobor építése a vállalatod tiszteletére.{}Ára: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Új kereskedelmi épületek építésének támogatása a városban.{}Ára: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Egy éves kizárólagos szállítási jogok vásárlása a városban. Az önkormányzat csak a te állomásaid használatát engedi meg az utasoknak és a rakományoknak.{}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Kis helyi reklámhadjárat indítása, hogy több utast és rakományt vonzz a megállóidba.{}A város körül kis területen ideiglenesen javítja az állomásaid minősítését.{}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Közepes helyi reklámhadjárat indítása, hogy több utast és rakományt vonzz a megállóidba.{}A város körül közepes méretű területen ideiglenesen javítja az állomásaid minősítését.{}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Nagy helyi reklámhadjárat indítása, hogy több utast és rakományt vonzz a megállóidba.{}A város körül nagy területen ideiglenesen javítja az állomásaid minősítését.{}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}A városi úthálózat felújításának támogatása.{}Hat hónapig jelentősen összezavarja a közúti forgalmat.{}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Szobor építése a vállalatod tiszteletére.{}Javítja az állomásaid értékelését a városban.{}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Új kereskedelmi épületek építésének támogatása a városban.{}A város egy ideig gyorsabban fog növekedni.{}Ára: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Egy éves kizárólagos szállítási jogok vásárlása a városban.{}Az önkormányzat megtiltja az utasoknak és a rakományoknak, hogy más vállalatok állomásait használják.{}Ára: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}A megítélésed növelése az önkormányzat megvesztegetésével, komoly büntetést kockáztatva, ha az kiderül.{}Ára: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} céljai STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globális célok STR_GOALS_SPECTATOR :Globális célok -STR_GOALS_GLOBAL_TITLE :{BLACK}Globális célok: +STR_GOALS_GLOBAL_BUTTON :{BLACK}Globális célok +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Globális célok mutatása +STR_GOALS_COMPANY_BUTTON :{BLACK}Vállalati célok +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Vállalati célok mutatása STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nincs - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Nem alkalmazható - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Vállalat céljai: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kattintással a fő nézetet a célra állítja. Ctrl+kattintással új látképet nyit a gazdasági épület/település/mező helyéről # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Kérdés -STR_GOAL_QUESTION_CAPTION_INFORMATION :Információ -STR_GOAL_QUESTION_CAPTION_WARNING :Figyelmeztetés -STR_GOAL_QUESTION_CAPTION_ERROR :Hiba +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Kérdés +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Információ +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Figyelmeztetés +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Hiba ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Mégse @@ -3424,6 +3503,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}SZH áth STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}A vállalat székházának újraépítése máshol a vállalat értékének 1%-áért. Shift+kattintással megmutatja a becsült költséget a székhely áthelyezése nélkül STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Részletek STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Részletes információk megtekintése az infrastruktúráról +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Adományozz pénzt +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Utalj pénzt ennek a vállalatnak STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Új arc STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Új arc választása az elnöknek @@ -3441,6 +3522,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}25%-nyi STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :A vállalat neve STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Elnök neve +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Mennyi pénzt szeretnél adományozni? STR_BUY_COMPANY_MESSAGE :{WHITE}Vállalatunk vagyontárgyait eladásra kínáljuk: járművek, terület és hálózat tulajdonok, bankszámla{}{}Megveszed {COMPANY} vállalatot {CURRENCY_LONG}-ért? @@ -3595,6 +3677,7 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Meghajto STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Átalakítható: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Minden rakománytípusra STR_PURCHASE_INFO_NONE :Semmi +STR_PURCHASE_INFO_ENGINES_ONLY :Csak mozdonyok STR_PURCHASE_INFO_ALL_BUT :Mindenre, kivéve {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maximális vonóerő: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Hatótávolság: {GOLD}{COMMA} mező @@ -3801,10 +3884,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Az autom # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Közelítés a vonat jelenlegi helyzetére. Ctrl+kattintással a vonat követése a fő nézetben -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Közelítés a jármű jelenlegi helyzetére. Ctrl+kattintással a jármű követése a fő nézetben -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Közelítés a hajó jelenlegi helyzetére. Ctrl+kattintással a hajó követése a fő nézetben -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Közelítés a repülőgép jelenlegi helyzetére. Ctrl+kattintással a repülőgép követése a fő nézetben +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Közelítés a vonat jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a vonatot. Ctrl+kattintással új nézet nyílik a vonat helyzetére. +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Közelítés a közúti jármű jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a járművet. Ctrl+kattintással új nézet nyílik a jármű helyzetére. +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Közelítés a hajó jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a hajót. Ctrl+kattintással új nézet nyílik a hajó helyzetére. +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Közelítés a repülőgép jelenlegi helyzetére. Dupla kattintással a fő nézetben követni fogja a repülőgépet. Ctrl+kattintással új nézet nyílik a repülőgép helyzetére. STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}A járműtelepre küldi a vonatot. Ctrl+kattintással csak javításra STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Garázsba küldi a járművet. Ctrl+kattintással csak javításra @@ -3836,10 +3919,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}A közú STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}A hajó adatai STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}A repülőgép adatai -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Aktuális vonatmozgás - kattints ide a vonat elindításához vagy megállításához. Ctrl+kattintással az utasítások váltása -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Aktuális járműmozgás - kattints ide a jármű elindításához vagy megállításához. Ctrl+kattintással az utasítások váltása -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Aktuális hajómozgás - kattints ide a hajó elindításhoz vagy megállításhoz. Ctrl+kattintással az utasítások váltása -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Aktuális repülőgépmozgás - kattints ide a repülőgép elindításához vagy megállításához. Ctrl+kattintással az utasítások váltása +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Aktuális vonatmozgás - kattints ide a vonat elindításához vagy megállításához. +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Aktuális járműmozgás - kattints ide a jármű elindításához vagy megállításához. +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Aktuális hajómozgás - kattints ide a hajó elindításához vagy megállításához. +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Aktuális repülőgépmozgás - kattints ide a repülőgép elindításához vagy megállításához. + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Közelítés a célpontra. Ctrl+kattintással új nézet nyílik a célpont helyére. # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Berakodás / Kirakodás @@ -4067,6 +4152,7 @@ STR_ORDER_REFIT_STOP_ORDER :(átalakít err STR_ORDER_STOP_ORDER :(megáll) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Az állomás nem használható){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Automata) @@ -4311,6 +4397,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :A játékállá STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :A fájl nem olvasható STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :A fájl nem írható STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Adat integritás hiba +STR_GAME_SAVELOAD_ERROR_PATCHPACK :A játékállást a játék módosított változata mentette el STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}A játék olyan verzióban lett elmentve, ami nem támogatja a villamosokat. Az összes villamos el lett távolítva @@ -4338,6 +4425,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Csak egy STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Hatalmas képernyőkép STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}A képernyőkép felbontása {COMMA} x {COMMA} pixel lesz. A méret miatt ez eltarthat egy ideig. Szeretnéd folytatni? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Magasságtérkép sikeresen elmentve '{STRING}' néven. A térkép legmagasabb pontja: {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}A képernyő elmentve '{STRING}' néven STR_ERROR_SCREENSHOT_FAILED :{WHITE}A képmentés nem sikerült! @@ -4391,6 +4479,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... ninc STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} kellene hozzá STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Nem törleszthetsz a kölcsönből... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Nem tudod a banktól kölcsönkapott pénzt továbbadni... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Nem tudsz pénzt adományozni a vállalatnak... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Nem veheted meg a vállalatot... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nem építheted ide a székházadat... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Nem vehetsz 25%-nyi részvényt ebből a vállalatból... @@ -4517,6 +4606,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Rossz járműte STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} túl hosszú a csere után STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Nincsenek automatikus járműfelújítási szabályok alkalmazva STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(pénzlimit) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Az új jármű nem tud {STRING.t} szállítani +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Az új jármű nem alakítható át a(z) {NUM}. utasítás során # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Nem lehetséges vágányösszetétel @@ -4835,10 +4926,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE.t :cukorbányát ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Névtelen -STR_SV_TRAIN_NAME :Vonat {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Közúti jármű {COMMA} -STR_SV_SHIP_NAME :Hajó {COMMA} -STR_SV_AIRCRAFT_NAME :Repülő {COMMA} +STR_SV_TRAIN_NAME :Vonat #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Közúti jármű #{COMMA} +STR_SV_SHIP_NAME :Hajó #{COMMA} +STR_SV_AIRCRAFT_NAME :Repülő #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} Észak @@ -5142,6 +5233,7 @@ STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} {COMMA}. STR_FORMAT_BUOY_NAME_SERIAL.ba :{TOWN} {COMMA}. sz. Bóján STR_FORMAT_COMPANY_NUM :({COMMA}. vállalat) STR_FORMAT_GROUP_NAME :{COMMA} csoport +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN}i {STRING} STR_FORMAT_WAYPOINT_NAME :{TOWN} Ellenőrző pont STR_FORMAT_WAYPOINT_NAME.ba :{TOWN} Ellenőrző ponton diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 7415e01f1e..778c072250 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :Hveiti STR_CARGO_PLURAL_RUBBER :Gúmmí STR_CARGO_PLURAL_SUGAR :Sykur STR_CARGO_PLURAL_TOYS :Leikföng -STR_CARGO_PLURAL_CANDY :Sælgæti +STR_CARGO_PLURAL_SWEETS :Sælgæti STR_CARGO_PLURAL_COLA :Kóladrykkir -STR_CARGO_PLURAL_COTTON_CANDY :Sykurfrauð +STR_CARGO_PLURAL_CANDYFLOSS :Sykurfrauð STR_CARGO_PLURAL_BUBBLES :Kúlur STR_CARGO_PLURAL_TOFFEE :Toffý STR_CARGO_PLURAL_BATTERIES :Rafhlöður @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :Hveitis STR_CARGO_SINGULAR_RUBBER :Gúmmí STR_CARGO_SINGULAR_SUGAR :Sykur STR_CARGO_SINGULAR_TOY :Leikfanga -STR_CARGO_SINGULAR_CANDY :Sælgætis +STR_CARGO_SINGULAR_SWEETS :Sælgætis STR_CARGO_SINGULAR_COLA :Kóladrykkja -STR_CARGO_SINGULAR_COTTON_CANDY :Sykurfrauðs +STR_CARGO_SINGULAR_CANDYFLOSS :Sykurfrauðs STR_CARGO_SINGULAR_BUBBLE :Kúlu STR_CARGO_SINGULAR_TOFFEE :Toffý STR_CARGO_SINGULAR_BATTERY :Rafhlöðu @@ -224,8 +224,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Velja up STR_TOOLTIP_SORT_CRITERIA :{BLACK}Velja uppröðun STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Veldu hvers kyns farartæki þú vilt kaupa STR_BUTTON_SORT_BY :{BLACK}Flokka eftir -STR_BUTTON_LOCATION :{BLACK}Staðsetning -STR_BUTTON_RENAME :{BLACK}Endurnefna STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Loka glugga STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Haus glugga - dragðu með músinni til að færa gluggann @@ -292,6 +290,8 @@ STR_SORT_BY_RANGE :Drægni STR_SORT_BY_POPULATION :Fólksfjöldi STR_SORT_BY_RATING :Einkunn +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Stöðva leik STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Spóla leikinn áfram @@ -374,7 +374,7 @@ STR_FILE_MENU_EXIT :Hætta # map menu STR_MAP_MENU_MAP_OF_WORLD :Heimskort -STR_MAP_MENU_EXTRA_VIEW_PORT :Auka sjónarhorn +STR_MAP_MENU_EXTRA_VIEWPORT :Auka sjónarhorn STR_MAP_MENU_SIGN_LIST :Skiltalisti ############ range for town menu starts @@ -537,8 +537,8 @@ STR_MONTH_DEC :Desember # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Lykill STR_GRAPH_KEY_TOOLTIP :{BLACK}Sýna lykilmynd -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -840,7 +840,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Bæjarstjórn {TOWN} skrifar undir eins árs sérleyfis samning við {STRING} til flutningar á öllum varningi. # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Sjónarhorn {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Sjónarhorn {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Afrita í sjónarhorn STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Afrita aðalsjónarhornið í þetta sjónarhorn STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Afrita frá sjónarhorni @@ -888,8 +888,6 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Lari (Gel) STR_GAME_OPTIONS_CURRENCY_IRR :Íranskt ríal (IRR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Aksturstefna -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Aksturstefna bifreiða STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Vinstristefna STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Hægristefna @@ -945,6 +943,10 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :annað + + + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grunngrafík STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Nota grunngrafíkina STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} týnd{P "" ar} eða ónýt{P "" ar} skrá{P "" r} @@ -1440,8 +1442,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Allt STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Fréttir byrja að birtast í lit árið: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Árið sem tilkynningar í dagblöðuðum byrja að vera í lit. Fram að þessum tíma eru blöð í svart/hvítu STR_CONFIG_SETTING_STARTING_YEAR :Upphafsár: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Virkja jafnan efnahag (fleiri og minni breytingar): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ef þessi stilling er virk breytist framleiðsla í iðnaði oftar og í smærri skrefum. Þessi stilling hefur yfirleitt engin áhrif ef tegund iðnaðar er ákveðinn með NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Leyfa hlutabréfakaup í öðrum fyrirtækjum: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ef þessi stilling er virk er hægt að kaupa og selja hlutabréf í fyrirtækjum. Hlutabréf eru aðeins aðgengileg fyrir fyrirtæki sem hafa náð ákveðnum aldri STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Hlutfall hagnaðar sem greiðist til tengiþjónustu: {STRING} @@ -1487,9 +1487,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Leyft, sérsni STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Staðsetning trjáa í leik: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Stjórnar hvernig tré birtast meðan á leiknum stendur. Þessi stilling getur haft áhrif á iðnað sem byggir á trjám, til dæmis timburverksmiðjur -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Engin {RED}(skemmir timburverksmiðjur) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :aðeins í regnskógum -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :allstaðar STR_CONFIG_SETTING_TOOLBAR_POS :Staðsetning tækjasláar: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Lárétt staða aðal tækjasláar efst á skjánum @@ -1578,6 +1575,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... slep STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Minnið í tölvunni nægir ekki STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Úthlutuðum {BYTES} af skyndiminni fyrir hreyfimyndir mistókst. Skyndiminnið vegna hreyfimynda var minnkað í {BYTES}. Þetta mun minnka reiknigetu OpenTTD. Til minnka minniskröfur getur þú reynt að óvikrja 32bpp grafíkina og/eða minnkað leyfilegt súm +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1618,18 +1617,9 @@ STR_INTRO_TRANSLATION :{BLACK}Það va # Quit window STR_QUIT_CAPTION :{WHITE}Hætta -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Ertu viss um að þú viljir hætta í OpenTTD og fara aftur í {STRING}? STR_QUIT_YES :{BLACK}Já STR_QUIT_NO :{BLACK}Nei -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Hætta leik STR_ABANDON_GAME_QUERY :{YELLOW}Ertu viss um að þú viljir hætta í þessum leik ? @@ -1638,7 +1628,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Ertu vi # Cheat window STR_CHEATS :{WHITE}Svindl STR_CHEATS_TOOLTIP :{BLACK}Valreitur segir til um ef þú hefur notað þetta svindl áður -STR_CHEATS_WARNING :{BLACK}Aðvörun! Þú ert í þann mund að svíkja keppinauta þína. Hafðu í huga að þess lags svívirðing mun ætíð höfð í minnum STR_CHEAT_MONEY :{LTBLUE}Auka pening um {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spila sem fyrirtæki: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Töfrajarðýta (eyðir iðnaði, óeyðanlegum hlutum): {ORANGE}{STRING} @@ -1787,8 +1776,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Tengjast STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Endurnýja þjón STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Endurnýja upplýsingar um þjón -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Finna þjón -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Leita að þjónum á neti STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Bæta við þjóni STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Bætir þjóni við listann, hann mun alltaf vera athugaður þegar leitað er eftir leikjum í gangi STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Hefja þjón @@ -1915,7 +1902,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nýtt fyrirtæk # Network client list STR_NETWORK_CLIENTLIST_KICK :Sparka STR_NETWORK_CLIENTLIST_BAN :Banna -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Gefa pening STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tala við alla STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Tala við fyrirtæki STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Einkaskilaboð @@ -1924,8 +1910,6 @@ STR_NETWORK_SERVER :Þjónn STR_NETWORK_CLIENT :Notandi STR_NETWORK_SPECTATORS :Áhorfendur -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Sláðu inn peningaupphæð sem þú vilt láta af hendi rakna - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ekki vista innslegið lykilorð STR_COMPANY_PASSWORD_OK :{BLACK}Læsa fyrirtækinu með nýja lykilorðinu @@ -2025,8 +2009,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ho STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} stofnaði nýtt fyrirtæki (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} yfirgefur leikinn ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} heitir nú {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} sendi þér {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Þú gafst {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Þjónninn sleit tengingunni STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Verið er að endurræsa þjóninn...{}Vinsamlega bíðið... @@ -2103,6 +2085,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Já, sækja grafík STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nei, hætta í OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Stilling gegnsæjis STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Virkja/afvirkja gegnsæji skilta. CTRL+smella til að læsa. @@ -2136,6 +2119,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Reisa a STR_JOIN_WAYPOINT_CAPTION :{WHITE}Tengja millistöð STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Reisa aðra millistöð +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Járnbrautarspors framkvæmdir STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Raflestaframkvæmdir @@ -2319,7 +2304,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Stærð: STR_OBJECT_CLASS_LTHS :Vitar STR_OBJECT_CLASS_TRNS :Sendar -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Tré STR_PLANT_TREE_TOOLTIP :{BLACK}Veldu trjátegund sem á að gróðursetja. Ef það er fyrir tré á reitnum, verðu fleiri trjám mismunandi trjám plantað óhað hvaða tegund hefur verið valin STR_TREES_RANDOM_TYPE :{BLACK}Tré af handahófskenndri gerð @@ -2560,11 +2545,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Fjöldi bæja: STR_MAPGEN_DATE :{BLACK}Dags.: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Fjöldi iðnaða: -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Hæð snjólínu: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Hækka snjólínu upp um eitt þrep -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Lækka snjólínu niður um eitt þrep STR_MAPGEN_LAND_GENERATOR :{BLACK}Landmyndun: -STR_MAPGEN_TREE_PLACER :{BLACK}Planta trjám: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Gerð lands: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Magn sjávar: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Ár: @@ -2589,7 +2570,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nafn hæ STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Stærð: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} * {NUM} -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Breyta hæð snjólínu STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Breyta upphafsári # SE Map generation @@ -2848,10 +2828,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW} Kaupa STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Múta bæjaryfirvöldum til að auka við fylgi þitt, með hættu á þungri refsingu komist það upp.{} Kostnaður: {CURRENCY_LONG} # Goal window -STR_GOALS_GLOBAL_TITLE :{BLACK}Markmið allra: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Engin - -STR_GOALS_COMPANY_TITLE :{BLACK}Fyrirtækja markmið: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Smelltu á markmiðið til að miðja aðal sjónarhornið á iðnað/bæ/reit. Ctrl+smella opnar nýtt sjónarhorn á iðnað/bæ/reit # Goal question window @@ -3326,10 +3304,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Heldur l # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Miðstilla sjónarhorn á staðsetningu lestar. Ctrl+smella til að fylgja lestina í aðal sjónarhorni -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Miðja aðalsjónarhornið á bifreið. Ctrl smelltu til að fylgja bifreiðina í aðalglugga -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Miðja aðalsjónarhorn á staðsetningu skips. Ctrl smelltu til að fylgja skipi í aðalglugga -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Miðja aðalsjónarhorn á flugvélina. Ctrl smelltu til að fylgja flugvél í aðalglugga STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Senda lest í skýli. Ctrl+smella til þjóna lestinni einungis STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Senda bifreið í skýli @@ -3361,10 +3335,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Sýna up STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Sýna nánari upplýsingar um skip STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Sýna nánari upplýsingar um skip -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Núverandi aðgerð lestar - smelltu hér til að stöðva/ræsa lestina. Ctrl+smella til að fara á áfangastað -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Núverandi aðgerð bifreiðar - smelltu hér til að stöðva/ræsa bifreið. Ctrl+Smella til að fara á áfangastað -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Núverandi aðgerð skips - smelltu hér til að stöðva/ræsa skipið. Ctrl+Smella til at fara á áfangastað -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Núverandi aðgerð - smelltu hér til að stöðva/ræsa flugvél. Ctrl+Smella til at fara á áfangastað + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Ferma / Afferma diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index d8acc468e6..20ee7ef74d 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Gandum STR_CARGO_PLURAL_RUBBER :Karet STR_CARGO_PLURAL_SUGAR :Gula STR_CARGO_PLURAL_TOYS :Mainan -STR_CARGO_PLURAL_CANDY :Manisan +STR_CARGO_PLURAL_SWEETS :Manisan STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Arum Manis +STR_CARGO_PLURAL_CANDYFLOSS :Arum Manis STR_CARGO_PLURAL_BUBBLES :Gelembung STR_CARGO_PLURAL_TOFFEE :Gula-gula STR_CARGO_PLURAL_BATTERIES :Baterai @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Gandum STR_CARGO_SINGULAR_RUBBER :Karet STR_CARGO_SINGULAR_SUGAR :Gula STR_CARGO_SINGULAR_TOY :Mainan -STR_CARGO_SINGULAR_CANDY :Manisan +STR_CARGO_SINGULAR_SWEETS :Manisan STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Arum Manis +STR_CARGO_SINGULAR_CANDYFLOSS :Arum Manis STR_CARGO_SINGULAR_BUBBLE :Gelembung STR_CARGO_SINGULAR_TOFFEE :Gula-gula STR_CARGO_SINGULAR_BATTERY :Baterai @@ -187,11 +187,14 @@ STR_COLOUR_ORANGE :Oranye STR_COLOUR_BROWN :Coklat STR_COLOUR_GREY :Abu-abu STR_COLOUR_WHITE :Putih +STR_COLOUR_RANDOM :Acak +STR_COLOUR_DEFAULT :Standar # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mil/j STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/jam STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}meter/detik +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}ubin/hari STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}dk STR_UNITS_POWER_METRIC :{COMMA}{NBSP}dk @@ -231,9 +234,8 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Pilih mo STR_TOOLTIP_SORT_CRITERIA :{BLACK}Pilih kriteria pengurutan STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Pilih kriteria STR_BUTTON_SORT_BY :{BLACK}Urutkan -STR_BUTTON_LOCATION :{BLACK}Lokasi -STR_BUTTON_RENAME :{BLACK}Ubah nama STR_BUTTON_CATCHMENT :{BLACK}Jangkauan +STR_TOOLTIP_CATCHMENT :{BLACK}Tombol tampilan area cakupan STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Tutup window STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Judul Jendela - klik dan tahan disini untuk memindahkan jendela @@ -262,6 +264,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Mengakti STR_BUTTON_DEFAULT :{BLACK}Standar STR_BUTTON_CANCEL :{BLACK}Batal STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Peringatan: Administrator server mungkin dapat membaca teks apa pun yang dimasukkan di sini. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -310,6 +313,15 @@ STR_SORT_BY_CARGO_CAPACITY :Kapasitas muata STR_SORT_BY_RANGE :Jangkauan STR_SORT_BY_POPULATION :Populasi STR_SORT_BY_RATING :Peringkat +STR_SORT_BY_NUM_VEHICLES :Jumlah kendaraan +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Total laba tahun lalu +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Total laba tahun ini +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Laba rata-rata tahun lalu +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Laba rata-rata tahun ini + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Tidak ada +STR_GROUP_BY_SHARED_ORDERS :Perintah bersama # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Hentikan sementara permainan @@ -335,6 +347,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Perbesar STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Perkecil tampilan STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Membangun rel kereta STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Membangun jalan +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Bangun jalur trem STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Membangun pelabuhan kapal STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Membangun bandara STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Buka toolbar lansekap untuk menaik-turunkan tanah, menanam pohon, dsb. @@ -355,6 +368,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Pertumbu STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Pertumbuhan Kota STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Membuat Industri STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Pembangunan Jalan +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Pembangunan Jalur Tram STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Menanam Pohon. Shift untuk menampilkan perkiraan biaya STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Memasang pengenal STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Tempatkan Obyek. Shift untuk menampilkan perkiraan biaya @@ -396,7 +410,7 @@ STR_FILE_MENU_EXIT :Keluar # map menu STR_MAP_MENU_MAP_OF_WORLD :Peta Dunia -STR_MAP_MENU_EXTRA_VIEW_PORT :Viewport ekstra +STR_MAP_MENU_EXTRA_VIEWPORT :Viewport ekstra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda aliran kargo STR_MAP_MENU_SIGN_LIST :Daftar Tanda @@ -562,8 +576,8 @@ STR_MONTH_DEC :Desember # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Item STR_GRAPH_KEY_TOOLTIP :{BLACK}Tampilkan grafik item -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -673,6 +687,7 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Kosong STR_PLAYLIST_CHANGE_SET :{BLACK}Gantikan set STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Hapus program saat ini (hanya Bebas 1 atau Bebas 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Mengubah pilihan musik ke set yang terinstal lainnya STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik pada musik track untuk menambah pada program sekarang (hanya Bebas 1 atau Bebas 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik pada track musik untuk menghapusnya dari program saat ini. (Bebas 1 atau Bebas 2 saja) @@ -732,6 +747,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Daratan terjal STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Daratan berumput STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Lahan kritis +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Hutan hujan STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Ladang STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Pepohonan STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Bebatuan @@ -763,6 +779,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Tampilka STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Tampilkan pesan atau laporan berita terakhir STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * BERHENTI * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUSED (menunggu pembaruan grafik tautan) * * STR_STATUSBAR_AUTOSAVE :{RED}SIMPAN OTOMATIS STR_STATUSBAR_SAVING_GAME :{RED}* * MENYIMPAN PERMAINAN * * @@ -857,6 +874,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} jenis baru telah diluncurkan! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Membuka jendela grup yang berfokus pada rombongan kendaraan STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} tidak lagi menerima {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} tidak lagi menerima {STRING} atau {STRING} @@ -876,7 +894,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Pemkot Kota {TOWN} menandatangani kontrak dengan {STRING} untuk hak transportasi eksklusif selama 1 tahun! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Viewport {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Simpan ke viewport STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Simpan lokasi peta sekarang ke viewport STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Tampilan dari viewport @@ -923,10 +941,14 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Atur sendiri... STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgia (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iran (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Rubel Rusia Baru (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexiko(MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Dollar Taiwan Baru (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi Cina (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Dollar Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :India Rupee (INR) +STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaysia (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kendaraan jalan raya -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Pilih lajur yang dilalui bus/truk STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Berkendara di lajur kiri STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Berkendara di lajur kanan @@ -978,19 +1000,31 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Resolusi STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Pilih resolusi layar yang diinginkan STR_GAME_OPTIONS_RESOLUTION_OTHER :lainnya +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Akselerasi perangkat keras +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Pengaturan hanya akan berlaku setelah game dimulai ulang + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Ukuran antarmuka STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Pilih ukuran elemen antarmuka yang akan digunakan +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(deteksi-otomatis) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Kali dua STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Kali empat STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Ukuran font +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Pilih ukuran font antarmuka yang akan digunakan +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(deteksi-otomatis) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Kali dua STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :4 kali +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafik + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Menampilkan kecepatan refresh +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Kecepatan refresh yang lebih tinggi dari 60Hz dapat memengaruhi kinerja. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set Grafik Dasar STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Pilih grafik dasar yang digunakan STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} berkas hilang atau rusak @@ -1085,6 +1119,8 @@ STR_TERRAIN_TYPE_FLAT :Datar STR_TERRAIN_TYPE_HILLY :Berbukit STR_TERRAIN_TYPE_MOUNTAINOUS :Pegunungan STR_TERRAIN_TYPE_ALPINIST :Pemanjat Gunung +STR_TERRAIN_TYPE_CUSTOM :Ketinggian Kustom +STR_TERRAIN_TYPE_CUSTOM_VALUE :Ketinggian Kustom ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Selalu boleh STR_CITY_APPROVAL_TOLERANT :Toleran @@ -1166,13 +1202,15 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Mengaktifkan be STR_CONFIG_SETTING_CITY_APPROVAL :Sikap pemerintah kota terhadap restrukturasi area: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Pilih seberapa banyak dampak kebisingan dan lingkungan oleh perusahaan terhadap peringkat kota karena pembangunan di daerah -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Tinggi peta maksimum: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Atur ketinggian pegunungan maksimum yang diijinkan untuk peta ini +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Ketinggian peta maksimum: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Tetapkan ketinggian maksimum medan peta. Dengan "(otomatis)" nilai yang baik akan diambil setelah pembuatan medan STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Kamu tidak bisa mengubah ketinggian peta maksimum di angka itu. Setidaknya ada satu gunung di peta yang lebih tinggi STR_CONFIG_SETTING_AUTOSLOPE :Ijinkan pembentukan slop dibawah bangunan, rel, dsb.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Ijinkan pembentukan tanah dibawah bangunan dan trek tanpa merusaknya STR_CONFIG_SETTING_CATCHMENT :Ijinkan ukuran jangkauan wilayah lebih realistik: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Gunakan area penarikan berbeda untuk tipe stasiun dan airport yang berbeda +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Stasiun perusahaan dapat melayani pabrik dengan stasiun netral terpasang: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Jika diaktifkan, industri dengan stasiun terlampir (seperti Rig Minyak) juga dapat dilayani oleh stasiun milik perusahaan yang dibangun di dekatnya. Saat dinonaktifkan, industri ini hanya dapat dilayani oleh stasiun yang terhubung. Stasiun perusahaan terdekat mana pun tidak akan dapat melayani mereka, dan stasiun terlampir tidak akan melayani hal lain selain industri STR_CONFIG_SETTING_EXTRADYNAMITE :Ijinkan menggusur lebih banyak jalan, jembatan, terowongan milik kota, dsb: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Permudah membuang infrasturktur yang dimiliki kota STR_CONFIG_SETTING_TRAIN_LENGTH :Panjang kereta maksimum: {STRING} @@ -1258,6 +1296,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Tidak di STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Pemeliharaan Infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Jika dinyalakan, infrastruktur membutuhkan biaya pemeliharaan. Biaya berkembang secara proporsional sesuai dengan ukuran jaringan, lebih berdampak pada perusahaan besar dari pada perusahaan kecil +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Memulai warna perusahaan: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Pilih warna awal perusahaan STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Bandara tidak kedaluarsa: {STRING} @@ -1293,9 +1332,11 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Tampilkan popul STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Tampilkan populasi kota di label nama kota pada peta STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Ketebalan garis pada grafik: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Tebalnya garis pada grafis. Garis tipis akan mudah dibaca ,garis tipis juga lebih terlihat +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Tampilkan nama NewGRF di jendela beli kendaraan: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Tambahkan garis ke jendela beli kendaraan, yang menunjukkan NewGRF kendaraan yang dipilih berasal. STR_CONFIG_SETTING_LANDSCAPE :Bentang Darat: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Bentang darat akan menegaskan skenario bermain dasar dengan muatan berbeda dan kebutuhan pertumbuhan kota. Data NewGRF dan Game Script lain membolehkan lebih banyak pengaturan. +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Lanskap mendefinisikan skenario gameplay dasar dengan kargo yang berbeda dan persyaratan pertumbuhan kota. NewGRF dan Game Scripts memungkinkan kontrol yang lebih halus STR_CONFIG_SETTING_LAND_GENERATOR :Pembangkit dataran: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Pembuat yang orisinil tergantung pada kelompok grafik yang dasar, dan membuat bentang darat yang tertentu. TerraGenesis adalah pembuat yang berbasis Perlin Noise, dengan pengaturan kuasa yang lebih spesifik STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Asli @@ -1308,6 +1349,9 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Jarak maksimal STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Kilang minyak hanya dibangun pada tepi peta atau pantai STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Tinggi garis salju: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Mengatur ketinggian di mana salju akan muncul. Salju juga akan mempengaruhi pengembangan industri dan persyaratan untuk pertumbuhan kota +STR_CONFIG_SETTING_DESERT_COVERAGE :Cakupan gurun: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Kontrol perkiraan jumlah gurun di lanskap tropis. Gurun juga mempengaruhi generasi industri. Hanya digunakan selama pembuatan peta +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Kekasaran daratan: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(hanya TerraGenesis) Memilih frekuensi bukit: Bentang darat rata punya bukit yang lebih sedikit dan lebih lebar. Bentang darat bergunung punya lebih banyak bukit, dan ini mungkin akan terlihat lebih membosankan STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Sangat halus @@ -1343,10 +1387,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Warna daratan d STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Hijau STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Hijau Gelap STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet +STR_CONFIG_SETTING_SCROLLMODE :Perilaku pergeseran area viewport: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Kelakuan waktu menggerakkan peta STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Gerakan viewport memakai tombol kanan tetikus, posisi tetikus terkunci STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Gerakan peta memakai tombol kanan tetikus, posisi tetikus terkunci STR_CONFIG_SETTING_SCROLLMODE_RMB :Gerakan peta memakai tombol kanan tetikus +STR_CONFIG_SETTING_SCROLLMODE_LMB :Pindahkan peta dengan klik kiri tetikus STR_CONFIG_SETTING_SMOOTH_SCROLLING :Pergeseran pandangan viewport secara halus: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Menyetel bagaimana tampilan utama menggeser posisi di peta kecil. Jika dinyalakan, peta akan bergeser secara halus. Jika dimatikan, peta langsung menuju tempat yang di klik STR_CONFIG_SETTING_MEASURE_TOOLTIP :Tampilkan ukuran ketika menggunakan alat pembangun: {STRING} @@ -1379,6 +1425,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Kontrol-klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Non-aktifkan STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Tutup jendela dengan klik kanan: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Menutup jendela dengan mengklik kanan di dalamnya. Menonaktifkan keterangan alat saat klik kanan! STR_CONFIG_SETTING_AUTOSAVE :Simpan otomatis: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Memilih jarak waktu antara menyimpan data game @@ -1418,6 +1465,8 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Toolbar tetap a STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Menjagakan alat pembangunan untuk jembatan, terowongan, etc. buka setelah dipakai STR_CONFIG_SETTING_EXPENSES_LAYOUT :Kelompokkan pengeluaran perusahaan dalam neraca: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Mendefinisikan tata ruang untuk tetingkap biaya perusahaan +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Secara otomatis menghapus sinyal selama konstruksi rel: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Menghapus sinyal secara otomatis selama konstruksi rel jika sinyal menghalangi. Perhatikan bahwa hal ini berpotensi menyebabkan kecelakaan kereta api. STR_CONFIG_SETTING_SOUND_TICKER :Ticker berita: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Mainkan suara untuk pesanan berita yang diringkas @@ -1466,6 +1515,9 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Ijinkan kecerda STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Bolehkan pemain komputer AI untuk ikut permainan multiplayer STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes sebelum scripts di-tahan: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Batas maksimal langkah perhitungan yang boleh ambil oleh skript dalam satu putaran +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximal memory yang digunakan per script: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Berapa banyak memori yang dapat dikonsumsi satu skrip sebelum dihentikan secara paksa. Ini mungkin perlu ditingkatkan untuk peta besar. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Jangka waktu perbaikan dalam persen: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Pilih apakah servis kendaraan dipicu oleh waktu terlewat sejak servis terakhir atau dari kehandalan menjatuh beberapa persentase dari kehandalan maximum @@ -1524,11 +1576,18 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Penuh STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Berita berwarna tampil pada: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Tahun saat surat kabar/koran menjadi berwarna. Sebelum tahun ini, koran menggunakan warna hitam-putih STR_CONFIG_SETTING_STARTING_YEAR :Tahun mulai: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Penilaian akhir tahun: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Tahun pertandingan berakhir untuk tujuan mencetak gol. Pada akhir tahun ini, skor perusahaan dicatat dan layar skor tertinggi ditampilkan, tetapi para pemain dapat terus bermain setelah itu.{} Jika ini sebelum tahun mulai, layar skor tinggi tidak pernah ditampilkan. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Tidak pernah -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Aktifkan pertumbuhan ekonomi yang stabil (jarang berubah): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ketika diaktifkan, produksi industri mengalami perubahan lebih sering, dalam gerakan kecil. Pengaturan tidak berpengaruh jika jenis industri disediakan oleh NewGRF +STR_CONFIG_SETTING_ECONOMY_TYPE :Tipe ekonomi: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Ekonomi yang lancar membuat perubahan produksi lebih sering, dan dalam langkah yang lebih kecil. Ekonomi beku menghentikan perubahan produksi dan penutupan industri. Pengaturan ini mungkin tidak berpengaruh jika jenis industri disediakan oleh NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Asli +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Halus +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Beku STR_CONFIG_SETTING_ALLOW_SHARES :Ijinkan pembelian saham perusahaan lain: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Jika diaktifkan, pemain dibolehkan membeli saham suatu perusahaan. Saham hanya bisa dibeli saat perusahaan memasuki umur tertentu +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Usia minimum perusahaan untuk memperdagangkan saham: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Set umur minimal perusahaan saat sahamnya dapat dibeli atau dijual. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Persentase keuntungan akhir dari sistem pengisi: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Persentase pendapatan yang diberikan dari sistem pengisi, memberikan lebih banyak kendali pendapatan @@ -1570,14 +1629,17 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Mengaktifkan se STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Dilarang STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Diijinkan STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Diijinkan, layout kota sendiri +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generasi Kargo Kota: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Seberapa banyak kargo dihasilkan oleh rumah di kota , relatif terhadap keseluruhan populasi kota.{}Pertumbuhan kuadrat: Kota yang membesar dua kali menghasilkan penumpang empat kali lipat.{}Pertumbuhan linier: Kota yang membesar dua kali menghasilkan penumpang dua kali lipat. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kuadrat (asli) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linier STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Penempatan pohon dalam permainan: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Mengendalikan kemunculan pohon dalam permainan. Ini akan berefek pada industri yang memerlukan pohon, contohnya pengolahan kayu gelondongan -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Tidak ada {RED}(memotong Pabrik Pengolahan Kayu Gelondongan) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Hanya pada hutan hujan -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Dimanapun +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Tumbuh tapi jangan menyebar {RED}(memecahkan pabrik kayu) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Tumbuh tetapi hanya tersebar di hutan hujan +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Tumbuh dan menyebar ke mana-mana +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Jangan tumbuh, jangan menyebar {RED}(menghancurkan pabrik kayu) STR_CONFIG_SETTING_TOOLBAR_POS :Posisi toolbar utama: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posisi horizontal toolbar utama di bagian atas layar @@ -1595,12 +1657,15 @@ STR_CONFIG_SETTING_ZOOM_MIN :Tingkat Perbesa STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Perbesaran viewport maksimal. Semakin besar semakin banyak memori yang dibutuhkan STR_CONFIG_SETTING_ZOOM_MAX :Tingkat zoom out Maksimal: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Pengecilan maksimum untuk viewport. Semakin kecil semakin tidak jelas +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Sprite resolusi tertinggi untuk digunakan: {STRING} STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normal STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Kecepatan pertumbuhan kota: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Kecepatan pertumbuhan kota STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Tidak tumbuh @@ -1644,6 +1709,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Apabila kecepat STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mpj) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrik (km/j) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/d) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unit permainan (ubin/hari) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Satuan daya kendaraan: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Apabila daya kendaraan ditampilkan di antarmuka, nyatakan di satuan yang dipilih @@ -1733,6 +1799,9 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... meng STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Kehabisan memori STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Mengalokasikan {BYTES} 'spritecache' gagal. 'Spritecache' dikurangi ke {BYTES}. Ini akan kurangi kinerja OpenTTD. Untuk kurangi kebutuhan memori anda bisa coba matikan grafik 32bpp dan/atau tingkat pembesaran +# Video initalization errors +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... tidak ditemukan GPU yang kompatibel. Akselerasi perangkat keras dinonaktifkan + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1771,22 +1840,15 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Cari kon STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Tampilkan pengaturan permainan dan AI STR_INTRO_TOOLTIP_QUIT :{BLACK}Keluar OpenTTD +STR_INTRO_BASESET :{BLACK}Kumpulan grafik dasar yang dipilih saat ini hilang {NUM} sprite {P ..}. Silakan periksa pembaruan untuk baseset. STR_INTRO_TRANSLATION :{BLACK}Terjemahan ini kurang {NUM} kalimat. Bantu Openttd dengan menjadi Penterjemah. lihat readme.txt lebih lanjut. # Quit window STR_QUIT_CAPTION :{WHITE}Keluar -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Anda yakin ingin keluar dari OpenTTD dan kembali ke {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Anda yakin ingin keluar dari OpenTTD? STR_QUIT_YES :{BLACK}Ya STR_QUIT_NO :{BLACK}Tidak -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Batalkan Permainan STR_ABANDON_GAME_QUERY :{YELLOW}Apakah anda yakin untuk meninggalkan permainan? @@ -1795,7 +1857,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Apa and # Cheat window STR_CHEATS :{WHITE}Kode Curang STR_CHEATS_TOOLTIP :{BLACK}Daftar cek ini mengindikasikan bahwa anda telah menggunakan kode curang ini sebelumnya -STR_CHEATS_WARNING :{BLACK}Peringatan! Anda akan mencurangi pemain lainnya. Kecurangan ini akan tetap tercatat selama game berjalan +STR_CHEATS_NOTE :{BLACK}Catatan: setiap penggunaan pengaturan ini akan direkam oleh savegame STR_CHEAT_MONEY :{LTBLUE}Tambah uang sebanyak {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Bermain sebagai pemain: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Buldozer ajaib (hancurkan industri, objek tidak bergerak): {ORANGE}{STRING} @@ -1907,10 +1969,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ubah das # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Bermain bersama -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Diiklankan -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Pilih antara permainan diiklankan (internet) dan tidak diiklankan (Jaringan wilayah lokal, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Tidak -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ya STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nama pemain: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Ini adalah nama yang akan terlihat oleh pemain lain @@ -1951,8 +2009,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Bergabun STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Cek server STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Periksa lagi status server -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Cari server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Cari jaringan server +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Cari di internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Cari di internet untuk server publik +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}CARI LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Cari jaringan area lokal untuk server STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Tambah server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Daftarkan server baru yang akan dipantau aktivitasnya STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Mulai server @@ -1969,6 +2029,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nama per STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Atur kata sandi STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Lindungi permainan ini dengan kata kunci jika anda tidak ingin membiarkannya terbuka untuk umum +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Diiklankan +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Pilih antara permainan diiklankan (internet) dan tidak diiklankan (Jaringan wilayah lokal, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Tidak STR_NETWORK_START_SERVER_ADVERTISED :Ya STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klien @@ -2072,6 +2134,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Putuskan STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server terkunci, masukkan kata kunci STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Perusahaan terkunci, masukkan kata kunci +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Daftar klien # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Daftar klien @@ -2081,7 +2144,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Buat Perusahaan # Network client list STR_NETWORK_CLIENTLIST_KICK :Usir STR_NETWORK_CLIENTLIST_BAN :Larangan -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Kirim uang STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Bicara ke semua STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Bicara ke perusahaan STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Pesan pribadi @@ -2090,8 +2152,6 @@ STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klien STR_NETWORK_SPECTATORS :Penonton -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Masukkan jumlah uang yang akan diberikan - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Jangan simpan kata sandi yang telah dimasukkan STR_COMPANY_PASSWORD_OK :{BLACK}Berikan perusahaan kata sandi baru @@ -2136,6 +2196,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Kata kun STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server penuh STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Anda ditolak memasuki server ini STR_NETWORK_ERROR_KICKED :{WHITE}Anda diusir dari permainan +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Alasan: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Tidak boleh curang di server ini STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Anda mengirim terlalu banyak perintah ke server STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Jangan terlalu lama memasukkan kata kunci @@ -2177,11 +2238,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Permainan masih STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Permainan masih dihentikan ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Permainan masih dihentikan ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Permainan masih dihentikan ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Permainan masih dijeda({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Permainan dilanjutkan ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :jumlah pemain STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :menghubungkan ke klien STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manual STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :skrip permainan +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :menunggu pembaruan grafik link ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :pergi STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} telah bergabung @@ -2191,10 +2254,10 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} be STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} mulai mendirikan perusahaan (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} meninggalkan permainan ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} telah mengganti namanya menjadi {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} telah memberi perusahaanmu {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Anda telah memberi {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} memberikan {2:CURRENCY_LONG} kepada {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server menutup sesi STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server memulai ulang...{}Tunggulah... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} telah dikeluarkan. Alasan: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}Mengunduh konten @@ -2269,6 +2332,9 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ya, download file gambar STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Tidak, tutup OpenTTD +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Gagal Mendownload +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Keluar OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Pengaturan Transparasi STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Hidup/matikan transparansi tanda-tanda. CTRL+klik untuk mengunci @@ -2310,6 +2376,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Pisahka STR_JOIN_WAYPOINT_CAPTION :{WHITE}Gabungkan waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Pisahkan waypoint +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Dinonaktifkan karena saat ini tidak ada kendaraan yang tersedia untuk infrastruktur ini + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Pembangunan Rel Kereta STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Pembangunan Rel Kereta Listrik @@ -2412,7 +2481,11 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Membangu STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Membangun terowongan trem. Shift untuk menampilkan perkiraan biaya STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Bangun/Bongkar konstruksi jalanan STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Membangun/bongkar konstruksi jalur trem +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konversi/Upgrade jenis tram. Shift untuk menampilkan perkiraan biaya +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konversi/Upgrade jenis tram. Shift untuk menampilkan perkiraan biaya +STR_ROAD_NAME_ROAD :Jalan +STR_ROAD_NAME_TRAM :Jalur trem # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Arah Bengkel Kendaraan @@ -2493,13 +2566,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Ukuran: STR_OBJECT_CLASS_LTHS :Mercusuar STR_OBJECT_CLASS_TRNS :Pemancar -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Pepohonan STR_PLANT_TREE_TOOLTIP :{BLACK}Pilih jenis pohon untuk ditanam. Jika pohon sudah tertanam, ini akan menambah jenis pohon secara acak dari tipe yang sama. STR_TREES_RANDOM_TYPE :{BLACK}Tanam pohon secara acak STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Tempatkan tipe tumbuhan secara acak. Shift untuk menampilkan perkiraan biaya STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Pohon Acak STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Menanam pohon secara acak pada lansekap +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Tanam pohon tunggal dengan menyeret ke atas lanskap. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Kelompok Pohon +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Tanam hutan kecil dengan menyeret ke atas lanskap. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Hutan +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Tanam hutan besar dengan menyeret ke atas lanskap. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Pertumbuhan Wilayah @@ -2550,12 +2629,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Acak # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Danai industri baru STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Pilih jenis industri yang di inginkan dari daftar -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Bangun industri secara acak +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Bangun industri secara acak STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Dukung Peta dengan penempatan industri secara otomatis +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Bangun industri secara acak +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Yakin ingin membuat banyak industri acak? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Biaya: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospek STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Bangun STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Danai +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Hapus semua industri +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Hapus semua industri yang ada saat ini di peta +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Hapus semua industri +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Yakin ingin menghapus semua industri? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Hubungan industri untuk industri {STRING} @@ -2576,6 +2661,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Pilih in # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informasi area daratan +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Pusatkan tampilan utama pada lokasi ubin. Ctrl+Klik membuka viewport baru pada lokasi petak STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Biaya penghancuran: {LTBLUE}tidak ada STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Biaya penghancuran: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Nilai jual kembali: {LTBLUE}{CURRENCY_LONG} @@ -2597,8 +2683,11 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Muatan diterima: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipe Rel: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Tipe jalan: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tipe Trem: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Batasan kecepatan rel: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Batasan kecepatan jalan: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Batas kecepatan trem: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Bebatuan @@ -2698,20 +2787,31 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Tim OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}laju bingkai STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Rata simulasi: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Jumlah detak permainan tersimulasi per detik. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Tampilan laju bingkai: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Jumlah bingkai video yang dirender per detik. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Faktor kecepatan permainan saat ini: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Beberapa cepat permainan lagi berjalan, dibanding dengan kecepatan diharapkan memakai rata simulasi biasa. STR_FRAMERATE_CURRENT :{WHITE}Sekarang +STR_FRAMERATE_AVERAGE :{WHITE}Rata-rata STR_FRAMERATE_MEMORYUSE :{WHITE}Memori STR_FRAMERATE_DATA_POINTS :{WHITE}Data tergantung oleh ukuran {COMMA} STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} bingkai/dtk +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} bingkai/detik +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} bingkai/dtk +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} +STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Total pengulangan permainan: STR_FRAMERATE_GL_ECONOMY :{WHITE} Penanganan kargo: STR_FRAMERATE_GL_TRAINS :{WHITE} Titik kereta: STR_FRAMERATE_GL_ROADVEHS :{WHITE} Titik kendaraan: @@ -2723,15 +2823,25 @@ STR_FRAMERATE_DRAWING :{BLACK}Render g STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Viewport dunia: STR_FRAMERATE_VIDEO :{BLACK}Keluaran Video: STR_FRAMERATE_SOUND :{WHITE}Mixing suara: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Total GS/AI: +STR_FRAMERATE_GAMESCRIPT :{BLACK}Script Permainan: +STR_FRAMERATE_AI :{BLACK} Bot {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Pengulangan permainan STR_FRAMETIME_CAPTION_GL_ECONOMY :Penanganan kargo STR_FRAMETIME_CAPTION_GL_TRAINS :Titik kereta STR_FRAMETIME_CAPTION_GL_ROADVEHS :Titik kendaraan STR_FRAMETIME_CAPTION_GL_SHIPS :Titik kapal STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Titik pesawat STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Titik dunia +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Jarak tunda linkgraph +STR_FRAMETIME_CAPTION_DRAWING :Render grafis +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Rendering viewport dunia +STR_FRAMETIME_CAPTION_VIDEO :Keluaran Video STR_FRAMETIME_CAPTION_SOUND :Mixing suara +STR_FRAMETIME_CAPTION_ALLSCRIPTS :totaI script GS/A +STR_FRAMETIME_CAPTION_GAMESCRIPT :Script Game STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order @@ -2758,6 +2868,11 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Rincian STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Tidak ada informasi yang tersedia STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter string: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Timpa Berkas +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Yakin ingin menimpa berkas yang ada? +STR_SAVELOAD_DIRECTORY :{STRING} (Direktori) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Direktori induk) STR_SAVELOAD_OSKTITLE :{BLACK}Masukkan nama dari permainan tersimpan @@ -2769,14 +2884,10 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Jumlah Kota: STR_MAPGEN_DATE :{BLACK}Tgl: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Jumlah industri: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Ketinggian peta maksimum: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Naikkan satu ketinggian maksimum gunung di peta -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Turunkan satu ketinggian maksimum gunung di peta -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Tinggi garis salju: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Naikkan ketinggian garis salju satu angka -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Turunkan ketinggian garis salju satu angka +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Kurangi satu ketinggian maksimum puncak tertinggi di peta +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Kurangi cakupan salju hingga sepuluh persen +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Cakupan gurun: STR_MAPGEN_LAND_GENERATOR :{BLACK}Algoritma pulau: -STR_MAPGEN_TREE_PLACER :{BLACK}Algoritma pohon: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Jenis dataran: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Area perairan: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Sungai: @@ -2801,8 +2912,7 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nama Pet STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Luas: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Ubah ketinggian peta maksimal -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Ubah ketinggian garis salju +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Cakupan salju (dalam %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Ganti Tahun Permulaan # SE Map generation @@ -2877,7 +2987,10 @@ STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palet/warna: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standar (D) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standar (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Warisan (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :(tidak ada) STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Tidak ada informasi yang tersedia STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Berkas yang cocok tidak diketemukan @@ -2926,6 +3039,8 @@ STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Mewakili STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pindahkan sprite, mengubah offset X dan Y STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relatif STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reset offset relatif saat ini +STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absolute) +STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X offset: {NUM}, Y offset: {NUM} (Relative) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Pilih sprite STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Pilih sebuah sprite di manapun pada layar @@ -2956,6 +3071,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Baca akhir spri STR_NEWGRF_ERROR_GRM_FAILED :Sumber GRF yang diminta tidak tersedia (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} dinonaktifkan oleh {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format sprite salah/tidak diketahui (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Terlalu banyak elemen dalam daftar nilai properti (sprite {3:NUM}, property {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Pemanggilan produksi industri tidak valid (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Peringatan! @@ -2987,6 +3104,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informasi muat ulang untuk '{1:ENGINE}' berbeda dengan daftar beli setelah konstruksi. Ini menyebabkan pembaruan otomatis gagal memuat ulang dengan benar STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' menyebabkan perulangan tanpa akhir di tingkat produksi STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} mengembalikan hasil tidak dikenal/salah {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' mengembalikan jenis kargo yang tidak valid dalam panggilan produksi {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3011,6 +3129,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Hidup ma # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Ubah tulisan di tanda pengenal +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Pusatkan tampilan utama pada lokasi tanda tangan. Ctrl+Klik membuka viewport baru pada lokasi tanda tangan STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Pergi sampai rambu berikutnya STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Pergi ke rambu sebelumnya @@ -3020,6 +3139,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Masukkan STR_TOWN_DIRECTORY_CAPTION :{WHITE}Kota STR_TOWN_DIRECTORY_NONE :{ORANGE}- Tidak Ada - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Kota){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nama-nama kota - Klik pada nama untuk mengarahkan pandangan utama pada kota. Ctrl+Click akan membuka viewport baru pada lokasi kota STR_TOWN_POPULATION :{BLACK}Populasi Dunia: {COMMA} @@ -3052,6 +3172,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Ubah nama Kota # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Pemerintah Kota {TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Tunjukkan zona batas otoritas lokal STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Peringkat Perusahaan Transportasi: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Tindakan yang tersedia: @@ -3080,20 +3202,19 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Kolusi # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Target STR_GOALS_SPECTATOR_CAPTION :{WHITE}Target Global -STR_GOALS_GLOBAL_TITLE :{BLACK}Target global: +STR_GOALS_SPECTATOR :Target Global +STR_GOALS_GLOBAL_BUTTON :{BLACK}Global STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Tidak ada - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Tak terpakaikan - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Target perusahaan: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik pada tujuan untuk mengarahkan pandangan pada tengah industri/kota/kotak. Ctrl+klik untuk membuka jendela baru pada lokasi industri/kota/kotak # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Pertanyaan -STR_GOAL_QUESTION_CAPTION_INFORMATION :Informasi -STR_GOAL_QUESTION_CAPTION_WARNING :Peringatan -STR_GOAL_QUESTION_CAPTION_ERROR :Kesalahan +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Pertanyaan +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informasi +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Peringatan +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Kesalahan ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Batal @@ -3283,6 +3404,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Pindah K STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Membangun kembali kantor pusat perusahaan di tempat lain dengan 1% ongkos dari nilai perusahaan. Shift untuk menampilkan perkiraan biaya STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detail STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Lihat jumlah infrastruktur lebih detail +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Berikan uang +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Berikan uang kepada perusahaan ini STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Ganti Wajah STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Pilih wajah baru pimpinan @@ -3300,6 +3423,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Jual 25% STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nama Perusahaan STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nama Pimpinan +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Masukkan jumlah uang yang ingin Anda berikan STR_BUY_COMPANY_MESSAGE :{WHITE}Kami mencari perusahaan transporasi untuk mengambil alih perusahaan kami.{}{}Anda ingin membeli {COMPANY} senilai {CURRENCY_LONG}? @@ -3319,9 +3443,17 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industri STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Tidak Ada - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% Terkirim){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} dan {NUM} banyak lagi... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nama-nama industri - klik di nama untuk mengarahkan pandangan utama pada industri. Ctrl+Click akan membuka viewport baru pada lokasi industri STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Muatan diterima: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Kargo yang diproduksi: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Semua jenis kargo +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Tidak ada # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3331,6 +3463,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Arahkan STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tingkat produksi: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industri akan segera ditutup! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Membutuhkan: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produksi: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Membutuhkan: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3390,6 +3525,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Kelompok STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik untuk membuat kelompok STR_GROUP_DELETE_TOOLTIP :{BLACK}Hapus kelompok terpilih STR_GROUP_RENAME_TOOLTIP :{BLACK}Ubah nama kelompok terpilih +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Mengubah livery dari grup yang dipilih STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik untuk memproteksi kelompok ini dari perintah penggantian otomatis STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Hapus Kelompok @@ -3412,14 +3548,17 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Monorel Baru STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Maglev Baru STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Kendaraan Baru +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Kendaraan Trem Baru ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Kereta Baru +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Kendaraan Baru STR_BUY_VEHICLE_SHIP_CAPTION :Kapal Baru STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Buat Pesawat ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Biaya: {GOLD}{CURRENCY_LONG}{BLACK} Berat: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Biaya: {GOLD}{CURRENCY_LONG}{BLACK} (Biaya karoseri: {GOLD}{CURRENCY_LONG}{BLACK}) Beban: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Kecepatan: {GOLD}{VELOCITY}{BLACK} Daya: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Kecepatan: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Kecepatan di laut: {GOLD}{VELOCITY} @@ -3430,6 +3569,7 @@ STR_PURCHASE_INFO_REFITTABLE :(kargo dapat di STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Desain: {GOLD}{NUM}{BLACK} Usia: {GOLD}{COMMA} tahun STR_PURCHASE_INFO_RELIABILITY :{BLACK}Kehandalan Maks.: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Biaya: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Biaya: {GOLD}{CURRENCY_LONG}{BLACK} (Biaya Karoseri: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Berat: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Biaya: {GOLD}{CURRENCY_LONG}{BLACK} Kecepatan: {GOLD}{VELOCITY} STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Biaya: {GOLD}{CURRENCY_LONG}{BLACK} (Biaya Karoseri: {GOLD}{CURRENCY_LONG}{BLACK}) Kecepatan: {GOLD}{VELOCITY} @@ -3437,6 +3577,8 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Daya Mua STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Daya Gerbong: {GOLD}+{POWER}{BLACK} Berat: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Kargo dapat di ganti untuk: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Semua jenis kargo +STR_PURCHASE_INFO_NONE :Tidak Ada +STR_PURCHASE_INFO_ENGINES_ONLY :Hanya Lokomotif STR_PURCHASE_INFO_ALL_BUT :Semua tapi tidak untuk {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Traksi Maks.: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Jangkauan: {GOLD}{COMMA} kotak @@ -3452,14 +3594,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Beli Ken STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Beli Kapal STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Beli Pesawat +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Beli lalu karoseri kendaraan +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Beli lalu karoseri kendaraan +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Beli lalu karoseri kapal yang dipilih +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Beli dan ubah kargo pesawat STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kereta yang dipilih. Shift untuk menampilkan perkiraan biaya STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kendaraan yang dipilih. Shift untuk menampilkan perkiraan biaya STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kapal yang dipilih. Shift untuk menampilkan perkiraan biaya STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Beli pesawat yang dipilih. Shift untuk menampilkan perkiraan biaya +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Beli lalu karoseri kereta yang dipilih. Shift+Klik untuk menampilkan perkiraan biaya tanpa membelinya STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Beli lalu karoseri kendaraan yang dipilih. Shift+Klik untuk menampilkan perkiraan biaya tanpa membelinya STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Beli lalu karoseri kapal yang dipilih. Shift+Klik untuk menampilkan perkiraan biaya tanpa membelinya +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Beli lalu karoseri Pesawat yang dipilih. Shift+Klik untuk menampilkan perkiraan biaya tanpa membelinya STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Ubah Nama STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Ganti Nama @@ -3618,6 +3766,7 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Pindah t STR_REPLACE_ENGINES :Lokomotif STR_REPLACE_WAGONS :Gerbong STR_REPLACE_ALL_RAILTYPE :Semua kereta +STR_REPLACE_ALL_ROADTYPE :Semua kendaraan jalan raya STR_REPLACE_HELP_RAILTYPE :{BLACK}Pilih jenis kereta yang anda inginkan untuk diganti STR_REPLACE_HELP_ROADTYPE :{BLACK}Pilih jenis jalan yang anda inginkan untuk diganti @@ -3627,6 +3776,8 @@ STR_REPLACE_ELRAIL_VEHICLES :Kereta Listrik STR_REPLACE_MONORAIL_VEHICLES :Kereta Monorel STR_REPLACE_MAGLEV_VEHICLES :Kereta Maglev +STR_REPLACE_ROAD_VEHICLES :Kendaraan Jalan Raya +STR_REPLACE_TRAM_VEHICLES :Kendaraan Jalan Trem STR_REPLACE_REMOVE_WAGON :{BLACK}Membuang gerbong: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Membuat panjang kereta tetap sama saat penggantian secara otomatis dengan cara membuang gerbong(dihitung dari bagian depan), jika penggantian lokomotif membuat kereta lebih panjang @@ -3634,10 +3785,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Membuat # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Arahkan pandangan pada lokasi kereta. Ctrl+Click akan mengikuti kereta pada pandangan utama. -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Arahkan pandangan utama pada lokasi kendaraan. Ctrl+Click akan mengikuti kendaraan pada pandangan utama -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Arahkan pandangan utama pada lokasi kapal. Ctrl+Click akan mengikuti kapal pada pandangan utama -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Arahkan pandangan utama pada lokasi pesawat. Ctrl+Click akan mengikuti pesawat pada pandangan utama +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Pandangan utama lokasi pusat kereta api. Klik ganda akan mengikuti kereta di tampilan utama. Ctrl+Click membuka viewport baru pada lokasi kereta +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Pandangan utama lokasi kendaraan. Klik dua kali akan mengikuti kendaraan dalam tampilan utama. Ctrl+Click membuka viewport baru pada lokasi kendaraan +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Tampilan utama pusat di lokasi kapal. Klik ganda akan mengikuti kapal dalam tampilan utama. Ctrl+Click membuka viewport baru di lokasi kapal +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Pandangan utama pusat lokasi pesawat. Klik dua kali akan mengikuti pesawat dalam tampilan utama. Ctrl+Click membuka viewport baru pada lokasi pesawat STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Perintahkan kereta berhenti di depo. CTRL+klik untuk memerintahkan perbaikan saja STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Perintahkan kendaraan berhenti di bengkel. CTRL+klik hanya akan memerintahkan perbaikan di bengkel @@ -3669,10 +3820,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Tampilka STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Tampilkan detail kapal STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Tampilkan detail pesawat -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Aksi kereta saat ini - klik untuk menjalankan/menghentikan kereta. Ctrl-Click untuk melihat tujuan. -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Kegiatan kendaraan saat ini - klik untuk menghentikan/menjalankan kendaraan. Ctrl-Click untuk melihat tujuan. -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Aksi kapal saat ini - klik untuk menghentikan / menjalankan kapal. Ctrl-Click untuk melihat tujuan. -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Aksi pesawat saat ini - klik untuk menghentikan/menjalankan pesawat. Ctrl-Click untuk melihat tujuan. +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Aksi kereta saat ini - klik untuk menghentikan/memulai kereta +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Aksi kendaraan saat ini - klik untuk menghentikan/memulai kendaraan +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Aksi kapal saat ini - klik untuk menghentikan/menjalankan kapal +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Aksi Pesawat saat ini - klik untuk menghentikan/memulai Pesawat + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Tampilan utama pusat pada tujuan pesanan. Ctrl+Click membuka viewport baru pada lokasi tujuan pesanan # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Bongkar/Muat @@ -3847,6 +4000,7 @@ STR_ORDER_CONDITIONAL_AGE :Usia (thn) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Waktunya perbaikan STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Selalu STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Sisa masa pakai (tahun) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Keandalan Maximal STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Jenis perbandingan kondisi dengan nilai yang diberikan STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :sama dengan @@ -3899,6 +4053,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Pasang {STRING STR_ORDER_STOP_ORDER :(Berhenti) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Tidak dapat menggunakan stasiun){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Terkandung) @@ -4077,7 +4232,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Pilih sk STR_AI_LIST_CANCEL :{BLACK}Batal STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Jangan mengubah skrip AI +STR_SCREENSHOT_CAPTION :{WHITE}Ambil tangkapan layar +STR_SCREENSHOT_SCREENSHOT :{BLACK}Tangkapan layar normal +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Sepenuhnya diperbesar di cuplikan layar +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Tangkapan layar zoom default +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK} Tangkapan layar seluruh peta STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Tangkapan layar Peta Ketinggian +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Tangkapan layar minimap # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter @@ -4137,6 +4298,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Berkas simpanan STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Berkas tidak terbaca STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Berkas tidak dapat ditulisi STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Pemeriksaan integritas data gagal +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Simpanan permainan dibuat dengan versi yang dimodifikasi STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Game telah disimpan pada versi tanpa dukungan trem. Semua Trem telah dihilangkan @@ -4217,6 +4379,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... tida STR_ERROR_CURRENCY_REQUIRED :{WHITE}... dibutuhkan {CURRENCY_LONG} STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Tidak dapat membayar hutang... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Tidak dapat memberikan uang yang berasal dari pinjaman bank... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Tidak bisa memberikan uang kepada perusahaan ini... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Tidak dapat membeli perusahaan... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Tidak dapat membangun kantor pusat perusahaan... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Tidak dapat membeli 25% saham perusahaan ini... @@ -4343,6 +4506,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Jenis bengkel s STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} jadi terlalu panjang setelah diganti STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Tidak ada aturan peremajaan otomatis yang berlaku STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(batas min. uang) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Kendaraan baru tidak bisa membawa {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Kendaraan baru tidak dapat melakukan perbaikan dalam urutan {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Kombinasi rel yang mustahil @@ -4351,6 +4516,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tidak te STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Harus membongkar rel terlebih dahulu STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Jalannya satu arah atau terhalang STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Perlintasan tingkat tidak diperbolehkan pada tipe rel ini +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Perlintasan tingkat tidak diperbolehkan untuk jenis jalan ini STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Tidak dapat membangun sinyal disini STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Tidak dapat membangun jalur rel disini STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Tidak dapat menghapus jalur rel dari sini @@ -4370,7 +4536,11 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Tidak da STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Tidak dapat membongkar jalur trem disini... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... tidak ada jalan STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... tidak ada jalur trem +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Tidak dapat mengubah tipe jalan disini... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Tidak dapat mengubah tipe tram disini... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Tidak ada jalan yang cocok STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Jalur Tram tidak ada yang cocok +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... Rel trem yang tidak kompatibel # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Tidak dapat membangun kanal disini... @@ -4423,6 +4593,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Tidak da STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Tidak dapat menghapus kelompok ini... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Tidak dapat mengganti nama kelompok... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Tidak dapat menetapkan kelompok induk... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}perulangan dalam grup hierarki tidak diperbolehkan STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Tidak dapat memindahkan semua kendaraan dari kelompok ini... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Tidak dapat menambah Kendaraan dalam kelompok ini... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Tidak dapat menambah Kendaraan yang dapat dipakai bersama ke dalam grup... @@ -4618,10 +4789,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :Tambang Gula ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Tanpa nama -STR_SV_TRAIN_NAME :Kereta {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Kendaraan Jalan Raya {COMMA} -STR_SV_SHIP_NAME :Kapal {COMMA} -STR_SV_AIRCRAFT_NAME :Pesawat {COMMA} +STR_SV_TRAIN_NAME :Kereta #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Kendaraan Jalan Raya #{COMMA} +STR_SV_SHIP_NAME :Kapal #{COMMA} +STR_SV_AIRCRAFT_NAME :Pesawat #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} Utara @@ -4923,6 +5094,7 @@ STR_FORMAT_BUOY_NAME :Pelampung {TOWN STR_FORMAT_BUOY_NAME_SERIAL :Pelampung {TOWN} #{COMMA} STR_FORMAT_COMPANY_NUM :(Perusahaan {COMMA}) STR_FORMAT_GROUP_NAME :Kelompok {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Waypoint {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Waypoint {TOWN} #{COMMA} diff --git a/src/lang/irish.txt b/src/lang/irish.txt index d5371f8b83..a6b192cf7f 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :Cruinneacht STR_CARGO_PLURAL_RUBBER :Rubar STR_CARGO_PLURAL_SUGAR :Siúcra STR_CARGO_PLURAL_TOYS :Bréagáin -STR_CARGO_PLURAL_CANDY :Milseáin +STR_CARGO_PLURAL_SWEETS :Milseáin STR_CARGO_PLURAL_COLA :Cóla -STR_CARGO_PLURAL_COTTON_CANDY :Scamall siúcra +STR_CARGO_PLURAL_CANDYFLOSS :Scamall siúcra STR_CARGO_PLURAL_BUBBLES :Súilíní STR_CARGO_PLURAL_TOFFEE :Taifí STR_CARGO_PLURAL_BATTERIES :Cadhnraí @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :Cruithneacht STR_CARGO_SINGULAR_RUBBER :Rubar STR_CARGO_SINGULAR_SUGAR :Siúcra STR_CARGO_SINGULAR_TOY :Bréagán -STR_CARGO_SINGULAR_CANDY :Milseán +STR_CARGO_SINGULAR_SWEETS :Milseán STR_CARGO_SINGULAR_COLA :Cóla -STR_CARGO_SINGULAR_COTTON_CANDY :Scamall siúcra +STR_CARGO_SINGULAR_CANDYFLOSS :Scamall siúcra STR_CARGO_SINGULAR_BUBBLE :Súilín STR_CARGO_SINGULAR_TOFFEE :Taifí STR_CARGO_SINGULAR_BATTERY :Ceallra @@ -231,8 +231,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Roghnaig STR_TOOLTIP_SORT_CRITERIA :{BLACK}Roghnaigh critéir sórtála STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Roghnaigh critéir scagtha STR_BUTTON_SORT_BY :{BLACK}Sórtáil de réir -STR_BUTTON_LOCATION :{BLACK}Suíomh -STR_BUTTON_RENAME :{BLACK}Athainmnigh STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Dún an fhuinneog STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Teideal fuinneoige - tarraing é seo chun fuinneog a bhogadh @@ -310,6 +308,8 @@ STR_SORT_BY_RANGE :Raon STR_SORT_BY_POPULATION :Daonra STR_SORT_BY_RATING :Rátáil +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Cuir an cluiche ar sos STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Bog an cluiche ar aghaidh go scioptha @@ -395,7 +395,7 @@ STR_FILE_MENU_EXIT :Scoir # map menu STR_MAP_MENU_MAP_OF_WORLD :Léarscáil den domhan -STR_MAP_MENU_EXTRA_VIEW_PORT :Fuinneog amhairc bhreise +STR_MAP_MENU_EXTRA_VIEWPORT :Fuinneog amhairc bhreise STR_MAP_MENU_LINGRAPH_LEGEND :Eochair an tSreafa Lastais STR_MAP_MENU_SIGN_LIST :Liosta na gcomharthaí @@ -559,8 +559,8 @@ STR_MONTH_DEC :Nollaig # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Eochair STR_GRAPH_KEY_TOOLTIP :{BLACK}Taispeáin eochair na ngraf -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -869,7 +869,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Síníonn údarás áitiúil {TOWN} conradh le {STRING} le haghaidh cearta eisiacha iompair ar feadh bliana! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Amharc {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Amharc {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Cóipeáil chuig amharc STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Cóipeáil suíomh an phríomh-amhairc chuig an amharc seo STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Greamaigh ón amharc @@ -917,8 +917,6 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Lari na Seoirsi STR_GAME_OPTIONS_CURRENCY_IRR :Rial na hIaráine (IRR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Feithiclí Bóithre -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Roghnaigh an taobh den bhóthair ar a mbeidh feithiclí ag tiomáint STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Tiomáin ar chlé STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Tiomáin ar dheis @@ -970,6 +968,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Taifeach STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Roghnaigh an taifeach scáileáin le húsáid STR_GAME_OPTIONS_RESOLUTION_OTHER :eile + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Méid an chomhéadain STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Roghnaigh méid na heiliminte comhéadain a úsáidfear @@ -979,6 +979,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Méid cheathrú + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Sraith graifice bunaidh STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Roghnaigh an sraith grafaice bunaidh le húsáid STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} {P ch ch ch gc c}omhad ar iarraidh/truaillithe @@ -1154,8 +1156,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Cuir tubaistí, STR_CONFIG_SETTING_CITY_APPROVAL :Dearcadh chomhairle an bhaile i leith athstruchtúrú limistéir: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Roghnaigh a mhéid a mbeidh tionchar ag torann agus damáiste don chomhshaol a dhéanann cuideachtaí ar a rátáil sa bhaile agus ar imeachtaí tógála eile sa cheantar -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Airde uasta na léarscáile: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Socraigh an airde uasta atá ceadaithe do shléibhte ar an léarscáil STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Ní féidir leat airde uasta na léarscáile a shocrú ag an luach seo. Tá sliabh amháin ar a laghad ar an léarscáil níos airde STR_CONFIG_SETTING_AUTOSLOPE :Ceadaigh athrú talún faoi fhoirgnimh, ráillí iarnróid srl.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Ceadaigh tírdhreachú faoi fhoirgneamh agus ráillí gan iad a bhaint @@ -1506,8 +1506,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Iomlán STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Bíonn nuacht daite ann don chéad uair in: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :An bhliain a thosaítear ar fhógraí nuachtáin daite a chlóbhualadh. Roimh an bhliain sin, úsáidtear dubh/bán monacrómach STR_CONFIG_SETTING_STARTING_YEAR :Bliain tosaigh: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Cumasaigh geilleagar níos míne (tuilleadh athruithe, agus iad níos lú): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Má dhéantar é a chumasú, athraíonn táirgeadh na dtionscal níos minice, agus i gcéimeanna níos lú. Is iondúil nach mbíonn aon tionchar ag an socrú seo má chuirtear na cineálacha tioinscail ar fáil in NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Ceadaigh scaireanna a cheannach ó chuideachtaí eile: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Má tá sé cumasaithe, tá cead scaireanna i gcuideachta a cheannach agus a dhíol. Ní bheidh scaireanna ar fáil ach do chuideachtaí a bhfuil aois áirithe bainte amach acu STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :An céatadán den bhrabús a íocfar ar chuid den turas i gcórais fhriothálacha: {STRING} @@ -1553,9 +1551,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :ceadaithe, leag STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Áit a chuirtear crainnte sa chluiche: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Rialaigh an áit a gcuirfear na crainn go fánach i rith an chluiche. D'fhéadfadh tionchar a bheith aige seo ar thionscail a bhíonn ag brath ar fhás na gcrann, muilte adhmaid mar shampla -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :ná dean{RED}(bristear an muileann adhmaid) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :i bhforaois bháistí amháin -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :gach áit STR_CONFIG_SETTING_TOOLBAR_POS :Suíomh an phríomhbharra uirlisí: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Suíomh cothrománach an phríomhbharra uirlise ag barr an scáileáin @@ -1711,6 +1706,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ag t STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Easpa chuimhne STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Teipeadh {BYTES} a shannadh don taisce sprideanna. Laghdaíodh an taisce sprideanna go {BYTES}. Laghdófar feidhmíocht OpenTTD dá bharr. Chun an méid cuimhne atá riachtanach a laghdú, is féidir leat grafaicí 32bpp agus/nó leibhéil zúmála isteach a dhíchumasú +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1753,18 +1750,9 @@ STR_INTRO_TRANSLATION :{BLACK}Tá {NUM # Quit window STR_QUIT_CAPTION :{WHITE}Scoir -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}An bhfuil tú cinnte gur mhaith leat dul amach as OpenTTD agus filleadh ar {STRING}? STR_QUIT_YES :{BLACK}Tá STR_QUIT_NO :{BLACK}Níl -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Fág an Cluiche STR_ABANDON_GAME_QUERY :{YELLOW}An bhfuil tú cinnte gur mhaith leat an cluiche seo a fhágáil? @@ -1773,7 +1761,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}An bhfu # Cheat window STR_CHEATS :{WHITE}Caimiléireacht STR_CHEATS_TOOLTIP :{BLACK}Tugann ticbhoscaí le fios más rud é gur úsáid tú an chaimiléireacht seo roimhe seo -STR_CHEATS_WARNING :{BLACK}Rabhadh! Tá tú ar tí feall a imirt ar do chomhimreoirí. Coinnigh i gcuimhne nach ndéanfar dearmad go brách ar a leithead de náire. STR_CHEAT_MONEY :{LTBLUE}Méadaigh airgead de {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Ag imirt mar chuideachta: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Ollscartaire draíochta (bain tionscail, nithe dobhogtha): {ORANGE}{STRING} @@ -1884,10 +1871,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Athraigh # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ilimreoirí -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Fógartha -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Roghnaigh idir cluiche fógartha (idirlín) agus cluiche neamhfhógartha (Líonra Achair Logánta, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Níl -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Tá STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ainm imreora: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Seo an t-ainm faoina mbeidh imreoirí eile in ann tú a aithint @@ -1928,8 +1911,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Téigh i STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Athnuaigh an freastalaí STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Athnuaigh faisnéis an fhreastalaí -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Aimsigh freastalaí -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Cuardaigh líonra le haghaidh freastalaí STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Cuir freastalaí leis STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Cuirtear freastalaí leis an liosta a sheiceálfar i gcónaí le haghaidh cluichí ar rith. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Tosaigh freastalaí @@ -1946,6 +1927,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Taispeá STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Socraigh pasfhocal STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Cosain do chluiche le pasfhocal más mian leat nach mbeidh rochtain phoiblí air +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Fógartha +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Roghnaigh idir cluiche fógartha (idirlín) agus cluiche neamhfhógartha (Líonra Achair Logánta, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Níl STR_NETWORK_START_SERVER_ADVERTISED :Tá STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} {P ch ch ch gc c}lia{P "" "" "" "" i}nt @@ -2058,7 +2041,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Cuideachta nua # Network client list STR_NETWORK_CLIENTLIST_KICK :Ciceáil STR_NETWORK_CLIENTLIST_BAN :Toirmisc -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Tabhair airgead STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Labhair le cách STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Labhair le cuideachta STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Teacht. phríobháideach @@ -2067,8 +2049,6 @@ STR_NETWORK_SERVER :Freastalaí STR_NETWORK_CLIENT :Cliant STR_NETWORK_SPECTATORS :Féachadóirí -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Iontráil an méid airgid is mian leat a thabhairt - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ná sábháil an pasfhocal a iontráladh STR_COMPANY_PASSWORD_OK :{BLACK}Tabhair an pasfhocal nua don chuideachta @@ -2168,8 +2148,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** Tá {STRING STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** Thosaigh {STRING} cuideachta nua (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** D'fhág {STRING} an cluiche ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** D'athraigh {STRING} a (h)ainm go {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** Thug {STRING} {2:CURRENCY_LONG} dod' chuideachta -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Thug tú {2:CURRENCY_LONG} do {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Dhún an freastalaí an seisiún STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Tá an freastalaí á atosú...{}Fan go fóill... @@ -2246,6 +2224,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}Tá graf STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Tugann, íoslódáil na grafaicí STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Ní thugann, scoir de OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Roghanna Trédhearcachta STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Scoránaigh trédhearcacht do chomharthaí stáisiún. Ctrl+Cliceáil le glasáil. @@ -2286,6 +2265,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Tóg st STR_JOIN_WAYPOINT_CAPTION :{WHITE}Ceangail pointe bealaigh STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Tóg pointe bealaigh ar leithligh +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Tógáil Iarnróid STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Tógáil Iarnróid Leicrithe @@ -2469,7 +2450,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Méid: { STR_OBJECT_CLASS_LTHS :Tithe solais STR_OBJECT_CLASS_TRNS :Tarchuradóirí -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Crainnte STR_PLANT_TREE_TOOLTIP :{BLACK}Roghnaigh an cineál crainn le cur STR_TREES_RANDOM_TYPE :{BLACK}Crainnte randamacha @@ -2712,14 +2693,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Líon na mbailte: STR_MAPGEN_DATE :{BLACK}Dáta: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Líon na dtionscal: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Airde uasta na léarscáile -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Méadaigh airde uasta na sléibhte ar an léarscáil de leibhéal amháin -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Laghdaigh airde uasta na sléibhte ar an léarscáil de leibhéal amháin -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Airde na líne sneachta: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Bog airde na líne sneachta suas ceann amháin -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Bog airde na líne sneachta síos ceann amháin STR_MAPGEN_LAND_GENERATOR :{BLACK}Talamh a chruthú: -STR_MAPGEN_TREE_PLACER :{BLACK}Algartam na gcrann: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Cineál tír-raoin: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Leibhéal na farraige: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Aibhneacha: @@ -2744,8 +2718,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Ainm an STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Méid: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Athraigh airde uasta na léarscáile -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Athraigh airde na líne sneachta STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Athraigh an bhliain tosaigh # SE Map generation @@ -3022,13 +2994,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Tabhair # Goal window STR_GOALS_CAPTION :{WHITE}Spriocanna {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Spriocanna Uilíocha -STR_GOALS_GLOBAL_TITLE :{BLACK}Spriocanna uilíocha: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Ceann ar bith - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Neamhbhainteach - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Spriocanna na cuideachta: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Cliceáil ar an sprioc chun an príomhamharc a lárú ar an tionscal/baile/tíle. Ctrl+Cliceáil chun fuinneog amhairc nua a oscailt ar shuíomh an tionscail/an bhaile/na tíle # Goal question window @@ -3553,10 +3522,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Ceangail # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Láraigh an príomhamharc ar shuíomh na traenach. Leanfar an traein sa phríomhamharc le Ctrl+Cliceáil -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Láraigh an príomhamharc ar shuíomh na feithicle. Leanfar an fheithicil sa phríomhamharc le Ctrl+Cliceáil -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Láraigh an príomhamharc ar shuíomh na loinge. Leanfar an long sa phríomhamharc le Ctrl+Cliceáil -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Láraigh an príomhamharc ar shuíomh an aerárthaigh. Leanfar an t-aerárthach sa phríomhamharc le Ctrl+Cliceáil STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Seol an traein chuig an iosta. Ní dhéanfar ach seirbhísiú le Ctrl+Cliceáil STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Seol an fheithicil chuig an iosta. Ní dhéanfar ach seirbhísiú le Ctrl+Cliceáil @@ -3588,10 +3553,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Taispeá STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Taispeáin sonraí na loinge STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Taispeáin sonraí an aerárthaigh -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}An gníomh don traein reatha - cliceáil chun an traein a thosú/stopadh. Ctrl+Cliceáil le scrollú chuig an gceann scríbe. -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}An gníomh don fheithicil reatha - cliceáil chun an fheithicil a thosú/stopadh. Ctrl+Cliceáil le scrollú chuig an gceann scríbe. -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}An gníomh don long reatha - cliceáil chun an long a thosú/stopadh. Ctrl+Cliceáil le scrollú chuig an gceann scríbe. -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}An gníomh don aerárthach reatha - cliceáil chun an t-aerárthach a thosú/stopadh. Ctrl+Cliceáil le scrollú chuig an gceann scríbe. + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Ag Lódáil / Dílódáil diff --git a/src/lang/italian.txt b/src/lang/italian.txt index ff593ff229..2627a7b6ce 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -50,9 +50,9 @@ STR_CARGO_PLURAL_WHEAT :{G=m}Frumento STR_CARGO_PLURAL_RUBBER :{G=f}Gomma STR_CARGO_PLURAL_SUGAR :{G=m}Zucchero STR_CARGO_PLURAL_TOYS :{G=m}Giocattoli -STR_CARGO_PLURAL_CANDY :{G=f}Caramelle +STR_CARGO_PLURAL_SWEETS :{G=f}Caramelle STR_CARGO_PLURAL_COLA :{G=f}Cola -STR_CARGO_PLURAL_COTTON_CANDY :{G=m}Zucchero filato +STR_CARGO_PLURAL_CANDYFLOSS :{G=m}Zucchero filato STR_CARGO_PLURAL_BUBBLES :{G=f}Bollicine STR_CARGO_PLURAL_TOFFEE :{G=m}Toffee STR_CARGO_PLURAL_BATTERIES :{G=f}Batterie @@ -84,9 +84,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=m}Frumento STR_CARGO_SINGULAR_RUBBER :{G=f}Gomma STR_CARGO_SINGULAR_SUGAR :{G=m}Zucchero STR_CARGO_SINGULAR_TOY :{G=m}Giocattolo -STR_CARGO_SINGULAR_CANDY :{G=f}Caramella +STR_CARGO_SINGULAR_SWEETS :{G=f}Caramella STR_CARGO_SINGULAR_COLA :{G=f}Cola -STR_CARGO_SINGULAR_COTTON_CANDY :{G=m}Zucchero filato +STR_CARGO_SINGULAR_CANDYFLOSS :{G=m}Zucchero filato STR_CARGO_SINGULAR_BUBBLE :{G=f}Bollicine STR_CARGO_SINGULAR_TOFFEE :{G=m}Toffee STR_CARGO_SINGULAR_BATTERY :{G=f}Batterie @@ -196,6 +196,7 @@ STR_COLOUR_DEFAULT :Predefinito STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}riquadri/giorno STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp @@ -235,8 +236,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Selezion STR_TOOLTIP_SORT_CRITERIA :{BLACK}Seleziona il criterio di ordinamento STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Seleziona il criterio di filtraggio STR_BUTTON_SORT_BY :{BLACK}Ordina per -STR_BUTTON_LOCATION :{BLACK}Posizione -STR_BUTTON_RENAME :{BLACK}Rinomina STR_BUTTON_CATCHMENT :{BLACK}Copertura STR_TOOLTIP_CATCHMENT :{BLACK}Attiva/disattiva la visualizzazione dell'area di copertura @@ -316,6 +315,15 @@ STR_SORT_BY_CARGO_CAPACITY :Capacità di ca STR_SORT_BY_RANGE :{G=f}Autonomia STR_SORT_BY_POPULATION :Popolazione STR_SORT_BY_RATING :Valutazione +STR_SORT_BY_NUM_VEHICLES :Numero di veicoli +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Profitto totale dell'anno scorso +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Profitto totale di quest'anno +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Profitto medio dell'anno scorso +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Profitto medio di quest'anno + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Nessuno +STR_GROUP_BY_SHARED_ORDERS :Ordini condivisi # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausa @@ -404,7 +412,7 @@ STR_FILE_MENU_EXIT :Esci # map menu STR_MAP_MENU_MAP_OF_WORLD :Mappa del mondo -STR_MAP_MENU_EXTRA_VIEW_PORT :Mini visuale extra +STR_MAP_MENU_EXTRA_VIEWPORT :Mini visuale extra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda rotte commerciali STR_MAP_MENU_SIGN_LIST :Elenco cartelli @@ -427,7 +435,7 @@ STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Grafico tariffe ############ range ends here ############ range for company league menu starts -STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Classifica società +STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Classifica compagnie STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Valutazione dettagliata prestazioni STR_GRAPH_MENU_HIGHSCORE :Punteggi migliori ############ range ends here @@ -570,8 +578,8 @@ STR_MONTH_DEC :Dicembre # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Legenda STR_GRAPH_KEY_TOOLTIP :{BLACK}Mostra la legenda del grafico -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -604,9 +612,9 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Ingegnere STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Direttore del traffico STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Coordinatore dei trasporti STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Supervisore degli itinerari -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Dirigente -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Manager -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Amministratore delegato +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Direttore +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Amministratore delegato +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Presidente del consiglio di amministazione STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Presidente STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnate @@ -741,6 +749,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Terreno accidentato STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Terreno erboso STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Terreno spoglio +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Foresta pluviale STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Campi STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Alberi STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Rocce @@ -772,6 +781,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Mostra t STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Mostra l'ultimo messaggio o notizia STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * IN PAUSA * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * IN PAUSA (in attesa di aggiornamento del grafo delle rotte) * * STR_STATUSBAR_AUTOSAVE :{RED}SALVATAGGIO AUTOMATICO STR_STATUSBAR_SAVING_GAME :{RED}* * SALVATAGGIO PARTITA * * @@ -886,7 +896,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}L'autorità locale di {TOWN} firma un accordo con la {STRING} per un anno di diritti di trasporto esclusivi! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Mini visuale {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Mini visuale {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Cambia mini visuale STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copia la posizione della visuale principale in questa mini visuale STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Cambia vis. principale @@ -937,10 +947,11 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Peso messicano STR_GAME_OPTIONS_CURRENCY_NTD :Nuovo dollaro taiwanese (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi cinese (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Dollaro di Hong Kong (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Rupia indiana (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Rupia indonesiana (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit malaysiano (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automezzi -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Seleziona il lato della strada sul quale devono guidare i veicoli STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Guida a sinistra STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Guida a destra @@ -991,10 +1002,17 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Attiva q STR_GAME_OPTIONS_RESOLUTION :{BLACK}Risoluzione schermo STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Seleziona la risoluzione dello schermo da utilizzare STR_GAME_OPTIONS_RESOLUTION_OTHER :Altra +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Accelerazione hardware +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Seleziona questa opzione per consentire a OpenTTD di utilizzare l'accelerazione hardware. Eventuali cambiamenti avranno effetto solo dopo un riavvio del gioco +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Le nuove impostazioni avranno effetto solo dopo un riavvio del gioco + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Dimensione interfaccia STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Seleziona la dimensione deglie elementi dell'interfaccia grafica +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(rileva automaticamente) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normale STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doppia STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quadrupla @@ -1002,10 +1020,19 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quadrupla STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Dimensione caratteri STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Seleziona la dimensione dei caratteri dell'interfaccia +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(rileva automaticamente) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normale STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Doppia STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quadrupla +STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafica + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Frequenza di aggiornameno dello schermo +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Seleziona la frequenza di aggiornamento dello schermo da utilizzare +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :altro +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Frequenze di aggiornamento maggiori di 60Hz potrebbero impattare le prestazioni. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Pacchetto grafico di base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Seleziona il pacchetto grafico di base da utilizzare STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} file mancant{P e i}/corrott{P o i} @@ -1100,6 +1127,8 @@ STR_TERRAIN_TYPE_FLAT :Pianeggiante STR_TERRAIN_TYPE_HILLY :Collinare STR_TERRAIN_TYPE_MOUNTAINOUS :Montuoso STR_TERRAIN_TYPE_ALPINIST :Alpino +STR_TERRAIN_TYPE_CUSTOM :Altezza personalizzata +STR_TERRAIN_TYPE_CUSTOM_VALUE :Altezza personalizzata ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :Permissivo STR_CITY_APPROVAL_TOLERANT :Tollerante @@ -1203,8 +1232,8 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Controlla l'att STR_CONFIG_SETTING_CITY_APPROVAL :Atteggiamento della città in merito alle modifiche: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Seleziona il modo in cui il rumore e i danni all'ambiente da parte delle compagnie possono influenzare la valutazione delle città e le successive operazioni di costruzione nell'area controllata -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Altezza massima mappa: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Imposta l'altezza massima consentita per le montagne sulla mappa +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(automatico) STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Impossibile impostare l'altezza massima della mappa a questo valore. Almeno una delle montagne della mappa è più alta STR_CONFIG_SETTING_AUTOSLOPE :Consenti rimodellazione terreno sotto a edifici, rotaie, etc.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Consente la rimodellazione del terreno sotto edifici e rotaie senza doverli rimuovere @@ -1350,6 +1379,10 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Massima distanz STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limita la distanza dal bordo della mappa entro cui possono essere costruite raffinerie e piattaforme petrolifere. Nelle mappe insulari sono comunque sempre vicino alla costa. Su mappe più grandi di 256 riquadri il valore è aumentato in proporzione. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altezza delle nevi perenni: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Determina la quota alla quale appare la neve nei paesaggi sub-artici. La neve ha anche l'effetto di influenzare la generazione delle industrie e i requisiti per la crescita delle città +STR_CONFIG_SETTING_SNOW_COVERAGE :Aree innevate: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :Aree desertiche: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregolarità del terreno: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Solo TerraGenesis) Seleziona la frequenza delle colline. I paesaggi morbidi presentano poche colline di forma allargata. I paesaggi accidentati hanno molte colline, che potrebbero apparire ripetitive STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Molto morbido @@ -1463,6 +1496,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Mantieni aperte STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Mantiene aperti dopo l'uso gli strumenti di costruzione di ponti, tunnel, etc. STR_CONFIG_SETTING_EXPENSES_LAYOUT :Raggruppa voci nella finestra delle finanze: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Determina l'orginalizzazione della finestra delle finanze della compagnia +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Rimuove automaticamente i segnali durante la costruzione di binari: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Rimuove automaticamente i segnali d'intralcio durante la costruzione di binari. Notare che questo può potenzialmente causare incidenti ferroviari. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limite velocità avanzamento veloce: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limite della velocità di gioco quanto l'avanzamento veloce è abilitato. 0 = nessun limite (per quanto consenta il tuo computer). Valori al di sotto di 100% rallentano il gioco. Il limite superiore dipende dalle specifiche del tuo computer e può variare a seconda del gioco in corso. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% della velocità di gioco normale +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Nessun limite (per quanto consenta il tuo computer) STR_CONFIG_SETTING_SOUND_TICKER :Notiziari: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Emette un suono per i messaggi di riepilogo delle notizie @@ -1576,8 +1615,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Punteggi a fine STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Anno in cui il gioco finisce per poter calcolare i punteggi. Alla fine di ques'tanno il punteggio della compagnia viene registrato e viene mostrata la schermata con i punteggi più alti, ma il giocatore può continuare a giocare anche dopo.{}Se quest'anno precede quello di inizio, la schermata dei punteggi non verrà mai mostrata. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Mai -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Abilita economia fluida (cambiamenti piccoli e frequenti): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Se abilitata, la produzione industriale cambia più spesso e a passi più piccoli. Questa impostazione non ha in genere effetto per i tipi di industria aggiunti da un NewGRF +STR_CONFIG_SETTING_ECONOMY_TYPE :Tipo di economia: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Un'economia morbida fa cambiare la produzione più spesso, ma a piccoli step. Un'economia congelata impedisce cambiamenti di produzione e chiusure di industrie. Questa impostazione potrebbe non avere effetto per le tipologie industriali introdotte da NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Originale +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Morbida +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Congelata STR_CONFIG_SETTING_ALLOW_SHARES :Permetti l'acquisto di azioni di altre compagnie: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Se abilitata, consente l'acquisto e la vendita di azioni delle compagnie. Le azioni sono disponibili solo per le compagnie che hanno raggiunto una certa età minima STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Età minima della compagnia per lo scambio delle sue azioni: {STRING} @@ -1629,9 +1671,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineare STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Collocazione di alberi durante la partita: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlla la comparsa casuale di alberi durante una partita. Può influenzare le industrie che dipendono dalla crescita degli alberi, come le segherie -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nessuna {RED}(funzionamento errato segherie) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Solo nelle foreste pluviali -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Ovunque +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Cresce ma non si diffonde {RED}(distrugge la falegnameria) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Cresce ma si diffonde solo in foreste pluviali +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Cresce e si diffonde ovunque +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Non cresce e non si diffonde {RED}(distrugge la falegnameria) STR_CONFIG_SETTING_TOOLBAR_POS :Posizione barra degli strumenti principale: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Posizione orizzontale della barra degli strumenti principale sul bordo superiore dello schermo @@ -1649,12 +1692,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :Massimo livello STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Livello massimo di zoom in avanti per le visuali. Nota: abilitare alti livelli di zoom avanti aumenta la memoria richiesta STR_CONFIG_SETTING_ZOOM_MAX :Massimo livello di zoom indietro: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Livello massimo di zoom all'indietro per le visuali. Nota: i livelli alti di zoom indietro possono causare rallentamenti durante l'uso +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Risoluzione massima sprite: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Limita la risoluzione massima degli sprite da utilizzare. Questa limitazione eviterà di utilizzare texture ad alta risoluzione anche quando disponibili. Ciò può aiutare a rendere l'aspetto di gioco più uniforme quando si usano combinazioni di file GRF con e senza texture ad alta risoluzione. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normale STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Velocità di crescita delle città: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocità di crescita delle città STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Nessuna @@ -1698,6 +1746,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Seleziona le un STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiali (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metriche (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unità di gioco (riquadri/giorno) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unità di potenza veicoli: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Seleziona le unità di misura da utilizzare per mostrare i valori di potenza dei veicoli nell'interfaccia utente @@ -1787,6 +1836,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memoria esaurita STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Impossibile allocare {BYTES} della cache degli sprite. La cache degli sprite è stata limitata a {BYTES}; questo comporterà una riduzione delle prestazioni di OpenTTD. Per ridurre la quantità di memoria richiesta è possibile disabilitare la grafica a 32 bit e/o i livelli di zoom +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}Errore nelle impostazioni video... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... non è stata trovata alcuna GPU compatibile. L'accelerazione hardware è stata disabilitata + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1823,25 +1876,17 @@ STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Mostra l STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Mostra le impostazioni NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Controlla la disponibilità di contenuti nuovi o aggiornati da scaricare STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Mostra le impostazioni delle IA e degli Script -STR_INTRO_TOOLTIP_QUIT :{BLACK}Esci da 'OpenTTD' +STR_INTRO_TOOLTIP_QUIT :{BLACK}Esci da OpenTTD STR_INTRO_BASESET :{BLACK}Nel pacchetto grafico di base attualmente selezionato mancano {NUM} sprite. È consigliabile controllare gli aggiornamenti del pacchetto. STR_INTRO_TRANSLATION :{BLACK}A questa traduzione mancano {NUM} string{P a he}. Aiutaci a migliorare OpenTTD iscrivendoti come traduttore. Vedi readme.txt per dettagli. # Quit window STR_QUIT_CAPTION :{WHITE}Esci -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Si è sicuri di voler uscire da OpenTTD e tornare a {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Si è sicuri di voler uscire da OpenTTD? STR_QUIT_YES :{BLACK}Sì STR_QUIT_NO :{BLACK}No -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abbandona partita STR_ABANDON_GAME_QUERY :{YELLOW}Si è sicuri di voler abbandonare la partita in corso? @@ -1850,7 +1895,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Si è s # Cheat window STR_CHEATS :{WHITE}Trucchi STR_CHEATS_TOOLTIP :{BLACK}Le caselle indicano se un trucco è già stato usato una volta -STR_CHEATS_WARNING :{BLACK}Attenzione! Stai per tradire i tuoi avversari. Ricordati che un così grande disonore sarà ricordato per l'eternità +STR_CHEATS_NOTE :{BLACK}Nota: qualsiasi utilizzo di queste impostazioni sarà registrato nel salvataggio STR_CHEAT_MONEY :{LTBLUE}Aumenta denaro di {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Compagnia controllata: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer magico (rimuove industrie e oggetti fissi): {ORANGE}{STRING} @@ -1962,10 +2007,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambia l # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multigiocatore -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Pubblico -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Sceglie fra partita pubblica (su Internet) o privata (su rete locale, LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :No -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Sì STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome giocatore: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Questo è il nome con cui si verrà identificati dagli altri giocatori @@ -2006,8 +2047,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Entra ne STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Aggiorna STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Aggiorna le informazioni sul server -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Trova server -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Cerca un server sulla rete +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Cerca su Internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Cerca server pubblici su Internet +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Cerca nella LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Cerca server nella LAN STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Aggiungi server STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Aggiunge un server alla lista di server in cui cercare sempre partite in corso STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Avvia server @@ -2024,6 +2067,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Il nome STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Imposta password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegge la partita con una password in modo che non sia accessibile pubblicamente +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Pubblico +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Sceglie fra partita pubblica (su Internet) o privata (su rete locale, LAN) STR_NETWORK_START_SERVER_UNADVERTISED :No STR_NETWORK_START_SERVER_ADVERTISED :Sì STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client @@ -2137,7 +2182,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nuova compagnia # Network client list STR_NETWORK_CLIENTLIST_KICK :Espelli STR_NETWORK_CLIENTLIST_BAN :Bandisci -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Dona denaro STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parla a tutti STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parla alla compagnia STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Messaggio privato @@ -2146,8 +2190,6 @@ STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spettatori -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Inserire la quantità di denaro da donare - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Non salvare la password inserita STR_COMPANY_PASSWORD_OK :{BLACK}Assegna la nuova password alla compagnia @@ -2234,11 +2276,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Partita ancora STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Partita ancora in pausa ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Partita ancora in pausa ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Partita ancora in pausa ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Partita ancora in pausa ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Partita ripresa ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :numero di giocatori STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :connessione client in corso STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuale STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :script +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :in attesa di aggiornamento del grafo delle rotte ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :abbandono della partita STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} è entrato nella partita @@ -2248,8 +2292,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} è STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ha avviato una nuova compagnia (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} ha abbandonato la partita ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} ha cambiato nome in {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ha donato alla tua compagnia {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Hai donato {2:CURRENCY_LONG} a {1:STRING} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ha dato {2:CURRENCY_LONG} a {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Il server ha chiuso la sessione STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Il server si sta riavviando...{}Attendere prego... STR_NETWORK_MESSAGE_KICKED :*** {STRING} è stato espulso. Motivo: ({STRING}) @@ -2327,6 +2370,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Sì, scarica il pacchetto STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}No, esci da OpenTTD +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Download non riuscito +STR_MISSING_GRAPHICS_ERROR :{BLACK}Download del pacchetto grafico non riuscito.{}Si prega di scaricare il pacchetto grafico manualmente. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Esci da OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Opzioni trasparenza STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Attiva/disattiva la trasparenza dei cartelli. CTRL+clic per bloccare @@ -2370,6 +2417,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Costrui STR_JOIN_WAYPOINT_CAPTION :{WHITE}Unisci waypoint STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Costruisci waypoint separato +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Disabilitato perché non ci sono veicoli disponibili per questa infrastruttura + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Costruzione ferrovie STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Costruzione ferrovie elettrificate @@ -2561,13 +2611,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Dimensio STR_OBJECT_CLASS_LTHS :Fari STR_OBJECT_CLASS_TRNS :Trasmettitori -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Alberi STR_PLANT_TREE_TOOLTIP :{BLACK}Seleziona il tipo di albero da piantare. Se nel riquadro sono già presenti alberi, ne aggiunge altri di vari tipi, indipendentemente dal tipo selezionato STR_TREES_RANDOM_TYPE :{BLACK}Alberi casuali STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Pianta alberi di specie a caso. MAIUSC alterna fra costruzione e stima dei costi STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Alberi casuali STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Pianta alberi casualmente nel paesaggio +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normale +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Pianta singoli alberi trascinando il mouse sopra il paesaggio. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Bosco +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Pianta piccole foreste trascinando il mouse sopra il paesaggio. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Foresta +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Pianta grandi foreste trascinando il mouse sopra il paesaggio. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Generazione terreno @@ -2618,12 +2674,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Casuale # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Finanzia nuova industria STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Selezionare l'industria appropriata dalla lista -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Alcune industrie casuali +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Crea industrie casuali STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Copre la mappa con industrie posizionate casualmente +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Crea industrie casuali +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Si è sicuri di voler creare casualmente molte industrie? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Costo: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Esegui prospezione STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Costruisci STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Finanzia +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Rimuovi tutte le industrie +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Rimuove tutte le industrie presenti sulla mappa +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Rimuovi tutte le industrie +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Si è sicuri di voler rimuovere tutte le industrie? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Catena di distribuzione di {G un un' una} {STRING} @@ -2644,6 +2706,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Selezion # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informazioni sull'area di terreno +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del riquadro. CTRL+clic la mostra in una mini visuale STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Costo di demolizione: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Costo di demolizione: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Ricavo da demolizione: {LTBLUE}{CURRENCY_LONG} @@ -2853,6 +2916,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtro: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sovrascrivi file STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Si è sicuri di voler sovrascrivere il file esistente? +STR_SAVELOAD_DIRECTORY :{STRING} (Cartella) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Cartella superiore) STR_SAVELOAD_OSKTITLE :{BLACK}Inserire un nome per il salvataggio @@ -2864,14 +2929,12 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Numero città: STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Numero industrie: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Altezza massima mappa: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Aumenta di uno l'altezza massima delle montagne sulla mappa -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Riduce di uno l'altezza massima delle montagne sulla mappa -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Altezza delle nevi: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Sposta in su di uno l'altezza delle nevi perenni -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Sposta in giù di uno l'altezza delle nevi perenni +STR_MAPGEN_HEIGHTMAP_HEIGHT :{WHITE}Picco massimo: +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Aree innevate: +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Aree desertiche: +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}Generatore: -STR_MAPGEN_TREE_PLACER :{BLACK}Algoritmo alberi: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipo di terreno: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Livello del mare: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Fiumi: @@ -2896,8 +2959,9 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome hei STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Dim.: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Cambia l'altezza massima della mappa -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Cambia l'altezza delle nevi perenni +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Picco massimo +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Aree innevate (in %) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Aree desertiche (in %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Cambia l'anno di inizio # SE Map generation @@ -3003,8 +3067,8 @@ STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Numero # NewGRF inspect window STR_NEWGRF_INSPECT_CAPTION :{WHITE}Ispeziona - {STRING} -STR_NEWGRF_INSPECT_PARENT_BUTTON :{BLACK}Padre -STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Ispeziona l'oggetto dell'ambito padre +STR_NEWGRF_INSPECT_PARENT_BUTTON :{BLACK}Superiore +STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Ispeziona l'oggetto dell'ambito superiore STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} a {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Oggetto @@ -3114,6 +3178,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Attiva/d # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Modifica testo del cartello +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del cartello. CTRL+clic lo mostra in una mini visuale STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Va al cartello successivo STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Va al cartello precedente @@ -3174,33 +3239,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Finanzia nuove STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Acquista esclusiva sui trasporti STR_LOCAL_AUTHORITY_ACTION_BRIBE :Corrompi l'autorità locale -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Inizia una piccola campagna pubblicitaria, per attirare più passeggeri e merci ai servizi di trasporto della compagnia.{}Costo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Inizia una campagna pubblicitaria moderata, per attirare più passeggeri e merci ai servizi di trasporto della compagnia.{}Costo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Inizia una grande campagna pubblicitaria locale, per attirare più passeggeri e merci ai servizi di trasporto della compagnia.{}Costo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Finanzia la ricostruzione della rete stradale cittadina. Causa un considerevole disagio al traffico stradale per 6 mesi.{}Costo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Costruisce una statua in onore della compagnia.{}Costo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Finanzia la costruzione di nuovi edifici commerciali nella città.{}Costo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Acquista un anno di diritti di trasporto esclusivi in città. L'autorità cittadina permetterà a passeggeri e merci di usare solo le stazioni della compagnia.{}Costo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Inizia una piccola campagna pubblicitaria, per attirare più passeggeri e merci ai servizi di trasporto della compagnia.{}Fornisce un aumento temporaneo della valutazione delle stazioni in un piccolo raggio dal centro della città.{}Costo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Inizia una campagna pubblicitaria moderata, per attirare più passeggeri e merci ai servizi di trasporto della compagnia.{}Fornisce un aumento temporaneo della valutazione delle stazioni in un moderato raggio dal centro della città.{}Costo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Inizia una grande campagna pubblicitaria locale, per attirare più passeggeri e merci ai servizi di trasporto della compagnia.{}Fornisce un aumento temporaneo della valutazione delle stazioni in un grande raggio dal centro della città.{}Costo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Finanzia la ricostruzione della rete stradale cittadina.{}Causa un considerevole disagio al traffico stradale per 6 mesi.{}Costo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Costruisci una statua in onore della compagnia.{}Fornisce un aumento permanente della valutazione delle stazioni in questa città.{}Costo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Finanzia la costruzione di nuovi edifici nella città.{}Fornisce un aumento temporaneo della crescita della città.{}Costo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Acquista un anno di diritti di trasporto esclusivi in città. L'autorità cittadina non permetterà a passeggeri e merci di usare le stazioni dei tuoi avversari.{}Costo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Corrompi l'autorità locale per aumentare la tua valutazione, con il rischio di una severa multa se scoperto.{}Costo: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}Obiettivi della {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Obiettivi globali STR_GOALS_SPECTATOR :Obiettivi globali -STR_GOALS_GLOBAL_TITLE :{BLACK}Obiettivi globali: +STR_GOALS_GLOBAL_BUTTON :{BLACK}Globale +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Mostra obbiettivi globali +STR_GOALS_COMPANY_BUTTON :{BLACK}Compagnia +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Mostra obbiettivi della compagnia STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nessuno - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Non applicabile - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Obiettivi della compagnia: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Fare clic su un obiettivo per centrare la visuale principale sull'industria, città o riquadro. CTRL+clic mostra l'industria/città/riquadro in una mini visuale # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Domanda -STR_GOAL_QUESTION_CAPTION_INFORMATION :Informazione -STR_GOAL_QUESTION_CAPTION_WARNING :Avviso -STR_GOAL_QUESTION_CAPTION_ERROR :Errore +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Domanda +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informazioni +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Avviso +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Errore ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Annulla @@ -3325,7 +3391,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Impedisc STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del waypoint. CTRL+clic lo mostra in una mini visuale. STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Cambia il nome del waypoint -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione della boa. CTRL+clic la mostra in una mini visuale. +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione della boa. CTRL+clic la mostra in una mini visuale STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Cambia il nome della boa STR_EDIT_WAYPOINT_NAME :{WHITE}Rinomina il waypoint @@ -3390,6 +3456,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Sposta s STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Ricostruisce la sede della compagnia in un altro luogo pagando l'1% del valore della compagnia. MAIUSC+clic mostra il costo stimato senza ricostruire la sede STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Dettagli STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Visualizza i conteggi dettagliati delle infrastrutture +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Trasferisci denaro +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Trasferisci denaro a questa compagnia STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nuova faccia STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Seleziona una nuova faccia per il presidente @@ -3407,8 +3475,9 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Vende un STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nome della compagnia STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome del presidente +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Inserisci l'ammontare di denaro che vuoi trasferire -STR_BUY_COMPANY_MESSAGE :{WHITE}Stiamo cercando una compagnia di trasporti disposta a rilevare la nostra società.{}{} Vorrebbe acquistare la {COMPANY} per {CURRENCY_LONG}? +STR_BUY_COMPANY_MESSAGE :{WHITE}Stiamo cercando una società di trasporti disposta a rilevare la nostra compagnia.{}{} Vorrebbe acquistare {COMPANY} per {CURRENCY_LONG}? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastrutture della {COMPANY} @@ -3519,8 +3588,8 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Rimuovi tutti i STR_GROUP_RENAME_CAPTION :{BLACK}Rinomina un gruppo -STR_GROUP_PROFIT_THIS_YEAR :Profitto quest'anno: -STR_GROUP_PROFIT_LAST_YEAR :Profitto anno scorso: +STR_GROUP_PROFIT_THIS_YEAR :Profitto di quest'anno: +STR_GROUP_PROFIT_LAST_YEAR :Profitto dell'anno scorso: STR_GROUP_OCCUPANCY :Utilizzo corrente: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -3561,6 +3630,7 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagoni m STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Riadattabile per: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Tutti i tipi di carico STR_PURCHASE_INFO_NONE :Niente +STR_PURCHASE_INFO_ENGINES_ONLY :Solo motori STR_PURCHASE_INFO_ALL_BUT :Tutto tranne {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Sforzo di trazione massimo: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Autonomia: {GOLD}{COMMA} riquadr{P o i} @@ -3674,10 +3744,10 @@ STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Compra u STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Compra una copia di una nave. Fare clic su questo pulsante e quindi su una nave dentro o fuori dal deposito. Tenere premuto CTRL per condividere gli ordini. MAIUSC+clic mostra il costo stimato senza comprare STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Compra una copia di un aeromobile. Fare clic su questo pulsante e quindi su un aeromobile dentro o fuori dall'hangar. Tenere premuto CTRL per condividere gli ordini. MAIUSC+clic mostra il costo stimato senza comprare -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del deposito ferroviario. CTRL+clic lo mostra in una mini visuale. -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del deposito automezzi. CTRL+clic lo mostra in una mini visuale. -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del deposito navale. CTRL+clic lo mostra in una mini visuale. -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione dell'hangar. CTRL+clic lo mostra in una mini visuale. +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del deposito ferroviario. CTRL+clic lo mostra in una mini visuale +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del deposito automezzi. CTRL+clic lo mostra in una mini visuale +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del deposito navale. CTRL+clic lo mostra in una mini visuale +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione dell'hangar. CTRL+clic lo mostra in una mini visuale STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Elenca tutti i treni che hanno questo deposito nei loro ordini STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Elenca tutti gli automezzi che hanno questo deposito nei loro ordini @@ -3694,7 +3764,7 @@ STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Fare cli STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Fare clic per avviare tutte le navi nel deposito STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Fare clic per avviare tutti gli aeromobili nell'hangar -STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Stai per vendere tutti i veicoli nel deposito. Sei sicuro? +STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Si stano per vendere tutti i veicoli nel deposito. Si è sicuri? # Engine preview window STR_ENGINE_PREVIEW_CAPTION :{WHITE}Messaggio da un costruttore di veicoli @@ -3767,10 +3837,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Fa sì c # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del treno. CTRL+clic attiva l'inseguimento della visuale. -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione dell'automezzo. CTRL+clic attiva l'inseguimento della visuale. -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione della nave. CTRL+clic attiva l'inseguimento della visuale. -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione dell'aeromobile. CTRL+clic attiva l'inseguimento della visuale. +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del treno. Doppio clic lo segue nella visuale principale. CTRL+clic lo mostra in una mini visuale +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione del veicolo. Doppio click lo segue nella visuale principale. CTRL+Click lo mostra in una mini visuale +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione della nave. Doppio clic la segue nella visuale principale. CTRL+clic la mostra in una mini visuale +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centra la visuale principale sulla posizione dell'aeromobile. Doppio click lo segue nella visuale principale. CTRL+Click lo mostra in una mini visuale STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Manda il treno al deposito. CTRL+clic per eseguire solo una manutenzione STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Manda l'automezzo al deposito. CTRL+clic per eseguire solo una manutenzione @@ -3802,10 +3872,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Mostra i STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Mostra i dettagli sulla nave STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Mostra i dettagli sull'aeromobile -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Azione corrente del treno - fare clic per fermarlo/avviarlo. CTRL+clic visualizza la destinazione -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Azione corrente del veicolo - fare clic per fermarlo/avviarlo. CTRL+clic visualizza la destinazione -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Azione corrente della nave - fare clic per fermarla/avviarla. CTRL+clic visualizza la destinazione -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Azione corrente dell'aeromobile - fare clic per fermare/avviare l'aeromobile. CTRL+clic visualizza la destinazione +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Azione in corso del treno - clicca per fermare o far partire il treno +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Azione in corso del veicolo - clicca per fermare o far partire il veicolo +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Azione in corso della nave - clicca per fermare o far partire la nave +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Azione in corso dell'aeromobile - clicca per fermare o far partire l'aeromobile + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Centra la visuale principale sulla destinazione dell'ordine. CTRL+clic la mostra in una mini visuale. # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Caricamento / Scaricamento @@ -4033,6 +4105,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Riadatta per { STR_ORDER_STOP_ORDER :(Ferma) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Impossibile usare la stazione){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Implicito) @@ -4277,6 +4350,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvataggio cre STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :File non leggibile STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :File non scrivibile STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Controllo integrità dati non riuscito +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Salvataggio creato con una versione modificata STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}La partita è stata salvata in una versione senza il supporto per i tram. Tutti i tram sono stati rimossi @@ -4356,7 +4430,8 @@ STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Impossib STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... debito già estinto STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} richiesti STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Impossibile ripagare il prestito... -STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Impossibile donare denaro prestato dalla banca... +STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Impossibile trasferire denaro prestato dalla banca... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Impossibile trasferire denaro a questa compagnia... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Impossibile comprare la compagnia... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Impossibile costruire la sede della compagnia... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Impossibile comprare il 25% delle azioni... @@ -4483,6 +4558,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo di deposit STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} è diventato troppo lungo dopo la sostituzione STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Nessuna regola di rimpiazzo/rinnovo automatico applicata STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(limite denaro) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Il nuovo veicolo non può trasportare {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Il nuovo veicolo non può riadattare il carico nell'ordine {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Combinazione di binari impossibile @@ -4567,7 +4644,7 @@ STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... già STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Impossibile creare il gruppo... STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Impossibile eliminare il gruppo... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Impossibile rinominare il gruppo... -STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Impossibile impostare il gruppo contenitore... +STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Impossibile impostare il gruppo superiore... STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... non sono ammessi cicli nella gerarchia dei gruppi STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Impossibile rimuovere tutti i veicoli del gruppo... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Impossibile aggiungere il veicolo al gruppo... @@ -4764,10 +4841,10 @@ STR_INDUSTRY_NAME_SUGAR_MINE :{G=f}Miniera di ##id 0x6000 STR_SV_EMPTY : STR_SV_UNNAMED :Senza nome -STR_SV_TRAIN_NAME :Treno {COMMA} -STR_SV_ROAD_VEHICLE_NAME :Automezzo {COMMA} -STR_SV_SHIP_NAME :Nave {COMMA} -STR_SV_AIRCRAFT_NAME :Aeromobile {COMMA} +STR_SV_TRAIN_NAME :Treno #{COMMA} +STR_SV_ROAD_VEHICLE_NAME :Automezzo #{COMMA} +STR_SV_SHIP_NAME :Nave #{COMMA} +STR_SV_AIRCRAFT_NAME :Aeromobile #{COMMA} STR_SV_STNAME :{STRING} STR_SV_STNAME_NORTH :{STRING} Nord @@ -5069,6 +5146,7 @@ STR_FORMAT_BUOY_NAME :Boa di {TOWN} STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Boa #{COMMA} STR_FORMAT_COMPANY_NUM :(Compagnia {COMMA}) STR_FORMAT_GROUP_NAME :Gruppo {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} di {0:TOWN} STR_FORMAT_WAYPOINT_NAME :Waypoint di {TOWN} STR_FORMAT_WAYPOINT_NAME_SERIAL :Waypoint di {TOWN} #{COMMA} diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index c27cf4cf02..325e36188c 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -32,7 +32,7 @@ STR_CARGO_PLURAL_OIL :石油 STR_CARGO_PLURAL_LIVESTOCK :家畜 STR_CARGO_PLURAL_GOODS :商品 STR_CARGO_PLURAL_GRAIN :穀物 -STR_CARGO_PLURAL_WOOD :木材 +STR_CARGO_PLURAL_WOOD :原木 STR_CARGO_PLURAL_IRON_ORE :鉄鉱石 STR_CARGO_PLURAL_STEEL :鋼鉄 STR_CARGO_PLURAL_VALUABLES :貴重品 @@ -48,9 +48,9 @@ STR_CARGO_PLURAL_WHEAT :小麦 STR_CARGO_PLURAL_RUBBER :ゴム STR_CARGO_PLURAL_SUGAR :砂糖 STR_CARGO_PLURAL_TOYS :おもちゃ -STR_CARGO_PLURAL_CANDY :お菓子 +STR_CARGO_PLURAL_SWEETS :お菓子 STR_CARGO_PLURAL_COLA :コーラ -STR_CARGO_PLURAL_COTTON_CANDY :わたあめ +STR_CARGO_PLURAL_CANDYFLOSS :わたあめ STR_CARGO_PLURAL_BUBBLES :泡 STR_CARGO_PLURAL_TOFFEE :タフィー STR_CARGO_PLURAL_BATTERIES :電池 @@ -66,7 +66,7 @@ STR_CARGO_SINGULAR_OIL :石油 STR_CARGO_SINGULAR_LIVESTOCK :家畜 STR_CARGO_SINGULAR_GOODS :商品 STR_CARGO_SINGULAR_GRAIN :穀物 -STR_CARGO_SINGULAR_WOOD :木材 +STR_CARGO_SINGULAR_WOOD :原木 STR_CARGO_SINGULAR_IRON_ORE :鉄鉱石 STR_CARGO_SINGULAR_STEEL :鋼鉄 STR_CARGO_SINGULAR_VALUABLES :貴重品 @@ -82,9 +82,9 @@ STR_CARGO_SINGULAR_WHEAT :小麦 STR_CARGO_SINGULAR_RUBBER :ゴム STR_CARGO_SINGULAR_SUGAR :砂糖 STR_CARGO_SINGULAR_TOY :おもちゃ -STR_CARGO_SINGULAR_CANDY :お菓子 +STR_CARGO_SINGULAR_SWEETS :お菓子 STR_CARGO_SINGULAR_COLA :コーラ -STR_CARGO_SINGULAR_COTTON_CANDY :わたあめ +STR_CARGO_SINGULAR_CANDYFLOSS :わたあめ STR_CARGO_SINGULAR_BUBBLE :泡 STR_CARGO_SINGULAR_TOFFEE :タフィー STR_CARGO_SINGULAR_BATTERY :電池 @@ -100,7 +100,7 @@ STR_QUANTITY_OIL :石油{VOLUME_L STR_QUANTITY_LIVESTOCK :家畜{COMMA}頭 STR_QUANTITY_GOODS :商品{COMMA}箱 STR_QUANTITY_GRAIN :穀物{WEIGHT_LONG} -STR_QUANTITY_WOOD :木材{WEIGHT_LONG} +STR_QUANTITY_WOOD :原木{WEIGHT_LONG} STR_QUANTITY_IRON_ORE :鉄鉱石{WEIGHT_LONG} STR_QUANTITY_STEEL :鋼鉄{WEIGHT_LONG} STR_QUANTITY_VALUABLES :貴重品{COMMA}袋 @@ -187,6 +187,7 @@ STR_COLOUR_ORANGE :橙 STR_COLOUR_BROWN :茶 STR_COLOUR_GREY :灰 STR_COLOUR_WHITE :白 +STR_COLOUR_RANDOM :ランダム # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}mph @@ -231,8 +232,8 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}並べ STR_TOOLTIP_SORT_CRITERIA :{BLACK}並べ替えの基準を選択します STR_TOOLTIP_FILTER_CRITERIA :{BLACK}フィルタリングの基準を選択します STR_BUTTON_SORT_BY :{BLACK}並べ替え -STR_BUTTON_LOCATION :{BLACK}所在地に移動 -STR_BUTTON_RENAME :{BLACK}名前を変更 +STR_BUTTON_CATCHMENT :{BLACK}範囲 +STR_TOOLTIP_CATCHMENT :{BLACK}範囲の表示を切り替えます STR_TOOLTIP_CLOSE_WINDOW :{BLACK}ウィンドウを閉じます STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}ウィンドウのタイトルです。ドラッグでウィンドウが移動できます @@ -309,6 +310,13 @@ STR_SORT_BY_CARGO_CAPACITY :積載容量 STR_SORT_BY_RANGE :航続距離 STR_SORT_BY_POPULATION :人口 STR_SORT_BY_RATING :レーティング +STR_SORT_BY_NUM_VEHICLES :車両数 +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :昨年の総利益 +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :今年の総利益 +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :前年度の平均利益 + +# Group by options for vehicle list +STR_GROUP_BY_SHARED_ORDERS :共有注文 # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}ゲームをポーズします @@ -354,6 +362,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}地形 STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}町を生成します STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}産業を生成します STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}道路を建設します +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}路面電車建設 STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}木を植えます。Shiftキーを押しながら決定すると費用を見積もります STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}標識を設置します STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}オブジェクトを設置します。Shiftを押しながら決定すると費用を見積もります @@ -395,7 +404,7 @@ STR_FILE_MENU_EXIT :OpenTTDを終 # map menu STR_MAP_MENU_MAP_OF_WORLD :地図 -STR_MAP_MENU_EXTRA_VIEW_PORT :ビューポートを開く +STR_MAP_MENU_EXTRA_VIEWPORT :ビューポートを開く STR_MAP_MENU_LINGRAPH_LEGEND :貨物輸送履歴 STR_MAP_MENU_SIGN_LIST :標識リスト @@ -462,6 +471,7 @@ STR_TOOLBAR_SOUND_MUSIC :効果音/音 ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :最新メッセージ/ニュース STR_NEWS_MENU_MESSAGE_HISTORY_MENU :メッセージ履歴 +STR_NEWS_MENU_DELETE_ALL_MESSAGES :メッセージをすべて削除 ############ range ends here ############ range for about menu starts @@ -470,6 +480,7 @@ STR_ABOUT_MENU_SEPARATOR :――――― STR_ABOUT_MENU_TOGGLE_CONSOLE :コンソールの表示切替 STR_ABOUT_MENU_AI_DEBUG :AI/ゲームスクリプトのデバッグ STR_ABOUT_MENU_SCREENSHOT :スクリーンショット撮影(現在のズーム) +STR_ABOUT_MENU_SHOW_FRAMERATE :フレームレートを表示 STR_ABOUT_MENU_ABOUT_OPENTTD :OpenTTDについて STR_ABOUT_MENU_SPRITE_ALIGNER :スプライトを整列 STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :バウンディングボックスの表示切替 @@ -559,8 +570,6 @@ STR_MONTH_DEC :12 # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}凡例 STR_GRAPH_KEY_TOOLTIP :{BLACK}この凡例の表示/非表示を切り替えます -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}月{} {STRING}月 -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}月{} {STRING}月{}{NUM}年 STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -642,6 +651,7 @@ STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}音楽がありません STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}トラック STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}タイトル @@ -662,11 +672,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}プレ STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}曲選択のウィンドウを表示します # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}音楽プログラム-'{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}楽曲索引 STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}プレイリスト - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}消去 +STR_PLAYLIST_CHANGE_SET :{BLACK}セットの変更 STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}選択したプレイリストの内容を消去します。(カスタム1/2 のみ) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}音楽の選択を別のインストール済みセットに変更する STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}クリックすると、その曲を選択したプレイリストに追加します。(カスタム1/2 のみ) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}クリックすると、その曲を選択したプレイリストから削除します。(カスタム1/2 のみ) @@ -726,6 +739,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}荒地 STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}草地 STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}露地 +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT} {BLACK}熱帯雨林 STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}耕作地 STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}樹林 STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}岩石 @@ -757,6 +771,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}全貨 STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}最新のメッセージ/ニュースを表示します STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * ポーズ中 * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * 一時停止中 (リンクグラフの更新を待っています) * * STR_STATUSBAR_AUTOSAVE :{RED}オートセーブ STR_STATUSBAR_SAVING_GAME :{RED}* * ゲームセーブ中 * * @@ -802,6 +817,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{} (社長) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{0:STRING}の出資により、新たに{1:TOWN}の開発が始まる! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK} {BIG_FONT} {TOWN}という新しい町が建設されました! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}新たな{STRING}が{TOWN}付近に開設! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}新たな{STRING}が{TOWN}付近に作付け開始! @@ -869,7 +885,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK} {TOWN}が{STRING}と1年間の排他輸送契約を締結! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}ビューア {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}ビューア {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}ビューアへコピー STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}メイン画面の場所をビューアにコピーする STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}ビューアからペースト @@ -915,10 +931,15 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :南アフリカ STR_GAME_OPTIONS_CURRENCY_CUSTOM :カスタム… STR_GAME_OPTIONS_CURRENCY_GEL :グルジア ラリー(GEL) STR_GAME_OPTIONS_CURRENCY_IRR :イラン リアル(IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :新ロシアルーブル(RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :メキシコペソ(MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :新台湾ドル(ntd) +STR_GAME_OPTIONS_CURRENCY_CNY :人民元(CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :香港ドル(HKD) +STR_GAME_OPTIONS_CURRENCY_INR :インドルピー(INR) +STR_GAME_OPTIONS_CURRENCY_IDR :インドネシアルピア(IDR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}自動車 -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}車両の通行方向(右側/左側)を選択します STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :左側通行 STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :右側通行 @@ -969,15 +990,34 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}OpenTTD STR_GAME_OPTIONS_RESOLUTION :{BLACK}画面解像度 STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}ゲーム画面の解像度を選択します STR_GAME_OPTIONS_RESOLUTION_OTHER :その他 +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}ハードウェアアクセラレーション + +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK} 垂直同期 STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}インターフェイスのサイズ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}インターフェイス上の単位サイズを指定します +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(自動検出) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :通常 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :2倍 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4倍 +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}フォントサイズ +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}使用するインターフェースのフォントサイズを選択します +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(自動検出) +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :ノーマル +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :ダブルサイズ +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :4倍 + +STR_GAME_OPTIONS_GRAPHICS :{BLACK}グラフィクス + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}画面リフレッシュレート +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}使用する画面のリフレッシュレートを選択します +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :その他 +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}60Hzを超えるリフレッシュレートはパフォーマンスに影響を与える可能性があります。 STR_GAME_OPTIONS_BASE_GRF :{BLACK}基本グラフィックセット STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}使用するグラフィックセットを選択します @@ -1073,6 +1113,8 @@ STR_TERRAIN_TYPE_FLAT :平地 STR_TERRAIN_TYPE_HILLY :丘陵地 STR_TERRAIN_TYPE_MOUNTAINOUS :山岳地 STR_TERRAIN_TYPE_ALPINIST :山脈地帯 +STR_TERRAIN_TYPE_CUSTOM :カスタム高度 +STR_TERRAIN_TYPE_CUSTOM_VALUE :カスタム高度 ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :寛大 STR_CITY_APPROVAL_TOLERANT :寛容 @@ -1154,13 +1196,14 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :設定を有効 STR_CONFIG_SETTING_CITY_APPROVAL :地域の再編に対する町の姿勢: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :会社が街域で引き起こした騒音(主に空港)や環境破壊がどの程度、街での評価や同じ地域での更なる建設行為に影響するかを設定します -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :マップの最高高度: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :マップの最高地点の高さを設定します +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :マップ高さ限界: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(自動) STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}マップの最高高さをこの値には設定出来ません。少なくとも1箇所以上この値より高い山があります。 STR_CONFIG_SETTING_AUTOSLOPE :建物/路線の自動地形追従: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :撤去を行わないで建物や路線がある土地の地形を変更することを可能にします。建物/路線は変更された地形に自動で追従します。 STR_CONFIG_SETTING_CATCHMENT :現実的な受入範囲: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :駅や空港の種類の違いによって受入範囲が変動するようになります +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :有効にすると、駅が接続されている産業(石油掘削装置など)にも、近くに建設された会社が所有している駅がサービスを提供する場合があります。無効になっている場合、これらの産業は、接続されているステーションによってのみサービスを受けることができます。近くの会社のステーションはそれらにサービスを提供できず、接続されたステーションは業界以外のものにサービスを提供しません STR_CONFIG_SETTING_EXTRADYNAMITE :街有道路・橋・トンネルの撤去容認: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :街有の交通インフラや建物の撤去をより容易にします STR_CONFIG_SETTING_TRAIN_LENGTH :列車の最大長: {STRING} @@ -1246,6 +1289,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}この STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :インフラ補修: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :有効にすると、インフラ設備にも維持費が発生するようになります。維持費はネットワークのサイズに非線形で比例する為、小さい会社よりも大きい会社の方が影響が大きくなります +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :始めの会社の色: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :開始する前に会社の色を選択してください STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :空港の旧式化撤廃: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :有効にすると、いずれの種類の空港であっても、その開発後であれば永久に建設が可能になります @@ -1280,6 +1325,7 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :街名ラベル STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :街の名前ラベルに人口を表示します STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :グラフ線の太さ: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :グラフ画面での折れ線の太さを設定します。細い線では値を精密に読み取りやすくなり、太い線ではグラフ自体が見やすくなり、線色の見分けがつきやすくなります +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :ビルドビークルウィンドウにNewGRFの名前を表示します:{STRING} STR_CONFIG_SETTING_LANDSCAPE :地形: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :地形は異なる貨物や街の成長要件の違いによって基本となるプレー法を左右します。但し、NewGRFやスクリプトにより条件が改良されることもあります @@ -1295,6 +1341,8 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :石油精製所 STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :石油精製所はマップの外周付近にのみ建設されます。つまり、外周が海のマップでは海岸沿いに建設されるということです STR_CONFIG_SETTING_SNOWLINE_HEIGHT :雪線の位置: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :亜寒帯気候での雪線の高さを設定します。雪は産業と街の成長に影響があります +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :亜寒帯の風景のおおよその雪の量を制御します。雪はまた、産業の生成と町の成長要件にも影響を及ぼします。マップの生成中にのみ使用されます。海抜のすぐ上の土地は常に雪がありません +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :地形の起伏: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesisのみ) 地形の起伏度を設定します。なだらかな地形では丘陵の数は減り、裾野が長くなります。起伏が多い地形では丘陵が多くなりますが、似たり寄ったりな地形の繰り返しに見えることがあります STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :特になだらか @@ -1330,6 +1378,10 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :ミニマップ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :緑 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :濃緑 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :青紫 +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :スクロール時の動き +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :右クリックでビューポートを移動し、マウスの位置をロックします +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :右クリックで地図を移動し、マウスの位置をロックします +STR_CONFIG_SETTING_SCROLLMODE_RMB :マップを右マウスボタンで動かす STR_CONFIG_SETTING_SMOOTH_SCROLLING :画面のスムーズスクロール: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :ミニマップでの移動や「現在位置に移動」などのコマンドを使用した際にメイン画面がどのように移動するかを設定します。有効にした場合はスムーズにスクロールして移動します。無効の場合は目的地に直接ジャンプします STR_CONFIG_SETTING_MEASURE_TOOLTIP :測定ツールチップ表示: {STRING} @@ -1400,6 +1452,9 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :建設ツール STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :橋やトンネルなどを建設した後もツールバーを開いたままにします STR_CONFIG_SETTING_EXPENSES_LAYOUT :財政ウィンドウのグループ分け: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :財政ウィンドウのレイアウトを収入部門・支出部門でグループ分けするかどうかを設定します +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :早送りが有効になっている場合のゲームの進行速度を制限します。0 =制限なし(コンピューターが許す限り高速)。100%未満の値は、ゲームの速度を低下させます。上限はコンピュータの仕様によって異なり、ゲームによって異なる場合があります。 +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}%通常のゲーム速度 +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :制限なし(コンピューターが許す限り高速) STR_CONFIG_SETTING_SOUND_TICKER :ニュース表示: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :ステータスバーにニュースが流れたとき効果音を鳴らすかどうかを設定します @@ -1448,6 +1503,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :マルチプレ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :マルチプレイヤーゲームでもAIのライバル企業が登場するかを設定します STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :命令コード処理上限: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :AIやゲームスクリプトが一つの「詰め込み指令」を処理する際に、一度に演算できる命令コード数を設定します。一般に値を小さくした場合、ゲームへの負荷が軽減されます +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :スクリプトあたりの最大メモリ使用量:{STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :最大信頼度を点検要件化: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :次の点検が必要と判断される条件を設定します。無効の場合は、前の点検から指定の期間が経過した際に点検が必要と判断されます。有効にすると、輸送機器の最大信頼度が指定の値より落ち込んだ場合に次の点検が必要と判断されます @@ -1506,10 +1563,15 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :新聞 STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :カラー新聞の開始年: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :新聞がカラー版になる境目の年を設定します STR_CONFIG_SETTING_STARTING_YEAR :開始年: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :緩やかな経済変動: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :有効にすると、一次産業での生産量はより小幅な変動がより頻繁に起こるようになります。この設定はNewGRFで提供されるような、デフォルト以外の産業に対してはほとんど効果がありません +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :スコアリングの目的でゲームが終了する年。 今年の終わりには、会社のスコアが記録され、ハイスコア画面が表示されますが、プレーヤーはその後もプレイを続けることができます。{}これが開始年より前の場合、ハイスコア画面は表示されません。 +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ECONOMY_TYPE :エコノミータイプ:{STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :オリジナル +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :なだらか STR_CONFIG_SETTING_ALLOW_SHARES :他社株の取引許容: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :有効にすると、ライバル会社の株式を取引できるようになります。この設定を有効にしても、目的の社が設立から丸5年経過していない場合は取引できません +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :株式を取引するための最低会社年齢:{STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :他の人が彼らから株式を売買できるように、会社の最低年齢を設定します。 STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :区間払いの割合: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :転送を行う輸送網(フィーダーシステム)を構築した場合、中継地点までの輸送で総輸送費の何%を受け取れるかを設定します(転送時に予想される最終輸送費から仮に部分払いし、最終的に貨物が目的地に到着した時点で清算します)。転送元の輸送機器が赤字になるのを防ぎます STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :信号間隔: {STRING} @@ -1550,12 +1612,12 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :有効にする STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :無効 STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :有効 STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :有効(道路配置も設定可) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :町の総人口に対する、町の家によって生産される貨物の量。{}二次成長:2倍の大きさの町は4倍の乗客を生み出します。{}線形成長:2倍の大きさの町は2倍の量を生み出します STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :樹木の自然成長: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :ゲーム中、ランダムに生えてくる樹種を設定します。設定によっては樹木の生育に依存する産業に悪影響が生じる可能性があります(「不可」にした場合、亜熱帯地域の伐採所を機能させ続けるためには手動で植林し続ける必要があります) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :不能 {RED}(亜熱帯地域の伐採所に影響) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :熱帯雨林地帯のみ -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :全地域 +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :成長するが、熱帯雨林にのみ広がる +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :成長し、どこにでも広がる STR_CONFIG_SETTING_TOOLBAR_POS :メインツールバーの位置: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :画面上のメインツールバーの位置を決めます @@ -1573,12 +1635,16 @@ STR_CONFIG_SETTING_ZOOM_MIN :最大ズーム STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :ズームインの最大倍率を設定します。倍率を高くすればするほどメモリー使用量が増えます STR_CONFIG_SETTING_ZOOM_MAX :最大ズームアウトレベル:{STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :ズームアウトの最大倍率を設定します。ズームアウトの倍率が大きいと、処理遅延が発生する可能性があります +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :使用する最高解像度のスプライト:{STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :スプライトに使用する最大解像度を制限します。 スプライトの解像度を制限すると、使用可能な場合でも高解像度のグラフィックを使用できなくなります。 これにより、高解像度のグラフィックを使用する場合と使用しない場合のGRFファイルを組み合わせて使用する場合に、ゲームの外観を統一することができます。 STR_CONFIG_SETTING_ZOOM_LVL_MIN :4倍 STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2倍 STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :通常 STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2倍 STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4倍 STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8倍 +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4倍 +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1倍 STR_CONFIG_SETTING_TOWN_GROWTH :街の成長速度: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :街の成長速度を設定します STR_CONFIG_SETTING_TOWN_GROWTH_NONE :成長しない @@ -1622,6 +1688,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :ゲーム中の STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :ヤード・ポンド法 (マイル時(mph)) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :メートル法 (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :国際単位系 (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :ゲーム内単位(タイル/日) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :動力単位: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :ゲーム中の動力(仕事率、主に輸送機器の出力表記)をいずれの単位系で表すか決定します @@ -1711,6 +1778,9 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}ファ STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}メモリー不足 STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}スプライトキャッシュ中、{BYTES}の割り当てに失敗しました。スプライトキャッシュは{BYTES}に減ったため、OpenTTDの処理速度が低下する恐れがあります。必要メモリ量を減らすには32bitグラフィックを無効にするか、最大ズームイン・ズームアウトのレベルを下げてください +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}ビデオ設定にエラーがあります... + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1753,18 +1823,9 @@ STR_INTRO_TRANSLATION :{BLACK}この # Quit window STR_QUIT_CAPTION :{WHITE}終了 -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}このゲームを終了し、{}{STRING}に戻ってもよろしいですか? STR_QUIT_YES :{BLACK}はい STR_QUIT_NO :{BLACK}いいえ -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}ゲームを放棄 STR_ABANDON_GAME_QUERY :{YELLOW}このゲームを終了してもよろしいですか? @@ -1773,7 +1834,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}この # Cheat window STR_CHEATS :{WHITE}チート STR_CHEATS_TOOLTIP :{BLACK}以前にこのチートを使用したことがあることを示します -STR_CHEATS_WARNING :{BLACK}注意: チートを使用すると、競争者に裏切りと見做され、永久に呪われる可能性があります +STR_CHEATS_NOTE :{BLACK}注意:これらの設定はすべてゲームセーブによって記録されます STR_CHEAT_MONEY :{LTBLUE}預金残高を{CURRENCY_LONG}増やす STR_CHEAT_CHANGE_COMPANY :{LTBLUE}会社: {ORANGE}{COMMA}を乗っ取ってプレイする STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}魔法のブルドーザー(産業拠点等、何でも撤去できる): {ORANGE}{STRING} @@ -1790,6 +1851,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}現在 STR_CHEAT_SETUP_PROD :{LTBLUE}生産量変更: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - 配色 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}通常のコーポレートカラー(車両塗装色)を表示します STR_LIVERY_TRAIN_TOOLTIP :{BLACK}列車の塗装色を表示します @@ -1884,10 +1946,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}ネク # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}マルチプレイヤーゲーム -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}ゲーム公示 -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}ゲームを公示(インターネット)するか、非公示(LAN)にするかを選びます -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :非公示 -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :公示 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}プレイヤー名: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}他のプレーヤーがあなたを特定するために使う名前です @@ -1928,8 +1986,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}ゲー STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}サーバーを更新 STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}サーバー情報を更新します -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}サーバーを検索 -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}ネットワーク上のサーバーを検索します +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}インターネットを検索 +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}インターネットで公開されているサーバーを探す +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}LANで探す +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}ローカルエリアネットワークでサーバーを検索する STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}サーバーを追加 STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}検索時、常に稼働確認するサーバーのリストに追加します STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}サーバーを開始 @@ -1946,6 +2006,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}ゲー STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}パスワードを設定 STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}ゲームをパスワードで保護することができます。一般から公然とアクセスされたくない場合等に設定します +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}ゲーム公示 +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}ゲームを公示(インターネット)するか、非公示(LAN)にするかを選びます STR_NETWORK_START_SERVER_UNADVERTISED :非公示 STR_NETWORK_START_SERVER_ADVERTISED :公示 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}接続者数: {NUM} @@ -2058,7 +2120,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :新会社 # Network client list STR_NETWORK_CLIENTLIST_KICK :追放 STR_NETWORK_CLIENTLIST_BAN :参入禁止 -STR_NETWORK_CLIENTLIST_GIVE_MONEY :送金 STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :全員へ発言 STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :チームへ発言 STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :個人的なメッセージ @@ -2067,8 +2128,6 @@ STR_NETWORK_SERVER :サーバー STR_NETWORK_CLIENT :クライアント STR_NETWORK_SPECTATORS :観覧者 -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}送りたい金額を入力 - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}入力したパスワードを保存しない STR_COMPANY_PASSWORD_OK :{BLACK}会社パスワードを変更 @@ -2113,6 +2172,7 @@ STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}不正 STR_NETWORK_ERROR_SERVER_FULL :{WHITE}サーバが満員です STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}サーバー側であなたの参加が禁止されています STR_NETWORK_ERROR_KICKED :{WHITE}ゲームから追放されました +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}理由:{STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}このサーバーではチート行為は許可されていません STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}サーバーに送ったコマンド数が過剰です STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}パスワード入力時間切れです @@ -2154,11 +2214,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :ゲームはま STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :ゲームはまだポーズされています。({STRING}、{STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :ゲームはまだポーズされています。 ({STRING}、{STRING}、{STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :ゲームはまだポーズされています。 ({STRING}、{STRING}、{STRING}、{STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :ゲームはまだポーズされています。 ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :ゲームのポーズが解除されました。({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :プレーヤー数不足 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :クライアントに接続中 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :手動 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :ゲームスクリプト +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :リンクグラフの更新を待っています ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :退出 STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} が参加してきました @@ -2168,10 +2230,9 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} が新会社 (#{2:NUM}) を設立しました STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} が退出しました({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} は名前を {STRING} に変更しました -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} が {2:CURRENCY_LONG} を送金してくれました -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** {1:STRING} に {2:CURRENCY_LONG} を送金しました STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}サーバがセッションを終了しました STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}このサーバーは再起動中です…{}しばらくお待ちください… +STR_NETWORK_MESSAGE_KICKED :*** {STRING}がキックされました。理由: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}コンテンツをダウンロード中 @@ -2246,6 +2307,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}はい、グラフィックをダウンロードします STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}いいえ、OpenTTDを終了します +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}ダウンロードに失敗しました +STR_MISSING_GRAPHICS_ERROR :{BLACK}グラフィックのダウンロードに失敗しました。{}手動でダウンロードしてください。 +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}OpenTTDをやめる + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}透過表示設定 STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}駅名標識の透過表示を切り替えます。{}Ctrl+クリックでロックします @@ -2264,6 +2329,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}貨物 STR_LINKGRAPH_LEGEND_ALL :{BLACK}全て STR_LINKGRAPH_LEGEND_NONE :{BLACK}なし STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}表示する会社を選択 +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}未使用(運送過多) @@ -2286,6 +2352,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}統合 STR_JOIN_WAYPOINT_CAPTION :{WHITE}通過点を統合 STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}統合せずに建設 +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :鉄道建設 STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :電気鉄道建設 @@ -2388,12 +2456,15 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}道路 STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}軌道用トンネルを建設します。Shiftを押しながら決定すると費用の見積が出ます STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}道路の建設/撤去を切り替えます STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}軌道の建設/撤去を切り替えます +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}道路の種類を変更/アップグレードします.Shiftは、コスト見積もりの作成/表示を切り替えます +STR_ROAD_NAME_ROAD :道路 +STR_ROAD_NAME_TRAM :トラムウェイ # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}車庫建設 STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}車庫の向きを選択します -STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}路面電車庫建設 +STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}トラム車庫建設 STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}路面電車庫の向きを選択します # Road vehicle station construction window @@ -2469,13 +2540,17 @@ STR_OBJECT_BUILD_SIZE :{BLACK}サイ STR_OBJECT_CLASS_LTHS :灯台 STR_OBJECT_CLASS_TRNS :電波塔 -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}植林 STR_PLANT_TREE_TOOLTIP :{BLACK}植林する樹類を選択します。既に木がある場合は追加で植林されます STR_TREES_RANDOM_TYPE :{BLACK}ランダムな樹類 STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}ランダムな樹類で植林します。Shift+クリックで費用を見積もります STR_TREES_RANDOM_TREES_BUTTON :{BLACK}ランダムに広域植林 STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}地表全体にランダムに植林します +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}風景の上をドラッグして、単一の木を植えます。 +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}グローブ +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}風景をドラッグして小さな森を植えます +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}風景の上をドラッグして、大きな森を植えます。 # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}地形の作成 @@ -2528,10 +2603,13 @@ STR_FUND_INDUSTRY_CAPTION :{WHITE}新規 STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}建設したい産業をリストから選択します STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :多くのランダムな産業 STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}マップ全域にランダムに産業を建設します +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}ランダムな産業を作成する +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}ランダムな産業をたくさん作りたいですか? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}費用: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}調査/探鉱 STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}建設 STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}出資 +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}すべての産業を削除してもよろしいですか? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}産業:{STRING}に関わる産業チェーン @@ -2552,6 +2630,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}産業 # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}地域情報 +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}タイルの位置のメインビューを中央に配置します。 Ctrl +クリックすると、タイルの場所に新しいビューポートが開きます STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}撤去費用: {LTBLUE}撤去不可 STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}撤去費用: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}撤去時売却益: {LTBLUE}{CURRENCY_LONG} @@ -2573,6 +2652,7 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}受入れ貨物: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE : {BLACK}線路の種類: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}路面軌道の種類: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}線路の制限速度: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}道路の最高速度: {LTBLUE}{VELOCITY} @@ -2674,9 +2754,41 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} The OpenTTD team # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}フレームレート +STR_FRAMERATE_RATE_BLITTER :{BLACK}グラフィックフレームレート:{STRING} +STR_FRAMERATE_SPEED_FACTOR :{BLACK}現在のゲーム速度:{DECIMAL} x +STR_FRAMERATE_CURRENT :{WHITE}現在 +STR_FRAMERATE_AVERAGE :{WHITE}平均 +STR_FRAMERATE_MEMORYUSE :{WHITE}メモリ +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW} {DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} フレーム/秒 +STR_FRAMERATE_FPS_WARN :{YELLOW} {DECIMAL}フレーム/秒 +STR_FRAMERATE_FPS_BAD :{RED} {DECIMAL}FPS +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} +STR_FRAMERATE_BYTES_WARN :{YELLOW} {BYTES} ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}ゲームループの合計: +STR_FRAMERATE_GL_ECONOMY :{BLACK}貨物の取り扱い: +STR_FRAMERATE_GL_TRAINS :{BLACK} 鉄道車両のティック: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} 自動車ティック: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK}航空機ティック: +STR_FRAMERATE_DRAWING :{BLACK}グラフィックレンダリング: +STR_FRAMERATE_VIDEO :{BLACK}ビデオ出力: +STR_FRAMERATE_SOUND :{BLACK}サウンドミキサー: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :ゲームループ +STR_FRAMETIME_CAPTION_GL_ECONOMY :貨物の取り扱い +STR_FRAMETIME_CAPTION_GL_TRAINS :切符 +STR_FRAMETIME_CAPTION_GL_SHIPS :船のティック +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :航空機ティック +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :ワールドティック +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :リンクグラフの遅延 +STR_FRAMETIME_CAPTION_DRAWING :グラフィックレンダリング +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :ワールドビューポートレンダリング +STR_FRAMETIME_CAPTION_VIDEO :ビデオ出力 +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order @@ -2702,6 +2814,10 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}ゲー STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}― 情報なし ― STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}フィルター: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}ファイルを上書きする +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}既存のファイルを上書きしてもよろしいですか? +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Parent directory) STR_SAVELOAD_OSKTITLE :{BLACK}保存名を入力 @@ -2713,14 +2829,16 @@ STR_MAPGEN_BY :{BLACK}× STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}街数: STR_MAPGEN_DATE :{BLACK}日付: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}産業数: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}マップ最高高度: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}マップの最高高度を1ずつ増やします -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}マップの最高高度を1ずつ減らします -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}雪線の位置: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}雪線を上げる -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}雪線を下げる +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}最高峰: +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}マップの最高峰の最大の高さを1減らします。 +STR_MAPGEN_SNOW_COVERAGE :{BLACK}降雪量: +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}積雪量を10%減らします +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK} {NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}砂漠の範囲: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}砂漠の割合を10%増やします +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}砂漠の範囲を10%減らします +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}地形作成: -STR_MAPGEN_TREE_PLACER :{BLACK}植林アルゴリズム: STR_MAPGEN_TERRAIN_TYPE :{BLACK}地形種類: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}海水位: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}河川: @@ -2745,8 +2863,9 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}ハイ STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}サイズ: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} × {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}マップの最高高度を変更 -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}雪線の位置を変更 +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}ターゲットの最高の高さ +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}積雪量(%) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}砂漠領域(%) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}開始年の変更 # SE Map generation @@ -2819,7 +2938,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}バー STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}対応する最旧バージョン: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}パレット: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :デフォルト(D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :デフォルト(D)/ 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :レガシー(W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :レガシー(W)/ 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}設定: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :なし STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}情報がありません STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}一致するファイルが見つかりません @@ -2971,6 +3095,7 @@ STR_TOWN_POPULATION :{BLACK}地域 STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN}(市) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}人口: {ORANGE}{COMMA}人{BLACK} 建物: {ORANGE}{COMMA}戸 +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK} {CARGO_LIST}先月:{ORANGE} {COMMA} {BLACK}最大:{ORANGE} {COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}街の成長に必要な物資: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}が{RED}必要です STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}が{BLACK}冬に必要です @@ -2995,6 +3120,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :街名を変更 # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} 地方自治体 +STR_LOCAL_AUTHORITY_ZONE :ゾーン +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}地方自治体の境界を見る STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}社の評判: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}可能な活動: @@ -3023,13 +3150,13 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}買収 # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} 目標 STR_GOALS_SPECTATOR_CAPTION :{WHITE}大目標 -STR_GOALS_GLOBAL_TITLE :{BLACK}大目標: +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}グローバルな目標を表示する +STR_GOALS_COMPANY_BUTTON :{BLACK}会社 +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}会社の目標を見る STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- なし - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- 適用外 - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}会社の目標: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}クリックするとメイン画面を対象となる産業・街・タイルに移動します。Ctrl+クリックで新たなビューポートを開いて対象を表示します # Goal question window @@ -3071,6 +3198,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}指定 # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} ゲーム背景 STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}全体ゲーム背景 +STR_STORY_BOOK_SPECTATOR :グローバルストーリーブック STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :{NUM}ページ STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}ドロップダウンリストから選択して指定のページに飛びます @@ -3225,6 +3353,7 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}本社 STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}本社ビルを移転します(費用は社の総資産の1%になります)。Shift+クリックで費用を見積もります STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}詳細 STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}インフラ設備の詳細な個数・タイル数を表示します +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}この会社にお金を渡す STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}顔の変更 STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}社長の顔を変更します @@ -3242,6 +3371,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}この STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :会社名 STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :社長名 +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :寄付したい金額を入力してください STR_BUY_COMPANY_MESSAGE :{WHITE}現在、当{COMPANY}は業績悪化に伴い、債務の肩代わりを条件に社の全資産をお譲り致そうと考えております。{}{}債務{CURRENCY_LONG}を一括代済し、この会社を吸収合併しますか? @@ -3250,6 +3380,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}線路長: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}信号 STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}道路長(含軌道): +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}路面電車軌道: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}水運長: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}運河 STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}停留施設数: @@ -3260,8 +3391,13 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}産業 STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- なし - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% 輸送済み){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}産業の名前です - 名前をクリックするとこの産業拠点の場所にメイン画面を移動します。Ctrl+クリックでこの産業拠点の場所を新たなビューポートに表示します +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}受け取った貨物: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}生産された貨物:{SILVER} {STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :すべての貨物タイプ +STR_INDUSTRY_DIRECTORY_FILTER_NONE :なし # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3271,8 +3407,11 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}メイ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生産量: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}この産業拠点は間もなく閉鎖されます! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}必要条件:{YELLOW} {STRING} {STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :、{STRING} {STRING} STR_INDUSTRY_VIEW_REQUIRES : {BLACK}必要物資: +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW} {STRING} {BLACK}:{CARGO_SHORT}待機中{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}生産量を変更 (8の倍数、最大2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}生産量を変更 (%表記、最大800%) @@ -3327,6 +3466,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}グル STR_GROUP_CREATE_TOOLTIP :{BLACK}新規のグループを作成します STR_GROUP_DELETE_TOOLTIP :{BLACK}選択したグループを削除します STR_GROUP_RENAME_TOOLTIP :{BLACK}選択したグループの名称を変更します +STR_GROUP_LIVERY_TOOLTIP :{BLACK}選択したグループのカラーリングを変更する STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}このグループ内の輸送機器を全体を対象とする自動交換の際も交換されないようにします STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}グループを削除 @@ -3337,6 +3477,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :全輸送機器 STR_GROUP_RENAME_CAPTION :{BLACK}グループ名を変更 +STR_GROUP_PROFIT_THIS_YEAR :今年の利益: +STR_GROUP_PROFIT_LAST_YEAR :昨年の利益: +STR_GROUP_OCCUPANCY :選択中: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :新規機関車(非電化) @@ -3345,6 +3488,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :新規モノレ STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :新規リニア車両 STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :新規車両 +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :新しい路面電車車両 ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :新規列車 @@ -3353,6 +3497,7 @@ STR_BUY_VEHICLE_AIRCRAFT_CAPTION :新規航空機 ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}価格: {GOLD}{CURRENCY_LONG}{BLACK} 重量: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}コスト:{GOLD} {CURRENCY_LONG} {BLACK}(修理コスト:{GOLD} {CURRENCY_LONG} {BLACK})重量:{GOLD} {WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}最高速度: {GOLD}{VELOCITY}{BLACK} 出力: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}最高速度: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}外洋/湖での航行速度: {GOLD}{VELOCITY} @@ -3363,15 +3508,20 @@ STR_PURCHASE_INFO_REFITTABLE :(改造可能) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}設計年: {GOLD}{NUM}{BLACK} 耐用年数: {GOLD}{COMMA}年 STR_PURCHASE_INFO_RELIABILITY :{BLACK}最高信頼度: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}価格: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}コスト:{GOLD} {CURRENCY_LONG} {BLACK}(修理コスト:{GOLD} {CURRENCY_LONG} {BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}重量: {GOLD}{WEIGHT_SHORT}({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}価格: {GOLD}{CURRENCY_LONG}{BLACK} 最高速度: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}コスト:{GOLD} {CURRENCY_LONG} {BLACK}(修理コスト:{GOLD} {CURRENCY_LONG} {BLACK})速度:{GOLD} {VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}収容量: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}出力: {GOLD}+{POWER}(従動力車){BLACK} 重量: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}改造可能な貨物種類: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :すべて +STR_PURCHASE_INFO_NONE :なし +STR_PURCHASE_INFO_ENGINES_ONLY :エンジンのみ STR_PURCHASE_INFO_ALL_BUT :{CARGO_LIST}を除いてすべて STR_PURCHASE_INFO_MAX_TE :{BLACK}最大牽引力: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}航続距離: {GOLD}{COMMA} タイル +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}航空機の機種: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}列車リスト - 個々の情報を見るには列車をクリックします。Ctrl+クリックでその列車種の表示/非表示を切り替えます STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}車両リスト - 個々の情報を見るには車両をクリックします。Ctrl+クリックでその車両種の表示/非表示を切り替えます @@ -3383,12 +3533,15 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}車両 STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}船舶を購入 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}航空機を購入 +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}購入し改造する +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}船の購入と修理 STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}選択した列車を購入します。Shift+クリックで購入費を見積もります STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}選択した車両を購入します。Shift+クリックで購入費を見積もります STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}選択した船舶を購入します。Shift+クリックで購入費を見積もります STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}選択した航空機を購入します。Shift+クリックで購入費を見積もります +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}ハイライトされた船を購入して修理します。Shift +クリックすると、購入なしの推定コストが表示されます STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}名称を変更 STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}名称を変更 @@ -3504,6 +3657,7 @@ STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :モノレール STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :リニア列車 STR_ENGINE_PREVIEW_ROAD_VEHICLE :車両 +STR_ENGINE_PREVIEW_TRAM_VEHICLE :路面電車車両 STR_ENGINE_PREVIEW_AIRCRAFT :航空機 STR_ENGINE_PREVIEW_SHIP :船舶 @@ -3511,6 +3665,8 @@ STR_ENGINE_PREVIEW_SHIP :船舶 STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}価格: {CURRENCY_LONG} 重量: {WEIGHT_SHORT}{}最高速度: {VELOCITY}{}出力: {POWER}{}運用費: {CURRENCY_LONG}/年{}収容量: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}価格: {CURRENCY_LONG} 重量: {WEIGHT_SHORT}{}最高速度: {VELOCITY} 出力: {POWER} 最大牽引力: {6:FORCE}{}運用費: {4:CURRENCY_LONG}/年{}収容量 {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}価格: {CURRENCY_LONG} 最高速度: {VELOCITY}{}収容量: {CARGO_LONG}{}運用費: {CURRENCY_LONG}/年 +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}コスト:{CURRENCY_LONG}最大。 速度:{VELOCITY}{}航空機の種類:{STRING}範囲:{COMMA}タイル{}容量:{CARGO_LONG}、{CARGO_LONG}{}ランニングコスト:{CURRENCY_LONG} /年 +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}コスト:{CURRENCY_LONG}最大。 速度:{VELOCITY}{}航空機の種類:{STRING}範囲:{COMMA}タイル{}容量:{CARGO_LONG}{}ランニングコスト:{CURRENCY_LONG} /年 # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}{STRING}の自動置換 - {STRING} @@ -3549,6 +3705,8 @@ STR_REPLACE_ELRAIL_VEHICLES :機関車(電 STR_REPLACE_MONORAIL_VEHICLES :モノレール車両 STR_REPLACE_MAGLEV_VEHICLES :リニア車両 +STR_REPLACE_ROAD_VEHICLES :道路車両 +STR_REPLACE_TRAM_VEHICLES :路面電車の車両 STR_REPLACE_REMOVE_WAGON :{BLACK}列車の短縮: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}機関車の交換で列車長が長くなる場合、列車長を維持する為に客車/貨車を減らすことができます。外されるのは従属部分の先頭からになります @@ -3556,10 +3714,8 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}機関 # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}メイン画面を列車の場所に移動します。Ctrl+クリックで、そのまま列車を追跡します -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}メイン画面を車両の場所に移動します。Ctrl+クリックで、そのまま車両を追跡します -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}メイン画面を船舶の場所に移動します。Ctrl+クリックで、そのまま船舶を追跡します -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}メイン画面を航空機の場所に移動します。Ctrl+クリックで、そのまま航空機を追跡します +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}メイン画面を列車に中心します。ダブルクリックで列車をメイン画面で追従します。Ctrl+クリックで列車の場所で新しいビューポートでを開きます。 +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}航空機の位置に関する中央のメインビュー。ダブルクリックすると、メインビューで航空機が表示されます。Ctrl +クリックすると、航空機の位置に新しいビューポートが開きます STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}列車を列車庫へ回送します。Ctrl+クリックすると点検後、再出庫します STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}車両を車庫へ回送します。Ctrl+クリックすると点検後、再出庫します @@ -3591,10 +3747,11 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}車両 STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}船舶の情報を表示 STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}航空機の情報を表示します -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}列車の現在の動作 - 運用開始/運用停止するにはここをクリックします。Ctrl+クリックで目的地に移動します -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}車両の現在の動作 - 運用開始/運用停止するにはここをクリックします。Ctrl+クリックで目的地に移動します -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}船舶の現在の動作 - 運用開始/運用停止するにはここをここへクリックします。Ctrl+クリックで目的地に移動します -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}航空機の現在の動作 - 運用開始/運用停止するにはここをクリックします。Ctrl+クリックで目的地に移動します +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}現在の列車の動作-クリックして列車を停止/開始します +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}現在の車両の動作-クリックして車両を停止/開始します +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}現在の船のアクション-クリックして船を停止/開始します +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}現在の航空機のアクション-クリックして航空機を停止/開始します + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}積み降ろし中 @@ -3634,6 +3791,8 @@ STR_VEHICLE_INFO_AGE :{COMMA}年({COM STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA}年({COMMA}年) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}最高速度: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}最高速度: {LTBLUE}{VELOCITY} {BLACK}航空機のタイプ: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}最高速度: {LTBLUE}{VELOCITY} {BLACK}航空機のタイプ: {LTBLUE}{STRING} {BLACK}範囲: {LTBLUE}{COMMA}タイル STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}重量: {LTBLUE}{WEIGHT_SHORT} {BLACK}出力: {LTBLUE}{POWER}{BLACK} 最高速度: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}重量: {LTBLUE}{WEIGHT_SHORT} {BLACK}出力: {LTBLUE}{POWER}{BLACK} 最高速度: {LTBLUE}{VELOCITY} {BLACK}最大牽引力: {LTBLUE}{FORCE} @@ -3819,6 +3978,7 @@ STR_ORDER_REFIT_STOP_ORDER :({STRING}に改 STR_ORDER_STOP_ORDER :(運用停止) STR_ORDER_GO_TO_STATION :{1:STATION}へ{0:STRING} {2:STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(駅を使用できません){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(自動) @@ -3997,6 +4157,11 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}選択 STR_AI_LIST_CANCEL :{BLACK}キャンセル STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}スクリプトを変更しません +STR_SCREENSHOT_CAPTION :{WHITE}スクリーンショットを撮る +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}スクリーンショットを完全に拡大 +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}地図全体のスクリーンショット +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}ハイトマップスクリーンショット +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}ミニマップのスクリーンショット # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} パラメータ @@ -4056,6 +4221,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :このファイ STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :ファイルを読み込むことができません STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :ファイルに書き込むことができません STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :データ保全性チェック失敗 +STR_GAME_SAVELOAD_ERROR_PATCHPACK :安定版のセーブデータです。 STR_GAME_SAVELOAD_NOT_AVAILABLE :<使用不能> STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}このゲームは路面電車に対応していないバージョンで保存されましたので、すべての路面電車が削除されました。 @@ -4136,6 +4302,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}全額 STR_ERROR_CURRENCY_REQUIRED :{WHITE}{CURRENCY_LONG}が必要です STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}借入金を返済できません STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}借入金を送金することはできません +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}この会社にお金を渡すことはできません... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}会社を買収できません STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}会社の本社ビルを建設できません STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}この会社の株を25%購入できません @@ -4262,6 +4429,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :車庫の種類 STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE}は置換後では長すぎます STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}この輸送機器の自動置換/更新は行われませんでした STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(最低資金が確保できていません) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}新しい車両は{STRING}を運ぶことができません +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}新しい車両は順番に修理できません{NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}不可能な線路の組み合わせです @@ -4270,6 +4439,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}適当 STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}先に線路を撤去しなければなりません STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}道路は一方通行または進入禁止です STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}このレール種別との平面交差はできません +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}この道路では踏切は作れません STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}ここには信号を設置できません STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}ここには線路を建設できません STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}ここから線路を撤去できません @@ -4289,6 +4459,10 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}ここ STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}ここから軌道を撤去できません STR_ERROR_THERE_IS_NO_ROAD :{WHITE}道路がありません STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}軌道がありません +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}この道路のタイプは変更できません +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}ここで路面電車の種類を変更できません... +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}有効な路面電車がありません +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}軌道に互換性がありません # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}ここには運河を建設できません @@ -4451,6 +4625,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Transport Tycoo STR_BASESOUNDS_WIN_DESCRIPTION :Transport Tycoon Deluxe オリジナル版 効果音 (Windows) STR_BASESOUNDS_NONE_DESCRIPTION :空の効果音パック STR_BASEMUSIC_WIN_DESCRIPTION :Transport Tycoon Deluxe オリジナル版 音楽 (Windows) +STR_BASEMUSIC_TTO_DESCRIPTION :オリジナルトランスポートタイクーン(オリジナル/ワールドエディター)DOS版の音楽。 STR_BASEMUSIC_NONE_DESCRIPTION :空の音楽パック ##id 0x2000 @@ -4839,6 +5014,7 @@ STR_FORMAT_BUOY_NAME :{TOWN} ブイ STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} 第{COMMA}ブイ STR_FORMAT_COMPANY_NUM :(会社{COMMA}) STR_FORMAT_GROUP_NAME :グループ {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN}{STRING} STR_FORMAT_WAYPOINT_NAME :{TOWN}中継駅 STR_FORMAT_WAYPOINT_NAME_SERIAL :第{1:COMMA} {0:TOWN}中継駅 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 7f62d5c451..1e08b07c60 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -49,9 +49,9 @@ STR_CARGO_PLURAL_WHEAT :{G=m}밀 STR_CARGO_PLURAL_RUBBER :{G=f}고무 STR_CARGO_PLURAL_SUGAR :{G=m}설탕 STR_CARGO_PLURAL_TOYS :{G=m}장난감 -STR_CARGO_PLURAL_CANDY :{G=m}사탕 +STR_CARGO_PLURAL_SWEETS :{G=m}사탕 STR_CARGO_PLURAL_COLA :{G=f}콜라 -STR_CARGO_PLURAL_COTTON_CANDY :{G=m}솜사탕 +STR_CARGO_PLURAL_CANDYFLOSS :{G=m}솜사탕 STR_CARGO_PLURAL_BUBBLES :{G=m}거품 STR_CARGO_PLURAL_TOFFEE :{G=f}토피 STR_CARGO_PLURAL_BATTERIES :{G=f}건전지 @@ -83,9 +83,9 @@ STR_CARGO_SINGULAR_WHEAT :{G=m}밀 STR_CARGO_SINGULAR_RUBBER :{G=f}고무 STR_CARGO_SINGULAR_SUGAR :{G=m}설탕 STR_CARGO_SINGULAR_TOY :{G=m}장난감 -STR_CARGO_SINGULAR_CANDY :{G=m}사탕 +STR_CARGO_SINGULAR_SWEETS :{G=m}사탕 STR_CARGO_SINGULAR_COLA :{G=f}콜라 -STR_CARGO_SINGULAR_COTTON_CANDY :{G=m}솜사탕 +STR_CARGO_SINGULAR_CANDYFLOSS :{G=m}솜사탕 STR_CARGO_SINGULAR_BUBBLE :{G=m}거품 STR_CARGO_SINGULAR_TOFFEE :{G=f}토피 STR_CARGO_SINGULAR_BATTERY :{G=f}건전지 @@ -192,36 +192,37 @@ STR_COLOUR_RANDOM :무작위 STR_COLOUR_DEFAULT :기본 # Units used in OpenTTD -STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph -STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h -STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_IMPERIAL :{COMMA}mph +STR_UNITS_VELOCITY_METRIC :{COMMA}km/h +STR_UNITS_VELOCITY_SI :{COMMA}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}칸/일 -STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}마력 -STR_UNITS_POWER_METRIC :{COMMA}{NBSP}마력 -STR_UNITS_POWER_SI :{COMMA}{NBSP}kW +STR_UNITS_POWER_IMPERIAL :{COMMA}마력 +STR_UNITS_POWER_METRIC :{COMMA}마력 +STR_UNITS_POWER_SI :{COMMA}kW -STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}t -STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t -STR_UNITS_WEIGHT_SHORT_SI :{COMMA}{NBSP}kg +STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}t +STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}t +STR_UNITS_WEIGHT_SHORT_SI :{COMMA}kg -STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA}{NBSP}톤 -STR_UNITS_WEIGHT_LONG_METRIC :{COMMA}{NBSP}톤 -STR_UNITS_WEIGHT_LONG_SI :{COMMA}{NBSP}kg +STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA}톤 +STR_UNITS_WEIGHT_LONG_METRIC :{COMMA}톤 +STR_UNITS_WEIGHT_LONG_SI :{COMMA}kg -STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}{NBSP}갤런 -STR_UNITS_VOLUME_SHORT_METRIC :{COMMA}{NBSP}l -STR_UNITS_VOLUME_SHORT_SI :{COMMA}{NBSP}m³ +STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}갤런 +STR_UNITS_VOLUME_SHORT_METRIC :{COMMA}l +STR_UNITS_VOLUME_SHORT_SI :{COMMA}m³ -STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA}{NBSP}갤런 -STR_UNITS_VOLUME_LONG_METRIC :{COMMA}{NBSP}리터 -STR_UNITS_VOLUME_LONG_SI :{COMMA}{NBSP}m³ +STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA}갤런 +STR_UNITS_VOLUME_LONG_METRIC :{COMMA}리터 +STR_UNITS_VOLUME_LONG_SI :{COMMA}m³ -STR_UNITS_FORCE_IMPERIAL :{COMMA}{NBSP}파운드중 -STR_UNITS_FORCE_METRIC :{COMMA}{NBSP}kg중 +STR_UNITS_FORCE_IMPERIAL :{COMMA}파운드중 +STR_UNITS_FORCE_METRIC :{COMMA}kg중 STR_UNITS_FORCE_SI :{COMMA}kN -STR_UNITS_HEIGHT_IMPERIAL :{COMMA}{NBSP}피트 -STR_UNITS_HEIGHT_METRIC :{COMMA}{NBSP}m +STR_UNITS_HEIGHT_IMPERIAL :{COMMA}피트 +STR_UNITS_HEIGHT_METRIC :{COMMA}m STR_UNITS_HEIGHT_SI :{COMMA}m # Common window strings @@ -230,12 +231,10 @@ STR_LIST_FILTER_OSKTITLE :{BLACK}검색 STR_LIST_FILTER_TOOLTIP :{BLACK}검색할 키워드를 입력하세요 STR_TOOLTIP_GROUP_ORDER :{BLACK}그룹화 순서를 선택하세요. -STR_TOOLTIP_SORT_ORDER :{BLACK}정렬 방법을 선택하십시오. (내림차순/오름차순) -STR_TOOLTIP_SORT_CRITERIA :{BLACK}정렬 기준을 선택하십시오. +STR_TOOLTIP_SORT_ORDER :{BLACK}정렬 방법을 선택하세요 (내림차순/오름차순) +STR_TOOLTIP_SORT_CRITERIA :{BLACK}정렬 기준을 선택하세요 STR_TOOLTIP_FILTER_CRITERIA :{BLACK}검색 기준 선택 STR_BUTTON_SORT_BY :{BLACK}정렬 -STR_BUTTON_LOCATION :{BLACK}위치 -STR_BUTTON_RENAME :{BLACK}이름 바꾸기 STR_BUTTON_CATCHMENT :{BLACK}역세권 STR_TOOLTIP_CATCHMENT :{BLACK}이 역의 역세권을 표시하거나 끕니다. @@ -315,6 +314,15 @@ STR_SORT_BY_CARGO_CAPACITY :화물 수송 STR_SORT_BY_RANGE :항속거리 STR_SORT_BY_POPULATION :인구 STR_SORT_BY_RATING :등급 +STR_SORT_BY_NUM_VEHICLES :차량 수 +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :작년 총 이익 +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :올해 총 이익 +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :작년 평균 이익 +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :올해 평균 이익 + +# Group by options for vehicle list +STR_GROUP_BY_NONE :없음 +STR_GROUP_BY_SHARED_ORDERS :공유된 경로 # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}게임을 일시 정지합니다. @@ -403,7 +411,7 @@ STR_FILE_MENU_EXIT :종료 # map menu STR_MAP_MENU_MAP_OF_WORLD :전체 지도 보기 -STR_MAP_MENU_EXTRA_VIEW_PORT :외부 화면 +STR_MAP_MENU_EXTRA_VIEWPORT :외부 화면 STR_MAP_MENU_LINGRAPH_LEGEND :화물 흐름 범례 STR_MAP_MENU_SIGN_LIST :팻말 목록 @@ -569,8 +577,8 @@ STR_MONTH_DEC :{G=m}12월 # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}범례 STR_GRAPH_KEY_TOOLTIP :{BLACK}그래프의 범례를 보여줍니다. -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -740,6 +748,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}거친 땅 STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}잔디 땅 STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}맨 땅 +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}열대우림 STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}들판 STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}나무 STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}바위 @@ -771,6 +780,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}모든 STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}마지막 메시지/뉴스 보기 STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * 일시 정지 * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * 일시 정지됨 (연결 상태가 업데이트되기를 기다리는 중) * * STR_STATUSBAR_AUTOSAVE :{RED}자동 저장 STR_STATUSBAR_SAVING_GAME :{RED}* * 게임 저장 중 * * @@ -853,17 +863,17 @@ STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} : 차량이 낡았습니다. STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} : 차량이 매우 낡았습니다. STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} : 차량이 매우 낡아 교체가 시급합니다 -STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} : 다음 목적지로 가는 경로를 찾을 수 없습니다. -STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} : 아직 다음 목적지에 도착하지 못했습니다. -STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}{VEHICLE}의 작년 이익이 {CURRENCY_LONG} 입니다. +STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} : 다음 목적지로 가는 경로를 찾을 수 없습니다 +STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} : 아직 다음 목적지에 도착하지 못했습니다 +STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}{VEHICLE}의 작년 이익이 {CURRENCY_LONG} 입니다 STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}거리가 너무 멀어서 {VEHICLE}이 다음 목적지에 도착할 수 없습니다 STR_NEWS_ORDER_REFIT_FAILED :{WHITE}경로 상에 있던 개조에 실패하여 {VEHICLE}의 운행을 멈췄습니다. STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}{VEHICLE}의 자동 교체에 실패하였습니다{}{STRING} -STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}신형 {STRING}{G 0 "을" "를"} 사용할 수 있습니다! +STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}새로운 {STRING}{G 0 "을" "를"} 사용할 수 있습니다! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} -STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}신형 {STRING}{G 0 "을" "를"} 사용할 수 있습니다! - {ENGINE} +STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}새로운 {STRING}{G 0 "을" "를"} 사용할 수 있습니다! - {ENGINE} STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}이 차량이 속한 차량 그룹 목록 열기 @@ -885,7 +895,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{0:TOWN} 지역 당국이 {1:STRING}과 1년 간의 수송 독점권 계약을 체결하였습니다! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}외부 화면 {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}외부 화면 {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}외부 화면으로 복사 STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}현재 장소를 외부 화면에 복사합니다. STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}이 장소로 이동 @@ -936,15 +946,16 @@ STR_GAME_OPTIONS_CURRENCY_MXN :멕시코 페 STR_GAME_OPTIONS_CURRENCY_NTD :신 타이완 달러 (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :중국 위안 (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :홍콩 달러 (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :인도 루피 (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :인도네시아 루피아 (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :말레이시아 링깃 (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}차량 통행 방식 -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}차량 통행 방법 선택 STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :좌측통행 STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :우측통행 -STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}도시 이름 -STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}도시 이름 스타일을 선택하십시오. +STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}도시 이름: +STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}도시 이름 스타일을 선택하세요 ############ start of townname region STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :영국 식 (기본) @@ -982,40 +993,58 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :12개월마다 ############ end of autosave dropdown STR_GAME_OPTIONS_LANGUAGE :{BLACK}언어 -STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}사용하실 언어를 선택하세요. +STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}사용할 언어를 선택하세요 STR_GAME_OPTIONS_FULLSCREEN :{BLACK}전체화면 STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}OpenTTD를 전체화면으로 플레이하려면 클릭하세요. STR_GAME_OPTIONS_RESOLUTION :{BLACK}화면 해상도 -STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}사용하실 화면 해상도를 선택하세요. +STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}사용할 화면 해상도를 선택하세요 STR_GAME_OPTIONS_RESOLUTION_OTHER :기타 +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} + +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}하드웨어 가속 +STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}OpenTTD가 하드웨어 가속을 사용하게 하려면 체크하세요. 변경한 설정은 게임을 재시작한 뒤에 적용될 것입니다. +STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}이 설정은 게임을 재시작한 뒤에 적용될 것입니다 + +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}수직 동기화 +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}화면과 수직 동기화하려면 체크하세요. 변경한 설정은 게임을 재시작한 뒤에 적용될 것입니다. 하드웨어 가속을 켠 경우에만 작동합니다. STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}인터페이스 크기 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}인터페이스의 크기를 선택합니다. +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(자동 탐지) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :기본 크기 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :2배 크기 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4배 크기 STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}글씨 크기 -STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}인터페이스에서 사용할 글씨 크기를 선택합니다. +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}인터페이스에서 사용할 글씨 크기를 선택하세요 +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(자동 탐지) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :기본 크기 STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :2배 크기 STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :4배 크기 +STR_GAME_OPTIONS_GRAPHICS :{BLACK}그래픽 + +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}화면 주사율 +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}사용할 화면 주사율을 선택하세요 +STR_GAME_OPTIONS_REFRESH_RATE_OTHER :기타 +STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}60Hz를 넘는 화면 주사율을 사용하면 성능에 영향이 갈 수도 있습니다. + STR_GAME_OPTIONS_BASE_GRF :{BLACK}기본 그래픽 세트 -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}사용하실 기본 그래픽을 선택하세요. +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}게임에 사용할 기본 그래픽 세트를 선택하세요 STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM}개 파일 손실 STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}기본 그래픽 세트에 대한 추가 정보를 봅니다. STR_GAME_OPTIONS_BASE_SFX :{BLACK}기본 효과음 세트 -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}게임에 사용할 기본 효과음 세트를 선택하십시오. +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}게임에 사용할 기본 효과음 세트를 선택하세요 STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}기본 효과음 세트에 대한 추가 정보를 봅니다. STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}기본 배경 음악 세트 -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}사용하실 기본 배경 음악 세트를 선택하세요. +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}게임에 사용할 기본 배경 음악 세트를 선택하세요 STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM}개의 파일이 손상되었습니다. STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}기본 배경 음악 세트에 대한 추가 정보를 봅니다. @@ -1099,6 +1128,8 @@ STR_TERRAIN_TYPE_FLAT :평탄함 STR_TERRAIN_TYPE_HILLY :언덕 STR_TERRAIN_TYPE_MOUNTAINOUS :산 STR_TERRAIN_TYPE_ALPINIST :매우 험한 산지 +STR_TERRAIN_TYPE_CUSTOM :사용자 지정 높이 +STR_TERRAIN_TYPE_CUSTOM_VALUE :사용자 지정 높이 ({NUM}) STR_CITY_APPROVAL_PERMISSIVE :신경 안씀 STR_CITY_APPROVAL_TOLERANT :신경 씀 @@ -1178,16 +1209,18 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :이 설정을 STR_CONFIG_SETTING_DISASTERS :재앙: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :일정 구역이나 차량, 기반시설을 간혹 파괴할 수도 있는 재앙을 켜거나 끕니다. STR_CONFIG_SETTING_CITY_APPROVAL :지역 개발에 대한 도시의 태도: {STRING} -STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :회사가 유발하는 소음과 환경 파괴가 회사에 대한 도시의 평가치와 향후 해당 지역에서 건설하는 행동에 얼마나 영향을 미칠지 선택하십시오. +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :회사가 유발하는 소음과 환경 파괴가 회사에 대한 도시의 평가치와 향후 해당 지역에서 건설하는 행동에 얼마나 영향을 미칠지 선택하세요 -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :최대 지형 높이: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :지도에 생성되는 산이 가질 수 있는 최대 높이를 설정합니다. -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}이 값을 최대 지형 높이로 설정할 수 없습니다. 이 값보다 고도가 높은 산이 최소 한 개 이상 존재합니다. +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :지도 높이 최댓값: {STRING} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :지도 지형의 최대 높이를 설정합니다. "(자동)"으로 설정하면 지형이 생성된 뒤에 적절한 값을 골라줍니다. +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(자동) +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}이 값을 지도 높이 최댓값으로 설정할 수 없습니다. 이 값보다 고도가 높은 산이 최소 한 개 이상 존재합니다. STR_CONFIG_SETTING_AUTOSLOPE :건물, 트랙 등의 하부 지형 편집 허용: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :건물이나 도로/선로 등을 제거하지 않고도 하부의 지형을 편집할 수 있게 허용합니다. STR_CONFIG_SETTING_CATCHMENT :더 현실적인 역세권 지정: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :역과 공항의 종류에 따라 다른 크기의 역세권을 가지도록 만듭니다. -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :역이 붙어 있는 산업 시설의 화물을 회사의 역이 취급 가능: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :역이 붙어 있는 산업시설의 화물을 회사의 역이 취급 가능: {STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :이 설정을 켜면, (유전과 같이) 역이 붙어 있는 산업시설이 근처에 지은 회사 소유의 역에서도 화물을 취급할 수 있습니다. 이 설정을 끄면, 반드시 산업시설에 붙어 있는 역에서만 화물을 취급할 수 있습니다. 인근에 있는 모든 회사 소유의 역은 화물을 취급할 수 없게 되며, 산업시설에 붙어 있는 역도 그 산업시설 이외의 화물을 취급할 수 없게 됩니다. STR_CONFIG_SETTING_EXTRADYNAMITE :도시 소유의 도로, 다리 등의 제거 허용: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :도시 소유의 기반시설이나 건물을 제거할 수 있게 합니다. @@ -1197,9 +1230,9 @@ STR_CONFIG_SETTING_TILE_LENGTH :{COMMA}칸 STR_CONFIG_SETTING_SMOKE_AMOUNT :차량의 매연 또는 전기 스파크의 양: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :차량에서 연기나 전기 스파크가 얼마나 많이 일어나는지 설정합니다. STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :열차 가속 모델: {STRING} -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :열차 가속 물리 모델을 선택하십시오. "오리지널" 모델은 언덕을 오를 때 무조건 속력이 감소합니다. "현실적" 모델은 열차의 길이나 기관차의 견인력 등의 구성 속성에 따라 언덕과 커브에서 속력이 감소합니다. +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :열차 가속에 사용할 물리 모델을 선택합니다. "오리지널" 모델은 언덕을 오를 때 무조건 속력이 감소합니다. "현실적" 모델은 열차의 길이나 기관차의 견인력 등의 구성 속성에 따라 언덕과 커브에서 속력이 감소합니다. STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :자동차/전차 가속 모델: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :자동차/전차의 가속 물리 모델을 선택하십시오. "오리지널" 모델은 언덕을 오를 때 무조건 속력이 감소합니다. "현실적" 모델은 차량의 견인력 등 차량의 다양한 속성에 따라 언덕을 오를 때 속력이 감소합니다. +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :자동차/전차의 가속 물리 모델을 선택하세요. "오리지널" 모델은 언덕을 오를 때 무조건 속력이 감소합니다. "현실적" 모델은 차량의 견인력 등 차량의 다양한 속성에 따라 언덕을 오를 때 속력이 감소합니다. STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :경사도 설정 (열차용): {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :열차에 적용시킬 경사도를 설정합니다. 값이 높을수록 열차가 언덕을 올라가는데 더 힘이 듭니다. STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% @@ -1229,9 +1262,9 @@ STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :일반적으로 STR_CONFIG_SETTING_SIGNALSIDE :신호기 보이기: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :선로의 어느 쪽에 신호기를 설치할 지 선택합니다. STR_CONFIG_SETTING_SIGNALSIDE_LEFT :왼쪽에 -STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :진행 방향에 +STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :자동차 통행 방향에 STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :오른쪽에 -STR_CONFIG_SETTING_SHOWFINANCES :연말에 자동으로 재정 창을 띄움: {STRING} +STR_CONFIG_SETTING_SHOWFINANCES :연말에 자동으로 재정 창을 띄우기: {STRING} STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :이 설정을 켜면. 회사의 재정 상태를 확인하기 쉽도록 매년 말에 재정 창이 자동으로 뜹니다. STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :새로 지정하는 경로는 기본적으로 '직행'으로 처리: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :일반적으로 차량은 경로 상에 있는 모든 역에 정차하게 되어있습니다. 이 설정을 켜면, 차량이 마지막 목적지까지 정차없이 모든 역을 통과할 것입니다. 이 설정은 새로 경로를 지정하는 차량에만 적용되는 점을 알아두십시오. 하지만 각 차량의 경로는 두 가지 방법 중에 원하는 대로 다시 설정할 수 있습니다. @@ -1275,12 +1308,12 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :기반시설 STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :이 설정을 켜면, 기반시설 유지비가 발생합니다. 유지비는 교통망의 규모에 비례하며 대형 회사는 소형 회사보다 많은 유지비가 들어갑니다. STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :시작시 회사 색상: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :새 회사에서 사용할 색상을 선택하세요. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :새 회사에서 사용할 색상을 선택합니다. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :옛날 공항을 사라지지 않고 계속 만들 수 있게 함: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :이 설정을 켜면, 소형 공항을 포함한 모든 공항 종류를 도입 이후에 계속 사용할 수 있게 됩니다. -STR_CONFIG_SETTING_WARN_LOST_VEHICLE :차량이 길을 잃으면 경고: {STRING} +STR_CONFIG_SETTING_WARN_LOST_VEHICLE :차량이 길을 잃으면 경고하기: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :다음 목적지로 가기 위한 경로를 찾을 수 없는 차량이 있으면 뉴스 메시지로 알려줍니다. STR_CONFIG_SETTING_ORDER_REVIEW :차량의 경로를 검사: {STRING} STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :이 설정을 켜면, 차량의 경로를 주기적으로 검사하여 문제가 발견되면 뉴스 메시지로 알려줍니다. @@ -1304,7 +1337,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :오류 메시 STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA}초 동안 STR_CONFIG_SETTING_HOVER_DELAY :도움말 보이기: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :마우스를 올려놓았을 때 도움말이 뜨는데 걸리는 시간을 설정합니다. 마우스 오른쪽 클릭으로 바로 뜨도록 할 수도 있습니다. -STR_CONFIG_SETTING_HOVER_DELAY_VALUE :마우스를 {COMMA}밀리초 동안 올려놓기 (1밀리초 = 1/1000초) +STR_CONFIG_SETTING_HOVER_DELAY_VALUE :마우스를 {COMMA}밀리초 동안 올려놓기 STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :마우스 오른쪽 클릭 STR_CONFIG_SETTING_POPULATION_IN_LABEL :도시 이름 옆에 도시의 인구 수를 표시함: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :도시 이름 옆에 도시의 인구 수를 표시합니다. @@ -1323,10 +1356,16 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :지형 종류: STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(천지창조 전용) 지형의 언덕 모양을 결정합니다. STR_CONFIG_SETTING_INDUSTRY_DENSITY :산업시설 수: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :게임을 플레이하는 동안 얼마나 많은 산업시설이 생성되고 유지되어야 할 지를 설정합니다. -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :석유 관련 산업 시설의 최대 건설 범위: 지도 맨 끝에서부터 {STRING} 이내 -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :정유 공장과 유전이 맵 가장자리에서 얼마나 멀리 떨어진 곳까지 건설될 수 있는지를 나타냅니다. 섬 맵에서는 이 설정을 이용해서 해당 산업 시설이 해안에 가까이 있도록 조정할 수 있습니다. 256칸보다 큰 맵의 경우에는 이 값은 더 크게 조정됩니다. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :석유 관련 산업시설의 최대 건설 범위: 지도 맨 끝에서부터 {STRING} 이내 +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :정유 공장과 유전이 맵 가장자리에서 얼마나 멀리 떨어진 곳까지 건설될 수 있는지를 나타냅니다. 섬 맵에서는 이 설정을 이용해서 해당 산업시설이 해안에 가까이 있도록 조정할 수 있습니다. 256칸보다 큰 맵의 경우에는 이 값은 더 크게 조정됩니다. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :설선 고도: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :아한대 기후의 설선 고도를 조절합니다. 눈은 산업시설의 생성과 도시 성장에 영향을 미칩니다. +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :아한대 기후의 설선 고도를 조절합니다. 눈은 산업시설의 생성과 도시 성장에 영향을 미칩니다. 시나리오 에디터에서 수정할 수 있고 설정하지 않은 경우 "눈 비율" 설정을 따릅니다. +STR_CONFIG_SETTING_SNOW_COVERAGE :눈 비율: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :아한대 기후에서 눈 지역의 양을 대략적으로 조절할 수 있습니다. 눈은 산업시설 생성과 도시 성장 요구사항에도 영향을 미칩니다. 지도를 생성할 때에만 사용하는 설정입니다. 해수면 바로 위에 있는 땅은 무조건 눈이 없을 것입니다. +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% +STR_CONFIG_SETTING_DESERT_COVERAGE :사막 비율: {STRING} +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :아열대 기후에서 사막 지역의 양을 대략적으로 조절할 수 있습니다. 사막은 산업시설 생성에도 영향을 미칩니다. 지도를 생성할 때에만 사용하는 설정입니다. +STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :지형의 거친 정도: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(천지창조 전용) 언덕의 빈도수를 선택합니다. 평탄한 지형은 개수가 적고 넓게 퍼진 언덕을 만듭니다. 거친 지형은 똑같아 보일 수 있는 많은 언덕이 생기게 됩니다. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :매우 부드럽게 @@ -1336,14 +1375,14 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :매우 거칠 STR_CONFIG_SETTING_VARIETY :산세 험준도: {STRING} STR_CONFIG_SETTING_VARIETY_HELPTEXT :(천지창조 전용) 지도가 산지와 평지를 모두 갖도록 만들 것인 지를 결정합니다. 이 설정은 지형을 더 평평하게 만드므로, 다른 설정은 '산'으로 설정하시기 바랍니다. STR_CONFIG_SETTING_RIVER_AMOUNT :강의 양: {STRING} -STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :강을 얼마나 만들지 선택하십시오. +STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :강을 얼마나 만들지 선택하세요 STR_CONFIG_SETTING_TREE_PLACER :나무 배치 알고리즘: {STRING} -STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :지도의 나무 분포 형식을 선택하십시오. '오리지널'을 선택하면 나무가 고르게 분포되고, '향상됨'을 선택하면 나무가 군락을 이루게 됩니다. +STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :지도의 나무 분포 형식을 선택하세요. '오리지널'을 선택하면 나무가 고르게 분포되고, '향상됨'을 선택하면 나무가 군락을 이루게 됩니다. STR_CONFIG_SETTING_TREE_PLACER_NONE :없음 STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :오리지널 STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :향상됨 STR_CONFIG_SETTING_ROAD_SIDE :자동차 통행 방향: {STRING} -STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :통행방향을 선택하세요. +STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :통행 방향을 선택합니다 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :높이맵 회전: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :반시계방향 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :시계방향 @@ -1355,7 +1394,7 @@ STR_CONFIG_SETTING_STATION_SPREAD :역의 최대 STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :역의 최대 크기를 설정합니다. 값이 높으면 게임이 느려질 수도 있습니다. STR_CONFIG_SETTING_SERVICEATHELIPAD :헬리콥터를 발착장에서 자동으로 점검: {STRING} STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :공항에 격납고가 없어도 헬리콥터가 공항에 착륙할 때마다 점검을 하도록 합니다. -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :철도/도로/항만/공항 건설창을 띄울 때 지형 편집창도 같이 띄움: {STRING} +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :철도/도로/항만/공항 건설창을 띄울 때 지형 편집창도 같이 띄우기: {STRING} STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :수송 시설과 관련된 건설 창을 열 때 지형 편집 창을 같이 엽니다. STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :소형지도 창에 표시될 땅의 색상: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :소형지도 창에 사용할 지형의 색상을 선택합니다. @@ -1403,9 +1442,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :오른쪽 클 STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :창 내부를 오른쪽 클릭하여 창을 닫습니다. 오른쪽 클릭으로 도움말 표시 설정을 해제해야 합니다! STR_CONFIG_SETTING_AUTOSAVE :자동 저장: {STRING} -STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :게임을 자동으로 저장할 간격을 선택하십시오. +STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :게임을 자동으로 저장할 간격을 선택하세요 -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :저장 파일의 이름으로 {STRING} 날짜 형식을 사용합니다. +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :저장 파일 이름으로 {STRING} 날짜 형식을 사용 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :게임 저장 파일 이름에 사용할 날짜 형식을 선택합니다. STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :긴 (2012년 1월 1일) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :짧은 (2012.01.01) @@ -1430,7 +1469,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :열차 시간 STR_CONFIG_SETTING_QUICKGOTO :빠른 행선지 설정: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :경로 창을 열면 자동으로 '행선지' 버튼을 선택하여 곧바로 행선지를 지정할 수 있도록 합니다. STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :철도 형식 기본값 설정 (게임 시작/불러온 후): {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :게임을 새로 시작하거나 불러온 뒤에 사용할 철도의 종류를 선택합니다. '처음 사용 가능한 것'은 가장 오래된 철도 종류를 선택하고, '최신 기술의 철도'는 가장 최신에 나온 철도 종류를 선택하며 '가장 많이 사용한 것'은 플레이어가 가장 많이 사용한 철도 타입을 선택합니다. +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :게임을 새로 시작하거나 불러온 뒤에 사용할 철도의 종류를 선택합니다. '처음 사용 가능한 것'은 가장 오래된 철도 종류를 선택하고, '최신 기술의 철도'는 가장 최신에 나온 철도 종류를 선택하며 '가장 많이 사용한 것'은 현재 가장 많이 사용한 철도 종류를 선택합니다. STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :처음 사용 가능한 것 STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :가장 최근에 개발된 철도 STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :가장 많이 사용한 것 @@ -1440,6 +1479,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :건설 도구 STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :다리, 터널 등의 건설 도구를 사용 후에도 계속 열어둔 채로 놔둡니다. STR_CONFIG_SETTING_EXPENSES_LAYOUT :재정 창에서 비용을 종류별로 묶어서 표시: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :재정 창에 나타나는 회사 비용을 어떻게 표시할지 설정합니다. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :선로 건설 중 신호기 자동 제거: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :신호기가 이미 있는 선로에 선로를 추가로 설치하면 신호기를 자동으로 제거합니다. 잘못 사용하면 잠재적으로 열차가 충돌할 수 있다는 점을 명심하세요. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :빨리 감기 속도 제한: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :빨리 감기를 했을 때 게임이 진행되는 속도를 제한할 수 있습니다. 0으로 설정하면 컴퓨터가 허용하는 만큼 빠르게 돌립니다. 100% 미만의 값으로 설정하면 게임이 느리게 돌아갑니다. 빨리 감기 속도의 최댓값은 컴퓨터의 성능에 따라 결정되며 맵에 따라 다를 수 있습니다. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :보통 게임 속도의 {NUM}% +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :제한 없음 (컴퓨터가 허용하는 만큼 빠르게) STR_CONFIG_SETTING_SOUND_TICKER :뉴스 자막: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :요약된 뉴스 메시지가 나타나면 효과음을 재생합니다. @@ -1484,28 +1529,28 @@ STR_CONFIG_SETTING_AI_PROFILE_EASY :쉬움 STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :중간 STR_CONFIG_SETTING_AI_PROFILE_HARD :어려움 -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :멀티플레이에서 컴퓨터 플레이어의 참여 허용: {STRING} +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :멀티 플레이에서 컴퓨터 플레이어의 참여 허용: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :멀티 플레이 게임에서 인공지능 컴퓨터 플레이어가 참여하는 것을 허용합니다. STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :게임 스크립트가 중지되기 직전에 계산할 수 있는 최대 횟수: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :게임 스크립트가 한 단계에서 계산할 수 있는 최대 계산 횟수를 설정합니다. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :스크립트당 최대 메모리 사용량: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :강제로 종료되기 전에 단일 스크립트가 사용할 수 있는 메모리의 양입니다. 크기가 큰 맵에서는 값을 크게 설정해야할 수도 있습니다. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :스크립트 하나가 강제 종료되기 전까지 사용할 수 있는 메모리의 양입니다. 크기가 큰 맵에서는 값을 크게 설정해야할 수도 있습니다. STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB -STR_CONFIG_SETTING_SERVINT_ISPERCENT :신뢰도에 따른 정비 설정: {STRING} +STR_CONFIG_SETTING_SERVINT_ISPERCENT :신뢰도에 따른 점검 설정: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :차량 점검 방식을 "마지막 점검 이후 지난 시간 (또는) 최대 신뢰도에 대한 차량 신뢰도의 일정 퍼센트 하락 여부" 중에 하나로 선택합니다. STR_CONFIG_SETTING_SERVINT_TRAINS :열차에 대한 기본 점검 기준: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :열차에 따로 점검 기간이 설정되어있지 않은 경우에 사용할 기본 점검 기간을 설정합니다. STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}일/% STR_CONFIG_SETTING_SERVINT_DISABLED :사용 안 함 STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :차량에 대한 기본 점검 기준: {STRING} -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :차량 정비 설정을 하지 않은 경우, 기본값으로 사용할 정비 주기를 설정합니다. +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :차량 점검 설정을 하지 않은 경우, 기본값으로 사용할 점검 주기를 설정합니다 STR_CONFIG_SETTING_SERVINT_AIRCRAFT :항공기에 대한 기본 점검 기준: {STRING} STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :항공기에 따로 점검 기간이 설정되어있지 않은 경우에 사용할 기본 점검 기간을 설정합니다. STR_CONFIG_SETTING_SERVINT_SHIPS :선박에 대한 기본 점검 기준: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :선박에 따로 점검 기간이 설정되어있지 않은 경우에 사용할 기본 점검 기간을 설정합니다. -STR_CONFIG_SETTING_NOSERVICE :차량 고장 설정이 비활성화된 경우 정비하지 않음: {STRING} -STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :이 설정을 켜면, 차량이 고장나지 않도록 설정되어 있는 경우 차량이 정비를 하러 가지 않습니다. +STR_CONFIG_SETTING_NOSERVICE :차량 고장 설정을 껐으면 점검을 하지 않음: {STRING} +STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :이 설정을 켜면, 차량이 고장나지 않도록 설정되어 있는 경우 차량이 자동으로 점검을 하러 가지 않습니다 STR_CONFIG_SETTING_WAGONSPEEDLIMITS :화물차 속력 제한 적용: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :이 설정을 켜면, 화물차의 속력 제한값에 따라 열차의 최대 속력을 제한합니다. STR_CONFIG_SETTING_DISABLE_ELRAILS :전기 철도를 사용하지 않음: {STRING} @@ -1553,11 +1598,14 @@ STR_CONFIG_SETTING_ENDING_YEAR :게임 종료 STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :점수를 기록할 게임 종료 연도를 설정합니다. 이 연도가 지나면, 회사의 점수가 고득점 순위표에 기록되어 표시됩니다. 하지만 플레이어는 계속해서 게임을 진행할 수 있습니다.{}이 값이 시작 연도보다 이전으로 설정되어 있다면, 고득점 순위표는 나타나지 않습니다. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :안 함 -STR_CONFIG_SETTING_SMOOTH_ECONOMY :부드러운 경제 변화 사용 (자주, 조금씩 변화): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :이 설정을 켜면, 1차 산업시설의 생산량이 소량으로 자주 변하게 됩니다. NewGRF로 추가한 산업시설에는 적용되지 않습니다. +STR_CONFIG_SETTING_ECONOMY_TYPE :경제 변화: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :부드러운 경제에서는 생산량이 소량으로 자주 변하게 됩니다. 멈춘 경제에서는 생산량이 변하지 않고 산업시설의 폐쇄를 막습니다. 이 설정은 NewGRF로 추가한 산업시설에는 적용되지 않을 수 있습니다. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :기본 +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :부드러움 +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :멈춤 STR_CONFIG_SETTING_ALLOW_SHARES :다른 회사의 지분을 사는 것을 허용: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :이 설정을 켜면, 회사의 지분을 거래할 수 있게 됩니다. 회사의 지분을 거래하려면 해당 회사가 어느 정도 오래되어야 합니다. -STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :지분 거래를 허용할 최소 회사 나이: {STRING} +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :지분 거래를 허용할 최소 회사 나이: {STRING}년 STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :지분을 사고 팔기 위해 필요한 회사의 최소 나이를 설정합니다. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :환승시 벌어들이는 중간 수익의 비율: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :더 많은 수익을 내기 위해, 수송 관계상 중간 구간에게 주어진 수익의 비율을 설정합니다. @@ -1568,7 +1616,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :드래그할 STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :신호기를 CTRL+드래그 하여 설치할 때의 행동을 선택합니다. 이 설정을 끄면, 신호기가 없는 긴 폐색을 만들지 않기 위해 터널이나 다리 주변에 먼저 신호기가 설치될 것입니다. 이 설정을 켜면, 신호기는 터널/다리와 상관없이 매 n개의 칸마다 설치될 것입니다. STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :전자식 신호기의 사용: {STRING}년 이후에 STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :전자식 신호기를 사용할 수 있는 연도를 설정합니다. 이 이전에는 구식 신호기만 사용 가능합니다. (두 신호기는 기능적으로는 동일하고 모습만 다릅니다.) -STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :신호기 설치시 신호기 선택 창을 띄움: {STRING} +STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :신호기 설치시 신호기 선택 창을 띄우기: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :설치할 신호기 종류를 고를 수 있는 신호기 선택 창을 표시합니다. 이 설정을 끄면, 신호기 선택 창 없이 CTRL+클릭 만으로 신호기의 종류를 바꿔야 합니다. STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :기본적으로 만들 신호기 종류: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :기본으로 설치할 신호기의 종류를 선택합니다. @@ -1604,11 +1652,12 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :도시의 전 STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :제곱 (기본) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :선형 -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :게임 진행 중에 나무가 자동적으로 번식: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :게임 중에 나무가 자동적으로 번식하는지 여부를 조절합니다. 이 설정을 조정하면, 아열대 기후의 벌목소처럼 나무의 성장에 의존하는 산업시설에 영향을 끼칠 수 있습니다. -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :자라지 않음 {RED}(제재소에 의해 벌목될 수 있음) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :열대 우림 지역에서만 -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :어디서나 +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :나무의 성장과 확장: {STRING} +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :게임 플레이 중 나무의 성장과 확장 여부를 조절합니다. 이 설정을 조정하면, 아열대 기후의 벌목소처럼 나무의 성장에 의존하는 산업시설에 영향을 끼칠 수 있습니다. +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :성장은 하되 확장은 안 함 {RED}(제재소가 멈출 수 있음) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :성장은 하되 열대 우림에서만 확장함 +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :어디서나 성장하고 확장함 +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :성장과 확장 모두 안 함 {RED}(제재소가 멈출 수 있음) STR_CONFIG_SETTING_TOOLBAR_POS :주메뉴의 위치: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :주 메뉴가 화면 상단의 어느 위치에 표시될지를 선택합니다. @@ -1626,12 +1675,17 @@ STR_CONFIG_SETTING_ZOOM_MIN :최대 확대 STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :게임 화면의 최대 확대 수준을 설정합니다. 화면을 더 크게 확대할 수록 더 많은 메모리가 필요합니다. STR_CONFIG_SETTING_ZOOM_MAX :최대 축소 수준: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :게임 화면의 최대 축소 수준을 설정합니다. 화면을 더 작게 축소할 수록 게임이 더 버벅거리게 될 수도 있습니다. +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :최고 해상도 그래픽 스프라이트: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :그래픽 스프라이트에 사용할 최고 해상도를 제한할 수 있습니다. 그래픽 스프라이트 해상도를 제한하면 고해상도 그래픽을 사용할 수 있어도 이를 사용하지 않을 수 있습니다. 이 설정을 사용하면 고해상도 그래픽을 지원하지 않는 GRF 파일을 섞어서 사용할 때 게임의 모습을 일관성있게 만들 수 있습니다. STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :기본값 STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :도시 성장 속도: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :도시의 성장 속도를 설정합니다. STR_CONFIG_SETTING_TOWN_GROWTH_NONE :없음 @@ -1651,58 +1705,59 @@ STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :다음 연결 STR_CONFIG_SETTING_LINKGRAPH_TIME :화물 분배 연결 상태를 {STRING}일마다 다시 계산 STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :각 연결 상태 요소의 재계산을 위해 필요한 시간입니다. 재계산이 시작될 때, 이 날짜만큼 작동하는 스레드가 생성됩니다. 이 값이 작으면 작을수록, 스레드가 끝나야할 때에 스레드가 끝나지 않게 됩니다. 그러면 게임이 랙에 걸려 멈추게 됩니다. 값을 크게 설정할수록 경로가 바뀔 때 분배 상태가 업데이트 되는 시간이 오래 걸리게 됩니다. STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :수동 -STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :불균형 -STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :균형 +STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :비대칭 +STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :대칭 STR_CONFIG_SETTING_DISTRIBUTION_PAX :승객에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"균형"은 A역에서 B역으로 가려는 승객의 수가 B에서 A로 가려는 승객의 수와 비슷하다는 뜻입니다. "불균형"은 승객이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 승객 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"대칭"은 A역에서 B역으로 가려는 승객의 수가 B에서 A로 가려는 승객의 수와 비슷하다는 뜻입니다. "비대칭"은 승객이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 승객 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :우편에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"균형"은 A역에서 B역으로 가려는 우편물의 수가 B에서 A로 가려는 우편물의 수와 비슷하다는 뜻입니다. "불균형"은 우편물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 우편물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"대칭"은 A역에서 B역으로 가려는 우편물의 수가 B에서 A로 가려는 우편물의 수와 비슷하다는 뜻입니다. "비대칭"은 우편물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 우편물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :장갑 화물에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :장갑 화물은 온대 기후의 귀금속, 아열대 기후의 다이아몬드 또는 아한대 기후의 금을 말합니다. NewGRF을 사용하면 달라질 수 있습니다. "균형"은 A역에서 B역으로 가려는 화물의 수가 B에서 A로 가려는 화물의 수와 비슷하다는 뜻입니다. "불균형"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 아한대 기후에서는 균형으로 설정하면 은행이 금광으로 금을 보내지 않으려 하기 때문에 불균형이나 수동으로 설정하는 것을 추천합니다. 온대 기후나 아열대 기후에서는 은행이 일부 적재한 귀금속을 원래 은행으로 보내려고 하기 때문에 균형을 선택해도 됩니다. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :장갑 화물은 온대 기후의 귀금속, 아열대 기후의 다이아몬드 또는 아한대 기후의 금을 말합니다. NewGRF을 사용하면 달라질 수 있습니다. "대칭"은 A역에서 B역으로 가려는 화물의 수가 B에서 A로 가려는 화물의 수와 비슷하다는 뜻입니다. "비대칭"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 아한대 기후에서는 대칭으로 설정하면 은행이 금광으로 금을 보내지 않으려 하기 때문에 비대칭이나 수동으로 설정하는 것을 추천합니다. 온대 기후나 아열대 기후에서는 은행이 일부 적재한 귀금속을 원래 은행으로 보내려고 하기 때문에 대칭을 선택해도 됩니다. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :다른 화물에 대한 분배 형식: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"불균형"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 특별한 이유가 없는 한, "불균형"이나 "수동"으로 설정하십시오. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"비대칭"은 화물이 아무 방향이나 임의의 양만큼 가게 됨을 뜻합니다. "수동"은 자동적인 화물 분배가 일어나지 않고 기존 방식을 사용하겠음을 뜻합니다. 특별한 이유가 없는 한, "비대칭"이나 "수동"으로 설정하십시오. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :분배 정확도: {STRING} STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :값이 높으면 높을수록 CPU가 연결 상태를 계산하는 시간이 더 오래 걸립니다. 만약 이 시간이 너무 오래 걸리면 게임이 버벅일 것입니다. 하지만, 낮은 값으로 설정하면 분배가 부정확하게 일어나서, 화물이 원하는 곳으로 분배되지 않을 수 있습니다. STR_CONFIG_SETTING_DEMAND_DISTANCE :거리에 따른 수요 효과: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :이 값을 0보다 크게 설정하면, 어떤 화물이 있는 A역과 목적지가 될 수 있는 역 B 사이의 거리는 A에서 B로 가는 화물의 양에 영향을 미치게 됩니다. A역에서 B역이 더 멀리 떨어질 수록 이동하는 화물의 양은 적어질 것입니다. 값이 크면 클 수록 화물은 멀리 이동하지 않고 가까운 역으로 가게 됩니다. -STR_CONFIG_SETTING_DEMAND_SIZE :균형 모드에서 되돌아오는 화물의 양: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :이 값을 100%보다 작게 설정할 수록 균형 분배는 불균형 분배와 비슷해집니다. 특정 양의 화물을 역으로 보내면 그보다 더 적은 화물이 강제로 되돌아오게 됩니다. 이 값을 0%로 설정하면 균형 분배는 불균형 분배와 똑같습니다. +STR_CONFIG_SETTING_DEMAND_SIZE :대칭 모드에서 되돌아오는 화물의 양: {STRING} +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :이 값을 100%보다 작게 설정할 수록 대칭 분배는 비대칭 분배와 비슷해집니다. 특정 양의 화물을 역으로 보내면 그보다 더 적은 화물이 강제로 되돌아오게 됩니다. 이 값을 0%로 설정하면 대칭 분배는 비대칭 분배와 똑같습니다. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :다음으로 짧은 경로를 사용하기 위한 경로의 포화도: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :종종 두 역 사이에는 여러 가지 경로가 존재할 수 있습니다. 이 경우, 화물 분배 기능은 먼저 가장 짧은 경로로 화물을 보내고, 그 경로가 포화 상태에 이르면 그 다음으로 짧은 경로를 사용하는 식으로 화물을 분배합니다. 포화도는 경로의 수송 능력과 예정 사용량을 추정하여 계산됩니다. 일단 모든 경로가 포화 상태가 되었는데 아직 수요가 남아있다면, 수송 능력이 높은 경로를 사용하면서 모든 경로를 과부하 상태로 만들게 됩니다. 하지만, 이 알고리즘은 수송량을 대부분 정확히 추정하지는 않습니다. 이 설정을 이용해서, 화물 분배 기능이 짧은 경로의 포화 상태가 몇 퍼센트가 되어야 다음으로 짧은 경로에 화물을 분배할 것인지를 지정할 수 있습니다. 과대평가된 수송량의 경우 너무 붐비는 역이 생기지 않도록 하기 위해서는 이 값을 100%보다 작게 설정하십시오. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :속력 단위: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :속력를 표시할 때 선택한 단위를 사용하여 나타냅니다. -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :임페리얼법 (mph) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :야드파운드법 (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :미터법 (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :국제표준규격 (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :게임 단위 (칸/일) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :차량의 힘 단위: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :출력할 차량의 힘 단위를 선택합니다. -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :임페리얼법 (마력) +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :야드파운드법 (마력) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :미터법 (마력) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :국제표준규격 (kW) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :무게 단위: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :무게를 표시할 때 선택한 단위를 사용하여 나타냅니다. -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :임페리얼법 (미국 톤) +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :야드파운드법 (미국 톤) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :미터법 (톤) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :국제표준규격 (kg) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :부피 단위: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :부피를 표시할 때 선택한 단위를 사용하여 나타냅니다. -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :임페리얼법 (갤런) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :야드파운드법 (갤런) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :미터법 (리터) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :국제표준규격 (m³) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :견인 효과 단위: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :견인 효과(견인력)를 표시할 때 선택한 단위를 사용하여 나타냅니다. -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :임페리얼법 (파운드중) +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :야드파운드법 (파운드중) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :미터법 (kgf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :국제표준규격 (kN) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :높이 단위: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :높이를 표시할 때 선택한 단위를 사용하여 나타냅니다. -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :임페리얼법 (ft) +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :야드파운드법 (ft) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :미터법 (m) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :국제표준규격 (m) @@ -1749,8 +1804,8 @@ STR_CONFIG_ERROR :{WHITE}설정 STR_CONFIG_ERROR_ARRAY :{WHITE}... 배열 '{STRING}'에서 오류 발생 STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... '{1:STRING}'에 잘못된 값('{0:STRING}')이 지정되었습니다. STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... '{STRING}' 설정의 끝에 후행 문자가 있습니다. -STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... NewGRF '{STRING}' 무시중: '{STRING}'{G 1 "과" "와"} GRF ID가 겹침 -STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... 유효하지 않은 NewGRF '{STRING}' 무시중: {STRING} +STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... '{STRING}' NewGRF를 무시합니다: '{STRING}'{G 1 "과" "와"} GRF ID가 겹침 +STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... 유효하지 않은 '{STRING}' NewGRF를 무시합니다: {STRING} STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :찾을 수 없음 STR_CONFIG_ERROR_INVALID_GRF_UNSAFE :사용하기에 불안함 STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :NewGRF 시스템 @@ -1764,6 +1819,10 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... 기 STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}메모리 초과 STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES}의 스프라이트 캐시 할당에 실패하였습니다. 스프라이트 캐시 용량이 {BYTES}로 감소합니다. 이는 OpenTTD의 성능을 저하시킬 것입니다. 메모리 요구사항을 낮추려면 32bpp를 비활성화하거나 화면 확대 설정을 기본값에 가깝게 조절하십시오. +# Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}비디오 설정 오류 발생... +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... 호환되는 GPU를 찾지 못했습니다. 하드웨어 가속이 비활성화됩니다 + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1807,18 +1866,10 @@ STR_INTRO_TRANSLATION :{BLACK}이 버 # Quit window STR_QUIT_CAPTION :{WHITE}종료 -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}정말 이 게임을 끝내고 {STRING}{G 0 "으" ""}로 돌아가시겠습니까? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}정말 게임을 종료하시겠습니까? STR_QUIT_YES :{BLACK}예 STR_QUIT_NO :{BLACK}아니요 -# Supported OSes -STR_OSNAME_WINDOWS :{G=f}Windows -STR_OSNAME_UNIX :{G=f}Unix -STR_OSNAME_OSX :{G=f}OS{NBSP}X -STR_OSNAME_HAIKU :{G=f}Haiku -STR_OSNAME_OS2 :{G=f}OS/2 -STR_OSNAME_SUNOS :{G=f}SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}게임 그만하기 STR_ABANDON_GAME_QUERY :{YELLOW}정말 이 게임을 종료하고 메인으로 이동하시겠습니까? @@ -1827,7 +1878,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}정말 # Cheat window STR_CHEATS :{WHITE}치트 STR_CHEATS_TOOLTIP :{BLACK}체크박스의 체크 표시는 이전에 이 치트를 사용했는지 여부를 나타냅니다. -STR_CHEATS_WARNING :{BLACK}경고! 치트는 경쟁자를 속이는 행위입니다. 치트를 사용한 기록은 절대 지워지지 않음을 명심하십시오. +STR_CHEATS_NOTE :{BLACK}참고: 치트 사용 여부는 저장 파일에 기록될 것입니다 STR_CHEAT_MONEY :{LTBLUE}재정을 {CURRENCY_LONG} 만큼 증가 STR_CHEAT_CHANGE_COMPANY :{LTBLUE}다음 회사로 플레이: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}마법 불도저 (산업시설이나 옮길 수 없는 건물 제거): {ORANGE}{STRING} @@ -1939,10 +1990,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}넥타 # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}멀티 플레이 -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}공개 여부 -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}공개된 게임(인터넷)과 비공개된 게임(LAN) 중에서 선택하십시오. -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :아니요 -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :예 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}플레이어 이름: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}다른 사람들에게 보여줄 당신의 이름입니다. @@ -1983,8 +2030,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}게임 STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}새로고침 STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}서버 정보를 새로 고칩니다. -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}서버 검색 -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}네트워크에 등록되어 있는 서버를 검색합니다. +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}인터넷 검색 +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}인터넷에서 공개 서버를 검색합니다 +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}LAN 검색 +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}로컬 영역 네트워크에서 서버를 검색합니다 STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}서버 추가 STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}서버를 목록에 수동으로 추가합니다. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}서버 열기 @@ -2001,6 +2050,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}멀티 STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}비밀번호 설정 STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}서버에 공개적으로 접근하는 것을 막고 싶을 때 비밀번호를 걸어 보호합니다. +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}공개 여부 +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}공개된 게임(인터넷)과 비공개된 게임(LAN) 중에서 선택하세요 STR_NETWORK_START_SERVER_UNADVERTISED :아니요 STR_NETWORK_START_SERVER_ADVERTISED :예 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM}명 @@ -2061,7 +2112,7 @@ STR_NETWORK_LANG_LATVIAN :라트비아어 STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}멀티플레이 게임 대기실 STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}참가 준비중: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}이 게임에 있는 회사의 목록입니다. 다른 회사에 같이 참가하거나, 빈 자리가 있을 경우 새로운 회사로 시작할 수 있습니다 +STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}이 게임에 있는 회사의 목록입니다. 다른 회사에 같이 참여하거나, 빈 자리가 있을 경우 새로운 회사를 세워서 시작할 수 있습니다 STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}회사 정보 STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}회사 이름: {WHITE}{STRING} @@ -2069,7 +2120,7 @@ STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}설립: STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}회사가치: {WHITE}{CURRENCY_LONG} STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}재정 수익: {WHITE}{CURRENCY_LONG} STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}작년 수익: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}퍼포먼스: {WHITE}{NUM} +STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}성취도: {WHITE}{NUM} STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}차량: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}역: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} @@ -2114,7 +2165,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :새 회사 # Network client list STR_NETWORK_CLIENTLIST_KICK :추방 STR_NETWORK_CLIENTLIST_BAN :차단 -STR_NETWORK_CLIENTLIST_GIVE_MONEY :돈 보내기 STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :모두에게 말하기 STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :이 회사에게 말하기 STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :귓속말하기 @@ -2123,18 +2173,16 @@ STR_NETWORK_SERVER :서버 STR_NETWORK_CLIENT :접속자 STR_NETWORK_SPECTATORS :관전자 -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}송금하고 싶은 양을 입력하세요 - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}입력한 비밀번호는 저장하지 않기 STR_COMPANY_PASSWORD_OK :{BLACK}이 회사에 새 비밀번호 부여 STR_COMPANY_PASSWORD_CAPTION :{WHITE}회사 비밀번호 STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}회사 비밀번호 기본값으로 설정 -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}이 회사 비밀번호를 새 회사의 비밀번호 기본값으로 사용 +STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}이 비밀번호를 새 회사의 비밀번호 기본값으로 사용합니다 # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}참여 -STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}이 회사로 참가해서 플레이합니다 +STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}이 회사에 참여해서 플레이합니다 STR_COMPANY_VIEW_PASSWORD :{BLACK}비밀번호 STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}다른 참가자가 이 회사에 참여하여 플레이하지 못 하도록 암호로 보호합니다 STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}회사 비밀번호 설정 @@ -2207,15 +2255,17 @@ STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}마지 STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} ############ Leave those lines in this order!! STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED :게임이 일시 정지되었습니다. ({STRING}) -STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :게임이 아직 일시 정지된 상태입니다. ({STRING}) -STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :게임이 아직 일시 정지된 상태입니다. ({STRING}, {STRING}) -STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :게임이 아직 일시 정지된 상태입니다. ({STRING}, {STRING}, {STRING}) -STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :게임이 아직 일시 정지된 상태입니다. ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :게임이 아직 일시 정지된 상태입니다 ({STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :게임이 아직 일시 정지된 상태입니다 ({STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :게임이 아직 일시 정지된 상태입니다 ({STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :게임이 아직 일시 정지된 상태입니다 ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :게임이 아직 일시 정지된 상태입니다 ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :게임이 재개되었습니다. ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :플레이하는 사람 수 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :접속자와 연결중 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :수동 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :게임 스크립트 +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :연결 상태가 업데이트되기를 기다리는 중 ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :게임 종료 STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} 님이 입장하셨습니다 @@ -2224,9 +2274,8 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} 님이 관전을 시작하셨습니다 STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} 님이 새로운 회사({2:NUM}번)를 창설하셨습니다 STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} 님이 퇴장하셨습니다 (사유: {2:STRING}) -STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} 님의 이름이 {STRING}(으)로 바뀌었습니다 -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} 님이 당신에게 {2:CURRENCY_LONG}만큼의 돈을 보내셨습니다 -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** {1:STRING} 님에게 {2:CURRENCY_LONG}만큼의 돈을 보냈습니다 +STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} 님이 이름을 {STRING}(으)로 바꾸었습니다 +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} 님이 {1:STRING}에게 {2:CURRENCY_LONG}만큼의 돈을 보내셨습니다 STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}서버가 게임을 종료하였습니다 STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}서버가 재시작되고 있습니다...{}기다려주세요... STR_NETWORK_MESSAGE_KICKED :*** {STRING} - 서버에서 강제로 추방되었습니다. 사유: ({STRING}) @@ -2253,7 +2302,7 @@ STR_CONTENT_OPEN_URL :{BLACK}웹 사 STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}이 컨텐츠의 웹 사이트를 방문합니다 STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}다운로드 STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}선택한 콘텐츠의 다운로드를 시작합니다 -STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}다운로드 할 파일의 총 용량: {WHITE}{BYTES} +STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}다운로드할 파일의 총 용량: {WHITE}{BYTES} STR_CONTENT_DETAIL_TITLE :{SILVER}콘텐츠 정보 STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED :{SILVER}이 콘텐츠를 선택하지 않았습니다 STR_CONTENT_DETAIL_SUBTITLE_SELECTED :{SILVER}이 콘텐츠를 다운로드하기 위해 선택하였습니다 @@ -2271,7 +2320,7 @@ STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{WHITE}{STRING} STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}필요한 요소: {WHITE}{STRING} STR_CONTENT_DETAIL_TAGS :{SILVER}태그: {WHITE}{STRING} STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD가 "zlib" 지원 기능이 없는 상태에서 빌드되었습니다... -STR_CONTENT_NO_ZLIB_SUB :{WHITE}... 콘텐츠를 다운로드 할 수 없습니다! +STR_CONTENT_NO_ZLIB_SUB :{WHITE}... 콘텐츠를 다운로드할 수 없습니다! # Order of these is important! STR_CONTENT_TYPE_BASE_GRAPHICS :{G=m}기본 그래픽 @@ -2304,6 +2353,10 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}예, 그래픽을 다운로드 받습니다 STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}아니요, OpenTTD를 종료합니다 +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}다운로드 실패 +STR_MISSING_GRAPHICS_ERROR :{BLACK}그래픽을 다운로드하는 데 실패했습니다.{}수동으로 그래픽을 다운로드하세요. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}OpenTTD 종료 + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}투명 설정 STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}역명판을 보여줄 지 선택합니다. 고정하려면 CTRL+클릭하세요 @@ -2321,7 +2374,7 @@ STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}반투 STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}화물 흐름 범례 STR_LINKGRAPH_LEGEND_ALL :{BLACK}모두 STR_LINKGRAPH_LEGEND_NONE :{BLACK}없음 -STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}표시할 회사를 선택하십시오 +STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}표시할 회사를 선택하세요 STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap @@ -2345,6 +2398,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}분리 STR_JOIN_WAYPOINT_CAPTION :{WHITE}연결할 경유지 STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}분리된 경유지를 새로 만들기 +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}현재 이 기반 시설에서 사용할 수 있는 차량이 없어 비활성화되었습니다 + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :선로 건설 STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :전기선로 건설 @@ -2353,7 +2409,7 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :자기부상열 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}선로를 건설합니다. CTRL 키를 누르면 건설모드/철거모드로 전환합니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}자동건설 모드로 선로를 건설합니다. CTRL 키를 누르면 건설/철거모드를 바꿀 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}차량기지를 건설합니다. 차량을 구입하거나 정비를 할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}차량기지를 건설합니다. 차량을 구입하거나 점검을 할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}선로에 경유지를 설치합니다. CTRL 키를 사용하면 같은 이름의 경유지를 서로 떨어진 곳에 지을 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}철도역을 짓습니다. CTRL 키를 사용하면 같은 이름의 역을 서로 떨어진 곳에 지을 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}신호기를 설치합니다. CTRL 키를 누르면 구식/전자식으로 전환합니다.{}선로를 따라 드래그해서 설치할 수 있습니다. CTRL 키를 누른 채로 드래그하면 다음 분기점이나 다음 신호기까지 신호기를 설치합니다.{}CTRL 키를 누른 채 클릭하면 신호기 선택 창을 전환합니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 @@ -2413,7 +2469,7 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}드래 # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}철교 선택 -STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}다리 종류를 선택하십시오 +STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}다리 종류를 선택하세요 STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}다리 건설 - 원하는 다리 종류를 선택하세요 STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY} @@ -2434,8 +2490,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}도로 STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}전차 선로를 짓습니다. CTRL 키를 누르고 있으면 건설/제거 모드를 바꿀 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}자동건설 모드로 도로를 짓습니다. CTRL 키를 누르고 있으면 건설/제거 모드를 바꿀 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}자동건설 모드로 전차 선로를 짓습니다. CTRL 키를 누르고 있으면 건설/제거 모드를 바꿀 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}차고지를 건설합니다. 차량을 구입하거나 정비를 할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}전차 차고지를 건설합니다. 차량을 구입하거나 정비를 할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}차고지를 건설합니다. 차량을 구입하거나 점검을 할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}전차 차고지를 건설합니다. 차량을 구입하거나 점검을 할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}버스 정류장을 짓습니다. CTRL 키를 사용하면 근처 정류장과 연결할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}여객 전차역을 짓습니다. CTRL 키를 사용하면 근처 역과 연결할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}트럭 적하장을 짓습니다. CTRL 키를 사용하면 근처 적하장과 연결할 수 있습니다. SHIFT 키를 누른 채로 사용하면 예상 비용을 볼 수 있습니다 @@ -2532,13 +2588,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}크기: STR_OBJECT_CLASS_LTHS :등대 STR_OBJECT_CLASS_TRNS :송신기 -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}나무 STR_PLANT_TREE_TOOLTIP :{BLACK}심고싶은 나무의 종류를 선택합니다. 이미 나무가 심어져있는 경우에는 선택한 나무의 크기를 키웁니다 STR_TREES_RANDOM_TYPE :{BLACK}여러 종류의 나무 같이 심기 STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}여러 종류의 나무를 심습니다. SHIFT 키를 이용하면 예상 비용을 볼 수 있습니다 STR_TREES_RANDOM_TREES_BUTTON :{BLACK}무작위로 나무 심기 STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}전 지역에 걸쳐 무작위로 나무를 심습니다 +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}일반 +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}지면을 드래그해서 나무를 하나씩 놓습니다. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}작은 숲 +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}지면을 드래그해서 작은 숲을 만듭니다. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}큰 숲 +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}지면을 드래그해서 큰 숲을 만듭니다. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}지형 만들기 @@ -2588,13 +2650,19 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}임의 # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}새 산업시설 건설 -STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}목록에서 적당한 산업시설을 선택하십시오 -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :무작위 산업시설 건설 +STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}목록에서 적당한 산업시설을 선택하세요 +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}무작위 산업시설 건설 STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}무작위로 산업시설을 건설합니다 +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}무작위 산업시설 건설 +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}정말 산업시설을 무작위로 건설하시겠습니까? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}가격: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}답사 STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}건설 STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}투자 +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}모든 산업시설 제거 +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}현재 지도 상에 있는 모든 산업시설을 제거합니다 +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}모든 산업시설 제거 +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}정말 모든 산업시설을 제거하시겠습니까? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}{STRING}{G 0 "과" "와"} 관련된 산업시설 연계도 @@ -2615,6 +2683,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}표시 # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}이 지역의 지형 정보 +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}이 칸의 위치로 이동합니다. CTRL+클릭하면 이 칸의 위치를 기준으로 새로운 외부 화면을 엽니다 STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}초기화 가격: {LTBLUE}없음 STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}초기화 가격: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}제거시 들어오는 환불금: {LTBLUE}{CURRENCY_LONG} @@ -2824,25 +2893,31 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}검색할 문자열: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}파일 덮어쓰기 STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}정말로 이미 존재하는 파일에 덮어씌우시겠습니까? +STR_SAVELOAD_DIRECTORY :{STRING} (폴더) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (상위 폴더) STR_SAVELOAD_OSKTITLE :{BLACK}게임을 저장할 파일명을 입력하세요 # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}세계 제작 STR_MAPGEN_MAPSIZE :{BLACK}지도 크기: -STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}지도의 크기를 칸 수 기준으로 선택하십시오. 사용 가능한 지도의 칸 수는 선택한 값보다 조금 적습니다 +STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}지도의 크기를 칸 수 기준으로 선택하세요. 사용 가능한 지도의 칸 수는 설정한 값보다 조금 작을 것입니다 STR_MAPGEN_BY :{BLACK}x STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}도시의 수: STR_MAPGEN_DATE :{BLACK}날짜: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}산업시설 수: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}최대 지형 높이: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}최대 지형 높이를 1칸 높입니다 -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}최대 지형 높이를 1칸 낮춥니다 -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}설선 고도: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}설선 고도를 1칸 높입니다 -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}설선 고도를 1칸 낮춥니다 +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}가장 높은 지점의 높이: +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}지도에서 가장 높은 지점의 최대 높이를 1만큼 높입니다 +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}지도에서 가장 높은 지점의 최대 높이를 1만큼 낮춥니다 +STR_MAPGEN_SNOW_COVERAGE :{BLACK}눈 비율: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}눈 지역의 비율을 10%p 늘립니다. +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}눈 지역의 비율을 10%p 줄입니다. +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}사막 비율: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}눈이 내린 곳의 비율을 10%p 줄입니다. +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}사막 지역의 비율을 10%p 줄입니다. +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_LAND_GENERATOR :{BLACK}지형 만들기: -STR_MAPGEN_TREE_PLACER :{BLACK}나무 알고리즘: STR_MAPGEN_TERRAIN_TYPE :{BLACK}지형 종류: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}해수면: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}강: @@ -2867,8 +2942,10 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}높이 STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}크기: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}최대 지형 고도값 변경 -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}설선 고도 변경 +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}목표 정상 높이 +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}가장 높은 지점의 높이 +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}눈 비율 (% 단위) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}사막 비율 (% 단위) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}시작 연도 변경 # SE Map generation @@ -2955,7 +3032,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}이 OpenTT # NewGRF save preset window STR_SAVE_PRESET_CAPTION :{WHITE}프리셋 저장 -STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}사용 가능한 프리셋 목록입니다. 아래에 같은 이름을 복사하려면 선택하십시오 +STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}사용 가능한 프리셋 목록입니다. 아래에 같은 이름을 복사하려면 선택하세요 STR_SAVE_PRESET_TITLE :{BLACK}프리셋의 이름을 입력하세요 STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}저장할 프리셋에 지정할 이름입니다 STR_SAVE_PRESET_CANCEL :{BLACK}취소 @@ -3016,7 +3093,7 @@ STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING}{G 1 STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING}{G 1 "은" "는"} 반드시 {STRING} 뒤에 불러와야 합니다 STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING}{G 1 "은" "는"} OpenTTD {STRING} 버전이나 그 이상이 필요합니다 STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF 파일이 번역을 위해 만들어졌습니다 -STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :NewGRF이 너무 많습니다 +STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :NewGRF가 너무 많습니다 STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :{2:STRING}{G 2 "을" "를"} 포함한 정적 NewGRF {1:STRING}{G 1 "을" "를"} 불러오는 것은 비동기화를 일으킬 수 있습니다 STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :예기치 않은 스프라이트 (스프라이트 {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :알려지지 않은 액션 0 속성 {4:HEX} (스프라이트 {3:NUM}) @@ -3050,8 +3127,8 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}호환 STR_NEWGRF_LIST_MISSING :{RED}파일 없음 # NewGRF 'it's broken' warnings -STR_NEWGRF_BROKEN :{WHITE}'{0:STRING}' NewGRF이 적용되는 과정에서 비동기화나 충돌이 일어날 수 있습니다 -STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}차고지 안에 있지 않은 '{1:ENGINE}'에 대한 동력 차량 상태가 바뀌었습니다 +STR_NEWGRF_BROKEN :{WHITE}'{0:STRING}' NewGRF가 적용되는 과정에서 비동기화나 충돌이 일어날 수 있습니다 +STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}차고지 안에 있지 않은 '{1:ENGINE}' 동력 차량의 상태가 바뀌었습니다 STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}'{1:ENGINE}'{G 1 "이" "가"} 차고지 안에 있지 않으면 차량 길이가 바뀝니다 STR_NEWGRF_BROKEN_CAPACITY :{WHITE}차량이 기지 안에 있지 않거나 개조가 불가능한 상태에서 '{1:ENGINE}'의 수송량이 변경되었습니다 STR_BROKEN_VEHICLE_LENGTH :{WHITE}'{1:COMPANY}'에 속한 열차 '{0:VEHICLE}'의 길이가 잘못된 값을 가지고 있습니다. NewGRF에 의한 문제로 보입니다. 게임이 비동기화 또는 충돌을 일으킬 수 있습니다. @@ -3085,6 +3162,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}팻말 # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}팻말 내용 고치기 +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}이 팻말의 위치로 이동합니다. CTRL+클릭하면 이 팻말 위치를 기준으로 새로운 외부 화면을 엽니다 STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}다음 팻말로 가기 STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}이전 팻말로 가기 @@ -3145,33 +3223,34 @@ STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :새 건물에 STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :수송 권한 독점권 구입 STR_LOCAL_AUTHORITY_ACTION_BRIBE :지역 당국에게 뇌물 주기 -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}더 많은 승객과 화물을 유치하기 위해 소규모의 광고 캠페인을 시작합니다.{}가격: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}더 많은 승객과 화물을 유치하기 위해 중간 규모의 광고 캠페인을 시작합니다.{}가격: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}더 많은 승객과 화물을 유치하기 위해 대규모의 광고 캠페인을 시작합니다.{}가격: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}도시 도로망 보수공사를 시행합니다. 앞으로 6개월간 극심한 도로 혼잡을 일으킵니다.{}가격: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}당신의 회사를 대표하는 '명예의 동상'을 건설합니다.{}가격: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}도시 상업 건물의 건설에 투자합니다.{}가격: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}1년간의 수송 권한 독점권을 구입합니다. 도시 당국은 오직 당신 회사의 역에만 승객과 화물을 허용할 것입니다.{}가격: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}더 많은 승객과 화물을 유치하기 위해 소규모의 광고 캠페인을 시작합니다.{}도시 중심 주위의 좁은 반경 안에 있는 역 등급을 일시적으로 올려줍니다.{}가격: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}더 많은 승객과 화물을 유치하기 위해 중간 규모의 광고 캠페인을 시작합니다.{}도시 중심 주위의 적당한 반경 안에 있는 역 등급을 일시적으로 올려줍니다.{}가격: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}더 많은 승객과 화물을 유치하기 위해 대규모의 광고 캠페인을 시작합니다.{}도시 중심 주위의 넓은 반경 안에 있는 역 등급을 일시적으로 올려줍니다.{}가격: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}도시 도로망 보수공사를 시행합니다.{}앞으로 6개월간 극심한 도로 혼잡을 일으킵니다.{}가격: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}당신의 회사를 대표하는 '명예의 동상'을 건설합니다.{}이 도시에 있는 역 등급을 영구적으로 올려줍니다.{}가격: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}도시 상업 건물의 건설에 투자합니다.{}도시의 성장을 일시적으로 빠르게 만들어줍니다.{}가격: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}1년 간 수송 권한 독점권을 구입합니다.{}도시 당국은 오직 당신 회사의 역에만 승객과 화물을 실을 것입니다.{}가격: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}성취도를 올리기 위해 처벌을 감수하고 지역 당국에 뇌물을 줍니다.{}가격: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} 목표 STR_GOALS_SPECTATOR_CAPTION :{WHITE}전체 목표 STR_GOALS_SPECTATOR :전체 목표 -STR_GOALS_GLOBAL_TITLE :{BLACK}전체 목표: +STR_GOALS_GLOBAL_BUTTON :{BLACK}전체 +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}전체 목표를 보여줍니다 +STR_GOALS_COMPANY_BUTTON :{BLACK}회사 +STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}회사 목표 보기 STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- 없음 - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- 적용 불가 - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}회사 목표: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}산업시설/마을/칸의 위치로 화면을 이동하려면 클릭하십시오. CTRL+클릭하면 산업시설/마을/칸의 위치를 기준으로 새로운 외부 화면을 엽니다 # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :{G=m}질문 -STR_GOAL_QUESTION_CAPTION_INFORMATION :{G=f}정보 -STR_GOAL_QUESTION_CAPTION_WARNING :{G=f}경고 -STR_GOAL_QUESTION_CAPTION_ERROR :{G=f}오류 +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}질의 +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}정보 +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}경고 +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}오류 ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :취소 @@ -3296,7 +3375,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}이 공 STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}이 경유지의 위치로 시점을 변경합니다. CTRL+클릭하면 이 경유지 위치를 기준으로 새로운 외부 화면을 엽니다 STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}이 경유지의 이름을 변경합니다 -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}이 부표의 위치로 시점을 변경합니다. CTRL+클릭하면 이 부표 위치를 기준으로 새로운 외부 화면을 엽니다 +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}이 부표의 위치로 이동합니다. CTRL+클릭하면 이 부표 위치를 기준으로 새로운 외부 화면을 엽니다 STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}부표 이름 바꾸기 STR_EDIT_WAYPOINT_NAME :{WHITE}경유지 이름 설정 @@ -3361,6 +3440,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}본사 STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}회사가치의 1% 가격을 들여 본사를 다른 위치로 옮깁니다. SHIFT+클릭을 사용하면 예상 비용을 볼 수 있습니다 STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}상세정보 STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}기반시설 상세정보 창을 엽니다 +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}돈 보내기 +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}이 회사에 돈을 보냅니다 STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}새 얼굴 STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}사장의 얼굴을 선택합니다 @@ -3378,6 +3459,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}이 회 STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :회사 이름 STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :사장 이름 +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :보내고자 하는 돈의 액수를 입력하세요 STR_BUY_COMPANY_MESSAGE :{WHITE}저희 회사를 거두어주실 운송 회사를 찾고있습니다.{}{}저희 {COMPANY} 회사를 {CURRENCY_LONG}의 가격으로 인수합병하시겠습니까? @@ -3450,7 +3532,7 @@ STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}이 차 STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}관리 STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}이 목록에 있는 모든 열차에 지시를 내려 관리합니다 STR_VEHICLE_LIST_REPLACE_VEHICLES :차량 교체 -STR_VEHICLE_LIST_SEND_FOR_SERVICING :정비하러 보내기 +STR_VEHICLE_LIST_SEND_FOR_SERVICING :점검하러 보내기 STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :차량기지로 보내기 STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :차고지로 보내기 @@ -3532,6 +3614,7 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}전원 STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}개조가능 화물: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :모든 화물 STR_PURCHASE_INFO_NONE :없음 +STR_PURCHASE_INFO_ENGINES_ONLY :기관차만 STR_PURCHASE_INFO_ALL_BUT :{CARGO_LIST} 이외의 모든 화물 STR_PURCHASE_INFO_MAX_TE :{BLACK}최고 견인력: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}항속거리: {GOLD}{COMMA}칸 @@ -3668,7 +3751,7 @@ STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}이 격 STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}이 안에 있는 모든 차량을 판매하려고 합니다. 계속하시겠습니까? # Engine preview window -STR_ENGINE_PREVIEW_CAPTION :{WHITE}차량 개발자로부터의 메시지 +STR_ENGINE_PREVIEW_CAPTION :{WHITE}차량 개발자가 보낸 메시지 STR_ENGINE_PREVIEW_MESSAGE :{GOLD}저희는 이제 막 새로운 {STRING}{G 0 "을" "를"} 개발했습니다. 1년 먼저 이 차량을 사용하셔서 모두에게 공개되기 전에 잘 작동하는지 확인해주시겠습니까? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=f}철도 기관차 @@ -3702,8 +3785,8 @@ STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP :{BLACK}이 열 STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES :{YELLOW}교체할 수 있는 차량 STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}이 열은 교체할 수 있는 차량 목록입니다 -STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}교체할 기관차 종류를 선택하십시오 -STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}새로 교체될 기관차를 선택하십시오 +STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}교체할 기관차 종류를 선택하세요 +STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}새로 교체될 기관차를 선택하세요 STR_REPLACE_VEHICLES_START :{BLACK}차량 교체 시작 STR_REPLACE_VEHICLES_NOW :모든 차량을 지금 교체 @@ -3738,15 +3821,15 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}자동 # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}이 열차가 있는 곳으로 이동합니다. CTRL+클릭하면 이 열차를 따라갑니다 -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}이 차량이 있는 곳으로 이동합니다. CTRL+클릭하면 이 차량을 따라갑니다 -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}이 선박이 있는 곳으로 이동합니다. CTRL+클릭하면 이 선박을 따라갑니다 -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}이 항공기가 있는 곳으로 이동합니다. CTRL+클릭하면 이 항공기를 따라갑니다 +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}이 열차의 위치로 화면을 이동합니다. 더블 클릭하면 이 열차를 따라 화면이 움직입니다. CTRL+클릭하면 이 열차 위치를 기준으로 외부 화면을 엽니다 +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}이 차량의 위치로 화면을 이동합니다. 더블 클릭하면 이 차량을 따라 화면이 움직입니다. CTRL+클릭하면 이 차량 위치를 기준으로 외부 화면을 엽니다 +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}이 선박의 위치로 화면을 이동합니다. 더블 클릭하면 이 선박을 따라 화면이 움직입니다. CTRL+클릭하면 이 선박 위치를 기준으로 외부 화면을 엽니다 +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}이 항공기의 위치로 화면을 이동합니다. 더블 클릭하면 이 항공기를 따라 화면이 움직입니다. CTRL+클릭하면 이 항공기 위치를 기준으로 외부 화면을 엽니다 -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}열차를 차량기지로 보냅니다. CTRL+클릭하면 정비를 하러 차량기지에 들르기만 합니다 -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}차량을 차고지로 보냅니다. CTRL+클릭하면 정비를 하러 차고지에 들르기만 합니다 -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}선박을 정박소로 보냅니다. CTRL+클릭하면 정비를 하러 정박소에 들르기만 합니다 -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}항공기를 격납고로 보냅니다. CTRL+클릭하면 정비를 하러 격납고에 들르기만 합니다 +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}열차를 차량기지로 보냅니다. CTRL+클릭하면 점검을 하러 차량기지에 들르기만 합니다 +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}차량을 차고지로 보냅니다. CTRL+클릭하면 점검을 하러 차고지에 들르기만 합니다 +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}선박을 정박소로 보냅니다. CTRL+클릭하면 점검을 하러 정박소에 들르기만 합니다 +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}항공기를 격납고로 보냅니다. CTRL+클릭하면 점검을 하러 격납고에 들르기만 합니다 STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}객차/화차를 포함한 열차 전체를 복제합니다. CTRL+클릭하면 경로도 함께 공유됩니다. SHIFT+클릭하면 예상 비용을 볼 수 있습니다 STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}차량을 복제합니다. CTRL+클릭하면 경로도 함께 공유됩니다. SHIFT+클릭하면 예상 비용을 볼 수 있습니다 @@ -3773,10 +3856,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}차량 STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}선박의 상세정보를 보여줍니다 STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}항공기의 상세정보를 보여줍니다 -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}현재 열차 행동 - 열차를 운행/정지시키려면 클릭하세요. CTRL+클릭하면 목적지를 볼 수 있습니다. -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}현재 차량 행동 - 운행/정지시키려면 클릭하세요. CTRL+클릭하면 목적지를 볼 수 있습니다. -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}현재 선박 행동 - 선박을 운행/중지시키려면 클릭하세요. CTRL+클릭하면 목적지를 볼 수 있습니다. -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}현재 항공기 행동 - 항공기를 운행/중지시키려면 여기를 클릭하세요. CTRL+클릭하면 목적지를 볼 수 있습니다. +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}현재 열차 행동 - 열차 운행을 시작/정지하려면 클릭하세요 +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}현재 차량 행동 - 차량 운행을 시작/정지하려면 클릭하세요 +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}현재 선박 행동 - 선박 운행을 시작/정지하려면 클릭하세요 +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}현재 항공기 행동 - 항공기 운행을 시작/정지하려면 클릭하세요 + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}이 경로의 위치로 화면을 이동합니다. CTRL+클릭하면 이 경로의 위치를 기준으로 외부 화면을 엽니다 # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}싣는 중 / 내리는 중 @@ -3832,12 +3917,12 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}수송 STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}환승 수익: {LTBLUE}{CURRENCY_LONG} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}정비 간격: {LTBLUE}{COMMA}일{BLACK}마다 마지막 정비 날짜: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}정비 기준: {LTBLUE}{COMMA}%{BLACK} 떨어지면 마지막 정비 날짜: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}점검 간격: {LTBLUE}{COMMA}일{BLACK}마다{NBSP} 마지막 점검 날짜: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}점검 기준: {LTBLUE}{COMMA}%{BLACK} 떨어지면 마지막 점검 날짜: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}점검 기준값을 10만큼 올립니다. CTRL+클릭하면 점검 기준값을 5만큼 올립니다 STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}점검 기준값을 10만큼 내립니다. CTRL+클릭하면 점검 기준값을 5만큼 내립니다 -STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}정비 기준 설정을 변경합니다 +STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}점검 기준 설정을 변경합니다 STR_VEHICLE_DETAILS_DEFAULT :기본 STR_VEHICLE_DETAILS_DAYS :날짜 STR_VEHICLE_DETAILS_PERCENT :신뢰도 @@ -3877,7 +3962,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}변경 STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}변경 수송량: {GOLD}{CARGO_LONG}{}{BLACK}개조시 회수되는 비용: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}변경 수송량: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}개조 비용: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}변경 수송량: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}개조시 회수되는 비용: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}개조할 차량을 선택하십시오. 마우스로 드래그하면 여러 개의 차량을 선택 가능합니다. 빈 곳을 클릭하면 전체를 선택합니다. CTRL+클릭하면 차량 전체를 선택할 수 있습니다 +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}개조할 차량을 선택하세요. 마우스로 드래그하면 여러 개의 차량을 선택 가능합니다. 빈 곳을 클릭하면 전체를 선택합니다. CTRL+클릭하면 차량 전체를 선택할 수 있습니다 STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}열차가 수송할 화물의 종류를 선택하세요 STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}차량이 수송할 화물의 종류를 선택하세요 @@ -3929,17 +4014,17 @@ STR_ORDER_DROP_NO_UNLOADING :화물을 하 STR_ORDER_TOOLTIP_UNLOAD :{BLACK}선택한 목적지에서 화물을 하차할 방식을 변경합니다 STR_ORDER_REFIT :{BLACK}개조 -STR_ORDER_REFIT_TOOLTIP :{BLACK}이 경로에서 열차를 어떤 화물을 받을 수 있게 개조할 것인지 선택하십시오. CTRL+클릭하면 개조 설정을 해제합니다. +STR_ORDER_REFIT_TOOLTIP :{BLACK}이 경로에서 열차를 어떤 화물을 받을 수 있게 개조할 것인지 선택하세요. CTRL+클릭하면 개조 설정을 해제합니다 STR_ORDER_REFIT_AUTO :{BLACK}개조 STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}이 경로에서 개조할 화물의 종류를 선택하세요. CTRL+클릭하면 개조 설정을 해제합니다. 개조 기능은 개조 가능한 차량에서만 사용할 수 있습니다. STR_ORDER_DROP_REFIT_AUTO :특정 화물로 STR_ORDER_DROP_REFIT_AUTO_ANY :이용 가능한 화물로 -STR_ORDER_SERVICE :{BLACK}정비 +STR_ORDER_SERVICE :{BLACK}점검 STR_ORDER_DROP_GO_ALWAYS_DEPOT :항상 감 -STR_ORDER_DROP_SERVICE_DEPOT :필요하면 정비 +STR_ORDER_DROP_SERVICE_DEPOT :필요하면 점검 STR_ORDER_DROP_HALT_DEPOT :멈춤 -STR_ORDER_SERVICE_TOOLTIP :{BLACK}정비가 필요하지 않으면 이 경로를 건너뜁니다 +STR_ORDER_SERVICE_TOOLTIP :{BLACK}점검이 필요하지 않으면 이 경로를 건너뜁니다 STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}경로를 건너뛰기 위한 비교 조건을 선택합니다 @@ -3948,7 +4033,7 @@ STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :적재율 STR_ORDER_CONDITIONAL_RELIABILITY :신뢰도 STR_ORDER_CONDITIONAL_MAX_SPEED :최고 속력 STR_ORDER_CONDITIONAL_AGE :연령 (년) -STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :정비 필요성 +STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :점검 필요성 STR_ORDER_CONDITIONAL_UNCONDITIONALLY :항상 STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :남은 수명 (년) STR_ORDER_CONDITIONAL_MAX_RELIABILITY :최대 신뢰도 @@ -3980,7 +4065,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :가까운 차 STR_ORDER_GO_TO_NEAREST_HANGAR :가까운 격납고로 STR_ORDER_CONDITIONAL :조건부 경로 건너뛰기 STR_ORDER_SHARE :경로 공유하기 -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}선택된 경로 바로 전이나 목록 맨 끝에 새 경로를 삽입합니다. CTRL 키와 함께 누르면, 역에서는 '아무 화물이나 가득 싣기'로, 경유지에서는 '직행'으로, 차량기지에서는 '점검'으로 지정됩니다. '공유된 경로'를 클릭하거나 CTRL 키를 누르면 선택했던 차량과 이 차량의 경로를 공유하게 됩니다. 단순히 클릭하면 그 차량의 경로를 복사하기만 합니다. 차량기지를 경로에 포함시키면 이 차량은 자동 정비를 할 수 없게 됩니다 +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}선택된 경로 바로 전이나 목록 맨 끝에 새 경로를 삽입합니다. CTRL 키와 함께 누르면, 역에서는 '아무 화물이나 가득 싣기'로, 경유지에서는 '직행'으로, 차량기지에서는 '점검'으로 지정됩니다. '공유된 경로'를 클릭하거나 CTRL 키를 누르면 선택했던 차량과 이 차량의 경로를 공유하게 됩니다. 단순히 클릭하면 그 차량의 경로를 복사하기만 합니다. 차량기지를 경로에 포함시키면 이 차량은 자동 점검를 할 수 없게 됩니다 STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}이 경로를 공유하고 있는 모든 차량을 표시합니다. @@ -3988,8 +4073,8 @@ STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}이 경 STR_ORDER_GO_TO_WAYPOINT :완행 경유 {WAYPOINT} STR_ORDER_GO_NON_STOP_TO_WAYPOINT :직행 경유 {WAYPOINT} -STR_ORDER_SERVICE_AT :완행 정비 -STR_ORDER_SERVICE_NON_STOP_AT :직행 정비 +STR_ORDER_SERVICE_AT :완행 점검 +STR_ORDER_SERVICE_NON_STOP_AT :직행 점검 STR_ORDER_NEAREST_DEPOT :가까운 STR_ORDER_NEAREST_HANGAR :가까운 격납고 @@ -4004,6 +4089,7 @@ STR_ORDER_REFIT_STOP_ORDER :({STRING}에서 STR_ORDER_STOP_ORDER :(멈춤) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(이 역을 이용할 수 없음){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(자동) @@ -4248,6 +4334,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :상위 버전 STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :파일을 읽을 수 없습니다 STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :파일을 쓸 수 없습니다 STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :데이터 무결성 검사에 실패하였습니다 +STR_GAME_SAVELOAD_ERROR_PATCHPACK :수정된 버전의 게임 저장 파일입니다 STR_GAME_SAVELOAD_NOT_AVAILABLE :<사용 불가능> STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}전차를 지원하지 않는 버전으로 게임이 저장되었습니다. 모든 전차는 제거되었습니다. @@ -4275,6 +4362,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}게임 STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}대형 스크린 샷 STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}스크린 샷의 이미지 크기는 {COMMA} x {COMMA} 픽셀이 될 것입니다. 스크린 샷을 찍는 데에는 시간이 다소 걸릴 수 있습니다. 계속하시겠습니까? +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}높이맵이 '{STRING}' 파일로 성공적으로 저장되었습니다. 가장 높은 지점은 {NUM}입니다. STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}스크린 샷이 '{STRING}'로 저장되었습니다 STR_ERROR_SCREENSHOT_FAILED :{WHITE}스크린 샷을 찍지 못했습니다! @@ -4328,6 +4416,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... 값 STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} 만큼의 돈이 필요합니다 STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}대출금을 갚을 수 없습니다... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}은행에서 빌린 돈은 송금할 수 없습니다... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}이 회사에 돈을 보낼 수 없습니다... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}회사를 인수할 수 없습니다... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}본사를 건설할 수 없습니다... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}이 회사 지분의 25%를 매입할 수 없습니다... @@ -4439,12 +4528,12 @@ STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... 격 STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}차량기지 내에서 정지한 경우에만 개조할 수 있습니다 STR_ERROR_TRAIN_TOO_LONG :{WHITE}열차가 너무 깁니다! -STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}차량을 유턴시킬 수 없습니다... +STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}차량을 뒤집을 수 없습니다... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}여러 대가 연결된 차량은 뒤집을 수 없습니다... STR_ERROR_INCOMPATIBLE_RAIL_TYPES :알맞지 않은 철도 타입입니다 STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}차량을 옮길 수 없습니다... -STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}뒷쪽 기관차는 앞쪽 기관차를 항상 따라다닐 것입니다 +STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}뒷쪽 기관차는 앞쪽 기관차와 항상 붙어있어야 합니다 STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}근처에 있는 차량기지로 가는 길을 찾을 수 없습니다 STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}근처에 있는 차고지를 찾을 수 없습니다 @@ -4454,6 +4543,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :잘못된 차 STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} : 교체된지 너무 오래되었습니다 STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}자동 교체/갱신 규칙이 적용되지 않았습니다 STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(자금 부족) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}새로 교체된 차량이 {0:STRING}{G 0 "을" "를"} 실을 수 없습니다 +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}새로 교체된 차량이 경로 {NUM} 대로 개조될 수 없습니다 # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}불가능한 트랙 조합입니다 @@ -4591,7 +4682,7 @@ STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}이 선 STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}이 항공기는 사용할 수 없는 상태입니다 STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}게임에 차량이 너무 많습니다! -STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}정비 간격 설정을 바꿀 수 없습니다... +STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}점검 간격 설정을 바꿀 수 없습니다... STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... 차량이 파괴되었습니다 @@ -5040,6 +5131,7 @@ STR_FORMAT_BUOY_NAME :{TOWN} 부표 STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} 부표 #{COMMA} STR_FORMAT_COMPANY_NUM :(회사 {COMMA}) STR_FORMAT_GROUP_NAME :그룹 {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} {COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} STR_FORMAT_WAYPOINT_NAME :{TOWN} 경유지 STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN} 경유지 #{COMMA} diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 629e3d90df..bb12707a3c 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -119,18 +119,18 @@ STR_CARGO_PLURAL_TOYS :{G=np}Ludicra STR_CARGO_PLURAL_TOYS.gen :ludicrorum STR_CARGO_PLURAL_TOYS.acc :Ludicra STR_CARGO_PLURAL_TOYS.dat :Ludicris -STR_CARGO_PLURAL_CANDY :{G=np}Bellaria -STR_CARGO_PLURAL_CANDY.gen :bellariorum -STR_CARGO_PLURAL_CANDY.acc :Bellaria -STR_CARGO_PLURAL_CANDY.dat :Bellariis +STR_CARGO_PLURAL_SWEETS :{G=np}Bellaria +STR_CARGO_PLURAL_SWEETS.gen :bellariorum +STR_CARGO_PLURAL_SWEETS.acc :Bellaria +STR_CARGO_PLURAL_SWEETS.dat :Bellariis STR_CARGO_PLURAL_COLA :{G=f}Cola STR_CARGO_PLURAL_COLA.gen :colae STR_CARGO_PLURAL_COLA.acc :Colam STR_CARGO_PLURAL_COLA.dat :Colae -STR_CARGO_PLURAL_COTTON_CANDY :{G=n}Sacchari Xylinum -STR_CARGO_PLURAL_COTTON_CANDY.gen :sacchari xylini -STR_CARGO_PLURAL_COTTON_CANDY.acc :Sacchari Xylinum -STR_CARGO_PLURAL_COTTON_CANDY.dat :Sacchari Xylino +STR_CARGO_PLURAL_CANDYFLOSS :{G=n}Sacchari Xylinum +STR_CARGO_PLURAL_CANDYFLOSS.gen :sacchari xylini +STR_CARGO_PLURAL_CANDYFLOSS.acc :Sacchari Xylinum +STR_CARGO_PLURAL_CANDYFLOSS.dat :Sacchari Xylino STR_CARGO_PLURAL_BUBBLES :{G=fp}Bullae STR_CARGO_PLURAL_BUBBLES.gen :bullarum STR_CARGO_PLURAL_BUBBLES.acc :Bullas @@ -246,18 +246,18 @@ STR_CARGO_SINGULAR_TOY :{G=np}Ludicra STR_CARGO_SINGULAR_TOY.gen :ludicrorum STR_CARGO_SINGULAR_TOY.acc :Ludicra STR_CARGO_SINGULAR_TOY.dat :Ludicris -STR_CARGO_SINGULAR_CANDY :{G=np}Bellaria -STR_CARGO_SINGULAR_CANDY.gen :bellariorum -STR_CARGO_SINGULAR_CANDY.acc :Bellaria -STR_CARGO_SINGULAR_CANDY.dat :Bellariis +STR_CARGO_SINGULAR_SWEETS :{G=np}Bellaria +STR_CARGO_SINGULAR_SWEETS.gen :bellariorum +STR_CARGO_SINGULAR_SWEETS.acc :Bellaria +STR_CARGO_SINGULAR_SWEETS.dat :Bellariis STR_CARGO_SINGULAR_COLA :{G=f}Cola STR_CARGO_SINGULAR_COLA.gen :colae STR_CARGO_SINGULAR_COLA.acc :Colam STR_CARGO_SINGULAR_COLA.dat :Colae -STR_CARGO_SINGULAR_COTTON_CANDY :{G=n}Sacchari Xylinum -STR_CARGO_SINGULAR_COTTON_CANDY.gen :sacchari xylini -STR_CARGO_SINGULAR_COTTON_CANDY.acc :Sacchari Xylinum -STR_CARGO_SINGULAR_COTTON_CANDY.dat :Sacchari Xylino +STR_CARGO_SINGULAR_CANDYFLOSS :{G=n}Sacchari Xylinum +STR_CARGO_SINGULAR_CANDYFLOSS.gen :sacchari xylini +STR_CARGO_SINGULAR_CANDYFLOSS.acc :Sacchari Xylinum +STR_CARGO_SINGULAR_CANDYFLOSS.dat :Sacchari Xylino STR_CARGO_SINGULAR_BUBBLE :{G=fp}Bullae STR_CARGO_SINGULAR_BUBBLE.gen :bullarum STR_CARGO_SINGULAR_BUBBLE.acc :Bullas @@ -421,8 +421,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Eligere STR_TOOLTIP_SORT_CRITERIA :{BLACK}Eligere criteria separandi STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Eligere criteria colandi STR_BUTTON_SORT_BY :{BLACK}Ordinare -STR_BUTTON_LOCATION :{BLACK}Locus -STR_BUTTON_RENAME :{BLACK}Renominare STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Claudere fenestram STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Titulus fenestrae - hunc trahe ut fenestra moveatur @@ -500,6 +498,8 @@ STR_SORT_BY_RANGE :Distantia volat STR_SORT_BY_POPULATION :Numero Incolarum STR_SORT_BY_RATING :Censione +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Ludum intermittere STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Ludum adcelerare @@ -585,7 +585,7 @@ STR_FILE_MENU_EXIT :Exire # map menu STR_MAP_MENU_MAP_OF_WORLD :Orbis tabula -STR_MAP_MENU_EXTRA_VIEW_PORT :Fenestra conspectus additicia +STR_MAP_MENU_EXTRA_VIEWPORT :Fenestra conspectus additicia STR_MAP_MENU_LINGRAPH_LEGEND :Formula graphica onerum cursus STR_MAP_MENU_SIGN_LIST :Index signorum @@ -750,8 +750,8 @@ STR_MONTH_DEC :Decembris # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Clavis STR_GRAPH_KEY_TOOLTIP :{BLACK}Monstrare formularum clavem -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -1065,7 +1065,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN}: Auctoritas vicinalis nuntiat {STRING} esse societatem unicam cui uno anno licet transportare intra oppidum! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Fenestra conspectus {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Fenestra conspectus {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Mutare conspectum STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Transcribere locum primarium ad hanc fenestram conspectus STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Mutare conspectum primum @@ -1114,8 +1114,6 @@ STR_GAME_OPTIONS_CURRENCY_IRR :Regalis Iranica STR_GAME_OPTIONS_CURRENCY_RUB :Novus Rubelus Russicus (RUB) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehicula Viaria -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Eligere latus viae gubernandi STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Gubernantur sinistro STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Gubernantur dextro @@ -1167,6 +1165,8 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Resoluti STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Eligere resolutio scrinii adhibenda STR_GAME_OPTIONS_RESOLUTION_OTHER :alia + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Magnitudo interfaciei STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Eligere magnitudinem interfaciei adhibendam @@ -1181,6 +1181,8 @@ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Simplex STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Duplex STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quadruplex + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Fundamentum graphicum STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Eligere fundamentum graphicum adhibendum STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fascicul{P us i} absen{P s tes}/corrupt{P us i} @@ -1356,8 +1358,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Sinere calamita STR_CONFIG_SETTING_CITY_APPROVAL :Quamdiu auctoritas vicinalis patitur malas actiones a societatibus: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Eligere patientiam auctoritatis vicinalis - quomodo venia eius afficitur a sonito et detrimento vicinitatis. Nimis malis actionibus, auctoritates vetant stationes struere, aedificia viasque removere -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Altitudo tabulae maxima: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Eligere altitudinem montium maximam in tabula STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Non licet hanc altitudinem eligere. Unus pluresve mons in tabula altior est STR_CONFIG_SETTING_AUTOSLOPE :Sinere terram plasmare sub aedificia, vias, etc.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Sinere terram plasmare sub aedificia et vias; tum necesse non est aedificia viasve removere @@ -1719,8 +1719,6 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completa STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Ephemeris colorata apparet anno: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Eligere annum in quo nuntia periodicorum colorata apparet. Antea, nuntia nigra albaque sunt STR_CONFIG_SETTING_STARTING_YEAR :Annus initii: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Sinere oeconomiam teretem esse (i.e. plures ac minores mutationes): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Electa, productio industriarum saepius mutat, et minores per gradus. Sed haec electio nihil affert si industriae apparatae sunt a NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Sinere mercari sortes societatum: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Sinere mercari sortes a societatibus. Sortes societatum satis aetatis modo mercari licet STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Centesimae partes lucri pendenda in translatione: {STRING} @@ -1770,9 +1768,6 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linearis STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Positio arborum in ludo: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Quomodo arbores apparent intra ludum. Forsitan industriae afficiuntur quibus necesse sunt arbores, e.g. castra lignatorum -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Nulla {RED}(rumpit castra lignatorum) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Modo in silvis plivualibus -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Ubique STR_CONFIG_SETTING_TOOLBAR_POS :Locus primariae arcae instrumentorum: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Locus horizontalis arcae instrumentorum primariae apud apicem fenestrae @@ -1928,6 +1923,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... negl STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Memoria deest STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Non potuit collocare {BYTES} promptuarii spiritus. Promptuarium spiritus minuitur ad {BYTES}. Haec minuit effectum OpenTTD. Conare removere graphicas 32bpp ut desideria memoriae minuatur +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1971,18 +1968,9 @@ STR_INTRO_TRANSLATION :{BLACK}In hac i # Quit window STR_QUIT_CAPTION :{WHITE}Exire -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Esne certus te velle exire OpenTTD et redire ad {STRING}? STR_QUIT_YES :{BLACK}Ita STR_QUIT_NO :{BLACK}Non -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Relinquere Ludum STR_ABANDON_GAME_QUERY :{YELLOW}Esne certus te velle ludum relinquere? @@ -1991,7 +1979,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Esne ce # Cheat window STR_CHEATS :{WHITE}Tricae STR_CHEATS_TOOLTIP :{BLACK}Quadrum signi plenum indicat trica iam a te usa est -STR_CHEATS_WARNING :{BLACK}Cave! Competitores tuas falsurus es! Memento tantam infamiam memoria omnium in aeternum teneri! STR_CHEAT_MONEY :{LTBLUE}Augere pecuniam {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Ludens es in loco societatis: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magica machina aggerandi (removet industrias, obiecta immobilia): {ORANGE}{STRING} @@ -2103,10 +2090,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mutare f # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Modus Plurium Lusorum -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Ostensum -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Eligere servatrum ostensum (interretis) aut non ostensum (LAN) -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Non -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ita STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nomen lusoris: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Hoc est nomen tuum aliis lusoribus visibile @@ -2147,8 +2130,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Ludum iu STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Servatrum instaurare STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Iterum arcessere indicia servatri -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Servatrum quaerere -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Quarere servatrum in rete STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Addere servatrum STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Addit servatrum indici quod semper inspicetur si ludus activus insit STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Servatrum incohare @@ -2165,6 +2146,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Hoc ludi STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Elige tesseram STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Custodire tessera ludum tuum, si non vis publicos iungere +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Ostensum +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Eligere servatrum ostensum (interretis) aut non ostensum (LAN) STR_NETWORK_START_SERVER_UNADVERTISED :Non STR_NETWORK_START_SERVER_ADVERTISED :Ita STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} clien{P s tes} @@ -2278,7 +2261,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Societas Nova # Network client list STR_NETWORK_CLIENTLIST_KICK :Dimittere STR_NETWORK_CLIENTLIST_BAN :Expellere -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Dare pecuniam STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Ad omnes loqui STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Ad societatem loqui STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Ad clientem loqui @@ -2287,8 +2269,6 @@ STR_NETWORK_SERVER :Servatrum STR_NETWORK_CLIENT :Cliens STR_NETWORK_SPECTATORS :Spectatores -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Inscribe quantitatem pecuniae dandam - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Relinquere tesseram inscriptam STR_COMPANY_PASSWORD_OK :{BLACK}Dare novam tesseram societati @@ -2388,8 +2368,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} sp STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} novam societatem incipit (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} ludum disiungit ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} nomen suum mutat ad {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} tuae societati largitur {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Largiris {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Servatrum iam clausum est STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Servatrum resumit...{}Maneas... @@ -2476,6 +2454,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ita, arcessere graphica STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Non, OpenTTD exire + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Optiones Perluciditatis STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Mutare perluciditatem signorum. Ctrl+Preme ut figatur (non mutabitur globulo perluciditatem mutandi presso) @@ -2517,6 +2496,8 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Struere STR_JOIN_WAYPOINT_CAPTION :{WHITE}Iungere interlocum STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Struere discretum interlocum +# Generic toolbar + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Constructio Ferriviarum STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Constructio Electricarum Ferriviarum @@ -2704,7 +2685,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Magnitud STR_OBJECT_CLASS_LTHS :Phari STR_OBJECT_CLASS_TRNS :Emissoria -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Arbores STR_PLANT_TREE_TOOLTIP :{BLACK}Eligere arborem serendam. Si tegula iam arborem habet, plures arbores fortuitas addentur (forsitan non idem typus arboris) STR_TREES_RANDOM_TYPE :{BLACK}Arbor fortuita @@ -2959,14 +2940,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Numerus oppidorum: STR_MAPGEN_DATE :{BLACK}Dies: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Numerus industriarum: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Altitudo tabulae maxima: -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Augere maximam altitudinem montium in tabula unum gradum -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Minuere maximam altitudinem montium in tabula unum gradum -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Altitudo nivis lineae: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Tollere altitudinem lineae nivis -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Inclinere altitudinem lineae nivis STR_MAPGEN_LAND_GENERATOR :{BLACK}Generatrum terrae: -STR_MAPGEN_TREE_PLACER :{BLACK}Algorithmus arbores ponendi: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Typus terrae: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Magnitudo maris: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Numerus fluviorum: @@ -2991,8 +2965,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nomen ta STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Magnitudo: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Mutare altitudinem tabulae maximam -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Mutare altitudinem lineae nivis STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Mutare annum initii # SE Map generation @@ -3280,13 +3252,10 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Largiri STR_GOALS_CAPTION :{WHITE}{COMPANY} Proposita STR_GOALS_SPECTATOR_CAPTION :{WHITE}Proposita Universalia STR_GOALS_SPECTATOR :Proposita universalia -STR_GOALS_GLOBAL_TITLE :{BLACK}Proposita universalia: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nullae - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Non applicabiles - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Proposita Societatis: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Preme in propositum ut conspectus moveatur supra industriam/oppidum/tegulam. Ctrl+Preme ut nova fenestra conspectus aperiatur supra industriam/oppidum/tegulam # Goal question window @@ -3842,10 +3811,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Facere u # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Movere conspectum supra hoc tramen. Ctrl+Preme ut conspectus tramen sequatur -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Movere conspectum supra hoc vehiculum. Ctrl+Preme ut conspectus vechiculum sequatur -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Movere conspectum supra hanc navem. Ctrl+Preme ut conspectus navem sequatur -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Movere conspectum supra hoc aeroplanum. Ctrl+Preme ut conspectus aeroplanum sequatur STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mittere tramen ad receptaculum. Ctrl+Preme ut modo ministretur STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mittere vehiculum ad receptaculum. Ctrl+Preme ut modo ministretur @@ -3877,10 +3842,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Monstrar STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Monstrare indicia navis STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Monstrare indicia aeroplani -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Actio traminis currens - preme ut tramen sistatur/incohatur. Ctrl+Preme ut conspectus movetur ad destinatum -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Actio vehiculi currens - preme ut vehiculum sistatur/incohatur. Ctrl+Preme ut conspectus movetur ad destinatum -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Actio navis currens - preme ut navis sistatur/incohatur. Ctrl+Preme ut conspectus movetur ad destinatum -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Actio aeroplani currens - preme ut aeroplanum sistatur/incohatur. Ctrl+Preme ut conspectus movetur ad destinatum + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Onerans / Exonerans diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 61a80d6908..213635648b 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -50,9 +50,9 @@ STR_CARGO_PLURAL_WHEAT :Kvieši STR_CARGO_PLURAL_RUBBER :Kaučuks STR_CARGO_PLURAL_SUGAR :Cukurs STR_CARGO_PLURAL_TOYS :Rotaļlietas -STR_CARGO_PLURAL_CANDY :Saldumi +STR_CARGO_PLURAL_SWEETS :Saldumi STR_CARGO_PLURAL_COLA :Kola -STR_CARGO_PLURAL_COTTON_CANDY :Cukurvate +STR_CARGO_PLURAL_CANDYFLOSS :Cukurvate STR_CARGO_PLURAL_BUBBLES :Burbuļi STR_CARGO_PLURAL_TOFFEE :Īriss STR_CARGO_PLURAL_BATTERIES :Baterijas @@ -84,9 +84,9 @@ STR_CARGO_SINGULAR_WHEAT :Kvieši STR_CARGO_SINGULAR_RUBBER :Kaučuks STR_CARGO_SINGULAR_SUGAR :Cukurs STR_CARGO_SINGULAR_TOY :Rotaļlieta -STR_CARGO_SINGULAR_CANDY :Saldumi +STR_CARGO_SINGULAR_SWEETS :Saldumi STR_CARGO_SINGULAR_COLA :Kola -STR_CARGO_SINGULAR_COTTON_CANDY :Cukurvate +STR_CARGO_SINGULAR_CANDYFLOSS :Cukurvate STR_CARGO_SINGULAR_BUBBLE :Burbuļi STR_CARGO_SINGULAR_TOFFEE :Īriss STR_CARGO_SINGULAR_BATTERY :Baterijas @@ -196,6 +196,7 @@ STR_COLOUR_DEFAULT :Noklusējuma STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}jūdzes stundā STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s +STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}lauciņi/diena STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}ZS STR_UNITS_POWER_METRIC :{COMMA}{NBSP}ZS @@ -235,8 +236,6 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Izvēlē STR_TOOLTIP_SORT_CRITERIA :{BLACK}Izvēlēties kārtošanas pazīmes STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Izvēlēties filtrēšanas pazīmes STR_BUTTON_SORT_BY :{BLACK}Kārtot pēc -STR_BUTTON_LOCATION :{BLACK}Atrašanās vieta -STR_BUTTON_RENAME :{BLACK}Pārdēvēt STR_BUTTON_CATCHMENT :{BLACK}Pārklājums STR_TOOLTIP_CATCHMENT :{BLACK}Pārslēgt pārklājuma laukuma rādīšanu @@ -316,6 +315,15 @@ STR_SORT_BY_CARGO_CAPACITY :kravnesības STR_SORT_BY_RANGE :apgabala STR_SORT_BY_POPULATION :iedzīvotāju skaita STR_SORT_BY_RATING :vērtējuma +STR_SORT_BY_NUM_VEHICLES :Autotransporta līdzekļu skaits +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Kopējā peļņa pagājušajā gadā +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Kopējā peļņa šogad +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Vidējā peļņa iepriekšējā gadā +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Vidējā peļņa šajā gadā + +# Group by options for vehicle list +STR_GROUP_BY_NONE :Nav +STR_GROUP_BY_SHARED_ORDERS :Koplietojamie rīkojumi # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzēt spēli @@ -404,7 +412,7 @@ STR_FILE_MENU_EXIT :Iziet # map menu STR_MAP_MENU_MAP_OF_WORLD :Pasaules karte -STR_MAP_MENU_EXTRA_VIEW_PORT :Papildu skatvieta +STR_MAP_MENU_EXTRA_VIEWPORT :Papildu skatvieta STR_MAP_MENU_LINGRAPH_LEGEND :Kravu plūsmas apzīmējumi STR_MAP_MENU_SIGN_LIST :Zīmju saraksts @@ -570,8 +578,8 @@ STR_MONTH_DEC :Decembris # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Apzīmējumu atslēga STR_GRAPH_KEY_TOOLTIP :{BLACK}Diagrammās rādīt apzīmējumu atslēgas -STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} -STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} +STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} +STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COMMA} @@ -741,6 +749,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Nelīdzena zeme STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Zālāju zeme STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Kaila zeme +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT} {BLACK} Lietus mežs STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Lauki STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Koki STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Akmeņi @@ -772,6 +781,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Rādīt STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Rādīt pēdējo ziņojumu vai avīzes rakstu STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * PAUZE * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE} * * PAUZE (gaida saites diagrammas atjaunināšanu) * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOMĀTISKĀ SAGLABĀŠANA STR_STATUSBAR_SAVING_GAME :{RED}* * SPĒLE TIEK SAGLABĀTA * * @@ -886,7 +896,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN} vietējā pašvaldība panāk vienošanos ar {STRING} par pārvadājumu izņēmuma tiesībām uz vienu gadu! # Extra view window -STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Skatvieta {COMMA} +STR_EXTRA_VIEWPORT_TITLE :{WHITE}Skatvieta {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Mainīt skatvietu STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopēt galvenā skata atrašanās vietu uz šo skatvietu STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Mainīt galveno skatu @@ -937,10 +947,11 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksikas peso ( STR_GAME_OPTIONS_CURRENCY_NTD :Jaunais Taivānas dolārs (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Ķīnas juaņa (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :Honkongas dolārs (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :Indijas rūpija (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Indonēzijas rūpija (IDR) +STR_GAME_OPTIONS_CURRENCY_MYR :Malaizijas Ringits (MYR) ############ end of currency region -STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Autotransporta līdzekļi -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Ceļa braucamās puses izvēle STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Brauc pa kreiso pusi STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Brauc pa labo pusi @@ -992,9 +1003,12 @@ STR_GAME_OPTIONS_RESOLUTION :{BLACK}Ekrāna STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Ekrāna izšķirtspējas izvēle STR_GAME_OPTIONS_RESOLUTION_OTHER :Cita + + STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Lietotāja saskarnes lielums STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Lietotāja saskarnes elementu lieluma izvēle +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(automātiski noteikt) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Parasts STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Divkāršs STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Četrkāršs @@ -1002,10 +1016,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Četrkāršs STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Fonta izmērs STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Izvēlieties saskarnes fonta izmēru +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(automātiski noteikt) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normāls STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Divkāršs izmērs STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Četrkāršs izmērs + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Pamata grafikas kopa STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Atlasīt lietošanai pamata grafikas kopu STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} iztrūkstošs/bojāts fail{P s i ""} @@ -1181,8 +1198,6 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Pārslēgt kata STR_CONFIG_SETTING_CITY_APPROVAL :Pilsētu domju attieksme pret platības pārstrukturēšanu: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Izvēlieties, cik lielā mērā trokšņi un vides bojājumi ietekmē uzņēmuma reitingu un turpmākās būvniecības darbības viņu teritorijā -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maksimālais kartes augstums: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Uzstādīt maksimālo atļauto kalnu augstumu kartē STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Jūs nevarat izmantot šo maksimālo kartes augstumu. Vismaz viens kalns uz kartes ir augstāks. STR_CONFIG_SETTING_AUTOSLOPE :Atļaut ainavas veidošanu zem ekām, ceļiem, utt. (automāt. nogāzes): {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Atļauj ainavas veidošanu zem ekām un ceļiem bez to nojaukšanas @@ -1441,6 +1456,12 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Būvniecības r STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Pēc lietošanas patur atvērtus tiltu, tuneļu un citus būvniecības rīkus STR_CONFIG_SETTING_EXPENSES_LAYOUT :Grupēt izdevumu sadaļas uzņēmuma finanšu informācijas logā: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Noteikt uzņēmuma izdevumu loga izkārtojumu +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Automātiski noņemt signālus dzelzceļa būvniecības laikā: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Automātiski noņemiet signālus dzelzceļa būvniecības laikā, ja signāli ir uz ceļa. Ņemiet vērā, ka tas var izraisīt vilcienu avārijas. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Ātrās pārsniegšanas ātruma ierobežojums: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Ierobežojiet spēles ātrumu, kad ir iespējota ātrā spēles gaita. 0 = nav ierobežojumu (tik ātri, cik ļauj jūsu dators). Vērtības, kas zemākas par 100%, palēnina spēli. Augšējā robeža ir atkarīga no jūsu datora specifikācijas un var atšķirties atkarībā no spēles. +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% standarta spēles ātrums +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Bez ierobežojumiem (tik ātri, cik ļauj jūsu dators) STR_CONFIG_SETTING_SOUND_TICKER :Jaunumu josla: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Atskaņot apkopotu jaunumu ziņojumu skaņu @@ -1554,8 +1575,11 @@ STR_CONFIG_SETTING_ENDING_YEAR :Vērtēšanas b STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Spēles beigas gads (tiek izmantots rezultāta noteikšanai). Šī gada beigās uzņēmuma rezultāti tiek ierakstīti un uz ekrāna tiek parādīti labākie rezultāti, bet spēlētāji var turpināt spēlēt arī pēc šī datuma.{}Ja tas ir norādīts pirms spēles sākuma datuma, labākie rezultāti nekad netiek parādīti. STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nekad -STR_CONFIG_SETTING_SMOOTH_ECONOMY :Atļaut vienmērīgas izmaiņas ekonomikā: {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Ja ieslēgts, ražošanas izmaiņas notiek biežāk un ar mazākiem soļiem. Šim iestatījumam parasti nav ietekmes, ja ražotņu veidi ir ieviesti ar NewGRF +STR_CONFIG_SETTING_ECONOMY_TYPE :Ekonomikas tips: {STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Vienmērīga ekonomika liek mainīt ražošanas apjomus biežāk un mazākos soļos. Saldēta ekonomika aptur ražošanas izmaiņas un nozaru slēgšanu. Šim iestatījumam var nebūt ietekmes, ja nozares veidus nodrošina NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Orģināls +STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Gluds +STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Saldēts STR_CONFIG_SETTING_ALLOW_SHARES :Atļaut akciju pirkšanu no citiem uzņēmumiem: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ja iespējots, ir atļauts pirkt un pārdodot uzņēmumu akcijas. Akcijas būs pieejamas tikai atbilstošu vecumu sasniegušiem uzņēmumiem STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimālais uzņēmuma vecums, lai tirgotos ar akcijām: {STRING} @@ -1607,9 +1631,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineārs STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Koku izvietojums spēlē: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Vadīt nejaušu koku parādīšanos spēles laikā. Tas var ietekmēt no kokaudzēšanas atkarīgas ražotnes, piemēram kokzāģētavas -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :nav {RED}(nedarbosies kokzāģētavas) -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :tikai lietusmežos -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :visur +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Augt, bet neizplatās {RED} (salauž kokzāģētavas) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Aug, bet izplatās tikai lietus mežos +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Aug un izplatās visur +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Augt, bet neizplatās {RED} (salauž kokzāģētavas) STR_CONFIG_SETTING_TOOLBAR_POS :Galvenās rīkjoslas novietojums: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Galvenās rīkjoslas horizontālais novietojums ekrāna augšējā daļā @@ -1676,6 +1701,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vai lietotāja STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :impērijas, britu (jūdzes stundā) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :metriskās (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI, starptautiskās (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Spēles vienības (lauciņi/dienas) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Transportlīdzekļu jaudas mērvienības: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Vai lietotāja saskarnē rāda transporta līdzekļa jaudu, rādīt norādītajās mērvienībās @@ -1767,6 +1793,8 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... igno STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Nepietiek atmiņas STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Neizdevās piešķirt {BYTES} spraitu kešam. Spraitu kešs tika samazināts uz {BYTES}. Tas samazinās OpenTTD veiktspēju. Lai samazinātu prasības pret atmiņu, varat mēģināt izslēgt 32bpp grafiku un/vai tuvināšanas līmeņus +# Video initalization errors + # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1810,18 +1838,10 @@ STR_INTRO_TRANSLATION :{BLACK}Šim tul # Quit window STR_QUIT_CAPTION :{WHITE}Iziet -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Vai jūs tiešām vēlaties iziet no OpenTTD un atgriezties uz {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Vai esat pārliecināts ka vēlaties iziet no OpenTTD? STR_QUIT_YES :{BLACK}Jā STR_QUIT_NO :{BLACK}Nē -# Supported OSes -STR_OSNAME_WINDOWS :Windows -STR_OSNAME_UNIX :Unix -STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_HAIKU :Haiku -STR_OSNAME_OS2 :OS/2 -STR_OSNAME_SUNOS :SunOS - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Pamest spēli STR_ABANDON_GAME_QUERY :{YELLOW}Vai tiešām vēlaties pamest šo spēli? @@ -1830,7 +1850,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Vai tie # Cheat window STR_CHEATS :{WHITE}Blēdības STR_CHEATS_TOOLTIP :{BLACK}Atzīmētās rūtiņas norāda uz to, vai esat jau izmantojis šo blēdību -STR_CHEATS_WARNING :{BLACK}Brīdinājums! Jūs grasāties būt neuzticams saviem spēles biedriem, sāncenšiem. Iegaumējiet, ka šādu negodu viņi atcerēsies mūžīgi +STR_CHEATS_NOTE :{BLACK}Piezīme: Šo iestatījumu lietojumus tiks ierakstīs arī savegame STR_CHEAT_MONEY :{LTBLUE}Palielināt naudas līdzekļus par {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spēlēt kā uzņēmumam: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Burvju buldozers (nojauc ražotnes, nepārvietojamus objektus): {ORANGE}{STRING} @@ -1942,10 +1962,6 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mainīt # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Vairākspēlētāju spēle -STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Izsludināt -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Izvēlieties starp reklamēto (interneta) un nereklamēto (lokālā tīkla, LAN) spēli -STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nē -STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Jā STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spēlētāja vārds: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Pēc šā vārda jūs atpazīs citi spēlētāji @@ -1986,8 +2002,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Pievieno STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Atsvaidzināt serveri STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Atsvaidzināt servera informāciju -STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Atrast serveri -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Meklēt serveri tīklā +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :Meklēt internetā +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Meklēt publiskos serverus internetā +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Meklēt LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Meklēt serverus lokālajā tīklā STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Pievienot serveri STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Pievienot serveri sarakstam, kurš vienmēr tiks pārbaudīts vai tajā nav palaistas spēles STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Palaist serveri @@ -2004,6 +2022,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Spēles STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Uzstādīt paroli STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Aizsargā jūsu spēli ar paroli, ja nevēlaties lai tā būtu publiski pieejama +STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Izsludināt +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Izvēlieties starp reklamēto (interneta) un nereklamēto (lokālā tīkla, LAN) spēli STR_NETWORK_START_SERVER_UNADVERTISED :Nē STR_NETWORK_START_SERVER_ADVERTISED :Jā STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} spēlētāj{P s i u} @@ -2117,7 +2137,6 @@ STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Jauns uzņēmum # Network client list STR_NETWORK_CLIENTLIST_KICK :Izmest STR_NETWORK_CLIENTLIST_BAN :Aizliegt -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Iedot naudu STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Runāt ar visiem STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Runāt ar uzņēmumu STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privāts ziņojums @@ -2126,8 +2145,6 @@ STR_NETWORK_SERVER :Serveris STR_NETWORK_CLIENT :Spēlētājs STR_NETWORK_SPECTATORS :Novērotāji -STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Ievadiet cik daudz naudas vēlaties dot - # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Nesaglabāt ievadīto paroli STR_COMPANY_PASSWORD_OK :{BLACK}Piešķirt uzņēmumam jaunu paroli @@ -2214,11 +2231,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Spēle joprojā STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spēle joprojām pauzēta ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spēle joprojām pauzēta ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spēle vēl aizvien ir pauzēta ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Spēle joprojām pauzēta ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spēle atsākta ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :spēlētāju skaits STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :savieno spēlētājus STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuālā STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spēles skripts +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :gaida uz saišu grafika atjaunošanu ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :aizeju STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} ir pievienojies spēlei @@ -2228,8 +2247,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ir STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ir nodibinājis jaunu uzņēmumu (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} ir pametis spēli ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} ir nomainījis savu nosaukumu uz {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} iedeva jūsu uzņēmumam {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Jūs iedevāt {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} iedeva {2:CURRENCY_LONG} iekš {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Serveris beidza sesiju STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Serveris pārstartējas...{}Lūdzu uzgaidiet... STR_NETWORK_MESSAGE_KICKED :*** {STRING} tika izmests. Iemesls: ({STRING}) @@ -2307,6 +2325,7 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Jā, lejupielādēt grafiku STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nē, iziet no OpenTTD + # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Caurspīdības opcijas STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Pārslēgt zīmju caurspīdību. Ctrl+klikšķis lai slēgtu @@ -2348,6 +2367,9 @@ STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Būvēt STR_JOIN_WAYPOINT_CAPTION :{WHITE}Pievienot pieturas punktu STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Uzbūvēt jaunu maršruta punktu +# Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Atspējots, jo pašlaik šai infrastruktūrai nav pieejami transportlīdzekļi + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Dzelzceļa būvniecība STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektrificētā dzelzceļa būvniecība @@ -2535,13 +2557,19 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Izmērs: STR_OBJECT_CLASS_LTHS :Bākas STR_OBJECT_CLASS_TRNS :Raidītāji -# Tree planting window (last two for SE only) +# Tree planting window (last eight for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Koki STR_PLANT_TREE_TOOLTIP :{BLACK}Izvēlēties koka veidu stādīšanai. Ja lauciņš jau ir koks, tas pievienos vairāk jauktu veidu kokus neatkarīgi no izvēlētā veida STR_TREES_RANDOM_TYPE :{BLACK}Nejauši izvēlēta veida koki STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Izvietot nejaušus kokus. Shift pārslēdz būve/rādīt izmaksu tāmi STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Nejauši koki STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Stādīt nejaušus kokus visā ainavā +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normāls +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Stādiet atsevišķus kokus, velkot pāri ainavai. +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Birze +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Stādiet mazus mežus, velkot pāri ainavai. +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Mežs +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Stādiet lielos mežus, velkot pāri ainavai. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Zemes radīšana @@ -2592,12 +2620,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Nejaušs # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Finansēt jaunu ražotni STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Izvēlēties no saraksta atbilstošu ražotni -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Daudz nejauši izveidotu ražotņu +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Izveidot nejaušas nozares STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Pārklāt karti ar nejauši izvietotām ražotnēm +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Izveidot nejaušas nozares +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW} Vai tiešām vēlaties izveidot daudzas nejaušas nozares? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Izmaksā: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Pētīt STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Būvēt STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Finansēt +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Noņemt visas nozares +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK} Noņemt visas kartē pašlaik esošās nozares +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE} Noņemt visas nozares +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Vai tiešām vēlaties noņemt visas industrijas? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Ražotnes '{STRING}' kravu ķēde @@ -2618,6 +2652,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Izvēlē # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Zemes platības informācija +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK} Centrējiet galveno skatu uz lauciņa atrašanās vietu. Ctrl + klikšķis atver jaunu skatu logu lauciņa atrašanās vietā STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Notīrīšanas izmaksa: {LTBLUE}nav zināma STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Notīrīšanas izmaksa: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Ieņēmumi pēc notīrīšanas: {LTBLUE}{CURRENCY_LONG} @@ -2828,6 +2863,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtra virkne: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Pārrakstīt datni STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Vai tiešām vēlaties pārrakstīt esošās datnes? +STR_SAVELOAD_DIRECTORY :{STRING} (Vietne) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Īpašnieka katalogs) STR_SAVELOAD_OSKTITLE :{BLACK}Ievadīt saglabātās spēles nosaukumu @@ -2839,14 +2876,7 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Pilsētu daudzums: STR_MAPGEN_DATE :{BLACK}Datums: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Ražotņu daudzums: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maksimālais kartes augstums -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Palielināt kalnu maksimālo augstumu kartē par vienu vienību -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Samazināt kalnu maksimālu augstumu kartē par vienu vienību -STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Sniega līnijas augstums -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Paaugstināt sniega līnijas augstumu -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Pazemināt sniega līnijas augstumu STR_MAPGEN_LAND_GENERATOR :{BLACK}Zemes radītājs: -STR_MAPGEN_TREE_PLACER :{BLACK}Koku algoritms: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Apvidus reljefs: STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Jūras līmenis: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Upes: @@ -2871,8 +2901,6 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Augstumu STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Lielums: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Mainīt kartes maksimālo augstumu -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Mainīt sniega līnijas augstumu STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Mainīt sākuma gadu # SE Map generation @@ -3091,6 +3119,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Pārslē # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Labot zīmi +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centrējiet norādes atrašanās vietas galveno skatu. Ctrl + klikšķis atver jaunu skata zīmi uz zīmes atrašanās vietas STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Doties uz nākamo zīmi STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Doties uz iepriekšējo zīmi @@ -3165,20 +3194,17 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Piekuku STR_GOALS_CAPTION :{WHITE}{COMPANY} mērķi STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globālie mērķi STR_GOALS_SPECTATOR :Globālie mērķi -STR_GOALS_GLOBAL_TITLE :{BLACK}Globālie mērķi: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nav - -STR_GOALS_SPECTATOR_NONE :{ORANGE}- Nav attiecināms - STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} -STR_GOALS_COMPANY_TITLE :{BLACK}Uzņēmuma mērķi: STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikšķināt uz mērķa, lai centrētu galveno skatu uz ražotni/pilsētu/lauciņu. Ctrl+klikšķis atver jaunu skatvietu uz ražotni/pilsētu/lauciņu # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Jautājums -STR_GOAL_QUESTION_CAPTION_INFORMATION :Informācija -STR_GOAL_QUESTION_CAPTION_WARNING :Brīdinājums -STR_GOAL_QUESTION_CAPTION_ERROR :Kļūda +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Jautājums +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Informācija +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Brīdinājums +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Kļūda ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Atcelt @@ -3370,6 +3396,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Pārviet STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Pārcelt uzņēmuma centrālo biroju uz citu vietu samaksājot 1% no uzņēmuma vērtības. Shift+klikšķis parāda izmaksu novērtējumu, nemainot biroja atrašanās vietu STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Sīkāk STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Skatīt detalizētāku infrastruktūras uzskaiti +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Iedot naudu +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Iedot naudu šai kompānijai STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Jauna seja STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Izvēlēties jaunu seju vadītājam @@ -3387,6 +3415,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Pārdot STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Uzņēmuma nosaukums STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Vadītāja vārds +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Ievadiet naudas daudzumu, kuru vēlaties atdot STR_BUY_COMPANY_MESSAGE :{WHITE}Mēs meklējam transporta uzņēmumu, kurš vēlētos pārņemt mūsējo.{}{}Vai Jūs vēlaties pirkt {COMPANY} par {CURRENCY_LONG}? @@ -3748,10 +3777,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Automāt # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrēt galveno skatu uz vilcienu. Ctrl+klikšķis sekos vilcienam galvenajā skatā -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrēt galveno skatu uz transportlīdzekli. Ctrl+klikšķis sekos transportlīdzeklim galvenajā skatā -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrēt galveno skatu uz kuģi. Ctrl+klikšķis sekos kuģim galvenajā skatā -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrēt galveno skatu uz lidaparātu. Ctrl+klikšķis sekos lidaparātam galvenajā skatā +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK} Centra galvenais skats uz vilciena atrašanās vietu. Veicot dubultklikšķi, vilcienam sekos galvenais skats. Ctrl + Click atver jaunu skata punktu vilciena atrašanās vietā +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK} Centrēt transportlīdzekļa atrašanās vietas galveno skatu. Veicot dubultklikšķi, galvenais skats sekos transportlīdzeklim. Ctrl + klikšķis atver jaunu skatu uz transportlīdzekļa atrašanās vietu +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Centrēt galveno skatu uz kuģa atrašanās vietas. Dubultais klikšķis sekos kuģim galvenajā skatlaukā. Ctrl+klikšķis atvers jaunu boju kuģa lokācijā +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Centrēt lidmašīnas atrašanās vietas galveno skatu. Veicot dubultklikšķi, galvenajais skats sekos lidmašīnai. Ctrl + klikšķis atver jaunu skatu uz lidmašīnas atrašanās vietu STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Sūtīt vilcienu uz depo. Ctrl+klikšķis - izvēlēties tikai apkopi STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Sūtīt autotransporta līdzekli uz depo. Ctrl+klikšķis - izvēlēties tikai apkopi @@ -3783,10 +3812,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Rādīt STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Rādīt kuģa informāciju STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Rādīt lidaparāta informāciju -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Vilciena pašreizējā darbība - klikšķināt šeit, lai apturētu/palaistu vilcienu. Ctrl+klikšķis, lai ritinātu līdz galamērķim -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Transportlīdzekļa pašreizējā darbība - klikšķināt šeit, lai to apturētu/palaistu. Ctrl+klikšķis, lai ritinātu līdz galamērķim -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Kuģa pašreizējā darbība - klikšķināt šeit, lai apturētu/palaistu kuģi. Ctrl+klikšķis, lai ritinātu līdz galamērķim -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Lidaparāta pašreizējā darbība - klikšķināt šeit, lai apturētu/palaistu lidaparātu. Ctrl+klikšķis, lai ritinātu līdz galamērķim +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Pašreizējā vilciena darbība - noklikšķiniet, lai apturētu/palaist vilcienu +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Pašreizējā transportlīdzekļa darbība - noklikšķiniet, lai apturētu/palaist transportlīdzekli +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Esoša kuģa darbība - spiediet lai apturētu/palaist kuģi +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Pašreizējā lidmašīnas darbība - noklikšķiniet, lai apturētu/palaist lidmašīnu + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK} Centrēt pasūtījuma galamērķa galveno skatu. Ctrl + klikšķis atver jaunu skata punktu pasūtījuma galamērķa atrašanās vietā # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Iekraušana / Izkraušana @@ -4014,6 +4045,7 @@ STR_ORDER_REFIT_STOP_ORDER :(Pielāgot uz { STR_ORDER_STOP_ORDER :(Apstādināt) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Nevar izmantot staciju){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Netieši) @@ -4258,6 +4290,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spēle ir sagla STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Failu nevar nolasīt STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Failā nevar ierakstīt STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Datu integritātes pārbaude neizdevās +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Saglabāšana notiek ar modificētu versiju STR_GAME_SAVELOAD_NOT_AVAILABLE :