pax_global_header00006660000000000000000000000064147045057540014525gustar00rootroot0000000000000052 comment=2177a6ea35ea2106a3427579ebeaee2160e54b17 tiled-1.11.90/000077500000000000000000000000001470450575400127775ustar00rootroot00000000000000tiled-1.11.90/.editorconfig000066400000000000000000000002771470450575400154620ustar00rootroot00000000000000# https://editorconfig.org root = true [*.{cpp,h}] indent_style = space indent_size = 4 charset = utf-8 spelling_language = en-US trim_trailing_whitespace = true insert_final_newline = true tiled-1.11.90/.github/000077500000000000000000000000001470450575400143375ustar00rootroot00000000000000tiled-1.11.90/.github/FUNDING.yml000066400000000000000000000001641470450575400161550ustar00rootroot00000000000000# These are supported funding model platforms github: bjorn liberapay: tiled patreon: bjorn open_collective: tiled tiled-1.11.90/.github/ISSUE_TEMPLATE/000077500000000000000000000000001470450575400165225ustar00rootroot00000000000000tiled-1.11.90/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000011161470450575400212130ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Media** If applicable, add screenshots or videos to help explain your problem. **Specifications:** - OS: [e.g. Windows 10] - Tiled Version: [e.g. 1.0.0. You can get this from Help -> About Tiled] tiled-1.11.90/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000007731470450575400222560ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: feature assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. tiled-1.11.90/.github/dependabot.yml000066400000000000000000000002471470450575400171720ustar00rootroot00000000000000# Check for updates to GitHub Actions every week version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" tiled-1.11.90/.github/workflows/000077500000000000000000000000001470450575400163745ustar00rootroot00000000000000tiled-1.11.90/.github/workflows/codeql-analysis.yml000066400000000000000000000023551470450575400222140ustar00rootroot00000000000000name: "CodeQL" on: push: branches: [master] paths: - '**.cpp' - '**.h' - '.github/workflows/codeql-analysis.yml' pull_request: # The branches below must be a subset of the branches above branches: [master] paths: - '**.cpp' - '**.h' - '.github/workflows/codeql-analysis.yml' schedule: - cron: '0 22 * * 2' jobs: analyse: name: Analyse runs-on: ubuntu-22.04 steps: - name: Checkout repository uses: actions/checkout@v4 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 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v3 with: languages: cpp - name: Install dependencies run: | sudo apt update sudo apt install qtbase5-dev libqt5svg5-dev qttools5-dev-tools zlib1g-dev qtdeclarative5-dev qbs python3-dev - name: Setup qbs run: | qbs setup-toolchains --detect qbs config defaultProfile x86_64-linux-gnu-gcc-12 - name: Build run: qbs build - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 tiled-1.11.90/.github/workflows/docs.yml000066400000000000000000000007031470450575400200470ustar00rootroot00000000000000name: "Build Manual" on: pull_request: paths: - 'docs/**' jobs: docs: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Build documentation uses: ammaraskar/sphinx-action@6.2.1 with: docs-folder: "docs/" - name: Upload documentation uses: actions/upload-artifact@v4 with: name: Tiled-Manual-HTML path: docs/_build/html/ tiled-1.11.90/.github/workflows/macos-latest.yml000066400000000000000000000023761470450575400215230ustar00rootroot00000000000000name: 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@v4 - name: Install dependencies run: | brew install qbs - 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@v4 with: name: Tiled.app path: Tiled-*-macos.zip tiled-1.11.90/.github/workflows/packages.yml000066400000000000000000000325771470450575400207130ustar00rootroot00000000000000name: Build Packages on: push: paths-ignore: - 'docs/**' - '**.md' - 'appveyor.yml' - '.travis.yml' pull_request: paths-ignore: - 'docs/**' - '**.md' - 'appveyor.yml' - '.travis.yml' env: QBS_VERSION: 2.3.1 SENTRY_VERSION: 0.7.6 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 "version=${GITHUB_REF:11}" >> $GITHUB_OUTPUT ; fi if [[ "$TILED_RELEASE" != 'true' ]]; then echo "version=$(date "+%Y.%m.%d")" >> $GITHUB_OUTPUT ; fi echo "release=${TILED_RELEASE}" >> $GITHUB_OUTPUT linux: name: Linux (AppImage, Qt ${{ matrix.qt_version_major }}) runs-on: ubuntu-20.04 needs: version strategy: matrix: include: - qt_version: 5.15.2 qt_version_major: 5 - qt_version: 6.7.3 qt_version_major: 6 env: TILED_VERSION: ${{ needs.version.outputs.version }} QT_VERSION: ${{ matrix.qt_version }} QTCREATOR_VERSION: 13.0.2 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install dependencies run: | sudo apt update sudo apt install \ libcurl4-openssl-dev \ libgl1-mesa-dev \ libxcb-cursor0 \ libxcb-icccm4 \ libxcb-image0 \ libxcb-keysyms1 \ libxcb-randr0 \ libxcb-render-util0 \ libxcb-shape0 \ libxcb-xinerama0 \ libxkbcommon-x11-0 \ libzstd-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@v2 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 -DSENTRY_BACKEND=breakpad 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.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' continue-on-error: ${{ needs.version.outputs.release == 'false' }} env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} run: | curl -sL https://sentry.io/get-cli/ | bash sentry-cli debug-files upload --include-sources src AppDir - 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-Qt${{ matrix.qt_version_major }}-x86_64.AppImage # Avoid shipping the debug information find AppDir -name \*.debug -delete ./linuxdeploy-x86_64.AppImage --appdir AppDir --custom-apprun=dist/linux/AppRun --exclude-library "*libpython3*" --plugin qt # We don't need the bearer plugins (needed for Qt 5 only) rm -rfv AppDir/usr/plugins/bearer ./linuxdeploy-x86_64.AppImage --appdir AppDir --custom-apprun=dist/linux/AppRun --exclude-library "*libpython3*" --output appimage - name: Upload Tiled.AppImage uses: actions/upload-artifact@v4 with: name: Tiled-Qt${{ matrix.qt_version_major }}-x86_64.AppImage path: Tiled-Qt${{ matrix.qt_version_major }}-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@v4 with: fetch-depth: 0 - name: Set Tiled version id: version run: | if [[ "$TILED_RELEASE" == 'true' ]]; then echo "snap_channel=candidate" >> $GITHUB_OUTPUT ; fi if [[ "$TILED_RELEASE" != 'true' ]]; then echo "snap_channel=beta" >> $GITHUB_OUTPUT ; fi - name: Build snap id: build uses: snapcore/action-build@v1 - name: Upload snap artifact uses: actions/upload-artifact@v4 with: name: tiled_amd64.snap path: tiled_*_amd64.snap - name: Release snap (beta channel) uses: snapcore/action-publish@master if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' && (github.ref == 'refs/heads/snapshot' || needs.version.outputs.release == 'true') env: SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }} with: snap: ${{ steps.build.outputs.snap }} release: ${{ steps.version.outputs.snap_channel }} macos: name: macOS (${{ matrix.version_suffix }}) runs-on: macos-latest needs: version strategy: matrix: include: - qt_version: 5.12.12 version_suffix: "10.12-10.15" architectures: x86_64 - qt_version: 6.7.3 version_suffix: "11+" architectures: x86_64,arm64 env: TILED_VERSION: ${{ needs.version.outputs.version }} QT_VERSION: ${{ matrix.qt_version }} QTCREATOR_VERSION: 13.0.2 steps: - name: Checkout repository uses: actions/checkout@v4 - 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 release https://github.com/facebook/zstd.git pushd zstd/lib CFLAGS="-arch arm64 -arch x86_64" make libzstd.a popd - name: Build Tiled run: | qbs install --install-root install config:release qbs.architectures:${{ matrix.architectures }} qbs.installPrefix:"" projects.Tiled.staticZstd:true - name: Deploy Qt run: | macdeployqt install/Tiled.app -verbose=2 rm -f install/Tiled.app/Contents/PlugIns/tls/libqopensslbackend.dylib pushd install ruby ../dist/macos/fixup-install-names.rb - name: Create Certificate File id: certificateFile if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' uses: timheuer/base64-to-file@v1 with: fileName: 'certificate.p12' encodedString: ${{ secrets.MACOS_CERTIFICATE }} - name: Import Certificate if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' run: | security create-keychain -p ${{ secrets.KEYCHAIN_PWD }} mapeditor/tiled security default-keychain -s mapeditor/tiled security unlock-keychain -p ${{ secrets.KEYCHAIN_PWD }} mapeditor/tiled security -q import ${{ steps.certificateFile.outputs.filePath }} -f pkcs12 -k mapeditor/tiled -P ${{ secrets.MACOS_CERTIFICATE_PWD }} -T /usr/bin/codesign -x security set-key-partition-list -S 'apple-tool:,apple:' -s -k ${{ secrets.KEYCHAIN_PWD }} mapeditor/tiled - name: Sign, Notarize & Staple if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' run: | codesign --deep --force --verify --verbose --sign Lindeijer --options runtime install/Tiled.app ditto -c -k --sequesterRsrc --keepParent install/Tiled.app Tiled_for_notarization.zip xcrun notarytool submit --apple-id ${{ secrets.NOTARIZATION_USERNAME }} --password ${{ secrets.NOTARIZATION_PASSWORD }} --team-id ${{ secrets.NOTARIZATION_TEAM }} --wait Tiled_for_notarization.zip xcrun stapler staple install/Tiled.app - name: Create Archive run: | ditto -c -k --sequesterRsrc --keepParent install/Tiled.app Tiled_macOS-${{ matrix.version_suffix }}.zip - name: Upload Tiled.app uses: actions/upload-artifact@v4 with: name: Tiled_macOS-${{ matrix.version_suffix }}.app path: Tiled_macOS-${{ matrix.version_suffix }}.zip windows: name: Windows (${{ matrix.arch }}-bit, Qt ${{ matrix.qt_version_major }}) runs-on: windows-latest needs: version strategy: matrix: include: - qt_version: 5.15.2 qt_version_major: 5 qt_toolchain: win32_mingw81 arch: 32 openssl_arch: x86 mingw_version: 8.1.0 mingw_component: mingw mingw_path: /c/Qt/Tools/mingw810_32/bin - qt_version: 6.7.3 qt_version_major: 6 qt_toolchain: win64_mingw arch: 64 openssl_arch: x64 mingw_version: 9.0.0 mingw_component: mingw90 mingw_path: /c/Qt/Tools/mingw1120_64/bin env: TILED_VERSION: ${{ needs.version.outputs.version }} MINGW_PATH: ${{ matrix.mingw_path }} OPENSSL_VERSION: 1.1.1 defaults: run: shell: bash steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Qt run: | echo "QT_PATH=$(./dist/install-qt.sh --version ${{ matrix.qt_version }} --toolchain ${{ matrix.qt_toolchain }} qtbase qtdeclarative qtsvg qtimageformats qttools qttranslations)" >> $GITHUB_ENV ./dist/install-qt.sh --version ${{ matrix.mingw_version }} --toolchain win${{ matrix.arch }}_mingw ${{ matrix.mingw_component }} 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 release 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.staticZstd:true mv release/installer*/Tiled-*.msi . - name: Upload Tiled installer uses: actions/upload-artifact@v4 with: name: Tiled-win${{ matrix.arch }}.msi path: Tiled-*.msi - name: Upload Tiled archive uses: actions/upload-artifact@v4 with: name: Tiled-win${{ matrix.arch }} path: release/install-root/* github: name: Upload to GitHub releases runs-on: ubuntu-latest needs: [version, linux, macos, windows] permissions: contents: write if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' && needs.version.outputs.release == 'true' steps: - name: Download all artifacts uses: actions/download-artifact@v4 - name: Create release id: create_release uses: softprops/action-gh-release@v2 with: name: Tiled ${{ needs.version.outputs.version }} draft: true prerelease: false files: | Tiled-win64.msi/Tiled-${{ needs.version.outputs.version }}-win64.msi Tiled-win32.msi/Tiled-${{ needs.version.outputs.version }}-win32.msi Tiled-Qt5-x86_64.AppImage/Tiled-Qt5-x86_64.AppImage Tiled-Qt6-x86_64.AppImage/Tiled-Qt6-x86_64.AppImage Tiled_macOS-10.12-10.15.app/Tiled_macOS-10.12-10.15.zip Tiled_macOS-11+.app/Tiled_macOS-11+.zip sentry: name: Create Sentry release runs-on: ubuntu-latest needs: [version, linux, macos, windows] if: github.repository == 'mapeditor/tiled' && github.event_name == 'push' && needs.version.outputs.release == 'true' steps: - name: Checkout repository uses: actions/checkout@v4 - 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.11.90/.github/workflows/ubuntu-22.04.yml000066400000000000000000000016251470450575400211100ustar00rootroot00000000000000name: Compile on Ubuntu 22.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-22.04 steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup ccache uses: hendrikmuhs/ccache-action@v1 with: max-size: 250M - name: Install dependencies run: | sudo apt update sudo apt install qtbase5-dev libqt5svg5-dev qttools5-dev-tools zlib1g-dev qtdeclarative5-dev qbs python3-dev - name: Setup qbs run: | qbs --version qbs setup-toolchains --detect qbs config defaultProfile x86_64-linux-gnu-gcc-12 - name: Build run: | qbs build modules.cpp.compilerWrapper:ccache tiled-1.11.90/.github/workflows/upload-to-itch.yml000066400000000000000000000033671470450575400217610ustar00rootroot00000000000000name: Upload to itch.io on: workflow_dispatch: inputs: version: required: true type: string snapshot: required: true default: false type: boolean jobs: 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-Qt6-x86_64.AppImage prepare: chmod +x upload/Tiled-Qt6-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@v4 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: ${{ inputs.version }} run: | ITCH_CHANNEL=${{ matrix.channel }} if [[ "${{ inputs.snapshot }}" == 'true' ]]; then ITCH_CHANNEL="${ITCH_CHANNEL}-snapshot" ; fi ./butler push --userversion=${TILED_VERSION} upload thorbjorn/tiled:${ITCH_CHANNEL} tiled-1.11.90/.readthedocs.yaml000066400000000000000000000003141470450575400162240ustar00rootroot00000000000000version: 2 build: os: "ubuntu-22.04" tools: python: "3.11" sphinx: builder: dirhtml configuration: docs/conf.py formats: - pdf python: install: - requirements: docs/requirements.txt tiled-1.11.90/AUTHORS000066400000000000000000000146541470450575400140610ustar00rootroot00000000000000Main 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 Icons from the GNOME project (CC0 1.0 Universal) * src/tiled/resources/images/scalable/text-bold-symbolic.svg * src/tiled/resources/images/scalable/text-italic-symbolic.svg * src/tiled/resources/images/scalable/text-underline-symbolic.svg * src/tiled/resources/images/scalable/text-strikethrough-symbolic.svg 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.11.90/CONTRIBUTING.md000066400000000000000000000035621470450575400152360ustar00rootroot00000000000000# 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 overall 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.11.90/COPYING000066400000000000000000000016551470450575400140410ustar00rootroot00000000000000Several 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.11.90/Doxyfile000066400000000000000000000221101470450575400145010ustar00rootroot00000000000000# 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.11.90/LICENSE.APACHE000066400000000000000000000261371470450575400147350ustar00rootroot00000000000000 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.11.90/LICENSE.BSD000066400000000000000000000023041470450575400144120ustar00rootroot00000000000000Redistribution 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.11.90/LICENSE.GPL000066400000000000000000000432541470450575400144350ustar00rootroot00000000000000 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.11.90/NEWS.md000066400000000000000000003035261470450575400141060ustar00rootroot00000000000000### Unreleased * Scripting: Added `FileFormat.nameFilter` * Scripting: Added `MapEditor.currentBrushChanged` signal * Scripting: Added `tiled.cursor` to create mouse cursor values * Fixed saving/loading of custom properties set on worlds (#4025) * Fixed crash when accessing a world through a symlink (#4042) * Fixed error reporting when exporting on the command-line (by Shuhei Nagasawa, #4015) * Fixed minimum value of spinbox in Tile Animation Editor ### Tiled 1.11.0 (27 June 2024) * Added --project command-line parameter for use when exporting (#3797) * Added group layer names in "Move Object to Layer" menu (#3454) * Added lock icon to open tabs for which the file is read-only * Added Shift modifier to cut when capturing a tile stamp (by kdx2a, #3961) * Made adding "Copy" when duplicating optional and disabled by default (#3917) * Changed default shortcut for "Save As" to Ctrl+Shift+S and removed shortcut from "Save All" (#3933) * Layer names are now trimmed when edited in the UI, to avoid accidental whitespace * Scripting: Added API for working with worlds (with dogboydog, #3539) * Scripting: Added `Object.setProperty` overload for setting nested values * Scripting: Added `Tile.image` for accessing a tile's image data * Scripting: Added `Image.copy` overload that takes a rectangle * Scripting: Added `Tileset.imageFileName` and `ImageLayer.imageFileName` * Scripting: Added `FilePath.localFile` and `FileEdit.fileName` (string alternatives to `Qt.QUrl` properties) * Scripting: Added `tiled.color` to create color values * Scripting: Made `Tileset.margin` and `Tileset.tileSpacing` writable * Scripting: Restored compatibility for `MapObject.polygon` (#3845) * Scripting: Fixed issues with editing properties after setting class values from script * Scripting: Fixed setting/getting object reference values when nested as a class member * TMX format: Embedded images are now also supported on tilesets and image layers * JSON format: Fixed tile order when loading a tileset using the old format * Godot 4 plugin: Added support for exporting objects (by Rick Yorgason, #3615) * Godot 4 plugin: Use Godot 4.2 tile transformation flags (by Rick Yorgason, #3895) * Godot 4 plugin: Fixed positioning of tile collision shapes (by Ryan Petrie, #3862) * GameMaker 2 plugin: Fixed positioning of objects on isometric maps * Python plugin: Added support for implementing tileset formats (with Pablo Duboue, #3857) * Python plugin: Raised minimum Python version to 3.8 * Python plugin: Now built against Python 3.12 for Windows 10+ * tmxrasterizer: Added `--hide-object` and `--show-object` arguments (by Lars Luz, #3819) * tmxrasterizer: Added `--frames` and `--frame-duration` arguments to export animated maps as multiple images (#3868) * tmxrasterizer: Fixed `--hide/show-layer` to work on group layers (#3899) * tmxviewer: Added support for viewing JSON maps (#3866) * tmxrasterizer/viewer: Fixed loading of XML object templates (with Christian Schaadt, #3977) * AutoMapping: Ignore empty outputs per-rule (#3523) * Automapping: Added per-input-layer properties for ignoring flip flags (#3803) * AutoMapping: Always apply output sets with empty index * AutoMapping: Fixed adding of new tilesets used by applied changes * Windows: Fixed the support for WebP images (updated to Qt 6.6.1, #3661) * Fixed issues related to map and tileset reloading * Fixed possible crash after assigning to tiled.activeAsset * Fixed the option to resolve properties on export to also resolve class members (#3411, #3315) * Fixed terrain tool behavior and terrain overlays after changing terrain set type (#3204, #3260) * Fixed mouse handling issue when zooming while painting (#3863) * Fixed possible crash after a scripted tool disappears while active * Fixed updating of used tilesets after resizing map (#3884) * Fixed alignment of shortcuts in action search * Fixed object assignment buttons in tile collision editor (#3399) * AppImage: Fixed ability to open paths with spaces from the CLI (#3914) * AppImage: Updated to Sentry 0.7.6 ### Tiled 1.10.2 (4 August 2023) * Added support for setting custom properties on the project (#2903) * Added feedback when Terrain Brush and Terrain Fill Mode can't find a tile * Removed Space and Ctrl+Space shortcuts from Layers view to avoid conflict with panning (#3672) * Display the image base name for unnamed tile objects referring to single images * Scripting: Added API for editing tile layers using terrain sets (with a-morphous, #3758) * Scripting: Added file dialog API (with dogboydog, #3782) * Scripting: Support erasing tiles in Tool.preview and TileMap.merge * Scripting: Added Geometry interface with line and ellipse helpers * Scripting: Added WangSet.effectiveTypeForColor * Fixed crash when changing file property of custom class (#3783) * Fixed loading of invalid color properties (#3793) * Fixed handling of enum values with 31 flags and fixed the applied limit (#3658) * Fixed object preview position with parallax factor on group layer (#3669) * Fixed hover highlight rendering with active parallax factor (#3669) * Fixed updating of object selection outlines when changing parallax factor (#3669) * Fixed "Offset Map" action to offset all objects when choosing "Whole Map" as bounds * Fixed several issues with drawing ellipses (#3776) * Fixed Terrain Fill Mode for sets containing transitions to empty (#3774) * Godot 4 plugin: Export custom tile properties as Custom Data Layers (with Kevin Harrison, #3653) * AppImage: Updated to Sentry 0.6.5 * Qt 6: Increased the image allocation limit from 1 GB to 4 GB (#3616) * macOS: The macOS 10.14+ build is now a Universal macOS Binary (#3707) ### Tiled 1.10.1 (4 April 2023) * Make panning with Space require pressing a mouse button as well (#3626) * Scripting: Added read-only access to Project properties (by dogboydog, #3622) * Scripting: Fixed behavior of Dialog.SameWidgetRows (#3607) * Fixed object labels to adjust to application font changes * Fixed grid rendering for odd Hex Side Length values (#3623) * Fixed tile stamp getting messed up on staggered maps in some cases (#3431) * JSON plugin: Fixed loading of empty tilesets created by script (#3542) * Godot 4 plugin: Removed depth limit for `.godot` project file (#3612) * Improved Terrain Brush for Hexagonal (Staggered) maps with side length 0 (#3617) * Removed "Add Folder to Project" button from the startup page * Qt 6: Increased the image allocation limit from 128 MB to 1 GB (#3616) * Qt 6 / Linux: Fixed long startup time for some icon themes * snap: Updated from core20 to core22 (now uses Qt 5.15) * Qbs: Added projects.Tiled.libDir option (#3613) ### Tiled 1.10.0 (10 March 2023) * Restored Tiled 1.8 file format compatibility by default (#3560) * Added action search popup on Ctrl+Shift+P (with dogboydog, #3449) * Added Godot 4 export plugin (by Rick Yorgason, #3550) * Added file system actions also for tileset image based tilesets (#3448) * Added custom class option to disable drawing fill for objects (with dogboydog, #3312) * Added option to choose a custom interface font (#3589) * Implemented rendering of major grid lines for staggered / hexagonal maps (#3583) * Fixed new layer names to be always unique (by Logan Higinbotham, #3452) * Fixed broken tile images after importing/exporting a tileset * AutoMapping: Added support for output set probability (#3179) * AutoMapping: When input regions are defined, match in order by default (#3559) * AutoMapping: Skip locked layers when applying rules (#3544) * AutoMapping: Fixed NoOverlappingOutput in case of multiple output indices (#3551) * AutoMapping: Fixed automatic output regions for object output (#3473) * AutoMapping: Fixed crash on undo when output layers have properties * Scripting: Added Object.setColorProperty and Object.setFloatProperty (#3423) * Scripting: Added tiled.projectFilePath * Scripting: Added tiled.versionLessThan * Scripting: Added TileMap.toImage (#3519) * Scripting: Added Tool.targetLayerType (#3248) * Scripting: Added region.contiguousRegions() (#3576) * Scripting: Added tiled.compress and tiled.decompress (#3153) * Scripting: Added Base64 encoding and decoding API (#3153) * Scripting: Allow assigning null to Tile.objectGroup (by Logan Higinbotham, #3495) * Scripting: Allow changing the items in a combo box added to a dialog * Scripting: Fixed painting issues after changing TileLayer size (#3481) * Scripting: Renamed Tileset.collection to Tileset.isCollection (#3543) * Defold plugin: Allow overriding z value also when exporting to .collection (#3214) * Qt 6: Fixed invisible tileset tabs when only a single tileset is open * Qt 6: Fixed behavior of "Class of" selection popup * Qt 6: Fixed tile rendering when OpenGL is enabled (#3578) * Fixed positioning of point object name labels (by Logan Higinbotham, #3400) * Fixed slight drift when zooming the map view in/out * Fixed remaining lag after switching off hardware acceleration (#3584) * Fixed point object hover highlight position (#3571) * Fixed drawing lines with stamps having differently sized variations (#3533) * Fixed compile against Qt 6.4 * snap: Added Wayland platform plugin and additional image format plugins * AppImage: Updated to Sentry 0.6.0 * Updated Bulgarian, French, German, Hungarian, Russian and Swedish translations ### Tiled 1.9.2 (16 September 2022) * Allow adding maps to image collection tilesets (#3447) * Auto-detect JSON file format when importing custom types (#3472) * Added file system actions to the tile context menu (#3448) * Fixed possible crash in Custom Types Editor (#3465) * Fixed display of overridden values from a nested class * Fixed ability to reset nested string and file properties (#3409) * Fixed changing nested property values for multiple objects (#3344) * Fixed resolving of class properties on export to affect all data types (#3470) * Fixed possible duplication of Automapping Rules Tileset (#3462) * Fixed case where object labels could become visible for hidden layer (#3442) * Fixed updating of custom property colors when changing style * Scripting: Added Tileset.findTile * AutoMapping: Fixed applying of rule probability (#3425) * Defold plugin: Assign incrementing z values and allow specifying tile\_set (#3214) * Updates to German translation (by Christian Pervoelz) ### Tiled 1.9.1 (11 August 2022) * Fixed properties-related crash when having no project loaded * Fixed loading of custom tile image rectangles (#3405) * Fixed loading of member values for nested classes (#3414) * Fixed visibility of "Move Object to Layer" sub-menu (#3417) * Fixed shadow offset for other maps in a world (#3429) * Fixed class dropdown to update immediately when changing custom types (#3398) * Fixed deleting an overridden property to not make it disappear (#3409) * Scripting: Added TilesetsView.currentTilesetChanged * JSON plugin: Fixed loading image layer "repeatx/y" properties (by Jene Litsch, #3428) * snap: Fixed startup error due to missing libQt5Concurrent.so.5 (#3408) * AppImage: Updated to Sentry 0.5.0 * Updated Chinese (Simplified) and Portuguese translations ### Tiled 1.9.0 (25 June 2022) * Added option to ignore transparent pixels when selecting tile objects (#1477) * Added support for sub-images in image collection tilesets (#1008) * Added "Class" field to all data types, referring to a custom class * Added Tile Render Size and Fill Mode options to Tileset * Added %worldfile variable for custom commands (by Pixel-Nori, #3352) * Added 'New Project' action, replacing 'Save Project As' (#3279) * Added ability to load .tiled-session files from command-line * Merged Object Types with Property Types * Don't scale point objects with the zoom level (#3356) * Take into account image layer content when determining visual map size (#3386) * Scripting: Added Dialog API for building custom UI (by tileboydog, #3384) * Scripting: Added -e,--evaluate to run a script from command-line * Scripting: Added Tool.toolBarActions property (#3318) * Scripting: Added Tileset.columnCount property * Scripting: Added ImageLayer.image property * Scripting: Added access to selected terrain in tileset editor * AutoMapping: Applying rules is now 10-30x faster * AutoMapping: Explicit "regions" layers are no longer needed and have been deprecated (#1918) * AutoMapping: "AutoMap While Drawing" no longer creates separate undo steps (#2166) * AutoMapping: Custom tiles can now match "Empty", "Non-Empty" and "Other" tiles through a "MatchType" property (#3100) * AutoMapping: A custom tile with "MatchType" set to "Negate" can be used instead of "inputnot" layers * AutoMapping: Added built-in tileset with these custom rule tiles * AutoMapping: Added a number of per-rule options which can be set using rectangle objects * AutoMapping: Erase tiles by placing tiles with "MatchType" set to "Empty" on output layers (#3100) * AutoMapping: Accumulate touched layers in AutoMap While Drawing (#3313) * AutoMapping: Support map name filters in rules.txt (#3014) * AutoMapping: Show relevant custom properties when a rules map is detected * Optimized rendering of tinted layers by caching tinted images * tmxrasterizer: Added options to hide certain layer types (#3343) * Raised minimum supported Qt version from 5.6 to 5.12 (drops Windows XP support) * Raised minimum C++ version to C++17 * Removed qmake project files (only Qbs supported now) * macOS: Fixed layout of Custom Types Editor when using native style * AppImage: Updated to Sentry 0.4.18 * Python plugin: Now built against Python 3.8 on Windows and Linux * Updated Bulgarian, Czech, French and Russian translations ### Tiled 1.8.6 (15 June 2022) * Keep references between objects when copy/pasting or duplicating (#3361) * Improved default translation used in case of multiple options * Terrain Brush: Update preview on mouse release (#3381) * Fixed 'Add Variation' action in Tile Stamps context menu (#3362) * Fixed importing of removed shortcuts (#3367) * Fixed breaking of alternative shortcuts on import or reset (#3367) * Fixed conflict detection to handle alternative shortcuts (#3368) * Fixed locking up UI on property type name conflict (#3380) * Scripting: Fixed possible crash when accessing Layer.map * Defold plugins: Added support for rotated tiles (#3369) * Updates to German translation (by Ettore Atalan) ### Tiled 1.8.5 (17 May 2022) * Made expanded group layers persistent (#3282) * Improved snapping behavior for scalable objects on staggered maps * Allow setting a shortcut on the 'Edit Tileset' action * Always select first entry while using the Open File in Project action * Improved Add Property dialog layout in case of long type names (#3302) * Fixed restoring of window layout when maximized (#590) * Fixed snapping when dragging templates into a map (#3326) * Fixed map selection rectangle in world for infinite maps (#3340) * Fixed 'Merge Layer Down' action for infinite maps * Fixed several small issues in the image color picker (#3348) * Fixed missing name for undo commands that add/remove maps from world * Fixed selection issues for tile objects with a non-zero tile offset * Fixed hover indicator sometimes overlapping selection indicator * Fixed removal of terrain info when removing tiles from a collection * Scripting: Fixed region.rects when compiled against Qt 5.9 to 5.13 * Scripting: Layer.tintColor is now #ffffff when not set * macOS: Enabled support for loading SVGs * macOS: Show shortcuts in context menus when using Tiled Fusion style (#1978) * AppImage: Updated to Sentry 0.4.17 * Updated Chinese (Simplified) and Portuguese (Portugal) translations ### Tiled 1.8.4 (31 March 2022) * Fixed crash when trying to create an object * Fixed handling of deleted session file ### Tiled 1.8.3 (31 March 2022) * Improved rendering quality of the Mini-map when it's small (#1431) * Fixed automatic tool switching after deleting layers * Fixed rendering of arrows for object references in class members (#3306) * Fixed image layer repeat settings not copied to duplicates (#3307) * Fixed map bounding rectangle for infinite isometric maps * Fixed tile selection to not get removed when deleting (#3281) * Fixed custom types not being usable without opening a project (#3295) * Fixed use of custom property types in global object types file (#3301) * Fixed parallax layer positions for other maps in a world * Fixed crash when rendering invalid polygon objects * Fixed sticky Bucket Fill preview when hovering same tile * Fixed automatically reloaded map becoming the active document * Fixed "Map format '%s' not found" error * Fixed updating of "Unload/Save World" menu enabled state * Fixed flipping horizontally to not rotate objects by 180 degrees (#1704) * Fixed displacement when flipping horizontally on isometric maps (#2660) * Fixed offset of tile collision shapes on isometric maps (#3138) * Mark world as modified when map size changes (#3020) * Prevent unsaved maps from being added to a world (#3317) * Hide "Move Objects to Layer" menu when there's only one object layer * Scripting: Avoid possible crash due to garbage collection (#3290) * Scripting: Fixed missing null check in Tileset.loadFromImage and Tile.setImage * Scripting: Initialize tile layer size also when added as part of a group layer (#3291) * AutoMapping: Applying rules without "inputnot" layers is now much faster * AutoMapping: Optimized calculation of each rule's input/output region * AutoMapping: Fixed compatibility with "RegionsInput" / "RegionsOutput" layers * AutoMapping: Fixed ability to AutoMap using project rules in unsaved maps * CSV plugin: Improved error message and replace reserved characters (#3309) * terraingenerator: Fixed crash when source terrain doesn't have an image (#3299) * macOS: Fixed main window expanding with many open files (#1047) * JSON plugin: Wrap arrays at the map width or chunk width * Qt 6: Fixed captured or erased area when dragging backwards * Updated Finnish translation (by Tuomas Lähteenmäki) ### 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/mapeditor/tiled/pull/2895)) * Eraser: Added Shift to erase on all layers (by Michael Aganier, [#2897](https://github.com/mapeditor/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/mapeditor/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/mapeditor/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/mapeditor/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/mapeditor/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.11.90/README.md000066400000000000000000000122271470450575400142620ustar00rootroot00000000000000Tiled 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) Installing Tiled ------------------------------------------------------------------------------- Tiled is available for all major operating systems and can be downloaded either from [GitHub Releases](https://github.com/mapeditor/tiled/releases) or from [itch.io](https://thorbjorn.itch.io/tiled). Most Linux distributions also package Tiled, but these packages are usually out of date so you might prefer to use the AppImage or install Tiled through [Flatpak](https://flathub.org/apps/org.mapeditor.Tiled) or [snap](https://snapcraft.io/tiled), both of which are official releases. ### Signed Releases for macOS and Windows macOS builds are signed by the maintainer, Thorbjørn Lindeijer, who registered as Apple Developer. Windows installers are using free code signing provided by [SignPath.io](https://signpath.io?utm_source=foundation&utm_medium=github&utm_campaign=tiled), and a free code signing certificate by the [SignPath Foundation](https://signpath.org?utm_source=foundation&utm_medium=github&utm_campaign=tiled). Compiling Tiled ------------------------------------------------------------------------------- Before you can compile Tiled, you must ensure the Qt (>= 5.12) development libraries have been installed as well as the Qbs build tool: * On Ubuntu/Debian: `sudo apt install qtbase5-dev libqt5svg5-dev qttools5-dev-tools zlib1g-dev qtdeclarative5-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` (which automatically pulls in `qt`) 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 (not built by default) 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 Self-Compiled Tiled ------------------------------------------------------------------------------- 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.11.90/appveyor.yml000066400000000000000000000076601470450575400154000ustar00rootroot00000000000000clone_depth: 200 version: '1.11.{build}' image: - 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\6.7\msvc2019_64 PYTHONHOME: C:\Python312-x64 DEFAULT_PROFILE: MSVC2019-x64 PUSH_RELEASE: false ENABLE_ZSTD: false - QTDIR: C:\Qt\6.7\mingw_64 PYTHONHOME: C:\Python312-x64 MINGW: C:\Qt\Tools\mingw1120_64 DEFAULT_PROFILE: x86_64-w64-mingw32-gcc-11_2_0 PUSH_RELEASE: true ENABLE_ZSTD: true TILED_ITCH_CHANNEL: windows-64bit - QTDIR: C:\Qt\5.15\mingw81_32 PYTHONHOME: C:\Python38 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 configuration: Release install: - choco install -y qbs --version 2.2.1 - 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 release 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.staticZstd:%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 tiled-1.11.90/dist/000077500000000000000000000000001470450575400137425ustar00rootroot00000000000000tiled-1.11.90/dist/archive.qbs000066400000000000000000000016431470450575400160760ustar00rootroot00000000000000InstallPackage { 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.11.90/dist/distribute.qbs000066400000000000000000000267241470450575400166420ustar00rootroot00000000000000/* Installs all files necessary to run Tiled and other files that should be shipped when Tiled is distributed. */ 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 + "Concurrent" + postfix, "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 (major >= 6) { list.push( "Qt" + major + "OpenGL" + postfix, "Qt" + major + "OpenGLWidgets" + postfix ); } } 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") ? "" : project.libDir } 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 TLS Plugins" condition: Qt.core.versionMajor >= 6 && Qt.core.versionMinor >= 2; prefix: FileInfo.joinPaths(Qt.core.pluginPath, "/tls/") files: { if (qbs.targetOS.contains("windows")) { if (qbs.debugInformation) return ["qschannelbackendd.dll"]; else return ["qschannelbackend.dll"]; } else if (qbs.targetOS.contains("macos")) { return ["libqsecuretransportbackend.dylib"]; } return pluginFiles; } excludeFiles: pluginExcludeFiles qbs.install: true qbs.installDir: "plugins/tls" } 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: { return qbs.targetOS.contains("windows") && !(Qt.core.versionMajor >= 6 && Qt.core.versionMinor >= 2) && File.exists(prefix) } prefix: { if (project.openSslPath) { return project.openSslPath + "/"; } else { if (qbs.architecture === "x86_64") return "C:/OpenSSL-v111-Win64/" else return "C:/OpenSSL-v111-Win32/" } } files: { 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" ] } 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.11.90/dist/dsa_pub.pem000066400000000000000000000042521470450575400160650ustar00rootroot00000000000000-----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.11.90/dist/install-qt.sh000077500000000000000000000360251470450575400163770ustar00rootroot00000000000000#!/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://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'` function version { echo "$@" | awk -F. '{ printf("%03d%03d%03d\n", $1,$2,$3); }'; } # # 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 if [ "$(version "${VERSION}")" -ge "$(version "6.7.0")" ]; then if [ "${TOOLCHAIN}" == "gcc_64" ]; then TOOLCHAIN="linux_gcc_64" fi fi 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 } 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" ]] && [[ "${TARGET_PLATFORM}" == "desktop" ]]; 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" ANDROID_QMAKE_FILE="${UNPACK_DIR}/${VERSION}/${SUBDIR}/bin/qmake" if [ "${TOOLCHAIN}" == "android_armv7" ] && [ ! "${VERSION}" \< "6.4.2" ]; then sed -i "s/\r//" "${CONF_FILE}" sed -i "s|HostLibraryExecutables=.\/bin|HostLibraryExecutables=.\/libexec|g" "${CONF_FILE}" chmod +x "${ANDROID_QMAKE_FILE}" sed -i "s|\\\|\/|g" "${ANDROID_QMAKE_FILE}" fi sed -i "s|target|../$TOOLCHAIN|g" "${CONF_FILE}" sed -i "/HostPrefix/ s|$|gcc_64|g" "${CONF_FILE}" QMAKE_FILE="${UNPACK_DIR}/${VERSION}/gcc_64/bin/qmake" sed -i "s|\/home\/qt\/work\/install\/bin\/qmake|$QMAKE_FILE|g" "${ANDROID_QMAKE_FILE}" sed -i "s|\/Users\/qt\/work\/install\/bin\/qmake|$QMAKE_FILE|g" "${ANDROID_QMAKE_FILE}" elif [ "${TARGET_PLATFORM}" == "ios" ] && [ ! "${VERSION}" \< "6.0.0" ]; then CONF_FILE="${UNPACK_DIR}/${VERSION}/${SUBDIR}/bin/target_qt.conf" sed -i.bak "s|HostData=target|HostData=../$TOOLCHAIN|g" "${CONF_FILE}" sed -i.bak "s|HostPrefix=..\/..\/|HostPrefix=..\/..\/macos|g" "${CONF_FILE}" IOS_QMAKE_FILE="${UNPACK_DIR}/${VERSION}/${SUBDIR}/bin/qmake" QMAKE_FILE="${UNPACK_DIR}/${VERSION}/macos/bin/qmake" sed -i.bak "s|\/Users\/qt\/work\/install\/bin\/qmake|${QMAKE_FILE}|g" "${IOS_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.11.90/dist/linux/000077500000000000000000000000001470450575400151015ustar00rootroot00000000000000tiled-1.11.90/dist/linux/AppRun000066400000000000000000000024011470450575400162260ustar00rootroot00000000000000#! /usr/bin/env bash # make sure errors in sourced scripts will cause this script to stop set -e this_dir="$(readlink -f "$(dirname "$0")")" bin_dir="/usr/bin" source "$this_dir"/apprun-hooks/"linuxdeploy-plugin-qt-hook.sh" my_help() { echo "Usage (Meta):" echo echo "To run a specific sub-programm just call the AppImage" echo "with the program name as the first parameter." echo echo "Available programs:" echo '"tiled" (the main program. Default)' echo '"terraingenerator"' echo '"tmxrasterizer" (convert projects to images)' echo '"tmxviewer" (view your projects)' echo echo "Example:" echo "${0} tmxrasterizer --ignore-visibility" echo echo "Tiled help:" } case ${1} in terraingenerator) shift exec "$this_dir"/${bin_dir}/terraingenerator "$@" ;; tiled) shift exec "$this_dir"/${bin_dir}/tiled "$@" ;; tmxrasterizer) shift exec "$this_dir"/${bin_dir}/tmxrasterizer "$@" ;; tmxviewer) shift exec "$this_dir"/${bin_dir}/tmxviewer "$@" ;; "--help") my_help exec "$this_dir"/${bin_dir}/tiled "--help" ;; *) exec "$this_dir"/${bin_dir}/tiled "$@" ;; esac tiled-1.11.90/dist/linux/push-to-itch.sh000077500000000000000000000003221470450575400177610ustar00rootroot00000000000000#!/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.11.90/dist/linux/qt.conf000066400000000000000000000001061470450575400163710ustar00rootroot00000000000000[Paths] Libraries = lib Plugins = plugins Translations = translations tiled-1.11.90/dist/macos/000077500000000000000000000000001470450575400150445ustar00rootroot00000000000000tiled-1.11.90/dist/macos/fixup-install-names.rb000066400000000000000000000024621470450575400212750ustar00rootroot00000000000000#!/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/Current/#{qtlib}" "#{library}"` raise "install_name_tool error #{$?}" unless $? == 0 end end puts "Done" tiled-1.11.90/dist/macos/push-to-itch.sh000077500000000000000000000003631470450575400177310ustar00rootroot00000000000000#!/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.11.90/dist/make-dist.sh000077500000000000000000000003201470450575400161520ustar00rootroot00000000000000#!/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.11.90/dist/update-translations.sh000077500000000000000000000006531470450575400203060ustar00rootroot00000000000000# 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/tiledapp \ src/tiledquick \ src/tiledquickplugin \ src/tmxrasterizer \ src/tmxviewer \ -ts translations/*.ts tiled-1.11.90/dist/win/000077500000000000000000000000001470450575400145375ustar00rootroot00000000000000tiled-1.11.90/dist/win/Custom_InstallDir.wxs000066400000000000000000000112241470450575400207010ustar00rootroot00000000000000 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.11.90/dist/win/Custom_InstallDirDlg.wxs000066400000000000000000000044261470450575400213360ustar00rootroot00000000000000 1 tiled-1.11.90/dist/win/banner.bmp000066400000000000000000002477121470450575400165210ustar00rootroot00000000000000BMOzl: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.11.90/dist/win/dialog.bmp000066400000000000000000016060721470450575400165120ustar00rootroot00000000000000BM: 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.11.90/dist/win/gpl-2.0.rtf000066400000000000000000000400031470450575400163300ustar00rootroot00000000000000{\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.11.90/dist/win/headerimage.bmp000066400000000000000000001032621470450575400174760ustar00rootroot00000000000000BM6(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.11.90/dist/win/installer.qbs000066400000000000000000000067341470450575400172550ustar00rootroot00000000000000import 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.versionMajor >= 6 && Qt.core.versionMinor >= 7) defs.push("WindowsStylePlugin=qmodernwindowsstyle.dll") else defs.push("WindowsStylePlugin=qwindowsvistastyle.dll") var pythonHome = Environment.getEnv("PYTHONHOME"); if (pythonHome && File.exists(pythonHome)) defs.push("Python"); var rpMapEnabled = !qbs.toolchain.contains("msvc") if (rpMapEnabled) defs.push("RpMap"); if (project.openSslPath) { defs.push("OpenSsl111Dir=" + project.openSslPath); } else { var openSslDir = "C:\\OpenSSL-v111-Win" + bits if (File.exists(openSslDir)) defs.push("OpenSsl111Dir=" + 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.11.90/dist/win/installer.wxs000066400000000000000000000616641470450575400173140ustar00rootroot00000000000000 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.11.90/dist/win/push-to-itch.bat000066400000000000000000000002731470450575400175550ustar00rootroot00000000000000curl -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.11.90/dist/win/qt.conf000066400000000000000000000000661470450575400160340ustar00rootroot00000000000000[Paths] Plugins = plugins Translations = translations tiled-1.11.90/docs/000077500000000000000000000000001470450575400137275ustar00rootroot00000000000000tiled-1.11.90/docs/Makefile000066400000000000000000000012541470450575400153710ustar00rootroot00000000000000# 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) livehtml: sphinx-autobuild "$(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.11.90/docs/README.md000066400000000000000000000046551470450575400152200ustar00rootroot00000000000000# Generating the Tiled Documentation This guide covers how to generate the Tiled documentation on various platforms using a virtual environment. You'll need Python 3 installed. ## Prerequisites - Python 3 - pip (Python package installer) ## Setting Up a Virtual Environment It's recommended to use a virtual environment to isolate the project dependencies. Here's how to set it up: ### Windows 1. Open Command Prompt and navigate to the project directory. 2. Create a virtual environment named ".venv": ```cmd python -m venv .venv ``` 3. Activate the virtual environment: ```cmd .venv\Scripts\activate ``` ### Linux (Ubuntu, Fedora, RHEL, CentOS) and macOS 1. Open a terminal and navigate to the project directory. 2. Create a virtual environment named ".venv": ```bash python3 -m venv .venv ``` 3. Activate the virtual environment: ```bash source .venv/bin/activate ``` ## Installing Dependencies After activating the virtual environment, install the required packages using the `requirements.txt` file: ```bash pip install -r requirements.txt ``` ## Generating the Documentation With the virtual environment activated and dependencies installed, you can generate the documentation by running: ```bash make html ``` On Windows, use: ```cmd make.bat html ``` ## Updating Translation Files To update the translation files before tagging a new release: 1. Ensure your virtual environment is activated. 2. Generate the .pot files: ```bash make gettext ``` 3. Update the .po files for German and French: ```bash sphinx-intl update -p _build/gettext -l de -l fr ``` Note: Currently, only German and French translations are hosted. Additional languages can be added if there's sufficient interest in maintaining those translations. ## Deactivating the Virtual Environment When you're done working on the documentation, you can deactivate the virtual environment: ```bash deactivate ``` ## Requirements The `requirements.txt` file in the documentation directory specifies the required packages and their versions. If you need to view or update these requirements, you can find them in this file. Remember to activate the virtual environment each time you work on the documentation, and to update your virtual environment if `requirements.txt` changes: ```bash pip install -r requirements.txt ``` This ensures you're always using the correct versions of the dependencies for building the documentation.tiled-1.11.90/docs/_build/000077500000000000000000000000001470450575400151655ustar00rootroot00000000000000tiled-1.11.90/docs/_build/gettext/000077500000000000000000000000001470450575400166515ustar00rootroot00000000000000tiled-1.11.90/docs/_build/gettext/index.pot000066400000000000000000000017131470450575400205060ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2023, 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.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-10 11:19+0100\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 msgid "User Manual" msgstr "" #: ../../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.11.90/docs/_build/gettext/manual.pot000066400000000000000000006347471470450575400206770ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2023, 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.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-10 11:19+0100\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.md:1 msgid "Automapping" msgstr "" #: ../../manual/automapping.md:3 msgid "What is Automapping?" msgstr "" #: ../../manual/automapping.md:5 msgid "Automapping can automatically place or replace tiles based on rules you define. It looks for tiles in your working map that match each rule's input, and if it finds any, it'll place the corresponding output. This enables complex or repetitive tile placement to be entirely automated, which can make decorating your levels much faster, and can help you automatically correct mistakes." msgstr "" #: ../../manual/automapping.md:7 msgid "Automapping can be applied manually via *Map > AutoMap*, or dynamically as you draw on the map if you enable *Map > AutoMap While Drawing*." msgstr "" #: ../../manual/automapping.md:10 msgid "Automapping changed significantly in Tiled 1.9. It's 10-30x faster and setting up rules is more intuitive, but it behaves differently from the old system in some ways. Old rules should still behave the same, but you may want to take a look at the [section on updating your rules](#updating-rules). If you need help understanding your old rules, the [old documentation is available on GitHub](https://github.com/mapeditor/tiled/blob/685dbff38244776108b8ddbe669b4d8937752311/docs/manual/automapping.rst)." msgstr "" #: ../../manual/automapping.md:12 msgid "If you are making new rules, make sure you *do not* have any “regions” layers. These will enable the old Automapping system, and the rules will likely not behave as you intend." msgstr "" #: ../../manual/automapping.md:15 msgid "Setting Up the Rules File" msgstr "" #: ../../manual/automapping.md:17 msgid "Automapping rules are defined in regular map files, which we’ll call **rule maps**. These files are then referenced by a text file, usually called `rules.txt`. The `rules.txt` can list any number of rule maps, in the order in which their rules should be applied." msgstr "" #: ../../manual/automapping.md:19 msgid "There are two ways to make the rule maps defined in the `rules.txt` apply to a map:" msgstr "" #: ../../manual/automapping.md:21 msgid "{bdg-secondary-line}`Since Tiled 1.4` Open *Project > Project Properties* and set the \"Automapping rules\" property to the `rules.txt` file that you created in your project. If you have only a single rule map, you can also refer to that map file directly." msgstr "" #: ../../manual/automapping.md:22 msgid "Alternatively, you can save your `rules.txt` in the same directory as the map files to which you want the rules to apply. This can also be used to override the project-wide rules for a certain set of maps." msgstr "" #: ../../manual/automapping.md:24 msgid "Each line in the `rules.txt` file is either:" msgstr "" #: ../../manual/automapping.md:26 msgid "A path to a **rule map**." msgstr "" #: ../../manual/automapping.md:27 msgid "A path to another `.txt` file which has the same syntax (e.g. in another directory)." msgstr "" #: ../../manual/automapping.md:28 msgid "{bdg-secondary-line}`Since Tiled 1.9` A map filename filter, enclosed in `[]` and using `*` as a wildcard." msgstr "" #: ../../manual/automapping.md:29 msgid "A comment, when the line starts with `#` or `//`." msgstr "" #: ../../manual/automapping.md:31 msgid "By default, all Automapping rules will run on any map you Automap. The map filename filters let you restrict which maps rules apply to. For example, any rule maps listed after `[town*]` will only apply to maps whose filenames start with “town”. To start applying rules to all maps again, you can use `[*]`, which will match any map name." msgstr "" #: ../../manual/automapping.md:33 msgid "Setting Up a Rule Map" msgstr "" #: ../../manual/automapping.md:35 msgid "A **rule map** is a standard map file, which can be read and written by Tiled (usually in TMX or TMJ format). A rule map can define any number of rules. At a minimum, a rule map contains:" msgstr "" #: ../../manual/automapping.md:37 msgid "One or more `input` layers, describing which kind of pattern(s) the working map will be searched for." msgstr "" #: ../../manual/automapping.md:38 msgid "One or more `output` layers, describing how the working map is changed when an input pattern is found." msgstr "" #: ../../manual/automapping.md:40 msgid "In addition, custom properties on the rule map, its layers and on objects can be used to fine-tune the overall behavior or the behavior of specific rules." msgstr "" #: ../../manual/automapping.md:42 msgid "Every contiguous region of tiles on the `input` and `output` layers is a rule. Tiles are considered contiguous if they're next to each other vertically, horizontally, or diagonally (8-way connectivity). You can include many rules in one map, as long as you leave space between them. By default all the rules will match simultaneously, and apply their outputs in order from top to bottom, left to right - rules with smaller Y value come first, and if there are rules at the same Y value, then the rules with smaller X come first. If you want the rules to match in order and take previous rules' output into account, you can use the [`MatchInOrder` map property](#MatchInOrder)." msgstr "" #: ../../manual/automapping.md:44 msgid "Defining Inputs" msgstr "" #: ../../manual/automapping.md:46 msgid "The `input` layers define the pattern(s) of tiles that a rule will look for. These are Tile Layers, and their names must follow this scheme:" msgstr "" #: ../../manual/automapping.md:52 msgid "After the first underscore there will be the **name** of the target input layer. For example, `input_Ground` will look for tiles on a layer called *Ground*. The input layer name can include more underscores, so `input_test_case` will look for tiles on a layer called *test\\_case*. If the working map includes multiple layers by this name, the bottom-most one will be used. If the working map does not contain the named target layer, the rule checks against a dummy empty layer." msgstr "" #: ../../manual/automapping.md:54 msgid "The **not** is optional. If present, it inverts the layer's meaning, so instead of matching the tiles on the layer, Tiled will match anything but those tiles." msgstr "" #: ../../manual/automapping.md:56 msgid "The **index** is optional. Indices on `input` layers allow you to create rules that match any of several completely separate inputs. Any inputs with the same index are treated as part of the same condition, and each different index is its own independent set of conditions. Any of these conditions being matched will count as a match for the rule. An index can be empty, or it can be any string that doesn't start with `not` and doesn't contain any underscores." msgstr "" #: ../../manual/automapping.md:58 msgid "Multiple input layers having the same name and index is explicitly allowed and is intended. Having multiple input layers of the same name and index allows you to define different possible tiles per coordinate as input, and any combination of those tiles will count as a match." msgstr "" #: ../../manual/automapping.md:60 msgid "Input Example" msgstr "" #: ../../manual/automapping.md:62 msgid "Let's say you want to match two-tile areas of the ground, perhaps to randomise them. You might want to match any combination of grass and flower tiles, but only whole two-tile rocks. You can achieve this like so:" msgstr "" #: ../../manual/automapping.md:9 #: ../../manual/automapping.md:267 #: ../../manual/automapping.md:289 #: ../../manual/automapping.md:323 #: ../../manual/automapping.md:345 msgid "Tile Layer" msgstr "" #: ../../manual/automapping.md:9 #: ../../manual/automapping.md:267 #: ../../manual/automapping.md:289 #: ../../manual/automapping.md:323 #: ../../manual/automapping.md:345 #: ../../manual/editing-tilesets.rst:51 #: ../../manual/using-commands.rst:33 msgid "Name" msgstr "" #: ../../manual/automapping.md:9 msgid "![Two grass tiles.](images/automapping/automap_input1.png)" msgstr "" #: ../../manual/automapping.md:66 #: ../../manual/automapping.md:72 #: ../../manual/automapping.md:359 msgid "Two grass tiles." msgstr "" #: ../../manual/automapping.md:9 msgid "input**1**_Ground" msgstr "" #: ../../manual/automapping.md:9 msgid "![Two flower tiles.](images/automapping/automap_input2.png)" msgstr "" #: ../../manual/automapping.md:67 #: ../../manual/automapping.md:72 #: ../../manual/automapping.md:121 msgid "Two flower tiles." msgstr "" #: ../../manual/automapping.md:9 msgid "![Rock made out of two tiles.](images/automapping/automap_input3.png)" msgstr "" #: ../../manual/automapping.md:68 #: ../../manual/automapping.md:72 #: ../../manual/automapping.md:120 msgid "Rock made out of two tiles." msgstr "" #: ../../manual/automapping.md:9 msgid "input**2**_Ground" msgstr "" #: ../../manual/automapping.md:70 msgid "The first two layers both have the index 1, so Automapping will match any combination of those grass and flower tiles. The last layer has the index 2, so its tiles are checked separately. This means these inputs will match any part of the Ground layer that looks like any of these:" msgstr "" #: ../../manual/automapping.md:72 msgid "![Two grass tiles.](images/automapping/automap_input4.png) ![Two flower tiles.](images/automapping/automap_input5.png) ![Flower tile on the left, grass tile on the right.](images/automapping/automap_input6.png) ![Grass tile on the left, flower tile on the right.](images/automapping/automap_input7.png) ![Rock made out of two tiles.](images/automapping/automap_input8.png)" msgstr "" #: ../../manual/automapping.md:72 msgid "Flower tile on the left, grass tile on the right." msgstr "" #: ../../manual/automapping.md:72 msgid "Grass tile on the left, flower tile on the right." msgstr "" #: ../../manual/automapping.md:78 #: ../../manual/automapping.md:219 msgid "{bdg-secondary-line}`Since Tiled 1.9`" msgstr "" #: ../../manual/automapping.md:81 msgid "Matching Special Cases" msgstr "" #: ../../manual/automapping.md:83 msgid "In some cases, your tiles alone aren't enough to define the scenario you want to match. Tiled provides a built-in “Automapping Rules Tileset” to handle certain special cases, which can be added to your rule map through *Map > Add Automapping Rules Tileset*." msgstr "" #: ../../manual/automapping.md:85 msgid "[Empty]{.tile .empty}" msgstr "" #: ../../manual/automapping.md:86 msgid "This tile matches any empty cell. If used on an `output` layer, this tile will output an empty tile, allowing you to erase tiles with Automapping." msgstr "" #: ../../manual/automapping.md:88 msgid "[Ignore]{.tile .ignore}" msgstr "" #: ../../manual/automapping.md:89 msgid "This tile does not affect the rule in any way. Its only function is to allow connecting otherwise disconnected parts into a single rule, but it can also be used for clarity." msgstr "" #: ../../manual/automapping.md:91 msgid "[NonEmpty]{.tile .nonempty}" msgstr "" #: ../../manual/automapping.md:92 msgid "This tile matches any non-empty cell." msgstr "" #: ../../manual/automapping.md:94 msgid "[Other]{.tile .other}" msgstr "" #: ../../manual/automapping.md:95 msgid "This tile matches any cell, which contains a tile that is *different* from all the tiles used by the current rule targeting the same input layer. This includes empty cells, unless the Empty tile is explicitly used elsewhere by the rule (since Tiled 1.10)." msgstr "" #: ../../manual/automapping.md:97 msgid "[Negate]{.tile .negate}" msgstr "" #: ../../manual/automapping.md:98 msgid "This tile negates the condition at a specific location, making other `input` layers with the same target layer name act like inputnot and vice versa, but only in that location, which can simplify your rules in some cases." msgstr "" #: ../../manual/automapping.md:100 msgid "The meaning of these tiles is derived from their custom `MatchType` property. This means that you can set up your own tiles for matching these special cases as well!" msgstr "" #: ../../manual/automapping.md:102 msgid "Defining Outputs" msgstr "" #: ../../manual/automapping.md:104 msgid "The `output` layers define what will be output when the input of the rule matches something in the working map. These can be Tile or Object Layers, and their names must follow this scheme, which is similar to that of `input` layer names:" msgstr "" #: ../../manual/automapping.md:110 msgid "Everything after the first underscore is the **name**, which determines which layer in the working map the tiles or objects will be placed on. If the working map includes multiple layers by this name, the bottom-most one will be used. If the rule matches and the working map does not already contain the named output layer, Automapping will create the layer." msgstr "" #: ../../manual/automapping.md:112 msgid "The **index** is optional, and is not related to the input indices. Instead, output indices are used to randomize the output: every time the rule finds a match, a random output index is chosen and only the output layers with that index will have their contents placed into the working map." msgstr "" #: ../../manual/automapping.md:114 msgid "Random Output Example" msgstr "" #: ../../manual/automapping.md:116 msgid "Continuing with the example from before, you can use output layers like these to randomise the Ground layer:" msgstr "" #: ../../manual/automapping.md:9 msgid "output**1**\\_Ground" msgstr "" #: ../../manual/automapping.md:9 msgid "![Two flower tiles.](images/automapping/automap_input1.png)" msgstr "" #: ../../manual/automapping.md:9 msgid "output**2**\\_Ground" msgstr "" #: ../../manual/automapping.md:9 msgid "![Flower on the left, grass on the right.](images/automapping/automap_output1.png)" msgstr "" #: ../../manual/automapping.md:122 msgid "Flower on the left, grass on the right." msgstr "" #: ../../manual/automapping.md:9 msgid "output**3**\\_Ground" msgstr "" #: ../../manual/automapping.md:9 msgid "![Grass on the left, flower on the right.](images/automapping/automap_output2.png)" msgstr "" #: ../../manual/automapping.md:123 msgid "Grass on the left, flower on the right." msgstr "" #: ../../manual/automapping.md:9 msgid "output**4**\\_Ground" msgstr "" #: ../../manual/automapping.md:125 msgid "By default, the output of a rule is allowed to overlap previous output from the same rule, which isn't always what you want. In the example above, the output rocks can be partially overwritten by subsequent outputs from that rule. You can set the [`NoOverlappingOutput` map property](#NoOverlappingOutput) to `true` to avoid this. This will only apply to rules overlapping their own output, however - outputs from different rules will still be allowed to overlap. If you want to avoid any kind of overlap, you will need to design your inputs such that your inputs are specific enough for different rules to not overlap." msgstr "" #: ../../manual/automapping.md:130 msgid "Automap output with numerous half-rocks where different outputs overlapped each other." msgstr "" #: ../../manual/automapping.md:130 msgid "Because outputs are allowed to overlap each other and the inputs aren't very specific, the two-tile rock outputs are overlapped by subsequent outputs." msgstr "" #: ../../manual/automapping.md:136 msgid "Automap output where each rock is whole." msgstr "" #: ../../manual/automapping.md:136 msgid "With `NoOverlappingOutput` set to `true`, outputs don't overlap and all the rocks are whole." msgstr "" #: ../../manual/automapping.md:139 msgid "Sometimes, you may want certain outputs to appear more or less frequently than others. The above example would look much nicer if the flowers and rocks didn't appear quite so often. You can control the probability of an output index by setting the [`Probability`](#outputProbability) layer property on one of the layers for that index." msgstr "" #: ../../manual/automapping.md:144 msgid "Automap output where most of the ground is grass, with a few flowers and just one rock." msgstr "" #: ../../manual/automapping.md:144 msgid "Setting the `Probability` of the grass output to 20 and the `Probability` of the rock output to 0.5 produces much nicer-looking results." msgstr "" #: ../../manual/automapping.md:149 msgid "While Automapping can output Objects, there are some caveats when it comes to detecting whether they're part of a given rule's output:" msgstr "" #: ../../manual/automapping.md:151 msgid "Object rotation is not taken into account." msgstr "" #: ../../manual/automapping.md:152 msgid "Tile Objects' Object Alignment is not taken into account." msgstr "" #: ../../manual/automapping.md:153 msgid "Ellipse and Text Objects use their bounding rectangles." msgstr "" #: ../../manual/automapping.md:154 msgid "Point positions are checked *exclusively*, a Point must be within a given cell to count as part of it, merely touching the cell is not enough." msgstr "" #: ../../manual/automapping.md:155 msgid "Polygons and Polylines are checked as if they were Points at their position, the rest of the shape is not taken into account." msgstr "" #: ../../manual/automapping.md:157 msgid "You can ensure these Objects are output by putting [Ignore]{.tile .ignore} [special tiles](#specialtiles) in a tile output layer at their position. You may also need to connect this tile to the rest of the rule with more Ignore tiles to make sure it isn't treated as a separate rule." msgstr "" #: ../../manual/automapping.md:160 msgid "Any custom properties set on an output layer (other than `Probability`) will be copied to the target layer when the output is applied. You should normally not need to add any such properties to output layers, but this can be a way to automate setting properties on your layers based on their contents." msgstr "" #: ../../manual/automapping.md:162 msgid "Automapping Properties" msgstr "" #: ../../manual/automapping.md:164 msgid "The behavior of your rules can be modified by properties on the rules map, input and output layers, and on a per-rule basis using objects." msgstr "" #: ../../manual/automapping.md:166 #: ../../manual/export-gmx.rst:102 #: ../../manual/export-tscn.rst:63 msgid "Map Properties" msgstr "" #: ../../manual/automapping.md:169 msgid "DeleteTiles" msgstr "" #: ../../manual/automapping.md:170 msgid "This is a boolean map property: it can be `true` or `false`. When `true`, if rules of this rule map get applied at some location in your map, all existing tiles in the input region are deleted before applying the output. The usual way to erase tiles via Automapping is to output the [Empty]{.tile .empty} [special tile](#specialtiles), but this property can save you time your rules do a lot of deletions on certain layers." msgstr "" #: ../../manual/automapping.md:172 msgid "Despite the name, this property affects output Object Layers too, deleting any Objects that fully or partially overlap the input region of any rule that matches. This is currently the only way to delete Objects via Automapping." msgstr "" #: ../../manual/automapping.md:175 msgid "Objects are only deleted when they overlap tiles in the input region. All the caveats of outputting objects also apply, see the [warning in the Defining Outputs section](#objectRegion)." msgstr "" #: ../../manual/automapping.md:179 msgid "AutomappingRadius" msgstr "" #: ../../manual/automapping.md:180 msgid "This map property is a number: 1, 2, 3 … When using Automap While Drawing, this property determines how far beyond the tiles affected by your changes Automapping will look for matches." msgstr "" #: ../../manual/automapping.md:182 msgid "MatchOutsideMap {bdg-secondary-line}`Since Tiled 1.2`" msgstr "" #: ../../manual/automapping.md:183 msgid "This boolean 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 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.md:185 msgid "Tiled 1.0 and 1.1 behaved as if this property was `true`, whereas older versions of Tiled behaved as if this property was `false`." msgstr "" #: ../../manual/automapping.md:187 msgid "OverflowBorder {bdg-secondary-line}`Since Tiled 1.3`" msgstr "" #: ../../manual/automapping.md:188 msgid "This boolean map property customizes the behavior of 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.md:190 #: ../../manual/automapping.md:195 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.md:192 msgid "WrapBorder {bdg-secondary-line}`Since Tiled 1.3`" msgstr "" #: ../../manual/automapping.md:193 msgid "This boolean map property customizes the behavior of 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.md:197 msgid "If both `WrapBorder` and `OverflowBorder` are `true`, `WrapBorder` takes precedence over `OverflowBorder`." msgstr "" #: ../../manual/automapping.md:200 msgid "MatchInOrder {bdg-secondary-line}`Since Tiled 1.9`" msgstr "" #: ../../manual/automapping.md:201 msgid "When this boolean map property is set to `true`, each rule is applied immediately after a match is found. This disables concurrent matching of rules, but allows each rule to take into account the output of the previously applied rules (as used to be the case before Tiled 1.9)." msgstr "" #: ../../manual/automapping.md:203 msgid "Alternatively, you can split up your rules over multiple rule maps. Rule maps are always applied in order, so each rule map can rely on any modifications applied by previous rule maps." msgstr "" #: ../../manual/automapping.md:205 #: ../../manual/export-gmx.rst:126 #: ../../manual/export-tscn.rst:21 msgid "Layer Properties" msgstr "" #: ../../manual/automapping.md:207 msgid "The following properties are supported on a per-layer basis:" msgstr "" #: ../../manual/automapping.md:210 msgid "AutoEmpty (alias: StrictEmpty)" msgstr "" #: ../../manual/automapping.md:211 msgid "This boolean layer property can be added to `input` and `inputnot` layers to customize the behavior for empty tiles within a rule." msgstr "" #: ../../manual/automapping.md:213 msgid "Normally, empty tiles are simply ignored. When `AutoEmpty` is `true`, empty tiles within the input region match empty tiles in the target layer. This can only happen when you have multiple input/inputnot layers and some of the tiles that are part of the same rule are empty while others are not. Usually, using the [Empty]{.tile .empty} [special tile](#specialtiles) is the best way to specify an empty tile, but this property is useful when you have multiple input layers, some of which need to match many empty tiles. Note that the input region is defined by *all* input layers, regardless of index." msgstr "" #: ../../manual/automapping.md:216 msgid "Probability {bdg-primary}`New in Tiled 1.10`" msgstr "" #: ../../manual/automapping.md:217 msgid "This float layer property can be added to `output` layers to control the probability that a given output index will be chosen. The probabilities for each output index are relative to one another, and default to 1.0. For example, if you have outputA with probability 2 and outputB with probability 0.5, A will be chosen four times as often as B. If multiple output layers with the same index have their `Probability` set, the last (top-most) layer's probability will be used." msgstr "" #: ../../manual/automapping.md:221 msgid "Object Properties" msgstr "" #: ../../manual/automapping.md:223 msgid "A number of options can be set on individual rules, even within the same rule map. To do this, add an Object Layer to your rule map called `rule_options`. On this layer, you can create plain rectangle objects and any options you set on these objects will apply to all rules they contain." msgstr "" #: ../../manual/automapping.md:225 msgid "The following options are supported per-rule:" msgstr "" #: ../../manual/automapping.md:227 msgid "ModX" msgstr "" #: ../../manual/automapping.md:228 msgid "Only apply a rule every N tiles on the X axis (defaults to 1)." msgstr "" #: ../../manual/automapping.md:230 msgid "ModY" msgstr "" #: ../../manual/automapping.md:231 msgid "Only apply a rule every N tiles on the Y axis (defaults to 1)." msgstr "" #: ../../manual/automapping.md:233 msgid "OffsetX" msgstr "" #: ../../manual/automapping.md:234 msgid "An offset applied in combination with ModX (defaults to 0)." msgstr "" #: ../../manual/automapping.md:236 msgid "OffsetY" msgstr "" #: ../../manual/automapping.md:237 msgid "An offset applied in combination with ModY (defaults to 0)." msgstr "" #: ../../manual/automapping.md:239 #: ../../manual/editing-tilesets.rst:124 msgid "Probability" msgstr "" #: ../../manual/automapping.md:240 msgid "The chance that a rule applies at all, even if its input layers would have matched, from 0 to 1. A value of 0 effectively disables the rule, whereas a value of 1 (the default) means it is never skipped." msgstr "" #: ../../manual/automapping.md:242 msgid "Disabled" msgstr "" #: ../../manual/automapping.md:243 msgid "A convenient way to (temporarily) disable some rules (defaults to `false`)." msgstr "" #: ../../manual/automapping.md:246 msgid "NoOverlappingOutput" msgstr "" #: ../../manual/automapping.md:247 msgid "When set to `true`, the output of a rule is not allowed to overlap other outputs of the same rule (defaults to `false`)." msgstr "" #: ../../manual/automapping.md:249 msgid "All these options can also be set on the rule map itself, in which case they apply as defaults for all rules, which can then be overridden for specific rules by placing rectangle objects." msgstr "" #: ../../manual/automapping.md:251 msgid "Examples" msgstr "" #: ../../manual/automapping.md:253 msgid "RPG Cliffs" msgstr "" #: ../../manual/automapping.md:255 msgid "A common Automapping scenario is to automate the placement of cliff sides. Tilesets will often include cliff tiles like this:" msgstr "" #: ../../manual/automapping.md:257 msgid "![Tileset with cliff top tiles and cliff side tiles.](images/automapping/automap_example6.png)" msgstr "" #: ../../manual/automapping.md:257 msgid "Tileset with cliff top tiles and cliff side tiles." msgstr "" #: ../../manual/automapping.md:259 msgid "Terrains can be used to place the top of the cliff, but they cannot reliably add the vertical cliffs themselves. Fortunately, they are no problem for Automapping." msgstr "" #: ../../manual/automapping.md:264 msgid "Cliff top tiles with no sides." msgstr "" #: ../../manual/automapping.md:264 msgid "The starting map: the flat top of a cliff painted using Terrains." msgstr "" #: ../../manual/automapping.md:270 msgid "The same cliff, with sides added." msgstr "" #: ../../manual/automapping.md:270 msgid "Automapping can add the appropriate cliff tiles." msgstr "" #: ../../manual/automapping.md:273 msgid "The bottom side and bottom corners of the cliff are the only ones that need cliff tiles in this tileset, so only three rules are needed to add those. The rules are shown below, layer by layer." msgstr "" #: ../../manual/automapping.md:267 msgid "![The bottom left corner, bottom side, and bottom right corner of the cliff top.](images/automapping/automap_example3.png)" msgstr "" #: ../../manual/automapping.md:277 msgid "The bottom left corner, bottom side, and bottom right corner of the cliff top." msgstr "" #: ../../manual/automapping.md:267 #: ../../manual/automapping.md:289 #: ../../manual/automapping.md:323 msgid "input\\_Cliff" msgstr "" #: ../../manual/automapping.md:267 msgid "![Cliff tiles corresponding to the above tiles, positioned one tile lower, since they should go below the cliff top tiles.](images/automapping/automap_example4.png)" msgstr "" #: ../../manual/automapping.md:278 msgid "Cliff tiles corresponding to the above tiles, positioned one tile lower, since they should go below the cliff top tiles." msgstr "" #: ../../manual/automapping.md:267 msgid "output**1**\\_Cliff" msgstr "" #: ../../manual/automapping.md:267 msgid "![Same as above, but with a different middle tile that serves the same purpose but has different details.](images/automapping/automap_example5.png)" msgstr "" #: ../../manual/automapping.md:279 msgid "Same as above, but with a different middle tile that serves the same purpose but has different details." msgstr "" #: ../../manual/automapping.md:267 msgid "output**2**\\_Cliff" msgstr "" #: ../../manual/automapping.md:281 msgid "The two output layers differ only in which tile is output by the middle rule, the two corner output tiles are the same in both cases. These three rules get us most of the way there, but there are still some small issues:" msgstr "" #: ../../manual/automapping.md:286 msgid "The same cliff example as before, with cliffs added, but with some tiles not quite connecting correctly." msgstr "" #: ../../manual/automapping.md:286 msgid "The result of the rules above." msgstr "" #: ../../manual/automapping.md:292 msgid "The same example, with the problem tiles circled in yellow." msgstr "" #: ../../manual/automapping.md:292 msgid "The bottom corners and sides of the cliff are circled here because they should use different tiles when they're next to a cliff tile." msgstr "" #: ../../manual/automapping.md:295 msgid "This tileset includes tiles for the sides and bottom corners of the cliff top when they're next to a cliff, so you can make another rule map to place those. Since there are left and right side tiles and left and right corner tiles, you will need four rules." msgstr "" #: ../../manual/automapping.md:297 msgid "You could create rules that check for a literal cliff tiles next to these tiles, but that would require enumerating every tile that counts as a cliff - all the cosmetic variants of straight cliff section, the cliff corners, and if you're not careful, you might still miss some edge cases like two cliff sides facing each other. A simpler approach would be check whether the tile above this side or corner is a concave corner tile: if it is, then you know that the tile next to it will be something with a cliff." msgstr "" #: ../../manual/automapping.md:289 msgid "![The side and corner tiles, with matching concave corner tiles above them.](images/automapping/automap_example9.png)" msgstr "" #: ../../manual/automapping.md:301 msgid "The side and corner tiles, with matching concave corner tiles above them." msgstr "" #: ../../manual/automapping.md:289 msgid "![Different concave corner tiles.](images/automapping/automap_example10.png)" msgstr "" #: ../../manual/automapping.md:302 msgid "Different concave corner tiles." msgstr "" #: ../../manual/automapping.md:289 msgid "![The output tiles, versions of the sides and corners meant to be next to cliff tiles.](images/automapping/automap_example11.png)" msgstr "" #: ../../manual/automapping.md:303 msgid "The output tiles, versions of the sides and corners meant to be next to cliff tiles." msgstr "" #: ../../manual/automapping.md:289 #: ../../manual/automapping.md:323 msgid "output\\_Cliff" msgstr "" #: ../../manual/automapping.md:305 msgid "There is no need to repeat the side and corner tiles on the second \"input\\_Cliff\" layer, you can leave those cells empty and only include the extra input tiles that you need." msgstr "" #: ../../manual/automapping.md:307 msgid "With these additional rules in place, you should get the result shown at the top of this section: all the cliffs in place, with no transparent holes where sides and corners meet the cliffs." msgstr "" #: ../../manual/automapping.md:309 msgid "Since these rules work with a layer called \"Cliff\", they will not affect cliffs drawn on any other layers. If you want to automap cliffs on several different layers, which may be necessary if you want stacks of cliffs, you'll need to duplicate the rule map and adjust the input and output layer names." msgstr "" #: ../../manual/automapping.md:311 msgid "Automap While Drawing" msgstr "" #: ../../manual/automapping.md:313 msgid "The rules above work well if you draw your cliff tops with Terrains and then manually trigger Automapping, but what if you want to see the cliffs appear as you draw with Terrains, or want to keep drawing with Terrains after automapping manually?" msgstr "" #: ../../manual/automapping.md:318 msgid "Animation showing erasing the cliff top Terrain. The cliff top is updated correctly, but the cliff tiles are not." msgstr "" #: ../../manual/automapping.md:318 msgid "Without some extra rules, Automap While Drawing can produce messy results." msgstr "" #: ../../manual/automapping.md:321 msgid "For this, your rules will need to take into account tiles that may have previously been placed by Automapping." msgstr "" #: ../../manual/automapping.md:324 msgid "If you're using Automapping While Drawing with Terrains, it also helps for your Terrains to be aware of the tiles that may be output to that same layer by Automapping. In this example, this would mean labeling the side and corner tiles meant to be next to cliffs with the same Terrain labels as their base versions." msgstr "" #: ../../manual/automapping.md:326 msgid "This will have the side effect of making Terrains randomly output those tiles where they're not needed, but this can be remedied by setting the tile probability of those tiles to 0 in the Tileset Editor. If you *always* use those Terrains with Automapping, you can also just let Automapping fix the tiles." msgstr "" #: ../../manual/automapping.md:329 msgid "There are two approaches you can take to make your Automapping rules take its own output into account:" msgstr "" #: ../../manual/automapping.md:331 msgid "Include those tiles as alternate inputs in all the rules, or" msgstr "" #: ../../manual/automapping.md:332 msgid "Make another set of rules to reset all the alternate tiles to a uniform condition." msgstr "" #: ../../manual/automapping.md:334 msgid "The appropriate option will depend on your specific rules. In this case, the latter is simpler: all you have to do is erase any cliff tiles, and replace the variants meant to be placed next to cliffs with their basic versions. For this purpose, you should create another rule map, and place it *before* the other rules in your `rules.txt`, so that it can prepare the map for those other rules. The actual rules are just simple substitutions:" msgstr "" #: ../../manual/automapping.md:323 msgid "![The different cliff tiles in a row above, and the cliff variants of side and corner tiles in a row below.](images/automapping/automap_example12.png)" msgstr "" #: ../../manual/automapping.md:338 msgid "The different cliff tiles in a row above, and the cliff variants of side and corner tiles in a row below." msgstr "" #: ../../manual/automapping.md:323 msgid "![Red-outlined Empty tiles in the row above, and the basic variants of the side and corner tiles in the row below.](images/automapping/automap_example13.png)" msgstr "" #: ../../manual/automapping.md:339 msgid "Red-outlined Empty tiles in the row above, and the basic variants of the side and corner tiles in the row below." msgstr "" #: ../../manual/automapping.md:341 msgid "The output tiles in the top row are the [Empty]{.tile .empty} [special tile](#specialtiles), which means the output will erase those tiles." msgstr "" #: ../../manual/automapping.md:343 msgid "For Automap While Drawing to work correctly, you may also need to increase the [`AutomappingRadius`](#AutomappingRadius) property of your rules maps. This is because some of the rules may look only at tiles *near* the ones you change by drawing, such as the rules that erase cliff tiles. In this example, you will probably need to set the `AutomappingRadius` to 1 on the reset rules and on the rules that add cliffs." msgstr "" #: ../../manual/automapping.md:348 msgid "Animation showing erasing the cliff top Terrain. This time, everything is updated correctly." msgstr "" #: ../../manual/automapping.md:348 msgid "Now, Automap While Drawing produces correct results." msgstr "" #: ../../manual/automapping.md:352 msgid "Sidescroller Details" msgstr "" #: ../../manual/automapping.md:354 msgid "You can use Automapping to add various details to your maps. This small example shows adding foreground details to a sidescroller platforms. This tileset features a number of platform tiles, some of which have rocky tops, and some of which have grassy tops. These two rules will add random grass and flower decorations to a different layer corresponding to the grassy-topped tiles, and delete any decorations that end up on top of non-grassy tiles. There are many input layers, because there are many grassy-topped tiles to check." msgstr "" #: ../../manual/automapping.md:345 msgid "![Two rock-grass transition tiles.](images/automapping/automap_example16.png)" msgstr "" #: ../../manual/automapping.md:358 msgid "Two rock-grass transition tiles." msgstr "" #: ../../manual/automapping.md:345 msgid "input\\_Platform" msgstr "" #: ../../manual/automapping.md:345 msgid "![Two grass tiles.](images/automapping/automap_example17.png)" msgstr "" #: ../../manual/automapping.md:345 msgid "![Two grass-rock transition tiles.](images/automapping/automap_example18.png)" msgstr "" #: ../../manual/automapping.md:360 msgid "Two grass-rock transition tiles." msgstr "" #: ../../manual/automapping.md:345 msgid "![Two left grass corner tile.](images/automapping/automap_example19.png)" msgstr "" #: ../../manual/automapping.md:361 msgid "Two left grass corner tile." msgstr "" #: ../../manual/automapping.md:345 msgid "![Two light grass corner tile.](images/automapping/automap_example20.png)" msgstr "" #: ../../manual/automapping.md:362 msgid "Two light grass corner tile." msgstr "" #: ../../manual/automapping.md:345 msgid "![Nothing in the first rule, Negate tile in the second rule.](images/automapping/automap_example21.png)" msgstr "" #: ../../manual/automapping.md:363 msgid "Nothing in the first rule, Negate tile in the second rule." msgstr "" #: ../../manual/automapping.md:345 msgid "![Flower detail tile in the first rule, Empty tile in the second.](images/automapping/automap_example22.png)" msgstr "" #: ../../manual/automapping.md:364 msgid "Flower detail tile in the first rule, Empty tile in the second." msgstr "" #: ../../manual/automapping.md:345 msgid "outputA\\_Foreground" msgstr "" #: ../../manual/automapping.md:345 msgid "![Grass detail tile in the first rule, Empty tile in the second.](images/automapping/automap_example23.png)" msgstr "" #: ../../manual/automapping.md:365 msgid "Grass detail tile in the first rule, Empty tile in the second." msgstr "" #: ../../manual/automapping.md:345 msgid "outputB\\_Foreground" msgstr "" #: ../../manual/automapping.md:345 msgid "![Two Empty tiles.](images/automapping/automap_example24.png)" msgstr "" #: ../../manual/automapping.md:366 msgid "Two Empty tiles." msgstr "" #: ../../manual/automapping.md:345 msgid "outputC\\_Foreground" msgstr "" #: ../../manual/automapping.md:368 msgid "The inputs for these rules are identical except for the last input layer, in which the second rule, which deletes the foreground detail tiles, has the [Negate]{.tile .negate} [special tile](#specialtiles). This turns makes all those `input` layers act like `inputnot` layers, but only in that specific location. This means the first rule matches whenever it encounters any of those grassy-topped tiles, while the second rule matches whenever it encounters *anything other* than those grassy-topped tiles. The second rule could've also been made with a bunch of `inputnot` layers instead, but using the Negate tile reduces how many layers this rule map needs, and it's easier to see that the input tiles are negated when the layers are all viewed together:" msgstr "" #: ../../manual/automapping.md:370 msgid "![The two rules with both inputs and outputs visible, but the second rule has a negation sign over its platform tiles.](images/automapping/automap_example25.png)" msgstr "" #: ../../manual/automapping.md:370 msgid "The two rules with both inputs and outputs visible, but the second rule has a negation sign over its platform tiles." msgstr "" #: ../../manual/automapping.md:372 msgid "The three outputs select a random foreground detail for the first rule, and are all Empty for the second rule. One of the outputs for the first rule is also Empty, just for extra variety." msgstr "" #: ../../manual/automapping.md:377 msgid "Platforms with grass and flowers over some of the grassy tiles." msgstr "" #: ../../manual/automapping.md:377 msgid "A result from the two rules above." msgstr "" #: ../../manual/automapping.md:381 msgid "Updating Legacy Rules" msgstr "" #: ../../manual/automapping.md:383 msgid "If you have some Automapping rules from before Tiled 1.9, they should still work much as they always did in most cases. When Tiled sees that a rule map contains `regions` layers, it will automatically bring back the old behavior - rules will be matched in order by default, and cells within input regions that are empty in all the input layers for a given layer and index will be treated as \"Other\"." msgstr "" #: ../../manual/automapping.md:386 msgid "In Tiled 1.9.x, the presense of `regions` layers did not imply `MatchInOrder`. If you're using 1.9.x rather than 1.10+ and want to use legacy rules, you'll need to set the `MatchInOrder` map property to ``true``." msgstr "" #: ../../manual/automapping.md:389 msgid "If you'd like to instead update your rules to not rely on any legacy behavior, that can be as simple as deleting your `regions` layer(s), or it might take some extra work, depending on how exactly your rules are set up:" msgstr "" #: ../../manual/automapping.md:391 msgid "If your rules rely on being applied in a set order, set the [`MatchInOrder` map property](#MatchInOrder) to `true`." msgstr "" #: ../../manual/automapping.md:392 msgid "When deleting your `regions` layers, make sure you weren't relying on them to connect otherwise disconnected areas of tiles. If you were, use the [Ignore]{.tile .ignore} [special tile](#specialtiles) to connect them on one of the `input` layers, so that Tiled knows they're part of the same rule. To make sure the rules behave exactly the same, fill in any part that was previously part of the input region." msgstr "" #: ../../manual/automapping.md:394 msgid "If were using the [`DeleteTiles` map property](#DeleteTiles) to erase tiles from the output layer, you can keep using this property. If you want to make your rule more visually clear, however, you should unset the `DeleteTiles` map property, and instead use the [Empty]{.tile .empty} [special tile](#specialtiles) in all the output cells you want to delete from." msgstr "" #: ../../manual/automapping.md:396 msgid "If were using the [`StrictEmpty` map property](#AutoEmpty) to look for empty input tiles, you should now use the Empty special tile instead in the cells you want to check for being empty. You can also continue use the `StrictEmpty` property (or its newer alias, `AutoEmpty`), as long as at least one other input layer is not empty at those locations." msgstr "" #: ../../manual/automapping.md:398 msgid "If were relying on the behavior that any tile which is left empty on all of the input layers for a given index is treated as “any tile not in this rule”, you should instead use the [Other]{.tile .other} [special tile](#specialtiles) at those locations, and also the [Empty]{.tile .empty} [special tile](#specialtiles) on an inputnot layer at those same locations. The Empty tile is needed because old-style Other never matched Empty, but the MatchType Other tile does match Empty." msgstr "" #: ../../manual/automapping.md:401 msgid "Credits" msgstr "" #: ../../manual/automapping.md:403 msgid "The [Sidescroller Details](#sidescroller-details) example uses art from [A platformer in the forest](https://opengameart.org/content/a-platformer-in-the-forest) by Buch." msgstr "" #: ../../manual/custom-properties.rst:2 #: ../../manual/export-defold.rst:18 #: ../../manual/export-defold.rst:53 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. It also supports multi-selection, for changing the properties of many objects at once." 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. 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 "Custom Types" msgstr "" #: ../../manual/custom-properties.rst:61 msgid "In addition to the basic property types listed above, you can define custom types in your project. Tiled supports :ref:`custom enums ` and :ref:`custom classes `." msgstr "" #: ../../manual/custom-properties.rst:68 msgid "Custom Types Editor" msgstr "" #: ../../manual/custom-properties.rst:72 msgid "These types are automatically saved in the :doc:`project file `. Hence you need to create a project, before you can set up your custom types." msgstr "" #: ../../manual/custom-properties.rst:79 msgid "Custom Enums" msgstr "" #: ../../manual/custom-properties.rst:81 msgid "An enum is useful if you want to limit the options for a certain property to a fixed set of values." msgstr "" #: ../../manual/custom-properties.rst:84 msgid "An enum also defines how its value is saved. It can be saved as a string, saving one of its values directly. Alternatively it can be saved as a number, the index of the current value in the list of values. The former is more readable whereas the latter could easier and more efficient to load." msgstr "" #: ../../manual/custom-properties.rst:89 msgid "Finally, an enum can also allow multiple values to be chosen. In this case each option is displayed with checkbox. When saving as string, a comma-separated list is used and when saving as number the selected indexes are encoded as bitflags." msgstr "" #: ../../manual/custom-properties.rst:97 msgid "Custom Classes" msgstr "" #: ../../manual/custom-properties.rst:99 msgid "A class is useful if you want to be able to add a set of properties at once, with predefined defaults. It can also prevent excessive prefixing of property names. Classes can have members referring to other classes." msgstr "" #: ../../manual/custom-properties.rst:109 msgid "Each data type has a \"Class\" property, which can be used to refer to a custom class. The members of this class will then be directly available as custom properties of that instance (before Tiled 1.9, this feature was only available for objects and tiles as the \"Type\" property)." msgstr "" #: ../../manual/custom-properties.rst:114 msgid "Each class can also have a custom color, which is used to make objects more recognizable. The class color is used when rendering shape objects, object name labels and connections between objects." msgstr "" #: ../../manual/custom-properties.rst:118 msgid "In the :doc:`JSON ` and :ref:`Lua ` file formats, custom class properties used as property values are saved using the native object and table constructs." msgstr "" #: ../../manual/custom-properties.rst:129 msgid "Tile Property Inheritance" msgstr "" #: ../../manual/custom-properties.rst:131 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:137 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:148 msgid "Typed Tiles" msgstr "" #: ../../manual/custom-properties.rst:150 msgid "If you're using :ref:`tile objects `, you can set the class on the tile to avoid having to set it on each object instance. Setting the class 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:157 msgid "An example use-case for this would be to define custom classes 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:-1 #: ../../manual/editing-tilesets.rst:-1 #: ../../manual/layers.rst:-1 #: ../../manual/objects.rst:-1 #: ../../manual/projects.rst:-1 #: ../../manual/using-templates.rst:-1 msgid "Future Extensions" msgstr "" #: ../../manual/custom-properties.rst:166 msgid "There are several types of custom properties I'd like to add:" msgstr "" #: ../../manual/custom-properties.rst:168 msgid "**Customized basic properties**, where you can set properties like the minimum or maximum value, the precision or a different default value." msgstr "" #: ../../manual/custom-properties.rst:171 msgid "**Array properties**, which would be properties having a list of values (`#1493 `__)." msgstr "" #: ../../manual/custom-properties.rst:174 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:179 #: ../../manual/editing-tilesets.rst:247 #: ../../manual/layers.rst:228 #: ../../manual/objects.rst:383 #: ../../manual/projects.rst:84 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:178 msgid "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:184 #: ../../manual/terrain.rst:351 msgid "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:183 msgid "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:177 msgid "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:176 msgid "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:179 msgid "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:180 msgid "stock-tool-rect-select" 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:182 msgid "stock-tool-fuzzy-select-22" 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:181 msgid "stock-tool-by-color-select" 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:89 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 #: ../../manual/export-tscn.rst:50 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 "Class" msgstr "" #: ../../manual/editing-tilesets.rst:115 msgid "This property refers to custom classes defined in the :ref:`Custom 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: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:217 msgid "tile-collision-editor-icon" 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 "Showing Tile Collision on the Map" 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:221 msgid "tile-animation-editor-icon" 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 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:34 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:20 msgid "The ``tile_set`` property of the Tile Map can be set by adding a custom string property to the map named \"tile_set\" (case sensitive). If left empty, it will need to be set up in Defold after each export." msgstr "" #: ../../manual/export-defold.rst:24 msgid "A custom float property named \"z\" can be added to set the ``z`` value for each tile layer. By default, the layers will be exported with incrementing z values, so you only need to set this property in case you need to customize the rendering order." msgstr "" #: ../../manual/export-defold.rst:34 msgid "defoldcollection" msgstr "" #: ../../manual/export-defold.rst:36 msgid "This plugin exports a map to a `Defold Collection `__ (\\*.collection), while also creating multiple .tilemap files." msgstr "" #: ../../manual/export-defold.rst:40 msgid "It supports:" msgstr "" #: ../../manual/export-defold.rst:42 msgid "Group layers (**only top-level group layers are supported, not nested ones!**)" msgstr "" #: ../../manual/export-defold.rst:43 msgid "Multiple Tilesets per Tilemap" msgstr "" #: ../../manual/export-defold.rst:45 msgid "The plugin automatically assigns a Z-index to each layer ranging between 0 and 0.1. It 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-defold.rst:55 msgid "The ``tile_set`` property of each tilemap 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:61 msgid "Alternatively, a custom string property called \"tilesource\" (case-sensitive) can be added to the *tileset*, which will then be used instead (since Tiled 1.9.2)." msgstr "" #: ../../manual/export-defold.rst:65 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:74 msgid "A custom float property named \"z\" can be added to tile layers to manually specify their ``z`` value." 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:30 msgid "The tiles are referenced using :doc:`/reference/global-tile-ids`, as done in the :doc:`TMX ` and :doc:`JSON ` formats." msgstr "" #: ../../manual/export-generic.rst:35 msgid "CSV" msgstr "" #: ../../manual/export-generic.rst:37 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:41 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:46 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:128 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:104 msgid "float ``scaleX`` (default: derived from tile or 1.0)" msgstr "" #: ../../manual/export-gmx.rst:37 #: ../../manual/export-yy.rst:105 msgid "float ``scaleY`` (default: derived from tile or 1.0)" msgstr "" #: ../../manual/export-gmx.rst:38 #: ../../manual/export-yy.rst:107 msgid "int ``originX`` (default: 0)" msgstr "" #: ../../manual/export-gmx.rst:39 #: ../../manual/export-yy.rst:108 msgid "int ``originY`` (default: 0)" msgstr "" #: ../../manual/export-gmx.rst:41 #: ../../manual/export-yy.rst:111 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:292 msgid "Views" msgstr "" #: ../../manual/export-gmx.rst:-1 msgid "GameMaker View Settings" 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:300 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:314 msgid "int ``xport`` (default: 0)" msgstr "" #: ../../manual/export-gmx.rst:81 #: ../../manual/export-yy.rst:315 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:317 msgid "int ``hport`` (default: 768)" msgstr "" #: ../../manual/export-gmx.rst:85 #: ../../manual/export-yy.rst:319 msgid "**Object following**" msgstr "" #: ../../manual/export-gmx.rst:87 msgid "string ``objName``" msgstr "" #: ../../manual/export-gmx.rst:88 #: ../../manual/export-yy.rst:322 msgid "int ``hborder`` (default: 32)" msgstr "" #: ../../manual/export-gmx.rst:89 #: ../../manual/export-yy.rst:323 msgid "int ``vborder`` (default: 32)" msgstr "" #: ../../manual/export-gmx.rst:90 #: ../../manual/export-yy.rst:324 msgid "int ``hspeed`` (default: -1)" msgstr "" #: ../../manual/export-gmx.rst:91 #: ../../manual/export-yy.rst:325 msgid "int ``vspeed`` (default: -1)" msgstr "" #: ../../manual/export-gmx.rst:95 #: ../../manual/export-yy.rst:329 msgid "When you're defining views in Tiled, it is useful to add ``view`` as class in the :ref:`Custom 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:222 #: ../../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:238 msgid "bool ``persistent`` (default: false)" msgstr "" #: ../../manual/export-gmx.rst:109 #: ../../manual/export-yy.rst:239 msgid "bool ``clearDisplayBuffer`` (default: true)" msgstr "" #: ../../manual/export-gmx.rst:110 #: ../../manual/export-yy.rst:253 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:261 msgid "Physics" msgstr "" #: ../../manual/export-gmx.rst:116 #: ../../manual/export-yy.rst:264 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:265 msgid "float ``PhysicsWorldGravityX`` (default: 0.0)" msgstr "" #: ../../manual/export-gmx.rst:122 #: ../../manual/export-yy.rst:266 msgid "float ``PhysicsWorldGravityY`` (default: 10.0)" msgstr "" #: ../../manual/export-gmx.rst:123 #: ../../manual/export-yy.rst:267 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-tbin.rst:29 msgid "One of the farm maps from Stardew Valley opened in Tiled." msgstr "" #: ../../manual/export-tscn.rst:8 msgid "Godot 4" msgstr "" #: ../../manual/export-tscn.rst:10 msgid "Godot 4 revamped its TileMap node, and Tiled ships with a plugin to export maps in this format. For exporting to Godot 3, see the `Tiled To Godot Export `__ extension." msgstr "" #: ../../manual/export-tscn.rst:14 msgid "The Godot 4 exporter assumes that the generated ``.tscn`` files and the tileset artwork all share the same file hierarchy. The exporter will search for a common parent folder containing a ``.godot`` project file and use that folder as the ``res://`` root for the project. The exporter will search at least two parent folders for a ``.godot`` file." msgstr "" #: ../../manual/export-tscn.rst:23 #: ../../manual/export-yy.rst:338 msgid "All layer types support the following custom properties:" msgstr "" #: ../../manual/export-tscn.rst:25 msgid "bool ``ySortEnabled`` (default: false)" msgstr "" #: ../../manual/export-tscn.rst:26 msgid "int ``zIndex`` (default: 0)" msgstr "" #: ../../manual/export-tscn.rst:27 #: ../../manual/export-yy.rst:343 msgid "bool ``noExport`` (default: false)" msgstr "" #: ../../manual/export-tscn.rst:28 msgid "bool ``tilesetOnly`` (default: blank)" msgstr "" #: ../../manual/export-tscn.rst:30 msgid "The ``ySortEnabled`` property can be used to change the drawing order to allow sprites to be drawn behind tiles based on their Y coordinate." msgstr "" #: ../../manual/export-tscn.rst:33 msgid "The ``zIndex`` property can be used to assign a specific depth value to a layer." msgstr "" #: ../../manual/export-tscn.rst:36 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 Godot. Note that any views defined on this layer will then also get ignored." msgstr "" #: ../../manual/export-tscn.rst:42 msgid "The ``tilesetOnly`` property can be used if you want to export all the tilesets used in this layer, without actually exporting the layer itself. By default, the exporter will only export tilesets which are actually used in the map, so this property allows you to export tilesets that normally would otherwise get skipped. This is most useful in combination with the :ref:`tilesetResPath property `." msgstr "" #: ../../manual/export-tscn.rst:52 msgid "Tilesets support the following property:" msgstr "" #: ../../manual/export-tscn.rst:54 msgid "bool ``exportAlternates`` (default: false)" msgstr "" #: ../../manual/export-tscn.rst:56 msgid "The ``exportAlternates`` property is necessary when using flipped or rotated tiles. This will create 7 alternate tiles for each tile, allowing all flipped and rotation combinations." msgstr "" #: ../../manual/export-tscn.rst:65 msgid "Maps support the following custom property:" msgstr "" #: ../../manual/export-tscn.rst:67 msgid "string ``tilesetResPath`` (default: blank)" msgstr "" #: ../../manual/export-tscn.rst:69 msgid "The ``tilesetResPath`` property saves the tileset to an external .tres file, allowing it to be shared between multiple maps more efficiently. This path must be in the form of 'res://.tres'. The tileset file will be overwritten every time the map is exported." msgstr "" #: ../../manual/export-tscn.rst:76 msgid "Only tilesets that are used in the current map will be exported. You must ensure that every map which uses the same ``.tres`` file also uses *all* of the same tilesets. You may wish to create a layer with the ``tilesetOnly`` property to ensure the correct tilesets are exported." msgstr "" #: ../../manual/export-tscn.rst:82 msgid "Limitations" msgstr "" #: ../../manual/export-tscn.rst:84 msgid "The Godot 4 exporter does not currently support collection of images tilesets, object layers, or image layers." msgstr "" #: ../../manual/export-tscn.rst:86 msgid "Godot's hexagonal maps only support :ref:`hex side lengths ` that are exactly half the tile height. So if, for example, your tile height is 16, then your hex side length must be 8." msgstr "" #: ../../manual/export-tscn.rst:89 msgid "Godot's hexagonal maps do not support 120° tile rotations." msgstr "" #: ../../manual/export-tscn.rst:90 msgid "Animations frames must strictly go from left-to-right and top-to-bottom, without skipping any frames, and animation frames may not be used for anything else." 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 overwrite an already existing ``room.yy`` file." msgstr "" #: ../../manual/export-yy.rst:27 msgid "Starting with Tiled 1.8, it is no longer necessary to deactivate the \"Use safe writing of files\" option, since the GameMaker export now ignores it to avoid reload issues in GameMaker." msgstr "" #: ../../manual/export-yy.rst:34 msgid "References to Existing Assets" msgstr "" #: ../../manual/export-yy.rst:36 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:40 msgid "For sprites, the sprite name is derived by looking for a ``*.yy`` file in the directory of the image file and up to two parent directories. If such a file is found, it is assumed to be the associated meta file and its name without the file extension is used. If no ``*.yy`` file can be found, the name of the image file without its file extension is used." msgstr "" #: ../../manual/export-yy.rst:47 msgid "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:51 msgid "For tilesets, the tileset name entered in Tiled must match the name of the tileset asset in GameMaker." msgstr "" #: ../../manual/export-yy.rst:54 msgid "For object instances, the name of the object should be set in the *Type* field." msgstr "" #: ../../manual/export-yy.rst:58 msgid "Exporting a Tiled Map" msgstr "" #: ../../manual/export-yy.rst:60 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:66 #: ../../manual/layers.rst:33 msgid "Tile Layers" msgstr "" #: ../../manual/export-yy.rst:68 msgid "When possible, a tile layer will get exported as a tile layer." msgstr "" #: ../../manual/export-yy.rst:70 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:74 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:79 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:85 #: ../../manual/layers.rst:55 msgid "Object Layers" msgstr "" #: ../../manual/export-yy.rst:87 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:91 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:96 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:100 msgid "The following custom properties can be set on objects to affect the exported instance or sprite asset:" msgstr "" #: ../../manual/export-yy.rst:103 msgid "color ``colour`` (default: based on layer tint color)" msgstr "" #: ../../manual/export-yy.rst:106 msgid "bool ``inheritItemSettings`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:109 msgid "bool ``ignore`` (default: whether the object is hidden)" msgstr "" #: ../../manual/export-yy.rst:116 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:123 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:130 msgid "The following additional custom properties can be set on objects that are exported as object instances:" msgstr "" #: ../../manual/export-yy.rst:133 msgid "bool ``hasCreationCode`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:134 msgid "int ``imageIndex`` (default: 0)" msgstr "" #: ../../manual/export-yy.rst:135 msgid "float ``imageSpeed`` (default: 1.0)" msgstr "" #: ../../manual/export-yy.rst:136 msgid "int ``creationOrder`` (default: 0)" msgstr "" #: ../../manual/export-yy.rst:138 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:142 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:148 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:154 msgid "As of now only variable definitions of the object itself can be overridden. 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:160 msgid "Tile Graphics" msgstr "" #: ../../manual/export-yy.rst:162 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:165 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:171 msgid "Sprite Graphics" msgstr "" #: ../../manual/export-yy.rst:173 msgid "The following additional custom properties can be set on objects that are exported as sprite graphics:" msgstr "" #: ../../manual/export-yy.rst:176 msgid "float ``headPosition`` (default: 0.0)" msgstr "" #: ../../manual/export-yy.rst:177 msgid "float ``animationSpeed`` (default: 1.0)" msgstr "" #: ../../manual/export-yy.rst:182 #: ../../manual/layers.rst:96 msgid "Image Layers" msgstr "" #: ../../manual/export-yy.rst:184 msgid "Image layers are exported as background layers." msgstr "" #: ../../manual/export-yy.rst:186 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:190 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:194 msgid "The following custom properties can be set on image layers to affect the exported background layers:" msgstr "" #: ../../manual/export-yy.rst:197 #: ../../manual/export-yy.rst:277 msgid "string ``sprite`` (default: based on image filename)" msgstr "" #: ../../manual/export-yy.rst:198 msgid "bool ``htiled`` (default: value of Repeat X property)" msgstr "" #: ../../manual/export-yy.rst:199 msgid "bool ``vtiled`` (default: value of Repeat Y property)" msgstr "" #: ../../manual/export-yy.rst:200 msgid "bool ``stretch`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:201 msgid "float ``hspeed`` (default: 0.0)" msgstr "" #: ../../manual/export-yy.rst:202 msgid "float ``vspeed`` (default: 0.0)" msgstr "" #: ../../manual/export-yy.rst:203 msgid "float ``animationFPS`` (default: 15.0)" msgstr "" #: ../../manual/export-yy.rst:204 msgid "int ``animationSpeedtype`` (default: 0)" msgstr "" #: ../../manual/export-yy.rst:206 msgid "Even though the custom properties such as ``hspeed`` and ``vspeed`` have no visual effect inside Tiled you will see the effect in the exported room inside GameMaker." msgstr "" #: ../../manual/export-yy.rst:211 msgid "Special Cases and Custom Properties" msgstr "" #: ../../manual/export-yy.rst:214 msgid "Rooms" msgstr "" #: ../../manual/export-yy.rst:216 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:219 msgid "The following custom properties can be set under *Map -> Map Properties*." msgstr "" #: ../../manual/export-yy.rst:224 msgid "string ``parent`` (default: \"Rooms\")" msgstr "" #: ../../manual/export-yy.rst:225 msgid "bool ``inheritLayers`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:226 msgid "string ``tags`` (default: \"\")" msgstr "" #: ../../manual/export-yy.rst:228 msgid "The ``parent`` property is used to define the parent folder inside GameMakers asset browser." msgstr "" #: ../../manual/export-yy.rst:231 msgid "The ``tags`` property is used to assign tags to the room. Multiple tags can be separated by commas." msgstr "" #: ../../manual/export-yy.rst:235 msgid "Room Settings" msgstr "" #: ../../manual/export-yy.rst:237 msgid "bool ``inheritRoomSettings`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:240 msgid "bool ``inheritCode`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:241 msgid "string ``creationCodeFile`` (default: \"\")" msgstr "" #: ../../manual/export-yy.rst:243 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:247 msgid "Viewports and Cameras" msgstr "" #: ../../manual/export-yy.rst:249 #: ../../manual/export-yy.rst:303 msgid "**General**" msgstr "" #: ../../manual/export-yy.rst:251 msgid "bool ``inheritViewSettings`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:252 msgid "bool ``enableViews`` (default: true when any \"view\" objects were found)" msgstr "" #: ../../manual/export-yy.rst:255 msgid "**Viewport 0 - Viewport 7**" msgstr "" #: ../../manual/export-yy.rst:257 msgid "You can configure up to 8 viewports by using view objects (see :ref:`yy-views`)." msgstr "" #: ../../manual/export-yy.rst:263 msgid "bool ``inheritPhysicsSettings`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:270 msgid "Sprite References" msgstr "" #: ../../manual/export-yy.rst:272 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:282 msgid "Paths" msgstr "" #: ../../manual/export-yy.rst:286 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:294 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:305 msgid "bool ``inherit`` (default: false)" msgstr "" #: ../../manual/export-yy.rst:307 msgid "**Camera Properties**" msgstr "" #: ../../manual/export-yy.rst:309 msgid "The Camera Properties are automatically derived from the position and size of the view object." msgstr "" #: ../../manual/export-yy.rst:312 msgid "**Viewport Properties**" msgstr "" #: ../../manual/export-yy.rst:316 msgid "int ``wport`` (default: 1366)" msgstr "" #: ../../manual/export-yy.rst:321 msgid "string ``objectId``" msgstr "" #: ../../manual/export-yy.rst:336 msgid "Layers" msgstr "" #: ../../manual/export-yy.rst:340 msgid "int ``depth`` (default: auto-assigned, like in GameMaker)" msgstr "" #: ../../manual/export-yy.rst:341 msgid "bool ``visible`` (default: derived from layer)" msgstr "" #: ../../manual/export-yy.rst:342 msgid "bool ``hierarchyFrozen`` (default: layer locked state)" msgstr "" #: ../../manual/export-yy.rst:345 msgid "The ``depth`` property can be used to assign a specific depth value to a layer." msgstr "" #: ../../manual/export-yy.rst:348 msgid "The ``visible`` property can be used to override the \"Visible\" state of the layer if needed." msgstr "" #: ../../manual/export-yy.rst:351 msgid "The ``hierarchyFrozen`` property can be used to override the \"Locked\" state of the layer if needed." msgstr "" #: ../../manual/export-yy.rst:354 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 :doc:`Tiled project `. This is however an entirely optional step that can be skipped when desired." msgstr "" #: ../../manual/introduction.rst:66 msgid "Choose *File -> New -> New Project...* to create a new project file. It is recommended to save this file in the root of your project. The directory in which you store the project will be automatically added, so that its files are visible in the Project view." msgstr "" #: ../../manual/introduction.rst:71 msgid "When necessary, you can add additional folders to the project or replace the one added by default. For example, you could 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:79 msgid "You can press ``Ctrl+Shift+P`` to open the action search widget, which can provide a faster way to get to actions than looking for them in the menus!" msgstr "" #: ../../manual/introduction.rst:84 msgid "Creating a New Map" msgstr "" #: ../../manual/introduction.rst:86 msgid "To create a new map, choose *File -> New -> New Map…* (``Ctrl+N``). The following dialog will pop up:" msgstr "" #: ../../manual/introduction.rst:93 msgid "New Map" msgstr "" #: ../../manual/introduction.rst:95 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:103 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:107 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:116 msgid "New Tileset" msgstr "" #: ../../manual/introduction.rst:118 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:127 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:134 msgid "After saving the tileset, Tiled should look as follows:" msgstr "" #: ../../manual/introduction.rst:139 msgid "Tileset Created" msgstr "" #: ../../manual/introduction.rst:141 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:147 msgid "Tileset Usable on the Map" msgstr "" #: ../../manual/introduction.rst:149 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:155 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 + P`` - Search for available actions" msgstr "" #: ../../manual/keyboard-shortcuts.rst:18 msgid "``Ctrl + Shift + T`` - Reopen a recently closed file" msgstr "" #: ../../manual/keyboard-shortcuts.rst:19 msgid "``Ctrl + S`` - Save current document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:20 msgid "``Ctrl + Alt + S`` - Save current document to another file" msgstr "" #: ../../manual/keyboard-shortcuts.rst:21 msgid "``Ctrl + Shift + S`` - Save all documents" msgstr "" #: ../../manual/keyboard-shortcuts.rst:22 msgid "``Ctrl + E`` - Export current document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:23 msgid "``Ctrl + Shift + E`` - Export current document to another file" msgstr "" #: ../../manual/keyboard-shortcuts.rst:24 msgid "``Ctrl + R`` - Reload current document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:25 msgid "``Ctrl + W`` - Close current document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:26 msgid "``Ctrl + Shift + W`` - Close all documents" msgstr "" #: ../../manual/keyboard-shortcuts.rst:27 msgid "``Ctrl + Q`` - Quit Tiled" msgstr "" #: ../../manual/keyboard-shortcuts.rst:28 msgid "``Ctrl + MouseWheel`` - Zoom in/out on tileset and map" msgstr "" #: ../../manual/keyboard-shortcuts.rst:29 msgid "``Ctrl + Plus/Minus`` - Zoom in/out on map" msgstr "" #: ../../manual/keyboard-shortcuts.rst:30 msgid "``Ctrl + 0`` - Reset zoom on map" msgstr "" #: ../../manual/keyboard-shortcuts.rst:31 msgid "``Ctrl + /`` - Adjust zoom to fit map in view" msgstr "" #: ../../manual/keyboard-shortcuts.rst:32 msgid "``Ctrl + Object Move`` - Toggles \"Snap to Grid\" temporarily" msgstr "" #: ../../manual/keyboard-shortcuts.rst:33 msgid "``Ctrl + Object Resize`` - Keep aspect ratio" msgstr "" #: ../../manual/keyboard-shortcuts.rst:34 msgid "``Alt + Object Resize`` - Toggles \"Snap to Grid\" temporarily" msgstr "" #: ../../manual/keyboard-shortcuts.rst:35 msgid "``Middle Click`` or ``Space Bar`` - Hold to pan the map view" msgstr "" #: ../../manual/keyboard-shortcuts.rst:36 msgid "``Ctrl + X`` - Cut (tiles, objects or properties)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:37 msgid "``Ctrl + C`` - Copy (tiles, objects or properties)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:38 msgid "``Ctrl + V`` - Paste (tiles, objects or properties)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:39 msgid "``Del`` - Delete (tiles, objects, properties or layers)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:40 msgid "``Ctrl + G`` - Toggle displaying of the tile grid" msgstr "" #: ../../manual/keyboard-shortcuts.rst:41 msgid "``H`` - Toggle highlighting of the current layer" msgstr "" #: ../../manual/keyboard-shortcuts.rst:42 msgid "``Ctrl + M`` - Invokes :doc:`automapping`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:43 msgid "``Alt + C`` - Copy current position of mouse cursor to clipboard (in tile coordinates)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:45 msgid "``Ctrl + D`` - Duplicate selected objects" msgstr "" #: ../../manual/keyboard-shortcuts.rst:46 msgid "``Ctrl + J`` - Create a new layer and copy the currently selected objects or tiles to it" msgstr "" #: ../../manual/keyboard-shortcuts.rst:47 msgid "``Ctrl + Shift + J`` - Create a new layer and move currently selected objects or tiles to it" msgstr "" #: ../../manual/keyboard-shortcuts.rst:48 msgid "``Ctrl + Shift + D`` - Duplicate selected layers" msgstr "" #: ../../manual/keyboard-shortcuts.rst:49 msgid "``F2`` - Rename (if applicable in context)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:50 msgid "``Tab`` - Hide docks and tool bars" msgstr "" #: ../../manual/keyboard-shortcuts.rst:51 msgid "``Ctrl + PgUp`` - Select previous layer (above current layer)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:52 msgid "``Ctrl + PgDown`` - Select next layer (below current layer)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:53 msgid "``Ctrl + Shift + Up`` - Move selected layers up" msgstr "" #: ../../manual/keyboard-shortcuts.rst:54 msgid "``Ctrl + Shift + Down`` - Move selected layers down" msgstr "" #: ../../manual/keyboard-shortcuts.rst:55 msgid "``Ctrl + H`` - Show/Hide selected layers" msgstr "" #: ../../manual/keyboard-shortcuts.rst:56 msgid "``Ctrl + L`` - Lock/Unlock selected layers" msgstr "" #: ../../manual/keyboard-shortcuts.rst:57 msgid "``Ctrl + Shift + H`` - Show/Hide all other layers (only active layer visible / all layers visible)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:59 msgid "``Ctrl + Shift + L`` - Lock/Unlock all other layers" msgstr "" #: ../../manual/keyboard-shortcuts.rst:60 msgid "``Ctrl + Tab`` / ``Alt + Left`` - Switch to left document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:61 msgid "``Ctrl + Shift + Tab`` / ``Alt + Right`` - Switch to right document" msgstr "" #: ../../manual/keyboard-shortcuts.rst:62 msgid "``]`` - Select next tileset" msgstr "" #: ../../manual/keyboard-shortcuts.rst:63 msgid "``[`` - Select previous tileset" msgstr "" #: ../../manual/keyboard-shortcuts.rst:64 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:66 msgid "``Ctrl + Shift + A`` - Clear any object and tile selection" msgstr "" #: ../../manual/keyboard-shortcuts.rst:69 msgid "When a tile layer is selected" msgstr "" #: ../../manual/keyboard-shortcuts.rst:71 msgid "``Right Click on Tile`` - Captures the tile under the mouse (drag to capture larger areas)." msgstr "" #: ../../manual/keyboard-shortcuts.rst:73 msgid "``Ctrl + Right Click on Tile`` - Selects the layer containing the top-most tile under the mouse." msgstr "" #: ../../manual/keyboard-shortcuts.rst:74 msgid "``D`` - Toggle Random Mode" msgstr "" #: ../../manual/keyboard-shortcuts.rst:75 msgid "``B`` - Activate :ref:`stamp-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:77 msgid "``Shift + Click`` - Line mode, places tiles on a line between two clicked locations" msgstr "" #: ../../manual/keyboard-shortcuts.rst:79 msgid "``Ctrl + Shift + Click`` - Circle mode, places tiles around the clicked center" msgstr "" #: ../../manual/keyboard-shortcuts.rst:82 msgid "``T`` - Activate :ref:`terrain-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:83 msgid "``F`` - Activate :ref:`bucket-fill-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:84 msgid "``P`` - Activate :ref:`shape-fill-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:85 msgid "``E`` - Activate :ref:`eraser-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:86 msgid "``R`` - Activate Rectangular Select" msgstr "" #: ../../manual/keyboard-shortcuts.rst:87 msgid "``W`` - Activate Magic Wand" msgstr "" #: ../../manual/keyboard-shortcuts.rst:88 msgid "``S`` - Activate Select Same Tile" msgstr "" #: ../../manual/keyboard-shortcuts.rst:92 msgid "``1-9`` - Recall a previously stored tile stamp (similar to ``Ctrl + V``)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:93 msgid "``Ctrl + A`` - Select the whole layer" msgstr "" #: ../../manual/keyboard-shortcuts.rst:95 msgid "Changing the active stamp:" msgstr "" #: ../../manual/keyboard-shortcuts.rst:97 msgid "``X`` - Flip active stamp horizontally" msgstr "" #: ../../manual/keyboard-shortcuts.rst:98 msgid "``Y`` - Flip active stamp vertically" msgstr "" #: ../../manual/keyboard-shortcuts.rst:99 msgid "``Z`` - Rotate active stamp clockwise" msgstr "" #: ../../manual/keyboard-shortcuts.rst:100 msgid "``Shift + Z`` - Rotate active stamp counterclockwise" msgstr "" #: ../../manual/keyboard-shortcuts.rst:104 msgid "When an object layer is selected" msgstr "" #: ../../manual/keyboard-shortcuts.rst:106 msgid "``S`` - Activate :ref:`select-objects-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:108 msgid "``PgUp`` - Raise selected objects (with Manual object drawing order)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:110 msgid "``PgDown`` - Lower selected objects (with Manual object drawing order)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:112 msgid "``Home`` - Move selected objects to Top (with Manual object drawing order)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:114 msgid "``End`` - Move selected objects to Bottom (with Manual object drawing order)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:117 msgid "``O`` - Activate :ref:`edit-polygons-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:118 msgid "``R`` - Activate :ref:`insert-rectangle-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:119 msgid "``I`` - Activate :ref:`insert-point-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:120 msgid "``C`` - Activate :ref:`insert-ellipse-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:121 msgid "``P`` - Activate :ref:`insert-polygon-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:123 msgid "``Enter`` - Finish creating object" msgstr "" #: ../../manual/keyboard-shortcuts.rst:124 msgid "``Escape`` - Cancel creating object" msgstr "" #: ../../manual/keyboard-shortcuts.rst:126 msgid "``T`` - Activate :ref:`insert-tile-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:127 msgid "``V`` - Activate :ref:`insert-template-tool` (since Tiled 1.1)" msgstr "" #: ../../manual/keyboard-shortcuts.rst:128 msgid "``E`` - Activate :ref:`insert-text-tool`" msgstr "" #: ../../manual/keyboard-shortcuts.rst:129 msgid "``Ctrl + A`` - Select all objects on the selected layers" msgstr "" #: ../../manual/keyboard-shortcuts.rst:132 msgid "In the Properties dialog" msgstr "" #: ../../manual/keyboard-shortcuts.rst:134 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 "Layers View" 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 *class*, which is useful since it can be used to customize the color of their label and the available :ref:`custom properties ` for this object. For tile objects, the class can be :ref:`inherited from their tile `." msgstr "" #: ../../manual/layers.rst:79 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:87 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:98 msgid "Image layers provide a way to quickly include a single image as foreground or background of your map. They currently have limited functionality and you may consider adding the image as a Tileset instead and place it as a :ref:`Tile Object `. This way, you gain the ability to freely scale and rotate the image." msgstr "" #: ../../manual/layers.rst:104 msgid "However, image layers can be repeated along the respective axes through their *Repeat X* and *Repeat Y* properties." msgstr "" #: ../../manual/layers.rst:107 msgid "The other 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:119 msgid "Group Layers" msgstr "" #: ../../manual/layers.rst:121 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:125 msgid "The visibility, opacity, offset, lock and :ref:`tint color ` of a group layer affects all child layers." msgstr "" #: ../../manual/layers.rst:128 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:139 msgid "Parallax Scrolling Factor" msgstr "" #: ../../manual/layers.rst:141 msgid "The parallax scrolling factor determines the amount by which the layer moves in relation to the camera." msgstr "" #: ../../manual/layers.rst:144 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:150 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:153 msgid "Negative values make the layer move in opposite direction, though this is rarely useful." msgstr "" #: ../../manual/layers.rst:156 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:162 msgid "Parallax Reference Point" msgstr "" #: ../../manual/layers.rst:164 msgid "To match not only the scrolling speed but also the positioning of layers, we need to use the same points of reference. In Tiled these are the parallax origin and the center of the view. The parallax origin is stored per map and defaults to (0,0), which is the top-left of the maps bounding box. The distance between these two points is multiplied by the parallax factor to determine the final position on the screen for each layer. For example:" msgstr "" #: ../../manual/layers.rst:171 msgid "If the parallax origin is in the center of the view, the distance is (0,0) and none of the parallax factors have any effect. The layers are rendered where they would have been, if parallax was disabled." msgstr "" #: ../../manual/layers.rst:175 msgid "Now, when the map is scrolled right by 10 pixels, the distance between the parallax origin and the center of the view is 10. So a layer with a parallax factor of 0.7 will have moved just ``0.7 * 10 = 7`` pixels." msgstr "" #: ../../manual/layers.rst:179 msgid "Quite often, a viewport transform is used to scroll the entire map. In this case, one may need to adjust the position of each layer to take its parallax factor into account. Instead of multiplying the distance with the parallax factor directly, we now multiply by ``1 - parallaxFactor`` to get the layer position. For example:" msgstr "" #: ../../manual/layers.rst:185 msgid "When the camera moves right by 10 pixels, the layer will have moved 10 pixels to the left (-10), so by positioning the layer at ``10 * (1 - 0.7) = 3``, we're making sure that it only moves 7 pixels to the left." msgstr "" #: ../../manual/layers.rst:197 msgid "Tinting Layers" msgstr "" #: ../../manual/layers.rst:199 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:203 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:210 msgid "Tint Color Example" msgstr "" #: ../../manual/layers.rst:210 msgid "A gray tileset rendered in a different color for each layer." msgstr "" #: ../../manual/layers.rst:212 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:219 msgid "There are many ways in which the layers can be made more powerful:" msgstr "" #: ../../manual/layers.rst:221 msgid "Ability to lock individual objects (`#828 `__)." msgstr "" #: ../../manual/layers.rst:223 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 class ` 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:-1 msgid "General Preferences" 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:212 msgid "Custom Interface Font" msgstr "" #: ../../manual/preferences.rst:214 msgid "Normally the application font defaults to the one defined by the system. If you'd like Tiled to use a different font, you can set one here." msgstr "" #: ../../manual/preferences.rst:218 msgid "Plugins" msgstr "" #: ../../manual/preferences.rst:220 msgid "Here you can choose which plugins are enabled, as well as opening the :doc:`scripted extensions ` folder." msgstr "" #: ../../manual/preferences.rst:223 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:226 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:230 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:23 msgid "Compatibility Version" msgstr "" #: ../../manual/projects.rst:20 msgid "The Tiled version to target when saving or exporting files. Can be used to maintain compatibility with earlier versions of Tiled or with :doc:`/reference/support-for-tmx-maps` that do not yet support certain backwards-incompatible changes." msgstr "" #: ../../manual/projects.rst:31 msgid "Extensions Directory" msgstr "" #: ../../manual/projects.rst:26 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\" alongside your project file it will be picked up automatically." msgstr "" #: ../../manual/projects.rst:31 msgid "The directory is loaded in addition to the global extensions." msgstr "" #: ../../manual/projects.rst:36 msgid "Automapping Rules File" msgstr "" #: ../../manual/projects.rst:34 msgid "Refers to an :doc:`automapping` rules file, or a single rule map, 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:38 msgid "Any types defined in the :ref:`Custom Types Editor ` are also saved in the project." msgstr "" #: ../../manual/projects.rst:44 msgid "Sessions" msgstr "" #: ../../manual/projects.rst:46 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:51 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:56 msgid "Opening a File in the Project" msgstr "" #: ../../manual/projects.rst:58 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:66 msgid "Open File in Project" msgstr "" #: ../../manual/projects.rst:71 msgid "There are many ways in which the projects could be made more powerful:" msgstr "" #: ../../manual/projects.rst:73 msgid "Make the project accessible through the :doc:`scripting API `." msgstr "" #: ../../manual/projects.rst:76 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:80 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.8 (get it from https://www.python.org/). You will also need to check the box \"Add Python 3.8 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 20.04 against Python 3.8, and you'd need to install the same version somehow." msgstr "" #: ../../manual/python.rst:53 msgid "The Python plugin is currently not available for macOS releases." msgstr "" #: ../../manual/python.rst:56 msgid "Example Export Plugin" msgstr "" #: ../../manual/python.rst:58 msgid "Suppose you'd like to have a map exported in the following format:" msgstr "" #: ../../manual/python.rst:75 msgid "You can achieve this by saving the following ``example.py`` script in the scripts directory:" msgstr "" #: ../../manual/python.rst:114 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:120 msgid "This example does not support the use of group layers." msgstr "" #: ../../manual/python.rst:123 msgid "Debugging Your Script" msgstr "" #: ../../manual/python.rst:125 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:130 msgid "API Reference" msgstr "" #: ../../manual/python.rst:132 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/python.rst:138 msgid "Any help with maintaining the Python plugin would be very appreciated. See `open issues related to Python support`_" 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 labeled according to their terrain layouts. Tiled supports the following terrain sets:" msgstr "" #: ../../manual/terrain.rst:-1 #: ../../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:-1 #: ../../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. A terrain set can contain up to 255 terrains." 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 "Sand marked" 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 "Done marking tiles" 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" 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 probability 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 "Blob with rotation." 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:86 msgid "``%objectclass``" msgstr "" #: ../../manual/using-commands.rst:85 msgid "the class of the currently selected object, if any (also available as ``%objecttype`` for compatibility with Tiled < 1.9)." msgstr "" #: ../../manual/using-commands.rst:89 msgid "``%objectid``" msgstr "" #: ../../manual/using-commands.rst:89 msgid "the ID of the currently selected object, if any." msgstr "" #: ../../manual/using-commands.rst:92 msgid "``%layername``" msgstr "" #: ../../manual/using-commands.rst:92 msgid "the name of the currently selected layer." msgstr "" #: ../../manual/using-commands.rst:99 msgid "``%tileid``" msgstr "" #: ../../manual/using-commands.rst:99 msgid "a comma-separated list with the IDs of the selected tiles, if any." msgstr "" #: ../../manual/using-commands.rst:106 msgid "``%worldfile``" msgstr "" #: ../../manual/using-commands.rst:106 msgid "the full path of the world the current map is part of, if any." msgstr "" #: ../../manual/using-commands.rst:108 msgid "For the working directory field, you can additionally use the following variable:" msgstr "" #: ../../manual/using-commands.rst:113 msgid "``%executablepath``" msgstr "" #: ../../manual/using-commands.rst:112 msgid "the path to the executable." msgstr "" #: ../../manual/using-commands.rst:116 msgid "Example Commands" msgstr "" #: ../../manual/using-commands.rst:118 msgid "Launching a custom game called \"mygame\" with a -loadmap parameter and the mapfile:" msgstr "" #: ../../manual/using-commands.rst:125 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:132 msgid "Or use ``open`` (and note the quotes since one of the arguments contains spaces):" msgstr "" #: ../../manual/using-commands.rst:139 msgid "Some systems also have a command to open files in the appropriate program:" msgstr "" #: ../../manual/using-commands.rst:142 msgid "OSX: ``open %mapfile``" msgstr "" #: ../../manual/using-commands.rst:143 msgid "GNOME systems like Ubuntu: ``gnome-open %mapfile``" msgstr "" #: ../../manual/using-commands.rst:144 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:-1 msgid "Infinite Maps Overview" 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:-1 msgid "New Infinite Map" 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:-1 msgid "Infinite Maps Editing" 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 "Initial Map" msgstr "" #: ../../manual/using-infinite-maps.rst:51 msgid "The Initial Infinite Map" msgstr "" #: ../../manual/using-infinite-maps.rst:56 msgid "Properties" msgstr "" #: ../../manual/using-infinite-maps.rst:56 msgid "Unchecking the Infinite property in Map Properties" msgstr "" #: ../../manual/using-infinite-maps.rst:61 msgid "Final Map" 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:-1 msgid "Templates Overview" 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:-1 msgid "New Template Dialog" 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:-1 msgid "Creating Instances" msgstr "" #: ../../manual/using-templates.rst:-1 #: ../../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: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 *World > 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 *World > 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 right-clicking 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, right-click 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 *World > 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 "World of Alchemic Cutie" 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.11.90/docs/_build/gettext/reference.pot000066400000000000000000004336521470450575400213500ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2023, 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.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-10 11:19+0100\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/global-tile-ids.rst:2 msgid "Global Tile IDs" msgstr "" #: ../../reference/global-tile-ids.rst:4 msgid "Several of the map formats supported by Tiled, including its native :doc:`TMX ` and :doc:`JSON ` map formats, use the same data representation for individual tiles in layers: global tile IDs with flip flags. These GIDs are \"global\" because they may refer to a tile from any of the tilesets used by the map, rather than being local to a specific tileset. To get at a specific tile from a GID, you will first need to extract and clear the flip flags, then you will need to determine which tileset the tile belongs to, and which tile within the tileset it is." msgstr "" #: ../../reference/global-tile-ids.rst:15 msgid "Despite the \"global\" name, GIDs are only global within a single map. A given tile may have a different GID in a different map, if that map has different tilesets, or has its tilesets in a different order." msgstr "" #: ../../reference/global-tile-ids.rst:22 msgid "Tile Flipping" msgstr "" #: ../../reference/global-tile-ids.rst:24 msgid "The highest four bits of the 32-bit GID are flip flags, and you will need to read and clear them before you can access the GID itself to identify the tile." msgstr "" #: ../../reference/global-tile-ids.rst:27 msgid "Bit 32 is used for storing whether the tile is horizontally flipped, bit 31 is used for the vertically flipped tiles. In orthogonal and isometric maps, bit 30 indicates whether the tile is flipped (anti) diagonally, which enables tile rotation, and bit 29 can be ignored. In hexagonal maps, bit 30 indicates whether the tile is rotated 60 degrees clockwise, and bit 29 indicates 120 degrees clockwise rotation." msgstr "" #: ../../reference/global-tile-ids.rst:36 msgid "Even if you're parsing a non-hexagonal map, remember to clear bit 29 after you've read the flags. Tiled keeps and outputs that flag even if the map orientation is changed. If not cleared, you may get an invalid tile ID." msgstr "" #: ../../reference/global-tile-ids.rst:40 msgid "When rendering an orthographic or isometric tile, the order of operations matters. The diagonal flip is done first, followed by the horizontal and vertical flips. The diagonal flip should flip the bottom left and top right corners of the tile, and can be thought of as an x/y axis swap. For hexagonal tiles, the order does not matter." msgstr "" #: ../../reference/global-tile-ids.rst:49 msgid "Mapping a GID to a Local Tile ID" msgstr "" #: ../../reference/global-tile-ids.rst:51 msgid "Every tileset has its own, independent local tile IDs, typically (but not always) starting at 0. To avoid conflicts within maps using multiple tilesets, GIDs are assigned in sequence based on the size of each tileset. Each tileset is assigned a ``firstgid`` within the map, this is the GID that the tile with local ID 0 in the tileset would have." msgstr "" #: ../../reference/global-tile-ids.rst:57 msgid "To figure out which tileset a tile belongs to, find the tileset that has the largest ``firstgid`` that is smaller than or equal to the tile's GID. Once you have identified the tileset, subtract its ``firstgid`` from the tile's GID to get the local ID of the tile within the tileset." msgstr "" #: ../../reference/global-tile-ids.rst:64 msgid "The ``firstgid`` of the first tileset is always 1. A GID of 0 in a layer means that cell is empty." msgstr "" #: ../../reference/global-tile-ids.rst:67 msgid "As an example, here's an excerpt from a TMX file with three tilesets:" msgstr "" #: ../../reference/global-tile-ids.rst:75 msgid "In this map, tiles with GIDs 1-64 would be part of TilesetA, tiles with GIDs 65-114 would be part of TilesetB, and tiles with GIDs 115 and above would be part of tileset C. A tile with GID 72 would be part of TilesetB since TilesetB has the largest ``firstgid`` that's less than or equal to 72, and its local ID would be 7 (72-65)." msgstr "" #: ../../reference/global-tile-ids.rst:84 msgid "Code example" msgstr "" #: ../../reference/global-tile-ids.rst:86 msgid "The following C++ pseudo-code, using TMX as an example, should make it all clear, it deals with flags and deduces the appropriate tileset:" msgstr "" #: ../../reference/global-tile-ids.rst:143 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/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 msgid "Field" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Type" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Description" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "backgroundcolor" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "string" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Hex-formatted color (#RRGGBB or #AARRGGBB) (optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "class" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The class of the map (since 1.9, optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "compressionlevel" msgstr "" #: ../../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 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 msgid "bool" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether the map has infinite dimensions" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "layers" msgstr "" #: ../../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 msgid "orientation" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "``orthogonal``, ``isometric``, ``staggered`` or ``hexagonal``" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "parallaxoriginx" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "double" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "X coordinate of the parallax origin in pixels (since 1.8, default: 0)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "parallaxoriginy" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Y coordinate of the parallax origin in pixels (since 1.8, default: 0)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "properties" msgstr "" #: ../../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 msgid "tiledversion" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The Tiled version used to save the file" msgstr "" #: ../../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 msgid "tilewidth" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Map grid width" msgstr "" #: ../../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 msgid "version" msgstr "" #: ../../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 msgid "width" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Number of tile columns" msgstr "" #: ../../reference/json-map-format.rst:47 msgid "Map Example" msgstr "" #: ../../reference/json-map-format.rst:80 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 "The class of the layer (since 1.9, optional)" 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 msgid "data" msgstr "" #: ../../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. ``tilelayer`` only." msgstr "" #: ../../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 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 msgid "locked" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether layer is locked in the editor (default: false). (since Tiled 1.8.2)" msgstr "" #: ../../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 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 "repeatx" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether the image drawn by this layer is repeated along the X axis. ``imagelayer`` only. (since Tiled 1.8)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "repeaty" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Whether the image drawn by this layer is repeated along the Y axis. ``imagelayer`` only. (since Tiled 1.8)" 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 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 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. ``tilelayer`` only." msgstr "" #: ../../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 msgid "y" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Vertical layer offset in tiles. Always 0." msgstr "" #: ../../reference/json-map-format.rst:118 msgid "Tile Layer Example" msgstr "" #: ../../reference/json-map-format.rst:120 msgid "The data of a tile layer can be stored as a native JSON array or as base64-encoded and optionally compressed binary data, the same as done in the :ref:`TMX format `. The tiles are referenced using :doc:`global-tile-ids`." msgstr "" #: ../../reference/json-map-format.rst:146 msgid "Object Layer Example" msgstr "" #: ../../reference/json-map-format.rst:172 msgid "Chunk" msgstr "" #: ../../reference/json-map-format.rst:174 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:188 msgid "Chunk Example" msgstr "" #: ../../reference/json-map-format.rst:203 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 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 "The class of the object (was saved as ``class`` in 1.9, optional)" 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 msgid "X coordinate in pixels" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Y coordinate in pixels" msgstr "" #: ../../reference/json-map-format.rst:228 msgid "Object Example" msgstr "" #: ../../reference/json-map-format.rst:252 msgid "Ellipse Example" msgstr "" #: ../../reference/json-map-format.rst:270 msgid "Rectangle Example" msgstr "" #: ../../reference/json-map-format.rst:287 msgid "Point Example" msgstr "" #: ../../reference/json-map-format.rst:305 msgid "Polygon Example" msgstr "" #: ../../reference/json-map-format.rst:343 msgid "Polyline Example" msgstr "" #: ../../reference/json-map-format.rst:385 msgid "Text Example" msgstr "" #: ../../reference/json-map-format.rst:1 #: ../../reference/json-map-format.rst:409 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 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:432 msgid "Tileset" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The class of the tileset (since 1.9, optional)" 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 "fillmode" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The fill mode to use when rendering tiles from this tileset (``stretch`` (default) or ``preserve-aspect-fit``) (since 1.9)" 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 msgid "(optional)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Image used for tiles in this set" msgstr "" #: ../../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 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 "tilerendersize" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The size to use when rendering tiles from this tileset on a tile layer (``tile`` (default) or ``grid``) (since 1.9)" 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:467 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:477 msgid "Grid" msgstr "" #: ../../reference/json-map-format.rst:479 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:493 msgid "Tile Offset" msgstr "" #: ../../reference/json-map-format.rst:495 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:507 msgid "Transformations" msgstr "" #: ../../reference/json-map-format.rst:509 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:521 msgid "Tileset Example" msgstr "" #: ../../reference/json-map-format.rst:548 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, used for image collection tilesets)" 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 "The X position of the sub-rectangle representing this tile (default: 0)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The Y position of the sub-rectangle representing this tile (default: 0)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The width of the sub-rectangle representing this tile (defaults to the image width)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The height of the sub-rectangle representing this tile (defaults to the image height)" 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 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, replaced by :ref:`Wang sets ` since 1.5)" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The class of the tile (was saved as ``class`` in 1.9, optional)" msgstr "" #: ../../reference/json-map-format.rst:569 msgid "A tileset that associates information with each tile, like its image path, 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:573 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:578 #: ../../reference/json-map-format.rst:618 #: ../../reference/json-map-format.rst:660 #: ../../reference/json-map-format.rst:683 msgid "Example:" msgstr "" #: ../../reference/json-map-format.rst:596 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 msgid "tileid" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Local tile ID representing this frame" msgstr "" #: ../../reference/json-map-format.rst:608 msgid "Terrain" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Name of terrain" msgstr "" #: ../../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:630 msgid "Wang Set" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The class of the Wang set (since 1.9, optional)" 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:647 msgid "Wang Color" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "The class of the Wang color (since 1.9, optional)" 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:674 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:695 msgid "Object Template" msgstr "" #: ../../reference/json-map-format.rst:697 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:711 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``, ``file``, ``object`` or ``class`` (since 0.16, with ``color`` and ``file`` added in 0.17, ``object`` added in 1.4 and ``class`` added in 1.8))" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "propertytype" msgstr "" #: ../../reference/json-map-format.rst:1 msgid "Name of the :ref:`custom property type `, when applicable (since 1.8)" msgstr "" #: ../../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:725 msgid "Point" msgstr "" #: ../../reference/json-map-format.rst:727 msgid "A point on a polygon or a polyline, relative to the position of the object." msgstr "" #: ../../reference/json-map-format.rst:737 msgid "Changelog" msgstr "" #: ../../reference/json-map-format.rst:740 #: ../../reference/tmx-changelog.rst:8 msgid "Tiled 1.10" msgstr "" #: ../../reference/json-map-format.rst:742 msgid "Renamed the ``class`` property on :ref:`json-tile` and :ref:`json-object` back to ``type``, to keep compatibility with Tiled 1.8 and earlier. The property remains ``class`` in other places since it could not be renamed to ``type`` everywhere." msgstr "" #: ../../reference/json-map-format.rst:748 #: ../../reference/tmx-changelog.rst:16 msgid "Tiled 1.9" msgstr "" #: ../../reference/json-map-format.rst:750 msgid "Renamed the ``type`` property on :ref:`json-tile` and :ref:`json-object` to ``class``." msgstr "" #: ../../reference/json-map-format.rst:753 msgid "Added ``class`` property to :ref:`json-map`, :ref:`json-tileset`, :ref:`json-layer`, :ref:`json-wangset` and :ref:`json-wangcolor`." msgstr "" #: ../../reference/json-map-format.rst:756 msgid "Added ``x``, ``y``, ``width`` and ``height`` properties to :ref:`json-tile`, which store the sub-rectangle of a tile's image used to represent this tile. By default the entire image is used." msgstr "" #: ../../reference/json-map-format.rst:760 msgid "Added ``tilerendersize`` and ``fillmode`` properties to :ref:`json-tileset`, which affect the way tiles are rendered." msgstr "" #: ../../reference/json-map-format.rst:764 #: ../../reference/tmx-changelog.rst:33 msgid "Tiled 1.8" msgstr "" #: ../../reference/json-map-format.rst:766 msgid "Added support for user-defined custom property types. A reference to the type is saved as the new ``propertytype`` property of :ref:`json-property`." msgstr "" #: ../../reference/json-map-format.rst:769 msgid "The :ref:`json-property` element can now have an arbitrary JSON object as its ``value``, in case the property value is a class. In this case the ``type`` property is set to the new value ``class``." msgstr "" #: ../../reference/json-map-format.rst:773 msgid "Added ``parallaxoriginx`` and ``parallaxoriginy`` properties to :ref:`json-map`." msgstr "" #: ../../reference/json-map-format.rst:776 msgid "Added ``repeatx`` and ``repeaty`` properties to :ref:`json-layer` (applies only to image layers at the moment)." msgstr "" #: ../../reference/json-map-format.rst:780 #: ../../reference/tmx-changelog.rst:50 msgid "Tiled 1.7" msgstr "" #: ../../reference/json-map-format.rst:782 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:787 msgid "Tiled 1.6" msgstr "" #: ../../reference/json-map-format.rst:789 msgid "The ``version`` property is now written as a string (\"1.6\") instead of a number (1.5)." msgstr "" #: ../../reference/json-map-format.rst:793 #: ../../reference/tmx-changelog.rst:57 msgid "Tiled 1.5" msgstr "" #: ../../reference/json-map-format.rst:795 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:798 msgid ":ref:`json-wangcolor` can now store ``properties``." msgstr "" #: ../../reference/json-map-format.rst:800 msgid "Added ``transformations`` property to :ref:`json-tileset` (see :ref:`json-tileset-transformations`)." msgstr "" #: ../../reference/json-map-format.rst:803 msgid "Removed ``dflip``, ``hflip`` and ``vflip`` properties from :ref:`json-wangtile` (no longer supported)." msgstr "" #: ../../reference/json-map-format.rst:806 msgid "Added ``parallaxx`` and ``parallaxy`` properties to the :ref:`json-layer` object." msgstr "" #: ../../reference/json-map-format.rst:810 #: ../../reference/tmx-changelog.rst:81 msgid "Tiled 1.4" msgstr "" #: ../../reference/json-map-format.rst:812 msgid "Added ``objectalignment`` to the :ref:`json-tileset` object." msgstr "" #: ../../reference/json-map-format.rst:814 msgid "Added ``tintcolor`` to the :ref:`json-layer` object." msgstr "" #: ../../reference/json-map-format.rst:816 msgid "Added ``object`` as possible type of :ref:`json-property`." msgstr "" #: ../../reference/json-map-format.rst:819 #: ../../reference/tmx-changelog.rst:95 msgid "Tiled 1.3" msgstr "" #: ../../reference/json-map-format.rst:821 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:825 msgid "Added support for Zstandard compression for tile layer data (``\"compression\": \"zstd\"`` on :ref:`tile layer objects `)." msgstr "" #: ../../reference/json-map-format.rst:828 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:832 #: ../../reference/tmx-changelog.rst:113 msgid "Tiled 1.2" msgstr "" #: ../../reference/json-map-format.rst:834 msgid "Added ``nextlayerid`` to the :ref:`json-map` object." msgstr "" #: ../../reference/json-map-format.rst:836 msgid "Added ``id`` to the :ref:`json-layer` object." msgstr "" #: ../../reference/json-map-format.rst:838 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:843 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:847 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:854 #: ../../reference/tmx-changelog.rst:124 msgid "Tiled 1.1" msgstr "" #: ../../reference/json-map-format.rst:856 msgid "Added a :ref:`chunked data format `, currently used for :doc:`infinite maps `." msgstr "" #: ../../reference/json-map-format.rst:859 msgid ":doc:`Templates ` were added. Templates can be stored as JSON files with an :ref:`json-objecttemplate` object." msgstr "" #: ../../reference/json-map-format.rst:862 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 `, as well as to evaluate a script file from the :ref:`command-line `. All scripts share a single JavaScript context." msgstr "" #: ../../reference/scripting.rst:28 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:33 msgid "JavaScript Host Environment" msgstr "" #: ../../reference/scripting.rst:35 msgid "Tiled uses the JavaScript engine shipping with Qt's `QML module`_. The QML runtime generally implements the 7th edition of the standard, with some additions. See the `JavaScript Host Environment`_ documentation for details." msgstr "" #: ../../reference/scripting.rst:39 msgid "It may also be helpful to check out the `List of JavaScript Objects and Functions`_ that are available." msgstr "" #: ../../reference/scripting.rst:45 msgid "Scripted Extensions" msgstr "" #: ../../reference/scripting.rst:47 msgid "Extensions can be placed in a system-specific or :doc:`project-specific ` location." msgstr "" #: ../../reference/scripting.rst:50 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:55 msgid "**Windows**" msgstr "" #: ../../reference/scripting.rst:0 msgid ":file:`C:/Users//AppData/Local/Tiled/extensions/`" msgstr "" #: ../../reference/scripting.rst:57 msgid "**macOS**" msgstr "" #: ../../reference/scripting.rst:0 msgid ":file:`~/Library/Preferences/Tiled/extensions/`" msgstr "" #: ../../reference/scripting.rst:59 msgid "**Linux**" msgstr "" #: ../../reference/scripting.rst:0 msgid ":file:`~/.config/tiled/extensions/`" msgstr "" #: ../../reference/scripting.rst:62 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:68 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:73 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:77 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:85 msgid "When using the ``.mjs`` extension, script files are loaded as `JavaScript modules`_. They will then be able to use the `import`_ and `export`_ statements to split up their functionality over multiple JavaScript files. Such extensions also don't pollute the global scope, avoiding potential name collisions between different extensions." msgstr "" #: ../../reference/scripting.rst:91 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:97 msgid "Apart from scripts, extensions can include images that can be used as the icon for scripted actions or tools." msgstr "" #: ../../reference/scripting.rst:103 msgid "Console View" msgstr "" #: ../../reference/scripting.rst:105 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:108 msgid "You can use the Up/Down keys to navigate through previously entered script expressions." msgstr "" #: ../../reference/scripting.rst:118 msgid "Command Line" msgstr "" #: ../../reference/scripting.rst:120 msgid "To execute a script (``.js``) or to load a module (``.mjs``) from the command-line, you can pass the ``--evaluate`` option (or ``-e``), followed by the file name. Tiled will quit after executing the script." msgstr "" #: ../../reference/scripting.rst:124 msgid "The UI will not be instantiated while evaluating scripts on the command-line. This means functions that rely on the UI being present will do nothing and some properties will be ``null``. However, scripts are able to load and save maps and tilesets through the available formats (see ``tiled.mapFormats`` and ``tiled.tilesetFormats``), as well as to make any modifications to these assets." msgstr "" #: ../../reference/scripting.rst:131 msgid "Any additional non-option arguments passed after the script file name are available to the script as ``tiled.scriptArguments``." msgstr "" #: ../../reference/scripting.rst:134 msgid "If you want to evaluate several scripts, use ``--evaluate`` for each file. Note that evaluating the same JavaScript module (``.mjs``) does not work, since modules are loaded only once." msgstr "" #: ../../reference/scripting.rst:139 msgid "API Reference" msgstr "" #: ../../reference/scripting.rst:141 msgid "See the `Tiled Scripting API`_." msgstr "" #: ../../reference/scripting.rst:143 msgid "The following global variable is currently not documented in the generated documentation, since it conflicts with nodejs types:" msgstr "" #: ../../reference/scripting.rst:149 msgid "__filename" msgstr "" #: ../../reference/scripting.rst:147 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 "`libtmj `__ - JSON map and tileset loader with zlib/gzip/zstd support (BSD 2-Clause)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:34 msgid "`TMX `__ - TMX map loader with Allegro5 and SDL2 examples (BSD)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:38 msgid "C++" msgstr "" #: ../../reference/support-for-tmx-maps.rst:40 msgid "`C++/TinyXML based tmxparser `__ (BSD)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:41 msgid "C++/Qt based libtiled, used by Tiled itself and included at `src/libtiled `__ (BSD)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:44 msgid "`C++11x/TinyXml2 libtmx-parser `__ by halsafar. (zlib/tinyxml2)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:47 msgid "`C++11/TinyXml2 libtmx `__ by jube, for reading only (ISC licence). See `documentation `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:50 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:53 msgid "`TSXParser `__ General \\*.tsx tileset data loader. Intended to be used with TMXParser." msgstr "" #: ../../reference/support-for-tmx-maps.rst:56 msgid "`TMXLoader `__ based on `RapidXml `__. Limited functionality (check the `website `__ for details)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:61 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:65 msgid "`tinytmx `__ A C++17 library to parse maps generated by Tiled Map Editor. Requires no external linking, all dependencies are included." msgstr "" #: ../../reference/support-for-tmx-maps.rst:66 msgid "`Tileson `__ - A Tiled JSON parser for modern C++ (C++17) by Robin Berg Pettersen (BSD)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:69 msgid "C#/.NET" msgstr "" #: ../../reference/support-for-tmx-maps.rst:71 msgid "`TiledCS `__: A dotnet library for loading Tiled tilesets and maps (TMX/TSX or JSON)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:72 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:75 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:83 msgid "Common Lisp" msgstr "" #: ../../reference/support-for-tmx-maps.rst:85 msgid "`cl-tiled `__: TMX/TSX and JSON map/tileset loader." msgstr "" #: ../../reference/support-for-tmx-maps.rst:88 msgid "Clojure" msgstr "" #: ../../reference/support-for-tmx-maps.rst:89 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:92 msgid "D" msgstr "" #: ../../reference/support-for-tmx-maps.rst:94 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:98 msgid "`dtiled `__ can load JSON-formatted Tiled maps. It also provides general tilemap-related functions and algorithms." msgstr "" #: ../../reference/support-for-tmx-maps.rst:102 msgid "Dart" msgstr "" #: ../../reference/support-for-tmx-maps.rst:104 msgid "`tiled `__: a library for loading TMX files" msgstr "" #: ../../reference/support-for-tmx-maps.rst:107 msgid "Go" msgstr "" #: ../../reference/support-for-tmx-maps.rst:109 msgid "`github.com/lafriks/go-tiled `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:110 msgid "`github.com/salviati/go-tmx/tmx `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:113 msgid "Haskell" msgstr "" #: ../../reference/support-for-tmx-maps.rst:115 msgid "`htiled `__ (TMX) by `Christian Rødli Amble `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:117 msgid "`aeson-tiled `__ (JSON) by `Schell Scivally `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:120 msgid "Java" msgstr "" #: ../../reference/support-for-tmx-maps.rst:122 msgid "A library for loading TMX files is included with Tiled at `util/java/libtiled-java `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:124 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:125 msgid "Android-Specific:" msgstr "" #: ../../reference/support-for-tmx-maps.rst:127 msgid "`AndroidTMXLoader `__ loads TMX data into an object and renders to an Android Bitmap (limited functionality)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:130 msgid "`libtiled-java port `__ is a port of the libtiled-java to be used on Android phones." msgstr "" #: ../../reference/support-for-tmx-maps.rst:135 msgid "PHP" msgstr "" #: ../../reference/support-for-tmx-maps.rst:137 msgid "`PHP TMX Viewer `__ by sebbu : render the map as an image (allow some modifications as well)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:141 msgid "Pike" msgstr "" #: ../../reference/support-for-tmx-maps.rst:143 msgid "`TMX parser `__: a simple loader for TMX maps (CSV format only)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:147 msgid "Processing" msgstr "" #: ../../reference/support-for-tmx-maps.rst:149 msgid "`linux-man/ptmx `__: Add Tiled maps to your Processing sketch." msgstr "" #: ../../reference/support-for-tmx-maps.rst:153 msgid "Python" msgstr "" #: ../../reference/support-for-tmx-maps.rst:155 msgid "`Arcade `__: 2D game library that uses pytiled-parser for easy loading of Tiled maps into a game. `Arcade Tiled Examples `_" msgstr "" #: ../../reference/support-for-tmx-maps.rst:157 msgid "`pytiled-parser `__: Python parser for TMX and JSON maps." msgstr "" #: ../../reference/support-for-tmx-maps.rst:158 msgid "`pytmxlib `__: library for programmatic manipulation of TMX maps" msgstr "" #: ../../reference/support-for-tmx-maps.rst:159 msgid "`pytmxloader `__: Python library intended to make loading of JSON Tiled maps very easy." msgstr "" #: ../../reference/support-for-tmx-maps.rst:160 msgid "`PyTMX `__: Python library to read TMX maps." msgstr "" #: ../../reference/support-for-tmx-maps.rst:161 msgid "`ulvl `__: Simple Python library that can read from, among others, TMX XML files." msgstr "" #: ../../reference/support-for-tmx-maps.rst:164 msgid "Ruby" msgstr "" #: ../../reference/support-for-tmx-maps.rst:166 msgid "`tmx gem `__ by erisdiscord" msgstr "" #: ../../reference/support-for-tmx-maps.rst:169 msgid "Rust" msgstr "" #: ../../reference/support-for-tmx-maps.rst:171 msgid "`tiled `__, a rust crate for loading TMX maps" msgstr "" #: ../../reference/support-for-tmx-maps.rst:172 msgid "`tiled-json-rs `__, a crate to parse and interact with Tiled editor JSON files" msgstr "" #: ../../reference/support-for-tmx-maps.rst:175 msgid "Vala" msgstr "" #: ../../reference/support-for-tmx-maps.rst:177 msgid "`librpg `__ A library to load and handle spritesets (own format) and orthogonal TMX maps." msgstr "" #: ../../reference/support-for-tmx-maps.rst:181 msgid "Support by Framework" msgstr "" #: ../../reference/support-for-tmx-maps.rst:183 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:188 msgid "AndEngine" msgstr "" #: ../../reference/support-for-tmx-maps.rst:190 msgid "`AndEngine `__ by Nicolas Gramlich supports `rendering TMX maps `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:195 msgid "Allegro" msgstr "" #: ../../reference/support-for-tmx-maps.rst:197 msgid "`allegro\\_tiled `__ integrates Tiled support with `Allegro 5 `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:201 msgid "Bevy" msgstr "" #: ../../reference/support-for-tmx-maps.rst:203 msgid "`bevy_tiled `__, a plugin for rendering Tiled maps" msgstr "" #: ../../reference/support-for-tmx-maps.rst:204 msgid "`bevy_tmx `__, a plugin that allows you to read .tmx files as scenes" msgstr "" #: ../../reference/support-for-tmx-maps.rst:205 msgid "`bevy_ecs_tilemap `__, a tilemap rendering plugin that makes tiles entities, with support for TMX maps" msgstr "" #: ../../reference/support-for-tmx-maps.rst:208 msgid "Castle Game Engine (Object Pascal)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:210 msgid "`Castle Game Engine `__ has native support for Tiled maps (see the `CastleTiledMap unit `__)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:213 msgid "Cell2D" msgstr "" #: ../../reference/support-for-tmx-maps.rst:215 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:218 msgid "cocos2d" msgstr "" #: ../../reference/support-for-tmx-maps.rst:220 msgid "`cocos2d (Python) `__ supports loading `Tiled maps `__ through its ``cocos.tiles`` module." msgstr "" #: ../../reference/support-for-tmx-maps.rst:224 msgid "`cocos2d-x (C++) `__ supports loading TMX maps through the `CCTMXTiledMap `__ class." msgstr "" #: ../../reference/support-for-tmx-maps.rst:228 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:232 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:237 msgid "Construct 2 - Scirra" msgstr "" #: ../../reference/support-for-tmx-maps.rst:239 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:245 msgid "Flame" msgstr "" #: ../../reference/support-for-tmx-maps.rst:247 msgid "`flame_tiled `__ is a library for incorporating Tiled maps into the `Flame ` game engine." msgstr "" #: ../../reference/support-for-tmx-maps.rst:252 msgid "Flixel" msgstr "" #: ../../reference/support-for-tmx-maps.rst:254 msgid "Lithander demonstrated his `Flash TMX parser combined with Flixel rendering `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:258 msgid "Game Maker" msgstr "" #: ../../reference/support-for-tmx-maps.rst:260 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:261 msgid "`Tiled2GM Converter `__ by Dmi7ry" msgstr "" #: ../../reference/support-for-tmx-maps.rst:264 msgid "Godot" msgstr "" #: ../../reference/support-for-tmx-maps.rst:265 msgid "Tiled ships with a plugin for exporting to :ref:`Godot 4 ` as .tscn scene files." msgstr "" #: ../../reference/support-for-tmx-maps.rst:266 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:267 msgid "`Godot Tiled importer (Mono version) `__ imports Tiled maps exported to JSON (.tmj) format. Supports all map orientations." msgstr "" #: ../../reference/support-for-tmx-maps.rst:268 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:271 msgid "Grid Engine" msgstr "" #: ../../reference/support-for-tmx-maps.rst:273 msgid "Planimeter's `Grid Engine `__ supports Tiled Lua-exported maps." msgstr "" #: ../../reference/support-for-tmx-maps.rst:276 msgid "Haxe" msgstr "" #: ../../reference/support-for-tmx-maps.rst:278 msgid "`HaxePunk `__ Tiled Loader for HaxePunk" msgstr "" #: ../../reference/support-for-tmx-maps.rst:280 msgid "`HaxeFlixel `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:281 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:284 msgid "`OpenFL + Tiled + Flixel `__ Experimental glue to use \"openfl-tiled\" with HaxeFlixel" msgstr "" #: ../../reference/support-for-tmx-maps.rst:289 msgid "HTML5 (multiple engines)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:291 msgid "`Canvas Engine `__ A framework to create video games in HTML5 Canvas" msgstr "" #: ../../reference/support-for-tmx-maps.rst:293 msgid "`chem-tmx `__ Plugin for `chem `__ game engine." msgstr "" #: ../../reference/support-for-tmx-maps.rst:295 msgid "`chesterGL `__ A simple WebGL/canvas game library" msgstr "" #: ../../reference/support-for-tmx-maps.rst:297 msgid "`Crafty `__ JavaScript HTML5 Game Engine; supports loading Tiled maps through an external component `TiledMapBuilder `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:300 msgid "`Excalibur `__, an open-source 2D HTML5 game engine, supports loading Tiled maps through the plugin `excalibur-tiled `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:301 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:304 msgid "`KineticJs-Ext `__ A multi-canvas based game rendering library" msgstr "" #: ../../reference/support-for-tmx-maps.rst:306 msgid "`melonJS `__ A lightweight HTML5 game engine" msgstr "" #: ../../reference/support-for-tmx-maps.rst:307 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:308 msgid "`Phaser `__ A fast, free and fun open source framework supporting both JavaScript and TypeScript (`Tiled tutorial `__)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:311 msgid "`linux-man/p5.tiledmap `__ adds Tiled maps to `p5.js `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:313 msgid "`Platypus Engine `__ A robust orthogonal tile game engine with game entity library." msgstr "" #: ../../reference/support-for-tmx-maps.rst:315 msgid "`sprite.js `__ A game framework for image sprites." msgstr "" #: ../../reference/support-for-tmx-maps.rst:317 msgid "`TMXjs `__ A JavaScript, jQuery and RequireJS-based TMX (Tile Map XML) parser and renderer." msgstr "" #: ../../reference/support-for-tmx-maps.rst:319 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:324 msgid "indielib-crossplatform" msgstr "" #: ../../reference/support-for-tmx-maps.rst:326 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:331 msgid "Irrlicht" msgstr "" #: ../../reference/support-for-tmx-maps.rst:333 msgid "`Irrlicht `__, a C++ realtime 3D engine, can load TMX files through a `3rd-party library `__ by TheMrCerebro (Zlib)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:336 msgid "LibGDX" msgstr "" #: ../../reference/support-for-tmx-maps.rst:338 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:344 msgid "LITIENGINE" msgstr "" #: ../../reference/support-for-tmx-maps.rst:346 msgid "`LITIENGINE `__ is an open source Java 2D Game Engine that supports loading, editing, saving, and rendering maps in the .tmx format." msgstr "" #: ../../reference/support-for-tmx-maps.rst:350 msgid "LÖVE" msgstr "" #: ../../reference/support-for-tmx-maps.rst:352 msgid "`Simple Tiled Implementation `__ Lua loader for the LÖVE (Love2d) game framework." msgstr "" #: ../../reference/support-for-tmx-maps.rst:357 msgid "MOAI SDK" msgstr "" #: ../../reference/support-for-tmx-maps.rst:359 msgid "`Hanappe `__ Framework for MOAI SDK." msgstr "" #: ../../reference/support-for-tmx-maps.rst:361 msgid "`Rapanui `__ Framework for MOAI SDK." msgstr "" #: ../../reference/support-for-tmx-maps.rst:365 msgid "Monkey X" msgstr "" #: ../../reference/support-for-tmx-maps.rst:367 msgid "`bit.tiled `__ Loads TMX file as objects. Aims to be fully compatible with native TMX files." msgstr "" #: ../../reference/support-for-tmx-maps.rst:369 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:375 msgid "Node.js" msgstr "" #: ../../reference/support-for-tmx-maps.rst:377 msgid "`node-tmx-parser `__ - loads the TMX file into a JavaScript object" msgstr "" #: ../../reference/support-for-tmx-maps.rst:381 msgid "Oak Nut Engine (onut)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:383 msgid "`Oak Nut Engine `__ supports Tiled maps through Javascript and C++. (see TiledMap `Javascript `__ or `C++ `__ samples)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:387 msgid "Orx Portable Game Engine" msgstr "" #: ../../reference/support-for-tmx-maps.rst:389 msgid "`TMX to ORX Converter `__ Tutorial and converter download for Orx." msgstr "" #: ../../reference/support-for-tmx-maps.rst:394 msgid "Pygame" msgstr "" #: ../../reference/support-for-tmx-maps.rst:396 msgid "`Pygame map loader `__ by dr0id" msgstr "" #: ../../reference/support-for-tmx-maps.rst:397 #: ../../reference/support-for-tmx-maps.rst:413 #: ../../reference/support-for-tmx-maps.rst:419 msgid "`PyTMX `__ by Leif Theden (bitcraft)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:399 msgid "`tmx.py `__ by Richard Jones, from his `2012 PyCon 'Introduction to Game Development' talk `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:403 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:408 msgid "Pyglet" msgstr "" #: ../../reference/support-for-tmx-maps.rst:410 msgid "`JSON map loader/renderer for pyglet `__ by Juan J. Martínez (reidrac)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:417 msgid "PySDL2" msgstr "" #: ../../reference/support-for-tmx-maps.rst:423 msgid "RPG Maker MV" msgstr "" #: ../../reference/support-for-tmx-maps.rst:425 msgid "`Tiled Plugin for RPG Maker MV `__ by `Dr.Yami `__ & Archeia, from `RPG Maker Web `__" msgstr "" #: ../../reference/support-for-tmx-maps.rst:431 msgid "SDL" msgstr "" #: ../../reference/support-for-tmx-maps.rst:433 msgid "`C++/TinyXML/SDL based loader `__ example by Rohin Knight (limited functionality)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:438 msgid "SFML" msgstr "" #: ../../reference/support-for-tmx-maps.rst:440 msgid "`STP `__ (SFML TMX Parser) by edoren" msgstr "" #: ../../reference/support-for-tmx-maps.rst:441 msgid "`C++/SFML Tiled map loader `__ by fallahn. (Zlib/libpng)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:444 msgid "`C++/SfTileEngine `__ by Tresky (currently limited functionality)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:448 msgid "Slick2D" msgstr "" #: ../../reference/support-for-tmx-maps.rst:450 msgid "`Slick2D `__ supports loading TMX maps through `TiledMap `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:455 msgid "Solar2D (formerly Corona SDK)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:457 msgid "`ponytiled `__ is a simple Tiled Map Loader for Solar2D (`forum announcement `__)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:460 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:462 msgid "`Berry `__ is a simple Tiled Map Loader for Solar2D." msgstr "" #: ../../reference/support-for-tmx-maps.rst:464 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:467 msgid "Sprite Kit Framework" msgstr "" #: ../../reference/support-for-tmx-maps.rst:469 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:472 msgid "`SKTiled `__ - A Swift framework for working with Tiled assets in SpriteKit." msgstr "" #: ../../reference/support-for-tmx-maps.rst:474 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:479 msgid "TERRA Engine (Delphi/Pascal)" msgstr "" #: ../../reference/support-for-tmx-maps.rst:481 msgid "`TERRA Engine `__ supports loading and rendering of TMX maps." msgstr "" #: ../../reference/support-for-tmx-maps.rst:485 msgid "Unity" msgstr "" #: ../../reference/support-for-tmx-maps.rst:487 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:488 msgid "`Tiled TMX Importer `__, imports into Unity 2017.2's new native Tilemap system." msgstr "" #: ../../reference/support-for-tmx-maps.rst:489 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:494 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:498 msgid "`UniTiled `__, a native TMX importer for Unity." msgstr "" #: ../../reference/support-for-tmx-maps.rst:499 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:502 msgid "`Orthello Pro `__ (2D framework) offers `Tiled map support `__." msgstr "" #: ../../reference/support-for-tmx-maps.rst:508 msgid "Unreal Engine 4" msgstr "" #: ../../reference/support-for-tmx-maps.rst:510 msgid "`Paper2D `__ provides built-in support for tile maps and tile sets, importing JSON exported from Tiled." msgstr "" #: ../../reference/support-for-tmx-maps.rst:515 msgid "Urho3D" msgstr "" #: ../../reference/support-for-tmx-maps.rst:517 msgid "`Urho3D `__ natively supports loading Tiled maps as part of the `Urho2D `__ sublibrary (`Documentation `__, `HTML5 example `__)." msgstr "" #: ../../reference/support-for-tmx-maps.rst:526 msgid "XNA" msgstr "" #: ../../reference/support-for-tmx-maps.rst:528 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:531 msgid "`XTiled `__ by Michael C. Neel and Dylan Wolf, XNA library for loading and rendering TMX maps" msgstr "" #: ../../reference/support-for-tmx-maps.rst:533 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 "Renamed the ``class`` attribute on :ref:`tmx-tileset-tile` and :ref:`tmx-object` back to ``type``, to keep compatibility with Tiled 1.8 and earlier. The attribute remains ``class`` for other elements since it could not be renamed to ``type`` everywhere." msgstr "" #: ../../reference/tmx-changelog.rst:18 msgid "Renamed the ``type`` attribute on :ref:`tmx-tileset-tile` and :ref:`tmx-object` to ``class``." msgstr "" #: ../../reference/tmx-changelog.rst:21 msgid "Added ``class`` attribute to :ref:`tmx-map`, :ref:`tmx-tileset`, :ref:`tmx-layer`, :ref:`tmx-imagelayer`, :ref:`tmx-objectgroup`, :ref:`tmx-group`, :ref:`tmx-wangset` and :ref:`tmx-wangcolor`." msgstr "" #: ../../reference/tmx-changelog.rst:25 msgid "Added ``x``, ``y``, ``width`` and ``height`` attributes to the :ref:`tmx-tileset-tile` element, which store the sub-rectangle of a tile's image used to represent this tile. By default the entire image is used." msgstr "" #: ../../reference/tmx-changelog.rst:29 msgid "Added ``tilerendersize`` and ``fillmode`` attributes to the :ref:`tmx-tileset` element, which affect the way tiles are rendered." msgstr "" #: ../../reference/tmx-changelog.rst:35 msgid "Added support for user-defined custom property types. A reference to the type is saved as the new ``propertytype`` attribute on the :ref:`tmx-property` element." msgstr "" #: ../../reference/tmx-changelog.rst:39 msgid "The :ref:`tmx-property` element can now contain a :ref:`tmx-properties` element, in case the property value is a class and at least one member value has been set. The ``type`` attribute will have the new value ``class``." msgstr "" #: ../../reference/tmx-changelog.rst:43 msgid "Added ``parallaxoriginx`` and ``parallaxoriginy`` attributes to the :ref:`tmx-map` element." msgstr "" #: ../../reference/tmx-changelog.rst:46 msgid "Added ``repeatx`` and ``repeaty`` attributes to the :ref:`tmx-imagelayer` element." msgstr "" #: ../../reference/tmx-changelog.rst:52 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:59 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:64 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:69 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:74 msgid "The :ref:`tmx-wangset` element has replaced the now deprecated :ref:`tmx-terraintypes` element." msgstr "" #: ../../reference/tmx-changelog.rst:77 msgid "Added ``parallaxx`` and ``parallaxy`` attributes to the :ref:`tmx-layer`, :ref:`tmx-objectgroup`, :ref:`tmx-imagelayer` and :ref:`tmx-group` elements." msgstr "" #: ../../reference/tmx-changelog.rst:83 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:86 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:91 msgid "Added a new ``object`` property type, which refers to an :ref:`object ` by its ID." msgstr "" #: ../../reference/tmx-changelog.rst:97 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:100 msgid "Added support for Zstandard compression for tile layer data (``compression=\"zstd\"`` on :ref:`tmx-data` elements)." msgstr "" #: ../../reference/tmx-changelog.rst:103 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:107 msgid "Tiled 1.2.1" msgstr "" #: ../../reference/tmx-changelog.rst:109 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:115 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:119 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:126 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:130 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:135 msgid ":doc:`Templates ` were added, a template is an :ref:`external file ` referenced by template instance objects:" msgstr "" #: ../../reference/tmx-changelog.rst:143 msgid "Tilesets can now contain :doc:`Terrain Sets `. They are saved in the new :ref:`tmx-wangsets` element." msgstr "" #: ../../reference/tmx-changelog.rst:146 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:150 msgid "Tiled 1.0" msgstr "" #: ../../reference/tmx-changelog.rst:152 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:155 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:158 msgid "Added a :ref:`tile.type ` attribute for supporting :ref:`typed-tiles`." msgstr "" #: ../../reference/tmx-changelog.rst:162 msgid "Tiled 0.18" msgstr "" #: ../../reference/tmx-changelog.rst:164 msgid "*No file format changes.*" msgstr "" #: ../../reference/tmx-changelog.rst:167 msgid "Tiled 0.17" msgstr "" #: ../../reference/tmx-changelog.rst:169 msgid "Added ``color`` and ``file`` as possible values for the :ref:`property.type ` attribute." msgstr "" #: ../../reference/tmx-changelog.rst:172 msgid "Added support for editing multi-line string properties, which are written out differently." msgstr "" #: ../../reference/tmx-changelog.rst:176 msgid "Tiled 0.16" msgstr "" #: ../../reference/tmx-changelog.rst:178 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:183 msgid "Tiled 0.15" msgstr "" #: ../../reference/tmx-changelog.rst:185 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:190 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:194 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:198 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:203 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:208 msgid "Tiled 0.14" msgstr "" #: ../../reference/tmx-changelog.rst:210 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:216 msgid "Tiled 0.13" msgstr "" #: ../../reference/tmx-changelog.rst:218 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:223 msgid "Tiled 0.12" msgstr "" #: ../../reference/tmx-changelog.rst:225 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:232 msgid "Tiled 0.11" msgstr "" #: ../../reference/tmx-changelog.rst:234 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:242 msgid "Added an ``id`` attribute to the ``object`` element, which stores a map-unique ID of the object." msgstr "" #: ../../reference/tmx-changelog.rst:245 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:250 msgid "Tiled 0.10" msgstr "" #: ../../reference/tmx-changelog.rst:252 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:257 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:260 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:266 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:274 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:278 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:297 msgid "Tiled 0.9" msgstr "" #: ../../reference/tmx-changelog.rst:299 msgid "Per-object visibility flag is saved (defaults to 1):" msgstr "" #: ../../reference/tmx-changelog.rst:305 msgid "Terrain information was added to tileset definitions (this is generally not very relevant for games):" msgstr "" #: ../../reference/tmx-changelog.rst:319 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:322 msgid "A basic image layer type was added:" msgstr "" #: ../../reference/tmx-changelog.rst:330 msgid "Added ellipse object shape. Same parameters as rectangular objects, but marked as ellipse with a child element:" msgstr "" #: ../../reference/tmx-changelog.rst:339 msgid "Added map property for specifying the background color:" msgstr "" #: ../../reference/tmx-changelog.rst:345 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:371 msgid "Tiled 0.8" msgstr "" #: ../../reference/tmx-changelog.rst:373 msgid "Tilesets can now have custom properties (using the ``properties`` child element, just like everything else)." msgstr "" #: ../../reference/tmx-changelog.rst:376 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:386 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.8**" 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 "**class:** The class of this map (since 1.9, defaults to \"\")." msgstr "" #: ../../reference/tmx-map-format.rst:50 msgid "**orientation:** Map orientation. Tiled supports \"orthogonal\", \"isometric\", \"staggered\" and \"hexagonal\" (since 0.11)." msgstr "" #: ../../reference/tmx-map-format.rst:52 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:56 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:58 msgid "**width:** The map width in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:59 msgid "**height:** The map height in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:60 msgid "**tilewidth:** The width of a tile." msgstr "" #: ../../reference/tmx-map-format.rst:61 msgid "**tileheight:** The height of a tile." msgstr "" #: ../../reference/tmx-map-format.rst:62 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:65 msgid "**staggeraxis:** For staggered and hexagonal maps, determines which axis (\"x\" or \"y\") is staggered. (since 0.11)" msgstr "" #: ../../reference/tmx-map-format.rst:67 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:70 msgid "**parallaxoriginx:** X coordinate of the parallax origin in pixels (defaults to 0). (since 1.8)" msgstr "" #: ../../reference/tmx-map-format.rst:72 msgid "**parallaxoriginy:** Y coordinate of the parallax origin in pixels (defaults to 0). (since 1.8)" msgstr "" #: ../../reference/tmx-map-format.rst:74 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:77 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:81 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:85 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:89 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:94 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:100 msgid "The ``staggered`` orientation refers to an isometric map using staggered axes." msgstr "" #: ../../reference/tmx-map-format.rst:103 msgid "The tilesets used by the map should always be listed before the layers." msgstr "" #: ../../reference/tmx-map-format.rst:105 msgid "Can contain at most one: :ref:`tmx-properties`, :ref:`tmx-editorsettings` (since 1.3)" msgstr "" #: ../../reference/tmx-map-format.rst:108 msgid "Can contain any number: :ref:`tmx-tileset`, :ref:`tmx-layer`, :ref:`tmx-objectgroup`, :ref:`tmx-imagelayer`, :ref:`tmx-group` (since 1.0)" msgstr "" #: ../../reference/tmx-map-format.rst:114 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:116 msgid "This element contains various editor-specific settings, which are generally not relevant when reading a map." msgstr "" #: ../../reference/tmx-map-format.rst:119 msgid "Can contain at most one: :ref:`tmx-chunksize`, :ref:`tmx-export`" msgstr "" #: ../../reference/tmx-map-format.rst:124 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:126 msgid "**width:** The width of chunks used for infinite maps (default to 16)." msgstr "" #: ../../reference/tmx-map-format.rst:127 msgid "**height:** The width of chunks used for infinite maps (default to 16)." msgstr "" #: ../../reference/tmx-map-format.rst:132 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:134 msgid "**target:** The last file this map was exported to." msgstr "" #: ../../reference/tmx-map-format.rst:135 msgid "**format:** The short name of the last format this map was exported as." msgstr "" #: ../../reference/tmx-map-format.rst:140 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:142 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:144 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:150 msgid "**name:** The name of this tileset." msgstr "" #: ../../reference/tmx-map-format.rst:151 msgid "**class:** The class of this tileset (since 1.9, defaults to \"\")." msgstr "" #: ../../reference/tmx-map-format.rst:152 msgid "**tilewidth:** The (maximum) width of the tiles in this tileset. Irrelevant for image collection tilesets, but stores the maximum tile width." msgstr "" #: ../../reference/tmx-map-format.rst:154 msgid "**tileheight:** The (maximum) height of the tiles in this tileset. Irrelevant for image collection tilesets, but stores the maximum tile height." msgstr "" #: ../../reference/tmx-map-format.rst:157 msgid "**spacing:** The spacing in pixels between the tiles in this tileset (applies to the tileset image, defaults to 0). Irrelevant for image collection tilesets." msgstr "" #: ../../reference/tmx-map-format.rst:160 msgid "**margin:** The margin around the tiles in this tileset (applies to the tileset image, defaults to 0). Irrelevant for image collection tilesets." msgstr "" #: ../../reference/tmx-map-format.rst:162 msgid "**tilecount:** The number of tiles in this tileset (since 0.13). Note that there can be tiles with a higher ID than the tile count, in case the tileset is an image collection from which tiles have been removed." msgstr "" #: ../../reference/tmx-map-format.rst:165 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:168 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:174 msgid "**tilerendersize:** The size to use when rendering tiles from this tileset on a tile layer. Valid values are ``tile`` (the default) and ``grid``. When set to ``grid``, the tile is drawn at the tile grid size of the map. (since 1.9)" msgstr "" #: ../../reference/tmx-map-format.rst:177 msgid "**fillmode:** The fill mode to use when rendering tiles from this tileset. Valid values are ``stretch`` (the default) and ``preserve-aspect-fit``. Only relevant when the tiles are not rendered at their native size, so this applies to resized tile objects or in combination with ``tilerendersize`` set to ``grid``. (since 1.9)" msgstr "" #: ../../reference/tmx-map-format.rst:183 msgid "A tileset can be either *based on a single image*, which is cut into tiles based on the given parameters, or a *collection of images*, in which case each tile defines its own image. In the first case there is a single child :ref:`tmx-image` element. In the latter case, each child :ref:`tmx-tileset-tile` element contains an :ref:`tmx-image` element." msgstr "" #: ../../reference/tmx-map-format.rst:189 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:195 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:199 msgid "Can contain any number: :ref:`tmx-tileset-tile`" msgstr "" #: ../../reference/tmx-map-format.rst:204 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:206 msgid "**x:** Horizontal offset in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:207 msgid "**y:** Vertical offset in pixels (positive is down, defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:209 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:216 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:218 msgid "**orientation:** Orientation of the grid for the tiles in this tileset (``orthogonal`` or ``isometric``, defaults to ``orthogonal``)" msgstr "" #: ../../reference/tmx-map-format.rst:220 msgid "**width:** Width of a grid cell" msgstr "" #: ../../reference/tmx-map-format.rst:221 msgid "**height:** Height of a grid cell" msgstr "" #: ../../reference/tmx-map-format.rst:223 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:230 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:232 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:235 msgid "*id:* Used by some versions of Tiled Java. Deprecated and unsupported." msgstr "" #: ../../reference/tmx-map-format.rst:236 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:238 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:241 msgid "**width:** The image width in pixels (optional, used for tile index correction when the image changes)" msgstr "" #: ../../reference/tmx-map-format.rst:243 msgid "**height:** The image height in pixels (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:245 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:250 msgid "Can contain at most one: :ref:`tmx-data`" msgstr "" #: ../../reference/tmx-map-format.rst:255 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:257 msgid "**Deprecated:** This element has been deprecated since Tiled 1.5, in favour of the :ref:`tmx-wangsets` element, which is more flexible. Tilesets containing terrain types are automatically saved with a Wang set instead." msgstr "" #: ../../reference/tmx-map-format.rst:261 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:264 msgid "Can contain any number: :ref:`tmx-terrain`" msgstr "" #: ../../reference/tmx-map-format.rst:269 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:271 msgid "**Deprecated:** This element has been deprecated since Tiled 1.5, in favour of the :ref:`tmx-wangcolor` element." msgstr "" #: ../../reference/tmx-map-format.rst:274 msgid "**name:** The name of the terrain type." msgstr "" #: ../../reference/tmx-map-format.rst:275 msgid "**tile:** The local tile-id of the tile that represents the terrain visually." msgstr "" #: ../../reference/tmx-map-format.rst:278 #: ../../reference/tmx-map-format.rst:360 #: ../../reference/tmx-map-format.rst:380 #: ../../reference/tmx-map-format.rst:525 #: ../../reference/tmx-map-format.rst:711 msgid "Can contain at most one: :ref:`tmx-properties`" msgstr "" #: ../../reference/tmx-map-format.rst:283 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:285 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:288 msgid "**hflip:** Whether the tiles in this set can be flipped horizontally (default 0)" msgstr "" #: ../../reference/tmx-map-format.rst:289 msgid "**vflip:** Whether the tiles in this set can be flipped vertically (default 0)" msgstr "" #: ../../reference/tmx-map-format.rst:290 msgid "**rotate:** Whether the tiles in this set can be rotated in 90 degree increments (default 0)" msgstr "" #: ../../reference/tmx-map-format.rst:291 msgid "**preferuntransformed:** Whether untransformed tiles remain preferred, otherwise transformed tiles are used to produce more variations (default 0)" msgstr "" #: ../../reference/tmx-map-format.rst:297 #: ../../reference/tmx-map-format.rst:481 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:299 msgid "**id:** The local tile ID within its tileset." msgstr "" #: ../../reference/tmx-map-format.rst:300 msgid "**type:** The class of the tile. Is inherited by tile objects. (since 1.0, defaults to \"\", was saved as ``class`` in 1.9)" msgstr "" #: ../../reference/tmx-map-format.rst:302 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. (deprecated since 1.5 in favour of :ref:`tmx-wangtile`)" msgstr "" #: ../../reference/tmx-map-format.rst:307 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:310 msgid "**x:** The X position of the sub-rectangle representing this tile (default: 0)" msgstr "" #: ../../reference/tmx-map-format.rst:311 msgid "**y:** The Y position of the sub-rectangle representing this tile (default: 0)" msgstr "" #: ../../reference/tmx-map-format.rst:312 msgid "**width:** The width of the sub-rectangle representing this tile (defaults to the image width)" msgstr "" #: ../../reference/tmx-map-format.rst:313 msgid "**height:** The height of the sub-rectangle representing this tile (defaults to the image height)" msgstr "" #: ../../reference/tmx-map-format.rst:315 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:321 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:323 msgid "Contains a list of animation frames." msgstr "" #: ../../reference/tmx-map-format.rst:325 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:328 msgid "Can contain any number: :ref:`tmx-frame`" msgstr "" #: ../../reference/tmx-map-format.rst:333 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:335 msgid "**tileid:** The local ID of a tile within the parent :ref:`tmx-tileset`." msgstr "" #: ../../reference/tmx-map-format.rst:337 msgid "**duration:** How long (in milliseconds) this frame should be displayed before advancing to the next frame." msgstr "" #: ../../reference/tmx-map-format.rst:343 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:345 msgid "Contains the list of Wang sets defined for this tileset." msgstr "" #: ../../reference/tmx-map-format.rst:347 msgid "Can contain any number: :ref:`tmx-wangset`" msgstr "" #: ../../reference/tmx-map-format.rst:352 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:354 msgid "Defines a list of colors and any number of Wang tiles using these colors." msgstr "" #: ../../reference/tmx-map-format.rst:356 msgid "**name:** The name of the Wang set." msgstr "" #: ../../reference/tmx-map-format.rst:357 msgid "**class:** The class of the Wang set (since 1.9, defaults to \"\")." msgstr "" #: ../../reference/tmx-map-format.rst:358 msgid "**tile:** The tile ID of the tile representing this Wang set." msgstr "" #: ../../reference/tmx-map-format.rst:362 msgid "Can contain up to 255: :ref:`tmx-wangcolor` (since Tiled 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:364 msgid "Can contain any number: :ref:`tmx-wangtile`" msgstr "" #: ../../reference/tmx-map-format.rst:369 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:371 msgid "A color that can be used to define the corner and/or edge of a Wang tile." msgstr "" #: ../../reference/tmx-map-format.rst:373 msgid "**name:** The name of this color." msgstr "" #: ../../reference/tmx-map-format.rst:374 msgid "**class:** The class of this color (since 1.9, defaults to \"\")." msgstr "" #: ../../reference/tmx-map-format.rst:375 msgid "**color:** The color in ``#RRGGBB`` format (example: ``#c17d11``)." msgstr "" #: ../../reference/tmx-map-format.rst:376 msgid "**tile:** The tile ID of the tile representing this color." msgstr "" #: ../../reference/tmx-map-format.rst:377 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:385 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:387 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:390 msgid "**tileid:** The tile ID." msgstr "" #: ../../reference/tmx-map-format.rst:391 msgid "**wangid:** The Wang ID, since Tiled 1.5 given by a comma-separated list of indexes (0-255) referring to the Wang colors in the Wang set in the order: top, top-right, right, bottom-right, bottom, bottom-left, left, top-left. Index 0 means *unset* and index 1 refers to the first Wang color. 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:398 msgid "*hflip:* Whether the tile is flipped horizontally (removed in Tiled 1.5)." msgstr "" #: ../../reference/tmx-map-format.rst:399 msgid "*vflip:* Whether the tile is flipped vertically (removed in Tiled 1.5)." msgstr "" #: ../../reference/tmx-map-format.rst:400 msgid "*dflip:* Whether the tile is flipped on its diagonal (removed in Tiled 1.5)." msgstr "" #: ../../reference/tmx-map-format.rst:405 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:407 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:411 #: ../../reference/tmx-map-format.rst:495 #: ../../reference/tmx-map-format.rst:661 #: ../../reference/tmx-map-format.rst:693 msgid "**id:** Unique ID of the layer (defaults to 0, with valid IDs being at least 1). 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:415 msgid "**name:** The name of the layer. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:416 msgid "**class:** The class of the layer (since 1.9, defaults to \"\")." msgstr "" #: ../../reference/tmx-map-format.rst:417 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:418 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:419 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:420 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:421 msgid "**opacity:** The opacity of the layer as a value from 0 to 1. Defaults to 1." msgstr "" #: ../../reference/tmx-map-format.rst:422 msgid "**visible:** Whether the layer is shown (1) or hidden (0). Defaults to 1." msgstr "" #: ../../reference/tmx-map-format.rst:423 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:424 msgid "**offsetx:** Horizontal offset for this layer in pixels. Defaults to 0. (since 0.14)" msgstr "" #: ../../reference/tmx-map-format.rst:426 msgid "**offsety:** Vertical offset for this layer in pixels. Defaults to 0. (since 0.14)" msgstr "" #: ../../reference/tmx-map-format.rst:428 #: ../../reference/tmx-map-format.rst:671 msgid "**parallaxx:** Horizontal :ref:`parallax factor ` for this layer. Defaults to 1. (since 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:429 #: ../../reference/tmx-map-format.rst:672 msgid "**parallaxy:** Vertical :ref:`parallax factor ` for this layer. Defaults to 1. (since 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:431 msgid "Can contain at most one: :ref:`tmx-properties`, :ref:`tmx-data`" msgstr "" #: ../../reference/tmx-map-format.rst:436 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:438 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:440 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:444 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:448 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:454 msgid "Whatever format you choose for your layer data, you will always end up with so called \":doc:`global-tile-ids`\" (gids). They are called \"global\", since they may refer to a tile from any of the tilesets used by the map. The IDs also contain :ref:`flipping flags `. The tilesets are always stored with increasing ``firstgid``\\ s." msgstr "" #: ../../reference/tmx-map-format.rst:460 msgid "Can contain any number: :ref:`tmx-tilelayer-tile`, :ref:`tmx-chunk`" msgstr "" #: ../../reference/tmx-map-format.rst:465 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:467 msgid "**x:** The x coordinate of the chunk in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:468 msgid "**y:** The y coordinate of the chunk in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:469 msgid "**width:** The width of the chunk in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:470 msgid "**height:** The height of the chunk in tiles." msgstr "" #: ../../reference/tmx-map-format.rst:472 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:476 msgid "Can contain any number: :ref:`tmx-tilelayer-tile`" msgstr "" #: ../../reference/tmx-map-format.rst:483 msgid "**gid:** The global tile ID (default: 0)." msgstr "" #: ../../reference/tmx-map-format.rst:485 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:493 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:499 msgid "**name:** The name of the object group. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:500 msgid "**class:** The class of the object group (since 1.9, defaults to \"\")." msgstr "" #: ../../reference/tmx-map-format.rst:501 msgid "**color:** The color used to display the objects in this group. (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:502 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:504 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:506 msgid "*width:* The width of the object group in tiles. Meaningless." msgstr "" #: ../../reference/tmx-map-format.rst:507 msgid "*height:* The height of the object group in tiles. Meaningless." msgstr "" #: ../../reference/tmx-map-format.rst:508 #: ../../reference/tmx-map-format.rst:677 #: ../../reference/tmx-map-format.rst:703 msgid "**opacity:** The opacity of the layer as a value from 0 to 1. (defaults to 1)" msgstr "" #: ../../reference/tmx-map-format.rst:510 #: ../../reference/tmx-map-format.rst:679 #: ../../reference/tmx-map-format.rst:704 msgid "**visible:** Whether the layer is shown (1) or hidden (0). (defaults to 1)" msgstr "" #: ../../reference/tmx-map-format.rst:511 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:512 msgid "**offsetx:** Horizontal offset for this object group in pixels. (defaults to 0) (since 0.14)" msgstr "" #: ../../reference/tmx-map-format.rst:514 msgid "**offsety:** Vertical offset for this object group in pixels. (defaults to 0) (since 0.14)" msgstr "" #: ../../reference/tmx-map-format.rst:516 msgid "**parallaxx:** Horizontal :ref:`parallax factor ` for this object group. Defaults to 1. (since 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:517 msgid "**parallaxy:** Vertical :ref:`parallax factor ` for this object group. Defaults to 1. (since 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:518 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:522 msgid "The object group is in fact a map layer, and is hence called \"object layer\" in Tiled." msgstr "" #: ../../reference/tmx-map-format.rst:527 msgid "Can contain any number: :ref:`tmx-object`" msgstr "" #: ../../reference/tmx-map-format.rst:532 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:534 msgid "**id:** Unique ID of the object (defaults to 0, with valid IDs being at least 1). 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:538 msgid "**name:** The name of the object. An arbitrary string. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:539 msgid "**type:** The class of the object. An arbitrary string. (defaults to \"\", was saved as ``class`` in 1.9)" msgstr "" #: ../../reference/tmx-map-format.rst:541 msgid "**x:** The x coordinate of the object in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:542 msgid "**y:** The y coordinate of the object in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:543 msgid "**width:** The width of the object in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:544 msgid "**height:** The height of the object in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:545 msgid "**rotation:** The rotation of the object in degrees clockwise around (x, y). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:547 msgid "**gid:** A reference to a tile. (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:548 msgid "**visible:** Whether the object is shown (1) or hidden (0). (defaults to 1)" msgstr "" #: ../../reference/tmx-map-format.rst:550 msgid "**template:** A reference to a :ref:`template file `. (optional)" msgstr "" #: ../../reference/tmx-map-format.rst:552 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:558 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:561 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:567 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:572 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:579 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:581 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:588 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:590 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:596 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:598 #: ../../reference/tmx-map-format.rst:611 msgid "**points:** A list of x,y coordinates in pixels." msgstr "" #: ../../reference/tmx-map-format.rst:600 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:609 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:613 msgid "A ``polyline`` follows the same placement definition as a ``polygon`` object." msgstr "" #: ../../reference/tmx-map-format.rst:619 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:621 msgid "**fontfamily:** The font family used (defaults to \"sans-serif\")" msgstr "" #: ../../reference/tmx-map-format.rst:622 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:625 msgid "**wrap:** Whether word wrapping is enabled (1) or disabled (0). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:627 msgid "**color:** Color of the text in ``#AARRGGBB`` or ``#RRGGBB`` format (defaults to #000000)" msgstr "" #: ../../reference/tmx-map-format.rst:629 msgid "**bold:** Whether the font is bold (1) or not (0). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:630 msgid "**italic:** Whether the font is italic (1) or not (0). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:631 msgid "**underline:** Whether a line should be drawn below the text (1) or not (0). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:633 msgid "**strikeout:** Whether a line should be drawn through the text (1) or not (0). (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:635 msgid "**kerning:** Whether kerning should be used while rendering the text (1) or not (0). (defaults to 1)" msgstr "" #: ../../reference/tmx-map-format.rst:637 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:640 msgid "**valign:** Vertical alignment of the text within the object (``top`` , ``center`` or ``bottom``, defaults to ``top``)" msgstr "" #: ../../reference/tmx-map-format.rst:643 msgid "Used to mark an object as a text object. Contains the actual text as character data." msgstr "" #: ../../reference/tmx-map-format.rst:646 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:653 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:659 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:665 msgid "**name:** The name of the image layer. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:666 msgid "**class:** The class of the image layer (since 1.9, defaults to \"\")." msgstr "" #: ../../reference/tmx-map-format.rst:667 msgid "**offsetx:** Horizontal offset of the image layer in pixels. (defaults to 0) (since 0.15)" msgstr "" #: ../../reference/tmx-map-format.rst:669 msgid "**offsety:** Vertical offset of the image layer in pixels. (defaults to 0) (since 0.15)" msgstr "" #: ../../reference/tmx-map-format.rst:673 msgid "*x:* The x position of the image layer in pixels. (defaults to 0, deprecated since 0.15)" msgstr "" #: ../../reference/tmx-map-format.rst:675 msgid "*y:* The y position of the image layer in pixels. (defaults to 0, deprecated since 0.15)" msgstr "" #: ../../reference/tmx-map-format.rst:680 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:681 msgid "**repeatx:** Whether the image drawn by this layer is repeated along the X axis. (since Tiled 1.8)" msgstr "" #: ../../reference/tmx-map-format.rst:682 msgid "**repeaty:** Whether the image drawn by this layer is repeated along the Y axis. (since Tiled 1.8)" msgstr "" #: ../../reference/tmx-map-format.rst:684 msgid "A layer consisting of a single image." msgstr "" #: ../../reference/tmx-map-format.rst:686 msgid "Can contain at most one: :ref:`tmx-properties`, :ref:`tmx-image`" msgstr "" #: ../../reference/tmx-map-format.rst:691 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:697 msgid "**name:** The name of the group layer. (defaults to \"\")" msgstr "" #: ../../reference/tmx-map-format.rst:698 msgid "**class:** The class of the group layer (since 1.9, defaults to \"\")." msgstr "" #: ../../reference/tmx-map-format.rst:699 msgid "**offsetx:** Horizontal offset of the group layer in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:700 msgid "**offsety:** Vertical offset of the group layer in pixels. (defaults to 0)" msgstr "" #: ../../reference/tmx-map-format.rst:701 msgid "**parallaxx:** Horizontal :ref:`parallax factor ` for this group. Defaults to 1. (since 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:702 msgid "**parallaxy:** Vertical :ref:`parallax factor ` for this group. Defaults to 1. (since 1.5)" msgstr "" #: ../../reference/tmx-map-format.rst:705 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:707 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:713 msgid "Can contain any number: :ref:`tmx-layer`, :ref:`tmx-objectgroup`, :ref:`tmx-imagelayer`, :ref:`tmx-group`" msgstr "" #: ../../reference/tmx-map-format.rst:719 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:721 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``, ``group`` and ``property`` elements." msgstr "" #: ../../reference/tmx-map-format.rst:726 msgid "Can contain any number: :ref:`tmx-property`" msgstr "" #: ../../reference/tmx-map-format.rst:731 msgid "" msgstr "" #: ../../reference/tmx-map-format.rst:733 msgid "**name:** The name of the property." msgstr "" #: ../../reference/tmx-map-format.rst:734 msgid "**type:** The type of the property. Can be ``string`` (default), ``int``, ``float``, ``bool``, ``color``, ``file``, ``object`` or ``class`` (since 0.16, with ``color`` and ``file`` added in 0.17, ``object`` added in 1.4 and ``class`` added in 1.8)." msgstr "" #: ../../reference/tmx-map-format.rst:738 msgid "**propertytype:** The name of the :ref:`custom property type `, when applicable (since 1.8)." msgstr "" #: ../../reference/tmx-map-format.rst:741 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:745 msgid "Boolean properties have a value of either \"true\" or \"false\"." msgstr "" #: ../../reference/tmx-map-format.rst:747 msgid "Color properties are stored in the format ``#AARRGGBB``." msgstr "" #: ../../reference/tmx-map-format.rst:749 msgid "File properties are stored as paths relative from the location of the map file." msgstr "" #: ../../reference/tmx-map-format.rst:752 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:757 msgid "Class properties will have their member values stored in a nested :ref:`tmx-properties` element. Only the actually set members are saved. When no members have been set the ``properties`` element is left out entirely." msgstr "" #: ../../reference/tmx-map-format.rst:761 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:767 msgid "Can contain at most one: :ref:`tmx-properties` (since 1.8)" msgstr "" #: ../../reference/tmx-map-format.rst:772 msgid "Template Files" msgstr "" #: ../../reference/tmx-map-format.rst:774 msgid "Templates are saved in their own file, and are referenced by :ref:`objects ` that are template instances." msgstr "" #: ../../reference/tmx-map-format.rst:780 msgid "