pax_global_header00006660000000000000000000000064142037240410014507gustar00rootroot0000000000000052 comment=e822f5dac4e0599a628e4ec8489095905b179ec2 tiled-1.8.2/000077500000000000000000000000001420372404100126205ustar00rootroot00000000000000tiled-1.8.2/.github/000077500000000000000000000000001420372404100141605ustar00rootroot00000000000000tiled-1.8.2/.github/FUNDING.yml000066400000000000000000000001641420372404100157760ustar00rootroot00000000000000# These are supported funding model platforms github: bjorn liberapay: tiled patreon: bjorn open_collective: tiled tiled-1.8.2/.github/workflows/000077500000000000000000000000001420372404100162155ustar00rootroot00000000000000tiled-1.8.2/.github/workflows/codeql-analysis.yml000066400000000000000000000025641420372404100220370ustar00rootroot00000000000000name: "CodeQL" on: push: branches: [master] paths: - '**.cpp' - '**.h' pull_request: # The branches below must be a subset of the branches above branches: [master] paths: - '**.cpp' - '**.h' schedule: - cron: '0 22 * * 2' jobs: analyse: name: Analyse runs-on: ubuntu-20.04 steps: - name: Checkout repository uses: actions/checkout@v2 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. fetch-depth: 2 # If this run was triggered by a pull request event, then checkout # the head of the pull request instead of the merge commit. - run: git checkout HEAD^2 if: ${{ github.event_name == 'pull_request' }} # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v1 with: languages: cpp - name: Install dependencies run: | sudo apt update sudo apt install qt5-default libqt5svg5-dev qttools5-dev-tools zlib1g-dev qtdeclarative5-dev qtdeclarative5-private-dev qbs python3-dev - name: Setup qbs run: | qbs setup-toolchains --detect qbs config defaultProfile gcc - name: Build run: qbs build - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 tiled-1.8.2/.github/workflows/docs.yml000066400000000000000000000007071420372404100176740ustar00rootroot00000000000000name: "Build Manual" on: pull_request: paths: - 'docs/**' jobs: docs: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Build documentation uses: Algo-ryth-mix/sphinx-action@master with: docs-folder: "docs/" - name: Upload documentation uses: actions/upload-artifact@v2 with: name: Tiled-Manual-HTML path: docs/_build/html/ tiled-1.8.2/.github/workflows/macos-latest.yml000066400000000000000000000024341420372404100213370ustar00rootroot00000000000000name: Compile on latest macOS (Homebrew) on: push: paths-ignore: - 'docs/**' - '**.md' - 'appveyor.yml' - '.travis.yml' branches-ignore: [snapshot] pull_request: paths-ignore: - 'docs/**' - '**.md' - 'appveyor.yml' - '.travis.yml' jobs: build: runs-on: macos-latest steps: - name: Checkout repository uses: actions/checkout@v1 - name: Install dependencies run: | brew install qbs brew link qt5 --force - name: Setup Qbs run: | qbs setup-toolchains --detect qbs config defaultProfile xcode - name: Build run: | export TILED_VERSION=$(git describe | cut -c 2-) qbs build config:release qbs.installPrefix:"" projects.Tiled.version:$TILED_VERSION - name: Package run: | export TILED_VERSION=$(git describe | cut -c 2-) qbs install --install-root install config:release macdeployqt install/Tiled.app -verbose=2 pushd install ruby ../dist/macos/fixup-install-names.rb ditto -c -k --sequesterRsrc --keepParent Tiled.app ../Tiled-$TILED_VERSION-macos.zip popd - name: Upload artifact uses: actions/upload-artifact@v2 with: name: Tiled.app path: Tiled-*-macos.zip tiled-1.8.2/.github/workflows/packages-qt6.yml000066400000000000000000000157721420372404100212420ustar00rootroot00000000000000name: Build Packages (Qt 6) on: push: paths-ignore: - 'docs/**' - '**.md' - 'appveyor.yml' - '.travis.yml' pull_request: paths-ignore: - 'docs/**' - '**.md' - 'appveyor.yml' - '.travis.yml' env: QT_VERSION: 6.2.3 QTCREATOR_VERSION: 6.0.2 QBS_VERSION: 1.21.0 SENTRY_VERSION: 0.4.15 SENTRY_ORG: mapeditor SENTRY_PROJECT: tiled TILED_RELEASE: ${{ startsWith(github.ref, 'refs/tags/v') }} TILED_SNAPSHOT: ${{ !startsWith(github.ref, 'refs/tags/v') }} jobs: version: name: Determine Tiled version runs-on: ubuntu-latest outputs: version: ${{ steps.get-version.outputs.version }} release: ${{ steps.get-version.outputs.release }} steps: - name: Get version id: get-version run: | if [[ "$TILED_RELEASE" == 'true' ]]; then echo "::set-output name=version::${GITHUB_REF:11}" ; fi if [[ "$TILED_RELEASE" != 'true' ]]; then echo "::set-output name=version::$(date "+%Y.%m.%d")" ; fi echo "::set-output name=release::${TILED_RELEASE}" linux: name: Linux (AppImage) runs-on: ubuntu-20.04 needs: version env: TILED_VERSION: ${{ needs.version.outputs.version }} steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install dependencies run: | sudo apt update sudo apt install libgl1-mesa-dev libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-randr0 libzstd-dev libcurl4-openssl-dev - name: Install Qt run: | ./dist/install-qt.sh --version ${QT_VERSION} qtbase qtdeclarative qtsvg qtimageformats qttools qttranslations icu | tee -a $GITHUB_PATH ./dist/install-qt.sh --version ${QTCREATOR_VERSION} qtcreator | tee -a $GITHUB_PATH - name: Setup ccache uses: hendrikmuhs/ccache-action@v1 with: max-size: 250M - name: Setup CMake uses: jwlawson/actions-setup-cmake@v1.8 with: cmake-version: '3.19' - name: Setup Qbs run: | qbs --version qbs setup-toolchains --detect qbs config defaultProfile x86_64-linux-gnu-gcc-9 - name: Build Sentry Native run: | curl -sLO https://github.com/getsentry/sentry-native/releases/download/${SENTRY_VERSION}/sentry-native.zip mkdir sentry-native pushd sentry-native unzip -q ../sentry-native.zip cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo cmake --build build --parallel sudo cmake --install build --prefix /usr --config RelWithDebInfo popd - name: Build Tiled run: | qbs install --install-root AppDir config:release qbs.installPrefix:/usr projects.Tiled.enableZstd:true projects.Tiled.sentry:true qbs.debugInformation:true modules.cpp.separateDebugInformation:true modules.cpp.compilerWrapper:ccache - name: Upload symbols to Sentry if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} run: | curl -sL https://sentry.io/get-cli/ | bash sentry-cli upload-dif . - name: Build AppImage run: | cp LICENSE* COPYING *md AppDir/ wget --no-verbose "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" wget --no-verbose "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" chmod +x linuxdeploy*.AppImage export EXTRA_QT_PLUGINS=svg export LD_LIBRARY_PATH=/opt/Qt/${QT_VERSION}/gcc_64/lib:$PWD/AppDir/usr/lib export OUTPUT=Tiled-x86_64.AppImage ./linuxdeploy-x86_64.AppImage --appdir AppDir --plugin qt --output appimage - name: Upload Tiled.AppImage uses: actions/upload-artifact@v2 with: name: Tiled-x86_64.AppImage path: Tiled-x86_64.AppImage macos: name: macOS runs-on: macos-latest needs: version env: TILED_VERSION: ${{ needs.version.outputs.version }} steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install Qt run: | sudo ./dist/install-qt.sh --version ${QT_VERSION} qtbase qtdeclarative qtsvg qtimageformats qttools | tee -a $GITHUB_PATH sudo ./dist/install-qt.sh --version ${QTCREATOR_VERSION} qtcreator | tee -a $GITHUB_PATH - name: Setup Qbs run: | qbs setup-toolchains --detect qbs config defaultProfile xcode - name: Build Zstandard run: | git clone --depth 1 -b master https://github.com/facebook/zstd.git pushd zstd/lib make libzstd.a popd - name: Build Tiled run: | qbs install --install-root install config:release qbs.installPrefix:"" projects.Tiled.enableZstd:true - name: Package run: | macdeployqt install/Tiled.app -verbose=2 pushd install ruby ../dist/macos/fixup-install-names.rb ditto -c -k --sequesterRsrc --keepParent Tiled.app ../Tiled-macos.zip popd - name: Upload Tiled.app uses: actions/upload-artifact@v2 with: name: Tiled-macos.app path: Tiled-macos.zip windows: name: Windows (64-bit) runs-on: windows-2019 needs: version env: TILED_VERSION: ${{ needs.version.outputs.version }} QT_TOOLCHAIN: win64_mingw MINGW_VERSION: 9.0.0 OPENSSL_VERSION: 1.1.1 defaults: run: shell: bash steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install Qt run: | echo "QT_PATH=$(./dist/install-qt.sh --version ${QT_VERSION} --toolchain ${QT_TOOLCHAIN} qtbase qtdeclarative qtsvg qtimageformats qttools qttranslations)" >> $GITHUB_ENV echo "MINGW_PATH=$(./dist/install-qt.sh --version ${MINGW_VERSION} --toolchain ${QT_TOOLCHAIN} mingw90)" >> $GITHUB_ENV echo "OPENSSL_PATH=$(./dist/install-qt.sh --version ${OPENSSL_VERSION} openssl --arch x64)" >> $GITHUB_ENV - name: Install Qbs run: | choco install -y qbs --version ${QBS_VERSION} - name: Setup Qbs run: | qbs setup-toolchains ${MINGW_PATH}/*-w64-mingw32-gcc.exe mingw qbs setup-qt ${QT_PATH}/qmake.exe qt qbs config defaultProfile qt - name: Build Zstandard run: | export PATH="${MINGW_PATH}:$PATH" git clone --depth 1 -b master https://github.com/facebook/zstd.git pushd zstd/lib CC=gcc mingw32-make -j2 libzstd.a popd - name: Build Tiled run: | export TILED_MSI_VERSION=1.4.${GITHUB_RUN_NUMBER} qbs build config:release projects.Tiled.windowsInstaller:true projects.Tiled.enableZstd:true mv release/installer*/Tiled-*.msi . - name: Upload Tiled installer uses: actions/upload-artifact@v2 with: name: Tiled-win64.msi path: Tiled-*.msi - name: Upload Tiled archive uses: actions/upload-artifact@v2 with: name: Tiled-win64 path: release/install-root/* tiled-1.8.2/.github/workflows/packages.yml000066400000000000000000000342711420372404100205250ustar00rootroot00000000000000name: Build Packages on: push: paths-ignore: - 'docs/**' - '**.md' - 'appveyor.yml' - '.travis.yml' pull_request: paths-ignore: - 'docs/**' - '**.md' - 'appveyor.yml' - '.travis.yml' env: QT_VERSION: 5.15.2 QTCREATOR_VERSION: 5.0.3 QBS_VERSION: 1.21.0 SENTRY_VERSION: 0.4.15 SENTRY_ORG: mapeditor SENTRY_PROJECT: tiled TILED_RELEASE: ${{ startsWith(github.ref, 'refs/tags/v') }} TILED_SNAPSHOT: ${{ !startsWith(github.ref, 'refs/tags/v') }} jobs: version: name: Determine Tiled version runs-on: ubuntu-latest outputs: version: ${{ steps.get-version.outputs.version }} release: ${{ steps.get-version.outputs.release }} steps: - name: Get version id: get-version run: | if [[ "$TILED_RELEASE" == 'true' ]]; then echo "::set-output name=version::${GITHUB_REF:11}" ; fi if [[ "$TILED_RELEASE" != 'true' ]]; then echo "::set-output name=version::$(date "+%Y.%m.%d")" ; fi echo "::set-output name=release::${TILED_RELEASE}" linux: name: Linux (AppImage) runs-on: ubuntu-18.04 needs: version env: TILED_VERSION: ${{ needs.version.outputs.version }} steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install dependencies run: | sudo apt update sudo apt install libgl1-mesa-dev libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libzstd-dev libcurl4-openssl-dev - name: Install Qt run: | ./dist/install-qt.sh --version ${QT_VERSION} qtbase qtdeclarative qtsvg qtimageformats qttools qttranslations icu | tee -a $GITHUB_PATH ./dist/install-qt.sh --version ${QTCREATOR_VERSION} qtcreator | tee -a $GITHUB_PATH - name: Setup ccache uses: hendrikmuhs/ccache-action@v1 with: max-size: 250M - name: Setup CMake uses: jwlawson/actions-setup-cmake@v1.8 with: cmake-version: '3.19' - name: Setup Qbs run: | qbs --version qbs setup-toolchains --detect qbs config defaultProfile x86_64-linux-gnu-gcc-10 - name: Build Sentry Native run: | curl -sLO https://github.com/getsentry/sentry-native/releases/download/${SENTRY_VERSION}/sentry-native.zip mkdir sentry-native pushd sentry-native unzip -q ../sentry-native.zip cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo cmake --build build --parallel sudo cmake --install build --prefix /usr --config RelWithDebInfo popd - name: Build Tiled run: | qbs install --install-root Tiled config:release qbs.installPrefix:/usr projects.Tiled.enableZstd:true projects.Tiled.sentry:true qbs.debugInformation:true modules.cpp.separateDebugInformation:true modules.cpp.compilerWrapper:ccache - name: Upload symbols and sources to Sentry if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} run: | curl -sL https://sentry.io/get-cli/ | bash sentry-cli upload-dif --include-sources src . - name: Build AppImage run: | cp LICENSE* COPYING *md Tiled/ wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" -O linuxdeployqt chmod a+x linuxdeployqt ./linuxdeployqt ./Tiled/usr/share/applications/org.mapeditor.Tiled.desktop -bundle-non-qt-libs -extra-plugins=imageformats/libqsvg.so -exclude-libs=libpython3.6m.so.1 -verbose=2 ./linuxdeployqt --appimage-extract export PATH=$(readlink -f ./squashfs-root/usr/bin/):$PATH ./squashfs-root/usr/bin/appimagetool Tiled/ find ./Tiled -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq - name: Upload Tiled.AppImage uses: actions/upload-artifact@v2 with: name: Tiled-x86_64.AppImage path: Tiled-x86_64.AppImage snap: name: Linux (snap) runs-on: ubuntu-latest needs: version env: TILED_VERSION: ${{ needs.version.outputs.version }} steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set Tiled version id: version run: | sed -i 's/^version: .*/version: '"${TILED_VERSION}"'/g' snap/snapcraft.yaml sed -i 's/TILED_VERSION = .*/TILED_VERSION = "'"${TILED_VERSION}"'"/g' tiled.pri if [[ "$TILED_RELEASE" == 'true' ]]; then echo "::set-output name=snap_channel::candidate" ; fi if [[ "$TILED_RELEASE" != 'true' ]]; then echo "::set-output name=snap_channel::beta" ; fi - name: Build snap id: build uses: snapcore/action-build@v1 - name: Upload snap artifact uses: actions/upload-artifact@v2 with: name: tiled_amd64.snap path: tiled_*_amd64.snap - name: Release snap (beta channel) uses: snapcore/action-publish@v1 if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' && (github.ref == 'refs/heads/snapshot' || needs.version.outputs.release == 'true') with: store_login: ${{ secrets.SNAP_STORE_LOGIN }} snap: ${{ steps.build.outputs.snap }} release: ${{ steps.version.outputs.snap_channel }} macos: name: macOS runs-on: macos-latest needs: version env: TILED_VERSION: ${{ needs.version.outputs.version }} steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install Qt run: | sudo ./dist/install-qt.sh --version ${QT_VERSION} qtbase qtdeclarative qtsvg qtimageformats qttools | tee -a $GITHUB_PATH sudo ./dist/install-qt.sh --version ${QTCREATOR_VERSION} qtcreator | tee -a $GITHUB_PATH - name: Setup Qbs run: | qbs setup-toolchains --detect qbs config defaultProfile xcode - name: Build Zstandard run: | git clone --depth 1 -b master https://github.com/facebook/zstd.git pushd zstd/lib make libzstd.a popd - name: Build Tiled run: | qbs install --install-root install config:release qbs.installPrefix:"" projects.Tiled.enableZstd:true - name: Deploy Qt run: | macdeployqt install/Tiled.app -verbose=2 pushd install ruby ../dist/macos/fixup-install-names.rb - name: Import Certificate if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' uses: devbotsxyz/xcode-import-certificate@v1 with: certificate-data: ${{ secrets.MACOS_CERTIFICATE }} certificate-passphrase: ${{ secrets.MACOS_CERTIFICATE_PWD }} keychain-password: ${{ secrets.KEYCHAIN_PWD }} - name: Sign if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' run: | codesign --deep --force --verify --verbose --sign Lindeijer --options runtime install/Tiled.app - name: Notarize if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' uses: devbotsxyz/xcode-notarize@v1 with: product-path: install/Tiled.app appstore-connect-username: ${{ secrets.NOTARIZATION_USERNAME }} appstore-connect-password: ${{ secrets.NOTARIZATION_PASSWORD }} - name: Staple if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' uses: devbotsxyz/xcode-staple@v1 with: product-path: install/Tiled.app - name: Create Archive run: | ditto -c -k --sequesterRsrc --keepParent install/Tiled.app Tiled-macos.zip - name: Upload Tiled.app uses: actions/upload-artifact@v2 with: name: Tiled-macos.app path: Tiled-macos.zip windows: name: Windows (${{ matrix.arch }}-bit) runs-on: windows-2019 needs: version strategy: matrix: include: - arch: 32 openssl_arch: x86 - arch: 64 openssl_arch: x64 env: TILED_VERSION: ${{ needs.version.outputs.version }} QT_TOOLCHAIN: win${{ matrix.arch }}_mingw81 MINGW_VERSION: 8.1.0 MINGW_TOOLCHAIN: win${{ matrix.arch }}_mingw OPENSSL_VERSION: 1.1.1 defaults: run: shell: bash steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install Qt run: | echo "QT_PATH=$(./dist/install-qt.sh --version ${QT_VERSION} --toolchain ${QT_TOOLCHAIN} qtbase qtdeclarative qtsvg qtimageformats qttools qttranslations)" >> $GITHUB_ENV echo "MINGW_PATH=$(./dist/install-qt.sh --version ${MINGW_VERSION} --toolchain ${MINGW_TOOLCHAIN} mingw)" >> $GITHUB_ENV echo "OPENSSL_PATH=$(./dist/install-qt.sh --version ${OPENSSL_VERSION} openssl --arch ${{ matrix.openssl_arch }})" >> $GITHUB_ENV - name: Install Qbs run: | choco install -y qbs --version ${QBS_VERSION} - name: Setup Qbs run: | qbs setup-toolchains ${MINGW_PATH}/*-w64-mingw32-gcc.exe mingw qbs setup-qt ${QT_PATH}/qmake.exe qt qbs config defaultProfile qt - name: Build Zstandard run: | export PATH="${MINGW_PATH}:$PATH" git clone --depth 1 -b master https://github.com/facebook/zstd.git pushd zstd/lib CC=gcc mingw32-make -j2 libzstd.a popd - name: Build Tiled run: | export TILED_MSI_VERSION=1.4.${GITHUB_RUN_NUMBER} qbs build config:release projects.Tiled.windowsInstaller:true projects.Tiled.enableZstd:true mv release/installer*/Tiled-*.msi . - name: Upload Tiled installer uses: actions/upload-artifact@v2 with: name: Tiled-win${{ matrix.arch }}.msi path: Tiled-*.msi - name: Upload Tiled archive uses: actions/upload-artifact@v2 with: name: Tiled-win${{ matrix.arch }} path: release/install-root/* itch: name: Upload to itch.io (${{ matrix.channel }}) runs-on: ubuntu-latest needs: [version, linux, macos, windows] if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' && github.ref == 'refs/heads/snapshot' strategy: matrix: include: - channel: linux-64bit artifact: Tiled-x86_64.AppImage prepare: chmod +x upload/Tiled-x86_64.AppImage - channel: macos artifact: Tiled-macos.app prepare: | pushd upload unzip Tiled-macos.zip rm Tiled-macos.zip popd - channel: windows-32bit artifact: Tiled-win32 - channel: windows-64bit artifact: Tiled-win64 steps: - name: Download artifact id: download uses: actions/download-artifact@v2 with: name: ${{ matrix.artifact }} path: upload - name: Prepare artifact if: matrix.prepare run: ${{ matrix.prepare }} - name: Download Butler run: | curl -JOL https://broth.itch.ovh/butler/linux-amd64/LATEST/archive/default unzip butler-linux-amd64.zip - name: Push to itch.io env: BUTLER_API_KEY: ${{ secrets.BUTLER_CREDENTIALS }} TILED_VERSION: ${{ needs.version.outputs.version }} run: | ITCH_CHANNEL=${{ matrix.channel }} if [[ "$TILED_SNAPSHOT" == 'true' ]]; then ITCH_CHANNEL="${ITCH_CHANNEL}-snapshot" ; fi ./butler push --userversion=${TILED_VERSION} upload thorbjorn/tiled:${ITCH_CHANNEL} github: name: Upload to GitHub releases runs-on: ubuntu-latest needs: [version, linux, macos, windows] if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' && needs.version.outputs.release == 'true' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - name: Create release id: create_release uses: actions/create-release@v1 with: tag_name: ${{ github.ref }} release_name: Tiled ${{ needs.version.outputs.version }} draft: true prerelease: false - name: Download Windows 64-bit installer id: download-win64-installer uses: actions/download-artifact@v2 with: name: Tiled-win64.msi - name: Download Windows 32-bit installer id: download-win32-installer uses: actions/download-artifact@v2 with: name: Tiled-win32.msi - name: Download Linux AppImage id: download-appimage uses: actions/download-artifact@v2 with: name: Tiled-x86_64.AppImage - name: Download macOS app id: download-app uses: actions/download-artifact@v2 with: name: Tiled-macos.app - name: Upload Windows 64-bit installer uses: actions/upload-release-asset@v1 with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: Tiled-${{ needs.version.outputs.version }}-win64.msi asset_name: Tiled-${{ needs.version.outputs.version }}-win64.msi asset_content_type: applictaion/x-msi - name: Upload Windows 32-bit installer uses: actions/upload-release-asset@v1 with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: Tiled-${{ needs.version.outputs.version }}-win32.msi asset_name: Tiled-${{ needs.version.outputs.version }}-win32.msi asset_content_type: applictaion/x-msi - name: Upload Linux AppImage uses: actions/upload-release-asset@v1 with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: Tiled-x86_64.AppImage asset_name: Tiled-${{ needs.version.outputs.version }}-x86_64.AppImage asset_content_type: application/vnd.appimage - name: Upload macOS app uses: actions/upload-release-asset@v1 with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: Tiled-macos.zip asset_name: Tiled-${{ needs.version.outputs.version }}-macos.zip asset_content_type: application/zip - name: Checkout repository uses: actions/checkout@v2 - name: Create Sentry release uses: getsentry/action-release@v1 env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} with: environment: releases version: tiled@${{ needs.version.outputs.version }} tiled-1.8.2/.github/workflows/ubuntu-20.04.yml000066400000000000000000000016151420372404100207260ustar00rootroot00000000000000name: Compile on Ubuntu 20.04 on: push: paths-ignore: - 'docs/**' - '**.md' - 'appveyor.yml' - '.travis.yml' branches-ignore: [snapshot] pull_request: paths-ignore: - 'docs/**' - '**.md' - 'appveyor.yml' - '.travis.yml' jobs: build: runs-on: ubuntu-20.04 steps: - name: Checkout repository uses: actions/checkout@v1 - name: Setup ccache uses: hendrikmuhs/ccache-action@v1 with: max-size: 250M - name: Install dependencies run: | sudo apt update sudo apt install qt5-default qttools5-dev-tools zlib1g-dev qtdeclarative5-dev qtdeclarative5-private-dev qbs python3-dev - name: Setup qbs run: | qbs --version qbs setup-toolchains --detect qbs config defaultProfile gcc - name: Build run: | qbs build modules.cpp.compilerWrapper:ccache tiled-1.8.2/.readthedocs.yaml000066400000000000000000000002231420372404100160440ustar00rootroot00000000000000version: 2 sphinx: builder: dirhtml configuration: docs/conf.py formats: - pdf python: install: - requirements: docs/requirements.txt tiled-1.8.2/AUTHORS000066400000000000000000000141661420372404100137000ustar00rootroot00000000000000Main developer and maintainer: Thorbjørn Lindeijer Other contributors: Stefan Beller Mohamed Thabet Erik Schilling Samuli Tuomola Phlosioneer Benjamin Trotter Petr Viktorin Jeff Bland Ketan Gupta Mitch Curtis monolifed Allan Nordhøy Jake Petroules Mike Thomas Mauricio Muñoz Lucero Rhenaud Dubois Mamed Ibrahimov Yohann Ferreira João Lopes mauve Alex Vega (semtiko) Olexandr Nesterenko Balázs Úr Martin Ziel Любомир Василев Hiroki Utsunomiya Parker Miller Tuomas Lähteenmäki seeseekey HonestQiao Roderic Morris Nils Kübler Will Luongo Michael Bickel Porfírio Ribeiro Sean Humeniuk wayfu Ben Longbons Jonatas de Moraes Junior Manu Evans Mikolai Fajer zhaosting Alejandro Cámara Bilge Theall Danny Tuppeny Justin Jacobs Oskar Wiksten Peter André Johansen Prachi Joshi Tamir Atias (KonoM) Tim Baker Antoine Gersant Hendrik Brummermann Igor Louies Michael de Lang Mohammad Mehdi Salem Naraghi Nathan Tolbert Omnomnobot Tripolis777 ekeimaja Andrew G. Crowell Chase W Cheuk Yin Ng Clint Bellanger Dennis Honeyman Henrik Heino Justin Zheng Laete Meireles Mattias Münster Michael Woerister Pavel Tkachenko Rafael Osipov Ruin0x11 Sebastian Pidek Stéphane Seng Thanachart Monpassorn Yehnan Chiang qwebltd Alex Heyman Alexander Kuhrt Andreas Abraham Arseniy Tsyro Bastien LABOUCHE Bdtrotte Bruno Baère Pederassi Lomba de Araujo Calvin M.T Champi080 Christian Henz Christoph Schnackenberg Christophe Conceicao Clyde CodeSpartan Dale Kim Edgar Minderlin Evelyn Mahasin Genek Tomashko HenryJia Jeannette L Jonathan Bayle João Baptista de Paula e Silva JuKuSoft.com JustinZhengBC Jānis Kiršteins Kenney Phillis Kim Maus Niek Patrick Griffis Pierre-David Bélanger Porfirio Przemysław Grzywacz Rui Mendes Seanba Sergey Savchuk TheRamenChef Tim Cooper Wodann Yuriy ZTarget digitalhoax juniperbrew kralle333 ldurniat nuriu odamite oktonion ssantos tolbert zigal A. Regnander Aban Acuion Adam B Adam Hornáček Adam Rippon Ahmad Hamdani Alejandro Alvarez Alessandro Portale Alex Koz Alexei Bratuhin Andreas Kleinert Andrew Motrenko Ansis Māliņš Anton R Antonio Ricci Ava Brumfield BRULE Herman Bendegúz Nagy Bill Clark Bin Wu Brandon Dillon Brian Cain Bryce-C CaptainCrumble CaptainFrog Carisius Casper Færgemand Chris Cacciatore Cuong Nguyen Daivuk Dennis Hostetler Dieppedalle David Dmitry Hrabrov Dmitry Marakasov Dobes Vandermeer Dylan Wilson Eduardo Medeiros Pereira Edward Hutchins Emmanuel Barroga Eric Kidd Ettore Atalan Firas Assaad Flyte Freeyorp Fyrenic Gabriel Rohden Gauthier Billot Glavak Gnumaru Gornova Gregory Nickonov Guilherme Rodrigues Caetano Gurkenlabs Hanmac Harri Berglund Harry Hsiao Henry Wang Hermann Döppes ILIUS Ian Davis Ian Langworth ☠ Jack Roper Jacob Coughenour Jared Adams Joel Bodenmann Joel Leclerc Johel Ernesto Guerrero Peña JonesBlunt Josh Bramlett Juan Rodriguez Julien Dumont Justas Bistrickas Katia Piazza Keshav Sharma Kimmo Rundelin Kody Kurtz Kyle Delaney Kyle Filz Lennert Raesch Leon Moctezuma Ludolph Neethling Luis Garcia MHendricks Marce Coll Marco Fras Mark van Rij Markus Mateo de Mayo Matheus Bastos Matt Drollette Matt Styles MatthewAlner Mattia Basaglia Michael Aquilina Michael Vetter Michael Williams Michał Wawrzynowicz Mohammed SLIMANI Nathan Nikita Razdobreev Nolan Baker Nuri Uzunoğlu Okami Oliver Zell Oğuz Ersen Paul V Craven Phil Hagelberg Postremus Prayag Verma Robert Maes Roberto Raggi Robin Modisch Ruslan Gainutdinov Ryan Roden-Corrent RyanSchmittDev Sam Manflame Samuel Magnan Satvik Ramaprasad Sausage Johnson Sebastian Grillmaier Sharganov Artem Sibiot Simião Simon Parzer Sébastien BURILLARD Thomas Herbelin Thomas ten Cate Todd Carnes Tom Linthwaite Tomasz Kubiak Tomer Daniel TrunXGIT UnknownSkyrimPasserby Vincent Petithory Vitek1425 Vojtěch Šamla Vsevolod Klementjev Wade Brainerd WaldiS Weverton Reis Wilfredo Velázquez-Rodríguez William Taylor Xenodora YFdyh000 Yan Ying-Chun Liu (PaulLiu) Zach Oakes Zach Reizner Zachary Jia Zhao Sting arcrowel arntro-4 assofohdz bitJericho buckle2000 cristyhj devnewton endlesstravel endstation erem2k fireraccoon fqsrz i-ka impbox iskolbin kekd.ck kensington leeonix luan-cestari mhussa miru2533 mogemimi nasso nicolaichuk nimradium nykm obeezzy olueiro oncer pavel.bondoronok pvlbndrnk radman0x ranjak rlewicki saeedakhter spiiin sujiniku theHacker yjaffal Володимир Бриняк 柠檬杀手 阮少华 송태섭 최아영 Acknowledgements: Most of the icons are from the GNOME and GIMP icon themes (GPL) Some Icons are Copyright (C) Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 license. See http://p.yusukekamiyamane.com/ The dice icon is based on an SVG by Steaphan Greene that I found on Wikipedia: http://en.wikipedia.org/wiki/File:2-Dice-Icon.svg Inkscape icons by Barbara Muraus, Jakub Steiner and Josh Andler (CC-BY-SA 3.0) * src/tiled/images/14/hidden.png * src/tiled/images/14/visible.png * src/tiled/images/16/hidden.png * src/tiled/images/16/visible.png * src/tiled/images/24/hidden.png * src/tiled/images/24/visible.png Icons from the Elementary icon theme (GPLv3) * src/tiled/images/scalable/edit-delete-symbolic.svg * src/tiled/images/scalable/edit-undo-symbolic.svg * src/tiled/images/scalable/software-update-available-symbolic.svg * src/tiled/images/16/dialog-error.png * src/tiled/images/16/dialog-warning.png * src/tiled/images/24/dialog-error.png * src/tiled/images/24/dialog-warning.png * src/tiled/images/32/dialog-error.png * src/tiled/images/32/dialog-warning.png Tilesets: perspective_walls.png - (C) Clint Bellanger, released as Public Domain isometric_grass_and_water.png - (C) Clint Bellanger, released as GPL2, GPL3, CC-BY-SA3 tmw_desert_spacing.png - (C) The Mana World Development Team, GPL sewer_tileset.png - (C) Blues Brothers RPG developers, GPL Replica Island - (C) Chris Pruett and Genki Mine, Apache (except hotspots.png) hexmini.png - Public Domain, http://opengameart.org/content/pixel-hex-tilesets-enhanced buch-outdoor.png - (C) Michele "Buch" Bucelli, CC-BY 3.0, http://opengameart.org/users/buch examples/sticker-knight - (C) Ponywolf, CC0, http://opengameart.org/content/sticker-knight-platformer wangblob.png, CC0, https://opengameart.org/content/seamless-tileset-template-ii tiled-1.8.2/CONTRIBUTING.md000066400000000000000000000035611420372404100150560ustar00rootroot00000000000000# Contributing to Tiled All kinds of contributions are very appreciated, be it documentation, code or build system improvements, be it a small patch, a feature or maybe even becoming a co-maintainer of Tiled. Bug reports and feature requests are of course welcome too! ## Reporting an Issue Make sure to mention the following things: * How the issue can reproduced * What behavior you expected instead * What actually happened * Tiled version, operating system, etc. if possibly relevant. Also, please consider adding a screenshot or video if it helps illustrate the issue. ## Requesting a Feature First of all, look around the already open issues to see if the feature was already requested in some form. In that case it's better to comment on the existing feature instead. If you're not entirely sure about what feature you need, consider to [post your problem on the forum](https://discourse.mapeditor.org/) instead. In any case, be sure to describe the feature in enough detail, to consider its implications on existing parts of the software if relevant and to describe how it would help you in particular. Also, please consider including a mockup if the issue includes UI changes. ## Submitting a Patch * Ideally, start with something small to get familiar with the review process and work up from there. * Make an effort to follow the overal coding style, which is roughly based on the [Qt Creator coding style](https://doc.qt.io/qtcreator-extending/coding-style.html). * Be prepared for detailed feedback on your patch and to make several revisions. * Each pull request will be built automatically for Windows, Linux and macOS. If the build fails anywhere, please check if it may be a problem with your patch. ## Making a Donation Please consider supporting further development of Tiled with [a monthly donation](https://www.mapeditor.org/donate). Thanks a lot for your contribution! tiled-1.8.2/COPYING000066400000000000000000000016551420372404100136620ustar00rootroot00000000000000Several independent works are being distributed along with Tiled that fall under different licenses. You can find the license that applies to each file in the comment at the top, but for clarity they are also listed here: Software Directory License ------------------------------------------------------------------- Tiled src/tiled GPL Tiled plugins src/plugins GPL libtiled src/libtiled BSD 2-clause license libtiled-java util/java/libtiled-java BSD 2-clause license qtpropertybrowser src/qtpropertybrowser BSD 3-clause license tmxrasterizer src/tmxrasterizer BSD 2-clause license tmxviewer src/tmxviewer BSD 2-clause license tmxviewer-java util/java/tmxviewer-java BSD 2-clause license The full text of each license is provided in the files LICENSE.GPL and LICENSE.BSD. tiled-1.8.2/Doxyfile000066400000000000000000000221101420372404100143220ustar00rootroot00000000000000# Doxyfile 1.6.1 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "Tiled (Qt)" PROJECT_NUMBER = OUTPUT_DIRECTORY = CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = NO REPEAT_BRIEF = YES ABBREVIATE_BRIEF = ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = NO STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 8 ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES TYPEDEF_HIDES_STRUCT = NO SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = YES SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_MEMBERS_CTORS_1ST = NO SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = NO SHOW_FILES = YES SHOW_NAMESPACES = YES FILE_VERSION_FILTER = LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = src INPUT_ENCODING = UTF-8 FILE_PATTERNS = RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = */moc_*.cpp \ */ui_*.h \ */qrc_*.cpp EXCLUDE_SYMBOLS = EXAMPLE_PATH = EXAMPLE_PATTERNS = EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = YES INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO REFERENCES_LINK_SOURCE = YES USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES HTML_DYNAMIC_SECTIONS = NO GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO GENERATE_QHP = NO QCH_FILE = "../tiled-0.1.qch" QHP_NAMESPACE = org.mapeditor.tiled QHP_VIRTUAL_FOLDER = "tiled-0.1" QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = QHG_LOCATION = "qhelpgenerator" DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO USE_INLINE_TREES = NO TREEVIEW_WIDTH = 250 FORMULA_FONTSIZE = 10 SEARCHENGINE = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = YES USE_PDFLATEX = YES LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES MSCGEN_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO DOT_FONTNAME = FreeSans DOT_FONTSIZE = 10 DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = YES DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES tiled-1.8.2/LICENSE.APACHE000066400000000000000000000261371420372404100145560ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. tiled-1.8.2/LICENSE.BSD000066400000000000000000000023041420372404100142330ustar00rootroot00000000000000Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. tiled-1.8.2/LICENSE.GPL000066400000000000000000000432541420372404100142560ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. tiled-1.8.2/NEWS.md000066400000000000000000002404511420372404100137240ustar00rootroot00000000000000### Tiled 1.8.2 (18 February 2022) * Fixed deactivating of tools when no layer is selected (avoids crash) * Fixed monospace font option in multi-line text editor on macOS and Windows (#3007) * Fixed ability to reset custom 'color' and 'object' properties (#3270) * Fixed updating of layer positions when changing parallax factor of a group (#3175) * Scripting: Fixed crash when assigning null to the MapObject.tile property * Scripting: Fixed adding of tilesets when adding layers to a loaded map (#3268) * JSON format: Fixed layer locked status not getting saved (#2877) * macOS: Fixed duplicate overwrite confirmation when using Export As (#3152) * FreeBSD: Fixed compile due to missing include (by Dmitry Marakasov, #3271) ### Tiled 1.8.1 (11 February 2022) * Fixed pasted objects not getting selected if a tile layer was also copied * Fixed possible crash when trying to determine whether OpenGL is used * Fixed possible crash when using the Insert Tile tool * Fixed possible crash in tile stamp preview * AutoMapping: Fixed crash when an input layer does not exist (#3269) * Scripting: Automatically add tilesets to the map where needed (#3268) * snap: Updated from core18 to core20 (now uses Qt 5.12) * AppImage: Updated to Sentry 0.4.15 ### Tiled 1.8.0 (7 February 2022) * Added support for custom enum properties (with svipal, #2941) * Added support for custom class properties (#489) * Added parallax origin property to the map (with krukai, #3209) * Added Repeat X/Y properties to Image Layers (with krukai, #3205) * Added an action for selecting all layers (Ctrl+Alt+A) (#3081) * Added actions to select or add tilesets to Project view context menu * Added cut/copy/paste actions to Tile Animation Editor * Improved undo behavior by merging sequential edits to the same property (#3103) * Improved multi-layer painting behavior (#3094) * Separated the X and Y components of the major grid option (#3208) * Added automatic fading out of the grid when zooming out a lot * AutoMapping: Made it find layers within groups (#1771) * AutoMapping: `regions` layer can now be used alongside `region_input/output` layers * AutoMapping: Recognize "//" layer name prefix for ignoring layers (#3262) * AutoMapping: Allow setting a rule map as project rules file (#3221) * Tweaked focus behavior in the Template Editor * Changed the default Terrain Brush shortcut back to T * Reset tile animations when disabling playback and when exporting as image * Don't require saving maps upon creation (#1902) * Apply transformation actions to the preview while placing tiles (#3091) * Allow using object context menu in object creation tools * Reduced the step size for the parallax factor property * Improved the logic for automatically switching tools (#2807) * Ignore selection changes when marking a file as modified (#3194) * Use the tileset background color in the collision editor (with Benja Appel, #3163) * Show the read error when using --export-map/tileset * Avoid deselecting all layers when clicking empty area in Layers view (#2806) * Scripting: Added File API * Scripting: Added support for loading JavaScript `.mjs` modules (#3261) * Scripting: Added tiled.applicationDirPath property * Scripting: Added tiled.extensionsPath property (#3139) * Scripting: Added missing Layer.tintColor property * Scripting: Added missing ObjectGroup.drawOrder property (#3147) * Scripting: Added TileMap.removeObjects (#3149) * Scripting: Added TileMap.regionEdited signal * Scripting: Added TileMap.layers and GroupLayer.layers properties, for convenience * Scripting: Added region.rects property and region.contains(x,y) * Scripting: Treat custom format extensions as case-insensitive (#3141) * Scripting: Allow tools to stay active when tiles or a terrain type are selected (#3201) * Scripting: Extended the terrain related API (#2663) * Scripting: tiled.activeAsset can be assigned asset created in script (#3160) * Scripting: Fixed possible crash after creating tilesets from script (#3229) * Scripting: Fixed possible crash in TileMap.autoMap * Scripting: Fixed dialog window titles to show on macOS (#2910) * Scripting: Fixed tileset or tile references for maps loaded from script * Scripting: Avoid crash when script reload happens during popup (#2991) * Fixed the logic for handling group layer parallax factors (with LilithSilver, #3125) * Fixed keyboard modifiers getting stuck for Terrain Brush (#2678) * Fixed debug messages showing in the Console and Issues views * Fixed enabled state of File > Export action for tilesets (#3177) * Fixed Snap to Grid for hexagonal maps * Fixed AutoMapping rules file to update after changing project properties (#3176) * Fixed 'Detect Bounding Box' action missing in Keyboard settings * Fixed toggling "Clear View" on & off shifting the map * Fixed command-line output not showing on Windows (#2688) * Fixed "Select object on map" when no object layer is selected (#3207) * Fixed adjusting of tile types when tileset width changed (by Albert Vaca Cintora, #3237) * Fixed missing Qt translations for Linux AppImage * Fixed minimap viewport position when layers are offset (#3211) * Fixed "Highlight Current Layer" getting confused (#3223) * Fixed Terrain Set type property to be disabled when appropriate (avoids crash) * Fixed saving broken references to files loaded using "ext:" prefix (#3185) * Fixed performance issue in Project view related to file icons * Fixed dynamic wrapping when adding tiles to a collection (#3076) * Fixed potential crash when changing a WangSet from script * Tiled Manual is now available in French * JSON plugin: Added "tmj", "tsj" and "tj" as accepted file extensions * YY plugin: Don't use safe writing of files * YY plugin: Write out custom "object" properties as instance name (instead of the ID) * YY plugin: Determine sprite names by looking for meta files (by krukai, #3213) * CSV plugin: Improved handling of infinite maps * RpMap plugin: Fixed hardcoded exported tile size (#3184) * libtiled-java: Introduced TilesetCache interface (by Samuel Manflame, #3117) * Added Ukrainian translation to Windows installer (#3132) * AppImage: Updated to Sentry 0.4.14 * Updated Bulgarian, Chinese (Simplified), French, Korean, Portuguese (Brasil), Portuguese (Portugal), Russian, Swedish and Turkish translations ### Tiled 1.7.2 (10 August 2021) * Avoid automatically replacing external tilesets with "similar" ones * Fixed copying and capturing stamps on staggered maps (with Alexander Dorogov, #2874) * Fixed possible crash in Tile Animation Editor * Fixed data loss when saving maps with tilesets that failed to load (#3106) * Fixed creating multi-layer tile stamp from selection (#2899) * Scripting: Automatically reset object ID when adding to avoid duplicate IDs * Linux: Possible workaround for crash in clipboard manager * AppImage: Updated to Sentry 0.4.12 * Updated Italian translation ### Tiled 1.7.1 (9 July 2021) * Don't save export target and format to exported files * Fixed crashes resulting from the Tile Animation Editor * Fixed possible crash when pasting multi-layer stamp (#3097) * Fixed possible crash when restoring expanded layers in Objects view * Fixed parallax factor getting lost when layer is cloned (#3077) * Fixed an issue with synchronizing selected tiles to current stamp (#3095) * Commands: Fixed possible crash in Edit Commands window * Commands: Automatically quote the command executable * Commands: Improved starting directory for executable file chooser * Commands: Fixed the 'Clear' button to reset the shortcut * AppImage: Updated to Sentry 0.4.11 * Updated French translation ### Tiled 1.7.0 (4 June 2021) * Added basic "major grid" option with stronger lines (with Ilya Arkhanhelsky, #3032) * Added ability to rearrange tiles in a tileset (with José Miguel Sánchez García, #2983) * Added option to choose background fade color (with SchmidtWC, #3031) * Added portable mode, enabled when a "tiled.ini" is detected alongside the Tiled executable (#2945) * Disable project extensions by default, for security reasons (#3058) * Render selection preview and hovered item highlight above labels (#3036) * Changed the donation reminder to be non-modal * docs: Generate scripting API documentation using TypeDoc (with Erik Schilling (#2965) and MrMasterplan (#3040, #3041, #3045)) * QMake/Qbs: Added a way to disable DBus support (with Dmitry Marakasov, #3039) * Scripting: Fixed 'mouseLeft' callback for scripted tools (#3050) * Scripting: Fixed loading of icons with explicit "ext:" prefix (#3048) * Scripting: Made TileMap coordinate conversion functions always work (#3054) * tBIN plugin: Convert 'color', 'object' and 'file' properties on save * Python plugin: Added Layer.offset and Layer.setOffset (with sverx, #3073) * Python plugin: Linux AppImage now supports Python 3.6 instead of 3.5 * Windows: Add a default "Open in text editor" command based on notepad.exe * Fixed possible crash in Properties view when switching files * Fixed watching/unwatching of folders when adding/removing from project (#3035) * Fixed determining desired file format by extension on export * Fixed compilation issue with GCC 10 (#3037) * Updated Bulgarian, Portuguese (Portugal), Russian and Turkish translations ### Tiled 1.6.0 (23 April 2021) * Added object selection preview * Added toggle to select enclosed rather than touched objects (#3023) * Added Sentry crash handler to Linux AppImage (disabled by default) * Added %tileid variable for custom commands on tilesets (#3026) * Added option to lock the position of views and tool bars * Added toggle to show/hide other maps in the same world (#2859) * Added a helpful text to Terrain Sets view when it is empty (#3015) * Allow opening projects from the File menu (#3000) * Made the terrains list in the Terrain Sets view not collapsible (#3015) * Automatically select the first terrain when selecting a Terrain Set (#3015) * When duplicating objects, place the duplicates next to the originals (#2998) * Tweaked selection outlines to be a little fatter and adjust to DPI * Write --export-formats output to stdout instead of stderr (#3002) * Allow hiding objects in the Tile Collision Editor * Scripting: Added missing Tileset.transparentColor property * Fixed 'Detach templates' export option to add tilesets when needed * Fixed Terrain Brush behavior on map edges * Fixed Terrain Brush behavior for sets transitioning to nothing * Fixed loss of edit focus when hovering tileset while assigning terrain (#3015) * Fixed shortcuts for flipping or rotating the current terrain pattern * Fixed switching to Terrain Brush when clicked terrain is already selected (#3015) * Fixed state of "dynamic wrapping" toggle button on startup * Fixed parallax layer positioning when reordering layers (#3009) * Windows: Fixed Swedish translation missing from installer * Windows: Re-enabled code signing by SignPath (was missing for Tiled 1.5) * snap: Added 'removable-media' plug, for accessing USB drives * snap: "Open Containing Folder" action now also selects the file * JSON plugin: Write out "version" property as string (#3033) * YY plugin: Fixed plugin loading issue for qmake builds * libtiled-java: Optimized for multithreaded usage (by Samuel Manflame, #3004) * Updated Bulgarian, French, Portuguese (Portugal), Swedish and Turkish translations * Added Thai translation (by Thanachart Monpassorn, currently at 54%) ### Tiled 1.5.0 (23 March 2021) * Unified Wang and Terrain tools (backwards incompatible change!) * Added support for a per-layer parallax scrolling factor ([#2951](https://github.com/mapeditor/tiled/pull/2951)) * Added export to GameMaker Studio 2.3 ([#1642](https://github.com/mapeditor/tiled/issues/1642)) * Added option to change object selection behavior ([#2865](https://github.com/mapeditor/tiled/pull/2865)) * Added Monospace option to the multi-line text editor * Added option to auto-scroll on middle click * Added smooth scrolling option for arrow keys * Added a 'Convert to Polygon' action for rectangle objects * Added support for drawing with a blob tileset * Added 'Duplicate Terrain Set' action * Added Terrain Set type (Corner, Edge or Mixed) * Added support for rotating and flipping Terrain tiles (by Christof Petig, [#2912](https://github.com/mapeditor/tiled/pull/2912)) * Added support for exporting to [RPTools MapTool](https://www.rptools.net/toolbox/maptool/) RpMap files (by Christof Petig, [#2926](https://github.com/mapeditor/tiled/pull/2926)) * Added Ctrl+Shift to toggle Snap to Fine Grid (by sverx, [#2895](https://github.com/bjorn/tiled/pull/2895)) * Eraser: Added Shift to erase on all layers (by Michael Aganier, [#2897](https://github.com/bjorn/tiled/pull/2897)) * Automatically add .world extension to new World files * Shape Fill Tool now displays the size of the current shape ([#2808](https://github.com/mapeditor/tiled/issues/2808)) * Tile Collision Editor: Added action to add an auto-detected bounding box collision rectangle (by Robin Macharg, [#1960](https://github.com/bjorn/tiled/pull/1960)) * Tile Collision Editor: Added context menu action to copy selected collision objects to all other selected tiles (by Robin Macharg, [#1960](https://github.com/bjorn/tiled/pull/1960)) * Tilesets view: Added "Edit Tileset" action to tab context menu * Tilesets view: Added "Add External Tileset" action to tilesets menu * Scripting: Added initial API for creating and modifying Terrain Sets * Scripting: Added API for working with images ([#2787](https://github.com/mapeditor/tiled/pull/2787)) * Scripting: Added API for launching other processes ([#2783](https://github.com/mapeditor/tiled/issues/2783)) * Scripting: Added MapView.center property * Scripting: Added missing Layer.id and Layer.parentLayer properties * Scripting: Enable extending most context menus * Scripting: Fixed reset of file formats on script reload ([#2911](https://github.com/mapeditor/tiled/issues/2911)) * Scripting: Fixed missing GroupLayer and ImageLayer constructors * Scripting: Added default icon for scripted actions * Enabled high-DPI scaling on Linux and changed rounding policy * Remember last file dialog locations in the session instead of globally * Fixed loading extension path from project config (by Peter Ruibal, [#2956](https://github.com/mapeditor/tiled/pull/2956)) * Fixed performance issues when using a lot of custom properties * Fixed storing template instance size when overriding the tile ([#2889](https://github.com/mapeditor/tiled/issues/2889)) * Fixed removal of object reference arrow when deleting target object ([#2944](https://github.com/mapeditor/tiled/issues/2944)) * Fixed updating of object references when layer visibility changes * Fixed map positioning issues in the World Tool ([#2970](https://github.com/mapeditor/tiled/issues/2970)) * Fixed handling of Shift modifiers in Bucket and Shape Fill tools ([#2883](https://github.com/mapeditor/tiled/issues/2883)) * Fixed scrolling speed in Tileset view when holding Ctrl * Fixed issue causing export.target to get written out as "." * Fixed "Repeat last export on save" when using Save All ([#2969](https://github.com/mapeditor/tiled/issues/2969)) * Fixed interaction shape for rectangle objects to be more precise ([#2999](https://github.com/mapeditor/tiled/issues/2999)) * Fixed "AutoMap While Drawing" not applying when using Cut/Delete * Fixed path in AutoMap error message when rules file doesn't exist * Lua plugin: Don't embed external tilesets, unless enabled as export option ([#2120](https://github.com/mapeditor/tiled/issues/2120)) * Python plugin: Added missing values to MapObject.Shape enum ([#2898](https://github.com/bjorn/tiled/issues/2898)) * Python plugin: Fixed linking issue when compiling against Python 3.8 * CSV plugin: Include flipping flags in exported tile IDs * GMX plugin: Take tile object alignment into account * Linux: "Open Containing Folder" action now also selects the file * libtiled-java: Many updates (by Henri Viitanen, [#2207](https://github.com/bjorn/tiled/pull/2207)) * Ported Tiled to Qt 6 (releases still use 5.15 for now) * Updated Bulgarian, Chinese (Simplified), Czech, Finnish, French, Portuguese, Portuguese (Portugal), Russian, Swedish and Turkish translations ### Tiled 1.4.3 (17 November 2020) * Fixed running Tiled on macOS Big Sur (#2845) * Improved error message when adding external tileset * Fixed opening of files in already open instance of Tiled * Fixed crash in Edit Commands dialog (#2914) * Fixed Object Alignment not getting set when reloading a tileset * Tile Collision Editor: Fixed invisible tile for isometric oriented tileset (#2892) * Ignore attempts to replace a tileset with itself * qmake: Support linking to system Zstd on all UNIX-like systems ### Tiled 1.4.2 (5 August 2020) * Reverted the default layer data format back to CSV (was changed to Zstd by accident in 1.4.0) * Added ability to draw lines using click+drag (in addition to click and click) when holding Shift * Improved positioning when adding maps to world via context menu * Disable instead of hide the "Save As Template" action when using embedded tilesets * Made Ctrl turn off snapping if Snap to Fine Grid is enabled (#2061) * Set minimum value of tile width and height to 1 * Fixed Select Same Tile tool behavior for empty tiles * Fixed clickability of the dot in point objects * Fixed adjusting of terrain images when tileset width changes * Worlds: Fixed potential data loss when opening .world file * tmxrasterizer: Added --show-layer option (by Matthias Varnholt, #2858) * tmxrasterizer: Added parameter to advance animations (by Sean Ballew, #2868) * Scripting: Initialize tile layer size to map size upon add (#2879) * Windows installer: Made creation of the desktop shortcut optional * Windows installer: Made the launching of Tiled optional * Updated Qt to 5.12.9 on all platforms except Windows XP and snap releases * snap: Fixed issues with storing the default session (#2852) * snap: Enabled support for Zstandard (#2850) ### Tiled 1.4.1 (25 June 2020) * When opening a .world file, load the world and open its first map * When opening an object template, show it in the Template Editor * Fixed crash on trying to export using the command-line (#2842) * Fixed crash when deleting multiple objects with manual drawing order (#2844) * Fixed potential crash when removing a tileset * Fixed potential scaling happening for maps used as tilesets (#2843) * Fixed positioning of map view when switching between maps in a world * Fixed file dialog start location * Scripting: Fixed issues with absolute file paths on Windows (#2841) * Lua plugin: Fixed syntax used for object properties (#2839) ### Tiled 1.4.0 (17 June 2020) * Added support for projects (#1665) * Added object reference property type (with Steve Le Roy Harris and Phlosioneer, #707) * Added world editing tool for adding/removing and moving around maps in a world (with Nils Kübler, #2208) * Added a quick "Open file in Project" (Ctrl+P) action * Added new Object Alignment property to Tileset (with Phlosioneer, #91) * Added layer tint color (by Gnumaru, #2687) * Added support for using maps as images (with Phlosioneer, #2708) * Added 'Open with System Editor' action for custom file properties (#2172) * Added option to render object names when exporting as image (#2216) * Added 'Replace Tileset' action to Tilesets view * Added shortcut to tooltips for all registered actions * Added automatic reloading of object templates (by Phlosioneer, #2699) * Added 'Clear Console' button and context menu action (#2220) * Added 'Reopen Closed File' (Ctrl+Shift+T) action * Added status bar button to toggle the Console view * Added a border around the tile selection highlight * Switch current tileset tab if all selected tiles are from the same tileset (by Mitch Curtis, #2792) * Made tileset dynamic wrapping toggle persistent * Properties view: Added action for adding a property to context menu (#2796) * Optimized loading of CSV tile layer data (by Phlosioneer, #2701) * Improved map positioning when toggling 'Clear View' * Remember the preferred format used for saving * Normalize rotation values when rotating objects (#2775) * Removed the Maps view (replaced by Project view) * Removed file system hierarchy from Templates view (replaced by Project view) * Fixed potential crash when triggering AutoMap (#2766) * Fixed the status bar placement to be always at the bottom of the window * Fixed potential issue with automatic reloading of files (#1904) * Fixed issue where image layer images cannot be loaded from Qt resource files (by obeezzy, #2711) * GmxPlugin: Added support for layer tint color * Scripting: Assign global variables to console script evaluations (by Phlosioneer, #2724) * Scripting: Added coordinate conversion to TileMap * Scripting: Added support for custom "file" properties * Scripting: Added checks for nullptr arguments (by Phlosioneer, #2736) * Scripting: Added some missing tileset related properties * Scripting: Added FileInfo API with various file path operations (with David Konsumer, #2822) * Scripting: Provide access to registered file formats (by Phlosioneer, #2716) * Scripting: Enabled scripted formats to be used on the command-line * Scripting: Added functions to access inherited properties (by Bill Clark, #2813) * Scripting: Introduced \__filename global value (with konsumer) * Scripting: Fixed ObjectGroup.insertObjectAt to use the index * docs: Clarify "can contain" documentation and error handling (by Phlosioneer, #2702) * docs: Document all optional attributes, update some docs (by Phlosioneer, #2705) * docs: Alphabetize scripting API reference (by Phlosioneer, #2720) * docs: Added missing BinaryFile constructor docs (by Phlosioneer, #2732) * docs: Enabled Algolia powered search * libtiled-java: Big update to support newer TMX attributes (by Mike Thomas, #1925) * libtiled-java: Fixed writing of the tile type (by Phlosioneer, #2704) * libtiled-java: Enable loading of maps from jar files (by Adam Hornáček, #2829) * Updated Bulgarian, Chinese (Simplified), Czech, Finnish, French, Norwegian Bokmål, Portuguese (Portugal) and Turkish translations ### Tiled 1.3.5 (27 May 2020) * Fixed initialization and restoring of map view (#2779) * Fixed skewed tile terrain/Wang overlays for non-square tiles (#1943) * Fixed link color on dark theme * Fixed small issue when right-clicking embedded tileset tab * Fixed Wang Sets toggle to also appear in the Tileset menu * Scripting: Fixed issue when closing/comitting BinaryFile (#2801) * Scripting: Fixed "Safe writing of files" when writing with TextFile * Updated Qt to 5.12.8 on all platforms except Windows XP and snap releases * Small translation updates to Bulgarian, French and Portuguese ### Tiled 1.3.4 (14 April 2020) * Fixed automatic reload issues when editing object types (regression in 1.3.1, #2768) * Scripting: Added methods to get tileset's image size (backported from 1.4, #2733) * Scripting: Fixed map.tilesets when 'Embed tilesets' is enabled * Fixed the "Fix Tileset" button in the Template Editor * macOS: Disabled unified tool bar to avoid repainting issues (#2667) * macOS and Linux: Updated Qt from 5.12.6 to 5.12.7 ### Tiled 1.3.3 (3 March 2020) * Fixed loading of compression level * Fixed default value for Hex Side Length property * Fixed hiding of status bar text for some tools * Fixed removing of object labels when removing a group layer * GmxPlugin: Fixed compatibility with GameMaker 1.4.9999 * Scripting: Made TextFile.commit and BinaryFile.commit close as well * Scripting: Fixed crashes when modifying certain new objects * Scripting: Fixed potential crash in Asset.macro/undo/redo/isModified * Scripting: Fixed potential crash when accessing Tool.preview * Scripting: Fixed loading of images from extensions folder * Scripting: Reload extensions also when files are added/removed * Updated Bulgarian translation (by Любомир Василев) ### Tiled 1.3.2 (22 January 2020) * Fixed initialization of selected layers (#2719) * Fixed stamp action shortcuts not being configurable (#2684) * Fixed the tileset view to respect the 'wheel zooms by default' preference * Fixed insertion position when using drag-n-drop to rearrange layers * Fixed displayed layer data format in Properties * Fixed repeating of export when map is saved by a custom command (#2709) * Fixed issue when multiple worlds are loaded that use pattern matching * Issues view can now be hidden by clicking the status bar counters * macOS: Fixed black toolbar when enabling OpenGL rendering (#1839) * Windows: Fixed context menus activating first item on release (#2693) * Windows installer: Include the 'defoldcollection' plugin (#2677) * libtiled: Avoid inheriting Properties from QVariantMap (#2679) * docs: Added some notes to Python and JavaScript pages (#2725) * Updated Qt from 5.12.5 to 5.12.6 * Updated Finnish translation (by Tuomas Lähteenmäki and odamite) * Updated part of Italian translation (by Katia Piazza) ### Tiled 1.3.1 (20 November 2019) * Added reloading of object types when changed externally (by Jacob Coughenour, #2674) * Added a status bar to the startup screen * Made the shortcuts for the tools configurable (#2666) * Made Undo/Redo shortcuts configurable (#2669) * Fixed importing of keyboard settings (.kms files) (#2671) * Fixed small window showing up on startup for a split second * Windows: Fixed the shipped version of OpenSSL (fixes new version notification) * Tiled Quick: Don't compile/install by default (#2673) ### Tiled 1.3.0 (13 November 2019) * Added support for extending Tiled with JavaScript (#949) * Added error and warning counts to the status bar * Added Issues view where you can see warnings and errors and interact with them * Added configuration of keyboard shortcuts (#215) * Added status bar notification on new releases (replacing Sparkle and WinSparkle) * Added option to show tile collision shapes on the map (#799) * Added switching current layer with Ctrl + Right Click in map view * Added search filter to the Objects view (#1467) * Added icons to objects in the Objects view * Added dynamic wrapping mode to the tileset view (#1241) * Added a \*.world file filter when opening a world file * Added support for .world files in tmxrasterizer (by Samuel Magnan, #2067) * Added synchronization of selected layers and tileset when switching between maps in a world (by JustinZhengBC, #2087) * Added actions to show/hide and lock/unlock the selected layers * Added toggle button for "Highlight Current Layer" action * Added custom output chunk size option to map properties (by Markus, #2130) * Added support for Zstandard compression and configurable compression level (with BRULE Herman and Michael de Lang, #1888) * Added option to minimize output on export (#944) * Added export to Defold .collection files (by CodeSpartan, #2084) * Added a warning when custom file properties point to non-existing files (#2080) * Added shortcuts for next/previous tileset (#1238) * Added saving of the last export target and format in the map/tileset file (#1610) * Added option to repeat the last export on save (#1610) * Added Fit Map in View action (by Mateo de Mayo, #2206) * Tile Collision Editor: Added objects list view * Changed the Type property from a text box to an editable combo box (#823) * Changed animation preview to follow zoom factor for tiles (by Ruslan Gainutdinov, #2050) * Changed the shortcut for AutoMap from A to Ctrl+M * AutoMapping: Added "OverflowBorder" and "WrapBorder" options (by João Baptista de Paula e Silva, #2141) * AutoMapping: Allow any supported map format to be used for rule maps * Python plugin: Added support for loading external tileset files (by Ruin0x11, #2085) * Python plugin: Added Tile.type() and MapObject.effectiveType() (by Ruin0x11, #2124) * Python plugin: Added Object.propertyType() (by Ruin0x11, #2125) * Python plugin: Added Tileset.sharedPointer() function (#2191) * tmxrasterizer: Load plugins to support additional map formats (by Nathan Tolbert, #2152) * tmxrasterizer: Added rendering of object layers (by oncer, #2187) * Fixed missing native styles when compiled against Qt 5.10 or later (#1977) * Fixed file change notifications no longer triggering when file was replaced (by Nathan Tolbert, #2158) * Fixed layer IDs getting re-assigned when resizing the map (#2160) * Fixed performance issues when switching to a new map in a world with many maps (by Simon Parzer, #2159) * Fixed restoring of expanded group layers in Objects view * Fixed tileset view to keep position at mouse stable when zooming (#2039) * libtiled-java: Added support for image layers and flipped tiles (by Sergey Savchuk, #2006) * libtiled-java: Optimized map reader and fixed path separator issues (by Pavel Bondoronok, #2006) * Updated builds on all platforms to Qt 5.12 (except snap release) * Raised minimum supported Qt version from 5.5 to 5.6 * Raised minimum supported macOS version from 10.7 to 10.12 * Removed option to include a DTD in the saved files * Removed the automappingconverter tool * snap: Updated from Ubuntu 16.04 to 18.04 (core18, Qt 5.9) * Updated Chinese, Portuguese (Portugal), Turkish and Ukrainian translations ### Tiled 1.2.5 (9 October 2019) * Fixed exporting to a file name containing multiple dots (#2149) * Fixed possible crash in AutoMapper (#2157) * Fixed crash when unloading certain plugins * Fixed duplicated entries in Objects view after grouping layers * Fixed adjacent maps within a world not being properly clickable * Fixed empty maps within a world not being clickable * Fixed handling of negative multiplierX/Y in a world file ### Tiled 1.2.4 (15 May 2019) * Fixed view boundaries to take into account layer offsets (#2090) * Fixed map size when switching infinite off (#2051) * Fixed the image cache to check file modification time (#2081) * Fixed updating a few things when changing tileset drawing offset * Fixed position of tile object outline on isometric maps * Fixed saving of tile stamps when using the Shape Fill Tool * tBIN plugin: Fixed loading of some tilesets on Linux * tBIN plugin: Fixed possible crash when images can't be found (#2106) * Python plugin: Disable this plugin by default, to avoid crashes on startup (#2091) * JSON plugin: Fixed writing of position for objects without ID * Added Swedish translation (by Anton R) ### Tiled 1.2.3 (12 March 2019) * Fixed cut/copy in Tile Collision Editor (#2075) * Fixed crash when trying to add Wang colors without a selected Wang set (#2083) * tBIN plugin: Fixed hang when locating missing tileset image (#2068) * CSV plugin: Fixed exporting of grouped tile layers ### Tiled 1.2.2 (29 January 2019) * Added 'json1' plugin that exports to the old JSON format (#2058) * Enable the adding of point objects in Tile Collision Editor (#2043) * Reload AutoMapping rules when they have changed on disk (by Justin Zheng, #1997) * Fixed remembering of last used export filter * Fixed label color to update when object layer color is changed (by Justin Zheng, #1976) * Fixed stamp and fill tools to adjust when tile probability is changed (by Justin Zheng, #1996) * Fixed misbehavior when trying to open non-existing files * Fixed mini-map bounds when layer offsets are used in combination with group layers * Fixed Templates view missing from the Views menu (#2054) * Fixed Copy Path / Open Folder actions for embedded tilesets (#2059) * Python plugin: Made the API more complete (#1867) * Updated Chinese, German, Korean, Norwegian Bokmål, Portuguese (Portugal) and Ukrainian translations ### Tiled 1.2.1 (14 November 2018) * Fixed JSON templates not being visible in Templates view (#2009) * Fixed Maps view to show all readable map formats * Fixed crash when deleting a command using the context menu (by Robert Lewicki, #2014) * Fixed crash after a world file failed to load * Fixed Select None action to be enabled when there is any selection * Fixed disappearing of tile types on export/import of a tileset (#2023) * Fixed tool shortcuts when using Spanish translation * Fixed saving of the "Justify" alignment option for text objects (#2026) * Changed Cut, Copy and Delete actions to apply based on selected layer types * Windows: Updated builds to Qt 5.9.7 * Updated Russian translation (by Rafael Osipov, #2017) ### Tiled 1.2.0 (19 September 2018) * Added multi-layer selection, including multi-layer tile layer editing * Added support for multi-map worlds (#1669) * Added ability to extend existing polylines (with Ketan Gupta, #1683) * Added option to highlight the hovered object (#1190) * Added news from website to the status bar (#1898) * Added option to show object labels for hovered objects * Added option to embed tilesets on export (#1850) * Added option to detach templates on export (#1850) * Added option to resolve object types and properties on export (#1850) * Added Escape for switching to the Select Objects tool and for clearing the selection * Added Escape to cancel the current action in all object layer tools * Added double-click on polygon objects to switch to Edit Polygons tool * Added interaction with segments for polygons, for selection and dragging * Added double-clicking a polygon segment for inserting a new point at that location * Added action to lock/unlock all other layers (by kralle333, #1883) * Added --export-tileset command line argument (by Josh Bramlett, #1872) * Added unique persistent layer IDs (#1892) * Added 'version' and 'tiledversion' to external tileset files * Added full paths to Recent Files menu as tool tips (by Gauthier Billot, #1992) * Create Object Tools: Show preview already on hover (#537) * Objects view: Only center view on object on press or activation * Objects view: When clicking a layer, make it the current one (by kralle333, #1931) * Unified the Create Polygon and Create Polyline tools * JSON plugin: Made the JSON format easier to parse (by saeedakhter, #1868) * Tile Collision Editor: Allowed using object templates * Templates view: Don't allow hiding the template object * Python plugin: Updated to Python 3 (by Samuli Tuomola) * Python plugin: Fixed startup messages not appearing in debug console * Python plugin: Fixed file change watching for main script files * Lua plugin: Include properties from templates (#1901) * Lua plugin: Include tileset column count in export (by Matt Drollette, #1969) * tBIN plugin: Don't ignore objects that aren't perfectly aligned (#1985) * tBIN plugin: Fixed "Unsupported property type" error for newly added float properties * Automapping: Report error when no output layers are found * AutoMapping: Changed matching outside of map boundaries and added 'MatchOutsideMap' option * Linux: Modernized the appstream file (by Patrick Griffis) * libtiled: Allow qrc-based tileset images (#1947) * libtiled-java: Fixed loading maps with multiple external tilesets * Optimized deletion of many objects (#1972) * Make Ctrl+Q work for quitting also on Windows (#1998) * Fixed randomizing of terrain, Wang tiles and stamp variations (#1949) * Fixed tilesets getting added to maps when they shouldn't be (#2002) * Fixed issue with default font size in combination with custom family (#1994) * Fixed the tile grid to render below labels, handles and selection indicators * Fixed confirming overwrite when exporting a tileset * Fixed reading of infinite maps that don't use chunked layer data * Updated Bulgarian, Dutch, French, German, Norwegian Bokmål, Portuguese (Portugal) and Turkish translations ### Tiled 1.1.6 (17 July 2018) * Fixed Terrain Brush issue on staggered isometric maps (#1951) * Fixed objects to stay selected when moving them between layers * Fixed small tab bar rendering issue on high DPI displays * Fixed rendering of arrows on scroll bar buttons * Fixed object labels to adjust properly to the font DPI * Fixed resize handle locations for multiple zero-sized objects * Fixed handling of arrow keys on focused layer combo box (#1973) * Tile Collision Editor: Fixed handling of tile offset (#1955) * Tile Collision Editor: Fixed potential crash on Undo (#1965) * Python plugin: Added some missing API to the Cell class * Windows and Linux: Downgraded builds to Qt 5.9 (fixes #1928) * macOS: Fixed library loading issues for tmxrasterizer and terraingenerator * macOS: Downgraded to Qt 5.6 (fixes resizing of undocked views and reduces minimum macOS version to 10.7) * Updates to German, Hungarian, Norwegian Bokmål, Polish, Portuguese (Portugal), Russian and Ukrainian translations ### Tiled 1.1.5 (25 April 2018) * Fixed erasing mode of the Terrain Brush * Fixed crash after editing a template * Fixed rendering of eye/lock icons in Layers view * Fixed object index when undoing Move Object to Layer action (#1932) * Fixed shortcuts for flipping and rotating objects (#1926) * Fixed dynamic retranslation of tools and tool actions * Fixed possible crash when undoing/redoing Wang color changes * Fixed handling of sub-properties in Object Type Editor (#1936) * Fixed crash when deleting an object right before dragging it (#1933) * Adjust Wang tile data when tileset column count changes (#1851) * Improved fill behavior in case of selection on infinite map (#1921) * Removed ability to hide tile collision objects (#1929) * Remove tile collision layer along with the last object (#1230) * JSON plugin: Made the reader more strict about object types (#1922) * JSON plugin: Added support for Wang sets ### Tiled 1.1.4 (28 March 2018) * Fixed exporting of external tilesets to JSON or TSX formats * Fixed problem with embedding or exporting tilesets with Wang sets * Fixed tiles placed by the terrain tool being considered different (#1913) * Fixed text alignment values appearing at random in Properties view (#1767) * macOS: Fixed eye/lock icon display in Layers view * Re-enabled Space for toggling layer visibility * Migrate properties set on tile collision layer to the tile (#1912) * Don't reset stamp brush state when pressing Alt * Automapping: Apply rules to selected area when there is one * Windows and Linux: Updated builds to Qt 5.10.1 * Linux: Indicate Tiled can open multiple files at once in desktop file * Lowered the minimum supported version of Qt to 5.5 ### Tiled 1.1.3 (6 March 2018) * Fixed crash when removing a tileset referenced by multiple objects * Fixed crash on paste when it introduced more than one new tileset * Fixed Invert Selection for non-infinite maps * Fixed Select All to not select objects on locked layers * Fixed logic determining the tilesets used by a tile layer * Fixed copy/paste changing object order (#1896) * Fixed tileset getting loaded twice when used by the map and a template * Fixed repainting issues on undo/redo for new maps (#1887) * JSON plugin: Fixed loading of infinite maps using CSV tile layer format (#1878) * Linux: Updated AppImage to Qt 5.9.4 * Updated Hungarian, Japanese, Norwegian Bokmål, Portuguese and Ukrainian translations ### Tiled 1.1.2 (31 January 2018) * Fixed possible crash while editing polygons * Fixed hang when loading map file with empty compressed layer data * Fixed selection of tile stamp to work on mouse click * Fixed tools not being up to date on modifier keys after activation * Fixed "Offset Map" action for infinite maps (#1866) * Templates view: Keep template centered when resizing view * Tile Collision Editor: Keep tile centered when resizing view * Tile Collision Editor: Display tool info text in status bar * JSON plugin: Fixed reading of infinite maps (#1858) * libtiled-java: Fixed some bugs (by Henry Wang, #1840) * libtiled-java: Fixed tile offset value not being considered (by digitalhoax, #1863) ### Tiled 1.1.1 (4 January 2018) * Fixed crash on load for template instances of non-tile objects * Windows Installer: Include the Qt SVG image plugin ### Tiled 1.1.0 (3 January 2018) * Added support for infinite maps (by Ketan Gupta, #260) * Added support for Wang tiles and related tools (by Benjamin Trotter) * Added support for reusable object templates (by Mohamed Thabet) * Added working directory setting for custom commands (by Ketan Gupta, #1580) * Added output of custom commands in Debug Console (by Ketan Gupta, #1552) * Added autocrop action based on tile layers (by Ketan Gupta, #642) * Added tool bar with tool-specific actions and settings (by Ketan Gupta, #1084) * Added shape fill tool for filling rectangles or circles (by Benjamin Trotter, #1272) * Added option to lock/unlock a layer (by Ketan Gupta, #734) * Added .xml as possible file extension for TMX files * Added keyboard shortcut for Save All (by Thomas ten Cate) * Added actions to remove a segment from polygon or to split a polyline (by Ketan Gupta, #1685) * Added icon for animation editor in the tileset editor (by Ketan Gupta, #1706) * Added display of flip bits for hovered tile in status bar (#1707) * Added ability to capture tiles while using fill tools (#790) * Added option to have mouse wheel zoom by default (#1472) * Added tab closing actions to context menu, and close by middle-click (by Justin Jacobs, #1720) * Added ability to reorder terrain types (by Justin Jacobs, #1603) * Added a point object for marking locations (by Antoine Gersant, #1325) * Added 'New Tileset' button when no tileset is opened (by Rhenaud Dubois, #1789) * Added 'Open File' button when no file opened (by Rhenaud Dubois, #1818) * Added support for custom input formats and TMX output to the --export-map command-line option * Added island RPG example based on Beach tileset by finalbossblues * Added file-related context menu actions to tileset tabs * Added action to reset to default window layout (by Keshav Sharma, #1794) * Added support for exporting tilesets, including to Lua format (by Conrad Mercer, #1213) * Keep object types sorted alphabetically (by Antoine Gersant, #1679) * Improved polygon node handles and drag behavior * Fixed %executablepath variable for executables found in PATH (#1648) * Fixed Delete key to delete selected polygon nodes when appropriate (by Ketan Gupta, #1555) * Fixed Terrain Brush going wild in some scenarios (#1632) * Fixed the "Embed in Map" checkbox to be persistent (#1664) * Fixed crash when saving two new maps using the same file name (#1734) * Fixed issues caused by paths not being cleaned (#1713) * Fixed suggested file name for tilesets to match the tileset name (by killerasus, #1783) * Fixed selection rectangle's shadow offset when zooming (by Antoine Gersant, #1796) * Fixed save dialog to reopen after heeding the file extension warning (by Antoine Gersant, #1782) * Fixed potential crash when zooming out too much (#1824) * Fixed potential crash after deleting object or group layers * Fixed Object Selection tool clearing selection on double-click * Enabled building with Qbs on macOS, including the Python plugin (by Jake Petroules) * Automapping: Don't fail if an input/inputnot layer isn't found * Automapping: Added a "StrictEmpty" flag to input layers * GMX plugin: Added support for defining views with objects (by William Taylor, #1621) * GMX plugin: Added support for setting scale and origin for instances (#1427) * GMX plugin: Added support for setting the creation code for instances and the map * GMX plugin: Start counting default tile layer depth from 1000000 (#1814) * tBIN plugin: Added read/write support for the tBIN map format (by Chase Warrington, #1560) * libtiled-java: Generate classes from XSD, some fixes and build with Maven (by Mike Thomas, #1637) * libtiled-java: Added support for manipulating non-consecutive tile IDs in a tileset (by Stéphane Seng) * Python plugin: Adjusted example scripts to API changes (by spiiin, #1769) * Flare plugin: Various changes (by Justin Jacobs, #1781) * TMW plugin: Removed since it is no longer needed * Updated Dutch, Bulgarian, English, French, German, Korean, Norwegian Bokmål, Spanish and Turkish translations ### Tiled 1.0.3 (29 August 2017) * Fixed crash on reload map (#1659, #1694) * Fixed possible crash on undo/redo in collision editor (#1695) * Fixed tile replacement to add tileset when needed (by Mohamed Thabet, #1641) * Fixed the display of the image source property for tilesets * Fixed shortcut for 'Copy tile coordinates' (Alt+C) in Portuguese translation (by olueiro) * JSON plugin: Fixed reading of tileset column count * JSON plugin: Fixed reading of custom properties on tile collision object group ### Tiled 1.0.2 (27 June 2017) * Added read-only tile and terrain properties in map editor (#1615) * Fixed Terrains view to display all tilesets with terrain * Fixed hang when trying to fill with a pasted stamp (#1617, #1624) * Fixed crash when editing collision when tile image wasn't loaded * Fixed rendering of tile objects when the image couldn't be loaded * Fixed rendering of tile object outlines for resized objects * Fixed labels shown on objects hidden via a group layer * Fixed updating of label positions when moving a group layer * GMX plugin: Fixed tile type inheritance for tile objects * Restored Ctrl+N shortcut on "New Map" action ### Tiled 1.0.1 (13 June 2017) * Made the zoom level used in Tilesets view persistent * Fixed mixed up polygon and polyline icons (by Ketan Gupta, #1588) * Fixed reset of font size when using font dialog (#1596) * Fixed several issues with the Properties dock (#1583, #1611) * Fixed centering on object on layer with offset (#1600) * Fixed handling of symbolic links in Recent Files menu and Maps view (#1589) * Fixed labels for objects in grouped object layers * Reverted the file format version back to "1.0" and added "tiledversion" attribute * Lua plugin: Fixed group layers being exported with "imagelayer" type (#1595) * Added Korean translation (by miru2533 and SshipSunBee, #1604) * Updated Russian and Chinese translations ### Tiled 1.0.0 (25 May 2017) * Added support for editing external tilesets (#242) * Added a text object with configurable font and wrapping (#1429) * Added layer grouping (#1038) * Added Tile.type and inherit tile object properties from the tile (#436, #1248) * Added a start page * Added selection of underlying objects with Alt modifier (by Yuriy, #1491) * Added an option to disable safe writing of files (#1402, #1404) * Added invert selection action (by Leon Moctezuma, #1423) * Added support for isometric terrain overlays and tile collision objects (#419, #757) * Added 180-degree mirroring mode to terrain brush with Alt modifier * Added short and consistent map format names to use with --export-map (by Marce Coll, #1382) * Added Swap Tiles action (by Alexander Münch, #866) * Added tileset background color property (#227) * Added 60 degree tile rotation support for hexagonal maps (by Victor Nicolaichuk, #1447) * Added a check for duplicates when adding tiles (by Simião, #1227) * Added option to run commands from menu as well as edit them (by Ketan Gupta, #943) * Added custom shortcuts for commands (by Ketan Gupta, #1456) * Added optional ID and Position columns to objects view (by i-ka, #1462) * Added an executable picker for custom commands (by Ketan Gupta, #942) * Added marching ants effect on selected objects (by Mohamed Thabet, #1489) * Added all open tilesets to the Tilesets view * Added auto-show/hide all views (Clear View) action (by erem2k, #563) * Added minimap in the resizing dialog (by Yuriy, #1516) * Added drag-n-drop support in Layers view (#178) * Added support for storing object type definitions in JSON format (#1313) * Added cut/copy/paste actions for custom properties (#515) * Allow changing the tile of tile objects (by Mohamed Thabet, #409) * Allow selecting a folder to fix multiple broken links at once * Added support for dragging external tilesets into the Tilesets dock * Added support for dragging images into image collection tilesets * Write out Tiled version in TMX/JSON "version" attribute (#1416) * Remember last view on map also for closed files (#905) * Remember tileset zoom level in the tileset editor (by Artem Sharganov, #408) * Change current layer depending on selected objects (by Glavak, #1424) * Improved support for using Tiled on HiDpi screens * Improved the behavior of the tile selection tool * Made Ctrl+D duplicate objects instead of deleting them * Use an eye icon instead of a checkbox for layer visibility (by Ketan Gupta, #1127) * JSON tileset: Save width/height of individual tile images * Linux: Added MIME type for tileset files * Fixed hexagonal rotation of tile stamps (by Bdtrotte, #1476) * Fixed handling of broken tile references, which now render as a red marker * Fixed manual reloading of images for image collection tilesets * Fixed Offset Layers tool to wait until mouse is moved * Fixed current stamp to always update when a tile is clicked * Fixed handling of pinch gestures (#1305) * Fixed flipping a group of objects to work like expected (by Vitek1425, #1475) * Fixed stamp brush to work better on staggered maps (by Bdtrotte) * Fixed objects offsetting while resizing (by Acuion, #1518) * Fixed fill tool for hexagonal maps (#883) * Fixed potential crash in Terrain Brush * Windows: Fixed menus when using OpenGL in full screen mode (#1576) * Windows: Added Sticker Knight and Python example scripts to installer (#819) * Windows: Fixed bringing existing Tiled window to foreground (#1256) * AutoMapping: Fixed object groups always getting added * AutoMapping: Improved map boundary handling (by Stefan Beller, #1224) * AutoMapping: Apply custom properties set on output layers * terraingenerator: Made the amount of columns configurable * terraingenerator: Copy tile properties from the source tilesets * Added Ukrainian translation (by Olexandr Nesterenko) * Added Hungarian translation (by Balázs Úr) * Added Finnish translation (by ekeimaja) * Updated Bulgarian, Dutch, French, German, Russian, Spanish and Turkish translations ### Tiled 0.18.2 (21 February 2017) * Fixed crash when deleting multiple selected objects * Fixed crash when moving multiple selected objects to another object layer * Fixed updating of values displayed in Objects and Layers views * GMX plugin: Added support for image collection tilesets * Object Types Editor: Improved behavior when adding new types * Linux: Fixed shipping of image format plugins in AppImage releases ### Tiled 0.18.1 (23 January 2017) * Fixed terrain brush for isometric staggered maps (by Clyde) * Fixed crash when resizing map causes objects to get removed * Fixed crash when duplicating an object layer * Fixed position of image layer after Resize or Offset Map * Fixed the quality of the minimap on HiDpi displays * Fixed Alt-drag behavior to not override resize handles * When adding a new layer, insert it above the current one * GMX plugin: Fixed positioning for non-tile objects and support scaling * GMX plugin: Export tile objects without a type as tiles * GMX plugin: Support horizontal and vertical flipping * Windows: Fixed encoding problems with command-line output * Windows: Fixed the architecture of shipped MSVC DLLs * Updated Chinese translation (by Clyde) ### Tiled 0.18.0 (20 December 2016) * Added Layer via Copy/Cut actions * Added support for Paste in Place action for tile layers * Added context menu to change custom property type (by Dmitry Hrabrov) * Added support for higher precision for custom floating point properties * Added %mappath variable to commands (by Jack Roper) * Added snapping to pixels (by Mamed Ibrahimov) * Added right-click to clear the tile selection * Added a context menu action to reset the size of tile objects * Added exporter for Game Maker Studio room files (by Jones Blunt) * Added Move Up/Down buttons to Objects view (by iskolbin) * Added pixel coordinates to status bar for object tools (by iskolbin) * Added Sticker Knight platformer example (by Ponywolf) * tmxrasterizer: Added --size argument and support local file URLs * tmxrasterizer: Use smooth pixmap transform by default * Linux: Register tmxrasterizer as thumbnail generator for TMX files * Allow scrolling past map edges with mouse wheel * Enabled HiDpi scaling and improved the quality of some icons * Reversed the order of the objects in the Objects view * JSON plugin: Added Node.js support to the JavaScript export * Updated TMX schema definition (by assofohdz) * Fixed unfinished objects getting saved * Fixed OpenGL rendering mode when application is scaled (HiDpi screens) * Fixed Remove and Rename actions for predefined properties * Windows: Fixed console output * libtiled-java: Use Maven, deploy to OSSRH and code updates (by Mike Thomas) * libtiled-java: Added a basic isometric renderer (by Mike Thomas) * Updated Brazilian Portuguese, Chinese, Czech, Dutch, Hebrew, Norwegian Bokmål and Spanish translations ### Tiled 0.17.2 (28 November 2016) * Fixed bug with editing type and name for multiple objects * Fixed ability to change the image of a tile in an image collection tileset * Fixed wrong layer name getting edited when switching maps * Fixed possible crash when missing tileset images and using tile animations * Compiled against Qt 5.6.2 on macOS to avoid crashes with Qt 5.7 ### Tiled 0.17.1 (4 November 2016) * Fixed wrong alpha value when opening the color picker dialog * Fixed saving of object group color alpha value * Fixed tile id adjustment for newly added tilesets * Fixed "Object Properties" entry in the context menu to be always enabled (by Erik Schilling) * Fixed out-of-sync tile selection during layer offset change (by nykm) * Fixed hidden objects becoming visible when offsetting the map (by ranjak) * Fixed problems with using predefined file properties * Lua plugin: Fixed type of animation frame properties * OS X: Use standard shortcut for toggling full screen * OS X: Fixed compile when pkg-config is present * Windows: Include the Defold plugin * Windows: Added support for DDS, TGA, WBMP and WEBP image formats * Linux: Added 64-bit AppImage (with help from Simon Peter) * Chinese translation updates (by endlesstravel and buckle2000) * French translation updated (by Yohann Ferreira) ### Tiled 0.17.0 (15 August 2016) * Added a platform-independent theme, which can be dark (#786) * Added Paste in Place action for objects (#1257) * Added custom property type 'color' (#1275) * Added custom property type 'file' (#1278) * Added option for removing invisible objects in resize dialog (#1032, by Mamed Ibrahimov) * Added support for editing multi-line string properties (#205) * Added %layername and %objectid to available command variables * Added support for scrolling in tileset view with middle mouse button (#1050, with Will Luongo) * Added a rectangle erase mode to the eraser (#1297) * Added export to Defold .tilemap files (by Nikita Razdobreev) * Added simple full screen mode * Added "Copy File Path" and "Open Containing Folder" actions to tab context menu * Added warning when saving with the wrong file extension * Added color picker for setting transparent color of a tileset (#1173, by Ava Brumfield) * Various object selection tool improvements * Allow creating rectangle/ellipse objects in any direction (#1300) * Enabled nested views and grouped dragging for stacked views (#1291) * Fixed updating object drag cursor when exiting resize handles (#1277) * Fixed tile animations to stay in sync when changing them (#1288) * Fixed preservation of tile meta-data when tileset width is changed (#1315) * Updated Bulgarian, Dutch, German, Norwegian Bokmål, Russian, Spanish and Turkish translations ### Tiled 0.16.2 (7 July 2016) * JSON plugin: Fixed loading of custom properties on terrains * Lua plugin: Fixed missing export of object layer drawing order * Fixed tile index adjustment when tileset image changes width * Fixed --export-map [format] option * Fixed shortcuts for some tools when language is set to Dutch * Fixed a painting related bug affecting the top edge after AutoMapping * Fixed issues when compiling against Qt 5.6 on OS X and Windows * Fixed crash on maximizing with Maps view open on Windows (Qt 5.6.1) * Fixed focus issue while typing predefined object types (Qt 5.6) * Fixed silent fail when saving to restricted location on Windows (Qt 5.6) ### Tiled 0.16.1 (6 May 2016) * Fixed auto-updater not enabled for Windows release * Fixed saving of object IDs assigned to tile collision shapes * Fixed crash when pressing Backspace with Custom Properties section selected * Fixed crash on exit when leaving the Tile Collision Editor open * Added Norwegian Bokmål translation (by Peter André Johansen) * Updated Turkish translation ### Tiled 0.16.0 (28 March 2016) * Added checking for updates, based on Sparkle and WinSparkle * Added default property definitions to object types (with Michael Bickel) * Added types to custom properties: string, float, int, boolean (with CaptainFrog) * Added Properties view to the Tile Collision Editor (by Seanba) * Added a reset button for color properties * Added eraser mode to Terrain Brush and fixed some small issues * Reuse existing Tiled instance when opening maps from the file manager (with Will Luongo) * Allow setting tile probability for multiple tiles (by Henrik Heino) * New MSI based installer for Windows * Optimized selection of many objects * libtiled-java: Fixed loading of maps with CSV layer data that are not square (by Zachary Jia) * Fixed potential crash when having Terrain Brush selected and switching maps * Updated Dutch, French, German, Japanese, Russian and Spanish translations ### Tiled 0.15.2 (6 March 2016) * Added Turkish translation (by Nuri Uzunoğlu) * Fixed hiding of object labels when deleting an object layer * Fixed updating of object label colors when changing object types * TMX: Added image size attributes to image layer images * Updated Brazilian Portuguese translation ### Tiled 0.15.1 (30 January 2016) * Fixed adding/removing object name labels when set to always visible * Fixed a problem with 'Execute in Terminal' on OS X * Fixed mouse coordinate conversion for hexagonal renderer * Fixed image layer offset handling * Update Czech translation ### Tiled 0.15.0 (4 January 2016) * Allow loading maps with broken external references * Allow plugins to be enabled/disabled * Allow changing tileset image parameters * Allow changing the images of tiles in a collection tileset * Allow changing external tileset references * Allow panning over the edges of the map * Added Terrain Generator tool * Added column count property to image collection tilesets * Added a combo box for changing the current layer to the status bar * Moved the AutoMapping while drawing toggle into the menu * Removing tiles from collection tilesets no longer changes tile IDs * Unified layer offset handling * Default tile layer data format changed to CSV * Deprecated pure XML and Gzip-compressed tile layer data formats * Fixed random tile picker for tiles with zero probability (by Henrik Heino) * Fixed saving of alpha value of the map background color * Fixed crash in tmxrasterizer and tmxviewer * Fixed tmxrasterizer not reporting write errors * Fixed isometric rendering bug with odd tile heights (by Ryan Schmitt) * Updated Bulgarian, Dutch, French, German, Japanese, Russian and Spanish translations ### Tiled 0.14.2 (12 October 2015) * Added Polish translation (by Tomasz Kubiak) * Fixed layer offsets missing in the Lua export * Fixed JSON tileset format missing in 'Add External Tileset' action * Fixed language selection entries for Portuguese * Fixed an issue with copy/pasting when using image collection tilesets * Updated Brazilian Portuguese translation ### Tiled 0.14.1 (28 September 2015) * Added missing 'renderorder' property to the Lua export * Fixed editing of properties of tiles captured from the map ### Tiled 0.14.0 (21 September 2015) * Added support for custom external tileset formats (JSON format added) * Added support for shifting layers by some distance in pixels * Added back object name labels in a much improved form * Added tile stamp variation support to the fill tool * Synchronize tileset selection when capturing tiles from the map * Change tile in collision and animation editors based on selected tile object * Keep the active brush when switching maps * Python plugins can now add export-only map formats * Fixed updating of current tile when changing map * Fixed animated tile overlay to look less odd in some cases * Fixed Save As dialog popping up when saving fails * Fixed tilesets view collapsing when switching maps on OS X * Updated Russian, Spanish, Czech, French, Japanese, German, Dutch and Bulgarian translations ### Tiled 0.13.1 (6 September 2015) * Added Bulgarian translation (by Lyubomir Vasilev) * Updated Spanish, French and Dutch translations ### Tiled 0.13.0 (10 August 2015) * Added persistent Tile Stamps with support for variations (#969) * Added Select Same Tile tool (by Mamed Ibrahimov) * Added option to disable opening of last files on startup (by Mamed Ibrahimov) * Added tilecount property to TMX, JSON and Lua map formats (#806) * Added tileset properties to Properties view, as read-only (by Mamed Ibrahimov) * Added Save All action (by Mamed Ibrahimov) * Added translation of command line messages (by Mamed Ibrahimov) * Added menu item linking to online documentation * Object selection outlines are now drawn on top of everything * Select new objects after they have been created * Made the starting point for polylines and polygons visible * Use the tile probability property also in random mode * Ungrouped position and size properties (#892) * CSV plugin: Extended to export all tile layers (by Alejandro Cámara) * Lua and JSON plugins: Added support for layer data compression * Fixed crash when changing flipping flag for multiple objects (by Mamed Ibrahimov) * Fixed Ctrl+T causing a crash when no maps are open * Fixed availability of 'Execute in Terminal' command on Linux with Qt 5 * Fixed drag object mouse cursor to appear only when it should * Fixed selected file format when doing Save As with a non-TMX map * Fixed problems with infinate scaling factors when resizing objects * Require at least Qt 5.1.0 * Require compiler support for C++11 * Updated Russian, German, Czech and Italian translations ### Tiled 0.12.3 (1 June 2015) * Fixed updating of map view when rotating objects with Z key * Fixed updating of map view when joining, splitting or deleting polygon nodes * Fixed a crash when reading an invalid TMX file * Fixed live automapping updates when moving the mouse fast * Made Backspace work for deleting collision objects and animation frames ### Tiled 0.12.2 (22 May 2015) * Fixed updating of map view when moving objects with arrow keys * Fixed compatibility issue with tile objects affecting the JSON format ### Tiled 0.12.1 (19 May 2015) * Fixed updating of map view when changing objects from properties view * Fixed updating of Properties view while objects are moved/resized * Fixed terrain information getting lost when reading JSON maps ### Tiled 0.12.0 (14 May 2015) * Added support for resizing any object as well as multiselection (with mauve) * Added Control modifier for preserving aspect ratio while resizing * Added Shift modifier for resizing with origin in the middle * Added Alt modifier for suppressing selection changes when starting to drag * Added a Magic Wand selection tool (by Henry Jia) * Added tile probability attribute to tile properties view * Added a Donate button to the About dialog * Added a Patreon dialog to the Help menu * Added an --export-formats command line option * Remember the directory used for external tilesets (by Henry Jia) * Don't set a window icon on Mac OS X * Changed the way tile probability is applied (now it's relative) * Fixed a crash in the terrain brush * Fixed object selection behavior when Shift is held while clicking on nothing * Fixed grid snapping being applied for staggered maps even when not enabled * Fixed infinite memory allocation loop on invalid tile size in TMX file * Fixed file icon associated with TMX files on Windows * Fixed automapping of tile objects (by Seanba) * Fixed 'Export as Image' to handle out of memory errors * Fixed TMX files to be written in native line endings * Fixed .desktop file missing %f argument for passing files (by Ying-Chun Liu) * Fixed cursor position resetting when editing object type * Added Arabic (Algeria) translation (by Damene Abdelkader) * Updated, Czech, Dutch, French, German, Italian, Japanese, Portuguese, Russian and Spanish translations ### Tiled 0.11.0 (11 January 2015) * Added support for hexagonal maps (offset coordinates) * Added 'Export' action to repeat the last export * Added a shortcut for the Reload action (Ctrl+R) * Added ability to rename custom properties (by arn00d) * Added unique IDs to objects (by Mark van Rij) * Added a CSV export plugin * Added visual feedback when properties differ between multiple selected objects (by Parker Miller) * Added command-line export (by Brandon Dillon) * Allow dynamically changing the map orientation and grid size * Suppress the standard main window context menu in the collision editor * Lua plugin: Write out tile terrain information * Lua plugin: Include Tiled version in exported file * Flare plugin: Fixed ability to open maps with absolute paths * Fixed grid rendering for staggered maps * Fully support building and running Tiled with Qbs * Updated Czech, Dutch, French, German, Italian, Japanese, Portuguese and Spanish translations ### Tiled 0.10.2 (23 October 2014) * Fixed hit area for polygon nodes when editing polygons while zoomed in or out * Fixed another possible crash in the orthogonal renderer * Fixed Select All action to work for object layers * Fixed map pixel size preview for staggered maps * Fixed repainting issues when tiles extend beyond their layer boundaries * Fixed repainting issues when using tiles smaller than the grid size * Display errors non-modal when applying automatic automapping rules * Flare plugin: Fixed coordinate format for import and export (by Justin Jacobs) * Lua plugin: Write out Image layer position * Small updates to the Italian translation (by Omnomnobot) ### Tiled 0.10.1 (21 September 2014) * Fixed a crash that could happen when using the terrain tool * Fixed missing background color information from Lua export * Allow using up to 3 or 4 GB RAM on 32 or 64 bit Windows systems respectively ### Tiled 0.10.0 (14 September 2014) * Added object rotation (sponsored by Ben Wales) * Added support for explicit object ordering (sponsored by Ben Wales) * Added new Properties window with a rewritten properties editor * Added support for writing plugins in Python (by Samuli Tuomola) * Added image collection tilesets (sponsored by Jamie Rocks) * Added map file watching and automatic reloading (sponsored by FlatRedBall.com) * Added support for moving objects with arrow keys (sponsored by Ben Wales) * Added a 'snap to fine grid' option (by Xenodora) * Added support for JavaScript (JSONP) load/save (by Dobes Vandermeer) * Added more zoom levels (by Joel Leclerc) * Added shortcuts for finishing and canceling object creation * Added a tile collision editor for defining collision shapes on tiles * Added a tile animation editor and play defined animations * Allow changing properties of multiple objects/tiles simultanously (by Parker Miller) * Added tile rendering-order map property (by Lennert Raesch) * Added support for changing the object line width * Added support for CSV-encoded layers to libtiled-java (by Alexei Bratuhin) * Added support for ellipse and polygon objects to libtiled-java (by Hendrik Brummermann) * Added terrain properties to JSON export (by Dennis Hostetler) * Added support for moving image layers in the Properties window (by Michael Aquilina) * Added option to include background image when saving as image (by Sean Humeniuk) * Added options to control layer visibility to tmxrasterizer (by Nathan Tolbert) * Added display of tile ID in status bar (by Champi080) * Added support for objects on staggered isometric maps (by Remco Kuijper) * Added support for staggered maps to tmxviewer and tmxrasterizer * Added a tool for moving the image of an image layer (by Mattia Basaglia) * Added button to the tileset dock as shortcut to add a tileset (by Erik Schilling) * Allow changing order of open document tabs (by Sean Humeniuk) * Changed object position and size units from tiles to pixels (by mauve) * Allow adding multiple tilesets at once (by mauve) * Make highlighted grid cells outside map red (by Sean Humeniuk) * Allow changing the drawing offset of a tileset * Fixed hang on Mac OS X when drawing certain ellipse objects * Fixed removal of polygon/polyline objects when resizing a map * Fixed writing of tile offset in the Lua export * Fixed updating of image layer when changing its image * Fixed start drag distance check when editing polygons and moving objects * Fixed console output of tmxrasterizer on Windows * Raise the Layers dock for editing a new layer's name * Avoid saving truncated files when compiled against Qt 5.1 or higher (by Erik Schilling) * Made Tiled registering \*.tmx as MIME-type (by Erik Schilling) * Added Traditional Chinese translation (by Yehnan Chiang) * Updated Czech, Dutch, French, German, Russian and Spanish translations ### Tiled 0.9.1 (27 July 2013) * Added saving of map background to JSON format (by Petr Viktorin) * Added saving of terrain information to JSON format (by Petr Viktorin) * Object Selection tool now always start selecting objects when holding Shift * Increased maximum for tileset margin and spacing to 9999 * Some updates to libtiled-java (by Oskar Wiksten) * Install the automappingconverter application (relevant on Linux) * Avoid using Windows 95 style (was used on some Linux desktop environments) * Removed layer name checks from the Flare export plugin (by Stefan Beller) * Double-clicking an object now opens the Object Properties dialog * Fixed Object Properties dialog not remembering its size * Fixed object drawing order for image saving and mini-map * Fixed some plurals in English translation * Fixed line widths when zooming in Qt 5 * Fixed updating of image layer when its opacity or image is changed * Fixed display of grid in tileset view on certain zoom levels * Fixed save in wrong format after opening a map with plugin (by Mike Hendricks) * Fixed closing Tiled being very slow with many maps * Fixed saving of image layer properties in the Lua format * Fixed escaping of special characters in the Lua format * Fixed handling of relative paths for image layers in the JSON plugin ### Tiled 0.9.0 (27 January 2013) * Added objects dock and per-object visibility toggle (by Tim Baker) * Added maps dock (by Tim Baker) * Added terrain tool for automatic terrain transitions (by Manu Evans) * Added a minimap (by Christoph Schnackenberg) * Added a staggered isometric map renderer, still without object layer support * Added basic image layer support (by Gregory Nickonov and Alexander Kuhrt) * Added display of current layer to the status bar (by Tim Baker) * Added editable combo box for changing the zoom level (by Tim Baker) * Added support for multiple input layers to automapping (by Stefan Beller) * Added option to apply automapping rules while editing (by Stefan Beller) * Added a converter to update old automapping rules (by Stefan Beller) * Added support for objects layers to automapping (by Stefan Beller) * Added support for random mode to the fill tool (by Stefan Beller) * Added Replica Island plugin (by Eric Kidd) * Added option to change the grid color (by Stefan Beller) * Added support for ellipse objects (by devnewton and Christoph Schnackenberg) * Added name labels for objects on isometric maps (by Andrew Motrenko) * Added map property for changing the background color (by Emmanuel Barroga) * Added shortcut to manually reload tilesets (Ctrl-T) (by Michael Williams) * Added toggle for showing tile object outlines * Added support for pinch zooming (by Pierre-David Bélanger) * Added initial (non-GUI) support for individual and/or embedded tile images (by Petr Viktorin) * Added reading support to Flare plugin (by Stefan Beller) * Added a TMX rasterizer command line tool (by Vincent Petithory) * Added man pages and desktop file (by Erik Schilling) * Made the size and position of most dialogs persistent * Respect the original layer data format of a loaded map (by Ben Longbons) * Marked Tiled as high-resolution capable on Mac OS X * Improved handling of external tilesets in Lua export * Reverted tilesets view back to tabs, but with menu button (by Stefan Beller) * Allowed plugins to support multiple file name filters (by Samuli Tuomola) * Allow saving in any format that can also be read (by Stefan Beller) * Fixed eraser skipping tiles when moving fast * Fixed bug in Flare plugin (by Clint Bellanger) * Fixed compile against Qt 5 (by Kenney Phillis) * Fixed resolving of symbolic links while loading map * Fixed a crash that could happen after trying to load a faulty map * Updated Portuguese, Dutch, German, Spanish, Russian, French, Japanese, Chinese, Brazilian Portuguese, Hebrew and Czech translations ### Tiled 0.8.1 (7 May 2012) * Added MacOS X Lion full screen support * Fixed crash that could happen when painting with a pasted stamp * Fixed zoom sensitivity for finer-resolution mouse wheels * Fixed issues when using quickstamps in combination with the fill tool * Fixed stamp tool not to miss tiles when drawing fast * Fixed automapping to work with external tilesets * Fixed crash in automapping when dealing with broken rule files * Fixed object type getting erased on pressing Enter * Changed the license of libtiled-java from LGPL to BSD * Updated Italian and Hebrew translations ### Tiled 0.8.0 (11 December 2011) * Added support for polygon and polyline objects * Added support for tile rotation * Added support for defining the color of custom object types * Added a Delete action to delete selected tiles or objects * Added random mode to the stamp brush * Added Flare export plugin * Added JSON plugin that supports both reading and writing * Added ability to rename tilesets * Added a mode in which the current layer is highlighted * Added support for specifying a tile drawing offset * Added a shortcut to copy the current tile position to clipboard (Alt+C) * Added a command line option to disable OpenGL * Allow custom properties on tilesets * Many automapping improvements * Improved tileset dock to handle a large amount of tilesets better * Made the 'Show Grid' option in the tileset view persistent * Raised the tile size limit in the New Tileset dialog from 999 to 9999 * Correctly handle changes in the width of a tileset image * Worked around a long standing crash bug * Added Russian translation * Updated the German, Japanese, Spanish, Chinese, Czech, Dutch, French and Brazilian Portuguese translations ### Tiled 0.7.1 (27 September 2011) * Select stamp tool when selecting tiles in tileset view * Enable anti-aliasing for OpenGL mode * Small improvement to the Lua export plugin (incompatible!) * Fixed a bug in the Create Object tool * Fixed reading of maps without tilesets but with a tile layer * Fixed position of tile objects to center on the mouse on insertion * Updated the Czech translation ### Tiled 0.7.0 (20 July 2011) * Added support for horizontal and vertical flipping of tiles * Added copy/paste support for objects * Added merge layer down action * Added Show or Hide all Other Layers action * Added actions to select the previous/next layer * Added Crop to Selection action * Added a Lua export plugin * Added Droidcraft plugin to read and export the map files * Added option to turn off grid in the tileset view * Added hand scrolling while holding the spacebar * Made the object context menu available in all object tools * Display tile coordinates also when using object tools * Various improvements to running external commands * Automapping stability and memory consumption improvements * Objects that fall outside of the map on resize are now removed * Fixed problems with watching tilesets multiple times * Fixed several issues related to restoring previously opened files * Updated Brazilian Portuguese, Chinese, German, Spanish, Japanese, Hebrew, Portuguese, Dutch and French translations ### Tiled 0.6.2 (2 May 2011) * Fixed object layers losing their color when resizing the map * Fixed the tabs in the Tilesets dock to use scroll buttons on MacOS X * Fixed window title to update when saving a map with a different name ### Tiled 0.6.1 (3 April 2011) * Added ability to open multiple files at once * Added Ctrl+PageUp/PageDown shortcuts to switch documents * Added an example to show how automatic mapping works * Fixed bugs, crashes and leaks in the automatic mapping feature * Fixed starting point for circles to be the click position * Fixed a memory leak when using lines or circles * Fixed layer opacity to be taken into account when saving as image * Fixed endless loop when tile size is set to 0 * Fixed crash when passing an empty string as command line parameter * Fixed problems with the tileset view after switching documents * Fixed tile objects to be removed when their tileset is removed ### Tiled 0.6.0 (26 January 2011) * Added support for opening multiple maps in one session * Added support for placing tiles as objects * Added automatic mapping feature, allowing placing of tiles based on rules * Added ability to save/restore up to 9 stamps with Ctrl+ * Added an object selection tool, allowing moving/deleting multiple objects * Added ability to run external commands * Added support for drawing lines and ellipses with the stamp brush * Added icons to distinguish tile layers from object layers * Added "Move To Layer" submenu to the context menu of objects * Added option to use hardware rendering based on OpenGL * Added a T-Engine4 map export plugin * Added a simple TMX viewer application (BSD licensed) * Added a New Layer dropdown menu to the layers dock * Added a checkbox that enables snap to grid permanently * Added an initial version of libtiled-java (LGPL licensed) * Added Chinese and Hebrew translations * Allowed dragging an image onto Tiled to add a tileset * Center the map when it is smaller than the map view * Remember the selected layer across restarts * Changed the default layer data format to use zlib rather than gzip * Store the tileset image width and height in the map file * Compile fixes related to linking zlib * Fixed the current stamp to get updated when switching tilesets * Fixed the maximum sizes of the resize map dialog * Fixed build issues when an older version of libtiled is installed * Fixed saving of property when clicking OK while editing on MacOS X * Allow Backspace to delete properties to make it easier on a MacBook * Associate tmx files with Tiled on MacOS X * Changed the license of libtiled from GPL to BSD * Updated Czech, Spanish, German, Brazilian Portuguese, Dutch and French translations ### Tiled 0.5.1 (2 September 2010) * Fixed saving of objects when tile width is different from tile height * Updated Czech translation ### Tiled 0.5.0 (30 June 2010) * Added support for import and export plugins * Added support for external tilesets * Added undo for adding tilesets and ability to remove tilesets * Added error handling to the New Tileset dialog * Added ability to change tileset order by dragging them around * Added option to draw the tile grid when saving as image * Added a context menu and tool buttons to the layer dock * Added Latvian translation * Added an install target to the Makefile * Open local files when they are dropped onto Tiled * Allow changing position and size of objects in the Object Properties dialog * Fixed rendering issues with tiles wider than the tile width of the map * Fixed eraser and fill tool working on invisible layers * Fixed a crash when using some tools when no map is loaded * Fixed compile errors related to detecting static builds * Fixed the Save dialog not suggesting any particular file extension * Updated Japanese, Dutch, German, Brazilian Portuguese, French, Portuguese and Spanish translations ### Tiled 0.4.1 (14 April 2010) * Added support for saving tile layer data as CSV * Added shift modifier to bucket fill tool for filling the selection * Added Brazilian Portuguese, Japanese, French, Italian and Czech translations * Made values used in the New Map and New Tileset dialogs persistent * Fixed drawing selection highlight where brush is not painting * Fixed an incompatibility with Tiled Java in 'trans' attribute ### Tiled 0.4.0 (30 January 2010) * Added support for isometric maps * Added automatic reloading of tileset images when they change * Added Offset Map action that can shift a set of layers by a certain amount * Added a fill tool * Added ability to duplicate map objects * Added support for choosing the tile layer data format used when saving * Added mouse wheel zooming support to the tileset view * Added an object display color attribute to object groups * Added ability to edit tile properties through a context menu * Made writing out a DTD reference optional and disabled it by default * Made translations functional * Updated Dutch, Portuguese, Spanish and German translations ### Tiled 0.3.1 (22 November 2009) * Enabled undo command compression for stamp brush and eraser * Fixed reading of maps with non-binary-encoded layer data * Fixed a compile issue on Mac OS X related to QXmlStreamWriter * Fixed a crash when loading a map while holding Ctrl * Confirm overwrite on the right moment for 'Save as Image' dialog ### Tiled 0.3.0 (13 November 2009) * Added a tile selection tool * Added support for cut, copy and paste * Added current cursor position to the status bar * Added keyboard shortcuts to switch tools * Added scrolling the map view with middle mouse button * Snap objects to the grid when Ctrl is pressed ### Tiled 0.2.0 (1 October 2009) * Added support for zooming the map view * Added an eraser tool that allows you to erase tiles * Added ability to save a map as an image * Added support for masking tileset images based on a certain color * Added a slider to change the opacity of the current layer * Fixed the minimum row and column size in the tileset view * Fixed stamp creation when not dragging topleft to bottomright ### Tiled 0.1.0 (1 September 2009) tiled-1.8.2/README.md000066400000000000000000000110641420372404100141010ustar00rootroot00000000000000Tiled Map Editor - https://www.mapeditor.org/ About Tiled ------------------------------------------------------------------------------- Tiled is a general purpose tile map editor for all tile-based games, such as RPGs, platformers or Breakout clones. Tiled is highly flexible. It can be used to create maps of any size, with no restrictions on tile size, or the number of layers or tiles that can be used. Maps, layers, tiles, and objects can all be assigned arbitrary properties. Tiled's map format (TMX) is easy to understand and allows multiple tilesets to be used in any map. Tilesets can be modified at any time. [![Build Packages](https://github.com/mapeditor/tiled/actions/workflows/packages.yml/badge.svg)](https://github.com/mapeditor/tiled/actions/workflows/packages.yml?query=branch%3Amaster+event%3Apush) [![Build status](https://ci.appveyor.com/api/projects/status/ceb79jn5cf99y3qd/branch/master?svg=true)](https://ci.appveyor.com/project/bjorn/tiled/branch/master) [![Snap](https://snapcraft.io/tiled/badge.svg)](https://snapcraft.io/tiled) [![Translation status](https://hosted.weblate.org/widgets/tiled/-/shields-badge.svg)](https://hosted.weblate.org/engage/tiled/?utm_source=widget) [![Open Source Helpers](https://www.codetriage.com/mapeditor/tiled/badges/users.svg)](https://www.codetriage.com/mapeditor/tiled) About the Qt Version ------------------------------------------------------------------------------- Tiled was originally written in Java. In 2008, work began to develop a faster, better looking, and easier-to-use version of Tiled based on the Qt framework. This decision was made as the Qt framework has a greater feature set than is offered by the standard Java libraries. Compiling ------------------------------------------------------------------------------- Before you can compile Tiled, you must ensure the Qt (>= 5.6) development libraries have been installed as well as the Qbs build tool: * On Ubuntu/Debian: `sudo apt install qt5-default libqt5svg5 qttools5-dev-tools zlib1g-dev qtdeclarative5-dev qtdeclarative5-private-dev qbs` * On Fedora: `sudo dnf builddep tiled` * On Arch Linux: `sudo pacman -S qt qt5-tools qbs` * On macOS with [Homebrew](https://brew.sh/): + `brew install qbs` + `brew link qt5 --force` If you want to build the Python plugin, you additionally need to install the Python 3 development libraries: * On Ubuntu/Debian: `sudo apt install python3-dev` * On Windows: https://www.python.org/downloads/windows/ Alternatively, you can [download Qt here](https://www.qt.io/download-qt-installer). You will still need to install a development environment alongside and some libraries depending on your system, for example: * On Ubuntu/Debian: `sudo apt install build-essential zlib1g-dev libgl1-mesa-dev` * On Windows: Choose "MinGW" Qt version, or install Visual Studio * On macOS: Install Xcode The easiest way to compile and run Tiled is to open `tiled.qbs` in Qt Creator and run the project from there. From the command-line, you may need to set up Qbs before you can build Tiled (you will also need to make sure the version of Qt you want to use is in your path): qbs setup-toolchains --detect # setup toolchains qbs setup-qt --detect # setup Qt (not needed since Qbs 1.13) qbs # build Tiled You can now run Tiled as follows: qbs run -p tiled Qt 6 ------------------------------------------------------------------------------- For compiling libtiledquick you'll need to install the Vulkan headers: * On Ubuntu/Debian: `sudo apt install libvulkan-dev` ### Working with Visual Studio 2017 Once Qbs is set up (see previous instructions), it is possible to generate a Visual Studio 2017 project with it that allows you to code, compile and run using that IDE. This can be done with the following command: qbs generate -g visualstudio2017 Installing ------------------------------------------------------------------------------- To install Tiled, run `qbs install` from the terminal. By default, Tiled will be installed to `/install-root`. The installation prefix can be changed when building Tiled. For example, to use an installation prefix of `/usr`: qbs qbs.installPrefix:"/usr" To install Tiled to a packaging directory: qbs install --install-root /tmp/tiled-pkg By default, Tiled and its plugins are compiled with an Rpath that allows them to find the shared *libtiled* library immediately after being compiled. When packaging Tiled for distribution, the Rpath should be disabled by appending `projects.Tiled.useRPaths:false` to the qbs command. tiled-1.8.2/appveyor.yml000066400000000000000000000111231420372404100152060ustar00rootroot00000000000000clone_depth: 200 version: '1.8.{build}' image: - Visual Studio 2015 - Visual Studio 2019 cache: - C:\Users\appveyor\.m2 - C:\ProgramData\chocolatey\bin -> appveyor.yml - C:\ProgramData\chocolatey\lib -> appveyor.yml environment: BUTLER_API_KEY: secure: j7JM5L6KeqpnQukzJLsm7J6oV92SpmyEZLSoED1pZ3gQ79VIkdxtbQmTkqUNZPsz matrix: - QTDIR: C:\Qt\5.15\msvc2019_64 PYTHONHOME: C:\Python37-x64 DEFAULT_PROFILE: MSVC2019-x64 PUSH_RELEASE: false ENABLE_ZSTD: false - QTDIR: C:\Qt\5.6.3\mingw49_32 PYTHONHOME: C:\Python37 MINGW: C:\Qt\Tools\mingw492_32 DEFAULT_PROFILE: i686-w64-mingw32-gcc-4_9_2 PUSH_RELEASE: true PUSH_SNAPSHOT: true ENABLE_ZSTD: true TILED_ITCH_CHANNEL: winxp-32bit - QTDIR: C:\Qt\5.15\mingw81_64 PYTHONHOME: C:\Python37-x64 MINGW: C:\Qt\Tools\mingw810_64 DEFAULT_PROFILE: x86_64-w64-mingw32-gcc-8_1_0 PUSH_RELEASE: true ENABLE_ZSTD: true TILED_ITCH_CHANNEL: windows-64bit - QTDIR: C:\Qt\5.15\mingw81_32 PYTHONHOME: C:\Python37 MINGW: C:\Qt\Tools\mingw810_32 DEFAULT_PROFILE: i686-w64-mingw32-gcc-8_1_0 PUSH_RELEASE: true ENABLE_ZSTD: true TILED_ITCH_CHANNEL: windows-32bit matrix: exclude: - image: Visual Studio 2015 QTDIR: C:\Qt\5.15\msvc2019_64 - image: Visual Studio 2015 QTDIR: C:\Qt\5.15\mingw81_64 - image: Visual Studio 2015 QTDIR: C:\Qt\5.15\mingw81_32 - image: Visual Studio 2019 QTDIR: C:\Qt\5.6.3\mingw49_32 configuration: Release install: - choco install -y qbs --version 1.21.0 - nuget install secure-file -ExcludeVersion - set PATH=%PATH%;%QTDIR%\bin;%MINGW%\bin build_script: - FOR /F "tokens=*" %%i in ('git describe') do SET COMMITNOW=%%i - if defined APPVEYOR_REPO_TAG_NAME (set TILED_RELEASE=true) else (set TILED_SNAPSHOT=true) - if defined TILED_RELEASE set TILED_VERSION=%APPVEYOR_REPO_TAG_NAME:~1% - if defined TILED_SNAPSHOT set TILED_VERSION=%DATE:~10,4%.%DATE:~4,2%.%DATE:~7,2% - if defined TILED_SNAPSHOT set TILED_MSI_VERSION=%APPVEYOR_BUILD_VERSION% - if defined TILED_SNAPSHOT set TILED_ITCH_CHANNEL=%TILED_ITCH_CHANNEL%-snapshot - if not defined APPVEYOR_PULL_REQUEST_NUMBER if [%APPVEYOR_REPO_BRANCH%]==[snapshot] if defined PUSH_SNAPSHOT set PUSH_TO_ITCH=true - echo Building Tiled %TILED_VERSION% (%TILED_ITCH_CHANNEL%) from %COMMITNOW% - git clone --depth 1 -b master https://github.com/facebook/zstd.git - if defined MINGW cd zstd/lib & set CC=gcc & mingw32-make -j2 libzstd.a & cd ../../ - qbs --version - qbs setup-toolchains --detect - qbs config defaultProfile %DEFAULT_PROFILE% - qbs build config:release projects.Tiled.windowsInstaller:true projects.Tiled.enableZstd:%ENABLE_ZSTD% - cd util\java - mvn --version - mvn clean install - cd ..\.. after_build: - cd release - cd installer* - move tiled-*.msi %APPVEYOR_BUILD_FOLDER% - cd .. - cd archive* - move tiled-*.7z %APPVEYOR_BUILD_FOLDER% - cd ..\.. - if defined PUSH_TO_ITCH dist\win\push-to-itch.bat artifacts: - name: Installer path: 'tiled-*.msi' - name: Archive path: 'tiled-*.7z' deploy: - provider: FTP protocol: sftp host: update.mapeditor.org username: update password: secure: YPoSL+S82PCgS5PYbhtxQv0YD7uwZAX9LhjJBBbDGvk= folder: update.mapeditor.org/snapshots-win artifact: /.*\.(msi|7z)/ on: branch: snapshot push_release: true - provider: Webhook url: https://app.signpath.io/API/v1/670574d6-49bf-4a0c-824a-3ae977077079/Integrations/AppVeyor?ProjectKey=tiled&SigningPolicyKey=test-signing authorization: secure: 4E7IuM1Ftvdkx43gsqI3tUWb6tcvrfKB22sa6DsWaBzT+zv3DqceDCk0qc/JqTO+Er5UQNYwolmWBzMdys6fVA== on: appveyor_repo_tag: false branch: master push_release: true - provider: Webhook url: https://app.signpath.io/API/v1/670574d6-49bf-4a0c-824a-3ae977077079/Integrations/AppVeyor?ProjectKey=tiled&SigningPolicyKey=release-signing authorization: secure: 4E7IuM1Ftvdkx43gsqI3tUWb6tcvrfKB22sa6DsWaBzT+zv3DqceDCk0qc/JqTO+Er5UQNYwolmWBzMdys6fVA== on: branch: snapshot push_release: true - provider: Webhook url: https://app.signpath.io/API/v1/670574d6-49bf-4a0c-824a-3ae977077079/Integrations/AppVeyor?ProjectKey=tiled&SigningPolicyKey=release-signing authorization: secure: 4E7IuM1Ftvdkx43gsqI3tUWb6tcvrfKB22sa6DsWaBzT+zv3DqceDCk0qc/JqTO+Er5UQNYwolmWBzMdys6fVA== on: appveyor_repo_tag: true push_release: true notifications: - provider: Webhook url: https://webhooks.gitter.im/e/6e48d432e0e0dd1b2d22 tiled-1.8.2/dist/000077500000000000000000000000001420372404100135635ustar00rootroot00000000000000tiled-1.8.2/dist/archive.qbs000066400000000000000000000016571420372404100157240ustar00rootroot00000000000000import qbs InstallPackage { builtByDefault: project.snapshot || project.release condition: { return ((project.snapshot || project.release) && qbs.targetOS.contains("windows")); } archiver.type: { if (qbs.targetOS.contains("windows")) return "7zip" else return "tar" } Depends { productTypes: [ "application", "dynamiclibrary", "qm", "installable", ] } property int bits: { if (qbs.architecture === "x86_64") return 64; if (qbs.architecture === "x86") return 32; } targetName: { var baseName = "Tiled-" + project.version; if (qbs.targetOS.contains("windows")) baseName += "-win"; else if (qbs.targetOS.contains("linux")) baseName += "-linux"; return baseName + bits; } } tiled-1.8.2/dist/copr/000077500000000000000000000000001420372404100145265ustar00rootroot00000000000000tiled-1.8.2/dist/copr/build.sh000077500000000000000000000016551420372404100161730ustar00rootroot00000000000000#!/usr/bin/bash BUILDROOT="$(pwd)/tmp-buildroot/" rm -rf $BUILDROOT [ -d buildroot ] || mkdir -p ${BUILDROOT}/{SOURCES,SPECS} pushd $(git rev-parse --show-toplevel) VERSION=$(git describe | sed 's/^v//' | sed 's/-[^-]*$//' | sed 's/-/\./') git archive HEAD --prefix=tiled-$VERSION/ -o ${BUILDROOT}/SOURCES/tiled-$VERSION.tar.gz || exit 1 popd cat tiled.spec | sed "s/^Version:\(.*\)/Version: $VERSION/" > ${BUILDROOT}/SPECS/tiled_tmp.spec rpmbuild --define "_topdir ${BUILDROOT}/" -bs ${BUILDROOT}/SPECS/tiled_tmp.spec || exit 1 pushd ${BUILDROOT} FILE=$(find -name "*.src.rpm") cp $FILE ../tiled.src.rpm popd rm -rf $BUILDROOT if [ "$1" = "srpm-only" ] then echo "Wrote tiled.src.rpm. Exiting." else COPR_CONFIG=" [copr-cli] login = $1 username = $2 token = $3 copr_url = https://copr.fedorainfracloud.org " copr --config <(echo "$COPR_CONFIG") build ablu/tiled-dailies tiled.src.rpm || exit 1 rm tiled.src.rpm fi tiled-1.8.2/dist/copr/tiled.spec000066400000000000000000000227451420372404100165150ustar00rootroot00000000000000%global app_id org.mapeditor.Tiled Name: tiled Version: 0.18.0 Epoch: 1 Release: 1%{?dist} Summary: Tiled Map Editor # tiled itself is GPLv2+, libtiled and tmxviewer are BSD License: GPLv2+ and BSD URL: https://www.mapeditor.org Source0: https://github.com/bjorn/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: pkgconfig(Qt5Core) BuildRequires: qt5-qttools-devel BuildRequires: zlib-devel BuildRequires: desktop-file-utils BuildRequires: python-devel BuildRequires: libappstream-glib %description Tiled is a general purpose tile map editor. It is built to be easy to use, yet flexible enough to work with varying game engines, whether your game is an RPG, platformer or Breakout clone. Tiled is free software and written in C++, using the Qt application framework. This package contains the tiled application and tmxviewer, a simple application to view Tiled maps. %package plugin-python Summary: Python plugin for Tiled License: GPLv2+ URL: https://www.mapeditor.org Requires: %{name} = %{epoch}:%{version}-%{release} %description plugin-python A plugin for tiled which allows to write Python plugins. %define pluginwarning Warning: This plugin does not offer full compatibility with Tileds features. %package plugin-droidcraft Summary: Droidcraft plugin for Tiled License: GPLv2+ URL: https://www.mapeditor.org Requires: %{name} = %{epoch}:%{version}-%{release} %description plugin-droidcraft A plugin for tiled which allows to save maps as .dat droidcraft maps. %{pluginwarning} %package plugin-flare Summary: Flare plugin for Tiled License: GPLv2+ URL: https://www.mapeditor.org Requires: %{name} = %{epoch}:%{version}-%{release} %description plugin-flare A plugin for tiled which allows to save maps as .txt flare maps. %{pluginwarning} %package plugin-replica-island Summary: Replica Island plugin for Tiled License: GPLv2+ URL: https://www.mapeditor.org Requires: %{name} = %{epoch}:%{version}-%{release} %description plugin-replica-island A plugin for tiled which allows to save maps as .bin Replica Island maps. %{pluginwarning} %package plugin-t-engine4 Summary: T-Engine4 plugin for Tiled License: GPLv2+ URL: https://www.mapeditor.org Requires: %{name} = %{epoch}:%{version}-%{release} %description plugin-t-engine4 A plugin for tiled which allows to export maps as .lua T-Engine4 maps. %{pluginwarning} %package plugin-defold Summary: Defold plugin for Tiled License: GPLv2+ URL: https://www.mapeditor.org Requires: %{name} = %{epoch}:%{version}-%{release} %description plugin-defold A plugin for tiled which allows to export maps as .tilemap Defold maps. %{pluginwarning} %package plugin-gmx Summary: GameMaker Studio plugin for Tiled License: GPLv2+ URL: https://www.mapeditor.org Requires: %{name} = %{epoch}:%{version}-%{release} %description plugin-gmx A plugin for tiled which allows to export maps as GameMaker Studio room files. %{pluginwarning} %prep %setup -q # Remove copy of zlib rm -rf src/zlib %build %qmake_qt5 -r PREFIX=%{_prefix} LIBDIR=%{_libdir} RPATH=no USE_FHS_PLUGIN_PATH=yes make %{?_smp_mflags} %install make install INSTALL_ROOT=%{buildroot} # Clean build artefacts find -name ".uic" -or -name ".moc" -or -name ".rcc" | xargs rm -rf # Validate desktop file desktop-file-validate %{buildroot}/%{_datadir}/applications/%{app_id}.desktop # Appdata install -D -p -m644 %{app_id}.appdata.xml %{buildroot}/%{_datadir}/appdata/%{app_id}.appdata.xml appstream-util validate-relax --nonet %{buildroot}/%{_datadir}/appdata/*.appdata.xml # locale files %find_lang %{name} --with-qt # Removed development file (this version does not install headers anyway) rm %{buildroot}/%{_libdir}/lib%{name}.so %post /sbin/ldconfig /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : /usr/bin/update-mime-database %{_datadir}/mime &> /dev/null || : /usr/bin/update-desktop-database &> /dev/null || : %postun /sbin/ldconfig if [ $1 -eq 0 ] ; then /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : fi /usr/bin/update-mime-database %{_datadir}/mime &> /dev/null || : /usr/bin/update-desktop-database &> /dev/null || : %posttrans /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %files -f %{name}.lang %doc AUTHORS NEWS.md README.md COPYING LICENSE.GPL LICENSE.BSD %{_bindir}/%{name} %{_bindir}/terraingenerator %{_bindir}/tmxrasterizer %{_bindir}/tmxviewer %{_datadir}/applications/%{app_id}.desktop %{_datadir}/icons/hicolor/*/apps/*%{name}* %{_datadir}/icons/hicolor/*/mimetypes/*%{name}* %{_datadir}/mime/packages/%{app_id}.xml %{_datadir}/thumbnailers/%{name}.thumbnailer %{_datadir}/appdata/%{app_id}.appdata.xml %dir %{_datadir}/%{name}/ %dir %{_datadir}/%{name}/translations %{_libdir}/lib%{name}.so.* %dir %{_libdir}/%{name}/ %dir %{_libdir}/%{name}/plugins/ # Core plugins %{_libdir}/%{name}/plugins/libcsv.so %{_libdir}/%{name}/plugins/libjson.so %{_libdir}/%{name}/plugins/libjson1.so %{_libdir}/%{name}/plugins/liblua.so %{_mandir}/man1/%{name}.1* %{_mandir}/man1/tmxrasterizer.1* %{_mandir}/man1/tmxviewer.1* %files plugin-python %{_libdir}/%{name}/plugins/libpython.so %files plugin-droidcraft %{_libdir}/%{name}/plugins/libdroidcraft.so %files plugin-flare %{_libdir}/%{name}/plugins/libflare.so %files plugin-replica-island %{_libdir}/%{name}/plugins/libreplicaisland.so %files plugin-t-engine4 %{_libdir}/%{name}/plugins/libtengine.so %files plugin-defold %{_libdir}/%{name}/plugins/libdefold.so %files plugin-gmx %{_libdir}/%{name}/plugins/libgmx.so %changelog * Sun Jan 22 2017 Erik Schilling - 0.18.0-1 - Added subpackage for gmx plugin - New upstream release 0.18.0 * Sun Jul 24 2016 Erik Schilling - 0.17.0-1 - Added subpackage for defold plugin * Tue Apr 19 2016 Erik Schilling - 0.16.0-1 - New upstream release 0.16.0 * Sun Mar 06 2016 Erik Schilling - 0.15.2-1 - New bugfix release 0.15.2 * Fri Feb 05 2016 Fedora Release Engineering - 0.15.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild * Mon Feb 01 2016 Rex Dieter - 0.15.0-2 - use %%qmake_qt5 to ensure proper build flags * Sat Jan 09 2016 Erik Schilling - 0.15.0-1 - New upstream release 0.15.0 * Fri Nov 27 2015 Erik Schilling - 0.14.2-1 - New upstream release 0.14.2 * Mon Sep 21 2015 Erik Schilling - 0.14.0-1 - New upstream release * Tue Sep 08 2015 Erik Schilling - 0.13.1-1 - New upstream release * Sat Aug 15 2015 Erik Schilling - 0.13.0-1 - New upstream release * Fri Jun 19 2015 Fedora Release Engineering - 0.12.3-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild * Tue Jun 2 2015 Erik Schilling - 0.12.3-1 - New upstream release * Fri May 22 2015 Erik Schilling - 0.12.2-1 - New upstream release * Wed May 20 2015 Erik Schilling - 0.12.1-1 - New upstream release * Fri May 15 2015 Erik Schilling - 0.12.0-1 - New upstream release * Sat May 02 2015 Kalev Lember - 0.11.0-2 - Rebuilt for GCC 5 C++11 ABI change * Sun Jan 11 2015 Erik Schilling - 0.11.0-1 - New upstream release * Mon Oct 27 2014 Erik Schilling - 0.10.2-1 - New bugfix release * Mon Sep 22 2014 Erik Schilling - 0.10.1-1 - New bugfix release * Sun Sep 14 2014 Erik Schilling - 0.10.0-1 - New upstream release * Mon Aug 18 2014 Fedora Release Engineering - 0.9.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild * Sun Jun 08 2014 Fedora Release Engineering - 0.9.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild * Sat Mar 15 2014 Erik Schilling - 0.9.1-2 - Fixed detection of plugins on 64bit - Splitted plugins into subpackages * Sat Jul 27 2013 Erik Schilling 0.9.1-1 - New upstream release 0.9.1 * Sat Jan 12 2013 Erik Schilling 0.9.0-1 - New upstream release 0.9.0 - Dropped now obsolete patches and files * Mon Sep 3 2012 Erik Schilling 0.8.1-3 - Fixed preserving of timestamps in install command. - Fixed typo in permission setting. - Talked with upstream about license mismatch in headers. - Those headers were outdated. * Mon Sep 3 2012 Erik Schilling 0.8.1-2 - Added note about which parts are licensed with which license. - Made sure that the copy of zlib inside of the source is removed. - Fixed handling of locales (using %%find_lang). - Avoided plain asterisks in %%files. - Made description clear about containing the tmxviewer. * Sun Sep 2 2012 Erik Schilling 0.8.1-1 - First version for official fedora repos. tiled-1.8.2/dist/distribute.qbs000066400000000000000000000272571420372404100164650ustar00rootroot00000000000000/* Installs all files necessary to run Tiled and other files that should be shipped when Tiled is distributed. */ import qbs import qbs.File import qbs.FileInfo Product { name: "distribute" type: "installable" builtByDefault: (project.snapshot || project.release) && qbs.targetOS.contains("windows") Depends { name: "cpp" } Depends { name: "Qt.core" } Group { name: "Examples" prefix: "../examples/" files: ["**"] qbs.install: true qbs.installDir: "examples" qbs.installSourceBase: prefix } Group { name: "Python Scripts" prefix: "../src/plugins/python/scripts/" files: ["**"] qbs.install: true qbs.installDir: "examples/python" qbs.installSourceBase: prefix } Group { name: "Qt DLLs" prefix: { if (qbs.targetOS.contains("windows")) { return Qt.core.binPath + "/" } else { return Qt.core.libPath + "/lib" } } property string postfix: { var suffix = ""; if (qbs.targetOS.contains("windows") && qbs.debugInformation && Qt.core.versionMajor < 6 && Qt.core.versionMinor < 15) suffix += "d"; return suffix + cpp.dynamicLibrarySuffix; } files: { function addQtVersions(libs) { var result = []; for (i = 0; i < libs.length; ++i) { var lib = libs[i] var major = lib + "." + Qt.core.versionMajor; var minor = major + "." + Qt.core.versionMinor; var patch = minor + "." + Qt.core.versionPatch; if (File.exists(minor)) result.push(minor) if (File.exists(lib)) result.push(lib) result.push(major, patch); } return result; } var list = []; if (!Qt.core.frameworkBuild) { var major = Qt.core.versionMajor; list.push( "Qt" + major + "Core" + postfix, "Qt" + major + "Gui" + postfix, "Qt" + major + "Network" + postfix, "Qt" + major + "Qml" + postfix, "Qt" + major + "Svg" + postfix, "Qt" + major + "Widgets" + postfix ); if (Qt.core.versionMajor >= 6) { list.push( "Qt" + major + "OpenGL" + postfix, "Qt" + major + "OpenGLWidgets" + postfix ); } } if (qbs.targetOS.contains("windows")) { if (Qt.core.versionMajor < 6 && Qt.core.versionMinor < 7 && !(Qt.core.versionMinor == 6 && Qt.core.versionPatch >= 3)) { list.push("icuin54.dll", "icuuc54.dll", "icudt54.dll"); } } else if (qbs.targetOS.contains("linux")) { list = addQtVersions(list); list = list.concat(addQtVersions([ "Qt" + major + "DBus.so", "Qt" + major + "XcbQpa.so", ])) if (File.exists(prefix + "icudata.so.56")) { list.push("icudata.so.56", "icudata.so.56.1"); list.push("icui18n.so.56", "icui18n.so.56.1"); list.push("icuuc.so.56", "icuuc.so.56.1"); } } return list; } qbs.install: true qbs.installDir: qbs.targetOS.contains("windows") ? "" : "lib" } property var pluginFiles: { if (qbs.targetOS.contains("windows")) { if (qbs.debugInformation) return ["*d.dll"]; else return ["*.dll"]; } else if (qbs.targetOS.contains("linux")) { return ["*.so"]; } return ["*"]; } property var pluginExcludeFiles: { var files = ["*.pdb"]; if (!(qbs.targetOS.contains("windows") && qbs.debugInformation)) { // Exclude debug DLLs. // // This also excludes the qdirect2d.dll platform plugin, but I'm // not sure when it would be preferable over the qwindows.dll. In // testing it, it seems to have severe issues with HiDpi screens // (as of Qt 5.8.0). files.push("*d.dll"); } return files; } Group { name: "Qt Icon Engine Plugins" prefix: FileInfo.joinPaths(Qt.core.pluginPath, "/iconengines/") files: pluginFiles excludeFiles: pluginExcludeFiles qbs.install: true qbs.installDir: "plugins/iconengines" } Group { name: "Qt Image Format Plugins" prefix: FileInfo.joinPaths(Qt.core.pluginPath, "/imageformats/") files: pluginFiles excludeFiles: pluginExcludeFiles qbs.install: true qbs.installDir: "plugins/imageformats" } Group { name: "Qt Platform Plugins" prefix: FileInfo.joinPaths(Qt.core.pluginPath, "/platforms/") files: pluginFiles excludeFiles: pluginExcludeFiles qbs.install: true qbs.installDir: "plugins/platforms" } Group { name: "Qt Platform Input Context Plugins" condition: qbs.targetOS.contains("linux") prefix: FileInfo.joinPaths(Qt.core.pluginPath, "/platforminputcontexts/") files: pluginFiles qbs.install: true qbs.installDir: "plugins/platforminputcontexts" } Group { name: "Qt Platform Theme Plugins" condition: qbs.targetOS.contains("linux") prefix: FileInfo.joinPaths(Qt.core.pluginPath, "/platformthemes/") files: pluginFiles qbs.install: true qbs.installDir: "plugins/platformthemes" } Group { name: "Qt Style Plugins" prefix: FileInfo.joinPaths(Qt.core.pluginPath, "/styles/") files: pluginFiles excludeFiles: pluginExcludeFiles qbs.install: true qbs.installDir: "plugins/styles" } Group { name: "Qt XCB GL Integration Plugins" condition: qbs.targetOS.contains("linux") prefix: FileInfo.joinPaths(Qt.core.pluginPath, "/xcbglintegrations/") files: pluginFiles qbs.install: true qbs.installDir: "plugins/xcbglintegrations" } Group { name: "Qt Translations" prefix: { if (qbs.targetOS.contains("windows")) { return FileInfo.joinPaths(Qt.core.binPath, "../translations/") } else if (qbs.targetOS.contains("linux")) { return FileInfo.joinPaths(Qt.core.libPath, "../translations/") } } files: { // Since Qt 5.5, the translations are split up by module and failing // to include all the .qm files results in the loading of the Qt // translator to fail (regardless of whether these modules are // actually used). var modules = ["", "base", "multimedia", "quick1", "script", "xmlpatterns"]; // TODO: Look into getting this list from the Tiled // 'translations.qbs' product. var languages = ["ar_DZ", "bg", "cs", "de", "en", "es", "fr", "he", "it", "ja", "lv", "nb", "nl", "pl", "pt", "pt_PT", "ru", "sv", "th", "tr", "uk", "zh_CN", "zh_TW"]; var list = []; var p = prefix; for (i = 0; i < languages.length; ++i) { for (j = 0; j < modules.length; ++j) { var file = "qt" + modules[j] + "_" + languages[i] + ".qm"; if (File.exists(p + file)) list.push(file); } } return list; } qbs.install: true qbs.installDir: "translations" } Group { name: "Runtime DLLs" condition: qbs.targetOS.contains("windows") prefix: { if (qbs.toolchain.contains("mingw")) return FileInfo.joinPaths(cpp.toolchainInstallPath) + "/" else if (qbs.architecture === "x86_64") return "C:/windows/system32/" else return "C:/windows/SysWOW64/" } files: { var list = [] if (qbs.toolchain.contains("mingw")) { list.push("libstdc++-6.dll", "libwinpthread-1.dll") if (qbs.architecture == "x86_64") list.push("libgcc_s_seh-1.dll") else list.push("libgcc_s_dw2-1.dll") } else { list.push("MSVCP120.DLL", "MSVCR120.DLL") } return list } qbs.install: true qbs.installDir: "" } Group { name: "OpenSSL DLLs" condition: qbs.targetOS.contains("windows") && File.exists(prefix) prefix: { if (project.openSslPath) { return project.openSslPath + "/"; } else { // Not sure what this check should be exactly, but Qt 5.6.3 was // built against OpenSSL 1.0.2 whereas Qt 5.12.5 was built against // OpenSSL 1.1.1. if (Qt.core.versionMinor >= 12 || Qt.core.versionMajor >= 6) { if (qbs.architecture === "x86_64") return "C:/OpenSSL-v111-Win64/" else return "C:/OpenSSL-v111-Win32/" } else { if (qbs.architecture === "x86_64") return "C:/OpenSSL-Win64/" else return "C:/OpenSSL-Win32/" } } } files: { if (Qt.core.versionMinor >= 12 || Qt.core.versionMajor >= 6) { if (qbs.architecture === "x86_64") return [ "libcrypto-1_1-x64.dll", "libssl-1_1-x64.dll" ] else return [ "libcrypto-1_1.dll", "libssl-1_1.dll" ] } else { return [ "libeay32.dll", "ssleay32.dll" ] } } qbs.install: true qbs.installDir: "" } Group { name: "Misc Files" prefix: "../" files: { var list = [ "COPYING", "AUTHORS", "README.md", "NEWS.md", "LICENSE.APACHE", "LICENSE.BSD", "LICENSE.GPL", ]; if (qbs.targetOS.contains("windows")) list.push("dist/win/qt.conf"); else if (qbs.targetOS.contains("linux")) list.push("dist/linux/qt.conf"); return list; } qbs.install: true qbs.installDir: "" } } tiled-1.8.2/dist/dsa_pub.pem000066400000000000000000000042521420372404100157060ustar00rootroot00000000000000-----BEGIN PUBLIC KEY----- MIIGOjCCBC0GByqGSM44BAEwggQgAoICAQDhi01QvbUkZPifoPNJCQzmhUEHE9LF sdSAhmQku9/4P+3uqu1a2e6Dz8HN26NdRxdJ/h/ZbWroAUShSEpagxyXbR9uHMHc xBaWXjXO7sxohGMUeylGA6KGq6UGpzs4u4YbmsI3x9gzQCLPvpit74B86K70pIkt thDGjA/yV92k3XRCXJ6Tf3oVTAYqt8+VN6gd3pEIufzgyYuwtc0GGD4u/8A7iasU eSWt5vfFndpQtVDKMKPbGNO5PRfozTUryANOX2je6RT3hlSnlUP6CxwxEbwFcfQu SU84SdO5upBHUzTQ00xWkG2WVXUtNGe7vlgV6d5GHKMQw0xYcTMZeMpvSgkJwF8y 4jTyHtlFGxkyKWtAsC1AOzTU3AkdYutHjIQ0wK3iKjUnFk+udLRleIzOusCshwfD +hVAlWqbvViPcZaQURC1DnSq5UZQIICWugE0Kbm1vYYAyHK31jJdRWaB7PTZnZC1 BlbXacV/dEuY/WJTmpoWr+iUfgIiNQ6yRrF1w+26eR0aFwEUYTHU7fFu8fn8xsvP f3/FSx4NVQf5X+VZ5NhFlI9btNgkqCABoA3fgHIhpNa7ruBlr58QbYnAxR66tHL7 OXCp95iTGXtr3fb3k1uOVIbdnNRDykVfeYsHixonXA1d3AFvhsXLB/L+Dv5pRfgg eTMn1oURGx/xbwIVAPG/1CsN6Lwi7+x3c0vvIx1qLp7DAoICAHOTSmLkh/ci+H5g dnk6Skd8FrLaR89Rw3Z0DuJjnun49T9x7za4FZ5VqL2HBG9q/bAUAOSNCuXBdd+r urYJuH1NdAZsDYOW6gqWSAdarRu7V8nS4ggSbdG6tpK1KDa0gF6j4AXHMY/bq6e6 DYD3aeckUtkWgaZEd+UX/We8k3A7Q/B6wyWWQ+OLb4FZ5G6AbKnEqivAOJ/ux7AJ NBS/4XHabxgpxw2oQkiMZDj+C83I3Mp37FCF26BphDcUE8xn1ueiYBW3nKJPPGbc 7VSufxEsD2yWQns6eSOFryqVZG3YnxFwaYQoZNrsuKvWvWiZ6VGsTLDkDlnh60zp x+yuXCfoj/fNugcCgkWN3nxfC9iUyB4oy2rox3T+FsVwotBMBEwFfyAwPTx9DkrZ g3j8lny14DKcofrzEbT+M8MBblgbeFvt6GqaypveBbO/7KprUq+itgDXoJnHm0NU 2+fo/ZaC1ZiwjsfWqzMrySX6k2YHTC331xwS9j0pKDPVkIWIRhw6dRNOKzKFZkja wvvOKDbOLagliHrwftzl4WDLKva7N0DY5Drhv2NBBFleCl4Ol+ANghsgA5aiYuoc qe5NYU7HSGTVNnHEV8IBrwGGxmqm8TKC2kO7Tnnmse+yrd90tskoewiB0NfqcYvt 6PV+PKuaIw3WitTpdMSk00HQHnrKA4ICBQACggIAVprDZMCNzSQuTwCqm3sUY16M YnjcLFG0bDsQ9ALMA4WqxmAZfMLJGTODYDoke9XkbfXaAMMwb9oXTqld5bjpdLMT pOGepVKolGqHg7dqkMcJMkm5I/xqT/tFgahvwAL0SXr8+jK0pMNYJtUmgDbENqYC oz73l4ApO7b4TrN05G9BOvu/dzd5U8YZZcH/cKRqT6O4Lcr8aN9QKGfJMx0JmM8A y4OwUCt2cjI0zuhZNRfiPgnOivsOifUGofJOsCaAxt2DPHYkemB5VKGzFoXLneVd MWF+RxeZSGbeCsIVbB4z9Qm1rPHXzzlMsbGvD5caoB3Gv3r0b0wAxk6sO8oErzHn uDLDT9O4KAyeZh7e3IFta0rGI0q3hqV3cB1/Qh0HabpJ70GdldTFwFOTGegYci4l 7bU3z8BIlU4F6jZ7n8KYiTMPfbylfjaso+5ZrhXSgvthVjFkhNzvoiq3XZbhY+A0 opPJScTLMLV3GFQD7fO5GecKNC0VymDGS0zOqPzp/2ieNCfTbiEU4TNL4pYsBh5a MyAXsoMxBWCX4ZXxsj+8Oz7pJTUrecI97UJkKEzkreP/48EPkjxLDvMhUzuGz8gS eMcu2g+/qRW5CWv56rqIGwRK6UTwA1vQxxae7r/HW3H4kK9mqRsb7E6go4CqN+gR Lok191BJb2+wjBV1CJs= -----END PUBLIC KEY----- tiled-1.8.2/dist/install-qt.sh000077500000000000000000000334731420372404100162240ustar00rootroot00000000000000#!/usr/bin/env bash ############################################################################# ## ## Copyright (C) 2019 Richard Weickelt. ## Contact: https://www.qt.io/licensing/ ## ## This file is part of Qbs. ## ## $QT_BEGIN_LICENSE:LGPL$ ## Commercial License Usage ## Licensees holding valid commercial Qt licenses may use this file in ## accordance with the commercial license agreement provided with the ## Software or, alternatively, in accordance with the terms contained in ## a written agreement between you and The Qt Company. For licensing terms ## and conditions see https://www.qt.io/terms-conditions. For further ## information use the contact form at https://www.qt.io/contact-us. ## ## GNU Lesser General Public License Usage ## Alternatively, this file may be used under the terms of the GNU Lesser ## General Public License version 3 as published by the Free Software ## Foundation and appearing in the file LICENSE.LGPL3 included in the ## packaging of this file. Please review the following information to ## ensure the GNU Lesser General Public License version 3 requirements ## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ## ## GNU General Public License Usage ## Alternatively, this file may be used under the terms of the GNU ## General Public License version 2.0 or (at your option) the GNU General ## Public license version 3 or any later version approved by the KDE Free ## Qt Foundation. The licenses are as published by the Free Software ## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ## included in the packaging of this file. Please review the following ## information to ensure the GNU General Public License requirements will ## be met: https://www.gnu.org/licenses/gpl-2.0.html and ## https://www.gnu.org/licenses/gpl-3.0.html. ## ## $QT_END_LICENSE$ ## ############################################################################# set -eu function help() { cat < Root directory where to install the components. Maps to C:/Qt on Windows, /opt/Qt on Linux, /usr/local/Qt on Mac by default. -f, --force Force download and do not attempt to re-use an existing installation. --host The host operating system. Can be one of linux_x64, mac_x64, windows_x86. Auto-detected by default. --target The desired target platform. Can be one of desktop, android, ios. The default value is desktop. --toolchain The toolchain that has been used to build the binaries. Possible values depend on --host and --target, respectively: linux_x64 android any, android_armv7, android_arm64_v8a desktop gcc_64 (default) mac_x64 android any, android_armv7, android_arm64_v8a desktop clang_64 (default), ios ios windows_x86 android any, android_armv7, android_arm64_v8a desktop win64_mingw73, win64_mingw81, win64_mingw, win64_msvc2015_64 (default), win64_msvc2017_64, win64_msvc2019_64, win64_msvc2019_arm64 --arch The CPU architecture to use when installing openssl (x86 or x64). --version The desired Qt version. Currently supported are all versions above 5.9.0. EOF } TARGET_PLATFORM=desktop COMPONENTS= VERSION= FORCE_DOWNLOAD=false MD5_TOOL=md5sum ARCH= case "$OSTYPE" in *linux*) HOST_OS=linux_x64 INSTALL_DIR=/opt/Qt TOOLCHAIN=gcc_64 ;; *darwin*) HOST_OS=mac_x64 INSTALL_DIR=/usr/local/Qt TOOLCHAIN=clang_64 MD5_TOOL="md5 -r" ;; msys) HOST_OS=windows_x86 INSTALL_DIR=/c/Qt TOOLCHAIN=win64_msvc2015_64 ;; *) HOST_OS= INSTALL_DIR= ;; esac while [ $# -gt 0 ]; do case "$1" in --directory|-d) INSTALL_DIR="$2" shift ;; --force|-f) FORCE_DOWNLOAD=true ;; --host) HOST_OS="$2" shift ;; --target) TARGET_PLATFORM="$2" shift ;; --toolchain) TOOLCHAIN=$(echo $2 | tr '[A-Z]' '[a-z]') shift ;; --arch) ARCH="$2" shift ;; --version) VERSION="$2" shift ;; --help|-h) help exit 0 ;; *) COMPONENTS="${COMPONENTS} $1" ;; esac shift done if [ -z "${HOST_OS}" ]; then echo "No --host specified or auto-detection failed." >&2 exit 1 fi if [ -z "${INSTALL_DIR}" ]; then echo "No --directory specified or auto-detection failed." >&2 exit 1 fi if [ -z "${VERSION}" ]; then echo "No --version specified." >&2 exit 1 fi if [ -z "${COMPONENTS}" ]; then echo "No components specified." >&2 exit 1 fi case "$TARGET_PLATFORM" in android) ;; ios) ;; desktop) ;; *) echo "Error: TARGET_PLATFORM=${TARGET_PLATFORM} is not valid." >&2 exit 1 ;; esac HASH=$(echo "${OSTYPE} ${TARGET_PLATFORM} ${TOOLCHAIN} ${VERSION} ${INSTALL_DIR}" | ${MD5_TOOL} | head -c 16) HASH_FILEPATH="${INSTALL_DIR}/${HASH}.manifest" INSTALLATION_IS_VALID=false if ! ${FORCE_DOWNLOAD} && [ -f "${HASH_FILEPATH}" ]; then INSTALLATION_IS_VALID=true while read filepath; do if [ ! -e "${filepath}" ]; then INSTALLATION_IS_VALID=false break fi done <"${HASH_FILEPATH}" fi if ${INSTALLATION_IS_VALID}; then echo "Already installed. Skipping download." >&2 exit 0 fi MIRRORS="\ http://ftp.acc.umu.se/mirror/qt.io/qtproject \ http://qt.mirrors.tds.net/qt \ http://ftp.fau.de/qtproject \ http://download.qt.io \ " for MIRROR in ${MIRRORS}; do if curl "${MIRROR}/online" -s -f -o /dev/null; then break; else echo "Server ${MIRROR} not availabe. Trying next alternative..." >&2 MIRROR="" fi done DOWNLOAD_DIR=`mktemp -d 2>/dev/null || mktemp -d -t 'install-qt'` # # The repository structure is a mess. Try different URL variants # function compute_url(){ local COMPONENT=$1 local CURL="curl -s -L" local BASE_URL="${MIRROR}/online/qtsdkrepository/${HOST_OS}/${TARGET_PLATFORM}" local ANDROID_ARCH=$(echo ${TOOLCHAIN##android_}) if [[ "${COMPONENT}" =~ "qtcreator" ]]; then if [[ "${HOST_OS}" == "windows_x86" ]]; then # newer QtC versions do not supported x86 version anymore HOST_OS="windows_x64" fi SHORT_VERSION=${VERSION%??} BASE_URL="${MIRROR}/official_releases/qtcreator" REMOTE_PATH="${SHORT_VERSION}/${VERSION}/installer_source/${HOST_OS}/qtcreator.7z" echo "${BASE_URL}/${REMOTE_PATH}" return 0 elif [[ "${COMPONENT}" =~ "mingw" ]]; then REMOTE_BASE="tools_${COMPONENT}/qt.tools.${TOOLCHAIN}${VERSION//./}" REMOTE_PATH="$(${CURL} ${BASE_URL}/${REMOTE_BASE}/ | grep -o -E "[[:alnum:]_.\-]*7z" | grep -v "meta" | head -1)" if [ ! -z "${REMOTE_PATH}" ]; then echo "${BASE_URL}/${REMOTE_BASE}/${REMOTE_PATH}" return 0 fi elif [[ "${COMPONENT}" =~ "openssl" ]]; then if [ -z "${ARCH}" ]; then echo "No architecture specified for openssl (x86 or x64)." >&2 exit 1 fi REMOTE_BASE="tools_${COMPONENT}_${ARCH}/qt.tools.${COMPONENT}.win_${ARCH}" REMOTE_PATH="$(${CURL} ${BASE_URL}/${REMOTE_BASE}/ | grep -o -E "[[:alnum:]_.\-]*${ARCH}.7z" | tail -1)" if [ ! -z "${REMOTE_PATH}" ]; then echo "${BASE_URL}/${REMOTE_BASE}/${REMOTE_PATH}" return 0 fi else REMOTE_BASES=( # New repository format (>=6.0.0) "qt6_${VERSION//./}/qt.qt6.${VERSION//./}.${TOOLCHAIN}" "qt6_${VERSION//./}/qt.qt6.${VERSION//./}.${COMPONENT}.${TOOLCHAIN}" "qt6_${VERSION//./}/qt.qt6.${VERSION//./}.addons.${COMPONENT}.${TOOLCHAIN}" "qt6_${VERSION//./}_${ANDROID_ARCH}/qt.qt6.${VERSION//./}.${TOOLCHAIN}" "qt6_${VERSION//./}_${ANDROID_ARCH}/qt.qt6.${VERSION//./}.${COMPONENT}.${TOOLCHAIN}" # New repository format (>=5.9.6) "qt5_${VERSION//./}/qt.qt5.${VERSION//./}.${TOOLCHAIN}" "qt5_${VERSION//./}/qt.qt5.${VERSION//./}.${COMPONENT}.${TOOLCHAIN}" # Multi-abi Android since 5.14 "qt5_${VERSION//./}/qt.qt5.${VERSION//./}.${TARGET_PLATFORM}" "qt5_${VERSION//./}/qt.qt5.${VERSION//./}.${COMPONENT}.${TARGET_PLATFORM}" # Older repository format (<5.9.0) "qt5_${VERSION//./}/qt.${VERSION//./}.${TOOLCHAIN}" "qt5_${VERSION//./}/qt.${VERSION//./}.${COMPONENT}.${TOOLCHAIN}" ) for REMOTE_BASE in ${REMOTE_BASES[*]}; do REMOTE_PATH="$(${CURL} ${BASE_URL}/${REMOTE_BASE}/ | grep -o -E "[[:alnum:]_.\-]*7z" | grep "${COMPONENT}" | tail -1)" if [ ! -z "${REMOTE_PATH}" ]; then echo "${BASE_URL}/${REMOTE_BASE}/${REMOTE_PATH}" return 0 fi done fi echo "Could not determine a remote URL for ${COMPONENT} with version ${VERSION}">&2 exit 1 } function version { echo "$@" | awk -F. '{ printf("%03d%03d%03d\n", $1,$2,$3); }'; } mkdir -p ${INSTALL_DIR} rm -f "${HASH_FILEPATH}" for COMPONENT in ${COMPONENTS}; do if [[ "${COMPONENT}" =~ "qtcreator" ]] && [[ "${HOST_OS}" != "mac_x64" ]]; then UNPACK_DIR="${INSTALL_DIR}/Tools/QtCreator" mkdir -p ${UNPACK_DIR} else UNPACK_DIR="${INSTALL_DIR}" fi if [ "$(version "${VERSION}")" -ge "$(version "6.0.0")" ]; then if [[ "${COMPONENT}" =~ "qtscript" ]] || [[ "${COMPONENT}" =~ "qtscxml" ]] || [[ "${COMPONENT}" =~ "qtx11extras" ]]; then echo "Component ${COMPONENT} was removed in Qt6, skipping" >&2 continue fi else if [[ "${COMPONENT}" =~ "qt5compat" ]]; then echo "Component ${COMPONENT} is not present in Qt ${VERSION}, skipping" >&2 continue fi fi URL="$(compute_url ${COMPONENT})" echo "Downloading ${COMPONENT} ${URL}..." >&2 curl --progress-bar -L -o ${DOWNLOAD_DIR}/package.7z ${URL} >&2 7z x -y -o${UNPACK_DIR} ${DOWNLOAD_DIR}/package.7z >/dev/null 2>&1 7z l -ba -slt -y ${DOWNLOAD_DIR}/package.7z | tr '\\' '/' | sed -n -e "s|^Path\ =\ |${UNPACK_DIR}/|p" >> "${HASH_FILEPATH}" 2>/dev/null rm -f ${DOWNLOAD_DIR}/package.7z # # conf file is needed for qmake # if [ "${COMPONENT}" == "qtbase" ]; then if [[ "${TOOLCHAIN}" =~ "win64_mingw" ]]; then SUBDIR="${TOOLCHAIN/win64_/}_64" elif [[ "${TOOLCHAIN}" =~ "win32_mingw" ]]; then SUBDIR="${TOOLCHAIN/win32_/}_32" elif [[ "${TOOLCHAIN}" =~ "win64_msvc" ]]; then SUBDIR="${TOOLCHAIN/win64_/}" elif [[ "${TOOLCHAIN}" =~ "win32_msvc" ]]; then SUBDIR="${TOOLCHAIN/win32_/}" elif [[ "${TOOLCHAIN}" =~ "any" ]] && [[ "${TARGET_PLATFORM}" == "android" ]]; then SUBDIR="android" elif [ "${HOST_OS}" == "mac_x64" ] && [ ! "${VERSION}" \< "6.1.2" ]; then SUBDIR="macos" else SUBDIR="${TOOLCHAIN}" fi if [ "${TARGET_PLATFORM}" == "android" ] && [ ! "${VERSION}" \< "6.0.0" ]; then CONF_FILE="${UNPACK_DIR}/${VERSION}/${SUBDIR}/bin/target_qt.conf" sed -i "s|target|../$TOOLCHAIN|g" "${CONF_FILE}" sed -i "/HostPrefix/ s|$|gcc_64|g" "${CONF_FILE}" ANDROID_QMAKE_FILE="${UNPACK_DIR}/${VERSION}/${SUBDIR}/bin/qmake" QMAKE_FILE="${UNPACK_DIR}/${VERSION}/gcc_64/bin/qmake" sed -i "s|\/home\/qt\/work\/install\/bin\/qmake|$QMAKE_FILE|g" "${ANDROID_QMAKE_FILE}" else CONF_FILE="${UNPACK_DIR}/${VERSION}/${SUBDIR}/bin/qt.conf" echo "[Paths]" > ${CONF_FILE} echo "Prefix = .." >> ${CONF_FILE} fi # Adjust the license to be able to run qmake # sed with -i requires intermediate file on Mac OS PRI_FILE="${UNPACK_DIR}/${VERSION}/${SUBDIR}/mkspecs/qconfig.pri" sed -i.bak 's/Enterprise/OpenSource/g' "${PRI_FILE}" sed -i.bak 's/licheck.*//g' "${PRI_FILE}" rm "${PRI_FILE}.bak" # Print the directory so that the caller can # adjust the PATH variable. echo $(dirname "${CONF_FILE}") elif [[ "${COMPONENT}" =~ "mingw" ]]; then if [[ "${TOOLCHAIN}" =~ "win64_mingw" ]]; then echo "${UNPACK_DIR}/Tools/mingw${VERSION//./}_64/bin" elif [[ "${TOOLCHAIN}" =~ "win32_mingw" ]]; then echo "${UNPACK_DIR}/Tools/mingw${VERSION//./}_32/bin" fi elif [[ "${COMPONENT}" =~ "qtcreator" ]]; then if [ "${HOST_OS}" == "mac_x64" ]; then echo "${UNPACK_DIR}/Qt Creator.app/Contents/MacOS" else echo "${UNPACK_DIR}/bin" fi elif [[ "${COMPONENT}" =~ "openssl" ]]; then echo "${INSTALL_DIR}/Tools/OpenSSL/Win_${ARCH}/bin" fi done tiled-1.8.2/dist/linux/000077500000000000000000000000001420372404100147225ustar00rootroot00000000000000tiled-1.8.2/dist/linux/push-to-itch.sh000077500000000000000000000003221420372404100176020ustar00rootroot00000000000000#!/bin/bash set -ev curl -JOL https://broth.itch.ovh/butler/linux-amd64/LATEST/archive/default unzip butler-linux-amd64.zip ./butler push --userversion=$TILED_VERSION Tiled thorbjorn/tiled:linux-64bit-snapshot tiled-1.8.2/dist/linux/qt.conf000066400000000000000000000001061420372404100162120ustar00rootroot00000000000000[Paths] Libraries = lib Plugins = plugins Translations = translations tiled-1.8.2/dist/macos/000077500000000000000000000000001420372404100146655ustar00rootroot00000000000000tiled-1.8.2/dist/macos/fixup-install-names.rb000066400000000000000000000024541420372404100211170ustar00rootroot00000000000000#!/usr/bin/ruby # Modifies plugins and other binaries to use Qt frameworks contained within the app bundle (is there some way to get macdeployqt to do this?) binAppDir = 'Tiled.app' raise "No application at #{binAppDir}" unless File.directory? binAppDir # Modify plugins to use Qt frameworks contained within the app bundle (is there some way to get macdeployqt to do this?) Dir["Tiled.app/**/*.dylib", "Tiled.app/Contents/MacOS/tmxrasterizer", "Tiled.app/Contents/MacOS/terraingenerator"].each do |library| ["QtCore", "QtGui", "QtWidgets", "QtNetwork", "QtQml"].each do |qtlib| #find any qt dependencies within this library qtdependency = `otool -L "#{library}" | grep #{qtlib}`.split(' ')[0] next unless qtdependency #skip depedencies that are already using relative paths #macdeployqt seems to fix some of the plugins next if qtdependency.include? "@executable_path" #if we get here, this library has a dependency on a qtlib with a hard path on the build systems disk puts "Fixing #{library} dependency on #{qtlib}" `install_name_tool -change "#{qtdependency}" "@executable_path/../Frameworks/#{qtlib}.framework/Versions/5/#{qtlib}" "#{library}"` raise "install_name_tool error #{$?}" unless $? == 0 end end puts "Done" tiled-1.8.2/dist/macos/push-to-itch.sh000077500000000000000000000003631420372404100175520ustar00rootroot00000000000000#!/bin/bash set -ev mkdir itch mv install/Tiled.app itch/ curl -JOL https://broth.itch.ovh/butler/darwin-amd64/LATEST/archive/default unzip butler-darwin-amd64.zip ./butler push --userversion=$TILED_VERSION itch thorbjorn/tiled:macos-snapshot tiled-1.8.2/dist/make-dist.sh000077500000000000000000000003201420372404100157730ustar00rootroot00000000000000#!/bin/bash if [ "$#" -eq "0" ]; then echo "Usage: make-dist.sh " exit 1 fi name="tiled-$1" git archive -v --prefix="$name/" HEAD | gzip > "$name.tar.gz" echo "Release ready as $name.tar.gz" tiled-1.8.2/dist/update-translations.sh000077500000000000000000000006301420372404100201220ustar00rootroot00000000000000# Updates the .ts files based on the strings found in the source code # Meant to be run from repository root lupdate -locations relative -no-obsolete \ src/libtiled \ src/plugins \ src/qtpropertybrowser \ src/qtsingleapplication \ src/terraingenerator \ src/tiled \ src/tiledquick \ src/tiledquickplugin \ src/tmxrasterizer \ src/tmxviewer \ -ts translations/*.ts tiled-1.8.2/dist/win/000077500000000000000000000000001420372404100143605ustar00rootroot00000000000000tiled-1.8.2/dist/win/Custom_InstallDir.wxs000066400000000000000000000112241420372404100205220ustar00rootroot00000000000000 1 "1"]]> WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed 1 NOT Installed Installed AND PATCH 1 LicenseAccepted = "1" 1 1 NOT WIXUI_DONTVALIDATEPATH "1"]]> WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1" 1 1 NOT Installed Installed AND NOT PATCH Installed AND PATCH 1 1 1 1 tiled-1.8.2/dist/win/Custom_InstallDirDlg.wxs000066400000000000000000000044261420372404100211570ustar00rootroot00000000000000 1 tiled-1.8.2/dist/win/banner.bmp000066400000000000000000002477121420372404100163420ustar00rootroot00000000000000BMOzl:PO  BGRsPE/]ߗ7$nKR7J<'Ãэ. qMlIlIsMr5$khFĄ>pLmJmJmJmJlJnK1vok4#nKlImJmJmJmJmJnKnKfE"ؐsySH0nKlImJmJmJmJmJmJmJlInKlIJ1>E.[bEP7oLlIlJmJmJmJmJmJmJmJmJmJlInKfFb7'eZ[CZAoOnMmKmJmJmJnJmJmJmJmJmJmIlJmKmOrWSEUD<SM8eJnRnQmPmNnLmKmJmJlInJmJlImJmJmLoQpWq_rgztj0/wsr=4$oNmOnPnRnRnQnPnNmLmKmJmJmJmJlJmMoRpXqasitnvsutyy2"sOmJnLnNnPnPmQmRoQmOmNnMmKlJnMnOnSp[qcskupusutwwM((ߜ\ArNmJlJmKnLnNnOnPmRnSnPoQmNoNnQoUp]resluqutuuxx2''秼h:*sQK4 V:oKmJmJmKmLmOnPoQnSnSoToUpYq`rgtntrutww[[vss鬖ps=-zWuSuQpLy>*) X_WU;+*뤛飛뤛륛꣚頖鞒雍蘋斅擀}yvx|芀鉂臃烁肁rBA.!!履짞咽﨟吏xё꣛颚꣛飙韕靑蚎痊疆撄撀}{}鋁錄ꊆ釄{zA10"咽륜lg6%#[?<{桗ꤚ颙蟕蜐蚍昉旆蔃蓂}~茀芃銄vrNMMF1.褐yTPmMH뤜꣛뤜栘|v [?;頖盐蚍瘉症蔃撁}{y{}}HCRKKbC@T;8f`즜뤛ꤛꢛ룜쥜ђbD@ um虋瘇畄擀zvst2дꢢYJI`[2"!xr履륝뤜ꤚꢚgb-]>9瘈똆~wswaC:-ۮtttiQM{u=+*Γ륜륝룚렗vmL2,>(#k[|UF`bLMKKfaѕ/! 觠蘒꟔雎ꚈgA8 X\I2..yꨠ"列霍瘉֋y~js_/hМ1#"Ж쟒€t 蔀yuploA442%ЗhffB-+vOKZ;7ꛌ藆~xsnjہdpW*~iZSR]>;#wr획ꖆ摀ysnkjoqdOG485쟟bRQ_[㣜 ݛ횏ꕉ瑂|ustw{~|PO`HGooooVS{uup?-,얌ꑅ莀}~爀腀烀x=<>>>!Ӗ픍됈ꍆ댆鉅膃ꆄrpD55'&&so颛픎푌쎊ꊇ鈆ZY[[[}x쎋6""}}0ЇfeeccnffF'%օ9tiled-1.8.2/dist/win/build-daily.bat000066400000000000000000000031131420372404100172450ustar00rootroot00000000000000@rem TILED DAILY BUILD SCRIPT @echo off rem The following assumes US date format! set VERSION=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2% set TILED_SOURCE_DIR=E:\Projects\tiled set TILED_BUILD_DIR=E:\Builds\tiled-daily-qt5 set QTDIR=E:\Qt\5.3\msvc2013_opengl set ARCH=32 set MAKE=E:\Qt\Tools\QtCreator\bin\jom.exe set GIT="C:\Program Files (x86)\Git\cmd\git.exe" set SCP="C:\Program Files (x86)\Git\bin\scp.exe" set DESTINATION=bjorn@files.mapeditor.org:public_html/files.mapeditor.org/public/daily/ echo Waiting a bit for the network to come up... ping -n 3 127.0.0.1 > nul pushd %TILED_SOURCE_DIR% %GIT% fetch %GIT% diff --quiet origin/master if %ERRORLEVEL% == 0 ( echo No change, nothing to do. popd goto done ) else if %ERRORLEVEL% == 1 ( %GIT% reset --hard origin/master ) popd FOR /F "tokens=*" %%i in ('%GIT% describe') do SET COMMITNOW=%%i echo Building Tiled daily %VERSION%... (from %COMMITNOW%) call %QTDIR%\bin\qtenv2.bat call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86 rem This allows the executable to run on Windows XP set LINK=/SUBSYSTEM:WINDOWS,5.01 mkdir %TILED_BUILD_DIR% pushd %TILED_BUILD_DIR% qmake.exe -r %TILED_SOURCE_DIR%\tiled.pro "CONFIG+=release" "QMAKE_CXXFLAGS+=-DTILED_VERSION=%COMMITNOW%" %MAKE% popd echo Building Installer... pushd %TILED_SOURCE_DIR%\dist\win makensis.exe tiled-vs2013.nsi echo Uploading installer... %SCP% -B tiled-%VERSION%-win32-setup.exe %DESTINATION% popd :done echo Shutting down in 30 seconds... ping -n 31 127.0.0.1 > nul shutdown -s tiled-1.8.2/dist/win/dialog.bmp000066400000000000000000016060721420372404100163330ustar00rootroot00000000000000BM: zl8   BGRsffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333+++FFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333VVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFFfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333+++FFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333VVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFFfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333+++FFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333VVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFFfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333+++FFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333VVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFFfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333+++FFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333VVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFFfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333+++FFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333VVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFFfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333+++FFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333VVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFFffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeddddddeddddddddeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeddddddeddedddccdccdccdcceddedddddeeeeeeeeeeeeffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeedddddddccdcccbbbbbcaacaacaadbbcbbdccdccddddddeeeeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeedddedddccbbbcaac``b__b__a_^b__b__c``b``dbbcbbdccddddddeeeeeeeeefffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeedddddddcccbbcaac``a^^a]]`\\`\[`\[`\[`\\a]]b^^b__b``caacbbdccedddddeeeeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeedddedddccdbbb``a^^a]]`\[`ZZ^YX^XX_YX^YX_XX_ZY_[Za\\a]]b__b``dbbcbbddddddeeeeee222333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeddddddcbbcaac``b^^a\\_ZY^XX]WV\UT\TS\SS\TS\UT]VU^WV_XX`ZZa\\b^^b__caacbbdccedddddeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeedddeddcbbcaab__a]]_[Z_XX]WV\TS[RPZPOYONYNMYONZPOZQO[SQ[TS]WV_XX_[Z`\\a^^300200cbbcccddddddeeeeeeeeeffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeedddeddcbbcaab__`\\`ZZ]WW\UT[RPZPOXNLWKIVJIVJHVJHVJIWLJXMLZPO[RQ\UT^WV_YX_[Za]]a^^b``bbbdccdddddddddeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffeeeeeeddddcccbbb``a^^`\\_ZY^WV\TSZQPXNLVKIUIGTFDSECVGERDCTFCUGEUIGVKIXNL2)(3+)]UT]WW_ZYa\\b^^b__caacbbcccddddddeeeeeeeeefffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333+++FFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeedddccccbbb``a^^_\\_ZY]WV[SRYPOWMKUJHTGDSDBQA?zxqdbQA>QA?SDBSEDUIGWKIXNMZQP\TR]WV_XX_[Z`\\a^^b``caacbbdccdddeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffeeeeeeeeeedddccdbbc``a^^a\\^YX]WV[TRYONWLJVIGSEBQA?P@>կ髠ѮC1/3"QA>SDBTFDVJHXMKYON[RP\UT^XW_ZY`[[a]]b__caacbbdccedddddeeeeeefffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeedddccbbbc```^^`\[_YX]VU[RRYONWKITGESDBQA>R@>٭߁rjWzi橞trR@>P?;QA?RDATGEVJIXNLZPO[TR]VU^XW_[Z`\\a^^c``cbbdccedddddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffeeeeeedddddddccbbbc``b^^`\[_YX]VU[SQYNMVLITHERCAP?=TB?ޯ|lfReRhUiV{ݭk[XO>:P@=SCASFCUIGWLJYNMZRP\UT]WW_ZY`\\a^^b``dbbdccdddeeeeeeffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeedddddddccdbbc``b^^`\[_XX]UT[RPYNMVJHTHDRCAP?:QA>SDBTGEVJHXMLZQP\TS^VV_ZY`\\a^^b``cbbedddddeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeee222322dcccaab__a]]_[Z^XX\UTZRPYOMWJITFDRB@O>;ZIFૢp_kXiWhVgTfSfSeRdPdOxf䨞{ljQ?;`OL櫡q_lYkXiWhWfUfSfRfQdPcNbNdO{٫fVSP?=RB@SECVJHXNLZQP\UT^YX`\[b^^c``cbbedddddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeddddddcbbcaab__a]]1--2-,[TSZQPXMKVJHSFDQA?O>:PA=槝q_m[lYjXiXhVfUfSfRePdPbNbMaM`MjV圐ȨXGFSCATFDVJHYNM[RQ]WV_ZY`\\b__dbbdccdddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeddddddcbbcaab__`\\`ZZ]WW\TSZQPXMKUIHTFCQB?O=:m]Z椙q^n\mYkYkXjVgUfTfSfReOdObNbMbM`L_L`Kyh⧝ylkTECUIGXMK[RP]UT^YXa\\b__caadcceddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeddeddcbbcaab__`\\_ZY^WW\TTZPOXMKUHG3$"%3"ufdé䞒q^o]m[lZlXkXiVgUfUfSfReOdObObMaLaL_K_K^IaM~ثg[YWLKZPO]UT^XW`\[a^^daadcceddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeedddcccbbb``a^^a\\_ZY]WV\SSYPOWLJUIGSDBQ@>O>:~pmǨ㙎q_p^n\m[lZlXjWiVgUfUfTfReOdObNbMaLaL_K_K^I^I]IkX蟓ƪ_VT\UT_XXa\\a^^caadcceddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeddddcccbbb``a^^_\\^YX]WV[TRYPOWLJ3'$3%#Q@>O=:wuͭ╇n\m[o]n\m[kYjXjWiVgVfTfTfReOdObObMaLaL_K_J^I^I^I]I_J|k⫡}ww_ZY`\\b__caadccdddeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeedddcccdbbc``a^^a\\^YX]WV[TRYONWKITGESDBP@=O<9~ֱscraq^o]n\lZkYjXjWiVgVfUfTfReOdObNbMbM`L_L_J_J_J^J^I^I^IbO摂կmjjc``cbbedddddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeedddccdbbc``b^^`[[^YX\VU[RR3('3'%UGERCAQ@=Q?<ٳߋ}tdrbr`p^o]m[iWhVjXjWiVgUfUfSfRePcObNbMaM`M`L`J`K_K_J_K_I_I_J^Hs̏ebbcbbeddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeedddedddccbbbc``b^^`\[_XX]VU[SRYOMVLIUGERCAP?;]KG빰ᔈvfsbr`p^p]o]o[mZkYjXjWiVhUfUfSfSfQePdPdPdOcObNbNbNaMaLaLjW駜yvu`]]`^^a``bbbdddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeedddeddcbbcaab__a]]2.-2,,\UUZRPXNLVIHSEDRB@P>;aQN沩}o~n㡕콵귯ߏtbq^p^p]n[mZkYkXjWiVhWgTfTbOaMfQeQeQeOcOcOcOcOcObMyg㯥jgf]\\\[[ZZZZZZ^^^aaadddeeefffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeddeddcbbcaab__a]]`ZZ^XV[TSYQPXMKUJHTECQA?O>:gWT毦|mxhxfvf|l塖캳鳪ފ{q_p]m[lZkYlXkXiXhVgUgTfTfRfReRfRfPfQdPdPdPdP}ְa^^][[XXXTSSPPPPPPVVV\\\bbbeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeeeeeeffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeedddeddcbbcaa2//2..`ZZ^XW\TSZQPWMKUIGSEBQA?O=:n^\櫡|kyiygwgvftdtc|l椘뺲鯥ކvm\lZlZlXjXiWhVhVhUgTgSgSfS_L_KfRfQfPgT蜎Ȱ_\\\ZZVVVOOOHHHDDDFFFNNNXXX```dddfffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333VVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeddddddeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeedddccccbbcaab__`\\_ZY\VV\SRYPOXMKUHGSEBQA>O=;ufdë榜|m{jyhwgwfvetdtctbr`|l楙칲諡݀qlZkXkXjWiWiVhVhUhUgTgSfRfSfRfRp]誟wtt^[[[YYTTTLLLDDDooo]]]NNNYYYaaadddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeedddeddedddddeddedddddddddddddddddeeeeeeeeefff333333ffffffffffffffffffffffffffffffeeeeeeeeeedddcc211200a^^`\\_ZY]VV\SSYPOWLJVIGTDAQA>O>:~plɮ㡖|m|lzixhwfwfuetdtdsar`q^p]~n秜캱訜|klYjXiWhWiViUhUhUhShThTgT~lڪiee]ZZYXXRRRJJJGGGӖaaaccceeeeee222222dddddddddeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFFfffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeedddedddccdcccbbcbbdbbdbbcbbcbbdccdccdddddddddeeeeeeeeeeeefffffffffffffffffffffffffffeeeeeeeeeedddcccbbb``a^^a\\^YX]WV[SSZPOWLJUHFSCAP?=P=;wuͰ㞓}n|m{kziyhwfvfueuetdsbr`q^p^o]n\݀p骠칱襚zhkXjXjVjWiWiViUiUiU摂Ӱ`]\\ZZWVVPPPGGGSRR𪪪fffddddddbbb```^^^^^^^^^___aaadddeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffeeeeeeeeedddedddcccbbcaab``c``c``c``c``b``b``caacbbcbbdcceddedddddeeeeeeeee333333ffffffffffffeeeeeeeee222211cbbb``a^^`\[_YX\VU[SQYONWKITIERDBP?=O=:}Դ~o}n{l{kzjxhwfvfuetetcsar`q_p^o]n\n[n[߀rꬢ츰衕vfkWjXkXkVjVlZ頔ǰ^[Z[YYUTTMMM"""ONNܙddd111111___[[[VVVSSSQQQRRRUUUZZZ___ccceeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffeeeeeedddedddcccbbcaac``a^^b^^a]]`\\a]\`\\a]]`^^b__c``b``caacbbdcceddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeedddcccdbbc```^^`\[^YX\VU[SQZONWKITGERCAP?=P>;ٵޓp~o|m|l{kzixhwfvfuetetcsbraq`q^p^o]o\m[m[n\u뮤츰瞐uckXkWvd筢tqq]ZZYXXSRRKKKFEEȄbbbbbb```[[[TTTNNNIIIFFFDDDEEEIIIQQQZZZaaadddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffeeeeeedddedddccdbbb``a^^a]]`\[_[Z_ZY^YX^YY^YX_ZY_[Z`\[`\\b^^b__c``caacbbdccdcceddedddddeeeeee222222ddddccbbbc``b^^`\[_XX]VU[RRYOMVKIUGESCAP?;[KG亱ۊ|قt؁r؀qo}n|l{kzjyixhwfvfvetdtdscrar`p`p`q^q]o^o^p^p\o\o\q`覚ų^ZZZXXTSSLLLEEEvvveeebbbbbb___YYYQQQ$$$:::iii`````````___^^^___```bbbcccdddeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffeeeeeeddddddcbbcaab__`\\`ZZ]WW\UT[RQZPOXMLWLJWKJVJIWKJWLKXMKYNMZPO[RP\TR]UT^XV^YX`[Za\\a]]a^^b__c``b``b``c``b__a^^`\\_ZY]WW\UTZQOXNLVIHSFDRC@O>;aPNۋ}كu؁s؁sـqo|m|l{kzjyixhwfwfveuetdtcsbraqaq`q_q_p_q_q^q]p]|k氧ron]ZZYWWRQQIIIJIIuuubbbbbb^^^WWWNNNFFFuuu齽oooZZZYYYVVVUUUTTTSSSTTTVVVXXX\\\___bbbdddeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffeeeeeeeeeedddcccaab__`\\`ZZ^XW\TSZQPYNMWKIUIGTGESFETFDTFDTFDTGEUJHVKIWMKYNMZQO[TR\UT2,+2,+_ZY`\[`\\a]]a]]b^^a]]`\\`\[^YX^WV\TSZQP3(&3'%TECQA?O>:gXU뿹៓څv؁rـpo|m|l{kzjyixhxfwfvfueudtctbsbrarar`r`q`q`q_q_{޵gdc^[[YWWQPPHHHYXXޢgggbbb```\\\TTTKKKKKK򣣣ZZZiiihhhwwwdddTTTPPPLLLJJJHHHGGGFFFGGGHHHKKKOOOTTTZZZ___ccceeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffeeeeeeddddccdbbb__a]]^ZZ]XW\TSZPOXMKVIHTFDSDBeWUfXVRA?P@=QA>RB@SDATECTGEVIHWLJYOMYPO[RP\TS]VU]XV_XX_ZY`ZZ`ZZ_ZY^YX^YW]VU[TRYPOXMKUIGSEBQA>O=:p`^沩هz܌媠»꿷⢖ڄuo|m|l{kzjzjyhwgwfwfufveudtctctbtcsasaq`q`r`皍гb_^`^^\[[UTTKJJqppЏbbbbbb___YYYQQQHHH[[[ܙeeeaaa^^^YYYSSSMMMHHHDDDBBBGGGLLLOOOLLLGGG@@@@@@CCCGGGNNNVVV]]]bbbeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffeeeeeeedddcccbbc``a]]_[Z]WW\TSZQPXMKUIGTECRB@m_]vhfUC@O<:P>;P@=RB@4%#3%#UIGVKIXMKYONZQO[TR[TS]VU]WV^WV\VU]UT\TRZRPYNMWKIVIGRDAP@>O=;vif᫡وz؆x؅w؄uڈz⢘뿸䧝ۅw|l{k{kzixhygxgxfvfwfvfududucuctbtbsawf誟ñ`]]a^^a__\\\XXXyyybbbbbb^^^VVVNNNFFFsssƂbbb```\\\UUUMMM######VVVzzz˼tttJJJ>>>BBBKKKUUU^^^ccceeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333+++FFF777fffffffffffffffffffffeeeeeedddcbbcaaa^^`[[_XX]UTZRPXNLUJHTFCQA?gXVݰĽĸzx\JGN<9O=;P?RCASECUHFVIHWLJXMLYONZQP[RPZRQ[RQZQPYONXMKVJHTGESDAP@=N<:~pmɱ㩠و{؇y؅w؄vقtقtفsڃtᝑ껴婠܇x{kzizhyhygwfwfwfvfvfveudtdudud߂q峪pll]ZZ][[^]]_^^lkk駧jjjbbb```\\\TTTKKKLLLnnnbbb___YYYQQQHHHDDDmmm…IIIDDDNNNZZZbbbeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffeeeeeeddddccdbbc``a]]_ZY]WV[RQYNMVJHSEDQA?bSQکڨڧܩ⹲Ŀl[YQ>;O;9O>;QA>RB@RDATFDUIGVJIWKJXMLWMLXMLWLKVJIUHFSFCRB@P?=O=:wuε⦜ى|؈z؆x؅wՁsցqكtفsـqpـqޕ趭谦݋|zjyhyhxgwfwfwfwfvfveveue㐂ݶb__ZWWWUUTTTUUU\\\wvvדcccbbb___YYYQQQHHH[[[ٖdddbbb___XXXNNNEEEdddfffNNNZZZaaaeeefffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffVVVFFF666ffffffffffffffffffeeeeeeddddcccaaa^^`\[^XW\UTZPNWLJTGERCA_OMګک٨٧ڥ٤٥߯Ŀ}olYFDO<9O=;P?=QA?RCASEBSEDUGETGETGETFDSEBRCAQA>P>;O<:}Ը࢘ي|؉{؇y؆x؆wمvكtكtفsـqـpo}n~nݐ鳪»鳪zjyiygygwgxgwgwfwf研ϵ^\\YWWRQQKKKHHHJJJRRRaaacccbbb^^^VVVNNNFFFuuu€cccccc```XXXNNNMMMѝyyyhhheeegggoooppp]]]ccceeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333fffffffffffffffeeeddddddcbbb``a]]`[Z^VV\SRYNMVJISED\LKڬڪ٨֤֣ؤؤؤ٣ڡۦ⺱cRPO<9O;9O>;P?=QA>RB?QC?QC?QA>Q@=P>;O<9P=;ټޝً}؊|؈z؇y؇xمvلuكtكtفs}n|lo~n}n|m|m݊{筣붮ᔇ{lyixhxgxg}l认²~}a]]][[VUULLL('')((EEENNNYYYaaajjjllldddaaa[[[TTTKKKJJJ몪mmmddddddbbbZZZOOO]]]ꘘVVVEEEJJJQQQXXX]]]000111eeeeeedddddddddccccccbbbbbbcccddddddeeeffffffffffff333333fffffffffffffffffffffVVVFFF666fffffffffffffffeeeeeeddddccdbbc``a]]_ZY]WV[RQXNMVJH\NLۯڬڪ٩ڨئؤأأأآءڟڡ௧þмvgdT@=N;8N<9O<9O<:O<:O<9N;8M96R?<޽ޚٌ؋}؉{؈z؇zمxمvلuكtكtفs؁q؀p؀o~o}n|n{l{l{lކw稝컴䛎~nziw嶭qnma^^a__^]]_^^```[[[bbbdddccc```YYYQQQHHH\\\֔dddeeeeeeddd^^^TTTjjj便dddBBBBBBFFFKKKRRRXXX^^^bbbdddtttݧrrrbbbaaa```^^^\\\[[[ZZZZZZ[[[]]]___aaaccceeefffffffffffffffffffffffffffffffffVVVFFF666fffffffff333333eeeeeeddddccbbbb__`\\_ZY\VU[RQYNM\ONܲըզګ٨٧ڧؤؤأآءءؠ؟ٝٝݤ滴¿xx\IFM96L74L74L74K74T?=⿹ݗٍ؋~؋|؉|؈{نyمxمvلuكtكtقs؁r؀q~p~oyjyh}m}m}m|k{l߃t磘ꭣܹfbbb__caa111544___bbbbbb^^^VVVNNNFFFvvv~~~dddeeefffeeebbbZZZdddޟ^^^@@@@@@EEELLLTTT\\\aaa222IIIyyybbb```\\\YYYVVVRRRPPPNNNNNNNNNNNNPPPTTTXXX...000dddeeefffffffffffffffffffffffffffVVVFFF777fffffffffffffffeeeeeeddddccdbbb__`\\_ZY]WV[SQ[QPܴڰۮڬ٪کڨ٧٦ؤؤأآؠ؟؟؝؛ٜڛ۝᯦¾˹jXUN74I30VB?徹۔؍؍،؊}؊|وzنyمxمvلuكtكt؂s؁r؀q~p~p~n~n~n~n}m}l}l|k|kށqb^^b__caacbbdccrppՁbbbaaa\\\TTTKKKJJJ騨jjjdddfffffffffeeebbb[[[򟟟pppؖUUU;;;AAAKKKVVV^^^bbbccc```\\\WWWRRRMMMIIIGGGFFFEEEDDDDDDDDDDDDGGGKKKQQQXXX^^^bbbeeeffffffffffffffffffffffffVVVFFF666fffffffffffffffeeeeee222322dbbc``a]]_[Z]WW^WUز۱ۯڭڭڬڪ٩ڧڥ٥٣٣آءؠ؞؜؜؛ؘؙؚڙޥ張׾wt潶ړ؎؍،،~ً|ى{وzنyمxمvلuكtقt؂s؁sqـpp~on~n~nxhwf}m}mނr貨~{{b^^300311dccedddddddd~~~dddbbb]]]TTTJJJ\\\ӑdddeeeffffffffffffeeebbbQQQVVV]]]uuuҎTTTIIITTT\\\___\\\WWWPPP%%%###FFFOOObbbsss~~~yyyLLL222AAA@@@DDDLLLUUU]]]bbbeeefffffffffffffffffffffVVVFFF666ffffffffffffffffffeeeddddddcbbcaaa^^_\\`[Z߻۴ܲ۰ܯۭڬ۫کڨ٧ڥڤ٢١٠٠؟؝؝؛ؘؙؚؗؗؖۛ维渱ݝ؏؍،ً~ي{ى{وzنyنxمvلuكt؂t؂s؁rفqqpon~no~m~n~n~丱okkb^^c``dbbdccddddddeeeeeeeeehhhiiiffffffeeeaaaZZZPPPxxxzzzdddeeefffffffffffffffeeecccsssDDDMMMSSSUUUTTTlllΕbbbZZZXXXRRRKKKFFFQQQzzzПddd<<<@@@JJJUUU^^^dddfffffffffffffffffffffVVVFFF666ffffffffffffffffffeeeeeeedddccdbb300}zz࿹ݵܳݳ۱۰ۯۭ۬ګکڧڦڥ٤ڢڡٟٞٝ؛؛ؘؘؚؖؖؕݤ辷ড়辸ग़ڐً~ي{ى{؈z؆yنxمvلuكt؂t؂s؁rفqڀppڀooۀo܀n~n~n㚍ڹ"2..b__caacbbedddddeeeeeeeeeeeeffffffffffffeeebbbbbb祥jjjeeeffffffffffffffffffffffffdddqqq@@@DDDGGGIIIIIIGGGFFFzzz|||UUUNNNGGGTTTߖNNNDDDPPP[[[bbbeeeffffffffffffffffffVVVFFF666ffffffffffffffffffeeeeeeeddeddcbbcaaݺݶݶܴݳ۱ۯۭ۬ܫ۫ڨڧۦڤڣ١١ڟؘؙٜٝٝٛؗؗૡ渲ٓؐؐۚ峪ƿƾ尨ܖ؉{؈y؆xنxمvلuكt؂t؂s؁rفrڀpـpڀoڀoۀoۀpp稞ʲ_YX`\[a]]c``caacbbeddeddeeeeeeeeeeeefffffffffffffffpppЏdddeeefffffffffffffffffffffffffffeeehhhIIIDDDDDDJJJ```|||TTTLLLIII~~~྾|||jjjQQQ\\\bbbeeeffffffffffffffffffVVVFFF666ffffffffffffffffffeeeeee222222dcccbbsrrྲྀݵݴܱܲݰۮܬ۫۩ܨۧڥڤڣڢڠٟڝڛٛٛٙ٘ᰦ㵮ؓؒؐؐ؏َڑच躲ߞى|نxمvلuلt؂t؂s؁rفrځpڀppڀoۀo܅v賫VPO\VU_XX`\[a]]b__200211dccdddeddeeeeeeeeefffffffffffffffsssyyydddffffffffffffffffffffffffffffffffffffmmmἼИcccVVVLLLZZZ݊IIIgggeeeeeedddbbb...000uuu```dddfffffffffffffffffffffVVVFFF777fffffffffffffffffffffeeeeeeeeeddddcccbbcaakgg޶ݱݯܯݮ۪۬ܩۧۧۦۤڣۡ۠ڞٜٝښڙ䶭㱨ؕؔؒؑؐ؏؎؍ًٍܘ泩ǿļ䪠ێلuلt؂t؂s؁rفrڀpـpڀoڀoᷰf\[[RP]UT]XW_ZYa\\b^^c``caacbbdccddddddeeeeeeeeefffffffffffffffmmmkkkeeeffffffffffffffffffffffffffffffffffffffffffrrr˞qqqaaa[[[OOOnnnﱱ{{{dddeeeeeeeeeccc```ZZZTTTLLLHHH቉ccceeefffffffffffffffffffffVVVFFF666ffffffffffff333333ffffffeeeeeeeeedddeddcbbbbbb``c__qnmÿ㿷޲ݯܭܬݪ۩ۨۦۥܤۢڡڟ۞ڜڜ弴ᮦڗٕٔٓؒؐ؏؎؍،،~؋|ى{ۏᤛ龶ƾ跭ޗمv؂s؁rفqڀpـpڀpޙήZMKWLJYPN[SQ\UT]XW_ZY`\[b^^b__caacbb111222dddeeeeeeeeeffffffffffffffffffeeeffffffffffffffffffffffffffffffffffffffffffffffffffffff|||ξllleeeddd```VVVuuu{{{dddeeeeeeeeedddbbb]]]WWWPPPIIIYYYdddeeeffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffeeeeeeeeedddddddcccbbdbbb``b__daayvuƾᷰݭݫܪܨݧۥܤۤۢܡ۟ڞ»ૢژٖٕڕِْٓؐ؎؍؍،؊}؊|؈{؇zهyݗ紫Ž꽶⤙ۉ{فqqڀq檞ŬusRC@TFCUIGWLJYONZRP\UT^WV^YX`\[a]]b__caacbbeddeddeeeeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffflllnnnkkkgggeeefffffffffddd___jjjՃ\\\bbbddddddccc```ZZZSSSLLLHHHyyyޠjjjeeeffffffffffffffffffffffffffffffVVVFFF666333333ffffffffffffffffffffffffeeeeeeeeedddeddedddcccbbdbbcaac``b^^hdd_][»߰ݪݩܧݦݤۢܢޣ੠ڛۙۘڗڕٕړڒَُّ،؋~؋|؉{؈z؇y؇x؆wمwۊ|⤚ü䮣ܐ維jYWN<9P?;QA?SDBVIGWKIYOMZQP\SR]WV_XX_[Za]]b__caacbbeddedd222222ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffddd___MMMWWW]]]______\\\VVVPPPIIIYYYdddeeefff333333ffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffeeeeeeeeeeeedddddddccdcccbbcaab``c``b_^nkk㹲ުݧݥܣިߧ۝ܜۚۙڗۖڔڔْڑڐڏًٌَ}؊|؉{؇y؆x؅w؄v؂t؂tمvޖ꾷҆wtT@=L85M;8P>;QA>SDAUGEVJHXMKYQO[TR]VU^YX`\[b^^c``dbbdccdddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeennnIIIFFFLLLRRRTTTSSSPPPKKKHHHyyyݠjjjeeefffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeddddddedddcccbbcbbcaab``b__633OKKļľᱪ߭ަݟ۞ܜۜۛܙۗڕڕۓڒڑَڎڍڌ~ي|ى{؈z؇y؅w؄vԁrԀq؂s鷮姜޸~aPMO<9O=;P@=RCATFDVJHXMKZPO[TR]WV_ZY`\\a^^caacbbddddddeeeffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333222ttt\\\AAACCCDDDEEEEEEDDDVVVdddeeeffffffffffffffffffffffff333333ffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeddddddddddcccbbdbbcaac``b^^hdd}}୤ݢݠܟݞ۝ۜܙۙۖۖ۔ړڑېڏٌٌڋ}ڊ{و{هyنx؅w؄t؄t㨞娝ـq~oځq䳫еsebTCAQ@=RCATFDVJHXML[RP\UT^XX_[Zb^^c``cbbdcceddeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffjjjvvvLLL>>>;;;>>>wwwڞiiieeeffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeddddddddddccdcccbbcaab``300300lih㴬ޤݟݞܜݚۙݘܗەܔےۑڏێڍڌ~ً}ԄwՃvچyنxۉ{趭¼؀qp~o~n|m|n܈y䦛ݸ~|`ROTDCVIGWLJZPO\SR]WW`ZZa]]c``bbbcccdddeeeeeefffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff~~~Ͱ~~~dddeeefffffffffffffffffffffffffffffffffffffffffffff333333VVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeedddeddedddcccbbcbbcaab``b__c``urr᫡ޟݛܚܘݗۖݖۓےܑېێێی~ډ}ډ{وyޒ꾷뾷ޑفsـqp~o~n|m|k{k{j~p☌㴫ɱshg[PNYON[SR^WV_ZYa]]c``bbbdcceddeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeennnڝjjjeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeedddeddedddcccbbdbb200300b__gdd}|巰ࣙݛݙܗݗݕ۔ܒՊ}ԉ|ۍیڋ}ۊ}⡖Ľ跮ۈzلtڂsځrq~p}o|n|k{k{jyjyizj{媠ڹf^]^WV`[Za]]c``bbbcccdddeeeeeefffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffdddbbb]]]WWWWWW```󺺺~~~dddeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFFffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeddddddeddedddcccbbdbbb``c``b__lihĽ䭥ޝݖݕܕݓےې܏ێ܍尦ļ嬢ۇyچwڄuقtقsڀqp~n}m|l{kzkzizjzjzhzhހq㜎㷯ɸwsrc__b``cbbddddddeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeebbb\\\TTTMMMHHH|||؛iiieeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeddddddddddccdcc211200b``b__da`spoᶮڞޘݔܒܒݐݓ꼴⡖܈zۉzچwچvڄuڂtځqڀqo~n}m|l{l{j{kzjziyiyiyh{kᎀ豧Ϙgeedccdddeeeeeeffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffccc^^^UUULLL[[[򸸸|||dddeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeddddddddddcccbbdbbcaac``b__fcb}{zʽ沫ߝݓľýߙی~܊|ۉzۈz܆xۄvڄuڂrہrpn~n~n}m|k{l{jzjzjzjziyhz浬}||cbbedddddeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeebbb\\\VVVךhhheeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeddddddedd211311caac``a^^khgºޓݏ܍݋}ۊ|ۉz܇yۆxۅv܄sۂsہqpo~n}m}l}l|l{k{kzj{k染׸iffdbbdccdddeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffdddppp򸸸|||dddeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeedddeddedddccdcccbbcaab``b__c__spo¾纱᠕ސ݌~܋|݊{݈yۇwۅw܄uۃsہsہrۀpۀo~m}m}m|l|l|l߅v鳫c``caadccddddddeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffrrr֗gggeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333222eeeeeeeeedddedd322211cbbdbbcaab``b__fba{xwƹ¼籧ߗ݌~݉z܈y܇w݅w݄vۃtۂrہqۀqo~n~n~n}m䚍ܸnkjc``caadccedddddeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffff˷{{{dddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeedddeddedddcccbbdbbcaac``a^^jffѽ澸妜ޏ݈z݆w݅v܄u܃t܂s܁q݀p݀poޅu豦ɷb__c``dbbdccedddddeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffpppiiiffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffeeeeeeeeeeeeeee222222dccdcccbbcaab``c``c__qnm路㜐މ{݅u݄t݃t݃r݁q݁q㕈㼵vrrb__b``dbbdccdddeddeeeeeefffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeddddddddddcccbbcbbcaac``b__daazvvŸᾹ讥ᓅޅu݃tބu謡Ѹebbc``caacbbdccdddeeeeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeee222222dddedddcccbbdbbcaac``c__ieeϻ廴窡缵~{{c``caacbbdccedddddeeeeeeeeefffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333+++FFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeeddddddcccdcccbbbbbcaacaadaaommjhhdbbcbbdccddddddeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeee222222dddddddddedddccdcccbbcbbdbbfeedbbdcceddedddddeeeeeeeeefffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffVVVFFF777ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeeeedddddddddeddeddeddeddeddedddddeeeeeeeeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff222222eeeeeeeeeeeeeeeeeeeeeeeeeeeeeefffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffVVVFFF666ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffff333333ffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666ffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF666fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff333333ffffffffffffVVVFFF777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffVVVFFF777tiled-1.8.2/dist/win/gpl-2.0.rtf000066400000000000000000000400031420372404100161510ustar00rootroot00000000000000{\rtf1\ansi\ansicpg1250\deff0\deflang1033\deflangfe1060{\fonttbl{\f0\fswiss\fprq2\fcharset238 Verdana;}{\f1\fmodern\fprq1\fcharset238 Lucida Console;}} {\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\nowidctlpar\sb100\sa100\qc\lang1060\kerning36\b\f0\fs28 GNU General Public License\par \kerning0\b0\fs16 Version 2, June 1991\par \pard\nowidctlpar\f1\fs14\par Copyright (C) 1989, 1991 Free Software Foundation, Inc.\par 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA\par \par Everyone is permitted to copy and distribute verbatim copies\par of this license document, but changing it is not allowed.\par \par \pard\keepn\nowidctlpar\sb100\sa100\qc\b\f0\fs20 Preamble\fs24\par \pard\nowidctlpar\fi142\sb100\sa100\b0\fs16 The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. \par When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. \par To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. \par For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. \par We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. \par Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. \par Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. \par The precise terms and conditions for copying, distribution and modification follow. \par \pard\keepn\nowidctlpar\sb100\sa100\qc\b\fs20 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par \pard\nowidctlpar\fi142\sb100\sa100\fs16 0.\b0 This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". \par \pard\nowidctlpar\sb100\sa100 Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. \par \pard\nowidctlpar\fi142\sb100\sa100\b 1.\b0 You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. \par \pard\nowidctlpar\sb100\sa100 You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. \par \pard\nowidctlpar\fi142\sb100\sa100\b 2.\b0 You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: \par \pard\nowidctlpar\li284\sb100\sa100\b a)\b0 You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. \par \b b)\b0 You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. \par \b c)\b0 If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) \par \pard\nowidctlpar\sb100\sa100 These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. \par Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. \par In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. \par \pard\nowidctlpar\fi142\sb100\sa100\b 3.\b0 You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: \v \v0\par \pard\nowidctlpar\li284\sb100\sa100\b a)\b0 Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, \par \b b)\b0 Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, \par \b c)\b0 Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) \par \pard\nowidctlpar\sb100\sa100 The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. \par If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. \par \pard\nowidctlpar\fi142\sb100\sa100\b 4.\b0 You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. \par \b 5.\b0 You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. \par \b 6.\b0 Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. \par \b 7.\b0 If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. \par \pard\nowidctlpar\sb100\sa100 If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. \par It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. \par This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. \par \pard\nowidctlpar\fi142\sb100\sa100\b 8.\b0 If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. \par \b 9.\b0 The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. \par \pard\nowidctlpar\sb100\sa100 Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. \par \pard\nowidctlpar\fi142\sb100\sa100\b 10.\b0 If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. \par \pard\nowidctlpar\sb100\sa100\qc\fs20 NO WARRANTY\par \pard\nowidctlpar\fi142\sb100\sa100\b\fs16 11.\b0 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. \par \b 12.\b0 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. \par \pard\keepn\nowidctlpar\sb100\sa100\qc\b END OF TERMS AND CONDITIONS\fs20\par } tiled-1.8.2/dist/win/headerimage.bmp000066400000000000000000001032621420372404100173170ustar00rootroot00000000000000BM6(9 |  PE/]ߗ7$nKR7J<'Ãэ. qMlIlIsMr5$khFĄ>pLmJmJmJmJlJnK1vok4#nKlImJmJmJmJmJnKnKfE"ؐsySH0nKlImJmJmJmJmJmJmJlInKlIJ1>E.[bEP7oLlIlJmJmJmJmJmJmJmJmJmJlInKfFb7'eZ[CZAoOnMmKmJmJmJnJmJmJmJmJmJmIlJmKmOrWSEUD*) X_WU;+*뤛飛뤛륛꣚頖鞒雍蘋斅擀}yvx|芀鉂臃烁肁rBAHHHmmm666.!!履짞咽﨟吏xё꣛颚꣛飙韕靑蚎痊疆撄撀}{}鋁錄ꊆ釄{zA10```===uuu((("咽륜lg6%#[?<{桗ꤚ颙蟕蜐蚍昉旆蔃蓂}~茀芃銄vrNMM---hhhNNNrrrF1.褐yTPmMH뤜꣛뤜栘|v [?;頖盐蚍瘉症蔃撁}{y{}}HCbbbccc TTT999SSSRKKbC@T;8f`즜뤛ꤛꢛ룜쥜ђbD@ um虋瘇畄擀zvst2дNNN___ppp222OOOWWWYJI`[2"!xr履륝뤜ꤚꢚgb-]>9瘈똆~wswaC:-ۮUUUJJJ===gggmmm HHH^^^tttiQM{u=+*Γ륜륝룚렗vmL2,>(#k[|UF`bLWWWFFF)))---MKKfaѕ/! 觠蘒꟔雎ꚈgA8 X\Iddd+++&&&cccFFF 2..yꨠ"列霍瘉֋y~js_/hМ###1#"Ж쟒€t 蔀yuploA442%З }}}EEEhffB-+vOKZ;7ꛌ藆~xsnjہdpW*~ivvvfff555ZSR]>;#wr획ꖆ摀ysnkjoqdOG485XXXbRQ_[㣜 ݛ횏ꕉ瑂|ustw{~|PO`HGccc777((([[[ooooVS{uup?-,얌ꑅ莀}~爀腀烀x=<]]] >>>!Ӗ픍됈ꍆ댆鉅膃ꆄrpD55SSS'&&so颛픎푌쎊ꊇ鈆ZY[[[AAA }x쎋6""ddd}}0Їfeecc nffF'%օ9tiled-1.8.2/dist/win/installer.qbs000066400000000000000000000075401420372404100170720ustar00rootroot00000000000000import qbs import qbs.FileInfo import qbs.File import qbs.TextFile import qbs.Environment WindowsInstallerPackage { builtByDefault: project.windowsInstaller condition: { if (project.windowsInstaller) { if (!(qbs.toolchain.contains("mingw") || qbs.toolchain.contains("msvc"))) { console.error("Unsupported configuration for Windows installer"); return false; } } return project.windowsInstaller; } Depends { productTypes: ["application", "dynamiclibrary"] } Depends { name: "cpp" } Depends { name: "Qt.core" } property string version: Environment.getEnv("TILED_MSI_VERSION") || project.version property string bits: { if (qbs.architecture === "x86_64") return "64"; else return "32"; } targetName: "Tiled-" + project.version + "-win" + bits wix.defines: { var defs = [ "Version=" + version, "InstallRoot=" + qbs.installRoot, "QtDir=" + FileInfo.joinPaths(Qt.core.binPath, ".."), "QtVersionMajor=" + Qt.core.versionMajor, "QtVersionMinor=" + Qt.core.versionMinor, "RootDir=" + project.sourceDirectory ]; if (qbs.toolchain.contains("mingw")) defs.push("MingwDir=" + FileInfo.joinPaths(cpp.toolchainInstallPath, "..")); else if (qbs.toolchain.contains("msvc")) { if (cpp.compilerVersionMajor >= 19) { defs.push("VcUniversalCRT=true"); defs.push("VcInstallDir=" + cpp.toolchainInstallPath); } else { defs.push("VcInstallDir=" + FileInfo.joinPaths(cpp.toolchainInstallPath, "../..")); } } if (Qt.core.versionMinor >= 10 || Qt.core.versionMajor >= 6) defs.push("WindowsVistaStyle") if (File.exists(Environment.getEnv("PYTHONHOME"))) defs.push("Python"); var rpMapEnabled = (Qt.core.versionMajor > 5 || Qt.core.versionMinor >= 12) && !qbs.toolchain.contains("msvc") if (rpMapEnabled) defs.push("RpMap"); if (project.openSslPath) { defs.push("OpenSsl111Dir=" + project.openSslPath); } else { // Not sure what this check should be exactly, but Qt 5.6.3 was // built against OpenSSL 1.0.2 whereas Qt 5.12.5 was built against // OpenSSL 1.1.1. if (Qt.core.versionMajor >= 6 || Qt.core.versionMinor >= 12) { var openSslDir = "C:\\OpenSSL-v111-Win" + bits if (File.exists(openSslDir)) defs.push("OpenSsl111Dir=" + openSslDir); } else { var openSslDir = "C:\\OpenSSL-Win" + bits if (File.exists(openSslDir)) defs.push("OpenSsl102Dir=" + openSslDir); } } return defs; } wix.extensions: [ "WixUIExtension" ] files: [ "Custom_InstallDir.wxs", "Custom_InstallDirDlg.wxs", "installer.wxs" ] // This is a clever hack to make the rule that compiles the installer // depend on all installables, since that rule implicitly depends on // any "wxi" tagged products. Rule { multiplex: true inputsFromDependencies: ["installable"] Artifact { filePath: "dummy.wxi" fileTags: ["wxi"] } prepare: { var cmd = new JavaScriptCommand(); cmd.silent = true; cmd.sourceCode = function() { var tf; try { tf = new TextFile(output.filePath, TextFile.WriteOnly); tf.writeLine(""); } finally { if (tf) tf.close(); } }; return [cmd]; } } } tiled-1.8.2/dist/win/installer.wxs000066400000000000000000000611561420372404100171310ustar00rootroot00000000000000 INSTALLSHORTCUT=0 CMDLINE_INSTALLDIR CMDLINE_INSTALLDIR = 6 ?> = 6 and $(var.QtVersionMinor) >= 2 ?> = 6 and $(var.QtVersionMinor) >= 2 ?> INSTALLSHORTCUT = 6 and $(var.QtVersionMinor) >= 2 ?> 1 Launch $(var.ProductName) INSTALLDIR tiled-1.8.2/dist/win/push-to-itch.bat000066400000000000000000000002731420372404100173760ustar00rootroot00000000000000curl -fsS -o butler.exe https://dl.itch.ovh/butler/windows-amd64/head/butler.exe butler.exe push --userversion=%TILED_VERSION% release/install-root thorbjorn/tiled:%TILED_ITCH_CHANNEL% tiled-1.8.2/dist/win/qt.conf000066400000000000000000000000661420372404100156550ustar00rootroot00000000000000[Paths] Plugins = plugins Translations = translations tiled-1.8.2/docs/000077500000000000000000000000001420372404100135505ustar00rootroot00000000000000tiled-1.8.2/docs/Makefile000066400000000000000000000011371420372404100152120ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = python3 -msphinx SPHINXPROJ = Tiled SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) tiled-1.8.2/docs/README.md000066400000000000000000000005721420372404100150330ustar00rootroot00000000000000To generate the Tiled documentation, you need to install Python 3, Sphinx and the ReadTheDocs theme. On Ubuntu the following commands could be used: sudo apt install python3-pip pip3 install sphinx pip3 install sphinx_rtd_theme Or, alternatively: sudo apt install python3-sphinx-rtd-theme Then, the documentation can be generated by running: make html tiled-1.8.2/docs/_build/000077500000000000000000000000001420372404100150065ustar00rootroot00000000000000tiled-1.8.2/docs/_build/gettext/000077500000000000000000000000001420372404100164725ustar00rootroot00000000000000tiled-1.8.2/docs/_build/gettext/index.pot000066400000000000000000000017661420372404100203370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021, Tiled Documentation Writers # This file is distributed under the same license as the Tiled package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Tiled 1.7\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-04 15:28+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../../index.rst:10 #: ../../index.rst:10 msgid "User Manual" msgstr "" #: ../../index.rst:32 #: ../../index.rst:32 msgid "Reference" msgstr "" #: ../../index.rst:2 msgid "Tiled Documentation" msgstr "" #: ../../index.rst:6 msgid "If you're not finding what you're looking for on these pages, please don't hesitate to ask questions on the `Tiled Forum `_ or the `Tiled Discord `_." msgstr "" tiled-1.8.2/docs/_build/gettext/manual.pot000066400000000000000000005522701420372404100205060ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021, Tiled Documentation Writers # This file is distributed under the same license as the Tiled package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Tiled 1.7\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-09-07 13:45+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../../manual/automapping.rst:3 msgid "Automapping" msgstr "" #: ../../manual/automapping.rst:6 msgid "What is Automapping?" msgstr "" #: ../../manual/automapping.rst:8 msgid "Automapping is an advanced tool to automatically search certain combinations of tiles across layers in a map and to replace these parts with another combination. This allows the user to draw structures quickly and Automapping will generate a complex scenario from them, which would have taken much more time if manually crafted." msgstr "" #: ../../manual/automapping.rst:14 msgid "The goal of Automapping is that you only need to draw within one layer and everything else is setup for you. This brings some advantages:" msgstr "" #: ../../manual/automapping.rst:17 msgid "**Working speed** - you need less time to setup a map." msgstr "" #: ../../manual/automapping.rst:18 msgid "**Less errors** - the main reason is to reduce the error rate. If you have setup the rules properly, there are no hidden errors." msgstr "" #: ../../manual/automapping.rst:22 msgid "External Links" msgstr "" #: ../../manual/automapping.rst:24 msgid "`Automapping explained for Tiled 0.9 and later (YouTube) `__" msgstr "" #: ../../manual/automapping.rst:25 msgid "`Examples on Automapping `__" msgstr "" #: ../../manual/automapping.rst:26 msgid "`Tiled Map Editor Tutorial Part Three: AutoMap (YouTube) `__" msgstr "" #: ../../manual/automapping.rst:30 msgid "Setting it Up" msgstr "" #: ../../manual/automapping.rst:32 msgid "The Automapping feature looks for a text file called 'rules.txt' in the folder where the current map is located. Each line in this text file is either" msgstr "" #: ../../manual/automapping.rst:36 msgid "a path to a **rulefile**" msgstr "" #: ../../manual/automapping.rst:37 msgid "or a path to another textfile which has the same syntax (i.e. in another directory)" msgstr "" #: ../../manual/automapping.rst:39 msgid "or is a comment which is indicated by **#** or **//**" msgstr "" #: ../../manual/automapping.rst:41 msgid "A **rulefile** is a standard map file, which can be read and written by tiled (\\*.tmx). In one rulefile there can be multiple defined rules." msgstr "" #: ../../manual/automapping.rst:44 msgid "An automapping **rulefile** consists of 4 major parts:" msgstr "" #: ../../manual/automapping.rst:46 msgid "The definition of regions describes which locations of the rulemap are actually used to create Automapping rules." msgstr "" #: ../../manual/automapping.rst:48 msgid "The definition of inputs describes which kind of pattern the working map will be searched for." msgstr "" #: ../../manual/automapping.rst:50 msgid "The definition of outputs describes how the working map is changed when an input pattern is found." msgstr "" #: ../../manual/automapping.rst:52 msgid "The map properties are used to fine-tune the input pattern localization and the output of all rules within this rules file." msgstr "" #: ../../manual/automapping.rst:56 msgid "Defining the Regions" msgstr "" #: ../../manual/automapping.rst:58 msgid "There must be either a tile layer called **regions** or there must be both tile layers **regions\\_input** and **regions\\_output**. Using the **regions** layer, the region defined for input and output is the same. Using the different layers **regions\\_input** and **regions\\_output** delivers the possibility to have different regions for the input section and the output section. The region layer(s) are only used to mark regions where an Automapping rule exists. Therefore, it does not matter which tiles are used in this layer, since these tiles are just used to define a region. So either use any tile or no tile at a coordinate to indicate if that coordinate belongs to a rule or if it doesn't." msgstr "" #: ../../manual/automapping.rst:69 msgid "If multiple rules are defined in one rulemap file, the regions must not be adjacent. That means there must be at least one tile of unused space in between two rules. If the regions are adjacent (coherent) then both regions are interpreted as one rule." msgstr "" #: ../../manual/automapping.rst:75 msgid "Multiple Rules in One Rulefile" msgstr "" #: ../../manual/automapping.rst:77 msgid "Multiple rules are possible in one rulemap. However, if you want to have the rules applied in a certain sequence, you should use multiple **rulefiles** and define the sequence within the **rules.txt** file. As of now there also is a certain sequence within one rulemapfile. Generally speaking the regions with small y value come first. If there are regions at the same y value, then the x value is taken into account. On orthogonal maps this ordering scheme is the same as for reading in most western countries (Left to right, top to bottom). The order within one rulemap may be changed later, once tiled is capable of utilizing multiple threads/processors. So if you want to rely on a certain sequence, use different rulemaps and order these in the rules.txt" msgstr "" #: ../../manual/automapping.rst:90 msgid "Definition of Inputs" msgstr "" #: ../../manual/automapping.rst:92 msgid "Inputs are generally defined by tile layers which name follows this scheme:" msgstr "" #: ../../manual/automapping.rst:95 msgid "**input[not][index]\\_name**" msgstr "" #: ../../manual/automapping.rst:97 msgid "where the **[not]** and **[index]** are optional. After the first underscore there will be the name of the input layer. The input layer name can of course include more underscores." msgstr "" #: ../../manual/automapping.rst:101 msgid "The **name** determines which layer on the working map is examined. So for example the layer *input\\_Ground* will check the layer called *Ground* in the working map for this rule. *input\\_test\\_case* will check the layer *test\\_case* in the working map for this rule." msgstr "" #: ../../manual/automapping.rst:106 msgid "Multiple layers having the same name and index is explicitly allowed and is intended. Having multiple layers of the same name and index , will allow you to define different possible tiles per coordinate as input." msgstr "" #: ../../manual/automapping.rst:110 msgid "The index is used to create complete different input conditions. All layers having the same index are taken into account for forming one condition. Each of these conditions are checked individually." msgstr "" #: ../../manual/automapping.rst:114 msgid "index must not contain an underscore." msgstr "" #: ../../manual/automapping.rst:115 msgid "index must not start with *not*." msgstr "" #: ../../manual/automapping.rst:116 msgid "index may be empty." msgstr "" #: ../../manual/automapping.rst:118 msgid "If there are tiles in the standard input layers one of these tiles must be there to match the rule. The optional **[not]** inverts the meaning of that layer. So if there are **inputnot** layers, the tiles placed on them, must not occur in the working map at the examined region to make a rule match. Within one rule you can combine the usage of both input and inputnot layers to make rules input conditions as accurate as you need or as fuzzy as you need." msgstr "" #: ../../manual/automapping.rst:127 msgid "Definition of Outputs" msgstr "" #: ../../manual/automapping.rst:129 msgid "Outputs are generally defined by layers whichs name follows this scheme:" msgstr "" #: ../../manual/automapping.rst:131 msgid "**output[index]\\_name**" msgstr "" #: ../../manual/automapping.rst:133 msgid "which is very similar to the input section. At first there must be the word output. Then optionally an **[index]** may occur. After the first underscore there will be the name of the target layer. The target layer name can of course include more underscores." msgstr "" #: ../../manual/automapping.rst:138 msgid "All layers of the same index are treated as one possible output. So the intention of indexes in the outputs of rules is only used for random output." msgstr "" #: ../../manual/automapping.rst:142 msgid "The indexes in the output section have nothing to do with the indexes in the input section, they are independent. In the output section they are used for randomness. In the input section they are used to define multiple possible layers as input. So when there are multiple indexes within one rule, the output will be chosen fairly (uniformly distributed) across all indexes. So a dice will be rolled and one index is picked. All of the output layers carrying this index will be put out into the working map then." msgstr "" #: ../../manual/automapping.rst:151 msgid "Note that the output is not being checked for overlapping on itself. This can be achieved by setting the map property **NoOverlappingRules** to true." msgstr "" #: ../../manual/automapping.rst:156 #: ../../manual/export-gmx.rst:102 msgid "Map Properties" msgstr "" #: ../../manual/automapping.rst:158 msgid "The following map properties can be used to customize the behavior of the rules in a **rulefile**:" msgstr "" #: ../../manual/automapping.rst:170 msgid "DeleteTiles" msgstr "" #: ../../manual/automapping.rst:162 msgid "This map property is a boolean property: it can be true or false. If rules of this rulefile get applied at some location in your map, this map property determines if all other tiles are deleted before applying the rules. Consider a map where you have multiple layers. Not all layers are filled at all places. In that case all tiles of all layers should be cleared, so afterwards there are only the tiles which are defined by the rules. Since when not all tiles are cleared before, you will have still tiles from before at these places, which are not covered by any tile." msgstr "" #: ../../manual/automapping.rst:175 msgid "AutomappingRadius" msgstr "" #: ../../manual/automapping.rst:173 msgid "This map property is a number: 1, 2, 3 ... It determines how many tiles around your changes will be checked as well for redoing the Automapping at live Automapping." msgstr "" #: ../../manual/automapping.rst:190 msgid "MatchOutsideMap" msgstr "" #: ../../manual/automapping.rst:182 msgid "This map property determines whether rules can match even when their input region falls partially outside of a map. By default it is ``false`` for bounded maps and ``true`` for infinite maps. In some cases it can be useful to enable this also for bounded maps. Tiles outside of the map boundaries are simply considered empty unless one of either **OverflowBorder** or **WrapBorder** are also true." msgstr "" #: ../../manual/automapping.rst:189 msgid "Tiled 1.0 and 1.1 behaved as if this property was ``true``, whereas older versions of Tiled have behaved as if this property was ``false``." msgstr "" #: ../../manual/automapping.rst:203 msgid "OverflowBorder" msgstr "" #: ../../manual/automapping.rst:197 msgid "This map property customizes the behavior intended by the **MatchOutsideMap** property. When this property is ``true``, tiles outside of the map boundaries are considered as if they were copies of the nearest inbound tiles, effectively \"overflowing\" the map's borders to the outside region." msgstr "" #: ../../manual/automapping.rst:202 #: ../../manual/automapping.rst:215 msgid "When this property is ``true``, it implies **MatchOutsideMap**. Note that this property has no effect on infinite maps (since there is no notion of border)." msgstr "" #: ../../manual/automapping.rst:219 msgid "WrapBorder" msgstr "" #: ../../manual/automapping.rst:210 msgid "This map property customizes the behavior intended by the **MatchOutsideMap** property. When this property is ``true``, the map effectively \"wraps\" around itself, making tiles on one border of the map influence the regions on the other border and vice versa." msgstr "" #: ../../manual/automapping.rst:218 msgid "If both **WrapBorder** and **OverflowBorder** are ``true``, **WrapBorder** takes precedence over **OverflowBorder**." msgstr "" #: ../../manual/automapping.rst:223 msgid "NoOverlappingRules" msgstr "" #: ../../manual/automapping.rst:222 msgid "This map property is a boolean property: A rule is not allowed to overlap on itself." msgstr "" #: ../../manual/automapping.rst:225 msgid "These properties are map wide, meaning it applies to all rules which are part of the rulemap. If you need rules with different properties you can use multiple rulemaps." msgstr "" #: ../../manual/automapping.rst:230 #: ../../manual/export-gmx.rst:126 msgid "Layer Properties" msgstr "" #: ../../manual/automapping.rst:232 msgid "The following properties are supported on a per-layer basis:" msgstr "" #: ../../manual/automapping.rst:244 msgid "StrictEmpty" msgstr "" #: ../../manual/automapping.rst:235 msgid "This layer property is a boolean property. It can be added to **input** and **inputnot** layers to customize the behavior for empty tiles within the input region." msgstr "" #: ../../manual/automapping.rst:239 msgid "In \"StrictEmpty\" mode, empty tiles in the input region match empty tiles in the set layer. So when an \"input\" layer contains an empty tile within the input region, this means an empty tile is allowed at that location. And when an \"inputnot\" layer contains an empty tile within the input region, it means an empty tile is not allowed at that location." msgstr "" #: ../../manual/automapping.rst:247 msgid "Examples" msgstr "" #: ../../manual/automapping.rst:250 msgid "Abstract Input Layer Examples" msgstr "" #: ../../manual/automapping.rst:253 msgid "Having Multiple Input Layers with the Same Name" msgstr "" #: ../../manual/automapping.rst:255 msgid "Assume the following 3 tile layers as input, which possible inputs are there in the working map?" msgstr "" #: ../../manual/automapping.rst:259 #: ../../manual/automapping.rst:290 #: ../../manual/automapping.rst:365 #: ../../manual/automapping.rst:473 #: ../../manual/automapping.rst:502 #: ../../manual/automapping.rst:535 #: ../../manual/automapping.rst:582 #: ../../manual/automapping.rst:632 msgid "Tile layer" msgstr "" #: ../../manual/automapping.rst:259 #: ../../manual/automapping.rst:290 #: ../../manual/automapping.rst:365 #: ../../manual/automapping.rst:473 #: ../../manual/automapping.rst:502 #: ../../manual/automapping.rst:535 #: ../../manual/automapping.rst:582 #: ../../manual/automapping.rst:632 #: ../../manual/editing-tilesets.rst:51 #: ../../manual/using-commands.rst:33 msgid "Name" msgstr "" #: ../../manual/automapping.rst:261 #: ../../manual/automapping.rst:264 #: ../../manual/automapping.rst:267 #: ../../manual/automapping.rst:292 #: ../../manual/automapping.rst:295 #: ../../manual/automapping.rst:369 #: ../../manual/automapping.rst:475 #: ../../manual/automapping.rst:477 #: ../../manual/automapping.rst:479 #: ../../manual/automapping.rst:504 #: ../../manual/automapping.rst:506 #: ../../manual/automapping.rst:508 #: ../../manual/automapping.rst:539 #: ../../manual/automapping.rst:586 #: ../../manual/automapping.rst:588 #: ../../manual/automapping.rst:590 #: ../../manual/automapping.rst:592 #: ../../manual/automapping.rst:594 #: ../../manual/automapping.rst:636 msgid "input\\_Ground" msgstr "" #: ../../manual/automapping.rst:271 msgid "The following parts would be detected as matches for this rule:" msgstr "" #: ../../manual/automapping.rst:285 msgid "Input Layers Using Different Indexes" msgstr "" #: ../../manual/automapping.rst:287 msgid "Given the following 3 input tile layers:" msgstr "" #: ../../manual/automapping.rst:298 msgid "input2\\_Ground" msgstr "" #: ../../manual/automapping.rst:302 msgid "The last layer has an index unequal to the other indexes (which are empty). All following parts would be recognized as matches within the working map:" msgstr "" #: ../../manual/automapping.rst:318 msgid "The Mana World Examples" msgstr "" #: ../../manual/automapping.rst:320 msgid "The Mana World examples will demonstrate quite a lot of different Automapping features. At first a shoreline will be constructed, by first adding all the straight parts and afterwards another rule will correct the corners to make them also fit the given tileset. After the shoreline has been added, the waters will be marked as unwalkable for the game engine. Last but not least the grass should be made random by using 5 different grass tiles." msgstr "" #: ../../manual/automapping.rst:330 msgid "This is what we want to draw." msgstr "" #: ../../manual/automapping.rst:334 msgid "Here we have straight shorelines applied." msgstr "" #: ../../manual/automapping.rst:338 msgid "Here we have some corners." msgstr "" #: ../../manual/automapping.rst:342 msgid "And corners the other way round as well." msgstr "" #: ../../manual/automapping.rst:346 msgid "Here all unwalkable tiles are marked." msgstr "" #: ../../manual/automapping.rst:350 msgid "If you look closely at the grass, you'll see they are now randomized." msgstr "" #: ../../manual/automapping.rst:353 msgid "Basic Shoreline" msgstr "" #: ../../manual/automapping.rst:355 msgid "This example will demonstrate how a straight shoreline can easily be setup between shallow water grass tiles. In this example we will only implement the shoreline, which has grass in southern and water in northern direction." msgstr "" #: ../../manual/automapping.rst:360 msgid "So basically the meaning we will define in the input region is: *All tiles which are south of a water tile and are not water tiles themselves, will be replaced by a shoreline tile*" msgstr "" #: ../../manual/automapping.rst:367 #: ../../manual/automapping.rst:537 #: ../../manual/automapping.rst:584 #: ../../manual/automapping.rst:634 msgid "regions" msgstr "" #: ../../manual/automapping.rst:371 #: ../../manual/automapping.rst:510 msgid "output\\_Ground" msgstr "" #: ../../manual/automapping.rst:374 msgid "The region in which this Automapping rule should be defined is of 2 tiles in height and 1 tile in width. Therefore we need a layer called *regions* and it will have 2 tiles placed to indicate this region." msgstr "" #: ../../manual/automapping.rst:378 msgid "The input layer called *input\\_Ground* is depicted in the middle. Only the upper tile is filled by the water tile. The lower tile contains no tile. It is not an invisible tile, just no tile at all." msgstr "" #: ../../manual/automapping.rst:382 msgid "And whenever there is no tile in a place within the rule regions in an input layer, what kind of tiles will be allowed there? There will be allowed any tiles except all used tiles within all input layer with the same index and name." msgstr "" #: ../../manual/automapping.rst:387 msgid "Here we only have one tile layer as an input layer carrying only the water tile. Hence at the position, where no tile is located, all tiles except that water tile are allowed." msgstr "" #: ../../manual/automapping.rst:391 msgid "The output layer called *output\\_Ground* shows the tile which gets placed, if this rule matches." msgstr "" #: ../../manual/automapping.rst:395 msgid "Corners on a Shore Line" msgstr "" #: ../../manual/automapping.rst:397 msgid "This example is a continuation of the previous example. Now the corners of the given shoreline should be implemented automatically. Within this article we will just examine the bent in corner shoreline in the topleft corner. The other shoreline corners are constructed the same way. So after the example is applied, we would like to have the corners of the shoreline get suitable tiles. Since we rely on the other example being finished, we will put the rules needed for the corners into another new rulefile. (which is listed afterwards in rules.txt)" msgstr "" #: ../../manual/automapping.rst:414 msgid "The shoreline may have some more corners nearby, which means there may be more different tiles than the straight corner lines. In the figure we see all inputs which should be covered." msgstr "" #: ../../manual/automapping.rst:418 msgid "Both the tiles in the top right corner and in the lower left corner are directly adjacent to the desired (slightly transparent) tile in the top left corner." msgstr "" #: ../../manual/automapping.rst:422 msgid "We can see 3 different tiles for the lower left corner, which is straight shore line, bent inside and bent outside shore lines." msgstr "" #: ../../manual/automapping.rst:425 msgid "Also we see 3 different inputs for the top right corner, which also is straight, bent in or out shore line." msgstr "" #: ../../manual/automapping.rst:429 msgid "Input and Output Regions" msgstr "" #: ../../manual/automapping.rst:431 msgid "So with this rule we want to put the bent in shore line tile in the top left corner, we don't care which tile was there before. Also we don't care about the tile in the lower right corner. (probably water, but can be any decorative watertile, so just ignore it)." msgstr "" #: ../../manual/automapping.rst:440 msgid "Therefore we will need different input and output regions. In the figure we can see the both tile layers regions input and regions output. The input section covers just these two tiles as we discussed. The output region covers just the single tile we want to output. Though the input and output region do not overlap, the united region of both the input and the output region is still one coherent region, so it's one rule and works." msgstr "" #: ../../manual/automapping.rst:448 msgid "Output regions can be larger than absolutely required, since where there are no tiles in an output region, the tiles in the working map are not overwritten but just kept as is, hence each output region could also be sized as the united region of both the output and input region." msgstr "" #: ../../manual/automapping.rst:454 msgid "Input Layers" msgstr "" #: ../../manual/automapping.rst:456 msgid "Now we want to put all the nine possible patterns we observed as possible input for this rule. We could of course define nine different layers *input1\\_Ground* up to *input9\\_Ground*" msgstr "" #: ../../manual/automapping.rst:460 msgid "Nine TileLayers?! What a mess, we'll do it a better way." msgstr "" #: ../../manual/automapping.rst:462 msgid "Also, consider having not just 3 possible tiles at the 2 locations but 4. Then we would need 4\\*4=16 tilelayers to get all conditions. Another downside of this comes with more needed locations: Think of more than 2 locations needed to construct a ruleinput. So for 3 locations, then each location could have the 3 possibilites, hence you need 3\\*3\\*3 = 27 tilelayers. It's not getting better..." msgstr "" #: ../../manual/automapping.rst:469 msgid "So let's try a smart way: All input layers have the same name, so at each position any of the three different tiles is valid." msgstr "" #: ../../manual/automapping.rst:483 msgid "Output Layer" msgstr "" #: ../../manual/automapping.rst:485 msgid "The output is straight forward, since only one tile is needed. No randomness is needed, hence the index is not needed to be varied, so it's kept empty. The desired output layer is called Ground, so the over all name of the single output layer will be output\\_Ground. The correct tile is placed at the correct location with this layer." msgstr "" #: ../../manual/automapping.rst:496 msgid "The Other Corners on a Shore Line" msgstr "" #: ../../manual/automapping.rst:498 msgid "This is for corners bent the other way round. Basically it has the same concepts, just other tiles." msgstr "" #: ../../manual/automapping.rst:512 msgid "regions\\_input" msgstr "" #: ../../manual/automapping.rst:514 msgid "regions\\_output" msgstr "" #: ../../manual/automapping.rst:518 msgid "Adding Collision Tiles" msgstr "" #: ../../manual/automapping.rst:520 msgid "The Mana World uses an extra tile layer called *Collision* to have information about whether a player is able to walk on certain tiles or not. That layer is invisible to the player, but the game engine parses it, whether there is a tile or there is no tile." msgstr "" #: ../../manual/automapping.rst:525 msgid "So we need to decide for each position if a player can walk there and put a tile into the *Collision* layer if it is unwalkable." msgstr "" #: ../../manual/automapping.rst:528 msgid "As *input* layer we will parse the *Ground* layer and put collision tiles where the player should not walk." msgstr "" #: ../../manual/automapping.rst:531 msgid "Actually this task is a bunch of rules, but each rule itself is very easy:" msgstr "" #: ../../manual/automapping.rst:541 msgid "output\\_Collision" msgstr "" #: ../../manual/automapping.rst:544 msgid "In the above *regions* layer we have 14 different rules, because there are 14 incoherent regions in the *regions* layer. That's 9 different water tiles, which should be unwalkable and 5 different grass tiles which will be placed randomly in the next example." msgstr "" #: ../../manual/automapping.rst:549 msgid "As input we will have one of all the used tiles and as output there is either a tile in the *Collision* layer or not." msgstr "" #: ../../manual/automapping.rst:552 msgid "**Do we need the rules with clean output?** No, it is not needed for one run of Automapping. But if you are designing a map, you will likely add areas with collision and then remove some parts of it again and so on." msgstr "" #: ../../manual/automapping.rst:556 msgid "So we need to also remove the collision tiles from positions, which are not marked by a collision any more. This can be done by adding the map property *DeleteTiles* and setting it to *yes* or *true*. Then all the parts in the *Collision* layer will be erased before the Automapping takes place, so the collision tiles are only placed at real unwalkable tiles and the history of if there has been a collision tile placed is neglected." msgstr "" #: ../../manual/automapping.rst:564 msgid "Random Grass Tiles" msgstr "" #: ../../manual/automapping.rst:566 msgid "In this example we will shuffle all grass tiles, so each grass tile will be replaced with a randomly chosen tile." msgstr "" #: ../../manual/automapping.rst:569 msgid "As input we will choose all of our grass tiles. This is done by having each tile in its own input layer, so each grass tile gets accepted for this rule." msgstr "" #: ../../manual/automapping.rst:573 msgid "As output we will also put each grass tile into one output layer. To make it random the *index* of the output layers needs to be different for each layer." msgstr "" #: ../../manual/automapping.rst:577 msgid "The following rule might look the same, but there are different grass tiles. Each grass tile is in both one of the input and one of the output layers (the order of the layers doesn't matter)." msgstr "" #: ../../manual/automapping.rst:596 msgid "output1\\_Ground" msgstr "" #: ../../manual/automapping.rst:598 msgid "output2\\_Ground" msgstr "" #: ../../manual/automapping.rst:600 msgid "output3\\_Ground" msgstr "" #: ../../manual/automapping.rst:602 msgid "output4\\_Ground" msgstr "" #: ../../manual/automapping.rst:604 msgid "output5\\_Ground" msgstr "" #: ../../manual/automapping.rst:608 msgid "An Alternating Wall" msgstr "" #: ../../manual/automapping.rst:610 msgid "This example will demonstrate how a wall as a transition between a walkable area and the non-walkable black void can easily be setup. As input a dedicated set layer will be used." msgstr "" #: ../../manual/automapping.rst:619 msgid "In my opinion a dedicated set layer is much easier to use for the rough draft, but for adding details such as collision information on decorative tiles the input should use the decoration." msgstr "" #: ../../manual/automapping.rst:623 msgid "The structure of the input, output and region layer is very similar to the example of the straight shoreline in The Mana World examples. The main difference is the different size. Since the wall contains multiple tiles in height, the height of the rule layers are different as well. Vertically the tiles are also alternating. As you can see in the following figure, every second tile displaying the base board of the wall has a notch for example." msgstr "" #: ../../manual/automapping.rst:638 msgid "output\\_Walls" msgstr "" #: ../../manual/automapping.rst:641 msgid "Hence the region in which this Automapping rule should be defined is of 4 tiles in height and 2 tile in width. Therefore we need a layer called *regions* and it will have 8 tiles placed to indicate this region. In the figure the top graphics shows such a region layer." msgstr "" #: ../../manual/automapping.rst:646 msgid "The input layer has the following meaning:" msgstr "" #: ../../manual/automapping.rst:648 msgid "*If there are 2 vertical adjacent brown tiles in the set layer and in the 3x2 tiles above here are no brown tiles, this rule matches.*" msgstr "" #: ../../manual/automapping.rst:651 msgid "Only the lowest 2 coordinates contain the brown tile. The upper coordinates contain no tile. (It is not an invisible tile, just no tile at all.) The input layer called *input\\_set* is depicted in the middle of the figure." msgstr "" #: ../../manual/automapping.rst:656 msgid "The output consists of only one layer as well called *output\\_Walls*. It contains the actual wall tiles." msgstr "" #: ../../manual/automapping.rst:661 msgid "Vertically the tiles are alternating." msgstr "" #: ../../manual/automapping.rst:666 msgid "A broken version of the rule, because *NoOverlappingRules* was not yet set." msgstr "" #: ../../manual/automapping.rst:668 msgid "When trying to match the input layer to the desired set layer (right picture of the figure at the beginning of the example), you will see it matches all the way along, with no regard of the vertical adjustment." msgstr "" #: ../../manual/automapping.rst:672 msgid "Hence when we use the rule as discussed now, we will get not the desired result, because this rule overlaps itself. The overlapping problem is shown in figure above." msgstr "" #: ../../manual/automapping.rst:676 msgid "Since the overlapping is not desired, we can turn it off by adding the map property *NoOverlappingRules* to the rulemap and setting it to *true*." msgstr "" #: ../../manual/automapping.rst:679 msgid "Keep in mind that the map property applies for all rules on that rule map." msgstr "" #: ../../manual/custom-properties.rst:2 msgid "Custom Properties" msgstr "" #: ../../manual/custom-properties.rst:4 msgid "One of the major strengths of Tiled is that it allows setting custom properties on all of its basic data structures. This way it is possible to include many forms of custom information, which can later be used by your game or by the framework you're using to integrate Tiled maps." msgstr "" #: ../../manual/custom-properties.rst:9 msgid "Custom properties are displayed in the Properties view. This view is context-sensitive, usually displaying the properties of the last selected object. For tiles in a tileset or objects on an object layer, it also supports multi-selection." msgstr "" #: ../../manual/custom-properties.rst:17 msgid "Properties View" msgstr "" #: ../../manual/custom-properties.rst:20 msgid "Adding Properties" msgstr "" #: ../../manual/custom-properties.rst:22 msgid "When you add a property (using the '+' button at the bottom of the Properties view), you are prompted for its name and its type. Currently Tiled supports the following basic property types:" msgstr "" #: ../../manual/custom-properties.rst:26 msgid "**bool** (true or false)" msgstr "" #: ../../manual/custom-properties.rst:27 msgid "**color** (a 32-bit color value)" msgstr "" #: ../../manual/custom-properties.rst:28 msgid "**file** (a relative path referencing a file)" msgstr "" #: ../../manual/custom-properties.rst:29 msgid "**float** (a floating point number)" msgstr "" #: ../../manual/custom-properties.rst:30 msgid "**int** (a whole number)" msgstr "" #: ../../manual/custom-properties.rst:31 msgid "**object** (a reference to an object) - *Since Tiled 1.4*" msgstr "" #: ../../manual/custom-properties.rst:32 msgid "**string** (any text, including multi-line text)" msgstr "" #: ../../manual/custom-properties.rst:38 msgid "Add Property Dialog" msgstr "" #: ../../manual/custom-properties.rst:40 msgid "The property type is used to choose a custom editor in the Properties view. Choosing a number or boolean type also avoids that the value will get quoted in JSON and Lua exports." msgstr "" #: ../../manual/custom-properties.rst:48 msgid "The context menu for custom file properties provides a quick way to open the file in its preferred editor. For object references, there is an action to quickly jump to the referenced object." msgstr "" #: ../../manual/custom-properties.rst:59 msgid "Tile Property Inheritance" msgstr "" #: ../../manual/custom-properties.rst:61 msgid "When custom properties are added to a tile, these properties will also be visible when an object instance of that tile is selected. This enables easy per-object overriding of certain default properties associated with a tile. This becomes especially useful when combined with :ref:`typed-tiles`." msgstr "" #: ../../manual/custom-properties.rst:67 msgid "Inherited properties will be displayed in gray (disabled text color), whereas overridden properties will be displayed in black (usual text color)." msgstr "" #: ../../manual/custom-properties.rst:74 msgid "Predefining Properties" msgstr "" #: ../../manual/custom-properties.rst:77 msgid "General Setup" msgstr "" #: ../../manual/custom-properties.rst:79 msgid "Usually you only use a limited set of object types in your game, and each type of object has a fixed set of possible properties, with specific types and default values. To save you time, Tiled allows predefining these properties based on the \"Type\" field for objects. You can set this up using the Object Types Editor, available from the *View* menu." msgstr "" #: ../../manual/custom-properties.rst:90 msgid "Object Types Editor" msgstr "" #: ../../manual/custom-properties.rst:92 msgid "By default, Tiled stores these object types globally. However, since you'll often want to share them with other people in your project, you can export your object types or change the storage location of the object types file :doc:`for your project `. A simple XML or JSON file with self-explanatory contents is used to store your object types." msgstr "" #: ../../manual/custom-properties.rst:98 msgid "The color not only affects the rendering of the various shapes of objects, but is also the color of the label which will show up if you give your object a name." msgstr "" #: ../../manual/custom-properties.rst:102 msgid "To make the predefined properties show up in the Properties view, all you need to do is to enter the name of the type in the built-in \"Type\" property. Usually this is what you're doing already anyway to tell your engine what kind of object it is dealing with." msgstr "" #: ../../manual/custom-properties.rst:114 msgid "Typed Tiles" msgstr "" #: ../../manual/custom-properties.rst:116 msgid "If you're using :ref:`tile objects `, you can set the type on the tile to avoid having to set it on each object instance. Setting the type on the tile makes the predefined properties visible when having the tile selected, allowing to override the values. It also makes those possibly overridden values visible when having a tile object instance selected, again allowing you to override them." msgstr "" #: ../../manual/custom-properties.rst:123 msgid "An example use-case for this would be to define custom types like \"NPC\", \"Enemy\" or \"Item\" with properties like \"name\", \"health\" or \"weight\". You can then specify values for these on the tiles representing these entities. And when placing those tiles as objects, you can override those values if you need to." msgstr "" #: ../../manual/custom-properties.rst:None #: ../../manual/editing-tilesets.rst:None #: ../../manual/layers.rst:None #: ../../manual/objects.rst:None #: ../../manual/projects.rst:None #: ../../manual/using-templates.rst:None msgid "Future Extensions" msgstr "" #: ../../manual/custom-properties.rst:132 msgid "There are several types of custom properties I'd like to add:" msgstr "" #: ../../manual/custom-properties.rst:134 msgid "**Enumerations**, where you can predefine all possible values and it forms a combo box (`#1211 `__)." msgstr "" #: ../../manual/custom-properties.rst:137 msgid "**Array properties**, which would be properties having a list of values (`#1493 `__)." msgstr "" #: ../../manual/custom-properties.rst:139 msgid "**Dictionary properties**, which would be properties that can contain any number of other properties as children (`#489 `__)." msgstr "" #: ../../manual/custom-properties.rst:143 msgid "It would also be nice to add support for **limiting property values**, like the length of string properties or a minimum/maximum on number values." msgstr "" #: ../../manual/custom-properties.rst:147 msgid "Apart from predefining properties based on object type, I'd like to add support for **predefining the properties for each data type**. So defining which custom properties are valid for maps, tilesets, layers, etc. (`#1410 `__)" msgstr "" #: ../../manual/custom-properties.rst:152 #: ../../manual/editing-tilesets.rst:247 #: ../../manual/layers.rst:196 #: ../../manual/objects.rst:383 #: ../../manual/projects.rst:83 msgid "If you like any of these plans, please help me getting around to it faster by `sponsoring Tiled development `__. The more support I receive the more time I can afford to spend improving Tiled!" msgstr "" #: ../../manual/editing-tile-layers.rst:2 msgid "Editing Tile Layers" msgstr "" #: ../../manual/editing-tile-layers.rst:4 msgid ":ref:`tile-layer-introduction` are what makes Tiled a *tile map editor*. Although not as flexible as :ref:`object-layer-introduction`, they provide efficient data storage and good rendering performance as well as efficient content creation. Every new map gets one by default, though feel free to delete it when you're not going to use it." msgstr "" #: ../../manual/editing-tile-layers.rst:13 msgid "Stamp Brush" msgstr "" #: ../../manual/editing-tile-layers.rst:15 msgid "Shortcut: ``B`` |stock-tool-clone|" msgstr "" #: ../../manual/editing-tile-layers.rst:17 msgid "The primary tool for editing tile layers is the Stamp Brush. It can be used to paint single tiles as well as larger \"stamps\", which is where it gets its name from. Using the right mouse button, it can also quickly capture tile stamps from the currently active layer. A tile stamp is commonly created by selecting one or more tiles in the Tilesets view." msgstr "" #: ../../manual/editing-tile-layers.rst:23 msgid "The Stamp Brush has some extra features:" msgstr "" #: ../../manual/editing-tile-layers.rst:25 msgid "While holding ``Shift``, click any two points to draw a line between them." msgstr "" #: ../../manual/editing-tile-layers.rst:28 msgid "While holding ``Ctrl+Shift``, click any two points two draw a circle or ellipse centered on the first point." msgstr "" #: ../../manual/editing-tile-layers.rst:31 msgid "Activate the *Random Mode* using the dice button on the Tool Options toolbar to have the Stamp Brush paint with random tiles from the tile stamp. The probability of each tile depends on how often it occurred on the tile stamp, as well as the probability set on each tile in the *Tileset Editor*." msgstr "" #: ../../manual/editing-tile-layers.rst:37 msgid "Activate the *Terrain Fill Mode* using the Terrain tile |terrain| button on the tool bar to have the Stamp Brush paint using random terrain tiles. This makes adjacent tiles match edge and corner terrains to be placed. Terrain tiles are described in detail in :doc:`terrain`." msgstr "" #: ../../manual/editing-tile-layers.rst:42 msgid "In combination with the *Tile Stamps* view, it can also place randomly from a set of predefined tile stamps. This can be more useful than the *Random Mode*, which randomly places individual tiles." msgstr "" #: ../../manual/editing-tile-layers.rst:47 msgid "You can flip the current tile stamp horizontally/vertically by using ``X`` and ``Y`` respectively. You can also rotate left/right by using ``Z`` and ``Shift+Z`` respectively. These actions can also be triggered from the Tool Options tool bar." msgstr "" #: ../../manual/editing-tile-layers.rst:55 msgid "Terrain Brush" msgstr "" #: ../../manual/editing-tile-layers.rst:57 msgid "Shortcut: ``T`` |terrain-edit|" msgstr "" #: ../../manual/editing-tile-layers.rst:59 msgid "The Terrain Brush allows for efficient editing with certain types of terrain transitions (corner-based, edge-based or a combination). Setting it up requires associating terrain information with your tiles, which is described in detail in :doc:`terrain`." msgstr "" #: ../../manual/editing-tile-layers.rst:64 msgid "Similarly to the :ref:`stamp-tool`, you can draw lines by holding ``Shift``. When holding ``Ctrl``, the size of the edited area is increased to cover an entire tile rather than just one corner or edge." msgstr "" #: ../../manual/editing-tile-layers.rst:72 msgid "When holding ``Alt``, the editing operations are also applied at a 180 degree rotation. This is especially useful when editing strategic maps where two sides need to have equal opportunities. The modifier works well in combination with either ``Shift`` for drawing lines or ``Ctrl`` for increasing the edited area." msgstr "" #: ../../manual/editing-tile-layers.rst:85 msgid "Bucket Fill Tool" msgstr "" #: ../../manual/editing-tile-layers.rst:87 msgid "Shortcut: ``F`` |stock-tool-bucket-fill|" msgstr "" #: ../../manual/editing-tile-layers.rst:89 msgid "The Bucket Fill Tool provides a quick way of filling empty areas or areas covered with the same tiles. The currently active tile stamp will be repeated in the filled area. It can also be used in combination with the *Random Mode*, or *Terrain Fill Mode*." msgstr "" #: ../../manual/editing-tile-layers.rst:94 msgid "When holding ``Shift``, the tool fills the currently selected area regardless of its contents. This is useful for filling custom areas that have been selected previously using one or more :ref:`tile-selection-tools`." msgstr "" #: ../../manual/editing-tile-layers.rst:98 #: ../../manual/editing-tile-layers.rst:115 msgid "You can also flip and rotate the current stamp as described for the :ref:`stamp-tool`." msgstr "" #: ../../manual/editing-tile-layers.rst:108 msgid "Shape Fill Tool" msgstr "" #: ../../manual/editing-tile-layers.rst:110 msgid "Shortcut: ``P`` |rectangle-fill|" msgstr "" #: ../../manual/editing-tile-layers.rst:112 msgid "This tool provides a quick way to fill rectangles or ellipses with a certain tile or pattern. Hold ``Shift`` to fill an exact square or circle." msgstr "" #: ../../manual/editing-tile-layers.rst:121 msgid "Eraser" msgstr "" #: ../../manual/editing-tile-layers.rst:123 msgid "Shortcut: ``E`` |stock-tool-eraser|" msgstr "" #: ../../manual/editing-tile-layers.rst:125 msgid "A simple eraser tool. Left click erases single tiles and right click can be used to quickly erase rectangular areas." msgstr "" #: ../../manual/editing-tile-layers.rst:132 msgid "Holding ``Shift`` erases on all layers." msgstr "" #: ../../manual/editing-tile-layers.rst:137 msgid "Selection Tools" msgstr "" #: ../../manual/editing-tile-layers.rst:139 msgid "There are various tile selection tools that all work in similar fashion:" msgstr "" #: ../../manual/editing-tile-layers.rst:141 msgid "|stock-tool-rect-select| **Rectangular Select** allows selection of rectangular areas (shortcut: ``R``)" msgstr "" #: ../../manual/editing-tile-layers.rst:144 msgid "|stock-tool-fuzzy-select-22| **Magic Wand** allows selection of connected areas filled with the same tile (shortcut: ``W``)" msgstr "" #: ../../manual/editing-tile-layers.rst:147 msgid "|stock-tool-by-color-select| **Select Same Tile** allows selection of same-tiles across the entire layer (shortcut: ``S``)" msgstr "" #: ../../manual/editing-tile-layers.rst:150 msgid "By default, each of these tools replaces the currently selected area. The following modifiers can be used to change this behavior:" msgstr "" #: ../../manual/editing-tile-layers.rst:153 msgid "Holding ``Shift`` expands the current selection with the new area" msgstr "" #: ../../manual/editing-tile-layers.rst:154 msgid "Holding ``Ctrl`` subtracts the new area from the current selection" msgstr "" #: ../../manual/editing-tile-layers.rst:155 msgid "Holding ``Ctrl`` and ``Shift`` selects the intersection of the new area with the current selection" msgstr "" #: ../../manual/editing-tile-layers.rst:158 msgid "You can also lock into one of these modes (Add, Subtract or Intersect) by clicking on one of the tool buttons in the Tool Options toolbar." msgstr "" #: ../../manual/editing-tile-layers.rst:162 msgid "Managing Tile Stamps" msgstr "" #: ../../manual/editing-tile-layers.rst:164 msgid "It can often be useful to store the current tile stamp somewhere to use it again later. The following shortcuts work for this purpose:" msgstr "" #: ../../manual/editing-tile-layers.rst:167 #: ../../manual/keyboard-shortcuts.rst:88 msgid "``Ctrl + 1-9`` - Store current tile stamp. When no tile drawing tool is selected, tries to capture the current tile selection (similar to ``Ctrl + C``)." msgstr "" #: ../../manual/editing-tile-layers.rst:170 msgid "``1-9`` - Recall the stamp stored at this location (similar to ``Ctrl + V``)" msgstr "" #: ../../manual/editing-tile-layers.rst:173 msgid "Tile stamps can also be stored by name and extended with variations using the *Tile Stamps* view." msgstr "" #: ../../manual/editing-tilesets.rst:2 msgid "Editing Tilesets" msgstr "" #: ../../manual/editing-tilesets.rst:4 msgid "To edit a tileset it needs to be opened explicitly for editing. External tilesets can be opened via the *File* menu, but in general the quickest way to edit the tileset when it is already open in the *Tilesets* view is to click the small *Edit Tileset* button in the tool bar below the tileset." msgstr "" #: ../../manual/editing-tilesets.rst:11 msgid "Two Types of Tileset" msgstr "" #: ../../manual/editing-tilesets.rst:13 msgid "A tileset is a collection of tiles. Tiled currently supports two types of tilesets, which are chosen when creating a new tileset:" msgstr "" #: ../../manual/editing-tilesets.rst:22 msgid "Based on Tileset Image" msgstr "" #: ../../manual/editing-tilesets.rst:17 msgid "This tileset defines a fixed size for all tiles and the image from which these tiles are supposed to be cut. In addition it supports a margin around the tiles and a spacing between the tiles, which allows for using tileset images that either happen to have space between or around their tiles or those that have extruded the border pixels of each tile to avoid color bleeding." msgstr "" #: ../../manual/editing-tilesets.rst:27 msgid "Collection of Images" msgstr "" #: ../../manual/editing-tilesets.rst:25 msgid "In this type of tileset each tile refers to its own image file. It is useful when the tiles aren't the same size, or when the packing of tiles into a texture is done later on." msgstr "" #: ../../manual/editing-tilesets.rst:29 msgid "Regardless of the type of tileset, you can associate a lot of meta- information with it and its tiles. Some of this information can be for use in your game, like :ref:`collision information ` and :ref:`animations `. Other information is primarily meant for certain editing tools." msgstr "" #: ../../manual/editing-tilesets.rst:37 msgid "A tileset can be either embedded in a map file or saved externally. Since Tiled 1.0, the default and recommended approach is to save your tilesets to their own file. This simplifies your workflow since it makes sure any meta-information is shared between all maps using the same tileset." msgstr "" #: ../../manual/editing-tilesets.rst:44 msgid "Tileset Properties" msgstr "" #: ../../manual/editing-tilesets.rst:46 msgid "You can access the tileset properties by using the menu action *Tileset > Tileset Properties*." msgstr "" #: ../../manual/editing-tilesets.rst:50 msgid "The name of the tileset. Used to identify the tileset in the *Tilesets* view when editing a map." msgstr "" #: ../../manual/editing-tilesets.rst:66 msgid "Object Alignment" msgstr "" #: ../../manual/editing-tilesets.rst:58 msgid "The alignment to use for :ref:`tile objects ` referring to tiles from this tileset. This affects the placement of the tile relative to the position of the object (the origin) and is also the location around which the rotation is applied." msgstr "" #: ../../manual/editing-tilesets.rst:63 msgid "Possible values are: *Unspecified* (the default), *Top Left*, *Top*, *Top Right*, *Left*, *Center*, *Right*, *Bottom Left*, *Bottom* and *Bottom Right*. When unspecified, tile object alignment is generally *Bottom Left*, except for Isometric maps where it is *Bottom*." msgstr "" #: ../../manual/editing-tilesets.rst:71 msgid "Drawing Offset" msgstr "" #: ../../manual/editing-tilesets.rst:69 msgid "A drawing offset in pixels, applied when rendering any tile from the tileset (as part of tile layers or as tile objects). This is can be useful to make your tiles align to the grid." msgstr "" #: ../../manual/editing-tilesets.rst:75 msgid "Background Color" msgstr "" #: ../../manual/editing-tilesets.rst:74 msgid "A background color for the tileset, which can be set in case the default dark-gray background is not suitable for your tiles." msgstr "" #: ../../manual/editing-tilesets.rst:87 msgid "Orientation" msgstr "" #: ../../manual/editing-tilesets.rst:82 msgid "When the tileset contains isometric tiles, you can set this to *Isometric*. This value, along with the **Grid Width** and **Grid Height** properties, is taken into account by overlays rendered on top of the tiles. This helps for example when specifying :ref:`terrain-information`. It also affects the orientation used by the :ref:`tile-collision-editor`." msgstr "" #: ../../manual/editing-tilesets.rst:92 msgid "Columns" msgstr "" #: ../../manual/editing-tilesets.rst:90 msgid "This is a read-only property for tilesets based on a tileset image, but for image collection tilesets you can control the number of columns used when displaying the tileset here." msgstr "" #: ../../manual/editing-tilesets.rst:98 #: ../../manual/editing-tilesets.rst:128 msgid "Image" msgstr "" #: ../../manual/editing-tilesets.rst:95 msgid "This property only exists for tilesets based on a tileset image. Selecting the value field will show an *Edit...* button, allowing you to change the parameters relevant to cutting the tiles from the image." msgstr "" #: ../../manual/editing-tilesets.rst:100 msgid "Of course, as with most data types in Tiled, you can also associate :doc:`custom-properties` with the tileset." msgstr "" #: ../../manual/editing-tilesets.rst:105 msgid "Tile Properties" msgstr "" #: ../../manual/editing-tilesets.rst:108 msgid "ID" msgstr "" #: ../../manual/editing-tilesets.rst:108 msgid "The ID of the tile in the tileset (read-only)" msgstr "" #: ../../manual/editing-tilesets.rst:116 msgid "Type" msgstr "" #: ../../manual/editing-tilesets.rst:115 msgid "This property refers to custom types defined in the :ref:`Object Types Editor `. See the section about :ref:`typed-tiles` for more information." msgstr "" #: ../../manual/editing-tilesets.rst:119 msgid "Width and Height" msgstr "" #: ../../manual/editing-tilesets.rst:119 msgid "The size of the tile (read-only)" msgstr "" #: ../../manual/editing-tilesets.rst:124 msgid "Probability" msgstr "" #: ../../manual/editing-tilesets.rst:122 msgid "Represents a relative probability that this tile will get chosen out of multiple options. This value is used in *Random Mode* and by the :ref:`terrain-tool`." msgstr "" #: ../../manual/editing-tilesets.rst:127 msgid "Only relevant for tiles that are part of image collection tilesets, this shows the image file of the tile and allows you to change it." msgstr "" #: ../../manual/editing-tilesets.rst:133 msgid "Terrain Information" msgstr "" #: ../../manual/editing-tilesets.rst:135 msgid "Terrain information can be added to a tileset to enable the use of the :ref:`terrain-tool`. See the section about :ref:`defining terrain information `." msgstr "" #: ../../manual/editing-tilesets.rst:146 #: ../../manual/editing-tilesets.rst:161 msgid "Tile Collision Editor" msgstr "" #: ../../manual/editing-tilesets.rst:148 msgid "The tile collision editor is available by clicking the *Tile Collision Editor* |tile-collision-editor-icon| button on the tool bar. This will open a view where you can create and edit shapes on the tile. You can also associate custom properties with each shape." msgstr "" #: ../../manual/editing-tilesets.rst:153 msgid "Usually these shapes define collision information for a certain sprite or for a tile representing level geometry, but of course you could also use them to add certain hot-spots to your sprites like for particle emitters or the source of gunshots." msgstr "" #: ../../manual/editing-tilesets.rst:167 msgid "To be able to easily check whether your tiles have the right collision shapes set up, they can be rendered on the map. To enable this, check *Show Tile Collision Shapes* in the *View* menu. The collision shapes are rendered for both tile layers and tile objects." msgstr "" #: ../../manual/editing-tilesets.rst:175 msgid "Collision shapes rendered on the map. This map is from `Owyn's Adventure `__." msgstr "" #: ../../manual/editing-tilesets.rst:181 #: ../../manual/editing-tilesets.rst:194 msgid "Tile Animation Editor" msgstr "" #: ../../manual/editing-tilesets.rst:183 msgid "The tile animation editor allows defining a single linear looping animation with each tile by referring to other tiles in the tileset as its frames. Open it by clicking the *Tile Animation Editor* |tile-animation-editor-icon| button." msgstr "" #: ../../manual/editing-tilesets.rst:187 msgid "Tile animations can be live-previewed in Tiled, which is useful for getting a feeling of what it would look like in-game. The preview can be turned on or off via *View > Show Tile Animations*." msgstr "" #: ../../manual/editing-tilesets.rst:196 msgid "The following steps allow to add or edit a tile animation:" msgstr "" #: ../../manual/editing-tilesets.rst:198 msgid "Select the tile in the main Tiled window. This will make the *Tile Animation Editor* window show the (initially empty) animation associated with that tile, along with all other tiles from the tileset." msgstr "" #: ../../manual/editing-tilesets.rst:202 msgid "Drag tiles from the tileset view in the Tile Animation Editor into the list on the left to add animation frames. You can drag multiple tiles at the same time. Each new frame gets a default duration of 100 ms (or other value when set using the :guilabel:`Frame Duration` field at the top)." msgstr "" #: ../../manual/editing-tilesets.rst:207 msgid "Double-click on the duration of a frame to change it." msgstr "" #: ../../manual/editing-tilesets.rst:209 msgid "Drag frames around in the list to reorder them." msgstr "" #: ../../manual/editing-tilesets.rst:211 msgid "A preview of the animation shows in the bottom left corner." msgstr "" #: ../../manual/editing-tilesets.rst:213 msgid "You can change the duration of multiple frames at once by selecting them, changing the value in the :guilabel:`Frame Duration` field and then clicking :guilabel:`Apply`." msgstr "" #: ../../manual/editing-tilesets.rst:230 msgid "There are many ways in which the tileset editor can be made more efficient, for example:" msgstr "" #: ../../manual/editing-tilesets.rst:233 msgid "**Terrain Sets**" msgstr "" #: ../../manual/editing-tilesets.rst:235 msgid "Make it easier to set up terrain (`#1729 `__)" msgstr "" #: ../../manual/editing-tilesets.rst:237 msgid "**Tile Collision Editor**" msgstr "" #: ../../manual/editing-tilesets.rst:239 msgid "Allow setting collisions for multiple tiles at once (`#1322 `__)" msgstr "" #: ../../manual/editing-tilesets.rst:240 msgid "Render tile collision shapes to the tileset view (`#1281 `__)" msgstr "" #: ../../manual/editing-tilesets.rst:242 msgid "**Tile Animation Editor**" msgstr "" #: ../../manual/editing-tilesets.rst:244 msgid "Support multiple named animations per tile (`#986 `__)" msgstr "" #: ../../manual/editing-tilesets.rst:245 msgid "Make it easier to define animations spanning multiple tiles (`#811 `__)" msgstr "" #: ../../manual/export.rst:18 #: ../../manual/export.rst:18 msgid "Supported Formats" msgstr "" #: ../../manual/export.rst:2 msgid "Export Formats" msgstr "" #: ../../manual/export.rst:4 msgid "While there are many :doc:`libraries and frameworks ` that work directly with Tiled maps, Tiled also supports a number of additional file and export formats, as well as :ref:`exporting a map to an image `." msgstr "" #: ../../manual/export.rst:9 msgid "Exporting can be done by clicking *File > Export*. When triggering the menu action multiple times, Tiled will only ask for the file name the first time. Exporting can also be automated using the ``--export-map`` and ``--export-tileset`` command-line parameters." msgstr "" #: ../../manual/export.rst:14 msgid "Several :ref:`export-options` are available, which are applied to maps or tilesets before they are exported (without affecting the map or tileset itself)." msgstr "" #: ../../manual/export.rst:33 msgid "When exporting on the command-line on Linux, Tiled will still need an X server to run. To automate exports in a headless environment, you can use a headless X server such as `Xvfb`_. In this case you would run Tiled from the command-line as follows:" msgstr "" #: ../../manual/export-custom.rst:2 msgid "Custom Export Formats" msgstr "" #: ../../manual/export-custom.rst:4 msgid "Tiled provides several options for extending it with support for additional file formats." msgstr "" #: ../../manual/export-custom.rst:12 msgid "Using JavaScript" msgstr "" #: ../../manual/export-custom.rst:14 msgid "Tiled is :doc:`extendable using JavaScript ` and it is possible to add custom export formats using `tiled.registerMapFormat `__ or `tiled.registerTilesetFormat `__." msgstr "" #: ../../manual/export-custom.rst:20 msgid "Using Python" msgstr "" #: ../../manual/export-custom.rst:22 msgid "It is also possible to write :doc:`Python scripts ` to add support for importing or exporting custom map formats." msgstr "" #: ../../manual/export-custom.rst:26 msgid "Using C++" msgstr "" #: ../../manual/export-custom.rst:28 msgid "Currently all export options shipping with Tiled are written as C++ Tiled plugins. The API for such plugins is not documented (apart from Doxygen-style comments in the ``libtiled`` source code), but there are over a dozen examples you can look at." msgstr "" #: ../../manual/export-custom.rst:35 msgid "For binary compatibility reasons, a C++ plugin needs to be compiled for the same platform, by the same compiler and with the same versions of Qt and Tiled that the plugin is supposed to support. Generally, the easiest way to achieve this is by compiling the plugin along with Tiled, which is what all current plugins do. If you write a C++ plugin that could be useful for others, it is recommended you open a pull request to have it shipped with Tiled." msgstr "" #: ../../manual/export-defold.rst:2 msgid "Defold" msgstr "" #: ../../manual/export-defold.rst:4 msgid "Tiled can export to `Defold `__ using one of the two supplied plugins. Both are disabled by default." msgstr "" #: ../../manual/export-defold.rst:8 msgid "defold" msgstr "" #: ../../manual/export-defold.rst:10 msgid "This plugin exports a map to a `Defold Tile Map `__ (\\*.tilemap). It only supports tile layers and only a single tileset may be used." msgstr "" #: ../../manual/export-defold.rst:13 msgid "Upon export, the ``tile_set`` property of the Tile Map is left empty, so it will need to be set up in Defold after each export." msgstr "" #: ../../manual/export-defold.rst:21 msgid "defoldcollection" msgstr "" #: ../../manual/export-defold.rst:23 msgid "This plugin exports a map to a `Defold Collection `__ (\\*.collection), while also creating multiple .tilemap files." msgstr "" #: ../../manual/export-defold.rst:27 msgid "It supports:" msgstr "" #: ../../manual/export-defold.rst:29 msgid "Group layers (**only top-level group layers are supported, not nested ones!**)" msgstr "" #: ../../manual/export-defold.rst:30 msgid "Multiple Tilesets per Tilemap" msgstr "" #: ../../manual/export-defold.rst:32 msgid "Upon export:" msgstr "" #: ../../manual/export-defold.rst:34 msgid "The ``Path`` property of each Tileset may need to be set up manually in Defold after each export. However, Tiled will attempt to find the .tilesource file corresponding with the name your Tileset in Tiled in your project's ``/tilesources/`` directory. If one is found, manual adjustments won't be necessary." msgstr "" #: ../../manual/export-defold.rst:40 msgid "If you create custom properties on your map called ``x-offset`` and ``y-offset``, these values will be used as coordinates for your top-level GameObject in the Collection. This is useful when working with :doc:`Worlds `." msgstr "" #: ../../manual/export-defold.rst:45 msgid "All layers of a Tilemap will have Z-index property assigned with values ranging between 0 and 0.1. The plugin supports the use of 9999 Group Layers and 9999 Tile Layers per Group Layer." msgstr "" #: ../../manual/export-defold.rst:49 msgid "When any additional information from the map is needed, the map can be exported in :ref:`Lua format ` and loaded as Defold script." msgstr "" #: ../../manual/export-generic.rst:2 msgid "Generic File Formats" msgstr "" #: ../../manual/export-generic.rst:4 msgid "Tiled supports exporting to several generic file formats which are not targeting any specific framework." msgstr "" #: ../../manual/export-generic.rst:8 msgid "JSON" msgstr "" #: ../../manual/export-generic.rst:10 msgid ":doc:`The JSON format ` is the most common additional file format supported by Tiled. It can be used instead of TMX since Tiled can also open JSON maps and tilesets and the format supports all Tiled features. Especially in the browser and when using JavaScript in general, the JSON format is easier to load." msgstr "" #: ../../manual/export-generic.rst:19 msgid "Lua" msgstr "" #: ../../manual/export-generic.rst:21 msgid "Maps and tilesets can be exported to Lua code. This export option supports most of Tiled's features and is useful when using a Lua-based framework like `LÖVE`_ (with `Simple Tiled Implementation`_), `Solar2D`_ (with `ponytiled`_ or `Dusk Engine`_) or `Defold`_." msgstr "" #: ../../manual/export-generic.rst:26 msgid "Currently not included are the type of custom properties (though the type does affect how a property value is exported) and information related to :doc:`object templates `." msgstr "" #: ../../manual/export-generic.rst:31 msgid "CSV" msgstr "" #: ../../manual/export-generic.rst:33 msgid "The CSV export only supports :doc:`tile layers `. Maps containing multiple tile layers will export as multiple files, called ``base_.csv``." msgstr "" #: ../../manual/export-generic.rst:37 msgid "Each tile is written out by its ID, unless the tile has a custom property called ``name``, in which case its value is used to write out the tile. Using multiple tilesets will lead to ambiguous IDs, unless the custom ``name`` property is used. Empty cells get the value ``-1``." msgstr "" #: ../../manual/export-generic.rst:42 msgid "When tiles are flipped horizontally, vertically or diagonally, these states are exported using bitflags in the ID, in the same way as done in the :doc:`/reference/tmx-map-format`." msgstr "" #: ../../manual/export-gmx.rst:4 msgid "GameMaker: Studio 1.4" msgstr "" #: ../../manual/export-gmx.rst:6 msgid "GameMaker: Studio 1.4 uses a custom XML-based format to store its rooms, and Tiled ships with a plugin to export maps in this format. Currently only orthogonal maps will export correctly." msgstr "" #: ../../manual/export-gmx.rst:10 msgid "Tile layers and tile objects (when no type is set) will export as \"tile\" elements. These support horizontal and vertical flipping, but no rotation. For tile objects, scaling is also supported." msgstr "" #: ../../manual/export-gmx.rst:16 msgid "The tilesets have to be named the same as the corresponding backgrounds in the GameMaker project. Otherwise GameMaker will pop up an error for each tile while loading the exported ``room.gmx`` file." msgstr "" #: ../../manual/export-gmx.rst:21 #: ../../manual/export-yy.rst:125 msgid "Object Instances" msgstr "" #: ../../manual/export-gmx.rst:23 msgid "GameMaker object instances are created by putting the object name in the \"Type\" field of the object in Tiled. Rotation is supported here, and for tile objects also flipping and scaling is supported (though flipping in combination with rotation doesn't appear to work in GameMaker)." msgstr "" #: ../../manual/export-gmx.rst:32 msgid "The following custom properties can be set on objects to affect the exported instance:" msgstr "" #: ../../manual/export-gmx.rst:35 msgid "string ``code`` (instance creation code, default: \"\")" msgstr "" #: ../../manual/export-gmx.rst:36 #: ../../manual/export-yy.rst:101 msgid "float ``scaleX`` (default: derived from tile or 1.0)" msgstr "" #: ../../manual/export-gmx.rst:37 #: ../../manual/export-yy.rst:102 msgid "float ``scaleY`` (default: derived from tile or 1.0)" msgstr "" #: ../../manual/export-gmx.rst:38 #: ../../manual/export-yy.rst:104 msgid "int ``originX`` (default: 0)" msgstr "" #: ../../manual/export-gmx.rst:39 #: ../../manual/export-yy.rst:105 msgid "int ``originY`` (default: 0)" msgstr "" #: ../../manual/export-gmx.rst:41 #: ../../manual/export-yy.rst:108 msgid "The ``scaleX`` and ``scaleY`` properties can be used to override the scale of the instance. However, if the scale is relevant then it will generally be easier to use a tile object, in which case it is automatically derived from the tile size and the object size." msgstr "" #: ../../manual/export-gmx.rst:46 msgid "The ``originX`` and ``originY`` properties can be used to tell Tiled about the origin of the object defined in GameMaker, as an offset from the top-left. This origin is taken into account when determining the position of the exported instance." msgstr "" #: ../../manual/export-gmx.rst:53 msgid "Of course setting the type and/or the above properties manually for each instance will get old fast. Since Tiled 1.0.2, you can instead use tile objects with the type set on the tile, and in Tiled 1.1 you can also use :doc:`object templates `." msgstr "" #: ../../manual/export-gmx.rst:63 #: ../../manual/export-yy.rst:289 msgid "Views" msgstr "" #: ../../manual/export-gmx.rst:69 msgid "Views can be defined using :ref:`rectangle objects ` where the Type has been set to ``view``. The position and size will be snapped to pixels. Whether the view is visible when the room starts depends on whether the object is visible. The use of views is automatically enabled when any views are defined." msgstr "" #: ../../manual/export-gmx.rst:75 #: ../../manual/export-yy.rst:297 msgid "The following custom properties can be used to define the various other properties of the view:" msgstr "" #: ../../manual/export-gmx.rst:78 msgid "**Port on screen**" msgstr "" #: ../../manual/export-gmx.rst:80 #: ../../manual/export-yy.rst:311 msgid "int ``xport`` (default: 0)" msgstr "" #: ../../manual/export-gmx.rst:81 #: ../../manual/export-yy.rst:312 msgid "int ``yport`` (default: 0)" msgstr "" #: ../../manual/export-gmx.rst:82 msgid "int ``wport`` (default: 1024)" msgstr "" #: ../../manual/export-gmx.rst:83 #: ../../manual/export-yy.rst:314 msgid "int ``hport`` (default: 768)" msgstr "" #: ../../manual/export-gmx.rst:85 #: ../../manual/export-yy.rst:316 msgid "**Object following**" msgstr "" #: ../../manual/export-gmx.rst:87 msgid "string ``objName``" msgstr "" #: ../../manual/export-gmx.rst:88 #: ../../manual/export-yy.rst:319 msgid "int ``hborder`` (default: 32)" msgstr "" #: ../../manual/export-gmx.rst:89 #: ../../manual/export-yy.rst:320 msgid "int ``vborder`` (default: 32)" msgstr "" #: ../../manual/export-gmx.rst:90 #: ../../manual/export-yy.rst:321 msgid "int ``hspeed`` (default: -1)" msgstr "" #: ../../manual/export-gmx.rst:91 #: ../../manual/export-yy.rst:322 msgid "int ``vspeed`` (default: -1)" msgstr "" #: ../../manual/export-gmx.rst:95 #: ../../manual/export-yy.rst:326 msgid "When you're defining views in Tiled, it is useful to add ``view`` as object type in the :ref:`Object Types Editor `, adding the above properties for ease of access. If you frequently use views with similar settings, you can set up :doc:`templates ` for them." msgstr "" #: ../../manual/export-gmx.rst:105 #: ../../manual/export-yy.rst:219 #: ../../manual/keyboard-shortcuts.rst:12 #: ../../manual/preferences.rst:21 msgid "General" msgstr "" #: ../../manual/export-gmx.rst:107 msgid "int ``speed`` (default: 30)" msgstr "" #: ../../manual/export-gmx.rst:108 #: ../../manual/export-yy.rst:235 msgid "bool ``persistent`` (default: false)" msgstr "" #: ../../manual/export-gmx.rst:109 #: ../../manual/export-yy.rst:236 msgid "bool ``clearDisplayBuffer`` (default: true)" msgstr "" #: ../../manual/export-gmx.rst:110 #: ../../manual/export-yy.rst:250 msgid "bool ``clearViewBackground`` (default: false)" msgstr "" #: ../../manual/export-gmx.rst:111 msgid "string ``code`` (map creation code, default: \"\")" msgstr "" #: ../../manual/export-gmx.rst:114 #: ../../manual/export-yy.rst:258 msgid "Physics" msgstr "" #: ../../manual/export-gmx.rst:116 #: ../../manual/export-yy.rst:261 msgid "bool ``PhysicsWorld`` (default: false)" msgstr "" #: ../../manual/export-gmx.rst:117 msgid "int ``PhysicsWorldTop`` (default: 0)" msgstr "" #: ../../manual/export-gmx.rst:118 msgid "int ``PhysicsWorldLeft`` (default: 0)" msgstr "" #: ../../manual/export-gmx.rst:119 msgid "int ``PhysicsWorldRight`` (default: width of map in pixels)" msgstr "" #: ../../manual/export-gmx.rst:120 msgid "int ``PhysicsWorldBottom`` (default: height of map in pixels)" msgstr "" #: ../../manual/export-gmx.rst:121 #: ../../manual/export-yy.rst:262 msgid "float ``PhysicsWorldGravityX`` (default: 0.0)" msgstr "" #: ../../manual/export-gmx.rst:122 #: ../../manual/export-yy.rst:263 msgid "float ``PhysicsWorldGravityY`` (default: 10.0)" msgstr "" #: ../../manual/export-gmx.rst:123 #: ../../manual/export-yy.rst:264 msgid "float ``PhysicsWorldPixToMeters`` (default: 0.1)" msgstr "" #: ../../manual/export-gmx.rst:128 msgid "Both tile layers and object layers may produce \"tile\" elements in the exported room file. Their depth is set automatically, with tiles from the bottom-most layer getting a value of 10000000 (the GameMaker default) and counting up from there. If you want to set a custom depth value you can set the following property on the layer:" msgstr "" #: ../../manual/export-gmx.rst:134 msgid "int ``depth`` (default: 10000000 + N)" msgstr "" #: ../../manual/export-image.rst:4 msgid "Export as Image" msgstr "" #: ../../manual/export-image.rst:6 msgid "Maps can be exported as image. Tiled supports most common image formats. Choose *File -> Export as Image...* to open the relevant dialog." msgstr "" #: ../../manual/export-image.rst:9 msgid "Since exporting a map can in some cases result in a huge image, a *Use current zoom level* option is provided to allow exporting the map at the size it's currently displayed at." msgstr "" #: ../../manual/export-image.rst:13 msgid "For repeatedly converting a map to an image, manually triggering this export isn't very convenient. For this purpose, a tool called ``tmxrasterizer`` ships with Tiled, which contrary to its name is able to render any supported map format to an image. It is also able to render :doc:`entire worlds ` to an image. On Linux this tool can be set up for generating thumbnail previews of maps in the file manager." msgstr "" #: ../../manual/export-other.rst:2 msgid "Other Formats" msgstr "" #: ../../manual/export-other.rst:4 msgid "A few other plugins ship with Tiled to support various games or tools:" msgstr "" #: ../../manual/export-other.rst:7 msgid "droidcraft" msgstr "" #: ../../manual/export-other.rst:7 msgid "Adds support for editing `DroidCraft`_ maps (\\*.dat)" msgstr "" #: ../../manual/export-other.rst:10 msgid "flare" msgstr "" #: ../../manual/export-other.rst:10 msgid "Adds support for editing `Flare Engine`_ maps (\\*.txt)" msgstr "" #: ../../manual/export-other.rst:13 msgid "replicaisland" msgstr "" #: ../../manual/export-other.rst:13 msgid "Adds support for editing `Replica Island`_ maps (\\*.bin)" msgstr "" #: ../../manual/export-other.rst:24 msgid "rpmap" msgstr "" #: ../../manual/export-other.rst:20 msgid "Adds support for exporting Tiled maps as RpMap (\\*.rpmap), the format used by `MapTool`_." msgstr "" #: ../../manual/export-other.rst:23 msgid "Currently, support is limited to maps using \"Image Collection\" tilesets since MapTool doesn't support tileset images." msgstr "" #: ../../manual/export-other.rst:27 msgid "tengine" msgstr "" #: ../../manual/export-other.rst:27 msgid "Adds support for exporting to `T-Engine4`_ maps (\\*.lua)" msgstr "" #: ../../manual/export-other.rst:29 msgid "These plugins are disabled by default. They can be enabled in *Edit > Preferences > Plugins*." msgstr "" #: ../../manual/export-tbin.rst:6 msgid "tBIN" msgstr "" #: ../../manual/export-tbin.rst:8 msgid "The tBIN map format is a binary format used by the `tIDE Tile Map Editor`_. tIDE was used by `Stardew Valley`_, a successful game that spawned many `community mods `__." msgstr "" #: ../../manual/export-tbin.rst:12 msgid "Tiled ships with a plugin that enables direct editing of Stardew Valley maps (and any other maps using the tBIN format). This plugin needs to be enabled in *Edit > Preferences > Plugins*. It is not enabled by default because it won't store everything (most notably it doesn't support object layers in general, nor external tilesets), so you need to know what you are doing." msgstr "" #: ../../manual/export-tbin.rst:21 msgid "The tBIN format supports setting custom properties on the tiles of a tile layer. Since Tiled does not support this directly, \"TileData\" objects are created that match the location of the tile, on which such properties are then stored." msgstr "" #: ../../manual/export-tbin.rst:29 msgid "One of the farm maps from Stardew Valley opened in Tiled." msgstr "" #: ../../manual/export-yy.rst:8 msgid "GameMaker Studio 2.3" msgstr "" #: ../../manual/export-yy.rst:10 msgid "GameMaker Studio 2.3 uses a JSON-based format to store its rooms, and Tiled ships with a plugin to export maps in this format." msgstr "" #: ../../manual/export-yy.rst:13 msgid "This plugin will do its best to export the map as accurately as possible, mapping Tiled's various features to the matching GameMaker features. :ref:`Tile layers ` get exported as tile layers when possible, but will fall back to asset layers if necessary. :ref:`Objects ` can get exported as instances, but also as tile graphics, sprite graphics or views. :ref:`Image layers ` get exported as background layers." msgstr "" #: ../../manual/export-yy.rst:23 msgid "Since GameMaker's \"Add Existing\" action doesn't work at this point in time (2.3.1) the easiest way to export a Tiled map to your GameMaker Project is to replace an already existing ``room.yy`` file." msgstr "" #: ../../manual/export-yy.rst:27 msgid "If you want to do this while GameMaker is running with the open project you'll need to deactivate \"Use safe writing of files\" in the Tiled preferences (Under *Edit -> Preferences -> General -> Saving and Loading*). Otherwise GameMaker will detect that the room file got deleted and will propose to restore it from memory. Without \"safe writing\" GameMaker will detect that the file got changed and propose to reload the updated one." msgstr "" #: ../../manual/export-yy.rst:37 msgid "References to Existing Assets" msgstr "" #: ../../manual/export-yy.rst:39 msgid "Since Tiled currently only exports a map as a GameMaker room, any sprites, tilesets and objects used by the map are expected to be already available in the GameMaker project." msgstr "" #: ../../manual/export-yy.rst:43 msgid "For sprites, the sprite name is be derived from the image file name by removing the file extension. If necessary, the sprite name can be explicitly specified using a custom ``sprite`` property (supported on tilesets, tiles from image collection tilesets and image layers)." msgstr "" #: ../../manual/export-yy.rst:48 msgid "For tilesets, the tileset name entered in Tiled must match the name of the tileset asset in GameMaker." msgstr "" #: ../../manual/export-yy.rst:51 msgid "For object instances, the name of the object should be set in the *Type* field." msgstr "" #: ../../manual/export-yy.rst:55 msgid "Exporting a Tiled Map" msgstr "" #: ../../manual/export-yy.rst:57 msgid "A Tiled map contains tile layers, object layers, image layers and group layers. All these layer types are supported." msgstr "" #: ../../manual/export-yy.rst:63 #: ../../manual/layers.rst:33 msgid "Tile Layers" msgstr "" #: ../../manual/export-yy.rst:65 msgid "When possible, a tile layer will get exported as a tile layer." msgstr "" #: ../../manual/export-yy.rst:67 msgid "When several tilesets are used on the same layer, the layer gets exported as a group with a child tile layer for each tileset, since GameMaker supports only one tileset per tile layer." msgstr "" #: ../../manual/export-yy.rst:71 msgid "When the tile size of a tileset doesn't match the grid size of the map, or when the map orientation is not orthogonal (for example, isometric or hexagonal), the tiles will get exported to an asset layer instead. This layer type is more flexible, though for tile graphics it does not support rotation." msgstr "" #: ../../manual/export-yy.rst:76 msgid "When the layer includes tiles from a collection of images tileset, these will get exported to an asset layer as sprite graphics." msgstr "" #: ../../manual/export-yy.rst:82 #: ../../manual/layers.rst:55 msgid "Object Layers" msgstr "" #: ../../manual/export-yy.rst:84 msgid "Object layers in Tiled are very flexible since objects take so many forms. As such the export looks at each object to see how it should be exported to the GameMaker room." msgstr "" #: ../../manual/export-yy.rst:88 msgid "When an object has a *Type*, it is exported as an instance on an instance layer, where the type refers to the name of the object to instantiate. Except, when the type is \"view\", the object is interpreted as :ref:`a view `." msgstr "" #: ../../manual/export-yy.rst:93 msgid "When an object has no Type, but it is a tile object, then it is exported as either a tile graphic or a sprite graphic, depending on whether the tile is from a tileset image or a collection of images." msgstr "" #: ../../manual/export-yy.rst:97 msgid "The following custom properties can be set on objects to affect the exported instance or sprite asset:" msgstr "" #: ../../manual/export-yy.rst:100 msgid "color ``colour`` (default: based on layer tint color)" msgstr "" #: ../../manual/export-yy.rst:103 msgid "bool ``inheritItemSettings`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:106 msgid "bool ``ignore`` (default: whether the object is hidden)" msgstr "" #: ../../manual/export-yy.rst:113 msgid "The ``originX`` and ``originY`` properties can be used to tell Tiled about the origin of the sprite defined in GameMaker, as an offset from the top-left. This origin is taken into account when determining the position of the exported instance." msgstr "" #: ../../manual/export-yy.rst:120 msgid "Of course setting the type and/or the above properties manually for each instance will get old fast. Instead you can use tile objects with the type set on the tile or use :doc:`object templates `." msgstr "" #: ../../manual/export-yy.rst:127 msgid "The following additional custom properties can be set on objects that are exported as object instances:" msgstr "" #: ../../manual/export-yy.rst:130 msgid "bool ``hasCreationCode`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:131 msgid "int ``imageIndex`` (default: 0)" msgstr "" #: ../../manual/export-yy.rst:132 msgid "float ``imageSpeed`` (default: 1.0)" msgstr "" #: ../../manual/export-yy.rst:133 msgid "int ``creationOrder`` (default: 0)" msgstr "" #: ../../manual/export-yy.rst:135 msgid "The ``hasCreationCode`` property can be set to true. Refers to \"InstanceCreationCode_[inst_name].gml\" in the room folder which you can create inside GameMaker itself or with an external text editor." msgstr "" #: ../../manual/export-yy.rst:139 msgid "By default the instance creation order is derived from the object positions inside the layer and object hierarchy from Tiled. This can be changed by using the custom property ``creationOrder``. Objects with lower values will be created before objects with higher values (so objects with negative values will be created before objects without a ``creationOrder`` property)." msgstr "" #: ../../manual/export-yy.rst:145 msgid "Additional custom properties that are not documented here can be used to override the variable definitions that got set up inside GameMaker for the object." msgstr "" #: ../../manual/export-yy.rst:151 msgid "As of now only variable definitions of the object itself can be overriden. Overriding variable definitions of parent objects is not supported. As a workaround you can use the creation code to override variables of a parent object." msgstr "" #: ../../manual/export-yy.rst:157 msgid "Tile Graphics" msgstr "" #: ../../manual/export-yy.rst:159 msgid "For objects exported as tile graphics (aka GMS 1.4 tiles), it should be noted that rotation is not supported on asset layers." msgstr "" #: ../../manual/export-yy.rst:162 msgid "When 90-degree rotation with grid-alignment suffices, these tiles should be placed on tile layers instead. When free placement with rotation is required, a collection of images tileset should be used, so that the objects can be exported as sprite graphics instead." msgstr "" #: ../../manual/export-yy.rst:168 msgid "Sprite Graphics" msgstr "" #: ../../manual/export-yy.rst:170 msgid "The following additional custom properties can be set on objects that are exported as sprite graphics:" msgstr "" #: ../../manual/export-yy.rst:173 msgid "float ``headPosition`` (default: 0.0)" msgstr "" #: ../../manual/export-yy.rst:174 msgid "float ``animationSpeed`` (default: 1.0)" msgstr "" #: ../../manual/export-yy.rst:179 #: ../../manual/layers.rst:97 msgid "Image Layers" msgstr "" #: ../../manual/export-yy.rst:181 msgid "Image layers are exported as background layers." msgstr "" #: ../../manual/export-yy.rst:183 msgid "The file name of the source image is assumed to be the same as the name of the corresponding sprite asset. Alternatively the custom property ``sprite`` can be used to explicitly set the name of the sprite asset." msgstr "" #: ../../manual/export-yy.rst:187 msgid "While not supported visually in Tiled, it is possible to create an image layer without an image but with only a tint color. Such layers will get exported as a background layer with just the color set." msgstr "" #: ../../manual/export-yy.rst:191 msgid "The following custom properties can be set on image layers to affect the exported background layers:" msgstr "" #: ../../manual/export-yy.rst:194 #: ../../manual/export-yy.rst:274 msgid "string ``sprite`` (default: based on image filename)" msgstr "" #: ../../manual/export-yy.rst:195 msgid "bool ``htiled`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:196 msgid "bool ``vtiled`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:197 msgid "bool ``stretch`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:198 msgid "float ``hspeed`` (default: 0.0)" msgstr "" #: ../../manual/export-yy.rst:199 msgid "float ``vspeed`` (default: 0.0)" msgstr "" #: ../../manual/export-yy.rst:200 msgid "float ``animationFPS`` (default: 15.0)" msgstr "" #: ../../manual/export-yy.rst:201 msgid "int ``animationSpeedtype`` (default: 0)" msgstr "" #: ../../manual/export-yy.rst:203 msgid "Even though the custom properties such as ``htiled`` and ``vtiled`` have no visual effect inside Tiled you will see the effect in the exported room inside GameMaker." msgstr "" #: ../../manual/export-yy.rst:208 msgid "Special Cases and Custom Properties" msgstr "" #: ../../manual/export-yy.rst:211 msgid "Rooms" msgstr "" #: ../../manual/export-yy.rst:213 msgid "If a ``Background Color`` is set in the map properties of Tiled an extra background layer with the according color is exported as the bottommost layer." msgstr "" #: ../../manual/export-yy.rst:216 msgid "The following custom properties can be set under *Map -> Map Properties*." msgstr "" #: ../../manual/export-yy.rst:221 msgid "string ``parent`` (default: \"Rooms\")" msgstr "" #: ../../manual/export-yy.rst:222 msgid "bool ``inheritLayers`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:223 msgid "string ``tags`` (default: \"\")" msgstr "" #: ../../manual/export-yy.rst:225 msgid "The ``parent`` property is used to define the parent folder inside GameMakers asset browser." msgstr "" #: ../../manual/export-yy.rst:228 msgid "The ``tags`` property is used to assign tags to the room. Multiple tags can be separated by commas." msgstr "" #: ../../manual/export-yy.rst:232 msgid "Room Settings" msgstr "" #: ../../manual/export-yy.rst:234 msgid "bool ``inheritRoomSettings`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:237 msgid "bool ``inheritCode`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:238 msgid "string ``creationCodeFile`` (default: \"\")" msgstr "" #: ../../manual/export-yy.rst:240 msgid "The ``creationCodeFile`` property is used to define the path of an existing creation code file, e.g.: \"${project_dir}/rooms/room_name/RoomCreationCode.gml\"." msgstr "" #: ../../manual/export-yy.rst:244 msgid "Viewports and Cameras" msgstr "" #: ../../manual/export-yy.rst:246 #: ../../manual/export-yy.rst:300 msgid "**General**" msgstr "" #: ../../manual/export-yy.rst:248 msgid "bool ``inheritViewSettings`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:249 msgid "bool ``enableViews`` (default: true when any \"view\" objects were found)" msgstr "" #: ../../manual/export-yy.rst:252 msgid "**Viewport 0 - Viewport 7**" msgstr "" #: ../../manual/export-yy.rst:254 msgid "You can configure up to 8 viewports by using view objects (see :ref:`yy-views`)." msgstr "" #: ../../manual/export-yy.rst:260 msgid "bool ``inheritPhysicsSettings`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:267 msgid "Sprite References" msgstr "" #: ../../manual/export-yy.rst:269 msgid "As :ref:`mentioned above `, references to sprites generally derive the name of the sprite asset from the image file name. The following property can be set on tilesets, tiles from image collection tilesets and image layers to explicitly specify the sprite name:" msgstr "" #: ../../manual/export-yy.rst:279 msgid "Paths" msgstr "" #: ../../manual/export-yy.rst:283 msgid "Paths are not supported yet, but it's planned to export polyline and polygon objects as paths on path layers in a future update." msgstr "" #: ../../manual/export-yy.rst:291 msgid "Views can be defined using :ref:`rectangle objects ` where the *Type* has been set to \"view\". The position and size will be snapped to pixels. Whether the view is visible when the room starts depends on whether the object is visible. The use of views is automatically enabled when any views are defined." msgstr "" #: ../../manual/export-yy.rst:302 msgid "bool ``inherit`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:304 msgid "**Camera Properties**" msgstr "" #: ../../manual/export-yy.rst:306 msgid "The Camera Properties are automatically derived from the position and size of the view object." msgstr "" #: ../../manual/export-yy.rst:309 msgid "**Viewport Properties**" msgstr "" #: ../../manual/export-yy.rst:313 msgid "int ``wport`` (default: 1366)" msgstr "" #: ../../manual/export-yy.rst:318 msgid "string ``objectId``" msgstr "" #: ../../manual/export-yy.rst:333 msgid "Layers" msgstr "" #: ../../manual/export-yy.rst:335 msgid "All layer types support the following custom properties:" msgstr "" #: ../../manual/export-yy.rst:337 msgid "int ``depth`` (default: auto-assigned, like in GameMaker)" msgstr "" #: ../../manual/export-yy.rst:338 msgid "bool ``visible`` (default: derived from layer)" msgstr "" #: ../../manual/export-yy.rst:339 msgid "bool ``hierarchyFrozen`` (default: layer locked state)" msgstr "" #: ../../manual/export-yy.rst:340 msgid "bool ``noExport`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:342 msgid "The ``depth`` property can be used to assign a specific depth value to a layer." msgstr "" #: ../../manual/export-yy.rst:345 msgid "The ``visible`` property can be used to override the \"Visible\" state of the layer if needed." msgstr "" #: ../../manual/export-yy.rst:348 msgid "The ``hierarchyFrozen`` property can be used to override the \"Locked\" state of the layer if needed." msgstr "" #: ../../manual/export-yy.rst:351 msgid "The ``noExport`` property can be used to suppress exporting of an entire layer, including any child layers. This is useful if you use a layer for annotations (like adding background image or text objects) that you do not want exported to GameMaker. Note that any views defined on this layer will then also get ignored." msgstr "" #: ../../manual/introduction.rst:2 msgid "Introduction" msgstr "" #: ../../manual/introduction.rst:5 msgid "About Tiled" msgstr "" #: ../../manual/introduction.rst:7 msgid "**Tiled is a 2D level editor that helps you develop the content of your game. Its primary feature is to edit tile maps of various forms, but it also supports free image placement as well as powerful ways to annotate your level with extra information used by the game. Tiled focuses on general flexibility while trying to stay intuitive.**" msgstr "" #: ../../manual/introduction.rst:13 msgid "In terms of tile maps, it supports straight rectangular tile layers, but also projected isometric, staggered isometric and staggered hexagonal layers. A tileset can be either a single image containing many tiles, or it can be a collection of individual images. In order to support certain depth faking techniques, tiles and layers can be offset by a custom distance and their rendering order can be configured." msgstr "" #: ../../manual/introduction.rst:20 msgid "The primary tool for editing :ref:`tile layers ` is a stamp brush that allows efficient painting and copying of tile areas. It also supports drawing lines and circles. In addition, there are several selection tools and a tool that does :doc:`automatic terrain transitions `. Finally, it can apply changes based on :doc:`pattern-matching ` to automate parts of your work." msgstr "" #: ../../manual/introduction.rst:27 msgid "Tiled also supports :ref:`object layers `, which traditionally were only for annotating your map with information but more recently they can also be used to place images. You can add rectangle, point, ellipse, polygon, polyline and tile objects. Object placement is not limited to the tile grid and objects can also be scaled or rotated. Object layers offer a lot of flexibility to add almost any information to your level that your game needs." msgstr "" #: ../../manual/introduction.rst:35 msgid "Other things worth mentioning are the support for adding custom map or tileset formats through plugins, :doc:`extending Tiled ` with JavaScript, the tile stamp memory, :ref:`tile animation support ` and the :ref:`tile collision editor `." msgstr "" #: ../../manual/introduction.rst:44 msgid "Getting Started" msgstr "" #: ../../manual/introduction.rst:51 msgid "Setting up a New Project" msgstr "" #: ../../manual/introduction.rst:53 msgid "When launching Tiled for the first time, we are greeted with the following window:" msgstr "" #: ../../manual/introduction.rst:59 msgid "Tiled Window" msgstr "" #: ../../manual/introduction.rst:61 msgid "To make all our assets readily accessible from the :guilabel:`Project` view, as well as to be able to quickly switch between multiple projects, it is recommended to first set up a Tiled project. This is however an entirely optional step that can be skipped when desired." msgstr "" #: ../../manual/introduction.rst:66 msgid "Choose *Project -> Save Project As...* to save a new project file. The recommended location is the root of your project, but you can place it anywhere you want." msgstr "" #: ../../manual/introduction.rst:70 msgid "Next, we'll add at least one folder, either some \"assets\" folder or simply the root of your project, but you can also choose to add several top-level folders like \"tilesets\", \"maps\", \"templates\", etc. Right-click in the Project view and choose *Add Folder to Project...* to add the relevant folders." msgstr "" #: ../../manual/introduction.rst:77 msgid "Creating a New Map" msgstr "" #: ../../manual/introduction.rst:79 msgid "To create a new map, choose *File -> New -> New Map…* (``Ctrl+N``). The following dialog will pop up:" msgstr "" #: ../../manual/introduction.rst:86 msgid "New Map" msgstr "" #: ../../manual/introduction.rst:88 msgid "Here, we choose the initial map size, tile size, orientation, tile layer format, tile render order (only supported for *Orthogonal* maps) and whether the map is :doc:`infinite ` or not. All of these things can be changed later as needed, so it's not important to get it all right the first time." msgstr "" #: ../../manual/introduction.rst:96 msgid "If you set up a project, make sure to save the map to a folder that you had added to your project. This will make it quickly accessible using *File -> Open File in Project* (``Ctrl+P``)." msgstr "" #: ../../manual/introduction.rst:100 msgid "After saving our map, we'll see the tile grid and an initial tile layer will be added to the map. However, before we can start using any tiles we need to add a tileset. Choose *File -> New -> New Tileset…* to open the New Tileset dialog:" msgstr "" #: ../../manual/introduction.rst:109 msgid "New Tileset" msgstr "" #: ../../manual/introduction.rst:111 msgid "Click the :guilabel:`Browse…` button and select the :file:`tmw_desert_spacing.png` tileset from the examples shipping with Tiled (or use one of your own if you wish). This example tileset uses a tile size of 32x32. It also has a one pixel *margin* around the tiles and a one pixel *spacing* in between the tiles (this is pretty rare actually, usually you should leave these values on 0)." msgstr "" #: ../../manual/introduction.rst:120 msgid "We leave the :guilabel:`Embed in map` option disabled. This is recommended, since it will allow the tileset to be used by multiple maps without setting up its parameters again. It will also be good to store the tileset in its own file if you later add tile properties, terrain definitions, collision shapes, etc., since that information is then shared between all your maps." msgstr "" #: ../../manual/introduction.rst:127 msgid "After saving the tileset, Tiled should look as follows:" msgstr "" #: ../../manual/introduction.rst:132 msgid "Tileset Created" msgstr "" #: ../../manual/introduction.rst:134 msgid "Since we don't want to do anything else with the tileset for now, just switch back to the map file:" msgstr "" #: ../../manual/introduction.rst:140 msgid "Tileset Usable on the Map" msgstr "" #: ../../manual/introduction.rst:142 msgid "We're ready to select some tiles and start painting! But first, let's have a quick look at the :doc:`various layer types ` supported by Tiled." msgstr "" #: ../../manual/introduction.rst:148 msgid "Much of the manual still needs to be written. Fortunately, there is a very nice `Tiled Map Editor Tutorial Series`_ on GamesFromScratch.com. In addition, the support for Tiled in various :doc:`engines and frameworks ` often comes with some usage information." msgstr "" #: ../../manual/keyboard-shortcuts.rst:2 msgid "Keyboard Shortcuts" msgstr "" #: ../../manual/keyboard-shortcuts.rst:6 msgid "Most of the below shortcuts can be changed in the :ref:`Preferences `." msgstr "" #: ../../manual/keyboard-shortcuts.rst:9 msgid "On macOS, replace ``Ctrl`` with the ``Command`` key." msgstr "" #: ../../manual/keyboard-shortcuts.rst:14 msgid "``Ctrl + N`` - Create a new map" msgstr "" #: ../../manual/keyboard-shortcuts.rst:15 msgid "``Ctrl + O`` - Open any file or project" msgstr "" #: ../../manual/keyboard-shortcuts.rst:16 msgid "``Ctrl + P`` - Open a file in the current project" msgstr "" #: ../../manual/keyboard-shortcuts.rst:17 msgid "``Ctrl + Shift + T`` - Reopen a recently closed file" msgstr "" #: ../../manual/keyboard-shortcuts.rst:18 msgid "``Ctrl + S`` - Save current document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:19 msgid "``Ctrl + Alt + S`` - Save current document to another file" msgstr "" #: ../../manual/keyboard-shortcuts.rst:20 msgid "``Ctrl + Shift + S`` - Save all documents" msgstr "" #: ../../manual/keyboard-shortcuts.rst:21 msgid "``Ctrl + E`` - Export current document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:22 msgid "``Ctrl + Shift + E`` - Export current document to another file" msgstr "" #: ../../manual/keyboard-shortcuts.rst:23 msgid "``Ctrl + R`` - Reload current document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:24 msgid "``Ctrl + W`` - Close current document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:25 msgid "``Ctrl + Shift + W`` - Close all documents" msgstr "" #: ../../manual/keyboard-shortcuts.rst:26 msgid "``Ctrl + Q`` - Quit Tiled" msgstr "" #: ../../manual/keyboard-shortcuts.rst:27 msgid "``Ctrl + MouseWheel`` - Zoom in/out on tileset and map" msgstr "" #: ../../manual/keyboard-shortcuts.rst:28 msgid "``Ctrl + Plus/Minus`` - Zoom in/out on map" msgstr "" #: ../../manual/keyboard-shortcuts.rst:29 msgid "``Ctrl + 0`` - Reset zoom on map" msgstr "" #: ../../manual/keyboard-shortcuts.rst:30 msgid "``Ctrl + /`` - Adjust zoom to fit map in view" msgstr "" #: ../../manual/keyboard-shortcuts.rst:31 msgid "``Ctrl + Object Move`` - Toggles \"Snap to Grid\" temporarily" msgstr "" #: ../../manual/keyboard-shortcuts.rst:32 msgid "``Ctrl + Object Resize`` - Keep aspect ratio" msgstr "" #: ../../manual/keyboard-shortcuts.rst:33 msgid "``Alt + Object Resize`` - Toggles \"Snap to Grid\" temporarily" msgstr "" #: ../../manual/keyboard-shortcuts.rst:34 msgid "``Middle Click`` or ``Space Bar`` - Hold to pan the map view" msgstr "" #: ../../manual/keyboard-shortcuts.rst:35 msgid "``Ctrl + X`` - Cut (tiles, objects or properties)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:36 msgid "``Ctrl + C`` - Copy (tiles, objects or properties)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:37 msgid "``Ctrl + V`` - Paste (tiles, objects or properties)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:38 msgid "``Del`` - Delete (tiles, objects, properties or layers)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:39 msgid "``Ctrl + G`` - Toggle displaying of the tile grid" msgstr "" #: ../../manual/keyboard-shortcuts.rst:40 msgid "``H`` - Toggle highlighting of the current layer" msgstr "" #: ../../manual/keyboard-shortcuts.rst:41 msgid "``Ctrl + M`` - Invokes :doc:`automapping`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:42 msgid "``Alt + C`` - Copy current position of mouse cursor to clipboard (in tile coordinates)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:44 msgid "``Ctrl + D`` - Duplicate selected objects" msgstr "" #: ../../manual/keyboard-shortcuts.rst:45 msgid "``Ctrl + J`` - Create a new layer and copy the currently selected objects or tiles to it" msgstr "" #: ../../manual/keyboard-shortcuts.rst:46 msgid "``Ctrl + Shift + J`` - Create a new layer and move currently selected objects or tiles to it" msgstr "" #: ../../manual/keyboard-shortcuts.rst:47 msgid "``Ctrl + Shift + D`` - Duplicate selected layers" msgstr "" #: ../../manual/keyboard-shortcuts.rst:48 msgid "``F2`` - Rename (if applicable in context)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:49 msgid "``Tab`` - Hide docks and tool bars" msgstr "" #: ../../manual/keyboard-shortcuts.rst:50 msgid "``Ctrl + PgUp`` - Select previous layer (above current layer)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:51 msgid "``Ctrl + PgDown`` - Select next layer (below current layer)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:52 msgid "``Ctrl + Shift + Up`` - Move selected layers up" msgstr "" #: ../../manual/keyboard-shortcuts.rst:53 msgid "``Ctrl + Shift + Down`` - Move selected layers down" msgstr "" #: ../../manual/keyboard-shortcuts.rst:54 msgid "``Ctrl + H`` - Show/Hide selected layers" msgstr "" #: ../../manual/keyboard-shortcuts.rst:55 msgid "``Ctrl + L`` - Lock/Unlock selected layers" msgstr "" #: ../../manual/keyboard-shortcuts.rst:56 msgid "``Ctrl + Shift + H`` - Show/Hide all other layers (only active layer visible / all layers visible)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:58 msgid "``Ctrl + Shift + L`` - Lock/Unlock all other layers" msgstr "" #: ../../manual/keyboard-shortcuts.rst:59 msgid "``Ctrl + Tab`` / ``Alt + Left`` - Switch to left document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:60 msgid "``Ctrl + Shift + Tab`` / ``Alt + Right`` - Switch to right document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:61 msgid "``]`` - Select next tileset" msgstr "" #: ../../manual/keyboard-shortcuts.rst:62 msgid "``[`` - Select previous tileset" msgstr "" #: ../../manual/keyboard-shortcuts.rst:63 msgid "``Ctrl + T`` - Force-reload all tilesets used by the current map (mainly useful when not using the automatic reloading)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:65 msgid "``Ctrl + Shift + A`` - Clear any object and tile selection" msgstr "" #: ../../manual/keyboard-shortcuts.rst:68 msgid "When a tile layer is selected" msgstr "" #: ../../manual/keyboard-shortcuts.rst:70 msgid "``Right Click on Tile`` - Captures the tile under the mouse (drag to capture larger areas)." msgstr "" #: ../../manual/keyboard-shortcuts.rst:72 msgid "``Ctrl + Right Click on Tile`` - Selects the layer containing the top-most tile under the mouse." msgstr "" #: ../../manual/keyboard-shortcuts.rst:73 msgid "``D`` - Toggle Random Mode" msgstr "" #: ../../manual/keyboard-shortcuts.rst:74 msgid "``B`` - Activate :ref:`stamp-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:76 msgid "``Shift + Click`` - Line mode, places tiles on a line between two clicked locations" msgstr "" #: ../../manual/keyboard-shortcuts.rst:78 msgid "``Ctrl + Shift + Click`` - Circle mode, places tiles around the clicked center" msgstr "" #: ../../manual/keyboard-shortcuts.rst:81 msgid "``T`` - Activate :ref:`terrain-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:82 msgid "``F`` - Activate :ref:`bucket-fill-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:83 msgid "``P`` - Activate :ref:`shape-fill-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:84 msgid "``E`` - Activate :ref:`eraser-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:85 msgid "``R`` - Activate Rectangular Select" msgstr "" #: ../../manual/keyboard-shortcuts.rst:86 msgid "``W`` - Activate Magic Wand" msgstr "" #: ../../manual/keyboard-shortcuts.rst:87 msgid "``S`` - Activate Select Same Tile" msgstr "" #: ../../manual/keyboard-shortcuts.rst:91 msgid "``1-9`` - Recall a previously stored tile stamp (similar to ``Ctrl + V``)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:92 msgid "``Ctrl + A`` - Select the whole layer" msgstr "" #: ../../manual/keyboard-shortcuts.rst:94 msgid "Changing the active stamp:" msgstr "" #: ../../manual/keyboard-shortcuts.rst:96 msgid "``X`` - Flip active stamp horizontally" msgstr "" #: ../../manual/keyboard-shortcuts.rst:97 msgid "``Y`` - Flip active stamp vertically" msgstr "" #: ../../manual/keyboard-shortcuts.rst:98 msgid "``Z`` - Rotate active stamp clockwise" msgstr "" #: ../../manual/keyboard-shortcuts.rst:99 msgid "``Shift + Z`` - Rotate active stamp counterclockwise" msgstr "" #: ../../manual/keyboard-shortcuts.rst:103 msgid "When an object layer is selected" msgstr "" #: ../../manual/keyboard-shortcuts.rst:105 msgid "``S`` - Activate :ref:`select-objects-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:107 msgid "``PgUp`` - Raise selected objects (with Manual object drawing order)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:109 msgid "``PgDown`` - Lower selected objects (with Manual object drawing order)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:111 msgid "``Home`` - Move selected objects to Top (with Manual object drawing order)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:113 msgid "``End`` - Move selected objects to Bottom (with Manual object drawing order)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:116 msgid "``O`` - Activate :ref:`edit-polygons-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:117 msgid "``R`` - Activate :ref:`insert-rectangle-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:118 msgid "``I`` - Activate :ref:`insert-point-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:119 msgid "``C`` - Activate :ref:`insert-ellipse-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:120 msgid "``P`` - Activate :ref:`insert-polygon-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:122 msgid "``Enter`` - Finish creating object" msgstr "" #: ../../manual/keyboard-shortcuts.rst:123 msgid "``Escape`` - Cancel creating object" msgstr "" #: ../../manual/keyboard-shortcuts.rst:125 msgid "``T`` - Activate :ref:`insert-tile-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:126 msgid "``V`` - Activate :ref:`insert-template-tool` (since Tiled 1.1)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:127 msgid "``E`` - Activate :ref:`insert-text-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:128 msgid "``Ctrl + A`` - Select all objects on the selected layers" msgstr "" #: ../../manual/keyboard-shortcuts.rst:131 msgid "In the Properties dialog" msgstr "" #: ../../manual/keyboard-shortcuts.rst:133 msgid "``Backspace`` - Deletes a property" msgstr "" #: ../../manual/layers.rst:2 msgid "Working with Layers" msgstr "" #: ../../manual/layers.rst:4 msgid "A Tiled map supports various sorts of content, and this content is organized into various different layers. The most common layers are the `Tile Layer <#tile-layers>`__ and the `Object Layer <#object-layers>`__. There is also an `Image Layer <#image-layers>`__ for including simple foreground or background graphics. The order of the layers determines the rendering order of your content." msgstr "" #: ../../manual/layers.rst:11 msgid "Layers can be hidden, made only partially visible and can be locked. Layers also have an offset and a :ref:`parallax scrolling factor `, which can be used to position them independently of each other, for example to fake depth. Finally their contents can be tinted by multiplying with a custom :ref:`tint color `." msgstr "" #: ../../manual/layers.rst:20 msgid "The eye and lock icon toggle the visibility and locked state of a layer respectively." msgstr "" #: ../../manual/layers.rst:23 msgid "You use `Group Layers <#group-layers>`__ to organize the layers into a hierarchy. This makes it more comfortable to work with a large amount of layers." msgstr "" #: ../../manual/layers.rst:28 msgid "Layer Types" msgstr "" #: ../../manual/layers.rst:35 msgid "Tile layers provide an efficient way of storing a large area filled with tile data. The data is a simple array of tile references and as such no additional information can be stored for each location. The only extra information stored are a few flags, that allow tile graphics to be flipped vertically, horizontally or anti-diagonally (to support rotation in 90-degree increments)." msgstr "" #: ../../manual/layers.rst:42 msgid "The information needed to render each tile layer is stored with the map, which specifies the position and rendering order of the tiles based on the orientation and various other properties." msgstr "" #: ../../manual/layers.rst:46 msgid "Despite only being able to refer to tiles, tile layers can also be useful for defining various bits of non-graphical information in your level. Collision information can often be conveyed using a special tileset, and any kind of object that does not need custom properties and is always aligned to the grid can also be placed on a tile layer." msgstr "" #: ../../manual/layers.rst:57 msgid "Object layers are useful because they can store many kinds of information that would not fit in a tile layer. Objects can be freely positioned, resized and rotated. They can also have individual custom properties. There are many kinds of objects:" msgstr "" #: ../../manual/layers.rst:62 msgid "**Rectangle** - for marking custom rectangular areas" msgstr "" #: ../../manual/layers.rst:63 msgid "**Ellipse** - for marking custom ellipse or circular areas" msgstr "" #: ../../manual/layers.rst:64 msgid "**Point** - for marking exact locations (since Tiled 1.1)" msgstr "" #: ../../manual/layers.rst:65 msgid "**Polygon** - for when a rectangle or ellipse doesn't cut it (often a collision area)" msgstr "" #: ../../manual/layers.rst:67 msgid "**Polyline** - can be a path to follow or a wall to collide with" msgstr "" #: ../../manual/layers.rst:68 msgid "**Tile** - for freely placing, scaling and rotating your tile graphics" msgstr "" #: ../../manual/layers.rst:70 msgid "**Text** - for custom text or notes (since Tiled 1.0)" msgstr "" #: ../../manual/layers.rst:72 msgid "All objects can be named, in which case their name will show up in a label above them (by default only for selected objects). Objects can also be given a *type*, which is useful since it can be used to customize the color of their label and the available :ref:`custom properties ` for this object type. For tile objects, the type can be :ref:`inherited from their tile `." msgstr "" #: ../../manual/layers.rst:80 msgid "For most map types, objects are positioned in plain pixels. The only exception to this are isometric maps (not isometric staggered). For isometric maps, it was deemed useful to store their positions in a projected coordinate space. For this, the isometric tiles are assumed to represent projected squares with both sides equal to the *tile height*. If you're using a different coordinate space for objects in your isometric game, you'll need to convert these coordinates accordingly." msgstr "" #: ../../manual/layers.rst:88 msgid "The object width and height is also mostly stored in pixels. For isometric maps, all shape objects (rectangle, point, ellipse, polygon and polyline) are projected into the same coordinate space described above. This is based on the assumption that these objects are generally used to mark areas on the map." msgstr "" #: ../../manual/layers.rst:99 msgid "Image layers provide a way to quickly include a single image as foreground or background of your map. They are currently not so useful, because if you instead add the image as a Tileset and place it as a :ref:`Tile Object `, you gain the ability to freely scale and rotate the image." msgstr "" #: ../../manual/layers.rst:104 msgid "The only advantage of using an image layer is that it avoids selecting / dragging the image while using the Select Objects tool. However, since Tiled 1.1 this can also be achieved by locking the object layer containing the tile object you'd like to avoid interacting with." msgstr "" #: ../../manual/layers.rst:116 msgid "Group Layers" msgstr "" #: ../../manual/layers.rst:118 msgid "Group layers work like folders and can be used for organizing the layers into a hierarchy. This is mainly useful when your map contains a large amount of layers." msgstr "" #: ../../manual/layers.rst:122 msgid "The visibility, opacity, offset, lock and :ref:`tint color ` of a group layer affects all child layers." msgstr "" #: ../../manual/layers.rst:125 msgid "Layers can be easily dragged in and out of groups with the mouse. The Raise Layer / Lower Layer actions also allow moving layers in and out of groups." msgstr "" #: ../../manual/layers.rst:136 msgid "Parallax Scrolling Factor" msgstr "" #: ../../manual/layers.rst:138 msgid "The parallax scrolling factor determines the amount by which the layer moves in relation to the camera." msgstr "" #: ../../manual/layers.rst:141 msgid "By default its value is 1, which means its position on the screen changes at the same rate as the position of the camera (in opposite direction). A lower value makes it move slower, simulating a layer that is further away, whereas a higher value makes it move faster, simulating a layer positioned in between the screen and the camera." msgstr "" #: ../../manual/layers.rst:147 msgid "A value of 0 makes the layer not move at all, which can be useful to include some pieces of your ingame UI or to mark its general viewport boundaries." msgstr "" #: ../../manual/layers.rst:150 msgid "Negative values make the layer move in opposite direction, though this is rarely useful." msgstr "" #: ../../manual/layers.rst:153 msgid "When the parallax scrolling factor is set on a group layer, it applies to all its child layers. The effective parallax scrolling factor of a layer is determined by multiplying the parallax scrolling factor by the scrolling factors of all parent layers." msgstr "" #: ../../manual/layers.rst:165 msgid "Tinting Layers" msgstr "" #: ../../manual/layers.rst:167 msgid "When you set the *Tint Color* property of a layer, this affects the way images are rendered. This includes tiles, tile objects and the image of an :ref:`Image Layer `." msgstr "" #: ../../manual/layers.rst:171 msgid "Each pixel color value is multiplied by the tint color. This way you can darken or colorize your graphics in various ways without needing to set up separate images for it." msgstr "" #: ../../manual/layers.rst:178 msgid "A gray tileset rendered in a different color for each layer." msgstr "" #: ../../manual/layers.rst:180 msgid "The tint color can also be set on a :ref:`Group Layer `, in which case it is inherited by all layers in the group." msgstr "" #: ../../manual/layers.rst:187 msgid "There are many ways in which the layers can be made more powerful:" msgstr "" #: ../../manual/layers.rst:189 msgid "Ability to lock individual objects (`#828 `__)." msgstr "" #: ../../manual/layers.rst:191 msgid "Moving certain map-global properties to the Tile Layer (`#149 `__). It would be useful if one map could accommodate layers of different tile sizes and maybe even of different orientation." msgstr "" #: ../../manual/objects.rst:2 msgid "Working with Objects" msgstr "" #: ../../manual/objects.rst:4 msgid "Using objects you can add a great deal of information to your map for use in your game. They can replace tedious alternatives like hardcoding coordinates (like spawn points) in your source code or maintaining additional data files for storing gameplay elements." msgstr "" #: ../../manual/objects.rst:9 msgid "By using *tile objects*, objects of various types can be made easy to recognize or they can be used for purely graphical purposes. In some cases they can replace the use of tile layers entirely, as demonstrated by the \"Sticker Knight\" example shipping with Tiled." msgstr "" #: ../../manual/objects.rst:14 msgid "All objects can have :doc:`custom properties `, which can also be used to create :ref:`connections between objects `." msgstr "" #: ../../manual/objects.rst:18 msgid "To start using objects, add an :ref:`Object Layer ` to your map." msgstr "" #: ../../manual/objects.rst:22 msgid "Placement Tools" msgstr "" #: ../../manual/objects.rst:24 msgid "Each type of object has its own placement tool." msgstr "" #: ../../manual/objects.rst:30 msgid "A preview is shown of the object you're about to place when you hover over the map. While placing an object, you can press ``Escape`` or right-click to cancel placement of the object. Press ``Escape`` again to switch to the :ref:`select-objects-tool` tool." msgstr "" #: ../../manual/objects.rst:38 msgid "Insert Rectangle" msgstr "" #: ../../manual/objects.rst:40 msgid "Shortcut: ``R``" msgstr "" #: ../../manual/objects.rst:42 msgid "The rectangle was the first type of object supported by Tiled, which is why objects are rectangles by default in the :doc:`/reference/tmx-map-format`. They are useful for marking rectangular areas and assigning custom properties to them. They are also often used for specifying collision boxes." msgstr "" #: ../../manual/objects.rst:47 msgid "Place a rectangle by clicking-and-dragging in any direction. Holding ``Shift`` makes it square and holding ``Ctrl`` snaps its size to the tile size." msgstr "" #: ../../manual/objects.rst:51 msgid "Rectangle objects have their origin in the top-left. However, if the rectangle is empty (width and height are both 0), it is rendered as a small square around its position. This is mainly to keep it visible and selectable." msgstr "" #: ../../manual/objects.rst:62 msgid "Insert Point" msgstr "" #: ../../manual/objects.rst:64 msgid "Shortcut: ``I``" msgstr "" #: ../../manual/objects.rst:66 msgid "Points are the simplest objects you can place on a map. They only represent a location, and cannot be resized or rotated. Simply click on the map to position a point object." msgstr "" #: ../../manual/objects.rst:73 msgid "Insert Ellipse" msgstr "" #: ../../manual/objects.rst:75 msgid "Shortcut: ``C``" msgstr "" #: ../../manual/objects.rst:77 msgid "Ellipses work the same way as `rectangles <#insert-rectangle>`__, except that they are rendered as an ellipse. Useful for when your area or collision shape needs to represent a circle or ellipse." msgstr "" #: ../../manual/objects.rst:84 msgid "Insert Polygon" msgstr "" #: ../../manual/objects.rst:86 msgid "Shortcut: ``P``" msgstr "" #: ../../manual/objects.rst:88 msgid "Polygons are the most flexible way of defining the shape of an area. They are most commonly used for defining collision shapes." msgstr "" #: ../../manual/objects.rst:91 msgid "When placing a polygon, the first click determines the location of the object as well as the location of the first point of the polygon. Subsequent clicks are used to add additional points to the polygon. Polygons needs to have at least three points. Click the first point again to finish creating the polygon. You can press ``Escape`` to cancel the creation of the polygon." msgstr "" #: ../../manual/objects.rst:98 msgid "When you want to change a polygon after it has been placed, you need to use the :ref:`edit-polygons-tool` tool." msgstr "" #: ../../manual/objects.rst:102 msgid "Polylines" msgstr "" #: ../../manual/objects.rst:104 msgid "Polylines are created by not closing a polygon. Right-click or press Enter while creating a polygon to finish it as a polyline." msgstr "" #: ../../manual/objects.rst:107 msgid "Polylines are rendered as a line and require only two points. While they can represent collision walls, they are also often used to represent paths to be followed." msgstr "" #: ../../manual/objects.rst:115 msgid "You can extend an existing polyline at either end when it is selected, by clicking on the displayed dots. It is also possible to finish the polyline by connecting it to either end of another existing polyline object. The other polyline object needs to be selected as well, since the interactive dots only show on selected polylines." msgstr "" #: ../../manual/objects.rst:121 msgid "The :ref:`edit-polygons-tool` tool is used to edit polylines as well." msgstr "" #: ../../manual/objects.rst:126 msgid "Insert Tile" msgstr "" #: ../../manual/objects.rst:128 msgid "Shortcut: ``T``" msgstr "" #: ../../manual/objects.rst:130 msgid "Tiles can be inserted as objects to have full flexibility in placing, scaling and rotating the tile image on your map. Like all objects, tile objects can also have custom properties associated with them. This makes them useful for placement of recognizable interactive objects that need special information, like a chest with defined contents or an NPC with defined script." msgstr "" #: ../../manual/objects.rst:137 msgid "To place a tile object, first select the tile you want to place in the *Tilesets* view. Then use the Left mouse button on the map to start placing the object, move to position it and release to finish placing the object." msgstr "" #: ../../manual/objects.rst:145 msgid "To change the tile used by existing tile objects, select all the objects you want to change using the :ref:`select-objects-tool` tool and then right-click on a tile in the *Tilesets* view, and choose *Replace Tile of Selected Objects*." msgstr "" #: ../../manual/objects.rst:154 msgid "You can customize the alignment of tile objects using the *Object Alignment* property on the *Tileset*. For compatibility reasons this property is set to *Unspecified* by default, in which case tile objects are bottom-left aligned in all orientations except on *Isometric* maps, where they are bottom-center aligned. Setting this property to *Top Left* makes the alignment of tile objects consistent with that of :ref:`rectangle objects `." msgstr "" #: ../../manual/objects.rst:169 msgid "Insert Template" msgstr "" #: ../../manual/objects.rst:171 #: ../../manual/using-templates.rst:50 msgid "Shortcut: ``V``" msgstr "" #: ../../manual/objects.rst:173 msgid "Can be used to quickly insert multiple instances of the template selected in the Templates view. See :ref:`creating-template-instances`." msgstr "" #: ../../manual/objects.rst:179 msgid "Insert Text" msgstr "" #: ../../manual/objects.rst:181 msgid "Shortcut: ``X``" msgstr "" #: ../../manual/objects.rst:183 msgid "Text objects can be used to add arbitrary multi-line text to your maps. You can configure various font properties and the wrapping / clipping area, making them useful for both quick notes as well as text used in the game." msgstr "" #: ../../manual/objects.rst:191 msgid "Select Objects" msgstr "" #: ../../manual/objects.rst:193 msgid "Shortcut: ``S``" msgstr "" #: ../../manual/objects.rst:195 msgid "When you're not inserting new objects, you're generally using the Select Objects tool. It packs a lot of functionality, which is outlined below." msgstr "" #: ../../manual/objects.rst:199 msgid "Selecting and Deselecting" msgstr "" #: ../../manual/objects.rst:201 msgid "You can select objects by clicking them or by dragging a rectangular lasso, selecting any object that intersect with its area. By holding ``Shift`` or ``Ctrl`` while clicking, you can add/remove single objects to/from the selection. Press ``Escape`` to deselect all objects." msgstr "" #: ../../manual/objects.rst:206 msgid "When pressing and dragging on an object, this object is selected and moved. When this prevents you from starting a rectangular selection, you can hold ``Shift`` to force the selection rectangle." msgstr "" #: ../../manual/objects.rst:214 msgid "By default you interact with the top-most object. When you need to select an object below another object, first select the higher object and then hold ``Alt`` while clicking at the same location to select lower objects. You can also hold ``Alt`` while opening the context menu to get a list of all objects at the clicked location, so you may directly select the desired object." msgstr "" #: ../../manual/objects.rst:225 msgid "You can quickly switch to the :ref:`edit-polygons-tool` tool by double-clicking on the polygon or polyline you want to edit." msgstr "" #: ../../manual/objects.rst:229 msgid "Moving" msgstr "" #: ../../manual/objects.rst:231 msgid "You can simply drag any single object, or drag already selected objects by dragging any one of them. Hold ``Ctrl`` to toggle snapping to the tile grid." msgstr "" #: ../../manual/objects.rst:235 msgid "Hold ``Alt`` to force a move operation on the currently selected objects, regardless of where you click on the map. This is useful when the selected objects are small or covered by other objects." msgstr "" #: ../../manual/objects.rst:239 msgid "The selected objects can also be moved with the arrow keys. By default this moves the objects pixel by pixel. Hold ``Shift`` while using the arrow keys to move the objects by distance of one tile." msgstr "" #: ../../manual/objects.rst:244 msgid "Resizing" msgstr "" #: ../../manual/objects.rst:246 msgid "You can use the resize handles to resize one or more selected objects. Hold ``Ctrl`` to keep the aspect ratio of the object and/or ``Shift`` to place the resize origin in the center." msgstr "" #: ../../manual/objects.rst:250 msgid "Note that you can only change width and height independently when resizing a single object. When having multiple objects selected, the aspect ratio is constant because there would be no way to make that work for rotated objects without full support for transformations." msgstr "" #: ../../manual/objects.rst:256 msgid "Rotating" msgstr "" #: ../../manual/objects.rst:258 msgid "To rotate, click any selected object to change the resize handles into rotation handles. Before rotating, you can drag the rotation origin to another position if necessary. Hold ``Shift`` to rotate in 15-degree increments. Click any selected object again to go back to resize mode." msgstr "" #: ../../manual/objects.rst:263 msgid "You can also rotate the selected objects in 90-degree steps by pressing ``Z`` or ``Shift + Z``." msgstr "" #: ../../manual/objects.rst:267 msgid "Changing Stacking Order" msgstr "" #: ../../manual/objects.rst:269 msgid "If the active :ref:`Object Layer ` has its Drawing Order property set to Manual (the default is Top Down), you can control the stacking order of the selected objects within their object layer using the following keys:" msgstr "" #: ../../manual/objects.rst:274 msgid "``PgUp`` - Raise selected objects" msgstr "" #: ../../manual/objects.rst:275 msgid "``PgDown`` - Lower selected objects" msgstr "" #: ../../manual/objects.rst:276 msgid "``Home`` - Move selected objects to Top" msgstr "" #: ../../manual/objects.rst:277 msgid "``End`` - Move selected objects to Bottom" msgstr "" #: ../../manual/objects.rst:279 msgid "You can also find these actions in the context menu. When you have multiple Object Layers, the context menu also contains actions to move the selected objects to another layer." msgstr "" #: ../../manual/objects.rst:284 msgid "Flipping Objects" msgstr "" #: ../../manual/objects.rst:286 msgid "You can flip the selected objects horizontally by pressing ``X`` or vertically by pressing ``Y``. For tile objects, this also flips their images." msgstr "" #: ../../manual/objects.rst:293 msgid "Edit Polygons" msgstr "" #: ../../manual/objects.rst:295 msgid "Shortcut: ``E``" msgstr "" #: ../../manual/objects.rst:297 msgid "Polygons and polylines have their own editing needs and as such are covered by a separate tool, which allows selecting and moving around their nodes. You can select and move the nodes of multiple polygons at the same time. Click a segment to select the nodes at both ends. Press ``Escape`` to deselect all nodes, or to switch back to the :ref:`select-objects-tool` tool." msgstr "" #: ../../manual/objects.rst:304 msgid "Nodes can be deleted by selecting them and choosing \"Delete Nodes\" from the context menu. The ``Delete`` key can also be used to delete the selected nodes, or the selected objects if no nodes are selected." msgstr "" #: ../../manual/objects.rst:308 msgid "When you have selected multiple consecutive nodes of the same polygon, you can join them together by choosing \"Join Nodes\" from the context menu. You can also split the segments in between the nodes by choosing \"Split Segments\". Alternatively, you can simply double-click a segment to split it at that location." msgstr "" #: ../../manual/objects.rst:314 msgid "You can also delete a segment when two consecutive nodes are selected in a polygon by choosing \"Delete Segment\" in the context menu. This will convert a polygon into a polyline, or turn one polyline object in two polyline objects." msgstr "" #: ../../manual/objects.rst:323 msgid "It is possible to extend a polyline at either end, either by right-clicking those nodes and choosing \"Extend Polyline\", or by switching to the :ref:`insert-polygon-tool` tool and clicking on either end of an already selected polyline." msgstr "" #: ../../manual/objects.rst:336 msgid "Connecting Objects" msgstr "" #: ../../manual/objects.rst:338 msgid "It can often be useful to connect one object with another, like when a switch should open a certain door or an NPC should follow a certain path. To do this, add a custom property of type ``object`` to the source object. This property can then be set to the desired target object in several ways." msgstr "" #: ../../manual/objects.rst:343 msgid "Make sure the property value is selected, as seen on the following screenshot:" msgstr "" #: ../../manual/objects.rst:348 msgid "Object Connection Property" msgstr "" #: ../../manual/objects.rst:350 msgid "Then, you can set the connection by either:" msgstr "" #: ../../manual/objects.rst:352 msgid "Typing in the ID of the target object." msgstr "" #: ../../manual/objects.rst:354 msgid "Clicking the icon with the window and magnifier, to open a dialog where you can filter all objects on the map to find your target object." msgstr "" #: ../../manual/objects.rst:357 msgid "Clicking the arrow icon and then clicking an object on the map to set it as the target object." msgstr "" #: ../../manual/objects.rst:360 msgid "As shown on the screenshot above, any connections between objects are rendered as arrows, taking the color of their target object (defined as part of the :ref:`object types ` or by the color of the object layer). You can toggle the display of these arrows using *View -> Show Object References*." msgstr "" #: ../../manual/objects.rst:366 msgid "If you'd like to get to the target object, but it's very far away, you can jump there by right-clicking the property and selecting *Go to Object*." msgstr "" #: ../../manual/objects.rst:372 msgid "Here are some ideas about improvements that could be made to the above tools:" msgstr "" #: ../../manual/objects.rst:375 msgid "Some improvements could still be made to the support for editing polygons and polylines, like allowing to rotate and scale the selected nodes (`#1487 `__)." msgstr "" #: ../../manual/objects.rst:379 msgid "The tools could put short usage instructions in the status bar, to help new users without requiring them to carefully read the manual (`#1855 `__)." msgstr "" #: ../../manual/preferences.rst:2 msgid "User Preferences" msgstr "" #: ../../manual/preferences.rst:4 msgid "There are only a few options located in the Preferences, accessible though the menu via *Edit > Preferences*. Most other options, like whether to draw the grid, what kind of snapping to do or the last used settings when creating a new map are simply remembered persistently." msgstr "" #: ../../manual/preferences.rst:9 msgid "The preferences are stored in a system-dependent format and location:" msgstr "" #: ../../manual/preferences.rst:12 msgid "**Windows**" msgstr "" #: ../../manual/preferences.rst:12 msgid "Registry key ``HKEY_CURRENT_USER\\SOFTWARE\\mapeditor.org\\Tiled``" msgstr "" #: ../../manual/preferences.rst:14 msgid "**macOS**" msgstr "" #: ../../manual/preferences.rst:14 msgid ":file:`~/Library/Preferences/org.mapeditor.Tiled.plist`" msgstr "" #: ../../manual/preferences.rst:16 msgid "**Linux**" msgstr "" #: ../../manual/preferences.rst:16 msgid ":file:`~/.config/mapeditor.org/tiled.conf`" msgstr "" #: ../../manual/preferences.rst:29 msgid "Saving and Loading" msgstr "" #: ../../manual/preferences.rst:33 msgid "Reload tileset images when they change" msgstr "" #: ../../manual/preferences.rst:32 msgid "This is very useful while working on the tiles or when the tiles might change as a result of a source control system." msgstr "" #: ../../manual/preferences.rst:37 msgid "Restore previous session on startup" msgstr "" #: ../../manual/preferences.rst:36 msgid "When disabled, Tiled always starts with an empty session. This can be useful when you frequently switch projects." msgstr "" #: ../../manual/preferences.rst:45 msgid "Use safe writing of files" msgstr "" #: ../../manual/preferences.rst:40 msgid "This setting causes files to be written to a temporary file, and when all went well, to be swapped with the target file. This avoids data getting lost due to errors while saving or due to insufficient disk space. Unfortunately, it is known to cause issues when saving files to a Dropbox folder or a network drive, in which case it helps to disable this feature." msgstr "" #: ../../manual/preferences.rst:50 msgid "Repeat last export on save" msgstr "" #: ../../manual/preferences.rst:48 msgid "With this feature enabled, any time you save a map or tileset that was previously exported it will automatically be exported again to the same location and format." msgstr "" #: ../../manual/preferences.rst:59 msgid "Export Options" msgstr "" #: ../../manual/preferences.rst:61 msgid "The following export options are applied each time a map or tileset gets exported, without affecting the map or tileset itself." msgstr "" #: ../../manual/preferences.rst:67 msgid "Embed tilesets" msgstr "" #: ../../manual/preferences.rst:65 msgid "All tilesets are embedded in the exported map. Useful for example when you are exporting to JSON and loading an external tileset is not desired." msgstr "" #: ../../manual/preferences.rst:72 msgid "Detach templates" msgstr "" #: ../../manual/preferences.rst:70 msgid "All template instances are detached. Useful when you want to use the templates feature but can't or don't want to load the external template object files." msgstr "" #: ../../manual/preferences.rst:77 msgid "Resolve object types and properties" msgstr "" #: ../../manual/preferences.rst:75 msgid "Stores effective object type and properties with each object. Object properties are inherited from a tile (in case of a tile object) and from the default properties of their type." msgstr "" #: ../../manual/preferences.rst:81 msgid "Minimize output" msgstr "" #: ../../manual/preferences.rst:80 msgid "Omits unnecessary whitespace in the output file. This option is supported for XML (TMX and TSX), JSON and Lua formats." msgstr "" #: ../../manual/preferences.rst:83 msgid "These options are also available as options when exporting using the command-line." msgstr "" #: ../../manual/preferences.rst:87 #: ../../manual/preferences.rst:90 msgid "Interface" msgstr "" #: ../../manual/preferences.rst:94 msgid "Language" msgstr "" #: ../../manual/preferences.rst:93 msgid "By default the language tries to match that of the system, but if it picks the wrong one you can change it here." msgstr "" #: ../../manual/preferences.rst:97 msgid "Grid colour" msgstr "" #: ../../manual/preferences.rst:97 msgid "Because black is not always the best color for the grid." msgstr "" #: ../../manual/preferences.rst:102 msgid "Fine grid divisions" msgstr "" #: ../../manual/preferences.rst:100 msgid "The tile grid can be divided further using this setting, which affects the \"Snap to Fine Grid\" setting in the *View > Snapping* menu." msgstr "" #: ../../manual/preferences.rst:107 msgid "Object line width" msgstr "" #: ../../manual/preferences.rst:105 msgid "Shapes are by default rendered with a 2 pixel wide line, but some people like it thinner or even thicker. On some systems the DPI-based scaling will affect this setting as well." msgstr "" #: ../../manual/preferences.rst:120 msgid "Object selection behavior" msgstr "" #: ../../manual/preferences.rst:114 msgid "By default the :ref:`select-objects-tool` tool selects objects from any layer. With this setting, you can make it prefer to select objects from the currently selected layers, or to only pick objects from the selected layers." msgstr "" #: ../../manual/preferences.rst:119 msgid "When the \"Highlight Current Layer\" option is enabled, Tiled automatically prefers to select objects from the currently selected layers." msgstr "" #: ../../manual/preferences.rst:125 msgid "Hardware accelerated drawing (OpenGL)" msgstr "" #: ../../manual/preferences.rst:123 msgid "This enables a rather unoptimized way of rendering the map using OpenGL. It's usually not an improvement and may lead to crashes, but in some scenarios it can make editing more responsive." msgstr "" #: ../../manual/preferences.rst:135 msgid "Mouse wheel zooms by default" msgstr "" #: ../../manual/preferences.rst:132 msgid "This option causes the mouse wheel to zoom without the need to hold Control (or Command on macOS). It can be a convenient way to navigate the map, but it can also interfere with panning on a touchpad." msgstr "" #: ../../manual/preferences.rst:144 msgid "Middle mouse button uses auto-scrolling" msgstr "" #: ../../manual/preferences.rst:142 msgid "With this option enabled, the clicking middle mouse button doesn't drag the map directly but instead controls the speed of a continuous panning movement." msgstr "" #: ../../manual/preferences.rst:153 msgid "Use smooth scrolling" msgstr "" #: ../../manual/preferences.rst:151 msgid "This option affects the behavior when scrolling with the arrow keys. When disabled, the view scrolls in steps based on key press events. When enabled (the default), the view scrolls continuously while the keys are held down." msgstr "" #: ../../manual/preferences.rst:160 msgid "Updates" msgstr "" #: ../../manual/preferences.rst:162 msgid "By default, Tiled checks for news and new versions and highlights any updates in the status bar. Here you can disable this functionality. It is recommended to keep at least one of these enabled." msgstr "" #: ../../manual/preferences.rst:166 msgid "If you disable displaying of new versions, you can still manually check whether a new version is available by opening the *About Tiled* dialog." msgstr "" #: ../../manual/preferences.rst:176 msgid "Keyboard" msgstr "" #: ../../manual/preferences.rst:178 msgid "Here you can add, remove or change the keyboard shortcuts of most available actions." msgstr "" #: ../../manual/preferences.rst:181 msgid "Conflicting keybindings are highlighted in red. They will not work until you resolve the conflict." msgstr "" #: ../../manual/preferences.rst:184 msgid "If you customize multiple shortcuts, it is recommended to use the export functionality to save the keybindings somewhere, so that you can easily recover that setup or copy it to other Tiled installations." msgstr "" #: ../../manual/preferences.rst:190 msgid "Theme" msgstr "" #: ../../manual/preferences.rst:192 msgid "On Windows and Linux, the default style used by Tiled is \"Tiled Fusion\". This is a customized version of the \"Fusion\" style that ships with Qt. On macOS, this style can also be used, but because it looks so out of place the default is \"Native\" there." msgstr "" #: ../../manual/preferences.rst:197 msgid "The \"Tiled Fusion\" style allows customizing the base color. When choosing a dark base color, the text automatically switches to white and some other adjustments are made to keep things readable. You can also choose a custom selection color." msgstr "" #: ../../manual/preferences.rst:202 msgid "The \"Native\" style tries to fit in with the operating system, and is available since it is in some cases preferable to the custom style. The base color and selection color can't be changed when using this style, as they depend on the system." msgstr "" #: ../../manual/preferences.rst:208 msgid "Plugins" msgstr "" #: ../../manual/preferences.rst:210 msgid "Here you can choose which plugins are enabled, as well as opening the :doc:`scripted extensions ` folder." msgstr "" #: ../../manual/preferences.rst:213 msgid "Plugins add support for map and/or tileset file formats. Some generic plugins are enabled by default, while more specific ones need to be manually enabled." msgstr "" #: ../../manual/preferences.rst:216 msgid "There is no need to restart Tiled when enabling or disabling plugins. When a plugin fails to load, try hovering its icon to see if the tool tip displays a useful error message." msgstr "" #: ../../manual/preferences.rst:220 msgid "See :doc:`export` for more information about supported file formats." msgstr "" #: ../../manual/projects.rst:6 msgid "Projects" msgstr "" #: ../../manual/projects.rst:9 msgid "What's in a Project" msgstr "" #: ../../manual/projects.rst:11 msgid "A Tiled project file primarily defines the list of folders containing the assets belonging to that project. In addition, it provides an anchor for the :ref:`session file `." msgstr "" #: ../../manual/projects.rst:15 msgid "Apart from the list of folders, a project currently has the following properties, which can be changed through the *Project -> Project Properties...* dialog." msgstr "" #: ../../manual/projects.rst:25 msgid "Extensions Directory" msgstr "" #: ../../manual/projects.rst:20 msgid "A project-specific directory where you can put :doc:`Tiled extensions `. It defaults to simply ``extensions``, so when you have a directory called \"extensions\" alonside your project file it will be picked up automatically." msgstr "" #: ../../manual/projects.rst:25 msgid "The directory is loaded in addition to the global extensions." msgstr "" #: ../../manual/projects.rst:33 msgid "Object Types File" msgstr "" #: ../../manual/projects.rst:28 msgid "Refers to the file defining the object types. Be sure to specify this file before opening the :ref:`Object Types Editor `, to make sure any types you define are saved to the right location." msgstr "" #: ../../manual/projects.rst:32 msgid "When left unspecified, object type definitions are saved to a global location." msgstr "" #: ../../manual/projects.rst:38 msgid "Automapping Rules File" msgstr "" #: ../../manual/projects.rst:36 msgid "Refers to an :doc:`automapping` rules file that should be used for all maps while this project is loaded. It is ignored for maps that have a ``rules.txt`` file saved alongside them." msgstr "" #: ../../manual/projects.rst:43 msgid "Sessions" msgstr "" #: ../../manual/projects.rst:45 msgid "Each project file gets an associated *.tiled-session* file, stored alongside it. The session file should generally not be shared with others and stores your last opened files, part of their last editor state, last used parameters in dialogs, etc." msgstr "" #: ../../manual/projects.rst:50 msgid "When switching projects Tiled automatically switches to the associated session, so you can easily resume where you left off. When no project is loaded a global session file is used." msgstr "" #: ../../manual/projects.rst:55 msgid "Opening a File in the Project" msgstr "" #: ../../manual/projects.rst:57 msgid "Another advantage of setting up a project is that you can quickly open any file with a recognized extension located in one of the folders of the project. Use *File -> Open File in Project* (``Ctrl+P``) to open the file filter and just type the name of the file you'd like to open." msgstr "" #: ../../manual/projects.rst:65 msgid "Open File in Project" msgstr "" #: ../../manual/projects.rst:70 msgid "There are many ways in which the projects could be made more powerful:" msgstr "" #: ../../manual/projects.rst:72 msgid "Make the project accessible through the :doc:`scripting API `." msgstr "" #: ../../manual/projects.rst:75 msgid "Allow turning off features on a per-project basis, to simplify the UI and reduce the chance of accidentally doing something your project doesn't support." msgstr "" #: ../../manual/projects.rst:79 msgid "Recognizing the various assets in your project, so that selection of images, tilesets and templates can be made more efficient (potentially replacing the system file dialog)." msgstr "" #: ../../manual/python.rst:2 msgid "Python Scripts" msgstr "" #: ../../manual/python.rst:6 msgid "Since Tiled 1.3, Tiled can be :doc:`extended using JavaScript `. The JavaScript API provides a lot more opportunity for extending Tiled's functionality than just adding custom map formats. It is fully documented and works out of the box on all platforms. It should be preferred over the Python plugin when possible." msgstr "" #: ../../manual/python.rst:12 msgid "Tiled ships with a plugin that enables you to use Python 3 to add support for custom map formats. This is nice especially since you don't need to compile Tiled yourself and the scripts are easy to deploy to any platform." msgstr "" #: ../../manual/python.rst:17 msgid "For the scripts to get loaded, they should be placed in ``~/.tiled``. Tiled watches this directory for changes, so there is no need to restart Tiled after adding or changing scripts (though the directory needs to exist when you start Tiled)." msgstr "" #: ../../manual/python.rst:22 msgid "There are several `example scripts`_ available in the repository." msgstr "" #: ../../manual/python.rst:26 msgid "To create the ``~/.tiled`` folder on Windows, open command prompt (``cmd.exe``), which should start in your home folder by default, then type ``mkdir .tiled`` to create the folder." msgstr "" #: ../../manual/python.rst:30 msgid "On Linux, folders starting with a dot are hidden by default. In most file managers you can toggle showing of hidden files using ``Ctrl+H``." msgstr "" #: ../../manual/python.rst:35 msgid "Since Tiled 1.2.4, the Python plugin is disabled by default, because depending on which Python version is installed on the system the loading of this plugin may cause a crash (`#2091`_). To use the Python plugin, first enable it in the Preferences." msgstr "" #: ../../manual/python.rst:42 msgid "On Windows, Python is not installed by default. For the Tiled Python plugin to work, you'll need to install Python 3.7 (get it from https://www.python.org/). You will also need to check the box \"Add Python 3.7 to PATH\" in the installer:" msgstr "" #: ../../manual/python.rst:49 msgid "On Linux you will also need to install the appropriate package. However, currently Linux builds are done on Ubuntu 18.04 against Python 3.6, and you'd need to install the same version somehow." msgstr "" #: ../../manual/python.rst:53 msgid "The Python plugin is currently not enabled for macOS releases. We'll need to find out how to build it against Python 3, while macOS only ships with Python 2.7 by default. If you rely on this plugin on macOS you'll need to use Tiled 1.1 for now." msgstr "" #: ../../manual/python.rst:59 msgid "Example Export Plugin" msgstr "" #: ../../manual/python.rst:61 msgid "Suppose you'd like to have a map exported in the following format:" msgstr "" #: ../../manual/python.rst:78 msgid "You can achieve this by saving the following ``example.py`` script in the scripts directory:" msgstr "" #: ../../manual/python.rst:117 msgid "Then you should see an \"Example files\" entry in the type dropdown when going to *File > Export*, which allows you to export the map using the above script." msgstr "" #: ../../manual/python.rst:123 msgid "This example does not support the use of group layers, and in fact the script API doesn't support this yet either. Any help with maintaining the Python plugin would be very appreciated. See `open issues related to Python support`_." msgstr "" #: ../../manual/python.rst:129 msgid "Debugging Your Script" msgstr "" #: ../../manual/python.rst:131 msgid "Any errors that happen while parsing or running the script are printed to the Console, which can be enabled in *View > Views and Toolbars > Console*." msgstr "" #: ../../manual/python.rst:136 msgid "API Reference" msgstr "" #: ../../manual/python.rst:138 msgid "It would be nice to have the full API reference documented here, but for now please check out the `source file`_ for available classes and methods." msgstr "" #: ../../manual/terrain.rst:2 msgid "Using Terrains" msgstr "" #: ../../manual/terrain.rst:4 msgid "When editing a tile map, sometimes we don't think in terms of *tiles* but rather in terms of *terrains* - areas of tiles with transitions to other kinds of tiles. Say we want to draw a patch of grass, a road or a certain platform. In this case, manually choosing the right tiles for the various transitions or connections quickly gets tedious. The :ref:`terrain-tool` was added to make editing tile maps easier in such cases." msgstr "" #: ../../manual/terrain.rst:13 msgid "While Tiled has supported terrains since version 0.9 and later supported a similar feature called \"Wang tiles\" since version 1.1, both features were unified and extended in Tiled 1.5. As a result, *terrain information defined in Tiled 1.5 can't be used by older versions.*" msgstr "" #: ../../manual/terrain.rst:18 msgid "The Terrain Brush relies on the tileset providing one or more *Terrain Sets* - sets of tiles labelled according to their terrain layouts. Tiled supports the following terrain sets:" msgstr "" #: ../../manual/terrain.rst:30 msgid "Corner Set" msgstr "" #: ../../manual/terrain.rst:28 msgid "Tiles that needs to match neighboring tiles at their corners, with a transition from one type of terrain to another in between. A complete set with 2 terrains has 16 tiles." msgstr "" #: ../../manual/terrain.rst:40 msgid "Edge Set" msgstr "" #: ../../manual/terrain.rst:38 msgid "Tiles that need to match neighboring tiles at their sides. This is common for roads, fences or platforms. A complete set with 2 terrains has 16 tiles." msgstr "" #: ../../manual/terrain.rst:47 msgid "Mixed Set" msgstr "" #: ../../manual/terrain.rst:43 msgid "Tiles that rely on matching neighboring tiles using both their corners and sides. This allows a tileset to provide more variation, at the cost of needing significantly more tiles. A complete set with 2 terrains has 256 tiles, but reduced sets like the 47-tile `Blob tileset`_ can be used with this type as well." msgstr "" #: ../../manual/terrain.rst:49 msgid "Based on the information in a terrain set, the :ref:`terrain-tool` can understand the map and automatically choose the right tiles when making edits. When necessary, it also adjusts neighboring tiles to make sure they correctly connect to the modified area." msgstr "" #: ../../manual/terrain.rst:54 msgid "The :ref:`stamp-tool`, as well as the :ref:`bucket-fill-tool` and the :ref:`shape-fill-tool`, also have a mode where they can :ref:`fill an area with random terrain `." msgstr "" #: ../../manual/terrain.rst:61 msgid "Define the Terrain Information" msgstr "" #: ../../manual/terrain.rst:64 msgid "Creating the Terrain Set" msgstr "" #: ../../manual/terrain.rst:66 msgid "First of all, switch to the tileset file. If you're looking at the map and have the tileset selected, you can do this by clicking the small *Edit Tileset* button below the Tilesets view." msgstr "" #: ../../manual/terrain.rst:73 msgid "Edit Tileset button" msgstr "" #: ../../manual/terrain.rst:75 msgid "Then, activate the terrain editing mode by clicking on the *Terrain Sets* |terrain| button on the tool bar. With this mode activated, the *Terrain Sets* view will become visible, with a button to add a new set. In this example, we'll define a *Corner Set*." msgstr "" #: ../../manual/terrain.rst:83 msgid "Adding a Terrain Set" msgstr "" #: ../../manual/terrain.rst:85 msgid "When adding a terrain set, the name of the new set will automatically get focus. Give the set a recognizable name, in the example we'll type \"Desert Ground\". We can also set one of the tiles as the icon of the set by right-clicking a tile and choosing \"Use as Terrain Set Image\"." msgstr "" #: ../../manual/terrain.rst:91 msgid "Adding Terrains" msgstr "" #: ../../manual/terrain.rst:93 msgid "The new set will have one terrain added by default. If we already know we need additional ones, click the *Add Terrain* button to add more." msgstr "" #: ../../manual/terrain.rst:96 msgid "Each terrain has a name, color and can have one of the tiles as its icon it to make it more recognizable. Double-click the terrain to edit its name. To change the color, right-click the terrain and choose \"Pick Custom Color\". To assign an icon, select the terrain and then right-click a tile, choosing \"Use as Terrain Image\"." msgstr "" #: ../../manual/terrain.rst:106 msgid "Our Terrains" msgstr "" #: ../../manual/terrain.rst:110 msgid "We generally don't need to define an explicit terrain for \"empty tiles\". If you have tiles transitioning to nothing, it should be enough to not mark those areas." msgstr "" #: ../../manual/terrain.rst:114 msgid "With our terrains set up we're ready to mark each of our tiles." msgstr "" #: ../../manual/terrain.rst:117 msgid "Marking the Tiles" msgstr "" #: ../../manual/terrain.rst:119 msgid "Note that for a *Corner Set*, we can only mark the corners of the tiles. For a *Edge Set*, we're limited to marking the edges of our tiles. If we need both we need to use a *Mixed Set*. If it turns out that we chose the wrong type of terrain set, we can still change the type in the Properties view (right-click the terrain set and choose *Terrain Set Properties...*)." msgstr "" #: ../../manual/terrain.rst:125 msgid "With the terrain we want to mark selected, click and drag to mark the regions of the tiles that match this terrain." msgstr "" #: ../../manual/terrain.rst:131 msgid "Here we have marked all the sandy corners in our example tileset." msgstr "" #: ../../manual/terrain.rst:133 msgid "If you make a mistake, just use Undo (or press ``Ctrl+Z``). Or if you notice a mistake later, either use *Erase Terrain* to clear a terrain type from a corner or select the correct terrain type and paint over it. Each corner can only have one type of terrain associated with it." msgstr "" #: ../../manual/terrain.rst:138 msgid "Now do the same for each of the other terrain types. Eventually you'll have marked all tiles apart from the special objects." msgstr "" #: ../../manual/terrain.rst:144 msgid "We're done marking the terrain of our tiles." msgstr "" #: ../../manual/terrain.rst:147 msgid "Patterns View" msgstr "" #: ../../manual/terrain.rst:149 msgid "Next to the *Terrains* tab there's also a *Patterns* tab. This view can be useful when marking complete sets, since it can highlight still missing patterns. Each pattern which already occurs on a tile in the tileset is darkened, to make the missing patterns stand out. Note though, that it is not necessary for a terrain set to have all possible patterns, especially when using more than 2 terrains." msgstr "" #: ../../manual/terrain.rst:159 msgid "Patterns view, showing all possible combinations in the set." msgstr "" #: ../../manual/terrain.rst:162 msgid "Editing with the Terrain Brush" msgstr "" #: ../../manual/terrain.rst:164 msgid "Now you can disable the *Terrain Sets* |terrain| mode by clicking the tool bar button again. Then switch back to the map and activate the *Terrain Sets* window. Select the terrain set we have just set up, so we can use its terrains." msgstr "" #: ../../manual/terrain.rst:169 msgid "Click on the Sand terrain and try to paint. You may immediately notice that nothing is happening. This is because there are no other tiles on the map yet, so the terrain tool doesn't really know how to help (because we also have no transitions to \"nothing\" in our tileset). There are two ways out of this:" msgstr "" #: ../../manual/terrain.rst:174 msgid "We can hold ``Ctrl`` (``Command`` on a Mac) to paint a slightly larger area. This way we will paint at least a single tile filled with the selected terrain, though this is not convenient for painting larger areas." msgstr "" #: ../../manual/terrain.rst:178 msgid "Assuming we're out to create a desert map, it's better to start by filling the entire map with sand. Just switch back to the *Tilesets* window for a moment, select the sand tile and then use the :ref:`bucket-fill-tool`." msgstr "" #: ../../manual/terrain.rst:182 msgid "Once we've painted some sand, let's select the Cobblestone terrain. Now you can see the tool in action!" msgstr "" #: ../../manual/terrain.rst:188 msgid "Drawing cobblestone" msgstr "" #: ../../manual/terrain.rst:190 msgid "Finally, see what happens when you try drawing some dirt on the cobblestone. Because there are no transitions from dirt directly to cobblestone, the Terrain tool first inserts transitions to sand and from there to cobblestone. Neat!" msgstr "" #: ../../manual/terrain.rst:198 msgid "Drawing dirt" msgstr "" #: ../../manual/terrain.rst:202 msgid "An *Erase Terrain* button is provided for the case where your terrain tiles transition to nothing. This allows for erasing parts of your terrain while choosing the right tiles as well. This mode does nothing useful when there are no transitions to nothing in the selected Terrain Set." msgstr "" #: ../../manual/terrain.rst:210 msgid "Terrain Fill Mode" msgstr "" #: ../../manual/terrain.rst:212 msgid "The :ref:`stamp-tool`, :ref:`bucket-fill-tool` and the :ref:`shape-fill-tool` have a *Terrain Fill Mode*, which can be used to paint or fill an area with random terrain. With this mode activated, each cell will be randomly chosen from all those in the selected Terrain Set, making sure to match all adjacent edges and/or corners." msgstr "" #: ../../manual/terrain.rst:220 msgid "Stamp Brush with Terrain Fill Mode Enabled" msgstr "" #: ../../manual/terrain.rst:222 msgid "Note that since this mode makes sure that newly placed tiles match up with any already existing tiles, generally nothing will change when painting with the Stamp Brush on existing terrain. The exception is when there are multiple variations of the same tile, in which case it will randomize between those." msgstr "" #: ../../manual/terrain.rst:229 msgid "Bucket Fill with Terrain Fill Mode Enabled" msgstr "" #: ../../manual/terrain.rst:231 msgid "When filling a shape or an area, only the edges of the filled area need to connect to any existing tiles. Internally the area is completely randomized." msgstr "" #: ../../manual/terrain.rst:235 msgid "Tile and Terrain Probability" msgstr "" #: ../../manual/terrain.rst:237 msgid "Both the :ref:`terrain-fill-mode` and the Terrain Brush will by default consider all matching tiles with equal probability. Both individual tiles as well as terrains have a *Probability* property, which can be used to change the frequency with which a certain tile or terrain is chosen compared to other valid options." msgstr "" #: ../../manual/terrain.rst:243 msgid "The relative probability of a tile is the product of its own propability and the probability of the terrain at each corner and/or side." msgstr "" #: ../../manual/terrain.rst:248 msgid "Left shows \"path\" with probability 0.1, right shows \"path\" with probability 10." msgstr "" #: ../../manual/terrain.rst:252 msgid "Probability for Variations" msgstr "" #: ../../manual/terrain.rst:254 msgid "A common usage for probability, especially at the individual tile level, is to make certain variations of a tile less common than others. Our example tileset contains several bushes and other decorations which we may randomly want to scatter across the desert." msgstr "" #: ../../manual/terrain.rst:259 msgid "To achieve this, first of all we mark all of them as \"sand\" tiles, because this is their base terrain. Then, to make them less common than the regular sand tile, we can put their probability on 0.01. This value means they are each 100 times less likely to be chosen than the regular sand tile (which still has its default probability of 1). To edit the *Probability* property of the tiles we need to exit the *Terrain Sets* mode." msgstr "" #: ../../manual/terrain.rst:268 msgid "Setting low probability on decoration tiles." msgstr "" #: ../../manual/terrain.rst:272 msgid "Random decorative tiles appearing with low probability." msgstr "" #: ../../manual/terrain.rst:276 msgid "It is also possible to put the probability to 0, which disables automatic usage of a tile entirely. This can be useful because it still makes the tools aware of the terrain of a certain tile, which is taken into account when modifying neighboring tiles." msgstr "" #: ../../manual/terrain.rst:286 msgid "Tile Transformations" msgstr "" #: ../../manual/terrain.rst:288 msgid "Tiled supports flipping and rotating tiles. When using terrains, tiles can be automatically flipped and/or rotated to create variations that would otherwise not be available in a tileset. This can be enabled in the *Tileset Properties*." msgstr "" #: ../../manual/terrain.rst:293 msgid "The following transformation-related options are available:" msgstr "" #: ../../manual/terrain.rst:296 msgid "Flip Horizontally" msgstr "" #: ../../manual/terrain.rst:296 msgid "Allow tiles to be flipped horizontally." msgstr "" #: ../../manual/terrain.rst:300 msgid "Flip Vertically" msgstr "" #: ../../manual/terrain.rst:299 msgid "Allow tiles to be flipped vertically. This would be left disabled when the graphics contain shadows in vertical direction, for example." msgstr "" #: ../../manual/terrain.rst:303 msgid "Rotate" msgstr "" #: ../../manual/terrain.rst:303 msgid "Allow tiles to be rotated (by 90, 180 or 270-degrees)." msgstr "" #: ../../manual/terrain.rst:310 msgid "Prefer Untransformed Tiles" msgstr "" #: ../../manual/terrain.rst:306 msgid "When transformations are enabled, it could happen that a certain pattern can be filled by either a regular tile or a transformed tile. With this option enabled, the untransformed tiles will always take precedence. Leaving this option disabled allows transformations to be used to create more variation." msgstr "" #: ../../manual/terrain.rst:315 msgid "With rotations enabled, the normally 47-tiles `Blob tileset`_ can be reduced to a mere 15 tiles." msgstr "" #: ../../manual/terrain.rst:320 msgid "Final Words" msgstr "" #: ../../manual/terrain.rst:322 msgid "Now you should have a pretty good idea about how to use this tool in your own project. A few things to keep in mind:" msgstr "" #: ../../manual/terrain.rst:325 msgid "For one terrain to interact with another, they need to be part of the same *Terrain Set*. This also means all tiles need to be part of the same tileset. If you have tiles in different tilesets that you want to transition to one another, you will need to merge the tilesets into one." msgstr "" #: ../../manual/terrain.rst:330 msgid "Since defining the terrain information can be somewhat laborious, you'll want to avoid using embedded tilesets so that terrain information can be shared among several maps." msgstr "" #: ../../manual/terrain.rst:334 msgid "The Terrain tool works fine with isometric maps as well. To make sure the terrain overlay is displayed correctly, set up the *Orientation*, *Grid Width* and *Grid Height* in the tileset properties." msgstr "" #: ../../manual/terrain.rst:338 msgid "The tool will handle any number of terrains (up to 255) and each corner of a tile can have a different type of terrain. Still, there are other ways of dealing with transitions that this tool can't handle. Also, it is not able to edit multiple layers at the same time. For a more flexible, but also more complicated way of automatic tile placement, check out :doc:`automapping`." msgstr "" #: ../../manual/terrain.rst:344 msgid "There's a `collection of tilesets `__ that contain transitions that are compatible with this tool on `OpenGameArt.org `__." msgstr "" #: ../../manual/using-commands.rst:2 msgid "Using Commands" msgstr "" #: ../../manual/using-commands.rst:4 msgid "The Command Button allows you to create and run shell commands (other programs) from Tiled." msgstr "" #: ../../manual/using-commands.rst:7 msgid "You may setup as many commands as you like. This is useful if you edit maps for multiple games and you want to set up a command for each game. Or you could setup multiple commands for the same game that load different checkpoints or configurations." msgstr "" #: ../../manual/using-commands.rst:13 msgid "The Command Button" msgstr "" #: ../../manual/using-commands.rst:15 msgid "It is located on the main toolbar to the right of the redo button. Clicking on it will run the default command (the first command in the command list). Clicking the arrow next to it will bring down a menu that allows you to run any command you have set up, as well as an option to open the Edit Commands dialog. You can also find all the commands in the File menu." msgstr "" #: ../../manual/using-commands.rst:22 msgid "Apart from this, you can set up custom keyboard shortcuts for each command." msgstr "" #: ../../manual/using-commands.rst:26 msgid "Editing Commands" msgstr "" #: ../../manual/using-commands.rst:28 msgid "The 'Edit Commands' dialog contains a list of commands. Each command has several properties:" msgstr "" #: ../../manual/using-commands.rst:32 msgid "The name of the command as it will be shown in the drop down list, so you can easily identify it." msgstr "" #: ../../manual/using-commands.rst:37 msgid "Executable" msgstr "" #: ../../manual/using-commands.rst:36 msgid "The executable to run. It should either be a full path or the name of an executable in the system PATH." msgstr "" #: ../../manual/using-commands.rst:40 msgid "Arguments" msgstr "" #: ../../manual/using-commands.rst:40 msgid "The arguments for running the executable." msgstr "" #: ../../manual/using-commands.rst:43 msgid "Working directory" msgstr "" #: ../../manual/using-commands.rst:43 msgid "The path to the working directory." msgstr "" #: ../../manual/using-commands.rst:47 msgid "Shortcut" msgstr "" #: ../../manual/using-commands.rst:46 msgid "A custom key sequence to trigger the command. You can use 'Clear' to reset the shortcut." msgstr "" #: ../../manual/using-commands.rst:52 msgid "Show output in Console view" msgstr "" #: ../../manual/using-commands.rst:50 msgid "If this is enabled, then the output (stdout and stderr) of this command will be displayed in the Console. You can find the Console in *View > Views and Toolbars > Console*." msgstr "" #: ../../manual/using-commands.rst:56 msgid "Save map before executing" msgstr "" #: ../../manual/using-commands.rst:55 msgid "If this is enabled, then the current map will be saved before executing the command." msgstr "" #: ../../manual/using-commands.rst:60 msgid "Enabled" msgstr "" #: ../../manual/using-commands.rst:59 msgid "A quick way to disable commands and remove them from the drop down list. The default command is the first enabled command." msgstr "" #: ../../manual/using-commands.rst:62 msgid "Note that if the executable or any of its arguments contain spaces, these parts need to be quoted." msgstr "" #: ../../manual/using-commands.rst:66 msgid "Substituted Variables" msgstr "" #: ../../manual/using-commands.rst:68 msgid "In the executable, arguments and working directory fields, you can use the following variables:" msgstr "" #: ../../manual/using-commands.rst:72 msgid "``%mapfile``" msgstr "" #: ../../manual/using-commands.rst:72 msgid "the full path of the current file (either map or tileset)." msgstr "" #: ../../manual/using-commands.rst:75 msgid "``%mappath``" msgstr "" #: ../../manual/using-commands.rst:75 msgid "the path in which the current file is located." msgstr "" #: ../../manual/using-commands.rst:82 msgid "``%projectpath``" msgstr "" #: ../../manual/using-commands.rst:82 msgid "the path in which the current project is located." msgstr "" #: ../../manual/using-commands.rst:85 msgid "``%objecttype``" msgstr "" #: ../../manual/using-commands.rst:85 msgid "the type of the currently selected object, if any." msgstr "" #: ../../manual/using-commands.rst:88 msgid "``%objectid``" msgstr "" #: ../../manual/using-commands.rst:88 msgid "the ID of the currently selected object, if any." msgstr "" #: ../../manual/using-commands.rst:91 msgid "``%layername``" msgstr "" #: ../../manual/using-commands.rst:91 msgid "the name of the currently selected layer." msgstr "" #: ../../manual/using-commands.rst:98 msgid "``%tileid``" msgstr "" #: ../../manual/using-commands.rst:98 msgid "a comma-separated list with the IDs of the selected tiles, if any." msgstr "" #: ../../manual/using-commands.rst:100 msgid "For the working directory field, you can additionally use the following variable:" msgstr "" #: ../../manual/using-commands.rst:105 msgid "``%executablepath``" msgstr "" #: ../../manual/using-commands.rst:104 msgid "the path to the executable." msgstr "" #: ../../manual/using-commands.rst:108 msgid "Example Commands" msgstr "" #: ../../manual/using-commands.rst:110 msgid "Launching a custom game called \"mygame\" with a -loadmap parameter and the mapfile:" msgstr "" #: ../../manual/using-commands.rst:117 msgid "On Mac, remember that Apps are folders, so you need to run the actual executable from within the ``Contents/MacOS`` folder:" msgstr "" #: ../../manual/using-commands.rst:124 msgid "Or use ``open`` (and note the quotes since one of the arguments contains spaces):" msgstr "" #: ../../manual/using-commands.rst:131 msgid "Some systems also have a command to open files in the appropriate program:" msgstr "" #: ../../manual/using-commands.rst:134 msgid "OSX: ``open %mapfile``" msgstr "" #: ../../manual/using-commands.rst:135 msgid "GNOME systems like Ubuntu: ``gnome-open %mapfile``" msgstr "" #: ../../manual/using-commands.rst:136 msgid "FreeDesktop.org standard: ``xdg-open %mapfile``" msgstr "" #: ../../manual/using-infinite-maps.rst:6 msgid "Using Infinite Maps" msgstr "" #: ../../manual/using-infinite-maps.rst:8 msgid "Infinite maps give you independence from bounds of the map. The canvas is \"auto-growing\", which basically means, that you have an infinite grid which can be painted upon without worrying about the width and height of the map. The bounds of a particular layer get expanded whenever tiles are painted outside the current bounds." msgstr "" #: ../../manual/using-infinite-maps.rst:18 msgid "Creating an Infinite Map" msgstr "" #: ../../manual/using-infinite-maps.rst:20 msgid "In the order to create an infinite map, make sure the 'Infinite' option is selected in New Map dialog." msgstr "" #: ../../manual/using-infinite-maps.rst:27 msgid "The newly created map will then have an infinite canvas." msgstr "" #: ../../manual/using-infinite-maps.rst:30 msgid "Editing the Infinite Map" msgstr "" #: ../../manual/using-infinite-maps.rst:32 msgid "Except for the :ref:`bucket-fill-tool`, all tools works exactly in the same way as in the fixed-size maps. The Bucket Fill Tool fills the current bounds of that particular tile layer. These bounds get increased upon further painting of that tile layer." msgstr "" #: ../../manual/using-infinite-maps.rst:41 msgid "Conversion from Infinite to Finite Map and Vice Versa" msgstr "" #: ../../manual/using-infinite-maps.rst:43 msgid "In the map properties, you can toggle whether the map should be infinite or not. When converting from infinite to a finite map, the width and height of the final map are chosen on the basis of bounds of all the tile layers." msgstr "" #: ../../manual/using-infinite-maps.rst:51 msgid "The Initial Infinite Map" msgstr "" #: ../../manual/using-infinite-maps.rst:56 msgid "Unchecking the Infinite property in Map Properties" msgstr "" #: ../../manual/using-infinite-maps.rst:61 msgid "The Converted Map" msgstr "" #: ../../manual/using-templates.rst:6 msgid "Using Templates" msgstr "" #: ../../manual/using-templates.rst:8 msgid "Any created object can be saved as a template. These templates can then be instantiated elsewhere as objects that inherit the template's properties. This can save a lot of tedious work of setting up the object type and properties, or even just finding the right tile in the tileset." msgstr "" #: ../../manual/using-templates.rst:13 msgid "Each template is stored in its own file, where they can be organized in directories. You can save templates in either XML or JSON format, just like map and tileset files." msgstr "" #: ../../manual/using-templates.rst:21 msgid "Creating Templates" msgstr "" #: ../../manual/using-templates.rst:23 msgid "A template can be created by right clicking on any object in the map and selecting \"Save As Template\". You will be asked to choose the file name and the format to save the template in. If the object already has a name the suggested file name will be based on that." msgstr "" #: ../../manual/using-templates.rst:35 msgid "To be able to select your templates for editing or instantiating you'll generally want to use the :doc:`Project view `, so make sure to save your templates in a folder that is part of your project. Dragging in a template from a file manager is also possible." msgstr "" #: ../../manual/using-templates.rst:40 msgid "You can't create a template from a tile object that uses a tile from an embedded tileset, because :ref:`template files ` do not support referring to such tilesets." msgstr "" #: ../../manual/using-templates.rst:48 msgid "Creating Template Instances" msgstr "" #: ../../manual/using-templates.rst:52 msgid "Template instantiation works by either dragging and dropping the template from the Project view to the map, or by using the \"Insert Template\" tool by selecting a template and clicking on the map. The latter is more convenient when you want to create many instances." msgstr "" #: ../../manual/using-templates.rst:61 msgid "Editing Templates" msgstr "" #: ../../manual/using-templates.rst:63 msgid "Editing templates is done using the *Template Editor* view. A template can be opened for editing by selecting it in the Project view or by dragging the template file on the *Template Editor* view. The template can also be selected using the *Open File in Project* action." msgstr "" #: ../../manual/using-templates.rst:68 msgid "When selecting the template in the *Template Editor* view, the *Properties* view will show the template's properties, where they can be edited." msgstr "" #: ../../manual/using-templates.rst:71 msgid "Any changes to the template are saved automatically and are immediately reflected on all template instances." msgstr "" #: ../../manual/using-templates.rst:77 msgid "If a property of a template instance is changed, it will be internally marked as an overridden property and won't be changed when the template changes." msgstr "" #: ../../manual/using-templates.rst:84 msgid "If a template file changes on disk, it is automatically reloaded and any changes will be reflected in the *Template Editor* as well as on any template instances." msgstr "" #: ../../manual/using-templates.rst:89 msgid "Detaching Template Instances" msgstr "" #: ../../manual/using-templates.rst:91 msgid "Detaching a template instance will disconnect it from its template, so any further edits to the template will not affect the detached instance." msgstr "" #: ../../manual/using-templates.rst:94 msgid "To detach an instance, right click on it and select *Detach*." msgstr "" #: ../../manual/using-templates.rst:100 msgid "If your map loader does not support object templates, but you'd still like to use them, you can enable the *Detach templates* :ref:`export option `." msgstr "" #: ../../manual/using-templates.rst:107 msgid "Resetting overridden properties individually (`#1725 `__)." msgstr "" #: ../../manual/using-templates.rst:108 msgid "Locking template properties (`#1726 `__)." msgstr "" #: ../../manual/using-templates.rst:109 msgid "Handling wrong file paths (`#1732 `__)." msgstr "" #: ../../manual/using-templates.rst:110 msgid "Managing the templates folder, e.g. moving, renaming or deleting a template or a sub-folder (`#1723 `__)." msgstr "" #: ../../manual/worlds.rst:6 msgid "Working with Worlds" msgstr "" #: ../../manual/worlds.rst:8 msgid "Sometimes a game has a large world which is split over multiple maps to make the world more digestible by the game (less memory usage) or easier to edit by multiple people (avoiding merge conflicts). It would be useful if the maps from such a world could be seen within the same view, and to be able to quickly switch between editing different maps. Defining a world allows you to do exactly that." msgstr "" #: ../../manual/worlds.rst:18 msgid "Many maps from `The Mana World `__ shown at once." msgstr "" #: ../../manual/worlds.rst:22 msgid "Defining a World" msgstr "" #: ../../manual/worlds.rst:24 msgid "A world is defined in a ``.world`` file, which is a JSON file that tells Tiled which maps are part of the world and at what location. Worlds can be created by using the *Map > New World...* action." msgstr "" #: ../../manual/worlds.rst:28 msgid "You may also create `.world files` by hand. Here is a simple example of a world definition, which defines the global position (in pixels) of three maps:" msgstr "" #: ../../manual/worlds.rst:54 msgid "Once defined, a world needs to be loaded by choosing *Map > Load World...* from the menu. Multiple worlds can be loaded at the same time, and worlds will be automatically loaded again when Tiled is restarted." msgstr "" #: ../../manual/worlds.rst:58 msgid "When is map is opened, Tiled checks whether it is part of any of the loaded worlds. If so, any other maps in the same world are loaded as well and displayed alongside the opened map. You can click any of the other maps to open them for editing, which will switch files while keeping the view in the same position." msgstr "" #: ../../manual/worlds.rst:64 msgid "Worlds are reloaded automatically when their file is changed on disk." msgstr "" #: ../../manual/worlds.rst:71 msgid "Editing Worlds" msgstr "" #: ../../manual/worlds.rst:73 msgid "Once you have loaded a world, you can select the 'World Tool' from the toolbar to add, remove and move maps within the world." msgstr "" #: ../../manual/worlds.rst:81 msgid "Adding Maps" msgstr "" #: ../../manual/worlds.rst:77 msgid "Click the 'Add the current map to a loaded world' button on the toolbar, from the dropdown menu select the world you want to add it to. To add a different map to the current world, you can use the 'Add another map to the current world' button from the toolbar. Alternatively, both actions can be accessed by rightclicking in the map editor." msgstr "" #: ../../manual/worlds.rst:86 msgid "Removing Maps" msgstr "" #: ../../manual/worlds.rst:84 msgid "Hit the 'Remove the current map from the current world' button on the toolbar. Alternatively, rightclick a map in the map editor and select the 'Remove ... from World ...' action from the context menu." msgstr "" #: ../../manual/worlds.rst:93 msgid "Moving Maps" msgstr "" #: ../../manual/worlds.rst:89 msgid "Simply drag around maps within the map editor. You can abort moving a map by hitting 'Escape' or by right-clicking." msgstr "" #: ../../manual/worlds.rst:92 msgid "Alternatively you can use the arrow keys to move the current selected map - holding Shift will perform bigger steps." msgstr "" #: ../../manual/worlds.rst:98 msgid "Saving World files" msgstr "" #: ../../manual/worlds.rst:96 msgid "You can save manipulated world files by using the *Map > Save World* menu. Worlds will also automatically be saved if you launch any external tool that has the 'Save Map Before Executing' option enabled." msgstr "" #: ../../manual/worlds.rst:101 msgid "Using Pattern Matching" msgstr "" #: ../../manual/worlds.rst:103 msgid "For projects where the maps follow a certain naming style that allows the location of each map in the world to be derived from the file name, a regular expression can be used in combination with a multiplier and an offset." msgstr "" #: ../../manual/worlds.rst:109 msgid "Currently no interface exists in Tiled to define a world using pattern matching, nor can it be modified. World files with patterns have to be manually edited." msgstr "" #: ../../manual/worlds.rst:113 msgid "Here is an example:" msgstr "" #: ../../manual/worlds.rst:130 msgid "The regular expression is matched on all files that live in the same directory as the world file. It captures two numbers, the first is taken as ``x`` and the second as ``y``. These will then be multiplied by ``multiplierX`` and ``multiplierY`` respectively, and finally ``offsetX`` and ``offsetY`` are added. The offset exists mainly to allow multiple sets of maps in the same world to be positioned relative to each other. The final value becomes the position (in pixels) of each map." msgstr "" #: ../../manual/worlds.rst:141 msgid "The island from `Alchemic Cutie `__, using patterns to automatically show each map at the right location." msgstr "" #: ../../manual/worlds.rst:144 msgid "A world definition can use a combination of manually defined maps and patterns." msgstr "" #: ../../manual/worlds.rst:148 msgid "Showing Only Direct Neighbors" msgstr "" #: ../../manual/worlds.rst:150 msgid "Tiled takes great care to only load each map, tileset and image once, but sometimes the world is just too large for it to be loaded completely. Maybe there is not enough memory, or rendering the entire map is too slow." msgstr "" #: ../../manual/worlds.rst:154 msgid "In this case, there is an option to only load the direct neighbors of the current map. Add ``\"onlyShowAdjacentMaps\": true`` to the top-level JSON object." msgstr "" #: ../../manual/worlds.rst:157 msgid "To make this possible, not only the position but also the size of each map needs to be defined. For individual maps, this is done using ``width`` and ``height`` properties. For patterns, the properties are ``mapWidth`` and ``mapHeight``, which default to the defined multipliers for convenience. All values are in pixels." msgstr "" #: ../../manual/worlds.rst:165 msgid "In the future, a property could be added to allow specifying a distance around the current map in which other maps are loaded." msgstr "" tiled-1.8.2/docs/_build/gettext/reference.pot000066400000000000000000004031321420372404100211570ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2021, Tiled Documentation Writers # This file is distributed under the same license as the Tiled package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Tiled 1.7\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-09-07 13:45+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../../reference/json-map-format.rst:2 msgid "JSON Map Format" msgstr "" #: ../../reference/json-map-format.rst:4 msgid "Tiled can export maps as JSON files. To do so, simply select \"File > Export As\" and select the JSON file type. You can export json from the command line with the ``--export-map`` option." msgstr "" #: ../../reference/json-map-format.rst:8 msgid "The fields found in the JSON format differ slightly from those in the :doc:`tmx-map-format`, but the meanings should remain the same." msgstr "" #: ../../reference/json-map-format.rst:11 msgid "The following fields can be found in a Tiled JSON file:" msgstr "" #: ../../reference/json-map-format.rst:16 msgid "Map" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "Field" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "Type" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "Description" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "backgroundcolor" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "string" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "Hex-formatted color (#RRGGBB or #AARRGGBB) (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "compressionlevel" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "int" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The compression level to use for tile layer data (defaults to -1, which means to use the algorithm default)" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "height" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Number of tile rows" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "hexsidelength" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Length of the side of a hex tile in pixels (hexagonal maps only)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "infinite" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "bool" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether the map has infinite dimensions" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "layers" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "array" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Layers `" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "nextlayerid" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Auto-increments for each layer" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "nextobjectid" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Auto-increments for each placed object" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "orientation" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``orthogonal``, ``isometric``, ``staggered`` or ``hexagonal``" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "properties" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Properties `" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "renderorder" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``right-down`` (the default), ``right-up``, ``left-down`` or ``left-up`` (currently only supported for orthogonal maps)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "staggeraxis" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``x`` or ``y`` (staggered / hexagonal maps only)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "staggerindex" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``odd`` or ``even`` (staggered / hexagonal maps only)" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "tiledversion" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "The Tiled version used to save the file" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "tileheight" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Map grid height" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "tilesets" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Tilesets `" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "tilewidth" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Map grid width" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "type" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``map`` (since 1.0)" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "version" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "The JSON format version (previously a number, saved as string since 1.6)" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "width" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Number of tile columns" msgstr "" #: ../../reference/json-map-format.rst:44 msgid "Map Example" msgstr "" #: ../../reference/json-map-format.rst:77 msgid "Layer" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "chunks" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`chunks ` (optional). ``tilelayer`` only." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "compression" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``zlib``, ``gzip``, ``zstd`` (since Tiled 1.3) or empty (default). ``tilelayer`` only." msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "data" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "array or string" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of ``unsigned int`` (GIDs) or base64-encoded data. ``tilelayer`` only." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "draworder" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``topdown`` (default) or ``index``. ``objectgroup`` only." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "encoding" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``csv`` (default) or ``base64``. ``tilelayer`` only." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Row count. Same as map height for fixed-size maps." msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "id" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Incremental ID - unique across all layers" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "image" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Image used by this layer. ``imagelayer`` only." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`layers `. ``group`` only." msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "name" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Name assigned to this layer" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "objects" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`objects `. ``objectgroup`` only." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "offsetx" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "double" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Horizontal layer offset in pixels (default: 0)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "offsety" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Vertical layer offset in pixels (default: 0)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "opacity" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Value between 0 and 1" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "parallaxx" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Horizontal :ref:`parallax factor ` for this layer (default: 1). (since Tiled 1.5)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "parallaxy" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Vertical :ref:`parallax factor ` for this layer (default: 1). (since Tiled 1.5)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "startx" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "X coordinate where layer content starts (for infinite maps)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "starty" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Y coordinate where layer content starts (for infinite maps)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "tintcolor" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Hex-formatted :ref:`tint color ` (#RRGGBB or #AARRGGBB) that is multiplied with any graphics drawn by this layer or any child layers (optional)." msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "transparentcolor" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Hex-formatted color (#RRGGBB) (optional). ``imagelayer`` only." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``tilelayer``, ``objectgroup``, ``imagelayer`` or ``group``" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "visible" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether layer is shown or hidden in editor" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Column count. Same as map width for fixed-size maps." msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "x" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Horizontal layer offset in tiles. Always 0." msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "y" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Vertical layer offset in tiles. Always 0." msgstr "" #: ../../reference/json-map-format.rst:111 msgid "Tile Layer Example" msgstr "" #: ../../reference/json-map-format.rst:134 msgid "Object Layer Example" msgstr "" #: ../../reference/json-map-format.rst:160 msgid "Chunk" msgstr "" #: ../../reference/json-map-format.rst:162 msgid "Chunks are used to store the tile layer data for :doc:`infinite maps `." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of ``unsigned int`` (GIDs) or base64-encoded data" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Height in tiles" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Width in tiles" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "X coordinate in tiles" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Y coordinate in tiles" msgstr "" #: ../../reference/json-map-format.rst:176 msgid "Chunk Example" msgstr "" #: ../../reference/json-map-format.rst:191 msgid "Object" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "ellipse" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Used to mark an object as an ellipse" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "gid" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Global tile ID, only if object represents a tile" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Height in pixels." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Incremental ID, unique across all objects" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "String assigned to name field in editor" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "point" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Used to mark an object as a point" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "polygon" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Points `, in case the object is a polygon" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "polyline" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Points `, in case the object is a polyline" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "rotation" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Angle in degrees clockwise" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "template" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Reference to a template file, in case object is a :doc:`template instance `" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "text" msgstr "" #: ../../reference/json-map-format.rst:1 msgid ":ref:`json-object-text`" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Only used for text objects" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "String assigned to type field in editor" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether object is shown in editor." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Width in pixels." msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "X coordinate in pixels" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "Y coordinate in pixels" msgstr "" #: ../../reference/json-map-format.rst:216 msgid "Object Example" msgstr "" #: ../../reference/json-map-format.rst:240 msgid "Ellipse Example" msgstr "" #: ../../reference/json-map-format.rst:258 msgid "Rectangle Example" msgstr "" #: ../../reference/json-map-format.rst:275 msgid "Point Example" msgstr "" #: ../../reference/json-map-format.rst:293 msgid "Polygon Example" msgstr "" #: ../../reference/json-map-format.rst:331 msgid "Polyline Example" msgstr "" #: ../../reference/json-map-format.rst:373 msgid "Text Example" msgstr "" #: ../../reference/json-map-format.rst:397 #: ../../reference/json-map-format.rst:1 msgid "Text" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "bold" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether to use a bold font (default: ``false``)" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "color" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Hex-formatted color (#RRGGBB or #AARRGGBB) (default: ``#000000``)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "fontfamily" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Font family (default: ``sans-serif``)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "halign" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Horizontal alignment (``center``, ``right``, ``justify`` or ``left`` (default))" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "italic" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether to use an italic font (default: ``false``)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "kerning" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether to use kerning when placing characters (default: ``true``)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "pixelsize" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Pixel size of font (default: 16)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "strikeout" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether to strike out the text (default: ``false``)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "underline" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether to underline the text (default: ``false``)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "valign" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Vertical alignment (``center``, ``bottom`` or ``top`` (default))" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "wrap" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether the text is wrapped within the object bounds (default: ``false``)" msgstr "" #: ../../reference/json-map-format.rst:420 msgid "Tileset" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "columns" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The number of tile columns in the tileset" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "firstgid" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "GID corresponding to the first tile in the set" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "grid" msgstr "" #: ../../reference/json-map-format.rst:1 msgid ":ref:`json-tileset-grid`" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "(optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Image used for tiles in this set" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "imageheight" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Height of source image in pixels" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "imagewidth" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Width of source image in pixels" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "margin" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Buffer between image edge and first tile (pixels)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Name given to this tileset" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "objectalignment" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Alignment to use for tile objects (``unspecified`` (default), ``topleft``, ``top``, ``topright``, ``left``, ``center``, ``right``, ``bottomleft``, ``bottom`` or ``bottomright``) (since 1.4)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "source" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The external file that contains this tilesets data" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "spacing" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Spacing between adjacent tiles in image (pixels)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "terrains" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Terrains ` (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "tilecount" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The number of tiles in this tileset" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Maximum height of tiles in this set" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "tileoffset" msgstr "" #: ../../reference/json-map-format.rst:1 msgid ":ref:`json-tileset-tileoffset`" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "tiles" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Tiles ` (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Maximum width of tiles in this set" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "transformations" msgstr "" #: ../../reference/json-map-format.rst:1 msgid ":ref:`json-tileset-transformations`" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Allowed transformations (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Hex-formatted color (#RRGGBB) (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``tileset`` (for tileset files, since 1.0)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "wangsets" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Wang sets ` (since 1.1.5)" msgstr "" #: ../../reference/json-map-format.rst:452 msgid "Each tileset has a ``firstgid`` (first global ID) property which tells you the global ID of its first tile (the one with local tile ID 0). This allows you to map the global IDs back to the right tileset, and then calculate the local tile ID by subtracting the ``firstgid`` from the global tile ID. The first tileset always has a ``firstgid`` value of 1." msgstr "" #: ../../reference/json-map-format.rst:462 msgid "Grid" msgstr "" #: ../../reference/json-map-format.rst:464 msgid "Specifies common grid settings used for tiles in a tileset. See :ref:`tmx-grid` in the TMX Map Format." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Cell height of tile grid" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``orthogonal`` (default) or ``isometric``" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Cell width of tile grid" msgstr "" #: ../../reference/json-map-format.rst:478 msgid "Tile Offset" msgstr "" #: ../../reference/json-map-format.rst:480 msgid "See :ref:`tmx-tileoffset` in the TMX Map Format." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Horizontal offset in pixels" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Vertical offset in pixels (positive is down)" msgstr "" #: ../../reference/json-map-format.rst:492 msgid "Transformations" msgstr "" #: ../../reference/json-map-format.rst:494 msgid "See :ref:`tmx-tileset-transformations` in the TMX Map Format." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "hflip" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Tiles can be flipped horizontally" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "vflip" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Tiles can be flipped vertically" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "rotate" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Tiles can be rotated in 90-degree increments" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "preferuntransformed" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether untransformed tiles remain preferred, otherwise transformed tiles are used to produce more variations" msgstr "" #: ../../reference/json-map-format.rst:506 msgid "Tileset Example" msgstr "" #: ../../reference/json-map-format.rst:533 msgid "Tile (Definition)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "animation" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Frames `" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Local ID of the tile" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Image representing this tile (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Height of the tile image in pixels" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Width of the tile image in pixels" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "objectgroup" msgstr "" #: ../../reference/json-map-format.rst:1 msgid ":ref:`json-layer`" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Layer with type ``objectgroup``, when collision shapes are specified (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "probability" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Percentage chance this tile is chosen when competing with others in the editor (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "terrain" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Index of terrain for each corner of tile (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The type of the tile (optional)" msgstr "" #: ../../reference/json-map-format.rst:550 msgid "A tileset that associates information with each tile, like its image path or terrain type, may include a ``tiles`` array property. Each tile has an ``id`` property, which specifies the local ID within the tileset." msgstr "" #: ../../reference/json-map-format.rst:554 msgid "For the terrain information, each value is a length-4 array where each element is the index of a :ref:`terrain ` on one corner of the tile. The order of indices is: top-left, top-right, bottom-left, bottom-right." msgstr "" #: ../../reference/json-map-format.rst:559 #: ../../reference/json-map-format.rst:621 #: ../../reference/json-map-format.rst:670 #: ../../reference/json-map-format.rst:693 msgid "Example:" msgstr "" #: ../../reference/json-map-format.rst:599 msgid "Frame" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "duration" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Frame duration in milliseconds" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "tileid" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Local tile ID representing this frame" msgstr "" #: ../../reference/json-map-format.rst:611 msgid "Terrain" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Name of terrain" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "tile" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Local ID of tile representing terrain" msgstr "" #: ../../reference/json-map-format.rst:642 msgid "Wang Set" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "colors" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Wang colors ` (since 1.5)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Name of the Wang set" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Local ID of tile representing the Wang set" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``corner``, ``edge`` or ``mixed`` (since 1.5)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "wangtiles" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Wang tiles `" msgstr "" #: ../../reference/json-map-format.rst:658 msgid "Wang Color" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Hex-formatted color (#RRGGBB or #AARRGGBB)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Name of the Wang color" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Probability used when randomizing" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of :ref:`Properties ` (since 1.5)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Local ID of tile representing the Wang color" msgstr "" #: ../../reference/json-map-format.rst:684 msgid "Wang Tile" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Local ID of tile" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "wangid" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Array of Wang color indexes (``uchar[8]``)" msgstr "" #: ../../reference/json-map-format.rst:705 msgid "Object Template" msgstr "" #: ../../reference/json-map-format.rst:707 msgid "An object template is written to its own file and referenced by any instances of that template." msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``template``" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "tileset" msgstr "" #: ../../reference/json-map-format.rst:1 msgid ":ref:`json-tileset`" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "External tileset used by the template (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "object" msgstr "" #: ../../reference/json-map-format.rst:1 msgid ":ref:`json-object`" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The object instantiated by this template" msgstr "" #: ../../reference/json-map-format.rst:721 msgid "Property" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Name of the property" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Type of the property (``string`` (default), ``int``, ``float``, ``bool``, ``color`` or ``file`` (since 0.16, with ``color`` and ``file`` added in 0.17))" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:1 msgid "value" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Value of the property" msgstr "" #: ../../reference/json-map-format.rst:734 msgid "Point" msgstr "" #: ../../reference/json-map-format.rst:736 msgid "A point on a polygon or a polyline, relative to the position of the object." msgstr "" #: ../../reference/json-map-format.rst:746 msgid "Changelog" msgstr "" #: ../../reference/json-map-format.rst:749 #: ../../reference/tmx-changelog.rst:8 msgid "Tiled 1.7" msgstr "" #: ../../reference/json-map-format.rst:751 msgid "The :ref:`json-tile` objects in a tileset are no longer always saved with increasing IDs. They are now saved in the display order, which can be changed in Tiled." msgstr "" #: ../../reference/json-map-format.rst:756 msgid "Tiled 1.6" msgstr "" #: ../../reference/json-map-format.rst:758 msgid "The ``version`` property is now written as a string (\"1.6\") instead of a number (1.5)." msgstr "" #: ../../reference/json-map-format.rst:762 #: ../../reference/tmx-changelog.rst:15 msgid "Tiled 1.5" msgstr "" #: ../../reference/json-map-format.rst:764 msgid "Unified ``cornercolors`` and ``edgecolors`` properties of :ref:`json-wangset` as the new ``colors`` property and added a ``type`` field." msgstr "" #: ../../reference/json-map-format.rst:767 msgid ":ref:`json-wangcolor` can now store ``properties``." msgstr "" #: ../../reference/json-map-format.rst:769 msgid "Added ``transformations`` property to :ref:`json-tileset` (see :ref:`json-tileset-transformations`)." msgstr "" #: ../../reference/json-map-format.rst:772 msgid "Removed ``dflip``, ``hflip`` and ``vflip`` properties from :ref:`json-wangtile` (no longer supported)." msgstr "" #: ../../reference/json-map-format.rst:776 #: ../../reference/tmx-changelog.rst:36 msgid "Tiled 1.4" msgstr "" #: ../../reference/json-map-format.rst:778 msgid "Added ``objectalignment`` to the :ref:`json-tileset` object." msgstr "" #: ../../reference/json-map-format.rst:779 msgid "Added ``tintcolor`` to the :ref:`json-layer` object." msgstr "" #: ../../reference/json-map-format.rst:782 #: ../../reference/tmx-changelog.rst:47 msgid "Tiled 1.3" msgstr "" #: ../../reference/json-map-format.rst:784 msgid "Added an ``editorsettings`` property to top-level :ref:`json-map` and :ref:`json-tileset` objects, which is used to store editor specific settings that are generally not relevant when loading a map or tileset." msgstr "" #: ../../reference/json-map-format.rst:788 msgid "Added support for Zstandard compression for tile layer data (``\"compression\": \"zstd\"`` on :ref:`tile layer objects `)." msgstr "" #: ../../reference/json-map-format.rst:791 msgid "Added the ``compressionlevel`` property to the :ref:`json-map` object, which stores the compression level to use for compressed tile layer data." msgstr "" #: ../../reference/json-map-format.rst:795 #: ../../reference/tmx-changelog.rst:65 msgid "Tiled 1.2" msgstr "" #: ../../reference/json-map-format.rst:797 msgid "Added ``nextlayerid`` to the :ref:`json-map` object." msgstr "" #: ../../reference/json-map-format.rst:799 msgid "Added ``id`` to the :ref:`json-layer` object." msgstr "" #: ../../reference/json-map-format.rst:801 msgid "The tiles in a :ref:`json-tileset` are now stored as an array instead of an object. Previously the tile IDs were stored as string keys of the \"tiles\" object, now they are stored as ``id`` property of each :ref:`Tile ` object." msgstr "" #: ../../reference/json-map-format.rst:806 msgid "Custom tile properties are now stored within each :ref:`Tile ` instead of being included as ``tileproperties`` in the :ref:`json-tileset` object." msgstr "" #: ../../reference/json-map-format.rst:810 msgid "Custom properties are now stored in an array instead of an object where the property names were the keys. Each property is now an object that stores the name, type and value of the property. The separate ``propertytypes`` and ``tilepropertytypes`` properties have been removed." msgstr "" #: ../../reference/json-map-format.rst:817 #: ../../reference/tmx-changelog.rst:76 msgid "Tiled 1.1" msgstr "" #: ../../reference/json-map-format.rst:819 msgid "Added a :ref:`chunked data format `, currently used for :doc:`infinite maps `." msgstr "" #: ../../reference/json-map-format.rst:822 msgid ":doc:`Templates ` were added. Templates can be stored as JSON files with an :ref:`json-objecttemplate` object." msgstr "" #: ../../reference/json-map-format.rst:825 msgid ":ref:`Tilesets ` can now contain :doc:`Terrain Sets `. They are saved in the new :ref:`json-wangset` object (since Tiled 1.1.5)." msgstr "" #: ../../reference/scripting.rst:8 msgid "Scripting" msgstr "" #: ../../reference/scripting.rst:11 msgid "Introduction" msgstr "" #: ../../reference/scripting.rst:13 msgid "Tiled can be extended with the use of JavaScript. See the `Tiled Scripting API`_ for a reference of all available functionality." msgstr "" #: ../../reference/scripting.rst:16 msgid "TypeScript definitions of the API are available as the `@mapeditor/tiled-api`_ NPM package, which can provide auto-completion in your editor. The API reference is generated based on these definitions." msgstr "" #: ../../reference/scripting.rst:20 msgid "On startup, Tiled will execute any script files present in :ref:`extension folders `. In addition it is possible to run scripts directly from :ref:`the console `. All scripts share a single JavaScript context." msgstr "" #: ../../reference/scripting.rst:27 msgid "A few example scripts and links to existing Tiled extensions are provided at the Tiled Extensions repository: https://github.com/mapeditor/tiled-extensions" msgstr "" #: ../../reference/scripting.rst:32 msgid "The full scripting API and support for ECMAScript 7 features are only available for Tiled builds based on Qt 5.12 or later. This currently excludes the Windows XP and snap releases." msgstr "" #: ../../reference/scripting.rst:39 msgid "Scripted Extensions" msgstr "" #: ../../reference/scripting.rst:41 msgid "Extensions can be placed in a system-specific or :doc:`project-specific ` location." msgstr "" #: ../../reference/scripting.rst:44 msgid "The system-specific folder can be opened from the Plugins tab in the :doc:`Preferences dialog `. The usual location on each supported platform is as follows:" msgstr "" #: ../../reference/scripting.rst:49 msgid "**Windows**" msgstr "" #: ../../reference/scripting.rst:0 msgid ":file:`C:/Users//AppData/Local/Tiled/extensions/`" msgstr "" #: ../../reference/scripting.rst:51 msgid "**macOS**" msgstr "" #: ../../reference/scripting.rst:0 msgid ":file:`~/Library/Preferences/Tiled/extensions/`" msgstr "" #: ../../reference/scripting.rst:53 msgid "**Linux**" msgstr "" #: ../../reference/scripting.rst:0 msgid ":file:`~/.config/tiled/extensions/`" msgstr "" #: ../../reference/scripting.rst:56 msgid "The project-specific folder defaults to \"extensions\", relative to the directory of the ``.tiled-project`` file, but this can be changed in the *Project Properties*." msgstr "" #: ../../reference/scripting.rst:62 msgid "Since Tiled 1.7, project-specific extensions are only enabled by default for projects you created. When opening any other project, a popup will notify you when the project has a scripted extensions directory, allowing you to enable extensions for that project." msgstr "" #: ../../reference/scripting.rst:67 msgid "Always be careful when enabling extensions on projects you haven't created, since extensions have access to your files and can execute processes." msgstr "" #: ../../reference/scripting.rst:71 msgid "An extension can be placed either directly in an extensions directory, or in a sub-directory. All scripts files found in these directories are executed on startup." msgstr "" #: ../../reference/scripting.rst:75 msgid "When any loaded script is changed or when any files are added/removed from the extensions directory, the script engine is automatically reinstantiated and the scripts are reloaded. This way there is no need to restart Tiled when installing extensions. It also makes it quick to iterate on a script until it works as intended." msgstr "" #: ../../reference/scripting.rst:81 msgid "Apart from scripts, extensions can include images that can be used as the icon for scripted actions or tools." msgstr "" #: ../../reference/scripting.rst:87 msgid "Console View" msgstr "" #: ../../reference/scripting.rst:89 msgid "In the Console view (*View > Views and Toolbars > Console*) you will find a text entry where you can write or paste scripts to evaluate them." msgstr "" #: ../../reference/scripting.rst:92 msgid "You can use the Up/Down keys to navigate through previously entered script expressions." msgstr "" #: ../../reference/scripting.rst:96 msgid "API Reference" msgstr "" #: ../../reference/scripting.rst:98 msgid "See the `Tiled Scripting API`_." msgstr "" #: ../../reference/scripting.rst:100 msgid "The following global variable is currently not documented in the generated documentation, since it conflicts with nodejs types:" msgstr "" #: ../../reference/scripting.rst:106 msgid "__filename" msgstr "" #: ../../reference/scripting.rst:104 msgid "The file path of the current file being evaluated. Only available during initial evaluation of the file and not when later functions in that file get called. If you need it there, copy the value to local scope." msgstr "" #: ../../reference/support-for-tmx-maps.rst:2 msgid "Libraries and Frameworks" msgstr "" #: ../../reference/support-for-tmx-maps.rst:4 msgid "There are many libraries available for reading and/or writing Tiled maps (either stored in the :doc:`tmx-map-format` or the :doc:`json-map-format`) as well as many development frameworks that include support for Tiled maps. This list is divided into two sections:" msgstr "" #: ../../reference/support-for-tmx-maps.rst:9 msgid "`Support by Language <#support-by-language>`__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:10 msgid "`Support by Framework <#support-by-framework>`__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:12 msgid "The first list is for developers who plan on implementing their own renderer. The second list is for developers already using (or considering) a particular game engine / graphics library who would rather pass on having to write their own tile map renderer." msgstr "" #: ../../reference/support-for-tmx-maps.rst:19 msgid "For updates to this page please open a pull request or issue `on GitHub `__, thanks!" msgstr "" #: ../../reference/support-for-tmx-maps.rst:23 msgid "Support by Language" msgstr "" #: ../../reference/support-for-tmx-maps.rst:25 msgid "These libraries typically include only a TMX parser, but no rendering support. They can be used universally and should not require a specific game engine or graphics library." msgstr "" #: ../../reference/support-for-tmx-maps.rst:30 msgid "C" msgstr "" #: ../../reference/support-for-tmx-maps.rst:32 msgid "`cute tiled `__ - JSON map loader with examples (zlib/Public Domain)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:33 msgid "`TMX `__ - TMX map loader with Allegro5 and SDL2 examples (BSD)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:37 msgid "C++" msgstr "" #: ../../reference/support-for-tmx-maps.rst:39 msgid "`C++/TinyXML based tmxparser `__ (BSD)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:40 msgid "C++/Qt based libtiled, used by Tiled itself and included at `src/libtiled `__ (BSD)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:43 msgid "`C++11x/TinyXml2 libtmx-parser `__ by halsafar. (zlib/tinyxml2)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:46 msgid "`C++11/TinyXml2 libtmx `__ by jube, for reading only (ISC licence). See `documentation `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:49 msgid "`TMXParser `__ General \\*.tmx tileset data loader. Intended to be used with TSXParser for external tileset loading. (No internal tileset support)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:52 msgid "`TSXParser `__ General \\*.tsx tileset data loader. Intended to be used with TMXParser." msgstr "" #: ../../reference/support-for-tmx-maps.rst:55 msgid "`TMXLoader `__ based on `RapidXml `__. Limited functionality (check the `website `__ for details)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:60 msgid "`tmxlite `__ C++14 map parser with compressed map support but no external linking required. Includes examples for SFML and SDL2 rendering. Currently has full tmx support up to 0.16. (Zlib/libpng)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:64 msgid "`Tileson `__ - A Tiled JSON parser for modern C++ (C++17) by Robin Berg Pettersen (BSD)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:67 msgid "C#/.NET" msgstr "" #: ../../reference/support-for-tmx-maps.rst:69 msgid "`TiledCS `__: A dotnet library for loading Tiled tilesets and maps (TMX/TSX or JSON)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:70 msgid "`MonoGame.Extended `__ has a Tiled map loader and renderer that works with MonoGame on all platforms that support portable class libraries." msgstr "" #: ../../reference/support-for-tmx-maps.rst:73 msgid "The following projects appear to be no longer maintained, but might still be useful: `TiledSharp `__, `NTiled `__, `tmx-mapper-pcl `__, `tiled-xna `__ and `TmxCSharp `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:82 msgid "Clojure" msgstr "" #: ../../reference/support-for-tmx-maps.rst:83 msgid "`tile-soup `__: Parses and validates a TMX file into a map. Automatically decodes Base64 and CSV formatted data and coerces numbers when necessary. Works on both the JVM and in browsers via ClojureScript." msgstr "" #: ../../reference/support-for-tmx-maps.rst:86 msgid "D" msgstr "" #: ../../reference/support-for-tmx-maps.rst:88 msgid "`tiledMap.d `__ simple single-layer and single-tileset example to load a map and its tileset in `D language `__. It also contains basic rendering logic using `DSFML `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:92 msgid "`dtiled `__ can load JSON-formatted Tiled maps. It also provides general tilemap-related functions and algorithms." msgstr "" #: ../../reference/support-for-tmx-maps.rst:96 msgid "Go" msgstr "" #: ../../reference/support-for-tmx-maps.rst:98 msgid "`github.com/lafriks/go-tiled `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:99 msgid "`github.com/salviati/go-tmx/tmx `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:102 msgid "Haskell" msgstr "" #: ../../reference/support-for-tmx-maps.rst:104 msgid "`htiled `__ (TMX) by `Christian Rødli Amble `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:106 msgid "`aeson-tiled `__ (JSON) by `Schell Scivally `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:109 msgid "Java" msgstr "" #: ../../reference/support-for-tmx-maps.rst:111 msgid "A library for loading TMX files is included with Tiled at `util/java/libtiled-java `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:113 msgid "`TiledReader `__ is a simple TMX reader that conveys the information in Tiled files via a hand-crafted class structure, but does not load image data." msgstr "" #: ../../reference/support-for-tmx-maps.rst:114 msgid "Android-Specific:" msgstr "" #: ../../reference/support-for-tmx-maps.rst:116 msgid "`AndroidTMXLoader `__ loads TMX data into an object and renders to an Android Bitmap (limited functionality)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:119 msgid "`libtiled-java port `__ is a port of the libtiled-java to be used on Android phones." msgstr "" #: ../../reference/support-for-tmx-maps.rst:124 msgid "PHP" msgstr "" #: ../../reference/support-for-tmx-maps.rst:126 msgid "`PHP TMX Viewer `__ by sebbu : render the map as an image (allow some modifications as well)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:130 msgid "Pike" msgstr "" #: ../../reference/support-for-tmx-maps.rst:132 msgid "`TMX parser `__: a simple loader for TMX maps (CSV format only)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:136 msgid "Processing" msgstr "" #: ../../reference/support-for-tmx-maps.rst:138 msgid "`linux-man/ptmx `__: Add Tiled maps to your Processing sketch." msgstr "" #: ../../reference/support-for-tmx-maps.rst:142 msgid "Python" msgstr "" #: ../../reference/support-for-tmx-maps.rst:144 msgid "`pytiled-parser `__: Python parser for JSON maps(No support for TMX format as of v1.0.0)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:146 msgid "`Arcade `__: 2D game library that uses pytiled-parser for easy loading of JSON maps into a game.(No support for TMX format as of v2.6.0) `Arcade Tiled Examples `_" msgstr "" #: ../../reference/support-for-tmx-maps.rst:148 msgid "`pytmxlib `__: library for programmatic manipulation of TMX maps" msgstr "" #: ../../reference/support-for-tmx-maps.rst:150 msgid "`python-tmx `__: a simple library for reading and writing TMX files." msgstr "" #: ../../reference/support-for-tmx-maps.rst:154 msgid "Ruby" msgstr "" #: ../../reference/support-for-tmx-maps.rst:156 msgid "`tmx gem `__ by erisdiscord" msgstr "" #: ../../reference/support-for-tmx-maps.rst:159 msgid "Vala" msgstr "" #: ../../reference/support-for-tmx-maps.rst:161 msgid "`librpg `__ A library to load and handle spritesets (own format) and orthogonal TMX maps." msgstr "" #: ../../reference/support-for-tmx-maps.rst:165 msgid "Support by Framework" msgstr "" #: ../../reference/support-for-tmx-maps.rst:167 msgid "Following entries are integrated solutions for specific game engines. They are typically of little to no use if you're not using said game engine." msgstr "" #: ../../reference/support-for-tmx-maps.rst:172 msgid "AndEngine" msgstr "" #: ../../reference/support-for-tmx-maps.rst:174 msgid "`AndEngine `__ by Nicolas Gramlich supports `rendering TMX maps `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:179 msgid "Allegro" msgstr "" #: ../../reference/support-for-tmx-maps.rst:181 msgid "`allegro\\_tiled `__ integrates Tiled support with `Allegro 5 `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:186 msgid "Castle Game Engine (Object Pascal)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:188 msgid "`Castle Game Engine `__ has native support for Tiled maps (see the `CastleTiledMap unit `__)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:191 msgid "Cell2D" msgstr "" #: ../../reference/support-for-tmx-maps.rst:193 msgid "The Java library `Cell2D `__ supports Tiled maps via a pipeline that starts with `TiledReader `__, but currently has more built-in support for orthogonal maps than for other orientations." msgstr "" #: ../../reference/support-for-tmx-maps.rst:196 msgid "cocos2d" msgstr "" #: ../../reference/support-for-tmx-maps.rst:198 msgid "`cocos2d (Python) `__ supports loading `Tiled maps `__ through its ``cocos.tiles`` module." msgstr "" #: ../../reference/support-for-tmx-maps.rst:202 msgid "`cocos2d-x (C++) `__ supports loading TMX maps through the `CCTMXTiledMap `__ class." msgstr "" #: ../../reference/support-for-tmx-maps.rst:206 msgid "`cocos2d-objc (Objective-C, Swift) `__ (previously known as: cocos2d-iphone, cocos2d-swift, cocos2d-spritebuilder) supports loading TMX maps through `CCTiledMap `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:210 msgid "`TilemapKit `__ is a tilemapping framework for Cocos2D. It supports all TMX tilemap types, including staggered iso and all hex variations. No longer in development." msgstr "" #: ../../reference/support-for-tmx-maps.rst:215 msgid "Construct 2 - Scirra" msgstr "" #: ../../reference/support-for-tmx-maps.rst:217 msgid "`Construct 2 `__, since the Beta Release 149, officially supports TMX maps, and importing it by simple dragging the file inside the editor. `Official Note `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:223 msgid "Flixel" msgstr "" #: ../../reference/support-for-tmx-maps.rst:225 msgid "Lithander demonstrated his `Flash TMX parser combined with Flixel rendering `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:229 msgid "Game Maker" msgstr "" #: ../../reference/support-for-tmx-maps.rst:231 msgid "Tiled ships with plugins for exporting to :ref:`GameMaker: Studio 1.4 ` and :ref:`GameMaker Studio 2.3 ` room files." msgstr "" #: ../../reference/support-for-tmx-maps.rst:232 msgid "`Tiled2GM Converter `__ by Dmi7ry" msgstr "" #: ../../reference/support-for-tmx-maps.rst:235 msgid "Godot" msgstr "" #: ../../reference/support-for-tmx-maps.rst:237 msgid "`Tiled Map Importer `__ imports each map as Godot scene which can be instanced or inherited (`forum announcement `__)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:238 msgid "`Tiled To Godot Export `__ is a Tiled :doc:`JavaScript extension ` for exporting Tilemaps and Tilesets in Godot 3.2 format (`forum announcement `__)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:241 msgid "Grid Engine" msgstr "" #: ../../reference/support-for-tmx-maps.rst:243 msgid "Planimeter's `Grid Engine `__ supports Tiled Lua-exported maps." msgstr "" #: ../../reference/support-for-tmx-maps.rst:246 msgid "Haxe" msgstr "" #: ../../reference/support-for-tmx-maps.rst:248 msgid "`HaxePunk `__ Tiled Loader for HaxePunk" msgstr "" #: ../../reference/support-for-tmx-maps.rst:250 msgid "`HaxeFlixel `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:251 msgid "`OpenFL `__ \"openfl-tiled\" is a library, which gives OpenFL developers the ability to use the Tiled Map Editor." msgstr "" #: ../../reference/support-for-tmx-maps.rst:254 msgid "`OpenFL + Tiled + Flixel `__ Experimental glue to use \"openfl-tiled\" with HaxeFlixel" msgstr "" #: ../../reference/support-for-tmx-maps.rst:259 msgid "HTML5 (multiple engines)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:261 msgid "`Canvas Engine `__ A framework to create video games in HTML5 Canvas" msgstr "" #: ../../reference/support-for-tmx-maps.rst:263 msgid "`chem-tmx `__ Plugin for `chem `__ game engine." msgstr "" #: ../../reference/support-for-tmx-maps.rst:265 msgid "`chesterGL `__ A simple WebGL/canvas game library" msgstr "" #: ../../reference/support-for-tmx-maps.rst:267 msgid "`Crafty `__ JavaScript HTML5 Game Engine; supports loading Tiled maps through an external component `TiledMapBuilder `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:270 msgid "`GameJs `__ JavaScript library for game programming; a thin wrapper to draw on HTML5 canvas and other useful modules for game development" msgstr "" #: ../../reference/support-for-tmx-maps.rst:273 msgid "`KineticJs-Ext `__ A multi-canvas based game rendering library" msgstr "" #: ../../reference/support-for-tmx-maps.rst:275 msgid "`melonJS `__ A lightweight HTML5 game engine" msgstr "" #: ../../reference/support-for-tmx-maps.rst:276 msgid "`Panda 2 `__, a HTML5 Game Development Platform for Mac, Windows and Linux. Has `a plugin for rendering Tiled `__ maps, both orthogonal and isometric." msgstr "" #: ../../reference/support-for-tmx-maps.rst:277 msgid "`Phaser `__ A fast, free and fun open source framework supporting both JavaScript and TypeScript (`Tiled tutorial `__)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:280 msgid "`linux-man/p5.tiledmap `__ adds Tiled maps to `p5.js `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:282 msgid "`Platypus Engine `__ A robust orthogonal tile game engine with game entity library." msgstr "" #: ../../reference/support-for-tmx-maps.rst:284 msgid "`sprite.js `__ A game framework for image sprites." msgstr "" #: ../../reference/support-for-tmx-maps.rst:286 msgid "`TMXjs `__ A JavaScript, jQuery and RequireJS-based TMX (Tile Map XML) parser and renderer." msgstr "" #: ../../reference/support-for-tmx-maps.rst:288 msgid "`glazeJS `__ A high performance 2D game engine built in Typescript. It supports the TMX format, rendering tile layers on the GPU via WebGL (`demo `__)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:293 msgid "indielib-crossplatform" msgstr "" #: ../../reference/support-for-tmx-maps.rst:295 msgid "`indielib cross-platform `__ supports loading TMX maps through the `C++/TinyXML based tmx-parser `__ by KonoM (BSD)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:300 msgid "LibGDX" msgstr "" #: ../../reference/support-for-tmx-maps.rst:302 msgid "`libgdx `__, a Java-based Android/desktop/HTML5 game library, `provides `__ a packer, loader and renderer for TMX maps" msgstr "" #: ../../reference/support-for-tmx-maps.rst:308 msgid "LITIengine" msgstr "" #: ../../reference/support-for-tmx-maps.rst:310 msgid "`LITIengine `__ is a 2D Java Game Engine that supports loading, saving and rendering maps in the .tmx format." msgstr "" #: ../../reference/support-for-tmx-maps.rst:314 msgid "LÖVE" msgstr "" #: ../../reference/support-for-tmx-maps.rst:316 msgid "`Simple Tiled Implementation `__ Lua loader for the LÖVE (Love2d) game framework." msgstr "" #: ../../reference/support-for-tmx-maps.rst:321 msgid "MOAI SDK" msgstr "" #: ../../reference/support-for-tmx-maps.rst:323 msgid "`Hanappe `__ Framework for MOAI SDK." msgstr "" #: ../../reference/support-for-tmx-maps.rst:325 msgid "`Rapanui `__ Framework for MOAI SDK." msgstr "" #: ../../reference/support-for-tmx-maps.rst:329 msgid "Monkey X" msgstr "" #: ../../reference/support-for-tmx-maps.rst:331 msgid "`bit.tiled `__ Loads TMX file as objects. Aims to be fully compatible with native TMX files." msgstr "" #: ../../reference/support-for-tmx-maps.rst:333 msgid "`Diddy `__ is an extensive framework for Monkey X that contains a module for loading and rendering TMX files. Supports orthogonal and isometric maps as both CSV and Base64 (uncompressed)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:339 msgid "Node.js" msgstr "" #: ../../reference/support-for-tmx-maps.rst:341 msgid "`node-tmx-parser `__ - loads the TMX file into a JavaScript object" msgstr "" #: ../../reference/support-for-tmx-maps.rst:345 msgid "Oak Nut Engine (onut)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:347 msgid "`Oak Nut Engine `__ supports Tiled maps through Javascript and C++. (see TiledMap `Javascript `__ or `C++ `__ samples)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:351 msgid "Orx Portable Game Engine" msgstr "" #: ../../reference/support-for-tmx-maps.rst:353 msgid "`TMX to ORX Converter `__ Tutorial and converter download for Orx." msgstr "" #: ../../reference/support-for-tmx-maps.rst:358 msgid "Pygame" msgstr "" #: ../../reference/support-for-tmx-maps.rst:360 msgid "`Pygame map loader `__ by dr0id" msgstr "" #: ../../reference/support-for-tmx-maps.rst:361 #: ../../reference/support-for-tmx-maps.rst:377 #: ../../reference/support-for-tmx-maps.rst:383 msgid "`PyTMX `__ by Leif Theden (bitcraft)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:363 msgid "`tmx.py `__ by Richard Jones, from his `2012 PyCon 'Introduction to Game Development' talk `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:367 msgid "`TMX `__, a fork of tmx.py and a port to Python3. A demo called pylletTown can be found `here `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:372 msgid "Pyglet" msgstr "" #: ../../reference/support-for-tmx-maps.rst:374 msgid "`JSON map loader/renderer for pyglet `__ by Juan J. Martínez (reidrac)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:381 msgid "PySDL2" msgstr "" #: ../../reference/support-for-tmx-maps.rst:387 msgid "RPG Maker MV" msgstr "" #: ../../reference/support-for-tmx-maps.rst:389 msgid "`Tiled Plugin for RPG Maker MV `__ by `Dr.Yami `__ & Archeia, from `RPG Maker Web `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:395 msgid "SDL" msgstr "" #: ../../reference/support-for-tmx-maps.rst:397 msgid "`C++/TinyXML/SDL based loader `__ example by Rohin Knight (limited functionality)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:402 msgid "SFML" msgstr "" #: ../../reference/support-for-tmx-maps.rst:404 msgid "`STP `__ (SFML TMX Parser) by edoren" msgstr "" #: ../../reference/support-for-tmx-maps.rst:405 msgid "`C++/SFML Tiled map loader `__ by fallahn. (Zlib/libpng)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:408 msgid "`C++/SfTileEngine `__ by Tresky (currently limited functionality)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:412 msgid "Slick2D" msgstr "" #: ../../reference/support-for-tmx-maps.rst:414 msgid "`Slick2D `__ supports loading TMX maps through `TiledMap `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:419 msgid "Solar2D (formerly Corona SDK)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:421 msgid "`ponytiled `__ is a simple Tiled Map Loader for Solar2D (`forum announcement `__)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:424 msgid "`Dusk Engine `__ is a fully featured Tiled map game engine for Solar2D (no longer maintained, but may still be useful)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:426 msgid "`Berry `__ is a simple Tiled Map Loader for Solar2D." msgstr "" #: ../../reference/support-for-tmx-maps.rst:428 msgid "`Qiso `__ is an isometric engine for Solar2D that supports loading Tiled maps, and also handles things like path-finding for you." msgstr "" #: ../../reference/support-for-tmx-maps.rst:431 msgid "Sprite Kit Framework" msgstr "" #: ../../reference/support-for-tmx-maps.rst:433 msgid "`SKTilemap `__ is built from the ground up in Swift. It's up to date, full of features and easy to integrate into any Sprite Kit project. Supports iOS and OSX." msgstr "" #: ../../reference/support-for-tmx-maps.rst:436 msgid "`SKTiled `__ - A Swift framework for working with Tiled assets in SpriteKit." msgstr "" #: ../../reference/support-for-tmx-maps.rst:438 msgid "`JSTileMap `__ is a lightweight SpriteKit implementation of the TMX format supporting iOS 7 and OS X 10.9 and above." msgstr "" #: ../../reference/support-for-tmx-maps.rst:443 msgid "TERRA Engine (Delphi/Pascal)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:445 msgid "`TERRA Engine `__ supports loading and rendering of TMX maps." msgstr "" #: ../../reference/support-for-tmx-maps.rst:449 msgid "Unity" msgstr "" #: ../../reference/support-for-tmx-maps.rst:451 msgid "`SuperTiled2Unity `__ is a collection of C# Unity scripts that can automatically import Tiled map editor files directly into your Unity projects." msgstr "" #: ../../reference/support-for-tmx-maps.rst:452 msgid "`Tiled TMX Importer `__, imports into Unity 2017.2's new native Tilemap system." msgstr "" #: ../../reference/support-for-tmx-maps.rst:453 msgid "`Tiled to Unity `__ is a 3D pipeline for Tiled maps. It uses prefabs as tiles, and can place decorations dynamically on tiles. Supports multiple layers (including object layers)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:458 msgid "`Tuesday `__: A generic C# serializer and deserializer plus a set of Unity editor scripts that allow you to drag and drop TMX files into your scene, make edits, and save back out as TMX files. MIT license." msgstr "" #: ../../reference/support-for-tmx-maps.rst:462 msgid "`UniTiled `__, a native TMX importer for Unity." msgstr "" #: ../../reference/support-for-tmx-maps.rst:463 msgid "`X-UniTMX `__ supports almost all Tiled 0.11 features. Imports TMX/XML files into Sprite Objects or Meshes." msgstr "" #: ../../reference/support-for-tmx-maps.rst:466 msgid "`Orthello Pro `__ (2D framework) offers `Tiled map support `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:472 msgid "Unreal Engine 4" msgstr "" #: ../../reference/support-for-tmx-maps.rst:474 msgid "`Paper2D `__ provides built-in support for tile maps and tile sets, importing JSON exported from Tiled." msgstr "" #: ../../reference/support-for-tmx-maps.rst:479 msgid "Urho3D" msgstr "" #: ../../reference/support-for-tmx-maps.rst:481 msgid "`Urho3D `__ natively supports loading Tiled maps as part of the `Urho2D `__ sublibrary (`Documentation `__, `HTML5 example `__)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:490 msgid "XNA" msgstr "" #: ../../reference/support-for-tmx-maps.rst:492 msgid "`FlatRedBall `__ Glue tool ships with a `Tiled plugin `__ that loads TMX maps into the FlatRedBall engine, providing rich integration with its features." msgstr "" #: ../../reference/support-for-tmx-maps.rst:495 msgid "`XTiled `__ by Michael C. Neel and Dylan Wolf, XNA library for loading and rendering TMX maps" msgstr "" #: ../../reference/support-for-tmx-maps.rst:497 msgid "`XNA map loader `__ by Kevin Gadd, extended by Stephen Belanger and Zach Musgrave" msgstr "" #: ../../reference/tmx-changelog.rst:2 msgid "TMX Changelog" msgstr "" #: ../../reference/tmx-changelog.rst:4 msgid "Below are described the changes/additions that were made to the :doc:`tmx-map-format` for recent versions of Tiled." msgstr "" #: ../../reference/tmx-changelog.rst:10 msgid "The :ref:`tmx-tileset-tile` elements in a tileset are no longer always saved with increasing IDs. They are now saved in the display order, which can be changed in Tiled." msgstr "" #: ../../reference/tmx-changelog.rst:17 msgid "The colors that are part of a :ref:`tmx-wangset` are no longer separated in corner colors and edge colors. Instead, there is now a single :ref:`tmx-wangcolor` element to define a Wang color. This new element also stores :ref:`tmx-properties`." msgstr "" #: ../../reference/tmx-changelog.rst:22 msgid "The ``wangid`` attribute on the :ref:`tmx-wangtile` element is now stored as a comma-separated list of values, instead of a 32-bit unsigned integer in hex format. This is because the number of colors supported in a Wang set was increased from 15 to 255." msgstr "" #: ../../reference/tmx-changelog.rst:27 msgid "Valid transformations of tiles in a set (flipping, rotation) are specified in a :ref:`tmx-tileset-transformations` element. The partial support for the ``vflip``, ``hflip`` and ``dflip`` attributes on the :ref:`tmx-wangtile` element has been removed." msgstr "" #: ../../reference/tmx-changelog.rst:32 msgid "The :ref:`tmx-wangset` element has replaced the now deprecated :ref:`tmx-terraintypes` element." msgstr "" #: ../../reference/tmx-changelog.rst:38 msgid "Added the ``objectalignment`` attribute to the :ref:`tmx-tileset` element, allowing the tileset to control the alignment used for tile objects." msgstr "" #: ../../reference/tmx-changelog.rst:41 msgid "Added the ``tintcolor`` attribute to the :ref:`tmx-layer`, :ref:`tmx-objectgroup`, :ref:`tmx-imagelayer` and :ref:`tmx-group` elements, allowing for a number of graphical effects like darkening or coloring a layer." msgstr "" #: ../../reference/tmx-changelog.rst:49 msgid "Added an :ref:`tmx-editorsettings` element, which is used to store editor specific settings that are generally not relevant when loading a map." msgstr "" #: ../../reference/tmx-changelog.rst:52 msgid "Added support for Zstandard compression for tile layer data (``compression=\"zstd\"`` on :ref:`tmx-data` elements)." msgstr "" #: ../../reference/tmx-changelog.rst:55 msgid "Added the ``compressionlevel`` attribute to the :ref:`tmx-map` element, which stores the compression level to use for compressed tile layer data." msgstr "" #: ../../reference/tmx-changelog.rst:59 msgid "Tiled 1.2.1" msgstr "" #: ../../reference/tmx-changelog.rst:61 msgid "Text objects can now get their horizontal alignment saved as ``justify``. This option existed in the UI before but wasn't saved properly." msgstr "" #: ../../reference/tmx-changelog.rst:67 msgid "Added an ``id`` attribute to the :ref:`tmx-layer`, :ref:`tmx-objectgroup`, :ref:`tmx-imagelayer` and :ref:`tmx-group` elements, which stores a map-unique ID of the layer." msgstr "" #: ../../reference/tmx-changelog.rst:71 msgid "Added a ``nextlayerid`` attribute to the :ref:`tmx-map` element, which stores the next available ID for new layers. This number is stored to prevent reuse of the same ID after layers have been removed." msgstr "" #: ../../reference/tmx-changelog.rst:78 msgid "Added a :ref:`map.infinite ` attribute, which indicates whether the map is considered unbounded. Tile layer data for infinite maps is stored in chunks." msgstr "" #: ../../reference/tmx-changelog.rst:82 msgid "A new :ref:`tmx-chunk` element was added for infinite maps which contains the similar content as :ref:`tmx-data`, except it stores the data of the area specified by its ``x``, ``y``, ``width`` and ``height`` attributes." msgstr "" #: ../../reference/tmx-changelog.rst:87 msgid ":doc:`Templates ` were added, a template is an :ref:`external file ` referenced by template instance objects:" msgstr "" #: ../../reference/tmx-changelog.rst:95 msgid "Tilesets can now contain :doc:`Terrain Sets `. They are saved in the new :ref:`tmx-wangsets` element." msgstr "" #: ../../reference/tmx-changelog.rst:98 msgid "A new :ref:`tmx-point` child element was added to :ref:`tmx-object`, which marks point objects. Point objects do not have a size or rotation." msgstr "" #: ../../reference/tmx-changelog.rst:102 msgid "Tiled 1.0" msgstr "" #: ../../reference/tmx-changelog.rst:104 msgid "A new :ref:`tmx-group` element was added which is a group layer that can have other layers as child elements. This means layers now form a hierarchy." msgstr "" #: ../../reference/tmx-changelog.rst:106 msgid "Added Text objects, identified by a new :ref:`tmx-text` element which is used as a child of the :ref:`tmx-object` element." msgstr "" #: ../../reference/tmx-changelog.rst:108 msgid "Added a :ref:`tile.type ` attribute for supporting :ref:`typed-tiles`." msgstr "" #: ../../reference/tmx-changelog.rst:112 msgid "Tiled 0.18" msgstr "" #: ../../reference/tmx-changelog.rst:114 msgid "*No file format changes.*" msgstr "" #: ../../reference/tmx-changelog.rst:117 msgid "Tiled 0.17" msgstr "" #: ../../reference/tmx-changelog.rst:119 msgid "Added ``color`` and ``file`` as possible values for the :ref:`property.type ` attribute." msgstr "" #: ../../reference/tmx-changelog.rst:121 msgid "Added support for editing multi-line string properties, which are written out differently." msgstr "" #: ../../reference/tmx-changelog.rst:125 msgid "Tiled 0.16" msgstr "" #: ../../reference/tmx-changelog.rst:127 msgid "The :ref:`tmx-property` element gained a ``type`` attribute, storing the type of the value. Currently supported types are ``string`` (the default), ``int``, ``float`` and ``bool``." msgstr "" #: ../../reference/tmx-changelog.rst:132 msgid "Tiled 0.15" msgstr "" #: ../../reference/tmx-changelog.rst:134 msgid "The ``offsetx`` and ``offsety`` attributes are now also used for :ref:`tmx-imagelayer` elements, replacing the ``x`` and ``y`` attributes previously used. This change was made for consistency with the other layer types." msgstr "" #: ../../reference/tmx-changelog.rst:138 msgid "The tiles in an image collection tileset are no longer guaranteed to be consecutive, because removing tiles from the collection will no longer change the IDs of other tiles." msgstr "" #: ../../reference/tmx-changelog.rst:141 msgid "The pure XML and Gzip-compressed tile layer data formats were deprecated, since they didn't have any advantage over other formats. Remaining formats are CSV, base64 and Zlib-compressed layer data." msgstr "" #: ../../reference/tmx-changelog.rst:144 msgid "Added ``columns`` attribute to the :ref:`tmx-tileset` element, which specifies the number of tile columns in the tileset. For image collection tilesets it is editable and is used when displaying the tileset." msgstr "" #: ../../reference/tmx-changelog.rst:148 msgid "The ``backgroundcolor`` attribute of the :ref:`tmx-map` element will now take the format ``#AARRGGBB`` when its alpha value differs from 255. Previously the alpha value was silently discarded." msgstr "" #: ../../reference/tmx-changelog.rst:153 msgid "Tiled 0.14" msgstr "" #: ../../reference/tmx-changelog.rst:155 msgid "Added optional ``offsetx`` and ``offsety`` attributes to the ``layer`` and ``objectgroup`` elements. These specify an offset in pixels that is to be applied when rendering the layer. The default values are 0." msgstr "" #: ../../reference/tmx-changelog.rst:161 msgid "Tiled 0.13" msgstr "" #: ../../reference/tmx-changelog.rst:163 msgid "Added an optional ``tilecount`` attribute to the ``tileset`` element, which is written by Tiled to help parsers determine the amount of memory to allocate for tile data." msgstr "" #: ../../reference/tmx-changelog.rst:168 msgid "Tiled 0.12" msgstr "" #: ../../reference/tmx-changelog.rst:170 msgid "Previously tile objects never had ``width`` and ``height`` properties, though the format technically allowed this. Now these properties are used to store the size the image should be rendered at. The default values for these attributes are the dimensions of the tile image." msgstr "" #: ../../reference/tmx-changelog.rst:177 msgid "Tiled 0.11" msgstr "" #: ../../reference/tmx-changelog.rst:179 msgid "Added ``hexagonal`` to the supported values for the ``orientation`` attribute on the ``map`` element. This also adds ``staggerindex`` (``even`` or ``odd``) and ``staggeraxis`` (``x`` or ``y``) and ``hexsidelength`` (integer value) attributes to the ``map`` element, in order to support the many variations of staggered hexagonal. The new ``staggerindex`` and ``staggeraxis`` attributes are also supported when using the ``staggered`` map orientation." msgstr "" #: ../../reference/tmx-changelog.rst:186 msgid "Added an ``id`` attribute to the ``object`` element, which stores a map-unique ID of the object." msgstr "" #: ../../reference/tmx-changelog.rst:188 msgid "Added a ``nextobjectid`` attribute to the ``map`` element, which stores the next available ID for new objects. This number is stored to prevent reuse of the same ID after objects have been removed." msgstr "" #: ../../reference/tmx-changelog.rst:193 msgid "Tiled 0.10" msgstr "" #: ../../reference/tmx-changelog.rst:195 msgid "Tile objects can now be horizontally or vertically flipped. This is stored in the ``gid`` attribute using the same mechanism as for regular tiles. The image is expected to be flipped without affecting its position, same way as flipped tiles." msgstr "" #: ../../reference/tmx-changelog.rst:200 msgid "Objects can be rotated freely. The rotation is stored in degrees as a ``rotation`` attribute, with positive rotation going clockwise." msgstr "" #: ../../reference/tmx-changelog.rst:203 msgid "The render order of the tiles on tile layers can be configured in a number of ways through a new ``renderorder`` property on the ``map`` element. Valid values are ``right-down`` (the default), ``right-up``, ``left-down`` and ``left-up``. In all cases, the map is drawn row-by-row. This is only supported for orthogonal maps at the moment." msgstr "" #: ../../reference/tmx-changelog.rst:209 msgid "The render order of objects on object layers can be configured to be either sorted by their y-coordinate (previous behavior and still the default) or simply the order of appearance in the map file. The latter enables manual control over the drawing order with actions that \"Raise\" and \"Lower\" selected objects. It is controlled by the ``draworder`` property on the ``objectgroup`` element, which can be either ``topdown`` (default) or ``index``." msgstr "" #: ../../reference/tmx-changelog.rst:217 msgid "Tiles can have an ``objectgroup`` child element, which can contain objects that define the collision shape to use for that tile. This information can be edited in the new Tile Collision Editor." msgstr "" #: ../../reference/tmx-changelog.rst:221 msgid "Tiles can have a single looping animation associated with them using an ``animation`` child element. Each frame of the animation refers to a local tile ID from this tileset and defines the frame duration in milliseconds. Example:" msgstr "" #: ../../reference/tmx-changelog.rst:240 msgid "Tiled 0.9" msgstr "" #: ../../reference/tmx-changelog.rst:242 msgid "Per-object visibility flag is saved (defaults to 1):" msgstr "" #: ../../reference/tmx-changelog.rst:248 msgid "Terrain information was added to tileset definitions (this is generally not very relevant for games):" msgstr "" #: ../../reference/tmx-changelog.rst:262 msgid "There is preliminary support for a \"staggered\" (isometric) projection (new value for the ``orientation`` attribute of the ``map`` element)." msgstr "" #: ../../reference/tmx-changelog.rst:265 msgid "A basic image layer type was added:" msgstr "" #: ../../reference/tmx-changelog.rst:273 msgid "Added ellipse object shape. Same parameters as rectangular objects, but marked as ellipse with a child element:" msgstr "" #: ../../reference/tmx-changelog.rst:282 msgid "Added map property for specifying the background color:" msgstr "" #: ../../reference/tmx-changelog.rst:288 msgid "Added initial (non-GUI) support for individual and/or embedded tile images (since there is no way to set this up in Tiled Qt but only in Tiled Java or with `pytmxlib `__, this is not very important to support at the moment):" msgstr "" #: ../../reference/tmx-changelog.rst:313 msgid "Tiled 0.8" msgstr "" #: ../../reference/tmx-changelog.rst:315 msgid "Tilesets can now have custom properties (using the ``properties`` child element, just like everything else)." msgstr "" #: ../../reference/tmx-changelog.rst:318 msgid "Tilesets now support defining a drawing offset in pixels, which is to be used when drawing any tiles from that tileset. Example:" msgstr "" #: ../../reference/tmx-changelog.rst:328 msgid "Support for tile rotation in 90-degree increments was added by using the third most significant bit in the global tile id. This new bit means \"anti-diagonal flip\", which swaps the x and y axis when rendering a tile." msgstr "" #: ../../reference/tmx-map-format.rst:2 msgid "TMX Map Format" msgstr "" #: ../../reference/tmx-map-format.rst:4 msgid "**Version 1.5**" msgstr "" #: ../../reference/tmx-map-format.rst:6 msgid "TMX and TSX are `Tiled `__'s own formats for storing tile maps and tilesets, based on XML. TMX provides a flexible way to describe a tile based map. It can describe maps with any tile size, any amount of layers, any number of tile sets and it allows custom properties to be set on most elements. Beside tile layers, it can also contain groups of objects that can be placed freely." msgstr "" #: ../../reference/tmx-map-format.rst:13 msgid "Note that there are many :doc:`libraries and frameworks ` available that can work with TMX maps and TSX tilesets." msgstr "" #: ../../reference/tmx-map-format.rst:16 msgid "In this document we'll go through each element found in these file formats. The elements are mentioned in the headers and the list of attributes of the elements are listed right below, followed by a short explanation. Attributes or elements that are deprecated or unsupported by the current version of Tiled are formatted in italics. All optional attributes are either marked as optional, or have a default value to imply that they are optional." msgstr "" #: ../../reference/tmx-map-format.rst:24 msgid "Have a look at the :doc:`changelog ` when you're interested in what changed between Tiled versions." msgstr "" #: ../../reference/tmx-map-format.rst:29 msgid "A DTD-file (Document Type Definition) is served at http://mapeditor.org/dtd/1.0/map.dtd. This file is not up-to-date but might be useful for XML-namespacing anyway." msgstr "" #: ../../reference/tmx-map-format.rst:35 msgid "For compatibility reasons, it is recommended to ignore unknown elements and attributes (or raise a warning). This makes it easier to add features without breaking backwards compatibility, and allows custom variants and additions to work with existing tools." msgstr "" #: ../../reference/tmx-map-format.rst:43 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:45 msgid "**version:** The TMX format version. Was \"1.0\" so far, and will be incremented to match minor Tiled releases." msgstr "" #: ../../reference/tmx-map-format.rst:47 msgid "**tiledversion:** The Tiled version used to save the file (since Tiled 1.0.1). May be a date (for snapshot builds). (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:49 msgid "**orientation:** Map orientation. Tiled supports \"orthogonal\", \"isometric\", \"staggered\" and \"hexagonal\" (since 0.11)." msgstr "" #: ../../reference/tmx-map-format.rst:51 msgid "**renderorder:** The order in which tiles on tile layers are rendered. Valid values are ``right-down`` (the default), ``right-up``, ``left-down`` and ``left-up``. In all cases, the map is drawn row-by-row. (only supported for orthogonal maps at the moment)" msgstr "" #: ../../reference/tmx-map-format.rst:55 msgid "**compressionlevel:** The compression level to use for tile layer data (defaults to -1, which means to use the algorithm default)." msgstr "" #: ../../reference/tmx-map-format.rst:57 msgid "**width:** The map width in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:58 msgid "**height:** The map height in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:59 msgid "**tilewidth:** The width of a tile." msgstr "" #: ../../reference/tmx-map-format.rst:60 msgid "**tileheight:** The height of a tile." msgstr "" #: ../../reference/tmx-map-format.rst:61 msgid "**hexsidelength:** Only for hexagonal maps. Determines the width or height (depending on the staggered axis) of the tile's edge, in pixels." msgstr "" #: ../../reference/tmx-map-format.rst:64 msgid "**staggeraxis:** For staggered and hexagonal maps, determines which axis (\"x\" or \"y\") is staggered. (since 0.11)" msgstr "" #: ../../reference/tmx-map-format.rst:66 msgid "**staggerindex:** For staggered and hexagonal maps, determines whether the \"even\" or \"odd\" indexes along the staggered axis are shifted. (since 0.11)" msgstr "" #: ../../reference/tmx-map-format.rst:69 msgid "**backgroundcolor:** The background color of the map. (optional, may include alpha value since 0.15 in the form ``#AARRGGBB``. Defaults to fully transparent.)" msgstr "" #: ../../reference/tmx-map-format.rst:72 msgid "**nextlayerid:** Stores the next available ID for new layers. This number is stored to prevent reuse of the same ID after layers have been removed. (since 1.2) (defaults to the highest layer id in the file + 1)" msgstr "" #: ../../reference/tmx-map-format.rst:76 msgid "**nextobjectid:** Stores the next available ID for new objects. This number is stored to prevent reuse of the same ID after objects have been removed. (since 0.11) (defaults to the highest object id in the file + 1)" msgstr "" #: ../../reference/tmx-map-format.rst:80 msgid "**infinite:** Whether this map is infinite. An infinite map has no fixed size and can grow in all directions. Its layer data is stored in chunks. (``0`` for false, ``1`` for true, defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:84 msgid "The ``tilewidth`` and ``tileheight`` properties determine the general grid size of the map. The individual tiles may have different sizes. Larger tiles will extend at the top and right (anchored to the bottom left)." msgstr "" #: ../../reference/tmx-map-format.rst:89 msgid "A map contains three different kinds of layers. Tile layers were once the only type, and are simply called ``layer``, object layers have the ``objectgroup`` tag and image layers use the ``imagelayer`` tag. The order in which these layers appear is the order in which the layers are rendered by Tiled." msgstr "" #: ../../reference/tmx-map-format.rst:95 msgid "The ``staggered`` orientation refers to an isometric map using staggered axes." msgstr "" #: ../../reference/tmx-map-format.rst:98 #: ../../reference/tmx-map-format.rst:246 #: ../../reference/tmx-map-format.rst:323 #: ../../reference/tmx-map-format.rst:342 #: ../../reference/tmx-map-format.rst:553 #: ../../reference/tmx-map-format.rst:730 msgid "Can contain at most one: :ref:`tmx-properties`" msgstr "" #: ../../reference/tmx-map-format.rst:100 msgid "Can contain any number: :ref:`tmx-tileset`, :ref:`tmx-layer`, :ref:`tmx-objectgroup`, :ref:`tmx-imagelayer`, :ref:`tmx-group` (since 1.0), :ref:`tmx-editorsettings` (since 1.3)" msgstr "" #: ../../reference/tmx-map-format.rst:107 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:109 msgid "This element contains various editor-specific settings, which are generally not relevant when reading a map." msgstr "" #: ../../reference/tmx-map-format.rst:112 msgid "Can contain: :ref:`tmx-chunksize`, :ref:`tmx-export`" msgstr "" #: ../../reference/tmx-map-format.rst:117 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:119 msgid "**width:** The width of chunks used for infinite maps (default to 16)." msgstr "" #: ../../reference/tmx-map-format.rst:120 msgid "**height:** The width of chunks used for infinite maps (default to 16)." msgstr "" #: ../../reference/tmx-map-format.rst:125 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:127 msgid "**target:** The last file this map was exported to." msgstr "" #: ../../reference/tmx-map-format.rst:128 msgid "**format:** The short name of the last format this map was exported as." msgstr "" #: ../../reference/tmx-map-format.rst:133 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:135 msgid "**firstgid:** The first global tile ID of this tileset (this global ID maps to the first tile in this tileset)." msgstr "" #: ../../reference/tmx-map-format.rst:137 msgid "**source:** If this tileset is stored in an external TSX (Tile Set XML) file, this attribute refers to that file. That TSX file has the same structure as the ```` element described here. (There is the firstgid attribute missing and this source attribute is also not there. These two attributes are kept in the TMX map, since they are map specific.)" msgstr "" #: ../../reference/tmx-map-format.rst:143 msgid "**name:** The name of this tileset." msgstr "" #: ../../reference/tmx-map-format.rst:144 msgid "**tilewidth:** The (maximum) width of the tiles in this tileset." msgstr "" #: ../../reference/tmx-map-format.rst:145 msgid "**tileheight:** The (maximum) height of the tiles in this tileset." msgstr "" #: ../../reference/tmx-map-format.rst:146 msgid "**spacing:** The spacing in pixels between the tiles in this tileset (applies to the tileset image, defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:148 msgid "**margin:** The margin around the tiles in this tileset (applies to the tileset image, defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:150 msgid "**tilecount:** The number of tiles in this tileset (since 0.13)" msgstr "" #: ../../reference/tmx-map-format.rst:151 msgid "**columns:** The number of tile columns in the tileset. For image collection tilesets it is editable and is used when displaying the tileset. (since 0.15)" msgstr "" #: ../../reference/tmx-map-format.rst:154 msgid "**objectalignment:** Controls the alignment for tile objects. Valid values are ``unspecified``, ``topleft``, ``top``, ``topright``, ``left``, ``center``, ``right``, ``bottomleft``, ``bottom`` and ``bottomright``. The default value is ``unspecified``, for compatibility reasons. When unspecified, tile objects use ``bottomleft`` in orthogonal mode and ``bottom`` in isometric mode. (since 1.4)" msgstr "" #: ../../reference/tmx-map-format.rst:161 msgid "If there are multiple ```` elements, they are in ascending order of their ``firstgid`` attribute. The first tileset always has a ``firstgid`` value of 1. Since Tiled 0.15, image collection tilesets do not necessarily number their tiles consecutively since gaps can occur when removing tiles." msgstr "" #: ../../reference/tmx-map-format.rst:167 msgid "Image collection tilesets have no ```` tag. Instead, each tile has an ```` tag." msgstr "" #: ../../reference/tmx-map-format.rst:170 msgid "Can contain at most one: :ref:`tmx-image`, :ref:`tmx-tileoffset`, :ref:`tmx-grid` (since 1.0), :ref:`tmx-properties`, :ref:`tmx-terraintypes`, :ref:`tmx-wangsets` (since 1.1), :ref:`tmx-tileset-transformations` (since 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:174 msgid "Can contain any number: :ref:`tmx-tileset-tile`" msgstr "" #: ../../reference/tmx-map-format.rst:179 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:181 msgid "**x:** Horizontal offset in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:182 msgid "**y:** Vertical offset in pixels (positive is down, defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:184 msgid "This element is used to specify an offset in pixels, to be applied when drawing a tile from the related tileset. When not present, no offset is applied." msgstr "" #: ../../reference/tmx-map-format.rst:191 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:193 msgid "**orientation:** Orientation of the grid for the tiles in this tileset (``orthogonal`` or ``isometric``, defaults to ``orthogonal``)" msgstr "" #: ../../reference/tmx-map-format.rst:195 msgid "**width:** Width of a grid cell" msgstr "" #: ../../reference/tmx-map-format.rst:196 msgid "**height:** Height of a grid cell" msgstr "" #: ../../reference/tmx-map-format.rst:198 msgid "This element is only used in case of isometric orientation, and determines how tile overlays for terrain and collision information are rendered." msgstr "" #: ../../reference/tmx-map-format.rst:205 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:207 msgid "**format:** Used for embedded images, in combination with a ``data`` child element. Valid values are file extensions like ``png``, ``gif``, ``jpg``, ``bmp``, etc." msgstr "" #: ../../reference/tmx-map-format.rst:210 msgid "*id:* Used by some versions of Tiled Java. Deprecated and unsupported." msgstr "" #: ../../reference/tmx-map-format.rst:211 msgid "**source:** The reference to the tileset image file (Tiled supports most common image formats). Only used if the image is not embedded." msgstr "" #: ../../reference/tmx-map-format.rst:213 msgid "**trans:** Defines a specific color that is treated as transparent (example value: \"#FF00FF\" for magenta). Including the \"#\" is optional and Tiled leaves it out for compatibility reasons. (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:216 msgid "**width:** The image width in pixels (optional, used for tile index correction when the image changes)" msgstr "" #: ../../reference/tmx-map-format.rst:218 msgid "**height:** The image height in pixels (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:220 msgid "Note that it is not currently possible to use Tiled to create maps with embedded image data, even though the TMX format supports this. It is possible to create such maps using ``libtiled`` (Qt/C++) or `tmxlib `__ (Python)." msgstr "" #: ../../reference/tmx-map-format.rst:225 msgid "Can contain at most one: :ref:`tmx-data`" msgstr "" #: ../../reference/tmx-map-format.rst:230 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:232 msgid "This element defines an array of terrain types, which can be referenced from the ``terrain`` attribute of the ``tile`` element." msgstr "" #: ../../reference/tmx-map-format.rst:235 msgid "Can contain any number: :ref:`tmx-terrain`" msgstr "" #: ../../reference/tmx-map-format.rst:240 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:242 msgid "**name:** The name of the terrain type." msgstr "" #: ../../reference/tmx-map-format.rst:243 msgid "**tile:** The local tile-id of the tile that represents the terrain visually." msgstr "" #: ../../reference/tmx-map-format.rst:251 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:253 msgid "This element is used to describe which transformations can be applied to the tiles (e.g. to extend a Wang set by transforming existing tiles)." msgstr "" #: ../../reference/tmx-map-format.rst:256 msgid "**hflip:** Whether the tiles in this set can be flipped horizontally (default 0)" msgstr "" #: ../../reference/tmx-map-format.rst:257 msgid "**vflip:** Whether the tiles in this set can be flipped vertically (default 0)" msgstr "" #: ../../reference/tmx-map-format.rst:258 msgid "**rotate:** Whether the tiles in this set can be rotated in 90 degree increments (default 0)" msgstr "" #: ../../reference/tmx-map-format.rst:259 msgid "**preferuntransformed:** Whether untransformed tiles remain preferred, otherwise transformed tiles are used to produce more variations (default 0)" msgstr "" #: ../../reference/tmx-map-format.rst:265 #: ../../reference/tmx-map-format.rst:512 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:267 msgid "**id:** The local tile ID within its tileset." msgstr "" #: ../../reference/tmx-map-format.rst:268 msgid "**type:** The type of the tile. Refers to an object type and is used by tile objects. (optional) (since 1.0)" msgstr "" #: ../../reference/tmx-map-format.rst:270 msgid "**terrain:** Defines the terrain type of each corner of the tile, given as comma-separated indexes in the terrain types array in the order top-left, top-right, bottom-left, bottom-right. Leaving out a value means that corner has no terrain. (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:274 msgid "**probability:** A percentage indicating the probability that this tile is chosen when it competes with others while editing with the terrain tool. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:278 msgid "Can contain at most one: :ref:`tmx-properties`, :ref:`tmx-image` (since 0.9), :ref:`tmx-objectgroup`, :ref:`tmx-animation`" msgstr "" #: ../../reference/tmx-map-format.rst:284 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:286 msgid "Contains a list of animation frames." msgstr "" #: ../../reference/tmx-map-format.rst:288 msgid "Each tile can have exactly one animation associated with it. In the future, there could be support for multiple named animations on a tile." msgstr "" #: ../../reference/tmx-map-format.rst:291 msgid "Can contain any number: :ref:`tmx-frame`" msgstr "" #: ../../reference/tmx-map-format.rst:296 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:298 msgid "**tileid:** The local ID of a tile within the parent :ref:`tmx-tileset`." msgstr "" #: ../../reference/tmx-map-format.rst:300 msgid "**duration:** How long (in milliseconds) this frame should be displayed before advancing to the next frame." msgstr "" #: ../../reference/tmx-map-format.rst:306 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:308 msgid "Contains the list of Wang sets defined for this tileset." msgstr "" #: ../../reference/tmx-map-format.rst:310 msgid "Can contain any number: :ref:`tmx-wangset`" msgstr "" #: ../../reference/tmx-map-format.rst:315 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:317 msgid "Defines a list of corner colors and a list of edge colors, and any number of Wang tiles using these colors." msgstr "" #: ../../reference/tmx-map-format.rst:320 msgid "**name:** The name of the Wang set." msgstr "" #: ../../reference/tmx-map-format.rst:321 msgid "**tile:** The tile ID of the tile representing this Wang set." msgstr "" #: ../../reference/tmx-map-format.rst:325 msgid "Can contain up to 255: :ref:`tmx-wangcolor` (since Tiled 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:327 msgid "Can contain any number: :ref:`tmx-wangtile`" msgstr "" #: ../../reference/tmx-map-format.rst:332 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:334 msgid "A color that can be used to define the corner and/or edge of a Wang tile." msgstr "" #: ../../reference/tmx-map-format.rst:336 msgid "**name:** The name of this color." msgstr "" #: ../../reference/tmx-map-format.rst:337 msgid "**color:** The color in ``#RRGGBB`` format (example: ``#c17d11``)." msgstr "" #: ../../reference/tmx-map-format.rst:338 msgid "**tile:** The tile ID of the tile representing this color." msgstr "" #: ../../reference/tmx-map-format.rst:339 msgid "**probability:** The relative probability that this color is chosen over others in case of multiple options. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:347 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:349 msgid "Defines a Wang tile, by referring to a tile in the tileset and associating it with a certain Wang ID." msgstr "" #: ../../reference/tmx-map-format.rst:352 msgid "**tileid:** The tile ID." msgstr "" #: ../../reference/tmx-map-format.rst:353 msgid "**wangid:** \"The Wang ID, given by a comma-separated list of indexes (starting from 1, because 0 means _unset_) referring to the Wang colors in the Wang set in the following order: top, top right, right, bottom right, bottom, bottom left, left, top left (since Tiled 1.5). Before Tiled 1.5, the Wang ID was saved as a 32-bit unsigned integer stored in the format ``0xCECECECE`` (where each C is a corner color and each E is an edge color, in reverse order).\"" msgstr "" #: ../../reference/tmx-map-format.rst:360 msgid "*hflip:* Whether the tile is flipped horizontally (removed in Tiled 1.5)." msgstr "" #: ../../reference/tmx-map-format.rst:361 msgid "*vflip:* Whether the tile is flipped vertically (removed in Tiled 1.5)." msgstr "" #: ../../reference/tmx-map-format.rst:362 msgid "*dflip:* Whether the tile is flipped on its diagonal (removed in Tiled 1.5)." msgstr "" #: ../../reference/tmx-map-format.rst:367 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:369 msgid "All :ref:`tmx-tileset` tags shall occur before the first :ref:`tmx-layer` tag so that parsers may rely on having the tilesets before needing to resolve tiles." msgstr "" #: ../../reference/tmx-map-format.rst:373 #: ../../reference/tmx-map-format.rst:526 #: ../../reference/tmx-map-format.rst:687 #: ../../reference/tmx-map-format.rst:713 msgid "**id:** Unique ID of the layer. Each layer that added to a map gets a unique id. Even if a layer is deleted, no layer ever gets the same ID. Can not be changed in Tiled. (since Tiled 1.2)" msgstr "" #: ../../reference/tmx-map-format.rst:376 msgid "**name:** The name of the layer. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:377 msgid "*x:* The x coordinate of the layer in tiles. Defaults to 0 and can not be changed in Tiled." msgstr "" #: ../../reference/tmx-map-format.rst:378 msgid "*y:* The y coordinate of the layer in tiles. Defaults to 0 and can not be changed in Tiled." msgstr "" #: ../../reference/tmx-map-format.rst:379 msgid "**width:** The width of the layer in tiles. Always the same as the map width for fixed-size maps." msgstr "" #: ../../reference/tmx-map-format.rst:380 msgid "**height:** The height of the layer in tiles. Always the same as the map height for fixed-size maps." msgstr "" #: ../../reference/tmx-map-format.rst:381 msgid "**opacity:** The opacity of the layer as a value from 0 to 1. Defaults to 1." msgstr "" #: ../../reference/tmx-map-format.rst:382 msgid "**visible:** Whether the layer is shown (1) or hidden (0). Defaults to 1." msgstr "" #: ../../reference/tmx-map-format.rst:383 msgid "**tintcolor:** A :ref:`tint color ` that is multiplied with any tiles drawn by this layer in ``#AARRGGBB`` or ``#RRGGBB`` format (optional)." msgstr "" #: ../../reference/tmx-map-format.rst:384 msgid "**offsetx:** Horizontal offset for this layer in pixels. Defaults to 0. (since 0.14)" msgstr "" #: ../../reference/tmx-map-format.rst:386 msgid "**offsety:** Vertical offset for this layer in pixels. Defaults to 0. (since 0.14)" msgstr "" #: ../../reference/tmx-map-format.rst:388 msgid "**parallaxx:** Horizontal :ref:`parallax factor ` for this layer. Defaults to 1. (since 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:389 msgid "**parallaxy:** Vertical :ref:`parallax factor ` for this layer. Defaults to 1. (since 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:391 msgid "Can contain at most one: :ref:`tmx-properties`, :ref:`tmx-data`" msgstr "" #: ../../reference/tmx-map-format.rst:396 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:398 msgid "**encoding:** The encoding used to encode the tile layer data. When used, it can be \"base64\" and \"csv\" at the moment. (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:400 msgid "**compression:** The compression used to compress the tile layer data. Tiled supports \"gzip\", \"zlib\" and (as a compile-time option since Tiled 1.3) \"zstd\"." msgstr "" #: ../../reference/tmx-map-format.rst:404 msgid "When no encoding or compression is given, the tiles are stored as individual XML ``tile`` elements. Next to that, the easiest format to parse is the \"csv\" (comma separated values) format." msgstr "" #: ../../reference/tmx-map-format.rst:408 msgid "The base64-encoded and optionally compressed layer data is somewhat more complicated to parse. First you need to base64-decode it, then you may need to decompress it. Now you have an array of bytes, which should be interpreted as an array of unsigned 32-bit integers using little-endian byte ordering." msgstr "" #: ../../reference/tmx-map-format.rst:414 msgid "Whatever format you choose for your layer data, you will always end up with so called \"global tile IDs\" (gids). They are global, since they may refer to a tile from any of the tilesets used by the map. In order to find out from which tileset the tile is you need to find the tileset with the highest ``firstgid`` that is still lower or equal than the gid. The tilesets are always stored with increasing ``firstgid``\\ s." msgstr "" #: ../../reference/tmx-map-format.rst:421 msgid "Can contain any number: :ref:`tmx-tilelayer-tile`, :ref:`tmx-chunk`" msgstr "" #: ../../reference/tmx-map-format.rst:426 msgid "Tile flipping" msgstr "" #: ../../reference/tmx-map-format.rst:428 msgid "The highest three bits of the gid store the flipped states. Bit 32 is used for storing whether the tile is horizontally flipped, bit 31 is used for the vertically flipped tiles and bit 30 indicates whether the tile is flipped (anti) diagonally, enabling tile rotation. These bits have to be read and cleared before you can find out which tileset a tile belongs to." msgstr "" #: ../../reference/tmx-map-format.rst:435 msgid "When rendering a tile, the order of operation matters. The diagonal flip (x/y axis swap) is done first, followed by the horizontal and vertical flips." msgstr "" #: ../../reference/tmx-map-format.rst:439 msgid "The following C++ pseudo-code should make it all clear:" msgstr "" #: ../../reference/tmx-map-format.rst:489 msgid "(Since the above code was put together on this wiki page and can't be directly tested, please make sure to report any errors you encounter when basing your parsing code on it, thanks.)" msgstr "" #: ../../reference/tmx-map-format.rst:496 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:498 msgid "**x:** The x coordinate of the chunk in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:499 msgid "**y:** The y coordinate of the chunk in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:500 msgid "**width:** The width of the chunk in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:501 msgid "**height:** The height of the chunk in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:503 msgid "This is currently added only for infinite maps. The contents of a chunk element is same as that of the ``data`` element, except it stores the data of the area specified in the attributes." msgstr "" #: ../../reference/tmx-map-format.rst:507 msgid "Can contain any number: :ref:`tmx-tilelayer-tile`" msgstr "" #: ../../reference/tmx-map-format.rst:514 msgid "**gid:** The global tile ID (default: 0)." msgstr "" #: ../../reference/tmx-map-format.rst:516 msgid "Not to be confused with the ``tile`` element inside a ``tileset``, this element defines the value of a single tile on a tile layer. This is however the most inefficient way of storing the tile layer data, and should generally be avoided." msgstr "" #: ../../reference/tmx-map-format.rst:524 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:529 msgid "**name:** The name of the object group. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:530 msgid "**color:** The color used to display the objects in this group. (defaults to gray (\"#a0a0a4\"))" msgstr "" #: ../../reference/tmx-map-format.rst:532 msgid "*x:* The x coordinate of the object group in tiles. Defaults to 0 and can no longer be changed in Tiled." msgstr "" #: ../../reference/tmx-map-format.rst:534 msgid "*y:* The y coordinate of the object group in tiles. Defaults to 0 and can no longer be changed in Tiled." msgstr "" #: ../../reference/tmx-map-format.rst:536 msgid "*width:* The width of the object group in tiles. Meaningless." msgstr "" #: ../../reference/tmx-map-format.rst:537 msgid "*height:* The height of the object group in tiles. Meaningless." msgstr "" #: ../../reference/tmx-map-format.rst:538 #: ../../reference/tmx-map-format.rst:699 #: ../../reference/tmx-map-format.rst:721 msgid "**opacity:** The opacity of the layer as a value from 0 to 1. (defaults to 1)" msgstr "" #: ../../reference/tmx-map-format.rst:540 #: ../../reference/tmx-map-format.rst:701 #: ../../reference/tmx-map-format.rst:723 msgid "**visible:** Whether the layer is shown (1) or hidden (0). (defaults to 1)" msgstr "" #: ../../reference/tmx-map-format.rst:541 msgid "**tintcolor:** A color that is multiplied with any tile objects drawn by this layer, in ``#AARRGGBB`` or ``#RRGGBB`` format (optional)." msgstr "" #: ../../reference/tmx-map-format.rst:542 msgid "**offsetx:** Horizontal offset for this object group in pixels. (defaults to 0) (since 0.14)" msgstr "" #: ../../reference/tmx-map-format.rst:544 msgid "**offsety:** Vertical offset for this object group in pixels. (defaults to 0) (since 0.14)" msgstr "" #: ../../reference/tmx-map-format.rst:546 msgid "**draworder:** Whether the objects are drawn according to the order of appearance (\"index\") or sorted by their y-coordinate (\"topdown\"). (defaults to \"topdown\")" msgstr "" #: ../../reference/tmx-map-format.rst:550 msgid "The object group is in fact a map layer, and is hence called \"object layer\" in Tiled." msgstr "" #: ../../reference/tmx-map-format.rst:555 msgid "Can contain any number: :ref:`tmx-object`" msgstr "" #: ../../reference/tmx-map-format.rst:560 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:562 msgid "**id:** Unique ID of the object. Each object that is placed on a map gets a unique id. Even if an object was deleted, no object gets the same ID. Can not be changed in Tiled. (since Tiled 0.11)" msgstr "" #: ../../reference/tmx-map-format.rst:565 msgid "**name:** The name of the object. An arbitrary string. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:566 msgid "**type:** The type of the object. An arbitrary string. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:567 msgid "**x:** The x coordinate of the object in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:568 msgid "**y:** The y coordinate of the object in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:569 msgid "**width:** The width of the object in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:570 msgid "**height:** The height of the object in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:571 msgid "**rotation:** The rotation of the object in degrees clockwise around (x, y). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:573 msgid "**gid:** A reference to a tile. (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:574 msgid "**visible:** Whether the object is shown (1) or hidden (0). (defaults to 1)" msgstr "" #: ../../reference/tmx-map-format.rst:576 msgid "**template:** A reference to a :ref:`template file `. (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:578 msgid "While tile layers are very suitable for anything repetitive aligned to the tile grid, sometimes you want to annotate your map with other information, not necessarily aligned to the grid. Hence the objects have their coordinates and size in pixels, but you can still easily align that to the grid when you want to." msgstr "" #: ../../reference/tmx-map-format.rst:584 msgid "You generally use objects to add custom information to your tile map, such as spawn points, warps, exits, etc." msgstr "" #: ../../reference/tmx-map-format.rst:587 msgid "When the object has a ``gid`` set, then it is represented by the image of the tile with that global ID. The image alignment currently depends on the map orientation. In orthogonal orientation it's aligned to the bottom-left while in isometric it's aligned to the bottom-center. The image will rotate around the bottom-left or bottom-center, respectively." msgstr "" #: ../../reference/tmx-map-format.rst:593 msgid "When the object has a ``template`` set, it will borrow all the properties from the specified template, properties saved with the object will have higher priority, i.e. they will override the template properties." msgstr "" #: ../../reference/tmx-map-format.rst:598 msgid "Can contain at most one: :ref:`tmx-properties`, :ref:`tmx-ellipse` (since 0.9), :ref:`tmx-point` (since 1.1), :ref:`tmx-polygon`, :ref:`tmx-polyline`, :ref:`tmx-text` (since 1.0)" msgstr "" #: ../../reference/tmx-map-format.rst:605 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:607 msgid "Used to mark an object as an ellipse. The existing ``x``, ``y``, ``width`` and ``height`` attributes are used to determine the size of the ellipse." msgstr "" #: ../../reference/tmx-map-format.rst:614 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:616 msgid "Used to mark an object as a point. The existing ``x`` and ``y`` attributes are used to determine the position of the point." msgstr "" #: ../../reference/tmx-map-format.rst:622 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:624 #: ../../reference/tmx-map-format.rst:637 msgid "**points:** A list of x,y coordinates in pixels." msgstr "" #: ../../reference/tmx-map-format.rst:626 msgid "Each ``polygon`` object is made up of a space-delimited list of x,y coordinates. The origin for these coordinates is the location of the parent ``object``. By default, the first point is created as 0,0 denoting that the point will originate exactly where the ``object`` is placed." msgstr "" #: ../../reference/tmx-map-format.rst:635 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:639 msgid "A ``polyline`` follows the same placement definition as a ``polygon`` object." msgstr "" #: ../../reference/tmx-map-format.rst:645 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:647 msgid "**fontfamily:** The font family used (defaults to \"sans-serif\")" msgstr "" #: ../../reference/tmx-map-format.rst:648 msgid "**pixelsize:** The size of the font in pixels (not using points, because other sizes in the TMX format are also using pixels) (defaults to 16)" msgstr "" #: ../../reference/tmx-map-format.rst:651 msgid "**wrap:** Whether word wrapping is enabled (1) or disabled (0). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:653 msgid "**color:** Color of the text in ``#AARRGGBB`` or ``#RRGGBB`` format (defaults to #000000)" msgstr "" #: ../../reference/tmx-map-format.rst:655 msgid "**bold:** Whether the font is bold (1) or not (0). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:656 msgid "**italic:** Whether the font is italic (1) or not (0). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:657 msgid "**underline:** Whether a line should be drawn below the text (1) or not (0). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:659 msgid "**strikeout:** Whether a line should be drawn through the text (1) or not (0). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:661 msgid "**kerning:** Whether kerning should be used while rendering the text (1) or not (0). (defaults to 1)" msgstr "" #: ../../reference/tmx-map-format.rst:663 msgid "**halign:** Horizontal alignment of the text within the object (``left``, ``center``, ``right`` or ``justify``, defaults to ``left``) (since Tiled 1.2.1)" msgstr "" #: ../../reference/tmx-map-format.rst:666 msgid "**valign:** Vertical alignment of the text within the object (``top`` , ``center`` or ``bottom``, defaults to ``top``)" msgstr "" #: ../../reference/tmx-map-format.rst:669 msgid "Used to mark an object as a text object. Contains the actual text as character data." msgstr "" #: ../../reference/tmx-map-format.rst:672 msgid "For alignment purposes, the bottom of the text is the descender height of the font, and the top of the text is the ascender height of the font. For example, ``bottom`` alignment of the word \"cat\" will leave some space below the text, even though it is unused for this word with most fonts. Similarly, ``top`` alignment of the word \"cat\" will leave some space above the \"t\" with most fonts, because this space is used for diacritics." msgstr "" #: ../../reference/tmx-map-format.rst:679 msgid "If the text is larger than the object's bounds, it is clipped to the bounds of the object." msgstr "" #: ../../reference/tmx-map-format.rst:685 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:690 msgid "**name:** The name of the image layer. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:691 msgid "**offsetx:** Horizontal offset of the image layer in pixels. (defaults to 0) (since 0.15)" msgstr "" #: ../../reference/tmx-map-format.rst:693 msgid "**offsety:** Vertical offset of the image layer in pixels. (defaults to 0) (since 0.15)" msgstr "" #: ../../reference/tmx-map-format.rst:695 msgid "*x:* The x position of the image layer in pixels. (defaults to 0, deprecated since 0.15)" msgstr "" #: ../../reference/tmx-map-format.rst:697 msgid "*y:* The y position of the image layer in pixels. (defaults to 0, deprecated since 0.15)" msgstr "" #: ../../reference/tmx-map-format.rst:702 msgid "**tintcolor:** A color that is multiplied with the image drawn by this layer in ``#AARRGGBB`` or ``#RRGGBB`` format (optional)." msgstr "" #: ../../reference/tmx-map-format.rst:704 msgid "A layer consisting of a single image." msgstr "" #: ../../reference/tmx-map-format.rst:706 msgid "Can contain at most one: :ref:`tmx-properties`, :ref:`tmx-image`" msgstr "" #: ../../reference/tmx-map-format.rst:711 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:716 msgid "**name:** The name of the group layer. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:717 msgid "**offsetx:** Horizontal offset of the group layer in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:719 msgid "**offsety:** Vertical offset of the group layer in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:724 msgid "**tintcolor:** A color that is multiplied with any graphics drawn by any child layers, in ``#AARRGGBB`` or ``#RRGGBB`` format (optional)." msgstr "" #: ../../reference/tmx-map-format.rst:726 msgid "A group layer, used to organize the layers of the map in a hierarchy. Its attributes ``offsetx``, ``offsety``, ``opacity``, ``visible`` and ``tintcolor`` recursively affect child layers." msgstr "" #: ../../reference/tmx-map-format.rst:732 msgid "Can contain any number: :ref:`tmx-layer`, :ref:`tmx-objectgroup`, :ref:`tmx-imagelayer`, :ref:`tmx-group`" msgstr "" #: ../../reference/tmx-map-format.rst:738 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:740 msgid "Wraps any number of custom properties. Can be used as a child of the ``map``, ``tileset``, ``tile`` (when part of a ``tileset``), ``terrain``, ``wangset``, ``wangcolor``, ``layer``, ``objectgroup``, ``object``, ``imagelayer`` and ``group`` elements." msgstr "" #: ../../reference/tmx-map-format.rst:745 msgid "Can contain any number: :ref:`tmx-property`" msgstr "" #: ../../reference/tmx-map-format.rst:750 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:752 msgid "**name:** The name of the property." msgstr "" #: ../../reference/tmx-map-format.rst:753 msgid "**type:** The type of the property. Can be ``string`` (default), ``int``, ``float``, ``bool``, ``color``, ``file`` or ``object`` (since 0.16, with ``color`` and ``file`` added in 0.17, and ``object`` added in 1.4)." msgstr "" #: ../../reference/tmx-map-format.rst:756 msgid "**value:** The value of the property. (default string is \"\", default number is 0, default boolean is \"false\", default color is #00000000, default file is \".\" (the current file's parent directory))" msgstr "" #: ../../reference/tmx-map-format.rst:760 msgid "Boolean properties have a value of either \"true\" or \"false\"." msgstr "" #: ../../reference/tmx-map-format.rst:762 msgid "Color properties are stored in the format ``#AARRGGBB``." msgstr "" #: ../../reference/tmx-map-format.rst:764 msgid "File properties are stored as paths relative from the location of the map file." msgstr "" #: ../../reference/tmx-map-format.rst:767 msgid "Object properties can reference any object on the same map and are stored as an integer (the ID of the referenced object, or 0 when no object is referenced). When used on objects in the Tile Collision Editor, they can only refer to other objects on the same tile." msgstr "" #: ../../reference/tmx-map-format.rst:772 msgid "When a string property contains newlines, the current version of Tiled will write out the value as characters contained inside the ``property`` element rather than as the ``value`` attribute. It is possible that a future version of the TMX format will switch to always saving property values inside the element rather than as an attribute." msgstr "" #: ../../reference/tmx-map-format.rst:781 msgid "Template Files" msgstr "" #: ../../reference/tmx-map-format.rst:783 msgid "Templates are saved in their own file, and are referenced by :ref:`objects ` that are template instances." msgstr "" #: ../../reference/tmx-map-format.rst:789 msgid "