diff --git a/.changelog b/.changelog index 8fb098637a..2f7e6941c2 100644 --- a/.changelog +++ b/.changelog @@ -1,20 +1,110 @@ -1.10.3 (2020-08-09) +1.11.0-beta1 (2021-01-22) ------------------------------------------------------------------------ -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) +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) 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..8b9a160d96 --- /dev/null +++ b/.github/workflows/ci-build.yml @@ -0,0 +1,274 @@ +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" + 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 + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + emmake make -j$(nproc) + echo "::endgroup::" + + linux: + name: Linux + + strategy: + fail-fast: false + matrix: + include: + - compiler: clang + cxxcompiler: clang++ + - compiler: gcc + cxxcompiler: g++ + + 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 \ + libfontconfig-dev \ + libicu-dev \ + liblzma-dev \ + liblzo2-dev \ + libsdl1.2-dev \ + libsdl2-dev \ + 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 .. + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + make -j$(nproc) + echo "::endgroup::" + + - name: Test + run: | + cd build + make -j$(nproc) test + + 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 vcpkg (with cache) + uses: lukka/run-vcpkg@v6 + with: + vcpkgDirectory: '/usr/local/share/vcpkg' + doNotUpdateVcpkg: true + vcpkgArguments: 'freetype liblzma lzo' + vcpkgTriplet: '${{ matrix.arch }}-osx' + + - 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" + make -j$(sysctl -n hw.logicalcpu) + echo "::endgroup::" + + - name: Test + run: | + cd build + make -j$(sysctl -n hw.logicalcpu) test + + windows: + name: Windows + + strategy: + fail-fast: false + matrix: + include: + - arch: x86 + - arch: x64 + + runs-on: windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + # "restore-cache" which is done by "run-vcpkg" uses Windows tar. + # A git clone on windows marks a few files as read-only; when Windows tar + # tries to extract the cache over this folder, it fails, despite the files + # being identical. This failure shows up as an warning in the logs. We + # avoid this by simply removing the read-only mark from the git folder. + # In other words: this is a hack! + # See: https://github.com/lukka/run-vcpkg/issues/61 + - name: Remove read-only flag from vcpkg git folder + shell: powershell + run: | + attrib -r "c:\vcpkg\.git\*.*" /s + + - name: Prepare vcpkg (with cache) + uses: lukka/run-vcpkg@v6 + with: + vcpkgDirectory: 'c:/vcpkg' + doNotUpdateVcpkg: true + vcpkgArguments: 'liblzma libpng lzo zlib' + vcpkgTriplet: '${{ matrix.arch }}-windows-static' + + - 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: Build + uses: lukka/run-cmake@v3 + with: + cmakeListsOrSettingsJson: CMakeListsTxtAdvanced + useVcpkgToolchainFile: true + buildDirectory: '${{ github.workspace }}/build' + cmakeAppendedArgs: ' -GNinja' + + - name: Test + shell: bash + run: | + cd ${GITHUB_WORKSPACE}/build + ctest -C Debug 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..81d3cd5b91 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,665 @@ +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 6 -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" + make 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 + 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" + + 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 \ + liblzo2-dev \ + libsdl2-dev \ + libxdg-basedir-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" + make -j$(nproc) package + echo "::endgroup::" + + # Remove the sha256 files CPack generates; we will do this ourself at + # the end of this workflow. + rm -f bundles/*.sha256 + + - 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 + + # The following step can be removed when the build VM is updated with a revision of + # vcpkg dating from roughly 01/01/2021 or later. At that point, `doNotUpdateVcpkg` + # can be set to `true` and the `vcpkgGitCommitId` can be removed. + - name: Update vcpkg + run: | + cd /usr/local/share/vcpkg + git fetch --unshallow + + - name: Prepare vcpkg (with cache) + uses: lukka/run-vcpkg@v6 + with: + vcpkgDirectory: '/usr/local/share/vcpkg' + doNotUpdateVcpkg: false + vcpkgGitCommitId: 2a42024b53ebb512fb5dd63c523338bf26c8489c + vcpkgArguments: 'freetype:x64-osx liblzma:x64-osx lzo:x64-osx freetype:arm64-osx liblzma:arm64-osx lzo:arm64-osx' + + - 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" + make -j$(sysctl -n hw.logicalcpu) tools + echo "::endgroup::" + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - 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" + make -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" + make -j$(sysctl -n hw.logicalcpu) + echo "::endgroup::" + + - name: Build package + run: | + cd build-x64 + + # Combine the `openttd` binaries from each build into a single file + lipo -create -output openttd-universal ../build-*/openttd + mv openttd-universal openttd + + echo "::group::Build" + echo "Running on $(sysctl -n hw.logicalcpu) cores" + make -j$(sysctl -n hw.logicalcpu) package + echo "::endgroup::" + + # Remove the sha256 files CPack generates; we will do this ourself at + # the end of this workflow. + rm -f bundles/*.sha256 + + - 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: 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 + - arch: x64 + - arch: 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 + + # "restore-cache" which is done by "run-vcpkg" uses Windows tar. + # A git clone on windows marks a few files as read-only; when Windows tar + # tries to extract the cache over this folder, it fails, despite the files + # being identical. This failure shows up as an warning in the logs. We + # avoid this by simply removing the read-only mark from the git folder. + # In other words: this is a hack! + # See: https://github.com/lukka/run-vcpkg/issues/61 + - name: Remove read-only flag from vcpkg git folder + shell: powershell + run: | + attrib -r "c:\vcpkg\.git\*.*" /s + + - name: Prepare vcpkg (with cache) + uses: lukka/run-vcpkg@v6 + with: + vcpkgDirectory: 'c:/vcpkg' + doNotUpdateVcpkg: true + vcpkgArguments: 'liblzma libpng lzo zlib' + vcpkgTriplet: '${{ matrix.arch }}-windows-static' + + - name: Build tools + uses: lukka/run-cmake@v3 + with: + cmakeListsOrSettingsJson: CMakeListsTxtAdvanced + useVcpkgToolchainFile: false + buildDirectory: '${{ github.workspace }}/build-host' + buildWithCMakeArgs: '--target tools' + cmakeAppendedArgs: ' -GNinja -DOPTION_TOOLS_ONLY=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo' + + - name: Install MSVC problem matcher + uses: ammaraskar/msvc-problem-matcher@master + + - name: Build (with installer) + if: needs.source.outputs.is_tag == 'true' + uses: lukka/run-cmake@v3 + with: + cmakeListsOrSettingsJson: CMakeListsTxtAdvanced + useVcpkgToolchainFile: true + buildDirectory: '${{ github.workspace }}/build' + cmakeAppendedArgs: ' -GNinja -DOPTION_USE_NSIS=ON -DHOST_BINARY_DIR=${{ github.workspace }}/build-host -DCMAKE_BUILD_TYPE=RelWithDebInfo' + + - name: Build (without installer) + if: needs.source.outputs.is_tag != 'true' + uses: lukka/run-cmake@v3 + with: + cmakeListsOrSettingsJson: CMakeListsTxtAdvanced + useVcpkgToolchainFile: true + buildDirectory: '${{ github.workspace }}/build' + cmakeAppendedArgs: ' -GNinja -DHOST_BINARY_DIR=${{ github.workspace }}/build-host -DCMAKE_BUILD_TYPE=RelWithDebInfo' + + - 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 + needs: + - source + - docs + - linux + - 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: always() && needs.source.result == 'success' && needs.docs.result == 'success' && (needs.linux.result == 'success' || needs.linux.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_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 }}"}' 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..5ae0733bbb 100644 --- a/.ottdrev +++ b/.ottdrev @@ -1 +1 @@ -1.10.3 20200809 0 baf5bf29fa68c908e7033e58465562d22ec97a07 1 1 2020 +1.11.0-beta1 20210122 0 a252679a121a3e989ba76fae29007151fdac26a1 1 1 2021 diff --git a/.release_date b/.release_date index ca9ee6da3c..bfa3fff97b 100644 --- a/.release_date +++ b/.release_date @@ -1 +1 @@ -2020-08-09 17:56 UTC +2021-01-22 10:21 UTC diff --git a/.version b/.version index 587c5f0c73..5caf72196c 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -1.10.3 +1.11.0-beta1 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..d273937a31 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,316 @@ +cmake_minimum_required(VERSION 3.5) + +if(NOT BINARY_NAME) + set(BINARY_NAME openttd) +endif() + +project(${BINARY_NAME}) + +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + message(FATAL_ERROR "In-source builds not allowed. Please run \"cmake ..\" from the bin directory") +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 dir +if(NOT CMAKE_INSTALL_DATADIR) + set(CMAKE_INSTALL_DATADIR "share/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} + -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() + +# 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(PNG) + +if(NOT WIN32) + find_package(Allegro) + find_package(Freetype) + if(NOT APPLE) + find_package(SDL2) + if(NOT SDL2_FOUND) + find_package(SDL) + endif() + find_package(Fluidsynth) + find_package(Fontconfig) + find_package(ICU OPTIONAL_COMPONENTS i18n lx) + else() + find_package(Iconv) + + find_library(AUDIOTOOLBOX_LIBRARY AudioToolbox) + find_library(AUDIOUNIT_LIBRARY AudioUnit) + find_library(COCOA_LIBRARY Cocoa) + endif() +endif() + +if(MSVC) + find_package(Editbin REQUIRED) +endif() + +find_package(SSE) +find_package(Xaudio2) + +find_package(Grfcodec) + +# IPO is only properly supported from CMake 3.9. Despite the fact we are +# CMake 3.5, still enable IPO if we detect we are 3.9+. +if(POLICY CMP0069) + cmake_policy(SET CMP0069 NEW) + include(CheckIPOSupported) + check_ipo_supported(RESULT IPO_FOUND) +endif() + +show_options() + +if(UNIX AND NOT APPLE AND NOT OPTION_DEDICATED) + if(NOT SDL_FOUND AND NOT SDL2_FOUND) + message(FATAL_ERROR "SDL or SDL2 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() +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() + +add_subdirectory(${CMAKE_SOURCE_DIR}/src) +add_subdirectory(${CMAKE_SOURCE_DIR}/media/baseset) + +add_dependencies(openttd + find_version) + +target_link_libraries(openttd + openttd::languages + openttd::settings + 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_SOURCE_DIR}/bin") +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) + +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) +endif() + +if(APPLE) + link_package(Iconv TARGET Iconv::Iconv) + + target_link_libraries(openttd + ${AUDIOTOOLBOX_LIBRARY} + ${AUDIOUNIT_LIBRARY} + ${COCOA_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() + +include(InstallAndPackage) diff --git a/COMPILING.md b/COMPILING.md index 46de5e09e2..145b244753 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -23,7 +23,7 @@ no graphical user interface; you would be building a dedicated server. ## 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 +56,69 @@ 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. -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 -## 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. - -The OpenTTD wiki may provide additional help with: - -- [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) - - -## 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). +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). ## 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..8727594771 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 @@ -306,16 +306,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 276307c33e..0000000000 --- a/Makefile.bundle.in +++ /dev/null @@ -1,221 +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 -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 -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 "$(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)/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..14104e041a 100644 --- a/README.md +++ b/README.md @@ -65,13 +65,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 @@ -116,7 +116,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 +138,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 +146,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 +164,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/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/game/game_testmode.hpp.sq b/bin/ai/compat_1.11.nut similarity index 53% rename from src/script/api/game/game_testmode.hpp.sq rename to bin/ai/compat_1.11.nut index 8b6ab26fef..3081fb58e8 100644 --- a/src/script/api/game/game_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 "GSTestMode"; } - -void SQGSTestMode_Register(Squirrel *engine) -{ - DefSQClass SQGSTestMode("GSTestMode"); - SQGSTestMode.PreRegister(engine); - SQGSTestMode.AddConstructor(engine, "x"); - - SQGSTestMode.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/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/src/script/api/ai/ai_execmode.hpp.sq b/bin/game/compat_1.11.nut similarity index 53% rename from src/script/api/ai/ai_execmode.hpp.sq rename to bin/game/compat_1.11.nut index fa7d8a2c24..3081fb58e8 100644 --- a/src/script/api/ai/ai_execmode.hpp.sq +++ b/bin/game/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_execmode.hpp" -#include "../template/template_execmode.hpp.sq" - - -template <> const char *GetClassName() { return "AIExecMode"; } - -void SQAIExecMode_Register(Squirrel *engine) -{ - DefSQClass SQAIExecMode("AIExecMode"); - SQAIExecMode.PreRegister(engine); - SQAIExecMode.AddConstructor(engine, "x"); - - SQAIExecMode.PostRegister(engine); -} 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..068dad577f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,113 @@ +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/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..772041a42c --- /dev/null +++ b/cmake/CompileFlags.cmake @@ -0,0 +1,164 @@ +# Macro which contains all bits to setup the compile flags correctly. +# +# compile_flags() +# +macro(compile_flags) + if(MSVC) + # 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() + + # "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() + + # Add DPI manifest to project; other WIN32 targets get this via ottdres.rc + list(APPEND GENERATED_SOURCE_FILES "${CMAKE_SOURCE_DIR}/os/windows/openttd.manifest") + 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..4ad9734198 --- /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 ${GRF_NFO_SOURCE_FILES} + DEPENDS ${GRF_PNG_BINARY_FILES} + ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake + 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..3da3438b43 --- /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(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/regression/" "${CMAKE_BINARY_DIR}/ai/" REGRESSION_BINARY_FILE "${REGRESSION_SOURCE_FILE}") + string(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/regression/" "" REGRESSION_SOURCE_FILE_NAME "${REGRESSION_SOURCE_FILE}") + + 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..3c90d2c4e7 --- /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) + +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..b110dbf404 --- /dev/null +++ b/cmake/FindICU.cmake @@ -0,0 +1,64 @@ +#[=======================================================================[.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/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/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake new file mode 100644 index 0000000000..b54c8131ac --- /dev/null +++ b/cmake/InstallAndPackage.cmake @@ -0,0 +1,174 @@ +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_SOURCE_DIR}/bin/ai + ${CMAKE_SOURCE_DIR}/bin/game + ${CMAKE_SOURCE_DIR}/bin/scripts + DESTINATION ${DATA_DESTINATION_DIR} + COMPONENT language_files) + +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() + +# TODO -- Media files +# TODO -- Menu files + +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") +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING.md") +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(NOT OPTION_INSTALL_FHS) + set(CPACK_GENERATOR "TXZ") + 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 "generic") + 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() + + set(CPACK_PACKAGE_FILE_NAME "openttd-#CPACK_PACKAGE_VERSION#-linux-${PLATFORM}-${CPACK_SYSTEM_NAME}") + endif() + +else() + message(FATAL_ERROR "Unknown OS found for packaging; please consider creating a Pull Request to add support for this OS.") +endif() + +include(CPack) 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..df576a98a9 --- /dev/null +++ b/cmake/MSVCFilters.cmake @@ -0,0 +1,38 @@ +# 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("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..c94a193b32 --- /dev/null +++ b/cmake/Options.cmake @@ -0,0 +1,104 @@ +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) + if(UNIX AND NOT APPLE) + 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" ON) + 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 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..7cf60629d9 --- /dev/null +++ b/cmake/scripts/Baseset.cmake @@ -0,0 +1,53 @@ +cmake_minimum_required(VERSION 3.5) + +# +# Create a single baseset meta file with the correct translations. +# + +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..8631284f33 --- /dev/null +++ b/cmake/scripts/CreateGRF.cmake @@ -0,0 +1,44 @@ +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) +execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -p1 ${GRF_SOURCE_FOLDER_NAME}.grf) +execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${GRF_SOURCE_FOLDER_NAME}.grf ${GRF_BINARY_FILE}) diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake new file mode 100644 index 0000000000..c920e6b8c7 --- /dev/null +++ b/cmake/scripts/FindVersion.cmake @@ -0,0 +1,152 @@ +cmake_minimum_required(VERSION 3.5) + +# +# 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(NOT 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..620ed2c2ca --- /dev/null +++ b/cmake/scripts/Regression.cmake @@ -0,0 +1,103 @@ +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}") + +# 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..e64e2d25af --- /dev/null +++ b/cmake/scripts/SquirrelIncludes.cmake @@ -0,0 +1,60 @@ +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) + +# Read all the arguments given to CMake; we are looking for -- and everything +# that follows. Those are our api files. +while(ARGC LESS CMAKE_ARGC) + set(ARG ${CMAKE_ARGV${ARGC}}) + + 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 deleted file mode 100644 index 94b240d3c9..0000000000 --- a/config.lib +++ /dev/null @@ -1,3575 +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 . - -log() { - if [ $1 = "1" ]; then - shift - echo "$@" - else - shift - fi - echo "$@" >> $config_log -} - -set_default() { - ignore_extra_parameters="0" - # We set all kinds of defaults for params. Later on the user can override - # most of them; but if they don't, this default is used. - build="" - host="" - cc_build="" - cc_host="" - cxx_build="" - cxx_host="" - windres="" - strip="" - lipo="" - awk="awk" - pkg_config="pkg-config" - os="DETECT" - cpu_type="DETECT" - config_log="config.log" - prefix_dir="/usr/local" - binary_dir="games" - data_dir="share/games/openttd" - doc_dir="1" - icon_dir="share/pixmaps" - icon_theme_dir="1" - personal_dir="1" - shared_dir="1" - install_dir="/" - man_dir="1" - menu_dir="1" - menu_group="Game;" - menu_name="OpenTTD" - binary_name="openttd" - enable_debug="0" - enable_desync_debug="0" - enable_profiling="0" - enable_lto="0" - enable_dedicated="0" - enable_static="1" - enable_translator="0" - enable_unicode="1" - enable_console="1"; - enable_assert="0" - enable_strip="1" - enable_universal="0" - enable_osx_g5="0" - enable_cocoa_quartz="1" - enable_cocoa_quickdraw="1" - with_osx_sysroot="1" - with_application_bundle="1" - with_menu_entry="1" - with_allegro="1" - with_sdl="1" - with_cocoa="1" - with_zlib="1" - with_lzma="1" - with_lzo2="1" - with_xdg_basedir="1" - with_png="1" - enable_builtin_depend="1" - with_makedepend="0" - with_direct_music="1" - with_xaudio2="1" - with_sort="1" - with_iconv="1" - with_midi="" - with_midi_arg="" - with_fluidsynth="1" - with_freetype="1" - with_fontconfig="1" - with_icu_layout="1" - with_icu_sort="1" - static_icu="0" - with_uniscribe="1" - with_threads="1" - with_distcc="1" - with_ccache="1" - with_nforenum="1" - with_grfcodec="1" - with_sse="1" - - save_params_array=" - build - host - cc_build - cc_host - cxx_build - cxx_host - windres - strip - lipo - awk - pkg_config - os - cpu_type - config_log - prefix_dir - binary_dir - data_dir - doc_dir - icon_dir - icon_theme_dir - man_dir - menu_dir - personal_dir - shared_dir - install_dir - menu_group - menu_name - binary_name - enable_debug - enable_desync_debug - enable_profiling - enable_lto - enable_dedicated - enable_static - enable_translator - enable_unicode - enable_console - enable_assert - enable_strip - enable_universal - enable_osx_g5 - enable_cocoa_quartz - enable_cocoa_quickdraw - with_osx_sysroot - with_application_bundle - with_allegro - with_sdl - with_cocoa - with_zlib - with_lzma - with_lzo2 - with_xdg_basedir - with_png - enable_builtin_depend - with_makedepend - with_direct_music - with_xaudio2 - with_sort - with_iconv - with_midi - with_midi_arg - with_fluidsynth - with_freetype - with_fontconfig - with_icu_layout - with_icu_sort - static_icu - with_uniscribe - with_threads - with_distcc - with_ccache - with_grfcodec - with_nforenum - with_sse - CC CXX CFLAGS CXXFLAGS LDFLAGS CFLAGS_BUILD CXXFLAGS_BUILD LDFLAGS_BUILD PKG_CONFIG_PATH PKG_CONFIG_LIBDIR" -} - -detect_params() { - # Walk over all params from the user and override any default settings if - # needed. This also handles any invalid option. - for p in "$@"; do - if [ -n "$prev_p" ]; then - eval "$prev_p=\$p" - prev_p= - continue - fi - - optarg=`expr "x$p" : 'x[^=]*=\(.*\)'` - - case "$p" in - --help | -h | -\?) showhelp; exit 0;; - - --config-log) prev_p="config_log";; - --config-log=*) config_log="$optarg";; - - --build) prev_p="build";; - --build=*) build="$optarg";; - - --host) prev_p="host";; - --host=*) host="$optarg";; - - --os) prev_p="os";; - --os=*) os="$optarg";; - - --cpu-type) prev_p="cpu_type";; - --cpu-type=*) cpu_type="$optarg";; - - --cc-build) prev_p="cc_build";; - --cc-build=*) cc_build="$optarg";; - --cc-host) prev_p="cc_host";; - --cc-host=*) cc_host="$optarg";; - --cxx-build) prev_p="cxx_build";; - --cxx-build=*) cxx_build="$optarg";; - --cxx-host) prev_p="cxx_host";; - --cxx-host=*) cxx_host="$optarg";; - --windres) prev_p="windres";; - --windres=*) windres="$optarg";; - --awk) prev_p="awk";; - --awk=*) awk="$optarg";; - --pkg-config) prev_p="pkg_config";; - --pkg-config=*) pkg_config="$optarg";; - --strip) prev_p="strip";; - --strip=*) strip="$optarg";; - --lipo) prev_p="lipo";; - --lipo=*) lipo="$optarg";; - - - - # Alias --prefix with --prefix-dir, for compatibility with GNU autotools - --prefix-dir | --prefix) prev_p="prefix_dir";; - --prefix-dir=* | --prefix=*) prefix_dir="$optarg";; - - --binary-dir) prev_p="binary_dir";; - --binary-dir=*) binary_dir="$optarg";; - - --data-dir) prev_p="data_dir";; - --data-dir=*) data_dir="$optarg";; - - --doc-dir) prev_p="doc_dir";; - --doc-dir=*) doc_dir="$optarg";; - - --icon-dir) prev_p="icon_dir";; - --icon-dir=*) icon_dir="$optarg";; - - --icon-theme-dir) prev_p="icon_theme_dir";; - --icon-theme-dir=*) icon_theme_dir="$optarg";; - --without-icon-theme) icon_theme_dir="";; - - --menu-dir) prev_p="menu_dir";; - --menu-dir=*) menu_dir="$optarg";; - --without-menu-entry) menu_dir="";; - - --menu-name) prev_p="menu_name";; - --menu-name=*) menu_name="$optarg";; - - --binary-name) prev_p="binary_name";; - --binary-name=*) binary_name="$optarg";; - - --man-dir) prev_p="man_dir";; - --man-dir=*) man_dir="$optarg";; - - --personal-dir) prev_p="personal_dir";; - --personal-dir=*) personal_dir="$optarg";; - --without-personal-dir) personal_dir="";; - - --shared-dir) prev_p="shared_dir";; - --shared-dir=*) shared_dir="$optarg";; - --without-shared-dir) shared_dir="";; - - --install-dir) prev_p="install_dir";; - --install-dir=*) install_dir="$optarg";; - - - - --menu-group) prev_p="menu_group";; - --menu-group=*) menu_group="$optarg";; - - - - --enable-debug) enable_debug="1";; - --enable-debug=*) enable_debug="$optarg";; - --enable-desync-debug) enable_desync_debug="1";; - --enable-desync-debug=*) enable_desync_debug="$optarg";; - --enable-profiling) enable_profiling="1";; - --enable-profiling=*) enable_profiling="$optarg";; - --enable-lto) enable_lto="1";; - --enable-lto=*) enable_lto="$optarg";; - --enable-ipo) enable_lto="1";; - --enable-ipo=*) enable_lto="$optarg";; - --enable-dedicated) enable_dedicated="1";; - --enable-dedicated=*) enable_dedicated="$optarg";; - --disable-static) enable_static="0";; - --enable-static) enable_static="2";; - --enable-static=*) enable_static="$optarg";; - --disable-translator) enable_translator="0";; - --enable-translator) enable_translator="2";; - --enable-translator=*) enable_translator="$optarg";; - --disable-assert) enable_assert="0";; - --enable-assert) enable_assert="2";; - --enable-assert=*) enable_assert="$optarg";; - --disable-strip) enable_strip="0";; - --enable-strip) enable_strip="2";; - --enable-strip=*) enable_strip="$optarg";; - --disable-universal) enable_universal="0";; - --enable-universal) enable_universal="i386 ppc";; - --enable-universal=*) enable_universal="$optarg";; - --disable-osx-g5) enable_osx_g5="0";; - --enable-osx-g5) enable_osx_g5="2";; - --enable-osx-g5=*) enable_osx_g5="$optarg";; - --disable-unicode) enable_unicode="0";; - --enable-unicode) enable_unicode="2";; - --enable-unicode=*) enable_unicode="$optarg";; - --disable-console) enable_console="0";; - --enable-console) enable_console="2";; - --enable-console=*) enable_console="$optarg";; - - --disable-cocoa-quartz) enable_cocoa_quartz="0";; - --enable-cocoa-quartz) enable_cocoa_quartz="2";; - --enable-cocoa-quartz=*) enable_cocoa_quartz="$optarg";; - --disable-cocoa-quickdraw) enable_cocoa_quickdraw="0";; - --enable-cocoa-quickdraw) enable_cocoa_quickdraw="2";; - --enable-cocoa-quickdraw=*) enable_cocoa_quickdraw="$optarg";; - - --with-allegro) with_allegro="2";; - --without-allegro) with_allegro="0";; - --with-allegro=*) with_allegro="$optarg";; - - --with-sdl) with_sdl="2";; - --without-sdl) with_sdl="0";; - --with-sdl=*) with_sdl="$optarg";; - - --with-cocoa) with_cocoa="2";; - --without-cocoa) with_cocoa="0";; - --with-cocoa=*) with_cocoa="$optarg";; - - --with-zlib) with_zlib="2";; - --without-zlib) with_zlib="0";; - --with-zlib=*) with_zlib="$optarg";; - - --with-lzma) with_lzma="2";; - --without-lzma) with_lzma="0";; - --with-lzma=*) with_lzma="$optarg";; - --with-liblzma) with_lzma="2";; - --without-liblzma) with_lzma="0";; - --with-liblzma=*) with_lzma="$optarg";; - - --with-lzo2) with_lzo2="2";; - --without-lzo2) with_lzo2="0";; - --with-lzo2=*) with_lzo2="$optarg";; - --with-liblzo2) with_lzo2="2";; - --without-liblzo2) with_lzo2="0";; - --with-liblzo2=*) with_lzo2="$optarg";; - - --with-xdg-basedir) with_xdg_basedir="2";; - --without-xdg-basedir) with_xdg_basedir="0";; - --with-xdg-basedir=*) with_xdg_basedir="$optarg";; - --with-libxdg-basedir) with_xdg_basedir="2";; - --without-libxdg-basedir) with_xdg_basedir="0";; - --with-libxdg-basedir=*) with_xdg_basedir="$optarg";; - - --with-png) with_png="2";; - --without-png) with_png="0";; - --with-png=*) with_png="$optarg";; - --with-libpng) with_png="2";; - --without-libpng) with_png="0";; - --with-libpng=*) with_png="$optarg";; - - --with-fluidsynth) with_fluidsynth="2";; - --without-fluidsynth) with_fluidsynth="0";; - --with-fluidsynth=*) with_fluidsynth="$optarg";; - - --with-freetype) with_freetype="2";; - --without-freetype) with_freetype="0";; - --with-freetype=*) with_freetype="$optarg";; - --with-libfreetype) with_freetype="2";; - --without-libfreetype) with_freetype="0";; - --with-libfreetype=*) with_freetype="$optarg";; - - --with-fontconfig) with_fontconfig="2";; - --without-fontconfig) with_fontconfig="0";; - --with-fontconfig=*) with_fontconfig="$optarg";; - --with-libfontconfig) with_fontconfig="2";; - --without-libfontconfig) with_fontconfig="0";; - --with-libfontconfig=*) with_fontconfig="$optarg";; - - --with-icu) with_icu_layout="2";with_icu_sort="2";; - --without-icu) with_icu_layout="0";with_icu_sort="0";; - --with-icu=*) with_icu_layout="$optarg";with_icu_sort="$optarg";; - --with-libicu) with_icu_layout="2";with_icu_sort="2";; - --without-libicu) with_icu_layout="0";with_icu_sort="0";; - --with-libicu=*) with_icu_layout="$optarg";with_icu_sort="$optarg";; - --with-icu-layout) with_icu_layout="2";; - --without-icu-layout) with_icu_layout="0";; - --with-icu-layout=*) with_icu_layout="$optarg";; - --with-icu-sort) with_icu_sort="2";; - --without-icu-sort) with_icu_sort="0";; - --with-icu-sort=*) with_icu_sort="$optarg";; - --static-icu) static_icu="1";; - --static-icu=*) static_icu="$optarg";; - --static-libicu) static_icu="1";; - --static-libicu=*) static_icu="$optarg";; - - --with-uniscribe) with_uniscribe="2";; - --without-uniscribe) with_uniscribe="0";; - --with-uniscribe=*) with_uniscribe="$optarg";; - - --disable-builtin-depend) enable_builtin_depend="0";; - --enable-builtin-depend) enable_builtin_depend="2";; - --enable-builtin-depend=*) enable_builtin_depend="$optarg";; - - --with-makedepend) with_makedepend="2";; - --without-makedepend) with_makedepend="0";; - --with-makedepend=*) with_makedepend="$optarg";; - - --with-direct-music) with_direct_music="2";; - --without-direct-music) with_direct_music="0";; - --with-direct-music=*) with_direct_music="$optarg";; - - --with-xaudio2) with_xaudio2="2";; - --without-xaudio2) with_xaudio2="0";; - --with-xaudio2=*) with_xaudio2="$optarg";; - - --with-sort) with_sort="2";; - --without-sort) with_sort="0";; - --with-sort=*) with_sort="$optarg";; - - --with-iconv) with_iconv="2";; - --without-iconv) with_iconv="0";; - --with-iconv=*) with_iconv="$optarg";; - - --with-midi=*) with_midi="$optarg";; - --with-midi-arg=*) with_midi_arg="$optarg";; - - --without-distcc) with_distcc="0";; - --with-distcc) with_distcc="2";; - --with-distcc=*) with_distcc="$optarg";; - - --without-ccache) with_ccache="0";; - --with-ccache) with_ccache="2";; - --with-ccache=*) with_ccache="$optarg";; - - --without-nforenum) with_nforenum="0";; - --with-nforenum) with_nforenum="2";; - --with-nforenum=*) with_nforenum="$optarg";; - - --without-grfcodec) with_grfcodec="0";; - --with-grfcodec) with_grfcodec="2";; - --with-grfcodec=*) with_grfcodec="$optarg";; - - --without-osx-sysroot) with_osx_sysroot="0";; - --with-osx-sysroot) with_osx_sysroot="2";; - --with-osx-sysroot=*) with_osx_sysroot="$optarg";; - - --without-application-bundle) with_application_bundle="0";; - --with-application-bundle) with_application_bundle="1";; - --with-application-bundle=*) with_application_bundle="$optarg";; - - --without-threads) with_threads="0";; - --with-threads) with_threads="1";; - --with-threads=*) with_threads="$optarg";; - - --without-sse) with_sse="0";; - --with-sse) with_sse="1";; - --with-sse=*) with_sse="$optarg";; - - CC=* | --CC=*) CC="$optarg";; - CXX=* | --CXX=*) CXX="$optarg";; - CFLAGS=* | --CFLAGS=*) CFLAGS="$optarg";; - CXXFLAGS=* | --CXXFLAGS=*) CXXFLAGS="$optarg";; - LDFLAGS=* | --LDFLAGS=*) LDFLAGS="$optarg";; - CFLAGS_BUILD=* | --CFLAGS_BUILD=* | --CFLAGS-BUILD=*) CFLAGS_BUILD="$optarg";; - CXXFLAGS_BUILD=* | --CXXFLAGS_BUILD=* | --CXXFLAGS-BUILD=*) CXXFLAGS_BUILD="$optarg";; - LDFLAGS_BUILD=* | --LDFLAGS_BUILD=* | --LDFLAGS-BUILD=*) LDFLAGS_BUILD="$optarg";; - PKG_CONFIG_PATH=* | --PKG_CONFIG_PATH=* | --PKG-CONFIG-PATH=*) PKG_CONFIG_PATH="$optarg";; - PKG_CONFIG_LIBDIR=* | --PKG_CONFIG_LIBDIR=* | --PKG-CONFIG-LIBDIR=*) PKG_CONFIG_LIBDIR="$optarg";; - - --ignore-extra-parameters) ignore_extra_parameters="1";; - - --* | -*) - if [ "$ignore_extra_parameters" = "0" ]; then - log 1 "Unknown option $p" - exit 1 - else - log 1 "Unknown option $p ignored" - fi - ;; - esac - done - - if [ -n "$prev_p" ]; then - log 1 "configure: error: missing argument to --$prev_p" - exit 1 - fi - - # Clean the logfile - echo "" > $config_log - log 2 "Invocation: $0 $*" -} - -save_params() { - # Here we save all params, so we can later on do an exact redo of this - # configuration, without having the user to re-input stuff - - echo "Running configure with following options:" >> $config_log - echo "" >> $config_log - - configure="$CONFIGURE_EXECUTABLE --ignore-extra-parameters" - for p in $save_params_array; do - eval "v=\"\$$p\"" - p=`echo "$p" | sed 's@_@-@g;s@\n@@g;s@ @\\ @g'` - # Only save those params that aren't empty - configure="$configure --$p=\"$v\"" - done - - echo "$configure" >> $config_log - echo "$configure" > config.cache - echo "" >> $config_log -} - -# Export a variable so tools like pkg-config can see it when invoked. -# If the variable contains an empty string then unset it. -# $1 - name of the variable to export or unset -export_or_unset() { - eval local value=\$$1 - if [ -n "$value" ]; then - export $1; - log 2 "using $1=$value"; - else - unset $1; - log 2 "not using $1"; - fi -} - -check_params() { - # Some params want to be in full uppercase, else they might not work as - # expected.. fix that here - - os=`echo $os | tr '[a-z]' '[A-Z]'` - cpu_type=`echo $cpu_type | tr '[a-z]' '[A-Z]'` - - # Export some variables to be used by pkg-config - # - # PKG_CONFIG_LIBDIR variable mustn't be set if we are not willing to - # override the default pkg-config search path, it mustn't be an empty - # string. If the variable is empty (e.g. when an empty string comes - # from config.cache) then unset it. This way the "don't override" state - # will be properly preserved when (re)configuring. - export_or_unset PKG_CONFIG_PATH - export_or_unset PKG_CONFIG_LIBDIR - - # Check if all params have valid values - - # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HAIKU, SUNOS, CYGWIN, MINGW, and OS2 - if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2)$'`" ]; then - log 1 "configure: error: invalid option --os=$os" - log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2]" - exit 1 - fi - # cpu_type can be either 32 or 64 - if [ -z "`echo $cpu_type | egrep '^(32|64|DETECT)$'`" ]; then - log 1 "configure: error: invalid option --cpu-type=$cpu_type" - log 1 " Available options are: --cpu-type[=DETECT|32|64]" - exit 1 - fi - # enable_debug should be between 0 and 4 - if [ -z "`echo $enable_debug | egrep '^[0123]$'`" ]; then - log 1 "configure: error: invalid option --enable-debug=$enable_debug" - log 1 " Available options are: --enable-debug[=0123]" - exit 1 - fi - - # enable_desync_debug should be between 0 and 3 - if [ -z "`echo $enable_desync_debug | egrep '^[012]$'`" ]; then - log 1 "configure: error: invalid option --enable-desync-debug=$enable_desync_debug" - log 1 " Available options are: --enable-desync-debug[=012]" - exit 1 - fi - - detect_awk - - detect_os - - check_build - check_host - - # Check for universal builds; they only make sense for OSX, so fail if enabled for another OS - if [ "$enable_universal" = "0" ]; then - log 1 "checking universal build... no" - else - if [ "$os" != "OSX" ]; then - log 1 "configure: error: --enable-universal only works on OSX" - exit 1 - fi - log 1 "checking universal build... yes, for: $enable_universal" - fi - - # Already detected by check_build - log 1 "checking build cc... $cc_build" - log 1 "checking host cc... $cc_host" - - check_cxx_build - check_cxx_host - check_windres - if [ "$enable_strip" != "0" ]; then - check_strip - else - log 1 "checking strip... disabled" - fi - check_lipo - - if [ "$enable_builtin_depend" != "0" ]; then - log 1 "checking builtin depend... yes" - makedepend="\$(SRC_OBJS_DIR)/\$(DEPEND)" - else - log 1 "checking builtin depend... no" - fi - - check_makedepend - detect_cputype - detect_sse_capable_architecture - - if [ "$enable_static" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - enable_static="2" - else - enable_static="0" - fi - fi - - if [ "$enable_static" != "0" ]; then - log 1 "checking static... yes" - - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ]; then - log 1 "WARNING: static is only known to work on Windows, and MacOSX" - log 1 "WARNING: use static at your own risk on this platform" - - sleep 5 - fi - else - log 1 "checking static... no" - fi - - if [ "$enable_unicode" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - enable_unicode="2" - else - enable_unicode="0" - fi - fi - - if [ "$enable_unicode" != "0" ]; then - log 1 "checking unicode... yes" - else - log 1 "checking unicode... no" - fi - - # Show what we configured - if [ "$enable_debug" = "0" ]; then - log 1 "using debug level... no" - elif [ "$enable_profiling" != "0" ]; then - log 1 "using debug level... profiling (debug level $enable_debug)" - else - log 1 "using debug level... level $enable_debug" - fi - - if [ "$enable_desync_debug" = "0" ]; then - log 1 "using desync debug level... no" - else - log 1 "using desync debug level... level $enable_desync_debug" - log 1 "WARNING: desync debug functions slow down the game considerably." - log 1 "WARNING: use only when you are instructed to do so" - log 1 " or when you know what you are doing." - - sleep 5 - fi - - if [ "$enable_lto" != "0" ]; then - # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}' - has_lto=`($cxx_build -dumpspecs 2>&1 | grep '\%{flto') || ($cxx_build -help ipo 2>&1 | grep '\-ipo')` - if [ -n "$has_lto" ]; then - log 1 "using link time optimization... yes" - else - enable_lto="0" - log 1 "using link time optimization... no" - log 1 "WARNING: you selected link time optimization but it is not found." - sleep 5 - fi - else - log 1 "using link time optimization... no" - fi - - - if [ "$os" != "OSX" ] && [ "$with_osx_sysroot" != "0" ]; then - if [ "$with_osx_sysroot" = "1" ]; then - with_osx_sysroot="0" - - log 1 "checking OSX sysroot... not OSX, skipping" - else - log 1 "configure: error: --with-osx-sysroot only works if OSX is the target" - exit 1 - fi - fi - - if [ "$with_osx_sysroot" != "0" ]; then - if [ "$enable_universal" = "0" ] && [ "$with_osx_sysroot" != "1" ] && [ "$with_osx_sysroot" != "2" ]; then - # Sysroot manually specified? Check for usability - log 1 "checking OSX sysroot... $with_osx_sysroot" - if ! check_osx_sdk "$with_osx_sysroot"; then - log 1 "Passed sysroot not found/not functional" - exit 1 - fi - else - # If autodetect and no universal, use system default - if [ "$with_osx_sysroot" = "1" ] && [ "$enable_universal" = "0" ]; then - log 1 "checking OSX sysroot... no (use system default)" - else - log 1 "checking OSX sysroot... automatically" - detect_osx_sdk - fi - fi - - if [ -n "$osx_sdk_path" ]; then - if [ "$enable_universal" != "0" ]; then - if [ -z "$osx_sdk_104_path" ]; then - log 1 "WARNING: Could not find a usable 10.4u SDK, the resulting" - log 1 "WARNING: binary will only run on OSX 10.5 or later" - osx_sdk_104_path="$osx_sdk_path" - fi - OSX_SYSROOT="-isysroot $osx_sdk_104_path" - OSX_LD_SYSROOT="-Wl,-syslibroot,$osx_sdk_104_path" - else - OSX_SYSROOT="-isysroot $osx_sdk_path" - OSX_LD_SYSROOT="-Wl,-syslibroot,$osx_sdk_path" - fi - fi - else - if [ "$os" = "OSX" ]; then - log 1 "checking OSX sysroot... no (use system default)" - fi - fi - - detect_allegro - detect_sdl - detect_cocoa - - if [ "$enable_dedicated" != "0" ]; then - log 1 "checking GDI video driver... dedicated server, skipping" - log 1 "checking dedicated... found" - else - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - log 1 "checking GDI video driver... found" - else - log 1 "checking GDI video driver... not Windows, skipping" - fi - - if [ -z "$allegro_config" ] && [ -z "$sdl2_config" ] && [ -z "$sdl_config" ] && [ "$with_cocoa" = 0 ] && [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - log 1 "configure: error: no video driver development files found" - log 1 " If you want a dedicated server use --enable-dedicated as parameter" - exit 1 - else - log 1 "checking dedicated... not selected" - fi - fi - - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - log 1 "checking console application... not Windows, skipping" - elif [ "$enable_console" = "1" ] && [ "$enable_dedicated" != "0" ]; then - log 1 "checking console application... dedicated server, enabled" - enable_console="2" - elif [ "$enable_console" = "1" ]; then - log 1 "checking console application... disabled (only used when forced)" - enable_console="0" - elif [ "$enable_console" = "0" ]; then - log 1 "checking console application... disabled" - else - log 1 "checking console application... enabled" - fi - - log 1 "checking squirrel... found" - SCRIPT_SRC_DIR="$ROOT_DIR/src/3rdparty/squirrel/include" - - if [ "$enable_translator" != "0" ]; then - log 1 "checking translator... debug" - # -t shows TODO items, normally they are muted - strgen_flags="-t" - else - log 1 "checking translator... no" - strgen_flags="" - fi - - if [ "$enable_assert" != "0" ]; then - log 1 "checking assert... enabled" - else - log 1 "checking assert... disabled" - fi - - pre_detect_with_zlib=$with_zlib - detect_zlib - - if [ "$with_zlib" = "0" ] || [ -z "$zlib_config" ]; then - log 1 "WARNING: zlib was not detected or disabled" - log 1 "WARNING: OpenTTD doesn't require zlib, but it does mean that many features" - log 1 "WARNING: (like loading most old savegames/scenarios, loading heightmaps," - log 1 "WARNING: using PNG, or using fonts, ...) will be disabled." - if [ "$pre_detect_with_zlib" = "0" ]; then - log 1 "WARNING: We strongly suggest you to install zlib." - else - log 1 "configure: error: no zlib detected" - log 1 " If you want to compile without zlib use --without-zlib as parameter" - exit - fi - fi - - pre_detect_with_lzma=$with_lzma - detect_lzma - - if [ "$with_lzma" = "0" ] || [ -z "$lzma_config" ]; then - log 1 "WARNING: lzma was not detected or disabled" - log 1 "WARNING: OpenTTD doesn't require lzma, but it does mean that many features" - log 1 "WARNING: (like loading most savegames/scenarios and joining most servers)" - log 1 "WARNING: will be disabled." - if [ "$pre_detect_with_lzma" = "0" ]; then - log 1 "WARNING: We strongly suggest you to install liblzma." - log 1 "configure: error: no liblzma detected" - else - log 1 " If you want to compile without lzma use --without-lzma as parameter" - exit - fi - fi - - pre_detect_with_lzo2=$with_lzo2 - detect_lzo2 - - if [ "$with_lzo2" = "0" ] || [ -z "$lzo2" ]; then - log 1 "WARNING: liblzo2 was not detected or disabled" - log 1 "WARNING: OpenTTD doesn't require liblzo2, but it does mean that" - log 1 "WARNING: loading old savegames/scenarios will be disabled." - if [ "$pre_detect_with_lzo2" = "0" ]; then - log 1 "WARNING: We strongly suggest you to install liblzo2." - else - log 1 "configure: error: no liblzo2 detected" - log 1 " If you want to compile without liblzo2 use --without-liblzo2 as parameter" - exit - fi - fi - - if [ "$with_uniscribe" != "0" ]; then - if [ "$os" != "MINGW" ]; then - if [ "$with_uniscribe" != "1" ]; then - log 1 "configure: error: Uniscribe is only supported on native Win32 targets" - exit 1 - fi - with_uniscribe="0" - - log 1 "checking Uniscribe text layout... not Windows, skipping" - else - log 1 "checking Uniscribe text layout... found" - - # Don't use ICU unless forced. - if [ "$with_icu_layout" = "1" ]; then - with_icu_layout="0" - fi - if [ "$with_icu_sort" = "1" ]; then - with_icu_sort="0" - fi - fi - fi - - detect_xdg_basedir - detect_png - detect_freetype - detect_fontconfig - detect_icu_layout - detect_icu_sort - detect_fluidsynth - - if [ "$with_direct_music" != "0" ]; then - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - if [ "$with_direct_music" != "1" ]; then - log 1 "configure: error: direct-music is only supported on Win32 targets" - exit 1 - fi - with_direct_music="0" - - log 1 "checking direct-music... not Windows, skipping" - else - check_direct_music - fi - fi - - if [ "$with_xaudio2" != "0" ]; then - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - if [ "$with_xaudio2" != "1" ]; then - log 1 "configure: error: xaudio2 is only supported on Win32 targets" - exit 1 - fi - with_xaudio2="0" - - log 1 "checking xaudio2... not Windows, skipping" - else - check_xaudio2 - fi - fi - - detect_sort - - # Suppress language errors when there is a version defined, indicating a release - # It just isn't pretty if any release produces warnings in the languages. - if [ -f "$ROOT_DIR/version" ]; then - lang_suppress="yes" - log 1 "suppress language errors... yes" - else - lang_suppress="" - log 1 "suppress language errors... no" - fi - - if [ "$enable_debug" = "0" ] && [ "$enable_profiling" = "0" ] && [ "$enable_strip" != "0" ]; then - if [ "$os" = "OSX" ]; then - strip_arg="" - elif [ "$os" = "OS2" ]; then - strip_arg="" - # OS2 uses strip via gcc, because it needs to be feed to emxbind - LDFLAGS="$LDFLAGS -s" - elif [ "$os" = "SUNOS" ]; then - # The GNU strip does know -s, the non-GNU doesn't - # So try to detect it (in a bit of an ugly way) - strip_arg="`$strip -s strip.test 2>/dev/null && echo \"-s\"`" - else - strip_arg="-s" - fi - - log 1 "checking stripping... $strip $strip_arg" - else - strip="" - log 1 "checking stripping... skipped" - fi - - if [ "$with_distcc" = "0" ]; then - log 1 "checking distcc... no" - elif [ "$with_distcc" = "1" ]; then - with_distcc="0" - - log 1 "checking distcc... no (only used when forced)" - elif [ "$with_distcc" = "2" ]; then - distcc="distcc" - else - distcc="$with_distcc" - fi - if [ "$with_distcc" != "0" ]; then - res="`$distcc --version 2>/dev/null | head -n 1 | cut -b 1-6`" - if [ "$res" != "distcc" ]; then - distcc="" - log 1 "checking distcc... no" - if [ "$with_distcc" = "2" ]; then - log 1 "configure: error: no distcc detected, but was forced to be used" - exit 1 - fi - if [ "$with_distcc" != "1" ]; then - log 1 "configure: error: '$with_distcc' doesn't seem a distcc to me" - exit 1 - fi - fi - - log 1 "checking distcc... $distcc" - fi - - if [ "$with_ccache" = "0" ]; then - log 1 "checking ccache... no" - elif [ "$with_ccache" = "1" ]; then - with_ccache="0" - - log 1 "checking ccache... no (only used when forced)" - elif [ "$with_ccache" = "2" ]; then - ccache="ccache" - else - ccache="$with_ccache" - fi - if [ "$with_ccache" != "0" ]; then - res="`$ccache --version 2>/dev/null | head -n 1 | cut -b 1-6`" - if [ "$res" != "ccache" ]; then - ccache="" - log 1 "checking ccache... no" - if [ "$with_ccache" = "2" ]; then - log 1 "configure: error: no ccache detected, but was forced to be used" - exit 1 - fi - if [ "$with_ccache" != "1" ]; then - log 1 "configure: error: '$with_ccache' doesn't seem a ccache to me" - exit 1 - fi - fi - - log 1 "checking ccache... $ccache" - fi - - detect_grfcodec - detect_nforenum - - if [ -z "$grfcodec" ] && [ -n "$nforenum" ]; then - log 1 "checking nforenum/grfcodec... nforenum needs grfcodec enabled, disabling nforenum" - nforenum="" - fi - - if [ -z "$nforenum" ] && [ -n "$grfcodec" ]; then - log 1 "checking nforenum/grfcodec... grfcodec needs nforenum enabled, disabling grfcodec" - grfcodec="" - fi - - if [ "$os" != "OSX" ] && [ "$with_application_bundle" != "0" ]; then - if [ "$with_application_bundle" = "1" ]; then - with_application_bundle="0" - - log 1 "checking OSX application bundle... not OSX, skipping" - else - log 1 "configure: error: --with-application-bundle only works if OSX is the target" - exit 1 - fi - fi - - if [ "$os" = "OSX" ] && [ "$with_application_bundle" = "1" ]; then - OSXAPP="OpenTTD.app" - else - OSXAPP="" - fi - - if [ "$os" = "OSX" ]; then - # Test on ppc970 (G5) - we can optimize there - - if [ "$enable_osx_g5" != "0" ]; then - log 1 "detecting ppc970 (G5)... yes (forced)" - else - # First, are we a real OSX system, else we can't detect it - native=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | grep darwin` - # If $host doesn't match $build , we are cross-compiling - if [ -n "$native" ] && [ "$build" = "$host" ]; then - $cxx_build $SRC_DIR/os/macosx/G5_detector.cpp -o G5_detector - res=`./G5_detector` - rm -f G5_detector - if [ -n "$res" ]; then - # This is G5, add flags for it - enable_osx_g5="2" - - log 1 "detecting ppc970 (G5)... yes" - else - enable_osx_g5="0" - - log 1 "detecting ppc970 (G5)... no" - fi - else - enable_osx_g5="0" - - log 1 "detecting ppc970 (G5)... no (cross-compiling)" - fi - fi - else - if [ "$enable_osx_g5" != "0" ]; then - log 1 "configure: error: ppc970 (OSX G5) selected, but not compiling for OSX" - log 1 "configure: error: either select OSX as OS, or deselect ppc970" - - exit 1 - fi - fi - - if { [ -d "$ROOT_DIR/.git" ] || [ -f "$ROOT_DIR/.git" ]; } && [ -n "`git help 2>/dev/null`" ]; then - log 1 "checking revision... git detection" - elif [ -f "$ROOT_DIR/.ottdrev" ]; then - log 1 "checking revision... source tarball" - else - log 1 "checking revision... no detection" - log 1 "WARNING: there is no means to determine the version." - log 1 "WARNING: please use a subversion, mercurial, or git checkout of OpenTTD." - log 1 "WARNING: you can only join game servers that have been compiled without" - log 1 "WARNING: version detection." - log 1 "WARNING: there is a great chance you desync." - log 1 "WARNING: USE WITH CAUTION!" - - sleep 5 - fi - - if [ "$doc_dir" = "1" ]; then - if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then - doc_dir="share/doc/openttd" - else - doc_dir="$data_dir/docs" - fi - else - doc_dir="`echo $doc_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - if [ "$icon_theme_dir" = "1" ]; then - if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then - icon_theme_dir="share/icons/hicolor" - else - icon_theme_dir="" - fi - else - icon_theme_dir="`echo $icon_theme_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - if [ "$personal_dir" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "HAIKU" ]; then - personal_dir="OpenTTD" - elif [ "$os" = "OSX" ]; then - personal_dir="Documents/OpenTTD" - else - personal_dir=".openttd" - fi - else - personal_dir="`echo $personal_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - if [ "$shared_dir" = "1" ]; then - # we are using default values - if [ "$os" = "OSX" ]; then - shared_dir="/Library/Application\\\\ Support/OpenTTD" - else - shared_dir="" - fi - else - shared_dir="`echo $shared_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - if [ "$man_dir" = "1" ]; then - # add manpage on UNIX systems - if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OSX" ]; then - man_dir="share/man/man6" - else - man_dir="" - fi - else - man_dir="`echo $man_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - if [ "$menu_dir" = "1" ]; then - # add a freedesktop menu item only for some UNIX systems - if [ "$os" = "UNIX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ]; then - menu_dir="share/applications" - else - menu_dir="" - fi - else - menu_dir="`echo $menu_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`" - fi - - detect_iconv - - if [ -n "$personal_dir" ] - then - log 1 "personal home directory... $personal_dir" - else - log 1 "personal home directory... none" - fi - - if [ -n "$shared_dir" ] - then - log 1 "shared data directory... $shared_dir" - else - log 1 "shared data directory... none" - fi - - if [ -n "$install_dir" ] - then - log 1 "installation directory... $install_dir" - else - log 1 "installation directory... none" - fi - - if [ -n "$icon_theme_dir" ] - then - log 1 "icon theme directory... $icon_theme_dir" - else - log 1 "icon theme directory... none" - fi - - if [ -n "$man_dir" ] - then - log 1 "manual page directory... $man_dir" - else - log 1 "manual page directory... none" - fi - - if [ -n "$menu_dir" ] - then - log 1 "menu item directory... $menu_dir" - else - log 1 "menu item directory... none" - fi -} - -make_compiler_cflags() { - # Params: - # $1 - compiler - # $2 - name of the cflags variable - # $3 - name of the cxxflags variable - # $4 - name of the ldflags variable - # $5 - name of the features variable - - # Get the compiler to tell us who it is - version_line="`$1 --version | head -n1`" - - eval eval "flags=\\\$$2" - eval eval "cxxflags=\\\$$3" - eval eval "ldflags=\\\$$4" - eval eval "features=\\\$$5" - - if [ `echo "$version_line" | cut -d' ' -f1` = "icc" ]; then - # Enable some things only for certain ICC versions - cc_version=`$1 -dumpversion | cut -c 1-4 | sed s@\\\.@@g` - - flags="$flags -rdynamic" - ldflags="$ldflags -rdynamic" - - if [ -z "$first_time_icc_check" ]; then - first_time_icc_check=no - if [ $cc_version -lt 90 ]; then - log 1 "WARNING: you seem to be using a very old version of ICC" - log 1 "WARNING: OpenTTD hasn't been tested with this version" - sleep 5 - elif [ $cc_version -lt 120 ]; then - log 1 "WARNING: you seem to be using an unsupported ICC version" - log 1 "WARNING: ICC older than 12.0 is known to fail to compile OpenTTD" - sleep 5 - fi - fi - - flags="$flags -Wall" - # remark #111: statement is unreachable - flags="$flags -wd111" - # remark #181: argument is incompatible with corresponding format string conversion - # ICC is very picky about signedness of operands, warnings provided by GCC are enough - flags="$flags -wd181" - # remark #271: trailing comma is nonstandard - flags="$flags -wd271" - # remark #280: selector expression is constant - flags="$flags -wd280" - # remark #304: access control not specified ("public" by default) - flags="$flags -wd304" - # remark #383: value copied to temporary, reference to temporary used - flags="$flags -wd383" - # remark #444: destructor for base class ... is not virtual - flags="$flags -wd444" - # remark #593: variable ... was set but never used - flags="$flags -wd593" - # warning #654: overloaded virtual function ... is only partially overridden in class ... - flags="$flags -wd654" - # remark #810: conversion from ... to ... may lose significant bits - flags="$flags -wd810" - # remark #869: parameter ... was never referenced - flags="$flags -wd869" - # warning #873: function ... ::operator new ... has no corresponding operator delete ... - flags="$flags -wd873" - # remark #981: operands are evaluated in unspecified order - flags="$flags -wd981" - # remark #1418: external function definition with no prior declaration - flags="$flags -wd1418" - # remark #1419: external declaration in primary source file - flags="$flags -wd1419" - # remark #1572: floating-point equality and inequality - flags="$flags -wd1572" - # remark #1599: declaration hides variable/parameter ... - flags="$flags -wd1599" - # remark #1720: function ... ::operator new ... has no corresponding member operator delete ... - flags="$flags -wd1720" - - if [ $cc_version -lt 110 ]; then - # warns about system headers with recent glibc: - # warning #1292: attribute "__nonnull__" ignored - flags="$flags -wd1292" - fi - - if [ $cc_version -ge 100 ]; then - # warning #1899: multicharacter character literal (potential portability problem) - flags="$flags -wd1899" - # vec report defaults to telling where it did loop vectorisation, which is not very important - flags="$flags -vec-report=0 " - fi - - if [ $cc_version -ge 110 ]; then - # remark #2259: non-pointer conversion from ... to ... may lose significant bits - flags="$flags -wd2259" - fi - - if [ "$enable_lto" != "0" ]; then - has_ipo=`$1 -help ipo | grep '\-ipo'` - if [ -n "$has_ipo" ]; then - # Use IPO (only if we see IPO exists and is requested) - flags="$flags -ipo" - features="$features lto" - fi - fi - elif echo "$version_line" | grep -q "clang"; then - # Enable some things only for certain clang versions - # Need to try really hard to get the version line, because OSX clang likes to hide its true version - cc_version="`$1 -v 2>&1 | grep -i version | head -n 1 | sed s@[^0-9]@@g | cut -c 1-2`" - - # aliasing rules are not held in openttd code - flags="$flags -fno-strict-aliasing" - - # -W alone doesn't enable all warnings enabled by -Wall; on the other hand, - # -Weverything enables too many useless warnings that can't be disabled (as of 3.0) - flags="$flags -Wall -W -Wextra" - - # warning: unused parameter '...' - flags="$flags -Wno-unused-parameter" - - # warning: expression result unused - flags="$flags -Wno-unused-value" - - # warning: multi-character character constant - flags="$flags -Wno-multichar" - - # warning: explicitly assigning a variable of type '...' to itself - # it happens when using the FOR_ALL_WINDOWS_FROM_BACK_FROM macro - flags="$flags -Wno-self-assign" - - # warning: is a C++11 extension - flags="$flags -Wno-c++11-extensions" - - if [ "$cc_version" -lt "30" ]; then - # warning: equality comparison with extraneous parentheses - flags="$flags -Wno-parentheses" - # warning: operands of ? are integers of different signs: 'unsigned int' and 'int' - flags="$flags -Wno-sign-compare" - fi - - if [ "$cc_version" -ge "30" ]; then - # warning: equality comparison with extraneous parentheses - # this warning could be useful, but it warns about code in squirrel - flags="$flags -Wno-parentheses-equality" - fi - - if [ "$with_ccache" != "0" -o "$with_distcc" != "0" ]; then - # ccache and distcc run separate preprocess and compile passes, - # both are fed with the same CFLAGS. Unfortunately, clang - # complains about -I when compiling preprocessed files: - # "clang: warning: argument unused during compilation: '-I /usr/include'" - flags="$flags -Qunused-arguments" - fi - - if [ "$enable_assert" -eq "0" ]; then - # do not warn about unused variables when building without asserts - flags="$flags -Wno-unused-variable" - fi - - # rdynamic is used to get useful stack traces from crash reports. - ldflags="$ldflags -rdynamic" - - # Assume gcc, since it just uses argv[0] in its --version output - else - # Enable some things only for certain GCC versions - # cc_version = major_version * 100 + minor_version - # For example: "3.3" -> 303, "4.9.2" -> 409, "6" -> 600, "23.5" -> 2305 - cc_version=`$1 -dumpversion | $awk -F . '{printf "%d%02d", $1, $2}'` - - if [ $cc_version -lt 303 ]; then - log 1 "configure: error: gcc older than 3.3 can't compile OpenTTD because of its poor template support" - exit 1 - fi - - flags="$flags -Wall -Wno-multichar -Wsign-compare -Wundef" - flags="$flags -Wwrite-strings -Wpointer-arith" - flags="$flags -W -Wno-unused-parameter -Wredundant-decls" - flags="$flags -Wformat=2 -Wformat-security" - - if [ $enable_assert -eq 0 ]; then - # Do not warn about unused variables when building without asserts - flags="$flags -Wno-unused-variable" - if [ $cc_version -ge 406 ]; then - # GCC 4.6 gives more warnings, disable them too - flags="$flags -Wno-unused-but-set-variable" - flags="$flags -Wno-unused-but-set-parameter" - fi - fi - - if [ $cc_version -ge 304 ]; then - # Warn when a variable is used to initialise itself: - # int a = a; - flags="$flags -Winit-self" - fi - - if [ $cc_version -ge 400 ]; then - # GCC 4.0+ 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. - flags="$flags -fno-strict-aliasing" - # Warn about casting-out 'const' with regular C-style cast. - # The preferred way is const_cast<>() which doesn't warn. - flags="$flags -Wcast-qual" - fi - - if [ $cc_version -ge 402 ]; then - # GCC 4.2+ automatically assumes that signed overflows do - # not occur in signed arithmetic, whereas we are not - # sure that they will not happen. It furthermore complains - # about its own optimized code in some places. - flags="$flags -fno-strict-overflow" - # GCC 4.2 no longer includes -Wnon-virtual-dtor in -Wall. - # Enable it in order to be consistent with older GCC versions. - flags="$flags -Wnon-virtual-dtor" - fi - - if [ $cc_version -eq 405 ]; then - # Prevent optimisation supposing enums are in a range specified by the standard - # For details, see http://gcc.gnu.org/PR43680 - flags="$flags -fno-tree-vrp" - fi - - if [ $cc_version -eq 407 ]; then - # Disable -Wnarrowing which gives many warnings, such as: - # warning: narrowing conversion of '...' from 'unsigned int' to 'int' inside { } [-Wnarrowing] - # They are valid according to the C++ standard, but useless. - cxxflags="$cxxflags -Wno-narrowing" - fi - - if [ $cc_version -ge 407 ]; then - # Disable bogus 'attempt to free a non-heap object' warning - flags="$flags -Wno-free-nonheap-object" - fi - - if [ $cc_version -ge 600 ]; then - # -flifetime-dse=2 (default since GCC 6) doesn't play - # well with our custom pool item allocator - cxxflags="$cxxflags -flifetime-dse=1" - fi - - if [ "$enable_lto" != "0" ]; then - # GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}' - has_lto=`$1 -dumpspecs | grep '\%{flto'` - if [ -n "$has_lto" ]; then - # Use LTO only if we see LTO exists and is requested - if [ $cc_version -lt 406 ]; then - flags="$flags -flto" - else - flags="$flags -flto=jobserver" - fi - ldflags="$ldflags -fwhole-program" - features="$features lto" - fi - fi - - has_rdynamic=`$1 -dumpspecs | grep rdynamic` - if [ -n "$has_rdynamic" ]; then - # rdynamic is used to get useful stack traces from crash reports. - flags="$flags -rdynamic" - ldflags="$ldflags -rdynamic" - fi - fi - - eval "$2=\"$flags\"" - eval "$3=\"$cxxflags\"" - eval "$4=\"$ldflags\"" - eval "$5=\"$features\"" -} - -make_cflags_and_ldflags() { - # General CFlags for BUILD - CFLAGS_BUILD_ENV="$CFLAGS_BUILD" - CFLAGS_BUILD="" - # Special CXXFlags for BUILD - CXXFLAGS_BUILD_ENV="$CXXFLAGS_BUILD" - CXXFLAGS_BUILD="" - # LDFLAGS for BUILD - LDFLAGS_BUILD_ENV="$LDFLAGS_BUILD" - LDFLAGS_BUILD="" - # FEATURES for BUILD (lto) - FEATURES_BUILD="" - # General CFlags for HOST - CFLAGS_ENV="$CFLAGS" - CFLAGS="" - # Special CXXFlags for HOST - CXXFLAGS_ENV="$CXXFLAGS" - CXXFLAGS="" - # Libs to compile. In fact this is just LDFLAGS - LIBS="" - # LDFLAGS used for HOST - LDFLAGS_ENV="$LDFLAGS" - LDFLAGS="" - # FEATURES for HOST (lto) - FEATURES="" - - make_compiler_cflags "$cc_build" "CFLAGS_BUILD" "CXXFLAGS_BUILD" "LDFLAGS_BUILD" "FEATURES_BUILD" - make_compiler_cflags "$cc_host" "CFLAGS" "CXXFLAGS" "LDFLAGS" "FEATURES" - - CFLAGS="$CFLAGS -D$os" - CFLAGS_BUILD="$CFLAGS_BUILD -D$os" - CXXFLAGS="$CXXFLAGS -std=c++11" - CXXFLAGS_BUILD="$CXXFLAGS_BUILD -std=c++11" - - if [ "$enable_debug" = "0" ]; then - # No debug, add default stuff - OBJS_SUBDIR="release" - - if [ "$enable_profiling" = "0" ]; then - # -fomit-frame-pointer and -pg do not go well together (gcc errors they are incompatible) - CFLAGS="-fomit-frame-pointer $CFLAGS" - fi - CFLAGS="-O2 $CFLAGS" - else - OBJS_SUBDIR="debug" - - # Each debug level reduces the optimization by a bit - if [ $enable_debug -ge 1 ]; then - CFLAGS="$CFLAGS -g -D_DEBUG" - fi - if [ $enable_debug -ge 2 ]; then - CFLAGS="$CFLAGS -fno-inline" - fi - if [ $enable_debug -ge 3 ]; then - CFLAGS="$CFLAGS -O0" - else - CFLAGS="$CFLAGS -O2" - fi - fi - - if [ $enable_debug -le 2 ]; then - cc_host_is_gcc=`basename "$cc_host" | grep "gcc" 2>/dev/null` - if [ -n "$cc_host_is_gcc" ]; then - # Define only when compiling with GCC. Some GLIBC versions use GNU - # extensions in a way that breaks build with at least ICC. - # This requires -O1 or more, so debug level 3 (-O0) is excluded. - CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2" - if [ "$os" = "MINGW" ]; then - # Prevent undefined references when _FORTIFY_SOURCE > 0 - LDFLAGS="$LDFLAGS -fstack-protector" - fi - fi - - cc_build_is_gcc=`basename "$cc_build" | grep "gcc" 2>/dev/null` - if [ -n "$cc_build_is_gcc" ]; then - # Just add -O1 to the tools needed for building. - CFLAGS_BUILD="$CFLAGS_BUILD -D_FORTIFY_SOURCE=2 -O1" - if [ "$os" = "MINGW" ]; then - # Prevent undefined references when _FORTIFY_SOURCE > 0 - LDFLAGS_BUILD="$LDFLAGS_BUILD -fstack-protector" - fi - fi - fi - - if [ "$os" = "OSX" ] && [ $cc_version -eq 400 ]; then - # Apple's GCC 4.0 has a compiler bug for x86_64 with (higher) optimization, - # wrongly optimizing ^= in loops. This disables the failing optimisation. - CFLAGS="$CFLAGS -fno-expensive-optimizations" - fi - - if [ "$enable_profiling" != "0" ]; then - CFLAGS="$CFLAGS -pg" - LDFLAGS="$LDFLAGS -pg" - fi - - if [ "$with_threads" = "0" ]; then - CFLAGS="$CFLAGS -DNO_THREADS" - fi - if [ "$with_sse" = "1" ]; then - CFLAGS="$CFLAGS -DWITH_SSE" - fi - - if [ "`echo $1 | cut -c 1-3`" != "icc" ]; then - if [ "$os" = "CYGWIN" ]; then - flags="$flags -mwin32" - LDFLAGS="$LDFLAGS -mwin32" - fi - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - if [ $cc_version -lt 406 ]; then - flags="$flags -mno-cygwin" - LDFLAGS="$LDFLAGS -mno-cygwin" - fi - - if [ "$enable_console" != "0" ]; then - LDFLAGS="$LDFLAGS -Wl,--subsystem,console" - else - LDFLAGS="$LDFLAGS -Wl,--subsystem,windows" - fi - - LIBS="$LIBS -lws2_32 -lwinmm -lusp10 -lgdi32 -ldxguid -lole32 -limm32" - - if [ $cc_version -ge 404 ]; then - LDFLAGS_BUILD="$LDFLAGS_BUILD -static-libgcc -static-libstdc++" - fi - if [ $cc_version -ge 407 ]; then - CFLAGS="$CFLAGS -mno-ms-bitfields" - fi - fi - fi - - if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "OSX" ] && [ "$os" != "OS2" ]; then - LIBS="$LIBS -lpthread" - fi - - if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ]; then - LIBS="$LIBS -lc" - fi - - if [ "$os" = "OPENBSD" ]; then - LIBS="$LIBS -pthread" - fi - - if [ "$os" = "OSX" ]; then - LDFLAGS="$LDFLAGS -framework Cocoa" - - # Add macports include dir which is not always set a default system dir. This avoids zillions of bogus warnings. - CFLAGS="$CFLAGS -isystem/opt/local/include" - - if [ "$enable_dedicated" = "0" ] && ([ "$cpu_type" = "32" ] || [ "$enable_universal" != "0" ]); then - LIBS="$LIBS -framework QuickTime" - else - CFLAGS="$CFLAGS -DNO_QUICKTIME" - fi - - if [ "$enable_universal" = "0" ]; then - # Universal builds set this elsewhere - CFLAGS="$OSX_SYSROOT $CFLAGS" - LDFLAGS="$OSX_LD_SYSROOT $LDFLAGS" - fi - fi - - if [ "$os" = "HAIKU" ]; then - LIBS="$LIBS -lmidi -lbe" - fi - - # Most targets act like UNIX, just with some additions - if [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then - CFLAGS="$CFLAGS -DUNIX" - fi - # And others like Windows - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - CFLAGS="$CFLAGS -DWIN" - fi - - if [ -n "$allegro_config" ]; then - CFLAGS="$CFLAGS -DWITH_ALLEGRO" - CFLAGS="$CFLAGS `$allegro_config --cflags`" - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$allegro_config --static --libs`" - else - LIBS="$LIBS `$allegro_config --libs`" - fi - fi - fi - - if [ -n "$sdl2_config" ]; then - CFLAGS="$CFLAGS -DWITH_SDL2" - # SDL must not add _GNU_SOURCE as it breaks many platforms - CFLAGS="$CFLAGS `$sdl2_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`" - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$sdl2_config --static --libs`" - else - LIBS="$LIBS `$sdl2_config --libs`" - fi - elif [ -n "$sdl_config" ]; then - CFLAGS="$CFLAGS -DWITH_SDL" - # SDL must not add _GNU_SOURCE as it breaks many platforms - CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`" - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$sdl_config --static --libs`" - else - LIBS="$LIBS `$sdl_config --libs`" - fi - fi - - if [ "$with_cocoa" != "0" ]; then - CFLAGS="$CFLAGS -DWITH_COCOA" - LIBS="$LIBS -F/System/Library/Frameworks -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox" - - if [ "$enable_cocoa_quartz" != "0" ]; then - CFLAGS="$CFLAGS -DENABLE_COCOA_QUARTZ" - fi - - if [ "$enable_cocoa_quickdraw" != "0" ]; then - CFLAGS="$CFLAGS -DENABLE_COCOA_QUICKDRAW" - fi - fi - - if [ "$with_zlib" != "0" ]; then - CFLAGS="$CFLAGS -DWITH_ZLIB" - CFLAGS="$CFLAGS `$zlib_config --cflags | tr '\n\r' ' '`" - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$zlib_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$zlib_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ -n "$lzma_config" ]; then - CFLAGS="$CFLAGS -DWITH_LIBLZMA" - CFLAGS="$CFLAGS `$lzma_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - CFLAGS="$CFLAGS -DLZMA_API_STATIC" - LIBS="$LIBS `$lzma_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$lzma_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ "$with_lzo2" != "0" ]; then - if [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then - LIBS="$LIBS $lzo2" - else - LIBS="$LIBS -llzo2" - fi - CFLAGS="$CFLAGS -DWITH_LZO" - fi - - if [ -n "$xdg_basedir_config" ]; then - CFLAGS="$CFLAGS -DWITH_XDG_BASEDIR" - CFLAGS="$CFLAGS `$xdg_basedir_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$xdg_basedir_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$xdg_basedir_config --libs | tr '\n\r' ' '`" - fi - fi - - # 64bit machines need -D_SQ64 - if [ "$cpu_type" = "64" ] && [ "$enable_universal" = "0" ]; then - CFLAGS="$CFLAGS -D_SQ64" - fi - CFLAGS="$CFLAGS -I$SCRIPT_SRC_DIR" - - if [ -n "$png_config" ]; then - CFLAGS="$CFLAGS -DWITH_PNG" - CFLAGS="$CFLAGS `$png_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$png_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$png_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ -n "$fontconfig_config" ]; then - CFLAGS="$CFLAGS -DWITH_FONTCONFIG" - CFLAGS="$CFLAGS `$fontconfig_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$fontconfig_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ -n "$freetype_config" ]; then - CFLAGS="$CFLAGS -DWITH_FREETYPE" - CFLAGS="$CFLAGS `$freetype_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$freetype_config --libs --static | tr '\n\r' ' '` -lfreetype" - else - LIBS="$LIBS `$freetype_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ -n "$icu_layout_config" ]; then - CFLAGS="$CFLAGS -DWITH_ICU_LX" - CFLAGS="$CFLAGS `$icu_layout_config --cflags | tr '\n\r' ' '`" - - if [ "$static_icu" != "0" ]; then - LIBS="$LIBS `$icu_layout_config --libs --static | tr '\n\r' ' ' | sed s/-licu/-lsicu/g`" - else - LIBS="$LIBS `$icu_layout_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ -n "$icu_sort_config" ]; then - CFLAGS="$CFLAGS -DWITH_ICU_I18N" - CFLAGS="$CFLAGS `$icu_sort_config --cflags | tr '\n\r' ' '`" - - if [ "$static_icu" != "0" ]; then - LIBS="$LIBS `$icu_sort_config --libs --static | tr '\n\r' ' ' | sed s/-licu/-lsicu/g`" - else - LIBS="$LIBS `$icu_sort_config --libs | tr '\n\r' ' '`" - fi - fi - - if [ "$with_uniscribe" != "0" ]; then - CFLAGS="$CFLAGS -DWITH_UNISCRIBE" - LIBS="$LIBS -lusp10" - fi - - if [ "$with_direct_music" != "0" ]; then - CFLAGS="$CFLAGS -DWIN32_ENABLE_DIRECTMUSIC_SUPPORT" - # GCC 4.0+ doesn't like the DirectX includes (gives tons of - # warnings on it we won't be able to fix). For now just - # suppress those warnings. - if [ $cc_version -ge 400 ]; then - CFLAGS="$CFLAGS -Wno-non-virtual-dtor" - fi - fi - - if [ "$with_xaudio2" != "0" ]; then - CFLAGS="$CFLAGS -DWITH_XAUDIO2" - fi - - if [ -n "$fluidsynth" ]; then - LIBS="$LIBS -lfluidsynth" - CFLAGS="$CFLAGS -DFLUIDSYNTH" - fi - - if [ "$with_iconv" != "0" ]; then - CFLAGS="$CFLAGS -DWITH_ICONV" - if [ "$link_to_iconv" = "yes" ]; then - LIBS="$LIBS -liconv" - if [ "$with_iconv" != "2" ]; then - CFLAGS="$CFLAGS -I$with_iconv/include" - LIBS="$LIBS -L$with_iconv/lib" - fi - fi - - if [ "$os" != "OSX" ] && [ "$have_non_const_iconv" != "no" ]; then - CFLAGS="$CFLAGS -DHAVE_NON_CONST_ICONV" - fi - fi - - if [ -n "$with_midi" ]; then - CFLAGS="$CFLAGS -DEXTERNAL_PLAYER=\\\\\"$with_midi\\\\\"" - fi - if [ -n "$with_midi_arg" ]; then - CFLAGS="$CFLAGS -DMIDI_ARG=\\\\\"$with_midi_arg\\\\\"" - fi - - if [ "$enable_dedicated" != "0" ]; then - CFLAGS="$CFLAGS -DDEDICATED" - fi - - if [ "$enable_unicode" != "0" ]; then - CFLAGS="$CFLAGS -DUNICODE -D_UNICODE" - fi - - if [ "$os" = "HAIKU" ]; then - LDFLAGS="$LDFLAGS -lnetwork" - fi - - if [ "$os" = "SUNOS" ]; then - LDFLAGS="$LDFLAGS -lnsl -lsocket" - fi - - if [ "$enable_static" != "0" ]; then - # OSX can't handle -static in LDFLAGS - if [ "$os" != "OSX" ]; then - LDFLAGS="$LDFLAGS -static" - fi - fi - - if [ "$enable_assert" = "0" ]; then - CFLAGS="$CFLAGS -DNDEBUG" - CFLAGS_BUILD="$CFLAGS_BUILD -DNDEBUG" - fi - - if [ "$enable_desync_debug" != "0" ]; then - CFLAGS="$CFLAGS -DRANDOM_DEBUG" - fi - - if [ "$enable_osx_g5" != "0" ]; then - CFLAGS="$CFLAGS -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt" - fi - - if [ -n "$personal_dir" ]; then - CFLAGS="$CFLAGS -DWITH_PERSONAL_DIR -DPERSONAL_DIR=\\\\\"$personal_dir\\\\\"" - fi - - if [ -n "$shared_dir" ]; then - CFLAGS="$CFLAGS -DWITH_SHARED_DIR -DSHARED_DIR=\\\\\"$shared_dir\\\\\"" - fi - - CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\"" - - if [ "$enable_lto" != "0" ]; then - lto_build=`echo "$FEATURES_BUILD" | grep "lto"` - lto_host=`echo "$FEATURES" | grep "lto"` - if [ -z "$lto_build$lto_host" ]; then - log 1 "WARNING: you enabled LTO/IPO, but neither build nor host compiler supports it" - log 1 "WARNING: LTO/IPO has been disabled" - fi - if [ -n "$lto_build" ]; then - LDFLAGS_BUILD="$LDFLAGS_BUILD $CFLAGS_BUILD $CXXFLAGS_BUILD" - fi - if [ -n "$lto_host" ]; then - LDFLAGS="$LDFLAGS $CFLAGS $CXXFLAGS" - fi - fi - - # All flags to be extended via the env - CFLAGS_BUILD="$CFLAGS_BUILD $CFLAGS_BUILD_ENV" - CXXFLAGS_BUILD="$CXXFLAGS_BUILD $CXXFLAGS_BUILD_ENV" - LDFLAGS_BUILD="$LDFLAGS_BUILD $LDFLAGS_BUILD_ENV" - CFLAGS="$CFLAGS $CFLAGS_ENV" - CXXFLAGS="$CXXFLAGS $CXXFLAGS_ENV" - LDFLAGS="$LDFLAGS $LDFLAGS_ENV" - - log 1 "using CFLAGS_BUILD... $CFLAGS_BUILD" - log 1 "using CXXFLAGS_BUILD... $CXXFLAGS_BUILD" - log 1 "using LDFLAGS_BUILD... $LDFLAGS_BUILD" - log 1 "using CFLAGS... $CFLAGS" - log 1 "using CXXFLAGS... $CXXFLAGS" - log 1 "using LDFLAGS... $LIBS $LDFLAGS" - - # Makedepend doesn't like something like: -isysroot /OSX/blabla - # so convert it to: -isysroot -OSX/blabla. makedepend just ignores - # any - command it doesn't know, so we are pretty save. - # Lovely hackish, not? - # Btw, this almost always comes from outside the configure, so it is - # not something we can control. - # Also make makedepend aware of compiler's built-in defines. - if [ "$with_makedepend" != "0" ] || [ "$enable_builtin_depend" != "0" ]; then - # Append CXXFLAGS possibly containing -std=c++0x - cflags_makedep="`echo | $cxx_host $CXXFLAGS -E -x c++ -dM - | sed 's@.define @-D@g;s@ .*@ @g;s@(.*)@@g' | tr -d '\r\n'`" - - # Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations - cflags_makedep="$cflags_makedep `echo \"$CFLAGS\" \"$CXXFLAGS\" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g;s@[ ]*-[^D][^ ]*@@g'`" - else - makedepend="" - fi - - if [ "$with_distcc" != "0" ]; then - cc_host="$distcc $cc_host" - cxx_host="$distcc $cxx_host" - log 1 "" - log 1 " NOTICE: remind yourself to use 'make -jN' to make use of distcc" - log 1 "" - fi - - if [ "$with_ccache" != "0" ]; then - cc_host="$ccache $cc_host" - cxx_host="$ccache $cxx_host" - fi -} - -check_compiler() { - # Params: - # $1 - Type for message (build / host) - # $2 - What to fill with the found compiler - # $3 - System to try - # $4 - Compiler to try - # $5 - Env-setting to try - # $6 - GCC alike to try - # $7 - CC alike to try - # $8 - "0" gcc, "1" g++, "2" windres, "3" strip, "4" lipo - # $9 - What the command is to check for - - if [ -n "$4" ]; then - # Check for manual compiler - machine=`$4 $9 2>/dev/null` - ret=$? - eval "$2=\"$4\"" - - log 2 "executing $4 $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - log 1 "checking $1... $4 not found" - log 1 "the selected binary doesn't seem to be a $6 binary" - exit 1 - fi - elif [ -n "$3" ]; then - # Check for system - if [ -z "$6" ]; then - compiler="$3" - else - compiler="$3-$6" - fi - machine=`eval $compiler $9 2>/dev/null` - ret=$? - eval "$2=\"$compiler\"" - - log 2 "executing $compiler $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - if [ -z "$5" ]; then - log 1 "checking $1... $compiler not found" - log 1 "I couldn't detect any $6 binary for $3" - exit 1 - else - compiler="$3-$5" - fi - machine=`eval $compiler $9 2>/dev/null` - ret=$? - eval "$2=\"$compiler\"" - - log 2 "executing $compiler $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - log 1 "checking $1... $compiler not found" - log 1 "I couldn't detect any $5 binary for $3" - exit 1 - fi - fi - - if [ "$machine" != "$3" ] && ( [ "$8" = "0" ] || [ "$8" = "1" ] ); then - log 1 "checking $1... expected $3, found $machine" - log 1 "the compiler suggests it doesn't build code for the machine you specified" - exit 1 - fi - else - # Nothing given, autodetect - - if [ -n "$5" ]; then - machine=`$5 $9 2>/dev/null` - ret=$? - eval "$2=\"$5\"" - - log 2 "executing $5 $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - # The user defined a GCC that doesn't reply to $9.. abort - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - log 1 "checking $1... $5 unusable" - log 1 "the CC environment variable is set, but it doesn't seem to be a $6 binary" - log 1 "please redefine the CC/CXX environment to a $6 binary" - exit 1 - fi - else - log 2 "checking $1... CC/CXX not set (skipping)" - - # No $5, so try '$6' - machine=`$6 $9 2>/dev/null` - ret=$? - eval "$2=\"$6\"" - - log 2 "executing $6 $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then - # Maybe '$7'? - machine=`$7 $9 2>/dev/null` - ret=$? - eval "$2=\"$7\"" - - log 2 "executing $7 $9" - log 2 " returned $machine" - log 2 " exit code $ret" - - # All failed, abort - if [ -z "$machine" ]; then - log 1 "checking $1... $6 not found" - log 1 "I couldn't detect any $6 binary on your system" - log 1 "please define the CC/CXX environment to where it is located" - - exit 1 - fi - fi - fi - fi - - if [ "$8" != "0" ]; then - eval "res=\$$2" - log 1 "checking $1... $res" - else - log 1 "checking $1... $machine" - fi -} - -check_build() { - check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CC" "gcc" "cc" "0" "-dumpmachine" -} - -check_host() { - # By default the host is the build - if [ -z "$host" ]; then host="$build"; fi - check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CC" "gcc" "cc" "0" "-dumpmachine" -} - -check_cxx_build() { - check_compiler "build c++" "cxx_build" "$build" "$cxx_build" "$CXX" "g++" "c++" 1 "-dumpmachine" -} - -check_cxx_host() { - # By default the host is the build - if [ -z "$host" ]; then host="$build"; fi - check_compiler "host c++" "cxx_host" "$host" "$cxx_host" "$CXX" "g++" "c++" 1 "-dumpmachine" -} - -check_windres() { - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - check_compiler "host windres" "windres" "$host" "$windres" "$WINDRES" "windres" "windres" "2" "-V" - fi -} - -check_strip() { - if [ "$os" = "OS2" ]; then - # OS2 via gcc is a bit weird.. stripping HAS to be done via emxbind, which is via gcc directly - log 1 "checking host strip... using gcc -s option" - elif [ "$os" = "OSX" ]; then - # Most targets have -V in strip, to see if they exists... OSX doesn't.. so execute something - echo "int main(int argc, char *argv[]) { }" > strip.test.c - $cxx_host strip.test.c -o strip.test - check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "strip.test" - rm -f strip.test.c strip.test - else - check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "-V" - fi -} - -check_lipo() { - if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then - echo "int main(int argc, char *argv[]) { }" > lipo.test.c - $cxx_host lipo.test.c -o lipo.test - check_compiler "host lipo" "lipo" "$host" "$lipo" "$LIPO" "lipo" "lipo" "4" "-info lipo.test" - rm -f lipo.test.c lipo.test - fi -} - -check_osx_sdk() { - local sysroot="" - if [ -n "$1" ]; then - if echo "$1" | grep -q / ; then - # Seems to be a file system path - osx_sdk_path="$1" - else - osx_sdk_path="/Developer/SDKs/MacOSX$1.sdk" - fi - if [ ! -d "$osx_sdk_path" ]; then - # No directory, not present or garbage - return 1 - fi - - # Set minimum version to 10.4 as that's when kCGBitmapByteOrder32Host was introduced - sysroot="-isysroot $osx_sdk_path -Wl,-syslibroot,$osx_sdk_path -mmacosx-version-min=10.4" - fi - -cat > tmp.osx.mm << EOF -#include -int main() { - kCGBitmapByteOrder32Host; - return 0; -} -EOF - execute="$cxx_host $sysroot $CFLAGS tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1" - eval $execute > /dev/null - ret=$? - log 2 "executing $execute" - log 2 " exit code $ret" - rm -f tmp.osx.mm tmp.osx - return $ret -} - -check_direct_music() { - echo " - #include - #include - #include - int main(int argc, char *argv[]) { }" > direct_music.test.c - $cxx_host $CFLAGS direct_music.test.c -o direct_music.test 2> /dev/null - res=$? - rm -f direct_music.test.c direct_music.test - - if [ "$res" != "0" ]; then - if [ "$with_direct_music" != "1" ]; then - log 1 "configure: error: direct-music is not available on this system" - exit 1 - fi - with_direct_music="0" - - log 1 "checking direct-music... not found" - else - log 1 "checking direct-music... found" - fi -} - -check_xaudio2() { - echo " - #include - - #undef NTDDI_VERSION - #undef _WIN32_WINNT - - #define NTDDI_VERSION NTDDI_WIN8 - #define _WIN32_WINNT _WIN32_WINNT_WIN8 - - #include - int main(int argc, char *argv[]) { }" > xaudio2.test.c - $cxx_host $CFLAGS xaudio2.test.c -o xaudio2.test 2> /dev/null - res=$? - rm -f xaudio2.test.c xaudio2.test - - if [ "$res" != "0" ]; then - if [ "$with_xaudio2" != "1" ]; then - log 1 "configure: error: xaudio2 is not available on this system" - exit 1 - fi - with_xaudio2="0" - - log 1 "checking xaudio2... not found" - else - log 1 "checking xaudio2... found" - fi -} - -check_makedepend() { - if [ "$enable_builtin_depend" != "0" ]; then - with_makedepend="0" - fi - - if [ "$with_makedepend" = "0" ]; then - log 1 "checking makedepend... disabled" - return - fi - - if [ "$with_makedepend" = "1" ] || [ "$with_makedepend" = "2" ]; then - makedepend="makedepend" - else - makedepend="$with_makedepend" - fi - - rm -f makedepend.tmp - touch makedepend.tmp - res=`$makedepend -fmakedepend.tmp 2>/dev/null` - res=$? - log 2 "executing $makedepend -f makedepend.tmp" - log 2 " returned `cat makedepend.tmp`" - log 2 " exit code $ret" - - if [ ! -s makedepend.tmp ]; then - rm -f makedepend.tmp makedepend.tmp.bak - - if [ "$with_makedepend" = "2" ]; then - log 1 "checking makedepend... not found" - - log 1 "I couldn't detect any makedepend on your system" - log 1 "please locate it via --makedepend=[binary]" - - exit 1 - elif [ "$with_makedepend" != "1" ]; then - log 1 "checking makedepend... $makedepend not found" - - log 1 "the selected file doesn't seem to be a valid makedepend binary" - - exit 1 - else - log 1 "checking makedepend... not found" - - with_makedepend="0" - return - fi - fi - - rm -f makedepend.tmp makedepend.tmp.bak - - log 1 "checking makedepend... $makedepend" -} - -check_version() { - # $1 - requested version (major.minor) - # $2 - version we got (major.minor) - - if [ -z "$2" ]; then - return 0 - fi - - req_major=`echo $1 | cut -d. -f1` - got_major=`echo $2 | cut -d. -f1` - if [ $got_major -lt $req_major ]; then - return 0 - elif [ $got_major -gt $req_major ]; then - return 1 - fi - - req_minor=`echo $1 | cut -d. -f2` - got_minor=`echo $2 | cut -d. -f2` - if [ $got_minor -lt $req_minor ]; then - return 0 - fi - return 1 -} - -detect_awk() { - # Not all awks allow gsub(), so we test for that here! It is in fact all we need... - - # These awks are known to work. Test for them explicit - awks="gawk mawk nawk" - - awk_prefix="echo \"a.c b.c c.c\" | tr ' ' \\\\n | " - awk_param="' { ORS = \" \" } /\.c$/ { gsub(\".c$\", \".o\", \$0); print \$0; }' 2>/dev/null" - awk_result="a.o b.o c.o " - log 2 "Detecing awk..." - - log 2 "Trying: $awk_prefix $awk $awk_param" - res=`eval $awk_prefix $awk $awk_param` - log 2 "Result: '$res'" - if [ "$res" != "$awk_result" ] && [ "$awk" = "awk" ]; then - # User didn't supply his own awk, so try to detect some other known working names for an awk - for awk in $awks; do - log 2 "Trying: $awk_prefix $awk $awk_param" - res=`eval $awk_prefix $awk $awk_param` - log 2 "Result: '$res'" - if [ "$res" = "$awk_result" ]; then break; fi - done - - if [ "$res" != "$awk_result" ]; then - log 1 "checking awk... not found" - log 1 "configure: error: no awk found" - log 1 "configure: error: please install one of the following: $awks" - exit 1 - fi - fi - if [ "$res" != "$awk_result" ]; then - log 1 "checking awk... not found" - log 1 "configure: error: you supplied '$awk' but it doesn't seem a valid gawk or mawk" - exit 1 - fi - - log 1 "checking awk... $awk" -} - -detect_os() { - if [ "$os" = "DETECT" ]; then - # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, SUNOS, CYGWIN, MINGW, and OS2 - - # Try first via dumpmachine, then via uname - os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk ' - /linux/ { print "UNIX"; exit} - /darwin/ { print "OSX"; exit} - /freebsd/ { print "FREEBSD"; exit} - /dragonfly/ { print "DRAGONFLY"; exit} - /openbsd/ { print "OPENBSD"; exit} - /netbsd/ { print "NETBSD"; exit} - /hp-ux/ { print "HPUX"; exit} - /haiku/ { print "HAIKU"; exit} - /sunos/ { print "SUNOS"; exit} - /solaris/ { print "SUNOS"; exit} - /cygwin/ { print "CYGWIN"; exit} - /mingw/ { print "MINGW"; exit} - /os2/ { print "OS2"; exit} - '` - - if [ -z "$os" ]; then - os=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | $awk ' - /linux/ { print "UNIX"; exit} - /darwin/ { print "OSX"; exit} - /freebsd/ { print "FREEBSD"; exit} - /dragonfly/ { print "DRAGONFLY"; exit} - /openbsd/ { print "OPENBSD"; exit} - /netbsd/ { print "NETBSD"; exit} - /hp-ux/ { print "HPUX"; exit} - /haiku/ { print "HAIKU"; exit} - /sunos/ { print "SUNOS"; exit} - /cygwin/ { print "CYGWIN"; exit} - /mingw/ { print "MINGW"; exit} - /os\/2/ { print "OS2"; exit} - /gnu/ { print "UNIX"; exit} - '` - fi - - if [ -z "$os" ]; then - log 1 "detecting OS... none detected" - log 1 "I couldn't detect your OS. Please use --os=OS to force one" - log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, HAIKU, SUNOS, CYGWIN, MINGW, and OS2" - exit 1 - fi - - log 1 "detecting OS... $os" - else - log 1 "forcing OS... $os" - fi -} - -detect_allegro() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_allegro" = "0" ]; then - log 1 "checking Allegro... disabled" - - allegro_config="" - return 0 - fi - - if [ "$with_allegro" = "2" ] && [ "$with_cocoa" = "2" ]; then - log 1 "configure: error: it is impossible to compile both Allegro and COCOA" - log 1 "configure: error: please deselect one of them and try again" - exit 1 - fi - - if [ "$with_allegro" = "2" ] && [ "$enable_dedicated" != "0" ]; then - log 1 "configure: error: it is impossible to compile a dedicated with Allegro" - log 1 "configure: error: please deselect one of them and try again" - exit 1 - fi - - if [ "$enable_dedicated" != "0" ]; then - log 1 "checking Allegro... dedicated server, skipping" - - allegro_config="" - return 0 - fi - - # By default on OSX we don't use Allegro. The rest is auto-detect - if [ "$with_allegro" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then - log 1 "checking Allegro... OSX, skipping" - - allegro_config="" - return 0 - fi - - detect_pkg_config "$with_allegro" "allegro" "allegro_config" "4.4" -} - - -detect_sdl() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_sdl" = "0" ]; then - log 1 "checking SDL... disabled" - - sdl_config="" - sdl2_config="" - return 0 - fi - - if [ "$with_sdl" != "1" ] && [ "$with_cocoa" = "2" ]; then - log 1 "configure: error: it is impossible to compile both SDL and COCOA" - log 1 "configure: error: please deselect one of them and try again" - exit 1 - fi - - if [ "$with_sdl" != "1" ] && [ "$enable_dedicated" != "0" ]; then - log 1 "configure: error: it is impossible to compile a dedicated with SDL" - log 1 "configure: error: please deselect one of them and try again" - exit 1 - fi - - if [ "$enable_dedicated" != "0" ]; then - log 1 "checking SDL... dedicated server, skipping" - - sdl_config="" - sdl2_config="" - return 0 - fi - - # By default on OSX we don't use SDL. The rest is auto-detect - if [ "$with_sdl" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then - log 1 "checking SDL... OSX, skipping" - - sdl_config="" - return 0 - fi - - if [ "$os" = "OSX" ]; then - log 1 "WARNING: sdl is known to fail on some versions of Mac OS X" - log 1 "WARNING: with some hardware configurations. Use at own risk!" - sleep 5 - fi - - if [ $with_sdl = "sdl1" ]; then - detect_pkg_config "2" "sdl" "sdl_config" "1.2" - elif [ $with_sdl = "sdl2" ]; then - detect_pkg_config "2" "sdl2" "sdl2_config" "2.0" - else - sdl2_config="" - if [ -x "`which sdl2-config`" ]; then - detect_pkg_config "$with_sdl" "sdl2" "sdl2_config" "2.0" - fi - if [ -z "$sdl2_config" ]; then - detect_pkg_config "$with_sdl" "sdl" "sdl_config" "1.2" - fi - fi -} - -detect_osx_sdk() { - # Try to find the best SDK available. For a normal build this - # is currently the 10.5 SDK as this is needed to compile all - # optional code. Because such an executable won't run on 10.4 - # or lower, also check for the 10.4u SDK when doing an universal - # build. - - # Check for the 10.5 SDK, but try 10.6 if that fails - check_osx_sdk "10.5" || check_osx_sdk "10.6" || osx_sdk_path="" - - if [ -z "$osx_sdk_path" ] || [ "$enable_universal" != "0" ]; then - # No better SDK or universal build enabled? Check 10.4u SDK as well - local old_sdk="$osx_sdk_path" - if check_osx_sdk "10.4u"; then - osx_sdk_104_path="$osx_sdk_path" - else - osx_sdk_104_path="" - fi - if [ -z "$old_sdk" ]; then - osx_sdk_path="$osx_sdk_104_path" - else - osx_sdk_path="$old_sdk" - fi - fi - - if [ -z "$osx_sdk_path" ]; then - log 1 "Your system SDK is probably too old" - log 1 "Please install/upgrade your Xcode to >= 2.5" - - exit 1 - fi -} - -detect_cocoa() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_cocoa" = "0" ]; then - log 1 "checking COCOA... disabled" - - return 0 - fi - - if [ "$with_cocoa" = "2" ] && [ "$enable_dedicated" != "0" ]; then - log 1 "configure: error: it is impossible to compile a dedicated with COCOA" - log 1 "configure: error: please deselect one of them and try again" - exit 1 - fi - - if [ "$enable_dedicated" != "0" ]; then - log 1 "checking COCOA... dedicated server, skipping" - - with_cocoa="0" - return 0 - fi - - # By default on OSX we use COCOA. The rest doesn't support it - if [ "$with_cocoa" = "1" ] && [ "$os" != "OSX" ]; then - log 1 "checking COCOA... not OSX, skipping" - - with_cocoa="0" - return 0 - fi - - if [ "$os" != "OSX" ]; then - log 1 "checking COCOA... not OSX" - - log 1 "configure: error: COCOA video driver is only supported for OSX" - exit 1 - fi - - log 1 "checking COCOA... found" - - - if [ "$enable_cocoa_quartz" != "0" ]; then - log 1 "checking whether to enable the Quartz window subdriver... yes" - else - log 1 "checking whether to enable the Quartz window subdriver... no" - fi - - detect_quickdraw -} - -detect_quickdraw() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$enable_cocoa_quickdraw" = "0" ]; then - log 1 "checking Quickdraw window subdriver... disabled" - return 0 - fi - - # Assume QuickDraw is available when doing an universal build - if [ "$enable_universal" != "0" ]; then - log 1 "checking Quickdraw window subdriver... found" - return 0 - fi - - # 64 bits doesn't have quickdraw - if [ "$cpu_type" = "64" ]; then - enable_cocoa_quickdraw="0" - log 1 "checking Quickdraw window subdriver... disabled (64 bits)" - return 0 - fi - -cat > tmp.osx.mm << EOF -#include -#import -int main(int argc, char *argv[]) { SetEmptyRgn(NULL); return 0; } -EOF - execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS -mmacosx-version-min=10.3 tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1" - eval $execute > /dev/null - ret=$? - log 2 "executing $execute" - log 2 " exit code $ret" - rm -f tmp.osx.mm tmp.osx - if [ "$ret" != "0" ]; then - log 1 "checking Quickdraw window subdriver... not found" - - # It was forced, so it should be found. - if [ "$enable_cocoa_quickdraw" != "1" ]; then - log 1 "configure: error: Quickdraw window driver could not be found" - exit 1 - fi - - enable_cocoa_quickdraw=0 - return 0 - fi - - enable_cocoa_quickdraw=1 - log 1 "checking Quickdraw window subdriver... found" -} - -detect_library() { - # $1 - config-param ($with_zlib value) - # $2 - library name ('zlib', sets $zlib) - # $3 - static library name (libz.a) - # $4 - header directory () - # $5 - header name (zlib.h) - # $6 - force static (if non-empty) - - if [ -n "$6" ]; then force_static="1"; fi - - # 0 means no, 1 is auto-detect, 2 is force - if [ "$1" = "0" ]; then - log 1 "checking $2... disabled" - - eval "$2=\"\"" - return 0 - fi - - log 2 "detecting $2" - - if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then - eval "$2=`ls -1 /usr/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /usr/include/$4$5... no" - eval "$2=`ls -1 /usr/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /usr/local/include/$4$5... no" - eval "$2=`ls -1 /mingw/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /mingw/include/$4$5... no" - eval "$2=`ls -1 /mingw$cpu_type/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /mingw$cpu_type/include/$4$5... no" - eval "$2=`ls -1 /opt/local/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /opt/local/include/$4$5... no" - fi - if [ -z "$res" ] && [ "$os" = "NETBSD" ]; then - eval "$2=`ls -1 /usr/pkg/include/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /usr/pkg/include/$4$5... no" - fi - fi - if [ -z "$res" ] && [ "$os" = "HAIKU" ]; then - if [ -z "$includeDir" ]; then - includeDir=`finddir B_SYSTEM_HEADERS_DIRECTORY` - fi - eval "$2=`ls -1 $includeDir/$4*.h 2>/dev/null | egrep \"\/$5\$\"`" - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying $includeDir/$4$5... no" - fi - fi - - eval "res=\$$2" - if [ -n "$res" ] && ( [ -n "$force_static" ] || ( [ "$enable_static" != "0" ] && [ "$os" != "OSX" ] ) ); then - eval "res=\$$2" - log 2 " trying $res... found" - # Now find the static lib, if needed - eval "$2=`ls /lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /lib/$3... no" - eval "$2=`ls /usr/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /usr/lib/$3... no" - eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /usr/local/lib/$3... no" - eval "$2=`ls /mingw/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /mingw/lib/$3... no" - eval "$2=`ls /mingw$cpu_type/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`" - fi - eval "res=\$$2" - if [ -z "$res" ]; then - log 2 " trying /mingw$cpu_type/lib/$3... no" - log 1 "configure: error: $2 couldn't be found" - log 1 "configure: error: you requested a static link, but I can't find $3" - - exit 1 - fi - fi - else - # Make sure it exists - if [ -f "$1" ]; then - eval "$2=`ls $1 2>/dev/null`" - else - eval "$2=`ls $1/$3 2>/dev/null`" - fi - fi - - eval "res=\$$2" - if [ -z "$res" ]; then - log 1 "checking $2... not found" - if [ "$1" = "2" ]; then - log 1 "configure: error: $2 couldn't be found" - - exit 1 - elif [ "$1" != "1" ]; then - log 1 "configure: error: $2 couldn't be found" - log 1 "configure: error: you supplied '$1', but it seems invalid" - - exit 1 - fi - - eval "with_$2=0" - - return 0 - fi - - eval "res=\$$2" - log 2 " trying $res... found" - - log 1 "checking $2... found" -} - -detect_zlib() { - detect_pkg_config "$with_zlib" "zlib" "zlib_config" "1.2" -} - -detect_lzo2() { - detect_library "$with_lzo2" "lzo2" "liblzo2.a" "lzo/" "lzo1x.h" -} - -detect_fluidsynth() { - detect_library "$with_fluidsynth" "fluidsynth" "" "" "fluidsynth.h" -} - -detect_pkg_config() { - # $1 - config-param ($with_lzma value) - # $2 - package name ('liblzma') - # $3 - config name ('lzma_config', sets $lzma_config) - # $4 - minimum module version ('2.3') - # $5 - check for dedicated, 1 is "skif if dedicated" - - # 0 means no, 1 is auto-detect, 2 is force - if [ "$1" = "0" ]; then - log 1 "checking $2... disabled" - - eval "$3=\"\"" - return 0 - fi - - if [ "$5" = "1" ] && [ "$1" = "1" ] && [ "$enable_dedicated" != "0" ]; then - log 1 "checking $2... dedicated server, skipping" - - eval "$3=\"\"" - return 0 - fi - - log 2 "detecting $2" - - if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then - pkg_config_call="$pkg_config $2" - else - pkg_config_call="$1" - fi - - version=`$pkg_config_call --modversion 2>/dev/null` - ret=$? - check_version "$4" "$version" - version_ok=$? - log 2 "executing $pkg_config_call --modversion" - log 2 " returned $version" - log 2 " exit code $ret" - - if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version_ok" != "1" ]; then - if [ -n "$version" ] && [ "$version_ok" != "1" ]; then - log 1 "checking $2... needs at least version $4, $2 NOT enabled" - else - log 1 "checking $2... not found" - fi - - # It was forced, so it should be found. - if [ "$1" != "1" ]; then - log 1 "configure: error: $pkg_config $2 couldn't be found" - log 1 "configure: error: you supplied '$1', but it seems invalid" - exit 1 - fi - - eval "$3=\"\"" - return 0 - fi - - eval "$3=\"$pkg_config_call\"" - log 1 "checking $2... found" -} - -detect_lzma() { - detect_pkg_config "$with_lzma" "liblzma" "lzma_config" "5.0" -} - -detect_xdg_basedir() { - detect_pkg_config "$with_xdg_basedir" "libxdg-basedir" "xdg_basedir_config" "1.2" -} - -detect_png() { - detect_pkg_config "$with_png" "libpng" "png_config" "1.2" -} - -detect_freetype() { - if [ "$with_freetype" = "1" ] && ([ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]); then - log 1 "checking freetype2... WIN32, skipping" - freetype_config="" - return 0 - fi - - detect_pkg_config "$with_freetype" "freetype2" "freetype_config" "2.2" "1" -} - -detect_fontconfig() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_fontconfig" = "0" ]; then - log 1 "checking libfontconfig... disabled" - - fontconfig_config="" - return 0 - fi - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then - log 1 "checking libfontconfig... WIN32, skipping" - fontconfig_config="" - return 0 - fi - - if [ "$os" = "OSX" ]; then - log 1 "checking libfontconfig... OSX, skipping" - fontconfig_config="" - return 0 - fi - - detect_pkg_config "$with_fontconfig" "fontconfig" "fontconfig_config" "2.3" "1" -} - -detect_icu_layout() { - if [ "$with_cocoa" != "0" ] && [ "$with_icu_layout" = "1" ]; then - log 1 "checking icu-lx... OSX, skipping" - icu_layout_config="" - return 0 - fi - - detect_pkg_config "$with_icu_layout" "icu-lx" "icu_layout_config" "4.8" "1" -} - -detect_icu_sort() { - if [ "$with_cocoa" != "0" ] && [ "$with_icu_sort" = "1" ]; then - log 1 "checking icu-i18n... OSX, skipping" - icu_sort_config="" - return 0 - fi - - detect_pkg_config "$with_icu_sort" "icu-i18n" "icu_sort_config" "4.8" "1" -} - -detect_iconv() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_iconv" = "0" ]; then - log 1 "checking iconv... disabled" - - return 0 - fi - - if [ "$with_iconv" = "1" ] && [ "$os" != "OSX" ]; then - log 1 "checking iconv... not OSX, skipping" - with_iconv="0" - - return 0 - fi - - # Try to find iconv.h, seems to only thing to detect iconv with - - if [ "$with_iconv" = "1" ] || [ "$with_iconv" = "" ] || [ "$with_iconv" = "2" ]; then - # Iterate over search paths - iconv="" - search_paths=`LC_ALL=C $cxx_host $OSX_SYSROOT $CFLAGS -E - -v &1 | \ - $awk '/#include <...> search starts here:/{flag=1;next}/End of search list./{flag=0}flag'` - for path in $search_paths; do - iconv=`ls -1 $path 2>/dev/null | grep "iconv.h"` - if [ -n "$iconv" ]; then - break - fi - done - else - # Make sure it exists - iconv=`ls $with_iconv/include/iconv.h 2>/dev/null` - fi - - if [ -z "$iconv" ]; then - log 1 "checking iconv... not found" - if [ "$with_iconv" = "2" ]; then - log 1 "configure: error: iconv couldn't be found" - - exit 1 - elif [ "$with_iconv" != "1" ]; then - log 1 "configure: error: iconv couldn't be found" - log 1 "configure: error: you supplied '$with_iconv', but I couldn't detect iconv in it" - - exit 1 - fi - - return 0 - fi - - if [ "$with_iconv" = "1" ]; then - with_iconv="2" - fi - - log 2 "found iconv in $iconv" - - log 1 "checking iconv... found" - - # There are different implementations of iconv. The older ones, - # e.g. SUSv2, pass a const pointer, whereas the newer ones, e.g. - # IEEE 1003.1 (2004), pass a non-const pointer. - - cat > tmp.iconv.cpp << EOF -#include "src/stdafx.h" -#include -int main() { - static char buf[1024]; - iconv_t convd = 0; - const char *inbuf = ""; - char *outbuf = buf; - size_t outlen = 1023; - size_t inlen = 0; - return iconv(convd, &inbuf, &inlen, &outbuf, &outlen); -} -EOF - execute="$cxx_host $OSX_SYSROOT $CFLAGS -c tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1" - eval $execute > /dev/null - ret=$? - log 2 "executing $execute" - log 2 " exit code $ret" - if [ "$ret" = "0" ]; then have_non_const_iconv="no"; else have_non_const_iconv="yes"; fi - log 1 "checking if iconv has non-const inbuf... $have_non_const_iconv" - - cat > tmp.iconv.cpp << EOF -#include "src/stdafx.h" -#include -int main() { - static char buf[1024]; - iconv_t convd = 0; - char *inbuf = ""; - char *outbuf = buf; - size_t outlen = 1023; - size_t inlen = 0; - return iconv(convd, &inbuf, &inlen, &outbuf, &outlen); -} -EOF - execute="$cxx_host $OSX_SYSROOT $OSX_LD_SYSROOT $CFLAGS tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1" - eval $execute > /dev/null - ret=$? - log 2 "executing $execute" - log 2 " exit code $ret" - if [ "$ret" = "0" ]; then link_to_iconv="no"; else link_to_iconv="yes"; fi - log 1 "checking whether to link to iconv... $link_to_iconv" - rm -f tmp.iconv tmp.iconv.cpp -} - -_detect_sort() { - sort_test_in="d -a -c -b" - - sort_test_out="a -b -c -d" - - log 2 "running echo | $1" - - if [ "`echo \"$sort_test_in\" | $1 2>/dev/null`" = "$sort_test_out" ]; then - sort="$1" - log 2 " result was valid" - else - log 2 " result was invalid" - fi -} - -detect_sort() { - if [ "$with_sort" = "0" ]; then - log 1 "checking sort... disabled" - - return - fi - - if [ "$with_sort" = "1" ] || [ "$with_sort" = "2" ]; then - _detect_sort "sort" - if [ -z "$sort" ]; then _detect_sort "/sbin/sort"; fi - if [ -z "$sort" ]; then _detect_sort "/usr/sbin/sort"; fi - if [ -z "$sort" ]; then _detect_sort "/usr/local/sbin/sort"; fi - if [ -z "$sort" ]; then _detect_sort "/bin/sort"; fi - if [ -z "$sort" ]; then _detect_sort "/usr/bin/sort"; fi - if [ -z "$sort" ]; then _detect_sort "/usr/local/bin/sort"; fi - else - _detect_sort "$with_sort" - fi - - if [ -z "$sort" ]; then - if [ "$with_sort" = "2" ]; then - log 1 "checking sort... not found" - - log 1 "configure: error: couldn't detect sort on your system" - exit 1 - elif [ "$with_sort" != "1" ]; then - log 1 "checking sort... $with_sort not found" - - log 1 "configure: error: '$with_sort' doesn't look like a sort to me" - log 1 "configure: error: please verify its location and function and try again" - - exit 1 - else - log 1 "checking sort... not found" - fi - else - log 1 "checking sort... $sort" - fi -} - -detect_grfcodec() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_grfcodec" = "0" ]; then - log 1 "checking grfcodec... disabled" - - grfcodec="" - return 0 - fi - - if [ "$with_grfcodec" = "1" ] || [ "$with_grfcodec" = "" ] || [ "$with_grfcodec" = "2" ]; then - grfcodec="grfcodec" - else - grfcodec="$with_grfcodec" - fi - - version=`$grfcodec -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'` - ret=$? - log 2 "executing grfcodec -v" - log 2 " returned $version" - log 2 " exit code $ret" - - if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then - if [ -n "$version" ] && [ "$version" -lt "985" ]; then - log 1 "checking grfcodec... needs at least version 6.0.5 (r985), disabled" - else - log 1 "checking grfcodec... not found" - fi - - # It was forced, so it should be found. - if [ "$with_grfcodec" != "1" ]; then - log 1 "configure: error: grfcodec couldn't be found" - log 1 "configure: error: you supplied '$with_grfcodec', but it seems invalid" - exit 1 - fi - - grfcodec="" - return 0 - fi - - log 1 "checking grfcodec... found" -} - -detect_nforenum() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_nforenum" = "0" ]; then - log 1 "checking nforenum... disabled" - - nforenum="" - return 0 - fi - - if [ "$with_nforenum" = "1" ] || [ "$with_nforenum" = "" ] || [ "$with_nforenum" = "2" ]; then - nforenum="nforenum" - else - nforenum="$with_nforenum" - fi - - version=`$nforenum -v 2>/dev/null | $awk '{print $3}' | sed 's/[rM]//g;s/-/0/'` - ret=$? - log 2 "executing nforenum -v" - log 2 " returned $version" - log 2 " exit code $ret" - - if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$version" -lt "985" ]; then - if [ -n "$version" ] && [ "$version" -lt "985" ]; then - log 1 "checking nforenum... needs at least version 6.0.5 (r985), disabled" - else - log 1 "checking nforenum... not found" - fi - - # It was forced, so it should be found. - if [ "$with_nforenum" != "1" ]; then - log 1 "configure: error: nforenum couldn't be found" - log 1 "configure: error: you supplied '$with_nforenum', but it seems invalid" - exit 1 - fi - - nforenum="" - return 0 - fi - - log 1 "checking nforenum... found" -} - -detect_cputype() { - if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then - log 1 "forcing cpu-type... $cpu_type bits" - return; - fi - echo "#define _SQ64 1" > tmp.64bit.cpp - echo "#include \"src/stdafx.h\"" >> tmp.64bit.cpp - echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp - echo "int main() { return 0; }" >> tmp.64bit.cpp - execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1" - cpu_type="`eval $execute 2>/dev/null`" - ret=$? - log 2 "executing $execute" - log 2 " returned $cpu_type" - log 2 " exit code $ret" - if [ "$ret" = "0" ]; then cpu_type="64"; else cpu_type="32"; fi - log 1 "detecting cpu-type... $cpu_type bits" - rm -f tmp.64bit tmp.64bit.cpp -} - -detect_sse_capable_architecture() { - # 0 means no, 1 is auto-detect, 2 is force - if [ "$with_sse" = "0" ]; then - log 1 "checking SSE... disabled" - return - fi - - echo "#define _SQ64 1" > tmp.sse.cpp - echo "#include " >> tmp.sse.cpp - echo "#include " >> tmp.sse.cpp - echo "#include " >> tmp.sse.cpp - echo "int main() { return 0; }" >> tmp.sse.cpp - execute="$cxx_host -msse4.1 $CFLAGS tmp.sse.cpp -o tmp.sse 2>&1" - sse="`eval $execute 2>/dev/null`" - ret=$? - log 2 "executing $execute" - log 2 " returned $sse" - log 2 " exit code $ret" - if [ "$ret" = "0" ]; then - log 1 "detecting SSE... found" - else - # It was forced, so it should be found. - if [ "$with_sse" != "1" ]; then - log 1 "configure: error: SSE couldn't be found" - log 1 "configure: error: you force enabled SSE, but it seems unavailable" - exit 1 - fi - - log 1 "detecting SSE... not found" - with_sse="0" - fi - rm -f tmp.sse tmp.exe tmp.sse.cpp -} - -make_sed() { - T_CFLAGS="$CFLAGS" - T_CXXFLAGS="$CXXFLAGS" - T_LDFLAGS="$LDFLAGS" - - SRC_OBJS_DIR="$BASE_SRC_OBJS_DIR/$OBJS_SUBDIR" - - # All the data needed to compile a single target - # Make sure if you compile multiple targets to - # use multiple OBJS_DIR, because all in-between - # binaries are stored in there, and nowhere else. - SRC_REPLACE=" - s@!!CC_HOST!!@$cc_host@g; - s@!!CXX_HOST!!@$cxx_host@g; - s@!!CC_BUILD!!@$cc_build@g; - s@!!CXX_BUILD!!@$cxx_build@g; - s@!!WINDRES!!@$windres@g; - s@!!STRIP!!@$strip $strip_arg@g; - s@!!LIPO!!@$lipo@g; - s@!!CFLAGS!!@$T_CFLAGS@g; - s@!!CFLAGS_BUILD!!@$CFLAGS_BUILD@g; - s@!!CXXFLAGS!!@$T_CXXFLAGS@g; - s@!!CXXFLAGS_BUILD!!@$CXXFLAGS_BUILD@g; - s@!!STRGEN_FLAGS!!@$strgen_flags@g; - s@!!LIBS!!@$LIBS@g; - s@!!LDFLAGS!!@$T_LDFLAGS@g; - s@!!LDFLAGS_BUILD!!@$LDFLAGS_BUILD@g; - s@!!BIN_DIR!!@$BIN_DIR@g; - s@!!ROOT_DIR!!@$ROOT_DIR@g; - s@!!MEDIA_DIR!!@$MEDIA_DIR@g; - s@!!SOURCE_LIST!!@$SOURCE_LIST@g; - s@!!SRC_OBJS_DIR!!@$SRC_OBJS_DIR@g; - s@!!LANG_OBJS_DIR!!@$LANG_OBJS_DIR@g; - s@!!GRF_OBJS_DIR!!@$GRF_OBJS_DIR@g; - s@!!SETTING_OBJS_DIR!!@$SETTING_OBJS_DIR@g; - s@!!SRC_DIR!!@$SRC_DIR@g; - s@!!SCRIPT_SRC_DIR!!@$SCRIPT_SRC_DIR@g; - s@!!OSXAPP!!@$OSXAPP@g; - s@!!LANG_DIR!!@$LANG_DIR@g; - s@!!TTD!!@$TTD@g; - s@!!BINARY_DIR!!@$prefix_dir/$binary_dir@g; - s@!!DATA_DIR!!@$prefix_dir/$data_dir@g; - s@!!DOC_DIR!!@$prefix_dir/$doc_dir@g; - s@!!MAN_DIR!!@$prefix_dir/$man_dir@g; - s@!!ICON_DIR!!@$prefix_dir/$icon_dir@g; - s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g; - s@!!PERSONAL_DIR!!@$personal_dir@g; - s@!!SHARED_DIR!!@$shared_dir@g; - s@!!INSTALL_DIR!!@$install_dir@g; - s@!!BINARY_NAME!!@$binary_name@g; - s@!!STRGEN!!@$STRGEN@g; - s@!!DEPEND!!@$DEPEND@g; - s@!!SETTINGSGEN!!@$SETTINGSGEN@g; - s@!!STAGE!!@$STAGE@g; - s@!!MAKEDEPEND!!@$makedepend@g; - s@!!CFLAGS_MAKEDEP!!@$cflags_makedep@g; - s@!!SORT!!@$sort@g; - s@!!CONFIG_CACHE_COMPILER!!@config.cache.compiler@g; - s@!!CONFIG_CACHE_LINKER!!@config.cache.linker@g; - s@!!CONFIG_CACHE_SOURCE!!@config.cache.source@g; - s@!!CONFIG_CACHE_VERSION!!@config.cache.version@g; - s@!!CONFIG_CACHE_SOURCE_LIST!!@config.cache.source.list@g; - s@!!CONFIG_CACHE_PWD!!@config.cache.pwd@g; - s@!!LANG_SUPPRESS!!@$lang_suppress@g; - s@!!OBJS_C!!@$OBJS_C@g; - s@!!OBJS_CPP!!@$OBJS_CPP@g; - s@!!OBJS_MM!!@$OBJS_MM@g; - s@!!OBJS_RC!!@$OBJS_RC@g; - s@!!SRCS!!@$SRCS@g; - s@!!OS!!@$os@g; - s@!!CONFIGURE_FILES!!@$CONFIGURE_FILES@g; - s@!!AWK!!@$awk@g; - s@!!DISTCC!!@$distcc@g; - s@!!NFORENUM!!@$nforenum@g; - s@!!GRFCODEC!!@$grfcodec@g; - " - - if [ "$icon_theme_dir" != "" ]; then - SRC_REPLACE="$SRC_REPLACE - s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g; - " - else - SRC_REPLACE="$SRC_REPLACE - s@!!ICON_THEME_DIR!!@@g; - " - fi - - if [ "$man_dir" != "" ]; then - SRC_REPLACE="$SRC_REPLACE - s@!!MAN_DIR!!@$prefix_dir/$man_dir@g; - " - else - SRC_REPLACE="$SRC_REPLACE - s@!!MAN_DIR!!@@g; - " - fi - - if [ "$menu_dir" != "" ]; then - SRC_REPLACE="$SRC_REPLACE - s@!!MENU_DIR!!@$prefix_dir/$menu_dir@g; - " - else - SRC_REPLACE="$SRC_REPLACE - s@!!MENU_DIR!!@@g; - " - fi -} - -generate_menu_item() { - MENU_REPLACE=" - s@!!TTD!!@$TTD@g; - s@!!MENU_GROUP!!@$menu_group@g; - s@!!MENU_NAME!!@$menu_name@g - " - log 1 "Generating menu item..." - mkdir -p media - < $ROOT_DIR/media/openttd.desktop.in sed "$MENU_REPLACE" > media/openttd.desktop -} - -generate_main() { - STAGE="[MAIN]" - - make_sed - - # Create the main Makefile - log 1 "Generating Makefile..." - echo "# Auto-generated file from 'Makefile.in' -- DO NOT EDIT" > Makefile - < $ROOT_DIR/Makefile.in sed "$SRC_REPLACE" >> Makefile - cp $ROOT_DIR/Makefile.bundle.in Makefile.bundle - echo "# Auto-generated file -- DO NOT EDIT" > Makefile.am - echo >> Makefile.am - # Make the copy of the source-list, so we don't trigger an unwanted recompile - cp $SOURCE_LIST config.cache.source.list - # Add the current directory, so we don't trigger an unwanted recompile - echo "`pwd`" > config.cache.pwd - # Make sure config.cache is OLDER then config.cache.source.list - touch config.cache - touch config.pwd - - if [ "$menu_dir" != "" ]; then - generate_menu_item - fi -} - -generate_lang() { - STAGE="[LANG]" - - make_sed - - # Create the language file - mkdir -p $LANG_OBJS_DIR - - log 1 "Generating lang/Makefile..." - echo "# Auto-generated file from 'Makefile.lang.in' -- DO NOT EDIT" > $LANG_OBJS_DIR/Makefile - < $ROOT_DIR/Makefile.lang.in sed "$SRC_REPLACE" >> $LANG_OBJS_DIR/Makefile - echo "DIRS += $LANG_OBJS_DIR" >> Makefile.am - echo "LANG_DIRS += $LANG_OBJS_DIR" >> Makefile.am -} - -generate_settings() { - STAGE="[SETTING]" - - make_sed - - # Create the language file - mkdir -p $SETTING_OBJS_DIR - - log 1 "Generating setting/Makefile..." - echo "# Auto-generated file from 'Makefile.settings.in' -- DO NOT EDIT" > $SETTING_OBJS_DIR/Makefile - < $ROOT_DIR/Makefile.setting.in sed "$SRC_REPLACE" >> $SETTING_OBJS_DIR/Makefile - echo "DIRS += $SETTING_OBJS_DIR" >> Makefile.am -} - -generate_grf() { - STAGE="[BASESET]" - - make_sed - - # Create the language file - mkdir -p $GRF_OBJS_DIR - - log 1 "Generating grf/Makefile..." - echo "# Auto-generated file from 'Makefile.grf.in' -- DO NOT EDIT" > $GRF_OBJS_DIR/Makefile - < $ROOT_DIR/Makefile.grf.in sed "$SRC_REPLACE" >> $GRF_OBJS_DIR/Makefile - echo "DIRS += $GRF_OBJS_DIR" >> Makefile.am -} - -generate_src_normal() { - STAGE=$1 - - make_sed - - # Create the source file - mkdir -p $SRC_OBJS_DIR - - log 1 "Generating $2/Makefile..." - echo "# Auto-generated file from 'Makefile.src.in' -- DO NOT EDIT" > $SRC_OBJS_DIR/Makefile - < $ROOT_DIR/Makefile.src.in sed "$SRC_REPLACE" >> $SRC_OBJS_DIR/Makefile - echo "DIRS += $SRC_OBJS_DIR" >> Makefile.am - echo "SRC_DIRS += $SRC_OBJS_DIR" >> Makefile.am -} - -generate_src_osx() { - cc_host_orig="$cc_host" - cxx_host_orig="$cxx_host" - CFLAGS_orig="$CFLAGS" - LDFLAGS_orig="$LDFLAGS" - - for type in $enable_universal; do - - if [ -n "$osx_sdk_104_path" ]; then - # Use 10.4 SDK for 32-bit targets - CFLAGS="-isysroot $osx_sdk_104_path $CFLAGS_orig" - LDFLAGS="-Wl,-syslibroot,$osx_sdk_104_path $LDFLAGS_orig" - fi - - # We don't want to duplicate the x86_64 stuff for each target, so do it once here - if [ "$type" = "ppc64" ] || [ "$type" = "x86_64" ]; then - # 64 bits is always 10.5 or higher. Furthermore it has a non const ICONV - # and they also removed support for QuickTime/QuickDraw - if [ -n "$osx_sdk_path" ]; then - CFLAGS="-isysroot $osx_sdk_path $CFLAGS_orig" - LDFLAGS="-Wl,-syslibroot,$osx_sdk_path $LDFLAGS_orig" - fi - CFLAGS="$CFLAGS -D_SQ64 -DNO_QUICKTIME -UENABLE_COCOA_QUICKDRAW" - LIBS="`echo $LIBS | sed 's/-framework QuickTime//'`" - fi - - case $type in - ppc) - BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc" - cc_host="$cc_host_orig -arch ppc -mmacosx-version-min=10.3" - cxx_host="$cxx_host_orig -arch ppc -mmacosx-version-min=10.3" - generate_src_normal "[ppc]" "objs/ppc";; - ppc970) - BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc970" - cc_host="$cc_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt" - cxx_host="$cxx_host_orig -arch ppc970 -mmacosx-version-min=10.3 -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt" - generate_src_normal "[ppc970]" "objs/ppc970";; - i386) - BASE_SRC_OBJS_DIR="$OBJS_DIR/i386" - cc_host="$cc_host_orig -arch i386 -mmacosx-version-min=10.4" - cxx_host="$cxx_host_orig -arch i386 -mmacosx-version-min=10.4" - generate_src_normal "[i386]" "objs/i386";; - ppc64) - BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc64" - cc_host="$cc_host_orig -arch ppc64 -mmacosx-version-min=10.5" - cxx_host="$cxx_host_orig -arch ppc64 -mmacosx-version-min=10.5" - generate_src_normal "[ppc64]" "objs/ppc64";; - x86_64) - BASE_SRC_OBJS_DIR="$OBJS_DIR/x86_64" - cc_host="$cc_host_orig -arch x86_64 -mmacosx-version-min=10.5" - cxx_host="$cxx_host_orig -arch x86_64 -mmacosx-version-min=10.5" - generate_src_normal "[x86_64]" "objs/x86_64";; - *) log 1 "Unknown architecture requested for universal build: $type";; - esac - done -} - -generate_src() { - if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then - generate_src_osx - else - generate_src_normal "[SRC]" "objs" - fi -} - -showhelp() { - echo "'configure' configures OpenTTD." - echo "" - echo "Usage: $0 [OPTION]... [VAR=VALUE]..." - echo "" - echo "To assign environment variables (e.g., CC, CFLAGS...), specify them as" - echo "VAR=VALUE. See below for descriptions of some of the useful variables." - echo "" - echo "Defaults for the options are specified in brackets." - echo "" - echo "Configuration:" - echo " -h, --help display this help and exit" - echo "" - echo "System types:" - echo " --build=BUILD configure for building on BUILD [guessed]" - echo " --host=HOST cross-compile to build programs to run" - echo " on HOST [BUILD]" - echo " --windres=WINDRES the windres to use [HOST-windres]" - echo " --strip=STRIP the strip to use [HOST-strip]" - echo " --awk=AWK the awk to use in configure [awk]" - echo " --pkg-config=PKG-CONFIG the pkg-config to use in configure [pkg-config]" - echo " --lipo=LIPO the lipo to use (OSX ONLY) [HOST-lipo]" - echo " --os=OS the OS we are compiling for [DETECT]" - echo " DETECT/UNIX/OSX/FREEBSD/DRAGONFLY/OPENBSD/" - echo " NETBSD/HPUX/SUNOS/CYGWIN/" - echo " MINGW/OS2/HAIKU" - echo "" - echo "Paths:" - echo " --prefix-dir=dir specifies the prefix for all installed" - echo " files [/usr/local]" - echo " --binary-dir=dir location of the binary. Will be prefixed" - echo " with the prefix-dir [games]" - echo " --data-dir=dir location of data files (lang, data, gm)." - echo " Will be prefixed with the prefix-dir" - echo " [share/games/openttd]" - echo " --doc-dir=dir location of the doc files" - echo " Will be prefixed with the prefix-dir" - echo " [$doc_dir]" - echo " --icon-dir=dir location of icons. Will be prefixed" - echo " with the prefix-dir [share/pixmaps]" - echo " --icon-theme-dir=dir location of icon theme." - echo " Will be prefixed with the prefix-dir" - echo " and postfixed with size-dirs [$icon_theme_dir]" - echo " --man-dir=dir location of the manual page (UNIX only)" - echo " Will be prefixed with the prefix-dir" - echo " [$man_dir]" - echo " --menu-dir=dir location of the menu item. (UNIX only, except OSX)" - echo " Will be prefixed with the prefix-dir" - echo " [share/applications]" - echo " --personal-dir=dir location of the personal directory" - echo " [os-dependent default]" - echo " --shared-dir=dir location of shared data files" - echo " [os-dependent default]" - echo " --install-dir=dir specifies the root to install to." - echo " Useful to install into jails [/]" - echo " --binary-name the name used for the binary, icons," - echo " desktop file, etc. when installing [openttd]" - echo "" - echo "Features and packages:" - echo " --enable-debug[=LVL] enable debug-mode (LVL=[0123], 0 is release)" - echo " --enable-desync-debug=[LVL] enable desync debug options (LVL=[012], 0 is none" - echo " --enable-profiling enables profiling" - echo " --enable-lto enables GCC's Link Time Optimization (LTO)/ICC's" - echo " Interprocedural Optimization if available" - echo " --enable-dedicated compile a dedicated server (without video)" - echo " --enable-static enable static compile (doesn't work for" - echo " all HOSTs)" - echo " --enable-translator enable extra output for translators" - echo " --enable-universal[=ARCH] enable universal builds (OSX ONLY). Allowed is any combination" - echo " of architectures: i386 ppc ppc970 ppc64 x86_64" - echo " Default architectures are: i386 ppc" - echo " --enable-osx-g5 enables optimizations for ppc970 (G5) (OSX ONLY)" - echo " --disable-cocoa-quartz disable the quartz window mode driver for Cocoa (OSX ONLY)" - echo " --disable-cocoa-quickdraw disable the quickdraw window mode driver for Cocoa (OSX ONLY)" - echo " --disable-unicode disable unicode support to build win9x" - echo " version (Win32 ONLY)" - echo " --enable-console compile as a console application instead of as a GUI application." - echo " If this setting is active, debug output will appear in the same" - echo " console instead of opening a new window. (Win32 ONLY)" - echo " --disable-assert disable asserts (continue on errors)" - echo " --enable-strip enable any possible stripping" - echo " --without-osx-sysroot disable the automatic adding of sysroot " - echo " (OSX ONLY)" - echo " --without-application-bundle disable generation of application bundle" - echo " (OSX ONLY)" - echo " --without-menu-entry Don't generate a menu item (Freedesktop based only)" - echo " --menu-group=group Category in which the menu item will be placed (Freedesktop based only)" - echo " --menu-name=name Name of the menu item when placed [OpenTTD]" - echo " --with-direct-music enable direct music support (Win32 ONLY)" - echo " --with-sort=sort define a non-default location for sort" - echo " --with-midi=midi define which midi-player to use" - echo " --with-midi-arg=arg define which args to use for the" - echo " midi-player" - echo " --with-fluidsynth enables fluidsynth support" - echo " --with-allegro[=\"pkg-config allegro\"]" - echo " enables Allegro video driver support" - echo " --with-cocoa enables COCOA video driver (OSX ONLY)" - echo " --with-sdl[=\"sdl1|sdl2\"] enables SDL video driver support" - echo " --with-zlib[=\"pkg-config zlib\"]" - echo " enables zlib support" - echo " --with-liblzma[=\"pkg-config liblzma\"]" - echo " enables liblzma support" - echo " --with-liblzo2[=liblzo2.a] enables liblzo2 support" - echo " --with-png[=\"pkg-config libpng\"]" - echo " enables libpng support" - echo " --with-freetype[=\"pkg-config freetype2\"]" - echo " enables libfreetype support" - echo " --with-fontconfig[=\"pkg-config fontconfig\"]" - echo " enables fontconfig support" - echo " --with-xdg-basedir[=\"pkg-config libxdg-basedir\"]" - echo " enables XDG base directory support" - echo " --with-icu enables icu components for layout and sorting" - echo " --with-icu-layout[=\"pkg-config icu-lx\"]" - echo " enables icu components for layouting (right-to-left support)" - echo " --with-icu-sort[=\"pkg-config icu-i18n\"]" - echo " enables icu components for locale specific string sorting" - echo " --static-icu try to link statically (libsicu instead of" - echo " libicu; can fail as the new name is guessed)" - echo " --with-iconv[=iconv-path] enables iconv support" - echo " --disable-builtin-depend disable use of builtin deps finder" - echo " --with-makedepend[=makedepend] enables makedepend support" - echo " --with-ccache enables ccache support" - echo " --with-distcc enables distcc support" - echo " --without-grfcodec disable usage of grfcodec and re-generation of base sets" - echo " --without-threads disable threading support" - echo " --without-sse disable SSE support (x86/x86_64 only)" - echo "" - echo "Some influential environment variables:" - echo " CC C compiler command" - echo " CXX C++ compiler command" - echo " CFLAGS C compiler flags" - echo " CXXFLAGS C++ compiler flags" - echo " WINDRES windres command" - echo " LDFLAGS linker flags, e.g. -L if you" - echo " have libraries in a nonstandard" - echo " directory " - echo " CFLAGS_BUILD C compiler flags for build time tool generation" - echo " CXXFLAGS_BUILD C++ compiler flags for build time tool generation" - echo " LDFLAGS_BUILD linker flags for build time tool generation" - echo " PKG_CONFIG_PATH additional library search paths (see \"man pkg-config\")" - echo " PKG_CONFIG_LIBDIR replace the default library search path (see \"man pkg-config\")" - echo "" - echo "Use these variables to override the choices made by 'configure' or to help" - echo "it to find libraries and programs with nonstandard names/locations." -} 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/palettes/palette_key.png b/docs/palettes/palette_key.png new file mode 100644 index 0000000000..70e9452199 Binary files /dev/null and b/docs/palettes/palette_key.png differ diff --git a/findversion.sh b/findversion.sh deleted file mode 100755 index 28fcc121f7..0000000000 --- a/findversion.sh +++ /dev/null @@ -1,114 +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 . - - -# Arguments given? Show help text. -if [ "$#" != "0" ]; then - cat <\t\t\t -VERSION - a string describing what version of the code the current checkout is - based on. - This also includes the commit date, an indication of whether the checkout - was modified and which branch was checked out. This value is not - guaranteed to be sortable, but is mainly meant for identifying the - revision and user display. - - If no revision identifier could be found, this is left empty. -ISODATE - the commit date of the revision this checkout is based on. - The commit date may differ from the author date. - This can be used to decide upon the age of the source. - - If no timestamp could be found, this is left empty. -MODIFIED - Whether (the src directory of) this checkout is modified or not. A - value of 0 means not modified, a value of 2 means it was modified. - - A value of 1 means that the modified status is unknown, because this - is not an git checkout for example. - -HASH - the git revision hash - -By setting the AWK environment variable, a caller can determine which -version of "awk" is used. If nothing is set, this script defaults to -"awk". -EOF -exit 1; -fi - -# Allow awk to be provided by the caller. -if [ -z "$AWK" ]; then - AWK=awk -fi - -# Find out some dirs -cd `dirname "$0"` -ROOT_DIR=`pwd` - -# Determine if we are using a modified version -# Assume the dir is not modified -MODIFIED="0" -if [ -d "$ROOT_DIR/.git" ] || [ -f "$ROOT_DIR/.git" ]; then - # We are a git checkout - # Refresh the index to make sure file stat info is in sync, then look for modifications - git update-index --refresh >/dev/null - if [ -n "`git diff-index HEAD`" ]; then - MODIFIED="2" - fi - HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null` - SHORTHASH=`echo ${HASH} | cut -c1-10` - ISODATE=`LC_ALL=C git show -s --pretty='format:%ci' HEAD | "$AWK" '{ gsub("-", "", $1); print $1 }'` - YEAR=`echo ${ISODATE} | cut -c1-4` - BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@'`" - TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`" - - if [ "$MODIFIED" -eq "0" ]; then - hashprefix="-g" - elif [ "$MODIFIED" -eq "2" ]; then - hashprefix="-m" - else - hashprefix="-u" - fi - - if [ -n "$TAG" ]; then - VERSION="${TAG}" - ISTAG="1" - if [ -n "`echo \"${TAG}\" | grep \"^[0-9.]*$\"`" ]; then - ISSTABLETAG="1" - else - ISSTABLETAG="0" - fi - else - VERSION="${ISODATE}-${BRANCH}${hashprefix}${SHORTHASH}" - ISTAG="0" - ISSTABLETAG="0" - fi - -elif [ -f "$ROOT_DIR/.ottdrev" ]; then - # We are an exported source bundle - cat $ROOT_DIR/.ottdrev - exit -else - # We don't know - MODIFIED="1" - HASH="" - SHORTHASH="" - BRANCH="" - ISODATE="" - YEAR="" - TAG="" - VERSION="" - ISTAG="0" - ISSTABLETAG="0" -fi - -echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG $ISSTABLETAG $YEAR" diff --git a/known-bugs.txt b/known-bugs.txt index 99abb83a88..a687dff4a5 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -1,6 +1,6 @@ OpenTTD's known bugs -Last updated: 2020-08-09 -Release version: 1.10.3 +Last updated: 2021-01-22 +Release version: 1.11.0-beta1 ------------------------------------------------------------------------ diff --git a/media/baseset/CMakeLists.txt b/media/baseset/CMakeLists.txt new file mode 100644 index 0000000000..48aa443a5b --- /dev/null +++ b/media/baseset/CMakeLists.txt @@ -0,0 +1,87 @@ +add_subdirectory(openttd) +add_subdirectory(orig_extra) + +set(BASESET_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/orig_dos.obg + ${CMAKE_CURRENT_SOURCE_DIR}/orig_dos_de.obg + ${CMAKE_CURRENT_SOURCE_DIR}/orig_win.obg + ${CMAKE_CURRENT_SOURCE_DIR}/no_music.obm + ${CMAKE_CURRENT_SOURCE_DIR}/orig_dos.obm + ${CMAKE_CURRENT_SOURCE_DIR}/orig_tto.obm + ${CMAKE_CURRENT_SOURCE_DIR}/orig_win.obm + ${CMAKE_CURRENT_SOURCE_DIR}/no_sound.obs + ${CMAKE_CURRENT_SOURCE_DIR}/orig_dos.obs + ${CMAKE_CURRENT_SOURCE_DIR}/orig_win.obs +) +set(BASESET_OTHER_SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/openttd.grf + ${CMAKE_CURRENT_SOURCE_DIR}/opntitle.dat + ${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.grf +) + +# Done by the subdirectories, if nforenum / grfcodec is installed +if(GRFCODEC_FOUND) + set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/openttd.grf PROPERTIES GENERATED TRUE) + set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.grf PROPERTIES GENERATED TRUE) + + list(APPEND BASESET_BINARY_FILES openttd.grf) + list(APPEND BASESET_BINARY_FILES orig_extra.grf) +endif() + +set(BASESET_EXTRAGRF_FILE ${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.grf) + +# Walk over all the baseset files, and generate a command to configure them +foreach(BASESET_SOURCE_FILE IN LISTS BASESET_SOURCE_FILES) + get_filename_component(BASESET_SOURCE_FILE_NAME "${BASESET_SOURCE_FILE}" NAME) + set(BASESET_BINARY_FILE "${CMAKE_BINARY_DIR}/baseset/${BASESET_SOURCE_FILE_NAME}") + + get_target_property(LANG_SOURCE_FILES language_files LANG_SOURCE_FILES) + + add_custom_command_timestamp(OUTPUT ${BASESET_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} + -DBASESET_SOURCE_FILE=${BASESET_SOURCE_FILE} + -DBASESET_BINARY_FILE=${BASESET_BINARY_FILE} + -DBASESET_EXTRAGRF_FILE=${BASESET_EXTRAGRF_FILE} + -P ${CMAKE_SOURCE_DIR}/cmake/scripts/Baseset.cmake + -- + ${LANG_SOURCE_FILES} + MAIN_DEPENDENCY ${BASESET_SOURCE_FILE} + DEPENDS ${LANG_SOURCE_FILES} + ${BASESET_EXTRAGRF_FILE} + ${CMAKE_SOURCE_DIR}/cmake/scripts/Baseset.cmake + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating ${BASESET_SOURCE_FILE_NAME} baseset metadata file" + ) + + list(APPEND BASESET_BINARY_FILES ${BASESET_BINARY_FILE}) +endforeach() + +# Walk over all the other baseset files, and generate a command to copy them +foreach(BASESET_OTHER_SOURCE_FILE IN LISTS BASESET_OTHER_SOURCE_FILES) + get_filename_component(BASESET_OTHER_SOURCE_FILE_NAME "${BASESET_OTHER_SOURCE_FILE}" NAME) + set(BASESET_OTHER_BINARY_FILE "${CMAKE_BINARY_DIR}/baseset/${BASESET_OTHER_SOURCE_FILE_NAME}") + + add_custom_command(OUTPUT ${BASESET_OTHER_BINARY_FILE} + COMMAND ${CMAKE_COMMAND} -E copy + ${BASESET_OTHER_SOURCE_FILE} + ${BASESET_OTHER_BINARY_FILE} + MAIN_DEPENDENCY ${BASESET_OTHER_SOURCE_FILE} + COMMENT "Copying ${BASESET_OTHER_SOURCE_FILE_NAME} baseset file" + ) + + list(APPEND BASESET_BINARY_FILES ${BASESET_OTHER_BINARY_FILE}) +endforeach() + +# Create a new target which generates all baseset metadata files +add_custom_target_timestamp(baseset_files + DEPENDS + ${BASESET_BINARY_FILES} +) + +add_library(basesets + INTERFACE +) +add_dependencies(basesets + baseset_files +) +add_library(openttd::basesets ALIAS basesets) diff --git a/media/baseset/no_music.obm b/media/baseset/no_music.obm index e395ba0b0e..3b8b9657ae 100644 --- a/media/baseset/no_music.obm +++ b/media/baseset/no_music.obm @@ -5,7 +5,7 @@ name = NoMusic shortname = NULL version = 0 fallback = true -!! description STR_BASEMUSIC_NONE_DESCRIPTION +@description_STR_BASEMUSIC_NONE_DESCRIPTION@ [files] theme = diff --git a/media/baseset/no_sound.obs b/media/baseset/no_sound.obs index fd2430de54..3b546d5bb4 100644 --- a/media/baseset/no_sound.obs +++ b/media/baseset/no_sound.obs @@ -5,7 +5,7 @@ name = NoSound shortname = NULL version = 2 fallback = true -!! description STR_BASESOUNDS_NONE_DESCRIPTION +@description_STR_BASESOUNDS_NONE_DESCRIPTION@ [files] samples = diff --git a/bin/baseset/openttd.grf b/media/baseset/openttd.grf similarity index 99% rename from bin/baseset/openttd.grf rename to media/baseset/openttd.grf index 550863ff91..a63bfc4e29 100644 Binary files a/bin/baseset/openttd.grf and b/media/baseset/openttd.grf differ diff --git a/media/extra_grf/2ccmap.nfo b/media/baseset/openttd/2ccmap.nfo similarity index 100% rename from media/extra_grf/2ccmap.nfo rename to media/baseset/openttd/2ccmap.nfo diff --git a/media/baseset/openttd/CMakeLists.txt b/media/baseset/openttd/CMakeLists.txt new file mode 100644 index 0000000000..5a98b73f5c --- /dev/null +++ b/media/baseset/openttd/CMakeLists.txt @@ -0,0 +1,9 @@ +# In case both NFORenum and GRFCodec are found, generate the GRF. +# Otherwise, just use them from the cache (read: git). +# This is mainly because not many people have both of these tools installed, +# so it is cheaper to cache them in git, and only regenerate when you are +# working on it / have the tools installed. +if(GRFCODEC_FOUND) + include(CreateGrfCommand) + create_grf_command() +endif() diff --git a/media/extra_grf/airport_preview.nfo b/media/baseset/openttd/airport_preview.nfo similarity index 100% rename from media/extra_grf/airport_preview.nfo rename to media/baseset/openttd/airport_preview.nfo diff --git a/media/extra_grf/airport_preview.png b/media/baseset/openttd/airport_preview.png similarity index 100% rename from media/extra_grf/airport_preview.png rename to media/baseset/openttd/airport_preview.png diff --git a/media/extra_grf/airports.nfo b/media/baseset/openttd/airports.nfo similarity index 100% rename from media/extra_grf/airports.nfo rename to media/baseset/openttd/airports.nfo diff --git a/media/extra_grf/airports.png b/media/baseset/openttd/airports.png similarity index 100% rename from media/extra_grf/airports.png rename to media/baseset/openttd/airports.png diff --git a/media/extra_grf/aqueduct.nfo b/media/baseset/openttd/aqueduct.nfo similarity index 100% rename from media/extra_grf/aqueduct.nfo rename to media/baseset/openttd/aqueduct.nfo diff --git a/media/extra_grf/aqueduct.png b/media/baseset/openttd/aqueduct.png similarity index 100% rename from media/extra_grf/aqueduct.png rename to media/baseset/openttd/aqueduct.png diff --git a/media/extra_grf/autorail.nfo b/media/baseset/openttd/autorail.nfo similarity index 100% rename from media/extra_grf/autorail.nfo rename to media/baseset/openttd/autorail.nfo diff --git a/media/extra_grf/autorail.png b/media/baseset/openttd/autorail.png similarity index 100% rename from media/extra_grf/autorail.png rename to media/baseset/openttd/autorail.png diff --git a/media/extra_grf/canal_locks.png b/media/baseset/openttd/canal_locks.png similarity index 100% rename from media/extra_grf/canal_locks.png rename to media/baseset/openttd/canal_locks.png diff --git a/media/extra_grf/canals.nfo b/media/baseset/openttd/canals.nfo similarity index 100% rename from media/extra_grf/canals.nfo rename to media/baseset/openttd/canals.nfo diff --git a/media/extra_grf/canals.png b/media/baseset/openttd/canals.png similarity index 100% rename from media/extra_grf/canals.png rename to media/baseset/openttd/canals.png diff --git a/media/extra_grf/chars.nfo b/media/baseset/openttd/chars.nfo similarity index 100% rename from media/extra_grf/chars.nfo rename to media/baseset/openttd/chars.nfo diff --git a/media/extra_grf/chars.png b/media/baseset/openttd/chars.png similarity index 100% rename from media/extra_grf/chars.png rename to media/baseset/openttd/chars.png diff --git a/media/extra_grf/elrails.nfo b/media/baseset/openttd/elrails.nfo similarity index 100% rename from media/extra_grf/elrails.nfo rename to media/baseset/openttd/elrails.nfo diff --git a/media/extra_grf/elrails.png b/media/baseset/openttd/elrails.png similarity index 100% rename from media/extra_grf/elrails.png rename to media/baseset/openttd/elrails.png diff --git a/media/extra_grf/flags.nfo b/media/baseset/openttd/flags.nfo similarity index 100% rename from media/extra_grf/flags.nfo rename to media/baseset/openttd/flags.nfo diff --git a/media/extra_grf/flags.png b/media/baseset/openttd/flags.png similarity index 100% rename from media/extra_grf/flags.png rename to media/baseset/openttd/flags.png diff --git a/media/extra_grf/foundations.nfo b/media/baseset/openttd/foundations.nfo similarity index 100% rename from media/extra_grf/foundations.nfo rename to media/baseset/openttd/foundations.nfo diff --git a/media/extra_grf/foundations.png b/media/baseset/openttd/foundations.png similarity index 100% rename from media/extra_grf/foundations.png rename to media/baseset/openttd/foundations.png diff --git a/media/extra_grf/mono.nfo b/media/baseset/openttd/mono.nfo similarity index 100% rename from media/extra_grf/mono.nfo rename to media/baseset/openttd/mono.nfo diff --git a/media/extra_grf/mono.png b/media/baseset/openttd/mono.png similarity index 100% rename from media/extra_grf/mono.png rename to media/baseset/openttd/mono.png diff --git a/media/extra_grf/oneway.nfo b/media/baseset/openttd/oneway.nfo similarity index 100% rename from media/extra_grf/oneway.nfo rename to media/baseset/openttd/oneway.nfo diff --git a/media/extra_grf/oneway.png b/media/baseset/openttd/oneway.png similarity index 100% rename from media/extra_grf/oneway.png rename to media/baseset/openttd/oneway.png diff --git a/media/extra_grf/openttd.nfo b/media/baseset/openttd/openttd.nfo similarity index 100% rename from media/extra_grf/openttd.nfo rename to media/baseset/openttd/openttd.nfo diff --git a/media/extra_grf/openttdgui.nfo b/media/baseset/openttd/openttdgui.nfo similarity index 98% rename from media/extra_grf/openttdgui.nfo rename to media/baseset/openttd/openttdgui.nfo index b458073bef..eb1313365e 100644 --- a/media/extra_grf/openttdgui.nfo +++ b/media/baseset/openttd/openttdgui.nfo @@ -4,7 +4,7 @@ // 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 . // -1 * 0 0C "OpenTTD GUI graphics" - -1 * 3 05 15 \b 184 // OPENTTD_SPRITE_COUNT + -1 * 3 05 15 \b 186 // OPENTTD_SPRITE_COUNT -1 sprites/openttdgui.png 8bpp 66 8 64 31 -31 7 normal -1 sprites/openttdgui.png 8bpp 146 8 64 31 -31 7 normal -1 sprites/openttdgui.png 8bpp 226 8 64 31 -31 7 normal @@ -189,3 +189,5 @@ -1 sprites/openttdgui_convert_road.png 8bpp 24 0 32 32 0 0 normal -1 sprites/openttdgui_convert_tram.png 8bpp 0 0 20 20 0 0 normal -1 sprites/openttdgui_convert_tram.png 8bpp 24 0 32 32 0 0 normal + -1 sprites/openttdgui.png 8bpp 513 440 10 10 0 0 normal + -1 sprites/openttdgui.png 8bpp 526 440 10 10 0 0 normal diff --git a/media/extra_grf/openttdgui.png b/media/baseset/openttd/openttdgui.png similarity index 53% rename from media/extra_grf/openttdgui.png rename to media/baseset/openttd/openttdgui.png index 900a612a87..1fc02aa61e 100644 Binary files a/media/extra_grf/openttdgui.png and b/media/baseset/openttd/openttdgui.png differ diff --git a/media/extra_grf/openttdgui_build_tram.png b/media/baseset/openttd/openttdgui_build_tram.png similarity index 100% rename from media/extra_grf/openttdgui_build_tram.png rename to media/baseset/openttd/openttdgui_build_tram.png diff --git a/media/extra_grf/openttdgui_convert_road.png b/media/baseset/openttd/openttdgui_convert_road.png similarity index 100% rename from media/extra_grf/openttdgui_convert_road.png rename to media/baseset/openttd/openttdgui_convert_road.png diff --git a/media/extra_grf/openttdgui_convert_tram.png b/media/baseset/openttd/openttdgui_convert_tram.png similarity index 100% rename from media/extra_grf/openttdgui_convert_tram.png rename to media/baseset/openttd/openttdgui_convert_tram.png diff --git a/media/extra_grf/openttdgui_group_livery.png b/media/baseset/openttd/openttdgui_group_livery.png similarity index 100% rename from media/extra_grf/openttdgui_group_livery.png rename to media/baseset/openttd/openttdgui_group_livery.png diff --git a/media/extra_grf/palette.nfo b/media/baseset/openttd/palette.nfo similarity index 100% rename from media/extra_grf/palette.nfo rename to media/baseset/openttd/palette.nfo diff --git a/media/extra_grf/roadstops.nfo b/media/baseset/openttd/roadstops.nfo similarity index 100% rename from media/extra_grf/roadstops.nfo rename to media/baseset/openttd/roadstops.nfo diff --git a/media/extra_grf/roadstops.png b/media/baseset/openttd/roadstops.png similarity index 100% rename from media/extra_grf/roadstops.png rename to media/baseset/openttd/roadstops.png diff --git a/media/extra_grf/signals.nfo b/media/baseset/openttd/signals.nfo similarity index 100% rename from media/extra_grf/signals.nfo rename to media/baseset/openttd/signals.nfo diff --git a/media/extra_grf/signals.png b/media/baseset/openttd/signals.png similarity index 100% rename from media/extra_grf/signals.png rename to media/baseset/openttd/signals.png diff --git a/media/extra_grf/sloped_tracks.nfo b/media/baseset/openttd/sloped_tracks.nfo similarity index 100% rename from media/extra_grf/sloped_tracks.nfo rename to media/baseset/openttd/sloped_tracks.nfo diff --git a/media/extra_grf/sloped_tracks.png b/media/baseset/openttd/sloped_tracks.png similarity index 100% rename from media/extra_grf/sloped_tracks.png rename to media/baseset/openttd/sloped_tracks.png diff --git a/media/extra_grf/tramtracks.nfo b/media/baseset/openttd/tramtracks.nfo similarity index 100% rename from media/extra_grf/tramtracks.nfo rename to media/baseset/openttd/tramtracks.nfo diff --git a/media/extra_grf/tramtracks.png b/media/baseset/openttd/tramtracks.png similarity index 100% rename from media/extra_grf/tramtracks.png rename to media/baseset/openttd/tramtracks.png diff --git a/media/extra_grf/tramtracks_bare_depot.png b/media/baseset/openttd/tramtracks_bare_depot.png similarity index 100% rename from media/extra_grf/tramtracks_bare_depot.png rename to media/baseset/openttd/tramtracks_bare_depot.png diff --git a/media/extra_grf/tunnel_portals.nfo b/media/baseset/openttd/tunnel_portals.nfo similarity index 100% rename from media/extra_grf/tunnel_portals.nfo rename to media/baseset/openttd/tunnel_portals.nfo diff --git a/media/extra_grf/tunnel_portals.png b/media/baseset/openttd/tunnel_portals.png similarity index 100% rename from media/extra_grf/tunnel_portals.png rename to media/baseset/openttd/tunnel_portals.png diff --git a/media/baseset/opntitle.dat b/media/baseset/opntitle.dat new file mode 100644 index 0000000000..264aaff60b Binary files /dev/null and b/media/baseset/opntitle.dat differ diff --git a/media/baseset/orig_dos.obg b/media/baseset/orig_dos.obg index d56a63712f..ebb27ee7b5 100644 --- a/media/baseset/orig_dos.obg +++ b/media/baseset/orig_dos.obg @@ -6,7 +6,7 @@ name = original_dos shortname = TTDD version = 1 palette = DOS -!! description STR_BASEGRAPHICS_DOS_DESCRIPTION +@description_STR_BASEGRAPHICS_DOS_DESCRIPTION@ [files] base = TRG1.GRF @@ -22,7 +22,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 TRGC.GRF = ed446637e034104c5559b32c18afe78d TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6 -ORIG_EXTRA.GRF = +ORIG_EXTRA.GRF = ${ORIG_EXTRA_GRF_MD5} [origin] default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/media/baseset/orig_dos.obm b/media/baseset/orig_dos.obm index 0b51c2db84..e476c11dd3 100644 --- a/media/baseset/orig_dos.obm +++ b/media/baseset/orig_dos.obm @@ -5,43 +5,43 @@ name = original_dos shortname = TTDD version = 1 -!! description STR_BASEMUSIC_DOS_DESCRIPTION +@description_STR_BASEMUSIC_DOS_DESCRIPTION@ [files] -theme = gm.cat -old_0 = gm.cat -old_1 = gm.cat -old_2 = gm.cat -old_3 = gm.cat -old_4 = gm.cat -old_5 = gm.cat -old_6 = gm.cat -old_7 = gm.cat +theme = GM.CAT +old_0 = GM.CAT +old_1 = GM.CAT +old_2 = GM.CAT +old_3 = GM.CAT +old_4 = GM.CAT +old_5 = GM.CAT +old_6 = GM.CAT +old_7 = GM.CAT old_8 = old_9 = -new_0 = gm.cat -new_1 = gm.cat -new_2 = gm.cat -new_3 = gm.cat -new_4 = gm.cat -new_5 = gm.cat -new_6 = gm.cat +new_0 = GM.CAT +new_1 = GM.CAT +new_2 = GM.CAT +new_3 = GM.CAT +new_4 = GM.CAT +new_5 = GM.CAT +new_6 = GM.CAT new_7 = new_8 = new_9 = -ezy_0 = gm.cat -ezy_1 = gm.cat -ezy_2 = gm.cat -ezy_3 = gm.cat -ezy_4 = gm.cat -ezy_5 = gm.cat +ezy_0 = GM.CAT +ezy_1 = GM.CAT +ezy_2 = GM.CAT +ezy_3 = GM.CAT +ezy_4 = GM.CAT +ezy_5 = GM.CAT ezy_6 = ezy_7 = ezy_8 = ezy_9 = [md5s] -gm.cat = 7a29d2d0c4f7d2e03091ffa9b2bdfffb +GM.CAT = 7a29d2d0c4f7d2e03091ffa9b2bdfffb [catindex] theme = 0 diff --git a/media/baseset/orig_dos.obs b/media/baseset/orig_dos.obs index 60afc854f0..c500fe0e4d 100644 --- a/media/baseset/orig_dos.obs +++ b/media/baseset/orig_dos.obs @@ -5,7 +5,7 @@ name = original_dos shortname = TTDO version = 0 -!! description STR_BASESOUNDS_DOS_DESCRIPTION +@description_STR_BASESOUNDS_DOS_DESCRIPTION@ [files] samples = SAMPLE.CAT diff --git a/media/baseset/orig_dos_de.obg b/media/baseset/orig_dos_de.obg index 388d685025..b8251ab7b2 100644 --- a/media/baseset/orig_dos_de.obg +++ b/media/baseset/orig_dos_de.obg @@ -6,7 +6,7 @@ name = original_dos_de shortname = TTDD version = 0 palette = DOS -!! description STR_BASEGRAPHICS_DOS_DE_DESCRIPTION +@description_STR_BASEGRAPHICS_DOS_DE_DESCRIPTION@ [files] base = TRG1.GRF @@ -22,7 +22,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 TRGC.GRF = ed446637e034104c5559b32c18afe78d TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 TRGT.GRF = fcde1d7e8a74197d72a62695884b909e -ORIG_EXTRA.GRF = +ORIG_EXTRA.GRF = ${ORIG_EXTRA_GRF_MD5} [origin] default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/baseset/orig_extra.grf b/media/baseset/orig_extra.grf similarity index 100% rename from bin/baseset/orig_extra.grf rename to media/baseset/orig_extra.grf diff --git a/media/baseset/orig_extra/CMakeLists.txt b/media/baseset/orig_extra/CMakeLists.txt new file mode 100644 index 0000000000..f71d8d4b49 --- /dev/null +++ b/media/baseset/orig_extra/CMakeLists.txt @@ -0,0 +1,14 @@ +# In case both NFORenum and GRFCodec are found, generate the GRF. +# Otherwise, just use them from the cache (read: git). +# This is mainly because not many people have both of these tools installed, +# so it is cheaper to cache them in git, and only regenerate when you are +# working on it / have the tools installed. +if(GRFCODEC_FOUND) + include(CreateGrfCommand) + create_grf_command( + # We share some files with 'openttd' grf + ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/airports.png + ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/canals.png + ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/chars.png + ) +endif() diff --git a/media/extra_grf/airports_orig_extra.nfo b/media/baseset/orig_extra/airports_orig_extra.nfo similarity index 100% rename from media/extra_grf/airports_orig_extra.nfo rename to media/baseset/orig_extra/airports_orig_extra.nfo diff --git a/media/extra_grf/canals_extra.nfo b/media/baseset/orig_extra/canals_extra.nfo similarity index 100% rename from media/extra_grf/canals_extra.nfo rename to media/baseset/orig_extra/canals_extra.nfo diff --git a/media/extra_grf/chars_orig_extra.nfo b/media/baseset/orig_extra/chars_orig_extra.nfo similarity index 100% rename from media/extra_grf/chars_orig_extra.nfo rename to media/baseset/orig_extra/chars_orig_extra.nfo diff --git a/media/extra_grf/fix_graphics.nfo b/media/baseset/orig_extra/fix_graphics.nfo similarity index 100% rename from media/extra_grf/fix_graphics.nfo rename to media/baseset/orig_extra/fix_graphics.nfo diff --git a/media/extra_grf/fix_graphics.png b/media/baseset/orig_extra/fix_graphics.png similarity index 100% rename from media/extra_grf/fix_graphics.png rename to media/baseset/orig_extra/fix_graphics.png diff --git a/media/extra_grf/orig_extra.nfo b/media/baseset/orig_extra/orig_extra.nfo similarity index 100% rename from media/extra_grf/orig_extra.nfo rename to media/baseset/orig_extra/orig_extra.nfo diff --git a/media/extra_grf/rivers/arctic.nfo b/media/baseset/orig_extra/rivers/arctic.nfo similarity index 100% rename from media/extra_grf/rivers/arctic.nfo rename to media/baseset/orig_extra/rivers/arctic.nfo diff --git a/media/extra_grf/rivers/arctic_brown.png b/media/baseset/orig_extra/rivers/arctic_brown.png similarity index 100% rename from media/extra_grf/rivers/arctic_brown.png rename to media/baseset/orig_extra/rivers/arctic_brown.png diff --git a/media/extra_grf/rivers/arctic_snowy.png b/media/baseset/orig_extra/rivers/arctic_snowy.png similarity index 100% rename from media/extra_grf/rivers/arctic_snowy.png rename to media/baseset/orig_extra/rivers/arctic_snowy.png diff --git a/media/extra_grf/rivers/rapids.nfo b/media/baseset/orig_extra/rivers/rapids.nfo similarity index 100% rename from media/extra_grf/rivers/rapids.nfo rename to media/baseset/orig_extra/rivers/rapids.nfo diff --git a/media/extra_grf/rivers/rapids.png b/media/baseset/orig_extra/rivers/rapids.png similarity index 100% rename from media/extra_grf/rivers/rapids.png rename to media/baseset/orig_extra/rivers/rapids.png diff --git a/media/extra_grf/rivers/temperate.nfo b/media/baseset/orig_extra/rivers/temperate.nfo similarity index 100% rename from media/extra_grf/rivers/temperate.nfo rename to media/baseset/orig_extra/rivers/temperate.nfo diff --git a/media/extra_grf/rivers/temperate.png b/media/baseset/orig_extra/rivers/temperate.png similarity index 100% rename from media/extra_grf/rivers/temperate.png rename to media/baseset/orig_extra/rivers/temperate.png diff --git a/media/extra_grf/rivers/toyland.nfo b/media/baseset/orig_extra/rivers/toyland.nfo similarity index 100% rename from media/extra_grf/rivers/toyland.nfo rename to media/baseset/orig_extra/rivers/toyland.nfo diff --git a/media/extra_grf/rivers/toyland.png b/media/baseset/orig_extra/rivers/toyland.png similarity index 100% rename from media/extra_grf/rivers/toyland.png rename to media/baseset/orig_extra/rivers/toyland.png diff --git a/media/extra_grf/rivers/tropic.nfo b/media/baseset/orig_extra/rivers/tropic.nfo similarity index 100% rename from media/extra_grf/rivers/tropic.nfo rename to media/baseset/orig_extra/rivers/tropic.nfo diff --git a/media/extra_grf/rivers/tropic_desert.png b/media/baseset/orig_extra/rivers/tropic_desert.png similarity index 100% rename from media/extra_grf/rivers/tropic_desert.png rename to media/baseset/orig_extra/rivers/tropic_desert.png diff --git a/media/extra_grf/rivers/tropic_forest.png b/media/baseset/orig_extra/rivers/tropic_forest.png similarity index 100% rename from media/extra_grf/rivers/tropic_forest.png rename to media/baseset/orig_extra/rivers/tropic_forest.png diff --git a/media/extra_grf/shore.nfo b/media/baseset/orig_extra/shore.nfo similarity index 100% rename from media/extra_grf/shore.nfo rename to media/baseset/orig_extra/shore.nfo diff --git a/media/extra_grf/shore.png b/media/baseset/orig_extra/shore.png similarity index 100% rename from media/extra_grf/shore.png rename to media/baseset/orig_extra/shore.png diff --git a/media/baseset/orig_tto.obm b/media/baseset/orig_tto.obm index c572bcf34b..fe97fd1439 100644 --- a/media/baseset/orig_tto.obm +++ b/media/baseset/orig_tto.obm @@ -5,28 +5,28 @@ name = original_tto shortname = TTOD version = 1 -!! description STR_BASEMUSIC_TTO_DESCRIPTION +@description_STR_BASEMUSIC_TTO_DESCRIPTION@ [files] -theme = gm-tto.cat -old_0 = gm-tto.cat -old_1 = gm-tto.cat -old_2 = gm-tto.cat -old_3 = gm-tto.cat -old_4 = gm-tto.cat -old_5 = gm-tto.cat -old_6 = gm-tto.cat -old_7 = gm-tto.cat +theme = GM-TTO.CAT +old_0 = GM-TTO.CAT +old_1 = GM-TTO.CAT +old_2 = GM-TTO.CAT +old_3 = GM-TTO.CAT +old_4 = GM-TTO.CAT +old_5 = GM-TTO.CAT +old_6 = GM-TTO.CAT +old_7 = GM-TTO.CAT old_8 = old_9 = -new_0 = gm-tto.cat -new_1 = gm-tto.cat -new_2 = gm-tto.cat -new_3 = gm-tto.cat -new_4 = gm-tto.cat -new_5 = gm-tto.cat -new_6 = gm-tto.cat -new_7 = gm-tto.cat +new_0 = GM-TTO.CAT +new_1 = GM-TTO.CAT +new_2 = GM-TTO.CAT +new_3 = GM-TTO.CAT +new_4 = GM-TTO.CAT +new_5 = GM-TTO.CAT +new_6 = GM-TTO.CAT +new_7 = GM-TTO.CAT new_8 = new_9 = ezy_0 = @@ -60,7 +60,7 @@ new_6 = 14 new_7 = 3 [md5s] -gm-tto.cat = 26e85ff84b0063aa5da05dd4698fc76e +GM-TTO.CAT = 26e85ff84b0063aa5da05dd4698fc76e [names] ; Names get read from the CAT file diff --git a/media/baseset/orig_win.obg b/media/baseset/orig_win.obg index f01624a25d..b1cc8437e2 100644 --- a/media/baseset/orig_win.obg +++ b/media/baseset/orig_win.obg @@ -6,7 +6,7 @@ name = original_windows shortname = TTDW version = 0 palette = Windows -!! description STR_BASEGRAPHICS_WIN_DESCRIPTION +@description_STR_BASEGRAPHICS_WIN_DESCRIPTION@ [files] base = TRG1R.GRF @@ -22,7 +22,7 @@ TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32 TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1 TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8 -ORIG_EXTRA.GRF = +ORIG_EXTRA.GRF = ${ORIG_EXTRA_GRF_MD5} [origin] default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/media/baseset/orig_win.obm b/media/baseset/orig_win.obm index 11e363fabd..de269d65c8 100644 --- a/media/baseset/orig_win.obm +++ b/media/baseset/orig_win.obm @@ -5,7 +5,7 @@ name = original_windows shortname = TTDW version = 1 -!! description STR_BASEMUSIC_WIN_DESCRIPTION +@description_STR_BASEMUSIC_WIN_DESCRIPTION@ [files] theme = GM_TT00.GM diff --git a/media/baseset/orig_win.obs b/media/baseset/orig_win.obs index 7b02372207..66dd619a8a 100644 --- a/media/baseset/orig_win.obs +++ b/media/baseset/orig_win.obs @@ -5,7 +5,7 @@ name = original_windows shortname = TTDO version = 0 -!! description STR_BASESOUNDS_WIN_DESCRIPTION +@description_STR_BASESOUNDS_WIN_DESCRIPTION@ [files] samples = SAMPLE.CAT diff --git a/media/baseset/translations.awk b/media/baseset/translations.awk deleted file mode 100644 index af5f2b4a8d..0000000000 --- a/media/baseset/translations.awk +++ /dev/null @@ -1,67 +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 . - -# -# Awk script to extract translations for baseset descriptions -# from lang files for insertion into .obg/obs/obm files. -# If there is no translation, there is no output. -# -# The input file is scanned for the pattern -# !! -# -# The lang files (passed as variable 'langfiles') are scanned for and -# the translations are added to the output file: -# . = -# - -# Simple insertion sort since not all AWKs have a sort implementation -function isort(A) { - n = 0 - for (val in A) { - n++; - } - - for (i = 2; i <= n; i++) { - j = i; - hold = A[j] - while (A[j - 1] > hold) { - j--; - A[j + 1] = A[j] - } - A[j] = hold - } - - return n -} - -/^!!/ { - ini_key = $2; - str_id = $3; - - file = langfiles - while ((getline < file) > 0) { - if (match($0, "##isocode") > 0) { - lang = $2; - } else if (match($0, "^" str_id " *:") > 0) { - sub("^[^:]*:", "", $0) - i++; - if (lang == "en_GB") { - texts[i] = ini_key " = "$0; - } else { - texts[i] = ini_key "." lang " = "$0; - } - } - } - close(file); - - count = isort(texts); - for (i = 1; i <= count; i++) { - print texts[i] - } - - next -} - -{ print } diff --git a/media/baseset/translations.vbs b/media/baseset/translations.vbs deleted file mode 100644 index c167886930..0000000000 --- a/media/baseset/translations.vbs +++ /dev/null @@ -1,145 +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") - -Dim inputfile, outputfile, langpath, extra_grf -inputfile = WScript.Arguments(0) -outputfile = WScript.Arguments(1) -langpath = WScript.Arguments(2) - -If WScript.Arguments.Length > 3 Then - extra_grf = WScript.Arguments(3) -End If - -Function GetExtraGrfHash - Dim WSO, exe, line - - Set WSO = WScript.CreateObject("WScript.Shell") - Set exe = WSO.Exec("certutil -hashfile " & extra_grf & " MD5") - - Do Until exe.StdOut.AtEndOfStream - line = exe.StdOut.ReadLine - If Len(line) = 32 Then GetExtraGrfHash = line - Loop - - Set WSO = Nothing -End Function - -' Simple insertion sort, copied from translations.awk -Sub ISort(a) - Dim i, j, n, hold - n = UBound(a) - - For i = 1 To n - j = i - hold = a(j) - Do While a(j - 1) > hold - j = j - 1 - a(j + 1) = a(j) - - If j = 0 Then Exit Do - Loop - a(j) = hold - Next -End Sub - -Sub Lookup(ini_key, str_id, outfile) - Dim folder, file, line, p, lang, i - - ' Ensure only complete string matches - str_id = str_id & " " - - Set folder = FSO.GetFolder(langpath) - - Dim output() - ReDim output(folder.Files.Count) - - For Each file In folder.Files - If UCase(FSO.GetExtensionName(file.Name)) = "TXT" Then - Dim f - Set f = CreateObject("ADODB.Stream") - f.Charset = "utf-8" - f.LineSeparator = 10 ' Assume lines end with \n even for \r\n files - f.Open - f.LoadFromFile(file.Path) - - Do Until f.EOS - line = Replace(f.ReadText(-2), Chr(13), "") ' Read a line and remove any \r - - If InStr(1, line, "##isocode ") = 1 Then - p = Split(line) - lang = p(1) - ElseIf InStr(1, line, str_id) = 1 Then - p = Split(line, ":", 2) - If lang = "en_GB" Then - output(i) = ini_key & " = " & p(1) - Else - output(i) = ini_key & "." & lang & " = " & p(1) - End If - i = i + 1 - End If - Loop - - f.Close - End If - Next - - ReDim Preserve output(i - 1) - ISort output - - For Each line In output - outfile.WriteText line, 1 - Next - -End Sub - -Dim line, p - -Dim infile -Set infile = FSO.OpenTextFile(inputfile) - -Dim outfile -Set outfile = CreateObject("ADODB.Stream") -outfile.Charset = "utf-8" -outfile.Open - -Do Until infile.atEndOfStream - - line = infile.ReadLine() - - If InStr(1, line, "ORIG_EXTRA.GRF ") = 1 Then - p = Split(line, "=") - If Trim(p(1)) = "" Then - outfile.WriteText "ORIG_EXTRA.GRF = " & GetExtraGrfHash(), 1 - Else - outfile.WriteText line, 1 - End If - ElseIf InStr(1, line, "!! ") = 1 Then - p = Split(line) - Lookup p(1), p(2), outfile - Else - outfile.WriteText line, 1 - End If - -Loop - -' UTF-8 Text ADO Stream includes BOM, so we need to remove it -Dim outfile_noBOM -Set outfile_noBOM = CreateObject("ADODB.Stream") -outfile_noBOM.Type = 1 -outfile_noBOM.Open - -' Copy Text stream to Binary stream, skiping the BOM -outfile.Position = 3 -outfile.CopyTo outfile_noBOM -outfile.Close - -' Write the Binary stream -outfile_noBOM.SaveToFile outputfile, 2 -outfile_noBOM.Close diff --git a/media/extra_grf/assemble_nfo.awk b/media/extra_grf/assemble_nfo.awk deleted file mode 100644 index f39e6b6b43..0000000000 --- a/media/extra_grf/assemble_nfo.awk +++ /dev/null @@ -1,30 +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 . - -BEGIN { - # Very basic variant function; barely any error checking. - # Just use the first argument as the file to start from when assembling everything - path = ARGV[1]; - gsub("[^/\\\\]*$", "", path); - assemble(ARGV[1]); -} - -# Recursive function for assembling by means of resolving the #includes. -function assemble(filename) { - while ((getline < filename) > 0) { - if (NF == 2 && $1 == "#include" ) { - # Remove the quotes. - gsub("[\"'<>]", "", $2); - assemble(path $2); - } else { - print $0; - } - } - - if (close(filename) < 0) { - print "Could not open " filename > "/dev/stderr"; - exit -1; - } -} diff --git a/os/debian/NEWS b/os/debian/NEWS deleted file mode 100644 index 2a5c811019..0000000000 --- a/os/debian/NEWS +++ /dev/null @@ -1,25 +0,0 @@ -openttd (1.0.0~rc3-2) unstable; urgency=low - - The openttd package has been moved from contrib into main. Since the - OpenGFX free graphics set has been packaged for Debian, one can now run - OpenTTD without needing any of the resources from the original game - (though the original resources are still supported). - - -- Matthijs Kooijman Thu, 18 Mar 2010 13:09:35 +0100 - -openttd (0.7.0-1) unstable; urgency=low - - Handling of AI players has changed in 0.7.0. This package no longer - contains any AI players, so playing against the computer is not possible - out of the box any longer. However, you can easily download AI players - through the new "Content Downloading Service", after which playing with - computer players is possible. - - Loading old savegames with computer players is supported (AI players will - be converted according to the current AI settings), but at this moment - there are no AIs that completely handle any existing infrastructure built - by the old AI, so starting a new game might be more fun (especially since - most of the new AIs are a lot less erratic). - - -- Matthijs Kooijman Mon, 13 Apr 2009 15:11:20 +0200 - diff --git a/os/debian/README.Debian b/os/debian/README.Debian deleted file mode 100644 index e7b4bdb135..0000000000 --- a/os/debian/README.Debian +++ /dev/null @@ -1,41 +0,0 @@ -OpenTTD for Debian ------------------- - -To properly play this game, you need a base graphics and sound set. -Currently, the graphics, sound and music files from the original -Transport Tycoon Deluxe game (Windows and DOS versions) are supported, -as well as the free graphics replacement set "OpenGFX", sound -replacement set "OpenSFX" (which is in non-free due to a restrictive -license) and the free music replacement set "OpenMSX". - -Normally, installing the openttd package should automatically install -openttd-opengfx as well, allowing OpenTTD to run out of the box. If you -want sound, you'll have to enable non-free sources and install the -openttd-opensfx package manually (or install the original Transport -Tyccon Deluxe sound files). - -The easiest way to install the OpenMSX music files is to use the in-game -content download system, which should offer the latest version of the -music files. - -To find out how to install the original Transport Tycoon Deluxe graphics -sound files and music files, see readme.txt, section 4.1. - --Playing Music - In addition to installing a music set (see above), you'll also need - to install the timidity midi player, available in the timidity - package. - - Remember that not all audio devices support multiple audiostreams - (music and sound), so you might have to use alsa software mixing or - pulseaudio. - --Scenarios - There are no scenarios included in this release. Scenarios can be - downloaded using OpenTTD's content service, which is available from - OpenTTD's main menu. If you have obtained a scenario through other - means, you can place it either in your ~/.openttd/scenario directory - or in the system-wide /usr/share/games/openttd/scenario directory. - - -- Matthijs Kooijman Mon, 01 Feb 2010 10:42:11 +0100 - diff --git a/os/debian/changelog b/os/debian/changelog deleted file mode 100644 index 49f0a8f2d6..0000000000 --- a/os/debian/changelog +++ /dev/null @@ -1,1117 +0,0 @@ -openttd (1.10.3-0) unstable; urgency=low - - * New upstream release 1.10.3 - - -- OpenTTD Sun, 09 Aug 2020 22:00:00 +0100 - -openttd (1.10.2-0) unstable; urgency=low - - * New upstream release 1.10.2 - - -- OpenTTD Mon, 01 Jun 2020 22:00:00 +0100 - -openttd (1.10.1-0) unstable; urgency=low - - * New upstream release 1.10.1 - - -- OpenTTD Mon, 13 Apr 2020 21:00:00 +0100 - -openttd (1.10.0-0) unstable; urgency=low - - * New upstream release 1.10.0 - - -- OpenTTD Wed, 01 Apr 2020 12:00:00 +0000 - -openttd (1.10.0~RC1-0) unstable; urgency=low - - * New upstream release 1.10.0-RC1 - - -- OpenTTD Sun, 09 Feb 2020 12:00:00 +0000 - -openttd (1.10.0~beta2-0) unstable; urgency=low - - * New upstream release 1.10.0-beta2 - - -- OpenTTD Wed, 25 Dec 2019 00:00:00 +0000 - -openttd (1.10.0~beta1-0) unstable; urgency=low - - * New upstream release 1.10.0-beta1 - - -- OpenTTD Tue, 29 Oct 2019 00:00:00 +0000 - -openttd (1.9.3-0) unstable; urgency=low - - * New upstream release 1.9.3 - - -- OpenTTD Mon, 16 Sep 2019 21:00:00 +0200 - -openttd (1.9.3~RC1-0) unstable; urgency=low - - * New upstream release 1.9.3-RC1 - -- OpenTTD Sat, 07 Sep 2019 23:30:00 +0200 - -openttd (1.9.2-0) unstable; urgency=low - - * New upstream release 1.9.2 - - -- OpenTTD Sun, 07 Jul 2019 23:00:00 +0200 - -openttd (1.9.1-0) unstable; urgency=low - - * New upstream release 1.9.1 - - -- OpenTTD Mon, 08 Apr 2019 20:00:00 +0100 - -openttd (1.9.0-0) unstable; urgency=low - - * New upstream release 1.9.0 - - -- OpenTTD Mon, 01 Apr 2019 00:00:00 +0200 - -openttd (1.9.0~RC2-0) unstable; urgency=low - - * New upstream release 1.9.0-RC2 - - -- OpenTTD Sun, 24 Mar 2019 23:00:00 +0000 - -openttd (1.9.0~RC1-0) unstable; urgency=low - - * New upstream release 1.9.0-RC1 - - -- OpenTTD Sun, 3 Mar 2019 23:00:00 +0000 - -openttd (1.9.0~beta3-0) unstable; urgency=low - - * New upstream release 1.9.0-beta3 - - -- OpenTTD Sun, 24 Feb 2019 23:00:00 +0000 - -openttd (1.9.0~beta2-0) unstable; urgency=low - - * New upstream release 1.9.0-beta2 - - -- OpenTTD Sat, 09 Feb 2019 23:00:00 +0000 - -openttd (1.9.0~beta1-0) unstable; urgency=low - - * New upstream release 1.9.0-beta1 - - -- OpenTTD Sat, 09 Feb 2019 16:00:00 +0000 - -openttd (1.8.0-0) unstable; urgency=low - - * New upstream release 1.8.0 - - -- OpenTTD Sun, 01 Apr 2018 14:00:00 +0200 - -openttd (1.8.0~RC1-0) unstable; urgency=low - - * New upstream release 1.8.0-RC1 - - -- OpenTTD Wed, 21 Mar 2018 21:00:00 +0100 - -openttd (1.7.2-0) unstable; urgency=low - - * New upstream release 1.7.2 - - -- OpenTTD Sun, 24 Dec 2017 14:00:00 +0100 - -openttd (1.7.2~RC1-0) unstable; urgency=low - - * New upstream release 1.7.2-RC1 - - -- OpenTTD Mon, 11 Dec 2017 21:30:00 +0100 - -openttd (1.7.1-0) unstable; urgency=low - - * New upstream release 1.7.1 - - -- OpenTTD Tue, 13 Jun 2017 21:00:00 +0200 - -openttd (1.7.1~RC1-0) unstable; urgency=low - - * New upstream release 1.7.1-RC1 - - -- OpenTTD Thu, 04 Mai 2017 21:00:00 +0200 - -openttd (1.7.0-0) unstable; urgency=low - - * New upstream release 1.7.0 - - -- OpenTTD Sat, 01 Apr 2017 19:00:00 +0200 - -openttd (1.7.0~RC1-0) unstable; urgency=low - - * New upstream release 1.7.0-RC1 - - -- OpenTTD Sat, 11 Mar 2017 22:30:00 +0100 - -openttd (1.6.1-0) unstable; urgency=low - - * New upstream release 1.6.1 - - -- OpenTTD Fri, 01 Jul 2016 00:00:00 +0200 - -openttd (1.6.1~RC1-0) unstable; urgency=low - - * New upstream release 1.6.1-RC1 - - -- OpenTTD Wed, 01 Jun 2016 21:00:00 +0200 - -openttd (1.6.0-0) unstable; urgency=low - - * New upstream release 1.6.0 - - -- OpenTTD Fri, 01 Apr 2016 21:00:00 +0200 - -openttd (1.6.0~RC1-0) unstable; urgency=low - - * New upstream release 1.6.0-RC1 - - -- OpenTTD Tue, 01 Mar 2016 21:00:00 +0100 - -openttd (1.5.3-0) unstable; urgency=low - - * New upstream release 1.5.3 - - -- OpenTTD Tue, 01 Dec 2015 21:00:00 +0100 - -openttd (1.5.3~RC1-0) unstable; urgency=low - - * New upstream release 1.5.3-RC1 - - -- OpenTTD Sun, 01 Nov 2015 14:00:00 +0100 - -openttd (1.5.2-0) unstable; urgency=low - - * New upstream release 1.5.2 - - -- OpenTTD Tue, 01 Sep 2015 21:00:00 +0200 - -openttd (1.5.2~RC1-0) unstable; urgency=low - - * New upstream release 1.5.2-RC1 - - -- OpenTTD Sat, 01 Aug 2015 13:00:00 +0200 - -openttd (1.5.1-0) unstable; urgency=low - - * New upstream release 1.5.1 - - -- OpenTTD Mon, 01 Jun 2015 21:00:00 +0200 - -openttd (1.5.1~RC1-0) unstable; urgency=low - - * New upstream release 1.5.1-RC1 - - -- OpenTTD Fri, 08 May 2015 21:00:00 +0200 - -openttd (1.5.0-0) unstable; urgency=low - - * New upstream release 1.5.0 - - -- OpenTTD Wed, 01 Apr 2015 21:00:00 +0200 - -openttd (1.5.0~RC1-0) unstable; urgency=low - - * New upstream release 1.5.0-RC1 - - -- OpenTTD Wed, 18 Mar 2015 21:00:00 +0100 - -openttd (1.5.0~beta2-0) unstable; urgency=low - - * New upstream release 1.5.0-beta2 - - -- OpenTTD Tue, 24 Feb 2015 21:00:00 +0100 - -openttd (1.5.0~beta1-0) unstable; urgency=low - - * New upstream release 1.5.0-beta1 - - -- OpenTTD Wed, 24 Dec 2014 21:00:00 +0100 - -openttd (1.4.4-0) unstable; urgency=low - - * New upstream release 1.4.4 - - -- OpenTTD Tue, 21 Oct 2014 21:00:00 +0200 - -openttd (1.4.4~RC1-0) unstable; urgency=low - - * New upstream release 1.4.4-RC1 - - -- OpenTTD Wed, 08 Oct 2014 19:00:00 +0200 - -openttd (1.4.3-0) unstable; urgency=low - - * New upstream release 1.4.3 - - -- OpenTTD Tue, 23 Sep 2014 21:00:00 +0200 - -openttd (1.4.3~RC2-0) unstable; urgency=low - - * New upstream release 1.4.3-RC2 - - -- OpenTTD Sun, 14 Sep 2014 19:00:00 +0200 - -openttd (1.4.3~RC1-0) unstable; urgency=low - - * New upstream release 1.4.3-RC1 - - -- OpenTTD Sun, 07 Sep 2014 19:00:00 +0200 - -openttd (1.4.2-0) unstable; urgency=low - - * New upstream release 1.4.2 - - -- OpenTTD Sat, 16 Aug 2014 21:00:00 +0200 - -openttd (1.4.2~RC2-0) unstable; urgency=low - - * New upstream release 1.4.2-RC2 - - -- OpenTTD Sun, 03 Aug 2014 18:00:00 +0200 - -openttd (1.4.2~RC1-0) unstable; urgency=low - - * New upstream release 1.4.2-RC1 - - -- OpenTTD Thu, 03 Jul 2014 21:00:00 +0200 - -openttd (1.4.1-0) unstable; urgency=low - - * New upstream release 1.4.1 - - -- OpenTTD Mon, 02 Jun 2014 21:00:00 +0200 - -openttd (1.4.1~RC2-0) unstable; urgency=low - - * New upstream release 1.4.1-RC2 - - -- OpenTTD Sun, 18 May 2014 21:00:00 +0200 - -openttd (1.4.1~RC1-0) unstable; urgency=low - - * New upstream release 1.4.1-RC1 - - -- OpenTTD Sun, 04 May 2014 21:00:00 +0200 - -openttd (1.4.0-0) unstable; urgency=low - - * New upstream release 1.4.0 - - -- OpenTTD Tue, 01 Apr 2014 21:00:00 +0200 - -openttd (1.4.0~RC1-0) unstable; urgency=low - - * New upstream release 1.4.0-RC1 - - -- OpenTTD Tue, 17 Mar 2014 21:00:00 +0100 - -openttd (1.4.0~beta5-0) unstable; urgency=low - - * New upstream release 1.4.0-beta5 - - -- OpenTTD Tue, 25 Feb 2014 10:15:00 +0100 - -openttd (1.4.0~beta4-0) unstable; urgency=low - - * New upstream release 1.4.0-beta4 - - -- OpenTTD Thu, 06 Feb 2014 21:00:00 +0100 - -openttd (1.4.0~beta3-0) unstable; urgency=low - - * New upstream release 1.4.0-beta3 - - -- OpenTTD Tue, 21 Jan 2014 21:00:00 +0100 - -openttd (1.4.0~beta2-0) unstable; urgency=low - - * New upstream release 1.4.0-beta2 - - -- OpenTTD Tue, 07 Jan 2014 21:00:00 +0100 - -openttd (1.4.0~beta1-0) unstable; urgency=low - - * New upstream release 1.4.0-beta1 - - -- OpenTTD Tue, 24 Dec 2013 00:00:00 +0100 - -openttd (1.3.3-0) unstable; urgency=low - - * New upstream release 1.3.3 - - -- OpenTTD Fri, 29 Nov 2013 19:00:00 +0100 - -openttd (1.3.3~RC2-0) unstable; urgency=low - - * New upstream release 1.3.3-RC2 - - -- OpenTTD Sun, 24 Nov 2013 19:00:00 +0100 - -openttd (1.3.3~RC1-0) unstable; urgency=low - - * New upstream release 1.3.3-RC1 - - -- OpenTTD Sun, 17 Nov 2013 19:00:00 +0100 - -openttd (1.3.2-0) unstable; urgency=low - - * New upstream release 1.3.2 - - -- OpenTTD Sat, 27 Jul 2013 18:00:00 +0200 - -openttd (1.3.2~RC2-0) unstable; urgency=low - - * New upstream release 1.3.2-RC2 - - -- OpenTTD Sat, 13 Jul 2013 12:00:00 +0200 - -openttd (1.3.2~RC1-0) unstable; urgency=low - - * New upstream release 1.3.2-RC1 - - -- OpenTTD Sun, 30 Jun 2013 12:00:00 +0200 - -openttd (1.3.1-0) unstable; urgency=low - - * New upstream release 1.3.1 - - -- OpenTTD Sat, 01 Jun 2013 00:00:00 +0300 - -openttd (1.3.1~RC1-0) unstable; urgency=low - - * New upstream release 1.3.1-RC1 - - -- OpenTTD Fri, 17 May 2013 22:00:00 +0200 - -openttd (1.3.0-0) unstable; urgency=low - - * New upstream release 1.3.0 - - -- OpenTTD Mon, 01 Apr 2013 00:00:00 +0200 - -openttd (1.3.0~RC3) unstable; urgency=low - - * New upstream release 1.3.0-RC3 - - -- OpenTTD Mon, 18 Mar 2013 00:00:00 +0100 - -openttd (1.3.0~RC2) unstable; urgency=low - - * New upstream release 1.3.0-RC2 - - -- OpenTTD Tue, 05 Mar 2013 00:00:00 +0100 - -openttd (1.3.0~RC1) unstable; urgency=low - - * New upstream release 1.3.0-RC1 - - -- OpenTTD Tue, 19 Feb 2013 00:00:00 +0100 - -openttd (1.3.0~beta2) unstable; urgency=low - - * New upstream release 1.3.0-beta2 - - -- OpenTTD Thu, 07 Feb 2013 00:00:00 +0100 - -openttd (1.3.0~beta1) unstable; urgency=low - - * New upstream release 1.3.0-beta1 - - -- OpenTTD Mon, 24 Dec 2012 00:00:00 +0100 - -openttd (1.2.3) unstable; urgency=low - - * New upstream release 1.2.3 - - -- OpenTTD Thu, 01 Nov 2012 00:00:00 +0200 - -openttd (1.2.3~RC1) unstable; urgency=low - - * New upstream release 1.2.3-RC1 - - -- OpenTTD Wed, 17 Oct 2012 00:00:00 +0200 - -openttd (1.2.2) unstable; urgency=low - - * New upstream release 1.2.2 - - -- OpenTTD Thu, 16 Aug 2012 20:00:00 +0200 - -openttd (1.2.2~RC1) unstable; urgency=low - - * New upstream release 1.2.2-RC1 - - -- OpenTTD Wed, 01 Aug 2012 00:00:00 +0200 - -openttd (1.2.1) unstable; urgency=low - - * New upstream release 1.2.1 - - -- OpenTTD Fri, 01 Jun 2012 00:00:00 +0200 - -openttd (1.2.1~RC1) unstable; urgency=low - - * New upstream release 1.2.1-RC1 - - -- OpenTTD Wed, 16 Apr 2012 22:00:00 +0200 - -openttd (1.2.0) unstable; urgency=low - - * New upstream release 1.2.0 - - -- OpenTTD Sun, 15 Apr 2012 14:00:00 +0200 - -openttd (1.2.0~RC4) unstable; urgency=low - - * New upstream release 1.2.0-RC4 - - -- OpenTTD Sun, 01 Apr 2012 00:00:00 +0200 - -openttd (1.2.0~RC3) unstable; urgency=low - - * New upstream release 1.2.0-RC3 - - -- OpenTTD Sun, 18 Mar 2012 18:00:00 +0100 - -openttd (1.2.0~RC2) unstable; urgency=low - - * New upstream release 1.2.0-RC2 - - -- OpenTTD Sun, 04 Mar 2012 18:00:00 +0100 - -openttd (1.2.0~RC1) unstable; urgency=low - - * New upstream release 1.2.0-RC1 - - -- OpenTTD Sun, 19 Feb 2012 23:00:00 +0100 - -openttd (1.2.0~beta4) unstable; urgency=low - - * New upstream release 1.2.0-beta4 - - -- OpenTTD Sat, 04 Feb 2012 16:00:00 +0100 - -openttd (1.2.0~beta3) unstable; urgency=low - - * New upstream release 1.2.0-beta3 - - -- OpenTTD Sat, 21 Jan 2012 16:00:00 +0100 - -openttd (1.2.0~beta2) unstable; urgency=low - - * New upstream release 1.2.0-beta2 - - -- OpenTTD Sat, 07 Jan 2012 00:00:00 +0100 - -openttd (1.2.0~beta1) unstable; urgency=low - - * New upstream release 1.2.0-beta1 - - -- OpenTTD Sat, 24 Dec 2011 00:00:00 +0100 - -openttd (1.1.4) unstable; urgency=low - - * New upstream release 1.1.4 - - -- OpenTTD Mon, 05 Dec 2011 00:00:00 +0400 - -openttd (1.1.4-RC1) unstable; urgency=low - - * New upstream release 1.1.4-RC1 - - -- OpenTTD Sun, 20 Nov 2011 17:00:00 +0100 - -openttd (1.1.3) unstable; urgency=low - - * New upstream release 1.1.3 - - -- OpenTTD Thu, 15 Sep 2011 21:00:00 +0200 - -openttd (1.1.3-RC1) unstable; urgency=low - - * New upstream release 1.1.3-RC1 - - -- OpenTTD Sun, 04 Sep 2011 17:00:00 +0200 - -openttd (1.1.2) unstable; urgency=low - - * New upstream release 1.1.2 - - -- OpenTTD Sun, 14 Aug 2011 17:00:00 +0200 - -openttd (1.1.2~RC2) unstable; urgency=low - - * New upstream release 1.1.2-RC2 - - -- OpenTTD Sat, 30 Jul 2011 21:00:00 +0200 - -openttd (1.1.2~RC1) unstable; urgency=low - - * New upstream release 1.1.2-RC1 - - -- OpenTTD Sun, 24 Jul 2011 21:00:00 +0200 - -openttd (1.1.1) unstable; urgency=low - - * New upstream release 1.1.1 - - -- OpenTTD Wed, 01 Jun 2011 00:00:00 +0200 - -openttd (1.1.1~RC1) unstable; urgency=low - - * New upstream release 1.1.1-RC1 - - -- OpenTTD Sun, 15 May 2011 21:00:00 +0200 - -openttd (1.1.0) unstable; urgency=low - - * New upstream release 1.1.0 - - -- OpenTTD Fri, 01 Apr 2011 00:00:00 +0100 - -openttd (1.1.0~RC3) unstable; urgency=low - - * New upstream release 1.1.0-RC3 - - -- OpenTTD Fri, 18 Mar 2011 22:00:00 +0100 - -openttd (1.1.0~RC2) unstable; urgency=low - - * New upstream release 1.1.0-RC2 - - -- OpenTTD Fri, 04 Mar 2011 22:00:00 +0100 - -openttd (1.1.0~RC1) unstable; urgency=low - - * New upstream release 1.1.0-RC1 - - -- OpenTTD Fri, 18 Feb 2011 22:00:00 +0100 - -openttd (1.1.0~beta5) unstable; urgency=low - - * New upstream release 1.1.0-beta5 - - -- OpenTTD Fri, 04 Feb 2011 22:00:00 +0100 - -openttd (1.1.0~beta4) unstable; urgency=low - - * New upstream release 1.1.0-beta4 - - -- OpenTTD Fri, 21 Jan 2011 00:00:00 +0100 - -openttd (1.1.0~beta3) unstable; urgency=low - - * New upstream release 1.1.0-beta3 - - -- OpenTTD Sun, 09 Jan 2011 18:00:00 +0100 - -openttd (1.1.0~beta2) unstable; urgency=low - - * New upstream release 1.1.0-beta2 - - -- OpenTTD Fri, 31 Dec 2010 18:00:00 +0100 - -openttd (1.1.0~beta1) unstable; urgency=low - - * New upstream release 1.1.0-beta1 - - -- OpenTTD Fri, 24 Dec 2010 00:00:00 +0100 - -openttd (1.0.5-0) unstable; urgency=low - - * New upstream release 1.0.5 - - -- OpenTTD Sat, 20 Nov 2010 21:00:00 +0000 - -openttd (1.0.5~rc2-0) unstable; urgency=low - - * New upstream release 1.0.5~rc2 - - -- OpenTTD Sun, 14 Nov 2010 15:00:00 +0000 - -openttd (1.0.5~rc1-0) unstable; urgency=low - - * New upstream release 1.0.5-RC1 - - -- OpenTTD Sun, 31 Oct 2010 15:00:00 +0000 - -openttd (1.0.4-0) unstable; urgency=low - - * New upstream release 1.0.4 - - -- OpenTTD Tue, 14 Sep 2010 20:00:00 +0000 - -openttd (1.0.4~rc1-0) unstable; urgency=low - - * New upstream release 1.0.4-RC1 - - -- OpenTTD Mon, 30 Aug 2010 20:00:00 +0000 - -openttd (1.0.3-0) unstable; urgency=low - - * New upstream release 1.0.3 - - -- OpenTTD Sun, 01 Aug 2010 00:00:00 +0000 - -openttd (1.0.3~rc1-0) unstable; urgency=low - - * New upstream release 1.0.3-RC1 - - -- OpenTTD Sat, 05 Jul 2010 17:37:21 +0000 - -openttd (1.0.2-0) unstable; urgency=low - - * New upstream release 1.0.2 - - -- OpenTTD Sat, 19 Jun 2010 18:36:21 +0000 - -openttd (1.0.2~rc1-0) unstable; urgency=low - - * New upstream release 1.0.2-RC1 - - -- OpenTTD Sat, 05 Jun 2010 23:36:21 +0000 - -openttd (1.0.1-0) unstable; urgency=low - - * New upstream release 1.0.1 - - -- OpenTTD Sat, 01 May 2010 00:00:00 +0200 - -openttd (1.0.1~rc2-0) unstable; urgency=low - - * New upstream release 1.0.1-RC2 - - -- OpenTTD Wed, 21 Apr 2010 21:36:21 +0200 - -openttd (1.0.1~rc1-0) unstable; urgency=low - - * New upstream release 1.0.1-RC1 - - -- OpenTTD Sat, 17 Apr 2010 23:36:21 +0000 - -openttd (1.0.0-1) unstable; urgency=low - - * [30a2162] New upstream release 1.0.0. (Closes: #570104) - * [102698a] Make openttd-wrapper work with older mktemp versions. - - -- Matthijs Kooijman Fri, 02 Apr 2010 23:36:21 +0200 - -openttd (1.0.0~rc3-2) unstable; urgency=low - - * [279c5ef] Recommend openttd-opengfx and suggest openttd-opensfx. - * [9330ad7] Update README.Debian concerning music files. - * [07bde24] Move openttd from contrib to main. (Closes: #560810) - - -- Matthijs Kooijman Thu, 18 Mar 2010 13:16:32 +0100 - -openttd (1.0.0~rc3-1) unstable; urgency=low - - * [412d153] New upstream release 1.0.0~rc3. - - -- Matthijs Kooijman Thu, 18 Mar 2010 10:09:33 +0100 - -openttd (1.0.0~rc2-1) unstable; urgency=low - - * [9c99af4] New upstream release 1.0.0~rc2. - - -- Matthijs Kooijman Thu, 04 Mar 2010 12:22:28 +0100 - -openttd (1.0.0~rc1-1) unstable; urgency=low - - * [fe4eb51] New upstream release 1.0.0~rc1. - * [6aa2be0] Note that the embedded md5 implementation has a different - license. - * [39eb336] Remove lintian override for empty gm directory. - - -- Matthijs Kooijman Fri, 19 Feb 2010 13:00:53 +0100 - -openttd (1.0.0~beta4-1) unstable; urgency=low - - * [6718224] New upstream release 1.0.0~beta4. - * [7b0fa8d] Remove some more docs that we don't want in the package. - * [bb9d744] Use liblzo2 instead of an embedded minilzo version. - * [949c06b] Explicitly disable iconv support. - - -- Matthijs Kooijman Fri, 19 Feb 2010 12:59:27 +0100 - -openttd (0.7.5-4) unstable; urgency=low - - * [174d0b1] Don't use deprecated < in Replaces. - - -- Matthijs Kooijman Mon, 15 Feb 2010 00:35:33 +0100 - -openttd (0.7.5-3) unstable; urgency=low - - * [d12fc5a] Make openttd-data replace openttd (< 0.7.5-2). - (Closes: #569679) - - -- Matthijs Kooijman Sun, 14 Feb 2010 16:56:31 +0100 - -openttd (0.7.5-2) unstable; urgency=low - - [ Matthijs Kooijman ] - * [fbab21d] Switch to source format 3.0 (quilt). - * [85c0c7d] No longer check for (and complain about missing) datafiles - on installation and upgrades. (Closes: #524651, 562574) - * [827eb61] Split the architecture independent data into openttd-data. - (Closes: #492462) - * [6fbd9c7] Update README.Debian. - * [76a5148] Support cross compilation. (Closes: #550951) - * [2005bf8] Simplify the rules file, make debhelper do more stuff. - * [fc0500e] Remove some configure arguments. - * [8ca38bb] Explicitly enable or disable all of the dependencies. - * [e38fb3e] Let the upstream Makefile install documentation. - * [5954fcf] Update the watch file to the new upstream url scheme. - * [7249594] Fix typo in copyright file. - * [660fb61] Bump the Standards-Version to 3.8.4, with no changes - required. - * [f94ab89] Move the packaging git repository to git.debian.org. - - -- Jordi Mallach Tue, 09 Feb 2010 21:40:24 +0100 - -openttd (0.7.5-1) unstable; urgency=high - - * [cdcb73a] Imported Upstream version 0.7.5. This release fixes - CVE-2009-4007. - - -- Matthijs Kooijman Thu, 24 Dec 2009 00:55:45 +0100 - -openttd (0.7.4-1) unstable; urgency=low - - * [a2c297b0] Imported Upstream version 0.7.4 - * [0232a645] Make Debian-specific patches executable. - * [76be04b] Switch the Debian packaging to git. - - -- Matthijs Kooijman Tue, 15 Dec 2009 22:11:52 +0100 - -openttd (0.7.3-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - * Use printf instead of echo -en in openttd-wrapper to make it POSIX - compatible (Closes: #547758). - * Remove three patches that are now included in upstream. - - -- Matthijs Kooijman Thu, 01 Oct 2009 22:52:59 +0200 - -openttd (0.7.2-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - * Bump Standards-Version to 3.8.3, with no changes required. - * Clean up the rules file a bit and add some lintian overrides. - * Explain why openttd is in contrib (Closes: #539381). - * Add the DM-Upload-Allowed control field. - * Re-add dpatch infrastructure. - * Fix the copyright file, since upstream only allows GPLv2, not later - versions. - * Add a section to the copyright file on the different license used by the - "Squirrel" programming language, which is shipped with OpenTTD since - 0.7.0. - * Backport upstream r17226, which removes the deprecated Encoding entry from - the .desktop file. - * Add a wrapper script for openttd, which captures any stderr output and - displays it when openttd returns an error code (Closes: #533557). - * Recommend x11-utils, since we use xmessage for displaying errors. Don't - depend on it, since openttd will still run fine without it, you just won't - see any errors. - * Backport upstream r17227 and r17229, which prevents terminal escape codes - from ending up in the captured error output. - * Backport upstream r17240, which improves stderr output when files are - missing or corrupt. - - -- Jordi Mallach Fri, 21 Aug 2009 15:27:26 +0200 - -openttd (0.7.1-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - * Link against libicu to enable right-to-left language support. - - -- Jordi Mallach Tue, 09 Jun 2009 21:46:28 +0200 - -openttd (0.7.0-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - * Remove Debian specific desktop file, upstream provides one now. - * Add debian/watch file. - - [ Jordi Mallach ] - * Bump Standards-Version to 3.8.1, with no changes required. - * Move to debhelper compat 7. Bump Build-Depends accordingly. - * Use dh_prep. - * Add "set -e" to config script. - * Remove a few extra doc files that get installed by upstream Makefile. - * Add more complete copyright information. - - -- Jordi Mallach Wed, 15 Apr 2009 18:22:10 +0200 - -openttd (0.6.3-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - - [ Jordi Mallach ] - * Add Spanish Debconf template translation, after fixing its corrupted - encoding (thanks, Germana Oliveira, closes: #499214). - - -- Jordi Mallach Thu, 02 Oct 2008 16:59:03 +0200 - -openttd (0.6.2-1) unstable; urgency=low - - * New upstream release. - - Fixes remote crash vulnerability CVE-2008-3547. Closes: #493714 - - -- Matthijs Kooijman Fri, 08 Aug 2008 11:07:05 +0200 - -openttd (0.6.2~rc2-1) experimental; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - - [ Jordi Mallach ] - * Fix typo in README.Debian (lintian). - * Remove dpatch build-dep and the empty debian/patches dir. - * Don't ignore possible "make distclean" errors. - - -- Jordi Mallach Sat, 26 Jul 2008 01:35:30 +0200 - -openttd (0.6.2~rc1-1) experimental; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - - -- Jordi Mallach Thu, 24 Jul 2008 16:09:57 +0200 - -openttd (0.6.1-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release. - * Remove no_install_personal.dpatch, it is included upstream now. - - -- Jordi Mallach Thu, 05 Jun 2008 00:47:36 +0200 - -openttd (0.6.0-2) unstable; urgency=low - - [ Jordi Mallach ] - * Rename XS-Vcs-* to the official Vcs-* fields. - - [ Matthijs Kooijman ] - * Don't install anything into ~ during make install, this prevented - successful builds on some architectures. Fix imported from upstream. - * Put the homepage in its own Homepage field instead of in the description. - * Bump Standards-Version to 3.7.3 - - -- Jordi Mallach Thu, 03 Apr 2008 00:07:10 +0200 - -openttd (0.6.0-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release: - - Adds note about font-configuration for non-latin languages. - Closes: #462604 - * Add .desktop file, provided by Andrea Colangelo. - Closes: #460073 - * Add Finnish Debconf translation, provided by Esko Arajärvi. - Closes: #456956 - - [ Jordi Mallach ] - * Fixes and improvements for the .desktop file according to the spec. - - -- Jordi Mallach Wed, 02 Apr 2008 14:04:40 +0200 - -openttd (0.5.3-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - - -- Jordi Mallach Tue, 18 Sep 2007 12:05:28 +0200 - -openttd (0.5.2-1) unstable; urgency=low - - [ Jordi Mallach ] - * New upstream release. - * Debconf translation updates: - - Catalan. - - [ Christian Perrier ] - * Debconf templates and debian/control reviewed by the debian-l10n- - english team as part of the Smith review project. - Closes: #422183, #419096. - * Debconf translation updates: - - Swedish. Closes: #422780 - - Basque. Closes: #422786 - - Czech. Closes: #422809 - - Galician. Closes: #422831 - - German. Closes: #422908 - - Tamil. Closes: #423079 - - Russian. Closes: #423224 - - Portuguese. Closes: #423413 - - French. Closes: #424436 - - Brazilian Portuguese. Closes: #425585 - - Dutch. Closes: #425707 - - -- Jordi Mallach Sat, 02 Jun 2007 06:24:34 +0200 - -openttd (0.5.1-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - * Add German and Swedish translations (Closes: #420258, #419097) - * Remove bogus fuzzy mark from the Catalan translation - - [ Jordi Mallach ] - * debian/control: add XS-Vcs-Svn and XS-Vcs-Browser fields. - - -- Jordi Mallach Mon, 23 Apr 2007 21:03:06 +0200 - -openttd (0.5.0-2) unstable; urgency=low - - * Upload to Debian. - - -- Jordi Mallach Sun, 11 Mar 2007 14:12:37 +0100 - -openttd (0.5.0-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - - [ Jordi Mallach ] - * Depend on ${misc:Depends}, not debconf directly. - - -- Jordi Mallach Thu, 8 Mar 2007 15:34:54 +0100 - -openttd (0.5.0~rc5-1) unstable; urgency=low - - [ Matthijs Kooijman ] - * New upstream release - * Compile with freetype and fontconfig support. - - [ Jordi Mallach ] - * Convert debconf templates to podebconf. - * Add a Catalan translation. - * Minor packaging cleanups. - - -- Matthijs Kooijman Mon, 12 Feb 2007 09:25:41 +0100 - -openttd (0.5.0~rc4-1) unstable; urgency=low - - * New upstream release - - -- Matthijs Kooijman Thu, 18 Jan 2007 21:17:28 +0100 - -openttd (0.5.0~rc3-1) unstable; urgency=low - - * New upstream release - - -- Matthijs Kooijman Thu, 18 Jan 2007 20:21:04 +0100 - -openttd (0.5.0~rc2-1) unstable; urgency=low - - * New upstream release - * Removed fix for empty scenarios dir, openttd Makefile now properly handles - this. - - -- Matthijs Kooijman Sun, 31 Dec 2006 12:24:37 +0100 - -openttd (0.5.0~rc1-1) unstable; urgency=low - - * New upstream release. - - -- Matthijs Kooijman Fri, 22 Dec 2006 11:03:46 +0100 - -openttd (0.4.8-1) unstable; urgency=low - - * New upstream release - * Bump standards version to 3.7.2 - - -- Matthijs Kooijman Mon, 14 Aug 2006 16:28:50 +0200 - -openttd (0.4.7-1) unstable; urgency=low - - * New upstream release. - - -- Matthijs Kooijman Mon, 27 Mar 2006 23:40:00 +0200 - -openttd (0.4.6-1) unstable; urgency=low - - * New upstream release. - * Remove old terminal messages and make sure that debconf is always called. - - -- Matthijs Kooijman Wed, 8 Mar 2006 23:57:35 +0100 - -openttd (0.4.5-1) unstable; urgency=low - - * New upstream release - * Bump Standards-Version to 3.6.2 - * s/timdity/timidity/ in README.Debian. - * Use debconf for prompting instead of terminal. - * Fix makefile to create icon dir if necessary. - * Fix syntax error in manpage. - - -- Matthijs Kooijman Wed, 1 Feb 2006 01:56:39 +0100 - -openttd (0.4.0.1-5) unstable; urgency=low - - * Fixed capitalization of menu item. - * Install xpm icon to /usr/share/pixmaps and don't install png icon, since - it is not used. - - -- Matthijs Kooijman Thu, 22 Sep 2005 10:35:09 +0200 - -openttd (0.4.0.1-4) unstable; urgency=low - - * Changelog was distributed twice. - * Put openttd in contrib. - - -- Matthijs Kooijman Mon, 19 Sep 2005 23:49:18 +0200 - -openttd (0.4.0.1-3) unstable; urgency=low - - * Clarified installing instructions in README.Debian - - -- Matthijs Kooijman Thu, 16 Jun 2005 03:51:13 +0200 - -openttd (0.4.0.1-2) unstable; urgency=low - - * Added Suggests: timidity, freepats - - -- Matthijs Kooijman Thu, 16 Jun 2005 03:34:03 +0200 - -openttd (0.4.0.1-1) unstable; urgency=low - - * New upstream release - - -- Matthijs Kooijman Mon, 23 May 2005 13:04:24 +0200 - -openttd (0.4.0-1) unstable; urgency=low - - * New upstream release - - -- Matthijs Kooijman Mon, 16 May 2005 00:16:17 +0200 - -openttd (0.3.6-1) unstable; urgency=low - - * New upstream release - * Modified Makefile to install xpm icon and scenarios in /usr/share/games/openttd/ - * Added openttd.32.xpm, openttd.64.xpm was too big - - -- Matthijs Kooijman Tue, 25 Jan 2005 19:21:08 +0100 - -openttd (0.3.5-2) unstable; urgency=low - - * Fixed some lintian warnings. - * Added openttd.64.xpm (icon for menu). - - -- Matthijs Kooijman Mon, 27 Dec 2004 01:51:36 +0100 - -openttd (0.3.5-1) unstable; urgency=low - - * Initial Release. - - -- Matthijs Kooijman Fri, 24 Dec 2004 02:58:47 +0100 diff --git a/os/debian/compat b/os/debian/compat deleted file mode 100644 index 7f8f011eb7..0000000000 --- a/os/debian/compat +++ /dev/null @@ -1 +0,0 @@ -7 diff --git a/os/debian/control b/os/debian/control deleted file mode 100644 index 01b66cc494..0000000000 --- a/os/debian/control +++ /dev/null @@ -1,36 +0,0 @@ -Source: openttd -Section: games -Priority: optional -Maintainer: Matthijs Kooijman -Uploaders: Jordi Mallach -Build-Depends: debhelper (>= 7.0.50), libsdl2-dev, zlib1g-dev, libpng-dev, libfreetype6-dev, libfontconfig-dev, libicu-dev, liblzma-dev, liblzo2-dev -Standards-Version: 3.8.4 -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/openttd.git -Vcs-Git: git://anonscm.debian.org/collab-maint/openttd.git -Homepage: http://www.openttd.org/ - -Package: openttd -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Recommends: openttd-opengfx, x11-utils -Replaces: openttd-data -Conflicts: openttd-data -Suggests: openttd-opensfx, timidity, freepats -Description: reimplementation of Transport Tycoon Deluxe with enhancements - OpenTTD is a reimplementation of the Microprose game "Transport - Tycoon Deluxe" with lots of new features and enhancements. - . - OpenTTD is playable with the free graphics files from the openttd-opengfx - package and optional sound files from the openttd-opensfx package (which is in - non-free). Alternatively, OpenTTD can use the graphics files from the original - Transport Tycoon Deluxe game (See README.Debian on how to set this up). - -Package: openttd-dbg -Architecture: any -Section: debug -Priority: extra -Depends: openttd (= ${binary:Version}), ${misc:Depends} -Description: debugging symbols for openttd - This package contains the debugging symbols for OpenTTD, the reimplementation - of the Micropose game "Transport Tycoon Deluxe" with lots of new features and - enhancements. diff --git a/os/debian/copyright b/os/debian/copyright deleted file mode 100644 index 24d6d7052f..0000000000 --- a/os/debian/copyright +++ /dev/null @@ -1,106 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: OpenTTD -Upstream-Contact: info@openttd.org, #openttd on irc.oftc.net -Source: http://www.openttd.org - - -Files: * -Copyright: © 2004-2019 Ludvig Strigeous and others. -License: GPL-2.0 - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2.0 as - published by the Free Software Foundation; - . - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - . - You should have received a copy of the GNU General Public License - along with this package; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - . - On Debian systems, the complete text of the GNU General Public License - version 2 can be found in `/usr/share/common-licenses/GPL-2'. - -Files: src/3rdparty/squirrel/* -Copyright: © 2003-2009 Alberto Demichelis -License: Zlib - -Files: src/3rdparty/md5/* -Copyright: © 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. -License: Zlib - - -License: Zlib - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - . - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - . - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software in - a product, an acknowledgment in the product documentation would be - appreciated but is not required. - . - 2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - . - 3. This notice may not be removed or altered from any source - distribution. - -Files: os/dos/exe2coff/* -Copyright: © 1998 DJ Delorie -License: GPL-2.0 with additional restrictions - This document is Copyright (C) DJ Delorie and may be distributed - verbatim, but changing it is not allowed. - . - Source code copyright DJ Delorie is distributed under the terms of the - GNU General Public Licence, with the following exceptions: - . - * Sources used to build crt0.o, gcrt0.o, libc.a, libdbg.a, and - libemu.a are distributed under the terms of the GNU Library General - Public License, rather than the GNU GPL. - . - * Any existing copyright or authorship information in any given source - file must remain intact. If you modify a source file, a notice to that - effect must be added to the authorship information in the source file. - . - * Runtime binaries, as provided by DJ in DJGPP, may be distributed - without sources ONLY if the recipient is given sufficient information - to obtain a copy of djgpp themselves. This primarily applies to - go32-v2.exe, emu387.dxe, and stubedit.exe. - . - * Runtime objects and libraries, as provided by DJ in DJGPP, when - linked into an application, may be distributed without sources ONLY - if the recipient is given sufficient information to obtain a copy of - djgpp themselves. This primarily applies to crt0.o and libc.a. - . - On Debian systems, the complete text of the GNU General Public License - version 2 can be found in `/usr/share/common-licenses/GPL-2'. -Comment: - Given only the exe2coff.c file is distributed in the source distribution (and - nothing in Debian binary distribution), it seems only the 2nd condition - applies. - -Files: os/dos/cwsdpmi/* -Source: http://homer.rice.edu/~sandmann/cwsdpmi/index.html -Copyright: © 1995-2000 Charles W Sandmann (sandmann@clio.rice.edu) -License: Custom binary-only license - This is release 5. The files in this binary distribution may be redistributed - under the GPL (with source) or without the source code provided: - . - * CWSDPMI.EXE or CWSDPR0.EXE are not modified in any way except via CWSPARAM. - . - * CWSDSTUB.EXE internal contents are not modified in any way except via - CWSPARAM or STUBEDIT. It may have a COFF image plus data appended to it. - . - * Notice to users that they have the right to receive the source code and/or - binary updates for CWSDPMI. Distributors should indicate a site for the - source in their documentation. -Comment: - Files are distributed as binary only, so the second option in the license - ("without source code provided: ...") is applicable. diff --git a/os/debian/gbp.conf b/os/debian/gbp.conf deleted file mode 100644 index 58b68d336b..0000000000 --- a/os/debian/gbp.conf +++ /dev/null @@ -1,13 +0,0 @@ -[DEFAULT] -# Use pristine-tar -pristine-tar = True - -[git-dch] -# We use metaheaders in commit messages. -meta = True -# Put git commit ids in the debian changelog. -id-length = 7 - -[git-import-orig] -# Use a custom commit message for upstream imports. -import-msg = New upstream release %(version)s. diff --git a/os/debian/menu b/os/debian/menu deleted file mode 100644 index 3afa6e08e8..0000000000 --- a/os/debian/menu +++ /dev/null @@ -1,2 +0,0 @@ -?package(openttd):needs="X11" section="Games/Simulation" title="OpenTTD"\ -command="/usr/games/openttd" icon="/usr/share/pixmaps/openttd.32.xpm" diff --git a/os/debian/openttd-wrapper b/os/debian/openttd-wrapper deleted file mode 100644 index 6f85f00b06..0000000000 --- a/os/debian/openttd-wrapper +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -# This is a wrapper script that checks openttd's exit status and -# displays its stderr output - -# Get a file to capture stderr to. Use the deprecated -t option, so this -# works on the old mktemp from the mktemp package (which has been -# replaced by the version from the coreutils package). -TMPFILE=`mktemp -t openttd.errout.XXXXXXXXX` - -if [ ! -w "$TMPFILE" ]; then - xmessage "Could not create temporary file for error messages. Not starting OpenTTD." - exit 1; -fi - -# Capture stderr -openttd "$@" 2> "$TMPFILE" -ERRCODE=$? -if [ "$ERRCODE" -ne 0 ]; then - CODEMSG="OpenTTD returned with error code $ERRCODE." - if [ -s "$TMPFILE" ]; then - MESSAGE="$CODEMSG The following error messages were produced:\n\n" - printf "$MESSAGE" | cat - "$TMPFILE" | fold -s | xmessage -file - - else - xmessage "$CODEMSG No error messages were produced." - fi -fi - -rm -f "$TMPFILE" diff --git a/os/debian/patches/run-openttd-wrapper.patch b/os/debian/patches/run-openttd-wrapper.patch deleted file mode 100644 index ff8fc15aef..0000000000 --- a/os/debian/patches/run-openttd-wrapper.patch +++ /dev/null @@ -1,20 +0,0 @@ -From: Matthijs Kooijman -Subject: Use a wrapper script for running openttd - -The wrapper script captures stderr from openttd and displays this in -case of an error. This patch makes the the .desktop file call the -wrapper instead of the openttd binary directly. - -Index: media/openttd.desktop.in -=================================================================== ---- a/media/openttd.desktop.in (revision 20124) -+++ b/media/openttd.desktop.in (working copy) -@@ -5,7 +5,7 @@ - Version=1.1 - Name=!!MENU_NAME!! - Icon=openttd --Exec=!!TTD!! -+Exec=/usr/share/games/openttd/openttd-wrapper - Terminal=false - Categories=!!MENU_GROUP!! - Comment=A clone of Transport Tycoon Deluxe diff --git a/os/debian/patches/series b/os/debian/patches/series deleted file mode 100644 index f7cf2d9d58..0000000000 --- a/os/debian/patches/series +++ /dev/null @@ -1 +0,0 @@ -run-openttd-wrapper.patch diff --git a/os/debian/rules b/os/debian/rules deleted file mode 100755 index b5d67670bd..0000000000 --- a/os/debian/rules +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Makefile to build the openttd debian package. - -# Use debhelper default for all targets (but some are overridden below). -%: - dh --parallel $@ - -DEB_HOST_GNU_TYPE=$(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) -DEB_BUILD_GNU_TYPE=$(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) -ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) -CROSS= --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) -endif - -# This prevents linking uselessly to libicudata and silences a warning -# in the build process. -DEB_LDFLAGS_MAINT_APPEND="-Wl,-as-needed" - -# Enable all hardening options (since openttd offers a network-listening -# service that handles untrusted data). -DEB_BUILD_MAINT_OPTIONS=hardening=+all - -# Load buildflags (this uses dpkg-buildflags). Note that we don't export -# them, but instead pass them to ./configure explicitly. -include /usr/share/dpkg/buildflags.mk - -# Pass custom options to configure. Since it's not autoconf but a custom -# script, some of the option names are slightly different. We also need -# to be explicit about the dependencies, in case we're not running in a -# clean build root. -override_dh_auto_configure: - ./configure $(CROSS) --prefix-dir=/usr --install-dir=debian/openttd --without-allegro --with-zlib --with-sdl --with-png --with-freetype --with-fontconfig --with-icu-sort --with-liblzo2 --with-lzma --without-xdg-basedir --without-iconv --disable-strip CFLAGS="$(CFLAGS) $(CPPFLAGS)" CXXFLAGS="$(CXXFLAGS) $(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" CFLAGS_BUILD="$(CFLAGS) $(CPPFLAGS)" CXXFLAGS_BUILD="$(CXXFLAGS) $(CPPFLAGS)" LDFLAGS_BUILD="$(LDFLAGS)" - -# Do some extra installation -override_dh_auto_install: - $(MAKE) install DO_NOT_INSTALL_CHANGELOG=1 DO_NOT_INSTALL_LICENSE=1 - -# Don't do testing. Because the OpenTTD Makefile always does dependency -# generation (even on invalid targets), dh_auto_test thinks there is a -# "test" target, while there isn't. -override_dh_auto_test: - -# Call mrproper. Again, dh_auto_clean thinks there is a distclean -# target, while there isn't. -override_dh_auto_clean: - [ ! -f Makefile ] || $(MAKE) mrproper - -# We want to strip the debug informatiton into the -dbg package. -override_dh_strip: - dh_strip --dbg-package=openttd-dbg diff --git a/os/debian/source/format b/os/debian/source/format deleted file mode 100644 index 163aaf8d82..0000000000 --- a/os/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/os/debian/watch b/os/debian/watch deleted file mode 100644 index 776381b9c2..0000000000 --- a/os/debian/watch +++ /dev/null @@ -1,5 +0,0 @@ -version=3 - -options=downloadurlmangle=s/(.*)\/index.html$/\1\/openttd-\1-source.tar.gz/ \ -http://master.binaries.openttd.org/releases/ \ -(\d+(?:\.\d+)*)/index.html diff --git a/os/emscripten/Dockerfile b/os/emscripten/Dockerfile new file mode 100644 index 0000000000..1278a088ff --- /dev/null +++ b/os/emscripten/Dockerfile @@ -0,0 +1,4 @@ +FROM emscripten/emsdk + +COPY emsdk-liblzma.patch / +RUN cd /emsdk/upstream/emscripten && patch -p1 < /emsdk-liblzma.patch diff --git a/os/emscripten/README.md b/os/emscripten/README.md new file mode 100644 index 0000000000..4c5d7508cc --- /dev/null +++ b/os/emscripten/README.md @@ -0,0 +1,40 @@ +## How to build with Emscripten + +Building with Emscripten works with emsdk 2.0.10 and above. + +Currently there is no LibLZMA support upstream; for this we suggest to apply +the provided patch in this folder to your emsdk installation. + +For convenience, a Dockerfile is supplied that does this patches for you +against upstream emsdk docker. Best way to use it: + +Build the docker image: +``` + docker build -t emsdk-lzma . +``` + +Build the host tools first: +``` + mkdir build-host + docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build-host emsdk-lzma cmake .. -DOPTION_TOOLS_ONLY=ON + docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build-host emsdk-lzma make -j5 tools +``` + +Next, build the game with emscripten: + +``` + mkdir build + docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build emsdk-lzma emcmake cmake .. -DHOST_BINARY_DIR=$(pwd)/build-host -DCMAKE_BUILD_TYPE=RelWithDebInfo -DOPTION_USE_ASSERTS=OFF + docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build emsdk-lzma emmake make -j5 +``` + +And now you have in your build folder files like "openttd.html". + +To run it locally, you would have to start a local webserver, like: + +``` + cd build + python3 -m http.server +```` + +Now you can play the game via http://127.0.0.1:8000/openttd.html . diff --git a/os/emscripten/cmake/FindLibLZMA.cmake b/os/emscripten/cmake/FindLibLZMA.cmake new file mode 100644 index 0000000000..99d1ca640a --- /dev/null +++ b/os/emscripten/cmake/FindLibLZMA.cmake @@ -0,0 +1,20 @@ +# LibLZMA is a recent addition to the emscripten SDK, so it is possible +# someone hasn't updated his SDK yet. Test out if the SDK supports LibLZMA. +include(CheckCXXSourceCompiles) +set(CMAKE_REQUIRED_FLAGS "-sUSE_LIBLZMA=1") + +check_cxx_source_compiles(" + #include + int main() { return 0; }" + LIBLZMA_FOUND +) + +if (LIBLZMA_FOUND) + add_library(LibLZMA::LibLZMA INTERFACE IMPORTED) + set_target_properties(LibLZMA::LibLZMA PROPERTIES + INTERFACE_COMPILE_OPTIONS "-sUSE_LIBLZMA=1" + INTERFACE_LINK_LIBRARIES "-sUSE_LIBLZMA=1" + ) +else() + message(WARNING "You are using an emscripten SDK without LibLZMA support. Many savegames won't be able to load in OpenTTD. Please apply 'emsdk-liblzma.patch' to your local emsdk installation.") +endif() diff --git a/os/emscripten/cmake/FindPNG.cmake b/os/emscripten/cmake/FindPNG.cmake new file mode 100644 index 0000000000..2616af33d9 --- /dev/null +++ b/os/emscripten/cmake/FindPNG.cmake @@ -0,0 +1,7 @@ +add_library(PNG::PNG INTERFACE IMPORTED) +set_target_properties(PNG::PNG PROPERTIES + INTERFACE_COMPILE_OPTIONS "-sUSE_LIBPNG=1" + INTERFACE_LINK_LIBRARIES "-sUSE_LIBPNG=1" +) + +set(PNG_FOUND on) diff --git a/os/emscripten/cmake/FindSDL2.cmake b/os/emscripten/cmake/FindSDL2.cmake new file mode 100644 index 0000000000..54553958b6 --- /dev/null +++ b/os/emscripten/cmake/FindSDL2.cmake @@ -0,0 +1,7 @@ +add_library(SDL2::SDL2 INTERFACE IMPORTED) +set_target_properties(SDL2::SDL2 PROPERTIES + INTERFACE_COMPILE_OPTIONS "-sUSE_SDL=2" + INTERFACE_LINK_LIBRARIES "-sUSE_SDL=2" +) + +set(SDL2_FOUND on) diff --git a/os/emscripten/cmake/FindZLIB.cmake b/os/emscripten/cmake/FindZLIB.cmake new file mode 100644 index 0000000000..2ade2ba1b0 --- /dev/null +++ b/os/emscripten/cmake/FindZLIB.cmake @@ -0,0 +1,7 @@ +add_library(ZLIB::ZLIB INTERFACE IMPORTED) +set_target_properties(ZLIB::ZLIB PROPERTIES + INTERFACE_COMPILE_OPTIONS "-sUSE_ZLIB=1" + INTERFACE_LINK_LIBRARIES "-sUSE_ZLIB=1" +) + +set(ZLIB_FOUND on) diff --git a/os/emscripten/emsdk-liblzma.patch b/os/emscripten/emsdk-liblzma.patch new file mode 100644 index 0000000000..103adae0cc --- /dev/null +++ b/os/emscripten/emsdk-liblzma.patch @@ -0,0 +1,213 @@ +From 90dd4d4c6b1cedec338ff5b375fffca93700f7bc Mon Sep 17 00:00:00 2001 +From: milek7 +Date: Tue, 8 Dec 2020 01:03:31 +0100 +Subject: [PATCH] Add liblzma port + +--- +Source: https://github.com/emscripten-core/emscripten/pull/12990 + +Modifed by OpenTTD to have the bare minimum needed to work. Otherwise there +are constantly conflicts when trying to apply this patch to different versions +of emsdk. + +diff --git a/embuilder.py b/embuilder.py +index 818262190ed..ab7d5adb7b2 100755 +--- a/embuilder.py ++++ b/embuilder.py +@@ -60,6 +60,7 @@ + 'harfbuzz', + 'icu', + 'libjpeg', ++ 'liblzma', + 'libpng', + 'ogg', + 'regal', +@@ -197,6 +198,8 @@ def main(): + build_port('ogg', libname('libogg')) + elif what == 'libjpeg': + build_port('libjpeg', libname('libjpeg')) ++ elif what == 'liblzma': ++ build_port('liblzma', libname('liblzma')) + elif what == 'libpng': + build_port('libpng', libname('libpng')) + elif what == 'sdl2': +diff --git a/src/settings.js b/src/settings.js +index 61cd98939ba..be6fcb678c6 100644 +--- a/src/settings.js ++++ b/src/settings.js +@@ -1197,6 +1197,9 @@ var USE_BZIP2 = 0; + // 1 = use libjpeg from emscripten-ports + var USE_LIBJPEG = 0; + ++// 1 = use liblzma from emscripten-ports ++var USE_LIBLZMA = 0; ++ + // 1 = use libpng from emscripten-ports + var USE_LIBPNG = 0; + +diff --git a/tools/ports/liblzma.py b/tools/ports/liblzma.py +new file mode 100644 +index 00000000000..e9567ef36ff +--- /dev/null ++++ b/tools/ports/liblzma.py +@@ -0,0 +1,160 @@ ++# Copyright 2020 The Emscripten Authors. All rights reserved. ++# Emscripten is available under two separate licenses, the MIT license and the ++# University of Illinois/NCSA Open Source License. Both these licenses can be ++# found in the LICENSE file. ++ ++import os ++import shutil ++ ++VERSION = '5.2.5' ++HASH = '7443674247deda2935220fbc4dfc7665e5bb5a260be8ad858c8bd7d7b9f0f868f04ea45e62eb17c0a5e6a2de7c7500ad2d201e2d668c48ca29bd9eea5a73a3ce' ++ ++ ++def needed(settings): ++ return settings.USE_LIBLZMA ++ ++ ++def get(ports, settings, shared): ++ libname = ports.get_lib_name('liblzma') ++ ports.fetch_project('liblzma', 'https://tukaani.org/xz/xz-' + VERSION + '.tar.gz', 'xz-' + VERSION, sha512hash=HASH) ++ ++ def create(): ++ ports.clear_project_build('liblzma') ++ ++ source_path = os.path.join(ports.get_dir(), 'liblzma', 'xz-' + VERSION) ++ dest_path = os.path.join(ports.get_build_dir(), 'liblzma') ++ ++ shared.try_delete(dest_path) ++ os.makedirs(dest_path) ++ shutil.rmtree(dest_path, ignore_errors=True) ++ shutil.copytree(source_path, dest_path) ++ ++ build_flags = ['-DHAVE_CONFIG_H', '-DTUKLIB_SYMBOL_PREFIX=lzma_', '-fvisibility=hidden'] ++ exclude_dirs = ['xzdec', 'xz', 'lzmainfo'] ++ exclude_files = ['crc32_small.c', 'crc64_small.c', 'crc32_tablegen.c', 'crc64_tablegen.c', 'price_tablegen.c', 'fastpos_tablegen.c' ++ 'tuklib_exit.c', 'tuklib_mbstr_fw.c', 'tuklib_mbstr_width.c', 'tuklib_open_stdxxx.c', 'tuklib_progname.c'] ++ include_dirs_rel = ['../common', 'api', 'common', 'check', 'lz', 'rangecoder', 'lzma', 'delta', 'simple'] ++ ++ open(os.path.join(dest_path, 'src', 'config.h'), 'w').write(config_h) ++ ++ final = os.path.join(dest_path, libname) ++ include_dirs = [os.path.join(dest_path, 'src', 'liblzma', p) for p in include_dirs_rel] ++ ports.build_port(os.path.join(dest_path, 'src'), final, flags=build_flags, exclude_dirs=exclude_dirs, exclude_files=exclude_files, includes=include_dirs) ++ ++ ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api'), 'lzma.h') ++ ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api', 'lzma'), '*.h', 'lzma') ++ ++ return final ++ ++ return [shared.Cache.get(libname, create, what='port')] ++ ++ ++def clear(ports, settings, shared): ++ shared.Cache.erase_file(ports.get_lib_name('liblzma')) ++ ++ ++def process_args(ports): ++ return [] ++ ++ ++def show(): ++ return 'liblzma (USE_LIBLZMA=1; public domain)' ++ ++ ++config_h = r''' ++#define ASSUME_RAM 128 ++#define ENABLE_NLS 1 ++#define HAVE_CHECK_CRC32 1 ++#define HAVE_CHECK_CRC64 1 ++#define HAVE_CHECK_SHA256 1 ++#define HAVE_CLOCK_GETTIME 1 ++#define HAVE_DCGETTEXT 1 ++#define HAVE_DECL_CLOCK_MONOTONIC 1 ++#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 ++#define HAVE_DECODERS 1 ++#define HAVE_DECODER_ARM 1 ++#define HAVE_DECODER_ARMTHUMB 1 ++#define HAVE_DECODER_DELTA 1 ++#define HAVE_DECODER_IA64 1 ++#define HAVE_DECODER_LZMA1 1 ++#define HAVE_DECODER_LZMA2 1 ++#define HAVE_DECODER_POWERPC 1 ++#define HAVE_DECODER_SPARC 1 ++#define HAVE_DECODER_X86 1 ++#define HAVE_DLFCN_H 1 ++#define HAVE_ENCODERS 1 ++#define HAVE_ENCODER_ARM 1 ++#define HAVE_ENCODER_ARMTHUMB 1 ++#define HAVE_ENCODER_DELTA 1 ++#define HAVE_ENCODER_IA64 1 ++#define HAVE_ENCODER_LZMA1 1 ++#define HAVE_ENCODER_LZMA2 1 ++#define HAVE_ENCODER_POWERPC 1 ++#define HAVE_ENCODER_SPARC 1 ++#define HAVE_ENCODER_X86 1 ++#define HAVE_FCNTL_H 1 ++#define HAVE_FUTIMENS 1 ++#define HAVE_GETOPT_H 1 ++#define HAVE_GETOPT_LONG 1 ++#define HAVE_GETTEXT 1 ++#define HAVE_IMMINTRIN_H 1 ++#define HAVE_INTTYPES_H 1 ++#define HAVE_LIMITS_H 1 ++#define HAVE_MBRTOWC 1 ++#define HAVE_MEMORY_H 1 ++#define HAVE_MF_BT2 1 ++#define HAVE_MF_BT3 1 ++#define HAVE_MF_BT4 1 ++#define HAVE_MF_HC3 1 ++#define HAVE_MF_HC4 1 ++#define HAVE_OPTRESET 1 ++#define HAVE_POSIX_FADVISE 1 ++#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1 ++#define HAVE_PTHREAD_PRIO_INHERIT 1 ++#define HAVE_STDBOOL_H 1 ++#define HAVE_STDINT_H 1 ++#define HAVE_STDLIB_H 1 ++#define HAVE_STRINGS_H 1 ++#define HAVE_STRING_H 1 ++#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 ++#define HAVE_SYS_PARAM_H 1 ++#define HAVE_SYS_STAT_H 1 ++#define HAVE_SYS_TIME_H 1 ++#define HAVE_SYS_TYPES_H 1 ++#define HAVE_UINTPTR_T 1 ++#define HAVE_UNISTD_H 1 ++#define HAVE_VISIBILITY 1 ++#define HAVE_WCWIDTH 1 ++#define HAVE__BOOL 1 ++#define HAVE___BUILTIN_ASSUME_ALIGNED 1 ++#define HAVE___BUILTIN_BSWAPXX 1 ++#define MYTHREAD_POSIX 1 ++#define NDEBUG 1 ++#define PACKAGE "xz" ++#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org" ++#define PACKAGE_NAME "XZ Utils" ++#define PACKAGE_STRING "XZ Utils 5.2.5" ++#define PACKAGE_TARNAME "xz" ++#define PACKAGE_VERSION "5.2.5" ++#define SIZEOF_SIZE_T 4 ++#define STDC_HEADERS 1 ++#define TUKLIB_CPUCORES_SYSCONF 1 ++#define TUKLIB_FAST_UNALIGNED_ACCESS 1 ++#define TUKLIB_PHYSMEM_SYSCONF 1 ++#ifndef _ALL_SOURCE ++# define _ALL_SOURCE 1 ++#endif ++#ifndef _GNU_SOURCE ++# define _GNU_SOURCE 1 ++#endif ++#ifndef _POSIX_PTHREAD_SEMANTICS ++# define _POSIX_PTHREAD_SEMANTICS 1 ++#endif ++#ifndef _TANDEM_SOURCE ++# define _TANDEM_SOURCE 1 ++#endif ++#ifndef __EXTENSIONS__ ++# define __EXTENSIONS__ 1 ++#endif ++#define VERSION "5.2.5" ++''' diff --git a/os/emscripten/loading.png b/os/emscripten/loading.png new file mode 100755 index 0000000000..d4c4aaf75e Binary files /dev/null and b/os/emscripten/loading.png differ diff --git a/os/emscripten/pre.js b/os/emscripten/pre.js new file mode 100644 index 0000000000..5cbd899e04 --- /dev/null +++ b/os/emscripten/pre.js @@ -0,0 +1,93 @@ +Module.arguments.push('-mnull', '-snull', '-vsdl:relative_mode'); +Module['websocket'] = { url: function(host, port, proto) { + /* openttd.org hosts a WebSocket proxy for the content service. */ + if (host == "content.openttd.org" && port == 3978 && proto == "tcp") { + return "wss://content.openttd.org/"; + } + + /* Everything else just tries to make a default WebSocket connection. + * If you run your own server you can setup your own WebSocket proxy in + * front of it and let people connect to your server via the proxy. You + * are best to add another "if" statement as above for this. */ + return null; +} }; + +Module.preRun.push(function() { + personal_dir = '/home/web_user/.openttd'; + content_download_dir = personal_dir + '/content_download' + + /* Because of the "-c" above, all user-data is stored in /user_data. */ + FS.mkdir(personal_dir); + FS.mount(IDBFS, {}, personal_dir); + + Module.addRunDependency('syncfs'); + FS.syncfs(true, function (err) { + /* FS.mkdir() tends to fail if parent folders do not exist. */ + if (!FS.analyzePath(content_download_dir).exists) { + FS.mkdir(content_download_dir); + } + if (!FS.analyzePath(content_download_dir + '/baseset').exists) { + FS.mkdir(content_download_dir + '/baseset'); + } + + /* Check if the OpenGFX baseset is already downloaded. */ + if (!FS.analyzePath(content_download_dir + '/baseset/opengfx-0.6.0.tar').exists) { + window.openttd_downloaded_opengfx = true; + FS.createPreloadedFile(content_download_dir + '/baseset', 'opengfx-0.6.0.tar', 'https://installer.cdn.openttd.org/emscripten/opengfx-0.6.0.tar', true, true); + } else { + /* Fake dependency increase, so the counter is stable. */ + Module.addRunDependency('opengfx'); + Module.removeRunDependency('opengfx'); + } + + Module.removeRunDependency('syncfs'); + }); + + window.openttd_syncfs_shown_warning = false; + window.openttd_syncfs = function() { + /* Copy the virtual FS to the persistent storage. */ + FS.syncfs(false, function (err) { }); + + /* On first time, warn the user about the volatile behaviour of + * persistent storage. */ + if (!window.openttd_syncfs_shown_warning) { + window.openttd_syncfs_shown_warning = true; + Module.onWarningFs(); + } + } + + window.openttd_exit = function() { + Module.onExit(); + } + + window.openttd_abort = function() { + Module.onAbort(); + } + + window.openttd_server_list = function() { + add_server = Module.cwrap("em_openttd_add_server", null, ["string", "number"]); + + /* Add servers that support WebSocket here. Example: + * add_server("localhost", 3979); */ + } + + /* https://github.com/emscripten-core/emscripten/pull/12995 implements this + * properly. Till that time, we use a polyfill. */ + SOCKFS.websocket_sock_ops.createPeer_ = SOCKFS.websocket_sock_ops.createPeer; + SOCKFS.websocket_sock_ops.createPeer = function(sock, addr, port) + { + let func = Module['websocket']['url']; + Module['websocket']['url'] = func(addr, port, (sock.type == 2) ? 'udp' : 'tcp'); + let ret = SOCKFS.websocket_sock_ops.createPeer_(sock, addr, port); + Module['websocket']['url'] = func; + return ret; + } +}); + +Module.postRun.push(function() { + /* Check if we downloaded OpenGFX; if so, sync the virtual FS back to the + * IDBFS so OpenGFX is stored persistent. */ + if (window['openttd_downloaded_opengfx']) { + FS.syncfs(false, function (err) { }); + } +}); diff --git a/os/emscripten/shell.html b/os/emscripten/shell.html new file mode 100644 index 0000000000..17ea5b414f --- /dev/null +++ b/os/emscripten/shell.html @@ -0,0 +1,205 @@ + + + + + + OpenTTD + + + +
+
+
+ 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..04d6ea6d33 --- a/os/macosx/plistgen.sh +++ b/os/macosx/Info.plist.in @@ -1,46 +1,33 @@ -#!/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 -" > "$1"/Contents/Info.plist + diff --git a/os/macosx/notarize.sh b/os/macosx/notarize.sh new file mode 100755 index 0000000000..3434c31256 --- /dev/null +++ b/os/macosx/notarize.sh @@ -0,0 +1,58 @@ +#!/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 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/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 100644 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_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/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/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 b/projects/openttd_vs140.vcxproj deleted file mode 100644 index 5bc6254ff7..0000000000 --- a/projects/openttd_vs140.vcxproj +++ /dev/null @@ -1,1383 +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)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {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_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters deleted file mode 100644 index 0405740d4c..0000000000 --- a/projects/openttd_vs140.vcxproj.filters +++ /dev/null @@ -1,3140 +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} - - - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - Video - - - Music - - - Music - - - Music - - - Music - - - Sound - - - Sound - - - Sound - - - Sound - - - Sound - - - Windows files - - - Windows files - - - Windows files - - - Windows files - - - Threading - - - - - - - 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 b/projects/openttd_vs141.vcxproj deleted file mode 100644 index 8df3d47daf..0000000000 --- a/projects/openttd_vs141.vcxproj +++ /dev/null @@ -1,1383 +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)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {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.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters deleted file mode 100644 index 0405740d4c..0000000000 --- a/projects/openttd_vs141.vcxproj.filters +++ /dev/null @@ -1,3140 +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} - - - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - Video - - - Music - - - Music - - - Music - - - Music - - - Sound - - - Sound - - - Sound - - - Sound - - - Sound - - - Windows files - - - Windows files - - - Windows files - - - Windows files - - - Threading - - - - - - - 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 b/projects/openttd_vs142.vcxproj deleted file mode 100644 index 487bb95fd3..0000000000 --- a/projects/openttd_vs142.vcxproj +++ /dev/null @@ -1,1383 +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)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {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.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters deleted file mode 100644 index 0405740d4c..0000000000 --- a/projects/openttd_vs142.vcxproj.filters +++ /dev/null @@ -1,3140 +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} - - - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - 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 - - - Video - - - Music - - - Music - - - Music - - - Music - - - Sound - - - Sound - - - Sound - - - Sound - - - Sound - - - Windows files - - - Windows files - - - Windows files - - - Windows files - - - Threading - - - - - - - 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/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_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/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/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/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/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 91% rename from bin/ai/regression/regression_info.nut rename to regression/regression/info.nut index 020b186faf..758754cfe7 100644 --- a/bin/ai/regression/regression_info.nut +++ b/regression/regression/info.nut @@ -4,7 +4,7 @@ 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"; } } 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..42e5072fd4 --- /dev/null +++ b/regression/stationlist/info.nut @@ -0,0 +1,13 @@ +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"; } +} + +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 deleted file mode 100644 index fd68c010e8..0000000000 --- a/source.list +++ /dev/null @@ -1,1193 +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_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 -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 -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 -cheat_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 -viewport_gui.cpp -waypoint_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/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 - -# 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.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 diff --git a/src/3rdparty/CMakeLists.txt b/src/3rdparty/CMakeLists.txt new file mode 100644 index 0000000000..e3927fa217 --- /dev/null +++ b/src/3rdparty/CMakeLists.txt @@ -0,0 +1,3 @@ +add_subdirectory(md5) +add_subdirectory(squirrel) +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/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/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/sqcompiler.cpp b/src/3rdparty/squirrel/squirrel/sqcompiler.cpp index 854d080d2b..9eb71d457f 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; diff --git a/src/3rdparty/squirrel/squirrel/sqcompiler.h b/src/3rdparty/squirrel/squirrel/sqcompiler.h index b29917390b..08946fb60c 100644 --- a/src/3rdparty/squirrel/squirrel/sqcompiler.h +++ b/src/3rdparty/squirrel/squirrel/sqcompiler.h @@ -72,7 +72,7 @@ struct SQVM; #define TK_CONST 324 /* MSVC doesn't like NORETURN for function prototypes, but we kinda need it for GCC. */ -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(__clang__) typedef void(*CompilerErrorFunc)(void *ud, const SQChar *s); #else typedef NORETURN void(*CompilerErrorFunc)(void *ud, const SQChar *s); diff --git a/src/3rdparty/squirrel/squirrel/sqvm.cpp b/src/3rdparty/squirrel/squirrel/sqvm.cpp index 03ffea2303..ee1acbf328 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; diff --git a/src/3rdparty/squirrel/squirrel/sqvm.h b/src/3rdparty/squirrel/squirrel/sqvm.h index 97557b1332..9c8e986fbc 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); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000000..bbe66b7645 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,484 @@ +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(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 + fontdetection.cpp + 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..30edc99407 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; } @@ -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); 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 e13658d6fe..09c5dc4335 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_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); } } @@ -1312,7 +1338,7 @@ static void CrashAirplane(Aircraft *v) 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)); - AddVehicleNewsItem(newsitem, NT_ACCIDENT, v->index, st != nullptr ? st->index : INVALID_STATION); + AddTileNewsItem(newsitem, NT_ACCIDENT, v->tile, nullptr, st != nullptr ? st->index : INVALID_STATION); ModifyStationRatingAround(v->tile, v->owner, -160, 30); if (_settings_client.sound.disaster) SndPlayVehicleFx(SND_12_EXPLOSION, v); diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 464be03db1..0697c24439 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -71,6 +71,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; } @@ -90,7 +91,18 @@ 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 @@ -160,7 +172,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); @@ -314,7 +326,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..5785968cf0 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,23 @@ 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) { + 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)); diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 19df0f1d80..e952dcf190 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -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_BOTTOM); } } 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..8491f0e510 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(); @@ -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_optimized.cpp b/src/blitter/32bpp_optimized.cpp index 59b857254d..ad15b8f811 100644 --- a/src/blitter/32bpp_optimized.cpp +++ b/src/blitter/32bpp_optimized.cpp @@ -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; @@ -324,7 +324,7 @@ 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; diff --git a/src/blitter/32bpp_simple.cpp b/src/blitter/32bpp_simple.cpp index 7e7ef14530..a8096d801d 100644 --- a/src/blitter/32bpp_simple.cpp +++ b/src/blitter/32bpp_simple.cpp @@ -132,7 +132,7 @@ Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::Sprite *sprite, Allocato dst[i].v = 0; } 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 2e5d32d655..f367161767 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 4103eed487..12105516f8 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/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..0aff381413 --- /dev/null +++ b/src/blitter/CMakeLists.txt @@ -0,0 +1,55 @@ +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 +) + +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/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..c7776f4a46 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,7 +58,7 @@ 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) { /* @@ -81,9 +78,6 @@ public: { GetBlitters().erase(this->name); if (GetBlitters().empty()) delete &GetBlitters(); - - free(this->name); - free(this->description); } /** @@ -91,7 +85,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 +94,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,30 +103,22 @@ 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) { + if (strcasecmp(bname, b->name.c_str()) == 0) { return b; } } @@ -159,7 +145,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 +155,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 +163,7 @@ public: /** * Get a nice description of the blitter-class. */ - const char *GetDescription() const + const std::string &GetDescription() const { return this->description; } @@ -188,7 +174,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..a0f040d1aa 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -253,7 +253,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 44cc99ba3e..c240fa8782 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -197,7 +197,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; @@ -433,8 +433,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 a761e9b136..2a986c4a56 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -44,7 +44,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[] = { @@ -1537,7 +1537,7 @@ 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: @@ -1572,7 +1572,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: @@ -1597,7 +1608,7 @@ 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_BOTTOM); } if (needed_height != this->details_height) { // Details window are not high enough, enlarge them. int resize = needed_height - this->details_height; 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/cheat_gui.cpp b/src/cheat_gui.cpp index 7290414c00..3a40fb21dd 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -192,7 +192,7 @@ static const CheatEntry _cheats_ui[] = { {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/clear_cmd.cpp b/src/clear_cmd.cpp index 06953884e1..6d3167e5a2 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); 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 ac1ac25521..7c7ca13e4b 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -97,6 +97,7 @@ CommandProc CmdInsertOrder; CommandProc CmdChangeServiceInt; CommandProc CmdBuildIndustry; +CommandProc CmdIndustryCtrl; CommandProc CmdSetCompanyManagerFace; CommandProc CmdSetCompanyColour; @@ -170,6 +171,7 @@ CommandProc CmdShowStoryPage; CommandProc CmdRemoveStoryPage; CommandProc CmdRemoveStoryPageElement; CommandProc CmdScrollViewport; +CommandProc CmdStoryPageButton; CommandProc CmdLevelLand; @@ -264,6 +266,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 @@ -330,6 +334,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 @@ -425,7 +430,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; @@ -573,7 +578,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; } diff --git a/src/command_func.h b/src/command_func.h index 7a0a77e8d8..d6425dee16 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -96,7 +96,6 @@ CommandCallback CcBuildIndustry; CommandCallback CcPlaySound_EXPLOSION; CommandCallback CcPlaceSign; CommandCallback CcTerraform; -CommandCallback CcGiveMoney; /* rail_gui.cpp */ CommandCallback CcPlaySound_SPLAT_RAIL; diff --git a/src/command_type.h b/src/command_type.h index 2e026a63d9..2419d7b312 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 095f7d9e6c..e21bf9bf3d 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 /** Statistics about the economy. */ struct CompanyEconomyEntry { @@ -54,11 +55,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. @@ -99,17 +100,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 6308c14472..5a6a114e75 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" @@ -208,7 +209,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); @@ -237,7 +238,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); @@ -248,7 +249,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; @@ -264,9 +265,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(c->terraform_limit + _settings_game.construction.terraform_per_64k_frames, _settings_game.construction.terraform_frame_burst << 16); + c->clear_limit = std::min(c->clear_limit + _settings_game.construction.clear_per_64k_frames, _settings_game.construction.clear_frame_burst << 16); + c->tree_limit = std::min(c->tree_limit + _settings_game.construction.tree_per_64k_frames, _settings_game.construction.tree_frame_burst << 16); } } @@ -353,7 +354,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; @@ -553,7 +554,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; @@ -707,7 +708,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) { @@ -1043,7 +1044,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; @@ -1069,8 +1070,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(); CompanyAdminUpdate(c); } @@ -1086,7 +1090,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; @@ -1112,14 +1116,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); @@ -1177,3 +1180,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 dd8a17ce05..29701b5144 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" @@ -111,11 +112,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; @@ -321,7 +322,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: @@ -341,7 +342,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)); @@ -454,7 +455,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(); } @@ -525,7 +526,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 @@ -730,7 +731,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; } } @@ -754,14 +755,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; @@ -780,9 +781,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; } } @@ -897,7 +898,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); @@ -1379,7 +1380,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; @@ -1391,8 +1392,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; } @@ -1884,22 +1885,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; } @@ -1907,30 +1908,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: @@ -1944,24 +1945,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 @@ -1969,17 +1970,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; } @@ -2173,30 +2174,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), + 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), @@ -2204,14 +2205,20 @@ 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(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(), + 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), 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(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(), EndContainer(), @@ -2294,7 +2301,7 @@ struct CompanyWindow : Window if (plane != wi->shown_plane) { wi->SetDisplayedPlane(plane); this->InvalidateData(); - return; + reinit = true; } /* Build HQ button handling. */ @@ -2302,8 +2309,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); @@ -2313,8 +2319,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 */ @@ -2331,6 +2336,14 @@ struct CompanyWindow : Window reinit = true; } + /* 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; + } + /* Multiplayer buttons. */ plane = ((!_networking) ? (int)SZSP_NONE : (int)(local ? CWP_MP_C_PWD : CWP_MP_C_JOIN)); wi = this->GetWidget(WID_C_SELECT_MULTIPLAYER); @@ -2354,8 +2367,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; } @@ -2376,18 +2389,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: { @@ -2395,11 +2408,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 WID_C_HAS_PASSWORD: *size = maxdim(*size, GetSpriteSize(SPR_LOCK)); break; @@ -2438,7 +2467,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) { @@ -2558,7 +2587,7 @@ struct CompanyWindow : Window case WID_C_VIEW_HQ: { TileIndex tile = Company::Get((CompanyID)this->window_number)->location_of_HQ; if (_ctrl_pressed) { - ShowExtraViewPortWindow(tile); + ShowExtraViewportWindow(tile); } else { ScrollMainWindowToTile(tile); } @@ -2594,6 +2623,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; @@ -2650,6 +2684,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 857dc61ad9..140d91e70f 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -36,6 +36,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 @@ -1073,6 +1075,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. @@ -1172,7 +1191,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; @@ -1743,7 +1779,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 }; @@ -1761,10 +1797,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"); @@ -1790,7 +1826,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. */ + IConsolePrintF(CC_ERROR, "'select all' is no longer supported since 1.11"); } else { _network_content_client.Select((ContentID)atoi(argv[2])); } @@ -1992,7 +2034,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 }; @@ -2072,6 +2114,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 *******************************/ @@ -2090,6 +2285,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); @@ -2208,4 +2404,6 @@ void IConsoleStdLibRegister() /* NewGRF development stuff */ IConsoleCmdRegister("reload_newgrfs", ConNewGRFReload, ConHookNewGRFDeveloperTool); IConsoleCmdRegister("newgrf_profile", ConNewGRFProfile, ConHookNewGRFDeveloperTool); + + IConsoleCmdRegister("dump_info", ConDumpInfo); } 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..89e70fb5bb 100644 --- a/src/core/geometry_func.cpp +++ b/src/core/geometry_func.cpp @@ -22,7 +22,7 @@ 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; } 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..e847dfbb72 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -80,7 +80,7 @@ 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 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 c7cf48154c..c447019fef 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -167,15 +167,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() ); @@ -368,7 +368,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 +403,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/currency.cpp b/src/currency.cpp index b6d6821055..5c758c48df 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,9 @@ 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 }; /** Array of currencies used by the system */ diff --git a/src/currency.h b/src/currency.h index 58c385a8b4..c4c3db0249 100644 --- a/src/currency.h +++ b/src/currency.h @@ -61,6 +61,7 @@ enum Currencies { CURRENCY_NTD, ///< New Taiwan Dollar CURRENCY_CNY, ///< Chinese Renminbi CURRENCY_HKD, ///< Hong Kong Dollar + CURRENCY_INR, ///< Indian Rupee CURRENCY_END, ///< always the last item }; diff --git a/src/date.cpp b/src/date.cpp index 97758a3ebf..18e1ad180c 100644 --- a/src/date.cpp +++ b/src/date.cpp @@ -28,8 +28,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 @@ -200,11 +198,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--; 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/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 f525e714c5..9571fbea11 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -43,7 +43,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), @@ -68,10 +72,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), @@ -194,12 +194,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; @@ -395,7 +395,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++) { @@ -410,7 +410,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) { @@ -668,15 +668,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 @@ -728,7 +728,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); @@ -787,7 +787,7 @@ struct DepotWindow : Window { case WID_D_LOCATION: if (_ctrl_pressed) { - ShowExtraViewPortWindow(this->window_number); + ShowExtraViewportWindow(this->window_number); } else { ScrollMainWindowToTile(this->window_number); } diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index 1244f99aba..c5d76877cc 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 + AddTileNewsItem(news_message, NT_ACCIDENT, v->dest_tile); 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 07c072d35a..9fe8c7875a 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -72,7 +72,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++) { @@ -126,6 +126,19 @@ 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 @@ -144,17 +157,14 @@ struct BuildDocksToolbarWindow : Window { 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); 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); break; case WID_DT_BUOY: // Build buoy button - if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return; HandlePlacePushButton(this, WID_DT_BUOY, SPR_CURSOR_BUOY, HT_RECT); break; diff --git a/src/driver.cpp b/src/driver.cpp index a642a2f867..c4efd35692 100644 --- a/src/driver.cpp +++ b/src/driver.cpp @@ -13,19 +13,21 @@ #include "music/music_driver.hpp" #include "video/video_driver.hpp" #include "string_func.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 +36,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 +56,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 +68,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 +80,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 +96,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(); @@ -117,7 +115,7 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type 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; @@ -131,23 +129,15 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type) } 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 +149,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 +165,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,9 +211,7 @@ 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)); + std::pair P = GetDrivers().insert(Drivers::value_type(buf, this)); assert(P.second); } @@ -240,10 +228,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..68d9fac929 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,7 +100,7 @@ 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); @@ -118,7 +119,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 00bdd6f534..d5c7797d5f 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -135,7 +135,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); } /** @@ -194,15 +194,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) { @@ -215,7 +215,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; @@ -361,7 +361,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]; @@ -722,7 +722,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; @@ -746,7 +746,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++) { @@ -911,9 +911,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(); @@ -965,7 +973,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); @@ -985,8 +993,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 @@ -998,7 +1006,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); } @@ -1042,10 +1050,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; @@ -1140,7 +1150,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; @@ -1248,7 +1258,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); @@ -1307,7 +1317,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); } /** @@ -1586,7 +1596,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); } /** @@ -1647,7 +1657,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); @@ -1743,8 +1753,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. */ @@ -1758,7 +1768,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) { @@ -1832,7 +1842,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); } 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..d92999a66b 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; } @@ -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..5d8f2b8f32 100644 --- a/src/elrail.cpp +++ b/src/elrail.cpp @@ -229,7 +229,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..e73fdb058a 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; @@ -581,7 +578,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 +625,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 +643,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 +653,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 +663,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 +693,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); @@ -735,6 +735,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); } } @@ -1018,6 +1019,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 +1071,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 +1099,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 +1198,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 b71fa7a6bd..77ce954130 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -93,9 +93,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 78ee9c5918..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. @@ -55,6 +56,8 @@ public: void ScheduleErrorMessage(const ErrorMessageData &data); void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x = 0, int y = 0, const GRFFile *textref_stack_grffile = nullptr, uint textref_stack_size = 0, const uint32 *textref_stack = nullptr); +bool HideActiveErrorMessage(); + void ClearErrorMessages(); void ShowFirstError(); void UnshowCriticalError(); diff --git a/src/error_gui.cpp b/src/error_gui.cpp index de24be3dda..c8594e34a2 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() @@ -315,20 +314,13 @@ public: if (_window_system_initialized) ShowFirstError(); } - EventState OnKeyPress(WChar key, uint16 keycode) override - { - if (keycode != WKC_SPACE) return ES_NOT_HANDLED; - delete this; - return ES_HANDLED; - } - /** * Check whether the currently shown error message was critical or not. * @return True iff the message was critical. */ bool IsCritical() { - return this->duration == 0; + return this->display_timer.HasElapsed(); } }; @@ -424,6 +416,18 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel } } + +/** + * 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; + delete w; + return true; +} + /** * Schedule a list of errors. * Note: This does not try to display the error now. This is useful if the window system is not yet running. diff --git a/src/fileio.cpp b/src/fileio.cpp index 098e0c73a6..d6dee0a3fd 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,68 +290,55 @@ 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) /* fopen is implemented as a define with ellipses for @@ -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 ".." */ @@ -494,36 +433,31 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, 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 +487,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 +503,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 +515,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 +608,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 +645,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 +677,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 +707,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 +775,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 +796,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 +807,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 +842,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 +891,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 +958,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 +999,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 +1128,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 +1169,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 +1201,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 +1256,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 +1316,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 +1348,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 +1369,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 +1376,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 +1410,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..d2840b9aaf 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); @@ -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..4586f86b33 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -19,6 +19,8 @@ #include "string_func.h" #include "tar_type.h" #include +#include +#include #ifndef _WIN32 # include @@ -29,8 +31,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 +42,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 +139,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 +153,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 +162,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 +200,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 +227,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 +256,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 +280,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 +289,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 +327,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 +335,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,8 +368,10 @@ 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; @@ -375,12 +380,12 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c } /* 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(); @@ -408,7 +413,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 +434,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 +460,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 +495,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 +515,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 +544,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 +583,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 +606,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 +623,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 +669,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..8d8faac07b 100644 --- a/src/fios.h +++ b/src/fios.h @@ -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 9f8b45413f..e1133dd3cc 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -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..ec336612a4 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -26,7 +26,6 @@ #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}; @@ -105,13 +104,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); @@ -202,6 +201,8 @@ bool SpriteFontCache::GetDrawGlyphShadow() FreeTypeSettings _freetype; +static const int MAX_FONT_SIZE = 72; ///< Maximum font size. + static const byte FACE_COLOUR = 1; static const byte SHADOW_COLOUR = 2; @@ -211,7 +212,7 @@ protected: int req_size; ///< Requested font size. int used_size; ///< Used font size. - typedef SmallMap > FontTable; ///< Table with font table cache + typedef SmallMap > FontTable; ///< Table with font table cache FontTable font_tables; ///< Cached font tables. /** Container for information about a glyph. */ @@ -434,7 +435,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 +492,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, 20u) + diff, scaled_height, MAX_FONT_SIZE); } } else { pixels = ScaleFontTrad(pixels); @@ -560,8 +561,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,8 +656,8 @@ 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"); @@ -777,7 +797,7 @@ void Win32FontCache::SetFontSize(FontSize fs, 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(otm->otmusMinimumPPEM, 20) + diff, scaled_height, MAX_FONT_SIZE); + pixels = Clamp(std::min(otm->otmusMinimumPPEM, 20u) + diff, scaled_height, MAX_FONT_SIZE); SelectObject(dc, old); DeleteObject(temp); @@ -831,7 +851,7 @@ void Win32FontCache::ClearFontCache() 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. + DWORD size = this->glyph_size.cy * Align(aa ? this->glyph_size.cx : std::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); @@ -848,8 +868,8 @@ void Win32FontCache::ClearFontCache() } /* 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)); + uint width = std::max(1U, (uint)gm.gmBlackBoxX + (this->fs == FS_NORMAL)); + uint height = std::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"); @@ -869,7 +889,7 @@ void Win32FontCache::ClearFontCache() * 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); + uint pitch = Align(aa ? gm.gmBlackBoxX : std::max(gm.gmBlackBoxX / 8u, 1u), 4); /* Draw shadow for medium size. */ if (this->fs == FS_NORMAL && !aa) { @@ -969,42 +989,55 @@ static void LoadWin32Font(FontSize fs) if (settings->os_handle != nullptr) { logfont = *(const LOGFONT *)settings->os_handle; - } else if (strchr(settings->font, '.') != nullptr && FileExists(settings->font)) { + } else if (strchr(settings->font, '.') != nullptr) { /* 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); + TCHAR fontPath[MAX_PATH] = {}; + + /* See if this is an absolute path. */ + if (FileExists(settings->font)) { + convert_to_fs(settings->font, fontPath, lengthof(fontPath), false); + } else { + /* Scan the search-paths to see if it can be found. */ + std::string full_font = FioFindFullPath(BASE_DIR, settings->font); + if (!full_font.empty()) { + convert_to_fs(full_font.c_str(), fontPath, lengthof(fontPath), false); + } + } + + if (fontPath[0] != 0) { + 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"); + static PFNGETFONTRESOURCEINFO GetFontResourceInfo = (PFNGETFONTRESOURCEINFO)GetProcAddress(GetModuleHandle(_T("Gdi32")), "GetFontResourceInfoW"); #else - static PFNGETFONTRESOURCEINFO GetFontResourceInfo = (PFNGETFONTRESOURCEINFO)GetProcAddress(GetModuleHandle(_T("Gdi32")), "GetFontResourceInfoA"); + 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. + 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); + /* 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. + _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]); } - } else { - ShowInfoF("Unable to load file '%s' for %s font, using default windows font selection instead", settings->font, SIZE_TO_NAME[fs]); } } diff --git a/src/fontdetection.cpp b/src/fontdetection.cpp index d147415487..570e1aa068 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/framerate_gui.cpp b/src/framerate_gui.cpp index d34f59e09f..c324fde2e3 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; @@ -395,7 +395,7 @@ struct FramerateWindow : Window { { const double threshold_good = target * 0.95; const double threshold_bad = target * 2 / 3; - value = min(9999.99, value); + value = std::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 +404,7 @@ struct FramerateWindow : Window { { const double threshold_good = target / 3; const double threshold_bad = target; - value = min(9999.99, value); + value = std::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 +422,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 +435,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 @@ -486,7 +486,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 +555,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 +567,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 +769,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 +980,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_gui.cpp b/src/genworld_gui.cpp index 154097e722..54ca0bc865 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -304,7 +304,7 @@ static const StringID _num_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_N 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; @@ -513,7 +513,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 @@ -831,7 +831,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; @@ -1166,7 +1166,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 +1214,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; @@ -1268,7 +1268,7 @@ 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 */ diff --git a/src/gfx.cpp b/src/gfx.cpp index 0768373416..54851d375f 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -263,8 +263,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; @@ -327,7 +327,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 @@ -636,7 +636,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; @@ -902,6 +902,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. */ @@ -915,8 +916,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; } @@ -1023,10 +1024,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; @@ -1304,7 +1305,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; } @@ -1415,6 +1416,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); @@ -1437,7 +1448,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() { @@ -1540,21 +1553,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; @@ -1599,7 +1609,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); } /** @@ -1671,7 +1681,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); @@ -1685,8 +1695,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; @@ -1774,6 +1784,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. diff --git a/src/gfx_func.h b/src/gfx_func.h index 3def1c85a4..7ac26f29bb 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -112,7 +112,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); @@ -131,7 +131,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(); @@ -164,7 +164,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); @@ -227,6 +227,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_type.h b/src/gfx_type.h index 6fca2228df..3b9f04d9e8 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -143,6 +143,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: @@ -162,7 +163,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 @@ -177,7 +180,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) @@ -194,7 +199,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 86dc868e6b..7c4b49cdf0 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); @@ -356,11 +357,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; } @@ -404,7 +405,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..954d2f7bf7 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); diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index faab18c8e2..b51c488a14 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -148,7 +148,7 @@ struct GoalListWindow : public Window { } if (_ctrl_pressed) { - ShowExtraViewPortWindow(xy); + ShowExtraViewportWindow(xy); } else { ScrollMainWindowToTile(xy); } @@ -291,7 +291,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); @@ -357,14 +357,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. */ @@ -391,10 +390,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; @@ -442,15 +437,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), @@ -472,12 +467,107 @@ static const NWidgetPart _nested_goal_question_widgets[] = { 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_SPACER), SetMinimalSize(0, 8), + 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_SPACER), SetMinimalSize(0, 8), + 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_SPACER), SetMinimalSize(0, 8), + 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. @@ -488,5 +578,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 < GOAL_QUESTION_TYPE_COUNT); + new GoalQuestionWindow(&_goal_question_list_desc[type], id, type == 3 ? TC_WHITE : TC_BLACK, button_mask, question); } diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index d454d8a9b5..ea38914ad0 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -110,7 +110,7 @@ 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); @@ -212,8 +212,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 +240,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,7 +289,7 @@ 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]; @@ -325,6 +325,9 @@ 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, GREY_SCALE(2)); + /* Draw the vertical grid lines. */ /* Don't draw the first line, as that's where the axis will be. */ @@ -435,7 +438,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) { @@ -496,7 +499,7 @@ public: 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); + 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) { @@ -514,9 +517,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, 5 + y_label_width + this->num_on_x_axis * (x_label_width + 5) + 9); + size->height = std::max(size->height, 5 + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->month != 0xFF ? 3 : 1)) * FONT_HEIGHT_SMALL + 4); + size->height = std::max(size->height, size->width / 3); } void DrawWidget(const Rect &r, int widget) const override @@ -568,7 +571,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; @@ -1115,7 +1118,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 { @@ -1199,7 +1202,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 @@ -1215,13 +1218,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 @@ -1321,7 +1324,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; @@ -1527,7 +1530,7 @@ 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++) { 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 8d0bba8fbb..2ab2a5b51a 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -71,6 +71,11 @@ static const NWidgetPart _nested_group_widgets[] = { 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), @@ -200,14 +205,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; @@ -216,13 +221,13 @@ 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; @@ -341,24 +346,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(); @@ -382,7 +375,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 @@ -397,9 +390,9 @@ public: /* ... 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; @@ -453,10 +446,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(); } @@ -509,8 +502,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)) { @@ -549,8 +542,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(); } @@ -569,11 +565,9 @@ public: 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(); @@ -596,6 +590,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); @@ -606,7 +601,7 @@ 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 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]; @@ -623,16 +618,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); } @@ -658,18 +653,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; @@ -677,7 +676,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,29 +716,54 @@ public: SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); - 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 (_ctrl_pressed) { - 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 (_ctrl_pressed) { + this->SelectGroup(v->group_id); + } + + SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); + 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; } @@ -823,7 +847,7 @@ public: { switch (widget) { case WID_GL_DEFAULT_VEHICLES: // Ungrouped vehicles - DoCommandP(0, DEFAULT_GROUP, this->vehicle_sel | (_ctrl_pressed ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE)); + DoCommandP(0, DEFAULT_GROUP, this->vehicle_sel | (_ctrl_pressed || 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; @@ -840,7 +864,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 | (_ctrl_pressed ? 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 | (_ctrl_pressed || 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; } @@ -851,11 +875,30 @@ 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) { + ShowVehicleListWindow(v); + } + break; + } + + default: + NOT_REACHED(); } break; } @@ -885,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: @@ -924,7 +971,7 @@ public: void OnGameTick() override { - if (this->groups.NeedResort() || this->vehicles.NeedResort()) { + if (this->groups.NeedResort() || this->vehgroups.NeedResort()) { this->SetDirty(); } } @@ -934,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); } @@ -1019,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 181472f555..4eb2fb7f66 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 */ @@ -55,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/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..cc27501afa 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; } diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index d5cd90b3c5..0a10290c18 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,25 @@ 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}, - {",", WKC_COMMA}, - {"COMMA", WKC_COMMA}, // legacy variant, should be below "," - {".", WKC_PERIOD}, - {"-", WKC_MINUS}, + {"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}, + {"PERIOD", WKC_PERIOD}, + {".", WKC_PERIOD}, /* deprecated, use PERIOD */ + {"MINUS", WKC_MINUS}, + {"-", WKC_MINUS}, /* deprecated, use MINUS */ }; /** @@ -290,7 +298,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 35def46098..20c38e5456 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,6 +40,8 @@ #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" @@ -530,7 +533,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 +542,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); @@ -946,6 +949,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 +1034,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; @@ -1117,7 +1123,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 +1155,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) { @@ -1736,10 +1742,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 +1759,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 +1770,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. */ @@ -2049,6 +2059,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. @@ -2079,13 +2153,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); @@ -2139,7 +2214,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])); } /** @@ -2215,7 +2290,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); } @@ -2283,7 +2358,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; @@ -2303,11 +2378,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); } } @@ -2440,10 +2515,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. } } @@ -2540,8 +2615,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()); @@ -2603,8 +2677,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; @@ -2639,7 +2713,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; } @@ -2647,8 +2722,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(); @@ -2671,16 +2755,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; @@ -2697,27 +2784,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; } @@ -2726,8 +2808,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; } @@ -2748,7 +2831,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; @@ -2819,7 +2902,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)) { @@ -2933,14 +3016,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 a5f03a2b94..58f4a6097a 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -145,7 +145,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 */ @@ -270,8 +270,6 @@ static WindowDesc _build_industry_desc( class BuildIndustryWindow : public Window { int selected_index; ///< index of the element in the matrix IndustryType selected_type; ///< industry corresponding to the above index - uint16 callback_timer; ///< timer counter for callback eventual verification - bool timer_enabled; ///< timer can be used uint16 count; ///< How many industries are loaded IndustryType index[NUM_INDUSTRYTYPES + 1]; ///< Type of industry, in the order it was loaded bool enabled[NUM_INDUSTRYTYPES + 1]; ///< availability state, coming from CBID_INDUSTRY_PROBABILITY (if ever) @@ -295,7 +293,6 @@ class BuildIndustryWindow : public Window { 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 @@ -387,13 +384,9 @@ class BuildIndustryWindow : public Window { public: BuildIndustryWindow() : Window(&_build_industry_desc) { - this->timer_enabled = _loaded_newgrf_features.has_newindustries; - this->selected_index = -1; this->selected_type = INVALID_INDUSTRYTYPE; - this->callback_timer = DAY_TICKS; - this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_DPI_SCROLLBAR); this->FinishInitNested(0); @@ -423,10 +416,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++) { @@ -440,7 +434,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); @@ -450,14 +444,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; @@ -673,25 +672,19 @@ 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 + 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(); } } } @@ -920,6 +913,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; } @@ -973,22 +973,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; @@ -1023,7 +1023,7 @@ public: case WID_IV_GOTO: { Industry *i = Industry::Get(this->window_number); if (_ctrl_pressed) { - ShowExtraViewPortWindow(i->location.GetCenterTile()); + ShowExtraViewportWindow(i->location.GetCenterTile()); } else { ScrollMainWindowToTile(i->location.GetCenterTile()); } @@ -1087,7 +1087,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; } @@ -1107,7 +1107,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) { @@ -1121,6 +1121,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), @@ -1134,7 +1135,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(), @@ -1261,14 +1261,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; @@ -1285,7 +1285,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; @@ -1303,7 +1303,7 @@ protected: */ void SetCargoFilterArray() { - uint filter_items = 0; + byte filter_items = 0; /* Add item for disabling filtering. */ this->cargo_filter[filter_items] = CF_ANY; @@ -1475,7 +1475,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)); @@ -1634,7 +1634,7 @@ public: uint p = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_ID_INDUSTRY_LIST, WD_FRAMERECT_TOP); if (p < this->industries.size()) { if (_ctrl_pressed) { - ShowExtraViewPortWindow(this->industries[p]->location.tile); + ShowExtraViewportWindow(this->industries[p]->location.tile); } else { ScrollMainWindowToTile(this->industries[p]->location.tile); } @@ -2208,8 +2208,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. @@ -2406,10 +2406,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)); @@ -2427,7 +2427,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; @@ -2444,11 +2444,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; } } @@ -2632,8 +2632,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); @@ -2646,10 +2645,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); @@ -2712,8 +2710,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); @@ -2724,10 +2721,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); 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..e70cc268aa 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,20 +85,19 @@ 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 +# 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); + _tcsncpy(tfilename, OTTD2FS(filename.c_str()), MAX_PATH); + _tcsncpy(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'; @@ -107,15 +113,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 1fea69ea5b..7b02448f95 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -285,19 +285,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..80ba516ac7 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -130,12 +130,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 +630,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 +811,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 +865,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 +901,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); @@ -1186,8 +1187,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; @@ -1304,7 +1305,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); diff --git a/src/lang/CMakeLists.txt b/src/lang/CMakeLists.txt new file mode 100644 index 0000000000..75d06f530a --- /dev/null +++ b/src/lang/CMakeLists.txt @@ -0,0 +1,126 @@ +set(LANG_SOURCE_FILES + ${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.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 + 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 ${LANG_SOURCE_FILES} + 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..d579d59153 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 @@ -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 @@ -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 @@ -1798,18 +1793,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 +1804,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 +1915,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 +1955,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 +1971,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 +2086,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 +2094,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 +2194,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}) @@ -2336,6 +2312,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 +2501,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 +2583,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} @@ -3703,10 +3681,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 +3712,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..66ad4f00e6 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 :بطاريات @@ -192,6 +192,7 @@ STR_COLOUR_WHITE :ابيض 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}حصان @@ -224,8 +225,7 @@ 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}اغلاق الاطار STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}عنوان الاطار- اسحب لتحريك الاطار @@ -291,6 +291,8 @@ STR_SORT_BY_CARGO_CAPACITY :سعة الشح STR_SORT_BY_RANGE :مدى STR_SORT_BY_POPULATION :عدد السكان +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}ايقاف اللعبة STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}سرع اللعبه @@ -374,7 +376,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 @@ -446,9 +448,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 @@ -836,7 +840,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,6 +880,8 @@ 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 :مخصص ... ############ end of currency region @@ -1077,11 +1083,14 @@ 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_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 +1101,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 +1121,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 +1136,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 +1249,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 +1257,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,7 +1296,7 @@ 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_SEMAPHORE_BUILD_BEFORE_DATE :اتاحة استخدام الأشارات بالأعلام قبل :{STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :السماح باستخدام اشارات واجهة المستخدم الرسومية: {STRING} @@ -1309,9 +1324,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 +1344,17 @@ STR_CONFIG_SETTING_TOWN_GROWTH_FAST :سريع STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :سريع جدا STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :مضاعف المدن المبدئي: {STRING} +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_METRIC :م) متري) STR_CONFIG_SETTING_GRAPHICS :رسوميات {ORANGE} STR_CONFIG_SETTING_SOUND :{ORANGE}الصوت @@ -1426,18 +1443,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 :او اس/2 -STR_OSNAME_SUNOS :صن - # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}إغلاق اللعبه STR_ABANDON_GAME_QUERY :{YELLOW}أمتأكد من رغبتك فى إغلاق اللعبه؟ @@ -1446,7 +1454,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 +1602,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 +1728,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 +1736,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 +1825,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,6 +1841,7 @@ 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_DOWNLOAD_CAPTION :{BLACK} تحميل STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK} ابدأ تحميل المحتويات المختارة @@ -1926,6 +1927,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 :بناء سكة القطار الكهربائية @@ -2109,7 +2112,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,6 +2188,8 @@ 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_INDUSTRY :{BLACK}اختر الصناعة # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}معلومات ارض @@ -2208,6 +2213,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 +2316,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,6 +2347,7 @@ 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}ادخل اسم الحفظ للعبة @@ -2647,6 +2658,7 @@ STR_GOAL_QUESTION_CAPTION_WARNING :تحذير STR_GOAL_QUESTION_CAPTION_ERROR :خطا ############ Start of Goal Question button list +STR_GOAL_QUESTION_BUTTON_RETRY :إعادة المحاولة ############ End of Goal Question button list # Subsidies window @@ -2659,6 +2671,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}اسم المحطة - اضغط على اسم المحطة لتوسيطها في الشاشة. اضغط + كنترول لفتح شاشة عرض جديدة بمنطقة المحطة. @@ -2684,6 +2697,7 @@ STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}يقبل STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}معدل النقل STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}اظهار معدل النقل للمحطة +STR_STATION_VIEW_WAITING_AMOUNT :الكمية: في الانتظار ############ range for rating starts @@ -2793,7 +2807,9 @@ STR_BUY_COMPANY_MESSAGE :{WHITE}نحن 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 +2819,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%. @@ -2899,6 +2916,7 @@ 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} @@ -2912,6 +2930,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}شراء العربة @@ -2930,7 +2949,9 @@ STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}اعاد STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{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 +3079,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 +3087,6 @@ 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_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK} ارسل القطار للورشة - مفتاح التحكم (كنترول) + الضغط سيرسله لصيانة فقط STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}ارسل العربة الى الورشة. مفتاح التحكم (كنترول) + الضغط ترسل للصيانة فقط @@ -3100,10 +3118,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}تحميل / تفريغ @@ -3194,6 +3209,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}اختر العربة لاعادة تهيئتها. اسحب بالفارة لاختيار عدة عربات. اضغط على مساحة خالية لاختيار كل العربات. اضغط + كنترول لاختيار العربة الحالية وما بعدها. @@ -3481,6 +3497,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK} اخت STR_AI_LIST_CANCEL :{BLACK} الغاء STR_AI_LIST_CANCEL_TOOLTIP :{BLACK} لا تغير الذكاء الصناعي +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}التقط لقطة شاشة كاملة # AI Parameters STR_AI_SETTINGS_CLOSE :{BLACK} اغلاق @@ -3636,6 +3653,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 +3772,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..91e211a01c 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 @@ -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 @@ -1452,8 +1452,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 +1497,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 @@ -1674,18 +1669,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 +1680,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 +1788,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 +1828,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 +1956,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 +1964,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 +2063,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... @@ -2198,6 +2174,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 +2359,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 @@ -3450,10 +3428,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 +3459,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..b0e219302a 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 :Сьпіс таблічак @@ -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,6 +1244,7 @@ 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}Дарожны рух @@ -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 :Гарызантальнае разьмяшчэньне галоўнай панэлі інструмэнтаў зьверху экрана. @@ -2107,18 +2103,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 +2114,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 +2225,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 +2265,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 +2281,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 +2396,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 +2404,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 +2504,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}Гэты сэрвэр перазапускаецца...{}Пачакайце, калі ласка @@ -2660,6 +2637,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 +2827,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}Дрэвы розных відаў @@ -4030,10 +4009,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 +4040,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..43f1fe0738 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,6 +188,8 @@ 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 @@ -232,8 +234,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 +264,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,./ . @@ -311,6 +314,8 @@ STR_SORT_BY_RANGE :Alcance STR_SORT_BY_POPULATION :População STR_SORT_BY_RATING :Classificação +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar jogo STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Acelerar o jogo @@ -335,6 +340,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 +361,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 @@ -396,7 +403,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 +470,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 @@ -857,6 +865,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 +885,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 @@ -923,6 +932,11 @@ 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_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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automóveis @@ -985,7 +999,12 @@ 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_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_BASE_GRF :{BLACK}Conjunto de gráficos base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecionar o conjunto de gráficos base para usar @@ -1169,6 +1188,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Permitir paisag 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 +1275,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 +1311,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 @@ -1416,6 +1441,7 @@ 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_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_SOUND_TICKER :Notícias: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Toca um som para mensagens resumidas @@ -1464,6 +1490,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 +1551,14 @@ 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_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 +1599,14 @@ 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_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 @@ -1770,18 +1805,9 @@ 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_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? @@ -1790,7 +1816,6 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Você t # 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_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 +1832,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 +1927,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 +1967,7 @@ 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_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 +1984,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 +2089,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 +2099,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 +2107,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 +2151,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 @@ -2185,10 +2207,9 @@ 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_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 @@ -2240,7 +2261,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 @@ -2304,6 +2325,8 @@ 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 + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construir ferrovias STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construir ferrovias (elétricas) @@ -2406,7 +2429,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 +2514,14 @@ 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_FOREST_LG_TOOLTIP :{BLACK}Planta florestas grandes ao arrastar pelo terreno. # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Gerar Terreno @@ -2591,8 +2619,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 +2733,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 +2741,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 +2804,9 @@ 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_OSKTITLE :{BLACK}Coloque o nome para o jogo salvo @@ -2876,7 +2924,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 +3010,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 +3043,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 : @@ -3054,6 +3110,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: @@ -3082,6 +3140,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Suborna # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Objetivos STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objetivos globais +STR_GOALS_SPECTATOR :Objetivos Globais STR_GOALS_GLOBAL_TITLE :{G=m}{BLACK}Objetivos globais: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{G=m}{ORANGE}- Nenhum - @@ -3130,6 +3189,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 @@ -3309,6 +3369,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 +3380,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 +3400,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,11 +3456,13 @@ 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 @@ -3410,14 +3485,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 +3506,15 @@ 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_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 +3530,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 Trocar Veículos +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_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}Compre e troque o trem destacado. Shift+Click mostra os custos estimados sem comprar +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 reponha o navio em destaque. Shift+Clique mostra o custo estimado sem comprar +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e repor a aeronave destacada. Shift+Clique mostra o custo estimado sem comprar STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renomear @@ -3566,10 +3655,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 +3702,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 +3721,6 @@ 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_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 @@ -3661,10 +3752,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Exibir d 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_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. + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Carregando / descarregando @@ -3839,6 +3927,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 @@ -4069,6 +4158,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 @@ -4342,6 +4438,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 +4458,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 +4515,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... diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 8c8c24f9c0..0821dc0c9a 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 @@ -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}Преместване глобалната камера @@ -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 :Хоризонтално позициониране на основната лента в горната част на екрана @@ -1720,18 +1715,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 +1726,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 +1836,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 +1876,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 +1892,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 +2006,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 +2014,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 +2113,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}Сървърът се рестартира...{}Моля изчакайте... @@ -2251,6 +2227,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 +2413,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}Дървета от произволен тип @@ -3532,10 +3510,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 +3541,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..926ee9f55f 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. @@ -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 @@ -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,7 +943,10 @@ 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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehicles de carretera @@ -1182,6 +1199,7 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permet modelar 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} @@ -1316,8 +1334,8 @@ 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_ROUGHNESS_OF_TERRAIN :Geografia del terreny: {STRING} @@ -1433,6 +1451,8 @@ 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_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 @@ -1482,6 +1502,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 @@ -1540,12 +1562,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} @@ -1593,9 +1622,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 @@ -1662,6 +1692,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 @@ -1794,18 +1825,10 @@ STR_INTRO_TRANSLATION :{BLACK}A aquest # 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 +1837,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 +1949,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 +1989,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 +2009,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 +2124,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 +2132,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 +2160,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 +2176,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 +2218,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_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 +2234,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 @@ -2330,6 +2353,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 @@ -2436,6 +2462,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,13 +2543,19 @@ 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_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 :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 @@ -2599,6 +2632,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} @@ -2620,8 +2654,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 +2768,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 +2776,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!! @@ -3038,6 +3078,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 +3103,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 +3147,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: @@ -3144,10 +3187,10 @@ STR_GOALS_COMPANY_TITLE :{BLACK}Objectiu 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 @@ -3337,6 +3380,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 +3399,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 +3421,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,6 +3495,7 @@ 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_GROUP_CREATE_TOOLTIP :{BLACK}Clica per crear un grup @@ -3470,6 +3524,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Compra de nous STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Compra de nous vehicles Maglev STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Compra de nous vehicles de carretera +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nous vehicles de tramvia ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Compra de nous vehicles sobre vies @@ -3479,6 +3534,7 @@ STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Compra de noves ############ 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,6 +3548,7 @@ 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} @@ -3513,12 +3570,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 @@ -3630,6 +3694,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 +3741,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 +3760,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 +3795,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 @@ -3959,6 +4028,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) @@ -4137,8 +4207,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 +4273,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 @@ -4280,6 +4354,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 +4481,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 +4511,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 +4568,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... @@ -4682,10 +4764,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 +5069,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..b6aae3ed19 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 @@ -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,6 +1031,7 @@ 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 @@ -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 @@ -1902,18 +1898,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 +1909,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 +2020,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 +2060,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 +2076,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 +2191,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 +2199,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 +2299,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}) @@ -2440,6 +2417,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 +2606,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 @@ -3833,10 +3812,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 +3843,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..8d8ee07251 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í @@ -308,8 +308,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í @@ -390,6 +388,8 @@ STR_SORT_BY_RANGE :dosah STR_SORT_BY_POPULATION :Podle populace STR_SORT_BY_RATING :Hodnocení +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauza STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Zrychlit běh hry @@ -477,7 +477,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ů @@ -951,6 +951,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 +971,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,6 +1022,7 @@ 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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Silniční vozidla jezdí @@ -1638,8 +1640,6 @@ 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_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 +1691,6 @@ 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_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 @@ -1892,18 +1889,9 @@ 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_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 +1900,6 @@ 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_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 +2011,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 +2051,6 @@ 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_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 +2067,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 +2182,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 +2190,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 @@ -2310,8 +2290,6 @@ 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_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}) @@ -2430,6 +2408,8 @@ 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 + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Výstavba železnice STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Výstavba elektrifikované železnice @@ -2617,7 +2597,7 @@ 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 @@ -3830,10 +3810,6 @@ 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_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 +3841,7 @@ 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 + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Nakládá nebo vykládá diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 92ce8b7294..0f5286a7f4 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 @@ -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,6 +935,7 @@ 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 @@ -1552,8 +1553,6 @@ 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_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 +1604,6 @@ 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_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 @@ -1806,18 +1802,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 +1813,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 +1924,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 +1964,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 +1980,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 +2095,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 +2103,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 +2203,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}) @@ -2344,6 +2321,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 +2510,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 @@ -3737,10 +3716,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 +3747,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 +3795,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}) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3a3448de1b..5a543a50ed 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 @@ -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 @@ -770,6 +778,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 +893,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,6 +944,7 @@ 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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Wegvoertuigen @@ -1303,7 +1313,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 @@ -1439,6 +1449,8 @@ 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_SOUND_TICKER :Nieuwsticker: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Speel geluidseffecten af bij korte nieuwsberichten @@ -1552,8 +1564,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 +1620,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. @@ -1674,6 +1690,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 @@ -1806,18 +1823,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 +1835,6 @@ 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_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 +1946,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 +1986,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 @@ -2000,6 +2006,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De speln 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 +2121,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 +2129,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 +2215,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 +2231,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}) @@ -2344,6 +2350,8 @@ 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 + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Spoorwegen bouwen STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Geëlektrificeerde spoorwegen bouwen @@ -2531,13 +2539,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 @@ -3167,10 +3181,10 @@ STR_GOALS_COMPANY_TITLE :{BLACK}Bedrijfs 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 @@ -3360,6 +3374,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 +3393,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}? @@ -3737,10 +3754,6 @@ 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_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 @@ -3772,10 +3785,7 @@ 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. + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}In- en uitladen @@ -4247,6 +4257,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 @@ -4327,6 +4338,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... @@ -4734,10 +4746,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 +5051,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 59b8dc40f2..dc184aa317 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 @@ -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 @@ -314,6 +313,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 @@ -402,7 +410,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 @@ -739,6 +747,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 @@ -770,6 +779,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 * * @@ -884,7 +894,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 @@ -935,6 +945,7 @@ 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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Road vehicles @@ -1313,7 +1324,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 @@ -1439,6 +1450,8 @@ 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: {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_SOUND_TICKER :News ticker: {STRING2} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Play sound for summarised news messages @@ -1552,8 +1565,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} @@ -1605,9 +1621,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 @@ -1674,6 +1691,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 @@ -1806,18 +1824,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? @@ -1826,7 +1836,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} @@ -1938,10 +1948,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 +1988,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 +2008,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 +2123,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 +2131,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 @@ -2210,11 +2217,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 @@ -2224,8 +2233,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}) @@ -2344,6 +2352,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 @@ -2531,13 +2542,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 @@ -2614,6 +2631,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} @@ -3084,6 +3102,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 @@ -3167,10 +3186,10 @@ STR_GOALS_COMPANY_TITLE :{BLACK}Company 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 @@ -3360,6 +3379,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 @@ -3377,6 +3398,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}? @@ -3737,10 +3759,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 @@ -3772,10 +3794,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 @@ -4003,6 +4027,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) @@ -4247,6 +4272,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 @@ -4327,6 +4353,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... @@ -4453,6 +4480,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 @@ -4734,10 +4763,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 @@ -5039,6 +5068,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/english_AU.txt b/src/lang/english_AU.txt index ac8b4605a5..aaa368d28d 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 @@ -302,6 +300,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 @@ -386,7 +386,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 @@ -860,7 +860,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 @@ -1485,8 +1485,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} @@ -1532,9 +1530,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 @@ -1730,18 +1725,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? @@ -1750,7 +1736,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} @@ -1859,10 +1844,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 @@ -1903,8 +1884,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 @@ -1921,6 +1900,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} @@ -2033,7 +2014,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 @@ -2042,8 +2022,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 @@ -2143,8 +2121,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... @@ -2261,6 +2237,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 @@ -2444,7 +2422,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 @@ -3504,10 +3482,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 @@ -3539,10 +3513,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 e770b4bf3b..4c63f3c29f 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 @@ -233,8 +233,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 +313,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 @@ -402,7 +402,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 @@ -884,7 +884,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 @@ -1551,8 +1551,6 @@ 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_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} @@ -1604,9 +1602,6 @@ 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_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 @@ -1805,18 +1800,9 @@ 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_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? @@ -1825,7 +1811,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} @@ -1937,10 +1922,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 @@ -1981,8 +1962,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 @@ -1999,6 +1978,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} @@ -2112,7 +2093,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 @@ -2121,8 +2101,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 @@ -2222,8 +2200,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... @@ -2341,6 +2317,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 :Railroad Construction STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Electrified Railroad Construction @@ -2528,7 +2506,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 @@ -3725,10 +3703,6 @@ 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_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 @@ -3760,10 +3734,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/esperanto.txt b/src/lang/esperanto.txt index ba7a07f802..51c4abf76d 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 @@ -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 @@ -1297,7 +1297,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 +1324,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} @@ -1413,18 +1409,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 +1420,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 +1568,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 +1694,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 +1702,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 +1789,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... @@ -1911,6 +1890,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 +2055,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 @@ -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..bacb177717 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -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 @@ -284,12 +284,10 @@ STR_LIST_FILTER_OSKTITLE :{BLACK}Sisesta 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_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_TOOLTIP_CLOSE_WINDOW :{BLACK}Sulge aken STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Akna pealkiri. Liigutamiseks lohista seda hiirega. @@ -368,6 +366,8 @@ STR_SORT_BY_RANGE :Vahekaugus STR_SORT_BY_POPULATION :Rahvaarv STR_SORT_BY_RATING :Hinnang +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Seiska mäng STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Kiirenda mängu @@ -454,7 +454,7 @@ 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 @@ -479,7 +479,7 @@ STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Veotasude mää ############ 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 @@ -929,7 +929,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLAC STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Kohalik linnavõim{TOWN} allkirjastab lepingu {STRING} transpordi 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 @@ -1040,6 +1040,7 @@ 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_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 @@ -1574,8 +1575,6 @@ 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_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_FEEDER_PAYMENT_SHARE :Protsent tuludest mis läheb 'kanna edasi' süsteemis alumistesse lülidesse: {STRING} @@ -1621,9 +1620,6 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Lubatud, koos l 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_TOOLBAR_POS :Peamine tarvikuriba paikneb: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Tarvikuriba rõhtne paiknemine ekraani ülaosas @@ -1783,14 +1779,14 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Pildipuh 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 @@ -1810,7 +1806,7 @@ STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Vali 'l 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 @@ -1821,18 +1817,9 @@ STR_INTRO_TRANSLATION :{BLACK}{NUM} t # 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_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,7 +1828,6 @@ 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_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} @@ -1953,10 +1939,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 @@ -1997,8 +1979,6 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Liitu m 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_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,6 +1995,8 @@ 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_ADVERTISED_LABEL :{BLACK}Reklaamitav +STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valib reklaamitava (internet) või mittereklaamitava (kohtvõrk, LAN) mängu STR_NETWORK_START_SERVER_UNADVERTISED :Jah STR_NETWORK_START_SERVER_ADVERTISED :Jah STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i} @@ -2129,7 +2111,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 +2119,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 @@ -2240,8 +2219,6 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} li STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} alustas uue ettevõtte (#{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_SERVER_SHUTDOWN :{WHITE}Server sulges sessiooni STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server restardib...{}Palun oota... @@ -2358,6 +2335,8 @@ 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 + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Rööbasteede ehitamine STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Elektriraudtee ehitamine @@ -2542,7 +2521,7 @@ STR_OBJECT_BUILD_SIZE :{BLACK}Suurus: 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 @@ -2792,6 +2771,7 @@ 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_OSKTITLE :{BLACK}Sisesta salvestatavale mängule nimi @@ -3359,7 +3339,7 @@ STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Tööstu # 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}% @@ -3368,6 +3348,7 @@ STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Tööst STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Vajab: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Nõuab: STR_CONFIG_GAME_PRODUCTION :{WHITE}Tootlikuse muutmine (kaheksaga jaguv, kuni 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuda tootlikkuse taset (protsent, kuni 800%) @@ -3383,7 +3364,7 @@ STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Veokid - 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_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 @@ -3432,7 +3413,9 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Eemalda kõik s STR_GROUP_RENAME_CAPTION :{BLACK}Rühma nime vahetamine -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 :Kasutuses: STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window @@ -3658,10 +3641,6 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Sunni au # 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_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 @@ -3693,10 +3672,7 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Näita m 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_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 + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Veose ümberlaadimine diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index b6bf7ab2d5..6bda8e5bf3 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 @@ -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 @@ -1441,8 +1441,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} @@ -1577,18 +1575,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 +1586,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 +1694,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 +1734,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 +1862,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 +1870,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 +1969,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... @@ -2096,6 +2075,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 +2201,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ø @@ -3176,6 +3157,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..d190d715da 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 @@ -678,10 +686,10 @@ 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} @@ -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ä @@ -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,6 +945,7 @@ 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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kulkuneuvot @@ -1024,7 +1035,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 (£) @@ -1259,7 +1270,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 +1305,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 +1324,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 @@ -1368,7 +1379,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 +1405,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 +1450,8 @@ 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_SOUND_TICKER :Uutiset: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Toista ääni tiivistetyille uutisviesteille @@ -1485,7 +1498,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 +1565,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 +1620,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 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 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 @@ -1640,7 +1657,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 +1691,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 @@ -1781,7 +1799,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 +1824,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 +1836,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 +1860,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 +1948,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 +1988,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 +2008,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 +2123,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 +2131,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 +2168,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 +2217,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 @@ -2303,15 +2313,15 @@ STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Ei, sulj # 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 +2352,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 +2416,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 +2537,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 +2573,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 @@ -2612,6 +2631,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 +2642,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} @@ -2862,7 +2882,7 @@ 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 @@ -2885,7 +2905,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 +3009,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 +3092,7 @@ STR_INVALID_VEHICLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Peli tallennettiin versiossa, joka ei tue raitiovaunuja. Kaikki raitiovaunut on poistettu @@ -4325,6 +4353,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... @@ -4451,6 +4480,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 +4579,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 +4737,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 +4745,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 +4795,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 +5064,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..de7734ad5b 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 @@ -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 @@ -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,7 +895,7 @@ 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 @@ -936,6 +946,7 @@ 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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Véhicules routiers @@ -1440,6 +1451,8 @@ 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_SOUND_TICKER :Bulletin{NBSP}: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Jouer un son pour les bulletins @@ -1553,8 +1566,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 +1622,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 @@ -1646,10 +1663,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 +1679,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 +1692,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 @@ -1807,18 +1825,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 +1837,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 +1949,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,8 +1989,10 @@ 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 @@ -2001,6 +2009,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} @@ -2114,7 +2124,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 +2132,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 +2218,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 +2234,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}) @@ -2345,6 +2353,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 +2543,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 @@ -2615,6 +2632,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 +2789,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 +2806,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 @@ -3085,6 +3103,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 @@ -3168,10 +3187,10 @@ STR_GOALS_COMPANY_TITLE :{BLACK}Objectif 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 +3380,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 :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 +3399,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}? @@ -3738,10 +3760,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 +3795,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 +4028,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 +4273,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. @@ -4328,6 +4354,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 +4481,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 @@ -5040,6 +5069,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..c5af3d2a5e 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 @@ -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 @@ -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 @@ -1964,18 +1959,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 +1970,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 +2081,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 +2121,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 +2137,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 +2251,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 +2259,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 +2358,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... @@ -2498,6 +2474,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 +2680,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 @@ -3846,10 +3824,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 +3855,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..754a2e998b 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 @@ -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 @@ -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 @@ -1800,18 +1795,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 +1806,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 +1917,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 +1957,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 +1973,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 +2088,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 +2096,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 +2195,6 @@ 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_SERVER_SHUTDOWN :{WHITE}O servidor pechou a sesión STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servidor estase a reiniciar...{}Agarda por favor... @@ -2336,6 +2312,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 +2501,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 @@ -3725,10 +3703,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 +3734,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..479dc26cdb 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 @@ -234,8 +235,8 @@ STR_TOOLTIP_SORT_ORDER :{BLACK}Sortierr STR_TOOLTIP_SORT_CRITERIA :{BLACK}Sortierkriterien auswählen STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Filterkriterien 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 @@ -264,6 +265,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öä# @@ -3044,6 +3103,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Umschalt # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Schildtext ändern +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Hauptansicht auf Schildposition zentrieren. Strg+Klick öffnet ein neues Ansichtsfenster auf der Position des Schildes STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Zum nächsten Schild wechseln STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Zum vorherigen Schild wechseln @@ -3068,8 +3128,8 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} geliefert STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (noch benötigt) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (geliefert) -STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Die Stadt wächst jeden {ORANGE}{COMMA}{BLACK}-ten{NBSP}Tag -STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Die Stadt wächst jeden {ORANGE}{COMMA}{BLACK}-ten{NBSP}Tag (finanziert) +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Die Stadt wächst jeden {ORANGE}{COMMA}{BLACK}.{NBSP}Tag +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Die Stadt wächst jeden {ORANGE}{COMMA}{BLACK}.{NBSP}Tag (finanziert) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Die Stadt wächst {RED}nicht{BLACK} STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Lärmbelastung in der Stadt: {ORANGE}{COMMA}{BLACK} Grenzwert: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Hauptansicht zur Stadt scrollen. Strg+Klick öffnet neue Zusatzansicht bei der Stadt @@ -3116,6 +3176,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Die Sta # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Ziele STR_GOALS_SPECTATOR_CAPTION :{WHITE}Allgemeine Spielziele +STR_GOALS_SPECTATOR :Allgemeine Spielziele STR_GOALS_GLOBAL_TITLE :{BLACK}Allgemeine Spielziele: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Keine - @@ -3126,10 +3187,10 @@ STR_GOALS_COMPANY_TITLE :{BLACK}Firmensp STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klick auf Ziel zentriert Hauptansicht auf Industrie/Stadt/Feld. Strg+Klick öffnet eine darauf zentrierte Zusatzansicht # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Frage -STR_GOAL_QUESTION_CAPTION_INFORMATION :Hinweis -STR_GOAL_QUESTION_CAPTION_WARNING :Warnung -STR_GOAL_QUESTION_CAPTION_ERROR :Fehler +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Frage +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Hinweis +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Warnung +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Fehler ############ Start of Goal Question button list STR_GOAL_QUESTION_BUTTON_CANCEL :Abbruch @@ -3164,6 +3225,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klick au # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Chronik für {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Allgemeine Chronik +STR_STORY_BOOK_SPECTATOR :Allgemeine Chronik STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Seite {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Springt zur gewünschten Seite, wenn diese im Auswahlmenü angeklickt wird @@ -3318,6 +3380,8 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Verlegen STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Errichte Firmensitz für 1% des Firmenwertes an anderer Stelle neu. Shift+Klick zeigt einen Kostenvoranschlag STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Detaillierte Informationen zur Infrastruktur dieser Firma anzeigen +STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Verschenke Geld +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Geld an diese Firma verschenken STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Neues Gesicht STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Neues Gesicht für Manager aussuchen @@ -3335,6 +3399,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}25% der STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Firmenname STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Name des Managers +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Geben Sie den Betrag des Geldes ein, welchen sie verschenken möchten. STR_BUY_COMPANY_MESSAGE :{WHITE}Wir suchen eine Transportfirma, die unsere Firma übernimmt.{}{}Besteht Interesse daran, {COMPANY} für {CURRENCY_LONG} zu übernehmen? @@ -3343,6 +3408,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Schienenfelder: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signale STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Straßenfelder: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Straßenbahnfelder STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Wasserfelder: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanäle STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Stationen: @@ -3353,9 +3419,17 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrien STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Keine - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportiert){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} und {NUM} weitere... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrienamen - Klick auf den Namen zentriert Hauptansicht auf die Industrie. Strg+Klick öffnet neue Zusatzansicht zentriert auf die Industrie +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Angenommene Frachtarten: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produzierte Güter: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Alle Frachtarten +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Keine # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3449,15 +3523,18 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Neue elektrisch STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Neue Einschienenbahnfahrzeuge STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Neue Magnetbahnfahrzeuge -STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Neue Fahrzeuge +STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Neue Straßenfahrzeuge +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Neue Straßenbahnen ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Neue Schienenfahrzeuge +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Neue Straßenfahrzeuge STR_BUY_VEHICLE_SHIP_CAPTION :Neue Schiffe STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Neue Flugzeuge ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} Gewicht: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} (Umrüstkosten: {GOLD}{CURRENCY_LONG}{BLACK}) Gewicht: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Geschw.: {GOLD}{VELOCITY}{BLACK} Leistung: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Geschwindigkeit: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Geschwindigkeit auf dem Meer: {GOLD}{VELOCITY} @@ -3468,6 +3545,7 @@ STR_PURCHASE_INFO_REFITTABLE :(umrüstbar) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Entworfen: {GOLD}{NUM}{BLACK} Betriebsdauer: {GOLD}{COMMA} Jahr{P "" e} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. Zuverlässigkeit: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Kosten: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} (Kosten der Umrüstung: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Gewicht: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} Geschw.: {GOLD}{VELOCITY} STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} (Kosten der Umrüstung: {GOLD}{CURRENCY_LONG}{BLACK}) Geschwindigkeit: {GOLD}{VELOCITY} @@ -3491,12 +3569,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Fahrzeug STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Schiff kaufen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Flugzeug kaufen +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :Fahrzeug kaufen und umrüsten +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Fahrzeug kaufen und umrüsten +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Schiff kaufen und umrüsten +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :Flugzeug kaufen und umrüsten -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Angewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Schiff kaufen. Shift+Klick zeigt einen Kostenvoranschlag -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Augewähltes Flugzeug kaufen. Shift schaltet zwischen Bauen und Kostenvoranschlag um +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Augewähltes Flugzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :Ausgewähltes Fahrzeug kaufen und umrüsten. Shift+Klick zeigt einen Kostenvoranschlag +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Straßenfahrzeug kaufen und umrüsten. Shift+Klick zeigt einen Kostenvoranschlag +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Schiff kaufen und umrüsten. Shift+Klick zeigt einen Kostenvoranschlag +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Flugzeug kaufen und umrüsten. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Umbenennen STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Umbenennen @@ -3613,6 +3699,7 @@ STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=w}Einschiene STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=w}Magnetschwebebahn STR_ENGINE_PREVIEW_ROAD_VEHICLE :{G=n}Straßenfahrzeug +STR_ENGINE_PREVIEW_TRAM_VEHICLE :Straßenbahnfahrzeug STR_ENGINE_PREVIEW_AIRCRAFT :{G=n}Flugzeug STR_ENGINE_PREVIEW_SHIP :{G=n}Schiff @@ -3654,14 +3741,17 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Umschalt STR_REPLACE_ENGINES :Schienenfahrzeuge STR_REPLACE_WAGONS :Waggons STR_REPLACE_ALL_RAILTYPE :Alle Schienenfahrzeuge +STR_REPLACE_ALL_ROADTYPE :Alle Straßenfahrzeuge STR_REPLACE_HELP_RAILTYPE :{BLACK}Gleistyp auswählen, für den Loks ersetzt werden sollen +STR_REPLACE_HELP_ROADTYPE :{BLACK}Straßentyp auswählen, für den Fahrzeuge ersetzt werden sollen STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Hier wird angezeigt, gegen welches Fahrzeug das auf der linken Seite gewählte ersetzt wird STR_REPLACE_RAIL_VEHICLES :Schienenfahrzeuge STR_REPLACE_ELRAIL_VEHICLES :elektrische Schienenfahrzeuge STR_REPLACE_MONORAIL_VEHICLES :Einschienenbahn STR_REPLACE_MAGLEV_VEHICLES :Magnetschwebebahn +STR_REPLACE_ROAD_VEHICLES :Straßenfahrzeuge STR_REPLACE_TRAM_VEHICLES :Straßenbahnfahrzeuge STR_REPLACE_REMOVE_WAGON :{BLACK}Waggon-Entfernung: {ORANGE}{STRING} @@ -3670,10 +3760,10 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Ursprün # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} -STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Hauptansicht zum Zug scrollen. Strg+Klick, um dem Zug zu folgen -STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Hauptansicht zum Fahrzeug scrollen. Strg+Klick, um dem Fahrzeug zu folgen -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Hauptansicht zum Schiff scrollen. Strg+Klick, um dem Schiff zu folgen -STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Hauptansicht zum Flugzeug scrollen. Strg+Klick, um dem Flugzeug zu folgen +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Zentriert die Hauptansicht auf die Position des Zuges. Durch Doppelklick wird der Zug in der Hauptansicht verfolgt. Strg+Klick öffnet ein neues Ansichtsfenster auf der Position des Zuges +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Zentriert die Hauptansicht auf den Standort des Fahrzeugs. Durch Doppelklick wird das Fahrzeug in der Hauptansicht verfolgt. Strg+Klick öffnet ein neues Ansichtsfenster an der Position des Fahrzeugs +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Zentriert die Hauptansicht auf die Position des Schiffs. Mit Doppelklick wird das Schiff in der Hauptansicht verfolgt. Strg+Klick öffnet ein neues Ansichtsfenster auf der Position des Schiffs +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Zentriert die Hauptansicht auf die Position des Flugzeugs. Durch Doppelklick wird das Flugzeug in der Hauptansicht verfolgt. Strg+Klick öffnet ein neues Ansichtsfenster auf der Position des Flugzeugs STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Zug ins Depot schicken. Strg+Klick, um dort nur Wartung durchzuführen STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Das Fahrzeug ins Depot schicken. Strg+Klick, um dort nur Wartung durchzuführen @@ -3705,10 +3795,12 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Einzelhe STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Zeige Einzelheiten des Schiffes STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Zeige Einzelheiten des Flugzeuges -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Laufende Zugbewegung - Klicke hier, um den Zug anzuhalten / zu starten. Strg + Klick scrollt zum Bestimmungsort -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Laufende Fahrzeugbewegung - Klick zum Anhalten bzw. Losschicken. Strg + Klick scrollt zum Bestimmungsort -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Laufende Schiffsbewegung - Klicke hier, um das Schiff anzuhalten / zu starten. Strg + Klick scrollt zum Bestimmungsort -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Laufende Flugzeugbewegung - Klick zum Anhalten bzw. Losschicken. Strg + Klick scrollt zum Bestimmungsort +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Momentane Zugaktion - Klicken zum Starten/Anhalten des Zuges +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Momentane Fahrzeugaktion - Klicken zum Starten/Anhalten des Fahrzeugs +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Momentane Schiffsaktion - Klicken zum Starten/Anhalten des Schiffs +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Momentane Flugzeugaktion - Klicken zum Starten/Anhalten des Flugzeugs + +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Hauptansicht auf Auftragsziel zentrieren. Strg+Klick öffnet ein neues Ansichtsfenster auf dem Standort des Auftragsziels # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Laden / Entladen @@ -3936,6 +4028,7 @@ STR_ORDER_REFIT_STOP_ORDER :(auf {STRING} u STR_ORDER_STOP_ORDER :(Stopp) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Station unbenutzbar){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(Implizit) @@ -4114,6 +4207,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Ausgewä STR_AI_LIST_CANCEL :{BLACK}Abbrechen STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Skript nicht wechseln +STR_SCREENSHOT_CAPTION :{WHITE}Sreenshot erzeugen +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normaler Screenshot +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Screenshot auf der größten Zoomstufe +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Screenshot auf der Standard-Zoomstufe +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Screenshot des ganzen Spielfeldes +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Reliefkarten-Screenshot +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap Screenshot # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter @@ -4169,10 +4269,11 @@ STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Datei ka STR_ERROR_GAME_LOAD_FAILED :{WHITE}Laden des Spieles fehlgeschlagen{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interner Fehler: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Spielstandsdatei defekt - {STRING} -STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spielstand wurde mit neuerer Version erstellt +STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spielstand wurde mit einer neueren Spielversion erstellt STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Datei kann nicht gelesen werden STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Datei kann nicht geschrieben werden STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Prüfung der Datenintegrität fehlgeschlagen +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Spielstand wurde mit einer modifizierten Spielversion erstellt STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spiel wurde in einer Version ohne Straßenbahnunterstützung gespeichert. Alle Straßenbahnen wurden entfernt @@ -4253,6 +4354,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... Kred 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_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... @@ -4293,7 +4395,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... kann 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_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... @@ -4379,6 +4481,8 @@ 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 @@ -4387,6 +4491,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Keine ge 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_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... @@ -4406,7 +4511,11 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Diese St 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... @@ -4459,6 +4568,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Gruppe k 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... @@ -4654,10 +4764,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 @@ -4959,6 +5069,7 @@ 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} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index a2971e0f8f..cbef805221 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,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}Τίτλος παραθύρου - σύρετε το για να το μετακινήσετε @@ -373,6 +371,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}Γρήγορη ταχύτητα παιχνιδιού @@ -458,7 +458,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 :Λίστα πινακίδων @@ -985,7 +985,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}Επικόλληση από παράθυρο εμφάνισης @@ -1641,8 +1641,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} @@ -1692,9 +1690,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 :Οριζόντια τοποθέτηση της κύριας γραμμής εργαλείων στο επάνω μέρος της οθόνης @@ -1893,18 +1888,9 @@ 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_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 +1899,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} @@ -2025,10 +2010,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 +2050,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}Εκκίνηση διακομιστή @@ -2087,6 +2066,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 +2181,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 +2189,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}Δώστε στην εταιρεία νέο κωδικό @@ -2310,8 +2288,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}Ο διακομιστής επανεκκινεί...{}Παρακαλώ περιμένετε... @@ -2429,6 +2405,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 :Κατασκευή Ηλεκτροδοτημένου Σιδηρόδρομου @@ -2612,7 +2590,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}Δέντρα τυχαίου τύπου @@ -3796,10 +3774,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}Στέλνει το τρένο στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο επισκευή STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Στέλνει το όχημα στο αμαξοστάσιο. Με Ctrl+Κλικ κάνει μόνο επισκευή @@ -3831,10 +3805,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/hebrew.txt b/src/lang/hebrew.txt index a944e7d5e6..f6522af9e5 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 :רשימת שלטים @@ -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}עבור למיקום שנמצא בחלון התצוגה @@ -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 :מיקום אופקי של סרגל הכלים הראשי בראש המסך @@ -1779,18 +1774,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 +1785,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 +1895,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 +1935,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 +1951,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 +2065,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 +2073,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 +2172,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}השרת מופעל מחדש...{}אנא המתן... @@ -2312,6 +2288,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 +2473,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}עצים מסוג אקראי @@ -3624,10 +3602,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 +3633,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..369d534b2e 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 @@ -296,8 +296,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 @@ -378,6 +376,8 @@ STR_SORT_BY_RANGE :Hatótávolság STR_SORT_BY_POPULATION :Lakosság STR_SORT_BY_RATING :Értékelés +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Játék szüneteltetése STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Játék gyorsítása @@ -465,7 +465,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 @@ -948,7 +948,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,6 +999,7 @@ 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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Közúti járművek @@ -1616,8 +1617,6 @@ 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_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 +1668,6 @@ 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_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 @@ -1870,18 +1866,9 @@ 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_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 +1877,6 @@ 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_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 +1988,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 +2028,6 @@ 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_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 +2044,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 +2159,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 +2167,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 @@ -2288,8 +2267,6 @@ 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_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}) @@ -2408,6 +2385,8 @@ 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 + # 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,7 +2574,7 @@ 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 @@ -3801,10 +3780,6 @@ 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_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 +3811,7 @@ 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 + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Berakodás / Kirakodás diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 7415e01f1e..28379e1870 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 @@ -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 @@ -1440,8 +1440,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 +1485,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 @@ -1618,18 +1613,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 +1624,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 +1772,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 +1898,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 +1906,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 +2005,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ð... @@ -2136,6 +2114,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 +2299,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ð @@ -3326,10 +3306,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 +3337,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..e1c963abea 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 @@ -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,6 +941,11 @@ 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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kendaraan jalan raya @@ -986,6 +1009,7 @@ 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_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Kali dua @@ -1173,6 +1197,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Ijinkan pembent 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 +1284,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 +1320,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 @@ -1343,10 +1372,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 +1410,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 +1450,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 +1500,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 +1561,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 +1614,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 @@ -1644,6 +1691,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 @@ -1771,22 +1819,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 +1836,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 +1948,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 +1988,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 +2008,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 +2113,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 +2123,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 +2131,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 +2175,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 +2217,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 +2233,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 @@ -2310,6 +2352,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 +2457,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 +2542,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 @@ -2576,6 +2631,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 +2653,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 +2757,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 +2793,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 +2838,9 @@ 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_OSKTITLE :{BLACK}Masukkan nama dari permainan tersimpan @@ -2877,7 +2960,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 +3012,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 +3044,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 +3077,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 +3102,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 +3112,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 +3145,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,6 +3175,7 @@ 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_SPECTATOR :Target Global STR_GOALS_GLOBAL_TITLE :{BLACK}Target global: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Tidak ada - @@ -3090,10 +3186,10 @@ STR_GOALS_COMPANY_TITLE :{BLACK}Target p 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 +3379,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 +3398,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 +3418,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 +3438,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 +3500,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 +3523,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 +3544,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 +3552,7 @@ 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_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 +3568,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 +3740,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 +3750,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 +3759,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 +3794,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 +3974,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 +4027,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 +4206,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 +4272,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 +4353,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 +4480,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 +4490,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 +4510,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 +4567,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 +4763,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 +5068,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..e8710e27cf 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í @@ -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 @@ -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 @@ -1753,18 +1748,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 +1759,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 +1869,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 +1909,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 +1925,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 +2039,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 +2047,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 +2146,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... @@ -2286,6 +2262,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 +2447,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 @@ -3553,10 +3531,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 +3562,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..3fc2e1c8f3 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 @@ -235,8 +235,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 @@ -317,6 +315,8 @@ STR_SORT_BY_RANGE :{G=f}Autonomia STR_SORT_BY_POPULATION :Popolazione STR_SORT_BY_RATING :Valutazione +# Group by options for vehicle list + # Tooltips for the main toolbar STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausa STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Aumenta la velocità di gioco @@ -404,7 +404,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 @@ -886,7 +886,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,6 +937,7 @@ 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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automezzi @@ -1576,8 +1577,6 @@ 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_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 +1628,6 @@ 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_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 @@ -1830,18 +1826,9 @@ STR_INTRO_TRANSLATION :{BLACK}A questa # 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_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 +1837,6 @@ 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_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 +1948,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 +1988,6 @@ 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_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 +2004,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 +2119,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 +2127,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 @@ -2248,8 +2227,6 @@ 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_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}) @@ -2370,6 +2347,8 @@ 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 + # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Costruzione ferrovie STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Costruzione ferrovie elettrificate @@ -2561,7 +2540,7 @@ 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 @@ -3767,10 +3746,6 @@ 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_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 +3777,7 @@ 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 + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Caricamento / Scaricamento diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index c27cf4cf02..2e80121219 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.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 :電池 @@ -231,8 +231,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}ウィンドウのタイトルです。ドラッグでウィンドウが移動できます @@ -310,6 +308,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}ゲームスピードを早くします @@ -395,7 +395,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 :標識リスト @@ -869,7 +869,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}ビューアからペースト @@ -1506,8 +1506,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 :有効にすると、ライバル会社の株式を取引できるようになります。この設定を有効にしても、目的の社が設立から丸5年経過していない場合は取引できません STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :区間払いの割合: {STRING} @@ -1553,9 +1551,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 :画面上のメインツールバーの位置を決めます @@ -1753,18 +1748,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 +1759,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} @@ -1884,10 +1869,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 +1909,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}サーバーを開始 @@ -1946,6 +1925,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 +2039,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 +2047,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}会社パスワードを変更 @@ -2168,8 +2146,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}このサーバーは再起動中です…{}しばらくお待ちください… @@ -2286,6 +2262,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 :電気鉄道建設 @@ -2469,7 +2447,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}ランダムな樹類 @@ -3556,10 +3534,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}列車を列車庫へ回送します。Ctrl+クリックすると点検後、再出庫します STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}車両を車庫へ回送します。Ctrl+クリックすると点検後、再出庫します @@ -3591,10 +3565,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/korean.txt b/src/lang/korean.txt index 7f62d5c451..07b4df9b53 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 @@ -234,8 +235,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_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 :팻말 목록 @@ -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}* * 게임 저장 중 * * @@ -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,6 +946,7 @@ 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}차량 통행 방식 @@ -1231,7 +1242,7 @@ STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :선로의 어 STR_CONFIG_SETTING_SIGNALSIDE_LEFT :왼쪽에 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 :일반적으로 차량은 경로 상에 있는 모든 역에 정차하게 되어있습니다. 이 설정을 켜면, 차량이 마지막 목적지까지 정차없이 모든 역을 통과할 것입니다. 이 설정은 새로 경로를 지정하는 차량에만 적용되는 점을 알아두십시오. 하지만 각 차량의 경로는 두 가지 방법 중에 원하는 대로 다시 설정할 수 있습니다. @@ -1280,7 +1291,7 @@ 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 +1315,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 :도시 이름 옆에 도시의 인구 수를 표시합니다. @@ -1355,7 +1366,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 :소형지도 창에 사용할 지형의 색상을 선택합니다. @@ -1405,7 +1416,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :창 내부를 STR_CONFIG_SETTING_AUTOSAVE :자동 저장: {STRING} 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 +1441,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 +1451,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_AUTO_REMOVE_SIGNALS :선로 건설 중 신호기 자동 제거: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :신호기가 이미 있는 선로에 선로를 추가로 설치하면 신호기를 자동으로 제거합니다. 잘못 사용하면 잠재적으로 열차가 충돌할 수 있다는 점을 명심하세요. STR_CONFIG_SETTING_SOUND_TICKER :뉴스 자막: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :요약된 뉴스 메시지가 나타나면 효과음을 재생합니다. @@ -1489,7 +1502,7 @@ 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} @@ -1553,11 +1566,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 +1584,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 +1620,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 :주 메뉴가 화면 상단의 어느 위치에 표시될지를 선택합니다. @@ -1651,22 +1668,22 @@ 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%보다 작게 설정하십시오. @@ -1675,6 +1692,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 :출력할 차량의 힘 단위를 선택합니다. @@ -1807,18 +1825,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 +1837,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 +1949,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 +1989,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 +2009,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}명 @@ -2069,7 +2079,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 +2124,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,8 +2132,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}이 회사에 새 비밀번호 부여 @@ -2207,15 +2214,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} 님이 입장하셨습니다 @@ -2225,8 +2234,7 @@ 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 :*** {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 +2261,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 +2279,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}기본 그래픽 @@ -2345,6 +2353,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 :전기선로 건설 @@ -2532,13 +2543,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}지형 만들기 @@ -2615,6 +2632,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} @@ -3085,6 +3103,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}이전 팻말로 가기 @@ -3168,10 +3187,10 @@ 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 +3315,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 +3380,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 +3399,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}의 가격으로 인수합병하시겠습니까? @@ -3738,10 +3760,10 @@ 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+클릭하면 정비를 하러 차고지에 들르기만 합니다 @@ -3773,10 +3795,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}싣는 중 / 내리는 중 @@ -4004,6 +4028,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 +4273,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}전차를 지원하지 않는 버전으로 게임이 저장되었습니다. 모든 전차는 제거되었습니다. @@ -4328,6 +4354,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 +4466,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 +4481,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}불가능한 트랙 조합입니다 @@ -5040,6 +5069,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..93fccc773f 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 @@ -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 @@ -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 @@ -1971,18 +1966,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 +1977,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 +2088,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 +2128,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 +2144,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 +2259,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 +2267,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 +2366,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... @@ -2517,6 +2493,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 +2682,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 @@ -3842,10 +3820,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 +3851,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..6932176c9a 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 @@ -772,6 +780,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 +895,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,6 +946,7 @@ 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) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Autotransporta līdzekļi @@ -1554,8 +1564,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 +1620,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 +1690,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 @@ -1810,18 +1825,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 +1837,6 @@ 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_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 +1948,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 +1988,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 +2008,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 +2123,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 +2131,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 +2217,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 +2233,6 @@ 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_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}) @@ -2348,6 +2351,8 @@ 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 + # 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 +2540,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 @@ -3175,10 +3186,10 @@ STR_GOALS_COMPANY_TITLE :{BLACK}Uzņēmu 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 +3381,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 +3400,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 +3762,6 @@ 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_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 +3793,7 @@ 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 + # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Iekraušana / Izkraušana @@ -4258,6 +4265,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 :