diff --git a/.ci/azure/prepare_git_repo.cmake b/.ci/azure/prepare_git_repo.cmake deleted file mode 100644 index 8e7b084b8d3..00000000000 --- a/.ci/azure/prepare_git_repo.cmake +++ /dev/null @@ -1,40 +0,0 @@ -cmake_minimum_required(VERSION 3.3) -cmake_policy(SET CMP0054 NEW) - -# [preparegitrepo.cmake] -# -# Copyright © 2018-2020 pastdue ( https://github.com/past-due/ ) and contributors -# License: MIT License ( https://opensource.org/licenses/MIT ) -# - -# Azure DevOps: Repo prep -macro(create_all_branches) - - # Keep track of where Azure's checkout task put us. - # We are on a detached head, and we need to be able to go back to it. - execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse HEAD - OUTPUT_VARIABLE build_head - OUTPUT_STRIP_TRAILING_WHITESPACE ) - - # ensure all tags are fetched - # "git fetch --tags -f" - execute_process(COMMAND ${GIT_EXECUTABLE} fetch --tags -f) - - # checkout master to ensure that a local master branch exists - # "git checkout -qf master" - execute_process(COMMAND ${GIT_EXECUTABLE} checkout -qf master) - - # finally, go back to where we were at the beginning - # "git checkout -qf ${build_head}" - execute_process(COMMAND ${GIT_EXECUTABLE} checkout -qf ${build_head}) - -endmacro() - -find_package(Git REQUIRED) - -if(DEFINED ENV{TF_BUILD} AND "$ENV{TF_BUILD}" STREQUAL "True") - create_all_branches() - message( STATUS "Prepared Azure DevOps Git repo for autorevision" ) -else() - message( WARNING "Azure DevOps environment not detected" ) -endif() diff --git a/.ci/azure/templates/macos-build-pipeline-template.yml b/.ci/azure/templates/macos-build-pipeline-template.yml deleted file mode 100644 index b4f92db09d4..00000000000 --- a/.ci/azure/templates/macos-build-pipeline-template.yml +++ /dev/null @@ -1,236 +0,0 @@ -# Template for WZ macOS builds -# -# For more information see: -# Xcode task: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/xcode?view=azure-devops -# - -parameters: -# defaults for any parameters that aren't specified -- name: name - default: '' -- name: displayName - default: '' -- name: vmImage - default: '' -- name: xcodeDeveloperDir - default: 'default' -- name: vcpkgBuildXcodeDeveloperDir - default: 'default' -- name: vcpkgInstallXcodeDeveloperDir - default: 'default' -- name: includeVideos - type: boolean - default: false -- name: publishArtifact - type: boolean - default: false -- name: artifact - default: 'warzone2100_macOS' -# - name: uploadArtifactToGitHubReleases -# type: boolean -# default: false -# - name: gitHubConnection -# default: '' - -jobs: -- job: ${{ parameters.name }} - displayName: ${{ parameters.displayName }} # friendly name to display in the UI - continueOnError: true # 'true' if future jobs should run even if this job fails; defaults to 'false' - pool: - vmImage: ${{ parameters.vmImage }} - - variables: - MACOSX_DEPLOYMENT_TARGET: 10.10 - DESIRED_XCODE_DEV_DIR: ${{ parameters.xcodeDeveloperDir }} - DESIRED_VCPKG_BUILD_XCODE_DEV_DIR: ${{ parameters.vcpkgBuildXcodeDeveloperDir }} - DESIRED_VCPKG_INSTALL_XCODE_DEV_DIR: ${{ parameters.vcpkgInstallXcodeDeveloperDir }} - WZ_INCLUDE_VIDEOS: ${{ parameters.includeVideos }} - - steps: - - template: prepare-repo-steps.yml - - task: CmdLine@2 - displayName: Compute additional variables - # See: "Build.SourceBranchName does not include full name, if name includes forward slash" - # - Link: https://github.com/microsoft/azure-pipelines-agent/issues/838 - # Also see: https://medium.com/microsoftazure/how-to-pass-variables-in-azure-pipelines-yaml-tasks-5c81c5d31763 - inputs: - script: | - FULL_SOURCE_BRANCH_NAME=$(echo ${BUILD_SOURCEBRANCHNAME} | sed 's/refs\/[^\/]*\///') - echo "FULL_SOURCE_BRANCH_NAME=${FULL_SOURCE_BRANCH_NAME}" - echo "##vso[task.setvariable variable=FULL_SOURCE_BRANCH_NAME]$FULL_SOURCE_BRANCH_NAME" - - task: CmdLine@2 - displayName: Install pre-reqs - inputs: - script: | - brew install gettext - # NOTE: Specify an explicit Asciidoctor version to help ensure reproducible builds - gem install asciidoctor -v 2.0.10 --no-document - cmake --version - - task: CmdLine@2 - displayName: configure_mac.cmake - inputs: - script: | - echo "MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET}" - echo "BUILD_DEFINITIONNAME=${BUILD_DEFINITIONNAME}" - echo "AGENT_BUILDDIRECTORY=${AGENT_BUILDDIRECTORY}" - - cd "${AGENT_BUILDDIRECTORY}" - - # Delete any prior build dir, create a fresh one - rm -rf build - if [ ! -d "build" ]; then - mkdir build - fi - - # configure_mac.cmake (gets dependencies, configures CMake) - cd build - WZ_DISTRIBUTOR="UNKNOWN" - if [ "${BUILD_DEFINITIONNAME}" == "Warzone2100.warzone2100" ]; then - # Building from main repo - set distributor - WZ_DISTRIBUTOR="wz2100.net" - fi - - echo "Current directory: $(pwd)" - ADDITIONAL_CONFIGURE_ARGS="" - ADDITIONAL_CMAKE_ARGUMENTS="-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY=;-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO" - echo "WZ_INCLUDE_VIDEOS=${WZ_INCLUDE_VIDEOS}" - if [ "${WZ_INCLUDE_VIDEOS}" == "True" ]; then - ADDITIONAL_CMAKE_ARGUMENTS="${ADDITIONAL_CMAKE_ARGUMENTS};-DWZ_INCLUDE_VIDEOS:BOOL=ON" - else - ADDITIONAL_CMAKE_ARGUMENTS="${ADDITIONAL_CMAKE_ARGUMENTS};-DWZ_INCLUDE_VIDEOS:BOOL=OFF" - fi - echo "ADDITIONAL_CMAKE_ARGUMENTS=${ADDITIONAL_CMAKE_ARGUMENTS}" - if [ "${DESIRED_XCODE_DEV_DIR}" != "default" ]; then - # Need to run configure_mac script twice - - if [ "${DESIRED_VCPKG_BUILD_XCODE_DEV_DIR}" != "default" ]; then - echo "Run configure_mac to just build vcpkg (with Xcode: ${DESIRED_VCPKG_BUILD_XCODE_DEV_DIR})" - sudo xcode-select -switch "${DESIRED_VCPKG_BUILD_XCODE_DEV_DIR}" - else - echo "Run configure_mac to just build vcpkg (with system default Xcode)" - fi - ADDITIONAL_CONFIGURE_ARGS="-DONLY_BUILD_VCPKG=true" - echo "cmake ${ADDITIONAL_CONFIGURE_ARGS} -DVCPKG_BUILD_TYPE=release -DWZ_DISTRIBUTOR:STRING=\"${WZ_DISTRIBUTOR}\" -DADDITIONAL_CMAKE_ARGUMENTS=\"-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY=;-DCODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO\" -P ../configure_mac.cmake" - cmake ${ADDITIONAL_CONFIGURE_ARGS} -DVCPKG_BUILD_TYPE=release -DWZ_DISTRIBUTOR:STRING="${WZ_DISTRIBUTOR}" -DADDITIONAL_CMAKE_ARGUMENTS="${ADDITIONAL_CMAKE_ARGUMENTS}" -P ../src/configure_mac.cmake - - VCPKG_INSTALL_XCODE_DEV_DIR="${DESIRED_XCODE_DEV_DIR}" - if [ "${DESIRED_VCPKG_INSTALL_XCODE_DEV_DIR}" != "default" ]; then - VCPKG_INSTALL_XCODE_DEV_DIR="${DESIRED_VCPKG_INSTALL_XCODE_DEV_DIR}" - fi - echo "Switching Xcode: ${VCPKG_INSTALL_XCODE_DEV_DIR}" - sudo xcode-select -switch "${VCPKG_INSTALL_XCODE_DEV_DIR}" - ADDITIONAL_CONFIGURE_ARGS="-DSKIP_VCPKG_BUILD=true" - fi - echo "cmake ${ADDITIONAL_CONFIGURE_ARGS} -DVCPKG_BUILD_TYPE=release -DWZ_DISTRIBUTOR:STRING=\"${WZ_DISTRIBUTOR}\" -DADDITIONAL_CMAKE_ARGUMENTS=\"-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY=;-DCODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO\" -P ../configure_mac.cmake" - cmake ${ADDITIONAL_CONFIGURE_ARGS} -DVCPKG_BUILD_TYPE=release -DWZ_DISTRIBUTOR:STRING="${WZ_DISTRIBUTOR}" -DADDITIONAL_CMAKE_ARGUMENTS="${ADDITIONAL_CMAKE_ARGUMENTS}" -P ../src/configure_mac.cmake - result=${?} - if [ $result -ne 0 ]; then - echo "ERROR: configure_mac.cmake failed" - exit ${result} - fi - if [ "${DESIRED_XCODE_DEV_DIR}" != "default" ] && [ "${DESIRED_VCPKG_INSTALL_XCODE_DEV_DIR}" != "${DESIRED_XCODE_DEV_DIR}" ]; then - echo "Switching Xcode: ${DESIRED_XCODE_DEV_DIR}" - sudo xcode-select -switch "${DESIRED_XCODE_DEV_DIR}" - fi - cd - > /dev/null - failOnStderr: false - - task: Xcode@5 - displayName: Build Xcode project - inputs: - actions: 'build' - configuration: 'Release' - sdk: 'macosx' - xcWorkspacePath: '$(Pipeline.Workspace)/build/warzone2100.xcodeproj' - scheme: 'package' - packageApp: false - - task: CmdLine@2 - displayName: Output build info - inputs: - script: | - cd "${AGENT_BUILDDIRECTORY}" - echo "BUILD_ARTIFACTSTAGINGDIRECTORY=${BUILD_ARTIFACTSTAGINGDIRECTORY}" - OUTPUT_DIR="${BUILD_ARTIFACTSTAGINGDIRECTORY}" - - echo "[autorevision.h]:" - cat "build/build_tools/autorevision.h" - echo "===============================" - - echo "[netplay_config.h]:" - cat "build/lib/netplay/netplay_config.h" - echo "===============================" - - # Verify "warzone2100.zip" was created - BUILT_WARZONE_ZIP="build/warzone2100.zip" - if [ ! -f "${BUILT_WARZONE_ZIP}" ]; then - echo "ERROR: Something went wrong, and \"${BUILT_WARZONE_ZIP}\" does not exist" - exit 1 - fi - # Extract & verify the .zip contents - TMP_PKG_EXTRACT_DIR="build/tmp/_wzextract" - rm -rf "${TMP_PKG_EXTRACT_DIR}" - if [ ! -d "${TMP_PKG_EXTRACT_DIR}" ]; then - mkdir -p "${TMP_PKG_EXTRACT_DIR}" - fi - unzip -qq "${BUILT_WARZONE_ZIP}" -d "${TMP_PKG_EXTRACT_DIR}" - cd "${TMP_PKG_EXTRACT_DIR}" - if [ ! -d "Warzone 2100.app" ]; then - echo "ERROR: \"Warzone 2100.app\" was not extracted from \"${BUILT_WARZONE_ZIP}\"" - exit 1 - fi - # For debugging purposes, output some information about the generated "Warzone 2100.app" (inside the .zip) - echo "Generated \"Warzone 2100.app\"" - generated_infoplist_location="Warzone 2100.app/Contents/Info.plist" - generated_versionnumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${generated_infoplist_location}") - echo " -> Version Number (CFBundleShortVersionString): ${generated_versionnumber}" - generated_buildnumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${generated_infoplist_location}") - echo " -> Build Number (CFBundleVersion): ${generated_buildnumber}" - generated_minimumsystemversion=$(/usr/libexec/PlistBuddy -c "Print LSMinimumSystemVersion" "${generated_infoplist_location}") - echo " -> Minimum macOS (LSMinimumSystemVersion): ${generated_minimumsystemversion}" - codesign_verify_result=$(codesign --verify --deep --strict --verbose=2 "Warzone 2100.app" 2>&1) - echo " -> codesign --verify --deep --strict --verbose=2 \"Warzone 2100.app\"" - if [ -n "${codesign_verify_result}" ]; then - while read -r line; do - echo " $line" - done <<< "$codesign_verify_result" - else - echo " (No output?)" - fi - cd - > /dev/null - - # Move warzone2100.zip to the output directory, renaming it - DESIRED_ZIP_NAME="warzone2100_macOS.zip" - if [ "${WZ_INCLUDE_VIDEOS}" != "True" ]; then - DESIRED_ZIP_NAME="warzone2100_macOS_novideos.zip" - fi - mv "$BUILT_WARZONE_ZIP" "${OUTPUT_DIR}/${DESIRED_ZIP_NAME}" - result=${?} - if [ $result -ne 0 ]; then - echo "ERROR: Failed to move zip file" - exit ${result} - fi - echo "Generated warzone2100.zip: \"${OUTPUT_DIR}/${DESIRED_ZIP_NAME}\"" - ZIP_HASH="$(shasum -a 512 "${OUTPUT_DIR}/${DESIRED_ZIP_NAME}")" - ZIP_SIZE="$(stat -f '%z' "${OUTPUT_DIR}/${DESIRED_ZIP_NAME}")" - echo " -> SHA512: ${ZIP_HASH}" - echo " -> Size (bytes): ${ZIP_SIZE}" - - task: PublishPipelineArtifact@1 - condition: and(succeeded(), eq('${{ parameters.publishArtifact }}', true)) - inputs: - targetPath: '$(Build.ArtifactStagingDirectory)' - artifact: ${{ parameters.artifact }} - # - task: GithubRelease@1 - # displayName: 'Upload to GitHub Release' - # condition: and(succeeded(), eq('${{ parameters.uploadArtifactToGitHubReleases }}', true), ne('${{ parameters.gitHubConnection }}', ''), startsWith(variables['Build.SourceBranch'], 'refs/tags/')) - # inputs: - # gitHubConnection: ${{ parameters.gitHubConnection }} - # action: edit - # tagSource: userSpecifiedTag - # # We can't use Build.SourceBranchName because: - # # - "Build.SourceBranchName does not include full name, if name includes forward slash" - # # - Link: https://github.com/microsoft/azure-pipelines-agent/issues/838 - # tag: $(FULL_SOURCE_BRANCH_NAME) - # assets: | - # $(Build.ArtifactStagingDirectory)/*.zip - # assetUploadMode: 'replace' - # isDraft: true - # addChangeLog: false diff --git a/.ci/azure/templates/prepare-repo-steps.yml b/.ci/azure/templates/prepare-repo-steps.yml deleted file mode 100644 index e5ccd9da629..00000000000 --- a/.ci/azure/templates/prepare-repo-steps.yml +++ /dev/null @@ -1,14 +0,0 @@ -parameters: -- name: checkoutPath - default: 'src' - -steps: -- checkout: self - submodules: recursive - path: ${{ parameters.checkoutPath }} - persistCredentials: false -- task: CmdLine@2 - displayName: Prepare Git repo for autorevision - inputs: - script: | - cmake -P .ci/azure/prepare_git_repo.cmake diff --git a/.ci/cmake/toolchains/aarch64-w64-mingw32.cmake b/.ci/cmake/toolchains/aarch64-w64-mingw32.cmake new file mode 100644 index 00000000000..39ed04c8b69 --- /dev/null +++ b/.ci/cmake/toolchains/aarch64-w64-mingw32.cmake @@ -0,0 +1,14 @@ +SET(CMAKE_SYSTEM_NAME "Windows") +SET(CMAKE_SYSTEM_PROCESSOR "ARM64") +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "") +endif() + +set(_WZ_MINGW_TRIPLET_PREFIX "aarch64") + +find_program(CMAKE_C_COMPILER "${_WZ_MINGW_TRIPLET_PREFIX}-w64-mingw32-gcc") +find_program(CMAKE_CXX_COMPILER "${_WZ_MINGW_TRIPLET_PREFIX}-w64-mingw32-g++") +find_program(CMAKE_RC_COMPILER "${_WZ_MINGW_TRIPLET_PREFIX}-w64-mingw32-windres") +if(NOT CMAKE_RC_COMPILER) + find_program(CMAKE_RC_COMPILER "windres") +endif() diff --git a/.ci/cmake/toolchains/i686-w64-mingw32.cmake b/.ci/cmake/toolchains/i686-w64-mingw32.cmake new file mode 100644 index 00000000000..dfe95eb0a73 --- /dev/null +++ b/.ci/cmake/toolchains/i686-w64-mingw32.cmake @@ -0,0 +1,14 @@ +SET(CMAKE_SYSTEM_NAME "Windows") +SET(CMAKE_SYSTEM_PROCESSOR "X86") +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "") +endif() + +set(_WZ_MINGW_TRIPLET_PREFIX "i686") + +find_program(CMAKE_C_COMPILER "${_WZ_MINGW_TRIPLET_PREFIX}-w64-mingw32-gcc") +find_program(CMAKE_CXX_COMPILER "${_WZ_MINGW_TRIPLET_PREFIX}-w64-mingw32-g++") +find_program(CMAKE_RC_COMPILER "${_WZ_MINGW_TRIPLET_PREFIX}-w64-mingw32-windres") +if(NOT CMAKE_RC_COMPILER) + find_program(CMAKE_RC_COMPILER "windres") +endif() diff --git a/.ci/cmake/Toolchain-Linux-cross-m32.cmake b/.ci/cmake/toolchains/m32-cross-linux.cmake similarity index 100% rename from .ci/cmake/Toolchain-Linux-cross-m32.cmake rename to .ci/cmake/toolchains/m32-cross-linux.cmake diff --git a/.ci/emscripten/toolchain/Toolchain-Emscripten.cmake b/.ci/cmake/toolchains/wasm32-emscripten.cmake similarity index 100% rename from .ci/emscripten/toolchain/Toolchain-Emscripten.cmake rename to .ci/cmake/toolchains/wasm32-emscripten.cmake diff --git a/.ci/cmake/toolchains/x86_64-w64-mingw32.cmake b/.ci/cmake/toolchains/x86_64-w64-mingw32.cmake new file mode 100644 index 00000000000..8e40528afe9 --- /dev/null +++ b/.ci/cmake/toolchains/x86_64-w64-mingw32.cmake @@ -0,0 +1,14 @@ +SET(CMAKE_SYSTEM_NAME "Windows") +SET(CMAKE_SYSTEM_PROCESSOR "AMD64") +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "") +endif() + +set(_WZ_MINGW_TRIPLET_PREFIX "x86_64") + +find_program(CMAKE_C_COMPILER "${_WZ_MINGW_TRIPLET_PREFIX}-w64-mingw32-gcc") +find_program(CMAKE_CXX_COMPILER "${_WZ_MINGW_TRIPLET_PREFIX}-w64-mingw32-g++") +find_program(CMAKE_RC_COMPILER "${_WZ_MINGW_TRIPLET_PREFIX}-w64-mingw32-windres") +if(NOT CMAKE_RC_COMPILER) + find_program(CMAKE_RC_COMPILER "windres") +endif() diff --git a/.ci/flatpak/net.wz2100.wz2100.yaml.in b/.ci/flatpak/net.wz2100.wz2100.yaml.in index 8ebc6063cd1..ef82a530c38 100755 --- a/.ci/flatpak/net.wz2100.wz2100.yaml.in +++ b/.ci/flatpak/net.wz2100.wz2100.yaml.in @@ -1,7 +1,7 @@ app-id: net.wz2100.wz2100@WZ_OUTPUT_NAME_SUFFIX@ # We need to force the target architecture for the runtime, to support cross-compilation runtime: org.freedesktop.Platform@WZ_RUNTIME_SUFFIX@ -runtime-version: '23.08' +runtime-version: '24.08' sdk: org.freedesktop.Sdk command: warzone2100 @WZ_CROSS_COMPILE_SDK_EXTENSIONS@ @@ -59,11 +59,11 @@ modules: - '*' buildsystem: simple build-commands: - - gem install --ignore-dependencies --no-user-install --verbose --local --install-dir /app/lib/ruby/gems/build-dep --bindir /app/bin asciidoctor-2.0.17.gem + - gem install --ignore-dependencies --no-user-install --verbose --local --install-dir /app/lib/ruby/gems/build-dep --bindir /app/bin asciidoctor-2.0.23.gem sources: - type: file - url: https://rubygems.org/downloads/asciidoctor-2.0.17.gem - sha256: ed5b5e399e8d64994cc16f0983f993d6e33990909a8415b6fc8b786cdeb00f3d + url: https://rubygems.org/downloads/asciidoctor-2.0.23.gem + sha256: 52208807f237dfa0ca29882f8b13d60b820496116ad191cf197ca56f2b7fddf3 - name: sentry-native cleanup: @@ -111,21 +111,21 @@ modules: sources: - type: git url: https://github.com/google/shaderc.git - tag: v2023.7 - commit: 3882b16417077aa8eaa7b5775920e7ba4b8a224d + tag: v2024.3 + commit: ff84893dd52d28f0b1737d2635733d952013bd9c # Replicate the needed functionality of utils/git-sync-deps # To avoid having to break the build sandbox to download files - type: git url: https://github.com/KhronosGroup/SPIRV-Headers.git - commit: 4183b260f4cccae52a89efdfcdd43c4897989f42 # retrieved from DEPS in https://github.com/google/shaderc @ tag + commit: 2a9b6f951c7d6b04b6c21fe1bf3f475b68b84801 # retrieved from DEPS in https://github.com/google/shaderc @ tag dest: third_party/spirv-headers - type: git url: https://github.com/KhronosGroup/SPIRV-Tools.git - commit: 360d469b9eac54d6c6e20f609f9ec35e3a5380ad # retrieved from DEPS in https://github.com/google/shaderc @ tag + commit: 01c8438ee4ac52c248119b7e03e0b021f853b51a # retrieved from DEPS in https://github.com/google/shaderc @ tag dest: third_party/spirv-tools - type: git url: https://github.com/KhronosGroup/glslang.git - commit: 48f9ed8b08be974f4e463ef38136c8f23513b2cf # retrieved from DEPS in https://github.com/google/shaderc @ tag + commit: 467ce01c71e38cf01814c48987a5c0dadd914df4 # retrieved from DEPS in https://github.com/google/shaderc @ tag dest: third_party/glslang - name: physfs @@ -154,8 +154,8 @@ modules: sources: - type: git url: https://github.com/fribidi/fribidi - tag: v1.0.12 - commit: 6428d8469e536bcbb6e12c7b79ba6659371c435a + tag: v1.0.15 + commit: 2803ff176713a27d7edb57a24bc60c38a02182e9 - name: libsodium @WZ_CROSS_BUILD_OPTIONS@ @@ -163,8 +163,8 @@ modules: @WZ_AUTOTOOLS_CROSS_CONFIG_OPTIONS@ sources: - type: archive - url: https://github.com/jedisct1/libsodium/releases/download/1.0.19-RELEASE/libsodium-1.0.19.tar.gz - sha256: 018d79fe0a045cca07331d37bd0cb57b2e838c51bc48fd837a1472e50068bbea + url: https://github.com/jedisct1/libsodium/releases/download/1.0.20-RELEASE/libsodium-1.0.20.tar.gz + sha256: ebb65ef6ca439333c2bb41a0c1990587288da07f6c7fd07cb3a18cc18d30ce19 - name: warzone2100 buildsystem: cmake-ninja @@ -174,6 +174,7 @@ modules: - -DCMAKE_BUILD_TYPE=Release - -DWZ_SKIP_OUTPUT_NAME_SUFFIX_ON_BINARY=ON - -DWZ_APPSTREAM_ID=net.wz2100.wz2100 + - -DENABLE_DISCORD:BOOL=ON - -DWZ_BUILD_SENTRY:BOOL=ON - -DWZ_SENTRY_PREDOWNLOADED_SENTRY_ARCHIVE=/app/prestaged-dl/sentry-native.zip - -DWZ_DOWNLOAD_PREBUILT_PACKAGES_ASSET_DIR=/app/prestaged-dl @@ -193,7 +194,7 @@ modules: path: ../../ - type: file url: https://github.com/Warzone2100/wz-sequences/releases/download/v3/standard-quality-en-sequences.wz - sha256: 142ae905be288cca33357a49f42b884c190e828fc0b1b1773ded5dff774f41a3 + sha256: 142ae905be288cca33357a49f42b884c190e828fc0b1b1773ded5dff774f41a3 post-install: - mkdir -p /app/share/icons/hicolor/128x128/apps - cp /app/share/icons/net.wz2100.wz2100*.png /app/share/icons/hicolor/128x128/apps/ diff --git a/.ci/githubactions/FetchSentryCLI.cmake b/.ci/githubactions/FetchSentryCLI.cmake index 1553691928c..f282c9f3303 100644 --- a/.ci/githubactions/FetchSentryCLI.cmake +++ b/.ci/githubactions/FetchSentryCLI.cmake @@ -1,6 +1,11 @@ -cmake_minimum_required(VERSION 3.14) +cmake_minimum_required(VERSION 3.19...3.30) -set(sentry_cli_version "2.15.2") # Note: When updating, must also update all of the sentry_cli_dl_sha512 below! +set(sentry_cli_version "2.32.1") # Note: When updating, must also update all of the sentry_cli_dl_sha512 below! + +# Manually query the CMAKE_HOST_SYSTEM_PROCESSOR +# See: https://gitlab.kitware.com/cmake/cmake/-/issues/25151 +cmake_host_system_information(RESULT CMAKE_HOST_SYSTEM_PROCESSOR QUERY OS_PLATFORM) +message(STATUS "CMAKE_HOST_SYSTEM_PROCESSOR=${CMAKE_HOST_SYSTEM_PROCESSOR}") # Construct the appropriate URL based on the current platform set(sentry_cli_dl_url "") @@ -9,20 +14,20 @@ set(_exe_suffix "") if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^x86$") set(sentry_cli_dl_url "https://github.com/getsentry/sentry-cli/releases/download/${sentry_cli_version}/sentry-cli-Windows-i686.exe") - set(sentry_cli_dl_sha512 "d32101f0f62c1efc7759455a18da8749db47b3a41cdb0b21c2204beddaf8d0a8726f51af722e5d957d8cf0b8bfaeb0af59bf19b0e9e2464d5af33b9c1ecbd8d6") + set(sentry_cli_dl_sha512 "de76de02e389a1c9f7c46d35d89097c4a32ff40d2b423143eda24068ce540e7f9e3d989723cda4928c394cdeda26ebfb2f0e2182124eea1b38c3e1296b03191d") else() # just default to x64 otherwise set(sentry_cli_dl_url "https://github.com/getsentry/sentry-cli/releases/download/${sentry_cli_version}/sentry-cli-Windows-x86_64.exe") - set(sentry_cli_dl_sha512 "9155dd33c43c03a0d3b0d56f7106d4e1ec197eed2dd7dfec5c1cf0d2d6c0dd5db7097dcd4ab5c59924b9a460a56a8b495ea02adb6fce99097813e042ccfd419b") + set(sentry_cli_dl_sha512 "45abc55491443e6b228339bbd6bcf74dab07d08093a9a1e249d214a88c3e88aade20198d35e2f89a8614b1100c08420d19bfb3d6011724f069c83af766cf2a0e") endif() set(_exe_suffix ".exe") elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") set(sentry_cli_dl_url "https://github.com/getsentry/sentry-cli/releases/download/${sentry_cli_version}/sentry-cli-Darwin-universal") - set(sentry_cli_dl_sha512 "a96bf31d2be0441e68300a037a7845b41e4ad1473dac10a88d6c7408d901fe9c075b973b0c89561e3181a3594efad15b1ff40c10abdbfe01035301966d2adec5") + set(sentry_cli_dl_sha512 "6ab3a2d6b4e2a8ab2742478eee0bbbee96bbede600155e43650676f3925b6d0813a602498b1a1e9f962fb9d8a922459389259bd1d3a9646d6d21a18abe9ed90c") elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux") if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^x86_64$") set(sentry_cli_dl_url "https://github.com/getsentry/sentry-cli/releases/download/${sentry_cli_version}/sentry-cli-Linux-x86_64") - set(sentry_cli_dl_sha512 "919e5b830d14e5a6672e1e9e9ab1fe168aca684f94b706b6bc26a591a4e0a08972fa9808dd07fa734810463d46bf7d34b17a681eac94c77f2f0505080e3186de") + set(sentry_cli_dl_sha512 "17167bece1e852073aae563bd9f3d482e83ef263566d56c5c37480eb6b58d6ec3e938cae85c0a23b30b2fa26d77319a7c217495722664c2ab00ec47665c7472c") else() message(FATAL_ERROR "Script does not currently support platform: ${CMAKE_HOST_SYSTEM_NAME} and ARCH: ${CMAKE_HOST_SYSTEM_PROCESSOR}") endif() @@ -30,14 +35,13 @@ else() message(FATAL_ERROR "Script does not currently support platform: ${CMAKE_HOST_SYSTEM_NAME}") endif() -include(FetchContent) -FetchContent_Populate( - sentry-cli - URL "${sentry_cli_dl_url}" - URL_HASH SHA512=${sentry_cli_dl_sha512} - DOWNLOAD_NAME "sentry-cli${_exe_suffix}" - DOWNLOAD_NO_EXTRACT TRUE - SOURCE_DIR sentry-cli +set(_output_fullpath "${CMAKE_CURRENT_BINARY_DIR}/sentry-cli/sentry-cli${_exe_suffix}") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/sentry-cli") +file(DOWNLOAD "${sentry_cli_dl_url}" "${_output_fullpath}" SHOW_PROGRESS TLS_VERIFY ON EXPECTED_HASH SHA512=${sentry_cli_dl_sha512}) +file(CHMOD "${_output_fullpath}" FILE_PERMISSIONS + OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ + WORLD_EXECUTE WORLD_READ ) -message(STATUS "Downloaded sentry-cli (${sentry_cli_version}) to: \"${CMAKE_CURRENT_BINARY_DIR}/sentry-cli/sentry-cli${_exe_suffix}\"") +message(STATUS "Downloaded sentry-cli (${sentry_cli_version}) to: \"${_output_fullpath}\"") diff --git a/.ci/githubactions/check_po_base_unchanged.sh b/.ci/githubactions/check_po_base_unchanged.sh new file mode 100755 index 00000000000..c3cfb636331 --- /dev/null +++ b/.ci/githubactions/check_po_base_unchanged.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Expects input of $1 base file and $2 .po file + +diff --ignore-trailing-space --ignore-blank-lines \ + --ignore-matching-lines='^#' \ + --ignore-matching-lines='^".*\:.*"' \ + "$1" "$2" >/dev/null 2>&1 + +result=$? +if [ $result -eq 0 ]; then + printf '%s\0' "$2" +fi + +exit 0 diff --git a/.ci/githubactions/cleanup-downloaded-po.sh b/.ci/githubactions/cleanup-downloaded-po.sh new file mode 100755 index 00000000000..65542d74661 --- /dev/null +++ b/.ci/githubactions/cleanup-downloaded-po.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# Expects input of $1 base file and $2 .po file + +BASE_POT="$1" +TARGET_PO="$2" + +# 1.) Perform msgmerge with the base .pot, with similar settings to what WZ uses (wrapping, etc), but also removing location lines +# 2.) Use sed to remove "#." extracted comment lines (these are in the .pot, we don't need to store them in every .po file in the repo) +# 3.) Cleanup .bak file +msgmerge --no-wrap --width=1 --no-location "--output-file=$TARGET_PO" "$TARGET_PO" "$BASE_POT" && sed -i.bak '/^#\./d' "$TARGET_PO" && rm "$TARGET_PO.bak" diff --git a/.ci/githubactions/crowdin_download_diff.sh b/.ci/githubactions/crowdin_download_diff.sh new file mode 100755 index 00000000000..73e1e8f16a7 --- /dev/null +++ b/.ci/githubactions/crowdin_download_diff.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Output the filenames that have actual modifications, ignoring certain .po file header lines +# Note: Requires GNU Diffutils +diff --brief --recursive --unified=1 --new-file \ + --ignore-matching-lines='^"POT-Creation-Date: .*"' \ + --ignore-matching-lines='^"PO-Revision-Date: .*"' \ + --ignore-matching-lines='^"Last-Translator: .*"' \ + "$@" \ + | cut -d' ' -f 2 | sed "s#$1*##" + +exit 0 diff --git a/.ci/install_scripts/qt-install.qs b/.ci/install_scripts/qt-install.qs deleted file mode 100644 index 84fb7602e6e..00000000000 --- a/.ci/install_scripts/qt-install.qs +++ /dev/null @@ -1,263 +0,0 @@ -// QT-CI Project -// License: Apache-2.0 -// https://github.com/benlau/qtci - -function log() { - var msg = ["QTCI: "].concat([].slice.call(arguments)); - console.log(msg.join(" ")); -} - -function printObject(object) { - var lines = []; - for (var i in object) { - lines.push([i, object[i]].join(" ")); - } - log(lines.join(",")); -} - -var status = { - widget: null, - finishedPageVisible: false, - installationFinished: false -} - -function tryFinish() { - if (status.finishedPageVisible && status.installationFinished) { - if (status.widget.LaunchQtCreatorCheckBoxForm) { - // Disable this checkbox for minimal platform - status.widget.LaunchQtCreatorCheckBoxForm.launchQtCreatorCheckBox.setChecked(false); - } - if (status.widget.RunItCheckBox) { - // LaunchQtCreatorCheckBoxForm may not work for newer versions. - status.widget.RunItCheckBox.setChecked(false); - } - log("Press Finish Button"); - gui.clickButton(buttons.FinishButton); - } -} - -function Controller() { - installer.installationFinished.connect(function() { - status.installationFinished = true; - gui.clickButton(buttons.NextButton); - tryFinish(); - }); - installer.setMessageBoxAutomaticAnswer("OverwriteTargetDirectory", QMessageBox.Yes); - installer.setMessageBoxAutomaticAnswer("installationErrorWithRetry", QMessageBox.Ignore); - installer.setMessageBoxAutomaticAnswer("XcodeError", QMessageBox.Ok); - - // Allow to cancel installation for arguments --list-packages - installer.setMessageBoxAutomaticAnswer("cancelInstallation", QMessageBox.Yes); -} - -Controller.prototype.WelcomePageCallback = function() { - log("Welcome Page"); - - gui.clickButton(buttons.NextButton); - - var widget = gui.currentPageWidget(); - - /* - Online installer 3.0.6 - - It must disconnect the completeChanged callback after used, otherwise it will click the 'next' button on another pages - */ - var callback = function() { - gui.clickButton(buttons.NextButton); - widget.completeChanged.disconnect(callback); - } - - widget.completeChanged.connect(callback); -} - -Controller.prototype.CredentialsPageCallback = function() { - - var login = installer.environmentVariable("QT_CI_LOGIN"); - var password = installer.environmentVariable("QT_CI_PASSWORD"); - - if (login === "" || password === "") { - gui.clickButton(buttons.CommitButton); - } - - var widget = gui.currentPageWidget(); - - widget.loginWidget.EmailLineEdit.setText(login); - - widget.loginWidget.PasswordLineEdit.setText(password); - - gui.clickButton(buttons.CommitButton); -} - -Controller.prototype.ComponentSelectionPageCallback = function() { - log("ComponentSelectionPageCallback"); - - function list_packages() { - var components = installer.components(); - log("Available components: " + components.length); - var packages = ["Packages: "]; - - for (var i = 0; i < components.length; i++) { - packages.push(components[i].name); - } - log(packages.join(" ")); - } - - var widget = gui.currentPageWidget(); - - var archiveCheckBox = gui.findChild(widget, "Archive"); - var latestCheckBox = gui.findChild(widget, "Latest releases"); - var fetchButton = gui.findChild(widget, "FetchCategoryButton"); - - if (archiveCheckBox != null) { - // check archive - archiveCheckBox.click(); - } - if (latestCheckBox != null) { - // uncheck latest - latestCheckBox.click(); - } - if (fetchButton != null) { - fetchButton.click() - } - - if (installer.value("QTCI_LIST_PACKAGES", "0") != "0") { - list_packages(); - gui.clickButton(buttons.CancelButton); - return; - } - - log("Select components"); - - function trim(str) { - return str.replace(/^ +/, "").replace(/ *$/, ""); - } - - var packages = trim(installer.value("QTCI_PACKAGES")).split(","); - if (packages.length > 0 && packages[0] !== "") { - widget.deselectAll(); - var components = installer.components(); - var allfound = true; - for (var i in packages) { - var pkg = trim(packages[i]); - var found = false; - for (var j in components) { - if (components[j].name === pkg) { - found = true; - break; - } - } - if (!found) { - allfound = false; - log("ERROR: Package " + pkg + " not found."); - } else { - log("Select " + pkg); - widget.selectComponent(pkg); - } - } - if (!allfound) { - list_packages(); - // TODO: figure out how to set non-zero exit status. - gui.clickButton(buttons.CancelButton); - return; - } - } else { - log("Use default component list"); - } - - gui.clickButton(buttons.NextButton); -} - -Controller.prototype.IntroductionPageCallback = function() { - log("Introduction Page"); - log("Retrieving meta information from remote repository"); - - /* - Online installer 3.0.6 - - Don't click buttons.NextButton directly. It will skip the componenet selection. - */ - - if (installer.isOfflineOnly()) { - gui.clickButton(buttons.NextButton); - } -} - -Controller.prototype.TargetDirectoryPageCallback = function() { - var output = installer.value("QTCI_OUTPUT"); - log("Set target installation page: " + output); - var widget = gui.currentPageWidget(); - - if (widget != null) { - widget.TargetDirectoryLineEdit.setText(output); - } - - gui.clickButton(buttons.NextButton); -} - -Controller.prototype.LicenseAgreementPageCallback = function() { - log("Accept license agreement"); - var widget = gui.currentPageWidget(); - - if (widget != null) { - widget.AcceptLicenseRadioButton.setChecked(true); - } - - gui.clickButton(buttons.NextButton); -} - -Controller.prototype.ReadyForInstallationPageCallback = function() { - log("Ready to install"); - - // Bug? If commit button pressed too quickly finished callback might not show the checkbox to disable running qt creator - // Behaviour started around 5.10. You don't actually have to press this button at all with those versions, even though gui.isButtonEnabled() returns true. - gui.clickButton(buttons.CommitButton, 200); -} - -Controller.prototype.PerformInstallationPageCallback = function() { - log("PerformInstallationPageCallback"); - gui.clickButton(buttons.CommitButton); -} - -Controller.prototype.FinishedPageCallback = function() { - log("FinishedPageCallback"); - - var widget = gui.currentPageWidget(); - - // Bug? Qt 5.9.5 and Qt 5.9.6 installer show finished page before the installation completed - // Don't press "finishButton" immediately - status.finishedPageVisible = true; - status.widget = widget; - tryFinish(); -} - -// Telemetry disabled -Controller.prototype.DynamicTelemetryPluginFormCallback = function() -{ - log("TelemetryPluginFormCallback"); - var page = gui.pageWidgetByObjectName("DynamicTelemetryPluginForm"); - page.statisticGroupBox.disableStatisticRadioButton.setChecked(true); - gui.clickButton(buttons.NextButton); -} - -// On windows installs there is a page about the start menu. -Controller.prototype.StartMenuDirectoryPageCallback = function() { - log("StartMenuDirectoryPageCallback"); - gui.clickButton(buttons.NextButton); -} - -// qt online installer 3.2.1: open source users must now accept the open -// source obligations. -// https://www.qt.io/blog/qt-online-installer-3.2.1-released -// https://www.qt.io/blog/qt-online-installer-3.2.3-released -Controller.prototype.ObligationsPageCallback = function() -{ - log("ObligationsPageCallback"); - var page = gui.pageWidgetByObjectName("ObligationsPage"); - page.obligationsAgreement.setChecked(true); - var individualCheckbox = gui.findChild(page, "IndividualPerson"); - if (individualCheckbox) { - individualCheckbox.checked = true; - } - page.completeChanged(); - gui.clickButton(buttons.NextButton); - // There appears to be a second page we need to click "Next" on... - gui.clickButton(buttons.NextButton, 500); -} diff --git a/.ci/snap/install_vulkan_sdk.sh b/.ci/snap/install_vulkan_sdk.sh index 5e77aec193e..73284b4f8e3 100755 --- a/.ci/snap/install_vulkan_sdk.sh +++ b/.ci/snap/install_vulkan_sdk.sh @@ -5,13 +5,13 @@ TARGET_BUILD_ARCH="$("${CRAFT_PART_SRC}/.ci/snap/snapcraft_build_get_target_arch echo "[install_vulkan_sdk.sh]" echo "Target Arch: $TARGET_BUILD_ARCH" -if [ "$TARGET_BUILD_ARCH" = "amd64" ]; then +if [[ "$TARGET_BUILD_ARCH" == "amd64" && "$CRAFT_ARCH_BUILD_ON" == "$TARGET_BUILD_ARCH" ]]; then # Install Vulkan SDK (binary package) echo "Installing Vulkan SDK" # Add Vulkan SDK repo - wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | tee /etc/apt/trusted.gpg.d/lunarg.asc - wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.268-jammy.list https://packages.lunarg.com/vulkan/1.3.268/lunarg-vulkan-1.3.268-jammy.list + wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | apt-key add - + wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.296-noble.list https://packages.lunarg.com/vulkan/1.3.296/lunarg-vulkan-1.3.296-noble.list apt update apt install --yes vulkan-sdk diff --git a/.ci/snap/snapcraft-stable-overrides.yaml b/.ci/snap/snapcraft-stable-overrides.yaml index cd60e03ce8a..59bf64775ac 100644 --- a/.ci/snap/snapcraft-stable-overrides.yaml +++ b/.ci/snap/snapcraft-stable-overrides.yaml @@ -24,7 +24,7 @@ parts: echo "git submodule update" git submodule update --init craftctl set version="$TAG_REF" - + # Write out important release config environment variables cat > .snapenv <&2; } BUILDTIME_TARGET_ARCH="" -if [ -n "${CRAFT_TARGET_ARCH}" ]; then +if [ -n "${CRAFT_ARCH_BUILD_FOR}" ]; then + # CRAFT_ARCH_BUILD_FOR is available - use it! + BUILDTIME_TARGET_ARCH="${CRAFT_ARCH_BUILD_FOR}" +elif [ -n "${CRAFT_TARGET_ARCH}" ]; then # CRAFT_TARGET_ARCH is available - use it! BUILDTIME_TARGET_ARCH="${CRAFT_TARGET_ARCH}" else - # If CRAFT_TARGET_ARCH is not available, parse the CRAFT_ARCH_TRIPLET and convert it - case ${CRAFT_ARCH_TRIPLET%%-*} in + # If above are not available, parse the CRAFT_ARCH_TRIPLET_BUILD_FOR and convert it + case ${CRAFT_ARCH_TRIPLET_BUILD_FOR%%-*} in x86_64) BUILDTIME_TARGET_ARCH="amd64" ;; diff --git a/.ci/travis/travis_deploy.sh b/.ci/travis/travis_deploy.sh deleted file mode 100755 index a49a5988533..00000000000 --- a/.ci/travis/travis_deploy.sh +++ /dev/null @@ -1,184 +0,0 @@ -#!/bin/bash - -# ######## -# USAGE: -# -# Execute travis_deploy.sh, specifying the input path and file matching pattern -# Optionally, clean up older uploads by specifying --cleanold -# -# So, for example: -# ./travis_deploy.sh "tmp/build_output" "warzone2100-*_macOS.zip" --cleanold -# Will: -# 1. Clean up older files matching `warzone2100-*_macOS.zip` in the deployment path on the server. -# 2. scp all files matching `warzone2100-*_macOS.zip` in the input path to the deployment path on the server. -# -# Example (using this with travis_build.sh): -# ./travis_build.sh regular "tmp/build_output" -# ./travis_deploy.sh "tmp/build_output" "warzone2100-*_macOS.zip" --cleanold -# -# ######## -# REQUIRED ENVIRONMENT VARIABLES: -# -# Set these as secure environment variables in the Travis Repository Settings: -# https://docs.travis-ci.com/user/environment-variables/#Defining-Variables-in-Repository-Settings -# -# - SECURE_UPLOAD_BASE64_KEY: The base64-encoded private SSH key used for uploading to the buildbot. -# - DEPLOY_UURL: Used in the scp command. Example: "buildbot@buildbot.wz2100.net" -# - DEPLOY_KNOWN_HOSTS_BASE64: The base64-encoded data to be added to the SSH known_hosts file. -# - DEPLOY_UPLOAD_PATH: The path into which to upload the files. Example: "public_html/" -# -# To get the latest SSH public keys for the server in the DEPLOY_UURL (to be added to known_hosts), -# execute: -# ssh-keyscan -H -# (Note: Always verify the information that ssh-keyscan produces with a trusted source.) -# -# -# Copyright © 2018 pastdue ( https://github.com/past-due/ ) and contributors -# License: MIT License ( https://opensource.org/licenses/MIT ) -# - -# Handle arguments -if [ -z "$1" ]; then - echo "travis_deploy.sh requires a first argument specifying an input path" - exit 1 -fi -INPUT_DIR="$1" -if [ ! -d "${INPUT_DIR}" ]; then - echo "ERROR: Supplied an input path that does not exist: \"$INPUT_DIR\"" - exit 1 -fi -if [ -z "$2" ]; then - echo "travis_deploy.sh requires a second argument specifying a file matching pattern" - exit 1 -fi -FILE_MATCH_PATTERN="$2" -if [[ "${FILE_MATCH_PATTERN}" == *\/* ]] || [[ "${FILE_MATCH_PATTERN}" == *\\* ]]; then - # Error: FILE_MATCH_PATTERN cannot contain \ or / - echo "error: File matching pattern cannot contain '\' or '/' (pattern is: \"${FILE_MATCH_PATTERN}\")" - exit 1 -fi - -CLEAN_OLD=false -if [ -n "$3" ] && [ "$3" == "--cleanold" ]; then - CLEAN_OLD=true -fi - -# Handle scenarios in which deployment should never happen -if [ -n "${TRAVIS_PULL_REQUEST}" ] && [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then - # Skip deploying from pull requests - echo "Skip deploy from pull requests." - exit 0 -fi - -# Handle required environment variables -MISSING_REQUIRED_ENV_VAR="false" - -if [ -z "${SECURE_UPLOAD_BASE64_KEY}" ]; then - # To deploy builds to the buildbot server, a secure environment variable named - # SECURE_UPLOAD_BASE64_KEY must be set in Travis-CI repo settings. - # - # Its value should be a base64-encoded SSH private key. - # - echo "Missing required environment variable: SECURE_UPLOAD_BASE64_KEY" - MISSING_REQUIRED_ENV_VAR="true" -fi - -if [ -z "${DEPLOY_UURL}" ]; then - echo "Missing required environment variable: DEPLOY_UURL" - MISSING_REQUIRED_ENV_VAR="true" -fi - -if [ -z "${DEPLOY_UPLOAD_PATH}" ]; then - echo "Missing required environment variable: DEPLOY_UPLOAD_PATH" - MISSING_REQUIRED_ENV_VAR="true" -fi - -if [ "${MISSING_REQUIRED_ENV_VAR}" != "false" ]; then - echo "Skipping deploy; one or more required environment variables are not set." - exit 1 -fi - -echo "Set up SSH" - -# DO NOT CHANGE THE FOLLOWING LINE: Always turn off command traces while dealing with the private key -set +x - -# Get the encrypted private key from the Travis-CI settings -echo ${SECURE_UPLOAD_BASE64_KEY} | base64 --decode > ~/.ssh/id_rsa -chmod 600 ~/.ssh/id_rsa -ssh-add ~/.ssh/id_rsa - -# Create a public key file -ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub - -# BE CAREFUL ABOUT CHANGING THE LINES ABOVE: The private key *MUST NOT* be output to the build log. - - -# Output to the known_hosts file any required entries -if [ -n "${DEPLOY_KNOWN_HOSTS_BASE64}" ]; then - echo "Adding known_hosts data" - echo ${DEPLOY_KNOWN_HOSTS_BASE64} | base64 --decode >> ~/.ssh/known_hosts -fi - -if [[ "${DEPLOY_UPLOAD_PATH}" == *\\* ]] || [[ "${DEPLOY_UPLOAD_PATH}" == *\'* ]] || [[ "${DEPLOY_UPLOAD_PATH}" == *..* ]]; then - # Error: DEPLOY_UPLOAD_PATH cannot contain \ or ' or .. - echo "error: DEPLOY_UPLOAD_PATH cannot contain \ or ' or .. (is: \"${DEPLOY_UPLOAD_PATH}\")" - exit 2 -fi -if [[ "${FILE_MATCH_PATTERN}" == *\\* ]] || [[ "${FILE_MATCH_PATTERN}" == *\'* ]]; then - # Error: FILE_MATCH_PATTERN cannot contain \ or ' - echo "error: FILE_MATCH_PATTERN cannot contain \ or ' (is: \"${FILE_MATCH_PATTERN}\")" - exit 2 -fi - -# Sanity-check: -if ! [[ "${DEPLOY_UPLOAD_PATH}" == public_html* ]]; then - # Error: DEPLOY_UPLOAD_PATH must begin with "public_html" (sanity-check) - echo "error: DEPLOY_UPLOAD_PATH must begin with \"public_html\" (is: \"${DEPLOY_UPLOAD_PATH}\")" - exit 2 -fi - -# Ensure the desired upload path exists -if ! ssh "${DEPLOY_UURL}" -C "mkdir -p '${DEPLOY_UPLOAD_PATH}'"; then - result="${?}" - echo "error: Failed to ensure DEPLOY_UPLOAD_PATH exists: \"${DEPLOY_UPLOAD_PATH}\"" - #exit ${result} -fi - -if [ "$CLEAN_OLD" = true ] ; then - # Clean up older uploads - echo "Clean-up older \"${FILE_MATCH_PATTERN}\" in \"${DEPLOY_UURL}:${DEPLOY_UPLOAD_PATH}\"" - if ! ssh "${DEPLOY_UURL}" -C "cd '${DEPLOY_UPLOAD_PATH}' && find . -maxdepth 1 -type f -name '${FILE_MATCH_PATTERN}' -printf '%T@ %f\n' | sort -k1,1r | cut -d' ' -f2 | grep -v '/$' | tail -n +3 | xargs -I {} rm -- {}"; then - result="${?}" - echo "error: Failed to clean up older uploads!" - #exit ${result} - fi - echo " -> Clean complete." -fi - -echo "Upload all \"${FILE_MATCH_PATTERN}\" in \"$INPUT_DIR\" -> \"${DEPLOY_UURL}:${DEPLOY_UPLOAD_PATH}\"" - -# Upload all matching files in the input directory -cd "${INPUT_DIR}" -for file in `find . -type f -name "${FILE_MATCH_PATTERN}"`; do - filename=$(basename $file) - echo " -> ${filename} ..." - echo " scp -pC \"${file}\" \"${DEPLOY_UURL}:${DEPLOY_UPLOAD_PATH}/${filename}\"" - scp -pC "${file}" "${DEPLOY_UURL}:${DEPLOY_UPLOAD_PATH}/${filename}" - result=${?} - if [ $result -ne 0 ]; then - echo "error: Upload did not complete!" - exit ${result} - fi - echo " Upload complete." -done - -echo "Finished uploading all matching files." - -# Remove the SSH key -ssh-add -d ~/.ssh/id_rsa -rm -f ~/.ssh/id_rsa - -echo "Cleaned-up SSH" - -exit 0 diff --git a/.ci/vcpkg/overlay-ports/basisu/001-mingw.patch b/.ci/vcpkg/overlay-ports/basisu/001-mingw.patch new file mode 100644 index 00000000000..93b7b1cbc4e --- /dev/null +++ b/.ci/vcpkg/overlay-ports/basisu/001-mingw.patch @@ -0,0 +1,39 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 492233a..bdd4dac 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -102,8 +102,10 @@ if (NOT MSVC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBASISU_SUPPORT_SSE=0") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBASISU_SUPPORT_SSE=0") + endif() +- +- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_LINK_FLAGS} -Wl,-rpath .") ++ ++ if (NOT MINGW) ++ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_LINK_FLAGS} -Wl,-rpath .") ++ endif() + endif() + + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COMPILE_FLAGS}") +@@ -123,6 +125,21 @@ else() + endif() + endif() + ++# Set BASISU_HAVE_STD_TRIVIALLY_COPYABLE if the target supports std::is_trivially_copyable ++include(CheckCXXSourceCompiles) ++check_cxx_source_compiles(" ++ #include ++ const bool val = std::is_trivially_copyable::value; ++ int main() ++ { ++ return 0; ++ }" ++ HAVE_STD_IS_TRIVIALLY_COPYABLE ++) ++if (HAVE_STD_IS_TRIVIALLY_COPYABLE) ++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBASISU_HAVE_STD_TRIVIALLY_COPYABLE") ++endif() ++ + set(BASISU_SRC_LIST ${COMMON_SRC_LIST} + basisu_tool.cpp + encoder/basisu_backend.cpp diff --git a/.ci/vcpkg/overlay-ports/basisu/002-gha-msvc-workaround.patch b/.ci/vcpkg/overlay-ports/basisu/002-gha-msvc-workaround.patch new file mode 100644 index 00000000000..8f4e6b51671 --- /dev/null +++ b/.ci/vcpkg/overlay-ports/basisu/002-gha-msvc-workaround.patch @@ -0,0 +1,12 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index bdd4dac..365e3ff 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -123,6 +123,7 @@ else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBASISU_SUPPORT_SSE=0") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBASISU_SUPPORT_SSE=0") + endif() ++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR") # Workaround: https://github.com/actions/runner-images/issues/10004 + endif() + + # Set BASISU_HAVE_STD_TRIVIALLY_COPYABLE if the target supports std::is_trivially_copyable diff --git a/.ci/vcpkg/overlay-ports/basisu/portfile.cmake b/.ci/vcpkg/overlay-ports/basisu/portfile.cmake index 73d4c9fd6f4..45074394e7f 100644 --- a/.ci/vcpkg/overlay-ports/basisu/portfile.cmake +++ b/.ci/vcpkg/overlay-ports/basisu/portfile.cmake @@ -1,9 +1,12 @@ vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO BinomialLLC/basis_universal - REF 1531cfaf9ed5232248a0a45736686a849ca3befc #tag/1.16.3 - SHA512 fdb0c4360cb8e0c85a592f6fddbf6f880c5ccbfef65c33c752fb2779b96d1edc8d4992d18321a428599a3649ace2e4843f15efe04f170085d951ddca25f87323 + REF ad9386a4a1cf2a248f7bbd45f543a7448db15267 # post-1.16.4, including fixes + SHA512 4922af3a8d42d8c1ab551853d0ab97c0733a869cd99e95ef7a03620da023da48070a1255dcd68f6a384ee7787b5bd5dffe2cd510b2986e2a0e7181929f6ecc64 HEAD_REF master + PATCHES + 001-mingw.patch + 002-gha-msvc-workaround.patch ) set(_additional_options) diff --git a/.ci/vcpkg/overlay-ports/basisu/vcpkg.json b/.ci/vcpkg/overlay-ports/basisu/vcpkg.json index c3bf30514f6..a82907819ab 100644 --- a/.ci/vcpkg/overlay-ports/basisu/vcpkg.json +++ b/.ci/vcpkg/overlay-ports/basisu/vcpkg.json @@ -1,6 +1,7 @@ { "name": "basisu", - "version-string": "1.16.3", + "version-string": "1.16.4", + "port-version": 2, "description": "Basis Universal is a supercompressed GPU texture and video compression format that outputs a highly compressed intermediate file format (.basis) that can be quickly transcoded to a wide variety of GPU texture compression formats.", "homepage": "https://github.com/BinomialLLC/basis_universal", "dependencies": [ diff --git a/.ci/vcpkg/overlay-ports/libiconv/0002-Config-for-MSVC.patch b/.ci/vcpkg/overlay-ports/libiconv/0002-Config-for-MSVC.patch new file mode 100644 index 00000000000..5c79d25c425 --- /dev/null +++ b/.ci/vcpkg/overlay-ports/libiconv/0002-Config-for-MSVC.patch @@ -0,0 +1,27 @@ +diff --git "a/lib/loop_wchar.h" "b/lib/loop_wchar.h" +index 6dc011b..158ccdd 100644 +--- "a/lib/loop_wchar.h" ++++ "b/lib/loop_wchar.h" +@@ -37,7 +37,7 @@ + # include + # define BUF_SIZE 64 /* assume MB_LEN_MAX <= 64 */ + /* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ +- extern size_t mbrtowc (); ++// extern size_t mbrtowc (); + # ifdef mbstate_t + # define mbrtowc(pwc, s, n, ps) (mbrtowc)(pwc, s, n, 0) + # define mbsinit(ps) 1 +diff --git a/srclib/fcntl.c b/srclib/fcntl.c +index f9753c4..02fc8be 100644 +--- a/srclib/fcntl.c ++++ b/srclib/fcntl.c +@@ -37,6 +37,9 @@ + /* Get declarations of the native Windows API functions. */ + # define WIN32_LEAN_AND_MEAN + # include ++#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) ++#define HANDLE_FLAG_INHERIT 0 ++#endif + + /* Get _get_osfhandle. */ + # if GNULIB_MSVC_NOTHROW diff --git a/.ci/vcpkg/overlay-ports/libiconv/0003-Add-export.patch b/.ci/vcpkg/overlay-ports/libiconv/0003-Add-export.patch new file mode 100644 index 00000000000..c8d131d2eaa --- /dev/null +++ b/.ci/vcpkg/overlay-ports/libiconv/0003-Add-export.patch @@ -0,0 +1,12 @@ +diff -uNr libiconv-1.16/libcharset/include/libcharset.h.in libiconv-1.16-work/libcharset/include/libcharset.h.in +--- libiconv-1.16/libcharset/include/libcharset.h.in 2018-09-17 19:07:42.000000000 +0300 ++++ libiconv-1.16-work/libcharset/include/libcharset.h.in 2019-12-04 17:15:50.000000000 +0300 +@@ -33,7 +33,7 @@ + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +-extern void libcharset_set_relocation_prefix (const char *orig_prefix, ++extern void LIBCHARSET_DLL_EXPORTED libcharset_set_relocation_prefix (const char *orig_prefix, + const char *curr_prefix); + + diff --git a/.ci/vcpkg/overlay-ports/libiconv/0004-ModuleFileName.patch b/.ci/vcpkg/overlay-ports/libiconv/0004-ModuleFileName.patch new file mode 100644 index 00000000000..15ceb2a4115 --- /dev/null +++ b/.ci/vcpkg/overlay-ports/libiconv/0004-ModuleFileName.patch @@ -0,0 +1,13 @@ +diff --git a/lib/relocatable.c b/lib/relocatable.c +index 89b6c27..1561894 100644 +--- a/lib/relocatable.c ++++ b/lib/relocatable.c +@@ -329,7 +329,7 @@ DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) + /* The DLL is being loaded into an application's address range. */ + static char location[MAX_PATH]; + +- if (!GetModuleFileName (module_handle, location, sizeof (location))) ++ if (!GetModuleFileNameA (module_handle, location, sizeof (location))) + /* Shouldn't happen. */ + return FALSE; + diff --git a/.ci/vcpkg/overlay-ports/libiconv/clang-fortify.patch b/.ci/vcpkg/overlay-ports/libiconv/clang-fortify.patch new file mode 100644 index 00000000000..381d144cd55 --- /dev/null +++ b/.ci/vcpkg/overlay-ports/libiconv/clang-fortify.patch @@ -0,0 +1,64 @@ +diff --git a/srclib/cdefs.h b/srclib/cdefs.h +index 7b8ed5b..63574f9 100644 +--- a/srclib/cdefs.h ++++ b/srclib/cdefs.h +@@ -140,6 +140,7 @@ + #endif + + ++#ifndef __GNULIB_CDEFS + /* Fortify support. */ + #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) + #define __bos0(ptr) __builtin_object_size (ptr, 0) +@@ -201,6 +202,8 @@ + ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \ + : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) \ + ++#endif ++ + #if __GNUC_PREREQ (4,3) + # define __warnattr(msg) __attribute__((__warning__ (msg))) + # define __errordecl(name, msg) \ +diff --git a/srclib/libc-config.h b/srclib/libc-config.h +index a56665b..876e1a1 100644 +--- a/srclib/libc-config.h ++++ b/srclib/libc-config.h +@@ -137,8 +137,10 @@ + # undef __attribute_returns_twice__ + # undef __attribute_used__ + # undef __attribute_warn_unused_result__ ++# ifndef __GNULIB_CDEFS + # undef __bos + # undef __bos0 ++# endif + # undef __errordecl + # undef __extension__ + # undef __extern_always_inline +@@ -147,21 +149,27 @@ + # undef __fortified_attr_access + # undef __fortify_function + # undef __glibc_c99_flexarr_available ++# ifndef __GNULIB_CDEFS + # undef __glibc_fortify + # undef __glibc_fortify_n ++# endif + # undef __glibc_has_attribute + # undef __glibc_has_builtin + # undef __glibc_has_extension + # undef __glibc_likely + # undef __glibc_macro_warning + # undef __glibc_macro_warning1 ++# ifndef __GNULIB_CDEFS + # undef __glibc_objsize + # undef __glibc_objsize0 + # undef __glibc_safe_len_cond + # undef __glibc_safe_or_unknown_len ++# endif + # undef __glibc_unlikely ++# ifndef __GNULIB_CDEFS + # undef __glibc_unsafe_len + # undef __glibc_unsigned_or_positive ++# endif + # undef __inline + # undef __ptr_t + # undef __restrict diff --git a/.ci/vcpkg/overlay-ports/libiconv/portfile.cmake b/.ci/vcpkg/overlay-ports/libiconv/portfile.cmake new file mode 100644 index 00000000000..ee2ccb21c72 --- /dev/null +++ b/.ci/vcpkg/overlay-ports/libiconv/portfile.cmake @@ -0,0 +1,59 @@ +if(NOT VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_ANDROID AND NOT VCPKG_TARGET_IS_IOS AND NOT VCPKG_TARGET_IS_OSX) + set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/share/iconv") + file(COPY "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/iconv") + return() +endif() + +vcpkg_download_distfile(ARCHIVE + URLS "https://ftp.gnu.org/gnu/libiconv/libiconv-${VERSION}.tar.gz" + "https://www.mirrorservice.org/sites/ftp.gnu.org/gnu/libiconv/libiconv-${VERSION}.tar.gz" + FILENAME "libiconv-${VERSION}.tar.gz" + SHA512 18a09de2d026da4f2d8b858517b0f26d853b21179cf4fa9a41070b2d140030ad9525637dc4f34fc7f27abca8acdc84c6751dfb1d426e78bf92af4040603ced86 +) +vcpkg_extract_source_archive(SOURCE_PATH + ARCHIVE "${ARCHIVE}" + SOURCE_BASE "v${VERSION}" + PATCHES + 0002-Config-for-MSVC.patch + 0003-Add-export.patch + 0004-ModuleFileName.patch + clang-fortify.patch # ported from https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=522aea1093a598246346b3e1c426505c344fe19a +) + +vcpkg_list(SET OPTIONS) +if (NOT VCPKG_TARGET_IS_ANDROID) + vcpkg_list(APPEND OPTIONS --enable-relocatable) +endif() + +vcpkg_configure_make( + SOURCE_PATH "${SOURCE_PATH}" + DETERMINE_BUILD_TRIPLET + USE_WRAPPERS + OPTIONS + --enable-extra-encodings + --without-libiconv-prefix + --without-libintl-prefix + ${OPTIONS} +) +vcpkg_install_make() + +vcpkg_copy_pdbs() +vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin") +vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug/bin") + +file(COPY "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/iconv") + +set(VCPKG_POLICY_ALLOW_RESTRICTED_HEADERS enabled) +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/share/${PORT}") # share contains unneeded doc files + +# Please keep, the default usage is broken +file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") + +# Handle copyright +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING.LIB" "${SOURCE_PATH}/COPYING" COMMENT " +The libiconv and libcharset libraries and their header files are under LGPL, +see COPYING.LIB below. + +The iconv program and the documentation are under GPL, see COPYING below.") diff --git a/.ci/vcpkg/overlay-ports/libiconv/usage b/.ci/vcpkg/overlay-ports/libiconv/usage new file mode 100644 index 00000000000..db47c33e81b --- /dev/null +++ b/.ci/vcpkg/overlay-ports/libiconv/usage @@ -0,0 +1,4 @@ +The package libiconv provides CMake targets: + + find_package(Iconv) + target_link_libraries(main PRIVATE Iconv::Iconv) diff --git a/.ci/vcpkg/overlay-ports/libiconv/vcpkg-cmake-wrapper.cmake b/.ci/vcpkg/overlay-ports/libiconv/vcpkg-cmake-wrapper.cmake new file mode 100644 index 00000000000..8e25449ae2d --- /dev/null +++ b/.ci/vcpkg/overlay-ports/libiconv/vcpkg-cmake-wrapper.cmake @@ -0,0 +1,21 @@ +include(SelectLibraryConfigurations) + +_find_package(${ARGS}) +if(Iconv_FOUND AND NOT Iconv_IS_BUILT_IN) + find_path(CHARSET_INCLUDE_DIR NAMES "libcharset.h" HINTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include") + find_library(CHARSET_LIBRARY_DEBUG NAMES charsetd libcharsetd charset libcharset NAMES_PER_DIR PATH_SUFFIXES lib HINTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug") + find_library(CHARSET_LIBRARY_RELEASE NAMES charset libcharset NAMES_PER_DIR PATH_SUFFIXES lib HINTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}") + select_library_configurations(CHARSET) + if(NOT TARGET Iconv::Charset) + add_library(Iconv::Charset INTERFACE IMPORTED) + set_target_properties(Iconv::Charset PROPERTIES + INTERFACE_LINK_LIBRARIES "\$<\$>:${CHARSET_LIBRARY_RELEASE}>;\$<\$:${CHARSET_LIBRARY_DEBUG}>" + INTERFACE_INCLUDE_DIRECTORIES "${CHARSET_INCLUDE_DIRS}") + endif() + if(CHARSET_LIBRARIES) + list(APPEND Iconv_LIBRARIES ${CHARSET_LIBRARIES}) + if(TARGET Iconv::Iconv) + set_property(TARGET Iconv::Iconv APPEND PROPERTY INTERFACE_LINK_LIBRARIES Iconv::Charset) + endif() + endif() +endif() diff --git a/.ci/vcpkg/overlay-ports/libiconv/vcpkg.json b/.ci/vcpkg/overlay-ports/libiconv/vcpkg.json new file mode 100644 index 00000000000..8f59bf93968 --- /dev/null +++ b/.ci/vcpkg/overlay-ports/libiconv/vcpkg.json @@ -0,0 +1,8 @@ +{ + "name": "libiconv", + "version": "1.17", + "port-version": 4, + "description": "GNU Unicode text conversion", + "homepage": "https://www.gnu.org/software/libiconv/", + "license": null +} diff --git a/.ci/vcpkg/overlay-ports/sdl2/emscripten-webgl.patch b/.ci/vcpkg/overlay-ports/sdl2/emscripten-webgl.patch index a14af9f05bb..659dfc4c09a 100644 --- a/.ci/vcpkg/overlay-ports/sdl2/emscripten-webgl.patch +++ b/.ci/vcpkg/overlay-ports/sdl2/emscripten-webgl.patch @@ -5,8 +5,8 @@ diff --git a/src/video/emscripten/SDL_emscriptenopengles.c b/src/video/emscripte */ #include "../../SDL_internal.h" --#if SDL_VIDEO_DRIVER_EMSCRIPTEN && SDL_VIDEO_OPENGL_EGL -+#if SDL_VIDEO_DRIVER_EMSCRIPTEN +-#if defined(SDL_VIDEO_DRIVER_EMSCRIPTEN) && defined(SDL_VIDEO_OPENGL_EGL) ++#if defined(SDL_VIDEO_DRIVER_EMSCRIPTEN) #include +#include @@ -194,8 +194,8 @@ diff --git a/src/video/emscripten/SDL_emscriptenopengles.h b/src/video/emscripte #ifndef SDL_emscriptenopengles_h_ #define SDL_emscriptenopengles_h_ --#if SDL_VIDEO_DRIVER_EMSCRIPTEN && SDL_VIDEO_OPENGL_EGL -+#if SDL_VIDEO_DRIVER_EMSCRIPTEN +-#if defined(SDL_VIDEO_DRIVER_EMSCRIPTEN) && defined(SDL_VIDEO_OPENGL_EGL) ++#if defined(SDL_VIDEO_DRIVER_EMSCRIPTEN) #include "../SDL_sysvideo.h" -#include "../SDL_egl_c.h" @@ -239,7 +239,7 @@ diff --git a/src/video/emscripten/SDL_emscriptenvideo.c b/src/video/emscripten/S device->UpdateWindowFramebuffer = Emscripten_UpdateWindowFramebuffer; device->DestroyWindowFramebuffer = Emscripten_DestroyWindowFramebuffer; --#if SDL_VIDEO_OPENGL_EGL +-#ifdef SDL_VIDEO_OPENGL_EGL device->GL_LoadLibrary = Emscripten_GLES_LoadLibrary; device->GL_GetProcAddress = Emscripten_GLES_GetProcAddress; device->GL_UnloadLibrary = Emscripten_GLES_UnloadLibrary; @@ -255,7 +255,7 @@ diff --git a/src/video/emscripten/SDL_emscriptenvideo.c b/src/video/emscripten/S } } --#if SDL_VIDEO_OPENGL_EGL +-#ifdef SDL_VIDEO_OPENGL_EGL - if (window->flags & SDL_WINDOW_OPENGL) { - if (!_this->egl_data) { - if (SDL_GL_LoadLibrary(NULL) < 0) { @@ -277,7 +277,7 @@ diff --git a/src/video/emscripten/SDL_emscriptenvideo.c b/src/video/emscripten/S data = (SDL_WindowData *)window->driverdata; Emscripten_UnregisterEventHandlers(data); --#if SDL_VIDEO_OPENGL_EGL +-#ifdef SDL_VIDEO_OPENGL_EGL - if (data->egl_surface != EGL_NO_SURFACE) { - SDL_EGL_DestroySurface(_this, data->egl_surface); - data->egl_surface = EGL_NO_SURFACE; @@ -286,14 +286,6 @@ diff --git a/src/video/emscripten/SDL_emscriptenvideo.c b/src/video/emscripten/S /* We can't destroy the canvas, so resize it to zero instead */ emscripten_set_canvas_element_size(data->canvas_id, 0, 0); -@@ -341,6 +317,7 @@ static void Emscripten_SetWindowFullscreen(_THIS, SDL_Window *window, SDL_VideoD - SDL_bool is_desktop_fullscreen = (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP; - int res; - -+ SDL_zero(strategy); - strategy.scaleMode = is_desktop_fullscreen ? EMSCRIPTEN_FULLSCREEN_SCALE_STRETCH : EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT; - - if (!is_desktop_fullscreen) { diff --git a/src/video/emscripten/SDL_emscriptenvideo.h b/src/video/emscripten/SDL_emscriptenvideo.h --- a/src/video/emscripten/SDL_emscriptenvideo.h +++ b/src/video/emscripten/SDL_emscriptenvideo.h @@ -301,13 +293,13 @@ diff --git a/src/video/emscripten/SDL_emscriptenvideo.h b/src/video/emscripten/S #include #include --#if SDL_VIDEO_OPENGL_EGL +-#ifdef SDL_VIDEO_OPENGL_EGL -#include -#endif - typedef struct SDL_WindowData { --#if SDL_VIDEO_OPENGL_EGL +-#ifdef SDL_VIDEO_OPENGL_EGL - EGLSurface egl_surface; -#endif SDL_Window *window; diff --git a/.ci/vcpkg/overlay-ports/sdl2/portfile.cmake b/.ci/vcpkg/overlay-ports/sdl2/portfile.cmake index 8a6534f0ea5..cbd29b876fa 100644 --- a/.ci/vcpkg/overlay-ports/sdl2/portfile.cmake +++ b/.ci/vcpkg/overlay-ports/sdl2/portfile.cmake @@ -2,7 +2,7 @@ vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO libsdl-org/SDL REF "release-${VERSION}" - SHA512 d3cf7d356b79184dd211c9fbbfcb2a83d1acb68ee549ab82be109cd899039f18f0dbf3aedbf0800793c3a68580688014863b5d9bf79bcd366ff0e88252955e3c + SHA512 1df251333904c8530736a04cd699bcb2b786ad4bcb50e4d67e30cf7e857a46d60aeb48ebea8670f8aecc5632b3cfe635499721ed0cd72f6c8330d5e8ad32aacc HEAD_REF main PATCHES deps.patch @@ -97,7 +97,7 @@ if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_UWP AND NOT VCPKG_TARGET_IS_M file(GLOB SHARE_FILES "${CURRENT_PACKAGES_DIR}/share/sdl2/*.cmake") foreach(SHARE_FILE ${SHARE_FILES}) - vcpkg_replace_string("${SHARE_FILE}" "lib/SDL2main" "lib/manual-link/SDL2main") + vcpkg_replace_string("${SHARE_FILE}" "lib/SDL2main" "lib/manual-link/SDL2main" IGNORE_UNCHANGED) endforeach() endif() @@ -111,9 +111,9 @@ string(REGEX REPLACE ${DYLIB_COMPATIBILITY_VERSION_REGEX} "\\1" DYLIB_COMPATIBIL string(REGEX REPLACE ${DYLIB_CURRENT_VERSION_REGEX} "\\1" DYLIB_CURRENT_VERSION "${DYLIB_CURRENT_VERSION}") if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") - vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-lSDL2main" "-lSDL2maind") - vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-lSDL2 " "-lSDL2d ") - vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-lSDL2-static " "-lSDL2-staticd ") + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-lSDL2main" "-lSDL2maind" IGNORE_UNCHANGED) + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-lSDL2 " "-lSDL2d " IGNORE_UNCHANGED) + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-lSDL2-static " "-lSDL2-staticd " IGNORE_UNCHANGED) endif() if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic" AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) diff --git a/.ci/vcpkg/overlay-ports/sdl2/vcpkg.json b/.ci/vcpkg/overlay-ports/sdl2/vcpkg.json index d0932679abf..830ec5925c8 100644 --- a/.ci/vcpkg/overlay-ports/sdl2/vcpkg.json +++ b/.ci/vcpkg/overlay-ports/sdl2/vcpkg.json @@ -1,7 +1,6 @@ { "name": "sdl2", - "version": "2.28.5", - "port-version": 3, + "version": "2.30.5", "description": "Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D.", "homepage": "https://www.libsdl.org/download-2.0.php", "license": "Zlib", diff --git a/.ci/vcpkg/overlay-triplets/wasm32-emscripten.cmake b/.ci/vcpkg/overlay-triplets/wasm32-emscripten.cmake index 7f9ecc1b227..7feef2535e5 100644 --- a/.ci/vcpkg/overlay-triplets/wasm32-emscripten.cmake +++ b/.ci/vcpkg/overlay-triplets/wasm32-emscripten.cmake @@ -18,9 +18,9 @@ if(NOT EXISTS "${EMSCRIPTEN_ROOT}/cmake/Modules/Platform/Emscripten.cmake") endif() # Get the path to *this* triplet file, and then back up to get the known path to the meta-toolchain in WZ's repo -get_filename_component(WZ_WASM_META_TOOLCHAIN "${CMAKE_CURRENT_LIST_DIR}/../../emscripten/toolchain/Toolchain-Emscripten.cmake" ABSOLUTE) +get_filename_component(WZ_WASM_META_TOOLCHAIN "${CMAKE_CURRENT_LIST_DIR}/../../cmake/toolchains/wasm32-emscripten.cmake" ABSOLUTE) if(NOT EXISTS "${WZ_WASM_META_TOOLCHAIN}") - message(FATAL_ERROR "Failed to find WZ's Toolchain-Emscripten.cmake") + message(FATAL_ERROR "Failed to find WZ's toolchains/wasm32-emscripten.cmake") endif() set(VCPKG_TARGET_ARCHITECTURE wasm32) diff --git a/.ci/vulkan/install_glslc.sh b/.ci/vulkan/install_glslc.sh index f60b7e784a1..143c19188ea 100755 --- a/.ci/vulkan/install_glslc.sh +++ b/.ci/vulkan/install_glslc.sh @@ -15,7 +15,7 @@ DEBIAN_FRONTEND=noninteractive apt-get -y install cmake python3 lcov echo "Fetching shaderc" git clone https://github.com/google/shaderc shaderc cd shaderc -git checkout tags/v2023.7 -b v2023.7 +git checkout tags/v2024.3 -b v2024.3 ./utils/git-sync-deps cd .. diff --git a/.cirrus.yml b/.cirrus.yml index cb526ae9724..c237d4fbfe9 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -7,7 +7,7 @@ freebsd_build_task: freebsd_instance: # See the list of available FreeBSD image families here: https://cirrus-ci.org/guide/FreeBSD/ matrix: - - image_family: freebsd-14-0 # FreeBSD 14.0-RELEASE + - image_family: freebsd-14-1 # FreeBSD 14.1-RELEASE # cpu: 4 # memory: 8G @@ -24,33 +24,3 @@ freebsd_build_task: configure_release_script: cmake '-H.' -Bbuild/release -DCMAKE_BUILD_TYPE=RelWithDebInfo -G"Ninja" build_release_script: cmake --build build/release - - -# # CirrusCI - test builds on macOS VMs -# # See: https://cirrus-ci.org; https://cirrus-ci.org/guide/macOS/ -# -# macos_build_task: -# -# osx_instance: -# # See the list of available macOS images here: https://cirrus-ci.org/guide/macOS/ -# matrix: -# image: high-sierra-xcode-9.4.1 -# image: mojave-xcode-10.1 -# -# env: -# MACOSX_DEPLOYMENT_TARGET: 10.10 -# -# install_script: -# - brew install cmake -# - brew install gettext -# # NOTE: Specify an explicit Asciidoctor version to help ensure reproducible builds -# - sudo gem install asciidoctor -v 2.0.16 --no-document -# # gcc6+ is currently required to bootstrap vcpkg on macOS -# - brew install gcc@7 -# - sudo bundle install --gemfile="macosx/BuildBot/Gemfile" -# -# init_git_submodules_script: git submodule update --init --recursive -# -# build_script: -# - source .ci/travis/export_build_output_desc.sh -# - macosx/BuildBot/travis_cmake_build.sh "${WZ_BUILD_DESC_PREFIX}-" "tmp/wz_upload" diff --git a/.ecrc b/.ecrc new file mode 100644 index 00000000000..cc5314efe9c --- /dev/null +++ b/.ecrc @@ -0,0 +1,18 @@ +{ + "Verbose": false, + "Debug": false, + "IgnoreDefaults": false, + "SpacesAftertabs": true, + "NoColor": false, + "Exclude": ["\\.json$", "\\.py$", "_parser.h$", "_parser.cpp$", "_lexer.cpp$", "^tools/"], + "AllowedContentTypes": [], + "PassedFiles": [], + "Disable": { + "EndOfLine": false, + "Indentation": true, + "IndentSize": true, + "InsertFinalNewline": false, + "TrimTrailingWhitespace": false, + "MaxLineLength": false + } +} \ No newline at end of file diff --git a/.github/codeql/codeql-config-javascript.yml b/.github/codeql/codeql-config-javascript.yml index f65dce12591..e01b63fa18a 100644 --- a/.github/codeql/codeql-config-javascript.yml +++ b/.github/codeql/codeql-config-javascript.yml @@ -4,7 +4,7 @@ name: "WZ CodeQL JS config" paths: - data -paths-ignore: +paths-ignore: - 3rdparty - tests - tools diff --git a/.github/workflows/CI_emscripten.yml b/.github/workflows/CI_emscripten.yml index bb070636e39..1c784ecee01 100644 --- a/.github/workflows/CI_emscripten.yml +++ b/.github/workflows/CI_emscripten.yml @@ -13,19 +13,21 @@ on: - 'data/base/stats/**' - 'data/mp/stats/**' - 'data/mp/multiplay/script/functions/camTechEnabler.js' + # Linux-specific example scripts + - 'doc/hosting/linux_scripts/**' # Support running after "Draft Tag Release" workflow completes, as part of automated release process workflow_run: workflows: ["Draft Tag Release"] push: tags: - '*' - types: + types: - completed env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: Release - EMSDK_VERSION: 3.1.53 + EMSDK_VERSION: 3.1.61 CMAKE_BUILD_PARALLEL_LEVEL: 4 # See: https://github.blog/2024-01-17-github-hosted-runners-double-the-power-for-open-source/ jobs: @@ -39,6 +41,9 @@ jobs: name: '${{ matrix.arch }}' permissions: contents: read + # needed to generate artifact attestations, see: https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds + id-token: write + attestations: write runs-on: ubuntu-latest env: WZ_WASM_ARCH: '${{ matrix.arch }}' @@ -79,7 +84,7 @@ jobs: fi echo "WZ_DISTRIBUTOR=${WZ_DISTRIBUTOR}" echo "WZ_DISTRIBUTOR=${WZ_DISTRIBUTOR}" >> $GITHUB_ENV - + WZ_BUILD_DESC="web_${WZ_WASM_ARCH}" echo "WZ_BUILD_DESC=${WZ_BUILD_DESC}" echo "WZ_BUILD_DESC=${WZ_BUILD_DESC}" >> $GITHUB_ENV @@ -94,7 +99,7 @@ jobs: - name: Install workbox-cli run: npm install workbox-cli --global - + - name: Install EMSDK id: emsdk run: | @@ -132,7 +137,7 @@ jobs: - name: Debug Output working-directory: ${{github.workspace}}/installed run: ls -al - + - name: Package Archive working-directory: '${{ github.workspace }}/build' env: @@ -154,6 +159,14 @@ jobs: path: '${{ env.WZ_FULL_OUTPUT_ZIP_PATH }}' if-no-files-found: 'error' + - name: Generate artifact attestation + # Run on push to master branch (development build), or tag release automation build + if: success() && ((github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release')) + uses: actions/attest-build-provenance@v1 + continue-on-error: true + with: + subject-path: '${{ env.WZ_FULL_OUTPUT_ZIP_PATH }}' + upload_to_release: strategy: matrix: @@ -166,8 +179,8 @@ jobs: if: (github.repository == 'Warzone2100/warzone2100') && (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release') needs: web-build env: - WZ_WASM_ARCH: '${{ matrix.arch }}' - WZ_BUILD_DESC: 'web_${{ matrix.arch }}' + WZ_WASM_ARCH: '${{ matrix.architecture }}' + WZ_BUILD_DESC: 'web_${{ matrix.architecture }}' steps: - name: Prep Environment run: mkdir dl-archive @@ -206,7 +219,7 @@ jobs: ssh-dest-host: ${{ vars.WZ_WEB_BUILD_UPLOAD_SSH_HOST }} cdn-purge-base-url: 'play.wz2100.net/dev' secrets: inherit - + publish_release_build: strategy: matrix: diff --git a/.github/workflows/CI_fedora.yml b/.github/workflows/CI_fedora.yml index a2f0343f97f..9641438ac25 100644 --- a/.github/workflows/CI_fedora.yml +++ b/.github/workflows/CI_fedora.yml @@ -86,7 +86,7 @@ jobs: working-directory: '${{ github.workspace }}/build' run: | echo "::add-matcher::${GITHUB_WORKSPACE}/src/.ci/githubactions/pattern_matchers/cmake.json" - docker run --rm -w "${GITHUB_WORKSPACE}/build" -e WZ_CI_DISABLE_BASIS_COMPRESS_TEXTURES -e "CI=true" -e GITHUB_WORKFLOW -e GITHUB_ACTIONS -e GITHUB_REPOSITORY -e GITHUB_WORKSPACE -e GITHUB_SHA -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e MAKEFLAGS -v "${GITHUB_WORKSPACE}:${GITHUB_WORKSPACE}" fedora cmake -DCMAKE_TOOLCHAIN_FILE=.ci/cmake/Toolchain-Linux-cross-m32.cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWZ_ENABLE_WARNINGS:BOOL=ON -G"Ninja" "${{ github.workspace }}/src" + docker run --rm -w "${GITHUB_WORKSPACE}/build" -e WZ_CI_DISABLE_BASIS_COMPRESS_TEXTURES -e "CI=true" -e GITHUB_WORKFLOW -e GITHUB_ACTIONS -e GITHUB_REPOSITORY -e GITHUB_WORKSPACE -e GITHUB_SHA -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e MAKEFLAGS -v "${GITHUB_WORKSPACE}:${GITHUB_WORKSPACE}" fedora cmake -DCMAKE_TOOLCHAIN_FILE=.ci/cmake/toolchains/m32-cross-linux.cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWZ_ENABLE_WARNINGS:BOOL=ON -G"Ninja" "${{ github.workspace }}/src" echo "::remove-matcher owner=cmake::" - name: CMake Build working-directory: '${{ github.workspace }}/build' diff --git a/.github/workflows/CI_flatpak.yml b/.github/workflows/CI_flatpak.yml index e0a9595680f..f1a3ddea3d9 100644 --- a/.github/workflows/CI_flatpak.yml +++ b/.github/workflows/CI_flatpak.yml @@ -13,13 +13,15 @@ on: - 'data/base/stats/**' - 'data/mp/stats/**' - 'data/mp/multiplay/script/functions/camTechEnabler.js' + # Linux-specific example scripts + - 'doc/hosting/linux_scripts/**' # Support running after "Draft Tag Release" workflow completes, as part of automated release process workflow_run: workflows: ["Draft Tag Release"] push: tags: - '*' - types: + types: - completed # Support running on Release "publish" event to build and publish to Flathub release: @@ -41,13 +43,16 @@ jobs: name: '${{ matrix.name }} (${{ matrix.arch }})' permissions: contents: read + # needed to generate artifact attestations, see: https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds + id-token: write + attestations: write runs-on: ubuntu-latest if: "!contains(github.event.head_commit.message, '[ci skip]')" env: WZ_FLATPAK_BUILD_DIR: flatpak_app WZ_FLATPAK_TARGET_ARCH: ${{ matrix.flatpak-arch }} WZ_FLATPAK_BUILD_ARCH: x86_64 - WZ_FREEDESKTOP_RUNTIME_VERSION: 23.08 # should match runtime-version in .ci/flatpak/net.wz2100.wz2100.yaml.in + WZ_FREEDESKTOP_RUNTIME_VERSION: 24.08 # should match runtime-version in .ci/flatpak/net.wz2100.wz2100.yaml.in outputs: # Needed by the release job - despite this being a matrix job, this should be the same for all, so we can allow whatever is last to persist it WZ_GITHUB_REF: ${{ steps.checkout-config.outputs.WZ_GITHUB_REF }} @@ -56,10 +61,11 @@ jobs: steps: - name: Install Dependencies run: | - echo "::group::apt install dependencies" - sudo apt install flatpak python3-aiohttp python3-tenacity dbus-daemon curl + echo "::group::apt-get install dependencies" + sudo apt-get -u update + DEBIAN_FRONTEND=noninteractive sudo apt-get -y install flatpak python3-aiohttp python3-tenacity dbus-daemon curl echo "::endgroup::" - + echo "::group::flatpak remote-add" flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak --user remote-add --if-not-exists flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo @@ -114,7 +120,7 @@ jobs: fi echo "WZ_DISTRIBUTOR=${WZ_DISTRIBUTOR}" echo "WZ_DISTRIBUTOR=${WZ_DISTRIBUTOR}" >> $GITHUB_ENV - + WZ_FLATPAK_BRANCH="${WZ_BUILD_DESC_PREFIX}" if [ "$WZ_BUILD_DESC_IS_TAG" == "true" ]; then SOURCE_TAG="${WZ_GITHUB_REF#refs/tags/}" @@ -136,7 +142,7 @@ jobs: WZ_FLATPAK_BRANCH="stable" SOURCE_TAG_IS_PRERELEASE="false" fi - + echo "publish-to-flathub=true" >> $GITHUB_OUTPUT echo "SOURCE_TAG_IS_PRERELEASE=${SOURCE_TAG_IS_PRERELEASE}" >> $GITHUB_OUTPUT else @@ -151,7 +157,7 @@ jobs: fi echo "WZ_FLATPAK_BRANCH=${WZ_FLATPAK_BRANCH}" echo "WZ_FLATPAK_BRANCH=${WZ_FLATPAK_BRANCH}" >> $GITHUB_OUTPUT - + WZ_FLATPAK_APPID="net.wz2100.wz2100${WZ_OUTPUT_NAME_SUFFIX}" echo "WZ_FLATPAK_APPID=${WZ_FLATPAK_APPID}" >> $GITHUB_ENV echo "WZ_FLATPAK_APPID=${WZ_FLATPAK_APPID}" >> $GITHUB_OUTPUT @@ -168,11 +174,11 @@ jobs: if [[ "$WZ_FLATPAK_TARGET_ARCH" != "$WZ_FLATPAK_BUILD_ARCH" ]]; then # Cross compilation is needed ADDITIONAL_CONFIG_OPTIONS="-DWZ_CROSS_COMPILE_TARGET_ARCH=${WZ_FLATPAK_TARGET_ARCH}" - fi + fi echo "::group::Generate manifest" cmake "-DTEMPLATE_FILE=.ci/flatpak/net.wz2100.wz2100.yaml.in" "-DOUTPUT_FILE=.ci/flatpak/net.wz2100.wz2100.yaml" "-DPROJECT_ROOT=./" "-DWZ_OUTPUT_NAME_SUFFIX=${WZ_OUTPUT_NAME_SUFFIX}" ${ADDITIONAL_CONFIG_OPTIONS} -P .ci/flatpak/generate_flatpak_config.cmake echo "::endgroup::" - + echo "::group::Output manifest" cat ".ci/flatpak/net.wz2100.wz2100.yaml" echo "::endgroup::" @@ -182,14 +188,14 @@ jobs: flatpak install --user -y --noninteractive flathub org.freedesktop.Sdk//${WZ_FREEDESKTOP_RUNTIME_VERSION} # Target runtime flatpak install --user -y --noninteractive flathub org.freedesktop.Platform/${WZ_FLATPAK_TARGET_ARCH}/${WZ_FREEDESKTOP_RUNTIME_VERSION} - + if [[ "$WZ_FLATPAK_TARGET_ARCH" != "$WZ_FLATPAK_BUILD_ARCH" ]]; then # Cross compiler flatpak install --user -y --noninteractive flathub org.freedesktop.Sdk.Extension.toolchain-${WZ_FLATPAK_TARGET_ARCH}//${WZ_FREEDESKTOP_RUNTIME_VERSION} # SDK For target runtime flatpak install --user -y --noninteractive flathub org.freedesktop.Sdk.Compat.${WZ_FLATPAK_TARGET_ARCH}//${WZ_FREEDESKTOP_RUNTIME_VERSION} fi - + # Builder (which includes flatpak-builder-lint) flatpak install --user flathub -y --noninteractive org.flatpak.Builder - name: Build Flatpak @@ -263,6 +269,13 @@ jobs: path: | output_debug_dependency_snapshot if-no-files-found: 'error' + - name: Generate artifact attestation + # Run on push to master branch (development build), or tag release automation build + if: success() && ((github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release')) + uses: actions/attest-build-provenance@v1 + continue-on-error: true + with: + subject-path: '${{ steps.settings.outputs.WZ_FLATPAK_BUNDLE }}' ############################################################### # Package the ostree repo (for use in later publish-release-to-flathub job) - name: Tar ostree repo @@ -287,13 +300,7 @@ jobs: path: '${{ steps.repo-tar.outputs.REPO_TAR_FILE }}' upload-debug-symbols: - strategy: - matrix: - include: - - arch: "x86_64" - - arch: "arm64" - fail-fast: false - name: 'Upload Debug Symbols (${{ matrix.arch }})' + name: 'Upload Debug Symbols' permissions: contents: read runs-on: ubuntu-latest @@ -304,20 +311,27 @@ jobs: # For this job to work, the following secrets must be set in the 'upload_symbols' environment: # SENTRY_AUTH_TOKEN steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + path: 'src' - name: Prep Environment run: | mkdir -p dl-debug/symbols mkdir -p dl-debug/additional + echo "WZ_REPO_PATH=$(pwd)/src" >> $GITHUB_ENV - name: Download Debug Symbols uses: actions/download-artifact@v4 with: - name: 'debugsymbols_linux_flatpak_${{ matrix.arch }}' + pattern: 'debugsymbols_linux_flatpak_*' path: ./dl-debug/symbols + merge-multiple: false - name: Download Additional Debug Files uses: actions/download-artifact@v4 with: - name: 'debugdependencylibsnapshot_linux_flatpak_${{ matrix.arch }}' + pattern: 'debugdependencylibsnapshot_linux_flatpak_*' path: ./dl-debug/additional + merge-multiple: false - name: Display structure of downloaded files run: ls -R working-directory: ./dl-debug @@ -332,8 +346,15 @@ jobs: echo "No SENTRY_AUTH_TOKEN - skipping" exit 0 fi - docker pull getsentry/sentry-cli - docker run --rm -e SENTRY_AUTH_TOKEN -v "$(pwd):/work" getsentry/sentry-cli debug-files upload --no-zips -o warzone2100 -p warzone2100 "${WZ_ARCHIVE_DIR}" + # Download sentry-cli + echo "::group::Downloading sentry-cli ..." + cmake -P "${WZ_REPO_PATH}/.ci/githubactions/FetchSentryCLI.cmake" + echo "Downloading sentry-cli ... Done" + echo "::endgroup::" + # Upload symbols + echo "::group::sentry-cli debug-files upload" + ./sentry-cli/sentry-cli debug-files upload --no-zips -o warzone2100 -p warzone2100 "${WZ_ARCHIVE_DIR}" + echo "::endgroup::" upload-release-builds: strategy: @@ -408,20 +429,20 @@ jobs: - name: Install Dependencies run: | cat /etc/fedora-release - + echo "::group::dnf update" dnf update -y echo "::endgroup::" echo "::group::dnf install dependencies" dnf install -y cmake git git-lfs dbus-daemon flatpak flatpak-builder python3-aiohttp python3-tenacity python3-gobject ccache zstd curl appstream echo "::endgroup::" - + echo "::group::flatpak remote-add" flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak remote-add --if-not-exists flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo echo "::endgroup::" - + echo "::group::fetch flat-manager-client" curl -Lf https://raw.githubusercontent.com/flatpak/flat-manager/master/flat-manager-client --output /usr/bin/flat-manager-client chmod +x /usr/bin/flat-manager-client @@ -493,15 +514,15 @@ jobs: WZ_FLATPAK_LOCAL_REPO_NAME="${WZ_FLATPAK_TARGET_ARCH}-repo-beta" ostree init --mode archive-z2 --repo=${WZ_FLATPAK_LOCAL_REPO_NAME} echo "::endgroup::" - + echo "::group::Build commit from stable repo" for i in app/${WZ_FLATPAK_APPID} \ - runtime/${WZ_FLATPAK_APPID}.Debug + runtime/${WZ_FLATPAK_APPID}.Debug do - # Move the commits to the beta repo - echo "Processing: --src-ref=${i}/${WZ_FLATPAK_TARGET_ARCH}/${WZ_FLATPAK_BRANCH}" - flatpak build-commit-from --update-appstream --no-update-summary --src-ref=${i}/${WZ_FLATPAK_TARGET_ARCH}/${WZ_FLATPAK_BRANCH} --src-repo=${SRC_LOCAL_REPO_NAME} \ - ${WZ_FLATPAK_LOCAL_REPO_NAME} ${i}/${WZ_FLATPAK_TARGET_ARCH}/beta + # Move the commits to the beta repo + echo "Processing: --src-ref=${i}/${WZ_FLATPAK_TARGET_ARCH}/${WZ_FLATPAK_BRANCH}" + flatpak build-commit-from --update-appstream --no-update-summary --src-ref=${i}/${WZ_FLATPAK_TARGET_ARCH}/${WZ_FLATPAK_BRANCH} --src-repo=${SRC_LOCAL_REPO_NAME} \ + ${WZ_FLATPAK_LOCAL_REPO_NAME} ${i}/${WZ_FLATPAK_TARGET_ARCH}/beta done echo "::endgroup::" echo "WZ_FLATPAK_LOCAL_REPO_NAME=${WZ_FLATPAK_LOCAL_REPO_NAME}" diff --git a/.github/workflows/CI_linter.yml b/.github/workflows/CI_linter.yml index 1a14fbcd841..f67d60f7a30 100644 --- a/.github/workflows/CI_linter.yml +++ b/.github/workflows/CI_linter.yml @@ -24,16 +24,18 @@ jobs: # Full git history is needed to get a proper list of changed files within `super-linter` fetch-depth: 0 - name: Lint Code Base - uses: super-linter/super-linter@v6.0.0 # x-release-please-version + uses: super-linter/super-linter@v6 env: VALIDATE_ALL_CODEBASE: false DEFAULT_BRANCH: master # .eslintrc.json allows non-standard comments - FILTER_REGEX_EXCLUDE: .*(\.eslintrc\.json|3rdparty/|platforms/emscripten/).* + FILTER_REGEX_EXCLUDE: .*(\.eslintrc\.json|3rdparty/|.ci/vcpkg/|lib/exceptionhandler/include/|platforms/emscripten/).* LINTER_RULES_PATH: / VALIDATE_YAML: true VALIDATE_JSON: true VALIDATE_JAVASCRIPT_ES: true JAVASCRIPT_ES_CONFIG_FILE: '.eslintrc.json' + VALIDATE_EDITORCONFIG: true + EDITORCONFIG_FILE_NAME: '.ecrc' # To report GitHub Actions status checks GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/CI_macos.yml b/.github/workflows/CI_macos.yml index f9b74c2ef88..0ea130aa4dd 100644 --- a/.github/workflows/CI_macos.yml +++ b/.github/workflows/CI_macos.yml @@ -13,13 +13,15 @@ on: - 'data/base/stats/**' - 'data/mp/stats/**' - 'data/mp/multiplay/script/functions/camTechEnabler.js' + # Linux-specific example scripts + - 'doc/hosting/linux_scripts/**' # Support running after "Draft Tag Release" workflow completes, as part of automated release process workflow_run: workflows: ["Draft Tag Release"] push: tags: - '*' - types: + types: - completed jobs: @@ -27,28 +29,20 @@ jobs: strategy: matrix: include: - - name: "Xcode 11.7 (x64)" - image: "macos-11" + - name: "Xcode 14.3 (x64)" + image: "macos-13" osx_target_arch: "x86_64" vcpkg_triplet: "x64-osx" - xcode_dev_dir: "/Applications/Xcode_11.7.app" + xcode_dev_dir: "/Applications/Xcode_14.3.1.app" include_videos: false artifact_suffix: "x64" - publish_artifact: false - - name: "Xcode 13.4 (x64)" - image: "macos-12" - osx_target_arch: "x86_64" - vcpkg_triplet: "x64-osx" - xcode_dev_dir: "/Applications/Xcode_13.4.1.app" - include_videos: true - artifact_suffix: "x64" publish_artifact: true - - name: "Xcode 13.4 (ARM64)" - image: "macos-12" + - name: "Xcode 14.3 (ARM64)" + image: "macos-13" osx_target_arch: "arm64" vcpkg_triplet: "arm64-osx" - xcode_dev_dir: "/Applications/Xcode_13.4.1.app" - include_videos: false + xcode_dev_dir: "/Applications/Xcode_14.3.1.app" + include_videos: true artifact_suffix: "arm64" publish_artifact: true fail-fast: false @@ -58,7 +52,7 @@ jobs: runs-on: '${{ matrix.image }}' if: "!contains(github.event.head_commit.message, '[ci skip]')" env: - MACOSX_DEPLOYMENT_TARGET: '10.9' + MACOSX_DEPLOYMENT_TARGET: '10.13' VSCMD_SKIP_SENDTELEMETRY: 1 DESIRED_XCODE_DEV_DIR: '${{ matrix.xcode_dev_dir }}' WZ_INCLUDE_VIDEOS: '${{ matrix.include_videos }}' @@ -85,13 +79,19 @@ jobs: working-directory: ./src run: git submodule update --init --recursive - name: Install Pre-reqs + env: + HOMEBREW_NO_AUTO_UPDATE: 1 + HOMEBREW_NO_INSTALL_UPGRADE: 1 run: | - brew install gettext + echo "::group::brew install" + brew install --quiet automake gettext pkg-config xcbeautify + echo "::endgroup::" + # NOTE: Specify an explicit Asciidoctor version to help ensure reproducible builds - gem install asciidoctor -v 2.0.16 --no-document + echo "::group::gem install asciidoctor" + gem install asciidoctor -v 2.0.23 --no-document + echo "::endgroup::" - #brew update - brew install pkg-config #if (brew outdated | grep cmake > /dev/null); then echo "upgrading CMake"; brew upgrade cmake; fi cmake --version - name: Prep Environment @@ -112,13 +112,15 @@ jobs: sudo xcode-select -s "${DESIRED_XCODE_DEV_DIR}" echo "MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET}" + echo "VCPKG_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET}" >> $GITHUB_ENV + echo "VCPKG_KEEP_ENV_VARS=VCPKG_OSX_DEPLOYMENT_TARGET;MACOSX_DEPLOYMENT_TARGET" >> $GITHUB_ENV - name: configure_mac.cmake working-directory: ./build env: SENTRY_IO_DSN: '${{ secrets.CRASHREPORTING_SENTRY_IO_DSN }}' DISCORD_RPC_APPID: '${{ secrets.DISCORD_RPC_APPID }}' run: | - ADDITIONAL_CMAKE_ARGUMENTS="-DCMAKE_OSX_ARCHITECTURES=${WZ_OSX_TARGET_ARCH};-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY=-;-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO" + ADDITIONAL_CMAKE_ARGUMENTS="-DCMAKE_OSX_ARCHITECTURES=${WZ_OSX_TARGET_ARCH};-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY=-;-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO;-DENABLE_DISCORD:BOOL=ON" echo "WZ_INCLUDE_VIDEOS=${WZ_INCLUDE_VIDEOS}" if [ "${WZ_INCLUDE_VIDEOS}" == "true" ]; then ADDITIONAL_CMAKE_ARGUMENTS="${ADDITIONAL_CMAKE_ARGUMENTS};-DWZ_INCLUDE_VIDEOS:BOOL=ON" @@ -148,8 +150,8 @@ jobs: cmake -DADDITIONAL_VCPKG_FLAGS=--no-binarycaching -DVCPKG_BUILD_TYPE=release -DWZ_DISTRIBUTOR:STRING="${WZ_DISTRIBUTOR}" -DADDITIONAL_CMAKE_ARGUMENTS="${ADDITIONAL_CMAKE_ARGUMENTS}" -P ../src/configure_mac.cmake result=${?} if [ $result -ne 0 ]; then - echo "ERROR: configure_mac.cmake failed" - exit ${result} + echo "ERROR: configure_mac.cmake failed" + exit ${result} fi - name: Build Xcode project working-directory: ./build @@ -157,16 +159,16 @@ jobs: # Build Xcode project, and package "warzone2100.zip" set -o pipefail && \ xcodebuild \ - -project warzone2100.xcodeproj \ - -target "package" \ - -configuration "Release" \ - -destination "platform=macOS" \ - -PBXBuildsContinueAfterErrors=NO \ - | tee "xcodebuild.log" | xcpretty -c + -project warzone2100.xcodeproj \ + -target "package" \ + -configuration "Release" \ + -destination "platform=macOS" \ + -PBXBuildsContinueAfterErrors=NO \ + | tee "xcodebuild.log" | xcbeautify --renderer github-actions result=${?} if [ $result -ne 0 ]; then - echo "ERROR: xcodebuild failed" - exit ${result} + echo "ERROR: xcodebuild failed" + exit ${result} fi - name: Output Build Info shell: sh {0} @@ -183,7 +185,7 @@ jobs: # Verify "warzone2100.zip" was created BUILT_WARZONE_ZIP="build/warzone2100.zip" - src/macosx/BuildBot/check_warzone2100_zip.sh "${BUILT_WARZONE_ZIP}" "build/tmp/" + src/platforms/macos/BuildBot/check_warzone2100_zip.sh "${BUILT_WARZONE_ZIP}" "build/tmp/" # Move warzone2100.zip to the output directory, renaming it DESIRED_ZIP_NAME="warzone2100_macOS_${{ matrix.artifact_suffix }}.zip" @@ -212,6 +214,9 @@ jobs: name: 'Package Universal Binary' permissions: contents: write # Needed to upload to releases + # needed to generate artifact attestations, see: https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds + id-token: write + attestations: write needs: macos-build runs-on: macos-latest steps: @@ -232,7 +237,6 @@ jobs: mkdir dl-artifacts mkdir build mkdir output - echo "OUTPUT_DIR=output" >> $GITHUB_ENV - name: Download Artifacts uses: actions/download-artifact@v4 @@ -252,16 +256,16 @@ jobs: - name: Create Universal Binary working-directory: ./dl-artifacts run: | - BASE_APP_BUNDLE="warzone2100_macOS_x64/Warzone 2100.app" + BASE_APP_BUNDLE="warzone2100_macOS_arm64/Warzone 2100.app" # extract entitlements plist from the "base" app bundle binary echo "Extract entitlements.plist" codesign -d --entitlements :- "${BASE_APP_BUNDLE}/Contents/MacOS/Warzone 2100" > "entitlements.plist" cat "entitlements.plist" echo "-----------------------------------" echo "Make universal binary + app package" - ../src/macosx/BuildBot/make_universal.sh "${BASE_APP_BUNDLE}" "warzone2100_macOS_arm64/Warzone 2100.app" + ../src/platforms/macos/BuildBot/make_universal.sh "${BASE_APP_BUNDLE}" "warzone2100_macOS_x64/Warzone 2100.app" # Rename the "base" app package directory - mv "warzone2100_macOS_x64" "warzone2100_macOS_universal" + mv "warzone2100_macOS_arm64" "warzone2100_macOS_universal" echo "Re-code-sign" codesign --force --options runtime --entitlements "entitlements.plist" -s - "warzone2100_macOS_universal/Warzone 2100.app" # Zip and copy to build dir @@ -275,7 +279,7 @@ jobs: # Verify "warzone2100.zip" was created BUILT_WARZONE_ZIP="build/warzone2100.zip" - src/macosx/BuildBot/check_warzone2100_zip.sh "${BUILT_WARZONE_ZIP}" "build/tmp/" + src/platforms/macos/BuildBot/check_warzone2100_zip.sh "${BUILT_WARZONE_ZIP}" "build/tmp/" # Move warzone2100.zip to the output directory, renaming it DESIRED_ZIP_NAME="warzone2100_macOS_universal.zip" @@ -298,6 +302,13 @@ jobs: name: "warzone2100_macOS_universal" path: ${{ env.WZ_FULL_OUTPUT_ZIP_PATH }} if-no-files-found: 'error' + - name: 'Generate artifact attestation - (full)' + # Run on push to master branch (development build), or tag release automation build + if: success() && ((github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release')) + uses: actions/attest-build-provenance@v1 + continue-on-error: true + with: + subject-path: '${{ env.WZ_FULL_OUTPUT_ZIP_PATH }}' - name: Upload "universal" to release if: success() && (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release') && (github.repository == 'Warzone2100/warzone2100') run: | @@ -332,7 +343,7 @@ jobs: # Verify "warzone2100_novideos.zip" was created BUILT_WARZONE_ZIP="build/warzone2100_novideos.zip" - src/macosx/BuildBot/check_warzone2100_zip.sh "${BUILT_WARZONE_ZIP}" "build/tmp/" + src/platforms/macos/BuildBot/check_warzone2100_zip.sh "${BUILT_WARZONE_ZIP}" "build/tmp/" # Move warzone2100.zip to the output directory, renaming it DESIRED_ZIP_NAME="warzone2100_macOS_universal_novideos.zip" @@ -347,7 +358,7 @@ jobs: ZIP_SIZE="$(stat -f '%z' "${OUTPUT_DIR}/${DESIRED_ZIP_NAME}")" echo " -> SHA512: ${ZIP_HASH}" echo " -> Size (bytes): ${ZIP_SIZE}" - + echo "WZ_FULL_OUTPUT_ZIP_PATH=${OUTPUT_DIR}/${DESIRED_ZIP_NAME}" >> $GITHUB_ENV exit 0 @@ -356,6 +367,13 @@ jobs: name: "warzone2100_macOS_universal_novideos" path: ${{ env.WZ_FULL_OUTPUT_ZIP_PATH }} if-no-files-found: 'error' + - name: 'Generate artifact attestation - (novideos)' + # Run on push to master branch (development build), or tag release automation build + if: success() && ((github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release')) + uses: actions/attest-build-provenance@v1 + continue-on-error: true + with: + subject-path: '${{ env.WZ_FULL_OUTPUT_ZIP_PATH }}' - name: Upload "universal_novideos" to release if: success() && (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release') && (github.repository == 'Warzone2100/warzone2100') run: | @@ -379,9 +397,14 @@ jobs: # For this job to work, the following secrets must be set in the 'upload_symbols' environment: # SENTRY_AUTH_TOKEN steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + path: 'src' - name: Prep Environment run: | mkdir dl-archive + echo "WZ_REPO_PATH=$(pwd)/src" >> $GITHUB_ENV - name: Download Artifacts uses: actions/download-artifact@v4 with: @@ -403,5 +426,12 @@ jobs: echo "No SENTRY_AUTH_TOKEN - skipping" exit 0 fi - docker pull getsentry/sentry-cli - docker run --rm -e SENTRY_AUTH_TOKEN -v "$(pwd):/work" getsentry/sentry-cli upload-dif --no-zips -o warzone2100 -p warzone2100 "${WZ_ARCHIVE_DIR}" + # Download sentry-cli + echo "::group::Downloading sentry-cli ..." + cmake -P "${WZ_REPO_PATH}/.ci/githubactions/FetchSentryCLI.cmake" + echo "Downloading sentry-cli ... Done" + echo "::endgroup::" + # Upload symbols + echo "::group::sentry-cli debug-files upload" + ./sentry-cli/sentry-cli debug-files upload --no-zips -o warzone2100 -p warzone2100 "${WZ_ARCHIVE_DIR}" + echo "::endgroup::" diff --git a/.github/workflows/CI_snapcraft.yml b/.github/workflows/CI_snapcraft.yml index f7c18f0ff05..ad7f831ba6f 100644 --- a/.github/workflows/CI_snapcraft.yml +++ b/.github/workflows/CI_snapcraft.yml @@ -13,13 +13,15 @@ on: - 'data/base/stats/**' - 'data/mp/stats/**' - 'data/mp/multiplay/script/functions/camTechEnabler.js' + # Linux-specific example scripts + - 'doc/hosting/linux_scripts/**' # Support running after "Draft Tag Release" workflow completes, as part of automated release process workflow_run: workflows: ["Draft Tag Release"] push: tags: - '*' - types: + types: - completed jobs: @@ -32,6 +34,9 @@ jobs: name: '${{ matrix.name }}' permissions: contents: write # Needed to upload to releases + # needed to generate artifact attestations, see: https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds + id-token: write + attestations: write runs-on: ubuntu-20.04 # Use instead of ubuntu-latest until https://github.com/snapcore/action-build/issues/42 is resolved if: "!contains(github.event.head_commit.message, '[ci skip]')" steps: @@ -80,7 +85,7 @@ jobs: WZ_PACKAGE_VAR_OVERRIDES="-D WZ_DEVELOPMENT_BUILD=ON" fi WZ_SNAP_PACKAGE_NAME=$(echo "warzone2100${WZ_OUTPUT_NAME_SUFFIX}" | sed 's/[^a-zA-Z0-9\.\+\-]/-/g') - + cat > .snapenv <> $GITHUB_ENV - + if [ "${{ matrix.compiler }}" == "gcc" ]; then WZ_CC="/usr/bin/gcc" WZ_CXX="/usr/bin/g++" @@ -143,9 +146,9 @@ jobs: # Pass the configuration to enable it ADDITIONAL_CMAKE_PARAMS="-DSENTRY_IO_DSN:STRING=${SENTRY_IO_DSN}" fi - + echo "::add-matcher::${GITHUB_WORKSPACE}/src/.ci/githubactions/pattern_matchers/cmake.json" - docker run --rm -w "${GITHUB_WORKSPACE}/build" -e "CC=${WZ_CC}" -e "CXX=${WZ_CXX}" -e "CI=true" -e GITHUB_WORKFLOW -e GITHUB_ACTIONS -e GITHUB_REPOSITORY -e GITHUB_WORKSPACE -e "GITHUB_SHA=${WZ_GITHUB_SHA}" -e "GITHUB_REF=${WZ_GITHUB_REF}" -e "GITHUB_HEAD_REF=${WZ_GITHUB_HEAD_REF}" -e "GITHUB_BASE_REF=${WZ_GITHUB_BASE_REF}" -e MAKEFLAGS -v "${GITHUB_WORKSPACE}:${GITHUB_WORKSPACE}" ubuntu cmake -DCMAKE_BUILD_TYPE=Release -DWZ_ENABLE_WARNINGS:BOOL=ON -DWZ_DISTRIBUTOR:STRING="${WZ_DISTRIBUTOR}" -DWZ_BUILD_SENTRY:BOOL="${WZ_BUILD_SENTRY_VALUE}" -DSENTRY_BACKEND="${SENTRY_BACKEND}" ${ADDITIONAL_CMAKE_PARAMS} -DDISCORD_RPC_APPID:STRING="${DISCORD_RPC_APPID}" -DWZ_OUTPUT_NAME_SUFFIX="${WZ_OUTPUT_NAME_SUFFIX}" -DWZ_NAME_SUFFIX="${WZ_NAME_SUFFIX}" -G"Ninja" "${{ github.workspace }}/src" + docker run --rm -w "${GITHUB_WORKSPACE}/build" -e "CC=${WZ_CC}" -e "CXX=${WZ_CXX}" -e "CI=true" -e GITHUB_WORKFLOW -e GITHUB_ACTIONS -e GITHUB_REPOSITORY -e GITHUB_WORKSPACE -e "GITHUB_SHA=${WZ_GITHUB_SHA}" -e "GITHUB_REF=${WZ_GITHUB_REF}" -e "GITHUB_HEAD_REF=${WZ_GITHUB_HEAD_REF}" -e "GITHUB_BASE_REF=${WZ_GITHUB_BASE_REF}" -e MAKEFLAGS -v "${GITHUB_WORKSPACE}:${GITHUB_WORKSPACE}" ubuntu cmake -DCMAKE_BUILD_TYPE=Release -DWZ_ENABLE_WARNINGS:BOOL=ON -DWZ_DISTRIBUTOR:STRING="${WZ_DISTRIBUTOR}" -DWZ_BUILD_SENTRY:BOOL="${WZ_BUILD_SENTRY_VALUE}" -DSENTRY_BACKEND="${SENTRY_BACKEND}" ${ADDITIONAL_CMAKE_PARAMS} -DENABLE_DISCORD:BOOL=ON -DDISCORD_RPC_APPID:STRING="${DISCORD_RPC_APPID}" -DWZ_OUTPUT_NAME_SUFFIX="${WZ_OUTPUT_NAME_SUFFIX}" -DWZ_NAME_SUFFIX="${WZ_NAME_SUFFIX}" -G"Ninja" "${{ github.workspace }}/src" echo "::remove-matcher owner=cmake::" - name: CMake Build working-directory: '${{ github.workspace }}/build' @@ -187,6 +190,7 @@ jobs: run: | WZ_EXECUTABLE_PATH="${WZ_BUILD_DIR}/src/warzone2100${WZ_OUTPUT_NAME_SUFFIX}" objcopy --only-keep-debug "${WZ_EXECUTABLE_PATH}" "warzone2100${WZ_OUTPUT_NAME_SUFFIX}.debug" + cp "${WZ_EXECUTABLE_PATH}" "warzone2100${WZ_OUTPUT_NAME_SUFFIX}" - name: Upload debug info uses: actions/upload-artifact@v4 if: success() && (matrix.publish_artifact == true) @@ -195,6 +199,13 @@ jobs: path: | ${{ github.workspace }}/debug if-no-files-found: 'error' + - name: Generate artifact attestation + # Run on push to master branch (development build), or tag release automation build + if: success() && (matrix.publish_artifact == true) && ((github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release')) + uses: actions/attest-build-provenance@v1 + continue-on-error: true + with: + subject-path: '${{ env.WZ_FULL_OUTPUT_DEB_PATH }}' - name: Upload artifact to release if: success() && (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release') && (matrix.deploy_release == true) run: | @@ -206,9 +217,12 @@ jobs: WZ_GITHUB_REF: ${{ steps.checkout-config.outputs.WZ_GITHUB_REF }} package-source: - name: Package Source (Ubuntu 22.04) [GCC] + name: Package Source (Ubuntu 24.04) [GCC] permissions: contents: write # Needed to upload to releases + # needed to generate artifact attestations, see: https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds + id-token: write + attestations: write runs-on: ubuntu-latest if: "!contains(github.event.head_commit.message, '[ci skip]')" steps: @@ -237,7 +251,7 @@ jobs: - name: Build the Docker image working-directory: '${{ github.workspace }}/src' run: | - docker build --build-arg UID=$UID -f docker/ubuntu-22.04/Dockerfile -t ubuntu . + docker build --build-arg UID=$UID -f docker/ubuntu-24.04/Dockerfile -t ubuntu . - name: Prep Directories run: | mkdir -p "${{ github.workspace }}/build" @@ -279,6 +293,13 @@ jobs: name: warzone2100_src path: ${{ env.OUTPUT_DIR }} if-no-files-found: 'error' + - name: Generate artifact attestation + # Run on push to master branch (development build), or tag release automation build + if: success() && ((github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release')) + uses: actions/attest-build-provenance@v1 + continue-on-error: true + with: + subject-path: '${{ env.OUTPUT_DIR }}/warzone2100_src.tar.xz' - name: Upload source tarball to release if: success() && (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release') run: | @@ -290,12 +311,7 @@ jobs: WZ_GITHUB_REF: ${{ steps.checkout-config.outputs.WZ_GITHUB_REF }} upload-debug-symbols: - strategy: - matrix: - include: - - output-suffix: "ubuntu20.04" - arch: "amd64" - name: 'Upload Debug Symbols (${{ matrix.matrix }})' + name: 'Upload Debug Symbols' permissions: contents: read runs-on: ubuntu-latest @@ -306,14 +322,20 @@ jobs: # For this job to work, the following secrets must be set in the 'upload_symbols' environment: # SENTRY_AUTH_TOKEN steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + path: 'src' - name: Prep Environment run: | mkdir dl-debug-symbols + echo "WZ_REPO_PATH=$(pwd)/src" >> $GITHUB_ENV - name: Download Artifacts uses: actions/download-artifact@v4 with: - name: 'debugsymbols_${{ matrix.output-suffix }}_${{ matrix.arch }}' + pattern: 'debugsymbols_*' path: ./dl-debug-symbols + merge-multiple: false - name: Display structure of downloaded files run: ls -R working-directory: ./dl-debug-symbols @@ -328,31 +350,12 @@ jobs: echo "No SENTRY_AUTH_TOKEN - skipping" exit 0 fi - docker pull getsentry/sentry-cli - docker run --rm -e SENTRY_AUTH_TOKEN -v "$(pwd):/work" getsentry/sentry-cli upload-dif --no-zips -o warzone2100 -p warzone2100 "${WZ_ARCHIVE_DIR}" - - # # NOTE: This uses qemu, and is much slower than a native ARM64 build - # ubuntu-20-04-gcc-arm64: - # name: Ubuntu 20.04 (CMake) [GCC] [ARM64] - # runs-on: ubuntu-latest - # if: "!contains(github.event.head_commit.message, '[ci skip]')" - # steps: - # - uses: actions/checkout@v4 - # with: - # fetch-depth: 0 - # - name: Prepare Git Repo for autorevision - # run: cmake -P .ci/githubactions/prepare_git_repo.cmake - # - name: Init Git Submodules - # run: git submodule update --init --recursive - # - name: Prep for multi-arch - # run: | - # sudo apt-get -u update && DEBIAN_FRONTEND=noninteractive sudo apt-get -y install qemu qemu-user-static - # docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # - name: Build the Docker image - # run: | - # docker build --build-arg UID=$UID -f docker/ubuntu-20.04/Dockerfile.arm64 -t ubuntu . - # - name: CMake Configure - # run: docker run --rm -e "CI=true" -e GITHUB_WORKFLOW -e GITHUB_ACTIONS -e GITHUB_REPOSITORY -e "GITHUB_WORKSPACE=/code" -e GITHUB_SHA -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e MAKEFLAGS -v $(pwd):/code ubuntu cmake '-H.' -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWZ_ENABLE_WARNINGS:BOOL=ON -G"Ninja" - # - name: CMake Build - # run: docker run --rm -e "CI=true" -e GITHUB_WORKFLOW -e GITHUB_ACTIONS -e GITHUB_REPOSITORY -e "GITHUB_WORKSPACE=/code" -e GITHUB_SHA -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e MAKEFLAGS -v $(pwd):/code ubuntu cmake --build build - + # Download sentry-cli + echo "::group::Downloading sentry-cli ..." + cmake -P "${WZ_REPO_PATH}/.ci/githubactions/FetchSentryCLI.cmake" + echo "Downloading sentry-cli ... Done" + echo "::endgroup::" + # Upload symbols + echo "::group::sentry-cli debug-files upload" + ./sentry-cli/sentry-cli debug-files upload --no-zips -o warzone2100 -p warzone2100 "${WZ_ARCHIVE_DIR}" + echo "::endgroup::" diff --git a/.github/workflows/CI_windows.yml b/.github/workflows/CI_windows.yml index 541947ffe9b..48d2d6d6a99 100644 --- a/.github/workflows/CI_windows.yml +++ b/.github/workflows/CI_windows.yml @@ -13,13 +13,15 @@ on: - 'data/base/stats/**' - 'data/mp/stats/**' - 'data/mp/multiplay/script/functions/camTechEnabler.js' + # Linux-specific example scripts + - 'doc/hosting/linux_scripts/**' # Support running after "Draft Tag Release" workflow completes, as part of automated release process workflow_run: workflows: ["Draft Tag Release"] push: tags: - '*' - types: + types: - completed jobs: @@ -50,11 +52,12 @@ jobs: architecture: "x64" deploy_release: true support_sentry : true + sentry_backend: crashpad - compiler: "LLVM_MINGW" architecture: "arm64" deploy_release: true support_sentry : true - sentry_backend: breakpad + sentry_backend: crashpad fail-fast: false env: WZ_COMPILER_VER: ${{ matrix.compiler }} @@ -66,6 +69,9 @@ jobs: name: '${{ matrix.architecture }} [${{ matrix.compiler }}]' permissions: contents: write # Needed to upload to releases + # needed to generate artifact attestations, see: https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds + id-token: write + attestations: write runs-on: windows-2022 if: "!contains(github.event.head_commit.message, '[ci skip]')" steps: @@ -91,7 +97,7 @@ jobs: # Workaround for https://github.com/actions/runner-images/issues/8598: - name: Remove Strawberry Perl from PATH run: | - $env:PATH = $env:PATH -replace "C:\\Strawberry\\c\\bin;", "" + $env:PATH = $env:PATH -replace "C:\\Strawberry\\c\\bin;", "" "PATH=$env:PATH" | Out-File -FilePath $env:GITHUB_ENV -Append # - name: Output Runner Environment Information # run: | @@ -103,7 +109,7 @@ jobs: id: asciidoctor-dl run: | echo "Installing Asciidoctor" - gem install asciidoctor -v 2.0.16 --no-document | Out-Null + gem install asciidoctor -v 2.0.23 --no-document | Out-Null echo "Installing Asciidoctor... finished" $AsciidoctorBat = (Get-Command asciidoctor.bat).Path echo "Asciidoctor.bat: ${AsciidoctorBat}" @@ -142,10 +148,8 @@ jobs: elseif ($env:WZ_TARGET_ARCH -eq "arm64") { $VCPKG_DEFAULT_TRIPLET = "arm64-mingw-dynamic" $WZ_MINGW_PKG_PREFIX = "aarch64-w64-mingw32" - # llvm-ml does not support arm64 - # Will need to use a similar workaround as Chromium's build process - # and use the armasm64.exe tool from MSVC } + $VCPKG_DEFAULT_HOST_TRIPLET = "x64-mingw-static" } else { $WZ_USING_MINGW = "false" @@ -159,31 +163,31 @@ jobs: elseif ($env:WZ_TARGET_ARCH -eq "arm64") { $VCPKG_DEFAULT_TRIPLET = "arm64-windows" } + $VCPKG_DEFAULT_HOST_TRIPLET = "x64-windows" } - $VCPKG_DEFAULT_HOST_TRIPLET = "x64-windows" - + $WZ_FULL_POWERSHELL_PATH = (Get-Command powershell.exe).Path $WZ_FULL_GIT_PATH = Split-Path -Path ((Get-Command git.exe).Path) echo "WZ_FULL_GIT_PATH=${WZ_FULL_GIT_PATH}" $WZ_FULL_CMAKE_PATH = Split-Path -Path ((Get-Command cmake.exe).Path) echo "WZ_FULL_CMAKE_PATH=${WZ_FULL_CMAKE_PATH}" - + # ------------------------------ # Install Gettext tools - + $origPath = $env:PATH $env:PATH = "C:\msys64\mingw64\bin;C:\msys64\usr\bin;$origPath" - + pacman --noconfirm -S --needed gettext if ($LastExitCode -ne 0) { throw "Failed to install gettext with exit code: $LastExitCode" } - + $WZ_FULL_MSGMERGE_PATH = Split-Path -Path ((Get-Command msgmerge.exe).Path) echo "WZ_FULL_MSGMERGE_PATH=${WZ_FULL_MSGMERGE_PATH}" $WZ_FULL_MSGFMT_PATH = Split-Path -Path ((Get-Command msgfmt.exe).Path) echo "WZ_FULL_MSGFMT_PATH=${WZ_FULL_MSGFMT_PATH}" - + $env:PATH = $origPath # ------------------------------ @@ -231,7 +235,7 @@ jobs: echo "::warning ::Default to 'latest' MSVC: `"${WZ_VISUAL_STUDIO_INSTALL_PATH}`"" } } - + $WZ_VISUAL_STUDIO_INSTALL_VERSION = & "vswhere.exe" -path "${WZ_VISUAL_STUDIO_INSTALL_PATH}" -property installationVersion echo "WZ_VISUAL_STUDIO_INSTALL_VERSION = ${WZ_VISUAL_STUDIO_INSTALL_VERSION}" @@ -240,7 +244,7 @@ jobs: # ------------- # Sentry crash-handler support - + $WZ_ENABLE_SENTRY = "false" if ("${env:BUILD_SENTRY_SUPPORT}" -eq "true") { # Fully enable for master branch pushes (development builds) and workflow runs (draft tag release builds) @@ -270,7 +274,7 @@ jobs: # ---------------- # Export Variables - + $WZ_REPO_PATH = "${{ github.workspace }}\src" # Export everything important to environment variables (for future steps) @@ -309,8 +313,8 @@ jobs: Write-Host "Current value of env:VULKAN_SDK:${env:VULKAN_SDK}" - $VULKAN_DL_URL = "https://sdk.lunarg.com/sdk/download/1.3.268.0/windows/VulkanSDK-1.3.268.0-Installer.exe?Human=true" - $VULKAN_DL_SHA256 = "8459ef49bd06b697115ddd3d97c9aec729e849cd775f5be70897718a9b3b9db5" + $VULKAN_DL_URL = "https://sdk.lunarg.com/sdk/download/1.3.296.0/windows/VulkanSDK-1.3.296.0-Installer.exe?Human=true" + $VULKAN_DL_SHA256 = "acb4ae0786fd3e558f8b3c36cc3eba91638984217ba8a6795ec64d2f9ffd8c4b" $VK_DL_BASEDIR = "${{ github.workspace }}\dl" $VK_DL_PATH = "${VK_DL_BASEDIR}\vulkan.exe" @@ -367,8 +371,8 @@ jobs: Write-Host "Current value of env:VULKAN_SDK:${env:VULKAN_SDK}" - $NINJA_DL_URL = "https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip" - $NINJA_DL_SHA512 = "a700e794c32eb67b9f87040db7f1ba3a8e891636696fc54d416b01661c2421ff46fa517c97fd904adacdf8e621df3e68ea380105b909ae8b6651a78ae7eb3199" + $NINJA_DL_URL = "https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-win.zip" + $NINJA_DL_SHA512 = "d6715c6458d798bcb809f410c0364dabd937b5b7a3ddb4cd5aba42f9fca45139b2a8a3e7fd9fbd88fd75d298ed99123220b33c7bdc8966a9d5f2a1c9c230955f" $NINJA_DL_BASEDIR = "${{ github.workspace }}\dl" $NINJA_DL_PATH = "${NINJA_DL_BASEDIR}\ninja-win.zip" @@ -399,10 +403,10 @@ jobs: $VerbosePreference = "Continue" . "${env:WZ_REPO_PATH}\.ci\powershell\request.ps1" - $LLVM_MINGW_RELEASE = "20231031"; + $LLVM_MINGW_RELEASE = "20240619"; $LLVM_MINGW_PKG = "llvm-mingw-${LLVM_MINGW_RELEASE}-ucrt-x86_64" $LLVM_MINGW_DL_URL = "https://github.com/mstorsjo/llvm-mingw/releases/download/${LLVM_MINGW_RELEASE}/${LLVM_MINGW_PKG}.zip" - $LLVM_MINGW_DL_SHA512 = "3173b7a9b7836adce0fa5a59b13a01fa7707d1fc5be27606e779cca853b4452571ab37a1d5d6b3fd2ca067f58aa6011b121ba4f29b9b0eaaa1de2679d6b55af9" + $LLVM_MINGW_DL_SHA512 = "d98928107d61e19d27990eb75863f7c34f3d9c23200b5ead7e1ccfd4c6f028a0093d79c06905494329a704b00fab0f10eb7db5d370a342b08154a11988084371" $LLVM_MINGW_DL_BASEDIR = "${{ github.workspace }}\dl" $LLVM_MINGW_DL_PATH = "${LLVM_MINGW_DL_BASEDIR}\llvm-mingw.zip" @@ -462,7 +466,7 @@ jobs: - name: Cache vcpkg dependencies id: vcpkg-cache if: success() && !(github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release') - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ${{ steps.settings.outputs.VCPKG_BINARYCACHE_DIR }} key: ${{ runner.os }}-${{ matrix.compiler }}-${{ matrix.architecture }}-${{ steps.settings.outputs.WZ_VISUAL_STUDIO_INSTALL_VERSION }}-${{ hashFiles('**/get-dependencies_win.ps1') }}-${{ hashFiles('**/vcpkg.json') }}-${{ hashFiles('**/.ci/vcpkg/**') }} @@ -479,12 +483,16 @@ jobs: Write-Host "env:VCPKG_VISUAL_STUDIO_PATH=`"${env:VCPKG_VISUAL_STUDIO_PATH}`"" Write-Host "env:VCPKG_BINARY_SOURCES=`"${env:VCPKG_BINARY_SOURCES}`"" Write-Host "env:PATH=`"${env:PATH}`"" - + if ("${env:WZ_USING_MINGW}" -eq "true") { $env:PATH = "${env:WZ_MINGW_ENV_PATH}"; Write-Host "env:PATH=`"${env:PATH}`"" } - + else { + # Workaround: https://github.com/actions/runner-images/issues/10004 + $env:CXXFLAGS = "${env:CXXFLAGS} /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR" + } + & "${env:WZ_FULL_POWERSHELL_PATH}" "${env:WZ_REPO_PATH}\get-dependencies_win.ps1" -VCPKG_BUILD_TYPE "release" - name: Clean vcpkg temp files working-directory: '${{ github.workspace }}\build' @@ -516,9 +524,13 @@ jobs: } } $env:PATH = "${env:PATH};${env:WZ_FULL_MSGMERGE_PATH}"; + + # Workaround: https://github.com/actions/runner-images/issues/10004 + $env:CXXFLAGS = "${env:CXXFLAGS} /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR" + # Use CMake to configure with the appropriate Visual Studio (MSBUILD) generator, toolchain, and target platform echo "::add-matcher::${{ github.workspace }}\src\.ci\githubactions\pattern_matchers\cmake.json" - cmake -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\build\vcpkg\scripts\buildsystems\vcpkg.cmake" -DCPACK_PACKAGE_FILE_NAME:STRING="warzone2100_portable" -DWZ_DISTRIBUTOR:STRING="${env:WZ_DISTRIBUTOR}" -DCMAKE_GENERATOR_INSTANCE="${env:WZ_VISUAL_STUDIO_INSTALL_PATH}" -DDISCORD_RPC_APPID:STRING="${env:DISCORD_RPC_APPID}" -DWZ_BUILD_SENTRY:BOOL="${WZ_BUILD_SENTRY_VALUE}" ${ADDITIONAL_CMAKE_PARAMS} -G "${env:WZ_VC_GENERATOR}" -A "${env:WZ_VC_TARGET_PLATFORMNAME}" "${env:WZ_REPO_PATH}" + cmake -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\build\vcpkg\scripts\buildsystems\vcpkg.cmake" -DCPACK_PACKAGE_FILE_NAME:STRING="warzone2100_portable" -DWZ_DISTRIBUTOR:STRING="${env:WZ_DISTRIBUTOR}" -DCMAKE_GENERATOR_INSTANCE="${env:WZ_VISUAL_STUDIO_INSTALL_PATH}" -DENABLE_DISCORD:BOOL=ON -DDISCORD_RPC_APPID:STRING="${env:DISCORD_RPC_APPID}" -DWZ_BUILD_SENTRY:BOOL="${WZ_BUILD_SENTRY_VALUE}" ${ADDITIONAL_CMAKE_PARAMS} -G "${env:WZ_VC_GENERATOR}" -A "${env:WZ_VC_TARGET_PLATFORMNAME}" "${env:WZ_REPO_PATH}" echo "::remove-matcher owner=cmake::" - name: CMake Configure (MINGW) if: success() && (steps.settings.outputs.WZ_USING_MINGW == 'true') @@ -531,6 +543,7 @@ jobs: DISCORD_RPC_APPID: '${{ secrets.DISCORD_RPC_APPID }}' WZ_FULL_CMAKE_PATH: '${{ steps.settings.outputs.WZ_FULL_CMAKE_PATH }}' WZ_MINGW_PKG_PREFIX: '${{ steps.settings.outputs.WZ_MINGW_PKG_PREFIX }}' + WZ_MINGW_CHAINLOAD_TOOLCHAIN_FILE: '${{ steps.settings.outputs.WZ_REPO_PATH }}\.ci\cmake\toolchains\${{ steps.settings.outputs.WZ_MINGW_PKG_PREFIX }}.cmake' WZ_ASM_MASM_COMPILER: '${{ steps.settings.outputs.WZ_ASM_MASM_COMPILER }}' run: | $SENTRY_DSN_PARAM = "" @@ -547,14 +560,16 @@ jobs: } echo "::add-matcher::${{ github.workspace }}\src\.ci\githubactions\pattern_matchers\cmake.json" $env:PATH = "${env:WZ_MINGW_ENV_PATH}"; - & "${env:WZ_FULL_CMAKE_PATH}\cmake.exe" -DCMAKE_C_COMPILER="${env:WZ_MINGW_PKG_PREFIX}-gcc" -DCMAKE_CXX_COMPILER="${env:WZ_MINGW_PKG_PREFIX}-g++" -DCMAKE_RC_COMPILER="${env:WZ_MINGW_PKG_PREFIX}-windres" -DCMAKE_ASM_MASM_COMPILER="${env:WZ_ASM_MASM_COMPILER}" -DWZ_MINGW_DIST_PATH="${env:WZ_MINGW_DIST_PATH}" -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\build\vcpkg\scripts\buildsystems\vcpkg.cmake" -DCMAKE_BUILD_TYPE=Release -DWZ_DISTRIBUTOR:STRING="${env:WZ_DISTRIBUTOR}" -DDISCORD_RPC_APPID:STRING="${env:DISCORD_RPC_APPID}" -DWZ_BUILD_SENTRY:BOOL=${WZ_BUILD_SENTRY_VALUE} ${SENTRY_DSN_PARAM} ${SENTRY_BACKEND_PARAM} -G "Ninja" "${{ steps.settings.outputs.WZ_REPO_PATH }}" + & "${env:WZ_FULL_CMAKE_PATH}\cmake.exe" -DCMAKE_ASM_MASM_COMPILER="${env:WZ_ASM_MASM_COMPILER}" -DWZ_MINGW_DIST_PATH="${env:WZ_MINGW_DIST_PATH}" -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\build\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE="${env:WZ_MINGW_CHAINLOAD_TOOLCHAIN_FILE}" -DCMAKE_BUILD_TYPE=Release -DWZ_DISTRIBUTOR:STRING="${env:WZ_DISTRIBUTOR}" -DENABLE_DISCORD:BOOL=ON -DDISCORD_RPC_APPID:STRING="${env:DISCORD_RPC_APPID}" -DWZ_BUILD_SENTRY:BOOL=${WZ_BUILD_SENTRY_VALUE} ${SENTRY_DSN_PARAM} ${SENTRY_BACKEND_PARAM} -G "Ninja" "${{ steps.settings.outputs.WZ_REPO_PATH }}" echo "::remove-matcher owner=cmake::" - name: Upload vcpkg logs (on failure) uses: actions/upload-artifact@v4 if: failure() with: name: win_${{ matrix.architecture }}_vcpkg_logs - path: '${{ github.workspace }}\build\vcpkg\buildtrees\*\*-out.log' + path: | + ${{ github.workspace }}\build\vcpkg\buildtrees\*\*.log + ${{ github.workspace }}\build\vcpkg\buildtrees\*\*.txt if-no-files-found: 'warn' retention-days: 1 - name: CMake Build (MSVC) @@ -563,6 +578,9 @@ jobs: env: CXXFLAGS: '/MP' run: | + # Workaround: https://github.com/actions/runner-images/issues/10004 + $env:CXXFLAGS = "${env:CXXFLAGS} /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR" + echo "::add-matcher::${{ github.workspace }}\src\.ci\githubactions\pattern_matchers\msvc.json" & cmake --build . --config Release --target warzone2100 -- /m echo "::remove-matcher owner=msvc::" @@ -678,6 +696,30 @@ jobs: path: '${{ github.workspace }}\output\archive' if-no-files-found: 'error' ##################################################### + # Generate artifact attestations + ##################################################### + - name: 'Generate artifact attestation - (Portable Build)' + # Run on push to master branch (development build), or tag release automation build + if: success() && ((github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release')) + uses: actions/attest-build-provenance@v1 + continue-on-error: true + with: + subject-path: '${{ github.workspace }}\output\portable\*' + - name: 'Generate artifact attestation - (Regular Installer)' + # Run on push to master branch (development build), or tag release automation build + if: success() && ((github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release')) + uses: actions/attest-build-provenance@v1 + continue-on-error: true + with: + subject-path: '${{ github.workspace }}\output\installer\*' + - name: 'Generate artifact attestation - (Archive)' + # Run on push to master branch (development build), or tag release automation build + if: success() && ((github.event_name == 'push' && github.ref == 'refs/heads/master') || (github.event_name == 'workflow_run' && github.event.workflow_run.name == 'Draft Tag Release')) + uses: actions/attest-build-provenance@v1 + continue-on-error: true + with: + subject-path: '${{ github.workspace }}\output\archive\*' + ##################################################### # Upload Release assets (if a release tag) ##################################################### - name: Upload Release Assets @@ -753,6 +795,10 @@ jobs: # For this job to work, the following secrets must be set in the 'upload_symbols' environment: # SENTRY_AUTH_TOKEN steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + path: 'src' - name: Prep Environment id: settings run: | @@ -761,6 +807,7 @@ jobs: OUTPUTDIR="wz-${WZ_TARGET_ARCH}" echo "OUTPUTDIR=${OUTPUTDIR}" >> $GITHUB_ENV echo "ARCHIVEDIR=${OUTPUTDIR}" >> $GITHUB_OUTPUT + echo "WZ_REPO_PATH=$(pwd)/src" >> $GITHUB_ENV - name: Download Archive Artifact uses: actions/download-artifact@v4 with: @@ -805,11 +852,16 @@ jobs: echo "No SENTRY_AUTH_TOKEN - skipping" exit 0 fi - docker pull getsentry/sentry-cli - echo "Uploading debug symbols" - docker run --rm -e SENTRY_AUTH_TOKEN -v "$(pwd):/work" getsentry/sentry-cli upload-dif --no-zips -o warzone2100 -p warzone2100 "${WZ_ARCHIVE_DIR}" - echo "Uploading source bundles" - docker run --rm -e SENTRY_AUTH_TOKEN -v "$(pwd):/work" getsentry/sentry-cli upload-dif --type sourcebundle -o warzone2100 -p warzone2100 "${WZ_SOURCEBUNDLES_DIR}" + # Download sentry-cli + echo "::group::Downloading sentry-cli ..." + cmake -P "${WZ_REPO_PATH}/.ci/githubactions/FetchSentryCLI.cmake" + echo "Downloading sentry-cli ... Done" + echo "::endgroup::" + # Upload symbols + echo "::group::sentry-cli debug-files upload" + ./sentry-cli/sentry-cli debug-files upload --no-zips -o warzone2100 -p warzone2100 "${WZ_ARCHIVE_DIR}" + ./sentry-cli/sentry-cli debug-files upload --type sourcebundle -o warzone2100 -p warzone2100 "${WZ_SOURCEBUNDLES_DIR}" + echo "::endgroup::" trigger-updates-json: name: 'Trigger Info Update' permissions: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 2c816e65a87..afa98a9ad87 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -11,12 +11,12 @@ on: jobs: analyze: runs-on: ubuntu-latest - + permissions: actions: read contents: read security-events: write - + strategy: fail-fast: false matrix: @@ -26,23 +26,22 @@ jobs: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed name: Analyze (${{ matrix.language }}) - env: WZ_CI_DISABLE_BASIS_COMPRESS_TEXTURES: ON - + steps: - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive - + - name: 'Install WZ Build Pre-reqs' if: matrix.language == 'cpp' run: | sudo apt-get -u update DEBIAN_FRONTEND=noninteractive sudo apt-get -y install gcc g++ libc-dev dpkg-dev ninja-build pkg-config sudo ./get-dependencies_linux.sh ubuntu build-dependencies - + # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v3 diff --git a/.github/workflows/crowdin_download_translations.yml b/.github/workflows/crowdin_download_translations.yml new file mode 100644 index 00000000000..7cd1bc317d9 --- /dev/null +++ b/.github/workflows/crowdin_download_translations.yml @@ -0,0 +1,172 @@ +name: Crowdin - Download Translations + +on: + # Scheduled run once a day + schedule: + - cron: '0 2 * * *' + # Run after: + # - "Upload Base" workflow completes + workflow_run: + workflows: ["Crowdin - Upload Sources"] + types: + - completed + # Support running manually + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-master + +jobs: + crowdin-download-translations: + if: github.repository == 'Warzone2100/warzone2100' + permissions: + contents: read + runs-on: ubuntu-latest + environment: crowdin_sync + steps: + - name: Install gettext + env: + DEBIAN_FRONTEND: noninteractive + run: sudo apt-get -y install gettext + + # Get a token using a GitHub App that has appropriate permissions *and* will trigger subsequent CI workflows + # (Since we want to run normal CI passes to catch translation string format errors that break builds) + - name: Get GH App Token + uses: actions/create-github-app-token@v1 + id: app-token + with: + app-id: ${{ vars.WZ_CROWDIN_SYNC_GH_APP_ID }} + private-key: ${{ secrets.WZ_CROWDIN_SYNC_GH_APP_PRIVATE_KEY }} + owner: ${{ github.repository_owner }} + repositories: "warzone2100" + + - name: Checkout + uses: actions/checkout@v4 + with: + ref: 'master' + token: ${{ steps.app-token.outputs.token }} + persist-credentials: true + + - name: Prep local branches + id: configbranches + run: | + git fetch --prune + if [ -n "$(git show-ref origin/l10n_master)" ]; then + # has l10n_master branch + git checkout "l10n_master" + echo "CHECK_EXISTING=true" >> $GITHUB_OUTPUT + else + # no pre-existing l10n_master branch + echo "CHECK_EXISTING=false" >> $GITHUB_OUTPUT + exit 0 + fi + # Switch back to master branch + git checkout -qf master + + - name: Download Translations from Crowdin + uses: crowdin/github-action@v2 + with: + config: 'crowdin.yml' + upload_sources: false + upload_translations: false + download_translations: true + localization_branch_name: 'l10n_master' + crowdin_branch_name: 'master' + push_translations: false + #commit_message: 'New Crowdin translations' + create_pull_request: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CROWDIN_PROJECT_ID: ${{ vars.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} + + - name: Fixup ownership + if: success() && (github.repository == 'Warzone2100/warzone2100') + run: | + sudo chown -R $(whoami) ./po + cd po + ls -al + + - name: Cleanup .po files + if: success() && (github.repository == 'Warzone2100/warzone2100') + run: | + # 1.) Cleanup downloaded po (fixing up potential formatting differences and removing comments) + # For warzone2100.pot: + find po -name '*.po' -type f -maxdepth 1 \ + -exec \ + .ci/githubactions/cleanup-downloaded-po.sh 'po/warzone2100.pot' '{}' ';' + # For warzone2100_guide.pot: + find po/guide -name '*.po' -type f -maxdepth 1 \ + -exec \ + .ci/githubactions/cleanup-downloaded-po.sh 'po/guide/warzone2100_guide.pot' '{}' ';' + + # 2.) Cleanup untranslated .po files + # For warzone2100.pot: + find po -name '*.po' -type f -maxdepth 1 \ + -exec \ + .ci/githubactions/check_po_base_unchanged.sh 'po/warzone2100.pot' '{}' ';' | xargs -r0 -I {} rm -v "{}" + # For warzone2100_guide.pot: + find po/guide -name '*.po' -type f -maxdepth 1 \ + -exec \ + .ci/githubactions/check_po_base_unchanged.sh 'po/guide/warzone2100_guide.pot' '{}' ';' | xargs -r0 -I {} rm -v "{}" + + - name: Publish any changes to translations to l10n_master branch + if: success() && (github.repository == 'Warzone2100/warzone2100') + id: pushupdates + env: + CHECK_EXISTING_TRANSLATION_BRANCH: ${{ steps.configbranches.outputs.CHECK_EXISTING }} + run: | + git config user.name "github-actions[bot]" + git config user.email "<41898282+github-actions[bot]@users.noreply.github.com>" + + # Add modified files (ignoring po header modifications): + echo "::group::Add modified files" + git difftool --dir-diff --extcmd=.ci/githubactions/crowdin_download_diff.sh | xargs -d '\n' git add + echo "::endgroup::" + # Add untracked (new) files: + echo "::group::Add untracked files" + git ls-files -z --others --exclude-standard | xargs -0 git add + echo "::endgroup::" + echo "Debug output:" + git status + + echo "Commit changes:" + git commit -m "New Crowdin translations" || { echo "PROCESS_PR=false" >> $GITHUB_OUTPUT && exit 0; } + NEW_COMMIT_ID="$(git rev-parse HEAD)" + echo "New commit: ${NEW_COMMIT_ID}" + + # Check if there are actual changes compared to the commit already pushed on the l10n_master branch + if [[ "${CHECK_EXISTING_TRANSLATION_BRANCH}" == "true" ]]; then + TRANSLATION_COMMIT_ID="$(git rev-parse l10n_master)" + echo "Current translation branch commit: ${TRANSLATION_COMMIT_ID}" + git diff --unified=0 ${NEW_COMMIT_ID}~..${NEW_COMMIT_ID} > l10n_temp_1.patch + git diff --unified=0 ${TRANSLATION_COMMIT_ID}~..${TRANSLATION_COMMIT_ID} > l10n_temp_2.patch + diff --brief --unified=1 \ + --ignore-matching-lines='^[-+]"POT-Creation-Date: .*"' \ + --ignore-matching-lines='^[-+]"PO-Revision-Date: .*"' \ + --ignore-matching-lines='^[-+]"Last-Translator: .*"' \ + --ignore-matching-lines='^index .*\.\..* .*' \ + l10n_temp_1.patch l10n_temp_2.patch \ + && DIFF_RET=$? || DIFF_RET=$? + if [ $DIFF_RET -eq 0 ]; then + # Inputs are the same (ignoring header changes that aren't relevant) + echo "No pertinent changes - skipping force-push" + echo "PROCESS_PR=false" >> $GITHUB_OUTPUT + exit 0 + fi + rm l10n_temp_1.patch + rm l10n_temp_2.patch + fi + + echo "Pushing changes to l10n_master branch" + git push -f origin master:l10n_master + echo "PROCESS_PR=true" >> $GITHUB_OUTPUT + + - name: Create Pull Request to update translations (if needed) + if: success() && (github.repository == 'Warzone2100/warzone2100') && (steps.pushupdates.outputs.PROCESS_PR == 'true') + id: cpr + env: + GH_TOKEN: ${{ steps.app-token.outputs.token }} + GH_REPO: ${{ github.repository }} + run: | + gh pr create --base "master" --head "l10n_master" --title "New Crowdin translations" --body "New Crowdin translations sync (Auto-generated)" --label "automated pr" || echo "Seems like PR already exists?" diff --git a/.github/workflows/crowdin_upload_base.yml b/.github/workflows/crowdin_upload_base.yml new file mode 100644 index 00000000000..5c378a7459a --- /dev/null +++ b/.github/workflows/crowdin_upload_base.yml @@ -0,0 +1,41 @@ +name: Crowdin - Upload Sources + +on: + push: + branches: + # Only upload base files from the master branch! + - 'master' + paths: + # Should match the source paths in crowdin.yml + - 'po/warzone2100.pot' + - 'po/guide/warzone2100_guide.pot' + - 'pkg/nsis/i18n/win_installer_base.nsh' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-master + +jobs: + crowdin-upload-sources: + permissions: + contents: read + runs-on: ubuntu-latest + environment: crowdin_sync + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: 'master' + + - name: Crowdin Action + uses: crowdin/github-action@v2 + with: + config: 'crowdin.yml' + upload_sources: true + upload_translations: false + download_translations: false + crowdin_branch_name: 'master' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CROWDIN_PROJECT_ID: ${{ vars.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} diff --git a/.github/workflows/draft_tag_release.yml b/.github/workflows/draft_tag_release.yml index 3e4569ee334..bc27cf0cb93 100644 --- a/.github/workflows/draft_tag_release.yml +++ b/.github/workflows/draft_tag_release.yml @@ -35,13 +35,13 @@ jobs: SOURCE_TAG_QUALIFIER="${BASH_REMATCH[2]:1}" echo "SOURCE_TAG_VERSION=\"${SOURCE_TAG_VERSION}\"" echo "SOURCE_TAG_QUALIFIER=\"${SOURCE_TAG_QUALIFIER}\"" - + if [ ! -z "${SOURCE_TAG_QUALIFIER}" ]; then SOURCE_TAG_IS_PRERELEASE="true" else SOURCE_TAG_IS_PRERELEASE="false" fi - + echo "SOURCE_TAG=${SOURCE_TAG}" >> $GITHUB_OUTPUT echo "SOURCE_TAG_IS_PRERELEASE=${SOURCE_TAG_IS_PRERELEASE}" >> $GITHUB_OUTPUT - name: Create Draft Release diff --git a/.github/workflows/generate_snap_stable_config.yml b/.github/workflows/generate_snap_stable_config.yml index ff145aea2c5..d138eeeb9d4 100644 --- a/.github/workflows/generate_snap_stable_config.yml +++ b/.github/workflows/generate_snap_stable_config.yml @@ -11,7 +11,7 @@ on: paths: # Path filters are not evaluated for pushes to tags. - '.github/workflows/generate_snap_stable_config.yml' - '.ci/snap/**' - - '.snapcraft.yaml' + - 'snapcraft.yaml' - 'pkg/snap/**' # Sequence of patterns matched against refs/tags tags: @@ -20,7 +20,7 @@ on: paths: - '.github/workflows/generate_snap_stable_config.yml' - '.ci/snap/**' - - '.snapcraft.yaml' + - 'snapcraft.yaml' - 'pkg/snap/**' release: types: @@ -28,7 +28,7 @@ on: workflow_dispatch: inputs: git-ref: - description: Git Ref of Snapcraft Config (Optional) + description: Git Ref of Snapcraft Config (Optional) required: false concurrency: 'snap_stable_config_${{ github.event_name }}' @@ -98,22 +98,29 @@ jobs: path: snap-stable-build - name: Generate Snap Stable Config run: | - BASE_SNAPCRAFT_YAML=".snapcraft.yaml" + BASE_SNAPCRAFT_YAML="snapcraft.yaml" SNAPCRAFT_STABLE_OVERRIDES_YAML=".ci/snap/snapcraft-stable-overrides.yaml" # Verify that required files / folders exist in main repo cd "${GITHUB_WORKSPACE}/warzone2100" if [[ ! -f "${BASE_SNAPCRAFT_YAML}" ]]; then - echo "Missing expected .snapcraft.yaml in warzone2100 repo" + echo "Missing expected snapcraft.yaml in warzone2100 repo" exit 1 fi if [ ! -d "pkg/snap" ]; then echo "Missing expected pkg/snap folder in warzone2100 repo" exit 1 fi - + + # Remove the old .snapcraft.yaml (note: has a "." prefix) + OLD_DOT_PREFIX_SNAPCRAFT_YAML_PATH="${GITHUB_WORKSPACE}/snap-stable-build/.snapcraft.yaml" + if [ -f "${OLD_DOT_PREFIX_SNAPCRAFT_YAML_PATH}" ]; then + echo "Removing old .snapcraft.yaml file" + rm "${OLD_DOT_PREFIX_SNAPCRAFT_YAML_PATH}" + fi + # Generate stable repo snapcraft.yml (that uses tags directly) from main repo snapcraft.yml via yq merge - yq eval-all 'select(fileIndex == 0) * select(fileIndex == 1)' "${BASE_SNAPCRAFT_YAML}" "${SNAPCRAFT_STABLE_OVERRIDES_YAML}" > "${GITHUB_WORKSPACE}/snap-stable-build/.snapcraft.yaml" - + yq eval-all 'select(fileIndex == 0) * select(fileIndex == 1)' "${BASE_SNAPCRAFT_YAML}" "${SNAPCRAFT_STABLE_OVERRIDES_YAML}" > "${GITHUB_WORKSPACE}/snap-stable-build/snapcraft.yaml" + # Write .stable_tag file that contains the desired published tag LATEST_GITHUB_RELEASE_TAG=$(cat "${{ steps.preparefolders.outputs.RELEASES_DATA }}/latest.json" | jq --raw-output '.tag_name') echo "LATEST_GITHUB_RELEASE_TAG=${LATEST_GITHUB_RELEASE_TAG}" @@ -123,14 +130,14 @@ jobs: fi echo "${LATEST_GITHUB_RELEASE_TAG}" > "${GITHUB_WORKSPACE}/snap-stable-build/.stable_tag" echo "LATEST_GITHUB_RELEASE_TAG=${LATEST_GITHUB_RELEASE_TAG}" >> $GITHUB_ENV - + # Copy pkg/snap directory to pkg/snap in dest repo (overwriting old version) rm -rf "${GITHUB_WORKSPACE}/snap-stable-build/pkg/snap" mkdir -p "${GITHUB_WORKSPACE}/snap-stable-build/pkg/snap" cp -r pkg/snap/. "${GITHUB_WORKSPACE}/snap-stable-build/pkg/snap" - name: Debug output generated config run: | - cat "${GITHUB_WORKSPACE}/snap-stable-build/.snapcraft.yaml" + cat "${GITHUB_WORKSPACE}/snap-stable-build/snapcraft.yaml" - name: Commit changes to snap-stable-build id: commit-snap-changes working-directory: "${{ github.workspace }}/snap-stable-build" @@ -192,7 +199,7 @@ jobs: permissions: contents: read runs-on: ubuntu-latest - if: (github.event_name == 'release') || (github.event_name == 'workflow_dispatch') + if: (github.event_name == 'release' && github.event.action == 'published' && !github.event.release.prerelease) || (github.event_name == 'workflow_dispatch') steps: - name: Checkout snap-stable-build@master uses: actions/checkout@v4 @@ -214,7 +221,7 @@ jobs: git am -k "${{ github.workspace }}/diff/snapstablebuild.diff" - name: Debug output generated config run: | - cat "${GITHUB_WORKSPACE}/snap-stable-build/.snapcraft.yaml" + cat "${GITHUB_WORKSPACE}/snap-stable-build/snapcraft.yaml" - name: Push config to snap-stable-build if: success() && (github.repository == 'Warzone2100/warzone2100') id: push-snap-changes diff --git a/.github/workflows/maintenance.yml b/.github/workflows/maintenance.yml index 0d44b43dab4..85766a98431 100644 --- a/.github/workflows/maintenance.yml +++ b/.github/workflows/maintenance.yml @@ -27,7 +27,7 @@ jobs: DEBIAN_FRONTEND: noninteractive run: sudo apt-get -y install gettext - name: Generate POTFILES.in - working-directory: '${{ github.workspace }}/master/po' + working-directory: '${{ github.workspace }}/master/po/scripts' run: | echo "Generate POTFILES.in" ./update-po.sh @@ -39,7 +39,16 @@ jobs: potFile_inRepo="${GITHUB_WORKSPACE}/master/po/warzone2100.pot" temp_dir="${GITHUB_WORKSPACE}/temp/po" mkdir -p "${temp_dir}" - cmake "-DPOTFILES_IN=${potfiles_in_path}" "-DOUTPUT_FILE=${potFile_inRepo}" "-DTEMP_DIR=${temp_dir}" -P "${GITHUB_WORKSPACE}/master/po/WZ_build_po_template.cmake" + cmake "-DPOTFILES_IN=${potfiles_in_path}" "-DOUTPUT_FILE=${potFile_inRepo}" "-DPACKAGE_NAME=warzone2100" "-DTEMP_DIR=${temp_dir}" -P "${GITHUB_WORKSPACE}/master/po/WZ_build_po_template.cmake" + - name: Generate warzone2100_guide.pot + working-directory: '${{ github.workspace }}/master' + run: | + echo "Generate warzone2100_guide.pot" + potfiles_in_path="${GITHUB_WORKSPACE}/master/po/guide/POTFILES.in" + potFile_inRepo="${GITHUB_WORKSPACE}/master/po/guide/warzone2100_guide.pot" + temp_dir="${GITHUB_WORKSPACE}/temp/po_guide" + mkdir -p "${temp_dir}" + cmake "-DPOTFILES_IN=${potfiles_in_path}" "-DOUTPUT_FILE=${potFile_inRepo}" "-DPACKAGE_NAME=warzone2100_guide" "-DTEMP_DIR=${temp_dir}" -P "${GITHUB_WORKSPACE}/master/po/WZ_build_po_template.cmake" - name: Publish any changes to base translation files if: success() && (github.repository == 'Warzone2100/warzone2100') id: pushupdates diff --git a/.github/workflows/mirror_release_sourceforge.yml b/.github/workflows/mirror_release_sourceforge.yml index 1d7e19c5c92..dbd58f855aa 100644 --- a/.github/workflows/mirror_release_sourceforge.yml +++ b/.github/workflows/mirror_release_sourceforge.yml @@ -69,12 +69,13 @@ jobs: if: (github.event.action != 'deleted') id: download env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ github.token }} SF_FILE_PATH: ${{ steps.settings.outputs.SF_FILE_PATH }} + RELEASE_TAG: ${{ github.event.release.tag_name }} working-directory: '${{ github.workspace }}/release_assets/${{ steps.settings.outputs.SF_FILE_PATH }}' run: | # Download all release assets - echo "${RELEASE_CONTEXT}" | jq -r '.assets[] | "\(.name)\n\(.url)"' | xargs -r -n2 sh -c 'curl -H "Accept: application/octet-stream" -H "Authorization: token ${GITHUB_TOKEN}" -Lf -o "$1" "$2"' sh + gh release --repo "${GITHUB_REPOSITORY}" download "${RELEASE_TAG}" # Output list of downloaded files ls -al echo "Done." diff --git a/.github/workflows/publish_web_build.yml b/.github/workflows/publish_web_build.yml index fbd95e2b6f6..17a16f8120c 100644 --- a/.github/workflows/publish_web_build.yml +++ b/.github/workflows/publish_web_build.yml @@ -186,15 +186,15 @@ jobs: do echo "File: $file" curl -X POST "https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE}/purge_cache" \ - -H "Authorization: Bearer ${CLOUDFLARE_CACHEPURGE_TOKEN}" \ - -H "Content-Type: application/json" \ - --data-binary "@$file" + -H "Authorization: Bearer ${CLOUDFLARE_CACHEPURGE_TOKEN}" \ + -H "Content-Type: application/json" \ + --data-binary "@$file" # Separately clear any cache keys that include the Origin curl -X POST "https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE}/purge_cache" \ - -H "Authorization: Bearer ${CLOUDFLARE_CACHEPURGE_TOKEN}" \ - -H "Content-Type: application/json" \ - -H "Origin: https://${WZ_CDN_BASE_HOSTNAME}" \ - --data-binary "@$file" + -H "Authorization: Bearer ${CLOUDFLARE_CACHEPURGE_TOKEN}" \ + -H "Content-Type: application/json" \ + -H "Origin: https://${WZ_CDN_BASE_HOSTNAME}" \ + --data-binary "@$file" done; # file echo "Done with main purge ..." sleep 30 # Wait and then trigger a purge for just the service worker files @@ -202,14 +202,14 @@ jobs: do echo "File: $file" curl -X POST "https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE}/purge_cache" \ - -H "Authorization: Bearer ${CLOUDFLARE_CACHEPURGE_TOKEN}" \ - -H "Content-Type: application/json" \ - --data-binary "@$file" + -H "Authorization: Bearer ${CLOUDFLARE_CACHEPURGE_TOKEN}" \ + -H "Content-Type: application/json" \ + --data-binary "@$file" # Separately clear any cache keys that include the Origin curl -X POST "https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE}/purge_cache" \ - -H "Authorization: Bearer ${CLOUDFLARE_CACHEPURGE_TOKEN}" \ - -H "Content-Type: application/json" \ - -H "Origin: https://${WZ_CDN_BASE_HOSTNAME}" \ - --data-binary "@$file" + -H "Authorization: Bearer ${CLOUDFLARE_CACHEPURGE_TOKEN}" \ + -H "Content-Type: application/json" \ + -H "Origin: https://${WZ_CDN_BASE_HOSTNAME}" \ + --data-binary "@$file" done; # file echo "Done." diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 82fa2eeae78..6045ae932fc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -59,6 +59,8 @@ jobs: # Variable: WZ_WEB_BUILD_RELEASE_MANAGEMENT_API_URL steps: - name: 'Get actual latest release from GH' + env: + GH_TOKEN: ${{ github.token }} run: | # Get the actual latest release from GitHub directly # (which could differ from the release associated with this event, if someone publishes some older versions as GitHub Releases at some point) @@ -80,9 +82,9 @@ jobs: CLOUDFLARE_CACHEPURGE_TOKEN: ${{ secrets.CLOUDFLARE_WZ2100_CACHEPURGE_TOKEN }} run: | curl -X POST "https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE}/purge_cache" \ - -H "Authorization: Bearer ${CLOUDFLARE_CACHEPURGE_TOKEN}" \ - -H "Content-Type: application/json" \ - --data '{"purge_everything":true}' + -H "Authorization: Bearer ${CLOUDFLARE_CACHEPURGE_TOKEN}" \ + -H "Content-Type: application/json" \ + --data '{"purge_everything":true}' sentry-release-commit-info: name: 'Upload Release Commit Info' permissions: @@ -122,7 +124,8 @@ jobs: # Get commit of current release tag CURRENT_TAG_COMMIT="$(git rev-list -n 1 "${GITHUB_REF}")" echo "CURRENT_TAG_COMMIT=${CURRENT_TAG_COMMIT}" - + + echo "WZ_REPO_PATH=$(pwd)" >> $GITHUB_ENV echo "SENTRY_VERSION=${SENTRY_VERSION}" >> $GITHUB_ENV echo "PRIOR_TAG_COMMIT=${PRIOR_TAG_COMMIT}" >> $GITHUB_ENV echo "CURRENT_TAG_COMMIT=${CURRENT_TAG_COMMIT}" >> $GITHUB_ENV @@ -141,14 +144,18 @@ jobs: echo "No SENTRY_VERSION - skipping" exit 0 fi - docker pull getsentry/sentry-cli + # Download sentry-cli + echo "::group::Downloading sentry-cli ..." + cmake -P "${WZ_REPO_PATH}/.ci/githubactions/FetchSentryCLI.cmake" + echo "Downloading sentry-cli ... Done" + echo "::endgroup::" # Check if release already exists echo "Checking if release exists: ${SENTRY_VERSION}" - if ! docker run --rm -e SENTRY_AUTH_TOKEN -e SENTRY_ORG -v "$(pwd):/work" getsentry/sentry-cli releases info "${SENTRY_VERSION}" -q; then + if ! ./sentry-cli/sentry-cli releases info "${SENTRY_VERSION}" -q; then # Create the release echo "Creating the release: ${SENTRY_VERSION}" - docker run --rm -e SENTRY_AUTH_TOKEN -e SENTRY_ORG -v "$(pwd):/work" getsentry/sentry-cli releases new -p warzone2100 "${SENTRY_VERSION}" || echo "Failed to create the release?" + ./sentry-cli/sentry-cli releases new -p warzone2100 "${SENTRY_VERSION}" || echo "Failed to create the release?" fi # Associate commits with the release echo "Associate commits with the release: ${SENTRY_VERSION}" - docker run --rm -e SENTRY_AUTH_TOKEN -e SENTRY_ORG -v "$(pwd):/work" getsentry/sentry-cli releases set-commits "${SENTRY_VERSION}" --commit "Warzone2100/warzone2100@${PRIOR_TAG_COMMIT}..${CURRENT_TAG_COMMIT}" + ./sentry-cli/sentry-cli releases set-commits "${SENTRY_VERSION}" --commit "Warzone2100/warzone2100@${PRIOR_TAG_COMMIT}..${CURRENT_TAG_COMMIT}" diff --git a/.github/wz/templates/draft_release_body_template.md b/.github/wz/templates/draft_release_body_template.md index b2381116e90..980f04119c4 100644 --- a/.github/wz/templates/draft_release_body_template.md +++ b/.github/wz/templates/draft_release_body_template.md @@ -3,13 +3,13 @@ `warzone2100_win_(arch)_installer.exe` -- The main Windows build (full installer) `warzone2100_win_(arch)_portable.exe` -- The portable version of the Windows build (self contained -- install it anywhere!) -`warzone2100_macOS_universal.zip` -- For macOS (10.10+) -`warzone2100_ubuntu18.04_amd64.deb` -- For Ubuntu 18.04 +`warzone2100_macOS_universal.zip` -- For macOS (10.13+) `warzone2100_ubuntu20.04_amd64.deb` -- For Ubuntu 20.04 +`warzone2100_ubuntu22.04_amd64.deb` -- For Ubuntu 22.04 `warzone2100_src.tar.xz` -- The tarball for Linux / BSD / whatever systems. (full source / data) **IMPORTANT: To build from source, use the warzone2100_src.tar.xz tarball.** > The auto-generated GitHub "_Source code (zip) / (tar.gz)_" links do **_not_** include the Git-based autorevision information. To install the .deb files, use `sudo apt install`. Example: -`sudo apt install ./warzone2100_ubuntu20.04_amd64.deb` +`sudo apt install ./warzone2100_ubuntu22.04_amd64.deb` diff --git a/.gitignore b/.gitignore index 6bb34e0176a..bb2837d1333 100644 --- a/.gitignore +++ b/.gitignore @@ -33,42 +33,6 @@ build_tools/autorevision/Release/* win32/debug win32/release -# directories and files created when crosscompiling or Windows -win32/build -win32/downloads -win32/libs/dejavu/dejavu-fonts-ttf-*/ -win32/libs/dejavu/*-stamp -win32/libs/devpkg/*-stamp -win32/libs/expat/expat-*/ -win32/libs/expat/*-stamp -win32/libs/fontconfig/*-stamp -win32/libs/fontconfig/fontconfig-*/ -win32/libs/freetype2/*-stamp -win32/libs/freetype2/freetype-*/ -win32/libs/gettext/*-stamp -win32/libs/gettext/gettext-*/ -win32/libs/iconv/*-stamp -win32/libs/iconv/libiconv-*/ -win32/libs/ogg/*-stamp -win32/libs/ogg/libogg-*/ -win32/libs/png/*-stamp -win32/libs/png/libpng-*/ -win32/libs/popt/*-stamp -win32/libs/popt/popt-*/ -win32/libs/sdl/SDL-*/ -win32/libs/sdl/*-stamp -win32/libs/theora/*-stamp -win32/libs/theora/libtheora-*/ -win32/libs/vorbis/*-stamp -win32/libs/vorbis/libvorbis-*/ -win32/libs/zlib/*-stamp -win32/libs/zlib/zlib-*/ -win32/debug/* -win32/release/* -win32/__BUILD_CONFIG.USER -win32/packages -.vs - # Autogenerated files: *.lex.[ch] *.tab.[ch] @@ -130,26 +94,6 @@ Makefile.in # Include this one Makefile !/pkg/dpkg/videos/Makefile -# Betawidget autotools and libtool files: -/lib/betawidget/.libs/ -/lib/betawidget/aclocal.m4 -/lib/betawidget/autom4te.cache/ -/lib/betawidget/config.* -/lib/betawidget/configure -/lib/betawidget/depcomp -/lib/betawidget/install-sh -/lib/betawidget/libbetawidget.la -/lib/betawidget/libbetawidget_la-* -/lib/betawidget/libtool -/lib/betawidget/ltmain.sh -/lib/betawidget/lua-5.1.3/ -/lib/betawidget/m4/ -/lib/betawidget/missing -/lib/betawidget/src/*_wrap_lua.cpp -/lib/betawidget/src/betawidget.pc -/lib/betawidget/stamp-h1 -/lib/betawidget/tools/.dirstamp - # CScope: /.cscope .cscope* @@ -173,8 +117,6 @@ cscope.out /.kdev_include_paths # Qt -lib/framework/wzapp_moc.cpp - tools/qwzm/config tools/qwzm/moc_qwzm.cpp tools/qwzm/moc_wzmglwidget.cpp @@ -216,26 +158,12 @@ commit-* .DS_Store *.pbxuser *.perspectivev3 -macosx/Warzone.xcodeproj/xcuserdata/* -macosx/Warzone.xcodeproj/project.xcworkspace/xcuserdata/* -macosx/Warzone.xcworkspace/xcuserdata/* -macosx/configs/CS-ID.xcconfig *.xcscmblueprint # build folders -/macosx/build/ -/macosx/Build/ -/macosx/external/ -/macosx/prebuilt/ /build /build_*/ !/build_tools/ -/2.3 -/trunk -/newnet -/qt-trunk -/master -/3.0 #misc (MSVC) *.orig @@ -246,7 +174,6 @@ macosx/configs/CS-ID.xcconfig *.ncb *.htm *.mep -*.manifest *.res *.idb *.pdb @@ -277,9 +204,6 @@ warzone*.*build /CMakeSettings.json /launch.vs.json -# profiler stuff -win32/CodeAnalyst - # Tests /tests/jslist.txt /tests/maplist.txt @@ -296,8 +220,8 @@ win32/CodeAnalyst /tags # Exclusions -# Do not ignore the *.manifest* files that are used under the /win32 folder -!/win32/*.manifest* +# Do not ignore the *.manifest* files that are used under the /platforms/windows folder +!/platforms/windows/*.manifest* # Do not ignore NSIS plugins under the pkg/nsis/plugins/*/ folders !/pkg/nsis/plugins/*/*.dll # Do not ignore the in-repo template file used for translation integration diff --git a/.gitmodules b/.gitmodules index e465cb1e56a..69910ef72cf 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,6 @@ [submodule "3rdparty/glm"] path = 3rdparty/glm url = https://github.com/g-truc/glm.git -[submodule "3rdparty/miniupnp"] - path = 3rdparty/miniupnp - url = https://github.com/miniupnp/miniupnp.git [submodule "3rdparty/utfcpp"] path = 3rdparty/utfcpp url = https://github.com/nemtrif/utfcpp.git @@ -65,3 +62,18 @@ [submodule "data/terrain_overrides/high"] path = data/terrain_overrides/high url = https://github.com/Warzone2100/data-terrain-high.git +[submodule "data/mods/campaign/reclamation"] + path = data/mods/campaign/reclamation + url = https://github.com/Warzone2100/reclamation.git +[submodule "data/mods/campaign/fractured-kingdom"] + path = data/mods/campaign/fractured-kingdom + url = https://github.com/Warzone2100/fractured-kingdom.git +[submodule "3rdparty/libplum"] + path = 3rdparty/libplum + url = https://github.com/paullouisageneau/libplum.git +[submodule "lib/netplay/3rdparty/miniupnp"] + path = lib/netplay/3rdparty/miniupnp + url = https://github.com/miniupnp/miniupnp.git +[submodule "3rdparty/expected"] + path = 3rdparty/expected + url = https://github.com/TartanLlama/expected.git diff --git a/.sentrynative b/.sentrynative index 472363def31..6804359cb32 100644 --- a/.sentrynative +++ b/.sentrynative @@ -1,2 +1,2 @@ -URL=https://github.com/getsentry/sentry-native/releases/download/0.6.6/sentry-native.zip -SHA512=0fa548b70e3fbb87614521d797a577ffa185991f0942cf20dd965f8c068414512a63f5d715672ecf243aa31d18fdcda6ce355ad8614ede7b988d0a103cda7244 +URL=https://github.com/getsentry/sentry-native/releases/download/0.7.9/sentry-native.zip +SHA512=04b9df74d87a9197089cef78463d9da9533eec2d2e63c427489202aa6c2285914046691fbb12e6a0f0517ac425ee5bd2a89e05a5a66bd00f71e391c487ef0bf1 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3779a7720df..00000000000 --- a/.travis.yml +++ /dev/null @@ -1,84 +0,0 @@ -branches: - except: - - /^l10n_.*$/ -matrix: - include: - # Build for macOS (CMake) - - name: "macOS (CMake) [Xcode 8.3, macOS 10.12 SDK]" - language: objective-c - os: osx - osx_image: xcode8.3 - env: - - MACOSX_DEPLOYMENT_TARGET=10.10 - before_install: - #- brew update - #- brew upgrade cmake - - brew install gettext - # NOTE: Specify an explicit Asciidoctor version to help ensure reproducible builds - - gem install asciidoctor -v 2.0.12 --no-document - # Try to workaround issues with brew downloading gcc - - brew fetch --retry gcc@7 - # gcc6+ is currently required to bootstrap vcpkg on macOS - - brew install gcc@7 || brew link --overwrite gcc@7 - - bundle install --gemfile="macosx/BuildBot/Gemfile" - - cmake --version - script: - - source .ci/travis/export_build_output_desc.sh - - macosx/BuildBot/travis_cmake_build.sh "${WZ_BUILD_DESC_PREFIX}-" "tmp/wz_upload" - # do not deploy - - # Build for macOS (CMake) - - name: "macOS (CMake) [Xcode 9.4, macOS 10.13 SDK]" - language: objective-c - os: osx - osx_image: xcode9.4 - env: - - MACOSX_DEPLOYMENT_TARGET=10.10 - before_install: - - brew update - - if (brew outdated | grep cmake > /dev/null); then echo "upgrading CMake"; brew upgrade cmake; fi - - brew install gettext - # NOTE: Specify an explicit Asciidoctor version to help ensure reproducible builds - - gem install asciidoctor -v 2.0.12 --no-document - # gcc6+ is currently required to bootstrap vcpkg on macOS - - brew install gcc || brew link --overwrite gcc - - bundle install --gemfile="macosx/BuildBot/Gemfile" - - cmake --version - script: - - source .ci/travis/export_build_output_desc.sh - - macosx/BuildBot/travis_cmake_build.sh "${WZ_BUILD_DESC_PREFIX}-" "tmp/wz_upload" - # do not deploy - - # # Build for macOS (CMake) - # - name: "macOS (CMake) [Xcode 10.3, macOS 10.14 SDK]" - # language: objective-c - # os: osx - # osx_image: xcode10.3 - # env: - # - MACOSX_DEPLOYMENT_TARGET=10.10 - # before_install: - # - brew update - # - if (brew outdated | grep cmake > /dev/null); then echo "upgrading CMake"; brew upgrade cmake; fi - # - brew install gettext - # # NOTE: Specify an explicit Asciidoctor version to help ensure reproducible builds - # - gem install asciidoctor -v 2.0.12 --no-document - # # gcc6+ is currently required to bootstrap vcpkg on macOS - # - brew install gcc || brew link --overwrite gcc - # - bundle install --gemfile="macosx/BuildBot/Gemfile" - # - cmake --version - # script: - # - source .ci/travis/export_build_output_desc.sh - # - macosx/BuildBot/travis_cmake_build.sh "${WZ_BUILD_DESC_PREFIX}-" "tmp/wz_upload" - # # do not deploy - -# The channel name "chat.freenode.net#warzone2100-dev" is encrypted against Warzone2100/warzone2100 to prevent IRC spam of forks -notifications: - irc: - channels: - - secure: AvYOScfrjmtSqC6+qvVe3nxCjonN07eNp6ebzT3YdBo9e0JH4/elxSJVRC96E8ViSGia/6m8rBWMSEoJhDkykyUSVCn/gHr2FRtCNJz+iJ7ZEgzx90++q5XxtJM4R49e5HDF5dyoImiuwREXXhhqDX1oKCqFRgI4M17XfsYD+NM= - on_success: always # default: always - on_failure: always # default: always - use_notice: true - skip_join: true - template: - - "[travis-ci] \x0313%{repository_slug}\x03/\x036%{branch}\x03 \x0314%{commit}\x03 \x0315%{author}\x03: Build #%{build_number}: \x031%{message}\x03 Build details: %{build_url}" diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 65187258c73..dad82b3add9 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -1,12 +1,27 @@ cmake_minimum_required (VERSION 3.5...3.24) +include(CheckCompilerFlagsOutput) + SET(UTF8PROC_INSTALL OFF CACHE BOOL "Enable installation of utf8proc" FORCE) add_subdirectory(utf8proc EXCLUDE_FROM_ALL) set_property(TARGET utf8proc PROPERTY FOLDER "3rdparty") +if(NOT MSVC) + set(_supported_utf8proc_cxx_compiler_flags "") + + # -Wassign-enum + check_compiler_flags_output("-Werror -Wno-assign-enum -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-assign-enum" OUTPUT_VARIABLE _supported_utf8proc_cxx_compiler_flags APPEND) + + if (NOT _supported_utf8proc_cxx_compiler_flags STREQUAL "") + string(REPLACE " " ";" _supported_utf8proc_cxx_compiler_flags "${_supported_utf8proc_cxx_compiler_flags}") + target_compile_options(utf8proc PRIVATE ${_supported_utf8proc_cxx_compiler_flags}) + endif() +endif() add_subdirectory(launchinfo EXCLUDE_FROM_ALL) set_property(TARGET launchinfo PROPERTY FOLDER "3rdparty") +SET(FMT_INSTALL OFF CACHE BOOL "Generate the install target" FORCE) +SET(FMT_SYSTEM_HEADERS ON CACHE BOOL "Expose headers with marking them as system." FORCE) add_subdirectory(fmt EXCLUDE_FROM_ALL) set_property(TARGET fmt PROPERTY FOLDER "3rdparty") @@ -32,7 +47,8 @@ target_include_directories(re2 PUBLIC ) set_property(TARGET re2 PROPERTY FOLDER "3rdparty") set_property(TARGET re2 PROPERTY XCODE_ATTRIBUTE_GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS NO) # -Wmissing-field-initializers -set_property(TARGET re2 PROPERTY XCODE_ATTRIBUTE_WARNING_CFLAGS "-Wno-missing-field-initializers") +set_property(TARGET re2 PROPERTY XCODE_ATTRIBUTE_GCC_WARN_SHADOW NO) # -Wshadow +set_property(TARGET re2 PROPERTY XCODE_ATTRIBUTE_WARNING_CFLAGS "-Wno-missing-field-initializers -Wno-shadow") add_subdirectory(EmbeddedJSONSignature EXCLUDE_FROM_ALL) set_property(TARGET EmbeddedJSONSignature PROPERTY FOLDER "3rdparty") @@ -144,6 +160,18 @@ if (WZ_ENABLE_BASIS_UNIVERSAL AND NOT WZ_CI_DISABLE_BASIS_COMPRESS_TEXTURES) message(STATUS "Pre-installed basisu tool found: ${BASIS_UNIVERSAL_CLI}") endif() + # Test basisu -version + execute_process( + COMMAND "${BASIS_UNIVERSAL_CLI}" -version + OUTPUT_VARIABLE BASISU_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE _basisu_result + ) + if(_basisu_result AND NOT _basisu_result EQUAL 0) + message(FATAL_ERROR "basisu does not seem to be executable on this host?: ${BASIS_UNIVERSAL_CLI} (exit code: ${_basisu_result})") + endif() + message(STATUS "Found basisu: ${BASIS_UNIVERSAL_CLI} ${BASISU_VERSION}") + set(BASIS_UNIVERSAL_CLI "${BASIS_UNIVERSAL_CLI}" PARENT_SCOPE) endif() @@ -156,13 +184,27 @@ if (WZ_ENABLE_BASIS_UNIVERSAL) set_property(TARGET basis_transcoder PROPERTY FOLDER "3rdparty") target_include_directories(basis_transcoder PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal/transcoder") - include(CheckCompilerFlagsOutput) if(NOT MSVC) set(_supported_basistranscoder_cxx_compiler_flags "") # -fno-strict-aliasing (GCC, Clang) check_compiler_flags_output("-Werror -fno-strict-aliasing -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-fno-strict-aliasing" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) + # -Wcast-align (GCC 3.4+, Clang 3.2+) + check_compiler_flags_output("-Werror -Wno-cast-align -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-cast-align" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) + + # -Wdeprecated-declarations + check_compiler_flags_output("-Werror -Wno-deprecated-declarations -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-deprecated-declarations" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) + + # -Wunused-but-set-variable + check_compiler_flags_output("-Werror -Wno-unused-but-set-variable -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unused-but-set-variable" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) + + # -Wunused-function + check_compiler_flags_output("-Werror -Wno-unused-function -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unused-function" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) + + # -Wunused-const-variable + check_compiler_flags_output("-Werror -Wno-unused-const-variable -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unused-const-variable" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) + if (NOT _supported_basistranscoder_cxx_compiler_flags STREQUAL "") string(REPLACE " " ";" _supported_basistranscoder_cxx_compiler_flags "${_supported_basistranscoder_cxx_compiler_flags}") target_compile_options(basis_transcoder PRIVATE ${_supported_basistranscoder_cxx_compiler_flags}) @@ -220,3 +262,31 @@ if (WZ_PROFILING_NVTX) set(PROFILING_NVTX_INCLUDE ${CUDAToolkit_INCLUDE_DIRS} PARENT_SCOPE) endif () + +add_subdirectory(libplum EXCLUDE_FROM_ALL) +set_target_properties(plum plum-static PROPERTIES FOLDER "3rdparty") +if(NOT MSVC) + set(_supported_libplum_c_compiler_flags "") + + # -Wshadow + check_compiler_flags_output("-Werror -Wno-shadow -Wno-error=cpp" COMPILER_TYPE C OUTPUT_FLAGS "-Wno-shadow" OUTPUT_VARIABLE _supported_libplum_c_compiler_flags APPEND) + + if (NOT _supported_libplum_c_compiler_flags STREQUAL "") + string(REPLACE " " ";" _supported_libplum_c_compiler_flags "${_supported_libplum_c_compiler_flags}") + target_compile_options(plum PRIVATE ${_supported_libplum_c_compiler_flags}) + target_compile_options(plum-static PRIVATE ${_supported_libplum_c_compiler_flags}) + endif() +endif() + +set(EXPECTED_BUILD_TESTS OFF) +add_subdirectory(expected EXCLUDE_FROM_ALL) +# There isn't any release note or established CMake policy about this behavior, +# but looks like prior to CMake 3.19 only a handful of `INTERFACE_*` properties +# were allowed for INTERFACE libraries (which is our case). This restriction +# seems to be lifted in CMake 3.19 and later. +# +# See https://discourse.cmake.org/t/how-to-find-current-interface-library-property-whitelist/4784/2 +# for some clarification about this. +if (CMAKE_VERSION VERSION_GREATER "3.18") + set_target_properties(expected PROPERTIES FOLDER "3rdparty") +endif() diff --git a/3rdparty/date b/3rdparty/date index cc4685a21e4..1ead6715dec 160000 --- a/3rdparty/date +++ b/3rdparty/date @@ -1 +1 @@ -Subproject commit cc4685a21e4a4fdae707ad1233c61bbaff241f93 +Subproject commit 1ead6715dec030d340a316c927c877a3c4e5a00c diff --git a/3rdparty/discord-rpc b/3rdparty/discord-rpc index 1f49ccb21dd..f07a8186ece 160000 --- a/3rdparty/discord-rpc +++ b/3rdparty/discord-rpc @@ -1 +1 @@ -Subproject commit 1f49ccb21dd1600900dc9c3608e48e63db105e4b +Subproject commit f07a8186ece9d805c724b63836ecce6dc1633b3d diff --git a/3rdparty/expected b/3rdparty/expected new file mode 160000 index 00000000000..3f0ca7b1925 --- /dev/null +++ b/3rdparty/expected @@ -0,0 +1 @@ +Subproject commit 3f0ca7b19253129700a073abfa6d8638d9f7c80c diff --git a/3rdparty/fmt b/3rdparty/fmt index f5e54359df4..e69e5f977d4 160000 --- a/3rdparty/fmt +++ b/3rdparty/fmt @@ -1 +1 @@ -Subproject commit f5e54359df4c26b6230fc61d38aa294581393084 +Subproject commit e69e5f977d458f2650bb346dadf2ad30c5320281 diff --git a/3rdparty/glad/include/glad/glad.h b/3rdparty/glad/include/glad/glad.h index 15c2320be6b..c6ec181a009 100644 --- a/3rdparty/glad/include/glad/glad.h +++ b/3rdparty/glad/include/glad/glad.h @@ -1,10 +1,10 @@ /* - OpenGL, OpenGL ES loader generated by glad 0.1.34 on Thu Jul 13 01:28:17 2023. + OpenGL, OpenGL ES loader generated by glad 0.1.36 on Wed Jun 19 17:37:53 2024. Language/Generator: C/C++ Specification: gl - APIs: gl=3.3, gles2=3.0 + APIs: gl=3.3, gles2=3.2 Profile: core Extensions: GL_ANGLE_instanced_arrays, @@ -34,6 +34,7 @@ GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, GL_EXT_texture_array, + GL_EXT_texture_border_clamp, GL_EXT_texture_compression_bptc, GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_s3tc, @@ -44,16 +45,18 @@ GL_KHR_texture_compression_astc_ldr, GL_NVX_gpu_memory_info, GL_NV_instanced_arrays, - GL_OES_compressed_ETC1_RGB8_texture + GL_NV_texture_border_clamp, + GL_OES_compressed_ETC1_RGB8_texture, + GL_OES_texture_border_clamp Loader: True Local files: False Omit khrplatform: False Reproducible: False Commandline: - --profile="core" --api="gl=3.3,gles2=3.0" --generator="c" --spec="gl" --extensions="GL_ANGLE_instanced_arrays,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ARB_ES3_compatibility,GL_ARB_draw_instanced,GL_ARB_instanced_arrays,GL_ARB_internalformat_query,GL_ARB_internalformat_query2,GL_ARB_invalidate_subdata,GL_ARB_texture_compression,GL_ARB_texture_compression_bptc,GL_ARB_texture_compression_rgtc,GL_ARB_texture_cube_map,GL_ARB_texture_non_power_of_two,GL_ARB_texture_rectangle,GL_ARB_texture_rg,GL_ARB_timer_query,GL_ARB_vertex_buffer_object,GL_ATI_meminfo,GL_ATI_separate_stencil,GL_EXT_discard_framebuffer,GL_EXT_framebuffer_object,GL_EXT_instanced_arrays,GL_EXT_multisampled_render_to_texture,GL_EXT_stencil_two_side,GL_EXT_stencil_wrap,GL_EXT_texture_array,GL_EXT_texture_compression_bptc,GL_EXT_texture_compression_dxt1,GL_EXT_texture_compression_s3tc,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_rg,GL_GREMEDY_string_marker,GL_KHR_debug,GL_KHR_texture_compression_astc_ldr,GL_NVX_gpu_memory_info,GL_NV_instanced_arrays,GL_OES_compressed_ETC1_RGB8_texture" + --profile="core" --api="gl=3.3,gles2=3.2" --generator="c" --spec="gl" --extensions="GL_ANGLE_instanced_arrays,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ARB_ES3_compatibility,GL_ARB_draw_instanced,GL_ARB_instanced_arrays,GL_ARB_internalformat_query,GL_ARB_internalformat_query2,GL_ARB_invalidate_subdata,GL_ARB_texture_compression,GL_ARB_texture_compression_bptc,GL_ARB_texture_compression_rgtc,GL_ARB_texture_cube_map,GL_ARB_texture_non_power_of_two,GL_ARB_texture_rectangle,GL_ARB_texture_rg,GL_ARB_timer_query,GL_ARB_vertex_buffer_object,GL_ATI_meminfo,GL_ATI_separate_stencil,GL_EXT_discard_framebuffer,GL_EXT_framebuffer_object,GL_EXT_instanced_arrays,GL_EXT_multisampled_render_to_texture,GL_EXT_stencil_two_side,GL_EXT_stencil_wrap,GL_EXT_texture_array,GL_EXT_texture_border_clamp,GL_EXT_texture_compression_bptc,GL_EXT_texture_compression_dxt1,GL_EXT_texture_compression_s3tc,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_rg,GL_GREMEDY_string_marker,GL_KHR_debug,GL_KHR_texture_compression_astc_ldr,GL_NVX_gpu_memory_info,GL_NV_instanced_arrays,GL_NV_texture_border_clamp,GL_OES_compressed_ETC1_RGB8_texture,GL_OES_texture_border_clamp" Online: - https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3&api=gles2%3D3.0&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_texture_compression_dxt3&extensions=GL_ANGLE_texture_compression_dxt5&extensions=GL_ARB_ES3_compatibility&extensions=GL_ARB_draw_instanced&extensions=GL_ARB_instanced_arrays&extensions=GL_ARB_internalformat_query&extensions=GL_ARB_internalformat_query2&extensions=GL_ARB_invalidate_subdata&extensions=GL_ARB_texture_compression&extensions=GL_ARB_texture_compression_bptc&extensions=GL_ARB_texture_compression_rgtc&extensions=GL_ARB_texture_cube_map&extensions=GL_ARB_texture_non_power_of_two&extensions=GL_ARB_texture_rectangle&extensions=GL_ARB_texture_rg&extensions=GL_ARB_timer_query&extensions=GL_ARB_vertex_buffer_object&extensions=GL_ATI_meminfo&extensions=GL_ATI_separate_stencil&extensions=GL_EXT_discard_framebuffer&extensions=GL_EXT_framebuffer_object&extensions=GL_EXT_instanced_arrays&extensions=GL_EXT_multisampled_render_to_texture&extensions=GL_EXT_stencil_two_side&extensions=GL_EXT_stencil_wrap&extensions=GL_EXT_texture_array&extensions=GL_EXT_texture_compression_bptc&extensions=GL_EXT_texture_compression_dxt1&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_rg&extensions=GL_GREMEDY_string_marker&extensions=GL_KHR_debug&extensions=GL_KHR_texture_compression_astc_ldr&extensions=GL_NVX_gpu_memory_info&extensions=GL_NV_instanced_arrays&extensions=GL_OES_compressed_ETC1_RGB8_texture + https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3&api=gles2%3D3.2&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_texture_compression_dxt3&extensions=GL_ANGLE_texture_compression_dxt5&extensions=GL_ARB_ES3_compatibility&extensions=GL_ARB_draw_instanced&extensions=GL_ARB_instanced_arrays&extensions=GL_ARB_internalformat_query&extensions=GL_ARB_internalformat_query2&extensions=GL_ARB_invalidate_subdata&extensions=GL_ARB_texture_compression&extensions=GL_ARB_texture_compression_bptc&extensions=GL_ARB_texture_compression_rgtc&extensions=GL_ARB_texture_cube_map&extensions=GL_ARB_texture_non_power_of_two&extensions=GL_ARB_texture_rectangle&extensions=GL_ARB_texture_rg&extensions=GL_ARB_timer_query&extensions=GL_ARB_vertex_buffer_object&extensions=GL_ATI_meminfo&extensions=GL_ATI_separate_stencil&extensions=GL_EXT_discard_framebuffer&extensions=GL_EXT_framebuffer_object&extensions=GL_EXT_instanced_arrays&extensions=GL_EXT_multisampled_render_to_texture&extensions=GL_EXT_stencil_two_side&extensions=GL_EXT_stencil_wrap&extensions=GL_EXT_texture_array&extensions=GL_EXT_texture_border_clamp&extensions=GL_EXT_texture_compression_bptc&extensions=GL_EXT_texture_compression_dxt1&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_rg&extensions=GL_GREMEDY_string_marker&extensions=GL_KHR_debug&extensions=GL_KHR_texture_compression_astc_ldr&extensions=GL_NVX_gpu_memory_info&extensions=GL_NV_instanced_arrays&extensions=GL_NV_texture_border_clamp&extensions=GL_OES_compressed_ETC1_RGB8_texture&extensions=GL_OES_texture_border_clamp */ @@ -1053,6 +1056,314 @@ typedef void (APIENTRY *GLVULKANPROCNV)(void); #define GL_MAX_ELEMENT_INDEX 0x8D6B #define GL_NUM_SAMPLE_COUNTS 0x9380 #define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_NAME_LENGTH 0x92F9 +#define GL_TYPE 0x92FA +#define GL_ARRAY_SIZE 0x92FB +#define GL_OFFSET 0x92FC +#define GL_BLOCK_INDEX 0x92FD +#define GL_ARRAY_STRIDE 0x92FE +#define GL_MATRIX_STRIDE 0x92FF +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_LOCATION 0x930E +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_MULTISAMPLE_LINE_WIDTH_RANGE 0x9381 +#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY 0x9382 +#define GL_MULTIPLY 0x9294 +#define GL_SCREEN 0x9295 +#define GL_OVERLAY 0x9296 +#define GL_DARKEN 0x9297 +#define GL_LIGHTEN 0x9298 +#define GL_COLORDODGE 0x9299 +#define GL_COLORBURN 0x929A +#define GL_HARDLIGHT 0x929B +#define GL_SOFTLIGHT 0x929C +#define GL_DIFFERENCE 0x929E +#define GL_EXCLUSION 0x92A0 +#define GL_HSL_HUE 0x92AD +#define GL_HSL_SATURATION 0x92AE +#define GL_HSL_COLOR 0x92AF +#define GL_HSL_LUMINOSITY 0x92B0 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_BUFFER 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_QUERY 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_SAMPLER 0x82E6 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_UNDEFINED_VERTEX 0x8260 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_PRIMITIVE_BOUNDING_BOX 0x92BE +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 +#define GL_LOSE_CONTEXT_ON_RESET 0x8252 +#define GL_GUILTY_CONTEXT_RESET 0x8253 +#define GL_INNOCENT_CONTEXT_RESET 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 +#define GL_NO_RESET_NOTIFICATION 0x8261 +#define GL_CONTEXT_LOST 0x0507 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_PATCHES 0x000E +#define GL_PATCH_VERTICES 0x8E72 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_ISOLINES 0x8E7A +#define GL_QUADS 0x0007 +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_IS_PER_PATCH 0x92E7 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_IMAGE_BUFFER 0x9051 +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_COMPRESSED_RGBA_ASTC_4x4 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12 0x93DD +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A #ifndef GL_VERSION_1_0 #define GL_VERSION_1_0 1 GLAPI int GLAD_GL_VERSION_1_0; @@ -2288,9 +2599,285 @@ typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC)(GLenum target, GLenum inte GLAPI PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; #define glGetInternalformativ glad_glGetInternalformativ #endif +#ifndef GL_ES_VERSION_3_1 +#define GL_ES_VERSION_3_1 1 +GLAPI int GLAD_GL_ES_VERSION_3_1; +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +GLAPI PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute; +#define glDispatchCompute glad_glDispatchCompute +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC)(GLintptr indirect); +GLAPI PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect; +#define glDispatchComputeIndirect glad_glDispatchComputeIndirect +typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect); +GLAPI PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect; +#define glDrawArraysIndirect glad_glDrawArraysIndirect +typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void *indirect); +GLAPI PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect; +#define glDrawElementsIndirect glad_glDrawElementsIndirect +typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +GLAPI PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri; +#define glFramebufferParameteri glad_glFramebufferParameteri +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv; +#define glGetFramebufferParameteriv glad_glGetFramebufferParameteriv +typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC)(GLuint program, GLenum programInterface, GLenum pname, GLint *params); +GLAPI PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv; +#define glGetProgramInterfaceiv glad_glGetProgramInterfaceiv +typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC)(GLuint program, GLenum programInterface, const GLchar *name); +GLAPI PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex; +#define glGetProgramResourceIndex glad_glGetProgramResourceIndex +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName; +#define glGetProgramResourceName glad_glGetProgramResourceName +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params); +GLAPI PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv; +#define glGetProgramResourceiv glad_glGetProgramResourceiv +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC)(GLuint program, GLenum programInterface, const GLchar *name); +GLAPI PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation; +#define glGetProgramResourceLocation glad_glGetProgramResourceLocation +typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC)(GLuint pipeline, GLbitfield stages, GLuint program); +GLAPI PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages; +#define glUseProgramStages glad_glUseProgramStages +typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC)(GLuint pipeline, GLuint program); +GLAPI PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram; +#define glActiveShaderProgram glad_glActiveShaderProgram +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC)(GLenum type, GLsizei count, const GLchar *const*strings); +GLAPI PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv; +#define glCreateShaderProgramv glad_glCreateShaderProgramv +typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC)(GLuint pipeline); +GLAPI PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline; +#define glBindProgramPipeline glad_glBindProgramPipeline +typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC)(GLsizei n, const GLuint *pipelines); +GLAPI PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines; +#define glDeleteProgramPipelines glad_glDeleteProgramPipelines +typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC)(GLsizei n, GLuint *pipelines); +GLAPI PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines; +#define glGenProgramPipelines glad_glGenProgramPipelines +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC)(GLuint pipeline); +GLAPI PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline; +#define glIsProgramPipeline glad_glIsProgramPipeline +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC)(GLuint pipeline, GLenum pname, GLint *params); +GLAPI PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv; +#define glGetProgramPipelineiv glad_glGetProgramPipelineiv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC)(GLuint program, GLint location, GLint v0); +GLAPI PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i; +#define glProgramUniform1i glad_glProgramUniform1i +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC)(GLuint program, GLint location, GLint v0, GLint v1); +GLAPI PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i; +#define glProgramUniform2i glad_glProgramUniform2i +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i; +#define glProgramUniform3i glad_glProgramUniform3i +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i; +#define glProgramUniform4i glad_glProgramUniform4i +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC)(GLuint program, GLint location, GLuint v0); +GLAPI PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui; +#define glProgramUniform1ui glad_glProgramUniform1ui +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui; +#define glProgramUniform2ui glad_glProgramUniform2ui +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui; +#define glProgramUniform3ui glad_glProgramUniform3ui +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui; +#define glProgramUniform4ui glad_glProgramUniform4ui +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC)(GLuint program, GLint location, GLfloat v0); +GLAPI PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f; +#define glProgramUniform1f glad_glProgramUniform1f +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f; +#define glProgramUniform2f glad_glProgramUniform2f +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f; +#define glProgramUniform3f glad_glProgramUniform3f +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f; +#define glProgramUniform4f glad_glProgramUniform4f +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv; +#define glProgramUniform1iv glad_glProgramUniform1iv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv; +#define glProgramUniform2iv glad_glProgramUniform2iv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv; +#define glProgramUniform3iv glad_glProgramUniform3iv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv; +#define glProgramUniform4iv glad_glProgramUniform4iv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv; +#define glProgramUniform1uiv glad_glProgramUniform1uiv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv; +#define glProgramUniform2uiv glad_glProgramUniform2uiv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv; +#define glProgramUniform3uiv glad_glProgramUniform3uiv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv; +#define glProgramUniform4uiv glad_glProgramUniform4uiv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv; +#define glProgramUniform1fv glad_glProgramUniform1fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv; +#define glProgramUniform2fv glad_glProgramUniform2fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv; +#define glProgramUniform3fv glad_glProgramUniform3fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv; +#define glProgramUniform4fv glad_glProgramUniform4fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv; +#define glProgramUniformMatrix2fv glad_glProgramUniformMatrix2fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv; +#define glProgramUniformMatrix3fv glad_glProgramUniformMatrix3fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv; +#define glProgramUniformMatrix4fv glad_glProgramUniformMatrix4fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv; +#define glProgramUniformMatrix2x3fv glad_glProgramUniformMatrix2x3fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv; +#define glProgramUniformMatrix3x2fv glad_glProgramUniformMatrix3x2fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv; +#define glProgramUniformMatrix2x4fv glad_glProgramUniformMatrix2x4fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv; +#define glProgramUniformMatrix4x2fv glad_glProgramUniformMatrix4x2fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv; +#define glProgramUniformMatrix3x4fv glad_glProgramUniformMatrix3x4fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv; +#define glProgramUniformMatrix4x3fv glad_glProgramUniformMatrix4x3fv +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC)(GLuint pipeline); +GLAPI PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline; +#define glValidateProgramPipeline glad_glValidateProgramPipeline +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC)(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog; +#define glGetProgramPipelineInfoLog glad_glGetProgramPipelineInfoLog +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +GLAPI PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture; +#define glBindImageTexture glad_glBindImageTexture +typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC)(GLbitfield barriers); +GLAPI PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier; +#define glMemoryBarrier glad_glMemoryBarrier +typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC)(GLbitfield barriers); +GLAPI PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion; +#define glMemoryBarrierByRegion glad_glMemoryBarrierByRegion +typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample; +#define glTexStorage2DMultisample glad_glTexStorage2DMultisample +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; +#define glBindVertexBuffer glad_glBindVertexBuffer +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; +#define glVertexAttribFormat glad_glVertexAttribFormat +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; +#define glVertexAttribIFormat glad_glVertexAttribIFormat +typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex); +GLAPI PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; +#define glVertexAttribBinding glad_glVertexAttribBinding +typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor); +GLAPI PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; +#define glVertexBindingDivisor glad_glVertexBindingDivisor +#endif +#ifndef GL_ES_VERSION_3_2 +#define GL_ES_VERSION_3_2 1 +GLAPI int GLAD_GL_ES_VERSION_3_2; +typedef void (APIENTRYP PFNGLBLENDBARRIERPROC)(void); +GLAPI PFNGLBLENDBARRIERPROC glad_glBlendBarrier; +#define glBlendBarrier glad_glBlendBarrier +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +GLAPI PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData; +#define glCopyImageSubData glad_glCopyImageSubData +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl; +#define glDebugMessageControl glad_glDebugMessageControl +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert; +#define glDebugMessageInsert glad_glDebugMessageInsert +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, const void *userParam); +GLAPI PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback; +#define glDebugMessageCallback glad_glDebugMessageCallback +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GLAPI PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog; +#define glGetDebugMessageLog glad_glGetDebugMessageLog +typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, const GLchar *message); +GLAPI PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup; +#define glPushDebugGroup glad_glPushDebugGroup +typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC)(void); +GLAPI PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup; +#define glPopDebugGroup glad_glPopDebugGroup +typedef void (APIENTRYP PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GLAPI PFNGLOBJECTLABELPROC glad_glObjectLabel; +#define glObjectLabel glad_glObjectLabel +typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel; +#define glGetObjectLabel glad_glGetObjectLabel +typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC)(const void *ptr, GLsizei length, const GLchar *label); +GLAPI PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel; +#define glObjectPtrLabel glad_glObjectPtrLabel +typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC)(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel; +#define glGetObjectPtrLabel glad_glGetObjectPtrLabel +typedef void (APIENTRYP PFNGLGETPOINTERVPROC)(GLenum pname, void **params); +GLAPI PFNGLGETPOINTERVPROC glad_glGetPointerv; +#define glGetPointerv glad_glGetPointerv +typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode); +GLAPI PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi; +#define glBlendEquationi glad_glBlendEquationi +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei; +#define glBlendEquationSeparatei glad_glBlendEquationSeparatei +typedef void (APIENTRYP PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst); +GLAPI PFNGLBLENDFUNCIPROC glad_glBlendFunci; +#define glBlendFunci glad_glBlendFunci +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei; +#define glBlendFuncSeparatei glad_glBlendFuncSeparatei +typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +GLAPI PFNGLPRIMITIVEBOUNDINGBOXPROC glad_glPrimitiveBoundingBox; +#define glPrimitiveBoundingBox glad_glPrimitiveBoundingBox +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC)(void); +GLAPI PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus; +#define glGetGraphicsResetStatus glad_glGetGraphicsResetStatus +typedef void (APIENTRYP PFNGLREADNPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI PFNGLREADNPIXELSPROC glad_glReadnPixels; +#define glReadnPixels glad_glReadnPixels +typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv; +#define glGetnUniformfv glad_glGetnUniformfv +typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv; +#define glGetnUniformiv glad_glGetnUniformiv +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv; +#define glGetnUniformuiv glad_glGetnUniformuiv +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC)(GLfloat value); +GLAPI PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading; +#define glMinSampleShading glad_glMinSampleShading +typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value); +GLAPI PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri; +#define glPatchParameteri glad_glPatchParameteri +typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange; +#define glTexBufferRange glad_glTexBufferRange +typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample; +#define glTexStorage3DMultisample glad_glTexStorage3DMultisample +#endif #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE -#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 #define GL_INTERNALFORMAT_SUPPORTED 0x826F #define GL_INTERNALFORMAT_PREFERRED 0x8270 #define GL_INTERNALFORMAT_RED_SIZE 0x8271 @@ -2548,46 +3135,6 @@ GLAPI PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_VERTEX_ARRAY 0x8074 -#define GL_QUERY 0x82E3 -#define GL_PROGRAM_PIPELINE 0x82E4 -#define GL_SAMPLER 0x82E6 -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_OUTPUT 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 #define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 @@ -2673,6 +3220,8 @@ GLAPI PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 #define GL_MAX_SAMPLES_EXT 0x8D57 +#define GL_TEXTURE_BORDER_COLOR_EXT 0x1004 +#define GL_CLAMP_TO_BORDER_EXT 0x812D #define GL_COMPRESSED_RGBA_BPTC_UNORM_EXT 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT 0x8E8E @@ -2682,7 +3231,11 @@ GLAPI PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; #define GL_R8_EXT 0x8229 #define GL_RG8_EXT 0x822B #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE +#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 +#define GL_CLAMP_TO_BORDER_NV 0x812D #define GL_ETC1_RGB8_OES 0x8D64 +#define GL_TEXTURE_BORDER_COLOR_OES 0x1004 +#define GL_CLAMP_TO_BORDER_OES 0x812D #ifndef GL_ARB_ES3_compatibility #define GL_ARB_ES3_compatibility 1 GLAPI int GLAD_GL_ARB_ES3_compatibility; @@ -2926,39 +3479,6 @@ GLAPI PFNGLSTRINGMARKERGREMEDYPROC glad_glStringMarkerGREMEDY; #ifndef GL_KHR_debug #define GL_KHR_debug 1 GLAPI int GLAD_GL_KHR_debug; -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl; -#define glDebugMessageControl glad_glDebugMessageControl -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert; -#define glDebugMessageInsert glad_glDebugMessageInsert -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, const void *userParam); -GLAPI PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback; -#define glDebugMessageCallback glad_glDebugMessageCallback -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GLAPI PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog; -#define glGetDebugMessageLog glad_glGetDebugMessageLog -typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, const GLchar *message); -GLAPI PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup; -#define glPushDebugGroup glad_glPushDebugGroup -typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC)(void); -GLAPI PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup; -#define glPopDebugGroup glad_glPopDebugGroup -typedef void (APIENTRYP PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GLAPI PFNGLOBJECTLABELPROC glad_glObjectLabel; -#define glObjectLabel glad_glObjectLabel -typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel; -#define glGetObjectLabel glad_glGetObjectLabel -typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC)(const void *ptr, GLsizei length, const GLchar *label); -GLAPI PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel; -#define glObjectPtrLabel glad_glObjectPtrLabel -typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC)(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel; -#define glGetObjectPtrLabel glad_glGetObjectPtrLabel -typedef void (APIENTRYP PFNGLGETPOINTERVPROC)(GLenum pname, void **params); -GLAPI PFNGLGETPOINTERVPROC glad_glGetPointerv; -#define glGetPointerv glad_glGetPointerv typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI PFNGLDEBUGMESSAGECONTROLKHRPROC glad_glDebugMessageControlKHR; #define glDebugMessageControlKHR glad_glDebugMessageControlKHR @@ -3052,6 +3572,34 @@ typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC)(GLenum targ GLAPI PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC glad_glFramebufferTexture2DMultisampleEXT; #define glFramebufferTexture2DMultisampleEXT glad_glFramebufferTexture2DMultisampleEXT #endif +#ifndef GL_EXT_texture_border_clamp +#define GL_EXT_texture_border_clamp 1 +GLAPI int GLAD_GL_EXT_texture_border_clamp; +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, const GLint *params); +GLAPI PFNGLTEXPARAMETERIIVEXTPROC glad_glTexParameterIivEXT; +#define glTexParameterIivEXT glad_glTexParameterIivEXT +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, const GLuint *params); +GLAPI PFNGLTEXPARAMETERIUIVEXTPROC glad_glTexParameterIuivEXT; +#define glTexParameterIuivEXT glad_glTexParameterIuivEXT +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXPARAMETERIIVEXTPROC glad_glGetTexParameterIivEXT; +#define glGetTexParameterIivEXT glad_glGetTexParameterIivEXT +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, GLuint *params); +GLAPI PFNGLGETTEXPARAMETERIUIVEXTPROC glad_glGetTexParameterIuivEXT; +#define glGetTexParameterIuivEXT glad_glGetTexParameterIuivEXT +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVEXTPROC)(GLuint sampler, GLenum pname, const GLint *param); +GLAPI PFNGLSAMPLERPARAMETERIIVEXTPROC glad_glSamplerParameterIivEXT; +#define glSamplerParameterIivEXT glad_glSamplerParameterIivEXT +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVEXTPROC)(GLuint sampler, GLenum pname, const GLuint *param); +GLAPI PFNGLSAMPLERPARAMETERIUIVEXTPROC glad_glSamplerParameterIuivEXT; +#define glSamplerParameterIuivEXT glad_glSamplerParameterIuivEXT +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVEXTPROC)(GLuint sampler, GLenum pname, GLint *params); +GLAPI PFNGLGETSAMPLERPARAMETERIIVEXTPROC glad_glGetSamplerParameterIivEXT; +#define glGetSamplerParameterIivEXT glad_glGetSamplerParameterIivEXT +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVEXTPROC)(GLuint sampler, GLenum pname, GLuint *params); +GLAPI PFNGLGETSAMPLERPARAMETERIUIVEXTPROC glad_glGetSamplerParameterIuivEXT; +#define glGetSamplerParameterIuivEXT glad_glGetSamplerParameterIuivEXT +#endif #ifndef GL_EXT_texture_compression_bptc #define GL_EXT_texture_compression_bptc 1 GLAPI int GLAD_GL_EXT_texture_compression_bptc; @@ -3087,10 +3635,42 @@ typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC)(GLuint index, GLuint div GLAPI PFNGLVERTEXATTRIBDIVISORNVPROC glad_glVertexAttribDivisorNV; #define glVertexAttribDivisorNV glad_glVertexAttribDivisorNV #endif +#ifndef GL_NV_texture_border_clamp +#define GL_NV_texture_border_clamp 1 +GLAPI int GLAD_GL_NV_texture_border_clamp; +#endif #ifndef GL_OES_compressed_ETC1_RGB8_texture #define GL_OES_compressed_ETC1_RGB8_texture 1 GLAPI int GLAD_GL_OES_compressed_ETC1_RGB8_texture; #endif +#ifndef GL_OES_texture_border_clamp +#define GL_OES_texture_border_clamp 1 +GLAPI int GLAD_GL_OES_texture_border_clamp; +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVOESPROC)(GLenum target, GLenum pname, const GLint *params); +GLAPI PFNGLTEXPARAMETERIIVOESPROC glad_glTexParameterIivOES; +#define glTexParameterIivOES glad_glTexParameterIivOES +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVOESPROC)(GLenum target, GLenum pname, const GLuint *params); +GLAPI PFNGLTEXPARAMETERIUIVOESPROC glad_glTexParameterIuivOES; +#define glTexParameterIuivOES glad_glTexParameterIuivOES +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVOESPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXPARAMETERIIVOESPROC glad_glGetTexParameterIivOES; +#define glGetTexParameterIivOES glad_glGetTexParameterIivOES +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVOESPROC)(GLenum target, GLenum pname, GLuint *params); +GLAPI PFNGLGETTEXPARAMETERIUIVOESPROC glad_glGetTexParameterIuivOES; +#define glGetTexParameterIuivOES glad_glGetTexParameterIuivOES +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVOESPROC)(GLuint sampler, GLenum pname, const GLint *param); +GLAPI PFNGLSAMPLERPARAMETERIIVOESPROC glad_glSamplerParameterIivOES; +#define glSamplerParameterIivOES glad_glSamplerParameterIivOES +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVOESPROC)(GLuint sampler, GLenum pname, const GLuint *param); +GLAPI PFNGLSAMPLERPARAMETERIUIVOESPROC glad_glSamplerParameterIuivOES; +#define glSamplerParameterIuivOES glad_glSamplerParameterIuivOES +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVOESPROC)(GLuint sampler, GLenum pname, GLint *params); +GLAPI PFNGLGETSAMPLERPARAMETERIIVOESPROC glad_glGetSamplerParameterIivOES; +#define glGetSamplerParameterIivOES glad_glGetSamplerParameterIivOES +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVOESPROC)(GLuint sampler, GLenum pname, GLuint *params); +GLAPI PFNGLGETSAMPLERPARAMETERIUIVOESPROC glad_glGetSamplerParameterIuivOES; +#define glGetSamplerParameterIuivOES glad_glGetSamplerParameterIuivOES +#endif #ifdef __cplusplus } diff --git a/3rdparty/glad/src/glad.c b/3rdparty/glad/src/glad.c index 9791d2c1c84..4071eb3b573 100644 --- a/3rdparty/glad/src/glad.c +++ b/3rdparty/glad/src/glad.c @@ -1,10 +1,10 @@ /* - OpenGL, OpenGL ES loader generated by glad 0.1.34 on Thu Jul 13 01:28:17 2023. + OpenGL, OpenGL ES loader generated by glad 0.1.36 on Wed Jun 19 17:37:53 2024. Language/Generator: C/C++ Specification: gl - APIs: gl=3.3, gles2=3.0 + APIs: gl=3.3, gles2=3.2 Profile: core Extensions: GL_ANGLE_instanced_arrays, @@ -34,6 +34,7 @@ GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, GL_EXT_texture_array, + GL_EXT_texture_border_clamp, GL_EXT_texture_compression_bptc, GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_s3tc, @@ -44,16 +45,18 @@ GL_KHR_texture_compression_astc_ldr, GL_NVX_gpu_memory_info, GL_NV_instanced_arrays, - GL_OES_compressed_ETC1_RGB8_texture + GL_NV_texture_border_clamp, + GL_OES_compressed_ETC1_RGB8_texture, + GL_OES_texture_border_clamp Loader: True Local files: False Omit khrplatform: False Reproducible: False Commandline: - --profile="core" --api="gl=3.3,gles2=3.0" --generator="c" --spec="gl" --extensions="GL_ANGLE_instanced_arrays,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ARB_ES3_compatibility,GL_ARB_draw_instanced,GL_ARB_instanced_arrays,GL_ARB_internalformat_query,GL_ARB_internalformat_query2,GL_ARB_invalidate_subdata,GL_ARB_texture_compression,GL_ARB_texture_compression_bptc,GL_ARB_texture_compression_rgtc,GL_ARB_texture_cube_map,GL_ARB_texture_non_power_of_two,GL_ARB_texture_rectangle,GL_ARB_texture_rg,GL_ARB_timer_query,GL_ARB_vertex_buffer_object,GL_ATI_meminfo,GL_ATI_separate_stencil,GL_EXT_discard_framebuffer,GL_EXT_framebuffer_object,GL_EXT_instanced_arrays,GL_EXT_multisampled_render_to_texture,GL_EXT_stencil_two_side,GL_EXT_stencil_wrap,GL_EXT_texture_array,GL_EXT_texture_compression_bptc,GL_EXT_texture_compression_dxt1,GL_EXT_texture_compression_s3tc,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_rg,GL_GREMEDY_string_marker,GL_KHR_debug,GL_KHR_texture_compression_astc_ldr,GL_NVX_gpu_memory_info,GL_NV_instanced_arrays,GL_OES_compressed_ETC1_RGB8_texture" + --profile="core" --api="gl=3.3,gles2=3.2" --generator="c" --spec="gl" --extensions="GL_ANGLE_instanced_arrays,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ARB_ES3_compatibility,GL_ARB_draw_instanced,GL_ARB_instanced_arrays,GL_ARB_internalformat_query,GL_ARB_internalformat_query2,GL_ARB_invalidate_subdata,GL_ARB_texture_compression,GL_ARB_texture_compression_bptc,GL_ARB_texture_compression_rgtc,GL_ARB_texture_cube_map,GL_ARB_texture_non_power_of_two,GL_ARB_texture_rectangle,GL_ARB_texture_rg,GL_ARB_timer_query,GL_ARB_vertex_buffer_object,GL_ATI_meminfo,GL_ATI_separate_stencil,GL_EXT_discard_framebuffer,GL_EXT_framebuffer_object,GL_EXT_instanced_arrays,GL_EXT_multisampled_render_to_texture,GL_EXT_stencil_two_side,GL_EXT_stencil_wrap,GL_EXT_texture_array,GL_EXT_texture_border_clamp,GL_EXT_texture_compression_bptc,GL_EXT_texture_compression_dxt1,GL_EXT_texture_compression_s3tc,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_rg,GL_GREMEDY_string_marker,GL_KHR_debug,GL_KHR_texture_compression_astc_ldr,GL_NVX_gpu_memory_info,GL_NV_instanced_arrays,GL_NV_texture_border_clamp,GL_OES_compressed_ETC1_RGB8_texture,GL_OES_texture_border_clamp" Online: - https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3&api=gles2%3D3.0&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_texture_compression_dxt3&extensions=GL_ANGLE_texture_compression_dxt5&extensions=GL_ARB_ES3_compatibility&extensions=GL_ARB_draw_instanced&extensions=GL_ARB_instanced_arrays&extensions=GL_ARB_internalformat_query&extensions=GL_ARB_internalformat_query2&extensions=GL_ARB_invalidate_subdata&extensions=GL_ARB_texture_compression&extensions=GL_ARB_texture_compression_bptc&extensions=GL_ARB_texture_compression_rgtc&extensions=GL_ARB_texture_cube_map&extensions=GL_ARB_texture_non_power_of_two&extensions=GL_ARB_texture_rectangle&extensions=GL_ARB_texture_rg&extensions=GL_ARB_timer_query&extensions=GL_ARB_vertex_buffer_object&extensions=GL_ATI_meminfo&extensions=GL_ATI_separate_stencil&extensions=GL_EXT_discard_framebuffer&extensions=GL_EXT_framebuffer_object&extensions=GL_EXT_instanced_arrays&extensions=GL_EXT_multisampled_render_to_texture&extensions=GL_EXT_stencil_two_side&extensions=GL_EXT_stencil_wrap&extensions=GL_EXT_texture_array&extensions=GL_EXT_texture_compression_bptc&extensions=GL_EXT_texture_compression_dxt1&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_rg&extensions=GL_GREMEDY_string_marker&extensions=GL_KHR_debug&extensions=GL_KHR_texture_compression_astc_ldr&extensions=GL_NVX_gpu_memory_info&extensions=GL_NV_instanced_arrays&extensions=GL_OES_compressed_ETC1_RGB8_texture + https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3&api=gles2%3D3.2&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_texture_compression_dxt3&extensions=GL_ANGLE_texture_compression_dxt5&extensions=GL_ARB_ES3_compatibility&extensions=GL_ARB_draw_instanced&extensions=GL_ARB_instanced_arrays&extensions=GL_ARB_internalformat_query&extensions=GL_ARB_internalformat_query2&extensions=GL_ARB_invalidate_subdata&extensions=GL_ARB_texture_compression&extensions=GL_ARB_texture_compression_bptc&extensions=GL_ARB_texture_compression_rgtc&extensions=GL_ARB_texture_cube_map&extensions=GL_ARB_texture_non_power_of_two&extensions=GL_ARB_texture_rectangle&extensions=GL_ARB_texture_rg&extensions=GL_ARB_timer_query&extensions=GL_ARB_vertex_buffer_object&extensions=GL_ATI_meminfo&extensions=GL_ATI_separate_stencil&extensions=GL_EXT_discard_framebuffer&extensions=GL_EXT_framebuffer_object&extensions=GL_EXT_instanced_arrays&extensions=GL_EXT_multisampled_render_to_texture&extensions=GL_EXT_stencil_two_side&extensions=GL_EXT_stencil_wrap&extensions=GL_EXT_texture_array&extensions=GL_EXT_texture_border_clamp&extensions=GL_EXT_texture_compression_bptc&extensions=GL_EXT_texture_compression_dxt1&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_rg&extensions=GL_GREMEDY_string_marker&extensions=GL_KHR_debug&extensions=GL_KHR_texture_compression_astc_ldr&extensions=GL_NVX_gpu_memory_info&extensions=GL_NV_instanced_arrays&extensions=GL_NV_texture_border_clamp&extensions=GL_OES_compressed_ETC1_RGB8_texture&extensions=GL_OES_texture_border_clamp */ #include @@ -213,7 +216,7 @@ static int get_exts(void) { exts = (const char *)glGetString(GL_EXTENSIONS); #ifdef _GLAD_IS_SOME_NEW_VERSION } else { - unsigned int index; + int index; num_exts_i = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); @@ -225,7 +228,7 @@ static int get_exts(void) { return 0; } - for(index = 0; index < (unsigned)num_exts_i; index++) { + for(index = 0; index < num_exts_i; index++) { const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); size_t len = strlen(gl_str_tmp); @@ -306,6 +309,9 @@ int GLAD_GL_VERSION_3_2 = 0; int GLAD_GL_VERSION_3_3 = 0; int GLAD_GL_ES_VERSION_2_0 = 0; int GLAD_GL_ES_VERSION_3_0 = 0; +int GLAD_GL_ES_VERSION_3_1 = 0; +int GLAD_GL_ES_VERSION_3_2 = 0; +PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram = NULL; PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; @@ -318,16 +324,24 @@ PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; +PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture = NULL; +PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline = NULL; PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback = NULL; PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; +PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer = NULL; +PFNGLBLENDBARRIERPROC glad_glBlendBarrier = NULL; PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; +PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei = NULL; +PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi = NULL; PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; +PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei = NULL; +PFNGLBLENDFUNCIPROC glad_glBlendFunci = NULL; PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; PFNGLBUFFERDATAPROC glad_glBufferData = NULL; PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; @@ -357,6 +371,7 @@ PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; +PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData = NULL; PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; @@ -364,10 +379,15 @@ PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; PFNGLCREATESHADERPROC glad_glCreateShader = NULL; +PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv = NULL; PFNGLCULLFACEPROC glad_glCullFace = NULL; +PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback = NULL; +PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl = NULL; +PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert = NULL; PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; +PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines = NULL; PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; @@ -384,12 +404,16 @@ PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; PFNGLDISABLEPROC glad_glDisable = NULL; PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; PFNGLDISABLEIPROC glad_glDisablei = NULL; +PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute = NULL; +PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect = NULL; PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; +PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect = NULL; PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; +PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect = NULL; PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; @@ -404,6 +428,7 @@ PFNGLFENCESYNCPROC glad_glFenceSync = NULL; PFNGLFINISHPROC glad_glFinish = NULL; PFNGLFLUSHPROC glad_glFlush = NULL; PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; +PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri = NULL; PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; @@ -413,6 +438,7 @@ PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; PFNGLFRONTFACEPROC glad_glFrontFace = NULL; PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; +PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines = NULL; PFNGLGENQUERIESPROC glad_glGenQueries = NULL; PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; @@ -435,20 +461,33 @@ PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; +PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog = NULL; PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; PFNGLGETERRORPROC glad_glGetError = NULL; PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; +PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv = NULL; +PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus = NULL; PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ = NULL; PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; +PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel = NULL; +PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel = NULL; +PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary = NULL; PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; +PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv = NULL; +PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog = NULL; +PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv = NULL; +PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex = NULL; +PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation = NULL; +PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName = NULL; +PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv = NULL; PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; @@ -487,6 +526,9 @@ PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; +PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv = NULL; +PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv = NULL; +PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv = NULL; PFNGLHINTPROC glad_glHint = NULL; PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer = NULL; PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer = NULL; @@ -495,6 +537,7 @@ PFNGLISENABLEDPROC glad_glIsEnabled = NULL; PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; PFNGLISPROGRAMPROC glad_glIsProgram = NULL; +PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline = NULL; PFNGLISQUERYPROC glad_glIsQuery = NULL; PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; PFNGLISSAMPLERPROC glad_glIsSampler = NULL; @@ -508,6 +551,9 @@ PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; PFNGLLOGICOPPROC glad_glLogicOp = NULL; PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; +PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier = NULL; +PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion = NULL; +PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading = NULL; PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; @@ -521,6 +567,9 @@ PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL; PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL; PFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL; PFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL; +PFNGLOBJECTLABELPROC glad_glObjectLabel = NULL; +PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel = NULL; +PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri = NULL; PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback = NULL; PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; @@ -531,13 +580,50 @@ PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; PFNGLPOINTSIZEPROC glad_glPointSize = NULL; PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; +PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup = NULL; +PFNGLPRIMITIVEBOUNDINGBOXPROC glad_glPrimitiveBoundingBox = NULL; PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; PFNGLPROGRAMBINARYPROC glad_glProgramBinary = NULL; PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri = NULL; +PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f = NULL; +PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv = NULL; +PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i = NULL; +PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv = NULL; +PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui = NULL; +PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv = NULL; +PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f = NULL; +PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv = NULL; +PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i = NULL; +PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv = NULL; +PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui = NULL; +PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv = NULL; +PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f = NULL; +PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv = NULL; +PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i = NULL; +PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv = NULL; +PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui = NULL; +PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv = NULL; +PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f = NULL; +PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv = NULL; +PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i = NULL; +PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv = NULL; +PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui = NULL; +PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv = NULL; PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; +PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup = NULL; PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; PFNGLREADPIXELSPROC glad_glReadPixels = NULL; +PFNGLREADNPIXELSPROC glad_glReadnPixels = NULL; PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler = NULL; PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; @@ -562,6 +648,7 @@ PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; PFNGLSTENCILOPPROC glad_glStencilOp = NULL; PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; +PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange = NULL; PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL; PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL; PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL; @@ -582,7 +669,9 @@ PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D = NULL; +PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample = NULL; PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D = NULL; +PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample = NULL; PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; @@ -623,7 +712,9 @@ PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; +PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages = NULL; PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; +PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline = NULL; PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; @@ -660,7 +751,9 @@ PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; +PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding = NULL; PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; +PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat = NULL; PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; @@ -681,6 +774,7 @@ PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; +PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat = NULL; PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; @@ -691,6 +785,7 @@ PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; +PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor = NULL; PFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL; PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL; PFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL; @@ -726,6 +821,7 @@ int GLAD_GL_EXT_multisampled_render_to_texture = 0; int GLAD_GL_EXT_stencil_two_side = 0; int GLAD_GL_EXT_stencil_wrap = 0; int GLAD_GL_EXT_texture_array = 0; +int GLAD_GL_EXT_texture_border_clamp = 0; int GLAD_GL_EXT_texture_compression_bptc = 0; int GLAD_GL_EXT_texture_compression_dxt1 = 0; int GLAD_GL_EXT_texture_compression_s3tc = 0; @@ -736,7 +832,9 @@ int GLAD_GL_KHR_debug = 0; int GLAD_GL_KHR_texture_compression_astc_ldr = 0; int GLAD_GL_NVX_gpu_memory_info = 0; int GLAD_GL_NV_instanced_arrays = 0; +int GLAD_GL_NV_texture_border_clamp = 0; int GLAD_GL_OES_compressed_ETC1_RGB8_texture = 0; +int GLAD_GL_OES_texture_border_clamp = 0; PFNGLDRAWARRAYSINSTANCEDARBPROC glad_glDrawArraysInstancedARB = NULL; PFNGLDRAWELEMENTSINSTANCEDARBPROC glad_glDrawElementsInstancedARB = NULL; PFNGLVERTEXATTRIBDIVISORARBPROC glad_glVertexAttribDivisorARB = NULL; @@ -785,17 +883,6 @@ PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT = NULL; PFNGLACTIVESTENCILFACEEXTPROC glad_glActiveStencilFaceEXT = NULL; PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC glad_glFramebufferTextureLayerEXT = NULL; PFNGLSTRINGMARKERGREMEDYPROC glad_glStringMarkerGREMEDY = NULL; -PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl = NULL; -PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert = NULL; -PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback = NULL; -PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog = NULL; -PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup = NULL; -PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup = NULL; -PFNGLOBJECTLABELPROC glad_glObjectLabel = NULL; -PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel = NULL; -PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel = NULL; -PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel = NULL; -PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; PFNGLDEBUGMESSAGECONTROLKHRPROC glad_glDebugMessageControlKHR = NULL; PFNGLDEBUGMESSAGEINSERTKHRPROC glad_glDebugMessageInsertKHR = NULL; PFNGLDEBUGMESSAGECALLBACKKHRPROC glad_glDebugMessageCallbackKHR = NULL; @@ -816,7 +903,23 @@ PFNGLDRAWELEMENTSINSTANCEDEXTPROC glad_glDrawElementsInstancedEXT = NULL; PFNGLVERTEXATTRIBDIVISOREXTPROC glad_glVertexAttribDivisorEXT = NULL; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT = NULL; PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC glad_glFramebufferTexture2DMultisampleEXT = NULL; +PFNGLTEXPARAMETERIIVEXTPROC glad_glTexParameterIivEXT = NULL; +PFNGLTEXPARAMETERIUIVEXTPROC glad_glTexParameterIuivEXT = NULL; +PFNGLGETTEXPARAMETERIIVEXTPROC glad_glGetTexParameterIivEXT = NULL; +PFNGLGETTEXPARAMETERIUIVEXTPROC glad_glGetTexParameterIuivEXT = NULL; +PFNGLSAMPLERPARAMETERIIVEXTPROC glad_glSamplerParameterIivEXT = NULL; +PFNGLSAMPLERPARAMETERIUIVEXTPROC glad_glSamplerParameterIuivEXT = NULL; +PFNGLGETSAMPLERPARAMETERIIVEXTPROC glad_glGetSamplerParameterIivEXT = NULL; +PFNGLGETSAMPLERPARAMETERIUIVEXTPROC glad_glGetSamplerParameterIuivEXT = NULL; PFNGLVERTEXATTRIBDIVISORNVPROC glad_glVertexAttribDivisorNV = NULL; +PFNGLTEXPARAMETERIIVOESPROC glad_glTexParameterIivOES = NULL; +PFNGLTEXPARAMETERIUIVOESPROC glad_glTexParameterIuivOES = NULL; +PFNGLGETTEXPARAMETERIIVOESPROC glad_glGetTexParameterIivOES = NULL; +PFNGLGETTEXPARAMETERIUIVOESPROC glad_glGetTexParameterIuivOES = NULL; +PFNGLSAMPLERPARAMETERIIVOESPROC glad_glSamplerParameterIivOES = NULL; +PFNGLSAMPLERPARAMETERIUIVOESPROC glad_glSamplerParameterIuivOES = NULL; +PFNGLGETSAMPLERPARAMETERIIVOESPROC glad_glGetSamplerParameterIivOES = NULL; +PFNGLGETSAMPLERPARAMETERIUIVOESPROC glad_glGetSamplerParameterIuivOES = NULL; static void load_GL_VERSION_1_0(GLADloadproc load) { if(!GLAD_GL_VERSION_1_0) return; glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); @@ -1724,6 +1827,124 @@ static void load_GL_ES_VERSION_3_0(GLADloadproc load) { glad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)load("glTexStorage3D"); glad_glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)load("glGetInternalformativ"); } +static void load_GL_ES_VERSION_3_1(GLADloadproc load) { + if(!GLAD_GL_ES_VERSION_3_1) return; + glad_glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)load("glDispatchCompute"); + glad_glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC)load("glDispatchComputeIndirect"); + glad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)load("glDrawArraysIndirect"); + glad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)load("glDrawElementsIndirect"); + glad_glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC)load("glFramebufferParameteri"); + glad_glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC)load("glGetFramebufferParameteriv"); + glad_glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC)load("glGetProgramInterfaceiv"); + glad_glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)load("glGetProgramResourceIndex"); + glad_glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC)load("glGetProgramResourceName"); + glad_glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)load("glGetProgramResourceiv"); + glad_glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC)load("glGetProgramResourceLocation"); + glad_glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)load("glUseProgramStages"); + glad_glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)load("glActiveShaderProgram"); + glad_glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)load("glCreateShaderProgramv"); + glad_glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)load("glBindProgramPipeline"); + glad_glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)load("glDeleteProgramPipelines"); + glad_glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)load("glGenProgramPipelines"); + glad_glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)load("glIsProgramPipeline"); + glad_glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)load("glGetProgramPipelineiv"); + glad_glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)load("glProgramUniform1i"); + glad_glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)load("glProgramUniform2i"); + glad_glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)load("glProgramUniform3i"); + glad_glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)load("glProgramUniform4i"); + glad_glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)load("glProgramUniform1ui"); + glad_glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)load("glProgramUniform2ui"); + glad_glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)load("glProgramUniform3ui"); + glad_glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)load("glProgramUniform4ui"); + glad_glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)load("glProgramUniform1f"); + glad_glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)load("glProgramUniform2f"); + glad_glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)load("glProgramUniform3f"); + glad_glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)load("glProgramUniform4f"); + glad_glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)load("glProgramUniform1iv"); + glad_glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)load("glProgramUniform2iv"); + glad_glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)load("glProgramUniform3iv"); + glad_glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)load("glProgramUniform4iv"); + glad_glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)load("glProgramUniform1uiv"); + glad_glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)load("glProgramUniform2uiv"); + glad_glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)load("glProgramUniform3uiv"); + glad_glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)load("glProgramUniform4uiv"); + glad_glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)load("glProgramUniform1fv"); + glad_glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)load("glProgramUniform2fv"); + glad_glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)load("glProgramUniform3fv"); + glad_glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)load("glProgramUniform4fv"); + glad_glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)load("glProgramUniformMatrix2fv"); + glad_glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)load("glProgramUniformMatrix3fv"); + glad_glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)load("glProgramUniformMatrix4fv"); + glad_glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)load("glProgramUniformMatrix2x3fv"); + glad_glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)load("glProgramUniformMatrix3x2fv"); + glad_glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)load("glProgramUniformMatrix2x4fv"); + glad_glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)load("glProgramUniformMatrix4x2fv"); + glad_glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)load("glProgramUniformMatrix3x4fv"); + glad_glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)load("glProgramUniformMatrix4x3fv"); + glad_glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)load("glValidateProgramPipeline"); + glad_glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)load("glGetProgramPipelineInfoLog"); + glad_glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)load("glBindImageTexture"); + glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); + glad_glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)load("glMemoryBarrier"); + glad_glMemoryBarrierByRegion = (PFNGLMEMORYBARRIERBYREGIONPROC)load("glMemoryBarrierByRegion"); + glad_glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)load("glTexStorage2DMultisample"); + glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); + glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); + glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); + glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); + glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)load("glBindVertexBuffer"); + glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)load("glVertexAttribFormat"); + glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)load("glVertexAttribIFormat"); + glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)load("glVertexAttribBinding"); + glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)load("glVertexBindingDivisor"); +} +static void load_GL_ES_VERSION_3_2(GLADloadproc load) { + if(!GLAD_GL_ES_VERSION_3_2) return; + glad_glBlendBarrier = (PFNGLBLENDBARRIERPROC)load("glBlendBarrier"); + glad_glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)load("glCopyImageSubData"); + glad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)load("glDebugMessageControl"); + glad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)load("glDebugMessageInsert"); + glad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)load("glDebugMessageCallback"); + glad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)load("glGetDebugMessageLog"); + glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)load("glPushDebugGroup"); + glad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)load("glPopDebugGroup"); + glad_glObjectLabel = (PFNGLOBJECTLABELPROC)load("glObjectLabel"); + glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)load("glGetObjectLabel"); + glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)load("glObjectPtrLabel"); + glad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)load("glGetObjectPtrLabel"); + glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv"); + glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); + glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); + glad_glBlendEquationi = (PFNGLBLENDEQUATIONIPROC)load("glBlendEquationi"); + glad_glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC)load("glBlendEquationSeparatei"); + glad_glBlendFunci = (PFNGLBLENDFUNCIPROC)load("glBlendFunci"); + glad_glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC)load("glBlendFuncSeparatei"); + glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); + glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); + glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); + glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); + glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); + glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); + glad_glPrimitiveBoundingBox = (PFNGLPRIMITIVEBOUNDINGBOXPROC)load("glPrimitiveBoundingBox"); + glad_glGetGraphicsResetStatus = (PFNGLGETGRAPHICSRESETSTATUSPROC)load("glGetGraphicsResetStatus"); + glad_glReadnPixels = (PFNGLREADNPIXELSPROC)load("glReadnPixels"); + glad_glGetnUniformfv = (PFNGLGETNUNIFORMFVPROC)load("glGetnUniformfv"); + glad_glGetnUniformiv = (PFNGLGETNUNIFORMIVPROC)load("glGetnUniformiv"); + glad_glGetnUniformuiv = (PFNGLGETNUNIFORMUIVPROC)load("glGetnUniformuiv"); + glad_glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC)load("glMinSampleShading"); + glad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)load("glPatchParameteri"); + glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); + glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); + glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); + glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); + glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); + glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); + glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); + glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); + glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); + glad_glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC)load("glTexBufferRange"); + glad_glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)load("glTexStorage3DMultisample"); +} static void load_GL_ANGLE_instanced_arrays(GLADloadproc load) { if(!GLAD_GL_ANGLE_instanced_arrays) return; glad_glDrawArraysInstancedANGLE = (PFNGLDRAWARRAYSINSTANCEDANGLEPROC)load("glDrawArraysInstancedANGLE"); @@ -1745,10 +1966,32 @@ static void load_GL_EXT_multisampled_render_to_texture(GLADloadproc load) { glad_glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)load("glRenderbufferStorageMultisampleEXT"); glad_glFramebufferTexture2DMultisampleEXT = (PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC)load("glFramebufferTexture2DMultisampleEXT"); } +static void load_GL_EXT_texture_border_clamp(GLADloadproc load) { + if(!GLAD_GL_EXT_texture_border_clamp) return; + glad_glTexParameterIivEXT = (PFNGLTEXPARAMETERIIVEXTPROC)load("glTexParameterIivEXT"); + glad_glTexParameterIuivEXT = (PFNGLTEXPARAMETERIUIVEXTPROC)load("glTexParameterIuivEXT"); + glad_glGetTexParameterIivEXT = (PFNGLGETTEXPARAMETERIIVEXTPROC)load("glGetTexParameterIivEXT"); + glad_glGetTexParameterIuivEXT = (PFNGLGETTEXPARAMETERIUIVEXTPROC)load("glGetTexParameterIuivEXT"); + glad_glSamplerParameterIivEXT = (PFNGLSAMPLERPARAMETERIIVEXTPROC)load("glSamplerParameterIivEXT"); + glad_glSamplerParameterIuivEXT = (PFNGLSAMPLERPARAMETERIUIVEXTPROC)load("glSamplerParameterIuivEXT"); + glad_glGetSamplerParameterIivEXT = (PFNGLGETSAMPLERPARAMETERIIVEXTPROC)load("glGetSamplerParameterIivEXT"); + glad_glGetSamplerParameterIuivEXT = (PFNGLGETSAMPLERPARAMETERIUIVEXTPROC)load("glGetSamplerParameterIuivEXT"); +} static void load_GL_NV_instanced_arrays(GLADloadproc load) { if(!GLAD_GL_NV_instanced_arrays) return; glad_glVertexAttribDivisorNV = (PFNGLVERTEXATTRIBDIVISORNVPROC)load("glVertexAttribDivisorNV"); } +static void load_GL_OES_texture_border_clamp(GLADloadproc load) { + if(!GLAD_GL_OES_texture_border_clamp) return; + glad_glTexParameterIivOES = (PFNGLTEXPARAMETERIIVOESPROC)load("glTexParameterIivOES"); + glad_glTexParameterIuivOES = (PFNGLTEXPARAMETERIUIVOESPROC)load("glTexParameterIuivOES"); + glad_glGetTexParameterIivOES = (PFNGLGETTEXPARAMETERIIVOESPROC)load("glGetTexParameterIivOES"); + glad_glGetTexParameterIuivOES = (PFNGLGETTEXPARAMETERIUIVOESPROC)load("glGetTexParameterIuivOES"); + glad_glSamplerParameterIivOES = (PFNGLSAMPLERPARAMETERIIVOESPROC)load("glSamplerParameterIivOES"); + glad_glSamplerParameterIuivOES = (PFNGLSAMPLERPARAMETERIUIVOESPROC)load("glSamplerParameterIuivOES"); + glad_glGetSamplerParameterIivOES = (PFNGLGETSAMPLERPARAMETERIIVOESPROC)load("glGetSamplerParameterIivOES"); + glad_glGetSamplerParameterIuivOES = (PFNGLGETSAMPLERPARAMETERIUIVOESPROC)load("glGetSamplerParameterIuivOES"); +} static int find_extensionsGLES2(void) { if (!get_exts()) return 0; GLAD_GL_ANGLE_instanced_arrays = has_ext("GL_ANGLE_instanced_arrays"); @@ -1757,6 +2000,7 @@ static int find_extensionsGLES2(void) { GLAD_GL_EXT_discard_framebuffer = has_ext("GL_EXT_discard_framebuffer"); GLAD_GL_EXT_instanced_arrays = has_ext("GL_EXT_instanced_arrays"); GLAD_GL_EXT_multisampled_render_to_texture = has_ext("GL_EXT_multisampled_render_to_texture"); + GLAD_GL_EXT_texture_border_clamp = has_ext("GL_EXT_texture_border_clamp"); GLAD_GL_EXT_texture_compression_bptc = has_ext("GL_EXT_texture_compression_bptc"); GLAD_GL_EXT_texture_compression_dxt1 = has_ext("GL_EXT_texture_compression_dxt1"); GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc"); @@ -1765,7 +2009,9 @@ static int find_extensionsGLES2(void) { GLAD_GL_KHR_debug = has_ext("GL_KHR_debug"); GLAD_GL_KHR_texture_compression_astc_ldr = has_ext("GL_KHR_texture_compression_astc_ldr"); GLAD_GL_NV_instanced_arrays = has_ext("GL_NV_instanced_arrays"); + GLAD_GL_NV_texture_border_clamp = has_ext("GL_NV_texture_border_clamp"); GLAD_GL_OES_compressed_ETC1_RGB8_texture = has_ext("GL_OES_compressed_ETC1_RGB8_texture"); + GLAD_GL_OES_texture_border_clamp = has_ext("GL_OES_texture_border_clamp"); free_exts(); return 1; } @@ -1808,9 +2054,11 @@ static void find_coreGLES2(void) { max_loaded_major = major; max_loaded_minor = minor; GLAD_GL_ES_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; GLAD_GL_ES_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; - if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 0)) { + GLAD_GL_ES_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; + GLAD_GL_ES_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; + if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 2)) { max_loaded_major = 3; - max_loaded_minor = 0; + max_loaded_minor = 2; } } @@ -1822,14 +2070,18 @@ int gladLoadGLES2Loader(GLADloadproc load) { find_coreGLES2(); load_GL_ES_VERSION_2_0(load); load_GL_ES_VERSION_3_0(load); + load_GL_ES_VERSION_3_1(load); + load_GL_ES_VERSION_3_2(load); if (!find_extensionsGLES2()) return 0; load_GL_ANGLE_instanced_arrays(load); load_GL_EXT_discard_framebuffer(load); load_GL_EXT_instanced_arrays(load); load_GL_EXT_multisampled_render_to_texture(load); + load_GL_EXT_texture_border_clamp(load); load_GL_KHR_debug(load); load_GL_NV_instanced_arrays(load); + load_GL_OES_texture_border_clamp(load); return GLVersion.major != 0 || GLVersion.minor != 0; } diff --git a/3rdparty/glm b/3rdparty/glm index cc98465e350..33b4a621a69 160000 --- a/3rdparty/glm +++ b/3rdparty/glm @@ -1 +1 @@ -Subproject commit cc98465e3508535ba8c7f6208df934c156a018dc +Subproject commit 33b4a621a697a305bc3a7610d290677b96beb181 diff --git a/3rdparty/libplum b/3rdparty/libplum new file mode 160000 index 00000000000..48351aa24d3 --- /dev/null +++ b/3rdparty/libplum @@ -0,0 +1 @@ +Subproject commit 48351aa24d36eedbf30f8f73a0360b3f9af2dac8 diff --git a/3rdparty/miniupnp b/3rdparty/miniupnp deleted file mode 160000 index a5fd382e957..00000000000 --- a/3rdparty/miniupnp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a5fd382e9575a89f3ce00b8ce11f7c2e531d21db diff --git a/3rdparty/optional-lite/CMakeLists.txt b/3rdparty/optional-lite/CMakeLists.txt index e1d1d2078a2..d273c62dce7 100644 --- a/3rdparty/optional-lite/CMakeLists.txt +++ b/3rdparty/optional-lite/CMakeLists.txt @@ -1,6 +1,6 @@ # A very simple version of: https://github.com/martinmoene/optional-lite/blob/master/CMakeLists.txt -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.5...3.24) project( optional_lite diff --git a/3rdparty/optional-lite/include/nonstd/optional.hpp b/3rdparty/optional-lite/include/nonstd/optional.hpp index 5cac512cd02..85febc3dadf 100644 --- a/3rdparty/optional-lite/include/nonstd/optional.hpp +++ b/3rdparty/optional-lite/include/nonstd/optional.hpp @@ -12,7 +12,7 @@ #define NONSTD_OPTIONAL_LITE_HPP #define optional_lite_MAJOR 3 -#define optional_lite_MINOR 5 +#define optional_lite_MINOR 6 #define optional_lite_PATCH 0 #define optional_lite_VERSION optional_STRINGIFY(optional_lite_MAJOR) "." optional_STRINGIFY(optional_lite_MINOR) "." optional_STRINGIFY(optional_lite_PATCH) @@ -63,7 +63,7 @@ # endif #endif -// C++ language version detection (C++20 is speculative): +// C++ language version detection (C++23 is speculative): // Note: VC14.0/1900 (VS2015) lacks too much from C++14. #ifndef optional_CPLUSPLUS @@ -79,7 +79,8 @@ #define optional_CPP11_OR_GREATER_ ( optional_CPLUSPLUS >= 201103L ) #define optional_CPP14_OR_GREATER ( optional_CPLUSPLUS >= 201402L ) #define optional_CPP17_OR_GREATER ( optional_CPLUSPLUS >= 201703L ) -#define optional_CPP20_OR_GREATER ( optional_CPLUSPLUS >= 202000L ) +#define optional_CPP20_OR_GREATER ( optional_CPLUSPLUS >= 202002L ) +#define optional_CPP23_OR_GREATER ( optional_CPLUSPLUS >= 202300L ) // C++ language version (represent 98 as 3): @@ -788,7 +789,7 @@ union storage_t void construct_value( value_type && v ) { - ::new( value_ptr() ) value_type( std::move( v ) ); + ::new( const_cast(static_cast(value_ptr())) ) value_type( std::move( v ) ); } template< class... Args > @@ -800,13 +801,13 @@ union storage_t template< class... Args > void emplace( Args&&... args ) { - ::new( value_ptr() ) value_type( std::forward(args)... ); + ::new( const_cast(static_cast(value_ptr())) ) value_type( std::forward(args)... ); } template< class U, class... Args > void emplace( std::initializer_list il, Args&&... args ) { - ::new( value_ptr() ) value_type( il, std::forward(args)... ); + ::new( const_cast(static_cast(value_ptr())) ) value_type( il, std::forward(args)... ); } #endif @@ -1554,7 +1555,7 @@ class optional void initialize( V && value ) { assert( ! has_value() ); - contained.construct_value( std::move( value ) ); + contained.construct_value( std::forward( value ) ); has_value_ = true; } diff --git a/3rdparty/quickjs-wz b/3rdparty/quickjs-wz index 6b630270b1f..a63918100ab 160000 --- a/3rdparty/quickjs-wz +++ b/3rdparty/quickjs-wz @@ -1 +1 @@ -Subproject commit 6b630270b1f430012ce0aa0a0079b9b618bbaa7d +Subproject commit a63918100abdb309deca1f554f32dab4edce4b0a diff --git a/3rdparty/utf8proc b/3rdparty/utf8proc index 1cb28a66ca7..dce38103bed 160000 --- a/3rdparty/utf8proc +++ b/3rdparty/utf8proc @@ -1 +1 @@ -Subproject commit 1cb28a66ca79a0845e99433fd1056257456cef8b +Subproject commit dce38103bed462c4f87bfcdb80172ec22312e595 diff --git a/3rdparty/utfcpp b/3rdparty/utfcpp index 6f0e7c78652..6be08bbea14 160000 --- a/3rdparty/utfcpp +++ b/3rdparty/utfcpp @@ -1 +1 @@ -Subproject commit 6f0e7c7865208f2a6b882a7e138584beb1b6b2fd +Subproject commit 6be08bbea14ffa0a5c594257fb6285a054395cd7 diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ff20101610..d845d7c5b91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ unset(_OLD_CMAKE_MODULE_PATH) project(warzone2100) if(${CMAKE_VERSION} VERSION_LESS 3.12) - cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) endif() include(CMakeDependentOption) @@ -34,8 +34,8 @@ endif() OPTION(WZ_PROFILING_NVTX "Add NVTX-based profiling instrumentation to the code" OFF) if(CMAKE_SYSTEM_NAME MATCHES "Windows" OR CMAKE_SYSTEM_NAME MATCHES "Darwin" OR CMAKE_SYSTEM_NAME MATCHES "Linux") - # Only supported on Windows, macOS, and Linux - OPTION(ENABLE_DISCORD "Enable Discord presence / join integration" ON) + # Only supported on Windows, macOS, and Linux - requires additional configuration, so off by default + OPTION(ENABLE_DISCORD "Enable Discord presence / join integration" OFF) endif() set(WZ_DISTRIBUTOR "UNKNOWN" CACHE STRING "Name of distributor compiling this package") @@ -131,7 +131,7 @@ endif() if(CMAKE_SYSTEM_NAME MATCHES "Darwin") # Enable macOS-specific find scripts - list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/macosx/cmake") + list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/platforms/macos/cmake") # Workaround for framework header conflicts with find_package # - Common issue when Mono.framework is installed, since it contains headers for libpng (etc) @@ -425,17 +425,21 @@ macro(CONFIGURE_WZ_COMPILER_WARNINGS) # Apple LLVM - Code Generation set(CMAKE_XCODE_ATTRIBUTE_GCC_NO_COMMON_BLOCKS YES) # -fno-common + # Custom CFLAGS + list(APPEND WZ_TARGET_ADDITIONAL_C_BUILD_FLAGS -fno-math-errno -fno-trapping-math) + list(APPEND WZ_TARGET_ADDITIONAL_CXX_BUILD_FLAGS -fno-math-errno -fno-trapping-math) + # Apple Clang - Custom Compiler Flags # Custom Warning Flags (for which an Xcode attribute is not available) - set(CMAKE_XCODE_ATTRIBUTE_WARNING_CFLAGS "-Wall -Wextra -Wcast-align -Wwrite-strings -Wpointer-arith") + set(wz_target_only_XCODE_ATTRIBUTE_WARNING_CFLAGS "-Wall -Wextra -Wcast-align -Wwrite-strings -Wpointer-arith") # Custom Disabling Warning Flags (which are required because of warning flags specified above # and by CMake's Xcode project generator) - set(CMAKE_XCODE_ATTRIBUTE_WARNING_CFLAGS "${CMAKE_XCODE_ATTRIBUTE_WARNING_CFLAGS} -Wno-sign-compare") - set(CMAKE_XCODE_ATTRIBUTE_WARNING_CFLAGS "${CMAKE_XCODE_ATTRIBUTE_WARNING_CFLAGS} -Wno-unused-parameter") + set(wz_target_only_XCODE_ATTRIBUTE_WARNING_CFLAGS "${wz_target_only_XCODE_ATTRIBUTE_WARNING_CFLAGS} -Wno-sign-compare") + set(wz_target_only_XCODE_ATTRIBUTE_WARNING_CFLAGS "${wz_target_only_XCODE_ATTRIBUTE_WARNING_CFLAGS} -Wno-unused-parameter") # Custom Warning Flags - No Error Tweaks - set(CMAKE_XCODE_ATTRIBUTE_WARNING_CFLAGS "${CMAKE_XCODE_ATTRIBUTE_WARNING_CFLAGS} -Wno-error=deprecated-declarations") + set(wz_target_only_XCODE_ATTRIBUTE_WARNING_CFLAGS "${wz_target_only_XCODE_ATTRIBUTE_WARNING_CFLAGS} -Wno-error=deprecated-declarations") set(_supported_cxx_compiler_flags "") @@ -443,7 +447,9 @@ macro(CONFIGURE_WZ_COMPILER_WARNINGS) check_compiler_flags_output("-Werror -Wno-shadow-field-in-constructor -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-shadow-field-in-constructor" OUTPUT_VARIABLE _supported_cxx_compiler_flags APPEND) message( STATUS "Supported additional CXX compiler_flags=${_supported_cxx_compiler_flags}" ) - set(CMAKE_XCODE_ATTRIBUTE_WARNING_CFLAGS "${CMAKE_XCODE_ATTRIBUTE_WARNING_CFLAGS} ${_supported_cxx_compiler_flags}") + set(wz_target_only_XCODE_ATTRIBUTE_WARNING_CFLAGS "${wz_target_only_XCODE_ATTRIBUTE_WARNING_CFLAGS} ${_supported_cxx_compiler_flags}") + + list(APPEND WZ_TARGET_ADDITIONAL_PROPERTIES XCODE_ATTRIBUTE_WARNING_CFLAGS "${wz_target_only_XCODE_ATTRIBUTE_WARNING_CFLAGS}") # Apple Clang - Preprocessing set(CMAKE_XCODE_ATTRIBUTE_ENABLE_STRICT_OBJC_MSGSEND YES) @@ -529,8 +535,8 @@ macro(CONFIGURE_WZ_COMPILER_WARNINGS) elseif(CMAKE_SYSTEM_NAME MATCHES "Emscripten") - list(APPEND WZ_TARGET_ADDITIONAL_C_BUILD_FLAGS -fno-common -fno-math-errno -fno-rounding-math -ffp-model=precise) - list(APPEND WZ_TARGET_ADDITIONAL_CXX_BUILD_FLAGS -fno-common -fno-math-errno -fno-rounding-math -ffp-model=precise) + list(APPEND WZ_TARGET_ADDITIONAL_C_BUILD_FLAGS -fno-common -fno-math-errno -fno-trapping-math -fno-rounding-math -ffp-model=precise) + list(APPEND WZ_TARGET_ADDITIONAL_CXX_BUILD_FLAGS -fno-common -fno-math-errno -fno-trapping-math -fno-rounding-math -ffp-model=precise) else() # GCC, Clang, etc @@ -559,6 +565,10 @@ macro(CONFIGURE_WZ_COMPILER_WARNINGS) check_compiler_flags_output("-Werror -fno-math-errno -Wno-error=cpp" COMPILER_TYPE C OUTPUT_FLAGS "-fno-math-errno" OUTPUT_VARIABLE _supported_c_compiler_flags APPEND) check_compiler_flags_output("-Werror -fno-math-errno -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-fno-math-errno" OUTPUT_VARIABLE _supported_cxx_compiler_flags APPEND) + # Enable -fno-trapping-math (if supported) + check_compiler_flags_output("-Werror -fno-trapping-math -Wno-error=cpp" COMPILER_TYPE C OUTPUT_FLAGS "-fno-trapping-math" OUTPUT_VARIABLE _supported_c_compiler_flags APPEND) + check_compiler_flags_output("-Werror -fno-trapping-math -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-fno-trapping-math" OUTPUT_VARIABLE _supported_cxx_compiler_flags APPEND) + # -Wcast-align (GCC 3.4+, Clang 3.2+) check_compiler_flags_output("-Werror -Wcast-align -Wno-error=cpp" COMPILER_TYPE C OUTPUT_FLAGS "-Wcast-align" OUTPUT_VARIABLE _supported_c_compiler_flags APPEND) check_compiler_flags_output("-Werror -Wcast-align -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wcast-align" OUTPUT_VARIABLE _supported_cxx_compiler_flags APPEND) @@ -856,26 +866,6 @@ CHECK_IS_ABSOLUTE_PATH(WZ_DATADIR WZ_DATADIR_ISABSOLUTE) CHECK_IS_ABSOLUTE_PATH(WZ_LOCALEDIR WZ_LOCALEDIR_ISABSOLUTE) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/wz2100-generated-config.h) -# Attempt to find Miniupnpc (minimum supported API version = 9) -# NOTE: This is not available on every platform / distro -find_package(Miniupnpc 9) -if(MINIUPNPC_FOUND) - set(WZ_USE_IMPORTED_MINIUPNPC ON) -else() - message(STATUS "Using in-tree Miniupnpc") - set(WZ_USE_IMPORTED_MINIUPNPC OFF) - SET(UPNPC_BUILD_STATIC ON CACHE BOOL "miniupnpc - Build static library" FORCE) - SET(UPNPC_BUILD_SHARED OFF CACHE BOOL "miniupnpc - Build shared library" FORCE) - SET(UPNPC_BUILD_TESTS OFF CACHE BOOL "miniupnpc - Build tests" FORCE) - SET(UPNPC_BUILD_SAMPLE OFF CACHE BOOL "miniupnpc - Build samples" FORCE) - SET(UPNPC_NO_INSTALL TRUE CACHE BOOL "miniupnpc - Disable installation" FORCE) - add_subdirectory(3rdparty/miniupnp/miniupnpc) - set_property(TARGET libminiupnpc-static PROPERTY FOLDER "3rdparty") - if(CMAKE_SYSTEM_NAME MATCHES "Windows" AND (MINGW OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND NOT MSVC))) - target_compile_options(miniupnpc-private INTERFACE -Wno-macro-redefined) - endif() -endif() - add_subdirectory(3rdparty) # Determine distribution license @@ -895,7 +885,6 @@ add_subdirectory(build_tools) add_subdirectory(data) add_subdirectory(lib) add_subdirectory(doc) -add_subdirectory(icons) add_subdirectory(po) add_subdirectory(src) add_subdirectory(pkg) diff --git a/COPYING.NONGPL b/COPYING.NONGPL index e64e81157fc..db182c4c955 100644 --- a/COPYING.NONGPL +++ b/COPYING.NONGPL @@ -13,6 +13,8 @@ data/base/texpages/page-25-sky-urban.png - MIT, Various Authors, See: https://github.com/HowardHinnant/date/blob/master/include/date/date.h 3rdparty/discord-rpc/* - MIT, Copyright 2017 Discord, Inc. +3rdparty/expected/* + - CC0 1.0 Universal, Written in 2017 by Sy Brand (tartanllama@gmail.com, @TartanLlama) 3rdparty/json/* - MIT, Copyright (c) 2013-2018 Niels Lohmann 3rdparty/LRUCache11/* @@ -23,8 +25,8 @@ data/base/texpages/page-25-sky-urban.png - BSD, Copyright (c) 1998-2010, Brian Gladman, Worcester, UK. (https://github.com/BrianGladman/sha) 3rdparty/inih/* - BSD, Copyright (C) 2009-2020, Ben Hoyt (https://github.com/benhoyt/inih) -3rdparty/miniupnp/* - - BSD, Copyright (c) 2005-2017, Thomas BERNARD (http://miniupnp.free.fr) +3rdparty/libplum/* + - MPL 2.0, Copyright (c) 2020-2021, Paul-Louis Ageneau (https://github.com/paullouisageneau/libplum) 3rdparty/optional-lite/* - Boost Software License 1.0, Copyright (c) 2014-2018 Martin Moene (https://github.com/martinmoene/optional-lite) 3rdparty/quickjs/* @@ -63,6 +65,8 @@ data/base/images/frontend/image_info_circle.png data/base/images/frontend/image_check_square_fill.png data/base/images/frontend/image_check_square_empty.png data/base/images/frontend/image_arrow_undo.png +data/base/images/frontend/image_sidebar_list.png +data/base/images/intfac/image_sidebar_list.png - MIT License - Copyright (c) 2019-2024 The Bootstrap Authors (https://github.com/twbs/icons/blob/main/LICENSE) data/base/images/intfac/image_volume_mute.png data/base/images/intfac/image_volume_up.png @@ -93,6 +97,8 @@ lib/ivis_opengl/3rdparty/vk_mem_alloc.h - MIT License, Copyright (c) 2017-2020 Advanced Micro Devices, Inc. (https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator) lib/ivis_opengl/3rdparty/vkh_*.* - MIT License, Copyright (c) 2019-2020 past-due (https://github.com/past-due/vulkan-helpers) +lib/netplay/3rdparty/miniupnp/* + - BSD, Copyright (c) 2005-2024, Thomas BERNARD (https://github.com/miniupnp/miniupnp) lib/sound/3rdparty/opusfile/* - BSD 3-Clause License, Copyright (c) 1994-2020 Xiph.Org Foundation and contributors (https://github.com/xiph/opusfile) src/3rdparty/gsl_finally.h diff --git a/ChangeLog b/ChangeLog index 37fa07c13a4..5b51f26315f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,17 +1,249 @@ +2024-09-12: Version 4.5.3: + * General: + * Change: Give experience when squishing a scavenger (commit:736fae8e874744a7156de54ad4330cb22ab9ec01, #4046) + * Fix: Various potential crashes (too many commits, #4050, #4051, #4053, #4063) + * Graphics: + * Fix: Reset object animation state in a few places (commit:84b93d9c0b12e924a2aabaf35ce02d5124485df1, #4049) + * Fix: Additional graphics backend fallback options for macOS and Linux (commit:347b7d07835afe1ecf91fd4750890c67e6e3c1b4, #4052) + * Campaign: + * Fix: Visibility of units restored during limbo missions (commit:22fa9439c8515b52fd816323f9f0a2a0fe985b7e, #4045) + * Fix: Reset structure functionality references to objects when going offworld (commit:1de0822cdc1c3f1f650b1c531ebce2fe03918bf0, #4047) + * Fix: Fill VTOLs when going offworld (commit:87ae96c79799ebe066b5213ea3d49891b3a8a1eb, #4048) + * Fix: Update Remastered balance (too many commits, #4056) + * Fix: Update Reclamation addon campaign (commit:9f2ca2e418ed8dfdb9488cb0e11d052fdd3aa1b0, #4059) + * Fix: Update Fractured Kingdom addon campaign (commit:c980864ed7a920f1419d4027633438276da85d6f, #4059) + * Translations: + * Change: Numerous translation updates (commit:c0b1156087bc8654cc3d1f90fa588ff79769c7c7, #3996) + +2024-08-13: Version 4.5.2: + * General: + * Fix: Make "Reset Pitch" keybind consistent with initial starting pitch (commit:9dd8289e0dff40c2c61b410c924bb9f118b068cf, #4007) + * Fix: Pending research states when loading savegames (too many commits, #4025) + * Fix: Units set to hold position don't fire (commit:fa5922fd81af587ed9539240bd382e3e19d3a9ea, #4032) + * Fix: Various potential crashes (too many commits, #4020, #4021, #4033, #4036, #4037) + * Graphics: + * Fix: Improve effects blending when fog is enabled (too many commits, #4017) + * Fix: Improvements to groups UI (too many commits, #4016) + * Campaign: + * Fix: Commander rank thresholds (commit:2db8407581657cf341caf769dddc1f14d5024718, #4026) + * Fix: Update Fractured Kingdom addon campaign (commit:2e51e96bebce2c7796705105f3b3862bf9371461, #4038) + * Multiplayer: + * Fix: UPnP compatibility with certain routers (too many commits, #4023) + * AI + * Fix: Use eventGameLoaded for Cobra AI group initialization (commit:7801e80174efd8d20d0f0cab4177a185dcba7191, #4040) + +2024-07-08: Version 4.5.1: + * General: + * Fix: Various issues with special research topics, "give all" cheat (too many commits, #3961) + * Fix: Log failures preventing new terrain renderer use and warn user (commit:90b09a45ac6ecff6be5ffd4eb5c65c38849a3360, #3977) + * Fix: Display information for loading errors caused by mods (commit:b2e54ab549cc4fd34560c3d1d933312d42cfe860, #3978) + * Fix: Improve handling of mod loading failures (too many commits, #3981) + * Fix: wzapi: Avoid undefined behavior handling nan (too many commits, #3986) + * Fix: Various potential crashes (too many commits, #3959, #3967, #3971, #3974, #3976) + * Campaign: + * Fix: Propulsion stats in Classic balance (commit:06d1c93d8e11008492776fb86136bca922294a2c, #3961) + * Multiplayer: + * Fix: Various netplay log message & state handling issues (too many commits, #3960, #3980) + * Fix: UPnP compatibility with certain routers (too many commits, #3964, #3987, #3994) + * Fix: Support auto lag kick for spectators in lobby (commit:2d4ce35607a89961340370b0953713c92ec3ffd3, #3997) + * Change: GameStoryLogger: Log cheated var (commit:f0f280eaadd314a58aab1f54cc2e3aad9917bbdd, #3975) + * Balance MP: + * Change: Reduce prices of certain defensive structures and buff some towers and hardpoints (commit:8164d3bbcdc26320c6efb48125f2b4fa19e3fb69, #3952) + * Change: Adjust research cost of all defensive structures, except for artillery and bastions (commit:4e2578242c3359ee102669407181f9ad0c752e90, #3965) + * Other: + * Fix: Update autohost docs & examples (too many commits, #3983, #3984) + +2024-07-01: Version 4.5.0: + * General: + * Fix: Exclude retreating droids from formation speed limiting (commit:962136a52487178fb6085cd3fa1a46028173c1a8, #3943) + * Fix: GameStoryLogger: Generate final frame (commit:406aa3737d89bbb31796c1bd4112a158067194da, #3944) + * Fix: missionMoveTransporterOffWorld: Clear additional state (commit:976642896b2b6048b33720a496cb93ff8d750936, #3945) + * Fix: Only process structure group assignment if no droids are also selected (commit:01f80d8461cbdbabfcc3f4cdc965520e79ba6f98, #3949) + * Fix: Prevent artillery units under firesupport trying to ram targets (commit:badbf21afa3b22cf0319ad147b2fb26b21caf8d4, #3950) + * Campaign: + * Change: Some buffs for campaign weapons (commit:38f8e98902eaad204c4cca52263644f8509ad617, #3946) + * Other: + * Fix: Emscripten build info (too many commits, #3951) + +2024-06-28: Version 4.5.0-beta2: + * General: + * Fix: auxStructureNonblocking() for script-queued object removal (commit:14b50356ff4fc61d7bee4b509053c7fc369a65da, #3912) + * Fix: Script map max tile height handling (commit:b2865de38bc2067ea98bf310130da7530b81589f, commit:7a74975d0381c8ec13bb7c6e1c582863aec1531a, #3917) + * Fix: Improve checkReferences & object destruction logging (too many commits, #3916, #3938) + * Fix: Prevent underflow in getMissionTime() calculation (commit:ad280cc7c4dae19c41651490a557229c64b7bf94, commit:893a3b4a6caa70a3c21af7f1f3f9b7bd411e3152, #3918) + * Fix: Additional checks for AI chooser handling (commit:3854a97098e368f5051d9d233d75049555535d38, #3913) + * Fix: Create un-versioned mods/campaign directory (commit:5a978fcd1843c3e090111ad9ad6f636e50682281, #3924) + * Fix: Clip difficulty modifiers to always at least be 1 (commit:0d36fa7a18cea89f74c1b9e545e2388b881c5c37, #3920) + * Fix: structure.json: Add support for new "baseStructDamageExpLevel" option (commit:1c46b8980636c786e4a39c06d4e586f2c022d093, #3927) + * Fix: Handling pause states, and guide screen pausing (too many commits, #3930) + * Fix: Close button on multimenu form (commit:0247d2988f6113ea1bbcd08e8420e7cffc45f6e7, #3923) + * Fix: Guide Topics: Use different designs for Sensor/Commander guide units to avoid spoilers (commit:17b5ebf35aa1e4fc9fcb6dd965f412ae074ceea3, #3935) + * Fix: Droid map visibility after returning to home base from fresh away mission saveload (commit:aace08b1c96fc86321441d7b624144aaca11d5b4, #3934) + * Fix: Check if inside scroll limits before repair/RTB (commit:93a63ced26a9a05e909162264be1d229f4222481, #3936) + * Fix: Various potential crashes (too many commits, #3914, #3929) + * Graphics: + * Fix: Snap muzzle graphics rotation for invisible weapons (commit:4aa75471a7872562ebd4397e4e1bdfa39ce9663d, #3926) + * Campaign: + * Add: "PS1 Modifiers" campaign tweak option (commit:2dd38cb06914e4879a6a43d4c02f524a0bc3b157, #3920) + * Change: Move level loading codes into library (commit:4c6119ebe83e4a34809e28b8495cc90de4799cc8, commit:8609b3cabc6a1678e714990ba0f13339441cd04e, #3919) + * Multiplayer: + * Fix: Silence certain spectator-related messages (commit:3d3175d9542d09c73df9d85917ee36a6ae72e629, #3922) + * Fix: Send auto-kick messages as system messages (commit:8ce7354847ac9b38a23fda164e4ad43cba906fd9, #3932) + * Change: GameStoryLogger: Add player identity to FixedPlayerAttributes (commit:a1c4bb8512697436d00b537d4e6bf856cad1155c, #3921) + * Balance MP: + * Change: Revert 4.5.0-beta1 structure update for MP (commit:102e81cb7f63d9b712c97cc3a591b36c5bbd8f40e, #3927) + * Change: Decrease HP of Plasmite Flamer (commit:be0e48ac3f95a5e2d9e90fb16cbcbdf9e6b148f4, #3933) + +2024-06-23: Version 4.5.0-beta1: + * General: + * Add: Emscripten support (too many commits, #3613, #3630, #3643, #3730, #3743) + * Add: Alert the player to the Lassat being ready via text and audio cues (commit:83f03f31ec40e8d5d55931b41155b1aa65535abd, #3738) + * Add: Automatic assignment of units produced in factories to groups (too many commits, #3628, #3804, #3806) + * Add: Add an in-game guide viewable in the escape menu and teaching the player fundamentals throughout the campaign; Various internal UI improvements; Add guide.js to libcampaign (too many commits, #3836, #3863, #3865, #3876, #3893) + * Add: Formation speed-limiting (too many commits, #3904) + * Fix: Reset pitch on moving VTOLs after saveload (commit:8346cc2c6356f03deeda66f71aaca6e1405e9393, #3555) + * Fix: Return to base/LZ when set to retreat at a health level without HQ or repair units/structures present (commit:6a6832aca59e55b43c654d73e3692804c94500e6, commit:dfb2aea8a6d4b24b78fc2631cc99cefc9ebed4bd, #3557) + * Fix: Do not override saved camera position in skirmish saves (commit:36f970660b09d307a3303740595d3ccc7a598c74, #3558) + * Fix: Calculate weapon pitch from turret base to prevent wobbly effect on turret when very close to target (commit:e39e763259ca55539ad522159b13383270d37f14, #3538) + * Fix: Fix damage formula against structures and features incorrectly using Green rank damage reductions since v2.0.10 (commit:a19141ce7e58deaf35494e081da582321d3f9cd9, #3361) + * Fix: Fix fully armed VTOLs attached to sensors sitting down near former targets (commit:86bb59be4e2fed457f89387f8555b53a116e78d4, #3573) + * Fix: Various potential crashes (too many commits, #3646, #3647, #3657, #3789) + * Fix: Prevent scouting/patrol allowing CB droids observing something (commit:748df17934f2614811df7ed374f1ab48083f9933, #3685) + * Fix: Prevent droidUpdateBuild() passing a negative buildRate to buildStructure(), causing allies to delete your buildings sometimes (commit:d04f77d3707f9e8c38d9de64e8062e7cbfa65848, #3744) + * Fix: Prevent in-game menu saves changing the challenge score data with the wrong name. Thus not showing score on the challenge tip (commit:af14f626177bb190c164fbc7d9d8164c3472f24d, #3763) + * Fix: When upgrade change value is negative, use iDivFloor() to floor values (commit:2f00d6def39a0fad713b8210dd7d82268bbe7728, #3795) + * Fix: research.json: Add support for new "calculationMode" option to avoid accumulated rounding errors (commit:43e8fb0e1dcb76663444b317fc179de2ab068df9, #3796) + * Fix: Load saved research state before any droids or structures are loaded fixing research attribute re-application issues for home map objects (commit:ca7c20dde8769aeb373c78f77d1a32b409fd0312, #3816) + * Fix: Prevent sudden tab jumping in the build menu when trucks start a new structure (commit:4b17d7c439dbf9154dfc9bb82b4a45e519cbe2f8, commit:ec5362fc2598b1a625def9a0b98a898755812fbe, #3817) + * Fix: Enforce Weapon Pitch Limits + Fix Weapon "Unlatching" (commit:ce0014566e01034e0faa2afc73ac512bfe6676d4, #3821) + * Fix: Improve functionality of favorite buildings (commit:30ae267472c855127f534f4bdae576847cd13ab8, #3841) + * Change: Teleport units next to Nexus Links (commit:78f09c0a8f0dc3eaf36e4795366902e02eb4e0b7, #3556) + * Graphics: + * Add: Support for per pixel point lights (too many commits, #3587, #3610, #3614, #3672, 3784) + * Add: Add ability to reload model textures at runtime in the debugger (commit:d82483a1295c36b228d83ed2db1e17e1584887a4, commit:86b7b0104431004b34d4505113c97509035ec05a, #3599) + * Add: Let trees cast shadows and improve tree models. Plant them better to the terrain. (too many commits, #3679) + * Add: Add Collective/Nexus faction Forts, Collective mortar pits and bunkers, Collective T/L shaped walls, fix seams on Nexus bunkers (commit:130be3890753a321fac90997f6fa971080031e4d, #3822) + * Add: Give the Assault Gunner cyborg a unique weapon model based off the Assault Gun (commit:82e5de679df55c3a6f900aae6183b0aff9b083ae, #3875) + * Add: New light cyborg variants of the HVC and TK for Beta campaign (commit:5c137c5dea90992e2f7eceab6f89e85bce426605, commit:6b9e442095b5a96415faafe71f48099e2fa4fab8, #3875) + * Add: OpenGL: Detect GL_CLAMP_TO_BORDER extensions; glad: Add OpenGL ES 3.1 + 3.2 (too many commits, #3896) + * Fix: Rendering order of translucent models (i.e. baseplates) vs additive effects (commit:69681de090420cade30eddefc4e862fa7e99652b, #3614) + * Fix: Limit height of scrollable lists, notably fixing translation link being barely clickable (commit:9426f096a5e865b6c5a17d54bf648ef0925ec738, #3621) + * Fix: Fix object animation precision so as to prevent shake effect (commit:34b751620c9984580ce556e379ac585449fe400a, #3652) + * Fix: Fix vertex-winding between Blender PIE addon and Warzone 2100 (commit:4f78fe6c4923ab8a3cba5b3ef3f7be15e42a3f73, #3666) + * Fix: Normal terrain quality water + fog, adjust blending (commit:715d12d1f7da327f64b5d3333c918acd638bb3ab, #3693) + * Fix: Fix tiles under skyscrapers not changing to rubble (too many commits, #3731) + * Fix: Fix bad connectors on Mantis body resulting in odd VTOL weapon location placement (commit:70c1ca95cdaf963ceef9c7a0361abada40e6b260, #3786) + * Fix: Fixed weapon model issues on the Tank Killer and Super Tank Killer cyborg (commit:1b5cadd9836f6e9e2b2c18b7dd8c7805a9e184c0, commit:37d41ababf08f448975db6ead52aee82454e2973, #3875) + * Fix: Prevent shadow issues with all the non-fort rail weapons; Fix UV coords on some other mount models causing lime green areas on some (too many commits, #3890) + * Change: Process child widget clicks based on z-order, partial refactor of Radar widget (too many commits, #3655, #3662, #3664) + * Change: Adjust skybox fog (commit:83a3afd69dc38fbe2b66fe5ae28bf464dbac8f84, #3673) + * Change: Warn if OpenGL version is below 3.1 as we may likely remove support for them at some point (commit:d8ce8ba76b9e684fe9fa23c1f42783fffa7418e5, #3870) + * Campaign: + * Add: New Campaign Selector, enhanced support for campaign mods (and campaign balance mods). Includes a "Classic" balance option seemingly comparable to at least 2.3.9 (with a 3.2.x option) (too many commits, #3688, #3702, #3756, #3768, #3789, #3796, #3813, #3815, #3881) + * Add: Add tweak options such as auto-gain power after mission end, 40 unit limit, using classic timers, and auto-saves only mode granting 1 save at the start of a mission (too many commits, #3688) + * Add: Allow campaign library to map tech to map created artifacts, allow adding/deleting managed tech (commit:dc906767823af3bddd1acf2838265682e2ed126c, #3752) + * Add: Package + bundle the Reclamation & Fractured Kingdom add-on campaigns (too many commits, #3827, #3902) + * Fix: Remove transport timer on mission results screen after losing offworld or beating Gamma 9 (commit:063874aacf1ce4205aaea538e9131808b766ba5e, #3563) + * Fix: Prevent issues with Commanders losing groups, or Commander groups being "tied" together, after offworld transition or saveloading (commit:ba37c6ecc04a1da3c348d6a0408faab5838df9d4, commit:28f50a76c094dde37e79ce5b0efa79873c1a8b9f, #3596, #3728) + * Fix: Use initNoGoAreas() to prevent LZs from persisting across missions blocking areas that could be built on (commit:d0f004954ff136acc04bd5a2314d71f21b123bc7, #3602) + * Fix: Prevent launch button disappearing on LZ compromise until widget gets reopened (commit:f0f7bfc1f22cdf38a4e05a8df3ee5fcdfe92b954, #3604) + * Fix: Let debug mode persist across missions again (commit:8602760d68f074714aa7868545b3af85f46b14f6, #3742) + * Fix: Don't force player to destroy the Gamma 2 base to win (else would have to destroy it after the nuke event). Add hover unit anti-cheese on Alpha 12 land path factory triggers (commit:dc906767823af3bddd1acf2838265682e2ed126c, #3752) + * Fix: Prevent noisy assert when attemping to load saves when a flag position is outside scroll limits such as on Gamma 6 (commit:f96ba155a1716590efde7a1b0cef526801aec7cd, #3769) + * Fix: Prevent picking up artifact multiple times if units are within range at the same time (via a clone wars cheat for example) (commit:e35f41182bf0dd56f3b4d62ea7e872e48f7c41ae, #3736) + * Fix: Fix LZ flare position being 1 tile off for LZs on Beta 10 and Gamma 8; Bring back Mobile Repair units on Gamma 4 and replace MRP towers with TK hardpoints (commit:4ba5e83f215ef01dab7587376edd48f6dd8d8a6d, #3811) + * Fix: Improvements to video handling. No more 1 frame flicker if no videos installed (too many commits, #3813) + * Fix: Prevent "return to LZ" displaying and playing at the end of Gamma 2 sometimes (commit:4424f877be89401642acc14bd0b7e486128afb03, #3881) + * Change: Update structure durability, pricing, build times; Add Plasteel to Gamma; Improve damage output of all VTOL weapons by 3x+ (damage spread out over multiple shots); Make VTOLs come in waves for offmap spawns (commit:007b31e2e7759511b9e6e296f57a6d6dfbe491f6, #3552) + * Change: Hellstorm becomes an incendiary weapon; Buff AC damage to win against HVC against tanks if accuracy was bad like from low ranks (commit:007b31e2e7759511b9e6e296f57a6d6dfbe491f6, #3552) + * Change: Cyborg weapons stronger than tank variants; Nexus unit vision sensor set to NavGunSensor again; VTOL weapon/wave improvements; fixed rotation on Alpha 8 scavenger factory trapping units sometimes (commit:5811cdabfcb1f50540d2322e96cc0778e304dfa1, #3597) + * Change: Add new Beta campaign cyborgs: Thermite, Sniper, and Tank Killer so cyborgs are useful (commit:5811cdabfcb1f50540d2322e96cc0778e304dfa1, #3597) + * Change: Destroy player structures/features blocking spawn locations or transporter reinforcements; Remove most AI LZ zones that were used to block areas for this (commit:9321a87995382377eef0e17ad9fe92e1eabff28b, commit:d2e5af0c40303e572cb354467f1a4ca07198eda8, #3607) + * Change: Improved allied or player defenses/units on Beta 1, Gamma 3, Gamma 6; Move Turbo-Charged Engine Mk2 to Beta 7; Various small balance tweaks to weapons (commit:1f5bfb2425c7f212051702c69ed1eadc78a1f051, #3659) + * Change: Diversify and fix Beta/Gamma weapon power and build times, Make VTOL MRP an AA weapon like Sunburst, Flamer Bunker now uses Flamer Tower weapon (commit:dc906767823af3bddd1acf2838265682e2ed126c, #3752) + * Change: Buff Wheels speed and reduce cost and build time; Experiment with new rank thresholds based off the originals; Fix Gauss Cannon modifier and make it penetrate; Base Heavy Gunner off Heavy Cannon after feedback; AA buffs; Pepperpot becomes way stronger than long range artillery; Increase MRP HP (commit:4424f877be89401642acc14bd0b7e486128afb03, #3881); + * Change: Make Classic Commander/Sensor ranks the originals, which are doubles of those today for the first time again in 14 years (commit:8fb796890b0ada141f27746860b9c33a55c9a1b2, #3881) + * Multiplayer: + * Add: Non-blocking client join (w/ new join progress UI) (too many commits, #3825) + * Add: Add a map search bar to find your installed maps by name (too many commits, #3829) + * Fix: Fix Plasma Cannon Emplacement research showing a Pulse Laser emplacement (commit:c41351d649bcecad91f73372e4807441d606d3c3, #3684) + * Fix: Use sounds for quick chat events (commit:2a60e342597ee42fdc9e84f0a54c25c9e5714c3e, #3735) + * Fix: Make ban button add player to ban list (commit:be23c28a760a0e997e5940ac369d87c127be4e24, #3823) + * Fix: Let match settings console message display for more than a second at the start of a match (commit:f636cefe5375cbbc34e41a1e3c13fa530fb0b9b0, #3828) + * Fix: Update reticules when alt-click unloading transporters (commit:da7b3d3ea4c8b9f23cdc259aa00215850ca1e94d, #3840) + * Fix: Improvements to autoLagKick, kick votes, and ability to kick on "Waiting For Players" screen (too many commits, #3882) + * Fix: Check if there are available slots before a client wants to move (commit:221be397178a51017cb8ec3222e9dd5da86b870f, #3845) + * Balance MP: + * Add: Add Mk2 and Mk3 upgrades to the Depleted Uranium MG Bullets research line to help those that want pure MG in 1v1s (commit:96211672c757540e5b463653081aafe646b6fa73, #3834) + * Change: Leopard body upgrade: kinetic 12->14, HP 107->120 (commit:b1fabbae7da9544df974663276c91edb5873a353, #3575) + * Change: Port structure damage formula fix related changes to MP. Here a durability buff is experimented with compared to campaign (commit:1dcf7a0077dd11d26e15e6abf16f15f43d8c1966, commit:9709419754d3ee6671f579a822e942ad80b0c44f, #3553, #3618) + * Change: EMP Missile Launcher splash damage radius 2->3, long-range 3->5 (commit:6b84872dd3c1318bc4f7e163bf358198cb041d12, #3594) + * Change: HRA production time rollback 900->800 (commit:e7b3930de81307e163933521c29de0a1f5c7ad1f, #3626) + * Change: Reduce weight of Heavy Repair Turret 3000->2000 (commit:ea8b8f6f0c6b15bf42643d0fa14169e574874a19, #3833) + * Change: Make Hi-Energy Laser Emitter depends on Flashlight and the Heavy Laser depend on Pulse Laser (commit:832eb27cba4bc45db35aa70f34948b686046fd94, #3878) + * Change: Buff Plasmite Flamer HP to help it last in T3 settings when it appears (commit:823e73e7576b7256d325ec8b2829401525c12f55, #3899) + * Scripting: + * Add: Add new REF_FORTRESS structure type and decouple fortresses from GENERIC. Add STRUCT_GENERIC stattype (too many commits, #3777) + * Add: getDroidPath() that returns droid path (commit:e025ff02eb8fb95cdd1120d7a87555f2a8d93c3a, #3793) + * Add: Add "direction" JS field to Structure objects (commit:62bb60a00220aa59df684502da50ad7fa254747c, #3508) + * Add: Add an eventDroidRankGained event (commit:9758e9e0f128d949c0fbe82ae2aecb95597f3ebb, #3836) + * Add: Add BuildPower and Weapons to structures stats (too many commits, #3897) + * Fix: Fix property results in convResearch() (commit:bdf4a4c5a3143a213049a2c72966075350009f90, #3798) + * Change: Update QuickJS (too many commits, #3642, #3711, #3743, #3884) + * Change: change removeObject() API function to defer object removal. You must expect deleted objects to take immediate effect the next tick (too many commits, #3736, #3767, #3770) + * Change: Remove rules.js hack enabling cyborgSpade. Put the component in the automatically researched truck component research (commit:ce9994640cec9571b360b32c13cd4174d5ca91ab, #3828) + * AI + * Fix: Fix BoneCrusher! breaking on saves due to invalid global variable initialization, and fix various linter warnings (commit:5517171f566bdd49be1cf6759204da2bd732066b, #3654) + * Networking: + * Add: Replace miniupnpc with libplum to support UPnP, NAT-PMP, and PCP protocols (and can be made to work with IPv6) (too many commits, #3802) + * Change: Misc minor improvements. moved syncDebug*/WZFile related functions to a separate source file, (too many commits, #3696, #3780) + * Change: Pass references to sockets wherever possible (commit:e68a3370613a9c8a87dfaa41f37d7a471799c2b1, #3729) + * Change: Reduce the number of netplay.h includes, replace with sync_debug.h if that's enough (commit:64025c9e8351d5dfc2450b220a065bc2f26bacf8, #3760) + * Change: Enable TCP_NODELAY for game sockets (commit:24517868a0bbaa3add345c3e13e61a53593228e4, #3801) + * Fix: Prevent net messages from being endlessly buffered in modes that don't send them over the network (i.e. campaign, skirmish, etc) (commit:02ff65758102bfcedc9199ba7a1fca2a3ba0bd12, #3720) + * Fix: Various network improvements (too many commits, #3889, #3898, #3905) + * Sound: + * Add: Support higher cap for MAX_TRACKS (commit:db06a776ff642bffcd069181156f97c512868e3d, #3567) + * Add: Convert audio .cfg files to JSON, remove a ton of lexer/parser code related to loading the old file format (commit:0594ed90d4e5d1e9d52d5b11e48b2e352c5bf556, #3722) + * Add: Allow audio JSON files to override existing entries (commit:39b0138c6b4a24a1d411e59f310dacd9860cee44, #3772) + * Add: Support loading audio from memory buffers, use this for menu music (commit:1c2e4eade476205c472465a92524647ce8da702c, #3886) + * Fix: Fixed generator power hum appearing when it shouldn't; Prevent Oil derrick pump sound from persisting onto offworld maps where they would be on the home map; Cleanup (too many commits, 3716) + * Other: + * Add: Dedicated host documentation (too many commits, #3591) + * Add: Add PagedEntityContainer to provide optimized page-based storage for effects, projectiles, droids, structures, blueprints, and features (too many commits, #3660, #3675, #3689, #3701, #3707, #3714, #3715) + * Add: Generate artifact attestations to establish build provenance (commit:ab9f711178b6fa68b2741991edf039cf2b9e1cbb, #3803) + * Fix: Fix distance checking with unit repair algorithm (commit:630ffd70599cfd5047c35d1535740bcbe702bfce, #3571) + * Fix: Make nvtx easier to package, and add more scope. FreeBSD build fix (commit:b4e108eb5ae5bae2015a4bdb64cc060151129fd3, commit:b9f9a8bed03dbcc5204de5b42e775c4de29a499a, commit:57d397b33ec953c53feaca70743356cca61d0b61, #3585) + * Fix: Add missing const across the code base (commit:6744315d7c6fc3185544e854d93e5f5d68ea09a6, #3593) + * Fix: Limit artifact / oil drum pickup events to half a tile height differences (commit:17f6300d3f4ae059836809a08cacdc32ac21b28d, #3625) + * Fix: Always enumerate map tiles in row order (commit:b43110d0fd2b63cb9181ba757d2066c69c5cf587, commit:8477d839d34db112e52b60e84e1f4474be935f30, #3641) + * Fix: Fix "makemehero" cheat not giving sensors the correct experience, add supereasy and insane chat command (commit:ae7905a5e2ff48ffe11d750fbe16c0a5f91ee5af, commit:c7b19ffa29cb60af64ea4511e477ebfd3b888f0f, #3703) + * Fix: Misc compiler warning fixes / dependency updates (too many commits, #3585, #3710, #3711, #3761) + * Fix: CRC performance improvements (commit:99684c9c920816f3a5bf512a0b779c8da1e4b642, commit:717e5bd0030e1ead6c527ebf839ebfdc5388bf35, #3800) + * Fix: Fix validity check for stdinreader (commit:f1a50c272921b9b5da8a8fe0c5d55cf82f4b3ebb, #3818) + * Fix: Fix wzmaplib to export .lev format maps that Flame can edit/read (too many commits, #3831) + * Fix: Improve formatting performance on Paragraph widgets (too many commits, #3891) + * Change: Move internal containers from linked-lists to std::lists (too many commits, #3572, #3579, #3588, #3608, 3612, #3671) + * Change: Very first steps to make DROID and STRUCTURE look like properly encapsulated C++ classes (too many commits, #3606) + * Change: Convert C-style stat arrays for game objects to std::vector (too many commits, #3616, #3617) + * Change: Use checkReferences to hopefully prevent all dangling pointer crashes and to help track them (commit:3dae28f96298753ac394863e2f72cd02f8c37475, commit:fa0d3c0ca2d3259bb342f1b839d2f25496bb286a, commit:7849c07f9ec5cadfd7c0add95cbcefbcf4977390, #3670, #3887) + * Change: Update super-linter, partially enable editorconfig-checker, fix some trailing whitespace issues (too many commits, #3794) + * Change: Make the makemehero cheat set hero rank experience to 2048 to account for the old thresholds (commit:2f38bfa8786e2aaac80bb561cd94efbd9949c7e5, #3881) + 2023-11-29: Version 4.4.2: -* General: + * General: * Fix: Various potential crashes (too many commits, #3539, #3540, #3544, #3545) * Fix: Clear active console messages when resuming from paused state (commit:aa5cbb60b26a28af3bf3945e9a3dfb68215a7224, #3533) * Fix: Make sure VTOLs retreat to repair when attached to VTOL Strike/CB (commit:a093cddcf0927b492885b6a35a7f88689d425bba, #3541) -* Campaign: + * Campaign: * Fix: Move a spawn position on Gamma 3 (commit:eee44f2340e6a34681a05ec03ebaf3990f92e179, #3537) -* Multiplayer: + * Multiplayer: * Fix: Do not split departing player research centers with team in non-shared research mode (commit:f8778cdf4b6106215bfafff2d922fd6a3ef445a3, #3542) -* Other: + * Other: * Fix: Use std::make_{unique,shared} instead of raw new (too many commits, #3535) 2023-11-20: Version 4.4.1: -* General: + * General: * Fix: Potential corrupt game config file issue (commit:65728ec3302a5b9d2f9af1cc914647f087917e82, #3489) * Fix: Loading old maps with invalid map tile numbers (too many commits, #3484) * Fix: Text input handling of virtual key codes, CTRL+V paste, and displaying virtual key names (too many commits, #3498) @@ -22,17 +254,17 @@ * Fix: Always tell VTOLs to rearm after their VTOL Strike/CB sensor dies (commit:1648951a80cb12be316de0161091d24a26931a62, #3507) * Fix: Check for non-default sensor/ecm stats like with repair (commit:9b9a4e3993f286d8df0cff12b3df22a4fea4122c, #3516) * Fix: Various crashes and memory leaks (too many commits, #3484, #3515, #3523) -* Graphics: + * Graphics: * Fix: Handling of MAX_VERTEX_OUTPUT_COMPONENTS on OpenGL < 3.2 (commit:e65dbe7d5f879d915322fc17849613693d6483e6, #3484) * Fix: Additional fixes for fallback shaders, gfx_api logging (too many commits, #3491) * Fix: [OpenGL] Additional error handling for init (too many commits, #3504) * Fix: Model connectors for Ultimate Scavenger Helicopters (commit:02bba99e7409155d8eef12e82a76ed8530eff562, #3515) * Fix: DROID_PERSON model display size (commit:012efdd53aefc4033b6e4bcb6f76d8389a404ce8, #3519) -* Campaign: + * Campaign: * Fix: Remove unused artifact label from Alpha 3 (commit:550ba340c4d6f2c26298355757dd5a0b26af097d, #3492) * Fix: Repair Facility ID on Alpha 9 (commit:e81ca4f5e6d51dc26e66f427f5116f667ec0815f, #3493) * Fix: Command/Build reticule init for LDS_EXPAND_LIMBO missions (commit:d89e1878e575fbb02e1c84e95e5e1ab52b023241, #3512) -* Multiplayer: + * Multiplayer: * Add: Chat Options UI, host mute / options (too many commits, #3514) * Fix: Player mute state handling (commit:edc449519d76ae3276d42714ea034d4daff15721, #3490) * Fix: Non-builtin map replay desync (commit:19fa67f13f2b4a2f93c93ca88acc357ec77df6ce, #3501) @@ -43,11 +275,11 @@ * Fix: Kick message appearing for map change (commit:daa37e7a2609ea6705527abf67be128b1a0374db, #3513) * Fix: Mod hashing issue (commit:72ae817f1fd671459411189a539883ef385e921a, #3517) * Fix: Refactor NETallowJoining, add async join approval support (commit:1d9fd6f97850689e2eb7ae99684dcc67e0db9e65, #3518) -* Other: + * Other: * Fix: Clean-up undocumented (and unused) eventKeyPressed (commit:b4cf7e25d65c24616d32966acf76666398fd688e, #3522) 2023-11-06: Version 4.4.0: -* General: + * General: * Fix: Count units inside transporters for mission end results (commit:f19cf46a28ec98f0b474347423d845407d6acbd1, #3436) * Fix: Issues with intel map and saveload (too many commits, #3456) * Fix: Improve the VTOL Strike / CB rearming behavior (commit:6b9557a07c5019c937632c31fe931a53484311b1, #3449) @@ -55,23 +287,23 @@ * Fix: Use SDL physical key codes (scancodes) instead of SDL virtual key codes (commit:5040443f70c03776f3d4d294b5c942f171c205a6, #3470) * Fix: Prevent campaign difficulty influencing skirmish in-game saveload (commit:e65aa099a74e1a9e7c7960ed5ebfe5df5e5da7e6, #3475) * Fix: Various crashes and sanity checks (too many commits, #3467, #3471) -* Graphics: + * Graphics: * Add: Add separate "Terrain Shading" quality setting (too many commits, #3465) * Change: Classic model fixes for scavenger structures (commit:ae9d4f1fb4d72011584133f3579c18120d7deb8d, #3473) * Fix: Various gfx_api / shadow tweaks, better first-run determination of settings (too many commits, #3450, #3451) * Fix: Vulkan MSAA issues (too many commits, #3448) * Fix: Tweak medium terrain shader to better match the previous shader (commit:74b4cc999a9153c3c41f4c721853ca20c49b7953, #3472) -* Campaign: + * Campaign: * Change: Obsolete some more tech in Gamma campaign (too many commits, #3447) * Change: Refine starting designs for Beta/Gamma 1 (commit:bc082d26baad8c5681250bcf6e4d2565959de810, #3466) -* Multiplayer: + * Multiplayer: * Change: Allow demolishing departed ally structures (commit:52c563f8e279b77709e51f06139dc1422cb87938, #3458) -* Balance MP: + * Balance MP: * Change: Decrease Heavy Plasma Launcher effectivness against moving units, increase against stationary units and structures (commit:9fd8ec4801cd9e2903a5f5a5b4515f75f23a7e80, #3258) * Change: Allow transporters to gain bonuses from armor upgrades (commit:d5b7444d1634cb5249d5e4cb1809b2b47fd47805, #3252) 2023-10-29: Version 4.4.0-beta1: -* General: + * General: * Add: Allow challenges to save replays (commit:2897e40ef22b64746d14b41aa77e68156bc79c1a, commit:6c307d0d783832656bb7eecf627047ee8db0e476, #3239) * Add: Add new repair droid suborder in the right-click menu to control if they accept retreating units--defaults to off (commit:c789e0c1c6e2d42d4ee7f5a0eeed97d87e3c824d, commit:b8e9ee3d36bb7f2f8228c25ee7c8e755f2a01833, #3229, #3402) * Add: Groups UI menu for group management (too many commits, #2828, #3363, #3387) @@ -93,7 +325,7 @@ * Fix: Allied repair not working (commit:9529e46a8c3b5bb7d206747a591642db90bb2525, #3399) * Fix: Prevent repair units from highlighting their own commander (commit:cbce1ccd55b069848543fb5e04fccece07df6c72, #3400) * Fix: Improve scrolling in high FPS situations (commit:c936be8f1ad0be09efa067402a12f747b71ba113, #3410) -* Graphics: + * Graphics: * Add: Initial instanced rendering support (too many commits, #3114) * Add: PIE format 4 and model level enhancements (too many commits, #3117) * Add: New terrain renderer: single pass, terrain normal mapping, classic terrain, + more! (too many commits, #3127) @@ -114,7 +346,7 @@ * Fix: Close up a gap in the Mini Rocket Pod (commit:de84c71f068307c7325ee24d9e61c75ef37ece1f, #3277) * Fix: [Vulkan] Support different swapchain compositeAlpha modes (commit:2b43608c2d5683455f35c4ce52ffb7ce8d326a30, #3351) * Fix: [Vulkan] Fix pipeline rasterizationSamples mismatch with renderpass (commit:21db14c5d51a350d20c34a001ecf895afe818d54, #3384) -* Campaign: + * Campaign: * Add: New non-cheatmode chat command "rank x" (0-9) changes enemy ranks immediately, "prop x" (0-3) changes produced/spawned units to use type I/II/III propulsions (too many commits, #3328) * Add: Add unused NEXUS sound when absorbed factories produce units on Gamma 5 (commit:aa9f6d323ce87670499009c5df91ab3069740bf1, #3342) * Add: Utilize the transporter return timer on Beta End (commit:452e21bc50b79b9d854b974e4256d20ad96b56c6, #3421) @@ -134,12 +366,12 @@ * Fix: If the player beat Gamma 2 with no built factories and no trucks on the home map they would fail coming back. Give them a fail-safe truck at Gamma 3 then (commit:de8cef477678b73e66f5b08fb96414067afd2577, #3314) * Fix: Fix libcampaign's camSetVtolSpawnState() when the stop object label is passed so that all spawners tied to the object get deactivated and not the first one encountered (commit:42d337bf7672f7236362ab68f68c839dea6f888f, #3342) * Fix: Transporters that dropped off units on Beta/Gamma 1, and are still flying back to go off map, would persist through the end of the mission and cause an unavoidable early exit trigger to load the next mission (commit:1371bcf4c89eb4fe2a88da411f0c6a647e77af27, #3364) -* Scripting: + * Scripting: * Add: New events eventTransporterEmbarked and eventTransporterDisembarked to fix Command/Build reticule edge-cases with units in transporters (commit:00ca99a53a61d9951fe94bce934b33b9996e8181, commit:19b0a8c108e56b617499dc9f3d5784ee5e52c87d, #3394) * Change: Expand addStructure() and changePlayerColour() functions (commit:6e5c9cf224578ca0d9c2f44ba6ff8b58821fd792, #3202) * Fix: If trying to use enumCargo() during an eventTransporterLanded the Commander was already removed from the transporter group (commit:88298709cdcdc38042ed6055b1739e7272005c67, #3331) * Fix: Fix moduleToBuilding / label mapping for loaded maps (commit:f9efb30305dc0a25dcfb8ff560f28fa3228e9a0b, #3427) -* Multiplayer: + * Multiplayer: * Add: Add options for handling player resources on leave (commit:6feff17279f410061d0ce56a7f8f2a0289b00967, commit:c82c37c892750c3179ef1d0642a0927893f89675, #3243) * Add: Initial attempt at verifying identity on join (commit:64f1834b8acaa078bb42bed77ebf1441b153b8e3, #3059) * Add: Multiplayer / network / lobby / chat enhancements. Quick chat, team strategy, pregame countdown (too many commits, #3401) @@ -150,7 +382,7 @@ * Fix: Initialize passive play warning properly (commit:e05925721d191effa24a8ba0286c576b36868d70, #3254) * Fix: Multiplayer stats and options improvements (too many commits, #3283) * Fix: Fix loadSaveFeature2 for spectator-assigned features (commit:8408aa2144fd8f89cfde73b4a29431d0e3bed8f5, #3310) -* Balance MP: + * Balance MP: * Change: Increase Super Transporter base HP from 500 to 3000, Cyborg transporter from 200 to 1000 (commit:e7623112976ed37b5c6a9865a41998cdcc7c502a, #3215) * Change: Remove splash damage from VTOL Lancer, Tank-Killer, and Scourge Missile (commit:6f91451a6d30aa949c011353dd491a842b4f7169, #3222) * Change: Increase range of HVC turret from 9.5 to 10--rollback to v3.1.x (commit:56d42a9d9bd2e2bcfbe7cb85975e6550f7223ee5, #3214) @@ -172,7 +404,7 @@ * Change: Buff Robotic/Advanced repair facility research bonus to 100% from 50%, and let mobile repair turrets and mechanic get upgraded by repair research (commit:6567ce3f4778f23f58d5bd2e6e2f62a822ed7a80, commit:3118a6dcdce487bb3daeef54db890c590f7ee6de, #3391) * Change: Bump VTOL bomb weapon HP up by 10% (commit:806f503494f505ab2fc6c1dfe1c7f3a62dd2e189, #3395) * Fix: Replace NavGunSensor with the default sensor for Sunburst, Avenger, Vindicator, and Stormbringer AA sites (commit:bb82a7a76208e818bfedda9f79e9677859a37201, #3257) -* Other: + * Other: * Add: Introduced scope-based profiling instrumentation. Current instrumentation can use NVTX and/or VTune instrumentation (too many commits, #3285) * Add: Support cmd interface with unix socket (too many commits, #3345) * Change: Improved performance for looking for the best nearest target (commit:46d3d9223a989a87b6e0ce74f4552cd3e75b1fa4, #3144) @@ -197,48 +429,48 @@ * Fix: Prevent Commander reticule widget list scrambling on save-load (commit:9423ce1482820a4099ad70f84fc6a6cc6197d9ab, #3403) 2023-04-16: Version 4.3.5: -* General: + * General: * Add: Display kills and units in spectator stats UI (commit:b1c52e8be428e7b239e9e845288e7a968a017551, #3186) * Fix: "Get off my land" and "kill selected" cheats (commit:f51f234ef5902d4033d6b58a93049e03239c8072, #3171) * Fix: Don't assign trucks from factories to commanders (commit:f04e2d3932910213f67f82759b2005c86ff8dd0e, #3179) * Fix: Repairs: Reset secondary only after "go-to-rally-point" was triggered, separate RTR logic from RTR_SPECIFIED (commit:15c6fc7ae57ccc2d4dc8fc205eac14c83fd3eb71, #3194) * Fix: Various potential crashes and corrupt config issues (commit:fe7ebfa2bd406ee73c7363afad3a4e26e9297ce9, commit:d07b94e924ad247aaa27df5305e5aee85552da60, #3208, #3211) -* Graphics: + * Graphics: * Fix: Properly render unit resistance bar (commit:099580bc88e5443ee9f76c043102b97055e11866, #3183) -* Multiplayer: + * Multiplayer: * Add: /hostmsg lobby chat prefix that sends a message only to the host (commit:c563170c7eae67af799e7b8ba19a66f2241fb26f, #3204) * Change: Add Heavy Rocket Array to all skirmish AIs (commit:7c62ce1ddabe5925c75f5e85722fee54b449118f, #3196) * Change: Improvements to Nexus AI (commit:86ef42d5f8419f88f96d53a2aef69b18eae77cfc, #3196) * Fix: Desync with losing player-turned-spectator when certain defensive structures remain (commit:b15ec308db501988b1f8b0fb5c6e18eb1aa16605, #3189) -* Balance MP: + * Balance MP: * Change: Slightly increase the build cost of Mortar1Mk1 (commit:0b4bfc612121d2c5bad91908a54900aeb9323581, #3190) * Change: Return Tank Killer reloadTime from 160 -> 180 (commit:3ce486735df52445042add20897de01679d3d75f, #3203) * Change: Increase HRA production time from 800 -> 900 (commit:d5f5fb28d95f6c285932bc40646bb0fcb3e6d4bd, #3206) -* Other: + * Other: * Fix: "kick identity" command should only kick, not ban (commit:da1d8770fc77e34272c4a4b7529f2ea64855b551, #3210) 2023-03-26: Version 4.3.4: -* General: + * General: * Add: A separate Ban/Kick activity, allow removing from ban list while running game, and fixes for spectator mute (too many commits, #3163) * Fix: Various potential crashes (too many commits, #3100, #3101, #3106, #3108) * Fix: Let some older maps show up again in the map lists (commit:444a637345a3578b327d278b7328ebd4d0ff91db, #3109) * Fix: Always cancel research when starting it in another lab (commit:5f7eb0e172fa52c2e443220a5370ed88a7345216, #3150) * Fix: Persist Snap config data by using SNAP_USER_COMMON (commit:6366d7b51ba697351abe430a402c9e5a77a837a7, #3160) -* Graphics: + * Graphics: * Fix: Fix missing sections on Tank Killer super cyborg (commit:3e7b9d5382ab09b24a7793eb2826327f8f1382dc, #3092) -* Campaign: + * Campaign: * Change: Gamma 4: Remove middle tank traps guarding team Alpha and remove the repair units to account for new repair micro-AI (commit:e70f636345f71b02cbed9d25628ef2a260809fa2, #3058) * Change: Always blow up walls and tank traps during Nexus transfers in campaign (commit:8e7e7fdad4ec3ed5059163eeb0f36a699964fa23, #3118) * Change: Improve difficulty differences on Gamma 9 (commit:e396fdf9f45a7d681d1b9b477717f52d1bcec48b, #3118) * Change: Make Alpha 1-3 missions flow a bit more smoothly; Increase player flamer ranges (commit:31f18cc2478dcc1a62f72c171a627088ee059be4, #3132) * Change: Make Gamma 1 easier by activating factories depending on what part of the valley you exit (commit:a4dc62af69db6ebd77ff4f506b7a1c2241828bbe, #3162) -* Multiplayer: + * Multiplayer: * Add: Add lobby command: makeplayer (commit:64f50bdbb74053c8752197c634ed6642af6f0754, #3107, #3108) * Add: Add a join message (commit:d48073c810ac385449b275132449d1c82fdbab1e, commit:dad97d406c539399d4c1d519b59b8cbad314620d, #3105) * Fix: Do not truncate spectator labels (commit:66fcbeb22decbd06b49252580e8df91d5b1867b6, #3149) * Fix: Stop Mission Time and store it when the results screen pops up (commit:5bad9826b739252b1ffea5b72b7bcb27823aeee1, commit:8a23639e683c4d1fb5696fd23d4c961b4080e66c, #3151) * Fix: Preserve player identity on rename (commit:13a21a13c07983745327b8ee1e1653b516d92e76, #3155) -* Balance MP: + * Balance MP: * Add: Add new Heavy Rocket Array weapon which depends on MRA and HEAT Rocket Warhead Mk2 (commit:ca9dc06f0ee3a86f29940a7a15038043292321f5, commit:d9d9d3e54df4b5aeb41fba8bb322ae71c73beeb8, #3103, #3141) * Change: Reduce effectiveness of artillery modifier on bunkers 40% to 20%, Reduce effectiveness of artillery modifiers against Tracked 40% to 30% (commit:46cab7cad2adbdb80150588852480eabac496510, commit:669fb3abf708662cbd5d3dd3be6cae1c94d24605, #2894) * Change: Make Heavy Repair Turret and Repair Facility appear at same time, improve facility repair speed by 10, and make light repair turret cost less and build faster (commit:5ba9b81f4a88546d462f8dc13f35fb3ac0ba6201, #3022) @@ -251,7 +483,7 @@ * Change: Reduce time and cost for Command Turret research by 50% (commit:e8465be7fc6c044ffd72e7aad9dba0c1f865022a, #3121) * Change: Reduce research topic time and cost for most defenses by 50% (commit:bf408ac0b59c56b51fceda8e9cd54fcd62cdf089, #3122) * Change: Increase reward for some engineering upgrades to 30% (commit:96e6878d33c4e2d13665051e08a7915ecdec6bde, #3134) -* Other: + * Other: * Add: Add autohost and autorating documentation (commit:2ab6c37eeb684f6b1936eb49a263f3412a92dfed, #3138) * Fix: Fix building with GCC 13 (commit:e872db579ec2847de29d1e3a96b35902f643b9fb, #3090) diff --git a/README.md b/README.md index 9449da6fb1d..76647099dd3 100644 --- a/README.md +++ b/README.md @@ -389,7 +389,7 @@ Do **not** use GitHub's "Download Zip" option, as it **does not contain submodul 5. After letting Visual Studio re-run CMake configure with the new settings, you can build using the **CMake** menu. ### macOS -See [macosx/README.md](macosx/README.md) +See [platforms/macos/README.md](platforms/macos/README.md) Licensing ------------------- diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 284cedeaa4a..00000000000 --- a/appveyor.yml +++ /dev/null @@ -1,226 +0,0 @@ -init: - # Only save build cache on master branch - - ps: IF ($env:APPVEYOR_REPO_BRANCH -ne "master") {$env:APPVEYOR_CACHE_SKIP_SAVE = "true"} - -environment: - global: - APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z -m0=lzma -mx=4 - matrix: - # 32-bit (x86) builds - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - WZ_JOB_ID: release_x86 - wz_deploy_build: true - # NOTE: Additional environment variables are set later to maintain consistent job identifiers - ## NOTE: Unfortunately, 64-bit Windows builds are currently broken because of QScript (see: http://developer.wz2100.net/ticket/4763) - ## Whenever that ticket is resolved, the following will build 64-bit: - # - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - # WZ_JOB_ID: release_x64 - -# Cache -# - Maintains a separate cache for each build matrix entry -# -# To manually clear the project's cache, open the Javascript console when logged-in to AppVeyor, and execute: -# $.ajax({ url: 'https://ci.appveyor.com/api/projects///buildcache', type: 'DELETE'}) -# For more, see: https://github.com/appveyor/ci/issues/985 -cache: - # 1. The vcpkg directory - # - Cache built dependencies to reduce frequent build time by 20+ minutes. - # - The vcpkg cache is invalidated if get-dependencies_win.ps1 changes (and get-dependencies_win.ps1 is what contains the pinned vcpkg commit). - - vcpkg/ -> get-dependencies_win.ps1 - -platform: - - x64 - -configuration: - - Release - -install: - # Initialize Git submodules - - git submodule update --init --recursive - # Download & install Vulkan SDK - - ps: | - Function Req { - Param( - [Parameter(Mandatory=$True)] - [hashtable]$Params, - [int]$Retries = 1, - [int]$SecondsDelay = 2 - ) - - $method = $Params['Method'] - $url = $Params['Uri'] - - $cmd = { Write-Host "$method $url..." -NoNewline; Invoke-WebRequest @Params } - - $retryCount = 0 - $completed = $false - $response = $null - - while (-not $completed) { - try { - $response = Invoke-Command $cmd -ArgumentList $Params - #if ($response.StatusCode -ne 200) { - # throw "Expecting reponse code 200, was: $($response.StatusCode)" - #} - $completed = $true - } catch { - Write-Host $_.Exception.GetType().FullName - Write-Host $_.Exception.Message - if ($retrycount -ge $Retries) { - Write-Warning "Request to $url failed the maximum number of $retryCount times." - throw - } else { - Write-Warning "Request to $url failed. Retrying in $SecondsDelay seconds." - Start-Sleep $SecondsDelay - $retrycount++ - } - } - } - - Write-Host "OK ($($response.StatusCode))" - return $response - } - - $VULKAN_DL_URL = "https://sdk.lunarg.com/sdk/download/1.1.130.0/windows/VulkanSDK-1.1.130.0-Installer.exe?Human=true" - $VULKAN_DL_SHA256 = "92ce6080dc2aebfb0a63dba705b8d50a04cfafa1710acbb3b4fa413b388ff2cd" - - $req = Req -Params @{ 'Method'='GET';'Uri'="$VULKAN_DL_URL";'OutFile'='vulkan.exe' } -Retries 3 -SecondsDelay 10 - $vulkan_exe_hash = Get-FileHash -Path "vulkan.exe" -Algorithm SHA256 - If ($vulkan_exe_hash.Hash -eq $VULKAN_DL_SHA256) { - Write-Output "Successfully downloaded VulkanSDK installer" - } Else { - Write-Error "The downloaded VulkanSDK installer hash '$($vulkan_exe_hash.Hash)' does not match the expected hash: '$VULKAN_DL_SHA256'" - } - - cmd: | - .\vulkan.exe /S - refreshenv - echo %VULKAN_SDK% - # Setup Ruby path (for Asciidoctor gem install) - - set PATH=C:\Ruby26-x64\bin;%PATH% - # Install Asciidoctor (for documentation generation) - # NOTE: Specify an explicit Asciidoctor version to help ensure reproducible builds - - gem install asciidoctor -v 2.0.10 --no-document - -before_build: - # Set expanded environment variables for release build jobs - # NOTE: These are set here, instead of in the build matrix above, to maintain consistent job identifiers for release builds - # (as the job is identified based on the environment configuration in the matrix) - - ps: | - Write-Host "env:WZ_JOB_ID='$env:WZ_JOB_ID'" - if ($env:WZ_JOB_ID -eq "release_x86_xp") { - # 32-bit (x86) builds maintain Windows XP compatibility by using Qt 5.6.x and the "*_xp" VC toolchain - # APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - # TODO: Change VCPKG_DEFAULT_TRIPLET to one that supports XP once https://github.com/Microsoft/vcpkg/pull/1732 is finalized & merged. - $env:VCPKG_DEFAULT_TRIPLET = "x86-windows" - $env:WZ_VC_GENERATOR = "Visual Studio 15 2017" - $env:QT5DIR = "C:\Qt\5.6\msvc2015" - $env:WZ_VC_TOOLCHAIN = "v141_xp" - $env:WZ_VC_TARGET_PLATFORMNAME = "Win32" - $env:WZ_OUTPUT_PLATFORMNAME = "x86" - } - elseif ($env:WZ_JOB_ID -eq "release_x86") { - # 32-bit (x86) builds use more recent Qt and the latest VC toolchain (and support Windows 7+) - # APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - $env:VCPKG_DEFAULT_TRIPLET = "x86-windows" - $env:WZ_VC_GENERATOR = "Visual Studio 16 2019" - $env:QT5DIR = "C:\Qt\5.9\msvc2015" - $env:WZ_VC_TOOLCHAIN = "v142" - $env:WZ_VC_TARGET_PLATFORMNAME = "Win32" - $env:WZ_OUTPUT_PLATFORMNAME = "x86" - } - elseif ($env:WZ_JOB_ID -eq "release_x64") { - # 64-bit (x64) builds use the latest Qt and VC toolchain (and support Windows 7+) - # APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - $env:VCPKG_DEFAULT_TRIPLET = "x64-windows" - $env:WZ_VC_GENERATOR = "Visual Studio 16 2019" - $env:QT5DIR = "C:\Qt\5.9\msvc2017_64" - $env:WZ_VC_TOOLCHAIN = "v142" - $env:WZ_VC_TARGET_PLATFORMNAME = "x64" - $env:WZ_OUTPUT_PLATFORMNAME = "x64" - } - # Set distributor (if building from the main repo) - - ps: | - $env:WZ_DISTRIBUTOR = "UNKNOWN" - if ($env:APPVEYOR_ACCOUNT_NAME -eq "Warzone2100") { - $env:WZ_DISTRIBUTOR = "wz2100.net" - } - # Add the QT5 \bin dir to PATH - - set PATH=%PATH%;%QT5DIR%\bin; - # If a future version of vcpkg breaks the "VCPKG_BUILD_TYPE=release" setting for the dependencies we need, use the following line instead: - # - ps: .\get-dependencies_win.ps1 - - ps: .\get-dependencies_win.ps1 -VCPKG_BUILD_TYPE "release" - # Remove the vcpkg\buildtrees folder. (Once all dependencies are installed, it isn't needed, and it takes up a lot of space in the cache.) - - ps: if (Test-Path .\vcpkg\buildtrees) { Remove-Item .\vcpkg\buildtrees -Force -Recurse -ErrorAction SilentlyContinue; } - # Clean the build remnants of vcpkg itself. (Since it's rebuilt fresh - even from a cached vcpkg directory - these aren't needed.) - - msbuild .\vcpkg\toolsrc\vcpkg.sln /t:Clean /p:Configuration=Release /p:Platform=x86 - # Use CMake to configure with the appropriate Visual Studio (MSBUILD) generator, toolchain, and target platform (portable build) - - cmake -H. -Bbuild -DCMAKE_TOOLCHAIN_FILE="%APPVEYOR_BUILD_FOLDER%\vcpkg\scripts\buildsystems\vcpkg.cmake" -DWZ_PORTABLE:BOOL=ON -DCPACK_PACKAGE_FILE_NAME:STRING="warzone2100_portable" -DWZ_DISTRIBUTOR:STRING="%WZ_DISTRIBUTOR%" -G "%WZ_VC_GENERATOR%" -T "%WZ_VC_TOOLCHAIN%" -A "%WZ_VC_TARGET_PLATFORMNAME%" - -build_script: - - msbuild build/PACKAGE.vcxproj -m /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" /nowarn:MSB8065,MSB8064 - -after_build: - # Determine the build output description - # Base on the platform name: warzone2100_win__.exe (so it can go right to GitHub releases) - - ps: | - $env:WZ_BUILD_DESC = "win_$($env:WZ_OUTPUT_PLATFORMNAME)" - # Convert special characters - $env:WZ_BUILD_DESC = $env:WZ_BUILD_DESC.replace('/','_') - - ps: Write-Host "env:WZ_BUILD_DESC='$env:WZ_BUILD_DESC'" - - # Rename the portable installer - - ps: Move-Item -LiteralPath "$($env:APPVEYOR_BUILD_FOLDER)\build\warzone2100_portable.exe" -Destination "warzone2100_$($env:WZ_BUILD_DESC)_portable.exe" - # Package the portable .pdb and .sym files into a "DEBUGSYMBOLS" .7z archive (do not include metadata / timestamps) - - ps: cmd /c 7z a -t7z -m0=lzma -mx=9 -mtc=off -mtm=off -mta=off "warzone2100_$($env:WZ_BUILD_DESC)_portable.DEBUGSYMBOLS.7z" "$($env:APPVEYOR_BUILD_FOLDER)\build\src\*.pdb" "$($env:APPVEYOR_BUILD_FOLDER)\build\src\*.sym" - - # Re-run CMake configure for non-portable (regular) installer - - cmake -H. -Bbuild -DCMAKE_TOOLCHAIN_FILE="%APPVEYOR_BUILD_FOLDER%\vcpkg\scripts\buildsystems\vcpkg.cmake" -DWZ_PORTABLE:BOOL=OFF -DCPACK_PACKAGE_FILE_NAME:STRING="warzone2100_installer" -DWZ_DISTRIBUTOR:STRING="%WZ_DISTRIBUTOR%" -G "%WZ_VC_GENERATOR%" -T "%WZ_VC_TOOLCHAIN%" -A "%WZ_VC_TARGET_PLATFORMNAME%" - # Build the regular installer package (this should only rebuild the installer itself) - - msbuild build/PACKAGE.vcxproj -m /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" /nowarn:MSB8065,MSB8064 - - # Rename the regular installer - - ps: Move-Item -LiteralPath "$($env:APPVEYOR_BUILD_FOLDER)\build\warzone2100_installer.exe" -Destination "warzone2100_$($env:WZ_BUILD_DESC)_installer.exe" - # Package the regular installer .pdb and .sym files into a "DEBUGSYMBOLS" .7z archive (do not include metadata / timestamps) - - ps: cmd /c 7z a -t7z -m0=lzma -mx=9 -mtc=off -mtm=off -mta=off "warzone2100_$($env:WZ_BUILD_DESC)_installer.DEBUGSYMBOLS.7z" "$($env:APPVEYOR_BUILD_FOLDER)\build\src\*.pdb" "$($env:APPVEYOR_BUILD_FOLDER)\build\src\*.sym" - - # Compare the two DEBUGSYMBOLS.7z files - # If they are equal (as they should be if only the installer was rebuilt), keep only one and remove the "PORTABLE/INSTALLER" suffix - # If they are not equal, we have to keep both (but output a notice, as the CMake build should probably be tweaked to avoid this) - - ps: | - if ((Get-FileHash -LiteralPath "warzone2100_$($env:WZ_BUILD_DESC)_portable.DEBUGSYMBOLS.7z" -Algorithm SHA512).Hash -eq (Get-FileHash -LiteralPath "warzone2100_$($env:WZ_BUILD_DESC)_installer.DEBUGSYMBOLS.7z" -Algorithm SHA512).Hash) { - # The two archives' hashes match - delete one, and rename the other - Write-Host "DEBUGSYMBOLS.7z files match" - Remove-Item -LiteralPath "warzone2100_$($env:WZ_BUILD_DESC)_installer.DEBUGSYMBOLS.7z" -Force -ErrorAction SilentlyContinue - Rename-Item -LiteralPath "warzone2100_$($env:WZ_BUILD_DESC)_portable.DEBUGSYMBOLS.7z" -NewName "warzone2100_$($env:WZ_BUILD_DESC).DEBUGSYMBOLS.7z" - } - else { - Write-Warning "The DEBUGSYMBOLS.7z files for the portable + regular builds do not match. This may mean that the executable was rebuilt when switching portable / non-portable mode. (Check the CMake scripts to fix.)" - } - - # Log hashes of the setup EXEs - - ps: | - Write-Host "SHA512 Hashes:" - Write-Host "`nwarzone2100-$($env:WZ_BUILD_DESC)_portable.exe`n -> SHA512: $((Get-FileHash -LiteralPath "warzone2100_$($env:WZ_BUILD_DESC)_portable.exe" -Algorithm SHA512).Hash)`n -> Size (bytes): $((Get-Item -LiteralPath "warzone2100_$($env:WZ_BUILD_DESC)_portable.exe").Length)" - Write-Host "`nwarzone2100-$($env:WZ_BUILD_DESC)_installer.exe`n -> SHA512: $((Get-FileHash -LiteralPath "warzone2100_$($env:WZ_BUILD_DESC)_installer.exe" -Algorithm SHA512).Hash)`n -> Size (bytes): $((Get-Item -LiteralPath "warzone2100_$($env:WZ_BUILD_DESC)_installer.exe").Length)" - Write-Host "" - -artifacts: - - path: warzone2100_*_portable.exe - name: Warzone2100 Portable - - path: warzone2100_*_installer.exe - name: Warzone2100 Installer - - path: warzone2100_*.DEBUGSYMBOLS.7z - name: Debug Symbols (7z) - -# deploy: -# # description: '' -# provider: GitHub -# auth_token: -# secure: udWZCPk8pkXCIS0eL88yQ+95q9BkAHaCCQLA/W2zd9XsHYS7wMbLYOATnbuRRD0S -# artifact: /warzone2100_.*\..*/ -# draft: true -# prerelease: false -# force_update: true -# on: -# APPVEYOR_REPO_TAG: true # deploy on tag push only -# wz_deploy_build: true diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index ae778c76084..00000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,57 +0,0 @@ -# WZ2100 Azure build pipeline -# -# Currently contains: -# - macOS builds - -trigger: - branches: - include: - - '*' - - refs/tags/* - exclude: - - l10n_* - -jobs: -#- template: .ci/azure/templates/macos-build-pipeline-template.yml -# parameters: -# name: macOS_Xcode_9_4_1 -# displayName: 'macOS [Xcode 9.4.1, macOS 10.13 SDK]' # friendly name to display in the UI -# vmImage: 'macOS-10.14' -# xcodeDeveloperDir: '/Applications/Xcode_9.4.1.app/Contents/Developer' -# vcpkgBuildXcodeDeveloperDir: '/Applications/Xcode_10.3.app/Contents/Developer' -# vcpkgInstallXcodeDeveloperDir: '/Applications/Xcode_10.3.app/Contents/Developer' -# publishArtifact: false -- template: .ci/azure/templates/macos-build-pipeline-template.yml - parameters: - name: macOS_Xcode_10_3_novideos - displayName: 'macOS [Xcode 10.3, macOS 10.14 SDK] - no videos' # friendly name to display in the UI - vmImage: 'macOS-10.14' - xcodeDeveloperDir: '/Applications/Xcode_10.3.app/Contents/Developer' # Set default Xcode to Xcode 10.3 on macOS 10.14 - vcpkgBuildXcodeDeveloperDir: '/Applications/Xcode_11.7.app/Contents/Developer' - includeVideos: false - publishArtifact: true - artifact: 'warzone2100_macOS_novideos' -# - template: .ci/azure/templates/macos-build-pipeline-template.yml -# parameters: -# name: macOS_Xcode_10_3 -# displayName: 'macOS [Xcode 10.3, macOS 10.14 SDK] - full' # friendly name to display in the UI -# vmImage: 'macOS-10.14' -# xcodeDeveloperDir: '/Applications/Xcode_10.3.app/Contents/Developer' # Set default Xcode to Xcode 10.3 on macOS 10.14 -# vcpkgBuildXcodeDeveloperDir: '/Applications/Xcode_11.7.app/Contents/Developer' -# includeVideos: true -# publishArtifact: true -# artifact: 'warzone2100_macOS' -# - template: .ci/azure/templates/macos-build-pipeline-template.yml -# parameters: -# name: macOS_Xcode_11 -# displayName: 'macOS [Xcode 11.7, macOS 10.15 SDK]' # friendly name to display in the UI -# vmImage: 'macOS-10.15' -# xcodeDeveloperDir: '/Applications/Xcode_11.7.app/Contents/Developer' -# publishArtifact: false -# - template: .ci/azure/templates/macos-build-pipeline-template.yml -# parameters: -# name: macOS_latest -# displayName: 'macOS [vmImage: macOS-latest]' # friendly name to display in the UI -# vmImage: 'macOS-latest' -# publishArtifact: true -# artifact: 'warzone2100_macOS (latest)' diff --git a/build_tools/CMakeLists.txt b/build_tools/CMakeLists.txt index 0e690bf445c..744d89cb194 100644 --- a/build_tools/CMakeLists.txt +++ b/build_tools/CMakeLists.txt @@ -5,8 +5,8 @@ cmake_minimum_required(VERSION 3.5...3.24) # Autorevision target that will run *every* build add_custom_target(autorevision ALL - DEPENDS - "${CMAKE_CURRENT_BINARY_DIR}/__shouldnotexist.h" + DEPENDS + "${CMAKE_CURRENT_BINARY_DIR}/__shouldnotexist.h" ) set_property(TARGET autorevision PROPERTY FOLDER "_WZBuildProcessTargets") @@ -15,7 +15,7 @@ set(_autorevision_cache_tarball_src_input "${CMAKE_CURRENT_SOURCE_DIR}/autorevis set(_autorevision_cache_file "${CMAKE_CURRENT_BINARY_DIR}/autorevision.cache") set(_autorevision_h_file "${CMAKE_CURRENT_BINARY_DIR}/autorevision.h") add_custom_command( - OUTPUT + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/__shouldnotexist.h" # fake - ensure we run "${_autorevision_h_file}" "${_autorevision_cache_file}" diff --git a/cmake/FetchSentryNative.cmake b/cmake/FetchSentryNative.cmake index a8d07c416fc..d16ec00afe0 100644 --- a/cmake/FetchSentryNative.cmake +++ b/cmake/FetchSentryNative.cmake @@ -76,6 +76,10 @@ if(CMAKE_CXX_STANDARD) set(_old_CMAKE_CXX_STANDARD "${CMAKE_CXX_STANDARD}") unset(CMAKE_CXX_STANDARD) # Allow sentry-native to set its desired default endif() +if(CMAKE_CXX_EXTENSIONS) + set(_old_CMAKE_CXX_EXTENSIONS "${CMAKE_CXX_EXTENSIONS}") + unset(CMAKE_CXX_EXTENSIONS) # Allow sentry-native to set its desired default +endif() if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux" AND NOT DEFINED SENTRY_BACKEND) set(SENTRY_BACKEND "breakpad" CACHE STRING "The sentry backend responsible for reporting crashes, can be either 'none', 'inproc', 'breakpad' or 'crashpad'." FORCE) @@ -84,8 +88,57 @@ if(NOT sentrynative_POPULATED) FetchContent_Populate(sentrynative) add_subdirectory("${sentrynative_SOURCE_DIR}" "${sentrynative_BINARY_DIR}" EXCLUDE_FROM_ALL) endif() -message(STATUS "Enabling crash-handling backend: sentry-native ($CACHE{SENTRY_BACKEND})") +message(STATUS "Enabling crash-handling backend: sentry-native ($CACHE{SENTRY_BACKEND}) for (${CMAKE_SYSTEM_NAME}:${CMAKE_SYSTEM_PROCESSOR})") + +#################### +# Silencing warnings + +if(NOT MSVC) + + include(CheckCompilerFlagsOutput) + + set(_supported_sentry_c_compiler_flags "") + set(_supported_sentry_cxx_compiler_flags "") + + # -Wshadow (GCC 3.4+, Clang 3.2+) + check_compiler_flags_output("-Werror -Wno-shadow -Wno-error=cpp" COMPILER_TYPE C OUTPUT_FLAGS "-Wno-shadow" OUTPUT_VARIABLE _supported_sentry_c_compiler_flags APPEND) + check_compiler_flags_output("-Werror -Wno-shadow -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-shadow" OUTPUT_VARIABLE _supported_sentry_cxx_compiler_flags APPEND) + + # -Wunused-but-set-variable + check_compiler_flags_output("-Werror -Wno-unused-but-set-variable -Wno-error=cpp" COMPILER_TYPE C OUTPUT_FLAGS "-Wno-unused-but-set-variable" OUTPUT_VARIABLE _supported_sentry_c_compiler_flags APPEND) + check_compiler_flags_output("-Werror -Wno-unused-but-set-variable -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unused-but-set-variable" OUTPUT_VARIABLE _supported_sentry_cxx_compiler_flags APPEND) + + # -Wconditional-uninitialized + check_compiler_flags_output("-Werror -Wno-conditional-uninitialized -Wno-error=cpp" COMPILER_TYPE C OUTPUT_FLAGS "-Wno-conditional-uninitialized" OUTPUT_VARIABLE _supported_sentry_c_compiler_flags APPEND) + check_compiler_flags_output("-Werror -Wno-conditional-uninitialized -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-conditional-uninitialized" OUTPUT_VARIABLE _supported_sentry_cxx_compiler_flags APPEND) + + # -Wassign-enum + check_compiler_flags_output("-Werror -Wno-assign-enum -Wno-error=cpp" COMPILER_TYPE C OUTPUT_FLAGS "-Wno-assign-enum" OUTPUT_VARIABLE _supported_sentry_c_compiler_flags APPEND) + check_compiler_flags_output("-Werror -Wno-assign-enum -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-assign-enum" OUTPUT_VARIABLE _supported_sentry_cxx_compiler_flags APPEND) + + # -Wunknown-pragmas (caused by breakpad header) + check_compiler_flags_output("-Werror -Wno-unknown-pragmas -Wno-error=cpp" COMPILER_TYPE C OUTPUT_FLAGS "-Wno-unknown-pragmas" OUTPUT_VARIABLE _supported_sentry_c_compiler_flags APPEND) + check_compiler_flags_output("-Werror -Wno-unknown-pragmas -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unknown-pragmas" OUTPUT_VARIABLE _supported_sentry_cxx_compiler_flags APPEND) + + if (NOT _supported_sentry_c_compiler_flags STREQUAL "") + string(REPLACE " " ";" _supported_sentry_c_compiler_flags "${_supported_sentry_c_compiler_flags}") + endif() + if (NOT _supported_sentry_cxx_compiler_flags STREQUAL "") + string(REPLACE " " ";" _supported_sentry_cxx_compiler_flags "${_supported_sentry_cxx_compiler_flags}") + endif() + + if(TARGET sentry) + target_compile_options(sentry PRIVATE "$<$:${_supported_sentry_c_compiler_flags}>") + target_compile_options(sentry PRIVATE "$<$:${_supported_sentry_cxx_compiler_flags}>") + endif() + +endif() + +#################### if(_old_CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD "${_old_CMAKE_CXX_STANDARD}") endif() +if(_old_CMAKE_CXX_EXTENSIONS) + set(CMAKE_CXX_EXTENSIONS "${_old_CMAKE_CXX_EXTENSIONS}") +endif() diff --git a/cmake/FindIntl.cmake b/cmake/FindIntl.cmake deleted file mode 100644 index 6a260504422..00000000000 --- a/cmake/FindIntl.cmake +++ /dev/null @@ -1,61 +0,0 @@ -# Modified 2018-05-30: (Warzone) Fix find_library on Windows+vcpkg (needs NAME "libintl" in addition to "intl") - -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# FindIntl -# -------- -# -# Find the Gettext libintl headers and libraries. -# -# This module reports information about the Gettext libintl -# installation in several variables. General variables:: -# -# Intl_FOUND - true if the libintl headers and libraries were found -# Intl_INCLUDE_DIRS - the directory containing the libintl headers -# Intl_LIBRARIES - libintl libraries to be linked -# -# The following cache variables may also be set:: -# -# Intl_INCLUDE_DIR - the directory containing the libintl headers -# Intl_LIBRARY - the libintl library (if any) -# -# .. note:: -# On some platforms, such as Linux with GNU libc, the gettext -# functions are present in the C standard library and libintl -# is not required. ``Intl_LIBRARIES`` will be empty in this -# case. -# -# .. note:: -# If you wish to use the Gettext tools (``msgmerge``, -# ``msgfmt``, etc.), use :module:`FindGettext`. - - -# Written by Roger Leigh - -# Find include directory -find_path(Intl_INCLUDE_DIR - NAMES "libintl.h" - DOC "libintl include directory") -mark_as_advanced(Intl_INCLUDE_DIR) - -# Find all Intl libraries -find_library(Intl_LIBRARY NAMES "intl" "libintl" - DOC "libintl libraries (if not in the C library)") -mark_as_advanced(Intl_LIBRARY) - -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Intl - FOUND_VAR Intl_FOUND - REQUIRED_VARS Intl_INCLUDE_DIR - FAIL_MESSAGE "Failed to find Gettext libintl") - -if(Intl_FOUND) - set(Intl_INCLUDE_DIRS "${Intl_INCLUDE_DIR}") - if(Intl_LIBRARY) - set(Intl_LIBRARIES "${Intl_LIBRARY}") - else() - unset(Intl_LIBRARIES) - endif() -endif() diff --git a/cmake/FindOpus.cmake b/cmake/FindOpus.cmake index b0b232c59d0..2392d6c5cc0 100644 --- a/cmake/FindOpus.cmake +++ b/cmake/FindOpus.cmake @@ -1,23 +1,39 @@ # - Try to find the Opus library # Once done this will define # -# OPUS_FOUND - system has Opus -# OPUS_INCLUDE_DIR - the OggOpus include directory -# OPUS_LIBRARY - The Opus library +# Opus_FOUND - system has Opus +# Opus_INCLUDE_DIR - the OggOpus include directory +# Opus_LIBRARY - The Opus library # # Also creates the imported Opus::opus target -find_path(OPUS_INCLUDE_DIR opus/opus.h) -find_library(OPUS_LIBRARY NAMES opus) +# Try config mode first! +find_package(Opus CONFIG QUIET) # Deliberately quiet, so we can handle the result +if(Opus_FOUND) + if (TARGET Opus::opus) + # CONFIG mode succeeded + if(NOT Opus_INCLUDE_DIR) + get_target_property(Opus_INCLUDE_DIR Opus::opus INTERFACE_INCLUDE_DIRECTORIES) + endif() + if(NOT Opus_LIBRARY) + set(Opus_LIBRARY Opus::opus) + endif() + message(STATUS "Found Opus: ${Opus_INCLUDE_DIR}") + return() + endif() +endif() -mark_as_advanced(OPUS_INCLUDE_DIR OPUS_LIBRARY) +find_path(Opus_INCLUDE_DIR opus/opus.h) +find_library(Opus_LIBRARY NAMES opus) + +mark_as_advanced(Opus_INCLUDE_DIR Opus_LIBRARY) add_library(Opus::opus UNKNOWN IMPORTED) set_target_properties(Opus::opus PROPERTIES - IMPORTED_LOCATION "${OPUS_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${OPUS_INCLUDE_DIR}" + IMPORTED_LOCATION "${Opus_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${Opus_INCLUDE_DIR}" ) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Opus REQUIRED_VARS OPUS_LIBRARY OPUS_INCLUDE_DIR) +find_package_handle_standard_args(Opus REQUIRED_VARS Opus_LIBRARY Opus_INCLUDE_DIR) diff --git a/cmake/FindSQLite3.cmake b/cmake/FindSQLite3.cmake index f135c5d64a1..eb42cf3e4a0 100644 --- a/cmake/FindSQLite3.cmake +++ b/cmake/FindSQLite3.cmake @@ -1,6 +1,8 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. +# 2024-06-20: Modified by WZ to find vcpkg unofficial-sqlite3 first + #[=======================================================================[.rst: FindSQLite3 ----------- @@ -32,12 +34,61 @@ This module will set the following variables if found: #]=======================================================================] +cmake_policy(PUSH) +if(POLICY CMP0159) + cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_ +endif() + +if (VCPKG_TOOLCHAIN) + find_package(unofficial-sqlite3 CONFIG) + # If we found the vcpkg unofficial-sqlite3 configuration, return with that result + if(unofficial-sqlite3_FOUND AND TARGET unofficial::sqlite3::sqlite3) + get_target_property(SQLite3_INCLUDE_DIR unofficial::sqlite3::sqlite3 INTERFACE_INCLUDE_DIRECTORIES) + # Extract version information from the header file + if(SQLite3_INCLUDE_DIR) + file(STRINGS ${SQLite3_INCLUDE_DIR}/sqlite3.h _ver_line + REGEX "^#define SQLITE_VERSION *\"[0-9]+\\.[0-9]+\\.[0-9]+\"" + LIMIT_COUNT 1) + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" + SQLite3_VERSION "${_ver_line}") + unset(_ver_line) + endif() + set(SQLite3_LIBRARY unofficial::sqlite3::sqlite3) + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(SQLite3 + REQUIRED_VARS SQLite3_INCLUDE_DIR SQLite3_LIBRARY + VERSION_VAR SQLite3_VERSION) + + # Create the imported target + set(SQLite3_INCLUDE_DIRS ${SQLite3_INCLUDE_DIR}) + set(SQLite3_LIBRARIES ${SQLite3_LIBRARY}) + if(NOT TARGET SQLite::SQLite3) + add_library(SQLite::SQLite3 ALIAS unofficial::sqlite3::sqlite3) + endif() + + message(STATUS "Using vcpkg unofficial-sqlite3 configuration (${SQLite3_VERSION})") + cmake_policy(POP) + return() + else() + message(STATUS "Did not find vcpkg unofficial-sqlite3 configuration, reverting to regular check") + endif() +endif() + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_SQLite3 QUIET sqlite3) + # Look for the necessary header -find_path(SQLite3_INCLUDE_DIR NAMES sqlite3.h) +find_path(SQLite3_INCLUDE_DIR NAMES sqlite3.h + HINTS + ${PC_SQLite3_INCLUDE_DIRS} +) mark_as_advanced(SQLite3_INCLUDE_DIR) # Look for the necessary library -find_library(SQLite3_LIBRARY NAMES sqlite3 sqlite) +find_library(SQLite3_LIBRARY NAMES sqlite3 sqlite + HINTS + ${PC_SQLite3_LIBRARY_DIRS} +) mark_as_advanced(SQLite3_LIBRARY) # Extract version information from the header file @@ -66,3 +117,5 @@ if(SQLite3_FOUND) INTERFACE_INCLUDE_DIRECTORIES "${SQLite3_INCLUDE_DIR}") endif() endif() + +cmake_policy(POP) diff --git a/cmake/FindSodium.cmake b/cmake/FindSodium.cmake index 79f12992266..bd35442441d 100644 --- a/cmake/FindSodium.cmake +++ b/cmake/FindSodium.cmake @@ -10,12 +10,26 @@ include(FindPackageHandleStandardArgs) +function(GetSodiumVersion sodium_INCLUDE_DIR) + if(sodium_INCLUDE_DIR AND EXISTS "${sodium_INCLUDE_DIR}/sodium/version.h") + file(STRINGS "${sodium_INCLUDE_DIR}/sodium/version.h" SODIUM_VERSION_STRING_LINE REGEX "^#define[ \t]+SODIUM_VERSION_STRING[ \t]+\"[.0-9]+\"$") + string(REGEX REPLACE "^#define[ \t]+SODIUM_VERSION_STRING[ \t]+\"([.0-9]+)\"$" "\\1" sodium_VERSION "${SODIUM_VERSION_STRING_LINE}") + unset(SODIUM_VERSION_STRING_LINE) + else() + if (sodium_INCLUDE_DIR) + message ( WARNING "Can't find ${sodium_INCLUDE_DIR}/sodium/version.h" ) + endif() + set(sodium_VERSION "") + endif() + set(sodium_VERSION "${sodium_VERSION}" PARENT_SCOPE) +endfunction() + if (VCPKG_TOOLCHAIN) find_package(unofficial-sodium CONFIG) # If we found the vcpkg unofficial-sodium configuration, return with that result if(unofficial-sodium_FOUND AND TARGET unofficial-sodium::sodium) - set(sodium_VERSION "${unofficial-sodium_VERSION}") get_target_property(sodium_INCLUDE_DIR unofficial-sodium::sodium INTERFACE_INCLUDE_DIRECTORIES) + GetSodiumVersion("${sodium_INCLUDE_DIR}") find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME} REQUIRED_VARS sodium_INCLUDE_DIR VERSION_VAR sodium_VERSION) message(STATUS "Using vcpkg unofficial-sodium configuration (${sodium_VERSION})") return() @@ -52,16 +66,7 @@ FIND_LIBRARY( HINTS ${PCFG_SODIUM_LIBRARY_DIRS} ${PCFG_SODIUM_LIBDIR} ) -if(sodium_INCLUDE_DIR AND EXISTS "${sodium_INCLUDE_DIR}/sodium/version.h") - file(STRINGS "${sodium_INCLUDE_DIR}/sodium/version.h" SODIUM_VERSION_STRING_LINE REGEX "^#define[ \t]+SODIUM_VERSION_STRING[ \t]+\"[.0-9]+\"$") - string(REGEX REPLACE "^#define[ \t]+SODIUM_VERSION_STRING[ \t]+\"([.0-9]+)\"$" "\\1" sodium_VERSION "${SODIUM_VERSION_STRING_LINE}") - unset(SODIUM_VERSION_STRING_LINE) -else() - if (sodium_INCLUDE_DIR) - message ( WARNING "Can't find ${sodium_INCLUDE_DIR}/sodium/version.h" ) - endif() - set(sodium_VERSION "") -endif() +GetSodiumVersion("${sodium_INCLUDE_DIR}") find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME} REQUIRED_VARS sodium_INCLUDE_DIR sodium_LIBRARIES VERSION_VAR sodium_VERSION) diff --git a/cmake/WZVcpkgInit.cmake b/cmake/WZVcpkgInit.cmake index efdb6ae5420..eb446bff126 100644 --- a/cmake/WZVcpkgInit.cmake +++ b/cmake/WZVcpkgInit.cmake @@ -45,6 +45,6 @@ endif() if(VCPKG_TARGET_TRIPLET MATCHES "wasm32-emscripten") if(NOT DEFINED VCPKG_CHAINLOAD_TOOLCHAIN_FILE) - set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/.ci/emscripten/toolchain/Toolchain-Emscripten.cmake") + set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/.ci/cmake/toolchains/wasm32-emscripten.cmake") endif() endif() diff --git a/configure_mac.cmake b/configure_mac.cmake index 6480d4163fb..1d8a38b1bd5 100644 --- a/configure_mac.cmake +++ b/configure_mac.cmake @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.5...3.30) # Optional input defines: # - VCPKG_BUILD_TYPE : This will be used to modify the current triplet (once vcpkg is downloaded) @@ -10,17 +10,14 @@ cmake_minimum_required(VERSION 3.5) ######################################################## -# To ensure reproducible builds, pin to a specific vcpkg commit -set(VCPKG_COMMIT_SHA "11e79b1072c7f12d84258b77948cda3b166aac59") - -# WZ minimum supported macOS deployment target (< 10.9 is untested) -set(MIN_SUPPORTED_MACOSX_DEPLOYMENT_TARGET "10.9") +# WZ minimum supported macOS deployment target (< 10.12 is untested) +set(MIN_SUPPORTED_MACOSX_DEPLOYMENT_TARGET "10.12") # Vulkan SDK -set(VULKAN_SDK_VERSION "1.3.268.1") -set(VULKAN_SDK_DL_FILENAME "vulkansdk-macos-${VULKAN_SDK_VERSION}.dmg") +set(VULKAN_SDK_VERSION "1.3.296.0") +set(VULKAN_SDK_DL_FILENAME "vulkansdk-macos-${VULKAN_SDK_VERSION}.zip") set(VULKAN_SDK_DL_URL "https://sdk.lunarg.com/sdk/download/${VULKAN_SDK_VERSION}/mac/${VULKAN_SDK_DL_FILENAME}?Human=true") -set(VULKAN_SDK_DL_SHA256 "900c019ffac72564d7c4e9e52dd08ef7d4eb2b4425084fd4d2c3e35b36958646") +set(VULKAN_SDK_DL_SHA256 "393fd11f65a4001f12fd34fdd009c38045220ca3f735bc686d97822152b0f33c") ######################################################## @@ -73,7 +70,7 @@ if((CMAKE_HOST_SYSTEM_NAME MATCHES "^Darwin$") AND (DARWIN_VERSION VERSION_GREAT -DURL=${VULKAN_SDK_DL_URL} -DEXPECTED_SHA256=${VULKAN_SDK_DL_SHA256} -DOUT_DIR=${_vulkan_sdk_out_dir} - -P ${_repoBase}/macosx/configs/FetchPrebuilt.cmake + -P ${_repoBase}/platforms/macos/cmake/FetchPrebuilt.cmake WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE _exstatus ) @@ -147,7 +144,7 @@ endif() if((NOT DEFINED SKIP_VCPKG_BUILD) OR NOT SKIP_VCPKG_BUILD) ######################################################## -## 1-a.) Download vcpkg, pin to commit +## 2-a.) Download vcpkg, pin to commit execute_process(COMMAND ${CMAKE_COMMAND} -E echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++") execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++ Download vcpkg...") @@ -177,98 +174,27 @@ else() endif() execute_process( - COMMAND ${GIT_EXECUTABLE} reset --hard "${VCPKG_COMMIT_SHA}" + COMMAND ${GIT_EXECUTABLE} reset --hard origin/master WORKING_DIRECTORY "vcpkg" RESULT_VARIABLE _exstatus ) if(NOT _exstatus EQUAL 0) - message(FATAL_ERROR "Failed to pin vcpkg to specific commit: ${VCPKG_COMMIT_SHA}") + message(FATAL_ERROR "Failed reset vcpkg to latest origin/master") endif() ######################################################## -## 1-b.) Detect which version of AppleClang will be used (if --allowAppleClang is specified) - -# Make a new temp directory -execute_process( - COMMAND ${CMAKE_COMMAND} -E make_directory temp_compiler_detection - WORKING_DIRECTORY . -) +## 2-b.) Bootstrap vcpkg -# Generate a basic CMake project file that just outputs the desired variables -file(WRITE "temp_compiler_detection/CMakeLists.txt" "\ -cmake_minimum_required(VERSION 3.5) -project(detect_compiler CXX) -cmake_policy(SET CMP0025 NEW) +execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++ Bootstrap vcpkg...") +execute_process(COMMAND ${CMAKE_COMMAND} -E echo "./bootstrap-vcpkg.sh") -message(STATUS \"CMAKE_CXX_COMPILER_ID=\${CMAKE_CXX_COMPILER_ID}\") -message(STATUS \"CMAKE_CXX_COMPILER_VERSION=\${CMAKE_CXX_COMPILER_VERSION}\") -") - -set(_old_env_CXX "$ENV{CXX}") -set(ENV{CXX} "clang++") # matching behavior of --allowAppleClang in vcpkg's scripts/bootstrap.sh - -# Run a simple CMake configure, which will output according to the script above execute_process( - COMMAND ${CMAKE_COMMAND} . - OUTPUT_VARIABLE _detection_output - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY temp_compiler_detection -) - -set(ENV{CXX} "${_old_env_CXX}") -unset(_old_env_CXX) - -# Remove the temp directory -execute_process( - COMMAND ${CMAKE_COMMAND} -E remove_directory temp_compiler_detection - WORKING_DIRECTORY . -) - -if(_detection_output MATCHES "CMAKE_CXX_COMPILER_ID=([^\n]*)\n") - set(_detected_cxx_compiler_id "${CMAKE_MATCH_1}") -endif() - -if(_detection_output MATCHES "CMAKE_CXX_COMPILER_VERSION=([^\n]*)\n") - set(_detected_cxx_compiler_version "${CMAKE_MATCH_1}") -endif() - -unset(_detection_output) - -######################################################## -## 1-c.) Determine if --allowAppleClang can be specified - -set(_vcpkg_useAppleClang FALSE) -if((CMAKE_HOST_SYSTEM_NAME MATCHES "^Darwin$") AND (DARWIN_VERSION VERSION_GREATER_EQUAL "19.0")) - # macOS 10.15+ (Darwin 19.0.0+) supports the --allowAppleClang flag on bootstrap-vcpkg.sh - # if AppleClang >= 11.0 (Xcode 11.0+) is detected - if((_detected_cxx_compiler_id MATCHES "^AppleClang") AND (_detected_cxx_compiler_version VERSION_GREATER_EQUAL "11.0")) - set(_vcpkg_useAppleClang TRUE) - endif() -endif() - -set(_vcpkg_bootstrap_additional_params "") -if(_vcpkg_useAppleClang) - set(_vcpkg_bootstrap_additional_params "--allowAppleClang") -endif() - -######################################################## -## 1-d.) Build vcpkg - -execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++ Build vcpkg...") -execute_process(COMMAND ${CMAKE_COMMAND} -E echo "./bootstrap-vcpkg.sh ${_vcpkg_bootstrap_additional_params}") - -execute_process( - COMMAND ${CMAKE_COMMAND} -E env --unset=MACOSX_DEPLOYMENT_TARGET ./bootstrap-vcpkg.sh ${_vcpkg_bootstrap_additional_params} + COMMAND ${CMAKE_COMMAND} -E env --unset=MACOSX_DEPLOYMENT_TARGET ./bootstrap-vcpkg.sh WORKING_DIRECTORY "vcpkg" RESULT_VARIABLE _exstatus ) if(NOT _exstatus EQUAL 0) - if(_vcpkg_useAppleClang) - message(FATAL_ERROR "vcpkg bootstrap failed - please see error output above for resolution") - else() - # vcpkg requires modern gcc to compile itself on macOS < 10.15 (or Xcode < 11.0) - message(FATAL_ERROR "vcpkg bootstrap failed - please see error output above for resolution (suggestion: brew install gcc)") - endif() + message(FATAL_ERROR "vcpkg bootstrap failed - please see error output above for resolution") endif() if(DEFINED VCPKG_BUILD_TYPE) @@ -308,7 +234,7 @@ if(DEFINED ONLY_BUILD_VCPKG AND ONLY_BUILD_VCPKG) endif() ######################################################## -## 1-e.) Download & build WZ macOS dependencies +## 2-c.) Download & build WZ macOS dependencies execute_process(COMMAND ${CMAKE_COMMAND} -E echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++") execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++ vcpkg install dependencies...") @@ -347,22 +273,26 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++ vcpkg install finished") # 3.) CMake configure (generate Xcode project) set(_additional_configure_arguments "") -if(DEFINED WZ_DISTRIBUTOR) - set(_additional_configure_arguments "\"-DWZ_DISTRIBUTOR:STRING=${WZ_DISTRIBUTOR}\"") +if(NOT DEFINED WZ_DISTRIBUTOR) + set(WZ_DISTRIBUTOR "UNKNOWN") endif() +list(APPEND _additional_configure_arguments "-DCMAKE_FIND_USE_CMAKE_SYSTEM_PATH=FALSE" "-DCMAKE_FIND_USE_INSTALL_PREFIX=FALSE" "-DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE" "-DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE") if(DEFINED ADDITIONAL_CMAKE_ARGUMENTS) list(APPEND _additional_configure_arguments ${ADDITIONAL_CMAKE_ARGUMENTS}) endif() execute_process(COMMAND ${CMAKE_COMMAND} -E echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++") execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++ Running CMake configure (to generate Xcode project)...") +string(REPLACE ";" " " _debug_output_args "${_additional_configure_arguments}") +execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++ ${CMAKE_COMMAND} \"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake\" \"-DWZ_DISTRIBUTOR:STRING=${WZ_DISTRIBUTOR}\" ${_debug_output_args} -G Xcode -B . -S \"${_repoBase}\"") execute_process( COMMAND ${CMAKE_COMMAND} "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake" - -DGLEW_USE_STATIC_LIBS=ON + "-DWZ_DISTRIBUTOR:STRING=${WZ_DISTRIBUTOR}" ${_additional_configure_arguments} -G Xcode - "${_repoBase}" + -B . + -S "${_repoBase}" RESULT_VARIABLE _exstatus ) diff --git a/crowdin.yml b/crowdin.yml index 8d83f4da125..8d0572449ff 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,3 +1,7 @@ +project_id_env: CROWDIN_PROJECT_ID +api_token_env: CROWDIN_PERSONAL_TOKEN +preserve_hierarchy: true + files: - source: /po/warzone2100.pot translation: /po/%locale_with_underscore%.po @@ -14,6 +18,37 @@ files: fi: fi # Finnish ga-IE: ga # Irish hu: hu # Hungarian + id: id # Indonesian + it: it # Italian + ko: ko # Korean + lt: lt # Lithuanian + nl: nl # Dutch + pl: pl # Polish + pt-PT: pt # Portuguese + ru: ru # Russian + sk: sk # Slovak + sl: sl # Slovenian + tr: tr # Turkish + hr: hr # Croatian + eo: eo # Esperanto + la-LA: la # Latin + nb: nb # Norwegian Bokmal + - source: /po/guide/warzone2100_guide.pot + translation: /po/guide/%locale_with_underscore%.po + languages_mapping: + locale_with_underscore: + ro: ro # Romanian + fr: fr # French + es-ES: es # Spanish + cs: cs # Czech + da: da # Danish + de: de # German + el: el # Greek + fy-NL: fy # Frisian + fi: fi # Finnish + ga-IE: ga # Irish + hu: hu # Hungarian + id: id # Indonesian it: it # Italian ko: ko # Korean lt: lt # Lithuanian diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index ab44d478687..0e139179b25 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -188,6 +188,8 @@ if(WZ_ENABLE_BASIS_UNIVERSAL AND NOT WZ_CI_DISABLE_BASIS_COMPRESS_TEXTURES) # Normal Terrain file(GLOB TEXPAGES_TERRAIN + "${CMAKE_CURRENT_SOURCE_DIR}/base/texpages/page-80-water-1.png" + "${CMAKE_CURRENT_SOURCE_DIR}/base/texpages/page-81-water-2.png" "${CMAKE_CURRENT_SOURCE_DIR}/base/texpages/page-82-yellow-sand-arizona.png" "${CMAKE_CURRENT_SOURCE_DIR}/base/texpages/page-83-red-earth-arizona.png" "${CMAKE_CURRENT_SOURCE_DIR}/base/texpages/page-84-tiles-arizona.png" @@ -506,6 +508,7 @@ COMPRESS_ZIP(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/base.wz" "effects" "features" "gamedesc.lev" + "guidetopics" "ruleset.json" "images" "messages" @@ -605,7 +608,7 @@ if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/fonts") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/fonts") endif() foreach(font_file ${wz2100_fonts_FILES}) - add_custom_command( + add_custom_command( TARGET data POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${font_file}" "${CMAKE_CURRENT_BINARY_DIR}/fonts" @@ -622,7 +625,7 @@ foreach(mod_file ${wz2100_mods_FILES}) file(RELATIVE_PATH _mods_file_relative_path "${CMAKE_CURRENT_BINARY_DIR}/mods_staging" "${mod_file}") get_filename_component(_mods_file_subdir_path "${_mods_file_relative_path}" DIRECTORY) get_filename_component(_mods_file_name "${_mods_file_relative_path}" NAME) - add_custom_command( + add_custom_command( TARGET data POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${mod_file}" "${CMAKE_CURRENT_BINARY_DIR}/mods/${_mods_file_subdir_path}/${_mods_file_name}" diff --git a/data/WZPrebuiltPackages.cmake b/data/WZPrebuiltPackages.cmake index c973bf24353..8c8ea8ffccc 100644 --- a/data/WZPrebuiltPackages.cmake +++ b/data/WZPrebuiltPackages.cmake @@ -2,5 +2,5 @@ # Prebuilt package DL info # terrain_overrides/high.wz -set(WZ_PREBUILT_TERRAIN_HIGH_DL_URL "https://github.com/Warzone2100/data-terrain-high/releases/download/v1/high.wz") -set(WZ_PREBUILT_TERRAIN_HIGH_DL_SHA512 "44a39e585344b25ab0fa4ed769f2b48bf23a0e4fc4b23e0fab4e68643cc6e3ebeabba790e8b1e6c96493ad01b6a2f09e92b893063013077dcac2475f0b5373d6") +set(WZ_PREBUILT_TERRAIN_HIGH_DL_URL "https://github.com/Warzone2100/data-terrain-high/releases/download/v2/high.wz") +set(WZ_PREBUILT_TERRAIN_HIGH_DL_SHA512 "c96ee757c6771ed7cfd104bf4d86bf80a6ce9f1598a16bd26a711fcf2359ae7b13d3812d9cbe64ff6d1e9d55ed7f28c72a150e1c755cc595928f893029802570") diff --git a/data/base/audio/audio.cfg b/data/base/audio/audio.cfg deleted file mode 100644 index 9e4d0abf32b..00000000000 --- a/data/base/audio/audio.cfg +++ /dev/null @@ -1,475 +0,0 @@ -audio_module -{ - /* audio format: audio [filename] [oneshot/loop] [volume 0-100] [range] */ - -/*beeps*/ - - audio "beep1.ogg" oneshot 30 1800 /*Close Window*/ - audio "beep2.ogg" oneshot 30 1800 /*Open New Window*/ - audio "beep3.ogg" oneshot 30 1800 - audio "beep4.ogg" oneshot 15 1800 /*Select*/ - audio "beep5.ogg" oneshot 30 1800 - audio "beep6.ogg" oneshot 30 1800 - audio "beep7.ogg" oneshot 30 1800 /*Zoom On Radar*/ - audio "beep8.ogg" oneshot 30 1800 /*Buzzer*/ - audio "beep9.ogg" oneshot 100 1800 - audio "gmeshtdn.ogg" oneshot 100 1800 /*Game Shutdown*/ -/*Design Sequence*/ - - audio "pcv331.ogg" oneshot 100 1800 /*Turret Selected*/ - audio "pcv332.ogg" oneshot 100 1800 /*Body Selected*/ - audio "pcv333.ogg" oneshot 100 1800 /*Propulsion Selected*/ - audio "pcv334.ogg" oneshot 100 1800 /*Design Completed*/ - -/*Structures*/ - - audio "pcv335.ogg" oneshot 100 1800 /*Construction Started*/ - audio "pcv336.ogg" oneshot 100 1800 /*Construction Completed*/ - audio "pcv337.ogg" oneshot 100 1800 /*Structure Under Attack*/ - audio "pcv339.ogg" oneshot 100 1800 /*Structure Repair In Progress*/ - audio "pcv340.ogg" oneshot 100 1800 /*Structure Demolished*/ - -/*Power*/ - - audio "pcv341.ogg" oneshot 100 1800 /*Power Generator Under Attack*/ - audio "pcv342.ogg" oneshot 100 1800 /*Power Generator Destroyed*/ - audio "pcv343.ogg" oneshot 100 1800 /*Power Low*/ - audio "pcv344.ogg" oneshot 100 1800 /*Power Resource*/ - audio "pcv345.ogg" oneshot 100 1800 /*Derrick Under Attack*/ - audio "pcv346.ogg" oneshot 100 1800 /*Derrick Destroyed*/ - audio "pcv347.ogg" oneshot 100 1800 /*Resource Depleted*/ - audio "pcv348.ogg" oneshot 100 1800 /*Power Transfer in Progress*/ - audio "pcv349.ogg" oneshot 100 1800 /*Power Generator Required*/ - -/*Research*/ - - audio "pcv350.ogg" oneshot 100 1800 /*Research Facility Required*/ - audio "pcv351.ogg" oneshot 100 1800 /*Artefact*/ - audio "pcv352.ogg" oneshot 100 1800 /*Artefact Recovered*/ - audio "pcv353.ogg" oneshot 100 1800 /*New Research Project Available*/ - audio "pcv354.ogg" oneshot 100 1800 /*New Structure Available*/ - audio "pcv355.ogg" oneshot 100 1800 /*New Component Available*/ - audio "pcv356.ogg" oneshot 100 1800 /*New Cyborg Available*/ - audio "pcv357.ogg" oneshot 100 1800 /*Research Completed*/ - audio "pcv358.ogg" oneshot 100 1800 /*Major Research Completed*/ - audio "pcv359.ogg" oneshot 100 1800 /*Structure Research Completed*/ - audio "pcv360.ogg" oneshot 100 1800 /*Power Research Completed*/ - audio "pcv361.ogg" oneshot 100 1800 /*Computer Research Completed*/ - audio "pcv362.ogg" oneshot 100 1800 /*Vehicle Research Completed*/ - audio "pcv363.ogg" oneshot 100 1800 /*Systems Research Completed*/ - audio "pcv364.ogg" oneshot 100 1800 /*Weapon Research Completed*/ - audio "pcv365.ogg" oneshot 100 1800 /*Cyborg Research Completed*/ - -/*Production*/ - - audio "pcv366.ogg" oneshot 100 1800 /*Production Started*/ - audio "pcv367.ogg" oneshot 100 1800 /*Production Completed*/ - audio "pcv368.ogg" oneshot 100 1800 /*Production Paused*/ - audio "pcv369.ogg" oneshot 100 1800 /*Production Cancelled*/ - audio "pcv370.ogg" oneshot 100 1800 /*Delivery Point Assigned*/ - audio "pcv371.ogg" oneshot 100 1800 /*Delivery Point Assigned to*/ - -/*Repair*/ - - audio "pcv372.ogg" oneshot 100 1800 /*Unit Repaired*/ - -/*Detection*/ - - audio "pcv373.ogg" oneshot 100 1800 /*Scavengers Detected*/ - audio "pcv374.ogg" oneshot 100 1800 /*Scavenger Base Detected*/ - audio "pcv375.ogg" oneshot 100 1800 /*Scavenger Outpost Detected*/ - audio "pcv376.ogg" oneshot 100 1800 /*Resource Detected*/ - audio "pcv377.ogg" oneshot 100 1800 /*Artefact Detected*/ - audio "pcv378.ogg" oneshot 100 1800 /*Enemy Unit Detected*/ - audio "pcv379.ogg" oneshot 100 1800 /*Enemy Base Detected*/ - audio "pcv380.ogg" oneshot 100 1800 /*Ally Detected*/ - audio "pcv381.ogg" oneshot 100 1800 /*Enemy Transport Detected*/ - audio "pcv382.ogg" oneshot 100 1800 /*Enemy LZ Detected*/ - audio "pcv383.ogg" oneshot 100 1800 /*Friendly Landing Zone Detected*/ - audio "pcv384.ogg" oneshot 100 1800 /*NEXUS Tower Detected*/ - audio "pcv385.ogg" oneshot 100 1800 /*NEXUS Turret Detected*/ - audio "pcv386.ogg" oneshot 100 1800 /*NEXUS Unit Detected*/ - audio "pcv387.ogg" oneshot 100 1800 /*Enemy Battery Detected*/ - audio "pcv388.ogg" oneshot 100 1800 /*Enemy VTOLs Detected*/ - -/*Status*/ - - audio "pcv389.ogg" oneshot 100 1800 /*Scavenger Base*/ - audio "pcv390.ogg" oneshot 100 1800 /*Scavenger Outpost*/ - audio "pcv391.ogg" oneshot 100 1800 /*Scavenger Outpost Eradicated*/ - audio "pcv392.ogg" oneshot 100 1800 /*Scavenger Base Eradicated*/ - audio "pcv393.ogg" oneshot 100 1800 /*Enemy Base*/ - audio "pcv394.ogg" oneshot 100 1800 /*Enemy Base Eradicated*/ - audio "pcv395.ogg" oneshot 100 1800 /*Incoming Enemy Transport*/ - audio "pcv396.ogg" oneshot 100 1800 /*Enemy Landing Zone*/ - audio "pcv397.ogg" oneshot 100 1800 /*LZ 1*/ - audio "pcv398.ogg" oneshot 100 1800 /*LZ 2*/ - -/*Combat*/ - - audio "pcv399.ogg" oneshot 100 1800 /*Unit Under Attack*/ - audio "pcv400.ogg" oneshot 100 1800 /*Unit Destroyed*/ - audio "pcv401.ogg" oneshot 100 1800 /*Unit Retreating*/ - audio "pcv402.ogg" oneshot 100 1800 /*Unit Returning for Repair*/ - -/*Artillery Batteries*/ - - audio "pcv403.ogg" oneshot 100 1800 /*Assigned to Sensor*/ - audio "pcv404.ogg" oneshot 100 1800 /*Sensor Locked On*/ - audio "pcv405.ogg" oneshot 100 1800 /*Assigned to Counter-battery Radar*/ - audio "pcv406.ogg" oneshot 100 1800 /*Enemy Battery Located*/ - audio "pcv407.ogg" oneshot 100 1800 /*Battery Firing Counter Attack*/ - -/*VTOLs*/ - - audio "pcv408.ogg" oneshot 100 1800 /*Interceptors Launched*/ - audio "pcv409.ogg" oneshot 100 1800 /*Re-arming*/ - audio "pcv410.ogg" oneshot 100 1800 /*VTOLs Engaging*/ - audio "pcv411.ogg" oneshot 100 1800 /*Assigned*/ - audio "pcv412.ogg" oneshot 100 1800 /*Interceptors Assigned*/ - -/*Command Console*/ - - audio "pcv413.ogg" oneshot 100 1800 /*Command Console Activated*/ - audio "pcv414.ogg" oneshot 100 1800 /*Short Range*/ - audio "pcv415.ogg" oneshot 100 1800 /*Long Range*/ - audio "pcv416.ogg" oneshot 100 1800 /*Optimum Range*/ - audio "pcv417.ogg" oneshot 100 1800 /*Retreat at Medium Damage*/ - audio "pcv418.ogg" oneshot 100 1800 /*Retreat at Heavy Damage*/ - audio "pcv419.ogg" oneshot 100 1800 /*No Retreat*/ - audio "pcv420.ogg" oneshot 100 1800 /*Fire-At-Will*/ - audio "pcv421.ogg" oneshot 100 1800 /*Return Fire*/ - audio "pcv422.ogg" oneshot 100 1800 /*Cease Fire*/ - audio "pcv423.ogg" oneshot 100 1800 /*Hold Position*/ - audio "pcv424.ogg" oneshot 100 1800 /*Guard*/ - audio "pcv425.ogg" oneshot 100 1800 /*Pursue*/ - audio "pcv426.ogg" oneshot 100 1800 /*Patrol*/ - audio "pcv427.ogg" oneshot 100 1800 /*Return to LZ*/ - audio "pcv428.ogg" oneshot 100 1800 /*Recycling*/ - audio "pcv429.ogg" oneshot 100 1800 /*Scatter*/ - -/*Tutorial Stuff*/ - - audio "pcv430.ogg" oneshot 100 1800 /*Not possible. Try again*/ - audio "pcv431.ogg" oneshot 100 1800 /*No*/ - audio "pcv432.ogg" oneshot 100 1800 /*That is incorrect*/ - audio "pcv433.ogg" oneshot 100 1800 /*Well done*/ - audio "pcv434.ogg" oneshot 100 1800 /*Excellent*/ - -/*Group & Commander Assignment*/ - - audio "pcv435.ogg" oneshot 100 1800 /*Assigned to Commander*/ - audio "pcv436.ogg" oneshot 100 1800 /*Group Reporting:*/ - audio "pcv437.ogg" oneshot 100 1800 /*Commander Reporting:*/ - -/*Routing*/ - - audio "pcv438.ogg" oneshot 100 1800 /*Route Obstructed*/ - audio "pcv439.ogg" oneshot 100 1800 /*No Route Available*/ - -/*Transports & LZs*/ - - audio "pcv440.ogg" oneshot 100 1800 /*Reinforcements are available*/ - audio "pcv441.ogg" oneshot 100 1800 /*Reinforcements in Transit*/ - audio "pcv442.ogg" oneshot 100 1800 /*Reinforcements Landing*/ - audio "pcv443.ogg" oneshot 100 1800 /*Transport Under Attack*/ - audio "pcv444.ogg" oneshot 100 1800 /*Transport Repairing*/ - audio "pcv445.ogg" oneshot 100 1800 /*LZ Compromised*/ - audio "lz-clear.ogg" oneshot 100 1800 /*LZ Clear*/ - audio "pcv446.ogg" oneshot 100 1800 /*Transport Returning to Base*/ - audio "pcv447.ogg" oneshot 100 1800 /*Transport Unable to Land. Aborting drop*/ - -/*Mission Messages*/ - - audio "pcv448.ogg" oneshot 100 1800 /*Mission Objective*/ - audio "pcv449.ogg" oneshot 100 1800 /*Mission Update*/ - audio "pcv450.ogg" oneshot 100 1800 /*Warzone Paused*/ - audio "pcv451.ogg" oneshot 100 1800 /*Warzone Active*/ - audio "pcv452.ogg" oneshot 100 1800 /*Mission Results*/ - audio "pcv453.ogg" oneshot 100 1800 /*Research Stolen*/ - audio "pcv454.ogg" oneshot 100 1800 /*Technology Taken*/ - audio "pcv455.ogg" oneshot 100 1800 /*Incoming Transmission*/ - audio "pcv456.ogg" oneshot 100 1800 /*Incoming Intelligence Report*/ - audio "pcv458.ogg" oneshot 100 1800 /*Mission Failed*/ - audio "pcv459.ogg" oneshot 100 1800 /*Mission Successful*/ - audio "pcv460.ogg" oneshot 100 1800 /*Objective Accomplished*/ - audio "pcv461.ogg" oneshot 100 1800 /*Objective Failed*/ - audio "pcv462.ogg" oneshot 100 1800 /*Mission Timer Activated*/ - audio "pcv463.ogg" oneshot 100 1800 /*10 Minutes Remaining*/ - audio "pcv464.ogg" oneshot 100 1800 /*5 Minutes Remaining*/ - audio "pcv465.ogg" oneshot 100 1800 /*3 Minutes Remaining*/ - audio "pcv466.ogg" oneshot 100 1800 /*2 Minutes Remaining*/ - audio "pcv467.ogg" oneshot 100 1800 /*1 Minute Remaining*/ - audio "pcv468.ogg" oneshot 100 1800 /*Unit Captured*/ - audio "pcv469.ogg" oneshot 100 1800 /*Warning! System Failure Imminent*/ - audio "pcv470.ogg" oneshot 100 1800 /*You are defeated!*/ - audio "pcv471.ogg" oneshot 100 1800 /*Missile Codes Deciphered*/ - audio "pcv472.ogg" oneshot 100 1800 /*First Stage Missile Codes Deciphered*/ - audio "pcv473.ogg" oneshot 100 1800 /*Second Stage Missile Codes Deciphered*/ - audio "pcv474.ogg" oneshot 100 1800 /*Third Stage Missile Codes Deciphered*/ - audio "pcv475.ogg" oneshot 100 1800 /*Missile Codes Cracked*/ - audio "pcv476.ogg" oneshot 100 1800 /*Entering Warzone*/ - audio "pcv477.ogg" oneshot 100 1800 /*Alliance Accepted*/ - audio "pcv478.ogg" oneshot 100 1800 /*Alliance Broken*/ - audio "pcv479.ogg" oneshot 100 1800 /*Alliance Offered*/ - audio "pcv480.ogg" oneshot 100 1800 /*Player Entering Warzone*/ - audio "pcv481.ogg" oneshot 100 1800 /*Player Exiting Warzone*/ - audio "pcv482.ogg" oneshot 100 1800 /*Gift Received*/ - audio "power-transferred.ogg" oneshot 100 1800 /*Power Transferred*/ - audio "pcv484.ogg" oneshot 100 1800 /*Sensor Download*/ - audio "pcv485.ogg" oneshot 100 1800 /*Technology Transferred*/ - audio "pcv486.ogg" oneshot 100 1800 /*Units Transferred*/ - -/*Group & Commander Voices - Male */ - - audio "group.ogg" oneshot 100 1800 - audio "9.ogg" oneshot 100 1800 - audio "8.ogg" oneshot 100 1800 - audio "7.ogg" oneshot 100 1800 - audio "6.ogg" oneshot 100 1800 - audio "5.ogg" oneshot 100 1800 - audio "4.ogg" oneshot 100 1800 - audio "3.ogg" oneshot 100 1800 - audio "2.ogg" oneshot 100 1800 - audio "1.ogg" oneshot 100 1800 - audio "0.ogg" oneshot 100 1800 - audio "reprting.ogg" oneshot 100 1800 - audio "commnder.ogg" oneshot 100 1800 - audio "com021.ogg" oneshot 100 1800 /*Scavengers Detected*/ - audio "com022.ogg" oneshot 100 1800 /*Scavenger Base Detected*/ - audio "com023.ogg" oneshot 100 1800 /*Scavenger Outpost Detected*/ - audio "com024.ogg" oneshot 100 1800 /*Resource Detected*/ - audio "com025.ogg" oneshot 100 1800 /*Artefact Detected*/ - audio "com026.ogg" oneshot 100 1800 /*Enemy Detected*/ - audio "com027.ogg" oneshot 100 1800 /*Enemy Base Detected*/ - audio "com028.ogg" oneshot 100 1800 /*Ally Detected*/ - audio "com029.ogg" oneshot 100 1800 /*Enemy Transport Detected*/ - audio "com030.ogg" oneshot 100 1800 /*Enemy LZ Detected*/ - audio "com031.ogg" oneshot 100 1800 /*Friendly Landing Zone Detected*/ - audio "com032.ogg" oneshot 100 1800 /*NEXUS Tower Detected*/ - audio "com033.ogg" oneshot 100 1800 /*NEXUS Turret Detected*/ - audio "com034.ogg" oneshot 100 1800 /*NEXUS Detected*/ - audio "com035.ogg" oneshot 100 1800 /*Enemy Battery Detected*/ - audio "com036.ogg" oneshot 100 1800 /*Enemy VTOLs Detected*/ - audio "com037.ogg" oneshot 100 1800 /*Route Obstructed*/ - audio "com038.ogg" oneshot 100 1800 /*No Route Available*/ - audio "com039.ogg" oneshot 100 1800 /*Unable to Comply*/ - audio "com040.ogg" oneshot 100 1800 /*Returning for Repair*/ - audio "com041.ogg" oneshot 100 1800 /*Heading for Rally Point*/ - - -/*RADIO CLICKS*/ - - audio "radclik1.ogg" oneshot 100 1800 - audio "radclik2.ogg" oneshot 100 1800 - audio "radclik3.ogg" oneshot 100 1800 - audio "radclik4.ogg" oneshot 100 1800 - audio "radclik5.ogg" oneshot 100 1800 - audio "radclik6.ogg" oneshot 100 1800 - -/*TRANSPORT PILOTS*/ - - audio "t-aprolz.ogg" oneshot 100 1800 /*Approaching LZ*/ - audio "t-arboys.ogg" oneshot 100 1800 /*Alright boys*/ - audio "t-grnli5.ogg" oneshot 100 1800 /*You will have a green light in 5*/ - audio "t-grnli4.ogg" oneshot 100 1800 /*4*/ - audio "t-grnli3.ogg" oneshot 100 1800 /*3*/ - audio "t-grnli2.ogg" oneshot 100 1800 /*2*/ - audio "t-gogogo.ogg" oneshot 100 1800 /*Go Go Go!*/ - audio "t-dustof.ogg" oneshot 100 1800 /*Prepare for dust off*/ - -/*VTOL Pilots*/ - - /*Ver-1*/ - - audio "v-eloc1.ogg" oneshot 100 1800 /*Enemy located*/ - audio "v-onway1.ogg" oneshot 100 1800 /*On our way*/ - audio "v-retba1.ogg" oneshot 100 1800 /*Returning to base*/ - audio "v-locon1.ogg" oneshot 100 1800 /*Locked-on*/ - audio "v-atkrn1.ogg" oneshot 100 1800 /*Commencing attack run*/ - audio "v-abtrn1.ogg" oneshot 100 1800 /*Aborting attack run*/ - - - /*Ver-2*/ - - audio "v-eloc2.ogg" oneshot 100 1800 /*Enemy located*/ - audio "v-onway2.ogg" oneshot 100 1800 /*On our way*/ - audio "v-retba2.ogg" oneshot 100 1800 /*Returning to base*/ - audio "v-locon2.ogg" oneshot 100 1800 /*Locked-on*/ - audio "v-atkrn2.ogg" oneshot 100 1800 /*Commencing attack run*/ - audio "v-abtrn2.ogg" oneshot 100 1800 /*Aborting attack run*/ - - /*Ver-3*/ - - audio "v-eloc3.ogg" oneshot 100 1800 /*Enemy located*/ - audio "v-onway3.ogg" oneshot 100 1800 /*On our way*/ - audio "v-retba3.ogg" oneshot 100 1800 /*Returning to base*/ - audio "v-locon3.ogg" oneshot 100 1800 /*Locked-on*/ - audio "v-atkrn3.ogg" oneshot 100 1800 /*Commencing attack run*/ - audio "v-abtrn3.ogg" oneshot 100 1800 /*Aborting attack run*/ - -/*THE COLLECTIVE*/ - - audio "col011a.ogg" oneshot 100 1800 /*Cleanse & Destroy*/ - audio "col012a.ogg" oneshot 100 1800 /*Affirmative destroying biologicals*/ - audio "col013a.ogg" oneshot 100 1800 /*Attack*/ - audio "col014a.ogg" oneshot 100 1800 /*Fire!*/ - audio "col015a.ogg" oneshot 100 1800 /*Enemy Detected*/ - audio "col016a.ogg" oneshot 100 1800 /*Engaging*/ - audio "col017a.ogg" oneshot 100 1800 /*Starting Attack Run*/ - audio "col018a.ogg" oneshot 100 1800 /*Die!*/ - audio "col019a.ogg" oneshot 100 1800 /*Intercept and Destroy*/ - audio "col020a.ogg" oneshot 100 1800 /*Enemy Destroyed*/ - -/*SFX*/ - -/*weapon sounds*/ - - audio "rocket.ogg" oneshot 100 1800 - audio "rotlsr.ogg" oneshot 100 1800 /*Rotary Laser*/ - audio "gaussgun.ogg" oneshot 100 1800 - audio "lrgcan.ogg" oneshot 100 1800 /*Large Cannon*/ - audio "smlcan.ogg" oneshot 100 1800 /*Small Cannon*/ - audio "medcan.ogg" oneshot 100 1800 /*Medium Cannon*/ - audio "flmthrow.ogg" oneshot 100 1800 /*Flame Thrower*/ - audio "plslsr.ogg" oneshot 100 1800 /*Pulse Laser*/ - audio "bemlsr.ogg" oneshot 100 1800 /*Beam Laser*/ - audio "mortar.ogg" oneshot 100 1800 - audio "hwtzflgt.ogg" oneshot 100 1800 /*Howitz Flight*/ - audio "mgbar1.ogg" oneshot 100 1800 - audio "mgbar2.ogg" oneshot 70 1800 - audio "mgbar3.ogg" oneshot 100 1800 - audio "mgheavy.ogg" oneshot 100 1800 - audio "mgtower.ogg" oneshot 100 1800 - audio "splash.ogg" oneshot 100 1800 - audio "asltmg.ogg" oneshot 100 1800 - audio "rapdcan.ogg" oneshot 100 1800 - audio "hivelcan.ogg" oneshot 100 1800 - audio "nxstower.ogg" oneshot 100 1800 - -/* Construction sounds */ - - audio "weld-1.ogg" oneshot 20 1800 - audio "weld-2.ogg" oneshot 20 1800 - audio "bldstart.ogg" oneshot 20 1800 - audio "bldloop.ogg" loop 20 1800 - audio "build1.ogg" oneshot 20 1800 - audio "build2.ogg" oneshot 20 1800 - audio "build3.ogg" oneshot 20 1800 - audio "build4.ogg" oneshot 20 1800 - -/*Explosions*/ - - audio "smlexpl.ogg" oneshot 100 1800 - audio "lsrexpl.ogg" oneshot 100 1800 - audio "lrgexpl.ogg" oneshot 100 1800 - audio "atnkexpl.ogg" oneshot 100 1800 - audio "richet1.ogg" oneshot 100 1800 - audio "richet2.ogg" oneshot 100 1800 - audio "richet3.ogg" oneshot 100 1800 - audio "squish.ogg" oneshot 100 1800 - audio "bldfall.ogg" oneshot 100 1800 - audio "nxsexpld.ogg" oneshot 100 1800 - -/* Gazza's droid engine noises */ - - /*Constructor droid*/ - audio "con-move-off.ogg" oneshot 15 1800 - audio "con-move.ogg" loop 15 1800 - audio "con-shut-down.ogg" oneshot 15 1800 - - /*Transport*/ - audio "tflight.ogg" loop 30 1800 /*Blimp Flight*/ - audio "thover.ogg" loop 30 1800 /*Blimp Idle*/ - audio "tland.ogg" oneshot 30 1800 /*Blimp Land*/ - audio "tstart.ogg" oneshot 30 1800 /*Blimp Take off*/ - - /*VTOLS*/ - audio "vtolland.ogg" oneshot 15 1800 - audio "vtoloff.ogg" oneshot 15 1800 - audio "vtol-move.ogg" loop 15 1800 - - /*Treads*/ - audio "tread.ogg" loop 15 1800 - - /*Hover*/ - audio "hovmove.ogg" loop 15 1800 - audio "hovstart.ogg" oneshot 15 1800 - audio "hovstop.ogg" oneshot 15 1800 - - /* Cyborgs */ - audio "cyber-move.ogg" loop 15 1800 - -/*Building FX*/ - - audio "oilpump.ogg" oneshot 5 1800 - audio "powerhum.ogg" loop 10 1800 - audio "powerspk.ogg" oneshot 10 1800 - audio "steam.ogg" oneshot 20 1800 - audio "ecmtower.ogg" oneshot 20 1800 - audio "freroar.ogg" oneshot 100 1800 - -/*Miscellaneous*/ - audio "help.ogg" oneshot 100 1800 - audio "scream.ogg" oneshot 100 1800 - audio "scream2.ogg" oneshot 100 1800 - audio "scream3.ogg" oneshot 100 1800 - audio "silence.ogg" oneshot 100 1800 - -/*Extra*/ - - audio "lndgzne.ogg" oneshot 100 1800 /* Landing Zone */ - audio "pcv652.ogg" oneshot 100 1800 /*Satellite Uplink */ - audio "pcv653.ogg" oneshot 100 1800 /*NASDA Central */ - audio "pcv654.ogg" oneshot 100 1800 /*Nuclear Reactor */ - audio "pcv655.ogg" oneshot 100 1800 /*SAM Site */ - audio "pcv656.ogg" oneshot 100 1800 /*Missile Silo */ - audio "nmedeted.ogg" oneshot 100 1800 /*Enemy Detected */ - audio "pcv611.ogg" oneshot 100 1800 /*Structure Captured */ - audio "pcv612.ogg" oneshot 100 1800 /*Civilian Rescued */ - audio "pcv613.ogg" oneshot 100 1800 /*Civilians Rescued */ - audio "pcv615.ogg" oneshot 100 1800 /*Units Rescued */ - audio "pcv616.ogg" oneshot 100 1800 /*Group Rescued */ - audio "pcv618.ogg" oneshot 100 1800 /*Group Captured */ - audio "pcv621.ogg" oneshot 100 1800 /*Objective Captured */ - audio "pcv622.ogg" oneshot 100 1800 /*Objective Destroyed */ - audio "pcv623.ogg" oneshot 100 1800 /*Structure Infected */ - audio "pcv625.ogg" oneshot 100 1800 /*Group Infected */ - audio "pcv629.ogg" oneshot 100 1800 /*Out Of Time */ - audio "pcv631.ogg" oneshot 100 1800 /*Enemy Escaped */ - audio "pcv632.ogg" oneshot 100 1800 /*Enemy Escaping */ - audio "pcv633.ogg" oneshot 100 1800 /*Enemy Transport Landing */ - audio "pcv635.ogg" oneshot 100 1800 /*Team Alpha Eradicated */ - audio "pcv636.ogg" oneshot 100 1800 /*Team Beta Eradicated */ - audio "pcv637.ogg" oneshot 100 1800 /*Team Gamma Eradicated */ - audio "pcv638.ogg" oneshot 100 1800 /*Team Alpha Rescued */ - audio "pcv639.ogg" oneshot 100 1800 /*Team Beta Rescued */ - audio "pcv640.ogg" oneshot 100 1800 /*Team Gamma Rescued */ - audio "pcv650.ogg" oneshot 100 1800 /*Laser Satellite firing */ - audio "pcv657.ogg" oneshot 100 1800 /*Incoming Laser Satellite Strike */ - -/* Nexus */ - audio "defabsrd.ogg" oneshot 100 1800 - audio "defnut.ogg" oneshot 100 1800 - audio "laugh1.ogg" oneshot 100 1800 - audio "laugh2.ogg" oneshot 100 1800 - audio "laugh3.ogg" oneshot 100 1800 - audio "pordcomp.ogg" oneshot 100 1800 - audio "resabsrd.ogg" oneshot 100 1800 - audio "strutabs.ogg" oneshot 100 1800 - audio "strutnut.ogg" oneshot 100 1800 - audio "synplnk.ogg" oneshot 100 1800 - audio "untabsrd.ogg" oneshot 100 1800 - audio "untnut.ogg" oneshot 100 1800 - -/* Multiplayer audio */ - - audio "cybgrnd.ogg" oneshot 100 1800 - audio "hvcybmov.ogg" oneshot 100 1800 - audio "emp.ogg" oneshot 100 1800 - audio "hevlsr.ogg" oneshot 100 1800 - audio "plasflm.ogg" oneshot 100 1800 - audio "uplink.ogg" oneshot 100 1800 - audio "lasstrk.ogg" oneshot 100 1800 - audio "beacon.ogg" oneshot 100 1800 -} diff --git a/data/base/audio/audio.json b/data/base/audio/audio.json new file mode 100644 index 00000000000..43874ec5561 --- /dev/null +++ b/data/base/audio/audio.json @@ -0,0 +1,520 @@ +{ + "_Format": { + "_comment": "fileName: [file.ogg], loop: [false/true], range: [world units, 128 = 1 tile], volume: [0-100]" + }, + "Beeps": { + "_name": "Beep sounds", + "data": [ + { "fileName": "beep1.ogg", "loop": false, "range": 1800, "volume": 30, "z_comment": "Close Window" }, + { "fileName": "beep2.ogg", "loop": false, "range": 1800, "volume": 30, "z_comment": "Open New Window" }, + { "fileName": "beep3.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep4.ogg", "loop": false, "range": 1800, "volume": 15, "z_comment": "Select" }, + { "fileName": "beep5.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep6.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep7.ogg", "loop": false, "range": 1800, "volume": 30, "z_comment": "Zoom On Radar" }, + { "fileName": "beep8.ogg", "loop": false, "range": 1800, "volume": 30, "z_comment": "Buzzer" }, + { "fileName": "beep9.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "gmeshtdn.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Game Shutdown" } + ] + }, + "DesignSequences": { + "_name": "Design sequence sounds", + "data": [ + { "fileName": "pcv331.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Turret Selected" }, + { "fileName": "pcv332.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Body Selected" }, + { "fileName": "pcv333.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Propulsion Selected" }, + { "fileName": "pcv334.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Design Completed" } + ] + }, + "Structures": { + "_name": "Structures sounds", + "data": [ + { "fileName": "pcv335.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Construction Started" }, + { "fileName": "pcv336.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Construction Completed" }, + { "fileName": "pcv337.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Structure Under Attack" }, + { "fileName": "pcv339.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Structure Repair In Progress" }, + { "fileName": "pcv340.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Structure Demolished" } + ] + }, + "Power": { + "_name": "Power sounds", + "data": [ + { "fileName": "pcv341.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Power Generator Under Attack" }, + { "fileName": "pcv342.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Power Generator Destroyed" }, + { "fileName": "pcv343.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Power Low" }, + { "fileName": "pcv344.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Power Resource" }, + { "fileName": "pcv345.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Derrick Under Attack" }, + { "fileName": "pcv346.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Derrick Destroyed" }, + { "fileName": "pcv347.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Resource Depleted" }, + { "fileName": "pcv348.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Power Transfer in Progress" }, + { "fileName": "pcv349.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Power Generator Required" } + ] + }, + "Research": { + "_name": "Research sounds", + "data": [ + { "fileName": "pcv350.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Research Facility Required" }, + { "fileName": "pcv351.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Artefact" }, + { "fileName": "pcv352.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Artefact Recovered" }, + { "fileName": "pcv353.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "New Research Project Available" }, + { "fileName": "pcv354.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "New Structure Available" }, + { "fileName": "pcv355.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "New Component Available" }, + { "fileName": "pcv356.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "New Cyborg Available" }, + { "fileName": "pcv357.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Research Completed" }, + { "fileName": "pcv358.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Major Research Completed" }, + { "fileName": "pcv359.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Structure Research Completed" }, + { "fileName": "pcv360.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Power Research Completed" }, + { "fileName": "pcv361.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Computer Research Completed" }, + { "fileName": "pcv362.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Vehicle Research Completed" }, + { "fileName": "pcv363.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Systems Research Completed" }, + { "fileName": "pcv364.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Weapon Research Completed" }, + { "fileName": "pcv365.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Cyborg Research Completed" } + ] + }, + "Production": { + "_name": "Production sounds", + "data": [ + { "fileName": "pcv366.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Production Started" }, + { "fileName": "pcv367.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Production Completed" }, + { "fileName": "pcv368.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Production Paused" }, + { "fileName": "pcv369.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Production Cancelled" }, + { "fileName": "pcv370.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Delivery Point Assigned" }, + { "fileName": "pcv371.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Delivery Point Assigned to" } + ] + }, + "Repair": { + "_name": "Repair sounds", + "data": [ + { "fileName": "pcv372.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Unit Repaired" } + ] + }, + "Detection": { + "_name": "Detection sounds", + "data": [ + { "fileName": "pcv373.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scavengers Detected" }, + { "fileName": "pcv374.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scavenger Base Detected" }, + { "fileName": "pcv375.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scavenger Outpost Detected" }, + { "fileName": "pcv376.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Resource Detected" }, + { "fileName": "pcv377.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Artefact Detected" }, + { "fileName": "pcv378.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Unit Detected" }, + { "fileName": "pcv379.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Base Detected" }, + { "fileName": "pcv380.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Ally Detected" }, + { "fileName": "pcv381.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Transport Detected" }, + { "fileName": "pcv382.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy LZ Detected" }, + { "fileName": "pcv383.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Friendly Landing Zone Detected" }, + { "fileName": "pcv384.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "NEXUS Tower Detected" }, + { "fileName": "pcv385.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "NEXUS Turret Detected" }, + { "fileName": "pcv386.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "NEXUS Unit Detected" }, + { "fileName": "pcv387.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Battery Detected" }, + { "fileName": "pcv388.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy VTOLs Detected" } + ] + }, + "Status": { + "_name": "Status sounds", + "data": [ + { "fileName": "pcv389.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scavenger Base" }, + { "fileName": "pcv390.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scavenger Outpost" }, + { "fileName": "pcv391.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scavenger Outpost Eradicated" }, + { "fileName": "pcv392.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scavenger Base Eradicated" }, + { "fileName": "pcv393.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Base" }, + { "fileName": "pcv394.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Base Eradicated" }, + { "fileName": "pcv395.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Incoming Enemy Transport" }, + { "fileName": "pcv396.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Landing Zone" }, + { "fileName": "pcv397.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "LZ 1" }, + { "fileName": "pcv398.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "LZ 2" } + ] + }, + "Combat": { + "_name": "Combat sounds", + "data": [ + { "fileName": "pcv399.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Unit Under Attack" }, + { "fileName": "pcv400.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Unit Destroyed" }, + { "fileName": "pcv401.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Unit Retreating" }, + { "fileName": "pcv402.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Unit Returning for Repair" } + ] + }, + "ArtilleryBatteries": { + "_name": "Artillery battery sounds", + "data": [ + { "fileName": "pcv403.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Assigned to Sensor" }, + { "fileName": "pcv404.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Sensor Locked On" }, + { "fileName": "pcv405.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Assigned to Counter-battery Radar" }, + { "fileName": "pcv406.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Battery Located" }, + { "fileName": "pcv407.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Battery Firing Counter Attack" } + ] + }, + "VTOLs": { + "_name": "VTOL sounds", + "data": [ + { "fileName": "pcv408.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Interceptors Launched" }, + { "fileName": "pcv409.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Re-arming" }, + { "fileName": "pcv410.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "VTOLs Engaging" }, + { "fileName": "pcv411.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Assigned" }, + { "fileName": "pcv412.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Interceptors Assigned" } + ] + }, + "CommandConsole": { + "_name": "Command console sounds", + "data": [ + { "fileName": "pcv413.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Command Console Activated" }, + { "fileName": "pcv414.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Short Range" }, + { "fileName": "pcv415.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Long Range" }, + { "fileName": "pcv416.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Optimum Range" }, + { "fileName": "pcv417.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Retreat at Medium Damage" }, + { "fileName": "pcv418.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Retreat at Heavy Damage" }, + { "fileName": "pcv419.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "No Retreat" }, + { "fileName": "pcv420.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Fire-At-Will" }, + { "fileName": "pcv421.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Return Fire" }, + { "fileName": "pcv422.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Cease Fire" }, + { "fileName": "pcv423.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Hold Position" }, + { "fileName": "pcv424.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Guard" }, + { "fileName": "pcv425.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Pursue" }, + { "fileName": "pcv426.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Patrol" }, + { "fileName": "pcv427.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Return to LZ" }, + { "fileName": "pcv428.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Recycling" }, + { "fileName": "pcv429.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scatter" } + ] + }, + "TutorialStuff": { + "_name": "Tutorial sounds", + "data": [ + { "fileName": "pcv430.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Not possible. Try again" }, + { "fileName": "pcv431.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "No" }, + { "fileName": "pcv432.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "That is incorrect" }, + { "fileName": "pcv433.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Well done" }, + { "fileName": "pcv434.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Excellent" } + ] + }, + "GroupAndCommanderAssignment": { + "_name": "Group and commander assignment sounds", + "data": [ + { "fileName": "pcv435.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Assigned to Commander" }, + { "fileName": "pcv436.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Group Reporting:" }, + { "fileName": "pcv437.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Commander Reporting:" } + ] + }, + "Routing": { + "_name": "Routing sounds", + "data": [ + { "fileName": "pcv438.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Route Obstructed" }, + { "fileName": "pcv439.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "No Route Available" } + ] + }, + "TransportsAndLZs": { + "_name": "Transport and LZ sounds", + "data": [ + { "fileName": "pcv440.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Reinforcements are available" }, + { "fileName": "pcv441.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Reinforcements in Transit" }, + { "fileName": "pcv442.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Reinforcements Landing" }, + { "fileName": "pcv443.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Transport Under Attack" }, + { "fileName": "pcv444.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Transport Repairing" }, + { "fileName": "pcv445.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "LZ Compromised" }, + { "fileName": "lz-clear.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "LZ Clear" }, + { "fileName": "pcv446.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Transport Returning to Base" }, + { "fileName": "pcv447.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Transport Unable to Land. Aborting drop" } + ] + }, + "MissionMessages": { + "_name": "Mission message sounds", + "data": [ + { "fileName": "pcv448.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Mission Objective" }, + { "fileName": "pcv449.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Mission Update" }, + { "fileName": "pcv450.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Warzone Paused" }, + { "fileName": "pcv451.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Warzone Active" }, + { "fileName": "pcv452.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Mission Results" }, + { "fileName": "pcv453.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Research Stolen" }, + { "fileName": "pcv454.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Technology Taken" }, + { "fileName": "pcv455.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Incoming Transmission" }, + { "fileName": "pcv456.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Incoming Intelligence Report" }, + { "fileName": "pcv458.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Mission Failed" }, + { "fileName": "pcv459.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Mission Successful" }, + { "fileName": "pcv460.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Objective Accomplished" }, + { "fileName": "pcv461.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Objective Failed" }, + { "fileName": "pcv462.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Mission Timer Activated" }, + { "fileName": "pcv463.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "10 Minutes Remaining" }, + { "fileName": "pcv464.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "5 Minutes Remaining" }, + { "fileName": "pcv465.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "3 Minutes Remaining" }, + { "fileName": "pcv466.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "2 Minutes Remaining" }, + { "fileName": "pcv467.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "1 Minutes Remaining" }, + { "fileName": "pcv468.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Unit Captured" }, + { "fileName": "pcv469.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Warning! System Failure Imminent" }, + { "fileName": "pcv470.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "You are defeated!" }, + { "fileName": "pcv471.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Missile Codes Deciphered" }, + { "fileName": "pcv472.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "First Stage Missile Codes Deciphered" }, + { "fileName": "pcv473.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Second Stage Missile Codes Deciphered" }, + { "fileName": "pcv474.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Third Stage Missile Codes Deciphered" }, + { "fileName": "pcv475.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Missile Codes Cracked" }, + { "fileName": "pcv476.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Entering Warzone" }, + { "fileName": "pcv477.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Alliance Accepted" }, + { "fileName": "pcv478.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Alliance Broken" }, + { "fileName": "pcv479.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Alliance Offered" }, + { "fileName": "pcv480.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Player Entering Warzone" }, + { "fileName": "pcv481.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Player Exiting Warzone" }, + { "fileName": "pcv482.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Gift Received" }, + { "fileName": "power-transferred.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Power Transferred" }, + { "fileName": "pcv484.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Sensor Download" }, + { "fileName": "pcv485.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Technology Transferred" }, + { "fileName": "pcv486.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Units Transferred" } + ] + }, + "GroupAndCommanderVoices-Male": { + "_name": "Male group and commander voices sounds", + "data": [ + { "fileName": "group.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "9.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "8.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "7.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "6.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "5.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "4.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "3.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "2.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "1.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "0.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "reprting.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "commnder.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "com021.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scavengers Detected" }, + { "fileName": "com022.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scavenger Base Detected" }, + { "fileName": "com023.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Scavenger Outpost Detected" }, + { "fileName": "com024.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Resource Detected" }, + { "fileName": "com025.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Artefact Detected" }, + { "fileName": "com026.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Detected" }, + { "fileName": "com027.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Base Detected" }, + { "fileName": "com028.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Ally Detected" }, + { "fileName": "com029.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Transport Detected" }, + { "fileName": "com030.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy LZ Detected" }, + { "fileName": "com031.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Friendly Landing Zone Detected" }, + { "fileName": "com032.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "NEXUS Tower Detected" }, + { "fileName": "com033.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "NEXUS Turret Detected" }, + { "fileName": "com034.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "NEXUS Detected" }, + { "fileName": "com035.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Battery Detected" }, + { "fileName": "com036.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy VTOLs Detected" }, + { "fileName": "com037.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Route Obstructed" }, + { "fileName": "com038.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "No Route Available" }, + { "fileName": "com039.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Unable to Comply" }, + { "fileName": "com040.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Returning for Repair" }, + { "fileName": "com041.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Heading for Rally Point" } + ] + }, + "RadioClicks": { + "_name": "Radio click sounds", + "data": [ + { "fileName": "radclik1.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "radclik2.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "radclik3.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "radclik4.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "radclik5.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "radclik6.ogg", "loop": false, "range": 1800, "volume": 100 } + ] + }, + "TransportPilots": { + "_name": "Transport pilot sounds", + "data": [ + { "fileName": "t-aprolz.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Approaching LZ" }, + { "fileName": "t-arboys.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Alright boys" }, + { "fileName": "t-grnli5.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "You will have a green light in 5" }, + { "fileName": "t-grnli4.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "4" }, + { "fileName": "t-grnli3.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "3" }, + { "fileName": "t-grnli2.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "2" }, + { "fileName": "t-gogogo.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Go Go Go!" }, + { "fileName": "t-dustof.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Prepare for dust off" } + ] + }, + "VTOLPilots": { + "_name": "VTOL Pilot sounds", + "data": [ + { "fileName": "v-eloc1.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy located" }, + { "fileName": "v-onway1.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "On our way" }, + { "fileName": "v-retba1.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Returning to base" }, + { "fileName": "v-locon1.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Locked-on" }, + { "fileName": "v-atkrn1.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Commencing attack run" }, + { "fileName": "v-abtrn1.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Aborting attack run" }, + { "fileName": "v-eloc2.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy located" }, + { "fileName": "v-onway2.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "On our way" }, + { "fileName": "v-retba2.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Returning to base" }, + { "fileName": "v-locon2.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Locked-on" }, + { "fileName": "v-atkrn2.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Commencing attack run" }, + { "fileName": "v-abtrn2.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Aborting attack run" }, + { "fileName": "v-eloc3.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy located" }, + { "fileName": "v-onway3.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "On our way" }, + { "fileName": "v-retba3.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Returning to base" }, + { "fileName": "v-locon3.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Locked-on" }, + { "fileName": "v-atkrn3.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Commencing attack run" }, + { "fileName": "v-abtrn3.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Aborting attack run" } + ] + }, + "TheCollective": { + "_name": "The Collective sounds", + "data": [ + { "fileName": "col011a.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Cleanse & Destroy" }, + { "fileName": "col012a.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Affirmative destroying biologicals" }, + { "fileName": "col013a.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Attack" }, + { "fileName": "col014a.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Fire!" }, + { "fileName": "col015a.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Detected" }, + { "fileName": "col016a.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Engaging" }, + { "fileName": "col017a.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Starting Attack Run" }, + { "fileName": "col018a.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Die!" }, + { "fileName": "col019a.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Intercept and Destroy" }, + { "fileName": "col020a.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Destroyed" } + ] + }, + "WeaponWounds": { + "_name": "Weapon sounds", + "data": [ + { "fileName": "rocket.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "rotlsr.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Rotary Laser" }, + { "fileName": "gaussgun.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "lrgcan.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Large Cannon" }, + { "fileName": "smlcan.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Small Cannon" }, + { "fileName": "medcan.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Medium Cannon" }, + { "fileName": "flmthrow.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Flame Thrower" }, + { "fileName": "plslsr.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Pulse Laser" }, + { "fileName": "bemlsr.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Beam Laser" }, + { "fileName": "mortar.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "hwtzflgt.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Howitzer Flight" }, + { "fileName": "mgbar1.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "mgbar2.ogg", "loop": false, "range": 1800, "volume": 70 }, + { "fileName": "mgbar3.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "mgheavy.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "mgtower.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "splash.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "asltmg.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "rapdcan.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "hivelcan.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "nxstower.ogg", "loop": false, "range": 1800, "volume": 100 } + ] + }, + "ConstructionSounds": { + "_name": "Construction sounds", + "data": [ + { "fileName": "weld-1.ogg", "loop": false, "range": 1800, "volume": 20 }, + { "fileName": "weld-2.ogg", "loop": false, "range": 1800, "volume": 20 }, + { "fileName": "bldstart.ogg", "loop": false, "range": 1800, "volume": 20 }, + { "fileName": "bldloop.ogg", "loop": true, "range": 1800, "volume": 20 }, + { "fileName": "build1.ogg", "loop": false, "range": 1800, "volume": 20 }, + { "fileName": "build2.ogg", "loop": false, "range": 1800, "volume": 20 }, + { "fileName": "build3.ogg", "loop": false, "range": 1800, "volume": 20 }, + { "fileName": "build4.ogg", "loop": false, "range": 1800, "volume": 20 } + ] + }, + "Explosions": { + "_name": "Explosions sounds", + "data": [ + { "fileName": "smlexpl.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "lsrexpl.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "lrgexpl.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "atnkexpl.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "richet1.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "richet2.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "richet3.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "squish.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "bldfall.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "nxsexpld.ogg", "loop": false, "range": 1800, "volume": 100 } + ] + }, + "DroidEngineNoise": { + "_name": "Engine sounds", + "data": [ + { "fileName": "con-move-off.ogg", "loop": false, "range": 1800, "volume": 15 }, + { "fileName": "con-move.ogg", "loop": true, "range": 1800, "volume": 15 }, + { "fileName": "con-shut-down.ogg", "loop": false, "range": 1800, "volume": 15 }, + { "fileName": "tflight.ogg", "loop": true, "range": 1800, "volume": 30, "z_comment": "Blimp Flight" }, + { "fileName": "thover.ogg", "loop": true, "range": 1800, "volume": 30, "z_comment": "Blimp Idle" }, + { "fileName": "tland.ogg", "loop": false, "range": 1800, "volume": 30, "z_comment": "Blimp Land" }, + { "fileName": "tstart.ogg", "loop": false, "range": 1800, "volume": 30, "z_comment": "Blimp Take off" }, + { "fileName": "vtolland.ogg", "loop": false, "range": 1800, "volume": 15 }, + { "fileName": "vtoloff.ogg", "loop": false, "range": 1800, "volume": 15 }, + { "fileName": "vtol-move.ogg", "loop": true, "range": 1800, "volume": 15 }, + { "fileName": "tread.ogg", "loop": true, "range": 1800, "volume": 15 }, + { "fileName": "hovmove.ogg", "loop": true, "range": 1800, "volume": 15 }, + { "fileName": "hovstart.ogg", "loop": false, "range": 1800, "volume": 15 }, + { "fileName": "hovstop.ogg", "loop": false, "range": 1800, "volume": 15 }, + { "fileName": "cyber-move.ogg", "loop": true, "range": 1800, "volume": 15 } + ] + }, + "BuildingFX": { + "_name": "Building FX sounds", + "data": [ + { "fileName": "oilpump.ogg", "loop": false, "range": 1800, "volume": 5 }, + { "fileName": "powerhum.ogg", "loop": false, "range": 1800, "volume": 10 }, + { "fileName": "powerspk.ogg", "loop": false, "range": 1800, "volume": 10 }, + { "fileName": "steam.ogg", "loop": false, "range": 1800, "volume": 20 }, + { "fileName": "ecmtower.ogg", "loop": false, "range": 1800, "volume": 20 }, + { "fileName": "freroar.ogg", "loop": false, "range": 1800, "volume": 100 } + ] + }, + "Miscellaneous": { + "_name": "Miscellaneous sounds", + "data": [ + { "fileName": "help.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "scream.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "scream2.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "scream3.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "silence.ogg", "loop": false, "range": 1800, "volume": 100 } + ] + }, + "Extra": { + "_name": "Extra sounds", + "data": [ + { "fileName": "lndgzne.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Landing Zone" }, + { "fileName": "pcv652.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Satellite Uplink" }, + { "fileName": "pcv653.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "NASDA Central" }, + { "fileName": "pcv654.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Nuclear Reactor" }, + { "fileName": "pcv655.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "SAM Site" }, + { "fileName": "pcv656.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Missile Silo" }, + { "fileName": "nmedeted.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Detected" }, + { "fileName": "pcv611.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Structure Captured" }, + { "fileName": "pcv612.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Civilian Rescued" }, + { "fileName": "pcv613.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Civilians Rescued" }, + { "fileName": "pcv615.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Units Rescued" }, + { "fileName": "pcv616.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Group Rescued" }, + { "fileName": "pcv618.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Group Captured" }, + { "fileName": "pcv621.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Objective Captured" }, + { "fileName": "pcv622.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Objective Destroyed" }, + { "fileName": "pcv623.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Structure Infected" }, + { "fileName": "pcv625.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Group Infected" }, + { "fileName": "pcv629.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Out Of Time" }, + { "fileName": "pcv631.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Escaped" }, + { "fileName": "pcv632.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Escaping" }, + { "fileName": "pcv633.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Enemy Transport Landing" }, + { "fileName": "pcv635.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Team Alpha Eradicated" }, + { "fileName": "pcv636.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Team Beta Eradicated" }, + { "fileName": "pcv637.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Team Gamma Eradicated" }, + { "fileName": "pcv638.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Team Alpha Rescued" }, + { "fileName": "pcv639.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Team Beta Rescued" }, + { "fileName": "pcv640.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Team Gamma Rescued" }, + { "fileName": "pcv650.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Laser Satellite firing" }, + { "fileName": "pcv657.ogg", "loop": false, "range": 1800, "volume": 100, "z_comment": "Incoming Laser Satellite Strike" } + ] + }, + "Nexus": { + "_name": "Nexus sounds", + "data": [ + { "fileName": "defabsrd.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "defnut.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "laugh1.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "laugh2.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "laugh3.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "pordcomp.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "resabsrd.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "strutabs.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "strutnut.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "synplnk.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "untabsrd.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "untnut.ogg", "loop": false, "range": 1800, "volume": 100 } + ] + }, + "MultiplayerAudio": { + "_name": "Multiplayer sounds", + "data": [ + { "fileName": "cybgrnd.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "hvcybmov.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "emp.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "hevlsr.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "plasflm.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "uplink.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "lasstrk.ogg", "loop": false, "range": 1800, "volume": 100 }, + { "fileName": "beacon.ogg", "loop": false, "range": 1800, "volume": 100 } + ] + } +} diff --git a/data/base/audio/frontaud.cfg b/data/base/audio/frontaud.cfg deleted file mode 100644 index e6ab7688ad1..00000000000 --- a/data/base/audio/frontaud.cfg +++ /dev/null @@ -1,15 +0,0 @@ -audio_module -{ - /* audio format: audio [filename] [oneshot/loop] [volume 0-100] [range] */ - /* Audio Configuration for the frontend. Alex Lee Feb98 */ - audio "beep1.ogg" oneshot 30 1800 - audio "beep2.ogg" oneshot 30 1800 - audio "beep3.ogg" oneshot 30 1800 - audio "beep4.ogg" oneshot 30 1800 - audio "beep5.ogg" oneshot 30 1800 - audio "beep6.ogg" oneshot 30 1800 - audio "beep7.ogg" oneshot 30 1800 - audio "beep8.ogg" oneshot 30 1800 - audio "beep9.ogg" oneshot 30 1800 - audio "gmeshtdn.ogg" oneshot 30 1800 -} diff --git a/data/base/audio/frontaud.json b/data/base/audio/frontaud.json new file mode 100644 index 00000000000..d9bf92628cd --- /dev/null +++ b/data/base/audio/frontaud.json @@ -0,0 +1,25 @@ +{ + "_Format": { + "_comment": "fileName: [file.ogg], loop: [false/true], range: [world units, 128 = 1 tile], volume: [0-100]" + }, + "Beeps": { + "_name": "Beep sounds", + "data": [ + { "fileName": "beep1.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep2.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep3.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep4.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep5.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep6.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep7.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep8.ogg", "loop": false, "range": 1800, "volume": 30 }, + { "fileName": "beep9.ogg", "loop": false, "range": 1800, "volume": 30 } + ] + }, + "Shutdown": { + "_name": "Shutdown sounds", + "data": [ + { "fileName": "gmeshtdn.ogg", "loop": false, "range": 1800, "volume": 30 } + ] + } +} diff --git a/data/base/components/bodies/drhbod12.pie b/data/base/components/bodies/drhbod12.pie index 70dc5aa9c62..c5c2ece92fd 100644 --- a/data/base/components/bodies/drhbod12.pie +++ b/data/base/components/bodies/drhbod12.pie @@ -1,66 +1,66 @@ -PIE 2 +PIE 3 TYPE 200 -TEXTURE 0 page-14-droid-hubs.png 256 256 +TEXTURE 0 page-14-droid-hubs.png 0 0 LEVELS 1 LEVEL 1 -POINTS 18 - 19 19 46 - -19 19 46 - -12 31 21 - 12 31 21 - -10 26 -46 - -15 19 -46 - 14 19 -46 - 9 26 -46 - -10 13 -38 - 9 13 -38 - 12 10 21 - -12 10 21 - -12 9 -29 - -19 19 -29 - -12 33 -29 - 12 9 -29 - 12 33 -29 +POINTS 18 + 12 31 21 + -12 31 21 + -19 19 46 + 19 19 46 + 9 26 -46 + 14 19 -46 + -15 19 -46 + -10 26 -46 + 9 13 -38 + -10 13 -38 + -12 10 21 + 12 10 21 + -19 19 -29 + -12 9 -29 + -12 33 -29 + 12 9 -29 + 12 33 -29 19 19 -29 POLYGONS 32 - 200 3 3 2 1 4 37 21 37 25 51 - 200 3 3 1 0 4 37 25 51 0 51 - 200 3 7 6 5 191 26 188 21 207 21 - 200 3 7 5 4 191 26 207 21 204 26 - 200 3 6 9 8 188 21 191 18 204 18 - 200 3 6 8 5 188 21 204 18 207 21 - 200 3 0 1 11 0 66 24 66 20 52 - 200 3 0 11 10 0 66 20 52 4 52 - 200 3 1 13 12 247 82 247 40 239 40 - 200 3 1 12 11 247 82 239 40 240 67 - 200 3 2 14 13 253 67 255 40 247 40 - 200 3 2 13 1 253 67 247 40 247 82 - 200 3 4 5 13 251 31 247 31 247 40 - 200 3 4 13 14 251 31 247 40 255 40 - 200 3 8 12 13 243 36 239 40 247 40 - 200 3 8 13 5 243 36 247 40 247 31 - 200 3 15 10 11 210 31 209 45 221 45 - 200 3 15 11 12 210 31 221 45 220 31 - 200 3 15 12 8 210 31 220 31 219 29 - 200 3 15 8 9 210 31 219 29 211 29 - 200 3 2 3 16 20 102 1 102 1 77 - 200 3 2 16 14 20 102 1 77 19 77 - 200 3 16 7 4 1 77 3 69 17 69 - 200 3 16 4 14 1 77 17 69 19 77 - 200 3 17 0 10 247 40 247 82 240 67 - 200 3 17 10 15 247 40 240 67 240 40 - 200 3 16 3 0 254 40 253 67 247 82 - 200 3 16 0 17 254 40 247 82 247 40 - 200 3 7 16 17 251 31 254 40 247 40 - 200 3 7 17 6 251 31 247 40 247 31 - 200 3 15 9 6 240 40 243 36 247 31 - 200 3 15 6 17 240 40 247 31 247 40 + 200 3 0 1 2 0.015625 0.144531 0.0820312 0.144531 0.0976562 0.199219 + 200 3 0 2 3 0.015625 0.144531 0.0976562 0.199219 0 0.199219 + 200 3 4 5 6 0.746094 0.101562 0.734375 0.0820312 0.808594 0.0820312 + 200 3 4 6 7 0.746094 0.101562 0.808594 0.0820312 0.796875 0.101562 + 200 3 5 8 9 0.734375 0.0820312 0.746094 0.0703125 0.796875 0.0703125 + 200 3 5 9 6 0.734375 0.0820312 0.796875 0.0703125 0.808594 0.0820312 + 200 3 3 2 10 0 0.257812 0.09375 0.257812 0.078125 0.203125 + 200 3 3 10 11 0 0.257812 0.078125 0.203125 0.015625 0.203125 + 200 3 2 12 13 0.964844 0.320312 0.964844 0.15625 0.933594 0.15625 + 200 3 2 13 10 0.964844 0.320312 0.933594 0.15625 0.9375 0.261719 + 200 3 1 14 12 0.988281 0.261719 0.996094 0.15625 0.964844 0.15625 + 200 3 1 12 2 0.988281 0.261719 0.964844 0.15625 0.964844 0.320312 + 200 3 7 6 12 0.980469 0.121094 0.964844 0.121094 0.964844 0.15625 + 200 3 7 12 14 0.980469 0.121094 0.964844 0.15625 0.996094 0.15625 + 200 3 9 13 12 0.949219 0.140625 0.933594 0.15625 0.964844 0.15625 + 200 3 9 12 6 0.949219 0.140625 0.964844 0.15625 0.964844 0.121094 + 200 3 15 11 10 0.820312 0.121094 0.816406 0.175781 0.863281 0.175781 + 200 3 15 10 13 0.820312 0.121094 0.863281 0.175781 0.859375 0.121094 + 200 3 15 13 9 0.820312 0.121094 0.859375 0.121094 0.855469 0.113281 + 200 3 15 9 8 0.820312 0.121094 0.855469 0.113281 0.824219 0.113281 + 200 3 1 0 16 0.078125 0.398438 0.00390625 0.398438 0.00390625 0.300781 + 200 3 1 16 14 0.078125 0.398438 0.00390625 0.300781 0.0742188 0.300781 + 200 3 16 4 7 0.00390625 0.300781 0.0117188 0.269531 0.0664062 0.269531 + 200 3 16 7 14 0.00390625 0.300781 0.0664062 0.269531 0.0742188 0.300781 + 200 3 17 3 11 0.964844 0.15625 0.964844 0.320312 0.9375 0.261719 + 200 3 17 11 15 0.964844 0.15625 0.9375 0.261719 0.9375 0.15625 + 200 3 16 0 3 0.992188 0.15625 0.988281 0.261719 0.964844 0.320312 + 200 3 16 3 17 0.992188 0.15625 0.964844 0.320312 0.964844 0.15625 + 200 3 4 16 17 0.980469 0.121094 0.992188 0.15625 0.964844 0.15625 + 200 3 4 17 5 0.980469 0.121094 0.964844 0.15625 0.964844 0.121094 + 200 3 15 8 5 0.9375 0.15625 0.949219 0.140625 0.964844 0.121094 + 200 3 15 5 17 0.9375 0.15625 0.964844 0.121094 0.964844 0.15625 CONNECTORS 8 0 -2 34 - 0 -32 9 0 -32 24 + 0 -2 54 0 0 0 0 0 0 - 0 -2 4 - 0 -32 4 - 0 -32 -16 + 0 -32 9 + 0 -2 9 + 0 -2 -16 diff --git a/data/base/components/weapons/cy_agun.pie b/data/base/components/weapons/cy_agun.pie new file mode 100644 index 00000000000..3b735d22076 --- /dev/null +++ b/data/base/components/weapons/cy_agun.pie @@ -0,0 +1,127 @@ +PIE 3 +TYPE 10200 +TEXTURE 0 page-14-droid-hubs.png 0 0 +LEVELS 1 +LEVEL 1 +POINTS 48 + -3.91631 3.39607 -6.25032 + 5.25786 -8.20528 -6.25032 + -3.91631 -8.20528 -6.25032 + 5.25786 3.39607 -6.25032 + 5.25786 -8.20528 8.86757 + -3.91631 -8.20528 8.86757 + 5.25786 3.39607 8.86757 + -3.91631 3.39607 8.86757 + 0.727474 -6.01756 -27.7147 + 4.55004 -2.19498 -6.20994 + 0.727474 -6.01756 -6.20994 + 4.55004 -2.19498 -27.7147 + 0.727474 1.62758 -6.20994 + 0.727474 1.62758 -27.7147 + -3.09509 -2.19498 -6.20994 + -3.09509 -2.19498 -27.7147 + -1.63766 6.78783 1.92177 + -7.333 2.47378 8.09451 + -1.63766 6.78783 8.0945 + -7.333 2.47378 1.92177 + -3.87877 -4.76141 8.09451 + -3.87877 -4.76141 1.92177 + 3.27311 3.32463 1.92177 + 3.27311 3.32463 8.09451 + -6.24191 2.19873 8.09451 + -1.5263 5.62521 8.0945 + -1.5263 5.62521 1.92177 + -6.24191 2.19873 1.92177 + -3.87337 -2.46079 1.92177 + -3.87337 -2.46079 8.09451 + 1.6931 3.33047 1.92177 + 1.6931 3.33047 8.09451 + -6.6532 -5.94025 -5.28609 + -2.33915 -11.6356 0.886646 + -6.6532 -5.94025 0.886641 + -2.33915 -11.6356 -5.28608 + 4.89605 -8.18136 0.886646 + 4.89605 -8.18136 -5.28608 + -3.18999 -1.02948 -5.28608 + -3.18999 -1.02948 0.886646 + -2.0641 -10.5445 0.886646 + -5.49058 -5.82889 0.886639 + -5.49058 -5.82889 -5.28609 + -2.0641 -10.5445 -5.28608 + 2.59543 -8.17596 -5.28608 + 2.59543 -8.17596 0.886646 + -3.19583 -2.60949 -5.28608 + -3.19583 -2.60949 0.886646 +POLYGONS 70 + 200 3 0 1 2 0.313859 0.0764211 0.276877 0.123188 0.313859 0.123188 + 200 3 1 0 3 0.276877 0.123188 0.313859 0.0764211 0.276877 0.0764211 + 200 3 2 4 5 0.282598 0.197115 0.307139 0.146403 0.282598 0.146403 + 200 3 4 2 1 0.307139 0.146403 0.282598 0.197115 0.307139 0.197115 + 200 3 1 6 4 0.307139 0.197115 0.282598 0.146403 0.307139 0.146403 + 200 3 6 1 3 0.282598 0.146403 0.307139 0.197115 0.282598 0.197115 + 200 3 3 7 6 0.282598 0.197115 0.307139 0.146403 0.282598 0.146403 + 200 3 7 3 0 0.307139 0.146403 0.282598 0.197115 0.307139 0.197115 + 200 3 0 5 7 0.307139 0.197115 0.282598 0.146403 0.307139 0.146403 + 200 3 5 0 2 0.282598 0.146403 0.307139 0.197115 0.282598 0.197115 + 200 3 8 9 10 0.251587 0.423933 0.287434 0.400363 0.287434 0.423933 + 200 3 9 8 11 0.287434 0.400363 0.251587 0.423933 0.251587 0.400363 + 200 3 11 12 9 0.251587 0.400363 0.287434 0.376793 0.287434 0.400363 + 200 3 12 11 13 0.287434 0.376793 0.251587 0.400363 0.251587 0.376793 + 200 3 13 14 12 0.251587 0.376793 0.287434 0.400363 0.287434 0.376793 + 200 3 14 13 15 0.287434 0.400363 0.251587 0.376793 0.251587 0.400363 + 200 3 15 10 14 0.251587 0.400363 0.287434 0.423933 0.287434 0.400363 + 200 3 10 15 8 0.287434 0.423933 0.251587 0.400363 0.251587 0.423933 + 200 3 16 17 18 0.275495 0.390587 0.263431 0.403545 0.263431 0.390587 + 200 3 17 16 19 0.263431 0.403545 0.275495 0.390587 0.275495 0.403545 + 200 3 19 20 17 0.275495 0.403545 0.263431 0.423919 0.263431 0.403545 + 200 3 20 19 21 0.263431 0.423919 0.275495 0.403545 0.275495 0.423919 + 200 3 22 18 23 0.275495 0.376759 0.263431 0.390587 0.263431 0.376759 + 200 3 18 22 16 0.263431 0.390587 0.275495 0.376759 0.275495 0.390587 + 200 3 15 11 8 0.352971 0.142604 0.385496 0.142793 0.369327 0.158961 + 200 3 11 15 13 0.385496 0.142793 0.352971 0.142604 0.369138 0.126436 + 200 3 18 24 25 0.263431 0.390587 0.262406 0.403883 0.262478 0.390452 + 200 3 24 18 17 0.262406 0.403883 0.263431 0.390587 0.263431 0.403545 + 200 3 19 26 27 0.275495 0.403545 0.276787 0.388836 0.27673 0.402396 + 200 3 26 19 16 0.276787 0.388836 0.275495 0.403545 0.275495 0.390587 + 200 3 21 27 28 0.275495 0.423919 0.27673 0.402396 0.276753 0.418649 + 200 3 27 21 19 0.27673 0.402396 0.275495 0.423919 0.275495 0.403545 + 200 3 17 29 24 0.263431 0.403545 0.262173 0.418649 0.262406 0.403883 + 200 3 29 17 20 0.262173 0.418649 0.263431 0.403545 0.263431 0.423919 + 200 3 16 30 26 0.275495 0.390587 0.27681 0.379738 0.276787 0.388836 + 200 3 30 16 22 0.27681 0.379738 0.275495 0.390587 0.275495 0.376759 + 200 3 23 25 31 0.263431 0.376759 0.262478 0.390452 0.262395 0.379738 + 200 3 25 23 18 0.262478 0.390452 0.263431 0.376759 0.263431 0.390587 + 200 3 26 24 27 0.275495 0.385824 0.263431 0.396283 0.275495 0.396283 + 200 3 24 26 25 0.263431 0.396283 0.275495 0.385824 0.263431 0.385824 + 200 3 29 27 24 0.263431 0.409404 0.275495 0.396283 0.263431 0.396283 + 200 3 27 29 28 0.275495 0.396283 0.263431 0.409404 0.275495 0.409404 + 200 3 25 30 31 0.263431 0.385824 0.275495 0.376759 0.263431 0.376759 + 200 3 30 25 26 0.275495 0.376759 0.263431 0.385824 0.275495 0.385824 + 200 3 6 5 4 0.381014 0.0996273 0.345529 0.0682374 0.345529 0.0996273 + 200 3 5 6 7 0.345529 0.0682374 0.381014 0.0996273 0.381014 0.0682374 + 200 3 32 33 34 0.275495 0.410091 0.263431 0.397133 0.263431 0.410091 + 200 3 33 32 35 0.263431 0.397133 0.275495 0.410091 0.275495 0.397133 + 200 3 35 36 33 0.275495 0.397133 0.263431 0.376759 0.263431 0.397133 + 200 3 36 35 37 0.263431 0.376759 0.275495 0.397133 0.275495 0.376759 + 200 3 38 34 39 0.275495 0.423919 0.263431 0.410091 0.263431 0.423919 + 200 3 34 38 32 0.263431 0.410091 0.275495 0.423919 0.275495 0.410091 + 200 3 34 40 41 0.263431 0.410091 0.262406 0.396794 0.262478 0.410226 + 200 3 40 34 33 0.262406 0.396794 0.263431 0.410091 0.263431 0.397133 + 200 3 35 42 43 0.275495 0.397133 0.276787 0.411842 0.27673 0.398282 + 200 3 42 35 32 0.276787 0.411842 0.275495 0.397133 0.275495 0.410091 + 200 3 37 43 44 0.275495 0.376759 0.27673 0.398282 0.276753 0.382029 + 200 3 43 37 35 0.27673 0.398282 0.275495 0.376759 0.275495 0.397133 + 200 3 33 45 40 0.263431 0.397133 0.262173 0.382029 0.262406 0.396794 + 200 3 45 33 36 0.262173 0.382029 0.263431 0.397133 0.263431 0.376759 + 200 3 32 46 42 0.275495 0.410091 0.27681 0.42094 0.276787 0.411842 + 200 3 46 32 38 0.27681 0.42094 0.275495 0.410091 0.275495 0.423919 + 200 3 39 41 47 0.263431 0.423919 0.262478 0.410226 0.262395 0.42094 + 200 3 41 39 34 0.262478 0.410226 0.263431 0.423919 0.263431 0.410091 + 200 3 42 40 43 0.275495 0.414854 0.263431 0.404395 0.275495 0.404395 + 200 3 40 42 41 0.263431 0.404395 0.275495 0.414854 0.263431 0.414854 + 200 3 45 43 40 0.263431 0.391274 0.275495 0.404395 0.263431 0.404395 + 200 3 43 45 44 0.275495 0.404395 0.263431 0.391274 0.275495 0.391274 + 200 3 41 46 47 0.263431 0.414854 0.275495 0.423919 0.263431 0.423919 + 200 3 46 41 42 0.275495 0.423919 0.263431 0.414854 0.275495 0.414854 +CONNECTORS 1 + 1 -29 -2 diff --git a/data/base/components/weapons/cy_hpvcn.pie b/data/base/components/weapons/cy_hpvcn.pie new file mode 100644 index 00000000000..83d668882ec --- /dev/null +++ b/data/base/components/weapons/cy_hpvcn.pie @@ -0,0 +1,64 @@ +PIE 3 +TYPE 10200 +TEXTURE 0 page-17-droid-weapons.png 0 0 +LEVELS 1 +LEVEL 1 +POINTS 23 + 1.79067 -3.22078 -7.53828 + 4.87474 4.299e-09 -29.8136 + 4.87474 4.299e-09 -9.10063 + 1.79067 -3.22078 -29.8136 + -1.29341 4.299e-09 -5.97597 + -1.29341 4.299e-09 -29.8136 + 1.79067 3.22077 -7.53828 + 1.79067 3.22077 -29.8136 + -3.70956 -11.7272 2.1466 + 1.29044 -12.4171 -6.13144 + 1.29044 -13.1069 0.766931 + -3.70956 -11.0374 -4.75176 + 5.29044 -5.81433 -6.82127 + -1.70956 -3.44918 -5.4416 + -2.28098 -4.63172 2.83644 + 5.29044 -6.70128 1.45677 + -2.70956 6.89837 9.04497 + 5.29044 6.89837 -9.58062 + -1.70956 4.82886 -5.4416 + 5.29044 8.27804 9.73481 + 5.29044 -7.5882 9.73481 + 5.29044 -5.51869 -9.58062 + -2.70956 -5.51869 9.04497 +POLYGONS 32 + 200 3 0 1 2 0.39662 0.24416 0.376841 0.283673 0.376841 0.248066 + 200 3 1 0 3 0.376841 0.283673 0.39662 0.24416 0.39662 0.283673 + 200 3 4 3 0 0.39662 0.240254 0.376841 0.283673 0.376841 0.24416 + 200 3 3 4 5 0.376841 0.283673 0.39662 0.240254 0.39662 0.283673 + 200 3 6 5 4 0.39662 0.24416 0.376841 0.283673 0.376841 0.240254 + 200 3 5 6 7 0.376841 0.283673 0.39662 0.24416 0.39662 0.283673 + 200 3 2 7 6 0.39662 0.248066 0.376841 0.283673 0.376841 0.24416 + 200 3 7 2 1 0.376841 0.283673 0.39662 0.248066 0.39662 0.283673 + 200 3 3 7 1 0.0606197 0.24812 0.0487553 0.236255 0.0487553 0.24812 + 200 3 7 3 5 0.0487553 0.236255 0.0606197 0.24812 0.0606197 0.236255 + 200 3 8 9 10 0.00242479 0.0833836 0.0575467 0.106351 0.0116118 0.106351 + 200 3 9 8 11 0.0575467 0.106351 0.00242479 0.0833836 0.0483597 0.0833836 + 200 3 12 11 13 0.00512094 0.107794 0.0472401 0.083548 0.00170099 0.0757679 + 200 3 11 12 9 0.0472401 0.083548 0.00512094 0.107794 0.0479396 0.105789 + 200 3 13 8 14 0.00443181 0.955289 0.044556 0.992501 0.0451059 0.957765 + 200 3 8 13 11 0.044556 0.992501 0.00443181 0.955289 0.0107775 0.991873 + 200 3 15 9 12 0.0138143 0.183765 0.0486818 0.152383 0.0549168 0.184566 + 200 3 9 15 10 0.0486818 0.152383 0.0138143 0.183765 0.0144509 0.151958 + 200 3 14 10 15 0.0280594 0.185233 0.00932912 0.150314 0.0031908 0.18102 + 200 3 10 14 8 0.00932912 0.150314 0.0280594 0.185233 0.0257639 0.153154 + 200 3 16 17 18 0.0923813 0.0761723 0.0023124 0.107798 0.0223277 0.0795081 + 200 3 17 16 19 0.0023124 0.107798 0.0923813 0.0761723 0.0957172 0.107798 + 200 3 20 17 19 0.0602194 0.00261503 0.00785642 0.0724323 0.00286949 0.00261497 + 200 3 17 20 21 0.00785642 0.0724323 0.0602194 0.00261503 0.052739 0.0724323 + 200 3 21 18 17 0.0681586 0.1464 0.0131373 0.111382 0.00237842 0.1464 + 200 3 18 21 13 0.0131373 0.111382 0.0681586 0.1464 0.0575224 0.111382 + 200 3 19 22 20 0.00251839 0.185703 0.0440365 0.150371 0.0526327 0.185703 + 200 3 22 19 16 0.0440365 0.150371 0.00251839 0.185703 0.00824921 0.150371 + 200 3 20 13 21 0.0957172 0.107798 0.0223277 0.0795081 0.00231241 0.107798 + 200 3 13 20 22 0.0223277 0.0795081 0.0957172 0.107798 0.0923813 0.0761723 + 200 3 13 16 18 0.0506838 0.0023998 0.00213643 0.0723256 0.0118459 0.0023998 + 200 3 16 13 22 0.00213643 0.0723256 0.0506838 0.0023998 0.0603933 0.0723256 +CONNECTORS 1 + 2 -31 0 diff --git a/data/base/components/weapons/cy_rail.pie b/data/base/components/weapons/cy_rail.pie index f1cdefdd0af..b722b9cf2b9 100644 --- a/data/base/components/weapons/cy_rail.pie +++ b/data/base/components/weapons/cy_rail.pie @@ -3,45 +3,57 @@ TYPE 10200 TEXTURE 0 page-17-droid-weapons.png 0 0 LEVELS 1 LEVEL 1 -POINTS 14 - 4 0 -40 +POINTS 20 + 4 0 -9.5 -1 -3 -40 - -1 -3 -10 - 4 0 -14 + 4 0 -40 + -1 -3 -9.5 0 3 -40 - 0 3 -10 + 0 3 -9.5 -3 -9 6 - -3 9 6 -2 6 -9 -2 -6 -9 - 6 12 7 + -3 9 6 6 9 -15 6 -9 -15 + 6 12 7 6 -12 7 -POLYGONS 24 - 200 3 0 1 2 0.617188 0.191406 0.59375 0.191406 0.59375 0.261719 - 200 3 0 2 3 0.617188 0.191406 0.59375 0.261719 0.617188 0.25 - 200 3 3 2 1 0.617188 0.25 0.59375 0.261719 0.59375 0.191406 - 200 3 3 1 0 0.617188 0.25 0.59375 0.191406 0.617188 0.191406 - 200 3 1 4 5 0.617188 0.191406 0.59375 0.191406 0.59375 0.261719 - 200 3 1 5 2 0.617188 0.191406 0.59375 0.261719 0.617188 0.261719 - 200 3 2 5 4 0.617188 0.261719 0.59375 0.261719 0.59375 0.191406 - 200 3 2 4 1 0.617188 0.261719 0.59375 0.191406 0.617188 0.191406 - 200 3 4 0 3 0.617188 0.191406 0.59375 0.191406 0.59375 0.25 - 200 3 4 3 5 0.617188 0.191406 0.59375 0.25 0.617188 0.261719 - 200 3 5 3 0 0.617188 0.261719 0.59375 0.25 0.59375 0.191406 - 200 3 5 0 4 0.617188 0.261719 0.59375 0.191406 0.617188 0.191406 - 200 3 6 7 8 0.0625 0.0742188 0.0078125 0.0742188 0.015625 0 - 200 3 6 8 9 0.0625 0.0742188 0.015625 0 0.0507812 0 - 200 3 8 7 10 0.0195312 0.0820312 0.09375 0.078125 0.0976562 0.105469 - 200 3 8 10 11 0.0195312 0.0820312 0.0976562 0.105469 0 0.105469 - 200 3 12 11 10 0.0078125 0.0742188 0.0546875 0.0742188 0.0625 0 - 200 3 12 10 13 0.0078125 0.0742188 0.0625 0 0 0 - 200 3 9 8 11 0.015625 0.113281 0.0546875 0.113281 0.0625 0.144531 - 200 3 9 11 12 0.015625 0.113281 0.0625 0.144531 0.0078125 0.144531 - 200 3 7 6 13 0.0078125 0.148438 0.0625 0.148438 0.0703125 0.183594 - 200 3 7 13 10 0.0078125 0.148438 0.0703125 0.183594 0 0.183594 - 200 3 6 9 12 0.09375 0.078125 0.0195312 0.0820312 0 0.105469 - 200 3 6 12 13 0.09375 0.078125 0 0.105469 0.0976562 0.105469 + 2.81923 0 -40 + -0.212822 -1.81923 -40 + 0.393589 1.81923 -40 + 0.393589 1.81923 -9.5 + 2.81923 0 -9.5 + -0.212822 -1.81923 -9.5 +POLYGONS 30 + 200 3 0 1 2 0.615264 0.260024 0.595623 0.193224 0.615264 0.193224 + 200 3 1 0 3 0.595623 0.193224 0.615264 0.260024 0.595623 0.260024 + 200 3 4 3 5 0.595623 0.193224 0.615264 0.260024 0.595623 0.260024 + 200 3 3 4 1 0.615264 0.260024 0.595623 0.193224 0.615264 0.193224 + 200 3 5 2 4 0.615264 0.260024 0.595623 0.193224 0.615264 0.193224 + 200 3 2 5 0 0.595623 0.193224 0.615264 0.260024 0.595623 0.260024 + 200 3 6 7 8 0.0604954 0.0723357 0.0117821 0.00216573 0.0507527 0.00216573 + 200 3 7 6 9 0.0117821 0.00216573 0.0604954 0.0723357 0.00203939 0.0723357 + 200 3 7 9 10 0.0232459 0.0797176 0.0921728 0.0761983 0.00213011 0.107872 + 200 3 11 12 13 0.00958335 0.0723281 0.0585571 0.00214881 0.00394294 0.00214881 + 200 3 12 11 10 0.0585571 0.00214881 0.00958335 0.0723281 0.0529166 0.0723281 + 200 3 8 10 11 0.0118047 0.11119 0.0678484 0.146622 0.00246413 0.146622 + 200 3 10 8 7 0.0678484 0.146622 0.0118047 0.11119 0.0585078 0.11119 + 200 3 9 13 12 0.0610747 0.150486 0.00183256 0.182011 0.0684799 0.182011 + 200 3 13 9 6 0.00183256 0.182011 0.0610747 0.150486 0.00923783 0.150486 + 200 3 6 8 11 0.0921728 0.0761983 0.0232459 0.0797176 0.00213011 0.107872 + 200 3 1 14 2 0.595623 0.193224 0.615264 0.193224 0.615264 0.193224 + 200 3 14 1 15 0.615264 0.193224 0.595623 0.193224 0.595623 0.193224 + 200 3 4 15 1 0.595623 0.193224 0.615264 0.193224 0.615264 0.193224 + 200 3 15 4 16 0.615264 0.193224 0.595623 0.193224 0.595623 0.193224 + 200 3 2 16 4 0.595623 0.193224 0.615264 0.193224 0.615264 0.193224 + 200 3 16 2 14 0.615264 0.193224 0.595623 0.193224 0.595623 0.193224 + 200 3 14 17 16 0.595623 0.193224 0.615264 0.260024 0.615264 0.193224 + 200 3 17 14 18 0.615264 0.260024 0.595623 0.193224 0.595623 0.260024 + 200 3 16 19 15 0.595623 0.193224 0.615264 0.260024 0.615264 0.193224 + 200 3 19 16 17 0.615264 0.260024 0.595623 0.193224 0.595623 0.260024 + 200 3 15 18 14 0.595623 0.193224 0.615264 0.260024 0.615264 0.193224 + 200 3 18 15 19 0.615264 0.260024 0.595623 0.193224 0.595623 0.260024 + 200 3 10 9 12 0.00213011 0.107872 0.0921728 0.0761983 0.0956921 0.107872 + 200 3 6 11 13 0.0921728 0.0761983 0.00213011 0.107872 0.0956921 0.107872 CONNECTORS 1 1 -15 -7 diff --git a/data/mp/components/weapons/cy_therm.pie b/data/base/components/weapons/cy_therm.pie similarity index 100% rename from data/mp/components/weapons/cy_therm.pie rename to data/base/components/weapons/cy_therm.pie diff --git a/data/base/components/weapons/cy_tk.pie b/data/base/components/weapons/cy_tk.pie new file mode 100644 index 00000000000..5db1821f9a5 --- /dev/null +++ b/data/base/components/weapons/cy_tk.pie @@ -0,0 +1,105 @@ +PIE 3 +TYPE 200 +TEXTURE 0 page-17-droid-weapons.png 0 0 +LEVELS 1 +LEVEL 1 +POINTS 44 + 2.45313 -6.67978 -17.0176 + -3.54674 -14.036 -18.2149 + -4.6165 -7.4765 -17.0176 + 3.70567 -13.0327 -18.2149 + -3.54674 -14.036 14.2132 + 2.45313 -6.67978 15.4105 + -4.6165 -7.4765 15.4105 + 3.70567 -13.0327 14.2132 + 0.22639 4.61437 -14.889 + -5.49132 -2.11227 -16.0384 + -6.51829 4.18488 -14.889 + 1.42883 -1.48447 -16.0384 + -5.49132 -2.11227 16.3897 + 0.22639 4.61437 17.5391 + -6.51829 4.18488 17.5391 + 1.42883 -1.48447 16.3897 + 0.36035 3.93337 5.89827 + 2.87788 -8.83827 -0.753654 + 6.55957 -0.2166 -0.753654 + 0.36035 3.93337 -6.57408 + 2.45313 -6.67978 -5.06048 + 1.42883 -1.48447 -6.79642 + 1.42883 -1.48447 -4.08132 + 2.45313 -6.67978 -7.77559 + 2.45313 -6.67978 4.81214 + 1.42883 -1.48447 8.5064 + 2.45313 -6.67978 7.52724 + 1.42883 -1.48447 5.7913 + -4.6165 -7.4765 4.81214 + -5.49132 -2.11227 8.5064 + -5.49132 -2.11227 5.7913 + -4.6165 -7.4765 7.52724 + -4.6165 -7.4765 -5.06048 + -5.49132 -2.11227 -6.79642 + -4.6165 -7.4765 -7.77559 + -5.49132 -2.11227 -4.08132 + -5.21138 -3.82882 -4.39465 + -4.91977 -5.6169 5.15158 + -5.21138 -3.82882 5.47797 + -4.91977 -5.6169 -4.72104 + 1.7566 -3.14697 -4.39465 + 1.7566 -3.14697 5.47797 + 2.09804 -4.87874 5.15158 + 2.09804 -4.87874 -4.72104 +POLYGONS 52 + 200 3 0 1 2 0.998142 0.455178 0.986362 0.442717 0.986362 0.455178 + 200 3 1 0 3 0.986362 0.442717 0.998142 0.455178 0.998142 0.442717 + 200 3 4 5 6 0.998142 0.442712 0.986362 0.455165 0.998142 0.455165 + 200 3 5 4 7 0.986362 0.455165 0.998142 0.442712 0.986362 0.442712 + 200 3 8 9 10 0.998142 0.455057 0.986362 0.443335 0.986362 0.455057 + 200 3 9 8 11 0.986362 0.443335 0.998142 0.455057 0.998142 0.443335 + 200 3 12 13 14 0.998142 0.443317 0.986362 0.455031 0.998142 0.455031 + 200 3 13 12 15 0.986362 0.455031 0.998142 0.443317 0.986362 0.443317 + 200 3 10 13 8 0.986294 0.454959 0.998267 0.545255 0.998267 0.454959 + 200 3 13 10 14 0.998267 0.545255 0.986294 0.454959 0.986294 0.545255 + 200 3 3 5 7 0.857667 0.645895 0.767088 0.658402 0.767088 0.645895 + 200 3 5 3 0 0.767088 0.658402 0.857667 0.645895 0.857667 0.658402 + 200 3 11 13 15 0.857667 0.67368 0.767088 0.68553 0.767088 0.67368 + 200 3 13 11 8 0.767088 0.68553 0.857667 0.67368 0.857667 0.68553 + 200 3 4 3 7 0.998267 0.545255 0.986294 0.454959 0.986294 0.545255 + 200 3 3 4 1 0.986294 0.454959 0.998267 0.545255 0.998267 0.454959 + 200 3 4 2 1 0.767088 0.645895 0.857667 0.658402 0.857667 0.645895 + 200 3 2 4 6 0.857667 0.658402 0.767088 0.645895 0.767088 0.658402 + 200 3 12 10 9 0.767088 0.67368 0.857667 0.68553 0.857667 0.67368 + 200 3 10 12 14 0.857667 0.68553 0.767088 0.67368 0.767088 0.68553 + 200 3 15 9 11 0.998416 0.545317 0.986428 0.454972 0.998416 0.454972 + 200 3 9 15 12 0.986428 0.454972 0.998416 0.545317 0.986428 0.545317 + 200 3 0 6 5 0.986417 0.454991 0.998445 0.545336 0.986417 0.545336 + 200 3 6 0 2 0.998445 0.545336 0.986417 0.454991 0.998445 0.454991 + 200 3 16 17 18 0.996094 0.998342 0.986243 0.974618 0.9983 0.974618 + 200 3 19 18 17 0.996094 0.998342 0.9983 0.974618 0.986243 0.974618 + 200 3 16 18 19 0.919354 0.439389 0.920072 0.459282 0.939748 0.459782 + 200 3 17 16 19 0.975072 0.408355 0.975231 0.428568 0.954617 0.407955 + 200 3 20 21 22 0.825698 0.650657 0.830548 0.674222 0.825698 0.674222 + 200 3 21 20 23 0.830548 0.674222 0.825698 0.650657 0.830548 0.650668 + 200 3 24 25 26 0.795265 0.660318 0.790351 0.670674 0.790338 0.660318 + 200 3 25 24 27 0.790351 0.670674 0.795265 0.660318 0.795278 0.670674 + 200 3 28 29 30 0.795371 0.660305 0.7903 0.671819 0.795371 0.671819 + 200 3 29 28 31 0.7903 0.671819 0.795371 0.660305 0.7903 0.660331 + 200 3 32 33 34 0.825698 0.650668 0.830548 0.674222 0.830548 0.650668 + 200 3 33 32 35 0.830548 0.674222 0.825698 0.650668 0.825698 0.674222 + 200 3 34 21 23 0.79044 0.678215 0.795649 0.649879 0.790443 0.649953 + 200 3 21 34 33 0.795649 0.649879 0.79044 0.678215 0.795646 0.678141 + 200 3 25 31 26 0.79044 0.678215 0.795649 0.649879 0.795646 0.678141 + 200 3 31 25 29 0.795649 0.649879 0.79044 0.678215 0.790443 0.649953 + 200 3 27 28 30 0.795649 0.649879 0.79044 0.678215 0.795646 0.678141 + 200 3 28 27 24 0.79044 0.678215 0.795649 0.649879 0.790443 0.649953 + 200 3 22 32 20 0.79044 0.678215 0.795649 0.649879 0.795646 0.678141 + 200 3 32 22 35 0.795649 0.649879 0.79044 0.678215 0.790443 0.649953 + 200 3 36 37 38 0.826093 0.667089 0.795255 0.665081 0.795255 0.667089 + 200 3 37 36 39 0.795255 0.665081 0.826093 0.667089 0.826093 0.665081 + 200 3 40 38 41 0.82525 0.681002 0.831022 0.651714 0.82525 0.651714 + 200 3 38 40 36 0.831022 0.651714 0.82525 0.681002 0.831022 0.681002 + 200 3 42 39 43 0.83101 0.65174 0.825266 0.681029 0.83101 0.681029 + 200 3 39 42 37 0.825266 0.681029 0.83101 0.65174 0.825266 0.65174 + 200 3 40 42 43 0.826093 0.667089 0.795255 0.665081 0.826093 0.665081 + 200 3 42 40 41 0.795255 0.665081 0.826093 0.667089 0.795255 0.667089 +CONNECTORS 1 + -2 -18 1 diff --git a/data/base/components/weapons/gnhgss.pie b/data/base/components/weapons/gnhgss.pie index 4eb18114318..9c32ec3d281 100644 --- a/data/base/components/weapons/gnhgss.pie +++ b/data/base/components/weapons/gnhgss.pie @@ -3,33 +3,47 @@ TYPE 200 TEXTURE 0 page-17-droid-weapons.png 0 0 LEVELS 1 LEVEL 1 -POINTS 10 - 0 8 -20 - 5 14 -15 - 5 14 -69 - 0 8 -69 - -6 14 -15 - -6 14 -69 - 5 14 4 - 0 20 4 +POINTS 16 + 6 14 -69 0 20 -69 + 0 20 4 + 6 14 4 + -6 14 -69 -6 14 4 -POLYGONS 16 - 200 3 0 1 2 0.59375 0.238281 0.617188 0.246094 0.617188 0.15625 - 200 3 0 2 3 0.59375 0.238281 0.617188 0.15625 0.59375 0.15625 - 200 3 3 2 1 0.59375 0.15625 0.617188 0.15625 0.617188 0.246094 - 200 3 3 1 0 0.59375 0.15625 0.617188 0.246094 0.59375 0.238281 - 200 3 4 0 3 0.59375 0.246094 0.617188 0.238281 0.617188 0.15625 - 200 3 4 3 5 0.59375 0.246094 0.617188 0.15625 0.59375 0.15625 - 200 3 5 3 0 0.59375 0.15625 0.617188 0.15625 0.617188 0.238281 - 200 3 5 0 4 0.59375 0.15625 0.617188 0.238281 0.59375 0.246094 - 200 3 6 7 8 0.59375 0.28125 0.617188 0.28125 0.617188 0.15625 - 200 3 6 8 2 0.59375 0.28125 0.617188 0.15625 0.59375 0.15625 - 200 3 2 8 7 0.59375 0.15625 0.617188 0.15625 0.617188 0.28125 - 200 3 2 7 6 0.59375 0.15625 0.617188 0.28125 0.59375 0.28125 - 200 3 7 9 5 0.59375 0.28125 0.617188 0.28125 0.617188 0.15625 - 200 3 7 5 8 0.59375 0.28125 0.617188 0.15625 0.59375 0.15625 - 200 3 8 5 9 0.59375 0.15625 0.617188 0.15625 0.617188 0.28125 - 200 3 8 9 7 0.59375 0.15625 0.617188 0.28125 0.59375 0.28125 + 0 8 4 + 0 8 -69 + 0 18.1338 -69 + 4.13377 14 -69 + -4.13377 14 -69 + 0 9.86623 -69 + 0 18.1338 4 + 4.13377 14 4 + 0 9.86623 4 + -4.13377 14 4 +POLYGONS 24 + 200 3 0 1 2 0.595684 0.158399 0.615232 0.158399 0.615232 0.279377 + 200 3 0 2 3 0.595684 0.158399 0.615232 0.279377 0.595684 0.279377 + 200 3 1 4 5 0.595684 0.158399 0.615232 0.158399 0.615232 0.279377 + 200 3 1 5 2 0.595684 0.158399 0.615232 0.279377 0.595684 0.279377 + 200 3 0 6 7 0.595684 0.158399 0.615232 0.279377 0.615232 0.158399 + 200 3 0 3 6 0.595684 0.158399 0.595684 0.279377 0.615232 0.279377 + 200 3 7 5 4 0.595684 0.158399 0.615232 0.279377 0.615232 0.158399 + 200 3 7 6 5 0.595684 0.158399 0.595684 0.279377 0.615232 0.279377 + 200 3 0 8 1 0.59574 0.161543 0.612153 0.158521 0.615176 0.161543 + 200 3 8 0 9 0.612153 0.158521 0.59574 0.161543 0.598763 0.158521 + 200 3 1 10 4 0.59574 0.161543 0.612153 0.158521 0.615176 0.161543 + 200 3 10 1 8 0.612153 0.158521 0.59574 0.161543 0.598763 0.158521 + 200 3 7 9 0 0.615176 0.161543 0.598763 0.158521 0.59574 0.161543 + 200 3 9 7 11 0.598763 0.158521 0.615176 0.161543 0.612153 0.158521 + 200 3 4 11 7 0.615176 0.161543 0.598763 0.158521 0.59574 0.161543 + 200 3 11 4 10 0.598763 0.158521 0.615176 0.161543 0.612153 0.158521 + 200 3 12 9 13 0.615232 0.279377 0.595684 0.158399 0.595684 0.279377 + 200 3 9 12 8 0.595684 0.158399 0.615232 0.279377 0.615232 0.158399 + 200 3 13 11 14 0.595684 0.279377 0.615232 0.158399 0.615232 0.279377 + 200 3 11 13 9 0.615232 0.158399 0.595684 0.279377 0.595684 0.158399 + 200 3 14 10 15 0.595684 0.279377 0.615232 0.158399 0.615232 0.279377 + 200 3 10 14 11 0.615232 0.158399 0.595684 0.279377 0.595684 0.158399 + 200 3 15 8 12 0.615232 0.279377 0.595684 0.158399 0.595684 0.279377 + 200 3 8 15 10 0.595684 0.158399 0.615232 0.279377 0.615232 0.158399 CONNECTORS 1 0 -10 4 diff --git a/data/base/components/weapons/gnlgss.pie b/data/base/components/weapons/gnlgss.pie index 99c844d04a5..b7be45e45ba 100644 --- a/data/base/components/weapons/gnlgss.pie +++ b/data/base/components/weapons/gnlgss.pie @@ -3,25 +3,43 @@ TYPE 200 TEXTURE 0 page-17-droid-weapons.png 0 0 LEVELS 1 LEVEL 1 -POINTS 6 - -10 4 -32 +POINTS 12 + -10 4 9 -5 7 -32 + -10 4 -32 -5 7 17 - -10 4 8 -5 1 -32 -5 1 17 -POLYGONS 12 - 200 3 0 1 2 0.617188 0.191406 0.59375 0.191406 0.59375 0.261719 - 200 3 0 2 3 0.617188 0.191406 0.59375 0.261719 0.617188 0.25 - 200 3 3 2 1 0.617188 0.25 0.59375 0.261719 0.59375 0.191406 - 200 3 3 1 0 0.617188 0.25 0.59375 0.191406 0.617188 0.191406 - 200 3 1 4 5 0.617188 0.191406 0.59375 0.191406 0.59375 0.261719 - 200 3 1 5 2 0.617188 0.191406 0.59375 0.261719 0.617188 0.261719 - 200 3 2 5 4 0.617188 0.261719 0.59375 0.261719 0.59375 0.191406 - 200 3 2 4 1 0.617188 0.261719 0.59375 0.191406 0.617188 0.191406 - 200 3 4 0 3 0.617188 0.191406 0.59375 0.191406 0.59375 0.25 - 200 3 4 3 5 0.617188 0.191406 0.59375 0.25 0.617188 0.261719 - 200 3 5 3 0 0.617188 0.261719 0.59375 0.25 0.59375 0.191406 - 200 3 5 0 4 0.617188 0.261719 0.59375 0.191406 0.617188 0.191406 + -8.37975 4 -32 + -5.81013 5.54177 -32 + -5.81013 5.54177 17 + -8.37975 4 9 + -5.81013 2.45823 17 + -5.81013 2.45823 -32 +POLYGONS 24 + 200 3 0 1 2 0.617188 0.25 0.59375 0.191406 0.617188 0.191406 + 200 3 1 0 3 0.59375 0.191406 0.617188 0.25 0.59375 0.261719 + 200 3 3 4 1 0.617188 0.261719 0.59375 0.191406 0.617188 0.191406 + 200 3 4 3 5 0.59375 0.191406 0.617188 0.261719 0.59375 0.261719 + 200 3 5 2 4 0.617188 0.261719 0.59375 0.191406 0.617188 0.191406 + 200 3 2 5 0 0.59375 0.191406 0.617188 0.261719 0.59375 0.25 + 200 3 1 6 2 0.59375 0.191406 0.617188 0.191406 0.617188 0.191406 + 200 3 6 1 7 0.617188 0.191406 0.59375 0.191406 0.59375 0.191406 + 200 3 0 8 3 0.617188 0.25 0.59375 0.261719 0.59375 0.261719 + 200 3 8 0 9 0.59375 0.261719 0.617188 0.25 0.617188 0.25 + 200 3 3 10 5 0.617188 0.261719 0.59375 0.261719 0.59375 0.261719 + 200 3 10 3 8 0.59375 0.261719 0.617188 0.261719 0.617188 0.261719 + 200 3 4 7 1 0.59375 0.191406 0.617188 0.191406 0.617188 0.191406 + 200 3 7 4 11 0.617188 0.191406 0.59375 0.191406 0.59375 0.191406 + 200 3 5 9 0 0.617188 0.261719 0.59375 0.25 0.59375 0.25 + 200 3 9 5 10 0.59375 0.25 0.617188 0.261719 0.617188 0.261719 + 200 3 2 11 4 0.59375 0.191406 0.617188 0.191406 0.617188 0.191406 + 200 3 11 2 6 0.617188 0.191406 0.59375 0.191406 0.59375 0.191406 + 200 3 6 10 11 0.59375 0.191406 0.617188 0.261719 0.617188 0.191406 + 200 3 10 6 9 0.617188 0.261719 0.59375 0.191406 0.59375 0.25 + 200 3 11 8 7 0.59375 0.191406 0.617188 0.261719 0.617188 0.191406 + 200 3 8 11 10 0.617188 0.261719 0.59375 0.191406 0.59375 0.261719 + 200 3 7 9 6 0.59375 0.191406 0.617188 0.25 0.617188 0.191406 + 200 3 9 7 8 0.617188 0.25 0.59375 0.191406 0.59375 0.261719 CONNECTORS 1 -7 -5 -3 diff --git a/data/base/components/weapons/gnmgss.pie b/data/base/components/weapons/gnmgss.pie index d4d31361e1e..5efeb4ae94d 100644 --- a/data/base/components/weapons/gnmgss.pie +++ b/data/base/components/weapons/gnmgss.pie @@ -3,25 +3,37 @@ TYPE 200 TEXTURE 0 page-17-droid-weapons.png 0 0 LEVELS 1 LEVEL 1 -POINTS 6 - -16 6 -49 - -8 10 -49 - -8 10 4 +POINTS 12 -16 6 4 - -9 1 -49 + -8 10 4 + -8 10 -49 + -16 6 -49 -9 1 4 -POLYGONS 12 - 200 3 0 1 2 0.617188 0.175781 0.59375 0.175781 0.59375 0.277344 - 200 3 0 2 3 0.617188 0.175781 0.59375 0.277344 0.617188 0.277344 - 200 3 3 2 1 0.617188 0.277344 0.59375 0.277344 0.59375 0.175781 - 200 3 3 1 0 0.617188 0.277344 0.59375 0.175781 0.617188 0.175781 - 200 3 1 4 5 0.617188 0.175781 0.59375 0.175781 0.59375 0.277344 - 200 3 1 5 2 0.617188 0.175781 0.59375 0.277344 0.617188 0.277344 - 200 3 2 5 4 0.617188 0.277344 0.59375 0.277344 0.59375 0.175781 - 200 3 2 4 1 0.617188 0.277344 0.59375 0.175781 0.617188 0.175781 - 200 3 4 0 3 0.617188 0.175781 0.59375 0.175781 0.59375 0.277344 - 200 3 4 3 5 0.617188 0.175781 0.59375 0.277344 0.617188 0.277344 - 200 3 5 3 0 0.617188 0.277344 0.59375 0.277344 0.59375 0.175781 - 200 3 5 0 4 0.617188 0.277344 0.59375 0.175781 0.617188 0.175781 + -9 1 -49 + -13.8985 5.8599 -49 + -9.2609 8.1787 -49 + -9.8406 2.9614 -49 + -9.8406 2.9614 4 + -13.8985 5.8599 4 + -9.2609 8.1787 4 +POLYGONS 18 + 200 3 0 1 2 0.617188 0.277344 0.59375 0.277344 0.59375 0.175781 + 200 3 0 2 3 0.617188 0.277344 0.59375 0.175781 0.617188 0.175781 + 200 3 1 4 5 0.617188 0.277344 0.59375 0.277344 0.59375 0.175781 + 200 3 1 5 2 0.617188 0.277344 0.59375 0.175781 0.617188 0.175781 + 200 3 4 0 3 0.617188 0.277344 0.59375 0.277344 0.59375 0.175781 + 200 3 4 3 5 0.617188 0.277344 0.59375 0.175781 0.617188 0.175781 + 200 3 2 6 3 0.59375 0.175781 0.617188 0.175781 0.617188 0.175781 + 200 3 6 2 7 0.617188 0.175781 0.59375 0.175781 0.59375 0.175781 + 200 3 5 7 2 0.59375 0.175781 0.617188 0.175781 0.617188 0.175781 + 200 3 7 5 8 0.617188 0.175781 0.59375 0.175781 0.59375 0.175781 + 200 3 3 8 5 0.59375 0.175781 0.617188 0.175781 0.617188 0.175781 + 200 3 8 3 6 0.617188 0.175781 0.59375 0.175781 0.59375 0.175781 + 200 3 6 9 8 0.59375 0.175781 0.617188 0.277344 0.617188 0.175781 + 200 3 9 6 10 0.617188 0.277344 0.59375 0.175781 0.59375 0.277344 + 200 3 8 11 7 0.59375 0.175781 0.617188 0.277344 0.617188 0.175781 + 200 3 11 8 9 0.617188 0.277344 0.59375 0.175781 0.59375 0.277344 + 200 3 7 10 6 0.59375 0.175781 0.617188 0.277344 0.617188 0.175781 + 200 3 10 7 11 0.617188 0.277344 0.59375 0.175781 0.59375 0.277344 CONNECTORS 1 -11 4 0 diff --git a/data/base/components/weapons/gnmrcktb.pie b/data/base/components/weapons/gnmrcktb.pie index d3977bab29f..cbc358b2e02 100644 --- a/data/base/components/weapons/gnmrcktb.pie +++ b/data/base/components/weapons/gnmrcktb.pie @@ -1,61 +1,201 @@ -PIE 2 +PIE 3 TYPE 200 -TEXTURE 0 page-17-droid-weapons.png 256 256 +TEXTURE 0 page-17-droid-weapons.png 0 0 LEVELS 1 LEVEL 1 -POINTS 24 - 14 7 -17 - 20 3 -17 - 28 16 -21 - 22 20 -21 - 14 7 22 - 20 3 22 - 28 16 18 - 22 20 18 - -19 3 -17 - -14 7 -17 - -22 20 -21 - -28 16 -21 - -19 3 22 - -14 7 22 - -22 20 18 - -28 16 18 - -12 15 0 - -13 8 8 - -20 17 0 - -13 8 -7 - 13 8 8 - 12 15 0 - 20 17 0 - 13 8 -7 -POLYGONS 28 - 200 3 3 2 1 256 106 256 106 256 116 - 200 3 3 1 0 256 106 256 116 252 116 - 200 3 1 5 4 256 116 256 140 252 140 - 200 3 1 4 0 256 116 252 140 252 116 - 200 3 7 6 2 256 140 252 140 252 116 - 200 3 7 2 3 256 140 252 116 256 116 - 200 3 2 6 5 196 165 220 165 220 176 - 200 3 2 5 1 196 165 220 176 196 176 - 200 3 6 7 4 252 106 256 106 256 116 - 200 3 6 4 5 252 106 256 116 252 116 - 200 3 7 3 0 196 165 220 165 220 176 - 200 3 7 0 4 196 165 220 176 196 176 - 200 3 11 10 9 256 106 256 106 256 116 - 200 3 11 9 8 256 106 256 116 252 116 - 200 3 9 13 12 256 116 256 140 252 140 - 200 3 9 12 8 256 116 252 140 252 116 - 200 3 15 14 10 256 140 252 140 252 116 - 200 3 15 10 11 256 140 252 116 256 116 - 200 3 10 14 13 196 165 220 165 220 176 - 200 3 10 13 9 196 165 220 176 196 176 - 200 3 14 15 12 252 106 256 106 256 116 - 200 3 14 12 13 252 106 256 116 252 116 - 200 3 15 11 8 196 165 220 165 220 176 - 200 3 15 8 12 196 165 220 176 196 176 - 200 3 18 17 16 252 249 255 256 256 249 - 200 3 16 19 18 256 249 255 256 252 249 - 200 3 22 21 20 252 249 256 249 255 256 - 200 3 21 22 23 256 249 252 249 255 256 +POINTS 88 + -28 16 -21 + -19.1609 15.3864 -19.56 + -24.6208 11.119 -19.56 + -22 20 -21 + -19.1609 15.3864 19.44 + -28 16 18 + -24.6208 11.119 19.44 + -22 20 18 + -21.9338 7.23775 -18.3824 + -14 7.00001 -17 + -19 3.00001 -17 + -16.7503 11.4694 -18.3824 + -14 7.00001 22 + -21.9338 7.23775 20.6176 + -19 3.00001 22 + -16.7503 11.4694 20.6176 + -20.1815 17.0449 3.9502e-08 + -14 7.00005 8 + -12 15 6.5071e-08 + -14 7.00005 -7 + -16.7503 11.4694 -7.2674 + -19.1609 15.3864 -5.17965 + -16.7503 11.4694 -4.00205 + -19.1609 15.3864 -8.445 + -16.7503 11.4694 11.1367 + -19.1609 15.3864 6.69375 + -19.1609 15.3864 9.9591 + -16.7503 11.4694 7.87135 + -21.9338 7.23775 11.1367 + -24.6208 11.119 6.69375 + -21.9338 7.23775 7.87135 + -24.6208 11.119 9.9591 + -21.9338 7.23775 -7.2674 + -24.6208 11.119 -5.17965 + -24.6208 11.119 -8.445 + -21.9338 7.23775 -4.00205 + -23.6903 9.77491 7.10199 + -22.7936 8.47987 -4.37889 + -22.7936 8.47987 7.49452 + -23.6903 9.77491 -4.77142 + -17.5227 12.7243 -4.37888 + -17.5227 12.7243 7.49452 + -18.3292 14.0349 7.10199 + -18.3292 14.0349 -4.77142 + 28 16 -21 + 19.1609 15.3864 -19.56 + 22 20 -21 + 24.6208 11.119 -19.56 + 19.1609 15.3864 19.44 + 28 16 18 + 22 20 18 + 24.6208 11.119 19.44 + 21.9338 7.23775 -18.3824 + 14 7.00001 -17 + 16.7503 11.4694 -18.3824 + 19 3.00001 -17 + 14 7.00001 22 + 21.9338 7.23775 20.6176 + 16.7503 11.4694 20.6176 + 19 3.00001 22 + 20.1815 17.0449 3.9502e-08 + 12 15 6.5071e-08 + 14 7.00005 8 + 14 7.00005 -7 + 16.7503 11.4694 -7.2674 + 19.1609 15.3864 -5.17965 + 19.1609 15.3864 -8.445 + 16.7503 11.4694 -4.00205 + 16.7503 11.4694 11.1367 + 19.1609 15.3864 6.69375 + 16.7503 11.4694 7.87135 + 19.1609 15.3864 9.9591 + 21.9338 7.23775 11.1367 + 24.6208 11.119 6.69375 + 24.6208 11.119 9.9591 + 21.9338 7.23775 7.87135 + 21.9338 7.23775 -7.2674 + 24.6208 11.119 -5.17965 + 21.9338 7.23775 -4.00205 + 24.6208 11.119 -8.445 + 23.6903 9.77491 7.10199 + 22.7936 8.47987 -4.37889 + 23.6903 9.77492 -4.77142 + 22.7936 8.47987 7.49452 + 17.5227 12.7243 -4.37888 + 17.5227 12.7243 7.49452 + 18.3292 14.0349 7.10199 + 18.3292 14.0349 -4.77142 +POLYGONS 104 + 200 3 0 1 2 0.986362 0.442717 0.998142 0.455178 0.986362 0.455178 + 200 3 1 0 3 0.998142 0.455178 0.986362 0.442717 0.998142 0.442717 + 200 3 4 5 6 0.986362 0.455165 0.998142 0.442712 0.998142 0.455165 + 200 3 5 4 7 0.998142 0.442712 0.986362 0.455165 0.986362 0.442712 + 200 3 8 9 10 0.986362 0.443335 0.998142 0.455057 0.986362 0.455057 + 200 3 9 8 11 0.998142 0.455057 0.986362 0.443335 0.998142 0.443335 + 200 3 12 13 14 0.986362 0.455031 0.998142 0.443317 0.998142 0.455031 + 200 3 13 12 15 0.998142 0.443317 0.986362 0.455031 0.986362 0.443317 + 200 3 12 10 9 0.998267 0.545255 0.986294 0.454959 0.998267 0.454959 + 200 3 10 12 14 0.986294 0.454959 0.998267 0.545255 0.986294 0.545255 + 200 3 4 3 7 0.767088 0.658402 0.857667 0.645895 0.767088 0.645895 + 200 3 3 4 1 0.857667 0.645895 0.767088 0.658402 0.857667 0.658402 + 200 3 12 11 15 0.767088 0.68553 0.857667 0.67368 0.767088 0.67368 + 200 3 11 12 9 0.857667 0.67368 0.767088 0.68553 0.857667 0.68553 + 200 3 3 5 7 0.986294 0.454959 0.998267 0.545255 0.986294 0.545255 + 200 3 5 3 0 0.998267 0.545255 0.986294 0.454959 0.998267 0.454959 + 200 3 2 5 0 0.857667 0.658402 0.767088 0.645895 0.857667 0.645895 + 200 3 5 2 6 0.767088 0.645895 0.857667 0.658402 0.767088 0.658402 + 200 3 10 13 8 0.857667 0.68553 0.767088 0.67368 0.857667 0.67368 + 200 3 13 10 14 0.767088 0.67368 0.857667 0.68553 0.767088 0.68553 + 200 3 8 15 11 0.986428 0.454972 0.998416 0.545317 0.998416 0.454972 + 200 3 15 8 13 0.998416 0.545317 0.986428 0.454972 0.986428 0.545317 + 200 3 6 1 4 0.998445 0.545336 0.986417 0.454991 0.986417 0.545336 + 200 3 1 6 2 0.986417 0.454991 0.998445 0.545336 0.998445 0.454991 + 200 3 16 17 18 0.986243 0.974618 0.996094 0.998342 0.9983 0.974618 + 200 3 18 19 16 0.9983 0.974618 0.996094 0.998342 0.986243 0.974618 + 200 3 18 17 19 0.920072 0.459282 0.919354 0.439389 0.939748 0.459782 + 200 3 17 16 19 0.975231 0.428568 0.975072 0.408355 0.954617 0.407955 + 200 3 20 21 22 0.830548 0.674222 0.825698 0.650657 0.825698 0.674222 + 200 3 21 20 23 0.825698 0.650657 0.830548 0.674222 0.830548 0.650668 + 200 3 24 25 26 0.790351 0.670674 0.795265 0.660318 0.790338 0.660318 + 200 3 25 24 27 0.795265 0.660318 0.790351 0.670674 0.795278 0.670674 + 200 3 28 29 30 0.7903 0.671819 0.795371 0.660305 0.795371 0.671819 + 200 3 29 28 31 0.795371 0.660305 0.7903 0.671819 0.7903 0.660331 + 200 3 32 33 34 0.830548 0.674222 0.825698 0.650668 0.830548 0.650668 + 200 3 33 32 35 0.825698 0.650668 0.830548 0.674222 0.825698 0.674222 + 200 3 20 34 23 0.795649 0.649879 0.79044 0.678215 0.790443 0.649953 + 200 3 34 20 32 0.79044 0.678215 0.795649 0.649879 0.795646 0.678141 + 200 3 31 24 26 0.795649 0.649879 0.79044 0.678215 0.795646 0.678141 + 200 3 24 31 28 0.79044 0.678215 0.795649 0.649879 0.790443 0.649953 + 200 3 29 27 30 0.79044 0.678215 0.795649 0.649879 0.795646 0.678141 + 200 3 27 29 25 0.795649 0.649879 0.79044 0.678215 0.790443 0.649953 + 200 3 33 22 21 0.795649 0.649879 0.79044 0.678215 0.795646 0.678141 + 200 3 22 33 35 0.79044 0.678215 0.795649 0.649879 0.790443 0.649953 + 200 3 36 37 38 0.795255 0.665081 0.826093 0.667089 0.795255 0.667089 + 200 3 37 36 39 0.826093 0.667089 0.795255 0.665081 0.826093 0.665081 + 200 3 38 40 41 0.831022 0.651714 0.82525 0.681002 0.82525 0.651714 + 200 3 40 38 37 0.82525 0.681002 0.831022 0.651714 0.831022 0.681002 + 200 3 39 42 43 0.825266 0.681029 0.83101 0.65174 0.83101 0.681029 + 200 3 42 39 36 0.83101 0.65174 0.825266 0.681029 0.825266 0.65174 + 200 3 42 40 43 0.795255 0.665081 0.826093 0.667089 0.826093 0.665081 + 200 3 40 42 41 0.826093 0.667089 0.795255 0.665081 0.795255 0.667089 + 200 3 44 45 46 0.986362 0.442717 0.998142 0.455178 0.998142 0.442717 + 200 3 45 44 47 0.998142 0.455178 0.986362 0.442717 0.986362 0.455178 + 200 3 48 49 50 0.986362 0.455165 0.998142 0.442712 0.986362 0.442712 + 200 3 49 48 51 0.998142 0.442712 0.986362 0.455165 0.998142 0.455165 + 200 3 52 53 54 0.986362 0.443335 0.998142 0.455057 0.998142 0.443335 + 200 3 53 52 55 0.998142 0.455057 0.986362 0.443335 0.986362 0.455057 + 200 3 56 57 58 0.986362 0.455031 0.998142 0.443317 0.986362 0.443317 + 200 3 57 56 59 0.998142 0.443317 0.986362 0.455031 0.998142 0.455031 + 200 3 56 55 59 0.998267 0.545255 0.986294 0.454959 0.986294 0.545255 + 200 3 55 56 53 0.986294 0.454959 0.998267 0.545255 0.998267 0.454959 + 200 3 48 46 45 0.767088 0.658402 0.857667 0.645895 0.857667 0.658402 + 200 3 46 48 50 0.857667 0.645895 0.767088 0.658402 0.767088 0.645895 + 200 3 56 54 53 0.767088 0.68553 0.857667 0.67368 0.857667 0.68553 + 200 3 54 56 58 0.857667 0.67368 0.767088 0.68553 0.767088 0.67368 + 200 3 46 49 44 0.986294 0.454959 0.998267 0.545255 0.998267 0.454959 + 200 3 49 46 50 0.998267 0.545255 0.986294 0.454959 0.986294 0.545255 + 200 3 47 49 51 0.857667 0.658402 0.767088 0.645895 0.767088 0.658402 + 200 3 49 47 44 0.767088 0.645895 0.857667 0.658402 0.857667 0.645895 + 200 3 55 57 59 0.857667 0.68553 0.767088 0.67368 0.767088 0.68553 + 200 3 57 55 52 0.767088 0.67368 0.857667 0.68553 0.857667 0.67368 + 200 3 52 58 57 0.986428 0.454972 0.998416 0.545317 0.986428 0.545317 + 200 3 58 52 54 0.998416 0.545317 0.986428 0.454972 0.998416 0.454972 + 200 3 51 45 47 0.998445 0.545336 0.986417 0.454991 0.998445 0.454991 + 200 3 45 51 48 0.986417 0.454991 0.998445 0.545336 0.986417 0.545336 + 200 3 60 61 62 0.986243 0.974618 0.9983 0.974618 0.996094 0.998342 + 200 3 61 60 63 0.9983 0.974618 0.986243 0.974618 0.996094 0.998342 + 200 3 61 63 62 0.920072 0.459282 0.939748 0.459782 0.919354 0.439389 + 200 3 62 63 60 0.975231 0.428568 0.954617 0.407955 0.975072 0.408355 + 200 3 64 65 66 0.830548 0.674222 0.825698 0.650657 0.830548 0.650668 + 200 3 65 64 67 0.825698 0.650657 0.830548 0.674222 0.825698 0.674222 + 200 3 68 69 70 0.790351 0.670674 0.795265 0.660318 0.795278 0.670674 + 200 3 69 68 71 0.795265 0.660318 0.790351 0.670674 0.790338 0.660318 + 200 3 72 73 74 0.7903 0.671819 0.795371 0.660305 0.7903 0.660331 + 200 3 73 72 75 0.795371 0.660305 0.7903 0.671819 0.795371 0.671819 + 200 3 76 77 78 0.830548 0.674222 0.825698 0.650668 0.825698 0.674222 + 200 3 77 76 79 0.825698 0.650668 0.830548 0.674222 0.830548 0.650668 + 200 3 64 79 76 0.795649 0.649879 0.79044 0.678215 0.795646 0.678141 + 200 3 79 64 66 0.79044 0.678215 0.795649 0.649879 0.790443 0.649953 + 200 3 74 68 72 0.795649 0.649879 0.79044 0.678215 0.790443 0.649953 + 200 3 68 74 71 0.79044 0.678215 0.795649 0.649879 0.795646 0.678141 + 200 3 73 70 69 0.79044 0.678215 0.795649 0.649879 0.790443 0.649953 + 200 3 70 73 75 0.795649 0.649879 0.79044 0.678215 0.795646 0.678141 + 200 3 77 67 78 0.795649 0.649879 0.79044 0.678215 0.790443 0.649953 + 200 3 67 77 65 0.79044 0.678215 0.795649 0.649879 0.795646 0.678141 + 200 3 80 81 82 0.795255 0.665081 0.826093 0.667089 0.826093 0.665081 + 200 3 81 80 83 0.826093 0.667089 0.795255 0.665081 0.795255 0.667089 + 200 3 83 84 81 0.831022 0.651714 0.82525 0.681002 0.831022 0.681002 + 200 3 84 83 85 0.82525 0.681002 0.831022 0.651714 0.82525 0.651714 + 200 3 82 86 80 0.825266 0.681029 0.83101 0.65174 0.825266 0.65174 + 200 3 86 82 87 0.83101 0.65174 0.825266 0.681029 0.83101 0.681029 + 200 3 86 84 85 0.795255 0.665081 0.826093 0.667089 0.795255 0.667089 + 200 3 84 86 87 0.826093 0.667089 0.795255 0.665081 0.826093 0.665081 CONNECTORS 1 0 -23 14 diff --git a/data/base/components/weapons/trhgss.pie b/data/base/components/weapons/trhgss.pie index 63a85d8d223..a255cd9d3ec 100644 --- a/data/base/components/weapons/trhgss.pie +++ b/data/base/components/weapons/trhgss.pie @@ -1,34 +1,34 @@ -PIE 2 +PIE 3 TYPE 10200 -TEXTURE 0 page-17-droid-weapons.png 256 256 +TEXTURE 0 page-17-droid-weapons.png 0 0 LEVELS 1 LEVEL 1 -POINTS 12 - 17 0 -26 - 23 0 16 - 11 14 32 - 7 14 -15 - -23 0 16 - -17 0 -26 - -7 14 -15 - -11 14 32 - -9 14 4 - 9 14 4 - 0 23 5 +POINTS 12 + 7 14 -15 + 11 14 32 + 23 0 16 + -11 14 32 + -7 14 -15 + -23 0 16 + 17 0 -26 + -17 0 -26 + 0 23 5 + 8.58109 14 4 + -8.58109 14 4 0 14 30 POLYGONS 15 - 200 3 3 2 1 0 27 25 26 18 20 - 200 3 3 1 0 0 27 18 20 4 20 - 200 3 7 6 5 25 26 0 27 4 20 - 200 3 7 5 4 25 26 4 20 18 20 - 200 3 7 2 3 12 19 4 19 5 0 - 200 3 7 3 6 12 19 5 0 11 0 - 200 3 2 7 4 4 41 14 41 18 47 - 200 3 2 4 1 4 41 18 47 0 47 - 200 3 0 1 4 14 19 16 0 0 0 - 200 3 4 5 0 0 0 2 19 14 19 - 200 3 10 9 8 18 38 18 47 0 38 - 200 3 11 10 8 134 208 128 197 144 197 - 200 3 10 11 9 144 197 137 208 128 197 - 200 3 6 3 0 133 200 139 200 142 208 - 200 3 6 0 5 133 200 142 208 130 208 \ No newline at end of file + 200 3 0 1 2 0.0021885 0.104856 0.0954677 0.101124 0.0693496 0.0787378 + 200 3 3 4 5 0.0954677 0.101124 0.0021885 0.104856 0.0693496 0.0787378 + 200 3 3 0 4 0.0466345 0.0720743 0.0208711 0.00214475 0.0429541 0.00214475 + 200 3 0 3 1 0.0208711 0.00214475 0.0466345 0.0720743 0.0171906 0.0720743 + 200 3 1 5 2 0.0194601 0.159148 0.0688289 0.181734 0.00203579 0.181734 + 200 3 5 1 3 0.0688289 0.181734 0.0194601 0.159148 0.0514046 0.159148 + 200 3 6 5 7 0.0521845 0.0720743 0.00333739 0.00214475 0.0103155 0.0720743 + 200 3 5 6 2 0.00333739 0.00214475 0.0521845 0.0720743 0.0591626 0.00214475 + 200 3 8 9 10 0.0358316 0.111284 0.016492 0.131568 0.0551712 0.131568 + 200 3 11 8 10 0.533125 0.811081 0.502064 0.77095 0.560436 0.77095 + 200 3 8 11 9 0.560436 0.77095 0.533126 0.811081 0.502064 0.77095 + 200 3 4 6 7 0.520557 0.782618 0.552636 0.811132 0.509864 0.811132 + 200 3 6 4 0 0.552636 0.811132 0.520557 0.782618 0.541943 0.782618 + 200 3 0 2 6 0.0021885 0.104856 0.0693496 0.0787378 0.0171132 0.0787378 + 200 3 5 4 7 0.0693496 0.0787378 0.0021885 0.104856 0.0171132 0.0787378 diff --git a/data/base/components/weapons/trlgss.pie b/data/base/components/weapons/trlgss.pie index 88d6647622f..3cd9a84d0cb 100644 --- a/data/base/components/weapons/trlgss.pie +++ b/data/base/components/weapons/trlgss.pie @@ -1,27 +1,27 @@ -PIE 2 +PIE 3 TYPE 10200 -TEXTURE 0 page-17-droid-weapons.png 256 256 +TEXTURE 0 page-17-droid-weapons.png 0 0 LEVELS 1 LEVEL 1 -POINTS 8 - -5 7 -3 - 5 7 0 - 7 7 17 - -5 7 17 - -5 0 -14 - 10 0 -9 - 13 0 9 +POINTS 8 + -5 7 17 + 7 7 17 + 5 7 -0 + -5 7 -3 + 10 0 -9 + -5 0 -14 -5 0 9 + 13 0 9 POLYGONS 12 - 200 3 3 2 1 12 19 4 19 5 0 - 200 3 3 1 0 12 19 5 0 11 0 - 200 3 0 1 5 5 131 11 131 14 140 - 200 3 0 5 4 5 131 14 140 2 140 - 200 3 2 3 7 4 41 14 41 18 47 - 200 3 2 7 6 4 41 18 47 0 47 - 200 3 1 2 6 0 27 25 26 18 20 - 200 3 1 6 5 0 27 18 20 4 20 - 200 3 3 0 4 25 26 0 27 4 20 - 200 3 3 4 7 25 26 4 20 18 20 - 200 3 5 6 7 14 19 16 0 0 0 - 200 3 7 4 5 0 0 2 19 14 19 \ No newline at end of file + 200 3 0 1 2 0.0442051 0.0724778 0.0144213 0.0724778 0.0181443 0.0121512 + 200 3 0 2 3 0.0442051 0.0724778 0.0181443 0.0121512 0.0442347 0.00174105 + 200 3 3 2 4 0.0206047 0.513329 0.0418953 0.513329 0.0525406 0.545265 + 200 3 3 4 5 0.0206047 0.513329 0.0525406 0.545265 0.00995941 0.545265 + 200 3 1 0 6 0.0215501 0.161445 0.068908 0.161445 0.068809 0.182305 + 200 3 1 6 7 0.0215501 0.161445 0.068809 0.182305 0.00229356 0.182305 + 200 3 2 1 7 0.00197711 0.104915 0.0956791 0.101167 0.0694426 0.0786786 + 200 3 2 7 4 0.00197711 0.104915 0.0694426 0.0786786 0.0169694 0.0786786 + 200 3 0 3 5 0.0958298 0.102308 0.0359544 0.102308 0.00302298 0.0786221 + 200 3 0 5 6 0.0958298 0.102308 0.00302298 0.0786221 0.0718797 0.0786221 + 200 3 4 7 6 0.0521057 0.0724778 0.0590576 0.00174105 0.0034424 0.00174105 + 200 3 6 5 4 0.0034424 0.00174105 0.0103943 0.0724778 0.0521057 0.0724778 diff --git a/data/base/components/weapons/trmgss.pie b/data/base/components/weapons/trmgss.pie index 1e63dd7f764..4e589430e9d 100644 --- a/data/base/components/weapons/trmgss.pie +++ b/data/base/components/weapons/trmgss.pie @@ -1,37 +1,37 @@ -PIE 2 +PIE 3 TYPE 10200 -TEXTURE 0 page-17-droid-weapons.png 256 256 +TEXTURE 0 page-17-droid-weapons.png 0 0 LEVELS 1 LEVEL 1 -POINTS 12 - -8 0 13 - 17 0 13 - 12 0 -12 - -8 0 -20 - 8 11 26 - 4 11 -2 - -8 0 4 - -7 11 -6 - -7 11 4 - -7 11 26 - -17 6 13 +POINTS 12 + 12 0 -12 + -8 0 13 + -8 0 -20 + 17 0 13 + 4 11 -2 + 8 11 26 + -7 11 4 + -8 0 4 + -7 11 -6 + -7 11 26 -17 6 4 + -17 6 13 POLYGONS 18 - 200 3 2 1 0 14 19 16 0 0 0 - 200 3 0 3 2 0 0 2 19 14 19 - 200 3 5 4 1 0 27 25 26 18 20 - 200 3 5 1 2 0 27 18 20 4 20 - 200 3 8 7 3 25 26 0 27 4 20 - 200 3 8 3 6 25 26 4 20 18 20 - 200 3 9 4 5 12 19 4 19 5 0 - 200 3 9 5 7 12 19 5 0 11 0 - 200 3 7 5 2 5 131 11 131 14 140 - 200 3 7 2 3 5 131 14 140 2 140 - 200 3 4 9 0 4 41 14 41 18 47 - 200 3 4 0 1 4 41 18 47 0 47 - 200 3 11 6 0 0 20 22 20 22 23 - 200 3 11 0 10 0 20 22 23 0 23 - 200 3 8 11 10 0 0 16 0 16 8 - 200 3 8 10 9 0 0 16 8 1 19 - 200 3 11 8 6 16 134 0 140 2 128 - 200 3 9 10 0 17 47 0 43 16 38 \ No newline at end of file + 200 3 0 1 2 0.0151492 0.0555384 0.0580204 0.00194925 0.0580205 0.0726869 + 200 3 1 0 3 0.0580204 0.00194925 0.0151492 0.0555384 0.00443132 0.00194925 + 200 3 4 5 3 0.0182625 0.105412 0.0953517 0.105412 0.0747779 0.0781267 + 200 3 4 3 0 0.0182625 0.105412 0.0747779 0.0781267 0.00270662 0.0798802 + 200 3 6 2 7 0.0954635 0.105227 0.00297441 0.0782009 0.0954635 0.0782009 + 200 3 2 6 8 0.00297441 0.0782009 0.0954635 0.105227 0.0569264 0.105227 + 200 3 9 4 8 0.0494203 0.0727834 0.0228107 0.0107562 0.0494203 0.00189519 + 200 3 4 9 5 0.0228107 0.0107562 0.0494203 0.0727834 0.0131344 0.0727834 + 200 3 8 0 2 0.0225141 0.5134 0.0543085 0.545194 0.0119161 0.545194 + 200 3 0 8 4 0.0543085 0.545194 0.0225141 0.5134 0.0437104 0.5134 + 200 3 5 1 3 0.025921 0.147719 0.0682398 0.182103 0.00211668 0.182103 + 200 3 1 5 9 0.0682398 0.182103 0.025921 0.147719 0.0655948 0.147719 + 200 3 10 1 11 0.00257812 0.0784766 0.0833594 0.0894924 0.00257812 0.0894924 + 200 3 1 10 7 0.0833594 0.0894924 0.00257812 0.0784766 0.0833594 0.0784766 + 200 3 6 11 9 0.00218427 0.0019356 0.0606843 0.0315556 0.00209052 0.0722833 + 200 3 11 6 10 0.0606843 0.0315556 0.00218427 0.0019356 0.0606843 0.0019356 + 200 3 10 6 7 0.0603603 0.523438 0.00213967 0.54527 0.00941725 0.501605 + 200 3 9 11 1 0.0631252 0.150175 0.00328096 0.164256 0.059605 0.181857 diff --git a/data/base/features/mistree1.pie b/data/base/features/mistree1.pie index a6506862882..e07227bce01 100644 --- a/data/base/features/mistree1.pie +++ b/data/base/features/mistree1.pie @@ -1,127 +1,1190 @@ -PIE 2 +PIE 3 TYPE 200 -TEXTURE 0 page-30-features-rockies.png 256 256 -LEVELS 1 +TEXTURE 0 page-30-features-rockies.png 0 0 +LEVELS 5 LEVEL 1 -POINTS 60 - -34 10 5 - -81 10 -42 - -35 10 -88 - 12 10 -41 - -63 0 -73 - -6 0 -15 - -6 102 -15 - -63 102 -73 - -6 0 -73 - -63 0 -15 - -63 102 -15 - -6 102 -73 - -30 0 -20 - 45 0 7 - 45 102 7 - -30 102 -20 - 21 0 -44 - -6 0 31 - -6 102 31 - 21 102 -44 - 29 10 38 - -33 10 15 - -11 10 -46 - 52 10 -23 - -31 0 0 - -31 0 80 - -31 102 80 - -31 102 0 - 3 10 73 - -63 10 73 - -63 10 8 - 3 10 8 - -72 0 39 - 8 0 39 - 8 102 39 - -72 102 39 - 101 10 42 - 43 10 76 - 10 10 19 - 68 10 -14 - 17 0 51 - 88 0 10 - 88 102 10 - 17 102 51 - 32 0 -4 - 73 0 65 - 73 102 65 - 32 102 -4 - 61 0 -88 - 27 0 -15 - 27 102 -15 - 61 102 -88 - 7 0 -69 - 80 0 -35 - 80 102 -35 - 7 102 -69 - 62 10 -6 - 1 10 -34 - 29 10 -94 - 90 10 -65 -POLYGONS 60 - 200 3 0 1 2 0 105 46 105 46 53 - 200 3 0 2 3 0 105 46 53 0 53 - 200 3 3 2 1 0 53 46 53 46 105 - 200 3 3 1 0 0 53 46 105 0 105 - 200 3 4 5 6 99 72 147 72 147 0 - 200 3 4 6 7 99 72 147 0 99 0 - 200 3 7 6 5 99 0 147 0 147 72 - 200 3 7 5 4 99 0 147 72 99 72 - 200 3 8 9 10 99 72 147 72 147 0 - 200 3 8 10 11 99 72 147 0 99 0 - 200 3 11 10 9 99 0 147 0 147 72 - 200 3 11 9 8 99 0 147 72 99 72 - 200 3 12 13 14 99 72 147 72 147 0 - 200 3 12 14 15 99 72 147 0 99 0 - 200 3 15 14 13 99 0 147 0 147 72 - 200 3 15 13 12 99 0 147 72 99 72 - 200 3 16 17 18 99 72 147 72 147 0 - 200 3 16 18 19 99 72 147 0 99 0 - 200 3 19 18 17 99 0 147 0 147 72 - 200 3 19 17 16 99 0 147 72 99 72 - 200 3 20 21 22 0 105 46 105 46 53 - 200 3 20 22 23 0 105 46 53 0 53 - 200 3 23 22 21 0 53 46 53 46 105 - 200 3 23 21 20 0 53 46 105 0 105 - 200 3 24 25 26 99 72 147 72 147 0 - 200 3 24 26 27 99 72 147 0 99 0 - 200 3 27 26 25 99 0 147 0 147 72 - 200 3 27 25 24 99 0 147 72 99 72 - 200 3 28 29 30 0 105 46 105 46 53 - 200 3 28 30 31 0 105 46 53 0 53 - 200 3 31 30 29 0 53 46 53 46 105 - 200 3 31 29 28 0 53 46 105 0 105 - 200 3 32 33 34 99 72 147 72 147 0 - 200 3 32 34 35 99 72 147 0 99 0 - 200 3 35 34 33 99 0 147 0 147 72 - 200 3 35 33 32 99 0 147 72 99 72 - 200 3 36 37 38 0 105 46 105 46 53 - 200 3 36 38 39 0 105 46 53 0 53 - 200 3 39 38 37 0 53 46 53 46 105 - 200 3 39 37 36 0 53 46 105 0 105 - 200 3 40 41 42 99 72 147 72 147 0 - 200 3 40 42 43 99 72 147 0 99 0 - 200 3 43 42 41 99 0 147 0 147 72 - 200 3 43 41 40 99 0 147 72 99 72 - 200 3 44 45 46 99 72 147 72 147 0 - 200 3 44 46 47 99 72 147 0 99 0 - 200 3 47 46 45 99 0 147 0 147 72 - 200 3 47 45 44 99 0 147 72 99 72 - 200 3 48 49 50 99 72 147 72 147 0 - 200 3 48 50 51 99 72 147 0 99 0 - 200 3 51 50 49 99 0 147 0 147 72 - 200 3 51 49 48 99 0 147 72 99 72 - 200 3 52 53 54 99 72 147 72 147 0 - 200 3 52 54 55 99 72 147 0 99 0 - 200 3 55 54 53 99 0 147 0 147 72 - 200 3 55 53 52 99 0 147 72 99 72 - 200 3 56 57 58 0 105 46 105 46 53 - 200 3 56 58 59 0 105 46 53 0 53 - 200 3 59 58 57 0 53 46 53 46 105 - 200 3 59 57 56 0 53 46 105 0 105 \ No newline at end of file +POINTS 91 + 2.90364 -1.99701 -0.772132 + -2.15228 -2.00299 -2.09643 + 0.760145 -2 -2.9021 + -0.760145 -2 2.9021 + -2.88302 -1.99701 0.813222 + 2.11416 -2.00299 2.12213 + -0.411667 100 0.209242 + 0.0211561 100 0.496791 + -0.461716 100 -0.292696 + -0.0211576 100 -0.496792 + 0.413501 100 -0.20765 + 0.458996 100 0.29447 + -8.51682 10.014 33.9438 + -1.89872e-06 25 -4.29452e-07 + -24.3395 11.1975 25.266 + -33.6261 11.5785 9.76441 + -33.9841 7.56615 -8.55049 + -25.2357 11.6573 -24.2361 + -9.67352 11.4773 -33.6332 + 8.51682 10.0139 -33.9438 + 24.4095 8.53164 -25.1915 + 33.6615 8.33185 -9.62475 + 34.0411 12.4135 8.3328 + 25.1355 8.41077 24.3438 + 9.57486 8.81153 33.6681 + 29.2472 22.8734 6.73792 + -4.37363e-06 40 -8.21908e-07 + 18.1914 27.67 16.7238 + 8.75451 25.1446 28.6077 + -5.61266 25.0246 24.0464 + -20.5125 24.8723 21.9845 + -23.6496 22.3096 7.21778 + -29.2889 27.0885 -6.57879 + -18.0682 22.3378 -16.8631 + -8.75145 25.053 -28.6089 + 5.61551 25.0246 -24.0573 + 20.5104 24.9639 -21.9868 + 23.6079 27.6422 -7.38949 + -18.7975 43.4745 -16.5242 + -7.71977e-06 55 -1.16543e-06 + -6.42882 41.5595 -19.483 + 5.23099 40.0271 -24.4021 + 13.8338 38.4597 -15.3378 + 23.7799 36.5023 -7.74893 + 20.2114 41.7562 4.12127 + 18.6316 36.4958 16.6991 + 6.35934 38.5633 19.503 + -5.23098 40.0271 24.4021 + -13.7798 41.4562 15.377 + -23.7152 43.4816 7.9602 + -20.1842 38.2008 -4.22516 + -19.7267 56.417 -3.61925 + -1.18949e-05 70 -1.37002e-06 + -12.5423 51.1134 -10.7626 + -6.63736 55.4505 -18.7705 + 3.114 55.0241 -16.1301 + 13.1059 54.567 -15.162 + 15.504 58.8662 -5.57087 + 19.7074 53.5443 3.69299 + 12.6722 58.8394 10.6198 + 6.61661 54.6146 18.7796 + -3.11113 55.024 16.1191 + -13.0909 55.403 15.1751 + -15.5535 51.1395 5.4069 + -13.969 73.6612 5.35404 + -1.68735e-05 85 -1.35738e-06 + -12.2433 68.9002 -2.02811 + -11.8192 73.6287 -9.42847 + -4.33721 66.5658 -11.5284 + 2.47226 70.0175 -14.7118 + 7.82178 73.4473 -9.56931 + 14.0202 66.3556 -5.22313 + 12.2553 71.0713 1.98224 + 11.703 66.3236 9.54632 + 4.45371 73.4591 11.4674 + -2.47225 70.0175 14.7118 + -7.90254 66.5535 9.49393 + -6.11951 84.6798 7.84469 + -2.34669e-05 102 -9.91315e-07 + -7.58876 82.1621 3.03986 + -9.97193 85.7196 -1.39517 + -6.62229 82.1359 -5.0984 + -3.8579 84.6749 -9.21572 + 1.10455 85.0097 -8.10093 + 6.11224 85.3322 -7.84942 + 7.56585 87.8554 -3.10655 + 9.96682 84.2643 1.41449 + 6.67937 87.8289 5.03462 + 3.86752 85.3273 9.2115 + -1.10168 85.0097 8.09001 + -4.73216e-07 10 -1.01826e-06 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.291587 0.0783653 0.350448 0.0613737 0.321017 + 200 3 1 3 4 0.0783653 0.350448 0.12934 0.321017 0.112349 0.350448 + 200 3 0 3 1 0.0783653 0.291587 0.12934 0.321017 0.0783653 0.350448 + 200 3 5 3 0 0.112349 0.291587 0.12934 0.321017 0.0783653 0.291587 + 200 3 3 6 4 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 6 3 7 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 4 8 1 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 8 4 6 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 1 9 2 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 9 1 8 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 2 10 0 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 10 2 9 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 0 11 5 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 11 0 10 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 5 7 3 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 7 5 11 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 7 8 6 0.11132 0.320933 0.086818 0.306787 0.103153 0.306787 + 200 3 8 10 9 0.086818 0.306787 0.086818 0.335079 0.0786506 0.320933 + 200 3 7 10 8 0.11132 0.320933 0.086818 0.335079 0.086818 0.306787 + 200 3 11 10 7 0.103153 0.335079 0.086818 0.335079 0.11132 0.320933 + 200 3 12 13 14 0.560303 0.21959 0.480027 0.21959 0.549548 0.179452 + 200 3 14 13 15 0.549548 0.179452 0.480027 0.21959 0.520165 0.15007 + 200 3 15 13 16 0.520165 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 16 13 17 0.480027 0.139315 0.480027 0.21959 0.43989 0.15007 + 200 3 17 13 18 0.43989 0.15007 0.480027 0.21959 0.410507 0.179452 + 200 3 18 13 19 0.410507 0.179452 0.480027 0.21959 0.399752 0.21959 + 200 3 19 13 20 0.399752 0.21959 0.480027 0.21959 0.410507 0.179452 + 200 3 20 13 21 0.410507 0.179452 0.480027 0.21959 0.439889 0.15007 + 200 3 21 13 22 0.439889 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 22 13 23 0.480027 0.139315 0.480027 0.21959 0.520165 0.15007 + 200 3 23 13 24 0.520165 0.15007 0.480027 0.21959 0.549548 0.179452 + 200 3 24 13 12 0.549548 0.179452 0.480027 0.21959 0.560303 0.21959 + 200 3 25 26 27 0.560981 0.181957 0.480027 0.181957 0.550135 0.13665 + 200 3 27 26 28 0.550135 0.13665 0.480027 0.181957 0.520504 0.103482 + 200 3 28 26 29 0.520504 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 29 26 30 0.480027 0.0913424 0.480027 0.181957 0.43955 0.103482 + 200 3 30 26 31 0.43955 0.103482 0.480027 0.181957 0.409919 0.13665 + 200 3 31 26 32 0.409919 0.13665 0.480027 0.181957 0.399073 0.181957 + 200 3 32 26 33 0.399073 0.181957 0.480027 0.181957 0.409919 0.13665 + 200 3 33 26 34 0.409919 0.13665 0.480027 0.181957 0.43955 0.103482 + 200 3 34 26 35 0.43955 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 35 26 36 0.480027 0.0913424 0.480027 0.181957 0.520504 0.103482 + 200 3 36 26 37 0.520504 0.103482 0.480027 0.181957 0.550135 0.13665 + 200 3 37 26 25 0.550135 0.13665 0.480027 0.181957 0.560981 0.181957 + 200 3 38 39 40 0.546441 0.140842 0.477807 0.140842 0.537246 0.0975931 + 200 3 40 39 41 0.537246 0.0975931 0.477807 0.140842 0.512124 0.0659329 + 200 3 41 39 42 0.512124 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 42 39 43 0.477807 0.0543445 0.477807 0.140842 0.44349 0.0659329 + 200 3 43 39 44 0.44349 0.0659329 0.477807 0.140842 0.418369 0.0975931 + 200 3 44 39 45 0.418369 0.0975931 0.477807 0.140842 0.409174 0.140842 + 200 3 45 39 46 0.409174 0.140842 0.477807 0.140842 0.418369 0.0975931 + 200 3 46 39 47 0.418369 0.0975931 0.477807 0.140842 0.44349 0.0659329 + 200 3 47 39 48 0.44349 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 48 39 49 0.477807 0.0543445 0.477807 0.140842 0.512124 0.0659329 + 200 3 49 39 50 0.512124 0.0659329 0.477807 0.140842 0.537246 0.0975931 + 200 3 50 39 38 0.537246 0.0975931 0.477807 0.140842 0.546441 0.140842 + 200 3 51 52 53 0.540626 0.100802 0.476142 0.100802 0.531986 0.0671586 + 200 3 53 52 54 0.531986 0.0671586 0.476142 0.100802 0.508384 0.0425297 + 200 3 54 52 55 0.508384 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 55 52 56 0.476142 0.0335151 0.476142 0.100802 0.443901 0.0425297 + 200 3 56 52 57 0.443901 0.0425297 0.476142 0.100802 0.420298 0.0671586 + 200 3 57 52 58 0.420298 0.0671586 0.476142 0.100802 0.411659 0.100802 + 200 3 58 52 59 0.411659 0.100802 0.476142 0.100802 0.420298 0.0671586 + 200 3 59 52 60 0.420298 0.0671586 0.476142 0.100802 0.443901 0.0425297 + 200 3 60 52 61 0.443901 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 61 52 62 0.476142 0.0335151 0.476142 0.100802 0.508384 0.0425297 + 200 3 62 52 63 0.508384 0.0425297 0.476142 0.100802 0.531986 0.0671586 + 200 3 63 52 51 0.531986 0.0671586 0.476142 0.100802 0.540626 0.100802 + 200 3 64 65 66 0.536889 0.0827199 0.478362 0.0827199 0.529048 0.0504009 + 200 3 66 65 67 0.529048 0.0504009 0.478362 0.0827199 0.507626 0.0267418 + 200 3 67 65 68 0.507626 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 68 65 69 0.478362 0.018082 0.478362 0.0827199 0.449099 0.0267418 + 200 3 69 65 70 0.449099 0.0267418 0.478362 0.0827199 0.427677 0.0504009 + 200 3 70 65 71 0.427677 0.0504009 0.478362 0.0827199 0.419836 0.0827196 + 200 3 71 65 72 0.419836 0.0827196 0.478362 0.0827199 0.427677 0.0504009 + 200 3 72 65 73 0.427677 0.0504009 0.478362 0.0827199 0.449099 0.0267418 + 200 3 73 65 74 0.449099 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 74 65 75 0.478362 0.018082 0.478362 0.0827199 0.507626 0.0267418 + 200 3 75 65 76 0.507626 0.0267418 0.478362 0.0827199 0.529048 0.0504009 + 200 3 76 65 64 0.529048 0.0504009 0.478362 0.0827199 0.536889 0.0827199 + 200 3 77 78 79 0.487048 0.0371633 0.468862 0.0371633 0.484612 0.0197034 + 200 3 79 78 80 0.484612 0.0197034 0.468862 0.0371633 0.477955 0.00692183 + 200 3 80 78 81 0.477955 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 81 78 82 0.468862 0.00224346 0.468862 0.0371633 0.459769 0.00692183 + 200 3 82 78 83 0.459769 0.00692183 0.468862 0.0371633 0.453112 0.0197034 + 200 3 83 78 84 0.453112 0.0197034 0.468862 0.0371633 0.450676 0.0371633 + 200 3 84 78 85 0.450676 0.0371633 0.468862 0.0371633 0.453112 0.0197034 + 200 3 85 78 86 0.453112 0.0197034 0.468862 0.0371633 0.459769 0.00692183 + 200 3 86 78 87 0.459769 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 87 78 88 0.468862 0.00224346 0.468862 0.0371633 0.477955 0.00692183 + 200 3 88 78 89 0.477955 0.00692183 0.468862 0.0371633 0.484612 0.0197034 + 200 3 89 78 77 0.484612 0.0197034 0.468862 0.0371633 0.487048 0.0371633 + 200 3 76 52 75 0.136208 0.39659 0.0966576 0.311774 0.173318 0.365452 + 200 3 75 52 74 0.173318 0.365452 0.0966576 0.311774 0.189886 0.31993 + 200 3 74 52 73 0.189886 0.31993 0.0966576 0.311774 0.181474 0.272223 + 200 3 73 52 72 0.181474 0.272223 0.0966576 0.311774 0.150336 0.235114 + 200 3 72 52 71 0.150336 0.235114 0.0966576 0.311774 0.104814 0.218545 + 200 3 71 52 70 0.104814 0.218545 0.0966576 0.311774 0.057107 0.226957 + 200 3 70 52 69 0.057107 0.226957 0.0966576 0.311774 0.0199974 0.258096 + 200 3 69 52 68 0.0199974 0.258096 0.0966576 0.311774 0.00342888 0.303617 + 200 3 68 52 67 0.00342888 0.303617 0.0966576 0.311774 0.011841 0.351324 + 200 3 67 52 66 0.011841 0.351324 0.0966576 0.311774 0.0429796 0.388434 + 200 3 66 52 64 0.0429796 0.388434 0.0966576 0.311774 0.0885012 0.405002 + 200 3 64 52 76 0.0885012 0.405002 0.0966576 0.311774 0.136208 0.39659 + 200 3 89 65 88 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 88 65 87 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 87 65 86 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 86 65 85 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 85 65 84 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 84 65 83 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 83 65 82 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 82 65 81 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 81 65 80 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 80 65 79 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 79 65 77 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 77 65 89 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 + 200 3 63 39 62 0.162832 0.377948 0.0966577 0.311774 0.187054 0.335995 + 200 3 62 39 61 0.187054 0.335995 0.0966577 0.311774 0.187054 0.287552 + 200 3 61 39 60 0.187054 0.287552 0.0966577 0.311774 0.162832 0.245599 + 200 3 60 39 59 0.162832 0.245599 0.0966577 0.311774 0.120879 0.221378 + 200 3 59 39 58 0.120879 0.221378 0.0966577 0.311774 0.0724362 0.221378 + 200 3 58 39 57 0.0724362 0.221378 0.0966577 0.311774 0.0304832 0.245599 + 200 3 57 39 56 0.0304832 0.245599 0.0966577 0.311774 0.00626171 0.287552 + 200 3 56 39 55 0.00626171 0.287552 0.0966577 0.311774 0.00626171 0.335995 + 200 3 55 39 54 0.00626171 0.335995 0.0966577 0.311774 0.0304832 0.377948 + 200 3 54 39 53 0.0304832 0.377948 0.0966577 0.311774 0.0724362 0.40217 + 200 3 53 39 51 0.0724362 0.40217 0.0966577 0.311774 0.120879 0.40217 + 200 3 51 39 63 0.120879 0.40217 0.0966577 0.311774 0.162832 0.377948 + 200 3 50 26 49 0.189886 0.303617 0.0966577 0.311774 0.173318 0.258095 + 200 3 49 26 48 0.173318 0.258095 0.0966577 0.311774 0.136208 0.226957 + 200 3 48 26 47 0.136208 0.226957 0.0966577 0.311774 0.0885012 0.218545 + 200 3 47 26 46 0.0885012 0.218545 0.0966577 0.311774 0.0429797 0.235113 + 200 3 46 26 45 0.0429797 0.235113 0.0966577 0.311774 0.011841 0.272223 + 200 3 45 26 44 0.011841 0.272223 0.0966577 0.311774 0.003429 0.31993 + 200 3 44 26 43 0.003429 0.31993 0.0966577 0.311774 0.0199975 0.365452 + 200 3 43 26 42 0.0199975 0.365452 0.0966577 0.311774 0.057107 0.39659 + 200 3 42 26 41 0.057107 0.39659 0.0966577 0.311774 0.104814 0.405002 + 200 3 41 26 40 0.104814 0.405002 0.0966577 0.311774 0.150336 0.388434 + 200 3 40 26 38 0.150336 0.388434 0.0966577 0.311774 0.181474 0.351324 + 200 3 38 26 50 0.181474 0.351324 0.0966577 0.311774 0.189886 0.303617 + 200 3 37 13 36 0.190243 0.311774 0.0966577 0.311774 0.177705 0.264981 + 200 3 36 13 35 0.177705 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 35 13 34 0.14345 0.230727 0.0966577 0.311774 0.0966577 0.218189 + 200 3 34 13 33 0.0966577 0.218189 0.0966577 0.311774 0.0498653 0.230727 + 200 3 33 13 32 0.0498653 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 32 13 31 0.0156108 0.264981 0.0966577 0.311774 0.00307286 0.311774 + 200 3 31 13 30 0.00307286 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 30 13 29 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 29 13 28 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 28 13 27 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 27 13 25 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 25 13 37 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 24 90 23 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 23 90 22 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 22 90 21 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 21 90 20 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 20 90 19 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 19 90 18 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 18 90 17 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 17 90 16 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 16 90 15 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 15 90 14 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 14 90 12 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 12 90 24 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 +LEVEL 2 +POINTS 91 + -27.9638 -2 39.4857 + -30.8071 -2.00316 35.4035 + -28.2106 -2 36.6073 + -32.8846 -2 39.9001 + -33.1399 -1.99684 37.056 + -30.3232 -2 41.0999 + -30.9752 108.121 38.1531 + -30.8362 108.483 38.6294 + -30.7044 108.121 37.7556 + -30.259 108.483 37.8779 + -30.1197 108.629 38.3561 + -30.3933 108.629 38.7514 + -56.9219 3.392 54.7493 + -30.5476 29.2472 38.2537 + -67.0422 12.987 42.2041 + -60.9499 11.0619 24.508 + -49.0651 8.15868 12.0606 + -33.8212 11.1452 5.07207 + -17.4507 13.3024 9.02661 + -3.25109 3.39196 19.0898 + 1.42215 7.35943 35.446 + 3.46087 15.923 54.3411 + -11.8853 7.55472 64.3458 + -27.2973 10.5715 71.438 + -44.1051 6.86364 67.3072 + -13.4163 27.103 61.1597 + -30.5476 45.0947 38.2537 + -27.5816 25.5509 63.2199 + -41.8292 28.2449 64.4295 + -50.8531 20.0315 53.061 + -59.0084 29.8114 41.6272 + -53.6428 23.0086 28.2723 + -47.783 30.7058 15.4202 + -33.4533 23.0403 13.2759 + -19.3211 30.002 12.0604 + -10.2339 20.0314 23.4406 + -2.08422 28.0542 34.9341 + -7.42318 25.5193 48.1842 + -33.9262 44.6395 14.646 + -30.5476 60.9423 38.2537 + -22.5879 40.6019 18.9491 + -11.6318 40.0135 23.8329 + -9.72086 43.3574 35.4203 + -8.49012 40.4354 47.2837 + -17.6942 40.5693 54.8384 + -27.2995 40.4284 61.8754 + -38.4039 43.4739 57.5821 + -49.4634 40.0135 52.6744 + -51.3744 40.4851 40.9911 + -52.6528 44.6469 29.334 + -43.3312 37.3246 21.6203 + -42.6643 62.0045 23.468 + -30.5476 76.7899 38.2537 + -33.2032 56.0802 21.6466 + -23.7592 58.6037 20.5376 + -17.4842 58.2404 27.826 + -11.6728 58.3856 35.343 + -14.8748 61.9578 44.1957 + -18.4791 59.5491 53.0729 + -27.7724 61.9277 54.8441 + -37.3399 58.4358 55.9686 + -43.6029 58.2404 48.6756 + -49.4218 58.5534 41.1679 + -46.176 56.1098 32.2141 + -43.9758 75.635 33.4662 + -30.5476 92.6374 38.2537 + -38.6501 71.6529 28.575 + -33.2468 75.6008 24.106 + -26.3349 73.6756 26.4533 + -19.6736 74.9695 29.1002 + -18.17 77.9088 36.0321 + -17.1518 69.9497 43.1344 + -22.4138 73.6342 47.9105 + -27.9641 69.9159 52.4113 + -34.6978 77.9222 50.0646 + -41.4216 74.9695 47.4072 + -42.927 73.6618 40.4224 + -39.8419 87.3501 40.136 + -30.5476 110.598 38.2537 + -38.4401 92.1723 35.6321 + -36.9443 93.2144 31.0967 + -32.3528 92.1426 29.9382 + -27.6198 87.3451 29.1942 + -24.3677 94.6844 32.6916 + -21.2549 87.8392 36.3657 + -22.6347 97.1709 40.8257 + -24.1636 91.9705 45.4194 + -28.6779 97.1409 46.5596 + -33.4687 87.8341 47.3152 + -36.7193 94.6844 43.81 + -30.5476 13.3996 38.2537 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.291587 0.0783653 0.350448 0.0613737 0.321017 + 200 3 1 3 4 0.0783653 0.350448 0.12934 0.321017 0.112349 0.350448 + 200 3 0 3 1 0.0783653 0.291587 0.12934 0.321017 0.0783653 0.350448 + 200 3 5 3 0 0.112349 0.291587 0.12934 0.321017 0.0783653 0.291587 + 200 3 3 6 4 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 6 3 7 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 4 8 1 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 8 4 6 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 1 9 2 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 9 1 8 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 2 10 0 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 10 2 9 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 0 11 5 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 11 0 10 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 5 7 3 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 7 5 11 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 7 8 6 0.11132 0.320933 0.086818 0.306787 0.103153 0.306787 + 200 3 8 10 9 0.086818 0.306787 0.086818 0.335079 0.0786506 0.320933 + 200 3 7 10 8 0.11132 0.320933 0.086818 0.335079 0.086818 0.306787 + 200 3 11 10 7 0.103153 0.335079 0.086818 0.335079 0.11132 0.320933 + 200 3 12 13 14 0.560303 0.21959 0.480027 0.21959 0.549548 0.179452 + 200 3 14 13 15 0.549548 0.179452 0.480027 0.21959 0.520165 0.15007 + 200 3 15 13 16 0.520165 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 16 13 17 0.480027 0.139315 0.480027 0.21959 0.43989 0.15007 + 200 3 17 13 18 0.43989 0.15007 0.480027 0.21959 0.410507 0.179452 + 200 3 18 13 19 0.410507 0.179452 0.480027 0.21959 0.399752 0.21959 + 200 3 19 13 20 0.399752 0.21959 0.480027 0.21959 0.410507 0.179452 + 200 3 20 13 21 0.410507 0.179452 0.480027 0.21959 0.439889 0.15007 + 200 3 21 13 22 0.439889 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 22 13 23 0.480027 0.139315 0.480027 0.21959 0.520165 0.15007 + 200 3 23 13 24 0.520165 0.15007 0.480027 0.21959 0.549548 0.179452 + 200 3 24 13 12 0.549548 0.179452 0.480027 0.21959 0.560303 0.21959 + 200 3 25 26 27 0.560981 0.181957 0.480027 0.181957 0.550135 0.13665 + 200 3 27 26 28 0.550135 0.13665 0.480027 0.181957 0.520504 0.103482 + 200 3 28 26 29 0.520504 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 29 26 30 0.480027 0.0913424 0.480027 0.181957 0.43955 0.103482 + 200 3 30 26 31 0.43955 0.103482 0.480027 0.181957 0.409919 0.13665 + 200 3 31 26 32 0.409919 0.13665 0.480027 0.181957 0.399073 0.181957 + 200 3 32 26 33 0.399073 0.181957 0.480027 0.181957 0.409919 0.13665 + 200 3 33 26 34 0.409919 0.13665 0.480027 0.181957 0.43955 0.103482 + 200 3 34 26 35 0.43955 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 35 26 36 0.480027 0.0913424 0.480027 0.181957 0.520504 0.103482 + 200 3 36 26 37 0.520504 0.103482 0.480027 0.181957 0.550135 0.13665 + 200 3 37 26 25 0.550135 0.13665 0.480027 0.181957 0.560981 0.181957 + 200 3 38 39 40 0.546441 0.140842 0.477807 0.140842 0.537246 0.0975931 + 200 3 40 39 41 0.537246 0.0975931 0.477807 0.140842 0.512124 0.0659329 + 200 3 41 39 42 0.512124 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 42 39 43 0.477807 0.0543445 0.477807 0.140842 0.44349 0.0659329 + 200 3 43 39 44 0.44349 0.0659329 0.477807 0.140842 0.418369 0.0975931 + 200 3 44 39 45 0.418369 0.0975931 0.477807 0.140842 0.409174 0.140842 + 200 3 45 39 46 0.409174 0.140842 0.477807 0.140842 0.418369 0.0975931 + 200 3 46 39 47 0.418369 0.0975931 0.477807 0.140842 0.44349 0.0659329 + 200 3 47 39 48 0.44349 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 48 39 49 0.477807 0.0543445 0.477807 0.140842 0.512124 0.0659329 + 200 3 49 39 50 0.512124 0.0659329 0.477807 0.140842 0.537246 0.0975931 + 200 3 50 39 38 0.537246 0.0975931 0.477807 0.140842 0.546441 0.140842 + 200 3 51 52 53 0.540626 0.100802 0.476142 0.100802 0.531986 0.0671586 + 200 3 53 52 54 0.531986 0.0671586 0.476142 0.100802 0.508384 0.0425297 + 200 3 54 52 55 0.508384 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 55 52 56 0.476142 0.0335151 0.476142 0.100802 0.443901 0.0425297 + 200 3 56 52 57 0.443901 0.0425297 0.476142 0.100802 0.420298 0.0671586 + 200 3 57 52 58 0.420298 0.0671586 0.476142 0.100802 0.411659 0.100802 + 200 3 58 52 59 0.411659 0.100802 0.476142 0.100802 0.420298 0.0671586 + 200 3 59 52 60 0.420298 0.0671586 0.476142 0.100802 0.443901 0.0425297 + 200 3 60 52 61 0.443901 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 61 52 62 0.476142 0.0335151 0.476142 0.100802 0.508384 0.0425297 + 200 3 62 52 63 0.508384 0.0425297 0.476142 0.100802 0.531986 0.0671586 + 200 3 63 52 51 0.531986 0.0671586 0.476142 0.100802 0.540626 0.100802 + 200 3 64 65 66 0.536889 0.0827199 0.478362 0.0827199 0.529048 0.0504009 + 200 3 66 65 67 0.529048 0.0504009 0.478362 0.0827199 0.507626 0.0267418 + 200 3 67 65 68 0.507626 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 68 65 69 0.478362 0.018082 0.478362 0.0827199 0.449099 0.0267418 + 200 3 69 65 70 0.449099 0.0267418 0.478362 0.0827199 0.427677 0.0504009 + 200 3 70 65 71 0.427677 0.0504009 0.478362 0.0827199 0.419836 0.0827196 + 200 3 71 65 72 0.419836 0.0827196 0.478362 0.0827199 0.427677 0.0504009 + 200 3 72 65 73 0.427677 0.0504009 0.478362 0.0827199 0.449099 0.0267418 + 200 3 73 65 74 0.449099 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 74 65 75 0.478362 0.018082 0.478362 0.0827199 0.507626 0.0267418 + 200 3 75 65 76 0.507626 0.0267418 0.478362 0.0827199 0.529048 0.0504009 + 200 3 76 65 64 0.529048 0.0504009 0.478362 0.0827199 0.536889 0.0827199 + 200 3 77 78 79 0.487048 0.0371633 0.468862 0.0371633 0.484612 0.0197034 + 200 3 79 78 80 0.484612 0.0197034 0.468862 0.0371633 0.477955 0.00692183 + 200 3 80 78 81 0.477955 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 81 78 82 0.468862 0.00224346 0.468862 0.0371633 0.459769 0.00692183 + 200 3 82 78 83 0.459769 0.00692183 0.468862 0.0371633 0.453112 0.0197034 + 200 3 83 78 84 0.453112 0.0197034 0.468862 0.0371633 0.450676 0.0371633 + 200 3 84 78 85 0.450676 0.0371633 0.468862 0.0371633 0.453112 0.0197034 + 200 3 85 78 86 0.453112 0.0197034 0.468862 0.0371633 0.459769 0.00692183 + 200 3 86 78 87 0.459769 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 87 78 88 0.468862 0.00224346 0.468862 0.0371633 0.477955 0.00692183 + 200 3 88 78 89 0.477955 0.00692183 0.468862 0.0371633 0.484612 0.0197034 + 200 3 89 78 77 0.484612 0.0197034 0.468862 0.0371633 0.487048 0.0371633 + 200 3 76 52 75 0.136208 0.39659 0.0966576 0.311774 0.173318 0.365452 + 200 3 75 52 74 0.173318 0.365452 0.0966576 0.311774 0.189886 0.31993 + 200 3 74 52 73 0.189886 0.31993 0.0966576 0.311774 0.181474 0.272223 + 200 3 73 52 72 0.181474 0.272223 0.0966576 0.311774 0.150336 0.235114 + 200 3 72 52 71 0.150336 0.235114 0.0966576 0.311774 0.104814 0.218545 + 200 3 71 52 70 0.104814 0.218545 0.0966576 0.311774 0.057107 0.226957 + 200 3 70 52 69 0.057107 0.226957 0.0966576 0.311774 0.0199974 0.258096 + 200 3 69 52 68 0.0199974 0.258096 0.0966576 0.311774 0.00342888 0.303617 + 200 3 68 52 67 0.00342888 0.303617 0.0966576 0.311774 0.011841 0.351324 + 200 3 67 52 66 0.011841 0.351324 0.0966576 0.311774 0.0429796 0.388434 + 200 3 66 52 64 0.0429796 0.388434 0.0966576 0.311774 0.0885012 0.405002 + 200 3 64 52 76 0.0885012 0.405002 0.0966576 0.311774 0.136208 0.39659 + 200 3 89 65 88 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 88 65 87 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 87 65 86 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 86 65 85 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 85 65 84 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 84 65 83 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 83 65 82 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 82 65 81 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 81 65 80 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 80 65 79 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 79 65 77 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 77 65 89 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 + 200 3 63 39 62 0.162832 0.377948 0.0966577 0.311774 0.187054 0.335995 + 200 3 62 39 61 0.187054 0.335995 0.0966577 0.311774 0.187054 0.287552 + 200 3 61 39 60 0.187054 0.287552 0.0966577 0.311774 0.162832 0.245599 + 200 3 60 39 59 0.162832 0.245599 0.0966577 0.311774 0.120879 0.221378 + 200 3 59 39 58 0.120879 0.221378 0.0966577 0.311774 0.0724362 0.221378 + 200 3 58 39 57 0.0724362 0.221378 0.0966577 0.311774 0.0304832 0.245599 + 200 3 57 39 56 0.0304832 0.245599 0.0966577 0.311774 0.00626171 0.287552 + 200 3 56 39 55 0.00626171 0.287552 0.0966577 0.311774 0.00626171 0.335995 + 200 3 55 39 54 0.00626171 0.335995 0.0966577 0.311774 0.0304832 0.377948 + 200 3 54 39 53 0.0304832 0.377948 0.0966577 0.311774 0.0724362 0.40217 + 200 3 53 39 51 0.0724362 0.40217 0.0966577 0.311774 0.120879 0.40217 + 200 3 51 39 63 0.120879 0.40217 0.0966577 0.311774 0.162832 0.377948 + 200 3 50 26 49 0.189886 0.303617 0.0966577 0.311774 0.173318 0.258095 + 200 3 49 26 48 0.173318 0.258095 0.0966577 0.311774 0.136208 0.226957 + 200 3 48 26 47 0.136208 0.226957 0.0966577 0.311774 0.0885012 0.218545 + 200 3 47 26 46 0.0885012 0.218545 0.0966577 0.311774 0.0429797 0.235113 + 200 3 46 26 45 0.0429797 0.235113 0.0966577 0.311774 0.011841 0.272223 + 200 3 45 26 44 0.011841 0.272223 0.0966577 0.311774 0.003429 0.31993 + 200 3 44 26 43 0.003429 0.31993 0.0966577 0.311774 0.0199975 0.365452 + 200 3 43 26 42 0.0199975 0.365452 0.0966577 0.311774 0.057107 0.39659 + 200 3 42 26 41 0.057107 0.39659 0.0966577 0.311774 0.104814 0.405002 + 200 3 41 26 40 0.104814 0.405002 0.0966577 0.311774 0.150336 0.388434 + 200 3 40 26 38 0.150336 0.388434 0.0966577 0.311774 0.181474 0.351324 + 200 3 38 26 50 0.181474 0.351324 0.0966577 0.311774 0.189886 0.303617 + 200 3 37 13 36 0.190243 0.311774 0.0966577 0.311774 0.177705 0.264981 + 200 3 36 13 35 0.177705 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 35 13 34 0.14345 0.230727 0.0966577 0.311774 0.0966577 0.218189 + 200 3 34 13 33 0.0966577 0.218189 0.0966577 0.311774 0.0498653 0.230727 + 200 3 33 13 32 0.0498653 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 32 13 31 0.0156108 0.264981 0.0966577 0.311774 0.00307286 0.311774 + 200 3 31 13 30 0.00307286 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 30 13 29 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 29 13 28 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 28 13 27 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 27 13 25 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 25 13 37 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 24 90 23 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 23 90 22 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 22 90 21 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 21 90 20 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 20 90 19 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 19 90 18 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 18 90 17 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 17 90 16 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 16 90 15 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 15 90 14 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 14 90 12 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 12 90 24 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 +LEVEL 3 +POINTS 91 + 47.6344 -2 -49.9518 + 44.3977 -2 -54.2205 + 47.1819 -2 -52.9005 + 42.4956 -2 -49.1556 + 42.0517 -2 -52.3509 + 45.2722 -2 -48.1039 + 44.4002 133.255 -46.9781 + 44.5017 138.058 -46.2938 + 44.7413 133.267 -47.353 + 45.1758 138.082 -47.0533 + 45.2763 141.542 -46.4124 + 44.937 141.531 -46.0352 + 13.2041 17.8209 -24.7573 + 44.8387 36.6138 -49.8743 + 5.45191 16.5839 -43.7792 + 7.13128 25.207 -65.1712 + 19.7472 16.1654 -82.4197 + 37.0004 22.5422 -96.1745 + 59.2427 14.5278 -89.1319 + 76.473 19.2223 -76.7065 + 84.2518 16.6805 -57.2473 + 87.2413 22.7047 -33.4481 + 69.9021 13.5306 -18.6798 + 51.0569 15.2147 -9.87746 + 30.4584 11.77 -12.1196 + 63.4242 37.3051 -26.5018 + 44.8387 56.9053 -49.2341 + 50.2849 34.9664 -14.7144 + 34.7009 38.561 -20.9242 + 18.9095 31.0675 -26.7609 + 16.1084 40.5855 -44.4176 + 13.4113 35.994 -62.003 + 26.2598 39.1113 -73.4623 + 39.3107 34.2833 -85.384 + 55.0099 42.878 -79.0599 + 70.7803 32.5358 -73.3012 + 73.5339 42.1825 -55.4943 + 76.3113 33.0519 -37.7846 + 40.5765 53.4086 -74.9819 + 44.8387 77.1968 -48.594 + 54.1577 58.6813 -78.4079 + 63.0095 54.0733 -66.6608 + 71.7541 60.3607 -55.4307 + 67.3633 52.9321 -40.9509 + 62.4813 58.0775 -26.3423 + 49.0888 50.7161 -23.8102 + 35.5759 57.5189 -20.2679 + 26.668 52.9804 -32.0206 + 17.9107 59.3035 -43.2172 + 22.3289 54.5386 -57.7011 + 27.1812 57.0713 -72.3783 + 32.4885 74.3626 -64.4228 + 44.8387 97.4883 -47.9538 + 40.8926 77.5824 -73.0877 + 50.9182 74.0574 -68.9955 + 61.0363 80.7669 -65.615 + 63.2908 73.5916 -53.269 + 65.1638 79.2117 -41.041 + 57.1852 76.9984 -32.8579 + 48.7628 77.633 -24.375 + 38.741 71.7204 -28.4887 + 28.6536 79.6976 -31.7205 + 26.4059 74.3613 -44.0984 + 24.4873 78.108 -56.3741 + 31.6069 91.9069 -52.8488 + 44.8387 117.78 -47.3137 + 34.4102 102.389 -61.8481 + 42.0394 91.676 -63.8699 + 49.8342 101.207 -66.3449 + 55.1229 96.6023 -59.1736 + 60.3285 99.2734 -52.4221 + 58.035 96.1934 -43.3162 + 55.2759 96.8791 -34.17 + 47.6681 95.2656 -32.2465 + 39.7821 97.9588 -29.7379 + 34.5546 95.8969 -36.8122 + 29.4088 101.085 -43.4854 + 35.9079 113.464 -44.8553 + 44.8387 140.777 -46.5881 + 34.9319 115.476 -51.1204 + 38.6744 114.362 -55.2997 + 42.7785 112.658 -59.9732 + 47.5977 111.823 -58.0229 + 52.5148 117.512 -56.3957 + 56.0646 117.663 -49.4286 + 54.7121 115.234 -43.6899 + 51.0042 117.669 -39.6364 + 46.9248 117.874 -34.7664 + 42.1274 116.987 -36.7533 + 37.1751 116.94 -38.2764 + 44.8387 16.3223 -50.5145 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.291587 0.0783653 0.350448 0.0613737 0.321017 + 200 3 1 3 4 0.0783653 0.350448 0.12934 0.321017 0.112349 0.350448 + 200 3 0 3 1 0.0783653 0.291587 0.12934 0.321017 0.0783653 0.350448 + 200 3 5 3 0 0.112349 0.291587 0.12934 0.321017 0.0783653 0.291587 + 200 3 3 6 4 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 6 3 7 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 4 8 1 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 8 4 6 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 1 9 2 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 9 1 8 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 2 10 0 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 10 2 9 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 0 11 5 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 11 0 10 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 5 7 3 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 7 5 11 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 7 8 6 0.11132 0.320933 0.086818 0.306787 0.103153 0.306787 + 200 3 8 10 9 0.086818 0.306787 0.086818 0.335079 0.0786506 0.320933 + 200 3 7 10 8 0.11132 0.320933 0.086818 0.335079 0.086818 0.306787 + 200 3 11 10 7 0.103153 0.335079 0.086818 0.335079 0.11132 0.320933 + 200 3 12 13 14 0.560303 0.21959 0.480027 0.21959 0.549548 0.179452 + 200 3 14 13 15 0.549548 0.179452 0.480027 0.21959 0.520165 0.15007 + 200 3 15 13 16 0.520165 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 16 13 17 0.480027 0.139315 0.480027 0.21959 0.43989 0.15007 + 200 3 17 13 18 0.43989 0.15007 0.480027 0.21959 0.410507 0.179452 + 200 3 18 13 19 0.410507 0.179452 0.480027 0.21959 0.399752 0.21959 + 200 3 19 13 20 0.399752 0.21959 0.480027 0.21959 0.410507 0.179452 + 200 3 20 13 21 0.410507 0.179452 0.480027 0.21959 0.439889 0.15007 + 200 3 21 13 22 0.439889 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 22 13 23 0.480027 0.139315 0.480027 0.21959 0.520165 0.15007 + 200 3 23 13 24 0.520165 0.15007 0.480027 0.21959 0.549548 0.179452 + 200 3 24 13 12 0.549548 0.179452 0.480027 0.21959 0.560303 0.21959 + 200 3 25 26 27 0.560981 0.181957 0.480027 0.181957 0.550135 0.13665 + 200 3 27 26 28 0.550135 0.13665 0.480027 0.181957 0.520504 0.103482 + 200 3 28 26 29 0.520504 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 29 26 30 0.480027 0.0913424 0.480027 0.181957 0.43955 0.103482 + 200 3 30 26 31 0.43955 0.103482 0.480027 0.181957 0.409919 0.13665 + 200 3 31 26 32 0.409919 0.13665 0.480027 0.181957 0.399073 0.181957 + 200 3 32 26 33 0.399073 0.181957 0.480027 0.181957 0.409919 0.13665 + 200 3 33 26 34 0.409919 0.13665 0.480027 0.181957 0.43955 0.103482 + 200 3 34 26 35 0.43955 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 35 26 36 0.480027 0.0913424 0.480027 0.181957 0.520504 0.103482 + 200 3 36 26 37 0.520504 0.103482 0.480027 0.181957 0.550135 0.13665 + 200 3 37 26 25 0.550135 0.13665 0.480027 0.181957 0.560981 0.181957 + 200 3 38 39 40 0.546441 0.140842 0.477807 0.140842 0.537246 0.0975931 + 200 3 40 39 41 0.537246 0.0975931 0.477807 0.140842 0.512124 0.0659329 + 200 3 41 39 42 0.512124 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 42 39 43 0.477807 0.0543445 0.477807 0.140842 0.44349 0.0659329 + 200 3 43 39 44 0.44349 0.0659329 0.477807 0.140842 0.418369 0.0975931 + 200 3 44 39 45 0.418369 0.0975931 0.477807 0.140842 0.409174 0.140842 + 200 3 45 39 46 0.409174 0.140842 0.477807 0.140842 0.418369 0.0975931 + 200 3 46 39 47 0.418369 0.0975931 0.477807 0.140842 0.44349 0.0659329 + 200 3 47 39 48 0.44349 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 48 39 49 0.477807 0.0543445 0.477807 0.140842 0.512124 0.0659329 + 200 3 49 39 50 0.512124 0.0659329 0.477807 0.140842 0.537246 0.0975931 + 200 3 50 39 38 0.537246 0.0975931 0.477807 0.140842 0.546441 0.140842 + 200 3 51 52 53 0.540626 0.100802 0.476142 0.100802 0.531986 0.0671586 + 200 3 53 52 54 0.531986 0.0671586 0.476142 0.100802 0.508384 0.0425297 + 200 3 54 52 55 0.508384 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 55 52 56 0.476142 0.0335151 0.476142 0.100802 0.443901 0.0425297 + 200 3 56 52 57 0.443901 0.0425297 0.476142 0.100802 0.420298 0.0671586 + 200 3 57 52 58 0.420298 0.0671586 0.476142 0.100802 0.411659 0.100802 + 200 3 58 52 59 0.411659 0.100802 0.476142 0.100802 0.420298 0.0671586 + 200 3 59 52 60 0.420298 0.0671586 0.476142 0.100802 0.443901 0.0425297 + 200 3 60 52 61 0.443901 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 61 52 62 0.476142 0.0335151 0.476142 0.100802 0.508384 0.0425297 + 200 3 62 52 63 0.508384 0.0425297 0.476142 0.100802 0.531986 0.0671586 + 200 3 63 52 51 0.531986 0.0671586 0.476142 0.100802 0.540626 0.100802 + 200 3 64 65 66 0.536889 0.0827199 0.478362 0.0827199 0.529048 0.0504009 + 200 3 66 65 67 0.529048 0.0504009 0.478362 0.0827199 0.507626 0.0267418 + 200 3 67 65 68 0.507626 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 68 65 69 0.478362 0.018082 0.478362 0.0827199 0.449099 0.0267418 + 200 3 69 65 70 0.449099 0.0267418 0.478362 0.0827199 0.427677 0.0504009 + 200 3 70 65 71 0.427677 0.0504009 0.478362 0.0827199 0.419836 0.0827196 + 200 3 71 65 72 0.419836 0.0827196 0.478362 0.0827199 0.427677 0.0504009 + 200 3 72 65 73 0.427677 0.0504009 0.478362 0.0827199 0.449099 0.0267418 + 200 3 73 65 74 0.449099 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 74 65 75 0.478362 0.018082 0.478362 0.0827199 0.507626 0.0267418 + 200 3 75 65 76 0.507626 0.0267418 0.478362 0.0827199 0.529048 0.0504009 + 200 3 76 65 64 0.529048 0.0504009 0.478362 0.0827199 0.536889 0.0827199 + 200 3 77 78 79 0.487048 0.0371633 0.468862 0.0371633 0.484612 0.0197034 + 200 3 79 78 80 0.484612 0.0197034 0.468862 0.0371633 0.477955 0.00692183 + 200 3 80 78 81 0.477955 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 81 78 82 0.468862 0.00224346 0.468862 0.0371633 0.459769 0.00692183 + 200 3 82 78 83 0.459769 0.00692183 0.468862 0.0371633 0.453112 0.0197034 + 200 3 83 78 84 0.453112 0.0197034 0.468862 0.0371633 0.450676 0.0371633 + 200 3 84 78 85 0.450676 0.0371633 0.468862 0.0371633 0.453112 0.0197034 + 200 3 85 78 86 0.453112 0.0197034 0.468862 0.0371633 0.459769 0.00692183 + 200 3 86 78 87 0.459769 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 87 78 88 0.468862 0.00224346 0.468862 0.0371633 0.477955 0.00692183 + 200 3 88 78 89 0.477955 0.00692183 0.468862 0.0371633 0.484612 0.0197034 + 200 3 89 78 77 0.484612 0.0197034 0.468862 0.0371633 0.487048 0.0371633 + 200 3 76 52 75 0.136208 0.39659 0.0966576 0.311774 0.173318 0.365452 + 200 3 75 52 74 0.173318 0.365452 0.0966576 0.311774 0.189886 0.31993 + 200 3 74 52 73 0.189886 0.31993 0.0966576 0.311774 0.181474 0.272223 + 200 3 73 52 72 0.181474 0.272223 0.0966576 0.311774 0.150336 0.235114 + 200 3 72 52 71 0.150336 0.235114 0.0966576 0.311774 0.104814 0.218545 + 200 3 71 52 70 0.104814 0.218545 0.0966576 0.311774 0.057107 0.226957 + 200 3 70 52 69 0.057107 0.226957 0.0966576 0.311774 0.0199974 0.258096 + 200 3 69 52 68 0.0199974 0.258096 0.0966576 0.311774 0.00342888 0.303617 + 200 3 68 52 67 0.00342888 0.303617 0.0966576 0.311774 0.011841 0.351324 + 200 3 67 52 66 0.011841 0.351324 0.0966576 0.311774 0.0429796 0.388434 + 200 3 66 52 64 0.0429796 0.388434 0.0966576 0.311774 0.0885012 0.405002 + 200 3 64 52 76 0.0885012 0.405002 0.0966576 0.311774 0.136208 0.39659 + 200 3 89 65 88 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 88 65 87 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 87 65 86 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 86 65 85 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 85 65 84 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 84 65 83 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 83 65 82 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 82 65 81 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 81 65 80 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 80 65 79 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 79 65 77 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 77 65 89 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 + 200 3 63 39 62 0.162832 0.377948 0.0966577 0.311774 0.187054 0.335995 + 200 3 62 39 61 0.187054 0.335995 0.0966577 0.311774 0.187054 0.287552 + 200 3 61 39 60 0.187054 0.287552 0.0966577 0.311774 0.162832 0.245599 + 200 3 60 39 59 0.162832 0.245599 0.0966577 0.311774 0.120879 0.221378 + 200 3 59 39 58 0.120879 0.221378 0.0966577 0.311774 0.0724362 0.221378 + 200 3 58 39 57 0.0724362 0.221378 0.0966577 0.311774 0.0304832 0.245599 + 200 3 57 39 56 0.0304832 0.245599 0.0966577 0.311774 0.00626171 0.287552 + 200 3 56 39 55 0.00626171 0.287552 0.0966577 0.311774 0.00626171 0.335995 + 200 3 55 39 54 0.00626171 0.335995 0.0966577 0.311774 0.0304832 0.377948 + 200 3 54 39 53 0.0304832 0.377948 0.0966577 0.311774 0.0724362 0.40217 + 200 3 53 39 51 0.0724362 0.40217 0.0966577 0.311774 0.120879 0.40217 + 200 3 51 39 63 0.120879 0.40217 0.0966577 0.311774 0.162832 0.377948 + 200 3 50 26 49 0.189886 0.303617 0.0966577 0.311774 0.173318 0.258095 + 200 3 49 26 48 0.173318 0.258095 0.0966577 0.311774 0.136208 0.226957 + 200 3 48 26 47 0.136208 0.226957 0.0966577 0.311774 0.0885012 0.218545 + 200 3 47 26 46 0.0885012 0.218545 0.0966577 0.311774 0.0429797 0.235113 + 200 3 46 26 45 0.0429797 0.235113 0.0966577 0.311774 0.011841 0.272223 + 200 3 45 26 44 0.011841 0.272223 0.0966577 0.311774 0.003429 0.31993 + 200 3 44 26 43 0.003429 0.31993 0.0966577 0.311774 0.0199975 0.365452 + 200 3 43 26 42 0.0199975 0.365452 0.0966577 0.311774 0.057107 0.39659 + 200 3 42 26 41 0.057107 0.39659 0.0966577 0.311774 0.104814 0.405002 + 200 3 41 26 40 0.104814 0.405002 0.0966577 0.311774 0.150336 0.388434 + 200 3 40 26 38 0.150336 0.388434 0.0966577 0.311774 0.181474 0.351324 + 200 3 38 26 50 0.181474 0.351324 0.0966577 0.311774 0.189886 0.303617 + 200 3 37 13 36 0.190243 0.311774 0.0966577 0.311774 0.177705 0.264981 + 200 3 36 13 35 0.177705 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 35 13 34 0.14345 0.230727 0.0966577 0.311774 0.0966577 0.218189 + 200 3 34 13 33 0.0966577 0.218189 0.0966577 0.311774 0.0498653 0.230727 + 200 3 33 13 32 0.0498653 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 32 13 31 0.0156108 0.264981 0.0966577 0.311774 0.00307286 0.311774 + 200 3 31 13 30 0.00307286 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 30 13 29 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 29 13 28 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 28 13 27 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 27 13 25 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 25 13 37 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 24 90 23 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 23 90 22 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 22 90 21 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 21 90 20 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 20 90 19 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 19 90 18 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 18 90 17 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 17 90 16 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 16 90 15 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 15 90 14 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 14 90 12 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 12 90 24 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 +LEVEL 4 +POINTS 68 + 51.2542 -2.00705 29.2237 + 54.9063 -1.99295 32.9317 + 52.0063 -2 32.1292 + 56.287 -2 27.9252 + 57.0376 -2.00705 30.8203 + 53.3973 -1.99295 27.1243 + 54.7134 82.995 30.5425 + 54.685 84.2386 30.0698 + 53.992 82.9973 30.3214 + 53.6083 84.2386 29.9845 + 53.5796 85.4421 29.5101 + 54.3021 85.4444 29.7341 + 85.7664 15.1984 3.65145 + 54.1465 33.0491 30.0242 + 93.6752 16.5195 19.3711 + 87.8496 8.15273 39.5354 + 79.9317 8.3321 56.65 + 62.7475 8.26177 63.9355 + 43.7205 16.309 65.7036 + 29.0421 15.1983 54.3871 + 18.2549 3.22754 39.1822 + 20.4578 11.4689 20.4406 + 28.378 7.71014 3.38353 + 45.6239 11.578 -3.89363 + 64.1765 3.0171 -5.67621 + 59.7808 35.9778 54.2985 + 54.1478 54.7156 30.0175 + 46.1086 32.9465 55.4119 + 35.988 41.055 47.1061 + 28.3859 40.6135 35.5337 + 30.1495 39.1388 22.652 + 36.3145 36.7085 10.4251 + 48.5778 39.2361 5.74876 + 62.338 40.5114 4.66898 + 72.3053 41.055 12.9482 + 79.8933 33.0487 24.3578 + 78.1535 35.8805 37.3355 + 71.9886 37.1657 49.6254 + 68.5301 55.4326 34.9625 + 54.1506 69.7086 30.0083 + 64.3544 56.4079 42.2526 + 56.9993 55.5018 44.5804 + 48.4482 58.6129 45.0376 + 43.0084 58.3275 39.8772 + 38.5131 55.0802 32.5732 + 39.7659 57.1603 25.0631 + 43.922 56.1189 17.7856 + 51.3212 57.2295 15.4734 + 59.8082 55.0516 15.0095 + 65.2849 58.3275 20.1771 + 69.7736 58.6414 27.5319 + 63.9944 70.4871 28.4588 + 54.1528 85.9133 30.0021 + 64.2692 72.1326 34.3913 + 60.6217 71.5564 37.6701 + 55.2952 72.1815 40.3048 + 50.6046 70.4805 39.4201 + 45.7939 72.2015 36.3455 + 44.2993 70.3046 31.598 + 44.0205 71.1198 25.6694 + 47.6568 71.7475 22.3649 + 52.9971 71.1687 19.7486 + 57.6865 70.2979 20.6336 + 62.495 72.2015 23.7135 + 54.149 57.1404 30.013 + 54.1506 71.6693 30.008 + 54.147 37.7873 30.0215 + 54.1463 8.82839 30.0261 +POLYGONS 116 + 200 3 0 1 2 0.0783653 0.291587 0.0783653 0.350448 0.0613737 0.321017 + 200 3 1 3 4 0.0783653 0.350448 0.12934 0.321017 0.112349 0.350448 + 200 3 0 3 1 0.0783653 0.291587 0.12934 0.321017 0.0783653 0.350448 + 200 3 5 3 0 0.112349 0.291587 0.12934 0.321017 0.0783653 0.291587 + 200 3 3 6 4 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 6 3 7 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 4 8 1 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 8 4 6 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 1 9 2 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 9 1 8 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 2 10 0 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 10 2 9 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 0 11 5 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 11 0 10 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 5 7 3 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 7 5 11 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 7 8 6 0.11132 0.320933 0.086818 0.306787 0.103153 0.306787 + 200 3 8 10 9 0.086818 0.306787 0.086818 0.335079 0.0786506 0.320933 + 200 3 7 10 8 0.11132 0.320933 0.086818 0.335079 0.086818 0.306787 + 200 3 11 10 7 0.103153 0.335079 0.086818 0.335079 0.11132 0.320933 + 200 3 12 13 14 0.560303 0.21959 0.480027 0.21959 0.549548 0.179452 + 200 3 14 13 15 0.549548 0.179452 0.480027 0.21959 0.520165 0.15007 + 200 3 15 13 16 0.520165 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 16 13 17 0.480027 0.139315 0.480027 0.21959 0.43989 0.15007 + 200 3 17 13 18 0.43989 0.15007 0.480027 0.21959 0.410507 0.179452 + 200 3 18 13 19 0.410507 0.179452 0.480027 0.21959 0.399752 0.21959 + 200 3 19 13 20 0.399752 0.21959 0.480027 0.21959 0.410507 0.179452 + 200 3 20 13 21 0.410507 0.179452 0.480027 0.21959 0.439889 0.15007 + 200 3 21 13 22 0.439889 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 22 13 23 0.480027 0.139315 0.480027 0.21959 0.520165 0.15007 + 200 3 23 13 24 0.520165 0.15007 0.480027 0.21959 0.549548 0.179452 + 200 3 24 13 12 0.549548 0.179452 0.480027 0.21959 0.560303 0.21959 + 200 3 25 26 27 0.546441 0.140842 0.477807 0.140842 0.537246 0.0975931 + 200 3 27 26 28 0.537246 0.0975931 0.477807 0.140842 0.512124 0.0659329 + 200 3 28 26 29 0.512124 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 29 26 30 0.477807 0.0543445 0.477807 0.140842 0.44349 0.0659329 + 200 3 30 26 31 0.44349 0.0659329 0.477807 0.140842 0.418369 0.0975931 + 200 3 31 26 32 0.418369 0.0975931 0.477807 0.140842 0.409174 0.140842 + 200 3 32 26 33 0.409174 0.140842 0.477807 0.140842 0.418369 0.0975931 + 200 3 33 26 34 0.418369 0.0975931 0.477807 0.140842 0.44349 0.0659329 + 200 3 34 26 35 0.44349 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 35 26 36 0.477807 0.0543445 0.477807 0.140842 0.512124 0.0659329 + 200 3 36 26 37 0.512124 0.0659329 0.477807 0.140842 0.537246 0.0975931 + 200 3 37 26 25 0.537246 0.0975931 0.477807 0.140842 0.546441 0.140842 + 200 3 38 39 40 0.536889 0.0827199 0.478362 0.0827199 0.529048 0.0504009 + 200 3 40 39 41 0.529048 0.0504009 0.478362 0.0827199 0.507626 0.0267418 + 200 3 41 39 42 0.507626 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 42 39 43 0.478362 0.018082 0.478362 0.0827199 0.449099 0.0267418 + 200 3 43 39 44 0.449099 0.0267418 0.478362 0.0827199 0.427677 0.0504009 + 200 3 44 39 45 0.427677 0.0504009 0.478362 0.0827199 0.419836 0.0827196 + 200 3 45 39 46 0.419836 0.0827196 0.478362 0.0827199 0.427677 0.0504009 + 200 3 46 39 47 0.427677 0.0504009 0.478362 0.0827199 0.449099 0.0267418 + 200 3 47 39 48 0.449099 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 48 39 49 0.478362 0.018082 0.478362 0.0827199 0.507626 0.0267418 + 200 3 49 39 50 0.507626 0.0267418 0.478362 0.0827199 0.529048 0.0504009 + 200 3 50 39 38 0.529048 0.0504009 0.478362 0.0827199 0.536889 0.0827199 + 200 3 51 52 53 0.487048 0.0371633 0.468862 0.0371633 0.484612 0.0197034 + 200 3 53 52 54 0.484612 0.0197034 0.468862 0.0371633 0.477955 0.00692183 + 200 3 54 52 55 0.477955 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 55 52 56 0.468862 0.00224346 0.468862 0.0371633 0.459769 0.00692183 + 200 3 56 52 57 0.459769 0.00692183 0.468862 0.0371633 0.453112 0.0197034 + 200 3 57 52 58 0.453112 0.0197034 0.468862 0.0371633 0.450676 0.0371633 + 200 3 58 52 59 0.450676 0.0371633 0.468862 0.0371633 0.453112 0.0197034 + 200 3 59 52 60 0.453112 0.0197034 0.468862 0.0371633 0.459769 0.00692183 + 200 3 60 52 61 0.459769 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 61 52 62 0.468862 0.00224346 0.468862 0.0371633 0.477955 0.00692183 + 200 3 62 52 63 0.477955 0.00692183 0.468862 0.0371633 0.484612 0.0197034 + 200 3 63 52 51 0.484612 0.0197034 0.468862 0.0371633 0.487048 0.0371633 + 200 3 50 64 49 0.136208 0.39659 0.0966576 0.311774 0.173318 0.365452 + 200 3 49 64 48 0.173318 0.365452 0.0966576 0.311774 0.189886 0.31993 + 200 3 48 64 47 0.189886 0.31993 0.0966576 0.311774 0.181474 0.272223 + 200 3 47 64 46 0.181474 0.272223 0.0966576 0.311774 0.150336 0.235114 + 200 3 46 64 45 0.150336 0.235114 0.0966576 0.311774 0.104814 0.218545 + 200 3 45 64 44 0.104814 0.218545 0.0966576 0.311774 0.057107 0.226957 + 200 3 44 64 43 0.057107 0.226957 0.0966576 0.311774 0.0199974 0.258096 + 200 3 43 64 42 0.0199974 0.258096 0.0966576 0.311774 0.00342888 0.303617 + 200 3 42 64 41 0.00342888 0.303617 0.0966576 0.311774 0.011841 0.351324 + 200 3 41 64 40 0.011841 0.351324 0.0966576 0.311774 0.0429796 0.388434 + 200 3 40 64 38 0.0429796 0.388434 0.0966576 0.311774 0.0885012 0.405002 + 200 3 38 64 50 0.0885012 0.405002 0.0966576 0.311774 0.136208 0.39659 + 200 3 63 65 62 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 62 65 61 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 61 65 60 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 60 65 59 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 59 65 58 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 58 65 57 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 57 65 56 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 56 65 55 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 55 65 54 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 54 65 53 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 53 65 51 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 51 65 63 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 + 200 3 37 66 36 0.189886 0.303617 0.0966577 0.311774 0.173318 0.258095 + 200 3 36 66 35 0.173318 0.258095 0.0966577 0.311774 0.136208 0.226957 + 200 3 35 66 34 0.136208 0.226957 0.0966577 0.311774 0.0885012 0.218545 + 200 3 34 66 33 0.0885012 0.218545 0.0966577 0.311774 0.0429797 0.235113 + 200 3 33 66 32 0.0429797 0.235113 0.0966577 0.311774 0.011841 0.272223 + 200 3 32 66 31 0.011841 0.272223 0.0966577 0.311774 0.003429 0.31993 + 200 3 31 66 30 0.003429 0.31993 0.0966577 0.311774 0.0199975 0.365452 + 200 3 30 66 29 0.0199975 0.365452 0.0966577 0.311774 0.057107 0.39659 + 200 3 29 66 28 0.057107 0.39659 0.0966577 0.311774 0.104814 0.405002 + 200 3 28 66 27 0.104814 0.405002 0.0966577 0.311774 0.150336 0.388434 + 200 3 27 66 25 0.150336 0.388434 0.0966577 0.311774 0.181474 0.351324 + 200 3 25 66 37 0.181474 0.351324 0.0966577 0.311774 0.189886 0.303617 + 200 3 24 67 23 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 23 67 22 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 22 67 21 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 21 67 20 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 20 67 19 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 19 67 18 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 18 67 17 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 17 67 16 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 16 67 15 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 15 67 14 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 14 67 12 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 12 67 24 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 +LEVEL 5 +POINTS 82 + -32.9779 -2 -42.8568 + -30.3972 -2 -47.5269 + -30.2851 -2 -44.4385 + -35.6685 -2 -47.3661 + -33.0944 -2 -48.9877 + -35.6535 -2 -44.3566 + -33.6576 102.264 -46.6776 + -33.0877 102.683 -45.7879 + -33.2675 102.266 -46.6725 + -32.8659 102.683 -46.0167 + -32.3074 102.784 -45.1312 + -32.7014 102.787 -45.1426 + -64.419 7.02663 -62.9169 + -32.9771 30.5343 -45.9025 + -51.6594 9.90676 -75.6664 + -34.4226 10.0214 -81.8058 + -16.7569 9.1323 -76.7511 + -2.83822 10.9344 -64.9499 + 1.52449 11.6822 -47.1868 + -1.53465 7.02661 -28.8877 + -14.3866 7.88927 -16.1197 + -31.566 9.49828 -10.0049 + -49.1548 9.91519 -15.0305 + -63.1397 10.4113 -26.8812 + -67.5149 9.66493 -44.7074 + -46.3503 30.2017 -18.246 + -32.9776 50.0439 -45.9027 + -51.4009 30.7492 -33.3168 + -62.9704 30.9704 -44.0585 + -52.8393 28.7519 -56.1954 + -50.2011 29.7069 -72.0266 + -34.6233 28.8379 -68.7229 + -19.6517 31.0586 -73.5852 + -14.5133 29.601 -58.4619 + -2.98812 31.1483 -47.7548 + -13.1015 28.7519 -35.6022 + -15.7618 29.529 -19.7771 + -31.2875 29.9863 -23.0623 + -12.7646 50.3986 -60.8441 + -32.9783 68.0023 -45.9031 + -15.0513 49.8839 -47.6396 + -10.464 49.0283 -34.8138 + -21.7179 48.0882 -29.8325 + -30.283 47.8541 -19.9131 + -40.4139 48.6539 -28.5162 + -53.2686 48.4666 -31.0418 + -50.9032 49.2108 -44.1693 + -55.4896 49.0283 -56.9908 + -44.2385 48.7615 -61.9698 + -35.7762 49.7864 -71.912 + -25.5015 47.7441 -63.2674 + -25.7141 68.1141 -65.2495 + -32.9791 86.3505 -45.9036 + -21.743 65.6991 -55.2563 + -13.8735 68.0614 -48.4483 + -19.8769 67.7266 -39.833 + -20.1089 66.893 -28.5325 + -30.4474 67.9323 -30.3071 + -40.2821 67.1888 -26.5786 + -44.1256 68.3955 -36.4819 + -52.0891 67.7153 -43.3698 + -46.0639 67.7266 -51.9645 + -45.8582 67.2392 -63.2709 + -35.4096 65.2353 -61.4639 + -40.4845 82.7923 -54.6487 + -32.9816 104.683 -45.905 + -35.4535 84.6437 -54.0949 + -30.8797 86.9862 -56.4202 + -28.5101 84.8295 -51.495 + -24.3395 83.0976 -48.2053 + -26.797 87.3169 -43.5601 + -25.4594 83.199 -37.1565 + -30.412 87.706 -37.6791 + -35.0981 86.2434 -35.3977 + -37.3597 87.8912 -40.2456 + -41.6055 83.5041 -43.5886 + -39.1438 87.3169 -48.2375 + -32.9802 87.6829 -45.9042 + -32.978 69.3934 -45.903 + -32.977 51.7289 -45.9024 + -32.9773 32.7651 -45.9026 + -32.9769 12.6829 -45.9024 +POLYGONS 140 + 200 3 0 1 2 0.0783653 0.291587 0.0783653 0.350448 0.0613737 0.321017 + 200 3 1 3 4 0.0783653 0.350448 0.12934 0.321017 0.112349 0.350448 + 200 3 0 3 1 0.0783653 0.291587 0.12934 0.321017 0.0783653 0.350448 + 200 3 5 3 0 0.112349 0.291587 0.12934 0.321017 0.0783653 0.291587 + 200 3 3 6 4 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 6 3 7 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 4 8 1 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 8 4 6 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 1 9 2 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 9 1 8 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 2 10 0 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 10 2 9 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 0 11 5 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 11 0 10 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 5 7 3 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 7 5 11 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 7 8 6 0.11132 0.320933 0.086818 0.306787 0.103153 0.306787 + 200 3 8 10 9 0.086818 0.306787 0.086818 0.335079 0.0786506 0.320933 + 200 3 7 10 8 0.11132 0.320933 0.086818 0.335079 0.086818 0.306787 + 200 3 11 10 7 0.103153 0.335079 0.086818 0.335079 0.11132 0.320933 + 200 3 12 13 14 0.560303 0.21959 0.480027 0.21959 0.549548 0.179452 + 200 3 14 13 15 0.549548 0.179452 0.480027 0.21959 0.520165 0.15007 + 200 3 15 13 16 0.520165 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 16 13 17 0.480027 0.139315 0.480027 0.21959 0.43989 0.15007 + 200 3 17 13 18 0.43989 0.15007 0.480027 0.21959 0.410507 0.179452 + 200 3 18 13 19 0.410507 0.179452 0.480027 0.21959 0.399752 0.21959 + 200 3 19 13 20 0.399752 0.21959 0.480027 0.21959 0.410507 0.179452 + 200 3 20 13 21 0.410507 0.179452 0.480027 0.21959 0.439889 0.15007 + 200 3 21 13 22 0.439889 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 22 13 23 0.480027 0.139315 0.480027 0.21959 0.520165 0.15007 + 200 3 23 13 24 0.520165 0.15007 0.480027 0.21959 0.549548 0.179452 + 200 3 24 13 12 0.549548 0.179452 0.480027 0.21959 0.560303 0.21959 + 200 3 25 26 27 0.560981 0.181957 0.480027 0.181957 0.550135 0.13665 + 200 3 27 26 28 0.550135 0.13665 0.480027 0.181957 0.520504 0.103482 + 200 3 28 26 29 0.520504 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 29 26 30 0.480027 0.0913424 0.480027 0.181957 0.43955 0.103482 + 200 3 30 26 31 0.43955 0.103482 0.480027 0.181957 0.409919 0.13665 + 200 3 31 26 32 0.409919 0.13665 0.480027 0.181957 0.399073 0.181957 + 200 3 32 26 33 0.399073 0.181957 0.480027 0.181957 0.409919 0.13665 + 200 3 33 26 34 0.409919 0.13665 0.480027 0.181957 0.43955 0.103482 + 200 3 34 26 35 0.43955 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 35 26 36 0.480027 0.0913424 0.480027 0.181957 0.520504 0.103482 + 200 3 36 26 37 0.520504 0.103482 0.480027 0.181957 0.550135 0.13665 + 200 3 37 26 25 0.550135 0.13665 0.480027 0.181957 0.560981 0.181957 + 200 3 38 39 40 0.546441 0.140842 0.477807 0.140842 0.537246 0.0975931 + 200 3 40 39 41 0.537246 0.0975931 0.477807 0.140842 0.512124 0.0659329 + 200 3 41 39 42 0.512124 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 42 39 43 0.477807 0.0543445 0.477807 0.140842 0.44349 0.0659329 + 200 3 43 39 44 0.44349 0.0659329 0.477807 0.140842 0.418369 0.0975931 + 200 3 44 39 45 0.418369 0.0975931 0.477807 0.140842 0.409174 0.140842 + 200 3 45 39 46 0.409174 0.140842 0.477807 0.140842 0.418369 0.0975931 + 200 3 46 39 47 0.418369 0.0975931 0.477807 0.140842 0.44349 0.0659329 + 200 3 47 39 48 0.44349 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 48 39 49 0.477807 0.0543445 0.477807 0.140842 0.512124 0.0659329 + 200 3 49 39 50 0.512124 0.0659329 0.477807 0.140842 0.537246 0.0975931 + 200 3 50 39 38 0.537246 0.0975931 0.477807 0.140842 0.546441 0.140842 + 200 3 51 52 53 0.540626 0.100802 0.476142 0.100802 0.531986 0.0671586 + 200 3 53 52 54 0.531986 0.0671586 0.476142 0.100802 0.508384 0.0425297 + 200 3 54 52 55 0.508384 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 55 52 56 0.476142 0.0335151 0.476142 0.100802 0.443901 0.0425297 + 200 3 56 52 57 0.443901 0.0425297 0.476142 0.100802 0.420298 0.0671586 + 200 3 57 52 58 0.420298 0.0671586 0.476142 0.100802 0.411659 0.100802 + 200 3 58 52 59 0.411659 0.100802 0.476142 0.100802 0.420298 0.0671586 + 200 3 59 52 60 0.420298 0.0671586 0.476142 0.100802 0.443901 0.0425297 + 200 3 60 52 61 0.443901 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 61 52 62 0.476142 0.0335151 0.476142 0.100802 0.508384 0.0425297 + 200 3 62 52 63 0.508384 0.0425297 0.476142 0.100802 0.531986 0.0671586 + 200 3 63 52 51 0.531986 0.0671586 0.476142 0.100802 0.540626 0.100802 + 200 3 64 65 66 0.487048 0.0371633 0.468862 0.0371633 0.484612 0.0197034 + 200 3 66 65 67 0.484612 0.0197034 0.468862 0.0371633 0.477955 0.00692183 + 200 3 67 65 68 0.477955 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 68 65 69 0.468862 0.00224346 0.468862 0.0371633 0.459769 0.00692183 + 200 3 69 65 70 0.459769 0.00692183 0.468862 0.0371633 0.453112 0.0197034 + 200 3 70 65 71 0.453112 0.0197034 0.468862 0.0371633 0.450676 0.0371633 + 200 3 71 65 72 0.450676 0.0371633 0.468862 0.0371633 0.453112 0.0197034 + 200 3 72 65 73 0.453112 0.0197034 0.468862 0.0371633 0.459769 0.00692183 + 200 3 73 65 74 0.459769 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 74 65 75 0.468862 0.00224346 0.468862 0.0371633 0.477955 0.00692183 + 200 3 75 65 76 0.477955 0.00692183 0.468862 0.0371633 0.484612 0.0197034 + 200 3 76 65 64 0.484612 0.0197034 0.468862 0.0371633 0.487048 0.0371633 + 200 3 76 77 75 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 75 77 74 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 74 77 73 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 73 77 72 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 72 77 71 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 71 77 70 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 70 77 69 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 69 77 68 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 68 77 67 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 67 77 66 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 66 77 64 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 64 77 76 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 + 200 3 63 78 62 0.162832 0.377948 0.0966577 0.311774 0.187054 0.335995 + 200 3 62 78 61 0.187054 0.335995 0.0966577 0.311774 0.187054 0.287552 + 200 3 61 78 60 0.187054 0.287552 0.0966577 0.311774 0.162832 0.245599 + 200 3 60 78 59 0.162832 0.245599 0.0966577 0.311774 0.120879 0.221378 + 200 3 59 78 58 0.120879 0.221378 0.0966577 0.311774 0.0724362 0.221378 + 200 3 58 78 57 0.0724362 0.221378 0.0966577 0.311774 0.0304832 0.245599 + 200 3 57 78 56 0.0304832 0.245599 0.0966577 0.311774 0.00626171 0.287552 + 200 3 56 78 55 0.00626171 0.287552 0.0966577 0.311774 0.00626171 0.335995 + 200 3 55 78 54 0.00626171 0.335995 0.0966577 0.311774 0.0304832 0.377948 + 200 3 54 78 53 0.0304832 0.377948 0.0966577 0.311774 0.0724362 0.40217 + 200 3 53 78 51 0.0724362 0.40217 0.0966577 0.311774 0.120879 0.40217 + 200 3 51 78 63 0.120879 0.40217 0.0966577 0.311774 0.162832 0.377948 + 200 3 50 79 49 0.189886 0.303617 0.0966577 0.311774 0.173318 0.258095 + 200 3 49 79 48 0.173318 0.258095 0.0966577 0.311774 0.136208 0.226957 + 200 3 48 79 47 0.136208 0.226957 0.0966577 0.311774 0.0885012 0.218545 + 200 3 47 79 46 0.0885012 0.218545 0.0966577 0.311774 0.0429797 0.235113 + 200 3 46 79 45 0.0429797 0.235113 0.0966577 0.311774 0.011841 0.272223 + 200 3 45 79 44 0.011841 0.272223 0.0966577 0.311774 0.003429 0.31993 + 200 3 44 79 43 0.003429 0.31993 0.0966577 0.311774 0.0199975 0.365452 + 200 3 43 79 42 0.0199975 0.365452 0.0966577 0.311774 0.057107 0.39659 + 200 3 42 79 41 0.057107 0.39659 0.0966577 0.311774 0.104814 0.405002 + 200 3 41 79 40 0.104814 0.405002 0.0966577 0.311774 0.150336 0.388434 + 200 3 40 79 38 0.150336 0.388434 0.0966577 0.311774 0.181474 0.351324 + 200 3 38 79 50 0.181474 0.351324 0.0966577 0.311774 0.189886 0.303617 + 200 3 37 80 36 0.190243 0.311774 0.0966577 0.311774 0.177705 0.264981 + 200 3 36 80 35 0.177705 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 35 80 34 0.14345 0.230727 0.0966577 0.311774 0.0966577 0.218189 + 200 3 34 80 33 0.0966577 0.218189 0.0966577 0.311774 0.0498653 0.230727 + 200 3 33 80 32 0.0498653 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 32 80 31 0.0156108 0.264981 0.0966577 0.311774 0.00307286 0.311774 + 200 3 31 80 30 0.00307286 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 30 80 29 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 29 80 28 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 28 80 27 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 27 80 25 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 25 80 37 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 24 81 23 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 23 81 22 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 22 81 21 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 21 81 20 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 20 81 19 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 19 81 18 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 18 81 17 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 17 81 16 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 16 81 15 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 15 81 14 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 14 81 12 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 12 81 24 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 diff --git a/data/base/features/mistree2.pie b/data/base/features/mistree2.pie index 581682e9e43..f993628f1e9 100644 --- a/data/base/features/mistree2.pie +++ b/data/base/features/mistree2.pie @@ -1,103 +1,932 @@ -PIE 2 +PIE 3 TYPE 200 -TEXTURE 0 page-30-features-rockies.png 256 256 -LEVELS 1 +TEXTURE 0 page-30-features-rockies.png 0 0 +LEVELS 4 LEVEL 1 -POINTS 48 - -23 10 20 - -86 10 -2 - -64 10 -64 - -1 10 -41 - -83 0 -38 - -7 0 -10 - -7 102 -10 - -83 102 -38 - -31 0 -62 - -59 0 13 - -59 102 13 - -31 102 -62 - -31 0 5 - 14 0 71 - 14 102 71 - -31 102 5 - 40 10 45 - -14 10 84 - -52 10 30 - 2 10 -8 - -41 0 61 - 24 0 15 - 24 102 15 - -41 102 61 - 96 10 -4 - 58 10 50 - 4 10 12 - 43 10 -42 - 25 0 38 - 71 0 -28 - 71 102 -28 - 25 102 38 - 15 0 -18 - 81 0 28 - 81 102 28 - 15 102 -18 - 6 0 -92 - 27 0 -13 - 27 102 -13 - 6 102 -92 - -22 0 -42 - 55 0 -63 - 55 102 -63 - -22 102 -42 - 60 10 -29 - -4 10 -11 - -21 10 -75 - 43 10 -92 -POLYGONS 48 - 200 3 0 1 2 0 105 46 105 46 53 - 200 3 0 2 3 0 105 46 53 0 53 - 200 3 3 2 1 0 53 46 53 46 105 - 200 3 3 1 0 0 53 46 105 0 105 - 200 3 4 5 6 99 72 147 72 147 0 - 200 3 4 6 7 99 72 147 0 99 0 - 200 3 7 6 5 99 0 147 0 147 72 - 200 3 7 5 4 99 0 147 72 99 72 - 200 3 8 9 10 99 72 147 72 147 0 - 200 3 8 10 11 99 72 147 0 99 0 - 200 3 11 10 9 99 0 147 0 147 72 - 200 3 11 9 8 99 0 147 72 99 72 - 200 3 12 13 14 99 72 147 72 147 0 - 200 3 12 14 15 99 72 147 0 99 0 - 200 3 15 14 13 99 0 147 0 147 72 - 200 3 15 13 12 99 0 147 72 99 72 - 200 3 16 17 18 0 105 46 105 46 53 - 200 3 16 18 19 0 105 46 53 0 53 - 200 3 19 18 17 0 53 46 53 46 105 - 200 3 19 17 16 0 53 46 105 0 105 - 200 3 20 21 22 99 72 147 72 147 0 - 200 3 20 22 23 99 72 147 0 99 0 - 200 3 23 22 21 99 0 147 0 147 72 - 200 3 23 21 20 99 0 147 72 99 72 - 200 3 24 25 26 0 105 46 105 46 53 - 200 3 24 26 27 0 105 46 53 0 53 - 200 3 27 26 25 0 53 46 53 46 105 - 200 3 27 25 24 0 53 46 105 0 105 - 200 3 28 29 30 99 72 147 72 147 0 - 200 3 28 30 31 99 72 147 0 99 0 - 200 3 31 30 29 99 0 147 0 147 72 - 200 3 31 29 28 99 0 147 72 99 72 - 200 3 32 33 34 99 72 147 72 147 0 - 200 3 32 34 35 99 72 147 0 99 0 - 200 3 35 34 33 99 0 147 0 147 72 - 200 3 35 33 32 99 0 147 72 99 72 - 200 3 36 37 38 99 72 147 72 147 0 - 200 3 36 38 39 99 72 147 0 99 0 - 200 3 39 38 37 99 0 147 0 147 72 - 200 3 39 37 36 99 0 147 72 99 72 - 200 3 40 41 42 99 72 147 72 147 0 - 200 3 40 42 43 99 72 147 0 99 0 - 200 3 43 42 41 99 0 147 0 147 72 - 200 3 43 41 40 99 0 147 72 99 72 - 200 3 44 45 46 0 105 46 105 46 53 - 200 3 44 46 47 0 105 46 53 0 53 - 200 3 47 46 45 0 53 46 53 46 105 - 200 3 47 45 44 0 53 46 105 0 105 \ No newline at end of file +POINTS 91 + 46.8039 -1.99701 2.9655 + 47.9624 -2.00299 6.79177 + 46.2723 -2 5.21497 + 50.6648 -2 3.88501 + 50.1518 -1.99701 6.10459 + 49.0068 -2.00299 2.32278 + 48.7696 100 4.73473 + 48.784 100 4.33751 + 48.4624 100 4.9681 + 48.1531 100 4.76246 + 48.1678 100 4.36342 + 48.477 100 4.13294 + 74.0072 10.014 -3.47176 + 48.4686 25 4.54999 + 74.6769 11.1975 10.3156 + 68.2833 11.5785 22.5704 + 56.4844 7.56615 30.1283 + 42.7582 11.6573 30.6972 + 30.4072 11.4773 24.3082 + 22.9299 10.0139 12.5717 + 22.2809 8.53164 -1.29112 + 28.7308 8.33185 -13.5493 + 40.2879 12.4135 -20.9785 + 54.2892 8.41077 -21.575 + 66.5921 8.81153 -15.1579 + 41.1652 22.8734 -17.2149 + 48.4686 40 4.54999 + 52.0979 27.67 -13.9997 + 63.6206 25.1446 -12.5992 + 66.3923 25.0246 -1.40714 + 71.0067 24.8723 9.1327 + 62.6329 22.3096 17.0838 + 55.8923 27.0885 26.2784 + 44.6992 22.3378 23.0751 + 33.3145 25.053 21.6977 + 30.5366 25.0246 10.5096 + 25.9298 24.9639 -0.0304046 + 34.209 27.6422 -7.88792 + 45.2118 43.4745 23.4151 + 48.4686 55 4.54999 + 38.336 41.5595 16.5335 + 30.4655 40.0271 10.8982 + 32.9353 38.4597 1.66385 + 33.9058 36.5023 -7.85632 + 43.0727 41.7562 -10.2767 + 51.9057 36.4958 -14.2769 + 58.6419 38.5633 -7.39626 + 66.4716 40.0271 -1.79827 + 64.0058 41.4562 7.38527 + 63.1432 43.4816 16.8296 + 53.7858 38.2008 19.4005 + 53.9979 56.417 18.8599 + 48.4686 70 4.55 + 46.4669 51.1134 17.0322 + 38.884 55.4505 16.3846 + 36.7058 55.0241 8.97037 + 33.3411 54.567 2.06817 + 38.6357 58.8662 -3.3312 + 42.995 53.5443 -9.77683 + 50.3252 58.8394 -7.95985 + 58.0673 54.6146 -7.27469 + 60.223 55.024 0.132102 + 63.5987 55.403 7.0168 + 58.2143 51.1395 12.529 + 57.5462 73.6612 11.5171 + 48.4686 85 4.55 + 52.0426 68.9002 13.3441 + 47.0477 73.6287 16.0272 + 42.6862 66.5658 11.9885 + 37.8873 70.0175 8.82159 + 39.1009 73.4473 3.27693 + 39.4559 66.3556 -2.50279 + 44.8599 71.0713 -4.23365 + 50.0128 66.3236 -6.89857 + 54.1646 73.4591 -2.94009 + 59.0499 70.0175 0.278376 + 57.8194 66.5535 5.90586 + 56.0309 84.6798 5.40283 + 48.4686 102 4.55 + 53.4856 82.1621 8.28241 + 51.5469 85.7196 11.61 + 47.7927 82.1359 10.9069 + 44.0025 84.6749 10.7511 + 42.7447 85.0097 7.06955 + 40.906 85.3322 3.70378 + 43.4172 87.8554 0.859177 + 45.4049 84.2643 -2.51442 + 49.0801 87.8289 -1.81867 + 52.9281 85.3273 -1.65568 + 54.1841 85.0097 2.03292 + 48.4686 10 4.54999 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.291587 0.0783653 0.350448 0.0613737 0.321017 + 200 3 1 3 4 0.0783653 0.350448 0.12934 0.321017 0.112349 0.350448 + 200 3 0 3 1 0.0783653 0.291587 0.12934 0.321017 0.0783653 0.350448 + 200 3 5 3 0 0.112349 0.291587 0.12934 0.321017 0.0783653 0.291587 + 200 3 3 6 4 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 6 3 7 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 4 8 1 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 8 4 6 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 1 9 2 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 9 1 8 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 2 10 0 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 10 2 9 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 0 11 5 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 11 0 10 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 5 7 3 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 7 5 11 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 7 8 6 0.11132 0.320933 0.086818 0.306787 0.103153 0.306787 + 200 3 8 10 9 0.086818 0.306787 0.086818 0.335079 0.0786506 0.320933 + 200 3 7 10 8 0.11132 0.320933 0.086818 0.335079 0.086818 0.306787 + 200 3 11 10 7 0.103153 0.335079 0.086818 0.335079 0.11132 0.320933 + 200 3 12 13 14 0.560303 0.21959 0.480027 0.21959 0.549548 0.179452 + 200 3 14 13 15 0.549548 0.179452 0.480027 0.21959 0.520165 0.15007 + 200 3 15 13 16 0.520165 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 16 13 17 0.480027 0.139315 0.480027 0.21959 0.43989 0.15007 + 200 3 17 13 18 0.43989 0.15007 0.480027 0.21959 0.410507 0.179452 + 200 3 18 13 19 0.410507 0.179452 0.480027 0.21959 0.399752 0.21959 + 200 3 19 13 20 0.399752 0.21959 0.480027 0.21959 0.410507 0.179452 + 200 3 20 13 21 0.410507 0.179452 0.480027 0.21959 0.439889 0.15007 + 200 3 21 13 22 0.439889 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 22 13 23 0.480027 0.139315 0.480027 0.21959 0.520165 0.15007 + 200 3 23 13 24 0.520165 0.15007 0.480027 0.21959 0.549548 0.179452 + 200 3 24 13 12 0.549548 0.179452 0.480027 0.21959 0.560303 0.21959 + 200 3 25 26 27 0.560981 0.181957 0.480027 0.181957 0.550135 0.13665 + 200 3 27 26 28 0.550135 0.13665 0.480027 0.181957 0.520504 0.103482 + 200 3 28 26 29 0.520504 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 29 26 30 0.480027 0.0913424 0.480027 0.181957 0.43955 0.103482 + 200 3 30 26 31 0.43955 0.103482 0.480027 0.181957 0.409919 0.13665 + 200 3 31 26 32 0.409919 0.13665 0.480027 0.181957 0.399073 0.181957 + 200 3 32 26 33 0.399073 0.181957 0.480027 0.181957 0.409919 0.13665 + 200 3 33 26 34 0.409919 0.13665 0.480027 0.181957 0.43955 0.103482 + 200 3 34 26 35 0.43955 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 35 26 36 0.480027 0.0913424 0.480027 0.181957 0.520504 0.103482 + 200 3 36 26 37 0.520504 0.103482 0.480027 0.181957 0.550135 0.13665 + 200 3 37 26 25 0.550135 0.13665 0.480027 0.181957 0.560981 0.181957 + 200 3 38 39 40 0.546441 0.140842 0.477807 0.140842 0.537246 0.0975931 + 200 3 40 39 41 0.537246 0.0975931 0.477807 0.140842 0.512124 0.0659329 + 200 3 41 39 42 0.512124 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 42 39 43 0.477807 0.0543445 0.477807 0.140842 0.44349 0.0659329 + 200 3 43 39 44 0.44349 0.0659329 0.477807 0.140842 0.418369 0.0975931 + 200 3 44 39 45 0.418369 0.0975931 0.477807 0.140842 0.409174 0.140842 + 200 3 45 39 46 0.409174 0.140842 0.477807 0.140842 0.418369 0.0975931 + 200 3 46 39 47 0.418369 0.0975931 0.477807 0.140842 0.44349 0.0659329 + 200 3 47 39 48 0.44349 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 48 39 49 0.477807 0.0543445 0.477807 0.140842 0.512124 0.0659329 + 200 3 49 39 50 0.512124 0.0659329 0.477807 0.140842 0.537246 0.0975931 + 200 3 50 39 38 0.537246 0.0975931 0.477807 0.140842 0.546441 0.140842 + 200 3 51 52 53 0.540626 0.100802 0.476142 0.100802 0.531986 0.0671586 + 200 3 53 52 54 0.531986 0.0671586 0.476142 0.100802 0.508384 0.0425297 + 200 3 54 52 55 0.508384 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 55 52 56 0.476142 0.0335151 0.476142 0.100802 0.443901 0.0425297 + 200 3 56 52 57 0.443901 0.0425297 0.476142 0.100802 0.420298 0.0671586 + 200 3 57 52 58 0.420298 0.0671586 0.476142 0.100802 0.411659 0.100802 + 200 3 58 52 59 0.411659 0.100802 0.476142 0.100802 0.420298 0.0671586 + 200 3 59 52 60 0.420298 0.0671586 0.476142 0.100802 0.443901 0.0425297 + 200 3 60 52 61 0.443901 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 61 52 62 0.476142 0.0335151 0.476142 0.100802 0.508384 0.0425297 + 200 3 62 52 63 0.508384 0.0425297 0.476142 0.100802 0.531986 0.0671586 + 200 3 63 52 51 0.531986 0.0671586 0.476142 0.100802 0.540626 0.100802 + 200 3 64 65 66 0.536889 0.0827199 0.478362 0.0827199 0.529048 0.0504009 + 200 3 66 65 67 0.529048 0.0504009 0.478362 0.0827199 0.507626 0.0267418 + 200 3 67 65 68 0.507626 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 68 65 69 0.478362 0.018082 0.478362 0.0827199 0.449099 0.0267418 + 200 3 69 65 70 0.449099 0.0267418 0.478362 0.0827199 0.427677 0.0504009 + 200 3 70 65 71 0.427677 0.0504009 0.478362 0.0827199 0.419836 0.0827196 + 200 3 71 65 72 0.419836 0.0827196 0.478362 0.0827199 0.427677 0.0504009 + 200 3 72 65 73 0.427677 0.0504009 0.478362 0.0827199 0.449099 0.0267418 + 200 3 73 65 74 0.449099 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 74 65 75 0.478362 0.018082 0.478362 0.0827199 0.507626 0.0267418 + 200 3 75 65 76 0.507626 0.0267418 0.478362 0.0827199 0.529048 0.0504009 + 200 3 76 65 64 0.529048 0.0504009 0.478362 0.0827199 0.536889 0.0827199 + 200 3 77 78 79 0.487048 0.0371633 0.468862 0.0371633 0.484612 0.0197034 + 200 3 79 78 80 0.484612 0.0197034 0.468862 0.0371633 0.477955 0.00692183 + 200 3 80 78 81 0.477955 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 81 78 82 0.468862 0.00224346 0.468862 0.0371633 0.459769 0.00692183 + 200 3 82 78 83 0.459769 0.00692183 0.468862 0.0371633 0.453112 0.0197034 + 200 3 83 78 84 0.453112 0.0197034 0.468862 0.0371633 0.450676 0.0371633 + 200 3 84 78 85 0.450676 0.0371633 0.468862 0.0371633 0.453112 0.0197034 + 200 3 85 78 86 0.453112 0.0197034 0.468862 0.0371633 0.459769 0.00692183 + 200 3 86 78 87 0.459769 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 87 78 88 0.468862 0.00224346 0.468862 0.0371633 0.477955 0.00692183 + 200 3 88 78 89 0.477955 0.00692183 0.468862 0.0371633 0.484612 0.0197034 + 200 3 89 78 77 0.484612 0.0197034 0.468862 0.0371633 0.487048 0.0371633 + 200 3 76 52 75 0.136208 0.39659 0.0966576 0.311774 0.173318 0.365452 + 200 3 75 52 74 0.173318 0.365452 0.0966576 0.311774 0.189886 0.31993 + 200 3 74 52 73 0.189886 0.31993 0.0966576 0.311774 0.181474 0.272223 + 200 3 73 52 72 0.181474 0.272223 0.0966576 0.311774 0.150336 0.235114 + 200 3 72 52 71 0.150336 0.235114 0.0966576 0.311774 0.104814 0.218545 + 200 3 71 52 70 0.104814 0.218545 0.0966576 0.311774 0.057107 0.226957 + 200 3 70 52 69 0.057107 0.226957 0.0966576 0.311774 0.0199974 0.258096 + 200 3 69 52 68 0.0199974 0.258096 0.0966576 0.311774 0.00342888 0.303617 + 200 3 68 52 67 0.00342888 0.303617 0.0966576 0.311774 0.011841 0.351324 + 200 3 67 52 66 0.011841 0.351324 0.0966576 0.311774 0.0429796 0.388434 + 200 3 66 52 64 0.0429796 0.388434 0.0966576 0.311774 0.0885012 0.405002 + 200 3 64 52 76 0.0885012 0.405002 0.0966576 0.311774 0.136208 0.39659 + 200 3 89 65 88 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 88 65 87 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 87 65 86 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 86 65 85 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 85 65 84 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 84 65 83 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 83 65 82 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 82 65 81 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 81 65 80 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 80 65 79 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 79 65 77 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 77 65 89 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 + 200 3 63 39 62 0.162832 0.377948 0.0966577 0.311774 0.187054 0.335995 + 200 3 62 39 61 0.187054 0.335995 0.0966577 0.311774 0.187054 0.287552 + 200 3 61 39 60 0.187054 0.287552 0.0966577 0.311774 0.162832 0.245599 + 200 3 60 39 59 0.162832 0.245599 0.0966577 0.311774 0.120879 0.221378 + 200 3 59 39 58 0.120879 0.221378 0.0966577 0.311774 0.0724362 0.221378 + 200 3 58 39 57 0.0724362 0.221378 0.0966577 0.311774 0.0304832 0.245599 + 200 3 57 39 56 0.0304832 0.245599 0.0966577 0.311774 0.00626171 0.287552 + 200 3 56 39 55 0.00626171 0.287552 0.0966577 0.311774 0.00626171 0.335995 + 200 3 55 39 54 0.00626171 0.335995 0.0966577 0.311774 0.0304832 0.377948 + 200 3 54 39 53 0.0304832 0.377948 0.0966577 0.311774 0.0724362 0.40217 + 200 3 53 39 51 0.0724362 0.40217 0.0966577 0.311774 0.120879 0.40217 + 200 3 51 39 63 0.120879 0.40217 0.0966577 0.311774 0.162832 0.377948 + 200 3 50 26 49 0.189886 0.303617 0.0966577 0.311774 0.173318 0.258095 + 200 3 49 26 48 0.173318 0.258095 0.0966577 0.311774 0.136208 0.226957 + 200 3 48 26 47 0.136208 0.226957 0.0966577 0.311774 0.0885012 0.218545 + 200 3 47 26 46 0.0885012 0.218545 0.0966577 0.311774 0.0429797 0.235113 + 200 3 46 26 45 0.0429797 0.235113 0.0966577 0.311774 0.011841 0.272223 + 200 3 45 26 44 0.011841 0.272223 0.0966577 0.311774 0.003429 0.31993 + 200 3 44 26 43 0.003429 0.31993 0.0966577 0.311774 0.0199975 0.365452 + 200 3 43 26 42 0.0199975 0.365452 0.0966577 0.311774 0.057107 0.39659 + 200 3 42 26 41 0.057107 0.39659 0.0966577 0.311774 0.104814 0.405002 + 200 3 41 26 40 0.104814 0.405002 0.0966577 0.311774 0.150336 0.388434 + 200 3 40 26 38 0.150336 0.388434 0.0966577 0.311774 0.181474 0.351324 + 200 3 38 26 50 0.181474 0.351324 0.0966577 0.311774 0.189886 0.303617 + 200 3 37 13 36 0.190243 0.311774 0.0966577 0.311774 0.177705 0.264981 + 200 3 36 13 35 0.177705 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 35 13 34 0.14345 0.230727 0.0966577 0.311774 0.0966577 0.218189 + 200 3 34 13 33 0.0966577 0.218189 0.0966577 0.311774 0.0498653 0.230727 + 200 3 33 13 32 0.0498653 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 32 13 31 0.0156108 0.264981 0.0966577 0.311774 0.00307286 0.311774 + 200 3 31 13 30 0.00307286 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 30 13 29 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 29 13 28 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 28 13 27 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 27 13 25 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 25 13 37 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 24 90 23 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 23 90 22 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 22 90 21 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 21 90 20 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 20 90 19 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 19 90 18 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 18 90 17 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 17 90 16 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 16 90 15 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 15 90 14 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 14 90 12 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 12 90 24 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 +LEVEL 2 +POINTS 82 + -7.05371 -3.01747 40.2142 + -8.43069 -3.02652 35.1724 + -6.27848 -3.02199 37.2935 + -12.0665 -3.02199 38.8743 + -11.3166 -3.01747 35.992 + -9.95558 -3.02652 40.9753 + -9.55932 151.1 37.8317 + -9.59236 151.1 38.3503 + -9.14942 151.1 37.5377 + -8.75261 151.1 37.8175 + -8.78611 151.1 38.3385 + -9.19845 151.1 38.6286 + -42.8349 15.131 47.6526 + -9.17249 44.5645 38.0839 + -43.2163 16.9194 29.6106 + -34.422 17.495 13.8245 + -18.7321 11.4324 4.36982 + -0.773615 17.6141 4.11794 + 15.1385 17.3421 12.9096 + 24.49 15.131 28.5152 + 24.8417 12.8913 46.6551 + 15.9737 12.5894 62.4438 + 0.604199 18.7567 71.7387 + -17.7147 12.7086 72.0169 + -33.563 13.3142 63.1902 + -0.407509 41 66.7888 + -9.17249 72.7128 38.0839 + -14.5797 48.2476 62.1956 + -29.588 44.4317 59.9527 + -32.8094 44.2504 45.2272 + -38.4623 44.0203 31.2879 + -27.2343 40.148 21.1969 + -18.0962 47.369 9.42236 + -3.58308 40.1907 14.0094 + 11.2457 44.2934 16.2171 + 14.4754 44.2504 30.9377 + 20.1183 44.1587 44.8769 + 9.01727 48.2056 54.849 + -4.24088 81.5091 13.5467 + -9.17249 103.895 38.0839 + 4.49831 78.6156 22.7861 + 14.5821 76.3001 30.4324 + 11.0239 73.9318 42.4119 + 9.41457 70.9741 54.8186 + -2.65187 78.9128 57.6535 + -14.3385 70.9643 62.5648 + -22.8953 74.0883 53.3316 + -32.9271 76.3001 45.7355 + -29.3758 78.4595 33.8223 + -27.9103 81.5198 21.5108 + -15.5895 73.5405 18.4861 + -15.8861 105.055 19.185 + -9.17249 128.889 38.0839 + -6.10965 97.0412 21.8432 + 3.7769 103.594 22.9611 + 6.35793 102.95 32.7284 + 10.508 102.259 41.869 + 3.39532 108.756 48.7355 + -2.53244 100.714 57.0029 + -12.0467 108.715 54.3659 + -22.1401 102.331 53.1933 + -24.692 102.95 43.4365 + -28.8569 103.523 34.3184 + -21.623 97.0806 27.3075 + -19.0248 127.951 36.6986 + -9.1725 154.122 38.0839 + -15.5953 124.147 33.0266 + -12.9426 129.522 28.7473 + -8.06153 124.107 29.8006 + -3.11392 127.943 30.14 + -1.60208 128.449 34.9962 + 0.680314 128.937 39.4606 + -2.70329 132.749 43.0881 + -5.42167 127.323 47.4257 + -10.1997 132.709 46.3849 + -15.2226 128.929 46.0341 + -16.732 128.449 41.1687 + -9.17249 128.435 38.0839 + -9.17249 102.914 38.0839 + -9.17249 76.2591 38.0839 + -9.17249 44.2132 38.0839 + -9.17248 15.11 38.0839 +POLYGONS 140 + 200 3 0 1 2 0.0783653 0.291587 0.0783653 0.350448 0.0613737 0.321017 + 200 3 1 3 4 0.0783653 0.350448 0.12934 0.321017 0.112349 0.350448 + 200 3 0 3 1 0.0783653 0.291587 0.12934 0.321017 0.0783653 0.350448 + 200 3 5 3 0 0.112349 0.291587 0.12934 0.321017 0.0783653 0.291587 + 200 3 3 6 4 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 6 3 7 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 4 8 1 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 8 4 6 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 1 9 2 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 9 1 8 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 2 10 0 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 10 2 9 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 0 11 5 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 11 0 10 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 5 7 3 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 7 5 11 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 7 8 6 0.11132 0.320933 0.086818 0.306787 0.103153 0.306787 + 200 3 8 10 9 0.086818 0.306787 0.086818 0.335079 0.0786506 0.320933 + 200 3 7 10 8 0.11132 0.320933 0.086818 0.335079 0.086818 0.306787 + 200 3 11 10 7 0.103153 0.335079 0.086818 0.335079 0.11132 0.320933 + 200 3 12 13 14 0.560303 0.21959 0.480027 0.21959 0.549548 0.179452 + 200 3 14 13 15 0.549548 0.179452 0.480027 0.21959 0.520165 0.15007 + 200 3 15 13 16 0.520165 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 16 13 17 0.480027 0.139315 0.480027 0.21959 0.43989 0.15007 + 200 3 17 13 18 0.43989 0.15007 0.480027 0.21959 0.410507 0.179452 + 200 3 18 13 19 0.410507 0.179452 0.480027 0.21959 0.399752 0.21959 + 200 3 19 13 20 0.399752 0.21959 0.480027 0.21959 0.410507 0.179452 + 200 3 20 13 21 0.410507 0.179452 0.480027 0.21959 0.439889 0.15007 + 200 3 21 13 22 0.439889 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 22 13 23 0.480027 0.139315 0.480027 0.21959 0.520165 0.15007 + 200 3 23 13 24 0.520165 0.15007 0.480027 0.21959 0.549548 0.179452 + 200 3 24 13 12 0.549548 0.179452 0.480027 0.21959 0.560303 0.21959 + 200 3 25 26 27 0.560981 0.181957 0.480027 0.181957 0.550135 0.13665 + 200 3 27 26 28 0.550135 0.13665 0.480027 0.181957 0.520504 0.103482 + 200 3 28 26 29 0.520504 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 29 26 30 0.480027 0.0913424 0.480027 0.181957 0.43955 0.103482 + 200 3 30 26 31 0.43955 0.103482 0.480027 0.181957 0.409919 0.13665 + 200 3 31 26 32 0.409919 0.13665 0.480027 0.181957 0.399073 0.181957 + 200 3 32 26 33 0.399073 0.181957 0.480027 0.181957 0.409919 0.13665 + 200 3 33 26 34 0.409919 0.13665 0.480027 0.181957 0.43955 0.103482 + 200 3 34 26 35 0.43955 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 35 26 36 0.480027 0.0913424 0.480027 0.181957 0.520504 0.103482 + 200 3 36 26 37 0.520504 0.103482 0.480027 0.181957 0.550135 0.13665 + 200 3 37 26 25 0.550135 0.13665 0.480027 0.181957 0.560981 0.181957 + 200 3 38 39 40 0.546441 0.140842 0.477807 0.140842 0.537246 0.0975931 + 200 3 40 39 41 0.537246 0.0975931 0.477807 0.140842 0.512124 0.0659329 + 200 3 41 39 42 0.512124 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 42 39 43 0.477807 0.0543445 0.477807 0.140842 0.44349 0.0659329 + 200 3 43 39 44 0.44349 0.0659329 0.477807 0.140842 0.418369 0.0975931 + 200 3 44 39 45 0.418369 0.0975931 0.477807 0.140842 0.409174 0.140842 + 200 3 45 39 46 0.409174 0.140842 0.477807 0.140842 0.418369 0.0975931 + 200 3 46 39 47 0.418369 0.0975931 0.477807 0.140842 0.44349 0.0659329 + 200 3 47 39 48 0.44349 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 48 39 49 0.477807 0.0543445 0.477807 0.140842 0.512124 0.0659329 + 200 3 49 39 50 0.512124 0.0659329 0.477807 0.140842 0.537246 0.0975931 + 200 3 50 39 38 0.537246 0.0975931 0.477807 0.140842 0.546441 0.140842 + 200 3 51 52 53 0.540626 0.100802 0.476142 0.100802 0.531986 0.0671586 + 200 3 53 52 54 0.531986 0.0671586 0.476142 0.100802 0.508384 0.0425297 + 200 3 54 52 55 0.508384 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 55 52 56 0.476142 0.0335151 0.476142 0.100802 0.443901 0.0425297 + 200 3 56 52 57 0.443901 0.0425297 0.476142 0.100802 0.420298 0.0671586 + 200 3 57 52 58 0.420298 0.0671586 0.476142 0.100802 0.411659 0.100802 + 200 3 58 52 59 0.411659 0.100802 0.476142 0.100802 0.420298 0.0671586 + 200 3 59 52 60 0.420298 0.0671586 0.476142 0.100802 0.443901 0.0425297 + 200 3 60 52 61 0.443901 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 61 52 62 0.476142 0.0335151 0.476142 0.100802 0.508384 0.0425297 + 200 3 62 52 63 0.508384 0.0425297 0.476142 0.100802 0.531986 0.0671586 + 200 3 63 52 51 0.531986 0.0671586 0.476142 0.100802 0.540626 0.100802 + 200 3 64 65 66 0.487048 0.0371633 0.468862 0.0371633 0.484612 0.0197034 + 200 3 66 65 67 0.484612 0.0197034 0.468862 0.0371633 0.477955 0.00692183 + 200 3 67 65 68 0.477955 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 68 65 69 0.468862 0.00224346 0.468862 0.0371633 0.459769 0.00692183 + 200 3 69 65 70 0.459769 0.00692183 0.468862 0.0371633 0.453112 0.0197034 + 200 3 70 65 71 0.453112 0.0197034 0.468862 0.0371633 0.450676 0.0371633 + 200 3 71 65 72 0.450676 0.0371633 0.468862 0.0371633 0.453112 0.0197034 + 200 3 72 65 73 0.453112 0.0197034 0.468862 0.0371633 0.459769 0.00692183 + 200 3 73 65 74 0.459769 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 74 65 75 0.468862 0.00224346 0.468862 0.0371633 0.477955 0.00692183 + 200 3 75 65 76 0.477955 0.00692183 0.468862 0.0371633 0.484612 0.0197034 + 200 3 76 65 64 0.484612 0.0197034 0.468862 0.0371633 0.487048 0.0371633 + 200 3 76 77 75 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 75 77 74 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 74 77 73 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 73 77 72 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 72 77 71 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 71 77 70 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 70 77 69 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 69 77 68 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 68 77 67 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 67 77 66 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 66 77 64 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 64 77 76 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 + 200 3 63 78 62 0.162832 0.377948 0.0966577 0.311774 0.187054 0.335995 + 200 3 62 78 61 0.187054 0.335995 0.0966577 0.311774 0.187054 0.287552 + 200 3 61 78 60 0.187054 0.287552 0.0966577 0.311774 0.162832 0.245599 + 200 3 60 78 59 0.162832 0.245599 0.0966577 0.311774 0.120879 0.221378 + 200 3 59 78 58 0.120879 0.221378 0.0966577 0.311774 0.0724362 0.221378 + 200 3 58 78 57 0.0724362 0.221378 0.0966577 0.311774 0.0304832 0.245599 + 200 3 57 78 56 0.0304832 0.245599 0.0966577 0.311774 0.00626171 0.287552 + 200 3 56 78 55 0.00626171 0.287552 0.0966577 0.311774 0.00626171 0.335995 + 200 3 55 78 54 0.00626171 0.335995 0.0966577 0.311774 0.0304832 0.377948 + 200 3 54 78 53 0.0304832 0.377948 0.0966577 0.311774 0.0724362 0.40217 + 200 3 53 78 51 0.0724362 0.40217 0.0966577 0.311774 0.120879 0.40217 + 200 3 51 78 63 0.120879 0.40217 0.0966577 0.311774 0.162832 0.377948 + 200 3 50 79 49 0.189886 0.303617 0.0966577 0.311774 0.173318 0.258095 + 200 3 49 79 48 0.173318 0.258095 0.0966577 0.311774 0.136208 0.226957 + 200 3 48 79 47 0.136208 0.226957 0.0966577 0.311774 0.0885012 0.218545 + 200 3 47 79 46 0.0885012 0.218545 0.0966577 0.311774 0.0429797 0.235113 + 200 3 46 79 45 0.0429797 0.235113 0.0966577 0.311774 0.011841 0.272223 + 200 3 45 79 44 0.011841 0.272223 0.0966577 0.311774 0.003429 0.31993 + 200 3 44 79 43 0.003429 0.31993 0.0966577 0.311774 0.0199975 0.365452 + 200 3 43 79 42 0.0199975 0.365452 0.0966577 0.311774 0.057107 0.39659 + 200 3 42 79 41 0.057107 0.39659 0.0966577 0.311774 0.104814 0.405002 + 200 3 41 79 40 0.104814 0.405002 0.0966577 0.311774 0.150336 0.388434 + 200 3 40 79 38 0.150336 0.388434 0.0966577 0.311774 0.181474 0.351324 + 200 3 38 79 50 0.181474 0.351324 0.0966577 0.311774 0.189886 0.303617 + 200 3 37 80 36 0.190243 0.311774 0.0966577 0.311774 0.177705 0.264981 + 200 3 36 80 35 0.177705 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 35 80 34 0.14345 0.230727 0.0966577 0.311774 0.0966577 0.218189 + 200 3 34 80 33 0.0966577 0.218189 0.0966577 0.311774 0.0498653 0.230727 + 200 3 33 80 32 0.0498653 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 32 80 31 0.0156108 0.264981 0.0966577 0.311774 0.00307286 0.311774 + 200 3 31 80 30 0.00307286 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 30 80 29 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 29 80 28 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 28 80 27 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 27 80 25 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 25 80 37 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 24 81 23 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 23 81 22 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 22 81 21 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 21 81 20 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 20 81 19 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 19 81 18 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 18 81 17 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 17 81 16 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 16 81 15 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 15 81 14 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 14 81 12 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 12 81 24 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 +LEVEL 3 +POINTS 68 + -44.8775 -2.35996 -28.0789 + -49.3294 -2.36704 -24.0062 + -48.2859 -2.3635 -27.335 + -43.6104 -2.3635 -22.2242 + -46.9659 -2.35996 -21.4746 + -42.5658 -2.36704 -25.5 + -46.0032 118.175 -24.2494 + -45.4532 118.175 -24.4889 + -46.5212 118.175 -24.5153 + -46.4431 118.175 -25.0704 + -45.8904 118.175 -25.3107 + -45.375 118.175 -25.0402 + -18.3708 11.834 4.7463 + -45.9481 42.7779 -24.7796 + -36.6989 13.2327 14.6516 + -57.5486 13.6828 13.9438 + -75.5319 8.94129 2.8156 + -85.2601 13.776 -15.495 + -84.6214 13.5633 -36.4727 + -73.5255 11.834 -54.3056 + -55.0811 10.0823 -64.232 + -34.19 9.84617 -63.4499 + -16.5397 14.6696 -52.5665 + -6.59451 9.93943 -33.8996 + -7.30274 10.413 -12.969 + -21.0898 41.82 -48.9174 + -45.9481 70.7318 -24.7796 + -18.334 47.4883 -31.9405 + -12.7236 44.5039 -15.3442 + -26.1482 44.3621 -4.27098 + -37.4831 44.1822 8.88471 + -53.7672 41.1536 2.67448 + -70.6782 46.8012 -0.501719 + -73.6201 41.187 -17.8255 + -79.172 44.3957 -34.2188 + -65.7568 44.3621 -45.2979 + -54.4167 44.2904 -58.4433 + -38.3217 47.4554 -52.3008 + -61.8173 74.869 -7.91932 + -45.9481 98.1261 -24.7796 + -64.2425 68.6015 -19.3614 + -68.3076 73.7269 -30.1045 + -59.6375 73.2229 -37.9055 + -52.4384 72.6827 -46.9875 + -41.6359 77.7634 -43.3034 + -30.0195 71.4742 -41.575 + -27.7108 77.7317 -30.4133 + -23.5929 72.739 -19.429 + -32.2675 73.2229 -11.6634 + -39.4358 73.6707 -2.57806 + -50.4504 68.6324 -6.31052 + -42.1757 100.07 -13.9307 + -45.9481 120.539 -24.7796 + -47.7553 97.0951 -15.5166 + -53.5489 101.299 -15.9845 + -55.041 97.0641 -21.5528 + -57.3013 100.065 -26.813 + -53.1111 100.46 -30.9263 + -49.7296 100.841 -35.6244 + -44.22 103.823 -34.0623 + -38.3318 99.5794 -33.5577 + -36.8813 103.792 -28.1018 + -34.593 100.836 -22.7583 + -38.7939 100.46 -18.6426 + -45.9481 100.449 -24.7796 + -45.9481 73.1945 -24.7796 + -45.9481 44.333 -24.7796 + -45.9481 11.8175 -24.7796 +POLYGONS 116 + 200 3 0 1 2 0.0783653 0.291587 0.0783653 0.350448 0.0613737 0.321017 + 200 3 1 3 4 0.0783653 0.350448 0.12934 0.321017 0.112349 0.350448 + 200 3 0 3 1 0.0783653 0.291587 0.12934 0.321017 0.0783653 0.350448 + 200 3 5 3 0 0.112349 0.291587 0.12934 0.321017 0.0783653 0.291587 + 200 3 3 6 4 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 6 3 7 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 4 8 1 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 8 4 6 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 1 9 2 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 9 1 8 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 2 10 0 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 10 2 9 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 0 11 5 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 11 0 10 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 5 7 3 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 7 5 11 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 7 8 6 0.11132 0.320933 0.086818 0.306787 0.103153 0.306787 + 200 3 8 10 9 0.086818 0.306787 0.086818 0.335079 0.0786506 0.320933 + 200 3 7 10 8 0.11132 0.320933 0.086818 0.335079 0.086818 0.306787 + 200 3 11 10 7 0.103153 0.335079 0.086818 0.335079 0.11132 0.320933 + 200 3 12 13 14 0.560303 0.21959 0.480027 0.21959 0.549548 0.179452 + 200 3 14 13 15 0.549548 0.179452 0.480027 0.21959 0.520165 0.15007 + 200 3 15 13 16 0.520165 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 16 13 17 0.480027 0.139315 0.480027 0.21959 0.43989 0.15007 + 200 3 17 13 18 0.43989 0.15007 0.480027 0.21959 0.410507 0.179452 + 200 3 18 13 19 0.410507 0.179452 0.480027 0.21959 0.399752 0.21959 + 200 3 19 13 20 0.399752 0.21959 0.480027 0.21959 0.410507 0.179452 + 200 3 20 13 21 0.410507 0.179452 0.480027 0.21959 0.439889 0.15007 + 200 3 21 13 22 0.439889 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 22 13 23 0.480027 0.139315 0.480027 0.21959 0.520165 0.15007 + 200 3 23 13 24 0.520165 0.15007 0.480027 0.21959 0.549548 0.179452 + 200 3 24 13 12 0.549548 0.179452 0.480027 0.21959 0.560303 0.21959 + 200 3 25 26 27 0.560981 0.181957 0.480027 0.181957 0.550135 0.13665 + 200 3 27 26 28 0.550135 0.13665 0.480027 0.181957 0.520504 0.103482 + 200 3 28 26 29 0.520504 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 29 26 30 0.480027 0.0913424 0.480027 0.181957 0.43955 0.103482 + 200 3 30 26 31 0.43955 0.103482 0.480027 0.181957 0.409919 0.13665 + 200 3 31 26 32 0.409919 0.13665 0.480027 0.181957 0.399073 0.181957 + 200 3 32 26 33 0.399073 0.181957 0.480027 0.181957 0.409919 0.13665 + 200 3 33 26 34 0.409919 0.13665 0.480027 0.181957 0.43955 0.103482 + 200 3 34 26 35 0.43955 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 35 26 36 0.480027 0.0913424 0.480027 0.181957 0.520504 0.103482 + 200 3 36 26 37 0.520504 0.103482 0.480027 0.181957 0.550135 0.13665 + 200 3 37 26 25 0.550135 0.13665 0.480027 0.181957 0.560981 0.181957 + 200 3 38 39 40 0.540626 0.100802 0.476142 0.100802 0.531986 0.0671586 + 200 3 40 39 41 0.531986 0.0671586 0.476142 0.100802 0.508384 0.0425297 + 200 3 41 39 42 0.508384 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 42 39 43 0.476142 0.0335151 0.476142 0.100802 0.443901 0.0425297 + 200 3 43 39 44 0.443901 0.0425297 0.476142 0.100802 0.420298 0.0671586 + 200 3 44 39 45 0.420298 0.0671586 0.476142 0.100802 0.411659 0.100802 + 200 3 45 39 46 0.411659 0.100802 0.476142 0.100802 0.420298 0.0671586 + 200 3 46 39 47 0.420298 0.0671586 0.476142 0.100802 0.443901 0.0425297 + 200 3 47 39 48 0.443901 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 48 39 49 0.476142 0.0335151 0.476142 0.100802 0.508384 0.0425297 + 200 3 49 39 50 0.508384 0.0425297 0.476142 0.100802 0.531986 0.0671586 + 200 3 50 39 38 0.531986 0.0671586 0.476142 0.100802 0.540626 0.100802 + 200 3 51 52 53 0.487048 0.0371633 0.468862 0.0371633 0.484612 0.0197034 + 200 3 53 52 54 0.484612 0.0197034 0.468862 0.0371633 0.477955 0.00692183 + 200 3 54 52 55 0.477955 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 55 52 56 0.468862 0.00224346 0.468862 0.0371633 0.459769 0.00692183 + 200 3 56 52 57 0.459769 0.00692183 0.468862 0.0371633 0.453112 0.0197034 + 200 3 57 52 58 0.453112 0.0197034 0.468862 0.0371633 0.450676 0.0371633 + 200 3 58 52 59 0.450676 0.0371633 0.468862 0.0371633 0.453112 0.0197034 + 200 3 59 52 60 0.453112 0.0197034 0.468862 0.0371633 0.459769 0.00692183 + 200 3 60 52 61 0.459769 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 61 52 62 0.468862 0.00224346 0.468862 0.0371633 0.477955 0.00692183 + 200 3 62 52 63 0.477955 0.00692183 0.468862 0.0371633 0.484612 0.0197034 + 200 3 63 52 51 0.484612 0.0197034 0.468862 0.0371633 0.487048 0.0371633 + 200 3 63 64 62 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 62 64 61 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 61 64 60 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 60 64 59 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 59 64 58 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 58 64 57 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 57 64 56 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 56 64 55 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 55 64 54 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 54 64 53 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 53 64 51 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 51 64 63 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 + 200 3 50 65 49 0.162832 0.377948 0.0966577 0.311774 0.187054 0.335995 + 200 3 49 65 48 0.187054 0.335995 0.0966577 0.311774 0.187054 0.287552 + 200 3 48 65 47 0.187054 0.287552 0.0966577 0.311774 0.162832 0.245599 + 200 3 47 65 46 0.162832 0.245599 0.0966577 0.311774 0.120879 0.221378 + 200 3 46 65 45 0.120879 0.221378 0.0966577 0.311774 0.0724362 0.221378 + 200 3 45 65 44 0.0724362 0.221378 0.0966577 0.311774 0.0304832 0.245599 + 200 3 44 65 43 0.0304832 0.245599 0.0966577 0.311774 0.00626171 0.287552 + 200 3 43 65 42 0.00626171 0.287552 0.0966577 0.311774 0.00626171 0.335995 + 200 3 42 65 41 0.00626171 0.335995 0.0966577 0.311774 0.0304832 0.377948 + 200 3 41 65 40 0.0304832 0.377948 0.0966577 0.311774 0.0724362 0.40217 + 200 3 40 65 38 0.0724362 0.40217 0.0966577 0.311774 0.120879 0.40217 + 200 3 38 65 50 0.120879 0.40217 0.0966577 0.311774 0.162832 0.377948 + 200 3 37 66 36 0.190243 0.311774 0.0966577 0.311774 0.177705 0.264981 + 200 3 36 66 35 0.177705 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 35 66 34 0.14345 0.230727 0.0966577 0.311774 0.0966577 0.218189 + 200 3 34 66 33 0.0966577 0.218189 0.0966577 0.311774 0.0498653 0.230727 + 200 3 33 66 32 0.0498653 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 32 66 31 0.0156108 0.264981 0.0966577 0.311774 0.00307286 0.311774 + 200 3 31 66 30 0.00307286 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 30 66 29 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 29 66 28 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 28 66 27 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 27 66 25 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 25 66 37 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 24 67 23 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 23 67 22 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 22 67 21 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 21 67 20 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 20 67 19 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 19 67 18 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 18 67 17 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 17 67 16 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 16 67 15 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 15 67 14 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 14 67 12 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 12 67 24 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 +LEVEL 4 +POINTS 91 + 13.0294 -1.69587 -51.3588 + 17.7219 -1.70096 -50.9939 + 15.2697 -1.69842 -49.814 + 15.6886 -1.69842 -55.201 + 17.9041 -1.69587 -53.6894 + 13.2661 -1.70096 -54.05 + 15.8105 84.9208 -52.7588 + 15.3809 84.9208 -52.9444 + 15.9352 84.9208 -52.322 + 15.5774 84.9208 -52.0706 + 15.1459 84.9208 -52.2573 + 15.0253 84.9208 -52.695 + 17.5973 8.50393 -83.9515 + 15.4792 21.2302 -52.5075 + 33.0077 9.50902 -78.7921 + 43.7173 9.83252 -66.5397 + 46.9642 6.42524 -50.366 + 41.7203 9.89944 -35.0658 + 29.432 9.74661 -24.2485 + 13.361 8.50392 -21.0635 + -2.12333 7.24514 -26.2778 + -12.8127 7.07548 -38.5934 + -16.0216 10.5416 -54.447 + -10.6904 7.1425 -70.0607 + 1.6082 7.48283 -80.8132 + -11.518 19.4243 -53.8004 + 15.4792 33.9683 -52.5075 + -3.31751 23.4976 -64.4186 + 3.14468 21.353 -76.4598 + 16.6067 21.2511 -74.7157 + 30.1411 21.1218 -75.2717 + 35.2833 18.9455 -62.687 + 42.4878 23.0038 -51.3623 + 34.1889 18.9695 -40.4533 + 27.8111 21.2752 -28.5536 + 14.3508 21.2511 -30.2892 + 0.819507 21.1996 -29.7416 + -4.26054 23.474 -42.1825 + 34.7811 36.9189 -40.8703 + 15.4792 46.7065 -52.5075 + 24.293 35.2927 -36.2697 + 14.7467 33.9914 -30.0451 + 5.67281 32.6603 -36.702 + -4.35547 30.998 -41.8364 + -3.09178 35.4597 -52.9268 + -3.70374 30.9925 -64.3263 + 6.7237 32.7483 -68.7742 + 16.2116 33.9914 -74.9699 + 25.2314 35.205 -68.3391 + 35.2226 36.9249 -63.3554 + 34.0426 32.4404 -51.9917 + 33.5403 47.9098 -52.4555 + 15.4792 59.4446 -52.5075 + 28.3159 43.406 -44.9757 + 24.3638 47.089 -36.9345 + 15.2996 46.7269 -37.7146 + 6.28981 46.3387 -36.9743 + 2.63039 49.9897 -45.0905 + -2.57661 45.4703 -52.6279 + 2.55011 49.9669 -59.892 + 6.61143 46.3792 -68.0919 + 15.6579 46.7269 -67.2902 + 24.6531 47.0487 -68.05 + 28.3981 43.4281 -59.7871 + 27.0023 62.5537 -59.4868 + 15.4792 72.1827 -52.5075 + 26.6538 58.5106 -52.6686 + 27.4618 62.5261 -46.0424 + 21.167 56.5282 -42.9846 + 15.6415 59.4595 -39.0742 + 10.0781 62.3721 -42.7758 + 3.88972 56.3498 -45.636 + 4.30121 60.3543 -52.3039 + 3.58075 56.3226 -59.0956 + 9.69788 62.3821 -61.9577 + 15.3168 59.4595 -65.9408 + 20.9639 56.5178 -62.1853 + 19.6475 71.9108 -60.4385 + 15.4792 86.6193 -52.5075 + 21.7182 69.7728 -56.4154 + 24.5396 72.7938 -52.8662 + 22.1635 69.7505 -49.0485 + 20.3722 71.9067 -44.9575 + 15.7961 72.1909 -45.1516 + 11.318 72.4648 -44.5735 + 9.27109 74.6075 -48.5442 + 6.42012 71.558 -52.1668 + 8.75444 74.585 -55.9008 + 10.5782 72.4607 -60.0523 + 15.1614 72.1909 -59.8532 + 15.4792 8.49208 -52.5075 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.291587 0.0783653 0.350448 0.0613737 0.321017 + 200 3 1 3 4 0.0783653 0.350448 0.12934 0.321017 0.112349 0.350448 + 200 3 0 3 1 0.0783653 0.291587 0.12934 0.321017 0.0783653 0.350448 + 200 3 5 3 0 0.112349 0.291587 0.12934 0.321017 0.0783653 0.291587 + 200 3 3 6 4 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 6 3 7 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 4 8 1 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 8 4 6 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 1 9 2 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 9 1 8 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 2 10 0 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 10 2 9 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 0 11 5 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 11 0 10 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 5 7 3 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 7 5 11 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 7 8 6 0.11132 0.320933 0.086818 0.306787 0.103153 0.306787 + 200 3 8 10 9 0.086818 0.306787 0.086818 0.335079 0.0786506 0.320933 + 200 3 7 10 8 0.11132 0.320933 0.086818 0.335079 0.086818 0.306787 + 200 3 11 10 7 0.103153 0.335079 0.086818 0.335079 0.11132 0.320933 + 200 3 12 13 14 0.560303 0.21959 0.480027 0.21959 0.549548 0.179452 + 200 3 14 13 15 0.549548 0.179452 0.480027 0.21959 0.520165 0.15007 + 200 3 15 13 16 0.520165 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 16 13 17 0.480027 0.139315 0.480027 0.21959 0.43989 0.15007 + 200 3 17 13 18 0.43989 0.15007 0.480027 0.21959 0.410507 0.179452 + 200 3 18 13 19 0.410507 0.179452 0.480027 0.21959 0.399752 0.21959 + 200 3 19 13 20 0.399752 0.21959 0.480027 0.21959 0.410507 0.179452 + 200 3 20 13 21 0.410507 0.179452 0.480027 0.21959 0.439889 0.15007 + 200 3 21 13 22 0.439889 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 22 13 23 0.480027 0.139315 0.480027 0.21959 0.520165 0.15007 + 200 3 23 13 24 0.520165 0.15007 0.480027 0.21959 0.549548 0.179452 + 200 3 24 13 12 0.549548 0.179452 0.480027 0.21959 0.560303 0.21959 + 200 3 25 26 27 0.560981 0.181957 0.480027 0.181957 0.550135 0.13665 + 200 3 27 26 28 0.550135 0.13665 0.480027 0.181957 0.520504 0.103482 + 200 3 28 26 29 0.520504 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 29 26 30 0.480027 0.0913424 0.480027 0.181957 0.43955 0.103482 + 200 3 30 26 31 0.43955 0.103482 0.480027 0.181957 0.409919 0.13665 + 200 3 31 26 32 0.409919 0.13665 0.480027 0.181957 0.399073 0.181957 + 200 3 32 26 33 0.399073 0.181957 0.480027 0.181957 0.409919 0.13665 + 200 3 33 26 34 0.409919 0.13665 0.480027 0.181957 0.43955 0.103482 + 200 3 34 26 35 0.43955 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 35 26 36 0.480027 0.0913424 0.480027 0.181957 0.520504 0.103482 + 200 3 36 26 37 0.520504 0.103482 0.480027 0.181957 0.550135 0.13665 + 200 3 37 26 25 0.550135 0.13665 0.480027 0.181957 0.560981 0.181957 + 200 3 38 39 40 0.546441 0.140842 0.477807 0.140842 0.537246 0.0975931 + 200 3 40 39 41 0.537246 0.0975931 0.477807 0.140842 0.512124 0.0659329 + 200 3 41 39 42 0.512124 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 42 39 43 0.477807 0.0543445 0.477807 0.140842 0.44349 0.0659329 + 200 3 43 39 44 0.44349 0.0659329 0.477807 0.140842 0.418369 0.0975931 + 200 3 44 39 45 0.418369 0.0975931 0.477807 0.140842 0.409174 0.140842 + 200 3 45 39 46 0.409174 0.140842 0.477807 0.140842 0.418369 0.0975931 + 200 3 46 39 47 0.418369 0.0975931 0.477807 0.140842 0.44349 0.0659329 + 200 3 47 39 48 0.44349 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 48 39 49 0.477807 0.0543445 0.477807 0.140842 0.512124 0.0659329 + 200 3 49 39 50 0.512124 0.0659329 0.477807 0.140842 0.537246 0.0975931 + 200 3 50 39 38 0.537246 0.0975931 0.477807 0.140842 0.546441 0.140842 + 200 3 51 52 53 0.540626 0.100802 0.476142 0.100802 0.531986 0.0671586 + 200 3 53 52 54 0.531986 0.0671586 0.476142 0.100802 0.508384 0.0425297 + 200 3 54 52 55 0.508384 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 55 52 56 0.476142 0.0335151 0.476142 0.100802 0.443901 0.0425297 + 200 3 56 52 57 0.443901 0.0425297 0.476142 0.100802 0.420298 0.0671586 + 200 3 57 52 58 0.420298 0.0671586 0.476142 0.100802 0.411659 0.100802 + 200 3 58 52 59 0.411659 0.100802 0.476142 0.100802 0.420298 0.0671586 + 200 3 59 52 60 0.420298 0.0671586 0.476142 0.100802 0.443901 0.0425297 + 200 3 60 52 61 0.443901 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 61 52 62 0.476142 0.0335151 0.476142 0.100802 0.508384 0.0425297 + 200 3 62 52 63 0.508384 0.0425297 0.476142 0.100802 0.531986 0.0671586 + 200 3 63 52 51 0.531986 0.0671586 0.476142 0.100802 0.540626 0.100802 + 200 3 64 65 66 0.536889 0.0827199 0.478362 0.0827199 0.529048 0.0504009 + 200 3 66 65 67 0.529048 0.0504009 0.478362 0.0827199 0.507626 0.0267418 + 200 3 67 65 68 0.507626 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 68 65 69 0.478362 0.018082 0.478362 0.0827199 0.449099 0.0267418 + 200 3 69 65 70 0.449099 0.0267418 0.478362 0.0827199 0.427677 0.0504009 + 200 3 70 65 71 0.427677 0.0504009 0.478362 0.0827199 0.419836 0.0827196 + 200 3 71 65 72 0.419836 0.0827196 0.478362 0.0827199 0.427677 0.0504009 + 200 3 72 65 73 0.427677 0.0504009 0.478362 0.0827199 0.449099 0.0267418 + 200 3 73 65 74 0.449099 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 74 65 75 0.478362 0.018082 0.478362 0.0827199 0.507626 0.0267418 + 200 3 75 65 76 0.507626 0.0267418 0.478362 0.0827199 0.529048 0.0504009 + 200 3 76 65 64 0.529048 0.0504009 0.478362 0.0827199 0.536889 0.0827199 + 200 3 77 78 79 0.487048 0.0371633 0.468862 0.0371633 0.484612 0.0197034 + 200 3 79 78 80 0.484612 0.0197034 0.468862 0.0371633 0.477955 0.00692183 + 200 3 80 78 81 0.477955 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 81 78 82 0.468862 0.00224346 0.468862 0.0371633 0.459769 0.00692183 + 200 3 82 78 83 0.459769 0.00692183 0.468862 0.0371633 0.453112 0.0197034 + 200 3 83 78 84 0.453112 0.0197034 0.468862 0.0371633 0.450676 0.0371633 + 200 3 84 78 85 0.450676 0.0371633 0.468862 0.0371633 0.453112 0.0197034 + 200 3 85 78 86 0.453112 0.0197034 0.468862 0.0371633 0.459769 0.00692183 + 200 3 86 78 87 0.459769 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 87 78 88 0.468862 0.00224346 0.468862 0.0371633 0.477955 0.00692183 + 200 3 88 78 89 0.477955 0.00692183 0.468862 0.0371633 0.484612 0.0197034 + 200 3 89 78 77 0.484612 0.0197034 0.468862 0.0371633 0.487048 0.0371633 + 200 3 76 52 75 0.136208 0.39659 0.0966576 0.311774 0.173318 0.365452 + 200 3 75 52 74 0.173318 0.365452 0.0966576 0.311774 0.189886 0.31993 + 200 3 74 52 73 0.189886 0.31993 0.0966576 0.311774 0.181474 0.272223 + 200 3 73 52 72 0.181474 0.272223 0.0966576 0.311774 0.150336 0.235114 + 200 3 72 52 71 0.150336 0.235114 0.0966576 0.311774 0.104814 0.218545 + 200 3 71 52 70 0.104814 0.218545 0.0966576 0.311774 0.057107 0.226957 + 200 3 70 52 69 0.057107 0.226957 0.0966576 0.311774 0.0199974 0.258096 + 200 3 69 52 68 0.0199974 0.258096 0.0966576 0.311774 0.00342888 0.303617 + 200 3 68 52 67 0.00342888 0.303617 0.0966576 0.311774 0.011841 0.351324 + 200 3 67 52 66 0.011841 0.351324 0.0966576 0.311774 0.0429796 0.388434 + 200 3 66 52 64 0.0429796 0.388434 0.0966576 0.311774 0.0885012 0.405002 + 200 3 64 52 76 0.0885012 0.405002 0.0966576 0.311774 0.136208 0.39659 + 200 3 89 65 88 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 88 65 87 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 87 65 86 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 86 65 85 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 85 65 84 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 84 65 83 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 83 65 82 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 82 65 81 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 81 65 80 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 80 65 79 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 79 65 77 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 77 65 89 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 + 200 3 63 39 62 0.162832 0.377948 0.0966577 0.311774 0.187054 0.335995 + 200 3 62 39 61 0.187054 0.335995 0.0966577 0.311774 0.187054 0.287552 + 200 3 61 39 60 0.187054 0.287552 0.0966577 0.311774 0.162832 0.245599 + 200 3 60 39 59 0.162832 0.245599 0.0966577 0.311774 0.120879 0.221378 + 200 3 59 39 58 0.120879 0.221378 0.0966577 0.311774 0.0724362 0.221378 + 200 3 58 39 57 0.0724362 0.221378 0.0966577 0.311774 0.0304832 0.245599 + 200 3 57 39 56 0.0304832 0.245599 0.0966577 0.311774 0.00626171 0.287552 + 200 3 56 39 55 0.00626171 0.287552 0.0966577 0.311774 0.00626171 0.335995 + 200 3 55 39 54 0.00626171 0.335995 0.0966577 0.311774 0.0304832 0.377948 + 200 3 54 39 53 0.0304832 0.377948 0.0966577 0.311774 0.0724362 0.40217 + 200 3 53 39 51 0.0724362 0.40217 0.0966577 0.311774 0.120879 0.40217 + 200 3 51 39 63 0.120879 0.40217 0.0966577 0.311774 0.162832 0.377948 + 200 3 50 26 49 0.189886 0.303617 0.0966577 0.311774 0.173318 0.258095 + 200 3 49 26 48 0.173318 0.258095 0.0966577 0.311774 0.136208 0.226957 + 200 3 48 26 47 0.136208 0.226957 0.0966577 0.311774 0.0885012 0.218545 + 200 3 47 26 46 0.0885012 0.218545 0.0966577 0.311774 0.0429797 0.235113 + 200 3 46 26 45 0.0429797 0.235113 0.0966577 0.311774 0.011841 0.272223 + 200 3 45 26 44 0.011841 0.272223 0.0966577 0.311774 0.003429 0.31993 + 200 3 44 26 43 0.003429 0.31993 0.0966577 0.311774 0.0199975 0.365452 + 200 3 43 26 42 0.0199975 0.365452 0.0966577 0.311774 0.057107 0.39659 + 200 3 42 26 41 0.057107 0.39659 0.0966577 0.311774 0.104814 0.405002 + 200 3 41 26 40 0.104814 0.405002 0.0966577 0.311774 0.150336 0.388434 + 200 3 40 26 38 0.150336 0.388434 0.0966577 0.311774 0.181474 0.351324 + 200 3 38 26 50 0.181474 0.351324 0.0966577 0.311774 0.189886 0.303617 + 200 3 37 13 36 0.190243 0.311774 0.0966577 0.311774 0.177705 0.264981 + 200 3 36 13 35 0.177705 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 35 13 34 0.14345 0.230727 0.0966577 0.311774 0.0966577 0.218189 + 200 3 34 13 33 0.0966577 0.218189 0.0966577 0.311774 0.0498653 0.230727 + 200 3 33 13 32 0.0498653 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 32 13 31 0.0156108 0.264981 0.0966577 0.311774 0.00307286 0.311774 + 200 3 31 13 30 0.00307286 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 30 13 29 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 29 13 28 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 28 13 27 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 27 13 25 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 25 13 37 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 24 90 23 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 23 90 22 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 22 90 21 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 21 90 20 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 20 90 19 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 19 90 18 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 18 90 17 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 17 90 16 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 16 90 15 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 15 90 14 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 14 90 12 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 12 90 24 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 diff --git a/data/base/features/mistree3.pie b/data/base/features/mistree3.pie index 69a12ac74d5..2bc30a0fbcd 100644 --- a/data/base/features/mistree3.pie +++ b/data/base/features/mistree3.pie @@ -1,31 +1,262 @@ -PIE 2 +PIE 3 TYPE 200 -TEXTURE 0 page-30-features-rockies.png 256 256 +TEXTURE 0 page-30-features-rockies.png 0 0 LEVELS 1 LEVEL 1 -POINTS 12 - 37 10 30 - -29 10 36 - -35 10 -29 - 31 10 -34 - -41 0 3 - 38 0 -3 - 38 102 -3 - -41 102 3 - -4 0 -40 - 2 0 39 - 2 102 39 - -4 102 -40 -POLYGONS 12 - 200 3 0 1 2 0 105 46 105 46 53 - 200 3 0 2 3 0 105 46 53 0 53 - 200 3 3 2 1 0 53 46 53 46 105 - 200 3 3 1 0 0 53 46 105 0 105 - 200 3 4 5 6 99 72 147 72 147 0 - 200 3 4 6 7 99 72 147 0 99 0 - 200 3 7 6 5 99 0 147 0 147 72 - 200 3 7 5 4 99 0 147 72 99 72 - 200 3 8 9 10 99 72 147 72 147 0 - 200 3 8 10 11 99 72 147 0 99 0 - 200 3 11 10 9 99 0 147 0 147 72 - 200 3 11 9 8 99 0 147 72 99 72 \ No newline at end of file +POINTS 91 + 2.90364 -1.99701 -0.772132 + -2.15228 -2.00299 -2.09643 + 0.760145 -2 -2.9021 + -0.760145 -2 2.9021 + -2.88302 -1.99701 0.813222 + 2.11416 -2.00299 2.12213 + -0.411667 100 0.209242 + 0.0211561 100 0.496791 + -0.461716 100 -0.292696 + -0.0211576 100 -0.496792 + 0.413501 100 -0.20765 + 0.458996 100 0.29447 + -8.51682 10.014 33.9438 + -1.89872e-06 25 -4.29452e-07 + -24.3395 11.1975 25.266 + -33.6261 11.5785 9.76441 + -33.9841 7.56615 -8.55049 + -25.2357 11.6573 -24.2361 + -9.67352 11.4773 -33.6332 + 8.51682 10.0139 -33.9438 + 24.4095 8.53164 -25.1915 + 33.6615 8.33185 -9.62475 + 34.0411 12.4135 8.3328 + 25.1355 8.41077 24.3438 + 9.57486 8.81153 33.6681 + 29.2472 22.8734 6.73792 + -4.37363e-06 40 -8.21908e-07 + 18.1914 27.67 16.7238 + 8.75451 25.1446 28.6077 + -5.61266 25.0246 24.0464 + -20.5125 24.8723 21.9845 + -23.6496 22.3096 7.21778 + -29.2889 27.0885 -6.57879 + -18.0682 22.3378 -16.8631 + -8.75145 25.053 -28.6089 + 5.61551 25.0246 -24.0573 + 20.5104 24.9639 -21.9868 + 23.6079 27.6422 -7.38949 + -18.7975 43.4745 -16.5242 + -7.71977e-06 55 -1.16543e-06 + -6.42882 41.5595 -19.483 + 5.23099 40.0271 -24.4021 + 13.8338 38.4597 -15.3378 + 23.7799 36.5023 -7.74893 + 20.2114 41.7562 4.12127 + 18.6316 36.4958 16.6991 + 6.35934 38.5633 19.503 + -5.23098 40.0271 24.4021 + -13.7798 41.4562 15.377 + -23.7152 43.4816 7.9602 + -20.1842 38.2008 -4.22516 + -19.7267 56.417 -3.61925 + -1.18949e-05 70 -1.37002e-06 + -12.5423 51.1134 -10.7626 + -6.63736 55.4505 -18.7705 + 3.114 55.0241 -16.1301 + 13.1059 54.567 -15.162 + 15.504 58.8662 -5.57087 + 19.7074 53.5443 3.69299 + 12.6722 58.8394 10.6198 + 6.61661 54.6146 18.7796 + -3.11113 55.024 16.1191 + -13.0909 55.403 15.1751 + -15.5535 51.1395 5.4069 + -13.969 73.6612 5.35404 + -1.68735e-05 85 -1.35738e-06 + -12.2433 68.9002 -2.02811 + -11.8192 73.6287 -9.42847 + -4.33721 66.5658 -11.5284 + 2.47226 70.0175 -14.7118 + 7.82178 73.4473 -9.56931 + 14.0202 66.3556 -5.22313 + 12.2553 71.0713 1.98224 + 11.703 66.3236 9.54632 + 4.45371 73.4591 11.4674 + -2.47225 70.0175 14.7118 + -7.90254 66.5535 9.49393 + -6.11951 84.6798 7.84469 + -2.34669e-05 102 -9.91315e-07 + -7.58876 82.1621 3.03986 + -9.97193 85.7196 -1.39517 + -6.62229 82.1359 -5.0984 + -3.8579 84.6749 -9.21572 + 1.10455 85.0097 -8.10093 + 6.11224 85.3322 -7.84942 + 7.56585 87.8554 -3.10655 + 9.96682 84.2643 1.41449 + 6.67937 87.8289 5.03462 + 3.86752 85.3273 9.2115 + -1.10168 85.0097 8.09001 + -4.73216e-07 10 -1.01826e-06 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.291587 0.0783653 0.350448 0.0613737 0.321017 + 200 3 1 3 4 0.0783653 0.350448 0.12934 0.321017 0.112349 0.350448 + 200 3 0 3 1 0.0783653 0.291587 0.12934 0.321017 0.0783653 0.350448 + 200 3 5 3 0 0.112349 0.291587 0.12934 0.321017 0.0783653 0.291587 + 200 3 3 6 4 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 6 3 7 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 4 8 1 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 8 4 6 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 1 9 2 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 9 1 8 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 2 10 0 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 10 2 9 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 0 11 5 0.479049 0.285563 0.470084 0.0303091 0.470137 0.285563 + 200 3 11 0 10 0.470084 0.0303091 0.479049 0.285563 0.474094 0.0303091 + 200 3 5 7 3 0.470137 0.285563 0.474094 0.0303091 0.479049 0.285563 + 200 3 7 5 11 0.474094 0.0303091 0.470137 0.285563 0.470084 0.0303091 + 200 3 7 8 6 0.11132 0.320933 0.086818 0.306787 0.103153 0.306787 + 200 3 8 10 9 0.086818 0.306787 0.086818 0.335079 0.0786506 0.320933 + 200 3 7 10 8 0.11132 0.320933 0.086818 0.335079 0.086818 0.306787 + 200 3 11 10 7 0.103153 0.335079 0.086818 0.335079 0.11132 0.320933 + 200 3 12 13 14 0.560303 0.21959 0.480027 0.21959 0.549548 0.179452 + 200 3 14 13 15 0.549548 0.179452 0.480027 0.21959 0.520165 0.15007 + 200 3 15 13 16 0.520165 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 16 13 17 0.480027 0.139315 0.480027 0.21959 0.43989 0.15007 + 200 3 17 13 18 0.43989 0.15007 0.480027 0.21959 0.410507 0.179452 + 200 3 18 13 19 0.410507 0.179452 0.480027 0.21959 0.399752 0.21959 + 200 3 19 13 20 0.399752 0.21959 0.480027 0.21959 0.410507 0.179452 + 200 3 20 13 21 0.410507 0.179452 0.480027 0.21959 0.439889 0.15007 + 200 3 21 13 22 0.439889 0.15007 0.480027 0.21959 0.480027 0.139315 + 200 3 22 13 23 0.480027 0.139315 0.480027 0.21959 0.520165 0.15007 + 200 3 23 13 24 0.520165 0.15007 0.480027 0.21959 0.549548 0.179452 + 200 3 24 13 12 0.549548 0.179452 0.480027 0.21959 0.560303 0.21959 + 200 3 25 26 27 0.560981 0.181957 0.480027 0.181957 0.550135 0.13665 + 200 3 27 26 28 0.550135 0.13665 0.480027 0.181957 0.520504 0.103482 + 200 3 28 26 29 0.520504 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 29 26 30 0.480027 0.0913424 0.480027 0.181957 0.43955 0.103482 + 200 3 30 26 31 0.43955 0.103482 0.480027 0.181957 0.409919 0.13665 + 200 3 31 26 32 0.409919 0.13665 0.480027 0.181957 0.399073 0.181957 + 200 3 32 26 33 0.399073 0.181957 0.480027 0.181957 0.409919 0.13665 + 200 3 33 26 34 0.409919 0.13665 0.480027 0.181957 0.43955 0.103482 + 200 3 34 26 35 0.43955 0.103482 0.480027 0.181957 0.480027 0.0913424 + 200 3 35 26 36 0.480027 0.0913424 0.480027 0.181957 0.520504 0.103482 + 200 3 36 26 37 0.520504 0.103482 0.480027 0.181957 0.550135 0.13665 + 200 3 37 26 25 0.550135 0.13665 0.480027 0.181957 0.560981 0.181957 + 200 3 38 39 40 0.546441 0.140842 0.477807 0.140842 0.537246 0.0975931 + 200 3 40 39 41 0.537246 0.0975931 0.477807 0.140842 0.512124 0.0659329 + 200 3 41 39 42 0.512124 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 42 39 43 0.477807 0.0543445 0.477807 0.140842 0.44349 0.0659329 + 200 3 43 39 44 0.44349 0.0659329 0.477807 0.140842 0.418369 0.0975931 + 200 3 44 39 45 0.418369 0.0975931 0.477807 0.140842 0.409174 0.140842 + 200 3 45 39 46 0.409174 0.140842 0.477807 0.140842 0.418369 0.0975931 + 200 3 46 39 47 0.418369 0.0975931 0.477807 0.140842 0.44349 0.0659329 + 200 3 47 39 48 0.44349 0.0659329 0.477807 0.140842 0.477807 0.0543445 + 200 3 48 39 49 0.477807 0.0543445 0.477807 0.140842 0.512124 0.0659329 + 200 3 49 39 50 0.512124 0.0659329 0.477807 0.140842 0.537246 0.0975931 + 200 3 50 39 38 0.537246 0.0975931 0.477807 0.140842 0.546441 0.140842 + 200 3 51 52 53 0.540626 0.100802 0.476142 0.100802 0.531986 0.0671586 + 200 3 53 52 54 0.531986 0.0671586 0.476142 0.100802 0.508384 0.0425297 + 200 3 54 52 55 0.508384 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 55 52 56 0.476142 0.0335151 0.476142 0.100802 0.443901 0.0425297 + 200 3 56 52 57 0.443901 0.0425297 0.476142 0.100802 0.420298 0.0671586 + 200 3 57 52 58 0.420298 0.0671586 0.476142 0.100802 0.411659 0.100802 + 200 3 58 52 59 0.411659 0.100802 0.476142 0.100802 0.420298 0.0671586 + 200 3 59 52 60 0.420298 0.0671586 0.476142 0.100802 0.443901 0.0425297 + 200 3 60 52 61 0.443901 0.0425297 0.476142 0.100802 0.476142 0.0335151 + 200 3 61 52 62 0.476142 0.0335151 0.476142 0.100802 0.508384 0.0425297 + 200 3 62 52 63 0.508384 0.0425297 0.476142 0.100802 0.531986 0.0671586 + 200 3 63 52 51 0.531986 0.0671586 0.476142 0.100802 0.540626 0.100802 + 200 3 64 65 66 0.536889 0.0827199 0.478362 0.0827199 0.529048 0.0504009 + 200 3 66 65 67 0.529048 0.0504009 0.478362 0.0827199 0.507626 0.0267418 + 200 3 67 65 68 0.507626 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 68 65 69 0.478362 0.018082 0.478362 0.0827199 0.449099 0.0267418 + 200 3 69 65 70 0.449099 0.0267418 0.478362 0.0827199 0.427677 0.0504009 + 200 3 70 65 71 0.427677 0.0504009 0.478362 0.0827199 0.419836 0.0827196 + 200 3 71 65 72 0.419836 0.0827196 0.478362 0.0827199 0.427677 0.0504009 + 200 3 72 65 73 0.427677 0.0504009 0.478362 0.0827199 0.449099 0.0267418 + 200 3 73 65 74 0.449099 0.0267418 0.478362 0.0827199 0.478362 0.018082 + 200 3 74 65 75 0.478362 0.018082 0.478362 0.0827199 0.507626 0.0267418 + 200 3 75 65 76 0.507626 0.0267418 0.478362 0.0827199 0.529048 0.0504009 + 200 3 76 65 64 0.529048 0.0504009 0.478362 0.0827199 0.536889 0.0827199 + 200 3 77 78 79 0.487048 0.0371633 0.468862 0.0371633 0.484612 0.0197034 + 200 3 79 78 80 0.484612 0.0197034 0.468862 0.0371633 0.477955 0.00692183 + 200 3 80 78 81 0.477955 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 81 78 82 0.468862 0.00224346 0.468862 0.0371633 0.459769 0.00692183 + 200 3 82 78 83 0.459769 0.00692183 0.468862 0.0371633 0.453112 0.0197034 + 200 3 83 78 84 0.453112 0.0197034 0.468862 0.0371633 0.450676 0.0371633 + 200 3 84 78 85 0.450676 0.0371633 0.468862 0.0371633 0.453112 0.0197034 + 200 3 85 78 86 0.453112 0.0197034 0.468862 0.0371633 0.459769 0.00692183 + 200 3 86 78 87 0.459769 0.00692183 0.468862 0.0371633 0.468862 0.00224346 + 200 3 87 78 88 0.468862 0.00224346 0.468862 0.0371633 0.477955 0.00692183 + 200 3 88 78 89 0.477955 0.00692183 0.468862 0.0371633 0.484612 0.0197034 + 200 3 89 78 77 0.484612 0.0197034 0.468862 0.0371633 0.487048 0.0371633 + 200 3 76 52 75 0.136208 0.39659 0.0966576 0.311774 0.173318 0.365452 + 200 3 75 52 74 0.173318 0.365452 0.0966576 0.311774 0.189886 0.31993 + 200 3 74 52 73 0.189886 0.31993 0.0966576 0.311774 0.181474 0.272223 + 200 3 73 52 72 0.181474 0.272223 0.0966576 0.311774 0.150336 0.235114 + 200 3 72 52 71 0.150336 0.235114 0.0966576 0.311774 0.104814 0.218545 + 200 3 71 52 70 0.104814 0.218545 0.0966576 0.311774 0.057107 0.226957 + 200 3 70 52 69 0.057107 0.226957 0.0966576 0.311774 0.0199974 0.258096 + 200 3 69 52 68 0.0199974 0.258096 0.0966576 0.311774 0.00342888 0.303617 + 200 3 68 52 67 0.00342888 0.303617 0.0966576 0.311774 0.011841 0.351324 + 200 3 67 52 66 0.011841 0.351324 0.0966576 0.311774 0.0429796 0.388434 + 200 3 66 52 64 0.0429796 0.388434 0.0966576 0.311774 0.0885012 0.405002 + 200 3 64 52 76 0.0885012 0.405002 0.0966576 0.311774 0.136208 0.39659 + 200 3 89 65 88 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 88 65 87 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 87 65 86 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 86 65 85 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 85 65 84 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 84 65 83 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 83 65 82 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 82 65 81 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 81 65 80 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 80 65 79 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 79 65 77 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 77 65 89 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 + 200 3 63 39 62 0.162832 0.377948 0.0966577 0.311774 0.187054 0.335995 + 200 3 62 39 61 0.187054 0.335995 0.0966577 0.311774 0.187054 0.287552 + 200 3 61 39 60 0.187054 0.287552 0.0966577 0.311774 0.162832 0.245599 + 200 3 60 39 59 0.162832 0.245599 0.0966577 0.311774 0.120879 0.221378 + 200 3 59 39 58 0.120879 0.221378 0.0966577 0.311774 0.0724362 0.221378 + 200 3 58 39 57 0.0724362 0.221378 0.0966577 0.311774 0.0304832 0.245599 + 200 3 57 39 56 0.0304832 0.245599 0.0966577 0.311774 0.00626171 0.287552 + 200 3 56 39 55 0.00626171 0.287552 0.0966577 0.311774 0.00626171 0.335995 + 200 3 55 39 54 0.00626171 0.335995 0.0966577 0.311774 0.0304832 0.377948 + 200 3 54 39 53 0.0304832 0.377948 0.0966577 0.311774 0.0724362 0.40217 + 200 3 53 39 51 0.0724362 0.40217 0.0966577 0.311774 0.120879 0.40217 + 200 3 51 39 63 0.120879 0.40217 0.0966577 0.311774 0.162832 0.377948 + 200 3 50 26 49 0.189886 0.303617 0.0966577 0.311774 0.173318 0.258095 + 200 3 49 26 48 0.173318 0.258095 0.0966577 0.311774 0.136208 0.226957 + 200 3 48 26 47 0.136208 0.226957 0.0966577 0.311774 0.0885012 0.218545 + 200 3 47 26 46 0.0885012 0.218545 0.0966577 0.311774 0.0429797 0.235113 + 200 3 46 26 45 0.0429797 0.235113 0.0966577 0.311774 0.011841 0.272223 + 200 3 45 26 44 0.011841 0.272223 0.0966577 0.311774 0.003429 0.31993 + 200 3 44 26 43 0.003429 0.31993 0.0966577 0.311774 0.0199975 0.365452 + 200 3 43 26 42 0.0199975 0.365452 0.0966577 0.311774 0.057107 0.39659 + 200 3 42 26 41 0.057107 0.39659 0.0966577 0.311774 0.104814 0.405002 + 200 3 41 26 40 0.104814 0.405002 0.0966577 0.311774 0.150336 0.388434 + 200 3 40 26 38 0.150336 0.388434 0.0966577 0.311774 0.181474 0.351324 + 200 3 38 26 50 0.181474 0.351324 0.0966577 0.311774 0.189886 0.303617 + 200 3 37 13 36 0.190243 0.311774 0.0966577 0.311774 0.177705 0.264981 + 200 3 36 13 35 0.177705 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 35 13 34 0.14345 0.230727 0.0966577 0.311774 0.0966577 0.218189 + 200 3 34 13 33 0.0966577 0.218189 0.0966577 0.311774 0.0498653 0.230727 + 200 3 33 13 32 0.0498653 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 32 13 31 0.0156108 0.264981 0.0966577 0.311774 0.00307286 0.311774 + 200 3 31 13 30 0.00307286 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 30 13 29 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 29 13 28 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 28 13 27 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 27 13 25 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 25 13 37 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 24 90 23 0.177704 0.264981 0.0966577 0.311774 0.14345 0.230727 + 200 3 23 90 22 0.14345 0.230727 0.0966577 0.311774 0.0966576 0.218189 + 200 3 22 90 21 0.0966576 0.218189 0.0966577 0.311774 0.0498652 0.230727 + 200 3 21 90 20 0.0498652 0.230727 0.0966577 0.311774 0.0156108 0.264981 + 200 3 20 90 19 0.0156108 0.264981 0.0966577 0.311774 0.00307285 0.311774 + 200 3 19 90 18 0.00307285 0.311774 0.0966577 0.311774 0.0156108 0.358566 + 200 3 18 90 17 0.0156108 0.358566 0.0966577 0.311774 0.0498653 0.39282 + 200 3 17 90 16 0.0498653 0.39282 0.0966577 0.311774 0.0966577 0.405358 + 200 3 16 90 15 0.0966577 0.405358 0.0966577 0.311774 0.14345 0.39282 + 200 3 15 90 14 0.14345 0.39282 0.0966577 0.311774 0.177705 0.358566 + 200 3 14 90 12 0.177705 0.358566 0.0966577 0.311774 0.190243 0.311774 + 200 3 12 90 24 0.190243 0.311774 0.0966577 0.311774 0.177704 0.264981 diff --git a/data/base/features/mitrees.pie b/data/base/features/mitrees.pie index 264a46ef77b..44efe80e182 100644 --- a/data/base/features/mitrees.pie +++ b/data/base/features/mitrees.pie @@ -1,127 +1,1157 @@ -PIE 2 +PIE 3 TYPE 200 -TEXTURE 0 page-30-features-rockies.png 256 256 -LEVELS 1 +TEXTURE 0 page-30-features-rockies.png 0 0 +LEVELS 5 LEVEL 1 -POINTS 60 - -34 10 5 - -81 10 -42 - -35 10 -88 - 12 10 -41 - -63 0 -73 - -6 0 -15 - -6 102 -15 - -63 102 -73 - -6 0 -73 - -63 0 -15 - -63 102 -15 - -6 102 -73 - -30 0 -20 - 45 0 7 - 45 102 7 - -30 102 -20 - 21 0 -44 - -6 0 31 - -6 102 31 - 21 102 -44 - 29 10 38 - -33 10 15 - -11 10 -46 - 52 10 -23 - -31 0 0 - -31 0 80 - -31 102 80 - -31 102 0 - 3 10 73 - -63 10 73 - -63 10 8 - 3 10 8 - -72 0 39 - 8 0 39 - 8 102 39 - -72 102 39 - 101 10 42 - 43 10 76 - 10 10 19 - 68 10 -14 - 17 0 51 - 88 0 10 - 88 102 10 - 17 102 51 - 32 0 -4 - 73 0 65 - 73 102 65 - 32 102 -4 - 61 0 -88 - 27 0 -15 - 27 102 -15 - 61 102 -88 - 7 0 -69 - 80 0 -35 - 80 102 -35 - 7 102 -69 - 62 10 -6 - 1 10 -34 - 29 10 -94 - 90 10 -65 -POLYGONS 60 - 200 3 0 1 2 0 52 46 52 46 0 - 200 3 0 2 3 0 52 46 0 0 0 - 200 3 3 2 1 0 0 46 0 46 52 - 200 3 3 1 0 0 0 46 52 0 52 - 200 3 4 5 6 49 72 96 72 96 0 - 200 3 4 6 7 49 72 96 0 49 0 - 200 3 7 6 5 49 0 96 0 96 72 - 200 3 7 5 4 49 0 96 72 49 72 - 200 3 8 9 10 49 72 96 72 96 0 - 200 3 8 10 11 49 72 96 0 49 0 - 200 3 11 10 9 49 0 96 0 96 72 - 200 3 11 9 8 49 0 96 72 49 72 - 200 3 12 13 14 49 72 96 72 96 0 - 200 3 12 14 15 49 72 96 0 49 0 - 200 3 15 14 13 49 0 96 0 96 72 - 200 3 15 13 12 49 0 96 72 49 72 - 200 3 16 17 18 49 72 96 72 96 0 - 200 3 16 18 19 49 72 96 0 49 0 - 200 3 19 18 17 49 0 96 0 96 72 - 200 3 19 17 16 49 0 96 72 49 72 - 200 3 20 21 22 0 52 46 52 46 0 - 200 3 20 22 23 0 52 46 0 0 0 - 200 3 23 22 21 0 0 46 0 46 52 - 200 3 23 21 20 0 0 46 52 0 52 - 200 3 24 25 26 49 72 96 72 96 0 - 200 3 24 26 27 49 72 96 0 49 0 - 200 3 27 26 25 49 0 96 0 96 72 - 200 3 27 25 24 49 0 96 72 49 72 - 200 3 28 29 30 0 52 46 52 46 0 - 200 3 28 30 31 0 52 46 0 0 0 - 200 3 31 30 29 0 0 46 0 46 52 - 200 3 31 29 28 0 0 46 52 0 52 - 200 3 32 33 34 49 72 96 72 96 0 - 200 3 32 34 35 49 72 96 0 49 0 - 200 3 35 34 33 49 0 96 0 96 72 - 200 3 35 33 32 49 0 96 72 49 72 - 200 3 36 37 38 0 52 46 52 46 0 - 200 3 36 38 39 0 52 46 0 0 0 - 200 3 39 38 37 0 0 46 0 46 52 - 200 3 39 37 36 0 0 46 52 0 52 - 200 3 40 41 42 49 72 96 72 96 0 - 200 3 40 42 43 49 72 96 0 49 0 - 200 3 43 42 41 49 0 96 0 96 72 - 200 3 43 41 40 49 0 96 72 49 72 - 200 3 44 45 46 49 72 96 72 96 0 - 200 3 44 46 47 49 72 96 0 49 0 - 200 3 47 46 45 49 0 96 0 96 72 - 200 3 47 45 44 49 0 96 72 49 72 - 200 3 48 49 50 49 72 96 72 96 0 - 200 3 48 50 51 49 72 96 0 49 0 - 200 3 51 50 49 49 0 96 0 96 72 - 200 3 51 49 48 49 0 96 72 49 72 - 200 3 52 53 54 49 72 96 72 96 0 - 200 3 52 54 55 49 72 96 0 49 0 - 200 3 55 54 53 49 0 96 0 96 72 - 200 3 55 53 52 49 0 96 72 49 72 - 200 3 56 57 58 0 52 46 52 46 0 - 200 3 56 58 59 0 52 46 0 0 0 - 200 3 59 58 57 0 0 46 0 46 52 - 200 3 59 57 56 0 0 46 52 0 52 \ No newline at end of file +POINTS 91 + 10.5351 -2.38962 -6.8987 + 6.18946 -2.39679 -8.03694 + 8.69272 -2.39321 -8.72943 + 7.38602 -2.39321 -3.74066 + 5.56138 -2.38962 -5.53607 + 9.85651 -2.39679 -4.41105 + 7.68554 119.66 -6.0552 + 8.05755 119.66 -5.80805 + 7.64252 119.66 -6.48662 + 8.02118 119.66 -6.66204 + 8.39478 119.66 -6.41352 + 8.43388 119.66 -5.98194 + 0.719072 11.9827 22.94 + 8.03937 29.9151 -6.23504 + -12.8807 13.399 15.4814 + -20.8626 13.8548 2.15757 + -21.1703 9.05368 -13.5843 + -13.651 13.9491 -27.0662 + -0.27512 13.7338 -35.1431 + 15.3597 11.9827 -35.4101 + 29.0195 10.209 -27.8874 + 36.9718 9.96993 -14.5076 + 37.298 14.854 0.927087 + 29.6436 10.0644 14.6887 + 16.2691 10.5439 22.703 + 33.1776 27.3704 -0.44373 + 8.03936 47.8641 -6.23504 + 23.675 33.11 8.13926 + 15.564 30.0881 18.3535 + 3.21523 29.9445 14.4331 + -9.59134 29.7623 12.6608 + -12.2877 26.6957 -0.0312896 + -17.1347 32.4142 -11.8896 + -7.49042 26.7295 -20.729 + 0.517406 29.9785 -30.8247 + 12.866 29.9445 -26.9126 + 25.6682 29.8719 -25.1329 + 28.3306 33.0767 -12.5864 + -8.11728 52.0217 -20.4377 + 8.03936 65.8132 -6.23504 + 2.51373 49.7303 -22.9808 + 12.5355 47.8966 -27.2089 + 19.9297 46.021 -19.4181 + 28.4784 43.6787 -12.8953 + 25.4113 49.9656 -2.69277 + 24.0535 43.671 8.11804 + 13.5053 46.145 10.528 + 3.54329 47.8966 14.7389 + -3.80452 49.6067 6.98161 + -12.344 52.0302 0.606828 + -9.30912 45.7112 -9.86661 + -8.91594 67.5087 -9.34582 + 8.03936 83.7622 -6.23504 + -2.74083 61.1625 -15.4856 + 2.33449 66.3523 -22.3685 + 10.7159 65.842 -20.099 + 19.304 65.295 -19.2669 + 21.3652 70.4395 -11.0233 + 24.9781 64.0713 -3.06088 + 18.9312 70.4074 2.89281 + 13.7264 65.352 9.90617 + 5.36532 65.842 7.61952 + -3.2124 66.2954 6.80812 + -5.32901 61.1938 -1.58776 + -3.96716 88.1433 -1.63319 + 8.03935 101.711 -6.23504 + -2.48388 82.4462 -7.97822 + -2.11939 88.1044 -14.3389 + 4.31149 79.6529 -16.1438 + 10.1643 83.7832 -18.8799 + 14.7623 87.8873 -14.46 + 20.0898 79.4014 -10.7244 + 18.5729 85.0441 -4.53128 + 18.0982 79.3631 1.97011 + 11.8674 87.9015 3.6213 + 5.91444 83.7832 6.40986 + 1.24705 79.6382 1.92509 + 2.77959 101.328 0.507552 + 8.03935 122.054 -6.23504 + 1.51676 98.3155 -3.62226 + -0.531606 102.572 -7.4342 + 2.34745 98.2841 -10.6172 + 4.72346 101.322 -14.156 + 8.98874 101.723 -13.1979 + 13.2929 102.109 -12.9817 + 14.5423 105.128 -8.90515 + 16.6059 100.831 -5.01928 + 13.7804 105.096 -1.90774 + 11.3635 102.103 1.68234 + 7.09246 101.723 0.718401 + 8.03937 11.966 -6.23504 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.0791578 0.0783653 0.138018 0.0613737 0.108588 + 200 3 1 3 4 0.0783653 0.138018 0.12934 0.108588 0.112349 0.138018 + 200 3 0 3 1 0.0783653 0.0791578 0.12934 0.108588 0.0783653 0.138018 + 200 3 5 3 0 0.112349 0.0791578 0.12934 0.108588 0.0783653 0.0791578 + 200 3 3 6 4 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 6 3 7 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 4 8 1 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 8 4 6 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 1 9 2 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 9 1 8 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 2 10 0 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 10 2 9 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 0 11 5 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 11 0 10 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 5 7 3 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 7 5 11 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 7 8 6 0.11132 0.108504 0.086818 0.0943576 0.103153 0.0943576 + 200 3 8 10 9 0.086818 0.0943576 0.086818 0.12265 0.0786506 0.108504 + 200 3 7 10 8 0.11132 0.108504 0.086818 0.12265 0.086818 0.0943576 + 200 3 11 10 7 0.103153 0.12265 0.086818 0.12265 0.11132 0.108504 + 200 3 12 13 14 0.36259 0.239765 0.282315 0.239765 0.351835 0.199627 + 200 3 14 13 15 0.351835 0.199627 0.282315 0.239765 0.322452 0.170244 + 200 3 15 13 16 0.322452 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 16 13 17 0.282315 0.159489 0.282315 0.239765 0.242177 0.170244 + 200 3 17 13 18 0.242177 0.170244 0.282315 0.239765 0.212794 0.199627 + 200 3 18 13 19 0.212794 0.199627 0.282315 0.239765 0.202039 0.239765 + 200 3 19 13 20 0.202039 0.239765 0.282315 0.239765 0.212794 0.199627 + 200 3 20 13 21 0.212794 0.199627 0.282315 0.239765 0.242177 0.170244 + 200 3 21 13 22 0.242177 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 22 13 23 0.282315 0.159489 0.282315 0.239765 0.322452 0.170244 + 200 3 23 13 24 0.322452 0.170244 0.282315 0.239765 0.351835 0.199627 + 200 3 24 13 12 0.351835 0.199627 0.282315 0.239765 0.36259 0.239765 + 200 3 25 26 27 0.363268 0.20527 0.282315 0.20527 0.352423 0.159963 + 200 3 27 26 28 0.352423 0.159963 0.282315 0.20527 0.322791 0.126795 + 200 3 28 26 29 0.322791 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 29 26 30 0.282315 0.114655 0.282315 0.20527 0.241838 0.126795 + 200 3 30 26 31 0.241838 0.126795 0.282315 0.20527 0.212206 0.159963 + 200 3 31 26 32 0.212206 0.159963 0.282315 0.20527 0.201361 0.20527 + 200 3 32 26 33 0.201361 0.20527 0.282315 0.20527 0.212206 0.159963 + 200 3 33 26 34 0.212206 0.159963 0.282315 0.20527 0.241838 0.126795 + 200 3 34 26 35 0.241838 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 35 26 36 0.282315 0.114655 0.282315 0.20527 0.322791 0.126795 + 200 3 36 26 37 0.322791 0.126795 0.282315 0.20527 0.352423 0.159963 + 200 3 37 26 25 0.352423 0.159963 0.282315 0.20527 0.363268 0.20527 + 200 3 38 39 40 0.348728 0.163706 0.280095 0.163706 0.339533 0.120458 + 200 3 40 39 41 0.339533 0.120458 0.280095 0.163706 0.314411 0.0887973 + 200 3 41 39 42 0.314411 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 42 39 43 0.280095 0.0772089 0.280095 0.163706 0.245778 0.0887973 + 200 3 43 39 44 0.245778 0.0887973 0.280095 0.163706 0.220656 0.120458 + 200 3 44 39 45 0.220656 0.120458 0.280095 0.163706 0.211461 0.163706 + 200 3 45 39 46 0.211461 0.163706 0.280095 0.163706 0.220656 0.120458 + 200 3 46 39 47 0.220656 0.120458 0.280095 0.163706 0.245778 0.0887973 + 200 3 47 39 48 0.245778 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 48 39 49 0.280095 0.0772089 0.280095 0.163706 0.314411 0.0887973 + 200 3 49 39 50 0.314411 0.0887973 0.280095 0.163706 0.339533 0.120458 + 200 3 50 39 38 0.339533 0.120458 0.280095 0.163706 0.348728 0.163706 + 200 3 51 52 53 0.342913 0.120977 0.27843 0.120977 0.334274 0.0873331 + 200 3 53 52 54 0.334274 0.0873331 0.27843 0.120977 0.310671 0.0627042 + 200 3 54 52 55 0.310671 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 55 52 56 0.27843 0.0536896 0.27843 0.120977 0.246188 0.0627042 + 200 3 56 52 57 0.246188 0.0627042 0.27843 0.120977 0.222585 0.0873331 + 200 3 57 52 58 0.222585 0.0873331 0.27843 0.120977 0.213946 0.120976 + 200 3 58 52 59 0.213946 0.120976 0.27843 0.120977 0.222585 0.0873331 + 200 3 59 52 60 0.222585 0.0873331 0.27843 0.120977 0.246188 0.0627042 + 200 3 60 52 61 0.246188 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 61 52 62 0.27843 0.0536896 0.27843 0.120977 0.310671 0.0627042 + 200 3 62 52 63 0.310671 0.0627042 0.27843 0.120977 0.334274 0.0873331 + 200 3 63 52 51 0.334274 0.0873331 0.27843 0.120977 0.342913 0.120977 + 200 3 64 65 66 0.339176 0.0966178 0.28065 0.0966178 0.331335 0.0642989 + 200 3 66 65 67 0.331335 0.0642989 0.28065 0.0966178 0.309913 0.0406398 + 200 3 67 65 68 0.309913 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 68 65 69 0.28065 0.0319799 0.28065 0.0966178 0.251386 0.0406398 + 200 3 69 65 70 0.251386 0.0406398 0.28065 0.0966178 0.229964 0.0642989 + 200 3 70 65 71 0.229964 0.0642989 0.28065 0.0966178 0.222123 0.0966176 + 200 3 71 65 72 0.222123 0.0966176 0.28065 0.0966178 0.229964 0.0642989 + 200 3 72 65 73 0.229964 0.0642989 0.28065 0.0966178 0.251386 0.0406398 + 200 3 73 65 74 0.251386 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 74 65 75 0.28065 0.0319799 0.28065 0.0966178 0.309913 0.0406398 + 200 3 75 65 76 0.309913 0.0406398 0.28065 0.0966178 0.331335 0.0642989 + 200 3 76 65 64 0.331335 0.0642989 0.28065 0.0966178 0.339176 0.0966178 + 200 3 77 78 79 0.296509 0.0438882 0.278322 0.0438882 0.294072 0.0264283 + 200 3 79 78 80 0.294072 0.0264283 0.278322 0.0438882 0.287416 0.0136467 + 200 3 80 78 81 0.287416 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 81 78 82 0.278322 0.00896829 0.278322 0.0438882 0.269229 0.0136467 + 200 3 82 78 83 0.269229 0.0136467 0.278322 0.0438882 0.262573 0.0264283 + 200 3 83 78 84 0.262573 0.0264283 0.278322 0.0438882 0.260136 0.0438882 + 200 3 84 78 85 0.260136 0.0438882 0.278322 0.0438882 0.262573 0.0264283 + 200 3 85 78 86 0.262573 0.0264283 0.278322 0.0438882 0.269229 0.0136467 + 200 3 86 78 87 0.269229 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 87 78 88 0.278322 0.00896829 0.278322 0.0438882 0.287416 0.0136467 + 200 3 88 78 89 0.287416 0.0136467 0.278322 0.0438882 0.294072 0.0264283 + 200 3 89 78 77 0.294072 0.0264283 0.278322 0.0438882 0.296509 0.0438882 + 200 3 76 52 75 0.136208 0.184161 0.0966576 0.0993444 0.173318 0.153022 + 200 3 75 52 74 0.173318 0.153022 0.0966576 0.0993444 0.189886 0.107501 + 200 3 74 52 73 0.189886 0.107501 0.0966576 0.0993444 0.181474 0.0597937 + 200 3 73 52 72 0.181474 0.0597937 0.0966576 0.0993444 0.150336 0.0226842 + 200 3 72 52 71 0.150336 0.0226842 0.0966576 0.0993444 0.104814 0.00611567 + 200 3 71 52 70 0.104814 0.00611567 0.0966576 0.0993444 0.057107 0.0145277 + 200 3 70 52 69 0.057107 0.0145277 0.0966576 0.0993444 0.0199974 0.0456663 + 200 3 69 52 68 0.0199974 0.0456663 0.0966576 0.0993444 0.00342888 0.091188 + 200 3 68 52 67 0.00342888 0.091188 0.0966576 0.0993444 0.011841 0.138895 + 200 3 67 52 66 0.011841 0.138895 0.0966576 0.0993444 0.0429796 0.176005 + 200 3 66 52 64 0.0429796 0.176005 0.0966576 0.0993444 0.0885012 0.192573 + 200 3 64 52 76 0.0885012 0.192573 0.0966576 0.0993444 0.136208 0.184161 + 200 3 89 65 88 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 88 65 87 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 87 65 86 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 86 65 85 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 85 65 84 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 84 65 83 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 83 65 82 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 82 65 81 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 81 65 80 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 80 65 79 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 79 65 77 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 77 65 89 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 + 200 3 63 39 62 0.162832 0.165519 0.0966577 0.0993443 0.187054 0.123566 + 200 3 62 39 61 0.187054 0.123566 0.0966577 0.0993443 0.187054 0.0751227 + 200 3 61 39 60 0.187054 0.0751227 0.0966577 0.0993443 0.162832 0.0331699 + 200 3 60 39 59 0.162832 0.0331699 0.0966577 0.0993443 0.120879 0.00894833 + 200 3 59 39 58 0.120879 0.00894833 0.0966577 0.0993443 0.0724362 0.00894833 + 200 3 58 39 57 0.0724362 0.00894833 0.0966577 0.0993443 0.0304832 0.0331699 + 200 3 57 39 56 0.0304832 0.0331699 0.0966577 0.0993443 0.00626171 0.0751228 + 200 3 56 39 55 0.00626171 0.0751228 0.0966577 0.0993443 0.00626171 0.123566 + 200 3 55 39 54 0.00626171 0.123566 0.0966577 0.0993443 0.0304832 0.165519 + 200 3 54 39 53 0.0304832 0.165519 0.0966577 0.0993443 0.0724362 0.18974 + 200 3 53 39 51 0.0724362 0.18974 0.0966577 0.0993443 0.120879 0.18974 + 200 3 51 39 63 0.120879 0.18974 0.0966577 0.0993443 0.162832 0.165519 + 200 3 50 26 49 0.189886 0.0911877 0.0966577 0.0993443 0.173318 0.0456661 + 200 3 49 26 48 0.173318 0.0456661 0.0966577 0.0993443 0.136208 0.0145276 + 200 3 48 26 47 0.136208 0.0145276 0.0966577 0.0993443 0.0885012 0.00611556 + 200 3 47 26 46 0.0885012 0.00611556 0.0966577 0.0993443 0.0429797 0.022684 + 200 3 46 26 45 0.0429797 0.022684 0.0966577 0.0993443 0.011841 0.0597937 + 200 3 45 26 44 0.011841 0.0597937 0.0966577 0.0993443 0.003429 0.107501 + 200 3 44 26 43 0.003429 0.107501 0.0966577 0.0993443 0.0199975 0.153022 + 200 3 43 26 42 0.0199975 0.153022 0.0966577 0.0993443 0.057107 0.184161 + 200 3 42 26 41 0.057107 0.184161 0.0966577 0.0993443 0.104814 0.192573 + 200 3 41 26 40 0.104814 0.192573 0.0966577 0.0993443 0.150336 0.176005 + 200 3 40 26 38 0.150336 0.176005 0.0966577 0.0993443 0.181474 0.138895 + 200 3 38 26 50 0.181474 0.138895 0.0966577 0.0993443 0.189886 0.0911877 + 200 3 37 13 36 0.190243 0.0993443 0.0966577 0.0993443 0.177705 0.0525519 + 200 3 36 13 35 0.177705 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 35 13 34 0.14345 0.0182974 0.0966577 0.0993443 0.0966577 0.00575948 + 200 3 34 13 33 0.0966577 0.00575948 0.0966577 0.0993443 0.0498653 0.0182974 + 200 3 33 13 32 0.0498653 0.0182974 0.0966577 0.0993443 0.0156108 0.052552 + 200 3 32 13 31 0.0156108 0.052552 0.0966577 0.0993443 0.00307286 0.0993444 + 200 3 31 13 30 0.00307286 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 30 13 29 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 29 13 28 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 28 13 27 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 27 13 25 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 25 13 37 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 24 90 23 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 23 90 22 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 22 90 21 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 21 90 20 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 20 90 19 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 19 90 18 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 18 90 17 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 17 90 16 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 16 90 15 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 15 90 14 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 14 90 12 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 12 90 24 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 +LEVEL 2 +POINTS 91 + -37.6049 -1.99701 -43.6808 + -32.0372 -2.00299 -41.3356 + -35.5019 -2 -40.8918 + -32.8096 -2 -47.2836 + -30.7234 -1.99701 -44.5449 + -36.2265 -2.00299 -46.8629 + -33.6503 100 -44.2595 + -34.0984 100 -44.6596 + -33.6755 100 -43.677 + -34.2131 100 -43.5158 + -34.663 100 -43.918 + -34.6326 100 -44.5 + -18.8386 10.014 -81.5292 + -34.1557 25 -44.0877 + -2.15835 11.1975 -69.0025 + 5.92311 11.5785 -49.7406 + 3.32626 7.56615 -28.7254 + -9.25864 11.6573 -12.2136 + -28.6079 11.4773 -4.01567 + -49.4728 10.0139 -6.64618 + -66.221 8.53164 -19.2697 + -74.2522 8.33185 -38.6003 + -71.7387 12.4135 -59.2102 + -58.9205 8.41077 -76.0685 + -39.5849 8.81153 -84.1835 + -66.5152 22.8734 -56.5984 + -34.1557 40 -44.0877 + -52.2256 27.67 -66.2097 + -39.4769 25.1446 -78.2585 + -23.7863 25.0246 -70.681 + -7.07595 24.8723 -65.8758 + -5.91034 22.3096 -48.4644 + -1.72248 27.0885 -31.7522 + -16.2497 22.3378 -21.8265 + -28.8383 25.053 -9.91593 + -44.5302 25.0246 -17.4824 + -61.2334 24.9639 -22.2966 + -62.3815 27.6422 -39.5077 + -15.3595 43.4745 -22.0946 + -34.1557 55 -44.0877 + -29.9978 41.5595 -20.7394 + -44.1468 40.0271 -17.0247 + -52.5025 38.4597 -28.8085 + -62.6373 36.5023 -39.1246 + -56.6057 41.7562 -52.1211 + -52.7334 36.4958 -66.2537 + -38.2308 38.5633 -67.4474 + -24.1647 40.0271 -71.1507 + -15.8643 41.4562 -59.4205 + -5.71348 43.4816 -49.3031 + -11.754 38.2008 -35.9399 + -12.178 56.417 -36.7083 + -34.1557 70 -44.0877 + -21.5712 51.1134 -29.7139 + -29.6423 55.4505 -21.5204 + -40.3666 55.0241 -26.1424 + -51.6407 54.567 -28.8902 + -52.8103 58.8662 -40.2583 + -56.0993 53.5443 -51.5483 + -46.9123 58.8394 -58.3194 + -38.644 54.6146 -66.6619 + -27.9499 55.024 -62.021 + -16.6857 55.403 -59.3026 + -15.4714 51.1395 -47.7213 + -17.2931 73.6612 -47.9209 + -34.1557 85 -44.0877 + -20.4795 68.9002 -39.7573 + -22.1795 73.6287 -31.3592 + -31.0854 66.5658 -30.1846 + -39.3995 70.0175 -27.6599 + -44.6765 73.4473 -34.4221 + -51.0554 66.3556 -40.4126 + -47.8532 71.0713 -48.3675 + -45.9796 66.3236 -56.9319 + -37.3694 73.4591 -57.9401 + -28.912 70.0175 -60.5155 + -23.555 66.5535 -53.6537 + -25.8659 84.6798 -52.0593 + -34.1557 102 -44.0877 + -24.9735 82.1621 -46.3203 + -22.9746 85.7196 -40.8544 + -27.4152 82.1359 -37.1669 + -31.2542 84.6749 -32.9095 + -36.7494 85.0097 -34.9997 + -42.438 85.3322 -36.1095 + -43.3227 87.8554 -41.775 + -45.3279 84.2643 -47.3422 + -40.972 87.8289 -50.9449 + -37.069 85.3273 -55.2626 + -31.5672 85.0097 -53.1637 + -34.1557 10 -44.0877 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.0791578 0.0783653 0.138018 0.0613737 0.108588 + 200 3 1 3 4 0.0783653 0.138018 0.12934 0.108588 0.112349 0.138018 + 200 3 0 3 1 0.0783653 0.0791578 0.12934 0.108588 0.0783653 0.138018 + 200 3 5 3 0 0.112349 0.0791578 0.12934 0.108588 0.0783653 0.0791578 + 200 3 3 6 4 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 6 3 7 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 4 8 1 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 8 4 6 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 1 9 2 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 9 1 8 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 2 10 0 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 10 2 9 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 0 11 5 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 11 0 10 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 5 7 3 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 7 5 11 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 7 8 6 0.11132 0.108504 0.086818 0.0943576 0.103153 0.0943576 + 200 3 8 10 9 0.086818 0.0943576 0.086818 0.12265 0.0786506 0.108504 + 200 3 7 10 8 0.11132 0.108504 0.086818 0.12265 0.086818 0.0943576 + 200 3 11 10 7 0.103153 0.12265 0.086818 0.12265 0.11132 0.108504 + 200 3 12 13 14 0.36259 0.239765 0.282315 0.239765 0.351835 0.199627 + 200 3 14 13 15 0.351835 0.199627 0.282315 0.239765 0.322452 0.170244 + 200 3 15 13 16 0.322452 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 16 13 17 0.282315 0.159489 0.282315 0.239765 0.242177 0.170244 + 200 3 17 13 18 0.242177 0.170244 0.282315 0.239765 0.212794 0.199627 + 200 3 18 13 19 0.212794 0.199627 0.282315 0.239765 0.202039 0.239765 + 200 3 19 13 20 0.202039 0.239765 0.282315 0.239765 0.212794 0.199627 + 200 3 20 13 21 0.212794 0.199627 0.282315 0.239765 0.242177 0.170244 + 200 3 21 13 22 0.242177 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 22 13 23 0.282315 0.159489 0.282315 0.239765 0.322452 0.170244 + 200 3 23 13 24 0.322452 0.170244 0.282315 0.239765 0.351835 0.199627 + 200 3 24 13 12 0.351835 0.199627 0.282315 0.239765 0.36259 0.239765 + 200 3 25 26 27 0.363268 0.20527 0.282315 0.20527 0.352423 0.159963 + 200 3 27 26 28 0.352423 0.159963 0.282315 0.20527 0.322791 0.126795 + 200 3 28 26 29 0.322791 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 29 26 30 0.282315 0.114655 0.282315 0.20527 0.241838 0.126795 + 200 3 30 26 31 0.241838 0.126795 0.282315 0.20527 0.212206 0.159963 + 200 3 31 26 32 0.212206 0.159963 0.282315 0.20527 0.201361 0.20527 + 200 3 32 26 33 0.201361 0.20527 0.282315 0.20527 0.212206 0.159963 + 200 3 33 26 34 0.212206 0.159963 0.282315 0.20527 0.241838 0.126795 + 200 3 34 26 35 0.241838 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 35 26 36 0.282315 0.114655 0.282315 0.20527 0.322791 0.126795 + 200 3 36 26 37 0.322791 0.126795 0.282315 0.20527 0.352423 0.159963 + 200 3 37 26 25 0.352423 0.159963 0.282315 0.20527 0.363268 0.20527 + 200 3 38 39 40 0.348728 0.163706 0.280095 0.163706 0.339533 0.120458 + 200 3 40 39 41 0.339533 0.120458 0.280095 0.163706 0.314411 0.0887973 + 200 3 41 39 42 0.314411 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 42 39 43 0.280095 0.0772089 0.280095 0.163706 0.245778 0.0887973 + 200 3 43 39 44 0.245778 0.0887973 0.280095 0.163706 0.220656 0.120458 + 200 3 44 39 45 0.220656 0.120458 0.280095 0.163706 0.211461 0.163706 + 200 3 45 39 46 0.211461 0.163706 0.280095 0.163706 0.220656 0.120458 + 200 3 46 39 47 0.220656 0.120458 0.280095 0.163706 0.245778 0.0887973 + 200 3 47 39 48 0.245778 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 48 39 49 0.280095 0.0772089 0.280095 0.163706 0.314411 0.0887973 + 200 3 49 39 50 0.314411 0.0887973 0.280095 0.163706 0.339533 0.120458 + 200 3 50 39 38 0.339533 0.120458 0.280095 0.163706 0.348728 0.163706 + 200 3 51 52 53 0.342913 0.120977 0.27843 0.120977 0.334274 0.0873331 + 200 3 53 52 54 0.334274 0.0873331 0.27843 0.120977 0.310671 0.0627042 + 200 3 54 52 55 0.310671 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 55 52 56 0.27843 0.0536896 0.27843 0.120977 0.246188 0.0627042 + 200 3 56 52 57 0.246188 0.0627042 0.27843 0.120977 0.222585 0.0873331 + 200 3 57 52 58 0.222585 0.0873331 0.27843 0.120977 0.213946 0.120976 + 200 3 58 52 59 0.213946 0.120976 0.27843 0.120977 0.222585 0.0873331 + 200 3 59 52 60 0.222585 0.0873331 0.27843 0.120977 0.246188 0.0627042 + 200 3 60 52 61 0.246188 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 61 52 62 0.27843 0.0536896 0.27843 0.120977 0.310671 0.0627042 + 200 3 62 52 63 0.310671 0.0627042 0.27843 0.120977 0.334274 0.0873331 + 200 3 63 52 51 0.334274 0.0873331 0.27843 0.120977 0.342913 0.120977 + 200 3 64 65 66 0.339176 0.0966178 0.28065 0.0966178 0.331335 0.0642989 + 200 3 66 65 67 0.331335 0.0642989 0.28065 0.0966178 0.309913 0.0406398 + 200 3 67 65 68 0.309913 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 68 65 69 0.28065 0.0319799 0.28065 0.0966178 0.251386 0.0406398 + 200 3 69 65 70 0.251386 0.0406398 0.28065 0.0966178 0.229964 0.0642989 + 200 3 70 65 71 0.229964 0.0642989 0.28065 0.0966178 0.222123 0.0966176 + 200 3 71 65 72 0.222123 0.0966176 0.28065 0.0966178 0.229964 0.0642989 + 200 3 72 65 73 0.229964 0.0642989 0.28065 0.0966178 0.251386 0.0406398 + 200 3 73 65 74 0.251386 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 74 65 75 0.28065 0.0319799 0.28065 0.0966178 0.309913 0.0406398 + 200 3 75 65 76 0.309913 0.0406398 0.28065 0.0966178 0.331335 0.0642989 + 200 3 76 65 64 0.331335 0.0642989 0.28065 0.0966178 0.339176 0.0966178 + 200 3 77 78 79 0.296509 0.0438882 0.278322 0.0438882 0.294072 0.0264283 + 200 3 79 78 80 0.294072 0.0264283 0.278322 0.0438882 0.287416 0.0136467 + 200 3 80 78 81 0.287416 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 81 78 82 0.278322 0.00896829 0.278322 0.0438882 0.269229 0.0136467 + 200 3 82 78 83 0.269229 0.0136467 0.278322 0.0438882 0.262573 0.0264283 + 200 3 83 78 84 0.262573 0.0264283 0.278322 0.0438882 0.260136 0.0438882 + 200 3 84 78 85 0.260136 0.0438882 0.278322 0.0438882 0.262573 0.0264283 + 200 3 85 78 86 0.262573 0.0264283 0.278322 0.0438882 0.269229 0.0136467 + 200 3 86 78 87 0.269229 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 87 78 88 0.278322 0.00896829 0.278322 0.0438882 0.287416 0.0136467 + 200 3 88 78 89 0.287416 0.0136467 0.278322 0.0438882 0.294072 0.0264283 + 200 3 89 78 77 0.294072 0.0264283 0.278322 0.0438882 0.296509 0.0438882 + 200 3 76 52 75 0.136208 0.184161 0.0966576 0.0993444 0.173318 0.153022 + 200 3 75 52 74 0.173318 0.153022 0.0966576 0.0993444 0.189886 0.107501 + 200 3 74 52 73 0.189886 0.107501 0.0966576 0.0993444 0.181474 0.0597937 + 200 3 73 52 72 0.181474 0.0597937 0.0966576 0.0993444 0.150336 0.0226842 + 200 3 72 52 71 0.150336 0.0226842 0.0966576 0.0993444 0.104814 0.00611567 + 200 3 71 52 70 0.104814 0.00611567 0.0966576 0.0993444 0.057107 0.0145277 + 200 3 70 52 69 0.057107 0.0145277 0.0966576 0.0993444 0.0199974 0.0456663 + 200 3 69 52 68 0.0199974 0.0456663 0.0966576 0.0993444 0.00342888 0.091188 + 200 3 68 52 67 0.00342888 0.091188 0.0966576 0.0993444 0.011841 0.138895 + 200 3 67 52 66 0.011841 0.138895 0.0966576 0.0993444 0.0429796 0.176005 + 200 3 66 52 64 0.0429796 0.176005 0.0966576 0.0993444 0.0885012 0.192573 + 200 3 64 52 76 0.0885012 0.192573 0.0966576 0.0993444 0.136208 0.184161 + 200 3 89 65 88 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 88 65 87 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 87 65 86 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 86 65 85 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 85 65 84 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 84 65 83 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 83 65 82 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 82 65 81 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 81 65 80 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 80 65 79 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 79 65 77 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 77 65 89 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 + 200 3 63 39 62 0.162832 0.165519 0.0966577 0.0993443 0.187054 0.123566 + 200 3 62 39 61 0.187054 0.123566 0.0966577 0.0993443 0.187054 0.0751227 + 200 3 61 39 60 0.187054 0.0751227 0.0966577 0.0993443 0.162832 0.0331699 + 200 3 60 39 59 0.162832 0.0331699 0.0966577 0.0993443 0.120879 0.00894833 + 200 3 59 39 58 0.120879 0.00894833 0.0966577 0.0993443 0.0724362 0.00894833 + 200 3 58 39 57 0.0724362 0.00894833 0.0966577 0.0993443 0.0304832 0.0331699 + 200 3 57 39 56 0.0304832 0.0331699 0.0966577 0.0993443 0.00626171 0.0751228 + 200 3 56 39 55 0.00626171 0.0751228 0.0966577 0.0993443 0.00626171 0.123566 + 200 3 55 39 54 0.00626171 0.123566 0.0966577 0.0993443 0.0304832 0.165519 + 200 3 54 39 53 0.0304832 0.165519 0.0966577 0.0993443 0.0724362 0.18974 + 200 3 53 39 51 0.0724362 0.18974 0.0966577 0.0993443 0.120879 0.18974 + 200 3 51 39 63 0.120879 0.18974 0.0966577 0.0993443 0.162832 0.165519 + 200 3 50 26 49 0.189886 0.0911877 0.0966577 0.0993443 0.173318 0.0456661 + 200 3 49 26 48 0.173318 0.0456661 0.0966577 0.0993443 0.136208 0.0145276 + 200 3 48 26 47 0.136208 0.0145276 0.0966577 0.0993443 0.0885012 0.00611556 + 200 3 47 26 46 0.0885012 0.00611556 0.0966577 0.0993443 0.0429797 0.022684 + 200 3 46 26 45 0.0429797 0.022684 0.0966577 0.0993443 0.011841 0.0597937 + 200 3 45 26 44 0.011841 0.0597937 0.0966577 0.0993443 0.003429 0.107501 + 200 3 44 26 43 0.003429 0.107501 0.0966577 0.0993443 0.0199975 0.153022 + 200 3 43 26 42 0.0199975 0.153022 0.0966577 0.0993443 0.057107 0.184161 + 200 3 42 26 41 0.057107 0.184161 0.0966577 0.0993443 0.104814 0.192573 + 200 3 41 26 40 0.104814 0.192573 0.0966577 0.0993443 0.150336 0.176005 + 200 3 40 26 38 0.150336 0.176005 0.0966577 0.0993443 0.181474 0.138895 + 200 3 38 26 50 0.181474 0.138895 0.0966577 0.0993443 0.189886 0.0911877 + 200 3 37 13 36 0.190243 0.0993443 0.0966577 0.0993443 0.177705 0.0525519 + 200 3 36 13 35 0.177705 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 35 13 34 0.14345 0.0182974 0.0966577 0.0993443 0.0966577 0.00575948 + 200 3 34 13 33 0.0966577 0.00575948 0.0966577 0.0993443 0.0498653 0.0182974 + 200 3 33 13 32 0.0498653 0.0182974 0.0966577 0.0993443 0.0156108 0.052552 + 200 3 32 13 31 0.0156108 0.052552 0.0966577 0.0993443 0.00307286 0.0993444 + 200 3 31 13 30 0.00307286 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 30 13 29 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 29 13 28 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 28 13 27 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 27 13 25 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 25 13 37 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 24 90 23 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 23 90 22 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 22 90 21 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 21 90 20 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 20 90 19 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 19 90 18 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 18 90 17 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 17 90 16 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 16 90 15 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 15 90 14 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 14 90 12 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 12 90 24 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 +LEVEL 3 +POINTS 68 + -30.566 -1.99701 42.136 + -27.8376 -2.00299 37.6782 + -27.9077 -2 40.6992 + -33.0252 -2 37.567 + -30.4121 -1.99701 36.1381 + -33.1088 -2.00299 40.5441 + -30.5478 100 38.6786 + -30.9482 100 39.0099 + -30.0528 100 38.7756 + -29.9847 100 39.2564 + -30.3871 100 39.589 + -30.8809 100 39.4875 + -45.3661 22.8734 65.1868 + -30.4664 44.3987 39.1331 + -51.7324 27.67 51.7176 + -60.3834 25.1446 39.25 + -51.8662 25.0246 26.8131 + -45.5878 24.8723 13.1442 + -30.5444 22.3096 14.4067 + -15.707 27.0885 12.9935 + -9.10268 22.3378 26.7068 + -0.549103 25.053 39.0195 + -9.05705 25.0246 51.459 + -15.3422 24.9639 65.1206 + -30.212 27.6422 63.8691 + -21.3027 47.911 21.293 + -30.4664 65.7556 39.1331 + -16.5394 42.6075 30.2348 + -10.5788 46.9445 38.2013 + -15.9237 46.5181 46.7741 + -19.737 46.061 56.0603 + -29.6119 50.3602 55.5854 + -39.6951 45.0384 56.9334 + -44.2943 50.3334 48.1971 + -50.3567 46.1086 40.0425 + -44.9995 46.5181 31.498 + -41.2128 46.897 22.2165 + -31.1496 42.6336 22.6808 + -31.5567 68.8003 24.213 + -30.4664 84.1501 39.1331 + -24.9879 64.0393 27.9977 + -18.0256 68.7678 30.5415 + -18.1766 61.7049 38.3112 + -17.0961 65.1566 45.75 + -23.5647 68.5864 49.3858 + -29.5162 61.4947 54.0644 + -35.9045 66.2104 50.2933 + -42.9865 61.4627 47.5793 + -42.7315 68.5982 40.0842 + -43.8367 65.1566 32.5163 + -37.2726 61.6926 28.8248 + -36.2088 84.6798 31.0083 + -30.4664 102 39.1331 + -31.1844 82.1621 30.9897 + -26.25 85.7196 29.9894 + -23.6723 82.1359 34.266 + -20.5291 84.6749 38.102 + -23.03 85.0097 42.5308 + -24.7174 85.3322 47.2523 + -29.678 87.8554 47.2738 + -34.6999 84.2643 48.2664 + -37.216 87.8289 44.0733 + -40.4025 85.3273 40.1747 + -37.8932 85.0097 35.7413 + -30.4664 65.1391 39.1331 + -30.4664 85 39.1331 + -30.4664 46.494 39.1331 + -30.4664 25 39.1331 +POLYGONS 116 + 200 3 0 1 2 0.0783653 0.0791578 0.0783653 0.138018 0.0613737 0.108588 + 200 3 1 3 4 0.0783653 0.138018 0.12934 0.108588 0.112349 0.138018 + 200 3 0 3 1 0.0783653 0.0791578 0.12934 0.108588 0.0783653 0.138018 + 200 3 5 3 0 0.112349 0.0791578 0.12934 0.108588 0.0783653 0.0791578 + 200 3 3 6 4 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 6 3 7 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 4 8 1 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 8 4 6 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 1 9 2 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 9 1 8 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 2 10 0 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 10 2 9 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 0 11 5 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 11 0 10 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 5 7 3 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 7 5 11 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 7 8 6 0.11132 0.108504 0.086818 0.0943576 0.103153 0.0943576 + 200 3 8 10 9 0.086818 0.0943576 0.086818 0.12265 0.0786506 0.108504 + 200 3 7 10 8 0.11132 0.108504 0.086818 0.12265 0.086818 0.0943576 + 200 3 11 10 7 0.103153 0.12265 0.086818 0.12265 0.11132 0.108504 + 200 3 12 13 14 0.363268 0.20527 0.282315 0.20527 0.352423 0.159963 + 200 3 14 13 15 0.352423 0.159963 0.282315 0.20527 0.322791 0.126795 + 200 3 15 13 16 0.322791 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 16 13 17 0.282315 0.114655 0.282315 0.20527 0.241838 0.126795 + 200 3 17 13 18 0.241838 0.126795 0.282315 0.20527 0.212206 0.159963 + 200 3 18 13 19 0.212206 0.159963 0.282315 0.20527 0.201361 0.20527 + 200 3 19 13 20 0.201361 0.20527 0.282315 0.20527 0.212206 0.159963 + 200 3 20 13 21 0.212206 0.159963 0.282315 0.20527 0.241838 0.126795 + 200 3 21 13 22 0.241838 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 22 13 23 0.282315 0.114655 0.282315 0.20527 0.322791 0.126795 + 200 3 23 13 24 0.322791 0.126795 0.282315 0.20527 0.352423 0.159963 + 200 3 24 13 12 0.352423 0.159963 0.282315 0.20527 0.363268 0.20527 + 200 3 25 26 27 0.342913 0.120977 0.27843 0.120977 0.334274 0.0873331 + 200 3 27 26 28 0.334274 0.0873331 0.27843 0.120977 0.310671 0.0627042 + 200 3 28 26 29 0.310671 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 29 26 30 0.27843 0.0536896 0.27843 0.120977 0.246188 0.0627042 + 200 3 30 26 31 0.246188 0.0627042 0.27843 0.120977 0.222585 0.0873331 + 200 3 31 26 32 0.222585 0.0873331 0.27843 0.120977 0.213946 0.120976 + 200 3 32 26 33 0.213946 0.120976 0.27843 0.120977 0.222585 0.0873331 + 200 3 33 26 34 0.222585 0.0873331 0.27843 0.120977 0.246188 0.0627042 + 200 3 34 26 35 0.246188 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 35 26 36 0.27843 0.0536896 0.27843 0.120977 0.310671 0.0627042 + 200 3 36 26 37 0.310671 0.0627042 0.27843 0.120977 0.334274 0.0873331 + 200 3 37 26 25 0.334274 0.0873331 0.27843 0.120977 0.342913 0.120977 + 200 3 38 39 40 0.339176 0.0966178 0.28065 0.0966178 0.331335 0.0642989 + 200 3 40 39 41 0.331335 0.0642989 0.28065 0.0966178 0.309913 0.0406398 + 200 3 41 39 42 0.309913 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 42 39 43 0.28065 0.0319799 0.28065 0.0966178 0.251386 0.0406398 + 200 3 43 39 44 0.251386 0.0406398 0.28065 0.0966178 0.229964 0.0642989 + 200 3 44 39 45 0.229964 0.0642989 0.28065 0.0966178 0.222123 0.0966176 + 200 3 45 39 46 0.222123 0.0966176 0.28065 0.0966178 0.229964 0.0642989 + 200 3 46 39 47 0.229964 0.0642989 0.28065 0.0966178 0.251386 0.0406398 + 200 3 47 39 48 0.251386 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 48 39 49 0.28065 0.0319799 0.28065 0.0966178 0.309913 0.0406398 + 200 3 49 39 50 0.309913 0.0406398 0.28065 0.0966178 0.331335 0.0642989 + 200 3 50 39 38 0.331335 0.0642989 0.28065 0.0966178 0.339176 0.0966178 + 200 3 51 52 53 0.296509 0.0438882 0.278322 0.0438882 0.294072 0.0264283 + 200 3 53 52 54 0.294072 0.0264283 0.278322 0.0438882 0.287416 0.0136467 + 200 3 54 52 55 0.287416 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 55 52 56 0.278322 0.00896829 0.278322 0.0438882 0.269229 0.0136467 + 200 3 56 52 57 0.269229 0.0136467 0.278322 0.0438882 0.262573 0.0264283 + 200 3 57 52 58 0.262573 0.0264283 0.278322 0.0438882 0.260136 0.0438882 + 200 3 58 52 59 0.260136 0.0438882 0.278322 0.0438882 0.262573 0.0264283 + 200 3 59 52 60 0.262573 0.0264283 0.278322 0.0438882 0.269229 0.0136467 + 200 3 60 52 61 0.269229 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 61 52 62 0.278322 0.00896829 0.278322 0.0438882 0.287416 0.0136467 + 200 3 62 52 63 0.287416 0.0136467 0.278322 0.0438882 0.294072 0.0264283 + 200 3 63 52 51 0.294072 0.0264283 0.278322 0.0438882 0.296509 0.0438882 + 200 3 50 64 49 0.136208 0.184161 0.0966576 0.0993444 0.173318 0.153022 + 200 3 49 64 48 0.173318 0.153022 0.0966576 0.0993444 0.189886 0.107501 + 200 3 48 64 47 0.189886 0.107501 0.0966576 0.0993444 0.181474 0.0597937 + 200 3 47 64 46 0.181474 0.0597937 0.0966576 0.0993444 0.150336 0.0226842 + 200 3 46 64 45 0.150336 0.0226842 0.0966576 0.0993444 0.104814 0.00611567 + 200 3 45 64 44 0.104814 0.00611567 0.0966576 0.0993444 0.057107 0.0145277 + 200 3 44 64 43 0.057107 0.0145277 0.0966576 0.0993444 0.0199974 0.0456663 + 200 3 43 64 42 0.0199974 0.0456663 0.0966576 0.0993444 0.00342888 0.091188 + 200 3 42 64 41 0.00342888 0.091188 0.0966576 0.0993444 0.011841 0.138895 + 200 3 41 64 40 0.011841 0.138895 0.0966576 0.0993444 0.0429796 0.176005 + 200 3 40 64 38 0.0429796 0.176005 0.0966576 0.0993444 0.0885012 0.192573 + 200 3 38 64 50 0.0885012 0.192573 0.0966576 0.0993444 0.136208 0.184161 + 200 3 63 65 62 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 62 65 61 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 61 65 60 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 60 65 59 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 59 65 58 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 58 65 57 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 57 65 56 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 56 65 55 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 55 65 54 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 54 65 53 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 53 65 51 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 51 65 63 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 + 200 3 37 66 36 0.162832 0.165519 0.0966577 0.0993443 0.187054 0.123566 + 200 3 36 66 35 0.187054 0.123566 0.0966577 0.0993443 0.187054 0.0751227 + 200 3 35 66 34 0.187054 0.0751227 0.0966577 0.0993443 0.162832 0.0331699 + 200 3 34 66 33 0.162832 0.0331699 0.0966577 0.0993443 0.120879 0.00894833 + 200 3 33 66 32 0.120879 0.00894833 0.0966577 0.0993443 0.0724362 0.00894833 + 200 3 32 66 31 0.0724362 0.00894833 0.0966577 0.0993443 0.0304832 0.0331699 + 200 3 31 66 30 0.0304832 0.0331699 0.0966577 0.0993443 0.00626171 0.0751228 + 200 3 30 66 29 0.00626171 0.0751228 0.0966577 0.0993443 0.00626171 0.123566 + 200 3 29 66 28 0.00626171 0.123566 0.0966577 0.0993443 0.0304832 0.165519 + 200 3 28 66 27 0.0304832 0.165519 0.0966577 0.0993443 0.0724362 0.18974 + 200 3 27 66 25 0.0724362 0.18974 0.0966577 0.0993443 0.120879 0.18974 + 200 3 25 66 37 0.120879 0.18974 0.0966577 0.0993443 0.162832 0.165519 + 200 3 24 67 23 0.190243 0.0993443 0.0966577 0.0993443 0.177705 0.0525519 + 200 3 23 67 22 0.177705 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 22 67 21 0.14345 0.0182974 0.0966577 0.0993443 0.0966577 0.00575948 + 200 3 21 67 20 0.0966577 0.00575948 0.0966577 0.0993443 0.0498653 0.0182974 + 200 3 20 67 19 0.0498653 0.0182974 0.0966577 0.0993443 0.0156108 0.052552 + 200 3 19 67 18 0.0156108 0.052552 0.0966577 0.0993443 0.00307286 0.0993444 + 200 3 18 67 17 0.00307286 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 17 67 16 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 16 67 15 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 15 67 14 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 14 67 12 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 12 67 24 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 +LEVEL 4 +POINTS 82 + 55.4704 -2.40568 27.6003 + 49.9188 -2.41289 29.7358 + 52.0746 -2.40928 27.0563 + 54.5261 -2.40928 33.4296 + 51.1767 -2.40568 32.9098 + 56.6638 -2.41289 30.7992 + 53.059 120.464 30.7098 + 53.65 120.464 30.6879 + 52.6793 120.464 30.2793 + 52.9507 120.464 29.798 + 53.5445 120.464 29.7764 + 53.9201 120.464 30.2101 + 67.9827 17.2344 67.266 + 53.3004 35.2873 30.243 + 47.5968 18.6602 69.76 + 28.7167 19.1191 61.6063 + 16.2177 14.2857 44.9209 + 13.88 19.214 24.6149 + 22.0163 18.9972 5.59241 + 38.6181 17.2344 -6.78012 + 59.1181 15.4488 -9.25172 + 78.0095 15.2081 -1.01485 + 90.291 20.125 15.326 + 92.6997 15.3032 36.0371 + 84.5164 15.786 54.9913 + 84.8018 37.1415 17.0374 + 53.3004 57.7729 30.243 + 81.2206 42.9197 33.6098 + 80.3963 39.8774 50.8604 + 64.0904 39.7329 56.1912 + 48.9528 39.5495 64.1852 + 36.2432 36.4622 52.6249 + 21.8662 42.2192 43.6233 + 25.4014 36.4963 26.6655 + 26.2064 39.7671 9.62227 + 42.5057 39.7329 4.28275 + 57.6444 39.6598 -3.70002 + 70.2048 42.8861 7.73013 + 24.9527 64.7284 27.4633 + 53.3003 78.6125 30.243 + 34.4157 62.4216 16.5117 + 41.9213 60.5756 4.21962 + 55.8927 58.6874 6.87952 + 70.125 56.3294 7.28374 + 74.7141 62.6586 20.6228 + 81.611 56.3216 33.2945 + 72.1341 58.8122 44.0389 + 64.6794 60.5756 56.2663 + 50.7839 62.2972 53.6067 + 36.6759 64.737 53.3544 + 31.8428 58.3755 39.749 + 32.668 83.8948 40.005 + 53.3003 100.258 30.243 + 34.5605 77.506 28.6311 + 34.6964 82.7306 17.3086 + 45.4611 82.2169 13.2697 + 55.3369 81.6663 7.52568 + 63.925 86.8453 14.7947 + 73.9638 80.4343 20.5619 + 72.0653 86.813 31.6366 + 71.8911 81.7236 43.1995 + 61.135 82.2169 47.2043 + 51.2864 82.6733 52.9624 + 42.521 77.5374 45.5726 + 52.8578 102.009 41.5573 + 53.3003 122.873 30.243 + 48.3079 98.9759 38.0937 + 43.1592 103.261 35.5791 + 43.7939 98.9443 29.9317 + 43.6128 102.003 24.2907 + 48.9388 102.406 22.0237 + 53.7331 102.795 18.9291 + 58.2273 105.834 22.3458 + 63.4496 101.508 24.9281 + 62.8171 105.802 30.4573 + 62.994 102.789 36.185 + 57.6573 102.406 38.4502 + 53.3003 102.395 30.243 + 53.3003 82.1879 30.243 + 53.3004 60.5429 30.243 + 53.3004 39.7032 30.243 + 53.3004 17.2176 30.243 +POLYGONS 140 + 200 3 0 1 2 0.0783653 0.0791578 0.0783653 0.138018 0.0613737 0.108588 + 200 3 1 3 4 0.0783653 0.138018 0.12934 0.108588 0.112349 0.138018 + 200 3 0 3 1 0.0783653 0.0791578 0.12934 0.108588 0.0783653 0.138018 + 200 3 5 3 0 0.112349 0.0791578 0.12934 0.108588 0.0783653 0.0791578 + 200 3 3 6 4 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 6 3 7 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 4 8 1 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 8 4 6 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 1 9 2 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 9 1 8 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 2 10 0 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 10 2 9 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 0 11 5 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 11 0 10 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 5 7 3 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 7 5 11 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 7 8 6 0.11132 0.108504 0.086818 0.0943576 0.103153 0.0943576 + 200 3 8 10 9 0.086818 0.0943576 0.086818 0.12265 0.0786506 0.108504 + 200 3 7 10 8 0.11132 0.108504 0.086818 0.12265 0.086818 0.0943576 + 200 3 11 10 7 0.103153 0.12265 0.086818 0.12265 0.11132 0.108504 + 200 3 12 13 14 0.36259 0.239765 0.282315 0.239765 0.351835 0.199627 + 200 3 14 13 15 0.351835 0.199627 0.282315 0.239765 0.322452 0.170244 + 200 3 15 13 16 0.322452 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 16 13 17 0.282315 0.159489 0.282315 0.239765 0.242177 0.170244 + 200 3 17 13 18 0.242177 0.170244 0.282315 0.239765 0.212794 0.199627 + 200 3 18 13 19 0.212794 0.199627 0.282315 0.239765 0.202039 0.239765 + 200 3 19 13 20 0.202039 0.239765 0.282315 0.239765 0.212794 0.199627 + 200 3 20 13 21 0.212794 0.199627 0.282315 0.239765 0.242177 0.170244 + 200 3 21 13 22 0.242177 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 22 13 23 0.282315 0.159489 0.282315 0.239765 0.322452 0.170244 + 200 3 23 13 24 0.322452 0.170244 0.282315 0.239765 0.351835 0.199627 + 200 3 24 13 12 0.351835 0.199627 0.282315 0.239765 0.36259 0.239765 + 200 3 25 26 27 0.363268 0.20527 0.282315 0.20527 0.352423 0.159963 + 200 3 27 26 28 0.352423 0.159963 0.282315 0.20527 0.322791 0.126795 + 200 3 28 26 29 0.322791 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 29 26 30 0.282315 0.114655 0.282315 0.20527 0.241838 0.126795 + 200 3 30 26 31 0.241838 0.126795 0.282315 0.20527 0.212206 0.159963 + 200 3 31 26 32 0.212206 0.159963 0.282315 0.20527 0.201361 0.20527 + 200 3 32 26 33 0.201361 0.20527 0.282315 0.20527 0.212206 0.159963 + 200 3 33 26 34 0.212206 0.159963 0.282315 0.20527 0.241838 0.126795 + 200 3 34 26 35 0.241838 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 35 26 36 0.282315 0.114655 0.282315 0.20527 0.322791 0.126795 + 200 3 36 26 37 0.322791 0.126795 0.282315 0.20527 0.352423 0.159963 + 200 3 37 26 25 0.352423 0.159963 0.282315 0.20527 0.363268 0.20527 + 200 3 38 39 40 0.348728 0.163706 0.280095 0.163706 0.339533 0.120458 + 200 3 40 39 41 0.339533 0.120458 0.280095 0.163706 0.314411 0.0887973 + 200 3 41 39 42 0.314411 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 42 39 43 0.280095 0.0772089 0.280095 0.163706 0.245778 0.0887973 + 200 3 43 39 44 0.245778 0.0887973 0.280095 0.163706 0.220656 0.120458 + 200 3 44 39 45 0.220656 0.120458 0.280095 0.163706 0.211461 0.163706 + 200 3 45 39 46 0.211461 0.163706 0.280095 0.163706 0.220656 0.120458 + 200 3 46 39 47 0.220656 0.120458 0.280095 0.163706 0.245778 0.0887973 + 200 3 47 39 48 0.245778 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 48 39 49 0.280095 0.0772089 0.280095 0.163706 0.314411 0.0887973 + 200 3 49 39 50 0.314411 0.0887973 0.280095 0.163706 0.339533 0.120458 + 200 3 50 39 38 0.339533 0.120458 0.280095 0.163706 0.348728 0.163706 + 200 3 51 52 53 0.342913 0.120977 0.27843 0.120977 0.334274 0.0873331 + 200 3 53 52 54 0.334274 0.0873331 0.27843 0.120977 0.310671 0.0627042 + 200 3 54 52 55 0.310671 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 55 52 56 0.27843 0.0536896 0.27843 0.120977 0.246188 0.0627042 + 200 3 56 52 57 0.246188 0.0627042 0.27843 0.120977 0.222585 0.0873331 + 200 3 57 52 58 0.222585 0.0873331 0.27843 0.120977 0.213946 0.120976 + 200 3 58 52 59 0.213946 0.120976 0.27843 0.120977 0.222585 0.0873331 + 200 3 59 52 60 0.222585 0.0873331 0.27843 0.120977 0.246188 0.0627042 + 200 3 60 52 61 0.246188 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 61 52 62 0.27843 0.0536896 0.27843 0.120977 0.310671 0.0627042 + 200 3 62 52 63 0.310671 0.0627042 0.27843 0.120977 0.334274 0.0873331 + 200 3 63 52 51 0.334274 0.0873331 0.27843 0.120977 0.342913 0.120977 + 200 3 64 65 66 0.296509 0.0438882 0.278322 0.0438882 0.294072 0.0264283 + 200 3 66 65 67 0.294072 0.0264283 0.278322 0.0438882 0.287416 0.0136467 + 200 3 67 65 68 0.287416 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 68 65 69 0.278322 0.00896829 0.278322 0.0438882 0.269229 0.0136467 + 200 3 69 65 70 0.269229 0.0136467 0.278322 0.0438882 0.262573 0.0264283 + 200 3 70 65 71 0.262573 0.0264283 0.278322 0.0438882 0.260136 0.0438882 + 200 3 71 65 72 0.260136 0.0438882 0.278322 0.0438882 0.262573 0.0264283 + 200 3 72 65 73 0.262573 0.0264283 0.278322 0.0438882 0.269229 0.0136467 + 200 3 73 65 74 0.269229 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 74 65 75 0.278322 0.00896829 0.278322 0.0438882 0.287416 0.0136467 + 200 3 75 65 76 0.287416 0.0136467 0.278322 0.0438882 0.294072 0.0264283 + 200 3 76 65 64 0.294072 0.0264283 0.278322 0.0438882 0.296509 0.0438882 + 200 3 76 77 75 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 75 77 74 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 74 77 73 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 73 77 72 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 72 77 71 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 71 77 70 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 70 77 69 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 69 77 68 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 68 77 67 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 67 77 66 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 66 77 64 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 64 77 76 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 + 200 3 63 78 62 0.162832 0.165519 0.0966577 0.0993443 0.187054 0.123566 + 200 3 62 78 61 0.187054 0.123566 0.0966577 0.0993443 0.187054 0.0751227 + 200 3 61 78 60 0.187054 0.0751227 0.0966577 0.0993443 0.162832 0.0331699 + 200 3 60 78 59 0.162832 0.0331699 0.0966577 0.0993443 0.120879 0.00894833 + 200 3 59 78 58 0.120879 0.00894833 0.0966577 0.0993443 0.0724362 0.00894833 + 200 3 58 78 57 0.0724362 0.00894833 0.0966577 0.0993443 0.0304832 0.0331699 + 200 3 57 78 56 0.0304832 0.0331699 0.0966577 0.0993443 0.00626171 0.0751228 + 200 3 56 78 55 0.00626171 0.0751228 0.0966577 0.0993443 0.00626171 0.123566 + 200 3 55 78 54 0.00626171 0.123566 0.0966577 0.0993443 0.0304832 0.165519 + 200 3 54 78 53 0.0304832 0.165519 0.0966577 0.0993443 0.0724362 0.18974 + 200 3 53 78 51 0.0724362 0.18974 0.0966577 0.0993443 0.120879 0.18974 + 200 3 51 78 63 0.120879 0.18974 0.0966577 0.0993443 0.162832 0.165519 + 200 3 50 79 49 0.189886 0.0911877 0.0966577 0.0993443 0.173318 0.0456661 + 200 3 49 79 48 0.173318 0.0456661 0.0966577 0.0993443 0.136208 0.0145276 + 200 3 48 79 47 0.136208 0.0145276 0.0966577 0.0993443 0.0885012 0.00611556 + 200 3 47 79 46 0.0885012 0.00611556 0.0966577 0.0993443 0.0429797 0.022684 + 200 3 46 79 45 0.0429797 0.022684 0.0966577 0.0993443 0.011841 0.0597937 + 200 3 45 79 44 0.011841 0.0597937 0.0966577 0.0993443 0.003429 0.107501 + 200 3 44 79 43 0.003429 0.107501 0.0966577 0.0993443 0.0199975 0.153022 + 200 3 43 79 42 0.0199975 0.153022 0.0966577 0.0993443 0.057107 0.184161 + 200 3 42 79 41 0.057107 0.184161 0.0966577 0.0993443 0.104814 0.192573 + 200 3 41 79 40 0.104814 0.192573 0.0966577 0.0993443 0.150336 0.176005 + 200 3 40 79 38 0.150336 0.176005 0.0966577 0.0993443 0.181474 0.138895 + 200 3 38 79 50 0.181474 0.138895 0.0966577 0.0993443 0.189886 0.0911877 + 200 3 37 80 36 0.190243 0.0993443 0.0966577 0.0993443 0.177705 0.0525519 + 200 3 36 80 35 0.177705 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 35 80 34 0.14345 0.0182974 0.0966577 0.0993443 0.0966577 0.00575948 + 200 3 34 80 33 0.0966577 0.00575948 0.0966577 0.0993443 0.0498653 0.0182974 + 200 3 33 80 32 0.0498653 0.0182974 0.0966577 0.0993443 0.0156108 0.052552 + 200 3 32 80 31 0.0156108 0.052552 0.0966577 0.0993443 0.00307286 0.0993444 + 200 3 31 80 30 0.00307286 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 30 80 29 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 29 80 28 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 28 80 27 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 27 80 25 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 25 80 37 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 24 81 23 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 23 81 22 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 22 81 21 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 21 81 20 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 20 81 19 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 19 81 18 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 18 81 17 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 17 81 16 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 16 81 15 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 15 81 14 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 14 81 12 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 12 81 24 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 +LEVEL 5 +POINTS 82 + 46.7522 -2.62461 -49.6945 + 44.0893 -2.63248 -53.8608 + 46.6303 -2.62855 -52.5507 + 41.8475 -2.62854 -49.4938 + 41.7135 -2.62461 -52.3082 + 44.3454 -2.63248 -48.1904 + 43.8185 131.427 -51.1412 + 43.9346 131.427 -50.6635 + 44.106 131.427 -51.5221 + 44.5431 131.427 -51.381 + 44.6595 131.427 -50.9011 + 44.3687 131.427 -50.523 + 16.528 30.991 -32.9046 + 44.2389 50.6867 -51.0223 + 11.1051 32.5465 -49.093 + 14.6048 33.0472 -65.8265 + 26.1149 27.7739 -78.7824 + 42.2642 33.1507 -84.0647 + 59.1108 32.9142 -80.6029 + 71.9498 30.991 -69.1399 + 77.3734 29.0428 -52.8548 + 73.8078 28.7802 -36.0982 + 62.5423 34.1446 -23.3768 + 46.0747 28.884 -17.9693 + 29.2759 29.4107 -21.4807 + 41.7865 56.8151 -74.5726 + 44.2389 71.9628 -51.0223 + 52.2805 54.2984 -68.6874 + 63.5406 52.2844 -64.6195 + 63.6986 50.2244 -52.798 + 65.7373 47.6518 -41.1392 + 55.6367 54.5569 -35.1823 + 46.4636 47.6433 -27.4568 + 36.1361 50.3605 -33.3878 + 24.9372 52.2844 -37.425 + 24.7915 54.1626 -49.1847 + 22.6498 56.8245 -60.717 + 32.9267 49.8841 -66.917 + 32.8555 76.0228 -66.2023 + 44.2389 93.8746 -51.0223 + 42.4339 69.0525 -66.5532 + 51.6782 74.7526 -68.3263 + 56.7586 74.1921 -60.2309 + 63.0799 73.5914 -53.1431 + 58.5884 79.2417 -44.9391 + 55.5614 72.2473 -35.8035 + 46.2258 79.2065 -35.5072 + 36.7793 73.6539 -33.7253 + 31.7281 74.1921 -41.8194 + 25.3998 74.6901 -48.8827 + 29.9602 69.0868 -57.2511 + 31.0951 98.4604 -56.2706 + 44.2389 113.363 -51.0223 + 37.0338 92.2031 -60.2921 + 42.0797 98.4177 -65.1619 + 48.6268 89.1351 -61.8173 + 55.4021 93.6716 -59.6574 + 55.8176 98.1793 -52.6496 + 57.3341 88.8589 -45.6502 + 51.4818 95.0565 -41.7766 + 46.2416 88.8168 -36.8754 + 39.9711 98.1948 -40.1948 + 33.0756 93.6716 -42.3871 + 32.6524 89.119 -49.4991 + 34.9502 111.292 -49.5003 + 44.2389 134.056 -51.0223 + 37.0142 107.983 -53.7823 + 38.2057 112.659 -58.394 + 42.9107 107.949 -58.8166 + 47.475 111.286 -59.9027 + 50.2074 111.726 -55.942 + 53.5255 112.15 -52.5522 + 51.4905 115.466 -48.3233 + 50.2561 110.746 -43.6404 + 45.6476 115.431 -43.2356 + 41.0121 112.143 -42.1386 + 38.2793 111.726 -46.1083 + 44.2389 93.6486 -51.0223 + 44.2389 111.713 -51.0223 + 44.2389 74.1605 -51.0223 + 44.2389 52.2487 -51.0223 + 44.2389 30.9726 -51.0223 +POLYGONS 140 + 200 3 0 1 2 0.0783653 0.0791578 0.0783653 0.138018 0.0613737 0.108588 + 200 3 1 3 4 0.0783653 0.138018 0.12934 0.108588 0.112349 0.138018 + 200 3 0 3 1 0.0783653 0.0791578 0.12934 0.108588 0.0783653 0.138018 + 200 3 5 3 0 0.112349 0.0791578 0.12934 0.108588 0.0783653 0.0791578 + 200 3 3 6 4 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 6 3 7 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 4 8 1 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 8 4 6 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 1 9 2 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 9 1 8 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 2 10 0 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 10 2 9 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 0 11 5 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 11 0 10 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 5 7 3 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 7 5 11 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 7 8 6 0.11132 0.108504 0.086818 0.0943576 0.103153 0.0943576 + 200 3 8 10 9 0.086818 0.0943576 0.086818 0.12265 0.0786506 0.108504 + 200 3 7 10 8 0.11132 0.108504 0.086818 0.12265 0.086818 0.0943576 + 200 3 11 10 7 0.103153 0.12265 0.086818 0.12265 0.11132 0.108504 + 200 3 12 13 14 0.36259 0.239765 0.282315 0.239765 0.351835 0.199627 + 200 3 14 13 15 0.351835 0.199627 0.282315 0.239765 0.322452 0.170244 + 200 3 15 13 16 0.322452 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 16 13 17 0.282315 0.159489 0.282315 0.239765 0.242177 0.170244 + 200 3 17 13 18 0.242177 0.170244 0.282315 0.239765 0.212794 0.199627 + 200 3 18 13 19 0.212794 0.199627 0.282315 0.239765 0.202039 0.239765 + 200 3 19 13 20 0.202039 0.239765 0.282315 0.239765 0.212794 0.199627 + 200 3 20 13 21 0.212794 0.199627 0.282315 0.239765 0.242177 0.170244 + 200 3 21 13 22 0.242177 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 22 13 23 0.282315 0.159489 0.282315 0.239765 0.322452 0.170244 + 200 3 23 13 24 0.322452 0.170244 0.282315 0.239765 0.351835 0.199627 + 200 3 24 13 12 0.351835 0.199627 0.282315 0.239765 0.36259 0.239765 + 200 3 25 26 27 0.348728 0.163706 0.280095 0.163706 0.339533 0.120458 + 200 3 27 26 28 0.339533 0.120458 0.280095 0.163706 0.314411 0.0887973 + 200 3 28 26 29 0.314411 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 29 26 30 0.280095 0.0772089 0.280095 0.163706 0.245778 0.0887973 + 200 3 30 26 31 0.245778 0.0887973 0.280095 0.163706 0.220656 0.120458 + 200 3 31 26 32 0.220656 0.120458 0.280095 0.163706 0.211461 0.163706 + 200 3 32 26 33 0.211461 0.163706 0.280095 0.163706 0.220656 0.120458 + 200 3 33 26 34 0.220656 0.120458 0.280095 0.163706 0.245778 0.0887973 + 200 3 34 26 35 0.245778 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 35 26 36 0.280095 0.0772089 0.280095 0.163706 0.314411 0.0887973 + 200 3 36 26 37 0.314411 0.0887973 0.280095 0.163706 0.339533 0.120458 + 200 3 37 26 25 0.339533 0.120458 0.280095 0.163706 0.348728 0.163706 + 200 3 38 39 40 0.342913 0.120977 0.27843 0.120977 0.334274 0.0873331 + 200 3 40 39 41 0.334274 0.0873331 0.27843 0.120977 0.310671 0.0627042 + 200 3 41 39 42 0.310671 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 42 39 43 0.27843 0.0536896 0.27843 0.120977 0.246188 0.0627042 + 200 3 43 39 44 0.246188 0.0627042 0.27843 0.120977 0.222585 0.0873331 + 200 3 44 39 45 0.222585 0.0873331 0.27843 0.120977 0.213946 0.120976 + 200 3 45 39 46 0.213946 0.120976 0.27843 0.120977 0.222585 0.0873331 + 200 3 46 39 47 0.222585 0.0873331 0.27843 0.120977 0.246188 0.0627042 + 200 3 47 39 48 0.246188 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 48 39 49 0.27843 0.0536896 0.27843 0.120977 0.310671 0.0627042 + 200 3 49 39 50 0.310671 0.0627042 0.27843 0.120977 0.334274 0.0873331 + 200 3 50 39 38 0.334274 0.0873331 0.27843 0.120977 0.342913 0.120977 + 200 3 51 52 53 0.339176 0.0966178 0.28065 0.0966178 0.331335 0.0642989 + 200 3 53 52 54 0.331335 0.0642989 0.28065 0.0966178 0.309913 0.0406398 + 200 3 54 52 55 0.309913 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 55 52 56 0.28065 0.0319799 0.28065 0.0966178 0.251386 0.0406398 + 200 3 56 52 57 0.251386 0.0406398 0.28065 0.0966178 0.229964 0.0642989 + 200 3 57 52 58 0.229964 0.0642989 0.28065 0.0966178 0.222123 0.0966176 + 200 3 58 52 59 0.222123 0.0966176 0.28065 0.0966178 0.229964 0.0642989 + 200 3 59 52 60 0.229964 0.0642989 0.28065 0.0966178 0.251386 0.0406398 + 200 3 60 52 61 0.251386 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 61 52 62 0.28065 0.0319799 0.28065 0.0966178 0.309913 0.0406398 + 200 3 62 52 63 0.309913 0.0406398 0.28065 0.0966178 0.331335 0.0642989 + 200 3 63 52 51 0.331335 0.0642989 0.28065 0.0966178 0.339176 0.0966178 + 200 3 64 65 66 0.296509 0.0438882 0.278322 0.0438882 0.294072 0.0264283 + 200 3 66 65 67 0.294072 0.0264283 0.278322 0.0438882 0.287416 0.0136467 + 200 3 67 65 68 0.287416 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 68 65 69 0.278322 0.00896829 0.278322 0.0438882 0.269229 0.0136467 + 200 3 69 65 70 0.269229 0.0136467 0.278322 0.0438882 0.262573 0.0264283 + 200 3 70 65 71 0.262573 0.0264283 0.278322 0.0438882 0.260136 0.0438882 + 200 3 71 65 72 0.260136 0.0438882 0.278322 0.0438882 0.262573 0.0264283 + 200 3 72 65 73 0.262573 0.0264283 0.278322 0.0438882 0.269229 0.0136467 + 200 3 73 65 74 0.269229 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 74 65 75 0.278322 0.00896829 0.278322 0.0438882 0.287416 0.0136467 + 200 3 75 65 76 0.287416 0.0136467 0.278322 0.0438882 0.294072 0.0264283 + 200 3 76 65 64 0.294072 0.0264283 0.278322 0.0438882 0.296509 0.0438882 + 200 3 63 77 62 0.136208 0.184161 0.0966576 0.0993444 0.173318 0.153022 + 200 3 62 77 61 0.173318 0.153022 0.0966576 0.0993444 0.189886 0.107501 + 200 3 61 77 60 0.189886 0.107501 0.0966576 0.0993444 0.181474 0.0597937 + 200 3 60 77 59 0.181474 0.0597937 0.0966576 0.0993444 0.150336 0.0226842 + 200 3 59 77 58 0.150336 0.0226842 0.0966576 0.0993444 0.104814 0.00611567 + 200 3 58 77 57 0.104814 0.00611567 0.0966576 0.0993444 0.057107 0.0145277 + 200 3 57 77 56 0.057107 0.0145277 0.0966576 0.0993444 0.0199974 0.0456663 + 200 3 56 77 55 0.0199974 0.0456663 0.0966576 0.0993444 0.00342888 0.091188 + 200 3 55 77 54 0.00342888 0.091188 0.0966576 0.0993444 0.011841 0.138895 + 200 3 54 77 53 0.011841 0.138895 0.0966576 0.0993444 0.0429796 0.176005 + 200 3 53 77 51 0.0429796 0.176005 0.0966576 0.0993444 0.0885012 0.192573 + 200 3 51 77 63 0.0885012 0.192573 0.0966576 0.0993444 0.136208 0.184161 + 200 3 76 78 75 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 75 78 74 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 74 78 73 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 73 78 72 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 72 78 71 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 71 78 70 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 70 78 69 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 69 78 68 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 68 78 67 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 67 78 66 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 66 78 64 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 64 78 76 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 + 200 3 50 79 49 0.162832 0.165519 0.0966577 0.0993443 0.187054 0.123566 + 200 3 49 79 48 0.187054 0.123566 0.0966577 0.0993443 0.187054 0.0751227 + 200 3 48 79 47 0.187054 0.0751227 0.0966577 0.0993443 0.162832 0.0331699 + 200 3 47 79 46 0.162832 0.0331699 0.0966577 0.0993443 0.120879 0.00894833 + 200 3 46 79 45 0.120879 0.00894833 0.0966577 0.0993443 0.0724362 0.00894833 + 200 3 45 79 44 0.0724362 0.00894833 0.0966577 0.0993443 0.0304832 0.0331699 + 200 3 44 79 43 0.0304832 0.0331699 0.0966577 0.0993443 0.00626171 0.0751228 + 200 3 43 79 42 0.00626171 0.0751228 0.0966577 0.0993443 0.00626171 0.123566 + 200 3 42 79 41 0.00626171 0.123566 0.0966577 0.0993443 0.0304832 0.165519 + 200 3 41 79 40 0.0304832 0.165519 0.0966577 0.0993443 0.0724362 0.18974 + 200 3 40 79 38 0.0724362 0.18974 0.0966577 0.0993443 0.120879 0.18974 + 200 3 38 79 50 0.120879 0.18974 0.0966577 0.0993443 0.162832 0.165519 + 200 3 37 80 36 0.189886 0.0911877 0.0966577 0.0993443 0.173318 0.0456661 + 200 3 36 80 35 0.173318 0.0456661 0.0966577 0.0993443 0.136208 0.0145276 + 200 3 35 80 34 0.136208 0.0145276 0.0966577 0.0993443 0.0885012 0.00611556 + 200 3 34 80 33 0.0885012 0.00611556 0.0966577 0.0993443 0.0429797 0.022684 + 200 3 33 80 32 0.0429797 0.022684 0.0966577 0.0993443 0.011841 0.0597937 + 200 3 32 80 31 0.011841 0.0597937 0.0966577 0.0993443 0.003429 0.107501 + 200 3 31 80 30 0.003429 0.107501 0.0966577 0.0993443 0.0199975 0.153022 + 200 3 30 80 29 0.0199975 0.153022 0.0966577 0.0993443 0.057107 0.184161 + 200 3 29 80 28 0.057107 0.184161 0.0966577 0.0993443 0.104814 0.192573 + 200 3 28 80 27 0.104814 0.192573 0.0966577 0.0993443 0.150336 0.176005 + 200 3 27 80 25 0.150336 0.176005 0.0966577 0.0993443 0.181474 0.138895 + 200 3 25 80 37 0.181474 0.138895 0.0966577 0.0993443 0.189886 0.0911877 + 200 3 24 81 23 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 23 81 22 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 22 81 21 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 21 81 20 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 20 81 19 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 19 81 18 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 18 81 17 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 17 81 16 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 16 81 15 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 15 81 14 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 14 81 12 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 12 81 24 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 diff --git a/data/base/features/mitrees2.pie b/data/base/features/mitrees2.pie index b690457ff72..a22afbe088c 100644 --- a/data/base/features/mitrees2.pie +++ b/data/base/features/mitrees2.pie @@ -1,103 +1,965 @@ -PIE 2 +PIE 3 TYPE 200 -TEXTURE 0 page-30-features-rockies.png 256 256 -LEVELS 1 +TEXTURE 0 page-30-features-rockies.png 0 0 +LEVELS 4 LEVEL 1 -POINTS 48 - -23 10 20 - -86 10 -2 - -64 10 -64 - -1 10 -41 - -83 0 -38 - -7 0 -10 - -7 102 -10 - -83 102 -38 - -31 0 -62 - -59 0 13 - -59 102 13 - -31 102 -62 - -31 0 5 - 14 0 71 - 14 102 71 - -31 102 5 - 40 10 45 - -14 10 84 - -52 10 30 - 2 10 -8 - -41 0 61 - 24 0 15 - 24 102 15 - -41 102 61 - 96 10 -4 - 58 10 50 - 4 10 12 - 43 10 -42 - 25 0 38 - 71 0 -28 - 71 102 -28 - 25 102 38 - 15 0 -18 - 81 0 28 - 81 102 28 - 15 102 -18 - 6 0 -92 - 27 0 -13 - 27 102 -13 - 6 102 -92 - -22 0 -42 - 55 0 -63 - 55 102 -63 - -22 102 -42 - 60 10 -29 - -4 10 -11 - -21 10 -75 - 43 10 -92 -POLYGONS 48 - 200 3 0 1 2 0 52 46 52 46 0 - 200 3 0 2 3 0 52 46 0 0 0 - 200 3 3 2 1 0 0 46 0 46 52 - 200 3 3 1 0 0 0 46 52 0 52 - 200 3 4 5 6 49 72 96 72 96 0 - 200 3 4 6 7 49 72 96 0 49 0 - 200 3 7 6 5 49 0 96 0 96 72 - 200 3 7 5 4 49 0 96 72 49 72 - 200 3 8 9 10 49 72 96 72 96 0 - 200 3 8 10 11 49 72 96 0 49 0 - 200 3 11 10 9 49 0 96 0 96 72 - 200 3 11 9 8 49 0 96 72 49 72 - 200 3 12 13 14 49 72 96 72 96 0 - 200 3 12 14 15 49 72 96 0 49 0 - 200 3 15 14 13 49 0 96 0 96 72 - 200 3 15 13 12 49 0 96 72 49 72 - 200 3 16 17 18 0 52 46 52 46 0 - 200 3 16 18 19 0 52 46 0 0 0 - 200 3 19 18 17 0 0 46 0 46 52 - 200 3 19 17 16 0 0 46 52 0 52 - 200 3 20 21 22 49 72 96 72 96 0 - 200 3 20 22 23 49 72 96 0 49 0 - 200 3 23 22 21 49 0 96 0 96 72 - 200 3 23 21 20 49 0 96 72 49 72 - 200 3 24 25 26 0 52 46 52 46 0 - 200 3 24 26 27 0 52 46 0 0 0 - 200 3 27 26 25 0 0 46 0 46 52 - 200 3 27 25 24 0 0 46 52 0 52 - 200 3 28 29 30 49 72 96 72 96 0 - 200 3 28 30 31 49 72 96 0 49 0 - 200 3 31 30 29 49 0 96 0 96 72 - 200 3 31 29 28 49 0 96 72 49 72 - 200 3 32 33 34 49 72 96 72 96 0 - 200 3 32 34 35 49 72 96 0 49 0 - 200 3 35 34 33 49 0 96 0 96 72 - 200 3 35 33 32 49 0 96 72 49 72 - 200 3 36 37 38 49 72 96 72 96 0 - 200 3 36 38 39 49 72 96 0 49 0 - 200 3 39 38 37 49 0 96 0 96 72 - 200 3 39 37 36 49 0 96 72 49 72 - 200 3 40 41 42 49 72 96 72 96 0 - 200 3 40 42 43 49 72 96 0 49 0 - 200 3 43 42 41 49 0 96 0 96 72 - 200 3 43 41 40 49 0 96 72 49 72 - 200 3 44 45 46 0 52 46 52 46 0 - 200 3 44 46 47 0 52 46 0 0 0 - 200 3 47 46 45 0 0 46 0 46 52 - 200 3 47 45 44 0 0 46 52 0 52 \ No newline at end of file +POINTS 91 + -4.86286 -1.73383 37.8742 + -10.0239 -1.73903 37.05 + -7.20412 -1.73643 35.9638 + -8.15031 -1.73643 41.8887 + -10.467 -1.73383 40.0171 + -5.36591 -1.73903 40.8318 + -8.06648 86.8215 39.1747 + -7.60764 86.8216 39.4186 + -8.16531 86.8215 38.68 + -7.74679 86.8216 38.4339 + -7.28597 86.8215 38.6792 + -7.19166 86.8215 39.1745 + -12.8384 8.69427 73.5396 + -7.67722 21.7054 38.9262 + -29.4329 9.72186 66.4485 + -40.189 10.0526 51.9279 + -42.3339 6.56905 33.7355 + -35.1592 10.121 17.2705 + -20.5891 9.96476 6.39853 + -2.51603 8.69426 4.31291 + 14.1554 7.4073 11.4714 + 24.8835 7.23384 26.0601 + 27.0149 10.7776 43.8948 + 19.7156 7.30236 60.6989 + 5.13988 7.65031 71.4984 + 22.0882 19.8591 42.7757 + -7.67722 34.7286 38.9262 + 12.0604 24.0235 53.7936 + 3.82925 21.8309 66.5422 + -10.9147 21.7267 63.4058 + -25.9447 21.5946 62.8089 + -30.5089 19.3695 48.4191 + -37.4685 23.5187 35.2392 + -27.3059 19.394 23.9083 + -19.1808 21.7514 11.3087 + -4.43797 21.7267 14.4355 + 10.5879 21.6741 15.0415 + 15.0961 23.9994 29.2666 + -27.9986 37.7452 24.3168 + -7.67722 47.7519 38.9262 + -15.978 36.0826 20.1642 + -4.85432 34.7522 14.1299 + 4.59259 33.3913 22.3107 + 15.2322 31.6918 28.892 + 12.84 36.2534 41.054 + 12.4962 31.6862 53.726 + 0.556371 33.4812 57.7149 + -10.5001 34.7522 63.7226 + -19.8895 35.9929 55.5754 + -30.5016 37.7514 49.1644 + -28.1775 33.1665 36.6924 + -27.6631 48.9821 37.2508 + -7.67723 60.7751 38.9262 + -21.2106 44.3775 29.4399 + -16.116 48.143 20.8937 + -6.15334 47.7727 22.5692 + 3.88529 47.3759 22.5568 + 7.20858 51.1085 31.8679 + 12.2966 46.488 40.677 + 5.97149 51.0853 48.2578 + 0.741757 47.4172 56.9698 + -9.1993 47.7727 55.2722 + -19.2236 48.1017 55.3073 + -22.6283 44.4001 45.8262 + -21.0566 63.9538 45.6189 + -7.67723 73.7983 38.9262 + -20.0601 59.8202 38.1035 + -20.3607 63.9256 30.6971 + -13.1195 57.7935 27.8765 + -6.65351 60.7903 24.0434 + -0.827355 63.7681 28.6388 + 5.76585 57.611 32.3589 + 4.71309 61.7052 39.7022 + 4.90209 57.5832 47.284 + -2.1249 63.7784 49.9039 + -8.70091 60.7903 53.8091 + -14.6148 57.7828 49.1465 + -13.0014 73.5203 47.3311 + -7.67724 88.558 38.9262 + -14.9328 71.3344 42.6927 + -17.7377 74.4231 38.5116 + -14.7658 71.3116 34.4989 + -12.4167 73.5161 30.1313 + -7.36908 73.8067 30.7562 + -2.36076 74.0867 30.5174 + -0.450915 76.2774 35.0957 + 2.3801 73.1596 39.3606 + -0.5381 76.2544 43.2845 + -2.9286 74.0825 47.716 + -7.98357 73.8067 47.0852 + -7.67722 8.68215 38.9262 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.0791578 0.0783653 0.138018 0.0613737 0.108588 + 200 3 1 3 4 0.0783653 0.138018 0.12934 0.108588 0.112349 0.138018 + 200 3 0 3 1 0.0783653 0.0791578 0.12934 0.108588 0.0783653 0.138018 + 200 3 5 3 0 0.112349 0.0791578 0.12934 0.108588 0.0783653 0.0791578 + 200 3 3 6 4 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 6 3 7 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 4 8 1 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 8 4 6 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 1 9 2 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 9 1 8 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 2 10 0 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 10 2 9 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 0 11 5 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 11 0 10 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 5 7 3 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 7 5 11 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 7 8 6 0.11132 0.108504 0.086818 0.0943576 0.103153 0.0943576 + 200 3 8 10 9 0.086818 0.0943576 0.086818 0.12265 0.0786506 0.108504 + 200 3 7 10 8 0.11132 0.108504 0.086818 0.12265 0.086818 0.0943576 + 200 3 11 10 7 0.103153 0.12265 0.086818 0.12265 0.11132 0.108504 + 200 3 12 13 14 0.36259 0.239765 0.282315 0.239765 0.351835 0.199627 + 200 3 14 13 15 0.351835 0.199627 0.282315 0.239765 0.322452 0.170244 + 200 3 15 13 16 0.322452 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 16 13 17 0.282315 0.159489 0.282315 0.239765 0.242177 0.170244 + 200 3 17 13 18 0.242177 0.170244 0.282315 0.239765 0.212794 0.199627 + 200 3 18 13 19 0.212794 0.199627 0.282315 0.239765 0.202039 0.239765 + 200 3 19 13 20 0.202039 0.239765 0.282315 0.239765 0.212794 0.199627 + 200 3 20 13 21 0.212794 0.199627 0.282315 0.239765 0.242177 0.170244 + 200 3 21 13 22 0.242177 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 22 13 23 0.282315 0.159489 0.282315 0.239765 0.322452 0.170244 + 200 3 23 13 24 0.322452 0.170244 0.282315 0.239765 0.351835 0.199627 + 200 3 24 13 12 0.351835 0.199627 0.282315 0.239765 0.36259 0.239765 + 200 3 25 26 27 0.363268 0.20527 0.282315 0.20527 0.352423 0.159963 + 200 3 27 26 28 0.352423 0.159963 0.282315 0.20527 0.322791 0.126795 + 200 3 28 26 29 0.322791 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 29 26 30 0.282315 0.114655 0.282315 0.20527 0.241838 0.126795 + 200 3 30 26 31 0.241838 0.126795 0.282315 0.20527 0.212206 0.159963 + 200 3 31 26 32 0.212206 0.159963 0.282315 0.20527 0.201361 0.20527 + 200 3 32 26 33 0.201361 0.20527 0.282315 0.20527 0.212206 0.159963 + 200 3 33 26 34 0.212206 0.159963 0.282315 0.20527 0.241838 0.126795 + 200 3 34 26 35 0.241838 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 35 26 36 0.282315 0.114655 0.282315 0.20527 0.322791 0.126795 + 200 3 36 26 37 0.322791 0.126795 0.282315 0.20527 0.352423 0.159963 + 200 3 37 26 25 0.352423 0.159963 0.282315 0.20527 0.363268 0.20527 + 200 3 38 39 40 0.348728 0.163706 0.280095 0.163706 0.339533 0.120458 + 200 3 40 39 41 0.339533 0.120458 0.280095 0.163706 0.314411 0.0887973 + 200 3 41 39 42 0.314411 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 42 39 43 0.280095 0.0772089 0.280095 0.163706 0.245778 0.0887973 + 200 3 43 39 44 0.245778 0.0887973 0.280095 0.163706 0.220656 0.120458 + 200 3 44 39 45 0.220656 0.120458 0.280095 0.163706 0.211461 0.163706 + 200 3 45 39 46 0.211461 0.163706 0.280095 0.163706 0.220656 0.120458 + 200 3 46 39 47 0.220656 0.120458 0.280095 0.163706 0.245778 0.0887973 + 200 3 47 39 48 0.245778 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 48 39 49 0.280095 0.0772089 0.280095 0.163706 0.314411 0.0887973 + 200 3 49 39 50 0.314411 0.0887973 0.280095 0.163706 0.339533 0.120458 + 200 3 50 39 38 0.339533 0.120458 0.280095 0.163706 0.348728 0.163706 + 200 3 51 52 53 0.342913 0.120977 0.27843 0.120977 0.334274 0.0873331 + 200 3 53 52 54 0.334274 0.0873331 0.27843 0.120977 0.310671 0.0627042 + 200 3 54 52 55 0.310671 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 55 52 56 0.27843 0.0536896 0.27843 0.120977 0.246188 0.0627042 + 200 3 56 52 57 0.246188 0.0627042 0.27843 0.120977 0.222585 0.0873331 + 200 3 57 52 58 0.222585 0.0873331 0.27843 0.120977 0.213946 0.120976 + 200 3 58 52 59 0.213946 0.120976 0.27843 0.120977 0.222585 0.0873331 + 200 3 59 52 60 0.222585 0.0873331 0.27843 0.120977 0.246188 0.0627042 + 200 3 60 52 61 0.246188 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 61 52 62 0.27843 0.0536896 0.27843 0.120977 0.310671 0.0627042 + 200 3 62 52 63 0.310671 0.0627042 0.27843 0.120977 0.334274 0.0873331 + 200 3 63 52 51 0.334274 0.0873331 0.27843 0.120977 0.342913 0.120977 + 200 3 64 65 66 0.339176 0.0966178 0.28065 0.0966178 0.331335 0.0642989 + 200 3 66 65 67 0.331335 0.0642989 0.28065 0.0966178 0.309913 0.0406398 + 200 3 67 65 68 0.309913 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 68 65 69 0.28065 0.0319799 0.28065 0.0966178 0.251386 0.0406398 + 200 3 69 65 70 0.251386 0.0406398 0.28065 0.0966178 0.229964 0.0642989 + 200 3 70 65 71 0.229964 0.0642989 0.28065 0.0966178 0.222123 0.0966176 + 200 3 71 65 72 0.222123 0.0966176 0.28065 0.0966178 0.229964 0.0642989 + 200 3 72 65 73 0.229964 0.0642989 0.28065 0.0966178 0.251386 0.0406398 + 200 3 73 65 74 0.251386 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 74 65 75 0.28065 0.0319799 0.28065 0.0966178 0.309913 0.0406398 + 200 3 75 65 76 0.309913 0.0406398 0.28065 0.0966178 0.331335 0.0642989 + 200 3 76 65 64 0.331335 0.0642989 0.28065 0.0966178 0.339176 0.0966178 + 200 3 77 78 79 0.296509 0.0438882 0.278322 0.0438882 0.294072 0.0264283 + 200 3 79 78 80 0.294072 0.0264283 0.278322 0.0438882 0.287416 0.0136467 + 200 3 80 78 81 0.287416 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 81 78 82 0.278322 0.00896829 0.278322 0.0438882 0.269229 0.0136467 + 200 3 82 78 83 0.269229 0.0136467 0.278322 0.0438882 0.262573 0.0264283 + 200 3 83 78 84 0.262573 0.0264283 0.278322 0.0438882 0.260136 0.0438882 + 200 3 84 78 85 0.260136 0.0438882 0.278322 0.0438882 0.262573 0.0264283 + 200 3 85 78 86 0.262573 0.0264283 0.278322 0.0438882 0.269229 0.0136467 + 200 3 86 78 87 0.269229 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 87 78 88 0.278322 0.00896829 0.278322 0.0438882 0.287416 0.0136467 + 200 3 88 78 89 0.287416 0.0136467 0.278322 0.0438882 0.294072 0.0264283 + 200 3 89 78 77 0.294072 0.0264283 0.278322 0.0438882 0.296509 0.0438882 + 200 3 76 52 75 0.136208 0.184161 0.0966576 0.0993444 0.173318 0.153022 + 200 3 75 52 74 0.173318 0.153022 0.0966576 0.0993444 0.189886 0.107501 + 200 3 74 52 73 0.189886 0.107501 0.0966576 0.0993444 0.181474 0.0597937 + 200 3 73 52 72 0.181474 0.0597937 0.0966576 0.0993444 0.150336 0.0226842 + 200 3 72 52 71 0.150336 0.0226842 0.0966576 0.0993444 0.104814 0.00611567 + 200 3 71 52 70 0.104814 0.00611567 0.0966576 0.0993444 0.057107 0.0145277 + 200 3 70 52 69 0.057107 0.0145277 0.0966576 0.0993444 0.0199974 0.0456663 + 200 3 69 52 68 0.0199974 0.0456663 0.0966576 0.0993444 0.00342888 0.091188 + 200 3 68 52 67 0.00342888 0.091188 0.0966576 0.0993444 0.011841 0.138895 + 200 3 67 52 66 0.011841 0.138895 0.0966576 0.0993444 0.0429796 0.176005 + 200 3 66 52 64 0.0429796 0.176005 0.0966576 0.0993444 0.0885012 0.192573 + 200 3 64 52 76 0.0885012 0.192573 0.0966576 0.0993444 0.136208 0.184161 + 200 3 89 65 88 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 88 65 87 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 87 65 86 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 86 65 85 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 85 65 84 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 84 65 83 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 83 65 82 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 82 65 81 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 81 65 80 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 80 65 79 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 79 65 77 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 77 65 89 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 + 200 3 63 39 62 0.162832 0.165519 0.0966577 0.0993443 0.187054 0.123566 + 200 3 62 39 61 0.187054 0.123566 0.0966577 0.0993443 0.187054 0.0751227 + 200 3 61 39 60 0.187054 0.0751227 0.0966577 0.0993443 0.162832 0.0331699 + 200 3 60 39 59 0.162832 0.0331699 0.0966577 0.0993443 0.120879 0.00894833 + 200 3 59 39 58 0.120879 0.00894833 0.0966577 0.0993443 0.0724362 0.00894833 + 200 3 58 39 57 0.0724362 0.00894833 0.0966577 0.0993443 0.0304832 0.0331699 + 200 3 57 39 56 0.0304832 0.0331699 0.0966577 0.0993443 0.00626171 0.0751228 + 200 3 56 39 55 0.00626171 0.0751228 0.0966577 0.0993443 0.00626171 0.123566 + 200 3 55 39 54 0.00626171 0.123566 0.0966577 0.0993443 0.0304832 0.165519 + 200 3 54 39 53 0.0304832 0.165519 0.0966577 0.0993443 0.0724362 0.18974 + 200 3 53 39 51 0.0724362 0.18974 0.0966577 0.0993443 0.120879 0.18974 + 200 3 51 39 63 0.120879 0.18974 0.0966577 0.0993443 0.162832 0.165519 + 200 3 50 26 49 0.189886 0.0911877 0.0966577 0.0993443 0.173318 0.0456661 + 200 3 49 26 48 0.173318 0.0456661 0.0966577 0.0993443 0.136208 0.0145276 + 200 3 48 26 47 0.136208 0.0145276 0.0966577 0.0993443 0.0885012 0.00611556 + 200 3 47 26 46 0.0885012 0.00611556 0.0966577 0.0993443 0.0429797 0.022684 + 200 3 46 26 45 0.0429797 0.022684 0.0966577 0.0993443 0.011841 0.0597937 + 200 3 45 26 44 0.011841 0.0597937 0.0966577 0.0993443 0.003429 0.107501 + 200 3 44 26 43 0.003429 0.107501 0.0966577 0.0993443 0.0199975 0.153022 + 200 3 43 26 42 0.0199975 0.153022 0.0966577 0.0993443 0.057107 0.184161 + 200 3 42 26 41 0.057107 0.184161 0.0966577 0.0993443 0.104814 0.192573 + 200 3 41 26 40 0.104814 0.192573 0.0966577 0.0993443 0.150336 0.176005 + 200 3 40 26 38 0.150336 0.176005 0.0966577 0.0993443 0.181474 0.138895 + 200 3 38 26 50 0.181474 0.138895 0.0966577 0.0993443 0.189886 0.0911877 + 200 3 37 13 36 0.190243 0.0993443 0.0966577 0.0993443 0.177705 0.0525519 + 200 3 36 13 35 0.177705 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 35 13 34 0.14345 0.0182974 0.0966577 0.0993443 0.0966577 0.00575948 + 200 3 34 13 33 0.0966577 0.00575948 0.0966577 0.0993443 0.0498653 0.0182974 + 200 3 33 13 32 0.0498653 0.0182974 0.0966577 0.0993443 0.0156108 0.052552 + 200 3 32 13 31 0.0156108 0.052552 0.0966577 0.0993443 0.00307286 0.0993444 + 200 3 31 13 30 0.00307286 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 30 13 29 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 29 13 28 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 28 13 27 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 27 13 25 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 25 13 37 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 24 90 23 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 23 90 22 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 22 90 21 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 21 90 20 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 20 90 19 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 19 90 18 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 18 90 17 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 17 90 16 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 16 90 15 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 15 90 14 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 14 90 12 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 12 90 24 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 +LEVEL 2 +POINTS 81 + 16.454 -1.99701 -55.3056 + 14.6015 -2.00299 -51.2527 + 14.3511 -2 -53.817 + 19.0039 -2 -51.6902 + 16.9385 -1.99701 -50.2129 + 18.7695 -2.00299 -54.2187 + 16.793 100 -52.3772 + 17.0979 100 -52.6986 + 16.364 100 -52.4086 + 16.2571 100 -52.8086 + 16.5636 100 -53.1313 + 16.992 100 -53.096 + 43.9423 15.2745 -40.6302 + 16.6775 30.2606 -52.7536 + 34.3367 16.4581 -28.6102 + 19.9562 16.839 -23.0792 + 4.51991 12.8267 -25.46 + -7.37463 16.9178 -35.1047 + -12.9895 16.7378 -49.5522 + -10.5873 15.2745 -64.877 + -0.908819 13.7922 -76.9449 + 13.5213 13.5924 -82.4373 + 28.6606 17.674 -80.127 + 40.8054 13.6713 -70.3026 + 46.3594 14.0721 -55.867 + 26.6191 29.9863 -76.3338 + 16.6775 47.1129 -52.7536 + 33.3883 34.7829 -65.5853 + 41.9887 32.2575 -55.9188 + 36.0539 32.1375 -44.5186 + 32.1406 31.9852 -32.3051 + 19.2778 29.4225 -31.832 + 6.86349 34.2014 -29.1151 + -0.132223 29.4507 -40.0458 + -8.63432 32.1659 -49.5912 + -2.70772 32.1375 -60.9926 + 1.21216 32.0768 -73.2006 + 13.9269 34.7551 -73.6653 + 0.0456848 54.9089 -39.3836 + 16.6775 66.4344 -52.7536 + -0.628754 52.9939 -50.206 + -3.05365 51.4615 -60.7201 + 5.81956 49.8941 -66.6191 + 13.6501 47.9367 -73.8624 + 23.0983 53.1906 -69.1271 + 33.432 47.9302 -65.9587 + 33.9904 49.9977 -55.2399 + 36.4086 51.4615 -44.7872 + 27.5762 52.8906 -38.9278 + 19.8918 54.916 -31.6683 + 10.1734 49.6352 -36.4182 + 19.1296 73.6612 -40.2362 + 16.6775 85 -52.7536 + 13.1815 68.9002 -42.7666 + 7.0275 73.6287 -44.2062 + 6.35904 66.5658 -50.7983 + 4.68206 70.0175 -56.9841 + 9.78474 73.4473 -60.7246 + 14.3429 66.3556 -65.2948 + 20.1367 71.0713 -62.7574 + 26.4095 66.3236 -61.1861 + 26.9618 73.4591 -54.8157 + 28.6729 70.0175 -48.5231 + 23.4951 66.5535 -44.7258 + 22.3708 84.6798 -46.4649 + 16.6775 102 -52.7536 + 18.1198 82.1621 -45.9342 + 14.0457 85.7196 -44.5818 + 11.4255 82.1359 -47.9375 + 8.37178 84.6749 -50.8623 + 10.0347 85.0097 -54.8674 + 10.9791 85.3322 -59.0369 + 15.1758 87.8554 -59.5635 + 19.3248 84.2643 -60.9183 + 21.8843 87.8289 -57.6269 + 24.9811 85.3273 -54.6536 + 23.3115 85.0097 -50.6438 + 16.6775 70 -52.7536 + 16.6775 51.4344 -52.7536 + 16.6775 32.1129 -52.7536 + 16.6775 15.2606 -52.7536 +POLYGONS 140 + 200 3 0 1 2 0.0783653 0.0791578 0.0783653 0.138018 0.0613737 0.108588 + 200 3 1 3 4 0.0783653 0.138018 0.12934 0.108588 0.112349 0.138018 + 200 3 0 3 1 0.0783653 0.0791578 0.12934 0.108588 0.0783653 0.138018 + 200 3 5 3 0 0.112349 0.0791578 0.12934 0.108588 0.0783653 0.0791578 + 200 3 3 6 4 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 6 3 7 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 4 8 1 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 8 4 6 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 1 9 2 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 9 1 8 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 2 10 0 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 10 2 9 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 0 11 5 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 11 0 10 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 5 7 3 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 7 5 11 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 7 8 6 0.11132 0.108504 0.086818 0.0943576 0.103153 0.0943576 + 200 3 8 10 9 0.086818 0.0943576 0.086818 0.12265 0.0786506 0.108504 + 200 3 7 10 8 0.11132 0.108504 0.086818 0.12265 0.086818 0.0943576 + 200 3 11 10 7 0.103153 0.12265 0.086818 0.12265 0.11132 0.108504 + 200 3 12 13 14 0.36259 0.239765 0.282315 0.239765 0.351835 0.199627 + 200 3 14 13 15 0.351835 0.199627 0.282315 0.239765 0.322452 0.170244 + 200 3 15 13 16 0.322452 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 16 13 17 0.282315 0.159489 0.282315 0.239765 0.242177 0.170244 + 200 3 17 13 18 0.242177 0.170244 0.282315 0.239765 0.212794 0.199627 + 200 3 18 13 19 0.212794 0.199627 0.282315 0.239765 0.202039 0.239765 + 200 3 19 13 20 0.202039 0.239765 0.282315 0.239765 0.212794 0.199627 + 200 3 20 13 21 0.212794 0.199627 0.282315 0.239765 0.242177 0.170244 + 200 3 21 13 22 0.242177 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 22 13 23 0.282315 0.159489 0.282315 0.239765 0.322452 0.170244 + 200 3 23 13 24 0.322452 0.170244 0.282315 0.239765 0.351835 0.199627 + 200 3 24 13 12 0.351835 0.199627 0.282315 0.239765 0.36259 0.239765 + 200 3 25 26 27 0.363268 0.20527 0.282315 0.20527 0.352423 0.159963 + 200 3 27 26 28 0.352423 0.159963 0.282315 0.20527 0.322791 0.126795 + 200 3 28 26 29 0.322791 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 29 26 30 0.282315 0.114655 0.282315 0.20527 0.241838 0.126795 + 200 3 30 26 31 0.241838 0.126795 0.282315 0.20527 0.212206 0.159963 + 200 3 31 26 32 0.212206 0.159963 0.282315 0.20527 0.201361 0.20527 + 200 3 32 26 33 0.201361 0.20527 0.282315 0.20527 0.212206 0.159963 + 200 3 33 26 34 0.212206 0.159963 0.282315 0.20527 0.241838 0.126795 + 200 3 34 26 35 0.241838 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 35 26 36 0.282315 0.114655 0.282315 0.20527 0.322791 0.126795 + 200 3 36 26 37 0.322791 0.126795 0.282315 0.20527 0.352423 0.159963 + 200 3 37 26 25 0.352423 0.159963 0.282315 0.20527 0.363268 0.20527 + 200 3 38 39 40 0.348728 0.163706 0.280095 0.163706 0.339533 0.120458 + 200 3 40 39 41 0.339533 0.120458 0.280095 0.163706 0.314411 0.0887973 + 200 3 41 39 42 0.314411 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 42 39 43 0.280095 0.0772089 0.280095 0.163706 0.245778 0.0887973 + 200 3 43 39 44 0.245778 0.0887973 0.280095 0.163706 0.220656 0.120458 + 200 3 44 39 45 0.220656 0.120458 0.280095 0.163706 0.211461 0.163706 + 200 3 45 39 46 0.211461 0.163706 0.280095 0.163706 0.220656 0.120458 + 200 3 46 39 47 0.220656 0.120458 0.280095 0.163706 0.245778 0.0887973 + 200 3 47 39 48 0.245778 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 48 39 49 0.280095 0.0772089 0.280095 0.163706 0.314411 0.0887973 + 200 3 49 39 50 0.314411 0.0887973 0.280095 0.163706 0.339533 0.120458 + 200 3 50 39 38 0.339533 0.120458 0.280095 0.163706 0.348728 0.163706 + 200 3 51 52 53 0.339176 0.0966178 0.28065 0.0966178 0.331335 0.0642989 + 200 3 53 52 54 0.331335 0.0642989 0.28065 0.0966178 0.309913 0.0406398 + 200 3 54 52 55 0.309913 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 55 52 56 0.28065 0.0319799 0.28065 0.0966178 0.251386 0.0406398 + 200 3 56 52 57 0.251386 0.0406398 0.28065 0.0966178 0.229964 0.0642989 + 200 3 57 52 58 0.229964 0.0642989 0.28065 0.0966178 0.222123 0.0966176 + 200 3 58 52 59 0.222123 0.0966176 0.28065 0.0966178 0.229964 0.0642989 + 200 3 59 52 60 0.229964 0.0642989 0.28065 0.0966178 0.251386 0.0406398 + 200 3 60 52 61 0.251386 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 61 52 62 0.28065 0.0319799 0.28065 0.0966178 0.309913 0.0406398 + 200 3 62 52 63 0.309913 0.0406398 0.28065 0.0966178 0.331335 0.0642989 + 200 3 63 52 51 0.331335 0.0642989 0.28065 0.0966178 0.339176 0.0966178 + 200 3 64 65 66 0.296509 0.0438882 0.278322 0.0438882 0.294072 0.0264283 + 200 3 66 65 67 0.294072 0.0264283 0.278322 0.0438882 0.287416 0.0136467 + 200 3 67 65 68 0.287416 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 68 65 69 0.278322 0.00896829 0.278322 0.0438882 0.269229 0.0136467 + 200 3 69 65 70 0.269229 0.0136467 0.278322 0.0438882 0.262573 0.0264283 + 200 3 70 65 71 0.262573 0.0264283 0.278322 0.0438882 0.260136 0.0438882 + 200 3 71 65 72 0.260136 0.0438882 0.278322 0.0438882 0.262573 0.0264283 + 200 3 72 65 73 0.262573 0.0264283 0.278322 0.0438882 0.269229 0.0136467 + 200 3 73 65 74 0.269229 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 74 65 75 0.278322 0.00896829 0.278322 0.0438882 0.287416 0.0136467 + 200 3 75 65 76 0.287416 0.0136467 0.278322 0.0438882 0.294072 0.0264283 + 200 3 76 65 64 0.294072 0.0264283 0.278322 0.0438882 0.296509 0.0438882 + 200 3 63 77 62 0.136208 0.184161 0.0966576 0.0993444 0.173318 0.153022 + 200 3 62 77 61 0.173318 0.153022 0.0966576 0.0993444 0.189886 0.107501 + 200 3 61 77 60 0.189886 0.107501 0.0966576 0.0993444 0.181474 0.0597937 + 200 3 60 77 59 0.181474 0.0597937 0.0966576 0.0993444 0.150336 0.0226842 + 200 3 59 77 58 0.150336 0.0226842 0.0966576 0.0993444 0.104814 0.00611567 + 200 3 58 77 57 0.104814 0.00611567 0.0966576 0.0993444 0.057107 0.0145277 + 200 3 57 77 56 0.057107 0.0145277 0.0966576 0.0993444 0.0199974 0.0456663 + 200 3 56 77 55 0.0199974 0.0456663 0.0966576 0.0993444 0.00342888 0.091188 + 200 3 55 77 54 0.00342888 0.091188 0.0966576 0.0993444 0.011841 0.138895 + 200 3 54 77 53 0.011841 0.138895 0.0966576 0.0993444 0.0429796 0.176005 + 200 3 53 77 51 0.0429796 0.176005 0.0966576 0.0993444 0.0885012 0.192573 + 200 3 51 77 63 0.0885012 0.192573 0.0966576 0.0993444 0.136208 0.184161 + 200 3 76 52 75 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 75 52 74 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 74 52 73 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 73 52 72 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 72 52 71 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 71 52 70 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 70 52 69 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 69 52 68 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 68 52 67 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 67 52 66 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 66 52 64 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 64 52 76 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 + 200 3 50 78 49 0.189886 0.0911877 0.0966577 0.0993443 0.173318 0.0456661 + 200 3 49 78 48 0.173318 0.0456661 0.0966577 0.0993443 0.136208 0.0145276 + 200 3 48 78 47 0.136208 0.0145276 0.0966577 0.0993443 0.0885012 0.00611556 + 200 3 47 78 46 0.0885012 0.00611556 0.0966577 0.0993443 0.0429797 0.022684 + 200 3 46 78 45 0.0429797 0.022684 0.0966577 0.0993443 0.011841 0.0597937 + 200 3 45 78 44 0.011841 0.0597937 0.0966577 0.0993443 0.003429 0.107501 + 200 3 44 78 43 0.003429 0.107501 0.0966577 0.0993443 0.0199975 0.153022 + 200 3 43 78 42 0.0199975 0.153022 0.0966577 0.0993443 0.057107 0.184161 + 200 3 42 78 41 0.057107 0.184161 0.0966577 0.0993443 0.104814 0.192573 + 200 3 41 78 40 0.104814 0.192573 0.0966577 0.0993443 0.150336 0.176005 + 200 3 40 78 38 0.150336 0.176005 0.0966577 0.0993443 0.181474 0.138895 + 200 3 38 78 50 0.181474 0.138895 0.0966577 0.0993443 0.189886 0.0911877 + 200 3 37 79 36 0.190243 0.0993443 0.0966577 0.0993443 0.177705 0.0525519 + 200 3 36 79 35 0.177705 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 35 79 34 0.14345 0.0182974 0.0966577 0.0993443 0.0966577 0.00575948 + 200 3 34 79 33 0.0966577 0.00575948 0.0966577 0.0993443 0.0498653 0.0182974 + 200 3 33 79 32 0.0498653 0.0182974 0.0966577 0.0993443 0.0156108 0.052552 + 200 3 32 79 31 0.0156108 0.052552 0.0966577 0.0993443 0.00307286 0.0993444 + 200 3 31 79 30 0.00307286 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 30 79 29 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 29 79 28 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 28 79 27 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 27 79 25 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 25 79 37 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 24 80 23 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 23 80 22 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 22 80 21 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 21 80 20 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 20 80 19 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 19 80 18 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 18 80 17 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 17 80 16 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 16 80 15 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 15 80 14 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 14 80 12 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 12 80 24 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 +LEVEL 3 +POINTS 91 + -46.5112 -2.23372 -21.9769 + -42.0879 -2.24042 -23.6622 + -43.8103 -2.23707 -21.5354 + -45.745 -2.23707 -26.6134 + -43.0809 -2.23372 -26.1913 + -47.4528 -2.24042 -24.5256 + -44.5844 111.854 -24.4453 + -45.0547 111.854 -24.4294 + -44.2833 111.854 -24.1017 + -44.5006 111.854 -23.7194 + -44.9731 111.854 -23.7037 + -45.2709 111.854 -24.0498 + -56.3679 11.201 -53.5744 + -44.7776 27.9634 -24.0744 + -40.1387 12.5248 -55.5074 + -25.1347 12.9509 -48.9709 + -15.2303 8.463 -35.661 + -13.4214 13.0391 -19.4957 + -19.9445 12.8377 -4.3784 + -33.1874 11.2009 5.42552 + -49.5074 9.54295 7.34045 + -64.5202 9.31947 0.73774 + -74.2524 13.8849 -12.2973 + -76.1167 9.40774 -28.7852 + -69.5565 9.85602 -43.8481 + -69.8797 25.5847 -13.6453 + -44.7776 44.7414 -24.0744 + -66.9879 30.9499 -26.8245 + -66.2882 28.1251 -40.5503 + -53.2985 27.9909 -44.7512 + -41.2319 27.8206 -51.0744 + -31.147 24.954 -41.8426 + -19.7286 30.2995 -34.6428 + -22.5849 24.9856 -21.1568 + -23.2687 28.0227 -7.59596 + -36.2531 27.9909 -3.3881 + -48.3206 27.923 2.92618 + -58.2872 30.9188 -6.20168 + -22.2258 48.6277 -21.7905 + -44.7776 61.5195 -24.0744 + -29.7842 46.4858 -13.0993 + -35.7882 44.7718 -3.33637 + -46.8998 43.0185 -5.48851 + -58.2247 40.8291 -5.84624 + -61.8429 46.7058 -16.473 + -67.2994 40.8219 -26.5746 + -59.7304 43.1344 -35.1009 + -53.7671 44.7718 -44.8125 + -42.7159 46.3703 -42.6607 + -31.4895 48.6357 -42.4242 + -27.6777 42.7289 -31.5849 + -28.3338 63.1044 -31.7907 + -44.7776 78.2975 -24.0744 + -29.8687 57.1722 -22.7442 + -30.0055 62.0234 -13.7342 + -38.5822 61.5464 -10.5473 + -46.4559 61.0351 -6.00131 + -53.2718 65.8439 -11.8077 + -61.246 59.8912 -16.4227 + -59.7072 65.8139 -25.231 + -59.5393 61.0883 -34.4323 + -50.9695 61.5464 -37.592 + -43.1174 61.9702 -42.1493 + -36.1607 57.2014 -36.2463 + -37.3006 82.3927 -35.3734 + -44.7776 95.0755 -24.0744 + -34.6867 77.0673 -29.0243 + -31.1038 82.3563 -23.3469 + -35.5128 74.4562 -17.8609 + -38.8558 78.3171 -11.9304 + -45.5053 82.1535 -12.9046 + -52.3613 74.2211 -12.845 + -54.8533 79.4957 -19.0844 + -58.4278 74.1853 -24.95 + -54.0962 82.1667 -30.1817 + -50.6995 78.3171 -36.2184 + -43.9508 74.4425 -35.2312 + -44.3968 94.7174 -33.0772 + -44.7776 114.091 -24.0744 + -40.7848 91.9012 -30.3094 + -36.6939 95.8805 -28.2952 + -37.2133 91.8719 -23.8027 + -37.0834 94.7119 -19.3131 + -41.3276 95.0864 -17.5226 + -45.1507 95.4471 -15.072 + -48.7185 98.2694 -17.8024 + -52.8678 94.2527 -19.8706 + -52.3505 98.2397 -24.2691 + -52.4768 95.4416 -28.8276 + -48.2241 95.0863 -30.6167 + -44.7776 11.1854 -24.0744 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.0791578 0.0783653 0.138018 0.0613737 0.108588 + 200 3 1 3 4 0.0783653 0.138018 0.12934 0.108588 0.112349 0.138018 + 200 3 0 3 1 0.0783653 0.0791578 0.12934 0.108588 0.0783653 0.138018 + 200 3 5 3 0 0.112349 0.0791578 0.12934 0.108588 0.0783653 0.0791578 + 200 3 3 6 4 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 6 3 7 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 4 8 1 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 8 4 6 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 1 9 2 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 9 1 8 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 2 10 0 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 10 2 9 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 0 11 5 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 11 0 10 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 5 7 3 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 7 5 11 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 7 8 6 0.11132 0.108504 0.086818 0.0943576 0.103153 0.0943576 + 200 3 8 10 9 0.086818 0.0943576 0.086818 0.12265 0.0786506 0.108504 + 200 3 7 10 8 0.11132 0.108504 0.086818 0.12265 0.086818 0.0943576 + 200 3 11 10 7 0.103153 0.12265 0.086818 0.12265 0.11132 0.108504 + 200 3 12 13 14 0.36259 0.239765 0.282315 0.239765 0.351835 0.199627 + 200 3 14 13 15 0.351835 0.199627 0.282315 0.239765 0.322452 0.170244 + 200 3 15 13 16 0.322452 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 16 13 17 0.282315 0.159489 0.282315 0.239765 0.242177 0.170244 + 200 3 17 13 18 0.242177 0.170244 0.282315 0.239765 0.212794 0.199627 + 200 3 18 13 19 0.212794 0.199627 0.282315 0.239765 0.202039 0.239765 + 200 3 19 13 20 0.202039 0.239765 0.282315 0.239765 0.212794 0.199627 + 200 3 20 13 21 0.212794 0.199627 0.282315 0.239765 0.242177 0.170244 + 200 3 21 13 22 0.242177 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 22 13 23 0.282315 0.159489 0.282315 0.239765 0.322452 0.170244 + 200 3 23 13 24 0.322452 0.170244 0.282315 0.239765 0.351835 0.199627 + 200 3 24 13 12 0.351835 0.199627 0.282315 0.239765 0.36259 0.239765 + 200 3 25 26 27 0.363268 0.20527 0.282315 0.20527 0.352423 0.159963 + 200 3 27 26 28 0.352423 0.159963 0.282315 0.20527 0.322791 0.126795 + 200 3 28 26 29 0.322791 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 29 26 30 0.282315 0.114655 0.282315 0.20527 0.241838 0.126795 + 200 3 30 26 31 0.241838 0.126795 0.282315 0.20527 0.212206 0.159963 + 200 3 31 26 32 0.212206 0.159963 0.282315 0.20527 0.201361 0.20527 + 200 3 32 26 33 0.201361 0.20527 0.282315 0.20527 0.212206 0.159963 + 200 3 33 26 34 0.212206 0.159963 0.282315 0.20527 0.241838 0.126795 + 200 3 34 26 35 0.241838 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 35 26 36 0.282315 0.114655 0.282315 0.20527 0.322791 0.126795 + 200 3 36 26 37 0.322791 0.126795 0.282315 0.20527 0.352423 0.159963 + 200 3 37 26 25 0.352423 0.159963 0.282315 0.20527 0.363268 0.20527 + 200 3 38 39 40 0.348728 0.163706 0.280095 0.163706 0.339533 0.120458 + 200 3 40 39 41 0.339533 0.120458 0.280095 0.163706 0.314411 0.0887973 + 200 3 41 39 42 0.314411 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 42 39 43 0.280095 0.0772089 0.280095 0.163706 0.245778 0.0887973 + 200 3 43 39 44 0.245778 0.0887973 0.280095 0.163706 0.220656 0.120458 + 200 3 44 39 45 0.220656 0.120458 0.280095 0.163706 0.211461 0.163706 + 200 3 45 39 46 0.211461 0.163706 0.280095 0.163706 0.220656 0.120458 + 200 3 46 39 47 0.220656 0.120458 0.280095 0.163706 0.245778 0.0887973 + 200 3 47 39 48 0.245778 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 48 39 49 0.280095 0.0772089 0.280095 0.163706 0.314411 0.0887973 + 200 3 49 39 50 0.314411 0.0887973 0.280095 0.163706 0.339533 0.120458 + 200 3 50 39 38 0.339533 0.120458 0.280095 0.163706 0.348728 0.163706 + 200 3 51 52 53 0.342913 0.120977 0.27843 0.120977 0.334274 0.0873331 + 200 3 53 52 54 0.334274 0.0873331 0.27843 0.120977 0.310671 0.0627042 + 200 3 54 52 55 0.310671 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 55 52 56 0.27843 0.0536896 0.27843 0.120977 0.246188 0.0627042 + 200 3 56 52 57 0.246188 0.0627042 0.27843 0.120977 0.222585 0.0873331 + 200 3 57 52 58 0.222585 0.0873331 0.27843 0.120977 0.213946 0.120976 + 200 3 58 52 59 0.213946 0.120976 0.27843 0.120977 0.222585 0.0873331 + 200 3 59 52 60 0.222585 0.0873331 0.27843 0.120977 0.246188 0.0627042 + 200 3 60 52 61 0.246188 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 61 52 62 0.27843 0.0536896 0.27843 0.120977 0.310671 0.0627042 + 200 3 62 52 63 0.310671 0.0627042 0.27843 0.120977 0.334274 0.0873331 + 200 3 63 52 51 0.334274 0.0873331 0.27843 0.120977 0.342913 0.120977 + 200 3 64 65 66 0.339176 0.0966178 0.28065 0.0966178 0.331335 0.0642989 + 200 3 66 65 67 0.331335 0.0642989 0.28065 0.0966178 0.309913 0.0406398 + 200 3 67 65 68 0.309913 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 68 65 69 0.28065 0.0319799 0.28065 0.0966178 0.251386 0.0406398 + 200 3 69 65 70 0.251386 0.0406398 0.28065 0.0966178 0.229964 0.0642989 + 200 3 70 65 71 0.229964 0.0642989 0.28065 0.0966178 0.222123 0.0966176 + 200 3 71 65 72 0.222123 0.0966176 0.28065 0.0966178 0.229964 0.0642989 + 200 3 72 65 73 0.229964 0.0642989 0.28065 0.0966178 0.251386 0.0406398 + 200 3 73 65 74 0.251386 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 74 65 75 0.28065 0.0319799 0.28065 0.0966178 0.309913 0.0406398 + 200 3 75 65 76 0.309913 0.0406398 0.28065 0.0966178 0.331335 0.0642989 + 200 3 76 65 64 0.331335 0.0642989 0.28065 0.0966178 0.339176 0.0966178 + 200 3 77 78 79 0.296509 0.0438882 0.278322 0.0438882 0.294072 0.0264283 + 200 3 79 78 80 0.294072 0.0264283 0.278322 0.0438882 0.287416 0.0136467 + 200 3 80 78 81 0.287416 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 81 78 82 0.278322 0.00896829 0.278322 0.0438882 0.269229 0.0136467 + 200 3 82 78 83 0.269229 0.0136467 0.278322 0.0438882 0.262573 0.0264283 + 200 3 83 78 84 0.262573 0.0264283 0.278322 0.0438882 0.260136 0.0438882 + 200 3 84 78 85 0.260136 0.0438882 0.278322 0.0438882 0.262573 0.0264283 + 200 3 85 78 86 0.262573 0.0264283 0.278322 0.0438882 0.269229 0.0136467 + 200 3 86 78 87 0.269229 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 87 78 88 0.278322 0.00896829 0.278322 0.0438882 0.287416 0.0136467 + 200 3 88 78 89 0.287416 0.0136467 0.278322 0.0438882 0.294072 0.0264283 + 200 3 89 78 77 0.294072 0.0264283 0.278322 0.0438882 0.296509 0.0438882 + 200 3 76 52 75 0.136208 0.184161 0.0966576 0.0993444 0.173318 0.153022 + 200 3 75 52 74 0.173318 0.153022 0.0966576 0.0993444 0.189886 0.107501 + 200 3 74 52 73 0.189886 0.107501 0.0966576 0.0993444 0.181474 0.0597937 + 200 3 73 52 72 0.181474 0.0597937 0.0966576 0.0993444 0.150336 0.0226842 + 200 3 72 52 71 0.150336 0.0226842 0.0966576 0.0993444 0.104814 0.00611567 + 200 3 71 52 70 0.104814 0.00611567 0.0966576 0.0993444 0.057107 0.0145277 + 200 3 70 52 69 0.057107 0.0145277 0.0966576 0.0993444 0.0199974 0.0456663 + 200 3 69 52 68 0.0199974 0.0456663 0.0966576 0.0993444 0.00342888 0.091188 + 200 3 68 52 67 0.00342888 0.091188 0.0966576 0.0993444 0.011841 0.138895 + 200 3 67 52 66 0.011841 0.138895 0.0966576 0.0993444 0.0429796 0.176005 + 200 3 66 52 64 0.0429796 0.176005 0.0966576 0.0993444 0.0885012 0.192573 + 200 3 64 52 76 0.0885012 0.192573 0.0966576 0.0993444 0.136208 0.184161 + 200 3 89 65 88 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 88 65 87 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 87 65 86 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 86 65 85 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 85 65 84 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 84 65 83 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 83 65 82 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 82 65 81 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 81 65 80 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 80 65 79 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 79 65 77 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 77 65 89 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 + 200 3 63 39 62 0.162832 0.165519 0.0966577 0.0993443 0.187054 0.123566 + 200 3 62 39 61 0.187054 0.123566 0.0966577 0.0993443 0.187054 0.0751227 + 200 3 61 39 60 0.187054 0.0751227 0.0966577 0.0993443 0.162832 0.0331699 + 200 3 60 39 59 0.162832 0.0331699 0.0966577 0.0993443 0.120879 0.00894833 + 200 3 59 39 58 0.120879 0.00894833 0.0966577 0.0993443 0.0724362 0.00894833 + 200 3 58 39 57 0.0724362 0.00894833 0.0966577 0.0993443 0.0304832 0.0331699 + 200 3 57 39 56 0.0304832 0.0331699 0.0966577 0.0993443 0.00626171 0.0751228 + 200 3 56 39 55 0.00626171 0.0751228 0.0966577 0.0993443 0.00626171 0.123566 + 200 3 55 39 54 0.00626171 0.123566 0.0966577 0.0993443 0.0304832 0.165519 + 200 3 54 39 53 0.0304832 0.165519 0.0966577 0.0993443 0.0724362 0.18974 + 200 3 53 39 51 0.0724362 0.18974 0.0966577 0.0993443 0.120879 0.18974 + 200 3 51 39 63 0.120879 0.18974 0.0966577 0.0993443 0.162832 0.165519 + 200 3 50 26 49 0.189886 0.0911877 0.0966577 0.0993443 0.173318 0.0456661 + 200 3 49 26 48 0.173318 0.0456661 0.0966577 0.0993443 0.136208 0.0145276 + 200 3 48 26 47 0.136208 0.0145276 0.0966577 0.0993443 0.0885012 0.00611556 + 200 3 47 26 46 0.0885012 0.00611556 0.0966577 0.0993443 0.0429797 0.022684 + 200 3 46 26 45 0.0429797 0.022684 0.0966577 0.0993443 0.011841 0.0597937 + 200 3 45 26 44 0.011841 0.0597937 0.0966577 0.0993443 0.003429 0.107501 + 200 3 44 26 43 0.003429 0.107501 0.0966577 0.0993443 0.0199975 0.153022 + 200 3 43 26 42 0.0199975 0.153022 0.0966577 0.0993443 0.057107 0.184161 + 200 3 42 26 41 0.057107 0.184161 0.0966577 0.0993443 0.104814 0.192573 + 200 3 41 26 40 0.104814 0.192573 0.0966577 0.0993443 0.150336 0.176005 + 200 3 40 26 38 0.150336 0.176005 0.0966577 0.0993443 0.181474 0.138895 + 200 3 38 26 50 0.181474 0.138895 0.0966577 0.0993443 0.189886 0.0911877 + 200 3 37 13 36 0.190243 0.0993443 0.0966577 0.0993443 0.177705 0.0525519 + 200 3 36 13 35 0.177705 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 35 13 34 0.14345 0.0182974 0.0966577 0.0993443 0.0966577 0.00575948 + 200 3 34 13 33 0.0966577 0.00575948 0.0966577 0.0993443 0.0498653 0.0182974 + 200 3 33 13 32 0.0498653 0.0182974 0.0966577 0.0993443 0.0156108 0.052552 + 200 3 32 13 31 0.0156108 0.052552 0.0966577 0.0993443 0.00307286 0.0993444 + 200 3 31 13 30 0.00307286 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 30 13 29 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 29 13 28 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 28 13 27 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 27 13 25 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 25 13 37 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 24 90 23 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 23 90 22 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 22 90 21 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 21 90 20 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 20 90 19 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 19 90 18 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 18 90 17 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 17 90 16 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 16 90 15 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 15 90 14 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 14 90 12 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 12 90 24 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 +LEVEL 4 +POINTS 78 + 50.412 -2.74127 7.31181 + 49.0306 -2.74949 2.27117 + 51.1847 -2.74538 4.39047 + 45.398 -2.74538 5.97623 + 46.1455 -2.74127 3.0933 + 47.5108 -2.74949 8.07537 + 47.9043 137.269 4.93148 + 47.8717 137.269 5.45009 + 48.3139 137.269 4.63714 + 48.711 137.269 4.91661 + 48.6779 137.269 5.43761 + 48.2659 137.269 5.72809 + 57.0811 31.3981 33.8807 + 48.2914 54.9075 5.18335 + 42.9049 37.9823 29.2997 + 27.8947 34.5157 27.0698 + 24.6606 34.351 12.347 + 18.9957 34.142 -1.58736 + 30.215 30.6241 -11.6881 + 39.343 37.1841 -23.4705 + 53.86 30.6628 -18.896 + 68.6907 34.39 -16.7011 + 71.933 34.351 -1.98327 + 77.588 34.2677 11.951 + 66.4956 37.9441 21.9327 + 53.2018 59.6769 -19.3581 + 48.2913 75.4978 5.18334 + 61.9489 57.0483 -10.1263 + 72.0394 54.9448 -2.48869 + 68.4914 52.7932 9.4939 + 66.8929 50.1062 21.902 + 54.8288 57.3183 24.7472 + 43.1465 50.0974 29.6686 + 34.5817 52.9354 20.4428 + 24.5433 54.9448 12.8554 + 28.0844 56.9065 0.93913 + 29.5392 59.6867 -11.3736 + 41.8574 52.4377 -14.4089 + 41.5615 77.4429 -13.7098 + 48.2913 96.0882 5.18334 + 51.3402 70.1628 -11.06 + 61.2277 76.1163 -9.95064 + 63.8171 75.5309 -0.185614 + 67.9751 74.9034 8.95143 + 60.8683 80.8049 15.8241 + 54.9477 73.4997 24.0966 + 45.4312 80.7681 21.4678 + 35.3368 74.9688 20.3039 + 32.7765 75.5309 10.5493 + 28.6037 76.051 1.43479 + 35.8316 70.1986 -5.58232 + 36.6697 101.114 -4.23662 + 48.2913 116.678 5.18333 + 43.9255 94.5785 -6.43352 + 50.5463 101.069 -9.76676 + 56.1062 91.3741 -4.33735 + 62.268 96.1122 -0.032155 + 60.4896 100.82 7.17197 + 59.8253 91.0856 14.7131 + 52.7029 97.5587 16.7877 + 45.8762 91.0417 20.0917 + 40.5876 100.836 14.7744 + 34.3147 96.1122 10.3989 + 36.118 91.3572 3.08709 + 38.4378 116.239 3.80652 + 48.2913 140.014 5.18333 + 41.8641 112.783 0.131529 + 44.5132 117.666 -4.15 + 49.3952 112.747 -3.10097 + 54.3431 116.232 -2.76584 + 55.8591 116.692 2.08909 + 58.1453 117.134 6.55153 + 54.7649 120.598 10.182 + 52.0502 115.669 14.5219 + 47.2713 120.562 13.4852 + 42.2481 117.128 13.1388 + 40.7345 116.692 8.27463 + 48.2914 34.3172 5.18335 +POLYGONS 140 + 200 3 0 1 2 0.0783653 0.0791578 0.0783653 0.138018 0.0613737 0.108588 + 200 3 1 3 4 0.0783653 0.138018 0.12934 0.108588 0.112349 0.138018 + 200 3 0 3 1 0.0783653 0.0791578 0.12934 0.108588 0.0783653 0.138018 + 200 3 5 3 0 0.112349 0.0791578 0.12934 0.108588 0.0783653 0.0791578 + 200 3 3 6 4 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 6 3 7 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 4 8 1 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 8 4 6 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 1 9 2 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 9 1 8 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 2 10 0 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 10 2 9 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 0 11 5 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 11 0 10 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 5 7 3 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 7 5 11 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 7 8 6 0.11132 0.108504 0.086818 0.0943576 0.103153 0.0943576 + 200 3 8 10 9 0.086818 0.0943576 0.086818 0.12265 0.0786506 0.108504 + 200 3 7 10 8 0.11132 0.108504 0.086818 0.12265 0.086818 0.0943576 + 200 3 11 10 7 0.103153 0.12265 0.086818 0.12265 0.11132 0.108504 + 200 3 12 13 14 0.363268 0.20527 0.282315 0.20527 0.352423 0.159963 + 200 3 14 13 15 0.352423 0.159963 0.282315 0.20527 0.322791 0.126795 + 200 3 15 13 16 0.322791 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 16 13 17 0.282315 0.114655 0.282315 0.20527 0.241838 0.126795 + 200 3 17 13 18 0.241838 0.126795 0.282315 0.20527 0.212206 0.159963 + 200 3 18 13 19 0.212206 0.159963 0.282315 0.20527 0.201361 0.20527 + 200 3 19 13 20 0.201361 0.20527 0.282315 0.20527 0.212206 0.159963 + 200 3 20 13 21 0.212206 0.159963 0.282315 0.20527 0.241838 0.126795 + 200 3 21 13 22 0.241838 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 22 13 23 0.282315 0.114655 0.282315 0.20527 0.322791 0.126795 + 200 3 23 13 24 0.322791 0.126795 0.282315 0.20527 0.352423 0.159963 + 200 3 24 13 12 0.352423 0.159963 0.282315 0.20527 0.363268 0.20527 + 200 3 25 26 27 0.348728 0.163706 0.280095 0.163706 0.339533 0.120458 + 200 3 27 26 28 0.339533 0.120458 0.280095 0.163706 0.314411 0.0887973 + 200 3 28 26 29 0.314411 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 29 26 30 0.280095 0.0772089 0.280095 0.163706 0.245778 0.0887973 + 200 3 30 26 31 0.245778 0.0887973 0.280095 0.163706 0.220656 0.120458 + 200 3 31 26 32 0.220656 0.120458 0.280095 0.163706 0.211461 0.163706 + 200 3 32 26 33 0.211461 0.163706 0.280095 0.163706 0.220656 0.120458 + 200 3 33 26 34 0.220656 0.120458 0.280095 0.163706 0.245778 0.0887973 + 200 3 34 26 35 0.245778 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 35 26 36 0.280095 0.0772089 0.280095 0.163706 0.314411 0.0887973 + 200 3 36 26 37 0.314411 0.0887973 0.280095 0.163706 0.339533 0.120458 + 200 3 37 26 25 0.339533 0.120458 0.280095 0.163706 0.348728 0.163706 + 200 3 38 39 40 0.342913 0.120977 0.27843 0.120977 0.334274 0.0873331 + 200 3 40 39 41 0.334274 0.0873331 0.27843 0.120977 0.310671 0.0627042 + 200 3 41 39 42 0.310671 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 42 39 43 0.27843 0.0536896 0.27843 0.120977 0.246188 0.0627042 + 200 3 43 39 44 0.246188 0.0627042 0.27843 0.120977 0.222585 0.0873331 + 200 3 44 39 45 0.222585 0.0873331 0.27843 0.120977 0.213946 0.120976 + 200 3 45 39 46 0.213946 0.120976 0.27843 0.120977 0.222585 0.0873331 + 200 3 46 39 47 0.222585 0.0873331 0.27843 0.120977 0.246188 0.0627042 + 200 3 47 39 48 0.246188 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 48 39 49 0.27843 0.0536896 0.27843 0.120977 0.310671 0.0627042 + 200 3 49 39 50 0.310671 0.0627042 0.27843 0.120977 0.334274 0.0873331 + 200 3 50 39 38 0.334274 0.0873331 0.27843 0.120977 0.342913 0.120977 + 200 3 51 52 53 0.339176 0.0966178 0.28065 0.0966178 0.331335 0.0642989 + 200 3 53 52 54 0.331335 0.0642989 0.28065 0.0966178 0.309913 0.0406398 + 200 3 54 52 55 0.309913 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 55 52 56 0.28065 0.0319799 0.28065 0.0966178 0.251386 0.0406398 + 200 3 56 52 57 0.251386 0.0406398 0.28065 0.0966178 0.229964 0.0642989 + 200 3 57 52 58 0.229964 0.0642989 0.28065 0.0966178 0.222123 0.0966176 + 200 3 58 52 59 0.222123 0.0966176 0.28065 0.0966178 0.229964 0.0642989 + 200 3 59 52 60 0.229964 0.0642989 0.28065 0.0966178 0.251386 0.0406398 + 200 3 60 52 61 0.251386 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 61 52 62 0.28065 0.0319799 0.28065 0.0966178 0.309913 0.0406398 + 200 3 62 52 63 0.309913 0.0406398 0.28065 0.0966178 0.331335 0.0642989 + 200 3 63 52 51 0.331335 0.0642989 0.28065 0.0966178 0.339176 0.0966178 + 200 3 64 65 66 0.296509 0.0438882 0.278322 0.0438882 0.294072 0.0264283 + 200 3 66 65 67 0.294072 0.0264283 0.278322 0.0438882 0.287416 0.0136467 + 200 3 67 65 68 0.287416 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 68 65 69 0.278322 0.00896829 0.278322 0.0438882 0.269229 0.0136467 + 200 3 69 65 70 0.269229 0.0136467 0.278322 0.0438882 0.262573 0.0264283 + 200 3 70 65 71 0.262573 0.0264283 0.278322 0.0438882 0.260136 0.0438882 + 200 3 71 65 72 0.260136 0.0438882 0.278322 0.0438882 0.262573 0.0264283 + 200 3 72 65 73 0.262573 0.0264283 0.278322 0.0438882 0.269229 0.0136467 + 200 3 73 65 74 0.269229 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 74 65 75 0.278322 0.00896829 0.278322 0.0438882 0.287416 0.0136467 + 200 3 75 65 76 0.287416 0.0136467 0.278322 0.0438882 0.294072 0.0264283 + 200 3 76 65 64 0.294072 0.0264283 0.278322 0.0438882 0.296509 0.0438882 + 200 3 63 39 62 0.136208 0.184161 0.0966576 0.0993444 0.173318 0.153022 + 200 3 62 39 61 0.173318 0.153022 0.0966576 0.0993444 0.189886 0.107501 + 200 3 61 39 60 0.189886 0.107501 0.0966576 0.0993444 0.181474 0.0597937 + 200 3 60 39 59 0.181474 0.0597937 0.0966576 0.0993444 0.150336 0.0226842 + 200 3 59 39 58 0.150336 0.0226842 0.0966576 0.0993444 0.104814 0.00611567 + 200 3 58 39 57 0.104814 0.00611567 0.0966576 0.0993444 0.057107 0.0145277 + 200 3 57 39 56 0.057107 0.0145277 0.0966576 0.0993444 0.0199974 0.0456663 + 200 3 56 39 55 0.0199974 0.0456663 0.0966576 0.0993444 0.00342888 0.091188 + 200 3 55 39 54 0.00342888 0.091188 0.0966576 0.0993444 0.011841 0.138895 + 200 3 54 39 53 0.011841 0.138895 0.0966576 0.0993444 0.0429796 0.176005 + 200 3 53 39 51 0.0429796 0.176005 0.0966576 0.0993444 0.0885012 0.192573 + 200 3 51 39 63 0.0885012 0.192573 0.0966576 0.0993444 0.136208 0.184161 + 200 3 76 52 75 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 75 52 74 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 74 52 73 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 73 52 72 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 72 52 71 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 71 52 70 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 70 52 69 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 69 52 68 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 68 52 67 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 67 52 66 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 66 52 64 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 64 52 76 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 + 200 3 50 26 49 0.162832 0.165519 0.0966577 0.0993443 0.187054 0.123566 + 200 3 49 26 48 0.187054 0.123566 0.0966577 0.0993443 0.187054 0.0751227 + 200 3 48 26 47 0.187054 0.0751227 0.0966577 0.0993443 0.162832 0.0331699 + 200 3 47 26 46 0.162832 0.0331699 0.0966577 0.0993443 0.120879 0.00894833 + 200 3 46 26 45 0.120879 0.00894833 0.0966577 0.0993443 0.0724362 0.00894833 + 200 3 45 26 44 0.0724362 0.00894833 0.0966577 0.0993443 0.0304832 0.0331699 + 200 3 44 26 43 0.0304832 0.0331699 0.0966577 0.0993443 0.00626171 0.0751228 + 200 3 43 26 42 0.00626171 0.0751228 0.0966577 0.0993443 0.00626171 0.123566 + 200 3 42 26 41 0.00626171 0.123566 0.0966577 0.0993443 0.0304832 0.165519 + 200 3 41 26 40 0.0304832 0.165519 0.0966577 0.0993443 0.0724362 0.18974 + 200 3 40 26 38 0.0724362 0.18974 0.0966577 0.0993443 0.120879 0.18974 + 200 3 38 26 50 0.120879 0.18974 0.0966577 0.0993443 0.162832 0.165519 + 200 3 37 13 36 0.189886 0.0911877 0.0966577 0.0993443 0.173318 0.0456661 + 200 3 36 13 35 0.173318 0.0456661 0.0966577 0.0993443 0.136208 0.0145276 + 200 3 35 13 34 0.136208 0.0145276 0.0966577 0.0993443 0.0885012 0.00611556 + 200 3 34 13 33 0.0885012 0.00611556 0.0966577 0.0993443 0.0429797 0.022684 + 200 3 33 13 32 0.0429797 0.022684 0.0966577 0.0993443 0.011841 0.0597937 + 200 3 32 13 31 0.011841 0.0597937 0.0966577 0.0993443 0.003429 0.107501 + 200 3 31 13 30 0.003429 0.107501 0.0966577 0.0993443 0.0199975 0.153022 + 200 3 30 13 29 0.0199975 0.153022 0.0966577 0.0993443 0.057107 0.184161 + 200 3 29 13 28 0.057107 0.184161 0.0966577 0.0993443 0.104814 0.192573 + 200 3 28 13 27 0.104814 0.192573 0.0966577 0.0993443 0.150336 0.176005 + 200 3 27 13 25 0.150336 0.176005 0.0966577 0.0993443 0.181474 0.138895 + 200 3 25 13 37 0.181474 0.138895 0.0966577 0.0993443 0.189886 0.0911877 + 200 3 24 77 23 0.190243 0.0993443 0.0966577 0.0993443 0.177705 0.0525519 + 200 3 23 77 22 0.177705 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 22 77 21 0.14345 0.0182974 0.0966577 0.0993443 0.0966577 0.00575948 + 200 3 21 77 20 0.0966577 0.00575948 0.0966577 0.0993443 0.0498653 0.0182974 + 200 3 20 77 19 0.0498653 0.0182974 0.0966577 0.0993443 0.0156108 0.052552 + 200 3 19 77 18 0.0156108 0.052552 0.0966577 0.0993443 0.00307286 0.0993444 + 200 3 18 77 17 0.00307286 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 17 77 16 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 16 77 15 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 15 77 14 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 14 77 12 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 12 77 24 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 diff --git a/data/base/features/mitrees3.pie b/data/base/features/mitrees3.pie index 93721866292..9d6cd2645cf 100644 --- a/data/base/features/mitrees3.pie +++ b/data/base/features/mitrees3.pie @@ -1,31 +1,262 @@ -PIE 2 +PIE 3 TYPE 200 -TEXTURE 0 page-30-features-rockies.png 256 256 +TEXTURE 0 page-30-features-rockies.png 0 0 LEVELS 1 LEVEL 1 -POINTS 12 - 28 10 39 - -37 10 27 - -26 10 -37 - 39 10 -25 - -41 0 -7 - 38 0 6 - 38 102 6 - -41 102 -7 - 5 0 -40 - -8 0 39 - -8 102 39 - 5 102 -40 -POLYGONS 12 - 200 3 0 1 2 0 52 46 52 46 0 - 200 3 0 2 3 0 52 46 0 0 0 - 200 3 3 2 1 0 0 46 0 46 52 - 200 3 3 1 0 0 0 46 52 0 52 - 200 3 4 5 6 49 72 96 72 96 0 - 200 3 4 6 7 49 72 96 0 49 0 - 200 3 7 6 5 49 0 96 0 96 72 - 200 3 7 5 4 49 0 96 72 49 72 - 200 3 8 9 10 49 72 96 72 96 0 - 200 3 8 10 11 49 72 96 0 49 0 - 200 3 11 10 9 49 0 96 0 96 72 - 200 3 11 9 8 49 0 96 72 49 72 \ No newline at end of file +POINTS 91 + 2.90364 -1.99701 -0.772132 + -2.15228 -2.00299 -2.09643 + 0.760145 -2 -2.9021 + -0.760145 -2 2.9021 + -2.88302 -1.99701 0.813222 + 2.11416 -2.00299 2.12213 + -0.411667 100 0.209242 + 0.0211561 100 0.496791 + -0.461716 100 -0.292696 + -0.0211576 100 -0.496792 + 0.413501 100 -0.20765 + 0.458996 100 0.29447 + -8.51682 10.014 33.9438 + -1.89872e-06 25 -4.29452e-07 + -24.3395 11.1975 25.266 + -33.6261 11.5785 9.76441 + -33.9841 7.56615 -8.55049 + -25.2357 11.6573 -24.2361 + -9.67352 11.4773 -33.6332 + 8.51682 10.0139 -33.9438 + 24.4095 8.53164 -25.1915 + 33.6615 8.33185 -9.62475 + 34.0411 12.4135 8.3328 + 25.1355 8.41077 24.3438 + 9.57486 8.81153 33.6681 + 29.2472 22.8734 6.73792 + -4.37363e-06 40 -8.21908e-07 + 18.1914 27.67 16.7238 + 8.75451 25.1446 28.6077 + -5.61266 25.0246 24.0464 + -20.5125 24.8723 21.9845 + -23.6496 22.3096 7.21778 + -29.2889 27.0885 -6.57879 + -18.0682 22.3378 -16.8631 + -8.75145 25.053 -28.6089 + 5.61551 25.0246 -24.0573 + 20.5104 24.9639 -21.9868 + 23.6079 27.6422 -7.38949 + -18.7975 43.4745 -16.5242 + -7.71977e-06 55 -1.16543e-06 + -6.42882 41.5595 -19.483 + 5.23099 40.0271 -24.4021 + 13.8338 38.4597 -15.3378 + 23.7799 36.5023 -7.74893 + 20.2114 41.7562 4.12127 + 18.6316 36.4958 16.6991 + 6.35934 38.5633 19.503 + -5.23098 40.0271 24.4021 + -13.7798 41.4562 15.377 + -23.7152 43.4816 7.9602 + -20.1842 38.2008 -4.22516 + -19.7267 56.417 -3.61925 + -1.18949e-05 70 -1.37002e-06 + -12.5423 51.1134 -10.7626 + -6.63736 55.4505 -18.7705 + 3.114 55.0241 -16.1301 + 13.1059 54.567 -15.162 + 15.504 58.8662 -5.57087 + 19.7074 53.5443 3.69299 + 12.6722 58.8394 10.6198 + 6.61661 54.6146 18.7796 + -3.11113 55.024 16.1191 + -13.0909 55.403 15.1751 + -15.5535 51.1395 5.4069 + -13.969 73.6612 5.35404 + -1.68735e-05 85 -1.35738e-06 + -12.2433 68.9002 -2.02811 + -11.8192 73.6287 -9.42847 + -4.33721 66.5658 -11.5284 + 2.47226 70.0175 -14.7118 + 7.82178 73.4473 -9.56931 + 14.0202 66.3556 -5.22313 + 12.2553 71.0713 1.98224 + 11.703 66.3236 9.54632 + 4.45371 73.4591 11.4674 + -2.47225 70.0175 14.7118 + -7.90254 66.5535 9.49393 + -6.11951 84.6798 7.84469 + -2.34669e-05 102 -9.91315e-07 + -7.58876 82.1621 3.03986 + -9.97193 85.7196 -1.39517 + -6.62229 82.1359 -5.0984 + -3.8579 84.6749 -9.21572 + 1.10455 85.0097 -8.10093 + 6.11224 85.3322 -7.84942 + 7.56585 87.8554 -3.10655 + 9.96682 84.2643 1.41449 + 6.67937 87.8289 5.03462 + 3.86752 85.3273 9.2115 + -1.10168 85.0097 8.09001 + -4.73216e-07 10 -1.01826e-06 +POLYGONS 164 + 200 3 0 1 2 0.0783653 0.0791578 0.0783653 0.138018 0.0613737 0.108588 + 200 3 1 3 4 0.0783653 0.138018 0.12934 0.108588 0.112349 0.138018 + 200 3 0 3 1 0.0783653 0.0791578 0.12934 0.108588 0.0783653 0.138018 + 200 3 5 3 0 0.112349 0.0791578 0.12934 0.108588 0.0783653 0.0791578 + 200 3 3 6 4 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 6 3 7 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 4 8 1 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 8 4 6 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 1 9 2 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 9 1 8 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 2 10 0 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 10 2 9 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 0 11 5 0.287237 0.285563 0.278272 0.0303091 0.278325 0.285563 + 200 3 11 0 10 0.278272 0.0303091 0.287237 0.285563 0.282282 0.0303091 + 200 3 5 7 3 0.278325 0.285563 0.282282 0.0303091 0.287237 0.285563 + 200 3 7 5 11 0.282282 0.0303091 0.278325 0.285563 0.278272 0.0303091 + 200 3 7 8 6 0.11132 0.108504 0.086818 0.0943576 0.103153 0.0943576 + 200 3 8 10 9 0.086818 0.0943576 0.086818 0.12265 0.0786506 0.108504 + 200 3 7 10 8 0.11132 0.108504 0.086818 0.12265 0.086818 0.0943576 + 200 3 11 10 7 0.103153 0.12265 0.086818 0.12265 0.11132 0.108504 + 200 3 12 13 14 0.36259 0.239765 0.282315 0.239765 0.351835 0.199627 + 200 3 14 13 15 0.351835 0.199627 0.282315 0.239765 0.322452 0.170244 + 200 3 15 13 16 0.322452 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 16 13 17 0.282315 0.159489 0.282315 0.239765 0.242177 0.170244 + 200 3 17 13 18 0.242177 0.170244 0.282315 0.239765 0.212794 0.199627 + 200 3 18 13 19 0.212794 0.199627 0.282315 0.239765 0.202039 0.239765 + 200 3 19 13 20 0.202039 0.239765 0.282315 0.239765 0.212794 0.199627 + 200 3 20 13 21 0.212794 0.199627 0.282315 0.239765 0.242177 0.170244 + 200 3 21 13 22 0.242177 0.170244 0.282315 0.239765 0.282315 0.159489 + 200 3 22 13 23 0.282315 0.159489 0.282315 0.239765 0.322452 0.170244 + 200 3 23 13 24 0.322452 0.170244 0.282315 0.239765 0.351835 0.199627 + 200 3 24 13 12 0.351835 0.199627 0.282315 0.239765 0.36259 0.239765 + 200 3 25 26 27 0.363268 0.20527 0.282315 0.20527 0.352423 0.159963 + 200 3 27 26 28 0.352423 0.159963 0.282315 0.20527 0.322791 0.126795 + 200 3 28 26 29 0.322791 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 29 26 30 0.282315 0.114655 0.282315 0.20527 0.241838 0.126795 + 200 3 30 26 31 0.241838 0.126795 0.282315 0.20527 0.212206 0.159963 + 200 3 31 26 32 0.212206 0.159963 0.282315 0.20527 0.201361 0.20527 + 200 3 32 26 33 0.201361 0.20527 0.282315 0.20527 0.212206 0.159963 + 200 3 33 26 34 0.212206 0.159963 0.282315 0.20527 0.241838 0.126795 + 200 3 34 26 35 0.241838 0.126795 0.282315 0.20527 0.282315 0.114655 + 200 3 35 26 36 0.282315 0.114655 0.282315 0.20527 0.322791 0.126795 + 200 3 36 26 37 0.322791 0.126795 0.282315 0.20527 0.352423 0.159963 + 200 3 37 26 25 0.352423 0.159963 0.282315 0.20527 0.363268 0.20527 + 200 3 38 39 40 0.348728 0.163706 0.280095 0.163706 0.339533 0.120458 + 200 3 40 39 41 0.339533 0.120458 0.280095 0.163706 0.314411 0.0887973 + 200 3 41 39 42 0.314411 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 42 39 43 0.280095 0.0772089 0.280095 0.163706 0.245778 0.0887973 + 200 3 43 39 44 0.245778 0.0887973 0.280095 0.163706 0.220656 0.120458 + 200 3 44 39 45 0.220656 0.120458 0.280095 0.163706 0.211461 0.163706 + 200 3 45 39 46 0.211461 0.163706 0.280095 0.163706 0.220656 0.120458 + 200 3 46 39 47 0.220656 0.120458 0.280095 0.163706 0.245778 0.0887973 + 200 3 47 39 48 0.245778 0.0887973 0.280095 0.163706 0.280095 0.0772089 + 200 3 48 39 49 0.280095 0.0772089 0.280095 0.163706 0.314411 0.0887973 + 200 3 49 39 50 0.314411 0.0887973 0.280095 0.163706 0.339533 0.120458 + 200 3 50 39 38 0.339533 0.120458 0.280095 0.163706 0.348728 0.163706 + 200 3 51 52 53 0.342913 0.120977 0.27843 0.120977 0.334274 0.0873331 + 200 3 53 52 54 0.334274 0.0873331 0.27843 0.120977 0.310671 0.0627042 + 200 3 54 52 55 0.310671 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 55 52 56 0.27843 0.0536896 0.27843 0.120977 0.246188 0.0627042 + 200 3 56 52 57 0.246188 0.0627042 0.27843 0.120977 0.222585 0.0873331 + 200 3 57 52 58 0.222585 0.0873331 0.27843 0.120977 0.213946 0.120976 + 200 3 58 52 59 0.213946 0.120976 0.27843 0.120977 0.222585 0.0873331 + 200 3 59 52 60 0.222585 0.0873331 0.27843 0.120977 0.246188 0.0627042 + 200 3 60 52 61 0.246188 0.0627042 0.27843 0.120977 0.27843 0.0536896 + 200 3 61 52 62 0.27843 0.0536896 0.27843 0.120977 0.310671 0.0627042 + 200 3 62 52 63 0.310671 0.0627042 0.27843 0.120977 0.334274 0.0873331 + 200 3 63 52 51 0.334274 0.0873331 0.27843 0.120977 0.342913 0.120977 + 200 3 64 65 66 0.339176 0.0966178 0.28065 0.0966178 0.331335 0.0642989 + 200 3 66 65 67 0.331335 0.0642989 0.28065 0.0966178 0.309913 0.0406398 + 200 3 67 65 68 0.309913 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 68 65 69 0.28065 0.0319799 0.28065 0.0966178 0.251386 0.0406398 + 200 3 69 65 70 0.251386 0.0406398 0.28065 0.0966178 0.229964 0.0642989 + 200 3 70 65 71 0.229964 0.0642989 0.28065 0.0966178 0.222123 0.0966176 + 200 3 71 65 72 0.222123 0.0966176 0.28065 0.0966178 0.229964 0.0642989 + 200 3 72 65 73 0.229964 0.0642989 0.28065 0.0966178 0.251386 0.0406398 + 200 3 73 65 74 0.251386 0.0406398 0.28065 0.0966178 0.28065 0.0319799 + 200 3 74 65 75 0.28065 0.0319799 0.28065 0.0966178 0.309913 0.0406398 + 200 3 75 65 76 0.309913 0.0406398 0.28065 0.0966178 0.331335 0.0642989 + 200 3 76 65 64 0.331335 0.0642989 0.28065 0.0966178 0.339176 0.0966178 + 200 3 77 78 79 0.296509 0.0438882 0.278322 0.0438882 0.294072 0.0264283 + 200 3 79 78 80 0.294072 0.0264283 0.278322 0.0438882 0.287416 0.0136467 + 200 3 80 78 81 0.287416 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 81 78 82 0.278322 0.00896829 0.278322 0.0438882 0.269229 0.0136467 + 200 3 82 78 83 0.269229 0.0136467 0.278322 0.0438882 0.262573 0.0264283 + 200 3 83 78 84 0.262573 0.0264283 0.278322 0.0438882 0.260136 0.0438882 + 200 3 84 78 85 0.260136 0.0438882 0.278322 0.0438882 0.262573 0.0264283 + 200 3 85 78 86 0.262573 0.0264283 0.278322 0.0438882 0.269229 0.0136467 + 200 3 86 78 87 0.269229 0.0136467 0.278322 0.0438882 0.278322 0.00896829 + 200 3 87 78 88 0.278322 0.00896829 0.278322 0.0438882 0.287416 0.0136467 + 200 3 88 78 89 0.287416 0.0136467 0.278322 0.0438882 0.294072 0.0264283 + 200 3 89 78 77 0.294072 0.0264283 0.278322 0.0438882 0.296509 0.0438882 + 200 3 76 52 75 0.136208 0.184161 0.0966576 0.0993444 0.173318 0.153022 + 200 3 75 52 74 0.173318 0.153022 0.0966576 0.0993444 0.189886 0.107501 + 200 3 74 52 73 0.189886 0.107501 0.0966576 0.0993444 0.181474 0.0597937 + 200 3 73 52 72 0.181474 0.0597937 0.0966576 0.0993444 0.150336 0.0226842 + 200 3 72 52 71 0.150336 0.0226842 0.0966576 0.0993444 0.104814 0.00611567 + 200 3 71 52 70 0.104814 0.00611567 0.0966576 0.0993444 0.057107 0.0145277 + 200 3 70 52 69 0.057107 0.0145277 0.0966576 0.0993444 0.0199974 0.0456663 + 200 3 69 52 68 0.0199974 0.0456663 0.0966576 0.0993444 0.00342888 0.091188 + 200 3 68 52 67 0.00342888 0.091188 0.0966576 0.0993444 0.011841 0.138895 + 200 3 67 52 66 0.011841 0.138895 0.0966576 0.0993444 0.0429796 0.176005 + 200 3 66 52 64 0.0429796 0.176005 0.0966576 0.0993444 0.0885012 0.192573 + 200 3 64 52 76 0.0885012 0.192573 0.0966576 0.0993444 0.136208 0.184161 + 200 3 89 65 88 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 88 65 87 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 87 65 86 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 86 65 85 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 85 65 84 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 84 65 83 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 83 65 82 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 82 65 81 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 81 65 80 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 80 65 79 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 79 65 77 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 77 65 89 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 + 200 3 63 39 62 0.162832 0.165519 0.0966577 0.0993443 0.187054 0.123566 + 200 3 62 39 61 0.187054 0.123566 0.0966577 0.0993443 0.187054 0.0751227 + 200 3 61 39 60 0.187054 0.0751227 0.0966577 0.0993443 0.162832 0.0331699 + 200 3 60 39 59 0.162832 0.0331699 0.0966577 0.0993443 0.120879 0.00894833 + 200 3 59 39 58 0.120879 0.00894833 0.0966577 0.0993443 0.0724362 0.00894833 + 200 3 58 39 57 0.0724362 0.00894833 0.0966577 0.0993443 0.0304832 0.0331699 + 200 3 57 39 56 0.0304832 0.0331699 0.0966577 0.0993443 0.00626171 0.0751228 + 200 3 56 39 55 0.00626171 0.0751228 0.0966577 0.0993443 0.00626171 0.123566 + 200 3 55 39 54 0.00626171 0.123566 0.0966577 0.0993443 0.0304832 0.165519 + 200 3 54 39 53 0.0304832 0.165519 0.0966577 0.0993443 0.0724362 0.18974 + 200 3 53 39 51 0.0724362 0.18974 0.0966577 0.0993443 0.120879 0.18974 + 200 3 51 39 63 0.120879 0.18974 0.0966577 0.0993443 0.162832 0.165519 + 200 3 50 26 49 0.189886 0.0911877 0.0966577 0.0993443 0.173318 0.0456661 + 200 3 49 26 48 0.173318 0.0456661 0.0966577 0.0993443 0.136208 0.0145276 + 200 3 48 26 47 0.136208 0.0145276 0.0966577 0.0993443 0.0885012 0.00611556 + 200 3 47 26 46 0.0885012 0.00611556 0.0966577 0.0993443 0.0429797 0.022684 + 200 3 46 26 45 0.0429797 0.022684 0.0966577 0.0993443 0.011841 0.0597937 + 200 3 45 26 44 0.011841 0.0597937 0.0966577 0.0993443 0.003429 0.107501 + 200 3 44 26 43 0.003429 0.107501 0.0966577 0.0993443 0.0199975 0.153022 + 200 3 43 26 42 0.0199975 0.153022 0.0966577 0.0993443 0.057107 0.184161 + 200 3 42 26 41 0.057107 0.184161 0.0966577 0.0993443 0.104814 0.192573 + 200 3 41 26 40 0.104814 0.192573 0.0966577 0.0993443 0.150336 0.176005 + 200 3 40 26 38 0.150336 0.176005 0.0966577 0.0993443 0.181474 0.138895 + 200 3 38 26 50 0.181474 0.138895 0.0966577 0.0993443 0.189886 0.0911877 + 200 3 37 13 36 0.190243 0.0993443 0.0966577 0.0993443 0.177705 0.0525519 + 200 3 36 13 35 0.177705 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 35 13 34 0.14345 0.0182974 0.0966577 0.0993443 0.0966577 0.00575948 + 200 3 34 13 33 0.0966577 0.00575948 0.0966577 0.0993443 0.0498653 0.0182974 + 200 3 33 13 32 0.0498653 0.0182974 0.0966577 0.0993443 0.0156108 0.052552 + 200 3 32 13 31 0.0156108 0.052552 0.0966577 0.0993443 0.00307286 0.0993444 + 200 3 31 13 30 0.00307286 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 30 13 29 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 29 13 28 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 28 13 27 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 27 13 25 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 25 13 37 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 24 90 23 0.177704 0.0525519 0.0966577 0.0993443 0.14345 0.0182974 + 200 3 23 90 22 0.14345 0.0182974 0.0966577 0.0993443 0.0966576 0.00575948 + 200 3 22 90 21 0.0966576 0.00575948 0.0966577 0.0993443 0.0498652 0.0182976 + 200 3 21 90 20 0.0498652 0.0182976 0.0966577 0.0993443 0.0156108 0.0525519 + 200 3 20 90 19 0.0156108 0.0525519 0.0966577 0.0993443 0.00307285 0.0993444 + 200 3 19 90 18 0.00307285 0.0993444 0.0966577 0.0993443 0.0156108 0.146137 + 200 3 18 90 17 0.0156108 0.146137 0.0966577 0.0993443 0.0498653 0.180391 + 200 3 17 90 16 0.0498653 0.180391 0.0966577 0.0993443 0.0966577 0.192929 + 200 3 16 90 15 0.0966577 0.192929 0.0966577 0.0993443 0.14345 0.180391 + 200 3 15 90 14 0.14345 0.180391 0.0966577 0.0993443 0.177705 0.146137 + 200 3 14 90 12 0.177705 0.146137 0.0966577 0.0993443 0.190243 0.0993443 + 200 3 12 90 24 0.190243 0.0993443 0.0966577 0.0993443 0.177704 0.0525519 diff --git a/data/base/gamedesc.lev b/data/base/gamedesc.lev index 62301930fda..ccdfe8660f8 100644 --- a/data/base/gamedesc.lev +++ b/data/base/gamedesc.lev @@ -298,17 +298,6 @@ dataset CAM_3 game "wrf/cam3/cam3a-b.gam" data "wrf/cam3/cam3ab.wrf" -/* This level CUT -between SUB_3_3S -dataset CAM_3 -data "wrf/cam3/sub3-3s.wrf" - -miss_keep SUB_3_3 -dataset CAM_3 -game "wrf/cam3/sub3-3.gam" -data "wrf/cam3/sub3-3.wrf" -*/ - expand_limbo CAM3C dataset CAM_3 game "wrf/cam3/cam3c.gam" diff --git a/data/base/guidetopics/wz2100/general/_index.json b/data/base/guidetopics/wz2100/general/_index.json new file mode 100644 index 00000000000..3bdd0649c4f --- /dev/null +++ b/data/base/guidetopics/wz2100/general/_index.json @@ -0,0 +1,13 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::general", + "title": "General", + "sort": "0", + "contents": [ + "In Warzone 2100, you command the forces of \"The Project\" in a battle to rebuild the world, after mankind has been nearly destroyed by nuclear missiles.", + "", + "This guide will help walk you through key facets of the game.", + "", + "(If you are playing the campaign, new guide topics may be unlocked as you progress through the game.)" + ] +} diff --git a/data/base/guidetopics/wz2100/general/artifacts.json b/data/base/guidetopics/wz2100/general/artifacts.json new file mode 100644 index 00000000000..3335ffc413f --- /dev/null +++ b/data/base/guidetopics/wz2100/general/artifacts.json @@ -0,0 +1,22 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::general::artifacts", + "title": "Artifacts", + "sort": "05", + "applicableModes": ["campaign"], + "visual": { + "stat": "Crate" + }, + "contents": [ + "As you progress through the campaign, you will collect Artifacts from enemy bases (and specific enemy units).", + "", + "These will unlock valuable technologies that you can research in a Research Facility.", + "", + "Artifacts are small white boxes with a green indicator above, and can be picked up by moving any unit close enough.", + "", + "All artifacts must be picked up as part of each level's victory conditions." + ], + "links": [ + "wz2100::structures::researchfacility" + ] +} diff --git a/data/base/guidetopics/wz2100/general/backstory.json b/data/base/guidetopics/wz2100/general/backstory.json new file mode 100644 index 00000000000..150b6b96172 --- /dev/null +++ b/data/base/guidetopics/wz2100/general/backstory.json @@ -0,0 +1,32 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::general::backstory", + "title": "Backstory", + "sort": "01", + "applicableModes": ["campaign"], + "contents": [ + "In the late 21st century, NASDA (the North American Strategic Defense Agency) developed and deployed a massive missile defense system, including a network of nuclear-equipped satellites and ground-based launch sites.", + "", + "However, during a routine maintenance check, something went terribly wrong...", + "", + "The Collapse came fast and hard. Following a technical error in the satellite defense system, nuclear warheads were fired at major cites across the world.", + "", + "Minutes later, ground based sites fired in response to the launch. Millions died as nuclear firestorms wiped out the world’s cities. Billions more died as plagues and epidemics swept away what remained of civilization.", + "", + "Less than a million people survived the Collapse.", + "", + "Earth broke into hundreds of small scavenger bands battling each other for the remnants of the former civilization. Only a few had the vision to attempt to rebuild a new world from the ashes.", + "", + "## Present Day:", + "", + "The player (referred to as \"the Commander\") is part of a group of survivors that sought shelter in a military base in the Rocky Mountains.", + "", + "They emerge from the base with the goal of rebuilding the world, adopting the name \"The Project\".", + "", + "The Project dispatches three teams with the objective of reclaiming artifacts, thus allowing the research and application of pre-Collapse technologies.", + "", + "- Team Alpha is sent to an Arizona desert location southeast of Project HQ", + "- Beta team is sent to the remains of Chicago", + "- Gamma team is sent into the northern Rockies in Colorado" + ] +} diff --git a/data/base/guidetopics/wz2100/general/commandpanel.json b/data/base/guidetopics/wz2100/general/commandpanel.json new file mode 100644 index 00000000000..ec78d48c4e4 --- /dev/null +++ b/data/base/guidetopics/wz2100/general/commandpanel.json @@ -0,0 +1,42 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::general::commandpanel", + "title": "Command Panel", + "sort": "02", + "visual": [ + { + "retButId": "CANCEL" + }, + { + "retButId": "FACTORY" + }, + { + "retButId": "RESEARCH" + }, + { + "retButId": "BUILD" + }, + { + "retButId": "DESIGN" + }, + { + "retButId": "INTELMAP" + }, + { + "retButId": "COMMAND" + } + ], + "contents": [ + "There are six different command panel interfaces, plus a central button. You open up a command interface by pressing the appropriate button.", + "", + "The middle / central button closes any open command interface." + ], + "links": [ + "wz2100::units::building", + "wz2100::general::researching", + "wz2100::structures::building", + "wz2100::units::designing", + "wz2100::general::intelmap", + "wz2100::units::commanders" + ] +} diff --git a/data/base/guidetopics/wz2100/general/intelmap.json b/data/base/guidetopics/wz2100/general/intelmap.json new file mode 100644 index 00000000000..2429f8d06bb --- /dev/null +++ b/data/base/guidetopics/wz2100/general/intelmap.json @@ -0,0 +1,19 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::general::intelmap", + "title": "Intelligence Display", + "sort": "03", + "visual": { + "retButId": "INTELMAP" + }, + "contents": [ + "The Intelligence Display is where you can find your current mission objectives, replay your current mission briefing, and read more about completed research projects.", + "", + "When you open the Intelligence Display, two rows of icons appear on the bottom of the screen.", + "", + "Selecting an icon will display information about that research or mission objective in the middle of the screen." + ], + "links": [ + "wz2100::general::commandpanel" + ] +} diff --git a/data/base/guidetopics/wz2100/general/missiontimer.json b/data/base/guidetopics/wz2100/general/missiontimer.json new file mode 100644 index 00000000000..1663456c71a --- /dev/null +++ b/data/base/guidetopics/wz2100/general/missiontimer.json @@ -0,0 +1,23 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::general::missiontimer", + "title": "Using the Mission Timer", + "sort": "07", + "applicableModes": ["campaign"], + "visual": { + "imagePath": "../../../images/intfac/image_mission_clock.png" + }, + "contents": [ + "Much of the time, you'll be on the clock. Sometimes, you'll find yourself wishing you had more time. Other times you might think you have too much.", + "", + "There are always smart ways to make use of extra time to prepare for battles ahead.", + "", + "Whether it's completing new research, building defenses, or recycling & replacing units with new weapons and technologies... don't let good time go to waste.", + "", + "(If you have the Timer Power Bonus tweak enabled - which is the default - you don't need to wait out the timer to grant power. You'll automatically be granted the power you would have gained if you'd let the timer run. But the rest of the uses still apply!)" + ], + "links": [ + "wz2100::structures::researchfacility", + "wz2100::unitorders::recycling" + ] +} diff --git a/data/base/guidetopics/wz2100/general/power.json b/data/base/guidetopics/wz2100/general/power.json new file mode 100644 index 00000000000..1184a4fc179 --- /dev/null +++ b/data/base/guidetopics/wz2100/general/power.json @@ -0,0 +1,17 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::general::power", + "title": "Power", + "sort": "04", + "contents": [ + "In Warzone 2100, power is your key resource.", + "", + "You spend power to build structures, manufacture units, and research upgrades / new technology.", + "", + "Power is generated by Power Generators that are fed by Oil Derricks." + ], + "links": [ + "wz2100::structures::oilderrick", + "wz2100::structures::powergenerator" + ] +} diff --git a/data/base/guidetopics/wz2100/general/researching.json b/data/base/guidetopics/wz2100/general/researching.json new file mode 100644 index 00000000000..e86aacb349f --- /dev/null +++ b/data/base/guidetopics/wz2100/general/researching.json @@ -0,0 +1,28 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::general::researching", + "title": "Researching Technology", + "sort": "06", + "visual": { + "retButId": "RESEARCH" + }, + "contents": [ + "Researching technologies is accomplished using Research Facilities.", + "", + "When a Research Facility is selected, all available options are displayed on the left side of the screen.", + "", + "Each research project requires a certain amount of power and time to complete. The power investment is non-refundable.", + "", + "But research progress is never lost, even if the Research Facility is destroyed - the project only needs to be re-assigned to another facility.", + "", + "Completing research of a new technology may:", + "- Make available new weapons, structures, unit bodies, propulsion, etc", + "- Upgrade the effectiveness of existing weapons, structures, unit bodies, etc", + "- Enable the research of additional technologies" + ], + "links": [ + "wz2100::structures::researchfacility", + "wz2100::general::artifacts", + "wz2100::general::commandpanel" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/_index.json b/data/base/guidetopics/wz2100/structures/_index.json new file mode 100644 index 00000000000..cd586cd957f --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/_index.json @@ -0,0 +1,11 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures", + "title": "Structures", + "sort": "1", + "contents": [ + "Building structures is absolutely vital in Warzone 2100 - from Factories which build units, to Research Facilities that research new technologies.", + "", + "Building can be done with units with Trucks as turrets and/or Combat Engineers." + ] +} diff --git a/data/base/guidetopics/wz2100/structures/building.json b/data/base/guidetopics/wz2100/structures/building.json new file mode 100644 index 00000000000..369c9fd122d --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/building.json @@ -0,0 +1,28 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::building", + "title": "Building Structures", + "visual": { + "retButId": "BUILD" + }, + "contents": [ + "Click the \"Build\" button on the Command Panel.", + "This will open the Structures menu on the left side of screen, with a button for each structure you can build.", + "", + "Select the desired structure button. A silhouette will appear in the game world - this is where your structure will be placed once you confirm.", + "", + "Move the silhouette by moving the input device.", + "- If a structure is buildable in a location, the silhouette will be colored green when you hover over a location.", + "- If a structure is not buildable in a location, the silhouette will be colored red.", + "", + "Once you've chosen a viable location, select to confirm the placement of the build site. A truck will move to the location and begin construction.", + "", + "You can order additional trucks to help out (and build the structure faster) by selecting them and ordering them to target the structure under construction.", + "", + "Tip: To build \"walls\" (once they are available), you can click and drag to draw a wall in a line." + ], + "links": [ + "wz2100::structures::demolishing", + "wz2100::general::commandpanel" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/demolishing.json b/data/base/guidetopics/wz2100/structures/demolishing.json new file mode 100644 index 00000000000..e4f2ce04df6 --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/demolishing.json @@ -0,0 +1,22 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::demolishing", + "title": "Demolishing Structures", + "visual": { + "stat": { + "id": "A0ADemolishStructure" + } + }, + "contents": [ + "Demolishing a building is almost as simple as building one.", + "Select \"Demolish Structure\" in the Structures menu and click a building to demolish.", + "", + "A unit will move to the building and destroy it.", + "", + "Demolished structures return half the power used to build the structure." + ], + "links": [ + "wz2100::structures::building", + "wz2100::general::commandpanel" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/factory.json b/data/base/guidetopics/wz2100/structures/factory.json new file mode 100644 index 00000000000..462b7517436 --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/factory.json @@ -0,0 +1,25 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::factory", + "title": "Factory", + "visual": { + "stat": { + "id": "A0LightFactory" + } + }, + "contents": [ + "A Factory is used to build units. Each Factory can build one unit at a time, but you can queue multiple units for production.", + "", + "When a unit is produced, it receives the Factory’s Unit Orders and proceeds to the Factory's Rally Point.", + "", + "Note: The base Factory is only able to produce units with Light bodies. Factory modules must be discovered and built to upgrade Factory production capabilities." + ], + "links": [ + "wz2100::structures::rallypoint", + "wz2100::units::designing", + "wz2100::units::building", + "wz2100::unitorders", + "wz2100::structures::modules", + "wz2100::structures::building" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/hq.json b/data/base/guidetopics/wz2100/structures/hq.json new file mode 100644 index 00000000000..f4754928df7 --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/hq.json @@ -0,0 +1,22 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::hq", + "title": "Command Center", + "visual": { + "stat": { + "id": "A0CommandCentre" + } + }, + "contents": [ + "The Command Center is the headquarters of your base.", + "It provides access to the mini-map / radar, and the ability to design units.", + "", + "To build a Command Center, click the \"Build\" button on the command panel and select the Command Center structure.", + "Then, click where you want your builders to construct it." + ], + "links": [ + "wz2100::general::commandpanel", + "wz2100::structures::building", + "wz2100::units::designing" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/modules.json b/data/base/guidetopics/wz2100/structures/modules.json new file mode 100644 index 00000000000..9d72f2bf136 --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/modules.json @@ -0,0 +1,45 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::modules", + "title": "Structure Modules", + "visual": [ + { + "stat": { + "id": "A0PowMod1", + "onlyIfKnown": "campaign" + } + }, + { + "stat": { + "id": "A0FacMod1", + "onlyIfKnown": "campaign" + } + }, + { + "stat": { + "id": "A0ResearchModule1", + "onlyIfKnown": "campaign" + } + } + ], + "contents": [ + "Power Generators, Factories, and Research Facilities can be upgraded with their respective structure modules.", + "", + "Once researched, you can access these modules from the Build menu to apply them to the structures in question.", + "", + "Alternatively, you can select a Truck or a Combat Engineer and click on the structure in order to begin its construction.", + "", + "Note: While one of these structures is being upgraded, it will temporarily be unavailable until the upgrade is complete.", + "", + "Upgrade Effects:", + "- Power Generator modules increase the rate of power generation", + "- Factory modules allow the production of Medium and Heavy units, as well as decreasing the time it takes to produce units", + "- Research Facility modules decrease the time needed to complete assigned research projects" + ], + "links": [ + "wz2100::structures::powergenerator", + "wz2100::structures::factory", + "wz2100::structures::vtolfactory", + "wz2100::structures::researchfacility" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/oilderrick.json b/data/base/guidetopics/wz2100/structures/oilderrick.json new file mode 100644 index 00000000000..e33875b2624 --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/oilderrick.json @@ -0,0 +1,19 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::oilderrick", + "title": "Oil Derrick", + "visual": [ + { "stat": "A0ResourceExtractor" }, + { "stat": "OilResource" } + ], + "contents": [ + "An Oil Derrick can be built by selecting a Truck and targeting an available Oil Resource.", + "", + "The destruction of an Oil Derrick will temporarily prevent the construction of another at the same spot until the fire subsides.", + "", + "To utilize an Oil Derrick and generate power requires a Power Generator." + ], + "links": [ + "wz2100::structures::powergenerator" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/powergenerator.json b/data/base/guidetopics/wz2100/structures/powergenerator.json new file mode 100644 index 00000000000..6706eab6aec --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/powergenerator.json @@ -0,0 +1,21 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::powergenerator", + "title": "Power Generator", + "visual": { + "stat": { + "id": "A0PowerGenerator" + } + }, + "contents": [ + "Power is generated by Power Generators that are fed by Oil Derricks.", + "", + "Each Power Generator uses up to 4 Oil Derricks. So, for example, if you have 10 Oil Derricks you would need 3 Power Generators to utilize all of the oil derricks and generate maximum Power.", + "", + "While oil derricks must be built on oil resources, Power Generators can be built anywhere on the map. But keep in mind: additional generators beyond one for every 4 derricks will provide no benefit." + ], + "links": [ + "wz2100::structures::oilderrick", + "wz2100::structures::building" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/rallypoint.json b/data/base/guidetopics/wz2100/structures/rallypoint.json new file mode 100644 index 00000000000..9fee976082b --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/rallypoint.json @@ -0,0 +1,15 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::rallypoint", + "title": "Rally Point", + "contents": [ + "When a Factory has finished building a unit, the unit will spawn next to the Factory, and then proceed to the Factory's designated Rally Point.", + "", + "By default, the Rally Point is placed next to the Factory. Clicking a Rally Point will allow you to move it.", + "", + "Note: Moving a Rally Point while a unit is moving to it will not affect the unit's path." + ], + "links": [ + "wz2100::structures::factory" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/repairfacility.json b/data/base/guidetopics/wz2100/structures/repairfacility.json new file mode 100644 index 00000000000..66d9d2378ea --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/repairfacility.json @@ -0,0 +1,19 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::repairfacility", + "title": "Repair Facility", + "visual": { + "stat": { + "id": "A0RepairCentre3" + } + }, + "contents": [ + "Building a Repair Facility creates a fixed structure to which units can retreat to be repaired.", + "", + "Repair Facilities can repair units faster than mobile units with repair turrets." + ], + "links": [ + "wz2100::units::repairing", + "wz2100::unitorders::retreating" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/researchfacility.json b/data/base/guidetopics/wz2100/structures/researchfacility.json new file mode 100644 index 00000000000..cd86fc28226 --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/researchfacility.json @@ -0,0 +1,21 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::researchfacility", + "title": "Research Facility", + "visual": { + "stat": { + "id": "A0ResearchFacility" + } + }, + "contents": [ + "Research Facilities are required in order to research new technologies.", + "", + "Each Research Facility can research one technology at a time." + ], + "links": [ + "wz2100::general::researching", + "wz2100::structures::building", + "wz2100::units::modules", + "wz2100::units::weaponselection" + ] +} diff --git a/data/base/guidetopics/wz2100/structures/vtolfactory.json b/data/base/guidetopics/wz2100/structures/vtolfactory.json new file mode 100644 index 00000000000..12ba47ddd69 --- /dev/null +++ b/data/base/guidetopics/wz2100/structures/vtolfactory.json @@ -0,0 +1,24 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::structures::vtolfactory", + "title": "VTOL Factory", + "visual": { + "stat": { + "id": "A0VTolFactory1" + } + }, + "contents": [ + "A VTOL Factory is used to build units with VTOL propulsion (i.e. flying units).", + "", + "Each VTOL Factory can build one unit at a time, but you can queue multiple units for production.", + "", + "When a VTOL Factory is done building a unit, it will order it to fly and land near the factory's Rally Point." + ], + "links": [ + "wz2100::units::vtols", + "wz2100::structures::rallypoint", + "wz2100::units::designing", + "wz2100::units::building", + "wz2100::structures::building" + ] +} diff --git a/data/base/guidetopics/wz2100/unitorders/_index.json b/data/base/guidetopics/wz2100/unitorders/_index.json new file mode 100644 index 00000000000..1b244a563df --- /dev/null +++ b/data/base/guidetopics/wz2100/unitorders/_index.json @@ -0,0 +1,13 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::unitorders", + "title": "Unit Orders", + "sort": "3", + "contents": [ + "Right-click a unit or group of units to show their current Unit Orders.", + "", + "The Unit Orders panel allows you to customize the behavior of your units, from patrolling an area to retreating at low health.", + "", + "Right-click a Factory to adjust the Unit Orders for all future units produced by the Factory." + ] +} diff --git a/data/base/guidetopics/wz2100/unitorders/attackrange.json b/data/base/guidetopics/wz2100/unitorders/attackrange.json new file mode 100644 index 00000000000..965ad6cb0a3 --- /dev/null +++ b/data/base/guidetopics/wz2100/unitorders/attackrange.json @@ -0,0 +1,19 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::unitorders::attackrange", + "title": "Attack Range", + "sort": "01", + "visual": { + "secondaryUnitOrderButtons": "ATTACK_RANGE" + }, + "contents": [ + "You can use the Unit Orders menu to configure unit \"Attack Range\".", + "", + "- Optimum Range: Fires at the most accurate range", + "- Short Range: Moves to short range and attacks", + "- Long Range: Attacks at long range (default)" + ], + "links": [ + "wz2100::unitorders" + ] +} diff --git a/data/base/guidetopics/wz2100/unitorders/firing.json b/data/base/guidetopics/wz2100/unitorders/firing.json new file mode 100644 index 00000000000..e2a668ee648 --- /dev/null +++ b/data/base/guidetopics/wz2100/unitorders/firing.json @@ -0,0 +1,19 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::unitorders::firing", + "title": "Firing Mode", + "sort": "03", + "visual": { + "secondaryUnitOrderButtons": "ATTACK_LEVEL" + }, + "contents": [ + "You can use the Unit Orders menu to configure unit \"Firing Mode\".", + "", + "- Fire At Will: Fires at any enemy (default)", + "- Return Fire: Only fire if fired at", + "- Do Not Fire: Units will not fire" + ], + "links": [ + "wz2100::unitorders" + ] +} diff --git a/data/base/guidetopics/wz2100/unitorders/movement.json b/data/base/guidetopics/wz2100/unitorders/movement.json new file mode 100644 index 00000000000..4c2887950dd --- /dev/null +++ b/data/base/guidetopics/wz2100/unitorders/movement.json @@ -0,0 +1,30 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::unitorders::movement", + "title": "Movement", + "sort": "04", + "visual": [ + { + "secondaryUnitOrderButtons": "PATROL" + }, + { + "secondaryUnitOrderButtons": "CIRCLE" + }, + { + "secondaryUnitOrderButtons": "HALTTYPE" + } + ], + "contents": [ + "You can use the Unit Orders menu to configure unit \"Movement\".", + "", + "- Patrol: Move between two points. Just click a point on the map after selecting it", + "- Circle: (VTOLs only) Move in a circle over a position. Just click an area after selecting it", + "", + "- Pursue: Pursue enemy", + "- Guard: Stay near an area or structure. (default)", + "- Hold Position: Do not move under any circumstances" + ], + "links": [ + "wz2100::unitorders" + ] +} diff --git a/data/base/guidetopics/wz2100/unitorders/recycling.json b/data/base/guidetopics/wz2100/unitorders/recycling.json new file mode 100644 index 00000000000..3098dc2ee70 --- /dev/null +++ b/data/base/guidetopics/wz2100/unitorders/recycling.json @@ -0,0 +1,22 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::unitorders::recycling", + "title": "Recycling", + "sort": "06", + "visual": { + "secondaryUnitOrderButtons": "RECYCLE" + }, + "contents": [ + "Recycling a unit will send it to the nearest Factory or Repair Facility, and destroy it.", + "", + "Half the power used in making the unit will be refunded to you (although this will be reduced if the unit is damaged).", + "", + "The unit’s experience level will be placed in the next unit that is manufactured.", + "", + "You can order the selected units to return for recycling via the Unit Orders menu or the \"Return for Recycling\" keybind." + ], + "links": [ + "wz2100::units::experience", + "wz2100::unitorders" + ] +} diff --git a/data/base/guidetopics/wz2100/unitorders/retreating.json b/data/base/guidetopics/wz2100/unitorders/retreating.json new file mode 100644 index 00000000000..06e8709cdb0 --- /dev/null +++ b/data/base/guidetopics/wz2100/unitorders/retreating.json @@ -0,0 +1,23 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::unitorders::retreating", + "title": "Retreating", + "sort": "02", + "visual": { + "secondaryUnitOrderButtons": "REPAIR_LEVEL" + }, + "contents": [ + "Losing units (especially units with experience levels) can be a real hit to a force's ability to successfully wage battle.", + "", + "You can use the Unit Orders menu to choose a \"Retreat Threshold\", which will cause units to automatically retreat from the battle when they reach a specified damage level.", + "", + "- Do or Die: Your unit will not retreat unless ordered to. (default)", + "- Retreat at Medium Damage: Your unit will retreat at medium (yellow) damage", + "- Retreat at Heavy Damage: Your unit will retreat at heavy (red) damage", + "", + "Retreating units will return to the nearest repair facility, repair unit, HQ, or LZ." + ], + "links": [ + "wz2100::unitorders" + ] +} diff --git a/data/base/guidetopics/wz2100/unitorders/return.json b/data/base/guidetopics/wz2100/unitorders/return.json new file mode 100644 index 00000000000..2290e76b689 --- /dev/null +++ b/data/base/guidetopics/wz2100/unitorders/return.json @@ -0,0 +1,19 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::unitorders::return", + "title": "Return To", + "sort": "05", + "visual": { + "secondaryUnitOrderButtons": "RETURN_TO_LOC" + }, + "contents": [ + "You can use the Unit Orders menu to quickly order units to return to a specific location.", + "", + "- Return for Repair: Unit will return to a Repair Facility", + "- Return to HQ: Unit will return to Command Center or LZ (campaign)", + "- Go To Transport: Unit will go to and board transport" + ], + "links": [ + "wz2100::unitorders" + ] +} diff --git a/data/base/guidetopics/wz2100/units/_index.json b/data/base/guidetopics/wz2100/units/_index.json new file mode 100644 index 00000000000..d13866206ba --- /dev/null +++ b/data/base/guidetopics/wz2100/units/_index.json @@ -0,0 +1,18 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units", + "title": "Units", + "sort": "2", + "contents": [ + "You will need to design and build new units if you want to overpower your enemies and get that sweet taste of victory.", + "", + "This aspect of the game is what makes Warzone 2100 unique in its own way.", + "", + "To be able to design units, a Command Center is required." + ], + "links": [ + "wz2100::structures::hq", + "wz2100::units::designing", + "wz2100::units::building" + ] +} diff --git a/data/base/guidetopics/wz2100/units/building.json b/data/base/guidetopics/wz2100/units/building.json new file mode 100644 index 00000000000..ccf22890b40 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/building.json @@ -0,0 +1,30 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::building", + "title": "Building Units", + "sort": "02", + "visual": { + "retButId": "FACTORY" + }, + "contents": [ + "To build units, either select a Factory, or select the \"Manufacturing\" button on the Command Panel - this will open the Manufacturing panel on the left side of the screen.", + "", + "The Manufacturing panel will display the unit designs which are buildable by the currently-selected Factory. Factories may be limited to producing certain types of units (or may only be able to produce certain units if upgraded with modules).", + "", + "To select a different Factory, either click on the Factory in the game world, or click on the appropriate button in the Factories panel on the bottom-center of the screen.", + "", + "To manufacture a unit in a Factory, click the desired unit design button in the Manufacturing panel. You can queue multiples of the same unit by repeatedly clicking the unit design button.", + "", + "While a unit is building, the unit will be shown in the Factories panel above the Factory that is building it. If the bar is green, the Factory is gathering power to build the unit. If the bar is yellow, the unit is being built.", + "", + "When a Factory is done building a unit, it will order the unit to proceed to the Factory's Rally Point." + ], + "links": [ + "wz2100::units::designing", + "wz2100::structures::factory", + "wz2100::structures::vtolfactory", + "wz2100::general::commandpanel", + "wz2100::structures::modules", + "wz2100::structures::rallypoint" + ] +} diff --git a/data/base/guidetopics/wz2100/units/commanders/_index.json b/data/base/guidetopics/wz2100/units/commanders/_index.json new file mode 100644 index 00000000000..2cf67087164 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/commanders/_index.json @@ -0,0 +1,28 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::commanders", + "title": "Commanders", + "sort": "07", + "visual": { + "droidTemplate": { + "body": "Body8MBT", + "brain": "CommandBrain01", + "name": "Command Turret Scorpion Half-tracks", + "propulsion": "HalfTrack", + "type": "DROID_COMMAND", + "weapons": [ + "CommandTurret1" + ] + } + }, + "contents": [ + "Command turrets are used much like sensors, except they can command any attacking unit, not just artillery.", + "", + "Commanders provide an accuracy, armor, and movement speed bonus to all units assigned to them, which increases as the commander's rank increases.", + "", + "They are limited to having 6 non-artillery attacking units assigned to them at first, but this limit rises by 2 each time the commander gains a rank, which can happen relatively quickly." + ], + "links": [ + "wz2100::units::sensors" + ] +} diff --git a/data/base/guidetopics/wz2100/units/commanders/attaching.json b/data/base/guidetopics/wz2100/units/commanders/attaching.json new file mode 100644 index 00000000000..b817b281806 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/commanders/attaching.json @@ -0,0 +1,31 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::commanders::attaching", + "title": "Attaching Units", + "sort": "01", + "visual": { + "droidTemplate": { + "body": "Body8MBT", + "brain": "CommandBrain01", + "name": "Command Turret Scorpion Half-tracks", + "propulsion": "HalfTrack", + "type": "DROID_COMMAND", + "weapons": [ + "CommandTurret1" + ] + } + }, + "contents": [ + "To attach a unit to a Commander, select a unit, then left-click the Commander you want to attach the unit to. A symbol will appear next to the unit to signify it is attached.", + "", + "## Limits:", + "", + "Commanders have a limit to the amount of direct-fire units (eg machine-guns) which is affected by their own experience level. Levels are earned by the Commander reaching 2 kills, 4, 8, 16, 32, 64 and so on.", + "", + "Each experience level allows the Commander 2 more direct-fire units. However, a Commander can have as many indirect-fire units as it wants." + ], + "links": [ + "wz2100::units::commanders::detaching", + "wz2100::units::experience" + ] +} diff --git a/data/base/guidetopics/wz2100/units/commanders/detaching.json b/data/base/guidetopics/wz2100/units/commanders/detaching.json new file mode 100644 index 00000000000..c7a594fea1c --- /dev/null +++ b/data/base/guidetopics/wz2100/units/commanders/detaching.json @@ -0,0 +1,27 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::commanders::detaching", + "title": "Detaching Units", + "sort": "02", + "visual": { + "droidTemplate": { + "body": "Body8MBT", + "brain": "CommandBrain01", + "name": "Command Turret Scorpion Half-tracks", + "propulsion": "HalfTrack", + "type": "DROID_COMMAND", + "weapons": [ + "CommandTurret1" + ] + } + }, + "contents": [ + "To detach a unit from a Commander:", + "", + "1. Right-click the unit (or hold the \"Shift\" key while selecting the unit) to select only that unit (instead of the whole commander group)", + "2. Give the unit a new order (eg. move)" + ], + "links": [ + "wz2100::units::commanders::attaching" + ] +} diff --git a/data/base/guidetopics/wz2100/units/commanders/repairs.json b/data/base/guidetopics/wz2100/units/commanders/repairs.json new file mode 100644 index 00000000000..bb83d2b728f --- /dev/null +++ b/data/base/guidetopics/wz2100/units/commanders/repairs.json @@ -0,0 +1,26 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::commanders::repairs", + "title": "Going for repairs, BRB", + "sort": "04", + "visual": { + "droidTemplate": { + "body": "Body8MBT", + "brain": "CommandBrain01", + "name": "Command Turret Scorpion Half-tracks", + "propulsion": "HalfTrack", + "type": "DROID_COMMAND", + "weapons": [ + "CommandTurret1" + ] + } + }, + "contents": [ + "A unit that retreats from the battle to go to a repair facility, will stay connected to its Commander group.", + "", + "When it is done repairing, it will return to its Commander." + ], + "links": [ + "wz2100::units::commanders" + ] +} diff --git a/data/base/guidetopics/wz2100/units/commanders/targeting.json b/data/base/guidetopics/wz2100/units/commanders/targeting.json new file mode 100644 index 00000000000..478278dfe04 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/commanders/targeting.json @@ -0,0 +1,26 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::commanders::targeting", + "title": "Targeting", + "sort": "03", + "visual": { + "droidTemplate": { + "body": "Body8MBT", + "brain": "CommandBrain01", + "name": "Command Turret Scorpion Half-tracks", + "propulsion": "HalfTrack", + "type": "DROID_COMMAND", + "weapons": [ + "CommandTurret1" + ] + } + }, + "contents": [ + "When you select a Commander and target an enemy unit, any attached units will move to fire on the targeted unit.", + "", + "The attached units will have greater accuracy when firing." + ], + "links": [ + "wz2100::units::commanders" + ] +} diff --git a/data/base/guidetopics/wz2100/units/designing.json b/data/base/guidetopics/wz2100/units/designing.json new file mode 100644 index 00000000000..99c6c0db9fc --- /dev/null +++ b/data/base/guidetopics/wz2100/units/designing.json @@ -0,0 +1,32 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::designing", + "title": "Designing Units", + "sort": "01", + "visual": [ + { + "retButId": "DESIGN" + }, + { + "stat": "ZNULLBODY" + } + ], + "contents": [ + "You will need to design new units if you want to overpower your enemies and get that sweet taste of victory. This is a key aspect of Warzone 2100's gameplay.", + "", + "To start designing a unit, select the Design button in the Command Panel. This will make two columns appear on the left of the screen.", + "", + "To make a new design, select the \"blank\" green body in the top-left. To edit an existing unit design, just select it instead.", + "", + "Designing a new unit is a simple three-step procedure: selecting a body, a propulsion system, and a turret. Those three selections will result in a new unit.", + "", + "Once you have designed a unit, you will need a Factory to build it." + ], + "links": [ + "wz2100::structures::hq", + "wz2100::general::commandpanel", + "wz2100::structures::factory", + "wz2100::units::building", + "wz2100::units::weaponselection" + ] +} diff --git a/data/base/guidetopics/wz2100/units/experience.json b/data/base/guidetopics/wz2100/units/experience.json new file mode 100644 index 00000000000..4bf097b851f --- /dev/null +++ b/data/base/guidetopics/wz2100/units/experience.json @@ -0,0 +1,46 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::experience", + "title": "Experience & Ranks", + "sort": "03", + "visual": [ + { + "imagePath": "../../../images/intfac/image_lev_0.png" + }, + { + "imagePath": "../../../images/intfac/image_lev_1.png" + }, + { + "imagePath": "../../../images/intfac/image_lev_2.png" + }, + { + "imagePath": "../../../images/intfac/image_lev_3.png" + }, + { + "imagePath": "../../../images/intfac/image_lev_4.png" + }, + { + "imagePath": "../../../images/intfac/image_lev_5.png" + }, + { + "imagePath": "../../../images/intfac/image_lev_6.png" + }, + { + "imagePath": "../../../images/intfac/image_lev_7.png" + } + ], + "contents": [ + "Units gain experience when they successfully dispatch enemies.", + "", + "A higher experience level means that a unit is more accurate, moves faster, and takes less damage.", + "", + "An icon displaying a unit’s rank is displayed next to the unit’s health bar.", + "", + "Units with higher experience levels can make all the difference in battle!" + ], + "links": [ + "wz2100::unitorders::recycling", + "wz2100::unitorders::retreating", + "wz2100::units::repairing" + ] +} diff --git a/data/base/guidetopics/wz2100/units/repairing.json b/data/base/guidetopics/wz2100/units/repairing.json new file mode 100644 index 00000000000..e34f5740691 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/repairing.json @@ -0,0 +1,23 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::repairing", + "title": "Repairing Units", + "sort": "04", + "visual": { + "stat": { + "id": "LightRepair1" + } + }, + "contents": [ + "You can design a unit with a repair turret instead of a weapon, and it can be ordered to repair your other units.", + "", + "You can also keep the repair units back from the battle, and use the Retreat Options to set your offensive units to retreat to them for repair at a certain damage level.", + "", + "Retreating and repairing units is often far preferable to losing experienced units on the battlefield." + ], + "links": [ + "wz2100::structures::repairfacility", + "wz2100::unitorders::retreating", + "wz2100::units::designing" + ] +} diff --git a/data/base/guidetopics/wz2100/units/sensors/_index.json b/data/base/guidetopics/wz2100/units/sensors/_index.json new file mode 100644 index 00000000000..22229f60fb6 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/sensors/_index.json @@ -0,0 +1,33 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::sensors", + "title": "Sensors", + "sort": "06", + "visual": [ + { + "droidTemplate": { + "body": "Body1REC", + "name": "Sensor Turret Viper Wheels", + "propulsion": "wheeled01", + "type": "SENSOR", + "sensor": "SensorTurret1Mk1" + } + }, + { + "stat": "Sys-SensoTower01" + } + ], + "contents": [ + "Sensors can be used for scouting and surveillance, but they also have a more important usage: to spot for artillery.", + "", + "Artillery weapons, by themselves, cannot fire more than their own sensor range (8 tiles without upgrades).", + "", + "However, even the most basic artillery weapon has an 18-tile weapon range. To use it, you will need to build and deploy sensors on the battlefield (either sensor towers or tanks with sensor turrets)." + ], + "links": [ + "wz2100::units::sensors::using", + "wz2100::units::sensors::unassigning", + "wz2100::units::sensors::cb", + "wz2100::units::commanders" + ] +} diff --git a/data/base/guidetopics/wz2100/units/sensors/cb.json b/data/base/guidetopics/wz2100/units/sensors/cb.json new file mode 100644 index 00000000000..12c7d61f0a4 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/sensors/cb.json @@ -0,0 +1,34 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::sensors::cb", + "title": "CB Sensors", + "sort": "03", + "visual": [ + { + "stat": "Sys-CBTurret01" + }, { + "stat": { + "id": "Sys-VTOLCBTurret01", + "onlyIfKnown": "campaign" + } + }, { + "stat": "Sys-CB-Tower01" + }, { + "stat": { + "id": "Sys-VTOL-CB-Tower01", + "onlyIfKnown": "campaign" + } + } + ], + "contents": [ + "Counter-Battery (CB) Sensors dramatically alter the battlefield by allowing artillery units to directly target distant artillery platforms - provided they have the range.", + "", + "Identified structures or units will be colored red in the fog of war once a CB Sensor detects the launch of any enemy artillery.", + "", + "If active, artillery units prioritize CB Sensor targets over targets revealed by normal Sensors." + ], + "links": [ + "wz2100::units::sensors", + "wz2100::units::sensors::using" + ] +} diff --git a/data/base/guidetopics/wz2100/units/sensors/unassigning.json b/data/base/guidetopics/wz2100/units/sensors/unassigning.json new file mode 100644 index 00000000000..91f4e83224f --- /dev/null +++ b/data/base/guidetopics/wz2100/units/sensors/unassigning.json @@ -0,0 +1,29 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::sensors::unassigning", + "title": "Un-Assigning", + "sort": "02", + "visual": [ + { + "droidTemplate": { + "body": "Body1REC", + "name": "Sensor Turret Viper Wheels", + "propulsion": "wheeled01", + "type": "SENSOR", + "sensor": "SensorTurret1Mk1" + } + }, + { + "stat": "Sys-SensoTower01" + } + ], + "contents": [ + "To un-assign a unit from a sensor, the easiest way is to right-click the unit, and then tell it to move somewhere.", + "", + "Multiple units can be selected by holding CTRL while clicking." + ], + "links": [ + "wz2100::units::sensors", + "wz2100::units::commanders" + ] +} diff --git a/data/base/guidetopics/wz2100/units/sensors/using.json b/data/base/guidetopics/wz2100/units/sensors/using.json new file mode 100644 index 00000000000..c09fb56a2f2 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/sensors/using.json @@ -0,0 +1,34 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::sensors::using", + "title": "Using Sensors", + "sort": "01", + "visual": [ + { + "droidTemplate": { + "body": "Body1REC", + "name": "Sensor Turret Viper Wheels", + "propulsion": "wheeled01", + "type": "SENSOR", + "sensor": "SensorTurret1Mk1" + } + }, + { + "stat": "Sys-SensoTower01" + } + ], + "contents": [ + "Artillery structures are the easiest. Simply build a sensor tower, and if the sensor tower is targeting something within your artillery structures' weapon range, they will fire at it.", + "", + "An artillery tank, however, needs to be explicitly assigned to a sensor to function. Select the artillery tanks, then click on a sensor to assign the tanks to the sensor.", + "", + "Once the artillery is assigned, if it is assigned to a sensor tower, that tower will target enemies that come in range automatically.", + "", + "If it is assigned to a sensor tank, the sensor can be used to attack enemies by selecting the sensor and targeting an enemy. All artillery assigned to the sensor will attack its target." + ], + "links": [ + "wz2100::units::sensors::unassigning", + "wz2100::units::sensors", + "wz2100::units::commanders" + ] +} diff --git a/data/base/guidetopics/wz2100/units/vtols/_index.json b/data/base/guidetopics/wz2100/units/vtols/_index.json new file mode 100644 index 00000000000..a6db383a187 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/vtols/_index.json @@ -0,0 +1,31 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::vtols", + "title": "VTOLs", + "sort": "08", + "visual": { + "droidTemplate": { + "body": "Body2SUP", + "name": "Cluster Bomb Leopard V-Tol", + "propulsion": "V-Tol", + "type": "DROID", + "weapons": [ + "Bomb1-VTOL-LtHE" + ] + } + }, + "contents": [ + "VTOL (Vertical Take-Off and Landing) units are the main aerial instruments in dominating the skies.", + "", + "To produce VTOL units, you will need to have discovered & researched the \"VTOL Propulsion\" and \"VTOL Factory\".", + "", + "You should also research and build a few \"VTOL Rearming Pads\", so your VTOL units can reload ammo." + ], + "links": [ + "wz2100::units::vtols::designing", + "wz2100::structures::vtolfactory", + "wz2100::units::vtols::attacking", + "wz2100::units::vtols::defending", + "wz2100::units::vtols::weapons" + ] +} diff --git a/data/base/guidetopics/wz2100/units/vtols/attacking.json b/data/base/guidetopics/wz2100/units/vtols/attacking.json new file mode 100644 index 00000000000..86f9a01da88 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/vtols/attacking.json @@ -0,0 +1,23 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::vtols::attacking", + "title": "Attacking", + "sort": "04", + "contents": [ + "To attack with a VTOL, select it and click an enemy like normal.", + "", + "However, you may noticed the white ammo bar below its health bar as you start attacking.", + "", + "Unlike ground units, which reload automatically, VTOLs carry a limited amount of ammo. Once that ammo runs out, the VTOL can’t attack until it refuels.", + "", + "A VTOL out of ammo will automatically find a VTOL rearming pad to rearm and repair itself (and will resume attacking once fully rearmed), or it can be manually rearmed by selecting it and clicking on a rearming pad.", + "", + "Unlike other units which usually attack the nearest target, VTOLs will not attack anything automatically. However, by selecting a VTOL and alt+clicking on an area, a VTOL will patrol the area between its current location and the clicked location, and attack anything in the vicinity.", + "", + "Alternatively, VTOLs can be assigned to VTOL Strike Towers and VTOL CB Towers, which will cause them to function similarly to artillery assigned to sensor towers." + ], + "links": [ + "wz2100::units::vtols::weapons", + "wz2100::units::vtols" + ] +} diff --git a/data/base/guidetopics/wz2100/units/vtols/defending.json b/data/base/guidetopics/wz2100/units/vtols/defending.json new file mode 100644 index 00000000000..57cffef8e58 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/vtols/defending.json @@ -0,0 +1,42 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::vtols::defending", + "title": "Defending Against VTOLs", + "sort": "01", + "visual": [ + { + "droidTemplate": { + "body": "Body2SUP", + "name": "Cluster Bomb Leopard V-Tol", + "propulsion": "V-Tol", + "type": "DROID", + "weapons": [ + "Bomb1-VTOL-LtHE" + ] + } + }, + { + "stat": { + "id": "AASite-QuadMg1" + } + } + ], + "contents": [ + "What's that in the sky? ... It's a VTOL unit", + "", + "Since VTOLs are not ground-based units, most ground weapons cannot hit them.", + "", + "They can only be hit by either anti-air (often abbreviated \"AA\") or versatile (can hit air or ground) weapons.", + "", + "There are only a few weapons that are versatile: machineguns, lasers, and Mini-Rocket Pod.", + "", + "(Rockets and missiles are also versatile, but only when mounted on a cyborg or VTOL.)", + "", + "In addition to being uncommon, versatile weapons do not do as much damage to VTOLs as dedicated anti-air, so having some AA is recommended against VTOLs." + ], + "links": [ + "wz2100::units::vtols::attacking", + "wz2100::units::vtols::weapons", + "wz2100::units::vtols" + ] +} diff --git a/data/base/guidetopics/wz2100/units/vtols/designing.json b/data/base/guidetopics/wz2100/units/vtols/designing.json new file mode 100644 index 00000000000..1c34ea00f59 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/vtols/designing.json @@ -0,0 +1,39 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::vtols::designing", + "title": "Designing VTOLs", + "sort": "02", + "visual": [ + { + "stat": { + "id": "V-Tol" + } + }, + { + "droidTemplate": { + "body": "Body2SUP", + "name": "Cluster Bomb Leopard V-Tol", + "propulsion": "V-Tol", + "type": "DROID", + "weapons": [ + "Bomb1-VTOL-LtHE" + ] + } + } + ], + "contents": [ + "Designing VTOL units is similar to designing ground units.", + "", + "When choosing a propulsion, simply pick \"VTOL\" propulsion.", + "", + "You will then be able to select from the available VTOL Weapons.", + "", + "Remember: You will need a \"VTOL Factory\" to actually build VTOL unit designs." + ], + "links": [ + "wz2100::units::designing", + "wz2100::units::vtols::weapons", + "wz2100::structures::vtolfactory", + "wz2100::units::vtols" + ] +} diff --git a/data/base/guidetopics/wz2100/units/vtols/weapons.json b/data/base/guidetopics/wz2100/units/vtols/weapons.json new file mode 100644 index 00000000000..550c6d53302 --- /dev/null +++ b/data/base/guidetopics/wz2100/units/vtols/weapons.json @@ -0,0 +1,17 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::vtols::weapons", + "title": "Weapons", + "sort": "03", + "contents": [ + "Most weapons have a VTOL equivalent, which does at least twice as much damage, but has limited ammo.", + "", + "VTOL versions of regular weapons do not need to be researched separately.", + "", + "In addition to VTOL versions of ground-based direct weapons, VTOLs can also use bomb weapons. These weapons are the equivalent of artillery, and are very powerful." + ], + "links": [ + "wz2100::units::vtols::attacking", + "wz2100::units::vtols" + ] +} diff --git a/data/base/guidetopics/wz2100/units/weaponselection.json b/data/base/guidetopics/wz2100/units/weaponselection.json new file mode 100644 index 00000000000..afab4fefbcc --- /dev/null +++ b/data/base/guidetopics/wz2100/units/weaponselection.json @@ -0,0 +1,23 @@ +{ + "type": "wz2100.guidetopic.v1", + "id": "wz2100::units::weaponselection", + "title": "Weapon Selection", + "sort": "05", + "visual": { + "stat": { + "id": "ZNULLWEAPON" + } + }, + "contents": [ + "As you discover and research more weapons, you'll also discover that certain weapons may work dramatically better for certain situations than others (or versus certain enemy units or structures).", + "", + "When you complete research on a new weapon, an Intelligence Display message will provide some information on its attributes.", + "", + "It is to your advantage to experiment with different weapon types. If you're having trouble and haven't re-evaluated your force's composition in a while, it might be time to consider changing the weapons for stronger ones, or new varieties!" + ], + "links": [ + "wz2100::general::intelmap", + "wz2100::unitorders::recycling", + "wz2100::units::designing" + ] +} diff --git a/data/base/images/frontend.img b/data/base/images/frontend.img index 9cacb22c0b9..c909541e45f 100644 --- a/data/base/images/frontend.img +++ b/data/base/images/frontend.img @@ -235,3 +235,4 @@ 0,0,image_check_square_fill.png 0,0,image_check_square_empty.png 0,0,image_arrow_undo.png +0,0,image_sidebar_list.png diff --git a/data/base/images/frontend/image_sidebar_list.png b/data/base/images/frontend/image_sidebar_list.png new file mode 100644 index 00000000000..2b660a332da Binary files /dev/null and b/data/base/images/frontend/image_sidebar_list.png differ diff --git a/data/base/images/intfac.img b/data/base/images/intfac.img index da044540f7c..5bbf14fe5e5 100644 --- a/data/base/images/intfac.img +++ b/data/base/images/intfac.img @@ -449,3 +449,6 @@ 0,0,image_but_inner_glow.png 0,0,image_indicator_dot.png 0,0,image_indicator_dot_expand.png +0,0,image_sidebar_list.png +0,0,image_ingameoptions_up.png +0,0,image_ingameoptions_down.png diff --git a/data/base/images/intfac/image_ingameoptions_down.png b/data/base/images/intfac/image_ingameoptions_down.png new file mode 100644 index 00000000000..8a1d8a5727d Binary files /dev/null and b/data/base/images/intfac/image_ingameoptions_down.png differ diff --git a/data/base/images/intfac/image_ingameoptions_up.png b/data/base/images/intfac/image_ingameoptions_up.png new file mode 100644 index 00000000000..fdf50f5e0f4 Binary files /dev/null and b/data/base/images/intfac/image_ingameoptions_up.png differ diff --git a/data/base/images/intfac/image_sidebar_list.png b/data/base/images/intfac/image_sidebar_list.png new file mode 100644 index 00000000000..2b660a332da Binary files /dev/null and b/data/base/images/intfac/image_sidebar_list.png differ diff --git a/data/base/messages/brief1-1.json b/data/base/messages/brief1-1.json new file mode 100644 index 00000000000..3c9c0fd3415 --- /dev/null +++ b/data/base/messages/brief1-1.json @@ -0,0 +1,22 @@ +{ + "video0000": { + "name": "FLIGHT", + "sequences": [ + { "loop": 0, "subtitles": "INFLIGHT_MSG1", "video": "inflight.ogg" } + ] + }, + "video0001": { + "name": "SB1_1_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["P1-1_MSG1", "P1-1_MSG2", "P1-1_MSG3"], "video": "cam1/sub1_1p.ogg" }, + { "loop": 0, "subtitles": ["SUB1_1_MSG1", "SUB1_1_MSG2", "SUB1_1_MSG3"], "video": "cam1/sub1_1.ogg" } + ] + }, + "video0002": { + "name": "MB1_B2_MSG", + "sequences": [ + { "loop": 1, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["CAM1_B2_MSG", "CAM1_B2_MSG2", "CAM1_B2_MSG3"], "video": "cam1/cam1bpow.ogg" } + ] + } +} diff --git a/data/base/messages/brief1-1.txt b/data/base/messages/brief1-1.txt deleted file mode 100644 index 5bc1be38ac9..00000000000 --- a/data/base/messages/brief1-1.txt +++ /dev/null @@ -1,3 +0,0 @@ -FLIGHT,0,1,1,inflight.ogg,1,INFLIGHT_MSG1,0,0000 -SB1_1_MSG,0,1,2,cam1/sub1_1p.ogg,3,P1-1_MSG1,P1-1_MSG2,P1-1_MSG3,0,0000,cam1/sub1_1.ogg,3,SUB1_1_MSG1,SUB1_1_MSG2,SUB1_1_MSG3,0,0000 -MB1_B2_MSG,0,3,2,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam1/cam1bpow.ogg,0,3,CAM1_B2_MSG,CAM1_B2_MSG2,CAM1_B2_MSG3,0,0000 diff --git a/data/base/messages/brief1-2.json b/data/base/messages/brief1-2.json new file mode 100644 index 00000000000..32e4bef6d5c --- /dev/null +++ b/data/base/messages/brief1-2.json @@ -0,0 +1,16 @@ +{ + "video0000": { + "name": "SB1_2_MSG", + "sequences": [ + { "loop": 1, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["SUB1_2_MSG1", "SUB1_2_MSG2", "SUB1_2_MSG3"], "video": "cam1/sub1_2.ogg" } + ] + }, + "video0001": { + "name": "SB1_2_MSG2", + "sequences": [ + { "loop": 1, "subtitles": "SUB1_4A_MSG4", "video": "incomtns.ogg" }, + { "loop": 0, "subtitles": ["SUB1_2_MSG4", "SUB1_2_MSG5", "SUB1_2_MSG6"], "video": "cam1/sub12pt2.ogg" } + ] + } +} diff --git a/data/base/messages/brief1-2.txt b/data/base/messages/brief1-2.txt deleted file mode 100644 index f4305a91e61..00000000000 --- a/data/base/messages/brief1-2.txt +++ /dev/null @@ -1,2 +0,0 @@ -SB1_2_MSG,0,3,2,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam1/sub1_2.ogg,0,3,SUB1_2_MSG1,SUB1_2_MSG2,SUB1_2_MSG3,0,0000 -SB1_2_MSG2,0,3,2,incomtns.ogg,1,1,SUB1_4A_MSG4,0,0000,cam1/sub12pt2.ogg,0,3,SUB1_2_MSG4,SUB1_2_MSG5,SUB1_2_MSG6,0,0000 diff --git a/data/base/messages/brief1-3.json b/data/base/messages/brief1-3.json new file mode 100644 index 00000000000..843b3bc373e --- /dev/null +++ b/data/base/messages/brief1-3.json @@ -0,0 +1,32 @@ +{ + "video0000": { + "name": "SB1_3_UPDATE", + "sequences": [ + { "loop": 0, "subtitles": "P1-3A_MSG1", "video": "cam1/sub1_3p1.ogg" }, + { "loop": 0, "subtitles": ["BETA1_MSG1", "BETA1_MSG2", "BETA1_MSG3"], "video": "cam1/sub13bet.ogg" }, + { "loop": 0, "subtitles": ["GAMMA_MSG1", "GAMMA_MSG2", "GAMMA_MSG3"], "video": "cam1/sub13gam.ogg" }, + { "loop": 0, "subtitles": ["SUB1_3_MSG1", "SUB1_3_MSG2", "SUB1_3_MSG3"], "video": "cam1/sub1_3.ogg" } + ] + }, + "video0001": { + "name": "SB1_3_MSG", + "sequences": [ + { "loop": 1, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["SUB1_3_MSG1", "SUB1_3_MSG2", "SUB1_3_MSG3"], "video": "cam1/sub1_3.ogg" } + ] + }, + "video0002": { + "name": "SB1_3_MSG3", + "sequences": [ + { "loop": 0, "subtitles": "NP_MSG1", "video": "cam1/sub13np1.ogg" }, + { "loop": 0, "subtitles": "NP_MSG2", "video": "npend.ogg" } + ] + }, + "video0003": { + "name": "SB1_3_MSG4", + "sequences": [ + { "loop": 0, "subtitles": "NP_MSG1", "video": "cam1/sub13np2.ogg" }, + { "loop": 0, "subtitles": "NP_MSG2", "video": "npend.ogg" } + ] + } +} diff --git a/data/base/messages/brief1-3.txt b/data/base/messages/brief1-3.txt deleted file mode 100644 index 669082e4b13..00000000000 --- a/data/base/messages/brief1-3.txt +++ /dev/null @@ -1,4 +0,0 @@ -SB1_3_UPDATE,0,1,4,cam1/sub1_3p1.ogg,1,P1-3A_MSG1,0,0000,cam1/sub13bet.ogg,3,BETA1_MSG1,BETA1_MSG2,BETA1_MSG3,0,0000,cam1/sub13gam.ogg,3,GAMMA_MSG1,GAMMA_MSG2,GAMMA_MSG3,0,0000,cam1/sub1_3.ogg,3,SUB1_3_MSG1,SUB1_3_MSG2,SUB1_3_MSG3,0,0000 -SB1_3_MSG,0,3,2,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam1/sub1_3.ogg,0,3,SUB1_3_MSG1,SUB1_3_MSG2,SUB1_3_MSG3,0,0000 -SB1_3_MSG3,0,1,2,cam1/sub13np1.ogg,1,NP_MSG1,0,0000,npend.ogg,1,NP_MSG2,0,0000 -SB1_3_MSG4,0,1,2,cam1/sub13np2.ogg,1,NP_MSG1,0,0000,npend.ogg,1,NP_MSG2,0,0000 diff --git a/data/base/messages/brief1-4a.json b/data/base/messages/brief1-4a.json new file mode 100644 index 00000000000..4f4d4393ec2 --- /dev/null +++ b/data/base/messages/brief1-4a.json @@ -0,0 +1,20 @@ +{ + "video0000": { + "name": "SB1_4_MSG", + "sequences": [ + { "loop": 1, "subtitles": ["SUB1_4A_MSG4", "SUB1_4A_MSG5", "SUB1_4A_MSG6"], "video": "cam1/sub1_4pl.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam1/sub14anp.ogg" }, + { "loop": 0, "subtitles": "NP_MSG2", "video": "npend.ogg" }, + { "loop": 0, "subtitles": ["SUB1_4A_MSG1", "SUB1_4A_MSG2", "SUB1_4A_MSG3"], "video": "cam1/sub1_4.ogg" } + ] + }, + "video0001": { + "name": "SB1_4_B", + "sequences": [ + { "loop": 1, "subtitles": ["TRANS_MSG1", "SUB1_4B_MSG2", "SUB1_4B_MSG3"], "video": "cam1/sub14bpl.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam1/sub1_4bn.ogg" }, + { "loop": 0, "subtitles": "NP_MSG2", "video": "nexend.ogg" }, + { "loop": 0, "subtitles": ["SUB1_4B_MSG4", "SUB1_4B_MSG5", "SUB1_4B_MSG6"], "video": "cam1/sub1_4b.ogg" } + ] + } +} diff --git a/data/base/messages/brief1-4a.txt b/data/base/messages/brief1-4a.txt deleted file mode 100644 index d07bec62c13..00000000000 --- a/data/base/messages/brief1-4a.txt +++ /dev/null @@ -1,2 +0,0 @@ -SB1_4_MSG,0,3,4,cam1/sub1_4pl.ogg,1,3,SUB1_4A_MSG4,SUB1_4A_MSG5,SUB1_4A_MSG6,0,0000,cam1/sub14anp.ogg,0,0,0,0000,npend.ogg,0,1,NP_MSG2,0,0000,cam1/sub1_4.ogg,0,3,SUB1_4A_MSG1,SUB1_4A_MSG2,SUB1_4A_MSG3,0,0000 -SB1_4_B,0,3,4,cam1/sub14bpl.ogg,1,3,TRANS_MSG1,SUB1_4B_MSG2,SUB1_4B_MSG3,0,0000,cam1/sub1_4bn.ogg,0,0,0,0000,nexend.ogg,0,1,NP_MSG2,0,0000,cam1/sub1_4b.ogg,0,3,SUB1_4B_MSG4,SUB1_4B_MSG5,SUB1_4B_MSG6,0,0000 diff --git a/data/base/messages/brief1-5.json b/data/base/messages/brief1-5.json new file mode 100644 index 00000000000..daeb52f59d8 --- /dev/null +++ b/data/base/messages/brief1-5.json @@ -0,0 +1,9 @@ +{ + "video0000": { + "name": "SB1_5_MSG", + "sequences": [ + { "loop": 0, "subtitles": "TRANS_MSG1", "video": "cam1/sub1_5pl.ogg" }, + { "loop": 0, "subtitles": ["SUB1_5_MSG1", "SUB1_5_MSG2", "SUB1_5_MSG3"], "video": "cam1/sub1_5.ogg" } + ] + } +} diff --git a/data/base/messages/brief1-5.txt b/data/base/messages/brief1-5.txt deleted file mode 100644 index 3bee39cff2f..00000000000 --- a/data/base/messages/brief1-5.txt +++ /dev/null @@ -1 +0,0 @@ -SB1_5_MSG,0,3,2,cam1/sub1_5pl.ogg,0,1,TRANS_MSG1,0,0000,cam1/sub1_5.ogg,0,3,SUB1_5_MSG1,SUB1_5_MSG2,SUB1_5_MSG3,0,0000 diff --git a/data/base/messages/brief1-7.json b/data/base/messages/brief1-7.json new file mode 100644 index 00000000000..40c405880b5 --- /dev/null +++ b/data/base/messages/brief1-7.json @@ -0,0 +1,21 @@ +{ + "video0000": { + "name": "SB1_7_MSG", + "sequences": [ + { "loop": 1, "subtitles": ["TRANS_MSG1", "SUB1_7_MSG5", "SUB1_7_MSG6"], "video": "cam1/sub1_7pl.ogg" }, + { "loop": 0, "subtitles": "SUB1_7_MSG4", "video": "cam1/sub17fmv.ogg" } + ] + }, + "video0001": { + "name": "SB1_7_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["SUB1_7_MSG1", "SUB1_7_MSG2", "SUB1_7_MSG3"], "video": "cam1/sub1_7.ogg" } + ] + }, + "video0002": { + "name": "SB1_7_MSG3", + "sequences": [ + { "loop": 0, "subtitles": ["SUB1_7_MSG1", "SUB1_7_MSG2", "SUB1_7_MSG3"], "video": "cam1/sub1_7b.ogg" } + ] + } +} diff --git a/data/base/messages/brief1-7.txt b/data/base/messages/brief1-7.txt deleted file mode 100644 index 9d49e3f7119..00000000000 --- a/data/base/messages/brief1-7.txt +++ /dev/null @@ -1,3 +0,0 @@ -SB1_7_MSG,0,3,2,cam1/sub1_7pl.ogg,1,3,TRANS_MSG1,SUB1_7_MSG5,SUB1_7_MSG6,0,0000,cam1/sub17fmv.ogg,0,1,SUB1_7_MSG4,0,0000 -SB1_7_MSG2,0,1,1,cam1/sub1_7.ogg,3,SUB1_7_MSG1,SUB1_7_MSG2,SUB1_7_MSG3,0,0000 -SB1_7_MSG3,0,1,1,cam1/sub1_7b.ogg,3,SUB1_7_MSG1,SUB1_7_MSG2,SUB1_7_MSG3,0,0000 diff --git a/data/base/messages/brief1a-c.json b/data/base/messages/brief1a-c.json new file mode 100644 index 00000000000..e38a9d05a56 --- /dev/null +++ b/data/base/messages/brief1a-c.json @@ -0,0 +1,16 @@ +{ + "video0000": { + "name": "MB1A-C_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["TRANS_MSG1", "CAM1A-C_MSG5", "CAM1A-C_MSG6"], "video": "cam1/cam1acp.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam1/map1a_c.ogg" } + ] + }, + "video0001": { + "name": "MB1A-C_MSG2", + "sequences": [ + { "loop": 0, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["CAM1A-C_MSG1", "CAM1A-C_MSG2", "CAM1A-C_MSG3"], "video": "cam1/cam1ac.ogg" } + ] + } +} diff --git a/data/base/messages/brief1a-c.txt b/data/base/messages/brief1a-c.txt deleted file mode 100644 index fb722b4ec2f..00000000000 --- a/data/base/messages/brief1a-c.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB1A-C_MSG,0,1,2,cam1/cam1acp.ogg,3,TRANS_MSG1,CAM1A-C_MSG5,CAM1A-C_MSG6,0,0000,cam1/map1a_c.ogg,0,0,0000 -MB1A-C_MSG2,0,1,2,brfcom.ogg,1,TRANS_MSG1,0,0000,cam1/cam1ac.ogg,3,CAM1A-C_MSG1,CAM1A-C_MSG2,CAM1A-C_MSG3,0,0000 diff --git a/data/base/messages/brief1a.json b/data/base/messages/brief1a.json new file mode 100644 index 00000000000..a374a9b1701 --- /dev/null +++ b/data/base/messages/brief1a.json @@ -0,0 +1,15 @@ +{ + "video0000": { + "name": "MB1A_MSG", + "sequences": [ + { "loop": 1, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["CAM1A_MSG1", "CAM1A_MSG2", "CAM1A_MSG3"], "video": "cam1/cam1ascv.ogg" } + ] + }, + "video0001": { + "name": "CMB1_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM1_MSG1", "CAM1_MSG2", "CAM1_MSG3"], "video": "cam1/cam1.ogg" } + ] + } +} diff --git a/data/base/messages/brief1a.txt b/data/base/messages/brief1a.txt deleted file mode 100644 index fbbcee7314f..00000000000 --- a/data/base/messages/brief1a.txt +++ /dev/null @@ -1 +0,0 @@ -MB1A_MSG,0,3,2,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam1/cam1ascv.ogg,0,3,CAM1A_MSG1,CAM1A_MSG2,CAM1A_MSG3,0,0000 diff --git a/data/base/messages/brief1b.json b/data/base/messages/brief1b.json new file mode 100644 index 00000000000..68bb978d16d --- /dev/null +++ b/data/base/messages/brief1b.json @@ -0,0 +1,9 @@ +{ + "video0000": { + "name": "MB1B_MSG", + "sequences": [ + { "loop": 1, "subtitles": ["P1B_MSG1", "P1B_MSG2", "P1B_MSG3"], "video": "cam1/cam1b_p.ogg" }, + { "loop": 0, "subtitles": ["CAM1B_MSG1", "CAM1B_MSG2", "CAM1B_MSG3"], "video": "cam1/cam1b.ogg" } + ] + } +} diff --git a/data/base/messages/brief1b.txt b/data/base/messages/brief1b.txt deleted file mode 100644 index 3e02a1c84ae..00000000000 --- a/data/base/messages/brief1b.txt +++ /dev/null @@ -1 +0,0 @@ -MB1B_MSG,0,3,2,cam1/cam1b_p.ogg,1,3,P1B_MSG1,P1B_MSG2,P1B_MSG3,0,0000,cam1/cam1b.ogg,0,3,CAM1B_MSG1,CAM1B_MSG2,CAM1B_MSG3,0,0000 diff --git a/data/base/messages/brief1c.json b/data/base/messages/brief1c.json new file mode 100644 index 00000000000..d9194bd47a2 --- /dev/null +++ b/data/base/messages/brief1c.json @@ -0,0 +1,32 @@ +{ + "video0000": { + "name": "MB1C_MSG", + "sequences": [ + { "loop": 1, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["CAM1C_MSG1", "CAM1C_MSG2", "CAM1C_MSG3"], "video": "cam1/map1cexp.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam1/cam1ccom.ogg" } + ] + }, + "video0001": { + "name": "MB1C2_MSG", + "sequences": [ + { "loop": 1, "subtitles": "NP_MSG1", "video": "incomtns.ogg" }, + { "loop": 0, "subtitles": "NP_MSG2", "video": "cam1/cam1cnp.ogg" }, + { "loop": 0, "subtitles": ["CAM1C_MSG4", "CAM1C_MSG5", "CAM1C_MSG6"], "video": "cam1/map1c.ogg" } + ] + }, + "video0002": { + "name": "MB1C3_MSG", + "sequences": [ + { "loop": 1, "subtitles": "P1-3A_MSG1", "video": "prjupdat.ogg" }, + { "loop": 0, "subtitles": ["CAM1C_MSG7", "CAM1C_MSG8", "CAM1C_MSG9"], "video": "cam1/cam1ccf.ogg" } + ] + }, + "video0003": { + "name": "MB1C4_MSG", + "sequences": [ + { "loop": 1, "subtitles": "P1-3A_MSG1", "video": "prjupdat.ogg" }, + { "loop": 0, "subtitles": ["CAM1C_MSG10", "CAM1C_MSG11"], "video": "cam1/cam1clz.ogg" } + ] + } +} diff --git a/data/base/messages/brief1c.txt b/data/base/messages/brief1c.txt deleted file mode 100644 index 96879e9dad7..00000000000 --- a/data/base/messages/brief1c.txt +++ /dev/null @@ -1,4 +0,0 @@ -MB1C_MSG,0,3,3,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam1/map1cexp.ogg,0,3,CAM1C_MSG1,CAM1C_MSG2,CAM1C_MSG3,0,0000,cam1/cam1ccom.ogg,0,0,0,0000 -MB1C2_MSG,0,3,3,incomtns.ogg,1,1,NP_MSG1,0,0000,cam1/cam1cnp.ogg,0,1,NP_MSG2,0,0000,cam1/map1c.ogg,0,3,CAM1C_MSG4,CAM1C_MSG5,CAM1C_MSG6,0,0000 -MB1C3_MSG,0,3,2,prjupdat.ogg,1,1,P1-3A_MSG1,0,0000,cam1/cam1ccf.ogg,0,3,CAM1C_MSG7,CAM1C_MSG8,CAM1C_MSG9,0,0000 -MB1C4_MSG,0,3,2,prjupdat.ogg,1,1,P1-3A_MSG1,0,0000,cam1/cam1clz.ogg,0,2,CAM1C_MSG10,CAM1C_MSG11,0,0000 diff --git a/data/base/messages/brief1ca.json b/data/base/messages/brief1ca.json new file mode 100644 index 00000000000..8d3703522ae --- /dev/null +++ b/data/base/messages/brief1ca.json @@ -0,0 +1,10 @@ +{ + "video0000": { + "name": "MB1CA_MSG", + "sequences": [ + { "loop": 0, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["CAM1CA_MSG1", "CAM1CA_MSG2", "CAM1CA_MSG3"], "video": "cam1/cam1ca.ogg" }, + { "loop": 1, "subtitles": ["SUP_MSG1", "SUP_MSG2", "SUP_MSG3"], "video": "cam1/cam1capl.ogg" } + ] + } +} diff --git a/data/base/messages/brief1ca.txt b/data/base/messages/brief1ca.txt deleted file mode 100644 index 45e79cae88c..00000000000 --- a/data/base/messages/brief1ca.txt +++ /dev/null @@ -1 +0,0 @@ -MB1CA_MSG,0,3,3,brfcom.ogg,0,1,TRANS_MSG1,0,0000,cam1/cam1ca.ogg,0,3,CAM1CA_MSG1,CAM1CA_MSG2,CAM1CA_MSG3,0,0000,cam1/cam1capl.ogg,1,3,SUP_MSG1,SUP_MSG2,SUP_MSG3,0,0000 diff --git a/data/base/messages/brief1d.json b/data/base/messages/brief1d.json new file mode 100644 index 00000000000..a0af9ab0391 --- /dev/null +++ b/data/base/messages/brief1d.json @@ -0,0 +1,17 @@ +{ + "video0000": { + "name": "MB1D_MSG", + "sequences": [ + { "loop": 1, "subtitles": ["CAM1D_MSG1", "CAM1D_MSG4", "CAM1D_MSG5"], "video": "cam1/cam1dp1.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam1/cam1dnp.ogg" }, + { "loop": 0, "subtitles": "NP_MSG2", "video": "npend.ogg" } + ] + }, + "video0001": { + "name": "MB1D_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM1D_MSG1", "CAM1D_MSG2", "CAM1D_MSG3"], "video": "cam1/cam1d.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam1/cam1dp2.ogg" } + ] + } +} diff --git a/data/base/messages/brief1d.txt b/data/base/messages/brief1d.txt deleted file mode 100644 index a7d9045de2f..00000000000 --- a/data/base/messages/brief1d.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB1D_MSG,0,3,3,cam1/cam1dp1.ogg,1,3,CAM1D_MSG1,CAM1D_MSG4,CAM1D_MSG5,0,0000,cam1/cam1dnp.ogg,0,0,0,0000,npend.ogg,0,1,NP_MSG2,0,0000 -MB1D_MSG2,0,1,2,cam1/cam1d.ogg,3,CAM1D_MSG1,CAM1D_MSG2,CAM1D_MSG3,0,0000,cam1/cam1dp2.ogg,0,0,0000 diff --git a/data/base/messages/brief2-1.json b/data/base/messages/brief2-1.json new file mode 100644 index 00000000000..ecbe3f59590 --- /dev/null +++ b/data/base/messages/brief2-1.json @@ -0,0 +1,14 @@ +{ + "video0000": { + "name": "MB2_1_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_1_MSG1", "CAM2_1_MSG2"], "video": "brfcom4s.ogg" } + ] + }, + "video0001": { + "name": "MB2_1_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_1_MSG3", "CAM2_1_MSG4", "CAM2_1_MSG5"], "video": "cam2/cam2_1.ogg" } + ] + } +} diff --git a/data/base/messages/brief2-1.txt b/data/base/messages/brief2-1.txt deleted file mode 100644 index 2ace418e9a0..00000000000 --- a/data/base/messages/brief2-1.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB2_1_MSG,0,1,1,brfcom4s.ogg,2,CAM2_1_MSG1,CAM2_1_MSG2,0,0000 -MB2_1_MSG2,0,1,1,cam2/cam2_1.ogg,3,CAM2_1_MSG3,CAM2_1_MSG4,CAM2_1_MSG5,0,0000 diff --git a/data/base/messages/brief2-2.json b/data/base/messages/brief2-2.json new file mode 100644 index 00000000000..de83fabc133 --- /dev/null +++ b/data/base/messages/brief2-2.json @@ -0,0 +1,25 @@ +{ + "video0000": { + "name": "MB2_2_MSG", + "sequences": [ + { "loop": 0, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["CAM2_2_MSG", "CAM2_2_MSG2", "CAM2_2_MSG3"], "video": "cam2/cam22pl1.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam2/cam2_2n.ogg" } + ] + }, + "video0001": { + "name": "MB2_2_MSG2", + "sequences": [ + { "loop": 0, "subtitles": "CAM2_2_MSG7", "video": "cam2/cam22pl2.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam2/cam22fmv.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam2/cam2_2n2.ogg" }, + { "loop": 0, "subtitles": "CAM2_2_MSG", "video": "cam2/cam22pl3.ogg" } + ] + }, + "video0002": { + "name": "MB2_2_MSG3", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_2_MSG4", "CAM2_2_MSG5", "CAM2_2_MSG6"], "video": "cam2/cam2_2.ogg" } + ] + } +} diff --git a/data/base/messages/brief2-2.txt b/data/base/messages/brief2-2.txt deleted file mode 100644 index bc49ee85475..00000000000 --- a/data/base/messages/brief2-2.txt +++ /dev/null @@ -1,3 +0,0 @@ -MB2_2_MSG,0,1,3,brfcom.ogg,1,TRANS_MSG1,0,0000,cam2/cam22pl1.ogg,3,CAM2_2_MSG,CAM2_2_MSG2,CAM2_2_MSG3,0,0000,cam2/cam2_2n.ogg,0,0,0000 -MB2_2_MSG2,0,1,4,cam2/cam22pl2.ogg,1,CAM2_2_MSG7,0,0000,cam2/cam22fmv.ogg,0,0,0000,cam2/cam2_2n2.ogg,0,0,0000,cam2/cam22pl3.ogg,1,CAM2_2_MSG,0,0000 -MB2_2_MSG3,0,1,1,cam2/cam2_2.ogg,3,CAM2_2_MSG4,CAM2_2_MSG5,CAM2_2_MSG6,0,0000 diff --git a/data/base/messages/brief2-5.json b/data/base/messages/brief2-5.json new file mode 100644 index 00000000000..bdaae794f6f --- /dev/null +++ b/data/base/messages/brief2-5.json @@ -0,0 +1,15 @@ +{ + "video0000": { + "name": "MB2_5_MSG", + "sequences": [ + { "loop": 1, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 1, "subtitles": ["CAM2_5_MSG", "CAM2_5_MSG2", "CAM2_5_MSG3"], "video": "cam2/cam2_5pl.ogg" } + ] + }, + "video0001": { + "name": "MB2_5_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_5_MSG4", "CAM2_5_MSG5", "CAM2_5_MSG6"], "video": "cam2/cam2_5.ogg" } + ] + } +} diff --git a/data/base/messages/brief2-5.txt b/data/base/messages/brief2-5.txt deleted file mode 100644 index 04194f17f50..00000000000 --- a/data/base/messages/brief2-5.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB2_5_MSG,0,3,2,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam2/cam2_5pl.ogg,1,3,CAM2_5_MSG,CAM2_5_MSG2,CAM2_5_MSG3,0,0000 -MB2_5_MSG2,0,1,1,cam2/cam2_5.ogg,3,CAM2_5_MSG4,CAM2_5_MSG5,CAM2_5_MSG6,0,0000 diff --git a/data/base/messages/brief2-6.json b/data/base/messages/brief2-6.json new file mode 100644 index 00000000000..ab51491557b --- /dev/null +++ b/data/base/messages/brief2-6.json @@ -0,0 +1,23 @@ +{ + "video0000": { + "name": "MB2_6_MSG", + "sequences": [ + { "loop": 0, "subtitles": "CAM2_6_MSG", "video": "cam2/cam26pl1.ogg" } + ] + }, + "video0001": { + "name": "MB2_6_MSG2", + "sequences": [ + { "loop": 0, "subtitles": "", "video": "cam2/cam26afm.ogg" }, + { "loop": 1, "subtitles": ["CAM2_6_MSG", "CAM2_6_MSG2", "CAM2_6_MSG3"], "video": "cam2/cam26pl2.ogg" }, + { "loop": 0, "subtitles": ["CAM2_6_MSG4", "CAM2_6_MSG5", "CAM2_6_MSG6"], "video": "cam2/cam2_6a.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam2/cam26bfm.ogg" } + ] + }, + "video0002": { + "name": "MB2_6_MSG3", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_6_MSG7", "CAM2_6_MSG8", "CAM2_6_MSG9"], "video": "cam2/cam2_6b.ogg" } + ] + } +} diff --git a/data/base/messages/brief2-6.txt b/data/base/messages/brief2-6.txt deleted file mode 100644 index 0fc843567bf..00000000000 --- a/data/base/messages/brief2-6.txt +++ /dev/null @@ -1,3 +0,0 @@ -MB2_6_MSG,0,1,1,cam2/cam26pl1.ogg,1,CAM2_6_MSG,0,0000 -MB2_6_MSG2,0,3,4,cam2/cam26afm.ogg,0,0,0,0000,cam2/cam26pl2.ogg,1,3,CAM2_6_MSG,CAM2_6_MSG2,CAM2_6_MSG3,0,0000,cam2/cam2_6a.ogg,0,3,CAM2_6_MSG4,CAM2_6_MSG5,CAM2_6_MSG6,0,0000,cam2/cam26bfm.ogg,0,0,0,0000 -MB2_6_MSG3,0,1,1,cam2/cam2_6b.ogg,3,CAM2_6_MSG7,CAM2_6_MSG8,CAM2_6_MSG9,0,0000 diff --git a/data/base/messages/brief2-7.json b/data/base/messages/brief2-7.json new file mode 100644 index 00000000000..70cc19e1760 --- /dev/null +++ b/data/base/messages/brief2-7.json @@ -0,0 +1,15 @@ +{ + "video0000": { + "name": "MB2_7_MSG", + "sequences": [ + { "loop": 1, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam2/cam27fmv.ogg" } + ] + }, + "video0001": { + "name": "MB2_7_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_7_MSG", "CAM2_7_MSG2", "CAM2_7_MSG3"], "video": "cam2/cam2_7.ogg" } + ] + } +} diff --git a/data/base/messages/brief2-7.txt b/data/base/messages/brief2-7.txt deleted file mode 100644 index 213a1ef2abf..00000000000 --- a/data/base/messages/brief2-7.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB2_7_MSG,0,3,2,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam2/cam27fmv.ogg,0,0,0,0000 -MB2_7_MSG2,0,1,1,cam2/cam2_7.ogg,3,CAM2_7_MSG,CAM2_7_MSG2,CAM2_7_MSG3,0,0000 diff --git a/data/base/messages/brief2-8.json b/data/base/messages/brief2-8.json new file mode 100644 index 00000000000..a45fb9ea838 --- /dev/null +++ b/data/base/messages/brief2-8.json @@ -0,0 +1,15 @@ +{ + "video0000": { + "name": "MB2_8_MSG", + "sequences": [ + { "loop": 1, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 1, "subtitles": ["CAM2_8_MSG", "CAM2_8_MSG2", "CAM2_8_MSG3"], "video": "cam2/cam28apl.ogg" } + ] + }, + "video0001": { + "name": "MB2_8_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_8_MSG4", "CAM2_8_MSG5", "CAM2_8_MSG6"], "video": "cam2/cam2_8a.ogg" } + ] + } +} diff --git a/data/base/messages/brief2-8.txt b/data/base/messages/brief2-8.txt deleted file mode 100644 index 1b47d9fab92..00000000000 --- a/data/base/messages/brief2-8.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB2_8_MSG,0,3,2,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam2/cam28apl.ogg,1,3,CAM2_8_MSG,CAM2_8_MSG2,CAM2_8_MSG3,0,0000 -MB2_8_MSG2,0,1,1,cam2/cam2_8a.ogg,3,CAM2_8_MSG4,CAM2_8_MSG5,CAM2_8_MSG6,0,0000 diff --git a/data/base/messages/brief2-c.json b/data/base/messages/brief2-c.json new file mode 100644 index 00000000000..db14d611be9 --- /dev/null +++ b/data/base/messages/brief2-c.json @@ -0,0 +1,17 @@ +{ + "video0000": { + "name": "MB2_C_MSG", + "sequences": [ + { "loop": 0, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["CAM2_C_MSG1", "CAM2_C_MSG2"], "video": "cam2/cam2capl.ogg" }, + { "loop": 0, "subtitles": ["CAM2_C_MSG3", "CAM2_C_MSG4", "CAM2_C_MSG5"], "video": "cam2/cam2ca.ogg" } + ] + }, + "video0001": { + "name": "MB2_C_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_C_MSG6", "CAM2_C_MSG7", "CAM2_C_MSG8"], "video": "cam2/cam2cbpl.ogg" }, + { "loop": 0, "subtitles": ["CAM2_C_MSG9", "CAM2_C_MSG10", "CAM2_C_MSG11"], "video": "cam2/cam2cb.ogg" } + ] + } +} diff --git a/data/base/messages/brief2-c.txt b/data/base/messages/brief2-c.txt deleted file mode 100644 index 1496d8cd652..00000000000 --- a/data/base/messages/brief2-c.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB2_C_MSG,0,1,3,brfcom.ogg,1,TRANS_MSG1,0,0000,cam2/cam2capl.ogg,2,CAM2_C_MSG1,CAM2_C_MSG2,0,0000,cam2/cam2ca.ogg,3,CAM2_C_MSG3,CAM2_C_MSG4,CAM2_C_MSG5,0,0000 -MB2_C_MSG2,0,1,2,cam2/cam2cbpl.ogg,3,CAM2_C_MSG6,CAM2_C_MSG7,CAM2_C_MSG8,0,0000,cam2/cam2cb.ogg,3,CAM2_C_MSG9,CAM2_C_MSG10,CAM2_C_MSG11,0,0000 diff --git a/data/base/messages/brief2-di.json b/data/base/messages/brief2-di.json new file mode 100644 index 00000000000..338b069ce21 --- /dev/null +++ b/data/base/messages/brief2-di.json @@ -0,0 +1,16 @@ +{ + "video0000": { + "name": "MB2_DI_MSG", + "sequences": [ + { "loop": 1, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 1, "subtitles": ["CAM2_DI_MSG3", "CAM2_DI_MSG4", "CAM2_DI_MSG5"], "video": "cam2/cam2_di.ogg" } + ] + }, + "video0001": { + "name": "MB2_DI_MSG2", + "sequences": [ + { "loop": 0, "subtitles": "CAM2_B_MSG3", "video": "cam2/cam2dipl.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam2/cam2dico.ogg" } + ] + } +} diff --git a/data/base/messages/brief2-di.txt b/data/base/messages/brief2-di.txt deleted file mode 100644 index 0e9118daab3..00000000000 --- a/data/base/messages/brief2-di.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB2_DI_MSG,0,3,2,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam2/cam2_di.ogg,1,3,CAM2_DI_MSG3,CAM2_DI_MSG4,CAM2_DI_MSG5,0,0000 -MB2_DI_MSG2,0,1,2,cam2/cam2dipl.ogg,1,CAM2_B_MSG3,0,0000,cam2/cam2dico.ogg,0,0,0000 diff --git a/data/base/messages/brief2-dii.json b/data/base/messages/brief2-dii.json new file mode 100644 index 00000000000..34b7e5096e8 --- /dev/null +++ b/data/base/messages/brief2-dii.json @@ -0,0 +1,24 @@ +{ + "video0000": { + "name": "MB2_DII_MSG", + "sequences": [ + { "loop": 0, "subtitles": "TRANS_MSG1", "video": "brfcom4s.ogg" }, + { "loop": 0, "subtitles": ["CAM2_DII_MSG1", "CAM2_DII_MSG2", "CAM2_DII_MSG9"], "video": "cam2/cam2diif.ogg" }, + { "loop": 0, "subtitles": "CAM2_DII_MSG1", "video": "cam2/c2diif2.ogg" } + ] + }, + "video0001": { + "name": "MB2_DII_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_DII_MSG3", "CAM2_DII_MSG4", "CAM2_DII_MSG5"], "video": "cam2/cam2diib.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam2/cam2diin.ogg" }, + { "loop": 0, "subtitles": ["CAM2_DII_MSG6", "CAM2_DII_MSG7", "CAM2_DII_MSG8"], "video": "cam2/cam2diip.ogg" } + ] + }, + "video0002": { + "name": "CAM2_OUT", + "sequences": [ + { "loop": 0, "subtitles": "", "video": "cam2/cam2out.ogg" } + ] + } +} diff --git a/data/base/messages/brief2-dii.txt b/data/base/messages/brief2-dii.txt deleted file mode 100644 index dc59d807309..00000000000 --- a/data/base/messages/brief2-dii.txt +++ /dev/null @@ -1,3 +0,0 @@ -MB2_DII_MSG,0,1,3,brfcom4s.ogg,1,TRANS_MSG1,0,0000,cam2/cam2diif.ogg,3,CAM2_DII_MSG1,CAM2_DII_MSG2,CAM2_DII_MSG9,0,0000,cam2/c2diif2.ogg,1,CAM2_DII_MSG1,0,0000 -MB2_DII_MSG2,0,1,3,cam2/cam2diib.ogg,3,CAM2_DII_MSG3,CAM2_DII_MSG4,CAM2_DII_MSG5,0,0000,cam2/cam2diin.ogg,0,0,0000,cam2/cam2diip.ogg,3,CAM2_DII_MSG6,CAM2_DII_MSG7,CAM2_DII_MSG8,0,0000 -CAM2_OUT,0,1,1,cam2/cam2out.ogg,0,0,0000 diff --git a/data/base/messages/brief2a.json b/data/base/messages/brief2a.json new file mode 100644 index 00000000000..974bf6f9241 --- /dev/null +++ b/data/base/messages/brief2a.json @@ -0,0 +1,15 @@ +{ + "video0000": { + "name": "MB2A_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2A_MSG1", "CAM2A_MSG2", "CAM2A_MSG3"], "video": "cam2/c002.ogg" } + ] + }, + "video0001": { + "name": "MB2A_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["NP_MSG1", "CAM2A_MSG7", "CAM2A_MSG8"], "video": "cam2/cam2ap.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam2/cam2acol.ogg" } + ] + } +} diff --git a/data/base/messages/brief2a.txt b/data/base/messages/brief2a.txt deleted file mode 100644 index 8cd1eb4f538..00000000000 --- a/data/base/messages/brief2a.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB2A_MSG,0,1,1,cam2/c002.ogg,3,CAM2A_MSG1,CAM2A_MSG2,CAM2A_MSG3,0,0000,cam2/cam2intb.ogg,3,CAM2A_MSG4,CAM2A_MSG5,CAM2A_MSG6,0,0000 -MB2A_MSG2,0,1,2,cam2/cam2ap.ogg,3,NP_MSG1,CAM2A_MSG7,CAM2A_MSG8,0,0000,cam2/cam2acol.ogg,0,0,0000 diff --git a/data/base/messages/brief2b.json b/data/base/messages/brief2b.json new file mode 100644 index 00000000000..d614087f467 --- /dev/null +++ b/data/base/messages/brief2b.json @@ -0,0 +1,15 @@ +{ + "video0000": { + "name": "MB2_B_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_B_MSG1", "CAM2_B_MSG2", "CAM2_B_MSG3"], "video": "cam2/cam2bpl.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam2/cam2bcol.ogg" } + ] + }, + "video0001": { + "name": "MB2_B_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM2_B_MSG7", "CAM2_B_MSG8", "CAM2_B_MSG9"], "video": "cam2/cam2b.ogg" } + ] + } +} diff --git a/data/base/messages/brief2b.txt b/data/base/messages/brief2b.txt deleted file mode 100644 index 85bb7ecb5a9..00000000000 --- a/data/base/messages/brief2b.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB2_B_MSG,0,1,2,cam2/cam2bpl.ogg,3,CAM2_B_MSG1,CAM2_B_MSG2,CAM2_B_MSG3,0,0000,cam2/cam2bcol.ogg,0,0,0000 -MB2_B_MSG2,0,1,1,cam2/cam2b.ogg,3,CAM2_B_MSG7,CAM2_B_MSG8,CAM2_B_MSG9,0,0000 diff --git a/data/base/messages/brief2intro.txt b/data/base/messages/brief2intro.txt deleted file mode 100644 index 12c2d347305..00000000000 --- a/data/base/messages/brief2intro.txt +++ /dev/null @@ -1,2 +0,0 @@ -CAM2_INT,0,1,2,cam2/cam2int1.ogg,0,0,0000,cam2/cam2inta.ogg,0,0,0000 -CAM2_INT2,0,1,2,cam2/cam2int2.ogg,0,0,0000,cam2/cam2intb.ogg,0,0,0000 diff --git a/data/base/messages/brief3-1a.json b/data/base/messages/brief3-1a.json new file mode 100644 index 00000000000..80a05c9a586 --- /dev/null +++ b/data/base/messages/brief3-1a.json @@ -0,0 +1,16 @@ +{ + "video0000": { + "name": "MB3_1A_MSG", + "sequences": [ + { "loop": 0, "subtitles": "CAM3_1A_MSG", "video": "incomint.ogg" }, + { "loop": 0, "subtitles": ["CAM3_1A_MSG1", "CAM3_1A_MSG2", "CAM3_1A_MSG3"], "video": "cam3/cam31gam.ogg" }, + { "loop": 0, "subtitles": ["CAM3_1A_MSG4", "CAM3_1A_MSG5"], "video": "cam3/cam31g2.ogg" } + ] + }, + "video0001": { + "name": "MB3_1A_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_1A_MSG6", "CAM3_1A_MSG7", "CAM3_1A_MSG8"], "video": "cam3/cam3_1.ogg" } + ] + } +} diff --git a/data/base/messages/brief3-1a.txt b/data/base/messages/brief3-1a.txt deleted file mode 100644 index 1b502f949c0..00000000000 --- a/data/base/messages/brief3-1a.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB3_1A_MSG,0,1,3,incomint.ogg,1,CAM3_1A_MSG,0,0000,cam3/cam31gam.ogg,3,CAM3_1A_MSG1,CAM3_1A_MSG2,CAM3_1A_MSG3,0,0000,cam3/cam31g2.ogg,2,CAM3_1A_MSG4,CAM3_1A_MSG5,0,0000 -MB3_1A_MSG2,0,1,1,cam3/cam3_1.ogg,3,CAM3_1A_MSG6,CAM3_1A_MSG7,CAM3_1A_MSG8,0,0000 diff --git a/data/base/messages/brief3-1b.json b/data/base/messages/brief3-1b.json new file mode 100644 index 00000000000..0feaf4f8eb1 --- /dev/null +++ b/data/base/messages/brief3-1b.json @@ -0,0 +1,16 @@ +{ + "video0000": { + "name": "MB3_1B_MSG", + "sequences": [ + { "loop": 0, "subtitles": "NP_MSG1", "video": "incomint.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam3/cam3_1bn.ogg" }, + { "loop": 0, "subtitles": ["CAM3_1B_MSG1", "CAM3_1B_MSG2", "CAM3_1B_MSG3"], "video": "cam3/cam31bpl.ogg" } + ] + }, + "video0001": { + "name": "MB3_1B_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_1B_MSG4", "CAM3_1B_MSG5", "CAM3_1B_MSG6"], "video": "cam3/cam3_1b.ogg" } + ] + } +} diff --git a/data/base/messages/brief3-1b.txt b/data/base/messages/brief3-1b.txt deleted file mode 100644 index 4c98a587798..00000000000 --- a/data/base/messages/brief3-1b.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB3_1B_MSG,0,1,3,incomint.ogg,1,NP_MSG1,0,0000,cam3/cam3_1bn.ogg,0,0,0000,cam3/cam31bpl.ogg,3,CAM3_1B_MSG1,CAM3_1B_MSG2,CAM3_1B_MSG3,0,0000 -MB3_1B_MSG2,0,1,1,cam3/cam3_1b.ogg,3,CAM3_1B_MSG4,CAM3_1B_MSG5,CAM3_1B_MSG6,0,0000 diff --git a/data/base/messages/brief3-2.json b/data/base/messages/brief3-2.json new file mode 100644 index 00000000000..00c52a644f0 --- /dev/null +++ b/data/base/messages/brief3-2.json @@ -0,0 +1,29 @@ +{ + "video0000": { + "name": "MB3_2_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_2_MSG1", "CAM3_2_MSG2", "CAM3_2_MSG3"], "video": "cam3/cam32pl.ogg" }, + { "loop": 0, "subtitles": "CAM3_2_MSG4", "video": "cam3/cam32alp.ogg" }, + { "loop": 0, "subtitles": "CAM3_2_MSG5", "video": "cam3/cam32pl2.ogg" } + ] + }, + "video0001": { + "name": "MB3_2_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_2_MSG6", "CAM3_2_MSG7", "CAM3_2_MSG8"], "video": "cam3/cam3_2b.ogg" } + ] + }, + "video0002": { + "name": "MB3_2_MSG3", + "sequences": [ + { "loop": 0, "subtitles": "NP_MSG1", "video": "incomtns.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam3/cam32a2.ogg" } + ] + }, + "video0003": { + "name": "MB3_2_MSG4", + "sequences": [ + { "loop": 0, "subtitles": "CAM3_2_MSG9", "video": "cam3/cam32pl3.ogg" } + ] + } +} diff --git a/data/base/messages/brief3-2.txt b/data/base/messages/brief3-2.txt deleted file mode 100644 index f507f56c6d6..00000000000 --- a/data/base/messages/brief3-2.txt +++ /dev/null @@ -1,4 +0,0 @@ -MB3_2_MSG,0,1,3,cam3/cam32pl.ogg,3,CAM3_2_MSG1,CAM3_2_MSG2,CAM3_2_MSG3,0,0000,cam3/cam32alp.ogg,1,CAM3_2_MSG4,0,0000,cam3/cam32pl2.ogg,1,CAM3_2_MSG5,0,0000 -MB3_2_MSG2,0,1,1,cam3/cam3_2b.ogg,3,CAM3_2_MSG6,CAM3_2_MSG7,CAM3_2_MSG8,0,0000 -MB3_2_MSG3,0,1,2,incomtns.ogg,1,NP_MSG1,0,0000,cam3/cam32a2.ogg,0,0,0000 -MB3_2_MSG4,0,1,1,cam3/cam32pl3.ogg,1,CAM3_2_MSG9,0,0000 diff --git a/data/base/messages/brief3-4.json b/data/base/messages/brief3-4.json new file mode 100644 index 00000000000..210e088f226 --- /dev/null +++ b/data/base/messages/brief3-4.json @@ -0,0 +1,33 @@ +{ + "video0000": { + "name": "MB3_4_MSG", + "sequences": [ + { "loop": 0, "subtitles": "CAM3_4_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["CAM3_4_MSG2", "CAM3_4_MSG3", "CAM3_4_MSG4"], "video": "cam3/cam3_4a.ogg" } + ] + }, + "video0001": { + "name": "MB3_4_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_4_MSG5", "CAM3_4_MSG6"], "video": "cam3/cam3_4b.ogg" } + ] + }, + "video0002": { + "name": "MB3_4_MSG3", + "sequences": [ + { "loop": 0, "subtitles": "", "video": "cam3/cam34fmv.ogg" } + ] + }, + "video0003": { + "name": "MB3_4_MSG4", + "sequences": [ + { "loop": 0, "subtitles": "", "video": "cam3/cam34mu1.ogg" } + ] + }, + "video0004": { + "name": "MB3_4_MSG5", + "sequences": [ + { "loop": 0, "subtitles": "", "video": "cam3/cam34mu2.ogg" } + ] + } +} diff --git a/data/base/messages/brief3-4.txt b/data/base/messages/brief3-4.txt deleted file mode 100644 index fb6dd720bf3..00000000000 --- a/data/base/messages/brief3-4.txt +++ /dev/null @@ -1,6 +0,0 @@ -MB3_4_MSG,0,1,2,brfcom.ogg,1,CAM3_4_MSG1,0,0000,cam3/cam3_4a.ogg,3,CAM3_4_MSG2,CAM3_4_MSG3,CAM3_4_MSG4,0,0000 -MB3_4_MSG2,0,1,1,cam3/cam3_4b.ogg,2,CAM3_4_MSG5,CAM3_4_MSG6,0,0000 -MB3_4_MSG3,0,1,1,cam3/cam34fmv.ogg,0,0,0000 -MB3_4_MSG4,0,1,1,cam3/cam34mu1.ogg,0,0,0000 -MB3_4_MSG5,0,1,1,cam3/cam34mu2.ogg,0,0,0000 -MB3_4_OUTRO,0,1,1,outro.ogg,0,0,0000 diff --git a/data/base/messages/brief3-a.json b/data/base/messages/brief3-a.json new file mode 100644 index 00000000000..046febbcbaa --- /dev/null +++ b/data/base/messages/brief3-a.json @@ -0,0 +1,15 @@ +{ + "video0000": { + "name": "MB3A_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_MSG1", "CAM3_MSG2", "CAM3_MSG3"], "video": "cam3/cam3intp.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam3/cam3int.ogg" } + ] + }, + "video0001": { + "name": "MB3A_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3A_MSG1", "CAM3A_MSG2", "CAM3A_MSG3"], "video": "cam3/cam3intb.ogg" } + ] + } +} diff --git a/data/base/messages/brief3-a.txt b/data/base/messages/brief3-a.txt deleted file mode 100644 index a733cfeea81..00000000000 --- a/data/base/messages/brief3-a.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB3A_MSG,0,1,2,cam3/cam3intp.ogg,3,CAM3_MSG1,CAM3_MSG2,CAM3_MSG3,0,0000,brfcom.ogg,1,TRANS_MSG1,0,0000 -MB3A_MSG2,0,1,1,cam3/cam3intb.ogg,3,CAM3A_MSG1,CAM3A_MSG2,CAM3A_MSG3,0,0000 diff --git a/data/base/messages/brief3-b.json b/data/base/messages/brief3-b.json new file mode 100644 index 00000000000..2bafc0b7947 --- /dev/null +++ b/data/base/messages/brief3-b.json @@ -0,0 +1,22 @@ +{ + "video0000": { + "name": "MB3_B_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_B_MSG1", "CAM3_B_MSG2", "CAM3_B_MSG3"], "video": "cam3/cam3bpl.ogg" }, + { "loop": 0, "subtitles": "INCOM_INT", "video": "incomint.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam3/cam3bg.ogg" } + ] + }, + "video0001": { + "name": "MB3_B_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_B_MSG4", "CAM3_B_MSG5", "CAM3_B_MSG6"], "video": "cam3/cam3b.ogg" } + ] + }, + "video0002": { + "name": "MB3_B_MSG3", + "sequences": [ + { "loop": 0, "subtitles": "", "video": "cam3/cam3_bn.ogg" } + ] + } +} diff --git a/data/base/messages/brief3-b.txt b/data/base/messages/brief3-b.txt deleted file mode 100644 index c20e4786b1f..00000000000 --- a/data/base/messages/brief3-b.txt +++ /dev/null @@ -1,3 +0,0 @@ -MB3_B_MSG,0,1,3,cam3/cam3bpl.ogg,3,CAM3_B_MSG1,CAM3_B_MSG2,CAM3_B_MSG3,0,0000,incomint.ogg,1,INCOM_INT,0,0000,cam3/cam3bg.ogg,0,0,0000 -MB3_B_MSG2,0,1,1,cam3/cam3b.ogg,3,CAM3_B_MSG4,CAM3_B_MSG5,CAM3_B_MSG6,0,0000 -MB3_B_MSG3,0,1,1,cam3/cam3_bn.ogg,0,0,0000 diff --git a/data/base/messages/brief3-c.json b/data/base/messages/brief3-c.json new file mode 100644 index 00000000000..ff9c98e49ec --- /dev/null +++ b/data/base/messages/brief3-c.json @@ -0,0 +1,20 @@ +{ + "video0000": { + "name": "MB3_C_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_C_MSG1", "CAM3_C_MSG2"], "video": "cam3/cam3cpl1.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam3/cam3_cn.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam3/c3c.ogg" }, + { "loop": 0, "subtitles": ["CAM3_C_MSG3", "CAM3_C_MSG4"], "video": "cam3/cam3cpl2.ogg" } + ] + }, + "video0001": { + "name": "MB3_C_MSG2", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_C_MSG5", "CAM3_C_MSG6", "CAM3_C_MSG7"], "video": "cam3/cam3cbet.ogg" }, + { "loop": 0, "subtitles": ["CAM3_C_MSG8", "CAM3_C_MSG9"], "video": "cam3/cam3cpl3.ogg" }, + { "loop": 0, "subtitles": "CAM3_C_MSG10", "video": "incomtns.ogg" }, + { "loop": 0, "subtitles": ["CAM3_C_MSG11", "CAM3_C_MSG12", "CAM3_C_MSG13"], "video": "cam3/cam3_cg.ogg" } + ] + } +} diff --git a/data/base/messages/brief3-c.txt b/data/base/messages/brief3-c.txt deleted file mode 100644 index 35888258742..00000000000 --- a/data/base/messages/brief3-c.txt +++ /dev/null @@ -1,2 +0,0 @@ -MB3_C_MSG,0,1,4,cam3/cam3cpl1.ogg,2,CAM3_C_MSG1,CAM3_C_MSG2,0,0000,cam3/cam3_cn.ogg,0,0,0000,cam3/c3c.ogg,0,0,0000,cam3/cam3cpl2.ogg,2,CAM3_C_MSG3,CAM3_C_MSG4,0,0000 -MB3_C_MSG2,0,1,4,cam3/cam3cbet.ogg,3,CAM3_C_MSG5,CAM3_C_MSG6,CAM3_C_MSG7,0,0000,cam3/cam3cpl3.ogg,2,CAM3_C_MSG8,CAM3_C_MSG9,0,0000,incomtns.ogg,1,CAM3_C_MSG10,0,0000,cam3/cam3_cg.ogg,3,CAM3_C_MSG11,CAM3_C_MSG12,CAM3_C_MSG13,0,0000 diff --git a/data/base/messages/brief3a-b.json b/data/base/messages/brief3a-b.json new file mode 100644 index 00000000000..5971e9ca81d --- /dev/null +++ b/data/base/messages/brief3a-b.json @@ -0,0 +1,22 @@ +{ + "video0000": { + "name": "MB3_AB_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_AB_MSG1", "CAM3_AB_MSG2"], "video": "brfcom4s.ogg" }, + { "loop": 0, "subtitles": ["CAM3_AB_MSG3", "CAM3_AB_MSG4"], "video": "cam3/cam3aba.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam3/cam3abf.ogg" } + ] + }, + "video0001": { + "name": "MB3_AB_MSG2", + "sequences": [ + { "loop": 0, "subtitles": "CAM3_AB_MSG1", "video": "cam3/cam3abpl.ogg" } + ] + }, + "video0002": { + "name": "MB3_AB_MSG3", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3_AB_MSG5", "CAM3_AB_MSG6", "CAM3_AB_MSG7"], "video": "cam3/cam3ab.ogg" } + ] + } +} diff --git a/data/base/messages/brief3a-b.txt b/data/base/messages/brief3a-b.txt deleted file mode 100644 index 35340883152..00000000000 --- a/data/base/messages/brief3a-b.txt +++ /dev/null @@ -1,3 +0,0 @@ -MB3_AB_MSG,0,1,3,brfcom4s.ogg,2,CAM3_AB_MSG1,CAM3_AB_MSG2,0,0000,cam3/cam3aba.ogg,2,CAM3_AB_MSG3,CAM3_AB_MSG4,0,0000,cam3/cam3abf.ogg,0,0,0000 -MB3_AB_MSG2,0,1,1,cam3/cam3abpl.ogg,1,CAM3_AB_MSG1,0,0000 -MB3_AB_MSG3,0,1,1,cam3/cam3ab.ogg,3,CAM3_AB_MSG5,CAM3_AB_MSG6,CAM3_AB_MSG7,0,0000 diff --git a/data/base/messages/brief3a-d1.json b/data/base/messages/brief3a-d1.json new file mode 100644 index 00000000000..28e359a5066 --- /dev/null +++ b/data/base/messages/brief3a-d1.json @@ -0,0 +1,28 @@ +{ + "video0000": { + "name": "MB3_AD1_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3A_D1_MSG1", "CAM3A_D1_MSG2", "CAM3A_D1_MSG3"], "video": "cam3/c3ad1pl1.ogg" }, + { "loop": 0, "subtitles": ["CAM3A_D1_MSG4", "CAM3A_D1_MSG5"], "video": "cam3/c3_d1_a.ogg" } + ] + }, + "video0001": { + "name": "MB3_AD1_MSG2", + "sequences": [ + { "loop": 0, "subtitles": "CAM3A_D1_MSG6", "video": "cam3/c3ad1pl2.ogg" }, + { "loop": 0, "subtitles": ["CAM3A_D1_MSG7", "CAM3A_D1_MSG8"], "video": "cam3/c3_d1_b.ogg" } + ] + }, + "video0002": { + "name": "MB3_AD1_MSG3", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3A_D1_MSG9", "CAM3A_D1_MSG10", "CAM3A_D1_MSG11"], "video": "cam3/cam3ad1b.ogg" } + ] + }, + "video0003": { + "name": "MB3_AD1_MSG4", + "sequences": [ + { "loop": 0, "subtitles": "CAM3A_D1_MSG12", "video": "cam3/c3ad1pl3.ogg" } + ] + } +} diff --git a/data/base/messages/brief3a-d1.txt b/data/base/messages/brief3a-d1.txt deleted file mode 100644 index 4c4b23a2395..00000000000 --- a/data/base/messages/brief3a-d1.txt +++ /dev/null @@ -1,4 +0,0 @@ -MB3_AD1_MSG,0,1,2,cam3/c3ad1pl1.ogg,3,CAM3A_D1_MSG1,CAM3A_D1_MSG2,CAM3A_D1_MSG3,0,0000,cam3/c3_d1_a.ogg,2,CAM3A_D1_MSG4,CAM3A_D1_MSG5,0,0000 -MB3_AD1_MSG2,0,1,2,cam3/c3ad1pl2.ogg,1,CAM3A_D1_MSG6,0,0000,cam3/c3_d1_b.ogg,2,CAM3A_D1_MSG7,CAM3A_D1_MSG8,0,0000 -MB3_AD1_MSG3,0,1,1,cam3/cam3ad1b.ogg,3,CAM3A_D1_MSG9,CAM3A_D1_MSG10,CAM3A_D1_MSG11,0,0000 -MB3_AD1_MSG4,0,1,1,cam3/c3ad1pl3.ogg,1,CAM3A_D1_MSG12,0,0000 diff --git a/data/base/messages/brief3a-d2.json b/data/base/messages/brief3a-d2.json new file mode 100644 index 00000000000..96b44e396fc --- /dev/null +++ b/data/base/messages/brief3a-d2.json @@ -0,0 +1,42 @@ +{ + "video0000": { + "name": "MB3_AD2_MSG", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3A_D2_MSG1", "CAM3A_D2_MSG2", "CAM3A_D2_MSG3"], "video": "cam3/c3ad2pl1.ogg" }, + { "loop": 0, "subtitles": ["CAM3A_D2_MSG4", "CAM3A_D2_MSG5", "CAM3A_D2_MSG6"], "video": "cam3/c3ad2pl2.ogg" }, + { "loop": 0, "subtitles": "CAM3A_D2_MSG7", "video": "cam3/c3ad2pl3.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam3/cam3ad2n.ogg" } + ] + }, + "video0001": { + "name": "MB3_AD2_MSG2", + "sequences": [ + { "loop": 0, "subtitles": "", "video": "cam3/c3ad2n2.ogg" } + ] + }, + "video0002": { + "name": "MB3_AD2_MSG3", + "sequences": [ + { "loop": 1, "subtitles": ["CAM3A_D2_MSG8", "CAM3A_D2_MSG9", "CAM3A_D2_MSG10"], "video": "cam3/c3ad2pl4.ogg" }, + { "loop": 0, "subtitles": ["CAM3A_D2_MSG11", "CAM3A_D2_MSG12", "CAM3A_D2_MSG13"], "video": "cam3/c3ad2_09.ogg" } + ] + }, + "video0003": { + "name": "MB3_AD2_MSG4", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3A_D2_MSG14", "CAM3A_D2_MSG15", "CAM3A_D2_MSG16"], "video": "cam3/c3ad2_12.ogg" } + ] + }, + "video0004": { + "name": "MB3_AD2_MSG5", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3A_D2_MSG17", "CAM3A_D2_MSG18", "CAM3A_D2_MSG19"], "video": "cam3/c3ad2_14.ogg" } + ] + }, + "video0005": { + "name": "MB3_AD2_MSG6", + "sequences": [ + { "loop": 0, "subtitles": ["CAM3A_D2_MSG20", "CAM3A_D2_MSG21"], "video": "cam3/c3ad2_16.ogg" } + ] + } +} diff --git a/data/base/messages/brief3a-d2.txt b/data/base/messages/brief3a-d2.txt deleted file mode 100644 index 6cd1f5c194e..00000000000 --- a/data/base/messages/brief3a-d2.txt +++ /dev/null @@ -1,6 +0,0 @@ -MB3_AD2_MSG,0,1,4,cam3/c3ad2pl1.ogg,3,CAM3A_D2_MSG1,CAM3A_D2_MSG2,CAM3A_D2_MSG3,0,0000,cam3/c3ad2pl2.ogg,3,CAM3A_D2_MSG4,CAM3A_D2_MSG5,CAM3A_D2_MSG6,0,0000,cam3/c3ad2pl3.ogg,1,CAM3A_D2_MSG7,0,0000,cam3/cam3ad2n.ogg,0,0,0000 -MB3_AD2_MSG2,0,1,1,cam3/c3ad2n2.ogg,0,0,0000 -MB3_AD2_MSG3,0,3,2,cam3/c3ad2pl4.ogg,1,3,CAM3A_D2_MSG8,CAM3A_D2_MSG9,CAM3A_D2_MSG10,0,0000,cam3/c3ad2_09.ogg,0,3,CAM3A_D2_MSG11,CAM3A_D2_MSG12,CAM3A_D2_MSG13,0,0000 -MB3_AD2_MSG4,0,1,1,cam3/c3ad2_12.ogg,3,CAM3A_D2_MSG14,CAM3A_D2_MSG15,CAM3A_D2_MSG16,0,0000 -MB3_AD2_MSG5,0,1,1,cam3/c3ad2_14.ogg,3,CAM3A_D2_MSG17,CAM3A_D2_MSG18,CAM3A_D2_MSG19,0,0000 -MB3_AD2_MSG6,0,1,1,cam3/c3ad2_16.ogg,2,CAM3A_D2_MSG20,CAM3A_D2_MSG21,0,0000 diff --git a/data/base/messages/brief3intro.txt b/data/base/messages/brief3intro.txt deleted file mode 100644 index 7fd2b76b2f9..00000000000 --- a/data/base/messages/brief3intro.txt +++ /dev/null @@ -1,2 +0,0 @@ -CAM3_INT,0,1,2,cam3/cam3intp.ogg,3,CAM3_MSG1,CAM3_MSG2,CAM3_MSG3,0,0000,cam3/cam3int.ogg,0,0,0000 -CAM3_INT2,0,1,2,brfcom.ogg,1,TRANS_MSG1,0,0000,cam3/cam3intb.ogg,3,CAM3_MSG4,CAM3_MSG5,CAM3_MSG6,0,0000 diff --git a/data/base/messages/briefdemo.json b/data/base/messages/briefdemo.json new file mode 100644 index 00000000000..02a2b2f2736 --- /dev/null +++ b/data/base/messages/briefdemo.json @@ -0,0 +1,9 @@ +{ + "video0000": { + "name": "MBDEMO_MSG", + "sequences": [ + { "loop": 0, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["CAM1A_MSG1", "CAM1A_MSG2", "CAM1A_MSG3"], "video": "fastplay.ogg" } + ] + } +} diff --git a/data/base/messages/briefdemo.txt b/data/base/messages/briefdemo.txt deleted file mode 100644 index 210f582ed11..00000000000 --- a/data/base/messages/briefdemo.txt +++ /dev/null @@ -1,3 +0,0 @@ -MBDEMO_MSG,0,1,2,brfcom.ogg,1,TRANS_MSG1,0,0000,fastplay.ogg,3,CAM1A_MSG1,CAM1A_MSG2,CAM1A_MSG3,0,0000 -END,0,1,1,end.ogg,1,END_MSG1,0,0000 -WIN,0,1,1,victory.ogg,1,WIN_MSG1,0,0000 diff --git a/data/base/messages/brieftut.json b/data/base/messages/brieftut.json new file mode 100644 index 00000000000..9439314cdfa --- /dev/null +++ b/data/base/messages/brieftut.json @@ -0,0 +1,8 @@ +{ + "video0000": { + "name": "FACTORYVIPER", + "sequences": [ + { "loop": 0, "subtitles": "", "video": "factory.ogg" } + ] + } +} diff --git a/data/base/messages/brieftut.txt b/data/base/messages/brieftut.txt deleted file mode 100644 index 27f62615ad6..00000000000 --- a/data/base/messages/brieftut.txt +++ /dev/null @@ -1 +0,0 @@ -FACTORYVIPER,0,1,1,factory.ogg,0,0,0000 diff --git a/data/base/messages/cam1-outro.json b/data/base/messages/cam1-outro.json new file mode 100644 index 00000000000..82fe0fe6895 --- /dev/null +++ b/data/base/messages/cam1-outro.json @@ -0,0 +1,24 @@ +{ + "video0000": { + "name": "CAM1_OUT", + "sequences": [ + { "loop": 0, "subtitles": ["CAM1OUT_MSG1", "CAM1OUT_MSG2", "CAM1OUT_MSG3"], "video": "cam1/cam1out1.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam1/cam1out2.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam1/cam1out3.ogg" } + ] + }, + "video0001": { + "name": "CAM1_OUT2", + "sequences": [ + { "loop": 0, "subtitles": "", "video": "cam1/cam1out4.ogg" }, + { "loop": 0, "subtitles": "", "video": "cam1/cam1out5.ogg" }, + { "loop": 1, "subtitles": ["CAM1OUT_MSG4", "CAM1OUT_MSG5"], "video": "cam1/cam1out6.ogg" } + ] + }, + "video0002": { + "name": "CAM2_BRIEF", + "sequences": [ + { "loop": 0, "subtitles": "CAM1OUT_MSG6", "video": "cam1/c001end.ogg" } + ] + } +} diff --git a/data/base/messages/cam1-outro.txt b/data/base/messages/cam1-outro.txt deleted file mode 100644 index 02d1c91f516..00000000000 --- a/data/base/messages/cam1-outro.txt +++ /dev/null @@ -1,3 +0,0 @@ -CAM1_OUT,0,1,3,cam1/cam1out1.ogg,3,CAM1OUT_MSG1,CAM1OUT_MSG2,CAM1OUT_MSG3,0,0000,cam1/cam1out2.ogg,0,0,0000,cam1/cam1out3.ogg,0,0,0000 -CAM1_OUT2,0,3,3,cam1/cam1out4.ogg,0,0,0,0000,cam1/cam1out5.ogg,0,0,0,0000,cam1/cam1out6.ogg,1,2,CAM1OUT_MSG4,CAM1OUT_MSG5,0,0000 -CAM2_BRIEF,0,1,1,cam1/c001end.ogg,1,CAM1OUT_MSG6,0,0000 diff --git a/data/base/messages/cam1messages.txt b/data/base/messages/cam1messages.txt deleted file mode 100644 index 16efa5a9579..00000000000 --- a/data/base/messages/cam1messages.txt +++ /dev/null @@ -1,2 +0,0 @@ -CMB1_MSG,0,1,1,cam1/cam1.ogg,3,CAM1_MSG1,CAM1_MSG2,CAM1_MSG3,0,0000 -END,0,1,1,end.ogg,1,END_MSG1,0,0000 diff --git a/data/base/messages/cam2-outro.txt b/data/base/messages/cam2-outro.txt deleted file mode 100644 index 5bf96b99a33..00000000000 --- a/data/base/messages/cam2-outro.txt +++ /dev/null @@ -1 +0,0 @@ -CAM2_OUT,0,1,1,cam2/cam2out.ogg,0,0,0000 diff --git a/data/base/messages/cam2messages.txt b/data/base/messages/cam2messages.txt deleted file mode 100644 index 852c390a0da..00000000000 --- a/data/base/messages/cam2messages.txt +++ /dev/null @@ -1,4 +0,0 @@ -CMB2_MSG1,0,3,2,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam2/cam2inta.ogg,0,3,CAM2_INT_MSG1,CAM2_INT_MSG2,CAM2_INT_MSG3,0,0000 -CMB2_MSG2,0,3,2,brfcom.ogg,1,1,TRANS_MSG1,0,0000,cam2/cam2intb.ogg,0,3,CAM2_INT_MSG4,CAM2_INT_MSG5,CAM2_INT_MSG6,0,0000 -CMBFULL2_MSG,0,1,2,cam2/cam2int1.ogg,0,0,0000,cam2/cam2int2.ogg,0,0,0000 -END,0,1,1,end.ogg,1,END_MSG1,0,0000 diff --git a/data/base/messages/cam3messages.txt b/data/base/messages/cam3messages.txt deleted file mode 100644 index 85a10dbf11c..00000000000 --- a/data/base/messages/cam3messages.txt +++ /dev/null @@ -1,2 +0,0 @@ -DELETE_ME,0,1,2,cam2intro1.ogg,0,0,0000,cam2intro2.ogg,0,0,0000 -END,0,1,1,end.ogg,1,END_MSG1,0,0000 diff --git a/data/base/messages/genmessages.json b/data/base/messages/genmessages.json new file mode 100644 index 00000000000..6a6d3baea0f --- /dev/null +++ b/data/base/messages/genmessages.json @@ -0,0 +1,14 @@ +{ + "video0000": { + "name": "END", + "sequences": [ + { "loop": 0, "subtitles": "END_MSG1", "video": "end.ogg" } + ] + }, + "video0001": { + "name": "WIN", + "sequences": [ + { "loop": 0, "subtitles": "WIN_MSG1", "video": "victory.ogg" } + ] + } +} diff --git a/data/base/messages/genmessages.txt b/data/base/messages/genmessages.txt deleted file mode 100644 index 3fd8398d1da..00000000000 --- a/data/base/messages/genmessages.txt +++ /dev/null @@ -1 +0,0 @@ -END,0,1,1,end.ogg,1,END_MSG1,0,0000 diff --git a/data/base/messages/prox1-1.json b/data/base/messages/prox1-1.json new file mode 100644 index 00000000000..211ba4225e9 --- /dev/null +++ b/data/base/messages/prox1-1.json @@ -0,0 +1,4 @@ +{ + "C1-1_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 2240, "y": 1600, "z": 0 }, + "C1-1_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 1216, "y": 10816, "z": 0 } +} diff --git a/data/base/messages/prox1-1.txt b/data/base/messages/prox1-1.txt deleted file mode 100644 index 50830a47a0e..00000000000 --- a/data/base/messages/prox1-1.txt +++ /dev/null @@ -1,2 +0,0 @@ -C1-1_OBJ1,1,RUINS_MSG,2,2240,1600,0,pcv448.ogg,0 -C1-1_LZ,1,LZ_MSG,2,1216,10816,0,pcv427.ogg,2 diff --git a/data/base/messages/prox1-2.json b/data/base/messages/prox1-2.json new file mode 100644 index 00000000000..0dfb4206c7d --- /dev/null +++ b/data/base/messages/prox1-2.json @@ -0,0 +1,8 @@ +{ + "C1-2_BASE1": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 4160, "y": 2112, "z": 0 }, + "C1-2_BASE2": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 1984, "y": 7000, "z": 0 }, + "C1-2_GUARD1": { "audio": "pcv390.ogg", "message": "BARBASE_MSG", "type": 0, "x": 2880, "y": 5824, "z": 0 }, + "C1-2_GUARD2": { "audio": "pcv390.ogg", "message": "BARBASE_MSG", "type": 0, "x": 5312, "y": 4160, "z": 0 }, + "C1-2_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 6848, "y": 7104, "z": 0 }, + "C1-2_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG2", "type": 0, "x": 2752, "y": 3904, "z": 0 } +} diff --git a/data/base/messages/prox1-2.txt b/data/base/messages/prox1-2.txt deleted file mode 100644 index 1dc8b5ccd6f..00000000000 --- a/data/base/messages/prox1-2.txt +++ /dev/null @@ -1,6 +0,0 @@ -C1-2_BASE1,1,BARBASE_MSG,2,4160,2112,0,pcv389.ogg,0 -C1-2_BASE2,1,BARBASE_MSG,2,1984,7000,0,pcv389.ogg,0 -C1-2_GUARD1,1,BARBASE_MSG,2,2880,5824,0,pcv390.ogg,0 -C1-2_GUARD2,1,BARBASE_MSG,2,5312,4160,0,pcv390.ogg,0 -C1-2_LZ,1,LZ_MSG,2,6848,7104,0,pcv427.ogg,2 -C1-2_OBJ1,1,RUINS_MSG2,2,2752,3904,0,pcv448.ogg,0 diff --git a/data/base/messages/prox1-3.json b/data/base/messages/prox1-3.json new file mode 100644 index 00000000000..566f3107881 --- /dev/null +++ b/data/base/messages/prox1-3.json @@ -0,0 +1,10 @@ +{ + "C1-3_BASE1": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 5376, "y": 4544, "z": 0 }, + "C1-3_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 6592, "y": 1856, "z": 0 }, + "C1-3_BASE3": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 7168, "y": 7296, "z": 0 }, + "C1-3_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 704, "y": 704, "z": 0 }, + "C1-3_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 448, "y": 6592, "z": 0 }, + "C1-3_OBJ2": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 7616, "y": 7744, "z": 0 }, + "C1-3_OBJ3": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 5312, "y": 704, "z": 0 }, + "C1-3_OBJ4": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 6848, "y": 3008, "z": 0 } +} diff --git a/data/base/messages/prox1-3.txt b/data/base/messages/prox1-3.txt deleted file mode 100644 index f997c4fa8dd..00000000000 --- a/data/base/messages/prox1-3.txt +++ /dev/null @@ -1,7 +0,0 @@ -C1-3_BASE1,1,BARBASE_MSG,2,5376,4544,0,pcv389.ogg,0 -C1-3_BASE2,1,ENEMYBASE_MSG,2,6592,1856,0,pcv393.ogg,0 -C1-3_LZ,1,LZ_MSG,2,704,704,0,pcv427.ogg,2 -C1-3_OBJ1,1,RUINS_MSG,2,448,6592,0,pcv448.ogg,0 -C1-3_OBJ2,1,RUINS_MSG,2,7616,7744,0,pcv448.ogg,0 -C1-3_OBJ3,1,RUINS_MSG,2,5312,704,0,pcv448.ogg,0 -C1-3_OBJ4,1,RUINS_MSG,2,6848,3008,0,pcv448.ogg,0 diff --git a/data/base/messages/prox1-4a.json b/data/base/messages/prox1-4a.json new file mode 100644 index 00000000000..fd82bcccfdd --- /dev/null +++ b/data/base/messages/prox1-4a.json @@ -0,0 +1,7 @@ +{ + "C1-4_BASE1": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 2624, "y": 7488, "z": 0 }, + "C1-4_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 3648, "y": 2240, "z": 0 }, + "C1-4_BASE3": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 7104, "y": 2496, "z": 0 }, + "C1-4_LZ": { "audio": "pcv398.ogg", "message": "LZ_MSG", "type": 2, "x": 7488, "y": 4672, "z": 0 }, + "C1-4_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 4160, "y": 3904, "z": 0 } +} diff --git a/data/base/messages/prox1-4a.txt b/data/base/messages/prox1-4a.txt deleted file mode 100644 index a458222f319..00000000000 --- a/data/base/messages/prox1-4a.txt +++ /dev/null @@ -1,5 +0,0 @@ -C1-4_BASE1,1,BARBASE_MSG,2,2624,7488,0,pcv389.ogg,0 -C1-4_BASE2,1,BARBASE_MSG,2,3648,2240,0,pcv389.ogg,0 -C1-4_BASE3,1,BARBASE_MSG,2,7104,2496,0,pcv389.ogg,0 -C1-4_LZ,1,LZ_MSG,2,7488,4672,0,pcv398.ogg,2 -C1-4_OBJ1,1,RUINS_MSG,2,4160,3904,0,pcv448.ogg,0 diff --git a/data/base/messages/prox1-5.json b/data/base/messages/prox1-5.json new file mode 100644 index 00000000000..01f334837f0 --- /dev/null +++ b/data/base/messages/prox1-5.json @@ -0,0 +1,7 @@ +{ + "C1-5_BASE1": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 3264, "y": 704, "z": 0 }, + "C1-5_BASE2": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 4160, "y": 7616, "z": 0 }, + "C1-5_BASE3": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 5696, "y": 7488, "z": 0 }, + "C1-5_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 832, "y": 7232, "z": 0 }, + "C1-5_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 5440, "y": 2752, "z": 0 } +} diff --git a/data/base/messages/prox1-5.txt b/data/base/messages/prox1-5.txt deleted file mode 100644 index 7c423d7be54..00000000000 --- a/data/base/messages/prox1-5.txt +++ /dev/null @@ -1,5 +0,0 @@ -C1-5_BASE1,1,BARBASE_MSG,2,3264,704,0,pcv389.ogg,0 -C1-5_BASE2,1,BARBASE_MSG,2,4160,7616,0,pcv389.ogg,0 -C1-5_BASE3,1,BARBASE_MSG,2,5696,7488,0,pcv389.ogg,0 -C1-5_LZ,1,LZ_MSG,2,832,7232,0,pcv427.ogg,2 -C1-5_OBJ1,1,RUINS_MSG,2,5440,2752,0,pcv448.ogg,0 diff --git a/data/base/messages/prox1-7.json b/data/base/messages/prox1-7.json new file mode 100644 index 00000000000..01928e89f9d --- /dev/null +++ b/data/base/messages/prox1-7.json @@ -0,0 +1,8 @@ +{ + "C1-7_BASE1": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 4288, "y": 4928, "z": 0 }, + "C1-7_BASE2": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 7232, "y": 7104, "z": 0 }, + "C1-7_BASE3": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 7616, "y": 576, "z": 0 }, + "C1-7_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 960, "y": 7232, "z": 0 }, + "C1-7_LZ2": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 2, "x": 1728, "y": 1472, "z": 0 }, + "C1-7_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 3136, "y": 3904, "z": 0 } +} diff --git a/data/base/messages/prox1-7.txt b/data/base/messages/prox1-7.txt deleted file mode 100644 index 1dce4fe54fb..00000000000 --- a/data/base/messages/prox1-7.txt +++ /dev/null @@ -1,6 +0,0 @@ -C1-7_BASE1,1,BARBASE_MSG,2,4288,4928,0,pcv389.ogg,0 -C1-7_BASE2,1,BARBASE_MSG,2,7232,7104,0,pcv389.ogg,0 -C1-7_BASE3,1,BARBASE_MSG,2,7616,576,0,pcv389.ogg,0 -C1-7_LZ,1,LZ_MSG,2,960,7232,0,pcv427.ogg,2 -C1-7_LZ2,1,LZ_MSG,2,1728,1472,0,0,2 -C1-7_OBJ1,1,RUINS_MSG,2,3136,3904,0,pcv448.ogg,0 diff --git a/data/base/messages/prox1a-c.json b/data/base/messages/prox1a-c.json new file mode 100644 index 00000000000..a58eaa5919d --- /dev/null +++ b/data/base/messages/prox1a-c.json @@ -0,0 +1,7 @@ +{ + "C1A-C_LZ1": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 15424, "y": 15424, "z": 0 }, + "C1A-C_LZ2": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 12736, "y": 1312, "z": 0 }, + "C1A-C_LZ3": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 8768, "y": 15424, "z": 0 }, + "C1A-C_LZ4": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 1344, "y": 8896, "z": 0 }, + "C1A-C_LZ5": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 5056, "y": 3264, "z": 0 } +} diff --git a/data/base/messages/prox1a-c.txt b/data/base/messages/prox1a-c.txt deleted file mode 100644 index b54bf5ea24b..00000000000 --- a/data/base/messages/prox1a-c.txt +++ /dev/null @@ -1,5 +0,0 @@ -C1A-C_LZ1,1,LZ_MSG3,2,15424,15424,0,pcv396.ogg,0 -C1A-C_LZ2,1,LZ_MSG3,2,12736,1312,0,pcv396.ogg,0 -C1A-C_LZ3,1,LZ_MSG3,2,8768,15424,0,pcv396.ogg,0 -C1A-C_LZ4,1,LZ_MSG3,2,1344,8896,0,pcv396.ogg,0 -C1A-C_LZ5,1,LZ_MSG3,2,5056,3264,0,pcv396.ogg,0 diff --git a/data/base/messages/prox1a.json b/data/base/messages/prox1a.json new file mode 100644 index 00000000000..2568ae55379 --- /dev/null +++ b/data/base/messages/prox1a.json @@ -0,0 +1,7 @@ +{ + "C1A_BASE0": { "audio": "pcv390.ogg", "message": "BARBASE_MSG", "type": 0, "x": 3904, "y": 4672, "z": 0 }, + "C1A_BASE1": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 5002, "y": 2154, "z": 135 }, + "C1A_BASE2": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 1600, "y": 1728, "z": 0 }, + "C1A_BASE3": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 2112, "y": 4544, "z": 0 }, + "C1A_OBJ1": { "audio": "pcv373.ogg", "message": "RUINS_MSG", "type": 0, "x": 4928, "y": 6592, "z": 0 } +} diff --git a/data/base/messages/prox1a.txt b/data/base/messages/prox1a.txt deleted file mode 100644 index 6a803b19c14..00000000000 --- a/data/base/messages/prox1a.txt +++ /dev/null @@ -1,5 +0,0 @@ -C1A_BASE0,1,BARBASE_MSG,2,3904,4672,0,pcv390.ogg,0 -C1A_BASE1,1,BARBASE_MSG,2,5002,2154,135,pcv389.ogg,0 -C1A_BASE2,1,BARBASE_MSG,2,1600,1728,0,pcv389.ogg,0 -C1A_BASE3,1,BARBASE_MSG,2,2112,4544,0,pcv389.ogg,0 -C1A_OBJ1,1,RUINS_MSG,2,4928,6592,0,pcv373.ogg,0 diff --git a/data/base/messages/prox1b.json b/data/base/messages/prox1b.json new file mode 100644 index 00000000000..800f56c19fd --- /dev/null +++ b/data/base/messages/prox1b.json @@ -0,0 +1,6 @@ +{ + "C1B_BASE0": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 2112, "y": 9280, "z": 0 }, + "C1B_BASE1": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 4370, "y": 9872, "z": 0 }, + "C1B_BASE2": { "audio": "pcv448.ogg", "message": "POWSURGE_MSG", "type": 0, "x": 3193, "y": 13806, "z": 0 }, + "C1B_BASE3": { "audio": "pcv390.ogg", "message": "BARBASE_MSG", "type": 0, "x": 3776, "y": 11328, "z": 0 } +} diff --git a/data/base/messages/prox1b.txt b/data/base/messages/prox1b.txt deleted file mode 100644 index 750724b386c..00000000000 --- a/data/base/messages/prox1b.txt +++ /dev/null @@ -1,4 +0,0 @@ -C1B_BASE0,1,BARBASE_MSG,2,2112,9280,0,pcv389.ogg,0 -C1B_BASE1,1,BARBASE_MSG,2,4370,9872,0,pcv389.ogg,0 -C1B_BASE2,1,POWSURGE_MSG,2,3193,13806,0,pcv448.ogg,0 -C1B_OBJ1,1,RUINS_MSG,2,3776,11328,0,pcv390.ogg,0 diff --git a/data/base/messages/prox1c.json b/data/base/messages/prox1c.json new file mode 100644 index 00000000000..a1f70c151b1 --- /dev/null +++ b/data/base/messages/prox1c.json @@ -0,0 +1,15 @@ +{ + "C1C_BASE1": { "audio": "pcv390.ogg", "message": "BARBASE_MSG", "type": 0, "x": 10304, "y": 15424, "z": 0 }, + "C1C_BASE2": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 12736, "y": 14016, "z": 0 }, + "C1C_BASE3": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 8512, "y": 704, "z": 0 }, + "C1C_BASE4": { "audio": "pcv390.ogg", "message": "BARBASE_MSG", "type": 0, "x": 9024, "y": 3648, "z": 0 }, + "C1C_BASE5": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 8512, "y": 6976, "z": 0 }, + "C1C_BASE6": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 13376, "y": 13504, "z": 0 }, + "C1C_BASE7": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 11840, "y": 9792, "z": 0 }, + "C1C_BASE8": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 14272, "y": 3264, "z": 0 }, + "C1C_BASE9": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 11712, "y": 2752, "z": 0 }, + "C1C_BASE10": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 9408, "y": 7104, "z": 0 }, + "C1C_OBJ1": { "audio": "pcv378.ogg", "message": "RUINS_MSG", "type": 0, "x": 6848, "y": 13888, "z": 0 }, + "C1C_LZ1": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 13632, "y": 5056, "z": 0 }, + "C1C_LZ2": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 8768, "y": 10048, "z": 0 } +} diff --git a/data/base/messages/prox1c.txt b/data/base/messages/prox1c.txt deleted file mode 100644 index ed3c1c5a148..00000000000 --- a/data/base/messages/prox1c.txt +++ /dev/null @@ -1,13 +0,0 @@ -C1C_BASE1,1,BARBASE_MSG,2,10304,15424,0,pcv389.ogg,0 -C1C_BASE2,1,BARBASE_MSG,2,12736,14016,0,pcv389.ogg,0 -C1C_BASE3,1,BARBASE_MSG,2,8512,704,0,pcv389.ogg,0 -C1C_BASE4,1,BARBASE_MSG,2,9024,3648,0,pcv389.ogg,0 -C1C_BASE5,1,BARBASE_MSG,2,8512,6976,0,pcv389.ogg,0 -C1C_BASE6,1,ENEMYBASE_MSG,2,13376,13504,0,pcv393.ogg,0 -C1C_BASE7,1,ENEMYBASE_MSG,2,11840,9792,0,pcv393.ogg,0 -C1C_BASE8,1,ENEMYBASE_MSG,2,14272,3264,0,pcv393.ogg,0 -C1C_BASE9,1,ENEMYBASE_MSG,2,11712,2752,0,pcv393.ogg,0 -C1C_BASE10,1,ENEMYBASE_MSG,2,9408,7104,0,pcv393.ogg,0 -C1C_OBJ1,1,RUINS_MSG,2,6848,13888,0,pcv378.ogg,0 -C1C_LZ1,1,LZ_MSG3,2,13632,5056,0,pcv396.ogg,0 -C1C_LZ2,1,LZ_MSG3,2,8768,10048,0,pcv396.ogg,0 diff --git a/data/base/messages/prox1ca.json b/data/base/messages/prox1ca.json new file mode 100644 index 00000000000..efce177c076 --- /dev/null +++ b/data/base/messages/prox1ca.json @@ -0,0 +1,8 @@ +{ + "C1CA_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 2, "x": 9408, "y": 6848, "z": 0 }, + "C1CA_LZ1": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 10560, "y": 8384, "z": 0 }, + "C1CA_LZ2": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 7232, "y": 6336, "z": 0 }, + "C1CA_LZ3": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 6208, "y": 6848, "z": 0 }, + "C1CA_LZ4": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 7872, "y": 4672, "z": 0 }, + "C1CA_LZ5": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 6848, "y": 3520, "z": 0 } +} diff --git a/data/base/messages/prox1ca.txt b/data/base/messages/prox1ca.txt deleted file mode 100644 index 67647b1acae..00000000000 --- a/data/base/messages/prox1ca.txt +++ /dev/null @@ -1,6 +0,0 @@ -C1CA_OBJ1,1,RUINS_MSG,2,9408,6848,0,pcv448.ogg,2 -C1CA_LZ1,1,LZ_MSG3,2,10560,8384,0,pcv396.ogg,0 -C1CA_LZ2,1,LZ_MSG3,2,7232,6336,0,pcv396.ogg,0 -C1CA_LZ3,1,LZ_MSG3,2,6208,6848,0,pcv396.ogg,0 -C1CA_LZ4,1,LZ_MSG3,2,7872,4672,0,pcv396.ogg,0 -C1CA_LZ5,1,LZ_MSG3,2,6848,3520,0,pcv396.ogg,0 diff --git a/data/base/messages/prox1d.json b/data/base/messages/prox1d.json new file mode 100644 index 00000000000..32d6d10e196 --- /dev/null +++ b/data/base/messages/prox1d.json @@ -0,0 +1,8 @@ +{ + "C1D_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 5184, "y": 15040, "z": 0 }, + "C1D_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 4800, "y": 4288, "z": 0 }, + "C1D_BASE3": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 8512, "y": 2240, "z": 0 }, + "C1D_LZ": { "audio": "pcv397.ogg", "message": "LZ_MSG", "type": 2, "x": 704, "y": 15552, "z": 0 }, + "C1D_LZ2": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 7488, "y": 5952, "z": 0 }, + "C1D_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 8512, "y": 2112, "z": 0 } +} diff --git a/data/base/messages/prox1d.txt b/data/base/messages/prox1d.txt deleted file mode 100644 index 80bcf78c43f..00000000000 --- a/data/base/messages/prox1d.txt +++ /dev/null @@ -1,6 +0,0 @@ -C1D_BASE1,1,ENEMYBASE_MSG,2,5184,15040,0,pcv393.ogg,0 -C1D_BASE2,1,ENEMYBASE_MSG,2,4800,4288,0,pcv393.ogg,0 -C1D_BASE3,1,ENEMYBASE_MSG,2,8512,2240,0,pcv393.ogg,0 -C1D_LZ,1,LZ_MSG,2,704,15552,0,pcv397.ogg,2 -C1D_LZ2,1,LZ_MSG3,2,7488,5952,0,pcv396.ogg,0 -C1D_OBJ1,1,RUINS_MSG,2,8512,2112,0,pcv448.ogg,0 diff --git a/data/base/messages/prox2-1.json b/data/base/messages/prox2-1.json new file mode 100644 index 00000000000..f9c92475218 --- /dev/null +++ b/data/base/messages/prox2-1.json @@ -0,0 +1,7 @@ +{ + "C21_OBJECTIVE": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 2, "x": 6464, "y": 1728, "z": 0 }, + "C21_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 3008, "y": 4928, "z": 0 }, + "C21_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 6528, "y": 6912, "z": 0 }, + "C21_BASE3": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 1344, "y": 1216, "z": 0 }, + "C21_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 960, "y": 7488, "z": 0 } +} diff --git a/data/base/messages/prox2-1.txt b/data/base/messages/prox2-1.txt deleted file mode 100644 index ac038c6a316..00000000000 --- a/data/base/messages/prox2-1.txt +++ /dev/null @@ -1,5 +0,0 @@ -C21_OBJECTIVE,1,RUINS_MSG,2,6464,1728,0,pcv448.ogg,2 -C21_BASE1,1,ENEMYBASE_MSG,2,3008,4928,0,pcv393.ogg,0 -C21_BASE2,1,ENEMYBASE_MSG,2,6528,6912,0,pcv393.ogg,0 -C21_BASE3,1,ENEMYBASE_MSG,2,1344,1216,0,pcv393.ogg,0 -C21_LZ,1,LZ_MSG,2,960,7488,0,pcv427.ogg,2 diff --git a/data/base/messages/prox2-2.json b/data/base/messages/prox2-2.json new file mode 100644 index 00000000000..b1604909ebf --- /dev/null +++ b/data/base/messages/prox2-2.json @@ -0,0 +1,6 @@ +{ + "C22_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 5440, "y": 1344, "z": 0 }, + "C22_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 5952, "y": 1344, "z": 0 }, + "C22_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 1088, "y": 1216, "z": 0 }, + "C22_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 5696, "y": 7232, "z": 0 } +} diff --git a/data/base/messages/prox2-2.txt b/data/base/messages/prox2-2.txt deleted file mode 100644 index d0579fe9345..00000000000 --- a/data/base/messages/prox2-2.txt +++ /dev/null @@ -1,4 +0,0 @@ -C22_OBJ1,1,RUINS_MSG,2,5440,1344,0,pcv448.ogg,0 -C22_BASE1,1,ENEMYBASE_MSG,2,5952,1344,0,pcv393.ogg,0 -C22_BASE2,1,ENEMYBASE_MSG,2,1088,1216,0,pcv393.ogg,0 -C22_LZ,1,LZ_MSG,2,5696,7232,0,pcv427.ogg,2 diff --git a/data/base/messages/prox2-5.json b/data/base/messages/prox2-5.json new file mode 100644 index 00000000000..b7eee085905 --- /dev/null +++ b/data/base/messages/prox2-5.json @@ -0,0 +1,6 @@ +{ + "C25_OBJ1": { "audio": "pcv654.ogg", "message": "ADD_MSG42", "type": 0, "x": 6720, "y": 1856, "z": 0 }, + "C25_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 6592, "y": 832, "z": 0 }, + "C25_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 5888, "y": 5120, "z": 0 }, + "C25_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 1344, "y": 6848, "z": 0 } +} diff --git a/data/base/messages/prox2-5.txt b/data/base/messages/prox2-5.txt deleted file mode 100644 index 5e188e69c3d..00000000000 --- a/data/base/messages/prox2-5.txt +++ /dev/null @@ -1,4 +0,0 @@ -C25_OBJ1,1,ADD_MSG42,2,6720,1856,0,pcv654.ogg,0 -C25_BASE1,1,ENEMYBASE_MSG,2,6592,832,0,pcv393.ogg,0 -C25_BASE2,1,ENEMYBASE_MSG,2,5888,5120,0,pcv393.ogg,0 -C25_LZ,1,LZ_MSG,2,1344,6848,0,pcv427.ogg,2 diff --git a/data/base/messages/prox2-6.json b/data/base/messages/prox2-6.json new file mode 100644 index 00000000000..2fa83e28604 --- /dev/null +++ b/data/base/messages/prox2-6.json @@ -0,0 +1,7 @@ +{ + "C26_OBJ1": { "audio": "pcv652.ogg", "message": "RUINS_MSG", "type": 0, "x": 1600, "y": 1984, "z": 0 }, + "C26_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 1216, "y": 1088, "z": 0 }, + "C26_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 3008, "y": 4672, "z": 0 }, + "C26_BASE3": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 7360, "y": 1344, "z": 0 }, + "C26_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 2752, "y": 7488, "z": 0 } +} diff --git a/data/base/messages/prox2-6.txt b/data/base/messages/prox2-6.txt deleted file mode 100644 index 7fd6ca6d167..00000000000 --- a/data/base/messages/prox2-6.txt +++ /dev/null @@ -1,5 +0,0 @@ -C26_OBJ1,1,RUINS_MSG,2,1600,1984,0,pcv652.ogg,0 -C26_BASE1,1,ENEMYBASE_MSG,2,1216,1088,0,pcv393.ogg,0 -C26_BASE2,1,ENEMYBASE_MSG,2,3008,4672,0,pcv393.ogg,0 -C26_BASE3,1,ENEMYBASE_MSG,2,7360,1344,0,pcv393.ogg,0 -C26_LZ,1,LZ_MSG,2,2752,7488,0,pcv427.ogg,2 diff --git a/data/base/messages/prox2-7.json b/data/base/messages/prox2-7.json new file mode 100644 index 00000000000..5289b5ecfe5 --- /dev/null +++ b/data/base/messages/prox2-7.json @@ -0,0 +1,11 @@ +{ + "C27_OBJECTIVE1": { "audio": "pcv655.ogg", "message": "RUINS_MSG", "type": 0, "x": 2624, "y": 6208, "z": 0 }, + "C27_OBJECTIVE2": { "audio": "pcv655.ogg", "message": "RUINS_MSG", "type": 0, "x": 5568, "y": 5824, "z": 0 }, + "C27_OBJECTIVE3": { "audio": "pcv655.ogg", "message": "RUINS_MSG", "type": 0, "x": 5184, "y": 1792, "z": 0 }, + "C27_OBJECTIVE4": { "audio": "pcv655.ogg", "message": "RUINS_MSG", "type": 0, "x": 2368, "y": 1344, "z": 0 }, + "C27_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 3136, "y": 6208, "z": 0 }, + "C27_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 6592, "y": 4928, "z": 0 }, + "C27_BASE3": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 4928, "y": 1088, "z": 0 }, + "C27_BASE4": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 1728, "y": 1344, "z": 0 }, + "C27_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 704, "y": 6592, "z": 0 } +} diff --git a/data/base/messages/prox2-7.txt b/data/base/messages/prox2-7.txt deleted file mode 100644 index a2ba6ad23ce..00000000000 --- a/data/base/messages/prox2-7.txt +++ /dev/null @@ -1,9 +0,0 @@ -C27_OBJECTIVE1,1,RUINS_MSG,2,2624,6208,0,pcv655.ogg,0 -C27_OBJECTIVE2,1,RUINS_MSG,2,5568,5824,0,pcv655.ogg,0 -C27_OBJECTIVE3,1,RUINS_MSG,2,5184,1792,0,pcv655.ogg,0 -C27_OBJECTIVE4,1,RUINS_MSG,2,2368,1344,0,pcv655.ogg,0 -C27_BASE1,1,ENEMYBASE_MSG,2,3136,6208,0,pcv393.ogg,0 -C27_BASE2,1,ENEMYBASE_MSG,2,6592,4928,0,pcv393.ogg,0 -C27_BASE3,1,ENEMYBASE_MSG,2,4928,1088,0,pcv393.ogg,0 -C27_BASE4,1,ENEMYBASE_MSG,2,1728,1344,0,pcv393.ogg,0 -C27_LZ,1,LZ_MSG,2,704,6592,0,pcv427.ogg,2 diff --git a/data/base/messages/prox2-8.json b/data/base/messages/prox2-8.json new file mode 100644 index 00000000000..8b347b2085e --- /dev/null +++ b/data/base/messages/prox2-8.json @@ -0,0 +1,5 @@ +{ + "C28_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 4160, "y": 4032, "z": 0 }, + "C28_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 4032, "y": 1856, "z": 0 }, + "C28_BASE3": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 7232, "y": 1600, "z": 0 } +} diff --git a/data/base/messages/prox2-8.txt b/data/base/messages/prox2-8.txt deleted file mode 100644 index 79cb7ee7395..00000000000 --- a/data/base/messages/prox2-8.txt +++ /dev/null @@ -1,3 +0,0 @@ -C28_BASE1,1,ENEMYBASE_MSG,2,4160,4032,0,pcv393.ogg,0 -C28_BASE2,1,ENEMYBASE_MSG,2,4032,1856,0,pcv393.ogg,0 -C28_BASE3,1,ENEMYBASE_MSG,2,7232,1600,0,pcv393.ogg,0 diff --git a/data/base/messages/prox2a.json b/data/base/messages/prox2a.json new file mode 100644 index 00000000000..815c4245701 --- /dev/null +++ b/data/base/messages/prox2a.json @@ -0,0 +1,4 @@ +{ + "C2A_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 13120, "y": 9792, "z": 256 }, + "C2A_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 10816, "y": 9920, "z": 64 } +} diff --git a/data/base/messages/prox2a.txt b/data/base/messages/prox2a.txt deleted file mode 100644 index e71c27894e9..00000000000 --- a/data/base/messages/prox2a.txt +++ /dev/null @@ -1,2 +0,0 @@ -C2A_BASE1,1,ENEMYBASE_MSG,2,13120,9792,256,pcv393.ogg,0 -C2A_BASE2,1,ENEMYBASE_MSG,2,10816,9920,64,pcv393.ogg,0 diff --git a/data/base/messages/prox2b.json b/data/base/messages/prox2b.json new file mode 100644 index 00000000000..8c6e9557b2c --- /dev/null +++ b/data/base/messages/prox2b.json @@ -0,0 +1,7 @@ +{ + "C2B_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 12096, "y": 8512, "z": 0 }, + "C2B_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 10432, "y": 1856, "z": 0 }, + "C2B_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 12992, "y": 2880, "z": 0 }, + "C2B_BASE3": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 12352, "y": 4160, "z": 0 }, + "C2B_BASE4": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 12224, "y": 6720, "z": 0 } +} diff --git a/data/base/messages/prox2b.txt b/data/base/messages/prox2b.txt deleted file mode 100644 index e9afd3a1c00..00000000000 --- a/data/base/messages/prox2b.txt +++ /dev/null @@ -1,5 +0,0 @@ -C2B_OBJ1,1,RUINS_MSG,2,12096,8512,0,pcv448.ogg,0 -C2B_BASE1,1,ENEMYBASE_MSG,2,10432,1856,0,pcv393.ogg,0 -C2B_BASE2,1,ENEMYBASE_MSG,2,12992,2880,0,pcv393.ogg,0 -C2B_BASE3,1,ENEMYBASE_MSG,2,12352,4160,0,pcv393.ogg,0 -C2B_BASE4,1,ENEMYBASE_MSG,2,12224,6720,0,pcv393.ogg,0 diff --git a/data/base/messages/prox2c.json b/data/base/messages/prox2c.json new file mode 100644 index 00000000000..30c164193c3 --- /dev/null +++ b/data/base/messages/prox2c.json @@ -0,0 +1,7 @@ +{ + "C2C_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 4928, "y": 4160, "z": 0 }, + "C2C_OBJ2": { "audio": "pcv396.ogg", "message": "RUINS_MSG", "type": 0, "x": 5696, "y": 11072, "z": 0 }, + "C2C_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 2752, "y": 2368, "z": 0 }, + "C2C_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 7488, "y": 7744, "z": 0 }, + "C2C_BASE3": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 6464, "y": 10816, "z": 0 } +} diff --git a/data/base/messages/prox2c.txt b/data/base/messages/prox2c.txt deleted file mode 100644 index 734946f13e8..00000000000 --- a/data/base/messages/prox2c.txt +++ /dev/null @@ -1,5 +0,0 @@ -C2C_OBJ1,1,RUINS_MSG,2,4928,4160,0,pcv448.ogg,0 -C2C_OBJ2,1,RUINS_MSG,2,5696,11072,0,pcv396.ogg,0 -C2C_BASE1,1,ENEMYBASE_MSG,2,2752,2368,0,pcv393.ogg,0 -C2C_BASE2,1,ENEMYBASE_MSG,2,7488,7744,0,pcv393.ogg,0 -C2C_BASE3,1,ENEMYBASE_MSG,2,6464,10816,0,pcv393.ogg,0 diff --git a/data/base/messages/prox2d.json b/data/base/messages/prox2d.json new file mode 100644 index 00000000000..6d29f1e7cde --- /dev/null +++ b/data/base/messages/prox2d.json @@ -0,0 +1,6 @@ +{ + "C2D_OBJ1": { "audio": "pcv653.ogg", "message": "RUINS_MSG", "type": 2, "x": 4160, "y": 4544, "z": 0 }, + "C2D_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 5312, "y": 4032, "z": 0 }, + "C2D_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 5824, "y": 1344, "z": 0 }, + "C2D_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 704, "y": 704, "z": 0 } +} diff --git a/data/base/messages/prox2d.txt b/data/base/messages/prox2d.txt deleted file mode 100644 index d129598cf5f..00000000000 --- a/data/base/messages/prox2d.txt +++ /dev/null @@ -1,4 +0,0 @@ -C2D_OBJ1,1,RUINS_MSG,2,4160,4544,0,pcv653.ogg,2 -C2D_BASE1,1,ENEMYBASE_MSG,2,5312,4032,0,pcv393.ogg,0 -C2D_BASE2,1,ENEMYBASE_MSG,2,5824,1344,0,pcv393.ogg,0 -C2D_LZ,1,LZ_MSG,2,704,704,0,pcv427.ogg,2 diff --git a/data/base/messages/prox3-1.json b/data/base/messages/prox3-1.json new file mode 100644 index 00000000000..c0dc4feb196 --- /dev/null +++ b/data/base/messages/prox3-1.json @@ -0,0 +1,5 @@ +{ + "CM31_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 1856, "y": 6848, "z": 0 }, + "CM31_TAR_UPLINK": { "audio": "pcv448.ogg", "message": "MISSIONTARGET_MSG", "type": 0, "x": 768, "y": 6848, "z": 0 }, + "CM31_HIDE_LOC": { "audio": "pcv448.ogg", "message": "MISSIONTARGET_MSG", "type": 2, "x": 6464, "y": 1600, "z": 0 } +} diff --git a/data/base/messages/prox3-1.txt b/data/base/messages/prox3-1.txt deleted file mode 100644 index b213b349b95..00000000000 --- a/data/base/messages/prox3-1.txt +++ /dev/null @@ -1,3 +0,0 @@ -CM31_BASE1,1,ENEMYBASE_MSG,2,1856,6848,0,pcv393.ogg,0 -CM31_TAR_UPLINK,1,MISSIONTARGET_MSG,2,768,6848,0,pcv448.ogg,0 -CM31_HIDE_LOC,1,MISSIONTARGET_MSG,2,6464,1600,64,pcv448.ogg,2 diff --git a/data/base/messages/prox3-2.json b/data/base/messages/prox3-2.json new file mode 100644 index 00000000000..4be054ab8fe --- /dev/null +++ b/data/base/messages/prox3-2.json @@ -0,0 +1,4 @@ +{ + "C3-2_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 2, "x": 4544, "y": 8896, "z": 0 }, + "C32_LZ": { "audio": "pcv427.ogg", "message": "LZ_MSG", "type": 2, "x": 1728, "y": 832, "z": 0 } +} diff --git a/data/base/messages/prox3-2.txt b/data/base/messages/prox3-2.txt deleted file mode 100644 index 344d5cdf18d..00000000000 --- a/data/base/messages/prox3-2.txt +++ /dev/null @@ -1,2 +0,0 @@ -C3-2_OBJ1,1,RUINS_MSG,2,4544,8896,0,pcv448.ogg,2 -C32_LZ,1,LZ_MSG,2,1728,832,0,pcv427.ogg,2 diff --git a/data/base/messages/prox3-3.txt b/data/base/messages/prox3-3.txt deleted file mode 100644 index f7267faa205..00000000000 --- a/data/base/messages/prox3-3.txt +++ /dev/null @@ -1 +0,0 @@ -DELETE_ME,1,RUINS_MSG,2,6848,7104,0,0,2 diff --git a/data/base/messages/prox3-4.json b/data/base/messages/prox3-4.json new file mode 100644 index 00000000000..41c547056ef --- /dev/null +++ b/data/base/messages/prox3-4.json @@ -0,0 +1,11 @@ +{ + "CM34_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 1984, "y": 10688, "z": 0 }, + "CM34_OBJ2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 3392, "y": 8768, "z": 0 }, + "CM34_BASEA": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 2000, "y": 2500, "z": 0 }, + "CM34_BASEB": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 8768, "y": 4032, "z": 0 }, + "CM34_BASEC": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 8256, "y": 1344, "z": 0 }, + "CM34_BASED": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 10816, "y": 10816, "z": 0 }, + "CM34_BASEE": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 6976, "y": 10624, "z": 0 }, + "CM34_BASEF": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 2880, "y": 9408, "z": 0 }, + "CM34_BASEG": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 11328, "y": 7360, "z": 0 } +} diff --git a/data/base/messages/prox3-4.txt b/data/base/messages/prox3-4.txt deleted file mode 100644 index 9ba8ace4860..00000000000 --- a/data/base/messages/prox3-4.txt +++ /dev/null @@ -1,9 +0,0 @@ -CM34_OBJ1,1,RUINS_MSG,2,1984,10688,0,pcv448.ogg,0 -CM34_OBJ2,1,ENEMYBASE_MSG,2,3392,8768,0,pcv393.ogg,0 -CM34_BASEA,1,ENEMYBASE_MSG,2,2000,2500,0,pcv393.ogg,0 -CM34_BASEB,1,ENEMYBASE_MSG,2,8768,4032,0,pcv393.ogg,0 -CM34_BASEC,1,ENEMYBASE_MSG,2,8256,1344,0,pcv393.ogg,0 -CM34_BASED,1,ENEMYBASE_MSG,2,10816,10816,0,pcv393.ogg,0 -CM34_BASEE,1,ENEMYBASE_MSG,2,6976,10560,0,pcv393.ogg,0 -CM34_BASEF,1,ENEMYBASE_MSG,2,2880,9408,0,pcv393.ogg,0 -CM34_BASEG,1,ENEMYBASE_MSG,2,11328,7360,0,pcv393.ogg,0 diff --git a/data/base/messages/prox3a-d1.json b/data/base/messages/prox3a-d1.json new file mode 100644 index 00000000000..65782f080a3 --- /dev/null +++ b/data/base/messages/prox3a-d1.json @@ -0,0 +1,7 @@ +{ + "CM3D1_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 5696, "y": 30400, "z": 0 }, + "CM3D1_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 1088, "y": 30528, "z": 0 }, + "CM3D1_BASE3": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 4032, "y": 25152, "z": 0 }, + "CM3D1_BASE4": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 6336, "y": 26816, "z": 0 }, + "CM3D1_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 2, "x": 5696, "y": 31552, "z": 0 } +} diff --git a/data/base/messages/prox3a-d1.txt b/data/base/messages/prox3a-d1.txt deleted file mode 100644 index 4529d97dba5..00000000000 --- a/data/base/messages/prox3a-d1.txt +++ /dev/null @@ -1,5 +0,0 @@ -CM3D1_BASE1,1,ENEMYBASE_MSG,2,5696,30400,0,pcv393.ogg,0 -CM3D1_BASE2,1,ENEMYBASE_MSG,2,1088,30528,0,pcv393.ogg,0 -CM3D1_BASE3,1,ENEMYBASE_MSG,2,4032,25152,0,pcv393.ogg,0 -CM3D1_BASE4,1,ENEMYBASE_MSG,2,6336,26816,0,pcv393.ogg,0 -CM3D1_OBJ1,1,RUINS_MSG,2,5696,31552,0,pcv448.ogg,2 diff --git a/data/base/messages/prox3a.json b/data/base/messages/prox3a.json new file mode 100644 index 00000000000..29e2f531337 --- /dev/null +++ b/data/base/messages/prox3a.json @@ -0,0 +1,6 @@ +{ + "CM3A_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 2240, "y": 12608, "z": 0 }, + "CM3A_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 1984, "y": 14912, "z": 0 }, + "CM3A_BASE3": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 6464, "y": 8896, "z": 0 }, + "CM3A_BASE4": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 1600, "y": 8896, "z": 0 } +} diff --git a/data/base/messages/prox3a.txt b/data/base/messages/prox3a.txt deleted file mode 100644 index 936bee16b14..00000000000 --- a/data/base/messages/prox3a.txt +++ /dev/null @@ -1,4 +0,0 @@ -CM3A_BASE1,1,ENEMYBASE_MSG,2,2240,12608,0,pcv393.ogg,0 -CM3A_BASE2,1,ENEMYBASE_MSG,2,1984,14912,0,pcv393.ogg,0 -CM3A_BASE3,1,ENEMYBASE_MSG,2,6464,8896,0,pcv393.ogg,0 -CM3A_BASE4,1,ENEMYBASE_MSG,2,1600,8896,0,pcv393.ogg,0 diff --git a/data/base/messages/prox3b.json b/data/base/messages/prox3b.json new file mode 100644 index 00000000000..d76ea090b82 --- /dev/null +++ b/data/base/messages/prox3b.json @@ -0,0 +1,7 @@ +{ + "CM3B_BASE4": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 6592, "y": 6720, "z": 0 }, + "CM3B_BASE6": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 1024, "y": 6528, "z": 0 }, + "CM3B_TRANS1": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 6208, "y": 6592, "z": 0 }, + "CM3B_TRANS2": { "audio": "pcv396.ogg", "message": "LZ_MSG3", "type": 0, "x": 1088, "y": 6848, "z": 0 }, + "CM3B_GAMMABASE": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 2, "x": 1728, "y": 1728, "z": 200 } +} diff --git a/data/base/messages/prox3b.txt b/data/base/messages/prox3b.txt deleted file mode 100644 index 0f0deff45c3..00000000000 --- a/data/base/messages/prox3b.txt +++ /dev/null @@ -1,5 +0,0 @@ -CM3B_BASE4,1,ENEMYBASE_MSG,2,6592,6720,0,pcv393.ogg,0 -CM3B_BASE6,1,ENEMYBASE_MSG,2,1024,6528,0,pcv393.ogg,0 -CM3B_TRANS1,1,ENEMYBASE_MSG,2,6208,6592,0,pcv393.ogg,0 -CM3B_TRANS2,1,ENEMYBASE_MSG,2,1088,6848,0,pcv393.ogg,0 -CM3B_GAMMABASE,1,RUINS_MSG,2,1728,1728,200,pcv448.ogg,2 diff --git a/data/base/messages/prox3c.json b/data/base/messages/prox3c.json new file mode 100644 index 00000000000..d174cf694e7 --- /dev/null +++ b/data/base/messages/prox3c.json @@ -0,0 +1,7 @@ +{ + "CM3C_BETATEAM": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 2, "x": 960, "y": 17344, "z": 0 }, + "CM3C_GAMMABASE": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 2, "x": 1600, "y": 23104, "z": 0 }, + "CM3C_BASE1": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 3776, "y": 17344, "z": 0 }, + "CM3C_BASE2": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 4800, "y": 21568, "z": 0 }, + "CM3C_BASE3": { "audio": "pcv393.ogg", "message": "ENEMYBASE_MSG", "type": 0, "x": 6592, "y": 22592, "z": 0 } +} diff --git a/data/base/messages/prox3c.txt b/data/base/messages/prox3c.txt deleted file mode 100644 index 1e1d8b5f699..00000000000 --- a/data/base/messages/prox3c.txt +++ /dev/null @@ -1,5 +0,0 @@ -CM3C_BETATEAM,1,ENEMYBASE_MSG,2,960,17344,0,0,2 -CM3C_GAMMABASE,1,ENEMYBASE_MSG,2,1600,23104,0,0,2 -CM3C_BASE1,1,ENEMYBASE_MSG,2,3776,17344,0,0,0 -CM3C_BASE2,1,ENEMYBASE_MSG,2,4800,21568,0,0,0 -CM3C_BASE3,1,ENEMYBASE_MSG,2,6592,22592,0,0,0 diff --git a/data/base/messages/proxdemo.json b/data/base/messages/proxdemo.json new file mode 100644 index 00000000000..6a4c3678529 --- /dev/null +++ b/data/base/messages/proxdemo.json @@ -0,0 +1,7 @@ +{ + "FAST_BASE1": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 3136, "y": 960, "z": 0 }, + "FAST_BASE2": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 5500, "y": 2000, "z": 0 }, + "FAST_BASE3": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 5184, "y": 6592, "z": 0 }, + "FAST_BASE4": { "audio": "pcv389.ogg", "message": "BARBASE_MSG", "type": 0, "x": 4400, "y": 2800, "z": 0 }, + "FAST_OBJ1": { "audio": "pcv448.ogg", "message": "RUINS_MSG", "type": 0, "x": 1728, "y": 1216, "z": 0 } +} diff --git a/data/base/messages/proxdemo.txt b/data/base/messages/proxdemo.txt deleted file mode 100644 index fa511e36d0f..00000000000 --- a/data/base/messages/proxdemo.txt +++ /dev/null @@ -1,5 +0,0 @@ -FAST_BASE1,1,BARBASE_MSG,2,3136,960,0,pcv389.ogg,0 -FAST_BASE2,1,BARBASE_MSG,2,5500,2000,0,pcv389.ogg,0 -FAST_BASE3,1,BARBASE_MSG,2,5184,6592,0,pcv389.ogg,0 -FAST_BASE4,1,BARBASE_MSG,2,4400,2800,0,pcv389.ogg,0 -FAST_OBJ1,1,RUINS_MSG,2,1728,1216,0,pcv448.ogg,0 diff --git a/data/base/messages/proxfast.txt b/data/base/messages/proxfast.txt deleted file mode 100644 index f27855c25a8..00000000000 --- a/data/base/messages/proxfast.txt +++ /dev/null @@ -1,4 +0,0 @@ -FAST_BASE1,1,BARBASE_MSG,2,3136,960,0,pcv389.ogg,0 -FAST_BASE2,1,BARBASE_MSG,2,5500,2000,0,pcv389.ogg,0 -FAST_BASE3,1,BARBASE_MSG,2,4672,5824,0,pcv389.ogg,0 -FAST_OBJ1,1,RUINS_MSG,2,1728,1216,0,pcv448.ogg,0 diff --git a/data/base/messages/proxtut.json b/data/base/messages/proxtut.json new file mode 100644 index 00000000000..f62ab2232c0 --- /dev/null +++ b/data/base/messages/proxtut.json @@ -0,0 +1,4 @@ +{ + "TUT_RES1": { "audio": "pcv376.ogg", "message": "POWRES_MSG", "type": 1, "x": 1216, "y": 1472, "z": 0 }, + "TUT_ART1": { "audio": 0, "message": "ART_MSG", "type": 2, "x": 448, "y": 2752, "z": 0 } +} diff --git a/data/base/messages/proxtut.txt b/data/base/messages/proxtut.txt deleted file mode 100644 index afe57bed70c..00000000000 --- a/data/base/messages/proxtut.txt +++ /dev/null @@ -1,2 +0,0 @@ -TUT_RES1,1,POWRES_MSG,2,1216,1472,0,pcv376.ogg,1 -TUT_ART1,1,ART_MSG,2,448,2752,0,0,2 diff --git a/data/base/script/campaign/cam1-1.js b/data/base/script/campaign/cam1-1.js index 2ea16a8cf85..3520e618241 100644 --- a/data/base/script/campaign/cam1-1.js +++ b/data/base/script/campaign/cam1-1.js @@ -124,7 +124,7 @@ function blowupNonOriginalStructures() //Mission setup stuff function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "SUB_1_2S", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.alpha4.pre, { area: "RTLZ", message: "C1-1_LZ", reinforcements: -1, //No reinforcements diff --git a/data/base/script/campaign/cam1-1s.js b/data/base/script/campaign/cam1-1s.js index 98ee168c705..3b708984a0e 100644 --- a/data/base/script/campaign/cam1-1s.js +++ b/data/base/script/campaign/cam1-1s.js @@ -65,7 +65,7 @@ function eventStartLevel() centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime((tweakOptions.classicTimers) ? -1 : camChangeOnDiff(camMinutesToSeconds(10))); // 10 min for building module. - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_1"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.alpha3.offWorld); cheat = false; powModVideoPlayed = false; diff --git a/data/base/script/campaign/cam1-2.js b/data/base/script/campaign/cam1-2.js index bc4ce07f74c..d8d83f77fcd 100644 --- a/data/base/script/campaign/cam1-2.js +++ b/data/base/script/campaign/cam1-2.js @@ -61,7 +61,7 @@ function enableWestFactory() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "SUB_1_3S", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.alpha5.pre, { area: "RTLZ", message: "C1-2_LZ", reinforcements: 60, diff --git a/data/base/script/campaign/cam1-2s.js b/data/base/script/campaign/cam1-2s.js index 5a83a52616d..dcd82c6e5f4 100644 --- a/data/base/script/campaign/cam1-2s.js +++ b/data/base/script/campaign/cam1-2s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camMinutesToSeconds(30))); camPlayVideos({video: "SB1_2_MSG", type: CAMP_MSG}); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_2"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.alpha4.offWorld); } diff --git a/data/base/script/campaign/cam1-3.js b/data/base/script/campaign/cam1-3.js index 0a17504ed75..4272782616c 100644 --- a/data/base/script/campaign/cam1-3.js +++ b/data/base/script/campaign/cam1-3.js @@ -150,7 +150,7 @@ function eventAttacked(victim, attacker) { function enableReinforcements() { playSound(cam_sounds.reinforcementsAreAvailable); - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM_1C", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.alpha6, { area: "RTLZ", message: "C1-3_LZ", reinforcements: camMinutesToSeconds(2), // changes! @@ -229,7 +229,7 @@ function blowupSouthScavengerBase() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM_1C", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.alpha6, { area: "RTLZ", message: "C1-3_LZ", reinforcements: -1, // will override later @@ -313,7 +313,7 @@ function eventStartLevel() }, "ScavBaseGroupSouth": { cleanup: "SouthScavBase", - detectMsg: "C1-3_OBJ2", + detectMsg: "C1-3_BASE3", detectSnd: cam_sounds.baseDetection.scavengerBaseDetected, eliminateSnd: cam_sounds.baseElimination.scavengerBaseEradicated }, diff --git a/data/base/script/campaign/cam1-3s.js b/data/base/script/campaign/cam1-3s.js index 5ff1d9faa05..9e1813b375f 100644 --- a/data/base/script/campaign/cam1-3s.js +++ b/data/base/script/campaign/cam1-3s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos({video: "SB1_3_UPDATE", type: CAMP_MSG}); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_3"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.alpha5.offWorld); } diff --git a/data/base/script/campaign/cam1-4a.js b/data/base/script/campaign/cam1-4a.js index 0e082d15e79..70b30218b5c 100644 --- a/data/base/script/campaign/cam1-4a.js +++ b/data/base/script/campaign/cam1-4a.js @@ -65,7 +65,7 @@ camAreaEvent("LandingZoneTrigger", function() // Give extra 40 minutes. setMissionTime(camChangeOnDiff(camMinutesToSeconds((tweakOptions.classicTimers) ? 30 : 40)) + getMissionTime()); - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "SUB_1_5S", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.alpha9.pre, { area: "RTLZ", message: "C1-4_LZ", reinforcements: camMinutesToSeconds(1.5), // changes! @@ -115,7 +115,7 @@ function buildDefenses() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "SUB_1_5S", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.alpha9.pre, { area: "RTLZ", message: "C1-4_LZ", reinforcements: -1, // will override later @@ -222,7 +222,7 @@ function eventStartLevel() groupSize: 4, maxSize: 6, throttle: camChangeOnDiff(camSecondsToMilliseconds(50)), - templates: [ cTempl.npmrl, cTempl.nphmg, cTempl.npsbb, cTempl.npmor ] + templates: (!camClassicMode()) ? [ cTempl.npmrl, cTempl.nphmg, cTempl.npsbb, cTempl.npmorb ] : [ cTempl.npmrl, cTempl.nphmg, cTempl.npsbb, cTempl.npmor ] }, }); diff --git a/data/base/script/campaign/cam1-4as.js b/data/base/script/campaign/cam1-4as.js index 7772c9f6e86..4df1af23838 100644 --- a/data/base/script/campaign/cam1-4as.js +++ b/data/base/script/campaign/cam1-4as.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camMinutesToSeconds(30))); camPlayVideos({video: "SB1_4_MSG", type: MISS_MSG}); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_4A"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.alpha8.offWorld); } diff --git a/data/base/script/campaign/cam1-5.js b/data/base/script/campaign/cam1-5.js index af72e460be6..cdaae21c610 100644 --- a/data/base/script/campaign/cam1-5.js +++ b/data/base/script/campaign/cam1-5.js @@ -36,19 +36,19 @@ var useHeavyReinforcement; function getDroidsForNPLZ(args) { let lightAttackerLimit = 8; - let heavyAttackerLimit = 3; + let heavyAttackerLimit = (camClassicMode()) ? 3 : 6; let unitTemplates; const list = []; if (difficulty === HARD) { lightAttackerLimit = 9; - heavyAttackerLimit = 4; + heavyAttackerLimit = (camClassicMode()) ? 4 : 7; } else if (difficulty === INSANE) { lightAttackerLimit = 10; - heavyAttackerLimit = 5; + heavyAttackerLimit = (camClassicMode()) ? 5 : 8; } if (useHeavyReinforcement) @@ -59,7 +59,7 @@ function getDroidsForNPLZ(args) } else { - const artillery = [cTempl.npmor]; + const artillery = (!camClassicMode()) ? [cTempl.npmorb] : [cTempl.npmor]; const other = [cTempl.npmmct]; if (camRand(2) > 0) { @@ -190,7 +190,7 @@ function camEnemyBaseEliminated_NPBaseGroup() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM_1A-C", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.alpha10, { area: "RTLZ", message: "C1-5_LZ", reinforcements: camMinutesToSeconds(3), @@ -288,7 +288,7 @@ function eventStartLevel() order: CAM_ORDER_ATTACK, groupSize: 4, throttle: camChangeOnDiff(camSecondsToMilliseconds(50)), - templates: (!camClassicMode()) ? [ cTempl.npmor, cTempl.npsens, cTempl.nphmgt ] : [ cTempl.npmor, cTempl.npsens, cTempl.npsbb, cTempl.nphmg ], + templates: (!camClassicMode()) ? [ cTempl.npmorb, cTempl.npsens, cTempl.nphmgt ] : [ cTempl.npmor, cTempl.npsens, cTempl.npsbb, cTempl.nphmg ], data: { regroup: false, repair: 40, diff --git a/data/base/script/campaign/cam1-5s.js b/data/base/script/campaign/cam1-5s.js index 65632d9a34c..7452c22f1db 100644 --- a/data/base/script/campaign/cam1-5s.js +++ b/data/base/script/campaign/cam1-5s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos({video: "SB1_5_MSG", type: MISS_MSG}); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_5"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.alpha9.offWorld); } diff --git a/data/base/script/campaign/cam1-7.js b/data/base/script/campaign/cam1-7.js index a155c0db9d0..598f17c3669 100644 --- a/data/base/script/campaign/cam1-7.js +++ b/data/base/script/campaign/cam1-7.js @@ -31,6 +31,7 @@ const mis_newParadigmResClassic = [ const mis_scavengerResClassic = [ "R-Wpn-MG-Damage03", "R-Wpn-Rocket-Damage02" ]; +const MIS_NEW_ARTI_LABEL = "newArtiLabel"; //Label for the picked-up artifact once dropped. var artiGroup; //Droids that take the artifact var enemyHasArtifact; //Do they have the artifact var enemyStoleArtifact; //Reached the LZ with the artifact @@ -109,20 +110,18 @@ function eventGroupLoss(obj, group, newsize) { if (obj.id === droidWithArtiID) { + camDeleteArtifact("artifact1", false); //Clear original map-placed artifact if found. + //Setup the new artifact. const acrate = addFeature(CAM_ARTIFACT_STAT, obj.x, obj.y); - addLabel(acrate, "newArtiLabel"); + addLabel(acrate, MIS_NEW_ARTI_LABEL); if (camClassicMode()) { - camSetArtifacts({ - "newArtiLabel": { tech: "R-Wpn-Cannon3Mk1" } - }); + camAddArtifact(MIS_NEW_ARTI_LABEL, "R-Wpn-Cannon3Mk1"); } else { - camSetArtifacts({ - "newArtiLabel": { tech: ["R-Wpn-Cannon3Mk1", "R-Wpn-RocketSlow-Damage03"] } - }); + camAddArtifact(MIS_NEW_ARTI_LABEL, ["R-Wpn-Cannon3Mk1", "R-Wpn-RocketSlow-Damage03"]); } droidWithArtiID = undefined; @@ -134,7 +133,7 @@ function eventGroupLoss(obj, group, newsize) function enemyCanTakeArtifact(label) { - return label.indexOf("newArtiLabel") !== -1 || label.indexOf("artifactLocation") !== -1; + return label.indexOf(MIS_NEW_ARTI_LABEL) !== -1 || label.indexOf("artifact1") !== -1; } //Moves some New Paradigm forces to the artifact @@ -273,7 +272,7 @@ function eventStartLevel() startTransporterEntry(tEnt.x, tEnt.y, CAM_HUMAN_PLAYER); setTransporterExit(tExt.x, tExt.y, CAM_HUMAN_PLAYER); - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "SUB_1_DS", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.alpha12.pre, { area: "RTLZ", message: "C1-7_LZ", reinforcements: camMinutesToSeconds(1), @@ -284,16 +283,13 @@ function eventStartLevel() //Make sure the New Paradigm and Scavs are allies setAlliance(CAM_NEW_PARADIGM, CAM_SCAV_7, true); - //Get rid of the already existing crate and replace with another - camSafeRemoveObject("artifact1", false); - if (camClassicMode()) { camClassicResearch(mis_newParadigmResClassic, CAM_NEW_PARADIGM); camClassicResearch(mis_scavengerResClassic, CAM_SCAV_7); camSetArtifacts({ - "artifactLocation": { tech: "R-Wpn-Cannon3Mk1" }, + "artifact1": { tech: "R-Wpn-Cannon3Mk1" }, }); } else @@ -316,7 +312,7 @@ function eventStartLevel() } camSetArtifacts({ - "artifactLocation": { tech: ["R-Wpn-Cannon3Mk1", "R-Wpn-RocketSlow-Damage03"] }, + "artifact1": { tech: ["R-Wpn-Cannon3Mk1", "R-Wpn-RocketSlow-Damage03"] }, }); } diff --git a/data/base/script/campaign/cam1-7s.js b/data/base/script/campaign/cam1-7s.js index 9c8d902a075..7e5fbafd540 100644 --- a/data/base/script/campaign/cam1-7s.js +++ b/data/base/script/campaign/cam1-7s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camMinutesToSeconds(30))); camPlayVideos([{video: "SB1_7_MSG", type: CAMP_MSG}, {video: "SB1_7_MSG2", type: MISS_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_7"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.alpha11.offWorld); } diff --git a/data/base/script/campaign/cam1-d.js b/data/base/script/campaign/cam1-d.js index b4f70cb7560..c139e9d4f33 100644 --- a/data/base/script/campaign/cam1-d.js +++ b/data/base/script/campaign/cam1-d.js @@ -68,11 +68,19 @@ function transportBaseSetup() function getDroidsForNPLZ() { - const LIM = 8; //Last alpha mission always has 8 transport units + let lim = 8; + if (difficulty === HARD) + { + lim = 9; + } + else if (difficulty >= INSANE) + { + lim = 10; + } const templates = [ cTempl.nphct, cTempl.nphct, cTempl.npmorb, cTempl.npmorb, cTempl.npsbb ]; const droids = []; - for (let i = 0; i < LIM; ++i) + for (let i = 0; i < lim; ++i) { droids.push(templates[camRand(templates.length)]); } @@ -149,7 +157,7 @@ function setupPatrols() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM_1END", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.alphaEnd, { area: "RTLZ", message: "C1D_LZ", reinforcements: camMinutesToSeconds(2), @@ -165,10 +173,8 @@ function eventStartLevel() startTransporterEntry(tEnt.x, tEnt.y, CAM_HUMAN_PLAYER); setTransporterExit(tExt.x, tExt.y, CAM_HUMAN_PLAYER); - //Get rid of the already existing crate and replace with another - camSafeRemoveObject("artifact1", false); camSetArtifacts({ - "artifactLocation": { tech: "R-Vehicle-Prop-Hover" }, //SE base + "artifact1": { tech: "R-Vehicle-Prop-Hover" }, //SE base "NPFactoryW": { tech: "R-Vehicle-Metals03" }, //West factory "NPFactoryNE": { tech: "R-Vehicle-Body12" }, //Main base factory }); diff --git a/data/base/script/campaign/cam1-ds.js b/data/base/script/campaign/cam1-ds.js index 3aad4632830..3fee26055ec 100644 --- a/data/base/script/campaign/cam1-ds.js +++ b/data/base/script/campaign/cam1-ds.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(2))); camPlayVideos([{video: "MB1D_MSG", type: CAMP_MSG}, {video: "MB1D_MSG2", type: MISS_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_1_D"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.alpha12.offWorld); } diff --git a/data/base/script/campaign/cam1a-c.js b/data/base/script/campaign/cam1a-c.js index 35a8b82aec0..ca530612c46 100644 --- a/data/base/script/campaign/cam1a-c.js +++ b/data/base/script/campaign/cam1a-c.js @@ -87,9 +87,10 @@ function sendTransport() const position = camMakePos(mis_landingZoneList[index]); switchLZ += 1; - // (2 or 3 or 4) pairs of each droid template. + // (2, 3, 4, or 5) pairs of each droid template. // This emulates wzcam's droid count distribution. - const COUNT = [ 2, 3, 4, 4, 4, 4, 4, 4, 4 ][camRand(9)]; + const unitDistribution = ((camClassicMode()) ? [2, 3, 4, 4, 4, 4, 4, 4, 4] : [4, 4, 4, 5, 5]); + const COUNT = unitDistribution[camRand(unitDistribution.length)]; const templates = [ cTempl.npcybc, cTempl.npcybf, cTempl.npcybm ]; @@ -98,8 +99,8 @@ function sendTransport() { const t = templates[camRand(templates.length)]; // two droids of each template - droids[droids.length] = t; - droids[droids.length] = t; + droids.push(t); + droids.push(t); } camSendReinforcement(CAM_NEW_PARADIGM, position, droids, CAM_REINFORCE_TRANSPORT, { @@ -145,7 +146,7 @@ function eventStartLevel() { camSetExtraObjectiveMessage(_("Destroy all New Paradigm reinforcements")); - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "SUB_1_7S", { + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.alpha11.pre, { callback: "extraVictoryCondition" }); diff --git a/data/base/script/campaign/cam1a.js b/data/base/script/campaign/cam1a.js index d93723fea72..6028f2716de 100644 --- a/data/base/script/campaign/cam1a.js +++ b/data/base/script/campaign/cam1a.js @@ -1,6 +1,7 @@ include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); +const GUIDE_STRUCT_BUILT_DELAY_TIME = 100; const mis_playerRes = [ "R-Wpn-MG1Mk1", "R-Vehicle-Body01", "R-Sys-Spade1Mk1", "R-Vehicle-Prop-Wheels", ]; @@ -11,6 +12,34 @@ const mis_scavengerRes = [ // CLASSIC: No research. +// Handlers for guide topics + +function cam1A_doAddHQBuiltTopics() +{ + addGuideTopic("wz2100::structures::factory"); + addGuideTopic("wz2100::units::designing", SHOWTOPIC_FIRSTADD); +} + +function cam1A_doAddFactoryBuiltTopics() +{ + addGuideTopic("wz2100::units::designing"); + addGuideTopic("wz2100::structures::rallypoint"); + addGuideTopic("wz2100::structures::factory"); + addGuideTopic("wz2100::units::building", SHOWTOPIC_FIRSTADD); +} + +function cam1A_doAddResearchFacilityBuiltTopics() +{ + addGuideTopic("wz2100::structures::researchfacility", SHOWTOPIC_FIRSTADD); +} + +function cam1A_doAddOilDerrickBuiltTopics() +{ + addGuideTopic("wz2100::general::power"); + addGuideTopic("wz2100::structures::oilderrick"); + addGuideTopic("wz2100::structures::powergenerator", SHOWTOPIC_FIRSTADD); +} + // Player zero's droid enters area next to first oil patch. camAreaEvent("launchScavAttack", function(droid) { @@ -90,20 +119,39 @@ camAreaEvent("raidTrigger", function(droid) }); // Or, they built on base two's oil patch instead. Initiate a surprise attack. +// (Also handles queuing guide topics for structures built) function eventStructureBuilt(structure, droid) { - if (structure.player === CAM_HUMAN_PLAYER && structure.stattype === RESOURCE_EXTRACTOR) + if (structure.player === CAM_HUMAN_PLAYER) { - // Is it in the base two area? - const objs = enumArea("scavBase2Cleanup", CAM_HUMAN_PLAYER); - for (let i = 0, l = objs.length; i < l; ++i) + if (structure.stattype === FACTORY) + { + queue("cam1A_doAddFactoryBuiltTopics", GUIDE_STRUCT_BUILT_DELAY_TIME); + } + else if (structure.stattype === RESEARCH_LAB) + { + queue("cam1A_doAddResearchFacilityBuiltTopics", GUIDE_STRUCT_BUILT_DELAY_TIME); + } + else if (structure.stattype === RESOURCE_EXTRACTOR) { - const obj = objs[i]; - if (obj.type === STRUCTURE && obj.stattype === RESOURCE_EXTRACTOR) + // Is it in the base two area? + const objs = enumArea("scavBase2Cleanup", CAM_HUMAN_PLAYER); + for (let i = 0, l = objs.length; i < l; ++i) { - camCallOnce("raidAttack"); - break; + const obj = objs[i]; + if (obj.type === STRUCTURE && obj.stattype === RESOURCE_EXTRACTOR) + { + camCallOnce("raidAttack"); + break; + } } + + // Add the oil derrick topic + queue("cam1A_doAddOilDerrickBuiltTopics", GUIDE_STRUCT_BUILT_DELAY_TIME); + } + else if (structure.stattype === HQ) + { + queue("cam1A_doAddHQBuiltTopics", GUIDE_STRUCT_BUILT_DELAY_TIME); } } } @@ -137,13 +185,38 @@ function enableBaseStructures() } } +function cam1A_doNeedPowerTopics() +{ + // inform the user about power (and the need to build an oil derrick) + addGuideTopic("wz2100::structures::oilderrick"); + addGuideTopic("wz2100::general::power", SHOWTOPIC_FIRSTADD); +} + +function eventDroidBuilt(droid, structure) +{ + if (!camDef(structure)) // "clone wars" cheat + { + return; + } + if (droid.player === CAM_HUMAN_PLAYER) + { + // inform the user about power (and the need to build an oil derrick) + camCallOnce("cam1A_doNeedPowerTopics"); + } +} + +function doAddHQGuideTopic() +{ + addGuideTopic("wz2100::structures::hq", SHOWTOPIC_FIRSTADD); +} + function eventStartLevel() { const PLAYER_POWER = 1300; const startPos = getObject("startPosition"); const lz = getObject("landingZone"); - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "CAM_1B"); + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.alpha2); centreView(startPos.x, startPos.y); setNoGoArea(lz.x, lz.y, lz.x2, lz.y2, CAM_HUMAN_PLAYER); @@ -280,4 +353,6 @@ function eventStartLevel() templates: [ cTempl.bjeep, cTempl.bloke, cTempl.trike, cTempl.bloke ] }, }); + + queue("doAddHQGuideTopic", camSecondsToMilliseconds(3)); } diff --git a/data/base/script/campaign/cam1b.js b/data/base/script/campaign/cam1b.js index 6eb1f533024..64eacc01670 100644 --- a/data/base/script/campaign/cam1b.js +++ b/data/base/script/campaign/cam1b.js @@ -73,7 +73,7 @@ camAreaEvent("NPSensorRemove", function(droid) function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "SUB_1_1S"); + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.alpha3.pre); const startPos = getObject("startPosition"); const lz = getObject("landingZone"); centreView(startPos.x, startPos.y); @@ -134,7 +134,7 @@ function eventStartLevel() }, "base3group": { cleanup: "enemybase3", - detectMsg: "C1B_OBJ1", + detectMsg: "C1B_BASE3", detectSnd: cam_sounds.baseDetection.scavengerOutpostDetected, eliminateSnd: cam_sounds.baseElimination.scavengerOutpostEradicated, }, diff --git a/data/base/script/campaign/cam1c.js b/data/base/script/campaign/cam1c.js index 0b4250e2352..b4cbf2ff169 100644 --- a/data/base/script/campaign/cam1c.js +++ b/data/base/script/campaign/cam1c.js @@ -186,7 +186,7 @@ camAreaEvent("NPLZ2Trigger", function() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "CAM_1CA"); + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.alpha7); const startPos = getObject("startPosition"); const lz = getObject("landingZone"); centreView(startPos.x, startPos.y); diff --git a/data/base/script/campaign/cam1ca.js b/data/base/script/campaign/cam1ca.js index 8d186b1cc9a..b05c73f251a 100644 --- a/data/base/script/campaign/cam1ca.js +++ b/data/base/script/campaign/cam1ca.js @@ -99,9 +99,10 @@ function sendTransport() lastLZ = picked.idx; const pos = camMakePos(picked.label); - // (2 or 3 or 4) pairs of each droid template. + // (2, 3, 4, or 5) pairs of each droid template. // This emulates wzcam's droid count distribution. - const COUNT = [ 2, 3, 4, 4, 4, 4, 4, 4, 4 ][camRand(9)]; + const unitDistribution = ((camClassicMode()) ? [2, 3, 4, 4, 4, 4, 4, 4, 4] : [4, 4, 4, 5, 5]); + const COUNT = unitDistribution[camRand(unitDistribution.length)]; let templates; if (lastHeavy) @@ -128,8 +129,8 @@ function sendTransport() { const t = templates[camRand(templates.length)]; // two droids of each template - droids[droids.length] = t; - droids[droids.length] = t; + droids.push(t); + droids.push(t); } camSendReinforcement(CAM_NEW_PARADIGM, pos, droids, CAM_REINFORCE_TRANSPORT, { @@ -161,7 +162,7 @@ function eventStartLevel() totalTransportLoads = 0; blipActive = false; - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "SUB_1_4AS", { + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.alpha8.pre, { callback: "extraVictoryCondition" }); const startPos = getObject("startPosition"); diff --git a/data/base/script/campaign/cam1end.js b/data/base/script/campaign/cam1end.js index 4c2ab79313f..f0c4dfa0050 100644 --- a/data/base/script/campaign/cam1end.js +++ b/data/base/script/campaign/cam1end.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camMinutesToSeconds((tweakOptions.classicTimers) ? 10 : 15)); camPlayVideos([{video: "CAM1_OUT", type: CAMP_MSG}, {video: "CAM1_OUT2", type: CAMP_MSG}, {video: "CAM2_BRIEF", type: CAMP_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "CAM_2A"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.beta1); } diff --git a/data/base/script/campaign/cam2-1s.js b/data/base/script/campaign/cam2-1s.js index 2f6c6d9c484..5906a9e4ee1 100644 --- a/data/base/script/campaign/cam2-1s.js +++ b/data/base/script/campaign/cam2-1s.js @@ -9,7 +9,7 @@ const mis_Labels = { function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_1"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.beta2.offWorld); camSetupTransporter(mis_Labels.trPlace.x, mis_Labels.trPlace.y, mis_Labels.trExit.x, mis_Labels.trExit.y); centreView(mis_Labels.startPos.x, mis_Labels.startPos.y); setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); diff --git a/data/base/script/campaign/cam2-1x.js b/data/base/script/campaign/cam2-1x.js index 6d1a50fc364..d015604d533 100644 --- a/data/base/script/campaign/cam2-1x.js +++ b/data/base/script/campaign/cam2-1x.js @@ -83,7 +83,7 @@ function setupCyborgGroups() function setCrashedTeamExp() { - const DROID_EXP = 32; + const DROID_EXP = camGetRankThreshold("professional"); const droids = enumDroid(MIS_TRANSPORT_TEAM_PLAYER).filter((dr) => ( !camIsSystemDroid(dr) && !camIsTransporter(dr) )); @@ -115,7 +115,7 @@ function eventStartLevel() { camSetExtraObjectiveMessage(_("Locate and rescue your units from the shot down transporter")); - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM_2B", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.beta3, { area: "RTLZ", message: "C21_LZ", reinforcements: -1, diff --git a/data/base/script/campaign/cam2-2.js b/data/base/script/campaign/cam2-2.js index 0c63fa20e00..0efe7d0216c 100644 --- a/data/base/script/campaign/cam2-2.js +++ b/data/base/script/campaign/cam2-2.js @@ -133,7 +133,12 @@ function vtolAttack() if (camClassicMode()) { const list = [cTempl.colatv, cTempl.colatv]; - camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPoint", "vtolRemovePoint", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "COCommandCenter"); + const ext = { + limit: [5, 5], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_THE_COLLECTIVE, "vtolAppearPoint", "vtolRemovePoint", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "COCommandCenter", ext); } else { @@ -198,7 +203,7 @@ function eventAttacked(victim, attacker) function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM_2C",{ + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.beta5,{ area: "RTLZ", message: "C22_LZ", reinforcements: camMinutesToSeconds(3), diff --git a/data/base/script/campaign/cam2-2s.js b/data/base/script/campaign/cam2-2s.js index cb2998c3b97..9ae99d3fae3 100644 --- a/data/base/script/campaign/cam2-2s.js +++ b/data/base/script/campaign/cam2-2s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camMinutesToSeconds(70))); camPlayVideos([{video: "MB2_2_MSG", type: CAMP_MSG}, {video:"MB2_2_MSG2", type: CAMP_MSG}, {video: "MB2_2_MSG3", type: MISS_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_2"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.beta4.offWorld); } diff --git a/data/base/script/campaign/cam2-5.js b/data/base/script/campaign/cam2-5.js index d44e23a23f7..7d624ee2aa2 100644 --- a/data/base/script/campaign/cam2-5.js +++ b/data/base/script/campaign/cam2-5.js @@ -11,7 +11,7 @@ const mis_collectiveRes = [ "R-Wpn-Rocket-ROF03", "R-Wpn-RocketSlow-Accuracy03", "R-Wpn-RocketSlow-Damage05", "R-Sys-Sensor-Upgrade01", "R-Wpn-RocketSlow-ROF02", "R-Wpn-Howitzer-ROF01", "R-Wpn-Howitzer-Damage07", "R-Cyborg-Armor-Heat01", "R-Vehicle-Armor-Heat01", - "R-Wpn-Bomb-Damage01", "R-Wpn-AAGun-Damage03", "R-Wpn-AAGun-ROF03", + "R-Wpn-Bomb-Damage01", "R-Wpn-AAGun-Damage02", "R-Wpn-AAGun-ROF03", "R-Wpn-AAGun-Accuracy01", "R-Struc-VTOLPad-Upgrade02" ]; const mis_collectiveResClassic = [ @@ -102,7 +102,7 @@ function enableFactories() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "SUB_2DS",{ + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.beta7.pre,{ area: "RTLZ", message: "C25_LZ", reinforcements: camMinutesToSeconds(3) @@ -138,6 +138,7 @@ function eventStartLevel() camUpgradeOnMapTemplates(cTempl.npcybf, cTempl.cocybth, CAM_THE_COLLECTIVE); camUpgradeOnMapTemplates(cTempl.npcybc, cTempl.cocybsn, CAM_THE_COLLECTIVE); camUpgradeOnMapTemplates(cTempl.npcybr, cTempl.cocybtk, CAM_THE_COLLECTIVE); + camUpgradeOnMapTemplates(cTempl.npcybm, cTempl.cocybag, CAM_THE_COLLECTIVE); camSetArtifacts({ "NuclearReactor": { tech: "R-Struc-Power-Upgrade01" }, @@ -173,7 +174,7 @@ function eventStartLevel() repair: 20, count: -1, }, - templates: (!camClassicMode()) ? [cTempl.commrp, cTempl.comatt, cTempl.comhpv] : [cTempl.commc, cTempl.comatt, cTempl.comhpv] + templates: (!camClassicMode()) ? [cTempl.commrp, cTempl.comhltat, cTempl.comhpv] : [cTempl.commc, cTempl.comatt, cTempl.comhpv] }, "COCyborgFactoryL": { assembly: "COCyborgFactoryLAssembly", diff --git a/data/base/script/campaign/cam2-5s.js b/data/base/script/campaign/cam2-5s.js index c9b07b99aba..b7e680dc17c 100644 --- a/data/base/script/campaign/cam2-5s.js +++ b/data/base/script/campaign/cam2-5s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos([{video: "MB2_5_MSG", type: CAMP_MSG}, {video: "MB2_5_MSG2", type: MISS_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_5"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.beta6.offWorld); } diff --git a/data/base/script/campaign/cam2-6.js b/data/base/script/campaign/cam2-6.js index 7732f42b987..010412668a6 100644 --- a/data/base/script/campaign/cam2-6.js +++ b/data/base/script/campaign/cam2-6.js @@ -2,7 +2,7 @@ include("script/campaign/libcampaign.js"); include("script/campaign/templates.js"); const mis_collectiveRes = [ - "R-Defense-WallUpgrade06", "R-Struc-Materials06", "R-Sys-Engineering02", + "R-Defense-WallUpgrade05", "R-Struc-Materials06", "R-Sys-Engineering02", "R-Vehicle-Engine05", "R-Vehicle-Metals05", "R-Cyborg-Metals05", "R-Wpn-Cannon-Accuracy02", "R-Wpn-Cannon-Damage05", "R-Wpn-Cannon-ROF02", "R-Wpn-Flamer-Damage06", "R-Wpn-Flamer-ROF03", "R-Wpn-MG-Damage07", @@ -123,7 +123,7 @@ function enableTimeBasedFactories() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "SUB_2_7S", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.beta9.pre, { area: "RTLZ", message: "C26_LZ", reinforcements: camMinutesToSeconds(3) @@ -155,6 +155,7 @@ function eventStartLevel() camUpgradeOnMapTemplates(cTempl.npcybf, cTempl.cocybth, CAM_THE_COLLECTIVE); camUpgradeOnMapTemplates(cTempl.npcybc, cTempl.cocybsn, CAM_THE_COLLECTIVE); camUpgradeOnMapTemplates(cTempl.npcybr, cTempl.cocybtk, CAM_THE_COLLECTIVE); + camUpgradeOnMapTemplates(cTempl.npcybm, cTempl.cocybag, CAM_THE_COLLECTIVE); camSetArtifacts({ "COCyborgFactory-Arti": { tech: "R-Wpn-Rocket07-Tank-Killer" }, diff --git a/data/base/script/campaign/cam2-6s.js b/data/base/script/campaign/cam2-6s.js index b75d7d440a9..5ce10debc96 100644 --- a/data/base/script/campaign/cam2-6s.js +++ b/data/base/script/campaign/cam2-6s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos([{video: "MB2_6_MSG", type: CAMP_MSG}, {video: "MB2_6_MSG2", type: CAMP_MSG}, {video: "MB2_6_MSG3", type: MISS_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_6"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.beta8.offWorld); } diff --git a/data/base/script/campaign/cam2-7.js b/data/base/script/campaign/cam2-7.js index 63ac6bedec0..a9fc91d2535 100644 --- a/data/base/script/campaign/cam2-7.js +++ b/data/base/script/campaign/cam2-7.js @@ -111,7 +111,7 @@ function truckDefense() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "SUB_2_8S", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.beta10.pre, { eliminateBases: true, area: "RTLZ", message: "C27_LZ", @@ -143,6 +143,7 @@ function eventStartLevel() camUpgradeOnMapTemplates(cTempl.npcybf, cTempl.cocybth, CAM_THE_COLLECTIVE); camUpgradeOnMapTemplates(cTempl.npcybc, cTempl.cocybsn, CAM_THE_COLLECTIVE); camUpgradeOnMapTemplates(cTempl.npcybr, cTempl.cocybtk, CAM_THE_COLLECTIVE); + camUpgradeOnMapTemplates(cTempl.npcybm, cTempl.cocybag, CAM_THE_COLLECTIVE); camSetArtifacts({ "COHeavyFac-Arti-b2": { tech: ["R-Wpn-Cannon5", "R-Wpn-MG-Damage08"] }, @@ -248,7 +249,7 @@ function eventStartLevel() regroup: false, count: -1, }, - templates: (!camClassicMode()) ? [cTempl.colagv, cTempl.commorv, cTempl.commorvt, cTempl.colhvat] : [cTempl.colagv, cTempl.commorv] + templates: (!camClassicMode()) ? [cTempl.colagv, cTempl.commorv, cTempl.commorvt, cTempl.colhvat, cTempl.comacv] : [cTempl.colagv, cTempl.commorv] }, }); diff --git a/data/base/script/campaign/cam2-7s.js b/data/base/script/campaign/cam2-7s.js index 951a9af2c84..e12075b19dc 100644 --- a/data/base/script/campaign/cam2-7s.js +++ b/data/base/script/campaign/cam2-7s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(1.5))); camPlayVideos([{video: "MB2_7_MSG", type: CAMP_MSG}, {video: "MB2_7_MSG2", type: MISS_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_7"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.beta9.offWorld); } diff --git a/data/base/script/campaign/cam2-8.js b/data/base/script/campaign/cam2-8.js index fad4c472280..169195da201 100644 --- a/data/base/script/campaign/cam2-8.js +++ b/data/base/script/campaign/cam2-8.js @@ -101,7 +101,7 @@ function truckDefense() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM_2END", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.betaEnd, { area: "RTLZ", reinforcements: camMinutesToSeconds(3), annihilate: true @@ -134,6 +134,7 @@ function eventStartLevel() camUpgradeOnMapTemplates(cTempl.npcybf, cTempl.cocybth, CAM_THE_COLLECTIVE); camUpgradeOnMapTemplates(cTempl.npcybc, cTempl.cocybsn, CAM_THE_COLLECTIVE); camUpgradeOnMapTemplates(cTempl.npcybr, cTempl.cocybtk, CAM_THE_COLLECTIVE); + camUpgradeOnMapTemplates(cTempl.npcybm, cTempl.cocybag, CAM_THE_COLLECTIVE); //New AC Tiger tracked units for Hard and Insane difficulty if (difficulty >= HARD) diff --git a/data/base/script/campaign/cam2-8s.js b/data/base/script/campaign/cam2-8s.js index 8571020e002..c87684ac679 100644 --- a/data/base/script/campaign/cam2-8s.js +++ b/data/base/script/campaign/cam2-8s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos([{video: "MB2_8_MSG", type: CAMP_MSG}, {video: "MB2_8_MSG2", type: MISS_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2_8"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.beta10.offWorld); } diff --git a/data/base/script/campaign/cam2-a.js b/data/base/script/campaign/cam2-a.js index c8552e0cada..95070b742de 100644 --- a/data/base/script/campaign/cam2-a.js +++ b/data/base/script/campaign/cam2-a.js @@ -264,7 +264,7 @@ function cam2Setup() camCompleteRequiredResearch(mis_alphaResearchNewClassic, CAM_HUMAN_PLAYER); camCompleteRequiredResearch(mis_playerResBetaClassic, CAM_HUMAN_PLAYER); - if (tweakOptions.camclassic_Balance32) + if (tweakOptions.camClassic_balance32) { camClassicResearch(mis_betaStartingResearchClassic, CAM_HUMAN_PLAYER); completeResearch("CAM2RESEARCH-UNDO", CAM_HUMAN_PLAYER); @@ -272,7 +272,7 @@ function cam2Setup() } else { - completeResearch("CAM2RESEARCH-UNDO-Rockets", CAM_HUMAN_PLAYER); + completeResearch("CAM2RESEARCH-UNDO-Rockets", CAM_HUMAN_PLAYER); camCompleteRequiredResearch(mis_betaStartingResearchClassic, CAM_HUMAN_PLAYER); camCompleteRequiredResearch(mis_alphaResearchNewClassic, CAM_THE_COLLECTIVE); camCompleteRequiredResearch(collectiveResClassic, CAM_THE_COLLECTIVE); @@ -302,7 +302,7 @@ function cam2Setup() //Get some higher rank droids. function setUnitRank(transport) { - const droidExp = [128, 64, 32, 16]; + const ranks = ["elite", "veteran", "professional", "regular"]; let droids; let mapRun = false; @@ -322,8 +322,8 @@ function setUnitRank(transport) const droid = droids[i]; if (droid.droidType !== DROID_CONSTRUCT && droid.droidType !== DROID_REPAIR) { - const MOD = (droid.droidType === DROID_COMMAND || droid.droidType === DROID_SENSOR) ? 2 : 1; - setDroidExperience(droid, MOD * droidExp[mapRun ? 0 : (transporterIndex - 1)]); + const USE_COMMAND_RANK = (droid.droidType === DROID_COMMAND || droid.droidType === DROID_SENSOR); + setDroidExperience(droid, camGetRankThreshold(ranks[mapRun ? 0 : (transporterIndex - 1)], USE_COMMAND_RANK)); } } } @@ -392,7 +392,7 @@ function eventStartLevel() const tEnt = getObject("transporterEntry"); const tExt = getObject("transporterExit"); - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "SUB_2_1S"); + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.beta2.pre); setReinforcementTime(LZ_COMPROMISED_TIME); centreView(startPos.x, startPos.y); diff --git a/data/base/script/campaign/cam2-b.js b/data/base/script/campaign/cam2-b.js index b9ec7d5a2d3..1bf44ebce75 100644 --- a/data/base/script/campaign/cam2-b.js +++ b/data/base/script/campaign/cam2-b.js @@ -162,7 +162,7 @@ function transferPower() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "SUB_2_2S"); + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.beta4.pre); const startPos = getObject("startPosition"); const lz = getObject("landingZone"); //player lz diff --git a/data/base/script/campaign/cam2-c.js b/data/base/script/campaign/cam2-c.js index f46fe7cf746..952db24ee61 100644 --- a/data/base/script/campaign/cam2-c.js +++ b/data/base/script/campaign/cam2-c.js @@ -15,7 +15,7 @@ const mis_collectiveRes = [ "R-Wpn-Rocket-ROF03", "R-Wpn-RocketSlow-Accuracy03", "R-Wpn-RocketSlow-Damage05", "R-Sys-Sensor-Upgrade01", "R-Wpn-RocketSlow-ROF01", "R-Wpn-Howitzer-ROF01", "R-Wpn-Howitzer-Damage07", "R-Cyborg-Armor-Heat01", "R-Vehicle-Armor-Heat01", - "R-Wpn-Bomb-Damage01", "R-Wpn-AAGun-Damage03", "R-Wpn-AAGun-ROF02", + "R-Wpn-Bomb-Damage01", "R-Wpn-AAGun-Damage02", "R-Wpn-AAGun-ROF02", "R-Wpn-AAGun-Accuracy01", "R-Struc-VTOLPad-Upgrade01" ]; const mis_collectiveResClassic = [ @@ -283,7 +283,7 @@ function extraVictoryCondition() function eventStartLevel() { - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "SUB_2_5S", { + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.beta6.pre, { callback: "extraVictoryCondition" }); @@ -409,7 +409,7 @@ function eventStartLevel() regroup: false, count: -1, }, - templates: [cTempl.commorv, cTempl.colagv] + templates: (!camClassicMode()) ? [cTempl.commorv, cTempl.cohcv, cTempl.commorv, cTempl.colpbv] : [cTempl.commorv, cTempl.colagv] }, "COVtolFacRight": { order: CAM_ORDER_ATTACK, @@ -419,7 +419,7 @@ function eventStartLevel() regroup: false, count: -1, }, - templates: [cTempl.colagv, cTempl.commorv] + templates: (!camClassicMode()) ? [cTempl.colagv, cTempl.commorv, cTempl.colatv, cTempl.commorv] : [cTempl.colagv, cTempl.commorv] }, }); diff --git a/data/base/script/campaign/cam2-d.js b/data/base/script/campaign/cam2-d.js index 4ed0456258c..d8bc6fd2c06 100644 --- a/data/base/script/campaign/cam2-d.js +++ b/data/base/script/campaign/cam2-d.js @@ -12,7 +12,7 @@ const mis_collectiveRes = [ "R-Wpn-Rocket-ROF03", "R-Wpn-RocketSlow-Accuracy03", "R-Wpn-RocketSlow-Damage05", "R-Sys-Sensor-Upgrade01", "R-Wpn-RocketSlow-ROF02", "R-Wpn-Howitzer-ROF02", "R-Wpn-Howitzer-Damage08", "R-Cyborg-Armor-Heat01", "R-Vehicle-Armor-Heat01", - "R-Wpn-Bomb-Damage02", "R-Wpn-AAGun-Damage03", "R-Wpn-AAGun-ROF03", + "R-Wpn-Bomb-Damage02", "R-Wpn-AAGun-Damage02", "R-Wpn-AAGun-ROF03", "R-Wpn-AAGun-Accuracy02", "R-Wpn-Howitzer-Accuracy01", "R-Struc-VTOLPad-Upgrade03", ]; const mis_collectiveResClassic = [ @@ -78,9 +78,9 @@ function vtolAttack() { if (camClassicMode()) { - const list = [cTempl.colatv]; + const list = [cTempl.colatv, cTempl.colatv]; const ext = { - limit: [2, 2], //paired with list array + limit: [5, 5], //paired with list array alternate: true, altIdx: 0 }; @@ -126,7 +126,7 @@ function eventStartLevel() { camSetExtraObjectiveMessage(_("Secure the Uplink from The Collective")); - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "SUB_2_6S", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.beta8.pre, { area: "RTLZ", message: "C2D_LZ", reinforcements: camMinutesToSeconds(5), @@ -162,6 +162,7 @@ function eventStartLevel() camUpgradeOnMapTemplates(cTempl.npcybf, cTempl.cocybth, CAM_THE_COLLECTIVE); camUpgradeOnMapTemplates(cTempl.npcybc, cTempl.cocybsn, CAM_THE_COLLECTIVE); camUpgradeOnMapTemplates(cTempl.npcybr, cTempl.cocybtk, CAM_THE_COLLECTIVE); + camUpgradeOnMapTemplates(cTempl.npcybm, cTempl.cocybag, CAM_THE_COLLECTIVE); camSetArtifacts({ "COCommandCenter": { tech: "R-Struc-VTOLPad-Upgrade01" }, diff --git a/data/base/script/campaign/cam2-ds.js b/data/base/script/campaign/cam2-ds.js index 2445a0544f7..b345cc5dc8f 100644 --- a/data/base/script/campaign/cam2-ds.js +++ b/data/base/script/campaign/cam2-ds.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camMinutesToSeconds(75))); camPlayVideos([{video: "MB2_DI_MSG", type: MISS_MSG}, {video: "MB2_DI_MSG2", type: CAMP_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_2D"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.beta7.offWorld); } diff --git a/data/base/script/campaign/cam2-end.js b/data/base/script/campaign/cam2-end.js index de699618e84..b55fcf9be39 100644 --- a/data/base/script/campaign/cam2-end.js +++ b/data/base/script/campaign/cam2-end.js @@ -140,7 +140,7 @@ function vtolAttack() } else { - list = [ cTempl.commorv, cTempl.commorv, cTempl.comhvat, cTempl.commorvt ]; + list = [ cTempl.commorv, cTempl.commorv, cTempl.comhvat, cTempl.commorvt, cTempl.comacv ]; } const extras = { @@ -260,7 +260,7 @@ function eventStartLevel() camSetExtraObjectiveMessage(_("Send off as many transporters as you can and bring at least one truck")); } - camSetStandardWinLossConditions(CAM_VICTORY_TIMEOUT, "CAM_3A", { + camSetStandardWinLossConditions(CAM_VICTORY_TIMEOUT, cam_levels.gamma1, { reinforcements: camMinutesToSeconds(7), //Duration the transport "leaves" map. callback: "checkIfLaunched" }); diff --git a/data/base/script/campaign/cam3-1.js b/data/base/script/campaign/cam3-1.js index 4b529a18391..35e4fde5bf7 100644 --- a/data/base/script/campaign/cam3-1.js +++ b/data/base/script/campaign/cam3-1.js @@ -26,6 +26,7 @@ const mis_nexusResClassic = [ ]; var launchInfo; var detonateInfo; +var allInValley; //Remove Nexus VTOL droids. camAreaEvent("vtolRemoveZone", function(droid) @@ -98,7 +99,12 @@ function vtolAttack() if (camClassicMode()) { const list = [cTempl.nxlscouv, cTempl.nxmtherv]; - camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter"); + const ext = { + limit: [2, 3], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter", ext); } else { @@ -165,10 +171,9 @@ function missileSilosDestroyed() //Nuclear missile destroys everything not in safe zone. function nukeAndCountSurvivors() { - //Avoid destroying the one base if the player opted not to destroy it themselves. - const nuked = enumArea(0, 0, mapWidth, mapHeight, ALL_PLAYERS, false).filter((obj) => ( - obj.type !== STRUCTURE || (obj.type === STRUCTURE && obj.group === null) - )); + // Remove the base in the rare event an auto-explosion triggers as we nuke the base here. + camSetEnemyBases({}); + const nuked = enumArea(0, 0, mapWidth, mapHeight, ALL_PLAYERS, false); const safeZone = enumArea("valleySafeZone", CAM_HUMAN_PLAYER, false); let foundUnit = false; @@ -270,6 +275,15 @@ function enableAllFactories() //For now just make sure we have all the droids in the canyon. function unitsInValley() { + if (!camAllArtifactsPickedUp()) + { + return; + } + if (allInValley) + { + return true; + } + const safeZone = enumArea("valleySafeZone", CAM_HUMAN_PLAYER, false).filter((obj) => ( obj.type === DROID )); @@ -281,6 +295,7 @@ function unitsInValley() { if (nukeAndCountSurvivors()) { + allInValley = true; return true; } else @@ -298,6 +313,7 @@ function eventStartLevel() const lz = getObject("landingZone"); const tEnt = getObject("transporterEntry"); const tExt = getObject("transporterExit"); + allInValley = false; //Time is in seconds. launchInfo = [ @@ -334,8 +350,9 @@ function eventStartLevel() {sound: cam_sounds.missile.countdown, time: 10}, ]; - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM_3B", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.gamma3, { area: "RTLZ", + playLzReminder: false, reinforcements: camMinutesToSeconds(3), callback: "unitsInValley" }); diff --git a/data/base/script/campaign/cam3-1s.js b/data/base/script/campaign/cam3-1s.js index a945c9ebc9d..e9adf57223c 100644 --- a/data/base/script/campaign/cam3-1s.js +++ b/data/base/script/campaign/cam3-1s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camMinutesToSeconds((tweakOptions.classicTimers) ? 70 : 75))); camPlayVideos([{video: "MB3_1A_MSG", type: CAMP_MSG}, {video: "MB3_1A_MSG2", type: MISS_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_3_1"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.gamma2.offWorld); } diff --git a/data/base/script/campaign/cam3-2.js b/data/base/script/campaign/cam3-2.js index 4c61f23c65c..0d7480b519e 100644 --- a/data/base/script/campaign/cam3-2.js +++ b/data/base/script/campaign/cam3-2.js @@ -76,7 +76,7 @@ camAreaEvent("phantomFacTrigger", function(droid) function setAlphaExp() { - const DROID_EXP = 512; //Hero rank. + const DROID_EXP = camGetRankThreshold("hero", true); //Hero Commander rank. const alphaDroids = enumArea("alphaPit", MIS_ALPHA_PLAYER, false).filter((obj) => ( obj.type === DROID )); @@ -96,7 +96,7 @@ function getAlphaUnitIDs() { alphaUnitIDs = []; const alphaDroids = enumArea("alphaPit", CAM_HUMAN_PLAYER, false).filter((obj) => ( - obj.type === DROID && obj.experience === 512 + obj.type === DROID && obj.experience > 0 )); for (let i = 0, l = alphaDroids.length; i < l; ++i) @@ -234,9 +234,9 @@ function vtolAttack() { if (camClassicMode()) { - const list = [cTempl.nxlscouv, cTempl.nxmtherv]; + const list = [cTempl.nxlscouv, cTempl.nxlscouv, cTempl.nxmtherv]; const ext = { - limit: [2, 4], //paired with list array + limit: [2, 2, 4], //paired with list array alternate: true, altIdx: 0 }; @@ -260,7 +260,7 @@ function vtolAttack() function enableReinforcements() { playSound(cam_sounds.reinforcementsAreAvailable); - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM3A-B", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.gamma5, { area: "RTLZ", message: "C32_LZ", reinforcements: camMinutesToSeconds(3), @@ -312,7 +312,7 @@ function eventStartLevel() const tExt = getObject("transporterExit"); startExtraLoss = false; - camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, "CAM3A-B", { + camSetStandardWinLossConditions(CAM_VICTORY_OFFWORLD, cam_levels.gamma5, { area: "RTLZ", message: "C32_LZ", reinforcements: -1, diff --git a/data/base/script/campaign/cam3-2s.js b/data/base/script/campaign/cam3-2s.js index a8f1981f9d0..945a9849934 100644 --- a/data/base/script/campaign/cam3-2s.js +++ b/data/base/script/campaign/cam3-2s.js @@ -14,5 +14,5 @@ function eventStartLevel() setNoGoArea(mis_Labels.lz.x, mis_Labels.lz.y, mis_Labels.lz.x2, mis_Labels.lz.y2, CAM_HUMAN_PLAYER); setMissionTime(camChangeOnDiff(camHoursToSeconds(1))); camPlayVideos([{video: "MB3_2_MSG", type: CAMP_MSG}, {video: "MB3_2_MSG2", type: MISS_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "SUB_3_2"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.gamma4.offWorld); } diff --git a/data/base/script/campaign/cam3-4.js b/data/base/script/campaign/cam3-4.js index ae94dd92cb9..e92adab5877 100644 --- a/data/base/script/campaign/cam3-4.js +++ b/data/base/script/campaign/cam3-4.js @@ -135,7 +135,10 @@ function destroyPlayerVtols() function activateNexus() { - camSetExtraObjectiveMessage(_("Destroy the Nexus HQ to disable the Nexus Intruder Program")); + const HINT_TIP = _("Destroy the Nexus HQ to disable the Nexus Intruder Program"); + const HINT_TIP_WARN = _("Warning: HQ shielded against VTOL attacks"); + const objectiveMessages = [HINT_TIP, HINT_TIP_WARN]; + camSetExtraObjectiveMessage(objectiveMessages); playSound(cam_sounds.nexus.synapticLinksActivated); camSetNexusState(true); setTimer("nexusHackFeature", camSecondsToMilliseconds((difficulty <= EASY) ? 20 : 10)); diff --git a/data/base/script/campaign/cam3-4s.js b/data/base/script/campaign/cam3-4s.js index 2042ac44052..51a3a703899 100644 --- a/data/base/script/campaign/cam3-4s.js +++ b/data/base/script/campaign/cam3-4s.js @@ -17,5 +17,5 @@ function eventStartLevel() setMissionTime(camMinutesToSeconds(30)); setPower(playerPower(CAM_HUMAN_PLAYER) + 50000, CAM_HUMAN_PLAYER); camPlayVideos([{video: "MB3_4_MSG", type: CAMP_MSG}, {video: "MB3_4_MSG2", type: MISS_MSG}]); - camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, "CAM_3_4"); + camSetStandardWinLossConditions(CAM_VICTORY_PRE_OFFWORLD, cam_levels.gammaEnd.offWorld); } diff --git a/data/base/script/campaign/cam3-a.js b/data/base/script/campaign/cam3-a.js index d2668954717..9f9847466b3 100644 --- a/data/base/script/campaign/cam3-a.js +++ b/data/base/script/campaign/cam3-a.js @@ -23,6 +23,7 @@ camAreaEvent("vtolRemoveZone", function(droid) //Order base three groups to do stuff and enable cyborg factories in the north camAreaEvent("northFactoryTrigger", function(droid) { + improveNexusAlloys(); camEnableFactory("NXcybFac-b3"); camEnableFactory("NXcybFac-b4"); @@ -45,20 +46,38 @@ camAreaEvent("northFactoryTrigger", function(droid) //Enable factories in the SW base camAreaEvent("westFactoryTrigger", function(droid) { - camEnableFactory("NXcybFac-b2-1"); - camEnableFactory("NXcybFac-b2-2"); - camEnableFactory("NXHvyFac-b2"); + camCallOnce("enableWestFactories"); +}); + +//Prevents VTOLs from flying over the west trigger +camAreaEvent("westFactoryVTOLTrigger", function(droid) +{ + camCallOnce("enableWestFactories"); }); //Enable all factories if the player tries to bypass a trigger area camAreaEvent ("middleTrigger", function(droid) { + improveNexusAlloys(); enableAllFactories(); }); +function enableWestFactories() +{ + improveNexusAlloys(); + camEnableFactory("NXcybFac-b2-1"); + camEnableFactory("NXcybFac-b2-2"); + camEnableFactory("NXHvyFac-b2"); +} + function setUnitRank(transport) { - const droidExp = [1024, 256, 128, 64]; //Can make Hero Commanders if recycled. + const droidExp = [ + camGetRankThreshold("hero", true), //Can make Hero Commanders if recycled. + camGetRankThreshold("special"), + camGetRankThreshold("elite"), + camGetRankThreshold("veteran") + ]; const droids = enumCargo(transport); for (let i = 0, len = droids.length; i < len; ++i) @@ -90,9 +109,6 @@ function enableAllFactories() { camEnableFactory(factoryNames[j]); } - - //If they go really fast, adapt the alloy research to come sooner - queue("improveNexusAlloys", camChangeOnDiff(camMinutesToMilliseconds(10))); } function truckDefense() @@ -204,8 +220,13 @@ function vtolAttack() { if (camClassicMode()) { - const list = [cTempl.nxlneedv, cTempl.nxlscouv, cTempl.nxmtherv]; - camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter"); + const list = [cTempl.nxlscouv, cTempl.nxmtherv, cTempl.nxlneedv, cTempl.nxlscouv]; + const ext = { + limit: [2, 4, 2, 2], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(5)), "NXCommandCenter", ext); } else { @@ -293,12 +314,13 @@ function cam3Setup() camCompleteRequiredResearch(mis_playerResBetaClassic, CAM_HUMAN_PLAYER); camCompleteRequiredResearch(mis_playerResGammaClassic, CAM_HUMAN_PLAYER); - if (tweakOptions.camclassic_Balance32) + if (tweakOptions.camClassic_balance32) { camClassicResearch(mis_gammaStartingResearchClassic, CAM_HUMAN_PLAYER); completeResearch("CAM2RESEARCH-UNDO", CAM_HUMAN_PLAYER); completeResearch("CAM3RESEARCH-UNDO", CAM_HUMAN_PLAYER); - //Nexus has no research in 3.2 + //Nexus only has auto-repair and the NavGunSensor for 3.2 + camClassicResearch(cam_nexusSpecialResearch, CAM_NEXUS); } else { @@ -351,7 +373,7 @@ function eventStartLevel() const tEnt = getObject("transporterEntry"); const tExt = getObject("transporterExit"); - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "SUB_3_1S"); + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.gamma2.pre); setMissionTime(camChangeOnDiff(camHoursToSeconds(2))); centreView(startPos.x, startPos.y); @@ -478,7 +500,7 @@ function eventStartLevel() setTimer("truckDefense", camChangeOnDiff(camMinutesToMilliseconds(4.5))); } - camPlayVideos([{video: "CAM3_INT", type: CAMP_MSG}, {video: "MB3A_MSG2", type: MISS_MSG}]); + camPlayVideos([{video: "MB3A_MSG", type: CAMP_MSG}, {video: "MB3A_MSG2", type: MISS_MSG}]); startedFromMenu = false; truckLocCounter = 0; diff --git a/data/base/script/campaign/cam3-ab.js b/data/base/script/campaign/cam3-ab.js index c6b36e60b49..0abc5596ecc 100644 --- a/data/base/script/campaign/cam3-ab.js +++ b/data/base/script/campaign/cam3-ab.js @@ -102,9 +102,9 @@ function vtolAttack() { if (camClassicMode()) { - const list = [cTempl.nxlscouv, cTempl.nxmtherv, cTempl.nxlscouv, cTempl.nxmheapv]; + const list = [cTempl.nxmheapv, cTempl.nxmheapv, cTempl.nxmtherv]; const ext = { - limit: [2, 4, 2, 4], //paired with list array + limit: [4, 4, 5], //paired with list array alternate: true, altIdx: 0 }; @@ -289,7 +289,7 @@ function eventStartLevel() const startPos = getObject("startPosition"); const lz = getObject("landingZone"); - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "CAM3C", { + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.gamma6, { callback: "resistanceResearched" }); diff --git a/data/base/script/campaign/cam3-ad1.js b/data/base/script/campaign/cam3-ad1.js index 7c0fff6d927..ffefb972862 100644 --- a/data/base/script/campaign/cam3-ad1.js +++ b/data/base/script/campaign/cam3-ad1.js @@ -271,7 +271,7 @@ function eventStartLevel() const lz2 = getObject("landingZone2"); //LZ for cam3-4s. mapLimit = 1.0; - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "CAM3A-D2", { + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.gamma8, { callback: "checkMissileSilos" }); diff --git a/data/base/script/campaign/cam3-ad2.js b/data/base/script/campaign/cam3-ad2.js index bf3ed249cf4..c2e91bd3f59 100644 --- a/data/base/script/campaign/cam3-ad2.js +++ b/data/base/script/campaign/cam3-ad2.js @@ -102,8 +102,13 @@ function vtolAttack() { if (camClassicMode()) { - const list = [cTempl.nxmheapv, cTempl.nxlpulsev]; - camSetVtolData(CAM_NEXUS, mis_vtolPositions, "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3)), undefined); + const list = [cTempl.nxlpulsev, cTempl.nxmheapv, cTempl.nxmheapv, cTempl.nxlpulsev]; + const ext = { + limit: [2, 5, 5, 2], //paired with list array + alternate: true, + altIdx: 0 + }; + camSetVtolData(CAM_NEXUS, mis_vtolPositions, "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3)), undefined, ext); } else { @@ -205,11 +210,22 @@ function vaporizeTarget() } if (Math.floor(mapLimit) < mapHeight) { - //Need to travel about 119 tiles in ~1 hour so: - //119 tiles / 60 minutes = 1.983 tiles per minute - //1.983 tile per minute / 60 seconds = 0.03305 tiles per second - //0.03305 * 10 sec = ~0.33 tiles per blast at 10 second intervals. - mapLimit += 0.33; //sector clear; move closer + if (camClassicMode() && tweakOptions.camClassic_balance32) + { + //Need to travel about 119 tiles in 80 minutes so: + //119 tiles / 80 minutes = 1.4875 tiles per minute + //1.4875 tile per minute / 60 seconds = 0.02479 tiles per second + //0.02479 * 10 sec = ~0.24 tiles per blast at 10 second intervals. + mapLimit += 0.24; //sector clear; move closer + } + else + { + //Need to travel about 119 tiles in ~1 hour so: + //119 tiles / 60 minutes = 1.9833 tiles per minute + //1.9833 tile per minute / 60 seconds = 0.03305 tiles per second + //0.03305 * 10 sec = ~0.33 tiles per blast at 10 second intervals. + mapLimit += 0.33; //sector clear; move closer + } } laserSatFuzzyStrike(target); } @@ -301,7 +317,14 @@ function checkTime() if (getMissionTime() <= 2) { camPlayVideos({video: "MB3_AD2_MSG2", type: CAMP_MSG}); - setMissionTime(camHoursToSeconds(1)); + if (camClassicMode() && tweakOptions.camClassic_balance32) + { + setMissionTime(camMinutesToSeconds(80)); // To accommodate the research bug of 3.2 balance. + } + else + { + setMissionTime(camHoursToSeconds(1)); + } phantomFactorySpawn(); queue("vaporizeTarget", camSecondsToMilliseconds(2)); @@ -341,7 +364,7 @@ function eventStartLevel() {played: false, video: "MB3_AD2_MSG6", type: CAMP_MSG, res: mis_researchTargets.missileCode3}, ]; - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "CAM_3_4S", { + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.gammaEnd.pre, { callback: "checkMissileSilos" }); diff --git a/data/base/script/campaign/cam3-b.js b/data/base/script/campaign/cam3-b.js index 9e335c519b2..4e795c465f2 100644 --- a/data/base/script/campaign/cam3-b.js +++ b/data/base/script/campaign/cam3-b.js @@ -74,7 +74,7 @@ function wave2() alternate: true, altIdx: 0 }; - camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), "NXCommandCenter", ext); + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3.5)), "NXCommandCenter", ext); } function wave3() @@ -85,7 +85,7 @@ function wave3() alternate: true, altIdx: 0 }; - camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), "NXCommandCenter", ext); + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3.5)), "NXCommandCenter", ext); } //Setup Nexus VTOL hit and runners. @@ -93,9 +93,9 @@ function vtolAttack() { if (camClassicMode()) { - const list = [cTempl.nxmheapv, cTempl.nxlscouv, cTempl.nxmtherv, cTempl.nxlscouv]; + const list = [cTempl.nxlscouv, cTempl.nxmheapv, cTempl.nxmtherv, cTempl.nxlscouv]; const ext = { - limit: [5, 2, 5, 2], //paired with list array + limit: [2, 5, 5, 2], //paired with list array alternate: true, altIdx: 0 }; @@ -109,7 +109,7 @@ function vtolAttack() alternate: true, altIdx: 0 }; - camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(2)), "NXCommandCenter", ext); + camSetVtolData(CAM_NEXUS, "vtolAppearPos", "vtolRemovePos", list, camChangeOnDiff(camMinutesToMilliseconds(3.5)), "NXCommandCenter", ext); queue("wave2", camChangeOnDiff(camSecondsToMilliseconds(30))); queue("wave3", camChangeOnDiff(camSecondsToMilliseconds(60))); } @@ -320,7 +320,7 @@ function eventStartLevel() const startPos = getObject("startPosition"); const lz = getObject("landingZone"); - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "SUB_3_2S"); + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.gamma4.pre); setMissionTime(camChangeOnDiff(camMinutesToSeconds(30))); // For the rescue mission. centreView(startPos.x, startPos.y); diff --git a/data/base/script/campaign/cam3-c.js b/data/base/script/campaign/cam3-c.js index 65cbbabab8e..4be8bd0a1ff 100644 --- a/data/base/script/campaign/cam3-c.js +++ b/data/base/script/campaign/cam3-c.js @@ -187,7 +187,7 @@ function eventStartLevel() findBetaUnitIds(); - camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, "CAM3A-D1", { + camSetStandardWinLossConditions(CAM_VICTORY_STANDARD, cam_levels.gamma7, { callback: "betaAlive" }); diff --git a/data/base/script/campaign/libcampaign.js b/data/base/script/campaign/libcampaign.js index 7a53e48b255..64acea73fc4 100644 --- a/data/base/script/campaign/libcampaign.js +++ b/data/base/script/campaign/libcampaign.js @@ -133,19 +133,61 @@ const __CAM_ALPHA_CAMPAIGN_NUMBER = 1; const __CAM_BETA_CAMPAIGN_NUMBER = 2; const __CAM_GAMMA_CAMPAIGN_NUMBER = 3; const __CAM_UNKNOWN_CAMPAIGN_NUMBER = 1000; +const cam_levels = { + alpha1: "CAM_1A", + alpha2: "CAM_1B", + alpha3: {pre: "SUB_1_1S", offWorld: "SUB_1_1"}, + alpha4: {pre: "SUB_1_2S", offWorld: "SUB_1_2"}, + alpha5: {pre: "SUB_1_3S", offWorld: "SUB_1_3"}, + alpha6: "CAM_1C", + alpha7: "CAM_1CA", + alpha8: {pre: "SUB_1_4AS", offWorld: "SUB_1_4A"}, + alpha9: {pre: "SUB_1_5S", offWorld: "SUB_1_5"}, + alpha10: "CAM_1A-C", + alpha11: {pre: "SUB_1_7S", offWorld: "SUB_1_7"}, + alpha12: {pre: "SUB_1_DS", offWorld: "SUB_1_D"}, + alphaEnd: "CAM_1END", + beta1: "CAM_2A", + beta2: {pre: "SUB_2_1S", offWorld: "SUB_2_1"}, + beta3: "CAM_2B", + beta4: {pre: "SUB_2_2S", offWorld: "SUB_2_2"}, + beta5: "CAM_2C", + beta6: {pre: "SUB_2_5S", offWorld: "SUB_2_5"}, + beta7: {pre: "SUB_2DS", offWorld: "SUB_2D"}, + beta8: {pre: "SUB_2_6S", offWorld: "SUB_2_6"}, + beta9: {pre: "SUB_2_7S", offWorld: "SUB_2_7"}, + beta10: {pre: "SUB_2_8S", offWorld: "SUB_2_8"}, + betaEnd: "CAM_2END", + gamma1: "CAM_3A", + gamma2: {pre: "SUB_3_1S", offWorld: "SUB_3_1"}, + gamma3: "CAM_3B", + gamma4: {pre: "SUB_3_2S", offWorld: "SUB_3_2"}, + gamma5: "CAM3A-B", + gamma6: "CAM3C", + gamma7: "CAM3A-D1", + gamma8: "CAM3A-D2", + gammaEnd: {pre: "CAM_3_4S", offWorld: "CAM_3_4"} +}; const __cam_alphaLevels = [ - "CAM_1A", "CAM_1B", "SUB_1_1S", "SUB_1_1", "SUB_1_2S", "SUB_1_2", "SUB_1_3S", - "SUB_1_3", "CAM_1C", "CAM_1CA", "SUB_1_4AS", "SUB_1_4A", "SUB_1_5S", "SUB_1_5", - "CAM_1A-C", "SUB_1_7S", "SUB_1_7", "SUB_1_DS", "SUB_1_D", "CAM_1END" + cam_levels.alpha1, cam_levels.alpha2, cam_levels.alpha3.pre, cam_levels.alpha3.offWorld, + cam_levels.alpha4.pre, cam_levels.alpha4.offWorld, cam_levels.alpha5.pre, + cam_levels.alpha5.offWorld, cam_levels.alpha6, cam_levels.alpha7, cam_levels.alpha8.pre, + cam_levels.alpha8.offWorld, cam_levels.alpha9.pre, cam_levels.alpha9.offWorld, + cam_levels.alpha10, cam_levels.alpha11.pre, cam_levels.alpha11.offWorld, + cam_levels.alpha12.pre, cam_levels.alpha12.offWorld, cam_levels.alphaEnd ]; const __cam_betaLevels = [ - "CAM_2A", "SUB_2_1S", "SUB_2_1", "CAM_2B", "SUB_2_2S", "SUB_2_2", "CAM_2C", - "SUB_2_5S", "SUB_2_5", "SUB_2DS", "SUB_2D", "SUB_2_6S", "SUB_2_6", "SUB_2_7S", - "SUB_2_7", "SUB_2_8S", "SUB_2_8", "CAM_2END" + cam_levels.beta1, cam_levels.beta2.pre, cam_levels.beta2.offWorld, cam_levels.beta3, + cam_levels.beta4.pre, cam_levels.beta4.offWorld, cam_levels.beta5, cam_levels.beta6.pre, + cam_levels.beta6.offWorld, cam_levels.beta7.pre, cam_levels.beta7.offWorld, + cam_levels.beta8.pre, cam_levels.beta8.offWorld, cam_levels.beta9.pre, + cam_levels.beta9.offWorld, cam_levels.beta10.pre, cam_levels.beta10.offWorld, + cam_levels.betaEnd ]; const __cam_gammaLevels = [ - "CAM_3A", "SUB_3_1S", "SUB_3_1", "CAM_3B", "SUB_3_2S", "SUB_3_2", "CAM3A-B", - "CAM3C", "CAM3A-D1", "CAM3A-D2", "CAM_3_4S", "CAM_3_4" + cam_levels.gamma1, cam_levels.gamma2.pre, cam_levels.gamma2.offWorld, cam_levels.gamma3, + cam_levels.gamma4.pre, cam_levels.gamma4.offWorld, cam_levels.gamma5, cam_levels.gamma6, + cam_levels.gamma7, cam_levels.gamma8, cam_levels.gammaEnd.pre, cam_levels.gammaEnd.offWorld ]; // Holds all the sounds the campaign uses. Try to name things as they are said. @@ -281,7 +323,7 @@ var __camPropulsionTypeLimit; //research const __CAM_AI_INSTANT_PRODUCTION_RESEARCH = "R-Struc-Factory-Upgrade-AI"; -const __cam_nexusTech = [ +const cam_nexusSpecialResearch = [ "R-Sys-NEXUSrepair", "R-Sys-NEXUSsensor" ]; @@ -371,3 +413,4 @@ include(__CAM_INCLUDE_PATH + "vtol.js"); include(__CAM_INCLUDE_PATH + "nexus.js"); include(__CAM_INCLUDE_PATH + "group.js"); include(__CAM_INCLUDE_PATH + "video.js"); +include(__CAM_INCLUDE_PATH + "guide.js"); diff --git a/data/base/script/campaign/libcampaign_includes/artifact.js b/data/base/script/campaign/libcampaign_includes/artifact.js index 9a07bcfcb79..d56361edaf9 100644 --- a/data/base/script/campaign/libcampaign_includes/artifact.js +++ b/data/base/script/campaign/libcampaign_includes/artifact.js @@ -9,6 +9,7 @@ //;; The argument is a JavaScript map from object labels to artifact description. //;; If the label points to a game object, artifact will be placed when this object //;; is destroyed; if the label is a position, the artifact will be placed instantly. +//;; The label can point to a pre-existing feature artifact on the map too. //;; Artifact description is a JavaScript object with the following fields: //;; * `tech` The technology to grant when the artifact is recovered. //;; Note that this can be made into an array to make artifacts give out @@ -27,22 +28,64 @@ function camSetArtifacts(artifacts) __camArtifacts = artifacts; for (const alabel in __camArtifacts) { - const ai = __camArtifacts[alabel]; - const pos = camMakePos(alabel); - if (camDef(pos.id)) + __camSetupArtifactData(alabel); + } +} + +//;; ## camAddArtifact(artiLabel, artiTech) +//;; +//;; Adds another artifact to be managed. Will override existing ones if the names match. +//;; +//;; @param {String} artiLabel +//;; @param {String|Array} artiTech +//;; @returns {void} +//;; +function camAddArtifact(artiLabel, artiTech) +{ + if (!camDef(artiLabel) || !camDef(artiTech)) + { + camDebug("Attempt to add new artifact failed due to undefined name or tech parameter"); + return; + } + __camArtifacts[artiLabel] = { tech: artiTech }; + __camSetupArtifactData(artiLabel); +} + +//;; ## camDeleteArtifact(artiLabel) +//;; +//;; Deletes the artifact from the list of managed artifacts. +//;; +//;; @param {String} artiLabel +//;; @returns {void} +//;; +function camDeleteArtifact(artiLabel, warnIfNotFound) +{ + if (!camDef(warnIfNotFound)) + { + warnIfNotFound = true; + } + if (!camDef(artiLabel)) + { + camDebug("Tried to delete undefined artifact label"); + return; + } + if (!(artiLabel in __camArtifacts)) + { + if (warnIfNotFound) { - // will place when object with this id is destroyed - ai.id = "" + pos.id; - ai.placed = false; + camDebug("Artifact label doesn't exist in list of artifacts"); } - else + return; + } + if (__camArtifacts[artiLabel].placed) + { + const obj = getObject(__camGetArtifactLabel(artiLabel)); + if (camDef(obj) && obj !== null) { - // received position or area, place immediately - const acrate = addFeature(CAM_ARTIFACT_STAT, pos.x, pos.y); - addLabel(acrate, __camGetArtifactLabel(alabel)); - ai.placed = true; + camSafeRemoveObject(obj, false); } } + delete __camArtifacts[artiLabel]; } //;; ## camAllArtifactsPickedUp() @@ -70,15 +113,15 @@ function camGetArtifacts() { const artifact = __camArtifacts[alabel]; const __LIB_LABEL = __camGetArtifactLabel(alabel); - //libcampaign managed artifact that was placed on the map. + const obj = getObject(alabel); + //libcampaign managed artifact that was placed on the map (or map placed artifact). if (artifact.placed && getObject(__LIB_LABEL) !== null) { camArti.push(__LIB_LABEL); } //Label for artifacts that will drop after an object gets destroyed. Or is manually managed. //NOTE: Must check for ID since "alabel" could be a AREA/POSITION label. - const obj = getObject(alabel); - if (obj !== null && camDef(obj.id)) + else if (obj !== null && camDef(obj.id)) { camArti.push(alabel); } @@ -88,6 +131,34 @@ function camGetArtifacts() //////////// privates +function __camSetupArtifactData(alabel) +{ + const ai = __camArtifacts[alabel]; + const pos = camMakePos(alabel); + if (camDef(pos.id)) + { + const obj = getObject(alabel); + if (obj && obj.type === FEATURE && obj.stattype === ARTIFACT) + { + addLabel(obj, __camGetArtifactLabel(alabel)); + ai.placed = true; // this is an artifact feature on the map itself. + } + else + { + // will place when object with this id is destroyed + ai.id = "" + pos.id; + ai.placed = false; + } + } + else + { + // received position or area, place immediately + const acrate = addFeature(CAM_ARTIFACT_STAT, pos.x, pos.y); + addLabel(acrate, __camGetArtifactLabel(alabel)); + ai.placed = true; + } +} + function __camGetArtifactLabel(alabel) { return alabel + "_artifact_label"; @@ -150,6 +221,12 @@ function __camPickupArtifact(artifact) camTrace("Artifact", artifact.id, "is not managed"); return; } + if (Object.hasOwn(ai, "pickedUp") && ai.pickedUp === true) + { + camTrace("Already picked up the artifact", __ALABEL); + return; + } + ai.pickedUp = true; camTrace("Picked up", ai.tech); playSound(cam_sounds.artifactRecovered, artifact.x, artifact.y, artifact.z); @@ -167,6 +244,11 @@ function __camPickupArtifact(artifact) { enableResearch(ai.tech); } + + addGuideTopic("wz2100::structures::researchfacility"); + addGuideTopic("wz2100::general::researching"); + addGuideTopic("wz2100::general::artifacts", SHOWTOPIC_FIRSTADD); + // bump counter before the callback, so that it was // actual during the callback ++__camNumArtifacts; diff --git a/data/base/script/campaign/libcampaign_includes/events.js b/data/base/script/campaign/libcampaign_includes/events.js index 583ab9da79c..e4effb5ab52 100644 --- a/data/base/script/campaign/libcampaign_includes/events.js +++ b/data/base/script/campaign/libcampaign_includes/events.js @@ -62,7 +62,7 @@ function cam_eventChat(from, to, message) return; } camTrace(from, to, message); - if (message === "let me win" && __camNextLevel !== "SUB_1_1") + if (message === "let me win" && __camNextLevel !== cam_levels.alpha3.offWorld) { __camLetMeWin(); } @@ -147,6 +147,7 @@ function cam_eventStartLevel() setTimer("__camTacticsTick", camSecondsToMilliseconds(0.1)); queue("__camShowBetaHintEarly", camSecondsToMilliseconds(4)); queue("__camGrantSpecialResearch", camSecondsToMilliseconds(6)); + queue("__camEnableGuideTopics", camSecondsToMilliseconds(0.1)); // delayed to handle when mission scripts add research } function cam_eventDroidBuilt(droid, structure) @@ -163,11 +164,23 @@ function cam_eventDroidBuilt(droid, structure) { return; } - if (camGetNexusState() && droid.player === CAM_NEXUS && __camNextLevel === "CAM3C" && camRand(100) < 7) + if (camGetNexusState() && droid.player === CAM_NEXUS && __camNextLevel === cam_levels.gamma6 && camRand(100) < 7) { // Occasionally hint that NEXUS is producing units on Gamma 5. playSound(cam_sounds.nexus.productionCompleted); } + if (droid.player === CAM_HUMAN_PLAYER) + { + // handling guide topics for built units + if (droid.isVTOL) + { + camCallOnce("__camDoAddVTOLUseTopics"); + } + else if (droid.droidType === DROID_COMMAND) + { + camCallOnce("__camDoAddCommanderUseTopics"); + } + } if (!camDef(__camFactoryInfo)) { return; @@ -178,6 +191,10 @@ function cam_eventDroidBuilt(droid, structure) function cam_eventDestroyed(obj) { + if (obj.type === FEATURE && obj.stattype === ARTIFACT) + { + return; + } __camCheckPlaceArtifact(obj); if (obj.type === DROID) { @@ -268,6 +285,8 @@ function cam_eventTransporterLanded(transport) { setReinforcementTime(-1); } + // Handle enabling guide topics relevant to units potentially "gifted" by libcampaign + __camEnableGuideTopicsForTransport(transport); } } @@ -292,9 +311,9 @@ function cam_eventMissionTimeout() function cam_eventAttacked(victim, attacker) { - if (camDef(victim) && victim && victim.type === DROID) + if (camDef(victim) && victim) { - if (victim.player !== CAM_HUMAN_PLAYER && !allianceExistsBetween(CAM_HUMAN_PLAYER, victim.player)) + if (victim.type === DROID && victim.player !== CAM_HUMAN_PLAYER && !allianceExistsBetween(CAM_HUMAN_PLAYER, victim.player)) { //Try dynamically creating a group of nearby droids not part //of a group. Only supports those who can hit ground units. @@ -335,6 +354,14 @@ function cam_eventAttacked(victim, attacker) } } } + + if (victim.player === CAM_HUMAN_PLAYER && camDef(attacker) && attacker && attacker.player !== CAM_HUMAN_PLAYER) + { + if (attacker.type === DROID && attacker.isVTOL) + { + camCallOnce("__camDoAddVTOLDefenseTopics"); + } + } } } @@ -344,8 +371,10 @@ function cam_eventGameLoaded() receiveAllEvents(true); __camSaveLoading = true; const scavKevlarMissions = [ - "CAM_1CA", "SUB_1_4AS", "SUB_1_4A", "SUB_1_5S", "SUB_1_5", - "CAM_1A-C", "SUB_1_7S", "SUB_1_7", "SUB_1_DS", "CAM_1END", "SUB_2_5S" + cam_levels.alpha7, cam_levels.alpha8.pre, cam_levels.alpha8.offWorld, + cam_levels.alpha9.pre, cam_levels.alpha9.offWorld, cam_levels.alpha10, + cam_levels.alpha11.pre, cam_levels.alpha11.offWorld, cam_levels.alpha12.pre, + cam_levels.alphaEnd, cam_levels.beta6.pre ]; //Need to set the scavenger kevlar vests when loading a save from later Alpha @@ -379,6 +408,9 @@ function cam_eventGameLoaded() //Subscribe to eventGroupSeen again. camSetEnemyBases(); + // Ensure appropriate guide topics are displayed + __camEnableGuideTopics(); + //Reset any vars __camCheatMode = false; @@ -423,3 +455,27 @@ function cam_eventVideoDone() { __camEnqueueVideos(); //Play any remaining videos automatically. } + +function cam_eventDroidRankGained(droid, rankNum) +{ + if (droid.player === CAM_HUMAN_PLAYER) + { + addGuideTopic("wz2100::units::experience", SHOWTOPIC_FIRSTADD); + } +} + +function cam_eventResearched(research, structure, player) +{ + if (player !== CAM_HUMAN_PLAYER) + { + return; + } + let researchedByStruct = (camDef(structure) && structure); + if (!researchedByStruct) + { + return; // for now, return - don't think we need to process if researched by API call here? + } + // only pass the research in if it was completed by a structure (not if given by an API call, in which structure would be null) + //__camProcessResearchGatedGuideTopics((researchedByStruct) ? research : null); + __camProcessResearchGatedGuideTopics(research); +} diff --git a/data/base/script/campaign/libcampaign_includes/guide.js b/data/base/script/campaign/libcampaign_includes/guide.js new file mode 100644 index 00000000000..bd4bfc74293 --- /dev/null +++ b/data/base/script/campaign/libcampaign_includes/guide.js @@ -0,0 +1,186 @@ + +//////////////////////////////////////////////////////////////////////////////// +// Guide topics management. +//////////////////////////////////////////////////////////////////////////////// + +function __camDoAddVTOLUseTopicsImpl() +{ + addGuideTopic("wz2100::units::vtols::attacking", SHOWTOPIC_FIRSTADD); +} + +function __camDoAddCommanderUseTopicsImpl() +{ + addGuideTopic("wz2100::units::commanders::targeting"); + addGuideTopic("wz2100::units::commanders::detaching"); + addGuideTopic("wz2100::units::commanders::repairs"); + addGuideTopic("wz2100::units::commanders::attaching", SHOWTOPIC_FIRSTADD); +} + +function __camDoAddVTOLDefenseTopicsImpl() +{ + addGuideTopic("wz2100::units::vtols::defending", SHOWTOPIC_FIRSTADD); +} + +function __camDoAddVTOLDefenseTopics() +{ + // delayed by a bit so the player hopefully has a solid chance to notice the VTOLs + queue("__camDoAddVTOLDefenseTopicsImpl", camSecondsToMilliseconds(2)); +} + +function __camDoAddVTOLUseTopics() +{ + queue("__camDoAddVTOLUseTopicsImpl", camSecondsToMilliseconds(1)); +} + +function __camDoAddCommanderUseTopics() +{ + queue("__camDoAddCommanderUseTopicsImpl", camSecondsToMilliseconds(1)); +} + +function __camGuideTopicCheckResearchComplete(targetResearchName, justResearchedObj = null) +{ + if (justResearchedObj && justResearchedObj.name == targetResearchName) + { + return true; + } + else if (justResearchedObj == null) + { + const res = getResearch(targetResearchName); + if (res && res.done) + { + return true; + } + } + return false; +} + +function __camProcessResearchGatedGuideTopics(research = null) +{ + let showFlags = (research == null) ? 0 : SHOWTOPIC_FIRSTADD; + + // first "different" weapon type' + if (__camGuideTopicCheckResearchComplete('R-Wpn-Flamer01Mk1', research)) + { + addGuideTopic("wz2100::units::weaponselection", showFlags); + } + + // repair turret researched + if (__camGuideTopicCheckResearchComplete('R-Sys-MobileRepairTurret01', research)) + { + addGuideTopic("wz2100::units::repairing", showFlags); + } + + // first module researched + if (__camGuideTopicCheckResearchComplete('R-Struc-PowerModuleMk1', research)) + { + addGuideTopic("wz2100::structures::modules", showFlags); + } + + // sensor turret researched + if (__camGuideTopicCheckResearchComplete('R-Sys-Sensor-Turret01', research)) + { + // in this case, the category topic must come first (as adding the child topics will also add it, but we want the category topic to be what's displayed) + addGuideTopic("wz2100::units::sensors", showFlags); + addGuideTopic("wz2100::units::sensors::unassigning"); + addGuideTopic("wz2100::units::sensors::using"); + } + + // command turret researched + if (__camGuideTopicCheckResearchComplete('R-Comp-CommandTurret01', research)) + { + // in this case, the category topic must come first (as adding the child topics will also add it, but we want the category topic to be what's displayed) + addGuideTopic("wz2100::units::commanders", showFlags); + } + + // repair facility researched + if (__camGuideTopicCheckResearchComplete('R-Struc-RepairFacility', research)) + { + addGuideTopic("wz2100::structures::repairfacility", showFlags); + } + + // vtol factory researched + if (__camGuideTopicCheckResearchComplete('R-Struc-VTOLFactory', research)) + { + addGuideTopic("wz2100::structures::vtolfactory", showFlags); + } + + // vtol propulsion researched + if (__camGuideTopicCheckResearchComplete('R-Vehicle-Prop-VTOL', research)) + { + addGuideTopic("wz2100::units::vtols::weapons"); + addGuideTopic("wz2100::units::vtols::designing", showFlags); + } + + // cb turret researched + if (__camGuideTopicCheckResearchComplete('R-Sys-CBSensor-Turret01', research)) + { + addGuideTopic("wz2100::units::sensors::cb", showFlags); + } +} + +function __camEnableGuideTopics() +{ + // Always enable (most) general topics & unit orders + addGuideTopic("wz2100::general::**", 0, ["wz2100::general::artifacts", "wz2100::general::researching", "wz2100::general::power"]); + addGuideTopic("wz2100::unitorders::**"); + + // Basic base / structure topics + addGuideTopic("wz2100::structures::building"); + addGuideTopic("wz2100::structures::demolishing"); + + let isCam1A = (__camNextLevel === cam_levels.alpha2); + if (!isCam1A) // If not very first original campaign level (CAM1A), which displays these in response to events, add them + { + addGuideTopic("wz2100::general::artifacts"); + addGuideTopic("wz2100::general::researching"); + addGuideTopic("wz2100::general::power"); + + addGuideTopic("wz2100::structures::hq"); + addGuideTopic("wz2100::structures::researchfacility"); + addGuideTopic("wz2100::structures::oilderrick"); + addGuideTopic("wz2100::structures::powergenerator"); + addGuideTopic("wz2100::structures::rallypoint"); + addGuideTopic("wz2100::structures::factory"); + + // Basic units topics + addGuideTopic("wz2100::units::building"); + addGuideTopic("wz2100::units::designing"); + } + + // Handle research-driven topics (for things already researched - i.e. on savegame load or starting a later campaign) + __camProcessResearchGatedGuideTopics(); + + // Handle built-unit triggered topics + if (countDroid(DROID_COMMAND, CAM_HUMAN_PLAYER) > 0) + { + addGuideTopic("wz2100::units::commanders::**"); + } + let foundDroids_VTOL = false; + const droids = enumDroid(CAM_HUMAN_PLAYER); + for (let x = 0; x < droids.length; ++x) + { + const droid = droids[x]; + if (droid.isVTOL) + { + foundDroids_VTOL = true; + break; // if checking for anything else in the future, remove this + } + } + if (foundDroids_VTOL) + { + addGuideTopic("wz2100::units::vtols::**"); + } +} + +function __camEnableGuideTopicsForTransport(transport) +{ + const droids = enumCargo(transport); + for (let i = 0, len = droids.length; i < len; ++i) + { + const droid = droids[i]; + if (droid.droidType === DROID_COMMAND) + { + addGuideTopic("wz2100::units::commanders::**"); + } + } +} diff --git a/data/base/script/campaign/libcampaign_includes/misc.js b/data/base/script/campaign/libcampaign_includes/misc.js index eac8cd89681..314418fd3b6 100644 --- a/data/base/script/campaign/libcampaign_includes/misc.js +++ b/data/base/script/campaign/libcampaign_includes/misc.js @@ -589,11 +589,57 @@ function camDiscoverCampaign() return __CAM_UNKNOWN_CAMPAIGN_NUMBER; } -function camSetExpLevel(number) +//;; ## camGetRankThreshold(rank [, command [, player]]) +//;; +//;; Returns the rank threshold for a given rank. +//;; +//;; @param {String|Number} rank +//;; @param {Boolean} command +//;; @param {Number} player +//;; @returns {number} +//;; +function camGetRankThreshold(rankName, command, player) { - __camExpLevel = number; + if (!camDef(command)) + { + command = false; + } + if (!camDef(player)) + { + player = CAM_HUMAN_PLAYER; + } + const __BRAIN_TYPE = (command) ? "Command Turret" : "Z NULL BRAIN"; + let rank = 0; + if (typeof rankName === "string") + { + rank = __camRankStringToNumber(rankName); + } + return Upgrades[player]["Brain"][__BRAIN_TYPE]["RankThresholds"][rank]; +} + +//;; ## camSetExpLevel(rank) +//;; +//;; Sets what rank will be used for the AI when it creates units. Can be a rank threshold +//;; index or the name of the rank. +//;; +//;; @param {Number|String} rank +//;; @returns {void} +//;; +function camSetExpLevel(rank) +{ + if (!camDef(rank)) + { + rank = 0; + } + __camExpLevel = (typeof rank === "string") ? __camRankStringToNumber(rank) : rank; } +//;; ## camSetOnMapEnemyUnitExp() +//;; +//;; Sets all non-player units to the chosen rank set through camSetExpLevel(). +//;; +//;; @returns {void} +//;; function camSetOnMapEnemyUnitExp() { enumDroid(CAM_NEW_PARADIGM) @@ -681,19 +727,52 @@ function __camAiPowerReset() } } -function __camGetExpRangeLevel() +function __camRankStringToNumber(rankName) +{ + if (!camDef(rankName)) + { + camDebug("Undefined parameter"); + return 0; + } + if (typeof rankName !== "string") + { + camDebug("Please specify rank as a string"); + return 0; + } + let rank = 0; + switch (rankName.toLowerCase()) + { + case "rookie": rank = 0; break; + case "green": rank = 1; break; + case "trained": rank = 2; break; + case "regular": rank = 3; break; + case "professional": rank = 4; break; + case "veteran": rank = 5; break; + case "elite": rank = 6; break; + case "special": rank = 7; break; + case "hero": rank = 8; break; + default: camDebug("Unknown rank encountered"); + } + return rank; +} + +function __camGetExpRangeLevel(useCommanderRanks) { + if (!camDef(useCommanderRanks)) + { + useCommanderRanks = false; + } const ranks = { - rookie: 0, - green: 4, - trained: 8, - regular: 16, - professional: 32, - veteran: 64, - elite: 128, - special: 256, - hero: 512, - }; //see brain.json + rookie: camGetRankThreshold("rookie", useCommanderRanks), + green: camGetRankThreshold("green", useCommanderRanks), + trained: camGetRankThreshold("trained", useCommanderRanks), + regular: camGetRankThreshold("regular", useCommanderRanks), + professional: camGetRankThreshold("professional", useCommanderRanks), + veteran: camGetRankThreshold("veteran", useCommanderRanks), + elite: camGetRankThreshold("elite", useCommanderRanks), + special: camGetRankThreshold("special", useCommanderRanks), + hero: camGetRankThreshold("hero", useCommanderRanks) + }; let exp = []; switch (__camExpLevel) @@ -745,14 +824,10 @@ function camSetDroidExperience(droid) return; } - const expRange = __camGetExpRangeLevel(); + const __CMD_RANK = (droid.droidType === DROID_COMMAND || droid.droidType === DROID_SENSOR); + const expRange = __camGetExpRangeLevel(__CMD_RANK); let exp = expRange[camRand(expRange.length)]; - if (droid.droidType === DROID_COMMAND || droid.droidType === DROID_SENSOR) - { - exp = exp * 2; - } - setDroidExperience(droid, exp); } diff --git a/data/base/script/campaign/libcampaign_includes/nexus.js b/data/base/script/campaign/libcampaign_includes/nexus.js index 714360ccf5f..35db0000a46 100644 --- a/data/base/script/campaign/libcampaign_includes/nexus.js +++ b/data/base/script/campaign/libcampaign_includes/nexus.js @@ -214,7 +214,7 @@ function __camChooseNexusTarget(player) { return true; //Final mission has a static fail chance to hack everything. } - else if (getResearch(cam_resistance_circuits.fourth).done) + else if (!camClassicMode() && getResearch(cam_resistance_circuits.fourth).done) { return false; //Everything is safe } diff --git a/data/base/script/campaign/libcampaign_includes/production.js b/data/base/script/campaign/libcampaign_includes/production.js index b7daee3b9c9..36132b37dbd 100644 --- a/data/base/script/campaign/libcampaign_includes/production.js +++ b/data/base/script/campaign/libcampaign_includes/production.js @@ -256,7 +256,7 @@ function camUpgradeOnMapTemplates(template1, template2, playerId, excluded) // Boosts the throttle on factories if classic balance is active. function __camFactoryThrottleMultiplier() { - return ((camClassicMode()) ? 2 : 1); + return ((camClassicMode() && tweakOptions.camClassic_slowProduction) ? 2 : 1); } function __camFactoryUpdateTactics(flabel) diff --git a/data/base/script/campaign/libcampaign_includes/research.js b/data/base/script/campaign/libcampaign_includes/research.js index 0529476dd7b..f2a6bca902b 100644 --- a/data/base/script/campaign/libcampaign_includes/research.js +++ b/data/base/script/campaign/libcampaign_includes/research.js @@ -16,8 +16,9 @@ function camEnableRes(researchIds, playerId) for (let i = 0, l = researchIds.length; i < l; ++i) { const __RESEARCH_ID = researchIds[i]; + const __FORCE = (cam_nexusSpecialResearch.indexOf(__RESEARCH_ID) !== -1); enableResearch(__RESEARCH_ID, playerId); - completeResearch(__RESEARCH_ID, playerId); + completeResearch(__RESEARCH_ID, playerId, __FORCE); } } @@ -42,7 +43,7 @@ function camCompleteRequiredResearch(researchIds, playerId) if (reqRes.length === 0) { //HACK: autorepair like upgrades don't work after mission transition. - if (__cam_nexusTech.indexOf(__RESEARCH_ID) !== -1) + if (cam_nexusSpecialResearch.indexOf(__RESEARCH_ID) !== -1) { completeResearch(__RESEARCH_ID, playerId, true); } @@ -74,7 +75,7 @@ function camClassicResearch(researchIds, playerId) { return; } - if (tweakOptions.camclassic_Balance32) + if (tweakOptions.camClassic_balance32) { camEnableRes(researchIds, playerId); } diff --git a/data/base/script/campaign/libcampaign_includes/victory.js b/data/base/script/campaign/libcampaign_includes/victory.js index fc1b8b81daa..c3b75ef0257 100644 --- a/data/base/script/campaign/libcampaign_includes/victory.js +++ b/data/base/script/campaign/libcampaign_includes/victory.js @@ -55,6 +55,7 @@ function camNextLevel(nextLevel) //;; The following data parameter fields are available: //;; * `area` The landing zone to return to. //;; * `message` The "Return to LZ" message ID. Optional. +//;; * `playLzReminder` Play and show the "Return to LZ" message. Optional, enabled by default. //;; * `reinforcements` Reinforcements interval, in seconds. //;; For standard and offworld victory, some extra data parameters can be defined: //;; * `callback` A function callback to check for extra win/loss conditions. Return values are interpreted as follows: @@ -219,7 +220,7 @@ function __camPlayerDead() dead = false; } - if (__camNextLevel === "SUB_3_1S") + if (__camNextLevel === cam_levels.gamma2.pre) { //Check for any construction units. //NOTE: countDroid() will return the counts of construction units in @@ -234,7 +235,7 @@ function __camPlayerDead() //A construction unit is currently on the map. dead = false; } - else if (__camNextLevel === "CAM3A-D1") + else if (__camNextLevel === cam_levels.gamma7) { const __GAMMA_PLAYER = 1; @@ -283,7 +284,7 @@ function __camPlayerDead() dead = droidCount <= 0 && !__HAVE_FACTORIES; //Finish Beta-end early if they have no units and factories on Easy/Normal. - if (dead && (difficulty <= MEDIUM) && (__camNextLevel === "CAM_3A")) + if (dead && (difficulty <= MEDIUM) && (__camNextLevel === cam_levels.gamma1)) { cam_eventMissionTimeout(); //Early victory trigger return false; @@ -434,9 +435,13 @@ function __camVictoryOffworld() } if (__camRTLZTicker % __REMIND_RETURN === 0) { - const pos = camMakePos(lz); - playSound(cam_sounds.lz.returnToLZ, pos.x, pos.y, 0); - console(_("Return to LZ")); + const __USED_REMIND = camDef(__camVictoryData.playLzReminder); + if (!__USED_REMIND || (__USED_REMIND && __camVictoryData.playLzReminder)) + { + const pos = camMakePos(lz); + playSound(cam_sounds.lz.returnToLZ, pos.x, pos.y, 0); + console(_("Return to LZ")); + } } ++__camRTLZTicker; } diff --git a/data/base/script/campaign/templates.js b/data/base/script/campaign/templates.js index d86dd308915..86a09a71df3 100644 --- a/data/base/script/campaign/templates.js +++ b/data/base/script/campaign/templates.js @@ -156,7 +156,7 @@ const tWeap = { flamer: "CyborgFlamer01", thermite: "CyborgFlamer02", //Cannon - lightCannon: "CyborgCannon", + heavyCannon: "CyborgCannon", sniperCannon: "CyborgCannon02", //Rocket lancer: "CyborgRocket", @@ -265,16 +265,16 @@ npsbb: { body: tBody.tank.scorpion, prop: tProp.tank.halfTracks, weap: tWeap.tan npltat: { body: tBody.tank.bug, prop: tProp.tank.halfTracks, weap: tWeap.tank.lancer }, // SUB_1_4A +npmorb: { body: tBody.tank.scorpion, prop: tProp.tank.halfTracks, weap: tWeap.tank.bombard }, // CAM_1_5 nphmgt: { body: tBody.tank.scorpion, prop: tProp.tank.tracks, weap: tWeap.tank.heavyMachinegun }, -npcybc: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.lightCannon }, +npcybc: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.heavyCannon }, npcybf: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.flamer }, npcybm: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.heavyMachinegun }, // CAM_1AC nphct: { body: tBody.tank.mantis, prop: tProp.tank.tracks, weap: tWeap.tank.heavyCannon }, -npmorb: { body: tBody.tank.scorpion, prop: tProp.tank.halfTracks, weap: tWeap.tank.bombard }, npmsens: { body: tBody.tank.scorpion, prop: tProp.tank.halfTracks, weap: tSensor.sensor }, // SUB_1_7 @@ -321,14 +321,14 @@ cohbbt: { body: tBody.tank.tiger, prop: tProp.tank.tracks, weap: tWeap.tank.bunk // SUB_2_5 cocybag: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.assaultGun }, +cocybsn: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.sniperCannon }, +cocybtk: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.tankKiller }, +comhltat: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.tankKiller }, // SUB_2_D -comhltat: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.tankKiller }, commorvt: { body: tBody.tank.panther, prop: tProp.air.vtol, weap: tWeap.air.thermiteBomb }, cohhpv: { body: tBody.tank.tiger, prop: tProp.tank.tracks, weap: tWeap.tank.hyperVelocityCannon }, comagt: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.assaultGun }, -cocybsn: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.sniperCannon }, -cocybtk: { body: tBody.cyborg.lightBody, prop: tProp.cyborg.legs, weap: tWeap.cyborg.tankKiller }, colhvat: { body: tBody.tank.leopard, prop: tProp.air.vtol, weap: tWeap.air.tankKiller }, // SUB_2_6 @@ -339,6 +339,7 @@ comsensh: { body: tBody.tank.panther, prop: tProp.tank.halfTracks, weap: tSensor // SUB_2_7 comrotmh: { body: tBody.tank.panther, prop: tProp.tank.tracks, weap: tWeap.tank.pepperpot }, comltath: { body: tBody.tank.panther, prop: tProp.tank.hover, weap: tWeap.tank.tankKiller }, +comacv: { body: tBody.tank.panther, prop: tProp.air.vtol, weap: tWeap.air.assaultCannon }, // SUB_2_8 comhvat: { body: tBody.tank.panther, prop: tProp.air.vtol, weap: tWeap.air.tankKiller }, diff --git a/data/base/script/campaign/transitionTech.js b/data/base/script/campaign/transitionTech.js index 6bf9fd400cd..3d66696e40e 100644 --- a/data/base/script/campaign/transitionTech.js +++ b/data/base/script/campaign/transitionTech.js @@ -51,13 +51,14 @@ const mis_alphaResearchNew = [ "R-Wpn-RocketSlow-Accuracy01", "R-Wpn-Cannon-Accuracy01", "R-Struc-RprFac-Upgrade03", "R-Comp-SynapticLink", "R-Vehicle-Body08", "R-Vehicle-Engine02", "R-Struc-Factory-Upgrade03", "R-Struc-Factory-Cyborg", "R-Cyborg-Wpn-MG", "R-Cyborg-Metals01", "R-Cyborg-Metals02", - "R-Cyborg-Metals03", "R-Cyborg-Wpn-Cannon", "R-Cyborg-Wpn-Flamer", "R-Cyborg-Wpn-Rocket", + "R-Cyborg-Metals03", "R-Cyborg-Wpn-Flamer", "R-Cyborg-Wpn-Rocket", "R-Cyborg-Legs01", "R-Defense-WallUpgrade03", // 10 // 11 "R-Wpn-Cannon3Mk1", "R-Defense-WallTower04", "R-Wpn-RocketSlow-Damage03", + "R-Cyborg-Wpn-Cannon", //12 "R-Vehicle-Prop-Hover", "R-Vehicle-Metals03", "R-Vehicle-Body12", "R-Vehicle-Engine03", @@ -81,7 +82,7 @@ const mis_playerResBeta = [ //This array should give a player all the research from Beta. const mis_betaResearchNew = [ // 1 - "R-Sys-Engineering02", "R-Sys-Sensor-Upgrade01", "R-Wpn-AAGun-Damage03", + "R-Sys-Engineering02", "R-Sys-Sensor-Upgrade01", "R-Wpn-AAGun-Damage01", "R-Wpn-Cannon-Damage04", "R-Wpn-MG-ROF02", "R-Wpn-Rocket-Damage04", "R-Defense-WallUpgrade04", "R-Sys-CBSensor-Tower01", "R-Wpn-AAGun-ROF02", "R-Wpn-Cannon-Accuracy02", "R-Wpn-MG-Damage05", "R-Wpn-RocketSlow-Damage04", @@ -100,7 +101,7 @@ const mis_betaResearchNew = [ "R-Wpn-RocketSlow-Accuracy03", "R-Wpn-AAGun-Accuracy01", "R-Wpn-Mortar-Acc02", // 5 - "R-Vehicle-Body06", "R-Vehicle-Prop-VTOL", "R-Wpn-AAGun02", "R-Wpn-HowitzerMk1", + "R-Vehicle-Body06", "R-Vehicle-Prop-VTOL", "R-Wpn-AAGun02", "R-Wpn-AAGun-Damage02", "R-Wpn-HowitzerMk1", "R-Wpn-Rocket06-IDF", "R-Defense-AASite-QuadBof", "R-Defense-Howitzer", "R-Defense-IDFRocket", "R-Struc-VTOLFactory", "R-Vehicle-Engine04", "R-Vehicle-Metals05", "R-Wpn-Bomb01", "R-Wpn-Flamer-ROF03", "R-Wpn-Howitzer-Damage01", "R-Wpn-Howitzer-ROF01", "R-Wpn-Mortar-ROF02", @@ -123,7 +124,7 @@ const mis_betaResearchNew = [ "R-Sys-VTOLCBS-Tower01", "R-Wpn-Cannon4AMk1", "R-Wpn-Mortar3", "R-Wpn-Rocket07-Tank-Killer", "R-Defense-Emplacement-HPVcannon", "R-Defense-HvyA-Trocket", "R-Defense-RotMor", "R-Defense-WallTower-HPVcannon", "R-Defense-WallTower-HvyA-Trocket", "R-Sys-VTOLCBS-Turret01", - "R-Wpn-Mortar-ROF03", "R-Wpn-Mortar-Damage06", "R-Wpn-AAGun04", "R-Defense-AASite-QuadRotMg", + "R-Wpn-Mortar-ROF03", "R-Wpn-Mortar-Damage06", "R-Wpn-AAGun04", "R-Wpn-AAGun-Damage03", "R-Defense-AASite-QuadRotMg", "R-Cyborg-Wpn-Cannon02", "R-Cyborg-Wpn-Rocket02", // 9 @@ -146,7 +147,7 @@ const mis_gammaResearchNew = [ // 1 "R-Wpn-Howitzer03-Rot", "R-Wpn-MG-Damage09", "R-Struc-Power-Upgrade02", "R-Sys-Engineering03", "R-Wpn-Cannon-Damage07", "R-Wpn-AAGun-Damage04", "R-Defense-WallUpgrade07", "R-Struc-Materials09", - "R-Defense-RotHow", "R-Wpn-Howitzer-Damage04", "R-Wpn-Flamer-ROF04", + "R-Defense-RotHow", "R-Wpn-Howitzer-Damage04", "R-Wpn-Flamer-ROF04", "R-Wpn-RocketSlow-ROFRR01", // 2 "R-Wpn-Cannon-Damage08", "R-Wpn-AAGun-Damage05", "R-Wpn-Howitzer-Damage05", @@ -514,7 +515,7 @@ const mis_gammaResearchNewClassic = [ "R-Wpn-Missile-Damage02", "R-Wpn-Missile-ROF01", "R-Wpn-Missile-HvSAM", "R-Defense-SamSite2", // 7 "R-Wpn-RailGun02", "R-Defense-Rail2", "R-Defense-WallTower-Rail2", "R-Wpn-Rail-Damage02", - "R-Wpn-Rail-ROF02", "R-Wpn-Rail-ROF03", "R-Wpn-MdArtMissile", "R-Wpn-Missile-Accuracy02", + "R-Wpn-Rail-ROF02", "R-Wpn-Rail-Damage03", "R-Wpn-Rail-ROF03", "R-Wpn-MdArtMissile", "R-Wpn-Missile-Accuracy02", "R-Wpn-Missile-ROF02", "R-Defense-MdArtMissile", "R-Wpn-Laser02", "R-Defense-PulseLas", "R-Wpn-Energy-ROF02", "R-Wpn-Energy-Damage03", "R-Wpn-Energy-ROF03", // 8 @@ -522,7 +523,7 @@ const mis_gammaResearchNewClassic = [ // 9 "R-Vehicle-Body10", "R-Vehicle-Metals09", "R-Cyborg-Metals09", "R-Vehicle-Armor-Heat06", "R-Cyborg-Armor-Heat06", "R-Vehicle-Engine09", "R-Wpn-HvArtMissile", "R-Defense-HvyArtMissile", - "R-Wpn-Missile-Damage03", "R-Wpn-Missile-ROF03", "R-Wpn-RailGun03", "R-Wpn-Rail-Damage03", + "R-Wpn-Missile-Damage03", "R-Wpn-Missile-ROF03", "R-Wpn-RailGun03", "R-Defense-Rail3", "R-Defense-WallTower-Rail3", ]; diff --git a/data/base/script/fastplay/fastdemo.js b/data/base/script/fastplay/fastdemo.js index 318b2b486ae..4d51b290fde 100644 --- a/data/base/script/fastplay/fastdemo.js +++ b/data/base/script/fastplay/fastdemo.js @@ -174,11 +174,10 @@ function eventStartLevel() }, }); - camSafeRemoveObject("flamerArti", false); camSetArtifacts({ "base1Factory": { tech: ["R-Defense-Tower01", "R-Wpn-MG-Damage02"] }, "base1PowerGenerator": { tech: "R-Struc-PowerModuleMk1" }, - "artifactPos": { tech: "R-Wpn-Flamer01Mk1" }, + "flamerArti": { tech: "R-Wpn-Flamer01Mk1" }, "radarTower": { tech: "R-Sys-Sensor-Turret01" }, "base2Factory": { tech: ["R-Vehicle-Prop-Halftracks", "R-Wpn-Flamer-Damage01"] }, "bunkerArti": { tech: ["R-Sys-Engineering01", "R-Sys-MobileRepairTurret01" ]}, diff --git a/data/base/script/tutorial.js b/data/base/script/tutorial.js index 78d77c74c90..f482609be8d 100644 --- a/data/base/script/tutorial.js +++ b/data/base/script/tutorial.js @@ -508,9 +508,6 @@ function eventStartLevel() setStructureLimits(cam_base_structures.powerGenerator, 1, CAM_HUMAN_PLAYER); setStructureLimits(cam_base_structures.researchLab, 1, CAM_HUMAN_PLAYER); - camSafeRemoveObject("mgArtifact", false); - addFeature("OilResource", 24, 26); - setMiniMap(true); setDesign(false); diff --git a/data/base/shaders/nolight_instanced.frag b/data/base/shaders/nolight_instanced.frag index eba0e1064d3..a84bc6f1fed 100644 --- a/data/base/shaders/nolight_instanced.frag +++ b/data/base/shaders/nolight_instanced.frag @@ -60,7 +60,10 @@ void main() } // Return fragment color - fragColour = mix(fragColour, vec4(fogColor.xyz, fragColour.w), clamp(fogFactor, 0.0, 1.0)); + vec3 fogPremultAlphaFactor = mix(vec3(fragColour.a), vec3(1.f,1.f,1.f), vec3(float(alphaTest))); + float fogFactorAdjust = mix(1.f, 0.f, float(alphaTest)); + fragColour = vec4(mix(fragColour.rgb, fogColor.rgb * fogPremultAlphaFactor, clamp(fogFactor * fogFactorAdjust, 0.0, 1.0)), fragColour.a); + fragColour.a = fragColour.a * (1.0 - clamp(fogFactor, 0.0, 1.0)); } #ifdef NEWGL diff --git a/data/base/shaders/pointlights.frag b/data/base/shaders/pointlights.frag index 90b99bdb873..f7b93e4eaf4 100644 --- a/data/base/shaders/pointlights.frag +++ b/data/base/shaders/pointlights.frag @@ -6,6 +6,7 @@ uniform vec4 PointLightsPosition[WZ_MAX_POINT_LIGHTS]; uniform vec4 PointLightsColorAndEnergy[WZ_MAX_POINT_LIGHTS]; uniform ivec4 bucketOffsetAndSize[WZ_BUCKET_DIMENSION * WZ_BUCKET_DIMENSION]; uniform ivec4 PointLightsIndex[WZ_MAX_INDEXED_POINT_LIGHTS]; +uniform int bucketDimensionUsed; uniform int viewportWidth; uniform int viewportHeight; @@ -53,8 +54,8 @@ vec4 iterateOverAllPointLights( mat3 normalWorldSpaceToLocalSpace ) { vec4 light = vec4(0.f); - ivec2 bucket = ivec2(float(WZ_BUCKET_DIMENSION) * clipSpaceCoord); - int bucketId = min(bucket.y + bucket.x * WZ_BUCKET_DIMENSION, WZ_BUCKET_DIMENSION * WZ_BUCKET_DIMENSION - 1); + ivec2 bucket = ivec2(float(bucketDimensionUsed) * clipSpaceCoord); + int bucketId = min(bucket.y + bucket.x * bucketDimensionUsed, bucketDimensionUsed * bucketDimensionUsed - 1); for (int i = 0; i < bucketOffsetAndSize[bucketId].y; i++) { diff --git a/data/base/shaders/terrain_water_high.frag b/data/base/shaders/terrain_water_high.frag index de18ea15fda..8be250bd951 100644 --- a/data/base/shaders/terrain_water_high.frag +++ b/data/base/shaders/terrain_water_high.frag @@ -54,26 +54,22 @@ vec4 main_bumpMapping() vec2 uv1 = uv1_uv2.xy; vec2 uv2 = uv1_uv2.zw; - vec3 N1 = texture2DArray(tex_nm, vec3(uv2, 0.f), WZ_MIP_LOAD_BIAS).xzy; // y is up in modelSpace - vec3 N2 = texture2DArray(tex_nm, vec3(uv1, 1.f), WZ_MIP_LOAD_BIAS).xzy; - //use overlay blending to mix normal maps properly - bvec3 computedN_select = lessThan(N1, vec3(0.5)); - vec3 computedN_multiply = 2.f * N1 * N2; - vec3 computedN_screen = vec3(1.f) - 2.f * (vec3(1.f) - N1) * (vec3(1.f) - N2); - vec3 N = mix(computedN_screen, computedN_multiply, vec3(computedN_select)); - - N = mix(normalize(N * 2.f - 1.f), vec3(0.f,1.f,0.f), vec3(float(N == vec3(0.f,0.f,0.f)))); - - float lambertTerm = max(dot(N, lightDir), 0.0); // diffuse lighting - - // Gaussian specular term computation - float gloss = texture2DArray(tex_sm, vec3(uv1, 0.f), WZ_MIP_LOAD_BIAS).r * texture2DArray(tex_sm, vec3(uv2, 1.f), WZ_MIP_LOAD_BIAS).r; - vec3 H = normalize(halfVec); - float exponent = acos(dot(H, N)) / (gloss + 0.05); - float gaussianTerm = exp(-(exponent * exponent)); - - vec4 fragColor = (texture2DArray(tex, vec3(uv1, 0.f), WZ_MIP_LOAD_BIAS)+texture2DArray(tex, vec3(uv2, 1.f), WZ_MIP_LOAD_BIAS)) * (gloss+vec4(0.08,0.13,0.15,1.0)); - fragColor = fragColor*(ambientLight+diffuseLight*lambertTerm) + specularLight*(1.0-gloss)*gaussianTerm*vec4(1.0,0.843,0.686,1.0); + vec3 N1 = texture2DArray(tex_nm, vec3(uv1, 0.f), WZ_MIP_LOAD_BIAS).xzy*vec3(2.f, 2.f, 2.f) + vec3(-1.f, 0.f, -1.f); // y is up in modelSpace + vec3 N2 = texture2DArray(tex_nm, vec3(uv2, 1.f), WZ_MIP_LOAD_BIAS).xzy*vec3(-2.f, 2.f,-2.f) + vec3(1.f, -1.f, 1.f); + + //use RNM blending to mix normal maps properly, see https://blog.selfshadow.com/publications/blending-in-detail/ + vec3 N = normalize(N1 * dot(N1,N2) - N2*N1.y); + + // Light + float noise = texture2DArray(tex, vec3(uv1, 0.f), WZ_MIP_LOAD_BIAS).r * texture2DArray(tex, vec3(uv2, 1.f), WZ_MIP_LOAD_BIAS).r; + float foam = texture2DArray(tex_sm, vec3(uv1, 0.f), WZ_MIP_LOAD_BIAS).r * texture2DArray(tex_sm, vec3(uv2, 1.f), WZ_MIP_LOAD_BIAS).r; + + float lambertTerm = max(dot(N, lightDir), 0.0); + float blinnTerm = pow(max(dot(N, halfVec), 0.0), 32.f); + + vec4 fragColor = vec4(0.16,0.26,0.3,1.0)+(noise+foam)*noise*0.5; + fragColor = fragColor*(ambientLight+diffuseLight*lambertTerm) + specularLight*blinnTerm*(foam*foam+noise); + vec4 lightmap_vec4 = texture(lightmap_tex, uvLightmap, 0.f); vec4 color = fragColor * vec4(vec3(lightmap_vec4.a), 1.f); // ... * tile brightness / ambient occlusion (stored in lightmap.a); color.rgb = blendAddEffectLighting(color.rgb, (lightmap_vec4.rgb / 1.5f)); // additive color (from environmental point lights / effects) @@ -83,8 +79,8 @@ vec4 main_bumpMapping() void main() { vec4 fragColor = main_bumpMapping(); - fragColor = mix(fragColor, fragColor-depth*0.0007, depth*0.0009); - fragColor.a = mix(0.25, 1.0, depth2*0.005); + fragColor = mix(fragColor, fragColor-depth, depth); + fragColor.a = mix(0.25, 1.0, depth2); if (fogEnabled > 0) { diff --git a/data/base/shaders/terrain_water_high.vert b/data/base/shaders/terrain_water_high.vert index 3759c9fbaec..8b7341561c7 100644 --- a/data/base/shaders/terrain_water_high.vert +++ b/data/base/shaders/terrain_water_high.vert @@ -37,8 +37,8 @@ VERTEX_OUTPUT vec3 halfVec; void main() { uvLightmap = (ModelUVLightmapMatrix * vec4(vertex.xyz, 1.f)).xy; - depth = vertex.w; - depth2 = length(vertex.y - vertex.w); + depth = vertex.w*0.0007; + depth2 = length(vertex.y - vertex.w)*0.005; vec2 uv1 = vec2(vertex.x/4.f/128.f + timeSec/80.f, -vertex.z/4.f/128.f + timeSec/40.f); // (ModelUV1Matrix * vertex).xy; vec2 uv2 = vec2(vertex.x/4.f/128.f, -vertex.z/4.f/128.f - timeSec/40.f); // (ModelUV2Matrix * vertex).xy; @@ -46,7 +46,7 @@ void main() vec3 eyeVec = normalize(cameraPos.xyz - vertex.xyz); lightDir = sunPos.xyz; - halfVec = lightDir + eyeVec; + halfVec = normalize(lightDir + eyeVec); vec4 position = ModelViewProjectionMatrix * vec4(vertex.xyz, 1.f); vertexDistance = position.z; diff --git a/data/base/shaders/vk/nolight_instanced.frag b/data/base/shaders/vk/nolight_instanced.frag index cd87f658259..3ae341d2b92 100644 --- a/data/base/shaders/vk/nolight_instanced.frag +++ b/data/base/shaders/vk/nolight_instanced.frag @@ -40,7 +40,10 @@ void main() } // Return fragment color - fragColour = mix(fragColour, vec4(fogColor.xyz, fragColour.w), clamp(fogFactor, 0.0, 1.0)); + vec3 fogPremultAlphaFactor = mix(vec3(fragColour.a), vec3(1.f,1.f,1.f), vec3(float(alphaTest))); + float fogFactorAdjust = mix(1.f, 0.f, float(alphaTest)); + fragColour = vec4(mix(fragColour.rgb, fogColor.rgb * fogPremultAlphaFactor, clamp(fogFactor * fogFactorAdjust, 0.0, 1.0)), fragColour.a); + fragColour.a = fragColour.a * (1.0 - clamp(fogFactor, 0.0, 1.0)); } FragColor = fragColour; diff --git a/data/base/shaders/vk/pointlights.glsl b/data/base/shaders/vk/pointlights.glsl index eb6363c90f7..72d8d92dfb9 100644 --- a/data/base/shaders/vk/pointlights.glsl +++ b/data/base/shaders/vk/pointlights.glsl @@ -42,8 +42,8 @@ vec4 iterateOverAllPointLights( mat3 normalWorldSpaceToLocalSpace ) { vec4 light = vec4(0); - ivec2 bucket = ivec2(WZ_BUCKET_DIMENSION * clipSpaceCoord); - int bucketId = min(bucket.y + bucket.x * WZ_BUCKET_DIMENSION, WZ_BUCKET_DIMENSION * WZ_BUCKET_DIMENSION - 1); + ivec2 bucket = ivec2(bucketDimensionUsed * clipSpaceCoord); + int bucketId = min(bucket.y + bucket.x * bucketDimensionUsed, bucketDimensionUsed * bucketDimensionUsed - 1); for (int i = 0; i < bucketOffsetAndSize[bucketId].y; i++) { diff --git a/data/base/shaders/vk/tcmask_instanced.glsl b/data/base/shaders/vk/tcmask_instanced.glsl index aa40eb921e5..e8cde264b5b 100644 --- a/data/base/shaders/vk/tcmask_instanced.glsl +++ b/data/base/shaders/vk/tcmask_instanced.glsl @@ -31,6 +31,7 @@ layout(std140, set = 0, binding = 0) uniform globaluniforms vec4 PointLightsColorAndEnergy[WZ_MAX_POINT_LIGHTS]; ivec4 bucketOffsetAndSize[WZ_BUCKET_DIMENSION * WZ_BUCKET_DIMENSION]; ivec4 PointLightsIndex[WZ_MAX_INDEXED_POINT_LIGHTS]; + int bucketDimensionUsed; }; layout(std140, set = 1, binding = 0) uniform meshuniforms diff --git a/data/base/shaders/vk/terrain_combined.glsl b/data/base/shaders/vk/terrain_combined.glsl index b8d9022daf6..6092da57870 100644 --- a/data/base/shaders/vk/terrain_combined.glsl +++ b/data/base/shaders/vk/terrain_combined.glsl @@ -31,6 +31,7 @@ layout(std140, set = 0, binding = 0) uniform cbuffer { vec4 PointLightsColorAndEnergy[WZ_MAX_POINT_LIGHTS]; ivec4 bucketOffsetAndSize[WZ_BUCKET_DIMENSION * WZ_BUCKET_DIMENSION]; ivec4 PointLightsIndex[WZ_MAX_INDEXED_POINT_LIGHTS]; + int bucketDimensionUsed; }; // interpolated data. location count = 11 diff --git a/data/base/shaders/vk/terrain_water_high.frag b/data/base/shaders/vk/terrain_water_high.frag index d0e02eae159..a6249c04a45 100644 --- a/data/base/shaders/vk/terrain_water_high.frag +++ b/data/base/shaders/vk/terrain_water_high.frag @@ -44,26 +44,22 @@ vec4 main_bumpMapping() vec2 uv1 = uv1_uv2.xy; vec2 uv2 = uv1_uv2.zw; - vec3 N1 = texture(tex_nm, vec3(uv2, 0.f), WZ_MIP_LOAD_BIAS).xzy; // y is up in modelSpace - vec3 N2 = texture(tex_nm, vec3(uv1, 1.f), WZ_MIP_LOAD_BIAS).xzy; - //use overlay blending to mix normal maps properly - bvec3 computedN_select = lessThan(N1, vec3(0.5)); - vec3 computedN_multiply = 2.f * N1 * N2; - vec3 computedN_screen = vec3(1.f) - 2.f * (vec3(1.f) - N1) * (vec3(1.f) - N2); - vec3 N = mix(computedN_screen, computedN_multiply, vec3(computedN_select)); - - N = mix(normalize(N * 2.f - 1.f), vec3(0.f,1.f,0.f), vec3(float(N == vec3(0.f,0.f,0.f)))); - - float lambertTerm = max(dot(N, lightDir), 0.0); // diffuse lighting - - // Gaussian specular term computation - float gloss = texture(tex_sm, vec3(uv1, 0.f), WZ_MIP_LOAD_BIAS).r * texture(tex_sm, vec3(uv2, 1.f), WZ_MIP_LOAD_BIAS).r; - vec3 H = normalize(halfVec); - float exponent = acos(dot(H, N)) / (gloss + 0.05); - float gaussianTerm = exp(-(exponent * exponent)); - - vec4 fragColor = (texture(tex, vec3(uv1, 0.f), WZ_MIP_LOAD_BIAS)+texture(tex, vec3(uv2, 1.f), WZ_MIP_LOAD_BIAS)) * (gloss+vec4(0.08,0.13,0.15,1.0)); - fragColor = fragColor*(ambientLight+diffuseLight*lambertTerm) + specularLight*(1.0-gloss)*gaussianTerm*vec4(1.0,0.843,0.686,1.0); + vec3 N1 = texture(tex_nm, vec3(uv1, 0.f), WZ_MIP_LOAD_BIAS).xzy*vec3(2.f, 2.f, 2.f) + vec3(-1.f, 0.f, -1.f); // y is up in modelSpace + vec3 N2 = texture(tex_nm, vec3(uv2, 1.f), WZ_MIP_LOAD_BIAS).xzy*vec3(-2.f, 2.f,-2.f) + vec3(1.f, -1.f, 1.f); + + //use RNM blending to mix normal maps properly, see https://blog.selfshadow.com/publications/blending-in-detail/ + vec3 N = normalize(N1 * dot(N1,N2) - N2*N1.y); + + // Light + float noise = texture(tex, vec3(uv1, 0.f), WZ_MIP_LOAD_BIAS).r * texture(tex, vec3(uv2, 1.f), WZ_MIP_LOAD_BIAS).r; + float foam = texture(tex_sm, vec3(uv1, 0.f), WZ_MIP_LOAD_BIAS).r * texture(tex_sm, vec3(uv2, 1.f), WZ_MIP_LOAD_BIAS).r; + + float lambertTerm = max(dot(N, lightDir), 0.0); + float blinnTerm = pow(max(dot(N, halfVec), 0.0), 32.f); + + vec4 fragColor = vec4(0.16,0.26,0.3,1.0)+(noise+foam)*noise*0.5; + fragColor = fragColor*(ambientLight+diffuseLight*lambertTerm) + specularLight*blinnTerm*(foam*foam+noise); + vec4 lightmap_vec4 = texture(lightmap_tex, uvLightmap, 0.f); vec4 color = fragColor * vec4(vec3(lightmap_vec4.a), 1.f); // ... * tile brightness / ambient occlusion (stored in lightmap.a); color.rgb = blendAddEffectLighting(color.rgb, (lightmap_vec4.rgb / 1.5f)); // additive color (from environmental point lights / effects) @@ -73,8 +69,8 @@ vec4 main_bumpMapping() void main() { vec4 fragColor = main_bumpMapping(); - fragColor = mix(fragColor, fragColor-depth*0.0007, depth*0.0009); - fragColor.a = mix(0.25, 1.0, depth2*0.005); + fragColor = mix(fragColor, fragColor-depth, depth); + fragColor.a = mix(0.25, 1.0, depth2); if (fogEnabled > 0) { diff --git a/data/base/shaders/vk/terrain_water_high.vert b/data/base/shaders/vk/terrain_water_high.vert index e0e0479ca98..14d8a4df136 100644 --- a/data/base/shaders/vk/terrain_water_high.vert +++ b/data/base/shaders/vk/terrain_water_high.vert @@ -31,8 +31,8 @@ layout(location = 7) out float depth2; void main() { uvLightmap = (ModelUVLightmapMatrix * vec4(vertex.xyz, 1.f)).xy; - depth = vertex.w; - depth2 = length(vertex.y - vertex.w); + depth = vertex.w*0.0007; + depth2 = length(vertex.y - vertex.w)*0.005; vec2 uv1 = vec2(vertex.x/4.f/128.f + timeSec/80.f, -vertex.z/4.f/128.f + timeSec/40.f); // (ModelUV1Matrix * vertex).xy; vec2 uv2 = vec2(vertex.x/4.f/128.f, -vertex.z/4.f/128.f - timeSec/40.f); // (ModelUV2Matrix * vertex).xy; @@ -40,7 +40,7 @@ void main() vec3 eyeVec = normalize(cameraPos.xyz - vertex.xyz); lightDir = sunPos.xyz; - halfVec = lightDir + eyeVec; + halfVec = normalize(lightDir + eyeVec); vec4 position = ModelViewProjectionMatrix * vec4(vertex.xyz, 1.f); vertexDistance = position.z; diff --git a/data/base/stats/brain.json b/data/base/stats/brain.json index 9f80a8dff0f..ca685bf4937 100644 --- a/data/base/stats/brain.json +++ b/data/base/stats/brain.json @@ -8,7 +8,7 @@ "maxDroidsMult": 2, "name": "Command Turret", "ranks": [ "Rookie", "Green", "Trained", "Regular", "Professional", "Veteran", "Elite", "Special", "Hero" ], - "thresholds": [ 0, 8, 16, 32, 64, 128, 256, 512, 1024 ], + "thresholds": [ 0, 24, 48, 96, 192, 384, 768, 1536, 2048 ], "turret": "CommandTurret1" }, "ZNULLBRAIN": { diff --git a/data/base/stats/features.json b/data/base/stats/features.json index 648b9a7d791..17ce90eb4c3 100644 --- a/data/base/stats/features.json +++ b/data/base/stats/features.json @@ -614,7 +614,7 @@ }, "Tree1": { "armour": 10, - "breadth": 2, + "breadth": 1, "hitpoints": 50, "id": "Tree1", "lineOfSight": 0, @@ -622,11 +622,11 @@ "name": "*Tree1*", "tileDraw": 1, "type": "TREE", - "width": 2 + "width": 1 }, "Tree2": { "armour": 10, - "breadth": 2, + "breadth": 1, "hitpoints": 50, "id": "Tree2", "lineOfSight": 0, @@ -634,7 +634,7 @@ "name": "*Tree2*", "tileDraw": 1, "type": "TREE", - "width": 2 + "width": 1 }, "Tree3": { "armour": 10, @@ -650,7 +650,7 @@ }, "TreeSnow1": { "armour": 10, - "breadth": 2, + "breadth": 1, "hitpoints": 50, "id": "TreeSnow1", "lineOfSight": 0, @@ -658,11 +658,11 @@ "name": "*Snowy Tree1*", "tileDraw": 1, "type": "TREE", - "width": 2 + "width": 1 }, "TreeSnow2": { "armour": 10, - "breadth": 2, + "breadth": 1, "hitpoints": 50, "id": "TreeSnow2", "lineOfSight": 0, @@ -670,7 +670,7 @@ "name": "*Snowy Tree2*", "tileDraw": 1, "type": "TREE", - "width": 2 + "width": 1 }, "TreeSnow3": { "armour": 10, diff --git a/data/base/stats/propulsion.json b/data/base/stats/propulsion.json index 58a3a4c7df5..cff7012d2f4 100644 --- a/data/base/stats/propulsion.json +++ b/data/base/stats/propulsion.json @@ -20,11 +20,12 @@ "weight": 10 }, "CyborgLegs": { - "buildPoints": 50, + "buildPoints": 10, "buildPower": 10, "deceleration": 450, "hitpointPctOfBody": 50, "id": "CyborgLegs", + "model": "cybd_std.pie", "name": "Cyborg Propulsion", "speed": 400, "spinAngle": 45, @@ -34,11 +35,12 @@ "weight": 100 }, "CyborgLegs02": { - "buildPoints": 50, + "buildPoints": 10, "buildPower": 10, "deceleration": 450, "hitpointPctOfBody": 100, "id": "CyborgLegs02", + "model": "cybd_std.pie", "name": "Cyborg Propulsion II", "speed": 400, "spinAngle": 45, @@ -48,11 +50,12 @@ "weight": 100 }, "CyborgLegs03": { - "buildPoints": 50, + "buildPoints": 10, "buildPower": 10, "deceleration": 450, "hitpointPctOfBody": 150, "id": "CyborgLegs03", + "model": "cybd_std.pie", "name": "Cyborg Propulsion III", "speed": 400, "spinAngle": 45, @@ -233,8 +236,8 @@ "weight": 550 }, "wheeled01": { - "buildPoints": 50, - "buildPower": 50, + "buildPoints": 25, + "buildPower": 25, "designable": 1, "hitpointPctOfBody": 100, "id": "wheeled01", @@ -243,11 +246,11 @@ "skidDeceleration": 350, "speed": 175, "type": "Wheeled", - "weight": 300 + "weight": 250 }, "wheeled02": { - "buildPoints": 50, - "buildPower": 100, + "buildPoints": 25, + "buildPower": 75, "designable": 1, "hitpointPctOfBody": 200, "id": "wheeled02", @@ -256,11 +259,11 @@ "skidDeceleration": 350, "speed": 175, "type": "Wheeled", - "weight": 250 + "weight": 200 }, "wheeled03": { - "buildPoints": 50, - "buildPower": 150, + "buildPoints": 25, + "buildPower": 125, "designable": 1, "hitpointPctOfBody": 300, "id": "wheeled03", @@ -269,6 +272,6 @@ "skidDeceleration": 350, "speed": 175, "type": "Wheeled", - "weight": 200 + "weight": 150 } } diff --git a/data/base/stats/research.json b/data/base/stats/research.json index 967c1d27c68..314a32d7fa9 100644 --- a/data/base/stats/research.json +++ b/data/base/stats/research.json @@ -1136,7 +1136,7 @@ "msgName": "RES_CYW_CN1", "name": "Heavy Gunner Cyborg", "requiredResearch": [ - "R-Wpn-Cannon1Mk1", + "R-Wpn-Cannon3Mk1", "R-Cyborg-Wpn-MG" ], "researchPoints": 1500, @@ -1151,8 +1151,8 @@ "id": "R-Cyborg-Wpn-Cannon02", "msgName": "RES_CYW_CN2", "name": "Sniper Cyborg", - "replacedComponents": [ - "CyborgCannon:CyborgCannon02" + "redComponents": [ + "CyborgCannon" ], "requiredResearch": [ "R-Wpn-Cannon4AMk1" @@ -1185,8 +1185,8 @@ "id": "R-Cyborg-Wpn-Flamer02", "msgName": "RES_CYW_FL2", "name": "Thermite Cyborg", - "replacedComponents": [ - "CyborgFlamer01:CyborgFlamer02" + "redComponents": [ + "CyborgFlamer01" ], "requiredResearch": [ "R-Wpn-Flame2" @@ -1236,8 +1236,8 @@ "id": "R-Cyborg-Wpn-Rocket02", "msgName": "RES_CYW_RK2", "name": "Tank Killer Cyborg", - "replacedComponents": [ - "CyborgRocket:CyborgRocket02" + "redComponents": [ + "CyborgRocket" ], "requiredResearch": [ "R-Wpn-Rocket07-Tank-Killer" @@ -1254,8 +1254,8 @@ "id": "R-Cyborg-Wpn-RotMG", "msgName": "RES_CYW_MG4", "name": "Assault Gunner Cyborg", - "replacedComponents": [ - "CyborgChaingun:CyborgRotMG" + "redComponents": [ + "CyborgChaingun" ], "requiredResearch": [ "R-Wpn-MG4" @@ -1272,8 +1272,8 @@ "id": "R-Cyborg-Wpn-ATMiss", "msgName": "RES_CYW_ATM", "name": "Scourge Cyborg", - "replacedComponents": [ - "CyborgRocket02:Cyb-Wpn-Atmiss" + "redComponents": [ + "CyborgRocket02" ], "requiredResearch": [ "R-Wpn-Missile2A-T" @@ -1305,8 +1305,8 @@ "id": "R-Cyborg-Wpn-Rail1", "msgName": "RES_CYW_RL1", "name": "Needle Gunner Cyborg", - "replacedComponents": [ - "CyborgCannon02:Cyb-Wpn-Rail1" + "redComponents": [ + "CyborgCannon02" ], "requiredResearch": [ "R-Wpn-RailGun01" @@ -1332,8 +1332,8 @@ "requiredResearch": [ "R-Sys-Engineering01" ], - "researchPoints": 600, - "researchPower": 18, + "researchPoints": 300, + "researchPower": 9, "resultStructures": [ "A0HardcreteMk1Wall", "A0HardcreteMk1CWall", @@ -1351,8 +1351,8 @@ "R-Defense-HardcreteWall", "R-Wpn-Rocket02-MRL" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "Emplacement-MRL-pit" ], @@ -1367,8 +1367,8 @@ "R-Defense-HardcreteWall", "R-Wpn-Mortar01Lt" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "Emplacement-MortarPit01" ], @@ -1383,8 +1383,8 @@ "R-Defense-HardcreteWall", "R-Wpn-MG-Damage01" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "PillBox1" ], @@ -1399,8 +1399,8 @@ "R-Defense-HardcreteWall", "R-Wpn-Cannon1Mk1" ], - "researchPoints": 1500, - "researchPower": 46, + "researchPoints": 750, + "researchPower": 23, "resultStructures": [ "PillBox4" ], @@ -1415,8 +1415,8 @@ "R-Defense-HardcreteWall", "R-Wpn-Flamer01Mk1" ], - "researchPoints": 1500, - "researchPower": 46, + "researchPoints": 750, + "researchPower": 23, "resultStructures": [ "PillBox5" ], @@ -1431,8 +1431,8 @@ "R-Wpn-Rocket01-LtAT", "R-Defense-HardcreteWall" ], - "researchPoints": 1500, - "researchPower": 46, + "researchPoints": 750, + "researchPower": 23, "resultStructures": [ "PillBox6" ], @@ -1446,8 +1446,8 @@ "requiredResearch": [ "R-Sys-Engineering01" ], - "researchPoints": 600, - "researchPower": 18, + "researchPoints": 300, + "researchPower": 9, "resultStructures": [ "A0TankTrap" ], @@ -1462,8 +1462,8 @@ "R-Wpn-MG1Mk1", "R-Sys-Engineering01" ], - "researchPoints": 600, - "researchPower": 18, + "researchPoints": 250, + "researchPower": 7, "resultStructures": [ "GuardTower1MG" ], @@ -1480,8 +1480,8 @@ "requiredResearch": [ "R-Wpn-MG2Mk1" ], - "researchPoints": 1100, - "researchPower": 36, + "researchPoints": 550, + "researchPower": 17, "resultStructures": [ "GuardTower2" ], @@ -1498,8 +1498,8 @@ "requiredResearch": [ "R-Wpn-MG3Mk1" ], - "researchPoints": 1700, - "researchPower": 70, + "researchPoints": 850, + "researchPower": 26, "resultStructures": [ "GuardTower3" ], @@ -1514,8 +1514,8 @@ "R-Wpn-Rocket05-MiniPod", "R-Defense-HardcreteWall" ], - "researchPoints": 2400, - "researchPower": 75, + "researchPoints": 1200, + "researchPower": 37, "resultStructures": [ "GuardTower6" ], @@ -1530,8 +1530,8 @@ "R-Defense-HardcreteWall", "R-Wpn-MG3Mk1" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "WallTower01" ], @@ -1546,8 +1546,8 @@ "R-Wpn-Cannon1Mk1", "R-Defense-HardcreteWall" ], - "researchPoints": 1500, - "researchPower": 46, + "researchPoints": 750, + "researchPower": 23, "resultStructures": [ "WallTower02" ], @@ -1565,8 +1565,8 @@ "R-Wpn-Cannon2Mk1", "R-Defense-WallTower02" ], - "researchPoints": 1800, - "researchPower": 56, + "researchPoints": 900, + "researchPower": 28, "resultStructures": [ "WallTower03" ], @@ -1584,8 +1584,8 @@ "R-Defense-WallTower03", "R-Wpn-Cannon3Mk1" ], - "researchPoints": 2400, - "researchPower": 75, + "researchPoints": 1200, + "researchPower": 37, "resultStructures": [ "WallTower04" ], @@ -1600,8 +1600,8 @@ "R-Wpn-Rocket01-LtAT", "R-Defense-HardcreteWall" ], - "researchPoints": 1500, - "researchPower": 46, + "researchPoints": 750, + "researchPower": 23, "resultStructures": [ "WallTower06" ], @@ -1618,8 +1618,8 @@ "R-Defense-HardcreteWall", "R-Sys-Engineering01" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 600, + "researchPower": 18, "results": [ { "class": "Building", @@ -1647,8 +1647,8 @@ "R-Defense-WallUpgrade01", "R-Struc-Research-Module" ], - "researchPoints": 2400, - "researchPower": 75, + "researchPoints": 1200, + "researchPower": 37, "results": [ { "class": "Building", @@ -1677,8 +1677,8 @@ "R-Defense-WallUpgrade02", "R-Struc-Research-Upgrade01" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1800, + "researchPower": 56, "results": [ { "class": "Building", @@ -1834,8 +1834,8 @@ "requiredResearch": [ "R-Defense-WallUpgrade01" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 300, + "researchPower": 9, "results": [ { "class": "Building", @@ -1862,8 +1862,8 @@ "requiredResearch": [ "R-Struc-Materials01" ], - "researchPoints": 2400, - "researchPower": 75, + "researchPoints": 600, + "researchPower": 18, "results": [ { "class": "Building", @@ -1891,8 +1891,8 @@ "requiredResearch": [ "R-Struc-Materials02" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 900, + "researchPower": 28, "results": [ { "class": "Building", @@ -2149,8 +2149,8 @@ "R-Sys-Sensor-Turret01", "R-Defense-Tower01" ], - "researchPoints": 900, - "researchPower": 28, + "researchPoints": 450, + "researchPower": 14, "resultStructures": [ "Sys-SensoTower01" ], @@ -2605,8 +2605,8 @@ "R-Wpn-Flamer01Mk1", "R-Sys-Engineering01" ], - "researchPoints": 480, - "researchPower": 45, + "researchPoints": 240, + "researchPower": 7, "resultStructures": [ "GuardTower4" ], @@ -2654,6 +2654,7 @@ "subgroupIconID": "IMAGE_RES_GRPUPG" }, "R-Wpn-Flamer-Range01-ScavReduce-Undo": { + "excludeFromCheats": 1, "iconID": "IMAGE_RES_WEAPONTECH", "id": "R-Wpn-Flamer-Range01-ScavReduce-Undo", "keyTopic": 1, @@ -3469,7 +3470,8 @@ "researchPoints": 1200, "researchPower": 37, "resultComponents": [ - "Rocket-Pod" + "Rocket-Pod", + "Rocket-VTOL-Pod" ], "statID": "Rocket-Pod" }, @@ -3663,8 +3665,8 @@ "requiredResearch": [ "R-Wpn-AAGun02" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 2400, + "researchPower": 75, "resultStructures": [ "AASite-QuadBof" ], @@ -3679,8 +3681,8 @@ "requiredResearch": [ "R-Wpn-AAGun03" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1800, + "researchPower": 56, "resultStructures": [ "AASite-QuadMg1" ], @@ -3698,8 +3700,8 @@ "R-Wpn-AAGun04", "R-Defense-AASite-QuadBof" ], - "researchPoints": 6000, - "researchPower": 187, + "researchPoints": 3000, + "researchPower": 93, "resultStructures": [ "AASite-QuadRotMg" ], @@ -3716,8 +3718,8 @@ "requiredResearch": [ "R-Wpn-Cannon4AMk1" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1200, + "researchPower": 37, "resultStructures": [ "Emplacement-HPVcannon" ], @@ -3731,8 +3733,8 @@ "requiredResearch": [ "R-Wpn-HowitzerMk1" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 2400, + "researchPower": 75, "resultStructures": [ "Emplacement-Howitzer105" ], @@ -3751,8 +3753,8 @@ "R-Wpn-Flame2", "R-Defense-Pillbox05" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 1200, + "researchPower": 37, "resultStructures": [ "Tower-Projector" ], @@ -3770,8 +3772,8 @@ "R-Wpn-HvyHowitzer", "R-Defense-Howitzer" ], - "researchPoints": 6000, - "researchPower": 187, + "researchPoints": 3000, + "researchPower": 93, "resultStructures": [ "Emplacement-Howitzer150" ], @@ -3789,8 +3791,8 @@ "R-Wpn-Mortar02Hvy", "R-Defense-MortarPit" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1800, + "researchPower": 56, "resultStructures": [ "Emplacement-MortarPit02" ], @@ -3805,8 +3807,8 @@ "R-Wpn-Rocket06-IDF", "R-Defense-MRL" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 2400, + "researchPower": 75, "resultStructures": [ "Emplacement-Rocket06-IDF" ], @@ -3821,8 +3823,8 @@ "requiredResearch": [ "R-Wpn-MG4" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 2400, + "researchPower": 75, "resultStructures": [ "Pillbox-RotMG" ], @@ -3833,8 +3835,8 @@ "id": "R-Defense-RotCannon", "msgName": "RES_EMP_RotCan", "name": "Assault Cannon Emplacement", - "researchPoints": 6000, - "researchPower": 187, + "researchPoints": 3000, + "researchPower": 93, "resultStructures": [ "Wall-VulcanCan" ], @@ -3852,8 +3854,8 @@ "requiredResearch": [ "R-Wpn-MG4" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 2400, + "researchPower": 75, "resultStructures": [ "GuardTower-RotMg" ], @@ -3872,8 +3874,8 @@ "R-Wpn-Mortar3", "R-Defense-HvyMor" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 2400, + "researchPower": 75, "resultStructures": [ "Emplacement-RotMor" ], @@ -3892,8 +3894,8 @@ "R-Defense-RotMG", "R-Defense-WallTower01" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 2400, + "researchPower": 75, "resultStructures": [ "Wall-RotMg" ], @@ -3908,8 +3910,8 @@ "R-Wpn-Cannon5", "R-Defense-WallTower-HPVcannon" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 5400, + "researchPower": 168, "resultStructures": [ "Wall-VulcanCan" ], @@ -3927,8 +3929,8 @@ "R-Wpn-Cannon4AMk1", "R-Defense-WallTower04" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 3600, + "researchPower": 112, "resultStructures": [ "WallTower-HPVcannon" ], @@ -3944,8 +3946,8 @@ "R-Sys-Engineering02", "R-Defense-WallUpgrade03" ], - "researchPoints": 6000, - "researchPower": 187, + "researchPoints": 3000, + "researchPower": 93, "results": [ { "class": "Building", @@ -3973,8 +3975,8 @@ "requiredResearch": [ "R-Defense-WallUpgrade04" ], - "researchPoints": 8000, - "researchPower": 250, + "researchPoints": 4000, + "researchPower": 125, "results": [ { "class": "Building", @@ -4003,8 +4005,8 @@ "R-Defense-WallUpgrade05", "R-Struc-Research-Upgrade04" ], - "researchPoints": 10000, - "researchPower": 312, + "researchPoints": 5000, + "researchPower": 156, "results": [ { "class": "Building", @@ -4095,8 +4097,8 @@ "R-Defense-WallUpgrade04", "R-Struc-Materials03" ], - "researchPoints": 6000, - "researchPower": 187, + "researchPoints": 1500, + "researchPower": 46, "results": [ { "class": "Building", @@ -4123,8 +4125,8 @@ "requiredResearch": [ "R-Struc-Materials04" ], - "researchPoints": 8000, - "researchPower": 250, + "researchPoints": 2000, + "researchPower": 62, "results": [ { "class": "Building", @@ -4152,8 +4154,8 @@ "requiredResearch": [ "R-Struc-Materials05" ], - "researchPoints": 10000, - "researchPower": 312, + "researchPoints": 2500, + "researchPower": 78, "results": [ { "class": "Building", @@ -4440,8 +4442,8 @@ "R-Wpn-Mortar-Damage03", "R-Sys-Sensor-Upgrade01" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1800, + "researchPower": 56, "resultStructures": [ "Sys-CB-Tower01" ], @@ -4495,8 +4497,8 @@ "R-Sys-Sensor-Tower01", "R-Defense-WallUpgrade01" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "Sys-SensoTower02" ], @@ -4512,8 +4514,8 @@ "R-Sys-CBSensor-Tower01", "R-Sys-VTOLStrike-Tower01" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 3600, + "researchPower": 112, "resultStructures": [ "Sys-VTOL-CB-Tower01" ], @@ -4544,8 +4546,8 @@ "R-Sys-Sensor-Upgrade01", "R-Struc-VTOLPad" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 3600, + "researchPower": 112, "resultStructures": [ "Sys-VTOL-RadarTower01" ], @@ -4769,14 +4771,14 @@ "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "Damage", - "value": 30 + "value": 60 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "RadiusDamage", - "value": 30 + "value": 60 } ], "statID": "QuadMg1AAGun", @@ -4787,7 +4789,8 @@ "id": "R-Wpn-AAGun-Damage02", "name": "AA HE Flak Mk2", "requiredResearch": [ - "R-Wpn-AAGun-Damage01" + "R-Wpn-AAGun-Damage01", + "R-Wpn-AAGun02" ], "researchPoints": 7200, "researchPower": 225, @@ -4797,14 +4800,14 @@ "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "Damage", - "value": 30 + "value": 15 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "RadiusDamage", - "value": 30 + "value": 15 } ], "statID": "QuadMg1AAGun", @@ -4816,7 +4819,8 @@ "id": "R-Wpn-AAGun-Damage03", "name": "AA HE Flak Mk3", "requiredResearch": [ - "R-Wpn-AAGun-Damage02" + "R-Wpn-AAGun-Damage02", + "R-Wpn-AAGun04" ], "researchPoints": 8400, "researchPower": 262, @@ -4826,14 +4830,14 @@ "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "Damage", - "value": 30 + "value": 15 }, { "class": "Weapon", "filterParameter": "ImpactClass", "filterValue": "A-A GUN", "parameter": "RadiusDamage", - "value": 30 + "value": 15 } ], "statID": "QuadMg1AAGun", @@ -4940,7 +4944,7 @@ ], "requiredResearch": [ "R-Wpn-AAGun03", - "R-Wpn-AAGun-Damage02" + "R-Wpn-AAGun-Damage01" ], "researchPoints": 4800, "researchPower": 150, @@ -6595,8 +6599,8 @@ "R-Wpn-Missile2A-T", "R-Defense-Tower06" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 7200, + "researchPower": 225, "resultStructures": [ "GuardTower-ATMiss" ], @@ -6610,8 +6614,8 @@ "requiredResearch": [ "R-Wpn-RailGun01" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 7200, + "researchPower": 225, "resultStructures": [ "GuardTower-Rail1" ], @@ -6628,8 +6632,8 @@ "requiredResearch": [ "R-Wpn-Rocket07-Tank-Killer" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 1200, + "researchPower": 37, "resultStructures": [ "Emplacement-HvyATrocket" ], @@ -6647,7 +6651,7 @@ "R-Wpn-HvArtMissile", "R-Defense-MdArtMissile" ], - "researchPoints": 28800, + "researchPoints": 14400, "researchPower": 450, "resultStructures": [ "Emplacement-HvART-pit" @@ -6662,8 +6666,8 @@ "requiredResearch": [ "R-Wpn-MdArtMissile" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 7200, + "researchPower": 225, "resultStructures": [ "Emplacement-MdART-pit" ], @@ -6677,8 +6681,8 @@ "requiredResearch": [ "R-Wpn-Laser01" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 3600, + "researchPower": 112, "resultStructures": [ "Emplacement-PrisLas" ], @@ -6698,8 +6702,8 @@ "R-Wpn-Laser02", "R-Defense-PrisLas" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 3600, + "researchPower": 112, "resultStructures": [ "Emplacement-PulseLaser" ], @@ -6717,8 +6721,8 @@ "requiredResearch": [ "R-Wpn-RailGun02" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 3600, + "researchPower": 112, "resultStructures": [ "Emplacement-Rail2" ], @@ -6736,8 +6740,8 @@ "R-Wpn-RailGun03", "R-Defense-Rail2" ], - "researchPoints": 28800, - "researchPower": 450, + "researchPoints": 4600, + "researchPower": 143, "resultStructures": [ "Emplacement-Rail3" ], @@ -6752,8 +6756,8 @@ "R-Wpn-Howitzer03-Rot", "R-Defense-HvyHowitzer" ], - "researchPoints": 5000, - "researchPower": 156, + "researchPoints": 2500, + "researchPower": 78, "resultStructures": [ "Emplacement-RotHow" ], @@ -6767,8 +6771,8 @@ "requiredResearch": [ "R-Wpn-Missile-LtSAM" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 7200, + "researchPower": 225, "resultStructures": [ "P0-AASite-SAM1" ], @@ -6786,7 +6790,7 @@ "R-Wpn-Missile-HvSAM", "R-Defense-SamSite1" ], - "researchPoints": 28800, + "researchPoints": 14400, "researchPower": 450, "resultStructures": [ "P0-AASite-SAM2" @@ -6805,8 +6809,8 @@ "R-Wpn-Missile2A-T", "R-Defense-WallTower-HvyA-Trocket" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 7200, + "researchPower": 225, "resultStructures": [ "WallTower-Atmiss" ], @@ -6825,8 +6829,8 @@ "R-Wpn-Rocket07-Tank-Killer", "R-Defense-WallTower06" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 3600, + "researchPower": 112, "resultStructures": [ "WallTower-HvATrocket" ], @@ -6840,8 +6844,8 @@ "requiredResearch": [ "R-Wpn-Laser01" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 7200, + "researchPower": 225, "resultStructures": [ "WallTower-PulseLas" ], @@ -6859,8 +6863,8 @@ "requiredResearch": [ "R-Wpn-RailGun02" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 7200, + "researchPower": 225, "resultStructures": [ "WallTower-Rail2" ], @@ -6878,8 +6882,8 @@ "R-Wpn-RailGun03", "R-Defense-WallTower-Rail2" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 7200, + "researchPower": 225, "resultStructures": [ "WallTower-Rail3" ], @@ -6896,8 +6900,8 @@ "R-Sys-Engineering03", "R-Defense-WallUpgrade06" ], - "researchPoints": 12000, - "researchPower": 375, + "researchPoints": 6000, + "researchPower": 187, "results": [ { "class": "Building", @@ -6925,8 +6929,8 @@ "requiredResearch": [ "R-Defense-WallUpgrade07" ], - "researchPoints": 14000, - "researchPower": 437, + "researchPoints": 7000, + "researchPower": 218, "results": [ { "class": "Building", @@ -6955,8 +6959,8 @@ "R-Defense-WallUpgrade08", "R-Struc-Research-Upgrade07" ], - "researchPoints": 16000, - "researchPower": 450, + "researchPoints": 8000, + "researchPower": 250, "results": [ { "class": "Building", @@ -6986,8 +6990,8 @@ "requiredResearch": [ "R-Defense-WallUpgrade09" ], - "researchPoints": 18000, - "researchPower": 450, + "researchPoints": 9000, + "researchPower": 281, "results": [ { "class": "Building", @@ -7015,8 +7019,8 @@ "requiredResearch": [ "R-Defense-WallUpgrade10" ], - "researchPoints": 20000, - "researchPower": 450, + "researchPoints": 10000, + "researchPower": 312, "results": [ { "class": "Building", @@ -7044,8 +7048,8 @@ "requiredResearch": [ "R-Defense-WallUpgrade11" ], - "researchPoints": 22000, - "researchPower": 450, + "researchPoints": 11000, + "researchPower": 343, "results": [ { "class": "Building", @@ -7099,8 +7103,8 @@ "R-Defense-WallUpgrade07", "R-Struc-Materials06" ], - "researchPoints": 12000, - "researchPower": 375, + "researchPoints": 3000, + "researchPower": 93, "results": [ { "class": "Building", @@ -7127,8 +7131,8 @@ "requiredResearch": [ "R-Struc-Materials07" ], - "researchPoints": 14000, - "researchPower": 437, + "researchPoints": 3500, + "researchPower": 109, "results": [ { "class": "Building", @@ -7156,8 +7160,8 @@ "requiredResearch": [ "R-Struc-Materials08" ], - "researchPoints": 16000, - "researchPower": 450, + "researchPoints": 4000, + "researchPower": 125, "results": [ { "class": "Building", @@ -8222,6 +8226,34 @@ "subgroupIconID": "IMAGE_RES_GRPROF", "techCode": 1 }, + "R-Wpn-RocketSlow-ROFRR01": { + "iconID": "IMAGE_RES_WEAPONTECH", + "id": "R-Wpn-RocketSlow-ROFRR01", + "name": "Ripple Rocket Rapid Loader", + "requiredResearch": [ + "R-Wpn-Howitzer03-Rot" + ], + "researchPoints": 6000, + "researchPower": 187, + "results": [ + { + "class": "Weapon", + "filterParameter": "Id", + "filterValue": "Rocket-IDF", + "parameter": "FirePause", + "value": -15 + }, + { + "class": "Weapon", + "filterParameter": "Id", + "filterValue": "Rocket-IDF", + "parameter": "ReloadTime", + "value": -15 + } + ], + "statID": "Rocket-IDF", + "subgroupIconID": "IMAGE_RES_GRPROF" + }, "R-Wpn-Energy-Accuracy01": { "iconID": "IMAGE_RES_WEAPONTECH", "id": "R-Wpn-Energy-Accuracy01", @@ -8718,11 +8750,9 @@ "Laser3BEAMMk1", "MG4ROTARY-VTOL", "MG4ROTARYMk1", - "Flame2" - ], - "replacedComponents": [ - "CyborgRotMG:Cyb-Wpn-Laser", - "CyborgFlamer02:Cyb-Wpn-Laser" + "Flame2", + "CyborgRotMG", + "CyborgFlamer02" ], "requiredResearch": [ "R-Wpn-Laser01" diff --git a/data/base/stats/structure.json b/data/base/stats/structure.json index 6ee877665f9..3a981915bfb 100644 --- a/data/base/stats/structure.json +++ b/data/base/stats/structure.json @@ -1,4 +1,7 @@ { + "_config_": { + "baseStructDamageExpLevel": 0 + }, "A0ADemolishStructure": { "armour": 6, "breadth": 1, @@ -836,7 +839,7 @@ "thermal": 10, "type": "DEFENSE", "weapons": [ - "Flame2" + "Flame2-Emplacement" ], "width": 1 }, @@ -2186,7 +2189,7 @@ "thermal": 20, "type": "DEFENSE", "weapons": [ - "Flame1Mk1" + "Flame1Mk1-Tower" ], "width": 1 }, @@ -2476,7 +2479,7 @@ "thermal": 10, "type": "DEFENSE", "weapons": [ - "Flame2" + "Flame2-Emplacement" ], "width": 1 }, @@ -2684,7 +2687,7 @@ "thermal": 10, "type": "DEFENSE", "weapons": [ - "Flame2" + "Flame2-Emplacement" ], "width": 1 }, @@ -2876,7 +2879,7 @@ "thermal": 15, "type": "DEFENSE", "weapons": [ - "Flame1Mk1" + "Flame1Mk1-Tower" ], "width": 1 }, diff --git a/data/base/stats/weapons.json b/data/base/stats/weapons.json index da27cf10b92..aba9e092746 100644 --- a/data/base/stats/weapons.json +++ b/data/base/stats/weapons.json @@ -2,7 +2,7 @@ "AAGun2Mk1": { "buildPoints": 450, "buildPower": 150, - "damage": 45, + "damage": 50, "designable": 1, "effectSize": 100, "explosionWav": "lrgexpl.ogg", @@ -744,7 +744,7 @@ "weight": 1 }, "Bomb1-VTOL-LtHE": { - "buildPoints": 600, + "buildPoints": 800, "buildPower": 150, "damage": 250, "designable": 1, @@ -755,7 +755,7 @@ "flightGfx": "Fxlbmbx1.PIE", "flightSpeed": 475, "hitGfx": "FXLExp.PIE", - "hitpoints": 10, + "hitpoints": 25, "id": "Bomb1-VTOL-LtHE", "lightWorld": 1, "longHit": 70, @@ -786,8 +786,8 @@ "weight": 500 }, "Bomb2-VTOL-HvHE": { - "buildPoints": 800, - "buildPower": 200, + "buildPoints": 1300, + "buildPower": 400, "damage": 500, "designable": 1, "effectSize": 200, @@ -828,8 +828,8 @@ "weight": 5000 }, "Bomb3-VTOL-LtINC": { - "buildPoints": 700, - "buildPower": 175, + "buildPoints": 600, + "buildPower": 125, "damage": 180, "designable": 1, "effectSize": 50, @@ -839,7 +839,7 @@ "flightGfx": "Fxlbmbi1.PIE", "flightSpeed": 475, "hitGfx": "FXLExp.PIE", - "hitpoints": 10, + "hitpoints": 25, "id": "Bomb3-VTOL-LtINC", "lightWorld": 1, "longHit": 70, @@ -870,7 +870,7 @@ "weight": 500 }, "Bomb4-VTOL-HvyINC": { - "buildPoints": 1200, + "buildPoints": 1100, "buildPower": 350, "damage": 300, "designable": 1, @@ -1043,12 +1043,12 @@ "effectSize": 90, "explosionWav": "lrgexpl.ogg", "facePlayer": 1, - "firePause": 40, + "firePause": 32, "flags": "ShootAir", "flightGfx": "FXCAmmo.PIE", "flightSpeed": 1000, "hitGfx": "FXGRDexl.PIE", - "hitpoints": 10, + "hitpoints": 50, "id": "Cannon375mm-VTOL", "lightWorld": 1, "longHit": 50, @@ -1120,8 +1120,8 @@ "weight": 10000 }, "Cannon4AUTO-VTOL": { - "buildPoints": 700, - "buildPower": 175, + "buildPoints": 900, + "buildPower": 250, "damage": 195, "designable": 1, "effectSize": 50, @@ -1132,7 +1132,7 @@ "flightGfx": "FXTracer.PIE", "flightSpeed": 1000, "hitGfx": "FXMExp.PIE", - "hitpoints": 50, + "hitpoints": 60, "id": "Cannon4AUTO-VTOL", "lightWorld": 1, "longHit": 50, @@ -1162,8 +1162,8 @@ "weight": 1000 }, "Cannon4AUTOMk1": { - "buildPoints": 700, - "buildPower": 175, + "buildPoints": 900, + "buildPower": 250, "damage": 65, "designable": 1, "effectSize": 50, @@ -1203,8 +1203,8 @@ "weight": 5000 }, "Cannon5Vulcan-VTOL": { - "buildPoints": 800, - "buildPower": 200, + "buildPoints": 900, + "buildPower": 300, "damage": 175, "designable": 1, "effectSize": 50, @@ -1215,7 +1215,7 @@ "flightGfx": "FXTracer.PIE", "flightSpeed": 1000, "hitGfx": "FXMExp.PIE", - "hitpoints": 10, + "hitpoints": 40, "id": "Cannon5Vulcan-VTOL", "lightWorld": 1, "longHit": 50, @@ -1243,8 +1243,8 @@ "weight": 1500 }, "Cannon5VulcanMk1": { - "buildPoints": 800, - "buildPower": 200, + "buildPoints": 900, + "buildPower": 300, "damage": 52, "designable": 1, "effectSize": 50, @@ -1430,21 +1430,21 @@ "weight": 120 }, "CyborgCannon": { - "buildPoints": 240, - "buildPower": 60, - "damage": 42, - "effectSize": 50, + "buildPoints": 400, + "buildPower": 100, + "damage": 82, + "effectSize": 80, "explosionWav": "smlexpl.ogg", "facePlayer": 1, - "firePause": 20, - "flightGfx": "FXcam20.PIE", + "firePause": 40, + "flightGfx": "FXCAmmo.PIE", "flightSpeed": 1000, "hitGfx": "FXGRDexl.PIE", "hitpoints": 50, "id": "CyborgCannon", "lightWorld": 1, "longHit": 50, - "longRange": 832, + "longRange": 896, "maxElevation": 90, "minElevation": -60, "minimumDamage": 33, @@ -1452,16 +1452,16 @@ "model": "cy_CAN.pie", "mountModel": "Cybody.pie", "movement": "DIRECT", - "muzzleGfx": "FXCan20m.PIE", + "muzzleGfx": "FxCan75m.PIE", "name": "Heavy Gunner", "numExplosions": 2, - "radius": 64, - "radiusDamage": 10, + "radius": 96, + "radiusDamage": 20, "radiusLife": 100, - "recoilValue": 100, + "recoilValue": 150, "rotate": 180, "shortHit": 70, - "shortRange": 512, + "shortRange": 640, "waterGfx": "FXSSplsh.PIE", "weaponClass": "KINETIC", "weaponEffect": "ALL ROUNDER", @@ -1489,7 +1489,7 @@ "minElevation": -60, "minimumDamage": 33, "missGfx": "FXGRDexl.PIE", - "model": "cy_CAN.pie", + "model": "cy_hpvcn.pie", "mountModel": "Cybody.pie", "movement": "DIRECT", "muzzleGfx": "FXCan20A.PIE", @@ -1604,7 +1604,7 @@ "minRange": 64, "minimumDamage": 33, "missGfx": "FXMETHIT.PIE", - "model": "cy_flame.pie", + "model": "cy_therm.pie", "mountModel": "Cybody.pie", "movement": "DIRECT", "muzzleGfx": "FXCan20m.PIE", @@ -1687,7 +1687,7 @@ "minRange": 128, "minimumDamage": 33, "missGfx": "fxmexp.PIE", - "model": "cy_rkt.PIE", + "model": "cy_tk.PIE", "mountModel": "cybody.PIE", "movement": "DIRECT", "muzzleGfx": "FXLRocPd.PIE", @@ -1707,7 +1707,7 @@ "CyborgRotMG": { "buildPoints": 270, "buildPower": 90, - "damage": 22, + "damage": 23, "effectSize": 100, "facePlayer": 1, "firePause": 5, @@ -1722,7 +1722,7 @@ "minElevation": -60, "minimumDamage": 33, "missGfx": "FXDIRTsp.PIE", - "model": "cy_gun.pie", + "model": "cy_agun.pie", "mountModel": "Cybody.pie", "movement": "DIRECT", "muzzleGfx": "FXLMgun.PIE", @@ -1862,6 +1862,47 @@ "weaponWav": "flmthrow.ogg", "weight": 1000 }, + "Flame2-Emplacement": { + "buildPoints": 500, + "buildPower": 120, + "damage": 60, + "designable": 0, + "effectSize": 100, + "facePlayer": 1, + "firePause": 85, + "flightGfx": "FXLProj.PIE", + "flightSpeed": 1200, + "hitGfx": "FXMNExp.PIE", + "hitpoints": 60, + "id": "Flame2-Emplacement", + "lightWorld": 1, + "longHit": 60, + "longRange": 896, + "maxElevation": 90, + "minElevation": -60, + "minRange": 64, + "minimumDamage": 33, + "missGfx": "FXMNExp.PIE", + "model": "GNMFLMR.PIE", + "mountModel": "TRMFLMR.PIE", + "movement": "DIRECT", + "muzzleGfx": "FXLMgun2.PIE", + "name": "Inferno Emplacement", + "NoFriendlyFire": 1, + "numExplosions": 1, + "periodicalDamage": 15, + "periodicalDamageRadius": 128, + "periodicalDamageTime": 50, + "rotate": 180, + "shortHit": 75, + "shortRange": 640, + "waterGfx": "FXSSplsh.PIE", + "weaponClass": "HEAT", + "weaponEffect": "FLAMER", + "weaponSubClass": "FLAME", + "weaponWav": "flmthrow.ogg", + "weight": 1000 + }, "Howitzer03-Rot": { "buildPoints": 1600, "buildPower": 400, @@ -2035,14 +2076,14 @@ "weight": 600 }, "Laser2PULSE-VTOL": { - "buildPoints": 800, + "buildPoints": 1000, "buildPower": 200, "damage": 436, "designable": 1, "effectSize": 100, "explosionWav": "lsrexpl.ogg", "facePlayer": 1, - "firePause": 60, + "firePause": 48, "flags": "ShootAir", "flightGfx": "FXPLAmmo.PIE", "flightSpeed": 1800, @@ -2050,7 +2091,7 @@ "hitpoints": 125, "id": "Laser2PULSE-VTOL", "lightWorld": 1, - "longHit": 50, + "longHit": 70, "longRange": 2048, "minElevation": -60, "minimumDamage": 33, @@ -2064,7 +2105,7 @@ "numExplosions": 1, "recoilValue": 15, "rotate": 180, - "shortHit": 70, + "shortHit": 80, "shortRange": 1024, "waterGfx": "FXMExp.PIE", "weaponClass": "HEAT", @@ -2074,7 +2115,7 @@ "weight": 500 }, "Laser2PULSEMk1": { - "buildPoints": 800, + "buildPoints": 1000, "buildPower": 200, "damage": 312, "designable": 1, @@ -2112,19 +2153,19 @@ "weight": 500 }, "Laser3BEAM-VTOL": { - "buildPoints": 600, + "buildPoints": 750, "buildPower": 150, "damage": 218, "designable": 1, "effectSize": 100, "explosionWav": "lsrexpl.ogg", "facePlayer": 1, - "firePause": 30, + "firePause": 21, "flags": "ShootAir", "flightGfx": "FXLFLSH.PIE", "flightSpeed": 1600, "hitGfx": "FXFLSHL.PIE", - "hitpoints": 50, + "hitpoints": 65, "id": "Laser3BEAM-VTOL", "lightWorld": 1, "longHit": 65, @@ -2151,7 +2192,7 @@ "weight": 300 }, "Laser3BEAMMk1": { - "buildPoints": 600, + "buildPoints": 750, "buildPower": 150, "damage": 156, "designable": 1, @@ -2621,7 +2662,7 @@ "MG4ROTARY-Pillbox": { "buildPoints": 500, "buildPower": 100, - "damage": 20, + "damage": 21, "effectSize": 100, "facePlayer": 1, "firePause": 5, @@ -2654,7 +2695,7 @@ "MG4ROTARY-VTOL": { "buildPoints": 500, "buildPower": 100, - "damage": 60, + "damage": 63, "designable": 1, "effectSize": 100, "facePlayer": 1, @@ -2663,7 +2704,7 @@ "flightGfx": "fxtracerh.pie", "flightSpeed": 1000, "hitGfx": "FXMETHIT.PIE", - "hitpoints": 10, + "hitpoints": 15, "id": "MG4ROTARY-VTOL", "longHit": 60, "longRange": 1152, @@ -2691,7 +2732,7 @@ "MG4ROTARYMk1": { "buildPoints": 500, "buildPower": 100, - "damage": 20, + "damage": 21, "designable": 1, "effectSize": 100, "facePlayer": 1, @@ -2726,8 +2767,8 @@ "weight": 600 }, "Missile-A-T": { - "buildPoints": 1200, - "buildPower": 300, + "buildPoints": 1300, + "buildPower": 400, "damage": 430, "designable": 1, "effectSize": 50, @@ -2916,8 +2957,6 @@ "lightWorld": 1, "longHit": 80, "longRange": 12032, - "maxElevation": 90, - "minElevation": -30, "minRange": 512, "minimumDamage": 33, "missGfx": "FXMExp.PIE", @@ -2944,8 +2983,8 @@ "weight": 1000 }, "Missile-VTOL-AT": { - "buildPoints": 1200, - "buildPower": 300, + "buildPoints": 1300, + "buildPower": 400, "damage": 571, "designable": 1, "effectSize": 50, @@ -3073,7 +3112,7 @@ "Mortar3ROTARYMk1": { "buildPoints": 900, "buildPower": 300, - "damage": 55, + "damage": 75, "designable": 1, "effectSize": 100, "explosionWav": "lrgexpl.ogg", @@ -3185,7 +3224,7 @@ "NX-CyborgChaingun": { "buildPoints": 50, "buildPower": 10, - "damage": 22, + "damage": 23, "effectSize": 100, "facePlayer": 1, "firePause": 5, @@ -3200,7 +3239,7 @@ "minElevation": -60, "minimumDamage": 33, "missGfx": "FXDIRTsp.PIE", - "model": "cy_gun.pie", + "model": "cy_agun.pie", "mountModel": "Cybodyjp.pie", "movement": "DIRECT", "muzzleGfx": "FXLMgun2.PIE", @@ -3343,7 +3382,7 @@ "QuadMg1AAGun": { "buildPoints": 400, "buildPower": 100, - "damage": 40, + "damage": 50, "designable": 1, "effectSize": 20, "explosionWav": "smlexpl.ogg", @@ -3385,12 +3424,12 @@ "QuadRotAAGun": { "buildPoints": 1200, "buildPower": 150, - "damage": 45, + "damage": 50, "designable": 1, "effectSize": 20, "explosionWav": "smlexpl.ogg", "facePlayer": 1, - "firePause": 3, + "firePause": 4, "flags": "AirOnly", "flightGfx": "FXAALSH2.PIE", "flightSpeed": 1500, @@ -3425,14 +3464,14 @@ "weight": 10000 }, "RailGun1-VTOL": { - "buildPoints": 1000, - "buildPower": 250, + "buildPoints": 1100, + "buildPower": 350, "damage": 300, "designable": 1, "effectSize": 75, "explosionWav": "smlexpl.ogg", "facePlayer": 1, - "firePause": 24, + "firePause": 19, "flags": "ShootAir", "flightGfx": "FXGAmmo.PIE", "flightSpeed": 1200, @@ -3462,8 +3501,8 @@ "weight": 600 }, "RailGun1Mk1": { - "buildPoints": 1000, - "buildPower": 250, + "buildPoints": 1100, + "buildPower": 350, "damage": 200, "designable": 1, "effectSize": 100, @@ -3498,14 +3537,14 @@ "weight": 400 }, "RailGun2-VTOL": { - "buildPoints": 1200, - "buildPower": 300, + "buildPoints": 1300, + "buildPower": 400, "damage": 400, "designable": 1, "effectSize": 100, "explosionWav": "lrgexpl.ogg", "facePlayer": 1, - "firePause": 36, + "firePause": 28, "flightGfx": "FXGammoM.PIE", "flightSpeed": 1100, "hitGfx": "Fxflech2.PIE", @@ -3535,8 +3574,8 @@ "weight": 1000 }, "RailGun2Mk1": { - "buildPoints": 1200, - "buildPower": 300, + "buildPoints": 1300, + "buildPower": 400, "damage": 300, "designable": 1, "effectSize": 100, @@ -3572,8 +3611,8 @@ "weight": 2000 }, "RailGun3Mk1": { - "buildPoints": 1600, - "buildPower": 400, + "buildPoints": 1500, + "buildPower": 450, "damage": 400, "designable": 1, "effectSize": 150, @@ -3598,7 +3637,9 @@ "muzzleGfx": "FXHGauss.PIE", "name": "Gauss Cannon", "numExplosions": 1, - "radiusDamage": 30, + "penetrate": 1, + "radius": 192, + "radiusDamage": 50, "radiusLife": 10, "recoilValue": 100, "rotate": 180, @@ -3606,7 +3647,7 @@ "shortRange": 1536, "waterGfx": "FXVLSWav.PIE", "weaponClass": "KINETIC", - "weaponEffect": "ANTI TANK", + "weaponEffect": "ALL ROUNDER", "weaponSubClass": "GAUSS", "weaponWav": "gaussgun.ogg", "weight": 5000 @@ -3651,7 +3692,7 @@ "weight": 250 }, "Rocket-HvyA-T": { - "buildPoints": 1250, + "buildPoints": 900, "buildPower": 250, "damage": 185, "designable": 1, @@ -3831,7 +3872,7 @@ "flightGfx": "FXMflare.PIE", "flightSpeed": 1500, "hitGfx": "FXMPExp.PIE", - "hitpoints": 5, + "hitpoints": 150, "id": "Rocket-Pod", "lightWorld": 1, "longHit": 50, @@ -3860,8 +3901,8 @@ "weight": 200 }, "Rocket-VTOL-BB": { - "buildPoints": 1400, - "buildPower": 375, + "buildPoints": 1500, + "buildPower": 500, "damage": 166, "designable": 1, "effectSize": 25, @@ -3900,7 +3941,7 @@ "weight": 750 }, "Rocket-VTOL-HvyA-T": { - "buildPoints": 1250, + "buildPoints": 900, "buildPower": 250, "damage": 277, "designable": 1, @@ -3912,7 +3953,7 @@ "flightGfx": "FXMPLME.PIE", "flightSpeed": 1000, "hitGfx": "FXMExp.PIE", - "hitpoints": 50, + "hitpoints": 30, "id": "Rocket-VTOL-HvyA-T", "lightWorld": 1, "longHit": 60, @@ -3955,7 +3996,7 @@ "flightGfx": "FXMPLME.PIE", "flightSpeed": 1200, "hitGfx": "FXGRDexl.PIE", - "hitpoints": 50, + "hitpoints": 25, "id": "Rocket-VTOL-LtA-T", "lightWorld": 1, "longHit": 60, @@ -3986,23 +4027,24 @@ "weight": 250 }, "Rocket-VTOL-Pod": { - "buildPoints": 375, - "buildPower": 75, - "damage": 30, + "buildPoints": 1000, + "buildPower": 400, + "damage": 75, + "designable": 1, "effectSize": 25, "explosionWav": "smlexpl.ogg", "faceInFlight": 1, "facePlayer": 1, - "firePause": 5, - "flags": "ShootAir", + "firePause": 4, + "flags": "AirOnly", "flightGfx": "FXMflare.PIE", "flightSpeed": 1500, "hitGfx": "FXMPExp.PIE", "hitpoints": 5, "id": "Rocket-VTOL-Pod", "lightWorld": 1, - "longHit": 50, - "longRange": 960, + "longHit": 65, + "longRange": 1152, "maxElevation": 20, "minElevation": -60, "minRange": 128, @@ -4012,20 +4054,22 @@ "mountModel": "TRLRCKTP.PIE", "movement": "DIRECT", "muzzleGfx": "FXLRocPd.PIE", - "name": "VTOL Mini-Rocket", - "numAttackRuns": 12, + "name": "VTOL Mini-Rocket AA", + "numAttackRuns": 2, "numExplosions": 2, + "numRounds": 6, "radiusLife": 10, "recoilValue": 10, + "reloadTime": 10, "rotate": 180, - "shortHit": 70, - "shortRange": 640, + "shortHit": 75, + "shortRange": 768, "waterGfx": "FXSSplsh.PIE", "weaponClass": "KINETIC", - "weaponEffect": "ANTI TANK", + "weaponEffect": "ANTI AIRCRAFT", "weaponSubClass": "ROCKET", "weaponWav": "rocket.ogg", - "weight": 200 + "weight": 3000 }, "SpyTurret01": { "buildPoints": 375, diff --git a/data/base/structs/blcanpil_col.pie b/data/base/structs/blcanpil_col.pie new file mode 100644 index 00000000000..352a1795315 --- /dev/null +++ b/data/base/structs/blcanpil_col.pie @@ -0,0 +1,40 @@ +PIE 2 +TYPE 200 +TEXTURE 0 page-17-droid-weapons.png 256 256 +LEVELS 1 +LEVEL 1 +POINTS 13 + 40 0 0 + 20 0 35 + 12 21 21 + 24 21 0 + -20 0 35 + -12 21 21 + -40 0 0 + -24 21 0 + -20 0 -35 + -12 21 -21 + 20 0 -35 + 12 21 -21 + 0 21 0 +POLYGONS 18 + 200 3 3 2 1 132 208 150 208 150 224 + 200 3 3 1 0 132 208 150 224 132 224 + 200 3 2 5 4 150 208 132 208 132 224 + 200 3 2 4 1 150 208 132 224 150 224 + 200 3 5 7 6 150 208 132 208 132 224 + 200 3 5 6 4 150 208 132 224 150 224 + 200 3 7 9 8 150 208 132 208 132 224 + 200 3 7 8 6 150 208 132 224 150 224 + 200 3 9 11 10 132 208 150 208 150 224 + 200 3 9 10 8 132 208 150 224 132 224 + 200 3 11 3 0 132 208 150 208 150 224 + 200 3 11 0 10 132 208 150 224 132 224 + 200 3 2 3 11 149 97 159 110 149 126 + 200 3 2 11 12 149 97 149 126 146 110 + 200 3 7 5 2 133 110 139 97 149 97 + 200 3 7 2 12 133 110 149 97 146 110 + 200 3 11 9 7 149 126 139 126 133 110 + 200 3 11 7 12 149 126 133 110 146 110 +CONNECTORS 1 + 0 0 23 diff --git a/data/base/structs/blcanpil_nex.pie b/data/base/structs/blcanpil_nex.pie index c462e472e9b..cac2e73ba48 100644 --- a/data/base/structs/blcanpil_nex.pie +++ b/data/base/structs/blcanpil_nex.pie @@ -1,40 +1,40 @@ -PIE 2 +PIE 3 TYPE 200 -TEXTURE 0 page-115-faction-bunkers.png 256 256 +TEXTURE 0 page-115-faction-bunkers.png 0 0 LEVELS 1 LEVEL 1 -POINTS 13 - 40 0 0 - 20 0 35 - 12 21 21 - 24 21 0 - -20 0 35 - -12 21 21 - -40 0 0 - -24 21 0 - -20 0 -35 - -12 21 -21 - 20 0 -35 - 12 21 -21 +POINTS 13 + 40 0 0 + 20 0 35 + 12 21 21 + 24 21 0 + -20 0 35 + -12 21 21 + -40 0 0 + -24 21 0 + -20 0 -35 + -12 21 -21 + 20 0 -35 + 12 21 -21 0 21 0 POLYGONS 18 - 200 3 3 2 1 16 192 59 192 59 208 - 200 3 3 1 0 16 192 59 208 16 208 - 200 3 2 5 4 59 192 16 192 16 208 - 200 3 2 4 1 59 192 16 208 59 208 - 200 3 5 7 6 59 192 16 192 16 208 - 200 3 5 6 4 59 192 16 208 59 208 - 200 3 7 9 8 59 192 16 192 16 208 - 200 3 7 8 6 59 192 16 208 59 208 - 200 3 9 11 10 16 192 59 192 59 208 - 200 3 9 10 8 16 192 59 208 16 208 - 200 3 11 3 0 16 192 59 192 59 208 - 200 3 11 0 10 16 192 59 208 16 208 - 200 3 2 3 11 78 179 88 192 78 208 - 200 3 2 11 12 78 179 78 208 75 192 - 200 3 7 5 2 62 192 68 179 78 179 - 200 3 7 2 12 62 192 78 179 75 192 - 200 3 11 9 7 78 208 68 208 62 192 - 200 3 11 7 12 78 208 62 192 75 192 + 200 3 3 2 1 0.0642 0.7499 0.2288 0.7499 0.2288 0.8111 + 200 3 3 1 0 0.0642 0.7499 0.2288 0.8111 0.0642 0.8111 + 200 3 2 5 4 0.2288 0.7499 0.0642 0.7499 0.0642 0.8111 + 200 3 2 4 1 0.2288 0.7499 0.0642 0.8111 0.2288 0.8111 + 200 3 5 7 6 0.2288 0.7499 0.0642 0.7499 0.0642 0.8111 + 200 3 5 6 4 0.2288 0.7499 0.0642 0.8111 0.2288 0.8111 + 200 3 7 9 8 0.2288 0.7499 0.0642 0.7499 0.0642 0.8111 + 200 3 7 8 6 0.2288 0.7499 0.0642 0.8111 0.2288 0.8111 + 200 3 9 11 10 0.0642 0.7499 0.2288 0.7499 0.2288 0.8111 + 200 3 9 10 8 0.0642 0.7499 0.2288 0.8111 0.0642 0.8111 + 200 3 11 3 0 0.0642 0.7499 0.2288 0.7499 0.2288 0.8111 + 200 3 11 0 10 0.0642 0.7499 0.2288 0.8111 0.0642 0.8111 + 200 3 2 3 11 0.3047 0.6973 0.3438 0.748 0.3047 0.8105 + 200 3 2 11 12 0.3047 0.6973 0.3047 0.8105 0.293 0.748 + 200 3 7 5 2 0.2422 0.748 0.2656 0.6973 0.3047 0.6973 + 200 3 7 2 12 0.2422 0.748 0.3047 0.6973 0.293 0.748 + 200 3 11 9 7 0.3047 0.8105 0.2656 0.8105 0.2422 0.748 + 200 3 11 7 12 0.3047 0.8105 0.2422 0.748 0.293 0.748 CONNECTORS 1 0 0 23 diff --git a/data/base/structs/blmrtpit_col.pie b/data/base/structs/blmrtpit_col.pie new file mode 100644 index 00000000000..6efc3cb0221 --- /dev/null +++ b/data/base/structs/blmrtpit_col.pie @@ -0,0 +1,55 @@ +PIE 2 +TYPE 200 +TEXTURE 0 page-17-droid-weapons.png 0 0 +LEVELS 1 +LEVEL 1 +POINTS 18 + 49 0 -28 + 28 4 -16 + 38 14 -22 + -28 4 -16 + 0 4 -33 + -28 4 16 + 28 4 16 + 0 4 33 + 49 0 27 + 38 14 21 + 0 14 -44 + 0 0 -56 + -37 14 -22 + -48 0 -28 + -37 14 21 + -48 0 27 + 0 14 43 + 0 0 56 +POLYGONS 28 + 200 3 2 1 0 185 250 175 252 197 256 + 200 3 5 1 4 132 104 160 118 146 125 + 200 3 5 4 3 132 104 146 125 132 118 + 200 3 7 6 1 146 98 160 104 160 118 + 200 3 7 1 5 146 98 160 118 132 104 + 200 3 9 8 6 185 250 197 256 175 252 + 200 3 11 10 2 175 256 178 250 195 250 + 200 3 11 2 0 175 256 195 250 197 256 + 200 3 10 4 1 135 98 138 114 155 114 + 200 3 10 1 2 135 98 155 114 157 98 + 200 3 13 12 10 175 256 178 250 195 250 + 200 3 13 10 11 175 256 195 250 197 256 + 200 3 12 3 4 135 98 138 114 155 114 + 200 3 12 4 10 135 98 155 114 157 98 + 200 3 15 14 12 181 256 182 250 191 250 + 200 3 15 12 13 181 256 191 250 192 256 + 200 3 14 5 3 152 98 150 114 142 114 + 200 3 14 3 12 152 98 142 114 141 98 + 200 3 17 16 14 197 256 195 250 178 250 + 200 3 17 14 15 197 256 178 250 175 256 + 200 3 16 7 5 157 98 155 114 138 114 + 200 3 16 5 14 157 98 138 114 135 98 + 200 3 8 9 16 197 256 195 250 178 250 + 200 3 8 16 17 197 256 178 250 175 256 + 200 3 9 6 7 157 98 155 114 138 114 + 200 3 9 7 16 157 98 138 114 135 98 + 200 3 1 6 8 139 118 139 105 154 100 + 200 3 1 8 0 139 118 154 100 154 122 +CONNECTORS 1 + 0 0 6 diff --git a/data/base/structs/blpilbox_col.pie b/data/base/structs/blpilbox_col.pie new file mode 100644 index 00000000000..b64d52f023e --- /dev/null +++ b/data/base/structs/blpilbox_col.pie @@ -0,0 +1,46 @@ +PIE 2 +TYPE 10200 +TEXTURE 0 page-17-droid-weapons.png 256 256 +LEVELS 1 +LEVEL 1 +POINTS 17 + -16 23 -7 + 17 23 -7 + 17 23 11 + -16 23 11 + 40 0 0 + 20 0 35 + 20 21 35 + 40 21 0 + -20 0 35 + -20 21 35 + -40 0 0 + -40 21 0 + -20 0 -35 + -20 21 -35 + 20 0 -35 + 20 21 -35 + 0 21 0 +POLYGONS 20 + 200 3 3 2 1 0 239 13 239 13 256 + 200 3 3 1 0 0 239 13 256 0 256 + 200 3 7 6 5 132 209 150 209 150 224 + 200 3 7 5 4 132 209 150 224 132 224 + 200 3 6 9 8 150 209 132 209 132 224 + 200 3 6 8 5 150 209 132 224 150 224 + 200 3 9 11 10 150 209 132 209 132 224 + 200 3 9 10 8 150 209 132 224 150 224 + 200 3 11 13 12 150 209 132 209 132 224 + 200 3 11 12 10 150 209 132 224 150 224 + 200 3 13 15 14 132 209 150 209 150 224 + 200 3 13 14 12 132 209 150 224 132 224 + 200 3 15 7 4 132 209 150 209 150 224 + 200 3 15 4 14 132 209 150 224 132 224 + 200 3 6 7 15 152 99 158 112 152 126 + 200 3 6 15 16 152 99 152 126 145 112 + 200 3 11 9 6 132 112 139 99 152 99 + 200 3 11 6 16 132 112 152 99 145 112 + 200 3 15 13 11 152 126 139 126 132 112 + 200 3 15 11 16 152 126 132 112 145 112 +CONNECTORS 1 + 0 0 27 diff --git a/data/base/structs/blpilbox_nex.pie b/data/base/structs/blpilbox_nex.pie index ad321f7770b..35dd6d0f24b 100644 --- a/data/base/structs/blpilbox_nex.pie +++ b/data/base/structs/blpilbox_nex.pie @@ -1,44 +1,44 @@ -PIE 2 +PIE 3 TYPE 10200 -TEXTURE 0 page-115-faction-bunkers.png 256 256 +TEXTURE 0 page-115-faction-bunkers.png 0 0 LEVELS 1 LEVEL 1 -POINTS 17 - -16 23 -7 - 17 23 -7 - 17 23 11 - -16 23 11 - 40 0 0 - 20 0 35 - 20 21 35 - 40 21 0 - -20 0 35 - -20 21 35 - -40 0 0 - -40 21 0 - -20 0 -35 - -20 21 -35 - 20 0 -35 - 20 21 -35 +POINTS 17 + -16 23 -7 + 17 23 -7 + 17 23 11 + -16 23 11 + 40 0 0 + 20 0 35 + 20 21 35 + 40 21 0 + -20 0 35 + -20 21 35 + -40 0 0 + -40 21 0 + -20 0 -35 + -20 21 -35 + 20 0 -35 + 20 21 -35 0 21 0 POLYGONS 18 - 200 3 7 6 5 16 193 59 193 59 208 - 200 3 7 5 4 16 193 59 208 16 208 - 200 3 6 9 8 59 193 16 193 16 208 - 200 3 6 8 5 59 193 16 208 59 208 - 200 3 9 11 10 59 193 16 193 16 208 - 200 3 9 10 8 59 193 16 208 59 208 - 200 3 11 13 12 59 193 16 193 16 208 - 200 3 11 12 10 59 193 16 208 59 208 - 200 3 13 15 14 16 193 59 193 59 208 - 200 3 13 14 12 16 193 59 208 16 208 - 200 3 15 7 4 16 193 59 193 59 208 - 200 3 15 4 14 16 193 59 208 16 208 - 200 3 6 7 15 81 180 87 193 81 207 - 200 3 6 15 16 81 180 81 207 74 193 - 200 3 11 9 6 61 193 68 180 81 180 - 200 3 11 6 16 61 193 81 180 74 193 - 200 3 15 13 11 81 207 68 207 61 193 - 200 3 15 11 16 81 207 61 193 74 193 + 200 3 7 6 5 0.0642 0.752 0.2288 0.752 0.2288 0.8105 + 200 3 7 5 4 0.0642 0.752 0.2288 0.8105 0.0642 0.8105 + 200 3 6 9 8 0.2288 0.752 0.0642 0.752 0.0642 0.8105 + 200 3 6 8 5 0.2288 0.752 0.0642 0.8105 0.2288 0.8105 + 200 3 9 11 10 0.2288 0.752 0.0642 0.752 0.0642 0.8105 + 200 3 9 10 8 0.2288 0.752 0.0642 0.8105 0.2288 0.8105 + 200 3 11 13 12 0.2288 0.752 0.0642 0.752 0.0642 0.8105 + 200 3 11 12 10 0.2288 0.752 0.0642 0.8105 0.2288 0.8105 + 200 3 13 15 14 0.0642 0.752 0.2288 0.752 0.2288 0.8105 + 200 3 13 14 12 0.0642 0.752 0.2288 0.8105 0.0642 0.8105 + 200 3 15 7 4 0.0642 0.752 0.2288 0.752 0.2288 0.8105 + 200 3 15 4 14 0.0642 0.752 0.2288 0.8105 0.0642 0.8105 + 200 3 6 7 15 0.3164 0.7031 0.3398 0.7539 0.3164 0.8086 + 200 3 6 15 16 0.3164 0.7031 0.3164 0.8086 0.2891 0.7539 + 200 3 11 9 6 0.2383 0.7539 0.2656 0.7031 0.3164 0.7031 + 200 3 11 6 16 0.2383 0.7539 0.3164 0.7031 0.2891 0.7539 + 200 3 15 13 11 0.3164 0.8086 0.2656 0.8086 0.2383 0.7539 + 200 3 15 11 16 0.3164 0.8086 0.2383 0.7539 0.2891 0.7539 CONNECTORS 1 0 0 27 diff --git a/data/base/structs/blwallh_l_col.pie b/data/base/structs/blwallh_l_col.pie index bbbf17e394e..649f01bc54e 100644 --- a/data/base/structs/blwallh_l_col.pie +++ b/data/base/structs/blwallh_l_col.pie @@ -1,90 +1,78 @@ PIE 2 TYPE 10200 -TEXTURE 0 page-114-player-buildings_Collective.png 256 256 +TEXTURE 0 page-114-player-buildings_Collective.png 0 0 LEVELS 1 LEVEL 1 -POINTS 43 - 10 65 -12 - 26 -10 64 - 26 -10 -28 - 10 65 64 - -12 65 64 - -28 -10 26 - -28 -10 64 - -12 65 10 - -14 65 13 - -14 78 66 - -14 78 13 - -14 65 66 - 12 65 66 - 12 78 -14 - 12 78 66 - 12 65 -14 - 16 89 60 - 37 -10 67 - 37 -10 60 - 16 89 67 - -17 89 67 - -38 -10 60 - -38 -10 67 - -17 89 60 - -66 65 -12 - -65 -10 -28 - -65 -10 26 - -66 65 10 - -67 65 13 - 11 77 13 - -67 77 13 - 11 65 13 - -67 77 -14 - 12 77 -14 - -67 65 -14 - -69 89 -17 - -62 -10 -38 - -69 -10 -38 - -62 89 -17 - -62 89 16 - -69 -10 36 - -62 -10 36 - -69 89 16 +POINTS 31 + -62 82 8 + -62 82 -8 + -64 -20 -34 + -36 -20 1 + -64 92 -17 + -37 82 1 + -66 -20 36 + -64 92 18 + -55 92 1 + 34.4546 -20 64.4545 + -0.5455 -20 36.4545 + 17.4545 92 64.4545 + -0.5455 82 37.4545 + -35.5455 -20 66.4545 + -17.5454 92 64.4545 + -0.5455 92 55.4545 + -7.5455 82 62.4545 + 17.4545 -20 62.4545 + 8.4545 82 62.4545 + 8.4545 82 8 + -7.5455 82 -8 + -7.5455 82 8 + 8.4545 82 -8 + -50.4 -20 -17 + -15.5455 -20 -17 + 17.4545 -20 -17 + -15.5455 -20 62.4545 + -15.5455 -20 16 + -62 -20 16 + -15.5455 -20 49.3117 + -12.3417 20.848 12.7962 POLYGONS 40 - 200 3 0 1 2 91 171 129 207 91 207 - 200 3 0 3 1 91 171 129 171 129 207 - 200 3 4 5 6 129 171 109 207 129 207 - 200 3 4 7 5 129 171 100 171 109 207 - 200 3 8 9 10 39 233 56 224 39 224 - 200 3 8 11 9 39 233 56 233 56 224 - 200 3 12 13 14 56 233 31 224 56 224 - 200 3 12 15 13 56 233 31 233 31 224 - 200 3 16 17 18 115 171 123 207 123 207 - 200 3 16 19 17 115 171 115 171 123 207 - 200 3 20 21 22 102 171 94 207 94 207 - 200 3 20 23 21 102 171 102 171 94 207 - 200 3 16 21 23 115 171 94 207 102 171 - 200 3 16 18 21 115 171 123 207 94 207 - 200 3 17 20 22 123 207 102 171 94 207 - 200 3 17 19 20 123 207 115 171 102 171 - 200 3 14 13 9 56 225 30 225 56 238 - 200 3 13 10 9 30 225 39 238 56 238 - 200 3 23 20 16 102 171 102 171 115 171 - 200 3 20 19 16 102 171 115 171 115 171 - 200 3 24 2 25 91 171 129 207 91 207 - 200 3 24 0 2 91 171 129 171 129 207 - 200 3 7 26 5 127 171 91 207 119 207 - 200 3 7 27 26 127 171 91 171 91 207 - 200 3 28 29 30 1 233 33 224 1 224 - 200 3 28 31 29 1 233 33 233 33 224 - 200 3 15 32 33 33 233 1 224 33 224 - 200 3 15 34 32 33 233 1 233 1 224 - 200 3 35 36 37 115 171 123 207 123 207 - 200 3 35 38 36 115 171 115 171 123 207 - 200 3 39 40 41 102 171 94 207 94 207 - 200 3 39 42 40 102 171 102 171 94 207 - 200 3 35 40 42 115 171 94 207 102 171 - 200 3 35 37 40 115 171 123 207 94 207 - 200 3 36 39 41 123 207 102 171 94 207 - 200 3 36 38 39 123 207 115 171 102 171 - 200 3 33 32 29 31 225 1 225 31 238 - 200 3 32 30 29 1 225 1 238 31 238 - 200 3 42 39 35 102 171 102 171 115 171 - 200 3 39 38 35 102 171 115 171 115 171 \ No newline at end of file + 200 3 4 23 2 158 173 158 206 166 206 + 200 3 4 5 3 158 173 150 176 150 206 + 200 3 5 6 3 150 176 135 206 150 206 + 200 3 5 7 6 150 176 143 173 135 206 + 200 3 7 2 6 143 173 166 206 135 206 + 200 3 7 4 2 143 173 158 173 166 206 + 200 3 5 4 8 138 193 152 185 147 193 + 200 3 7 5 8 152 201 138 193 147 193 + 200 3 4 7 8 152 185 152 201 147 193 + 200 3 10 12 11 150 206 150 176 158 173 + 200 3 29 12 10 144 206 150 176 150 206 + 200 3 13 14 12 135 206 143 173 150 176 + 200 3 13 9 14 135 206 166 206 143 173 + 200 3 9 11 14 166 206 158 173 143 173 + 200 3 15 11 12 147 193 152 185 138 193 + 200 3 15 12 14 147 193 138 193 152 201 + 200 3 15 14 11 147 193 152 201 152 185 + 200 3 30 26 16 154 193 169 206 169 173 + 200 3 21 18 19 31 239 55 225 31 225 + 200 3 21 19 22 31 239 31 225 24 225 + 200 3 21 20 1 24 239 24 225 0 225 + 200 3 22 25 24 153 173 155 206 145 206 + 200 3 11 9 10 158 173 166 206 150 206 + 200 3 30 29 26 154 193 165 206 169 206 + 200 3 30 16 21 154 193 169 173 152 173 + 200 3 25 22 19 145 206 147 173 152 173 + 200 3 30 21 0 146 193 148 173 131 173 + 200 3 4 3 23 158 173 150 206 158 206 + 200 3 29 13 12 144 206 135 206 150 176 + 200 3 21 16 18 31 239 55 239 55 225 + 200 3 1 0 21 0 225 0 239 24 239 + 200 3 21 22 20 24 239 31 225 24 225 + 200 3 24 23 20 145 206 135 206 148 173 + 200 3 23 1 20 135 206 131 173 148 173 + 200 3 20 22 24 148 173 153 173 145 206 + 200 3 30 27 29 154 193 155 206 165 206 + 200 3 18 17 19 169 173 169 206 152 173 + 200 3 17 25 19 169 206 145 206 152 173 + 200 3 0 28 30 131 173 131 206 146 193 + 200 3 28 27 30 131 206 145 206 146 193 diff --git a/data/base/structs/blwallh_t_col.pie b/data/base/structs/blwallh_t_col.pie index 747d9fd7e5c..2f68d80c3bd 100644 --- a/data/base/structs/blwallh_t_col.pie +++ b/data/base/structs/blwallh_t_col.pie @@ -1,133 +1,83 @@ PIE 2 TYPE 10200 -TEXTURE 0 page-114-player-buildings_Collective.png 256 256 +TEXTURE 0 page-114-player-buildings_Collective.png 0 0 LEVELS 1 LEVEL 1 -POINTS 66 - 66 65 10 - -64 -10 26 - 66 -10 26 - -64 65 10 - -64 65 -12 - 66 -10 -28 - -64 -10 -28 - 66 65 -12 - 68 65 -14 - -66 78 -14 - 68 78 -14 - -66 65 -14 - -66 65 12 - 68 78 12 - -66 78 12 - 68 65 12 - 69 89 16 - 62 -10 37 - 69 -10 37 - 62 89 16 - 62 89 -17 - 69 -10 -38 - 62 -10 -38 - 69 89 -17 - -60 89 16 - -67 -10 37 - -60 -10 37 - -67 89 16 - -67 89 -17 - -60 -10 -38 - -67 -10 -38 - -60 89 -17 - 18 89 60 - 39 -10 67 - 39 -10 60 - 18 89 67 - -15 89 67 - -36 -10 60 - -36 -10 67 - -15 89 60 - -10 65 -1 - -18 27 -1 - -26 -10 0 - -26 -10 65 - -18 27 64 - -10 65 64 - -13 65 66 - -13 71 66 - -13 77 66 - -13 77 -1 - -13 71 -1 - -13 65 -1 - 14 77 0 - 1 77 0 - 0 77 66 - 14 77 66 - 14 65 0 - 14 71 0 - 14 71 66 - 14 65 66 - 12 65 64 - 20 28 65 - 28 -10 65 - 28 -10 0 - 20 28 0 - 12 65 -1 -POLYGONS 60 - 200 3 0 1 2 91 171 129 207 91 207 - 200 3 0 3 1 91 171 129 171 129 207 - 200 3 4 5 6 129 171 91 207 129 207 - 200 3 4 7 5 129 171 91 171 91 207 - 200 3 8 9 10 1 233 56 224 1 224 - 200 3 8 11 9 1 233 56 233 56 224 - 200 3 12 13 14 56 233 1 224 56 224 - 200 3 12 15 13 56 233 1 233 1 224 - 200 3 16 17 18 115 171 123 207 123 207 - 200 3 16 19 17 115 171 115 171 123 207 - 200 3 20 21 22 102 171 94 207 94 207 - 200 3 20 23 21 102 171 102 171 94 207 - 200 3 24 25 26 115 171 123 207 123 207 - 200 3 24 27 25 115 171 115 171 123 207 - 200 3 28 29 30 102 171 94 207 94 207 - 200 3 28 31 29 102 171 102 171 94 207 - 200 3 16 21 23 115 171 94 207 102 171 - 200 3 16 18 21 115 171 123 207 94 207 - 200 3 17 20 22 123 207 102 171 94 207 - 200 3 17 19 20 123 207 115 171 102 171 - 200 3 24 29 31 115 171 94 207 102 171 - 200 3 24 26 29 115 171 123 207 94 207 - 200 3 25 28 30 123 207 102 171 94 207 - 200 3 25 27 28 123 207 115 171 102 171 - 200 3 14 13 9 56 225 1 225 56 238 - 200 3 13 10 9 1 225 1 238 56 238 - 200 3 23 20 16 102 171 102 171 115 171 - 200 3 20 19 16 102 171 115 171 115 171 - 200 3 31 28 24 102 171 102 171 115 171 - 200 3 28 27 24 102 171 115 171 115 171 - 200 3 32 33 34 115 171 123 207 123 207 - 200 3 32 35 33 115 171 115 171 123 207 - 200 3 36 37 38 102 171 94 207 94 207 - 200 3 36 39 37 102 171 102 171 94 207 - 200 3 32 37 39 115 171 94 207 102 171 - 200 3 32 34 37 115 171 123 207 94 207 - 200 3 33 36 38 123 207 102 171 94 207 - 200 3 33 35 36 123 207 115 171 102 171 - 200 3 39 36 32 102 171 102 171 115 171 - 200 3 36 35 32 102 171 115 171 115 171 - 200 3 40 41 42 110 171 110 189 110 207 - 200 3 40 42 43 110 171 110 207 129 207 - 200 3 43 44 45 129 207 129 189 129 171 - 200 3 43 45 40 129 207 129 171 110 171 - 200 3 46 47 48 56 233 56 228 56 224 - 200 3 46 48 49 56 233 56 224 28 224 - 200 3 49 50 51 28 224 28 228 28 233 - 200 3 49 51 46 28 224 28 233 56 233 - 200 3 52 53 49 28 225 28 232 28 238 - 200 3 52 49 48 28 225 28 238 56 238 - 200 3 48 54 55 56 238 56 232 56 225 - 200 3 48 55 52 56 238 56 225 28 225 - 200 3 56 57 52 28 233 28 228 28 224 - 200 3 56 52 55 28 233 28 224 56 224 - 200 3 55 58 59 56 224 56 228 56 233 - 200 3 55 59 56 56 224 56 233 28 233 - 200 3 60 61 62 129 171 129 189 129 207 - 200 3 60 62 63 129 171 129 207 110 207 - 200 3 63 64 65 110 207 110 189 110 171 - 200 3 63 65 60 110 207 110 171 129 171 \ No newline at end of file +POINTS 37 + 64 -20 -34 + 36 -20 1 + 64 92 -17 + 37 82 1 + 66 -20 36 + 64 92 18 + 55 92 1 + -62 -20 16 + 62 -20 16 + -62 82 8 + 62 82 8 + 62 -20 -17 + -62 -20 -17 + 62 82 -8 + -62 82 -8 + -64 -20 -34 + -36 -20 1 + -64 92 -17 + -37 82 1 + -66 -20 36 + -64 92 18 + -55 92 1 + 34.4546 -20 64.4545 + -0.5455 -20 36.4545 + 17.4545 92 64.4545 + -0.5455 82 37.4545 + -35.5455 -20 66.4545 + -17.5454 92 64.4545 + -0.5455 92 55.4545 + -15.5455 -20 62.4545 + -7.5455 82 62.4545 + 17.4545 -20 62.4545 + 8.4545 82 62.4545 + -7.5455 82 8 + 8.4545 82 8 + 17.4545 -20 16 + -15.5455 -20 16.0105 +POLYGONS 39 + 200 3 18 15 17 150 176 166 206 158 173 + 200 3 25 22 23 150 176 166 206 150 206 + 200 3 20 15 19 143 173 166 206 135 206 + 200 3 6 2 3 147 193 152 185 138 193 + 200 3 6 3 5 147 193 138 193 152 201 + 200 3 6 5 2 147 193 152 201 152 185 + 200 3 30 34 33 55 239 31 225 31 239 + 200 3 35 32 31 155 206 169 173 169 206 + 200 3 10 7 8 169 173 131 206 169 206 + 200 3 4 3 1 135 206 150 176 150 206 + 200 3 26 25 23 135 206 150 176 150 206 + 200 3 18 17 21 138 193 152 185 147 193 + 200 3 20 18 21 152 201 138 193 147 193 + 200 3 17 20 21 152 185 152 201 147 193 + 200 3 0 5 4 166 206 143 173 135 206 + 200 3 28 24 25 147 193 152 185 138 193 + 200 3 28 25 27 147 193 138 193 152 201 + 200 3 28 27 24 147 193 152 201 152 185 + 200 3 14 11 12 131 173 169 206 131 206 + 200 3 10 14 9 55 239 0 225 0 239 + 200 3 3 0 1 150 176 166 206 150 206 + 200 3 18 19 16 150 176 135 206 150 206 + 200 3 22 27 26 166 206 143 173 135 206 + 200 3 30 36 29 169 173 155 206 169 206 + 200 3 18 16 15 150 176 150 206 166 206 + 200 3 25 24 22 150 176 158 173 166 206 + 200 3 20 17 15 143 173 158 173 166 206 + 200 3 30 32 34 55 239 55 225 31 225 + 200 3 35 34 32 155 206 152 173 169 173 + 200 3 10 9 7 169 173 131 173 131 206 + 200 3 4 5 3 135 206 143 173 150 176 + 200 3 26 27 25 135 206 143 173 150 176 + 200 3 0 2 5 166 206 158 173 143 173 + 200 3 14 13 11 131 173 169 173 169 206 + 200 3 10 13 14 55 239 55 225 0 225 + 200 3 3 2 0 150 176 158 173 166 206 + 200 3 18 20 19 150 176 143 173 135 206 + 200 3 22 24 27 166 206 158 173 143 173 + 200 3 30 33 36 169 173 152 173 155 206 diff --git a/data/base/texpages b/data/base/texpages index a1252db861d..501d9e1613d 160000 --- a/data/base/texpages +++ b/data/base/texpages @@ -1 +1 @@ -Subproject commit a1252db861db73ea05e8be301e8abafda7f904fb +Subproject commit 501d9e1613d136d03ecfb3645d61d89629e7c411 diff --git a/data/base/wrf/audio.wrf b/data/base/wrf/audio.wrf index ca986854c3c..8c7f88b35c9 100644 --- a/data/base/wrf/audio.wrf +++ b/data/base/wrf/audio.wrf @@ -1,5 +1,5 @@ /***********************************************************/ -/* You may have to modify this file for it to be correct! */ +/* You may have to modify this file for it to be correct! */ /******************* WRF\audio.wrf *******************/ @@ -391,4 +391,4 @@ file WAV "uplink.ogg" file WAV "lasstrk.ogg" file WAV "beacon.ogg" directory "audio" -file AUDIOCFG "audio.cfg" +file AUDIOCFG "audio.json" diff --git a/data/base/wrf/cam1.wrf b/data/base/wrf/cam1.wrf index 22db5d6b22a..ed9eca38ab3 100644 --- a/data/base/wrf/cam1.wrf +++ b/data/base/wrf/cam1.wrf @@ -1,5 +1,5 @@ /***********************************************************/ -/* You may have to modify this file for it to be correct! */ +/* You may have to modify this file for it to be correct! */ /******************* wrf\Cam1.wrf *******************/ @@ -11,6 +11,4 @@ file STR_RES "cam3strings.txt" file STR_RES "resstrings.txt" file STR_RES "scrstrings.txt" directory "messages" -file SMSG "cam1messages.txt" -file SMSG "cam2messages.txt" -file SMSG "cam3messages.txt" +file FLIC "genmessages.json" diff --git a/data/base/wrf/cam1/cam1a-c.wrf b/data/base/wrf/cam1/cam1a-c.wrf index cb1454d9a32..6117985c2ed 100644 --- a/data/base/wrf/cam1/cam1a-c.wrf +++ b/data/base/wrf/cam1/cam1a-c.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1a-c.txt" -file SMSG "prox1a-c.txt" +file FLIC "brief1a-c.json" +file PROX "prox1a-c.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/cam1a.wrf b/data/base/wrf/cam1/cam1a.wrf index 839c5e7199a..dfccd723fdd 100644 --- a/data/base/wrf/cam1/cam1a.wrf +++ b/data/base/wrf/cam1/cam1a.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1a.txt" -file SMSG "prox1a.txt" +file FLIC "brief1a.json" +file PROX "prox1a.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/cam1b.wrf b/data/base/wrf/cam1/cam1b.wrf index 4258ade6163..2717c18f546 100644 --- a/data/base/wrf/cam1/cam1b.wrf +++ b/data/base/wrf/cam1/cam1b.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1b.txt" -file SMSG "prox1b.txt" +file FLIC "brief1b.json" +file PROX "prox1b.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/cam1c.wrf b/data/base/wrf/cam1/cam1c.wrf index c17910a73a1..051fa8bfe6a 100644 --- a/data/base/wrf/cam1/cam1c.wrf +++ b/data/base/wrf/cam1/cam1c.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1c.txt" -file SMSG "prox1c.txt" +file FLIC "brief1c.json" +file PROX "prox1c.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/cam1ca.wrf b/data/base/wrf/cam1/cam1ca.wrf index df790c272b5..a5d5c584793 100644 --- a/data/base/wrf/cam1/cam1ca.wrf +++ b/data/base/wrf/cam1/cam1ca.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1ca.txt" -file SMSG "prox1ca.txt" +file FLIC "brief1ca.json" +file PROX "prox1ca.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/cam1end.wrf b/data/base/wrf/cam1/cam1end.wrf index 23a319c6241..6cdbe05d930 100644 --- a/data/base/wrf/cam1/cam1end.wrf +++ b/data/base/wrf/cam1/cam1end.wrf @@ -6,7 +6,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "cam1-outro.txt" +file FLIC "cam1-outro.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-1.wrf b/data/base/wrf/cam1/sub1-1.wrf index 40e185ae965..7b25184b01d 100644 --- a/data/base/wrf/cam1/sub1-1.wrf +++ b/data/base/wrf/cam1/sub1-1.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-1.txt" -file SMSG "prox1-1.txt" +file FLIC "brief1-1.json" +file PROX "prox1-1.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-1s.wrf b/data/base/wrf/cam1/sub1-1s.wrf index 93e9bd1a415..55a37df159b 100644 --- a/data/base/wrf/cam1/sub1-1s.wrf +++ b/data/base/wrf/cam1/sub1-1s.wrf @@ -6,7 +6,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-1.txt" +file FLIC "brief1-1.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-2.wrf b/data/base/wrf/cam1/sub1-2.wrf index 5bfb4b0e3bc..7ad12c23af8 100644 --- a/data/base/wrf/cam1/sub1-2.wrf +++ b/data/base/wrf/cam1/sub1-2.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-2.txt" -file SMSG "prox1-2.txt" +file FLIC "brief1-2.json" +file PROX "prox1-2.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-2s.wrf b/data/base/wrf/cam1/sub1-2s.wrf index 29c4e9161e7..43da2b88066 100644 --- a/data/base/wrf/cam1/sub1-2s.wrf +++ b/data/base/wrf/cam1/sub1-2s.wrf @@ -6,7 +6,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-2.txt" +file FLIC "brief1-2.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-3.wrf b/data/base/wrf/cam1/sub1-3.wrf index c4f4e8c2dc9..9899400f22e 100644 --- a/data/base/wrf/cam1/sub1-3.wrf +++ b/data/base/wrf/cam1/sub1-3.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-3.txt" -file SMSG "prox1-3.txt" +file FLIC "brief1-3.json" +file PROX "prox1-3.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-3s.wrf b/data/base/wrf/cam1/sub1-3s.wrf index bb9aac15daa..4e8ac14fc11 100644 --- a/data/base/wrf/cam1/sub1-3s.wrf +++ b/data/base/wrf/cam1/sub1-3s.wrf @@ -6,7 +6,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-3.txt" +file FLIC "brief1-3.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-4a.wrf b/data/base/wrf/cam1/sub1-4a.wrf index 3a0975cfcc1..22def0b5157 100644 --- a/data/base/wrf/cam1/sub1-4a.wrf +++ b/data/base/wrf/cam1/sub1-4a.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-4a.txt" -file SMSG "prox1-4a.txt" +file FLIC "brief1-4a.json" +file PROX "prox1-4a.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-4as.wrf b/data/base/wrf/cam1/sub1-4as.wrf index 7ab79285480..c19d458a42c 100644 --- a/data/base/wrf/cam1/sub1-4as.wrf +++ b/data/base/wrf/cam1/sub1-4as.wrf @@ -6,7 +6,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-4a.txt" +file FLIC "brief1-4a.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-5.wrf b/data/base/wrf/cam1/sub1-5.wrf index a40e0827991..7968722523f 100644 --- a/data/base/wrf/cam1/sub1-5.wrf +++ b/data/base/wrf/cam1/sub1-5.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-5.txt" -file SMSG "prox1-5.txt" +file FLIC "brief1-5.json" +file PROX "prox1-5.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-5s.wrf b/data/base/wrf/cam1/sub1-5s.wrf index ada3acdbc6a..26ae9b09cf8 100644 --- a/data/base/wrf/cam1/sub1-5s.wrf +++ b/data/base/wrf/cam1/sub1-5s.wrf @@ -6,7 +6,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-5.txt" +file FLIC "brief1-5.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-7.wrf b/data/base/wrf/cam1/sub1-7.wrf index 4c9d48d5193..2b6dfebfb29 100644 --- a/data/base/wrf/cam1/sub1-7.wrf +++ b/data/base/wrf/cam1/sub1-7.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-7.txt" -file SMSG "prox1-7.txt" +file FLIC "brief1-7.json" +file PROX "prox1-7.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-7s.wrf b/data/base/wrf/cam1/sub1-7s.wrf index b6bc15609c2..7aa33bab665 100644 --- a/data/base/wrf/cam1/sub1-7s.wrf +++ b/data/base/wrf/cam1/sub1-7s.wrf @@ -6,7 +6,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1-7.txt" +file FLIC "brief1-7.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-d.wrf b/data/base/wrf/cam1/sub1-d.wrf index c4b489859be..69bbfbadfac 100644 --- a/data/base/wrf/cam1/sub1-d.wrf +++ b/data/base/wrf/cam1/sub1-d.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1d.txt" -file SMSG "prox1d.txt" +file FLIC "brief1d.json" +file PROX "prox1d.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam1/sub1-d/labels.json b/data/base/wrf/cam1/sub1-d/labels.json index 6c7a5ac1b8b..5b4b3dddbaa 100644 --- a/data/base/wrf/cam1/sub1-d/labels.json +++ b/data/base/wrf/cam1/sub1-d/labels.json @@ -107,7 +107,7 @@ "area_0": { "label": "RTLZ", "pos1": [0, 14000], - "pos2": [2600, 16256] + "pos2": [1920, 16256] }, "area_1": { "label": "landingZone", @@ -172,14 +172,14 @@ "area_13": { "label": "northWayTrigger", "subscriber": 0, - "pos1": [3200, 10624], - "pos2": [10112, 11520] + "pos1": [3200, 6400], + "pos2": [10112, 12416] }, "area_14": { "label": "causeWayTrig", "subscriber": 0, "pos1": [3200, 6400], - "pos2": [10112, 10240] + "pos2": [10112, 11008] }, "area_15": { "label": "westWayTrigger", diff --git a/data/base/wrf/cam1/sub1-ds.wrf b/data/base/wrf/cam1/sub1-ds.wrf index 0718ba20865..20252472b82 100644 --- a/data/base/wrf/cam1/sub1-ds.wrf +++ b/data/base/wrf/cam1/sub1-ds.wrf @@ -6,7 +6,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief1d.txt" +file FLIC "brief1d.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2.wrf b/data/base/wrf/cam2.wrf index 0928492440f..9860ef400c2 100644 --- a/data/base/wrf/cam2.wrf +++ b/data/base/wrf/cam2.wrf @@ -1,5 +1,5 @@ /***********************************************************/ -/* You may have to modify this file for it to be correct! */ +/* You may have to modify this file for it to be correct! */ /******************* wrf\Cam2.wrf *******************/ @@ -10,5 +10,4 @@ file STR_RES "cam3strings.txt" file STR_RES "resstrings.txt" file STR_RES "scrstrings.txt" directory "messages" -file SMSG "cam2messages.txt" -file SMSG "cam3messages.txt" +file FLIC "genmessages.json" diff --git a/data/base/wrf/cam2/cam2a.wrf b/data/base/wrf/cam2/cam2a.wrf index c344d4a5015..ed05a19498c 100644 --- a/data/base/wrf/cam2/cam2a.wrf +++ b/data/base/wrf/cam2/cam2a.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2a.txt" -file SMSG "prox2a.txt" +file FLIC "brief2a.json" +file PROX "prox2a.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/cam2b.wrf b/data/base/wrf/cam2/cam2b.wrf index ca0814e7157..f1aba2ade9a 100644 --- a/data/base/wrf/cam2/cam2b.wrf +++ b/data/base/wrf/cam2/cam2b.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2b.txt" -file SMSG "prox2b.txt" +file FLIC "brief2b.json" +file PROX "prox2b.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/cam2c.wrf b/data/base/wrf/cam2/cam2c.wrf index aefd81e9b15..b0ebc101c87 100644 --- a/data/base/wrf/cam2/cam2c.wrf +++ b/data/base/wrf/cam2/cam2c.wrf @@ -6,8 +6,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-c.txt" -file SMSG "prox2c.txt" +file FLIC "brief2-c.json" +file PROX "prox2c.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/cam2end.wrf b/data/base/wrf/cam2/cam2end.wrf index 3aec9f6aa79..a600e2a551c 100644 --- a/data/base/wrf/cam2/cam2end.wrf +++ b/data/base/wrf/cam2/cam2end.wrf @@ -5,7 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-dii.txt" +file FLIC "brief2-dii.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-1.wrf b/data/base/wrf/cam2/sub2-1.wrf index 1750b120a27..51f698eb49b 100644 --- a/data/base/wrf/cam2/sub2-1.wrf +++ b/data/base/wrf/cam2/sub2-1.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-1.txt" -file SMSG "prox2-1.txt" +file FLIC "brief2-1.json" +file PROX "prox2-1.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-1s.wrf b/data/base/wrf/cam2/sub2-1s.wrf index 1a05e4815c7..b277d83b408 100644 --- a/data/base/wrf/cam2/sub2-1s.wrf +++ b/data/base/wrf/cam2/sub2-1s.wrf @@ -5,7 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-1.txt" +file FLIC "brief2-1.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-2.wrf b/data/base/wrf/cam2/sub2-2.wrf index fa62e65fdb6..1014e432e1a 100644 --- a/data/base/wrf/cam2/sub2-2.wrf +++ b/data/base/wrf/cam2/sub2-2.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-2.txt" -file SMSG "prox2-2.txt" +file FLIC "brief2-2.json" +file PROX "prox2-2.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-2s.wrf b/data/base/wrf/cam2/sub2-2s.wrf index 65c8d3a85dd..68d3ea15895 100644 --- a/data/base/wrf/cam2/sub2-2s.wrf +++ b/data/base/wrf/cam2/sub2-2s.wrf @@ -5,7 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-2.txt" +file FLIC "brief2-2.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-5.wrf b/data/base/wrf/cam2/sub2-5.wrf index 5ca3b426a31..d22d49467aa 100644 --- a/data/base/wrf/cam2/sub2-5.wrf +++ b/data/base/wrf/cam2/sub2-5.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-5.txt" -file SMSG "prox2-5.txt" +file FLIC "brief2-5.json" +file PROX "prox2-5.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-5s.wrf b/data/base/wrf/cam2/sub2-5s.wrf index 7d369358f44..02665dad95e 100644 --- a/data/base/wrf/cam2/sub2-5s.wrf +++ b/data/base/wrf/cam2/sub2-5s.wrf @@ -5,7 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-5.txt" +file FLIC "brief2-5.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-6.wrf b/data/base/wrf/cam2/sub2-6.wrf index 7427c2ecf17..4ef352de20f 100644 --- a/data/base/wrf/cam2/sub2-6.wrf +++ b/data/base/wrf/cam2/sub2-6.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-6.txt" -file SMSG "prox2-6.txt" +file FLIC "brief2-6.json" +file PROX "prox2-6.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-6/dinit.bjo b/data/base/wrf/cam2/sub2-6/dinit.bjo index e30591e2963..a33c1196024 100644 Binary files a/data/base/wrf/cam2/sub2-6/dinit.bjo and b/data/base/wrf/cam2/sub2-6/dinit.bjo differ diff --git a/data/base/wrf/cam2/sub2-6/struct.bjo b/data/base/wrf/cam2/sub2-6/struct.bjo index f90e0acfd56..68b9581b82e 100644 Binary files a/data/base/wrf/cam2/sub2-6/struct.bjo and b/data/base/wrf/cam2/sub2-6/struct.bjo differ diff --git a/data/base/wrf/cam2/sub2-6s.wrf b/data/base/wrf/cam2/sub2-6s.wrf index 094a7529e6b..5d2d9179bc2 100644 --- a/data/base/wrf/cam2/sub2-6s.wrf +++ b/data/base/wrf/cam2/sub2-6s.wrf @@ -5,7 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-6.txt" +file FLIC "brief2-6.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-7.wrf b/data/base/wrf/cam2/sub2-7.wrf index 06b6643b6c4..85df655b629 100644 --- a/data/base/wrf/cam2/sub2-7.wrf +++ b/data/base/wrf/cam2/sub2-7.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-7.txt" -file SMSG "prox2-7.txt" +file FLIC "brief2-7.json" +file PROX "prox2-7.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-7s.wrf b/data/base/wrf/cam2/sub2-7s.wrf index dd83c895d7f..09c4db2f32e 100644 --- a/data/base/wrf/cam2/sub2-7s.wrf +++ b/data/base/wrf/cam2/sub2-7s.wrf @@ -5,7 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-7.txt" +file FLIC "brief2-7.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-8.wrf b/data/base/wrf/cam2/sub2-8.wrf index eebae343bff..57782eedb25 100644 --- a/data/base/wrf/cam2/sub2-8.wrf +++ b/data/base/wrf/cam2/sub2-8.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-8.txt" -file SMSG "prox2-8.txt" +file FLIC "brief2-8.json" +file PROX "prox2-8.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-8/labels.json b/data/base/wrf/cam2/sub2-8/labels.json index 338603031a6..64b83997c1b 100644 --- a/data/base/wrf/cam2/sub2-8/labels.json +++ b/data/base/wrf/cam2/sub2-8/labels.json @@ -66,12 +66,12 @@ "area_0": { "label": "landingZone", - "pos1": [6800, 7120], - "pos2": [7024, 7412] + "pos1": [6784, 7168], + "pos2": [7040, 7424] }, "area_1": { "label": "RTLZ", - "pos1": [5504, 5888], + "pos1": [5504, 6144], "pos2": [7808, 7808] }, "area_2": { diff --git a/data/base/wrf/cam2/sub2-8s.wrf b/data/base/wrf/cam2/sub2-8s.wrf index 212042be8a4..57959916901 100644 --- a/data/base/wrf/cam2/sub2-8s.wrf +++ b/data/base/wrf/cam2/sub2-8s.wrf @@ -5,7 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-8.txt" +file FLIC "brief2-8.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-d.wrf b/data/base/wrf/cam2/sub2-d.wrf index 0b02c799541..b26bc95b310 100644 --- a/data/base/wrf/cam2/sub2-d.wrf +++ b/data/base/wrf/cam2/sub2-d.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-di.txt" -file SMSG "prox2d.txt" +file FLIC "brief2-di.json" +file PROX "prox2d.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam2/sub2-ds.wrf b/data/base/wrf/cam2/sub2-ds.wrf index 252a6303fa2..e993b962942 100644 --- a/data/base/wrf/cam2/sub2-ds.wrf +++ b/data/base/wrf/cam2/sub2-ds.wrf @@ -5,7 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief2-di.txt" +file FLIC "brief2-di.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3.wrf b/data/base/wrf/cam3.wrf index 7e2f4254bdd..7efea08c239 100644 --- a/data/base/wrf/cam3.wrf +++ b/data/base/wrf/cam3.wrf @@ -1,5 +1,5 @@ /***********************************************************/ -/* You may have to modify this file for it to be correct! */ +/* You may have to modify this file for it to be correct! */ /******************* WRF\Cam3.wrf *******************/ @@ -9,4 +9,4 @@ file STR_RES "cam3strings.txt" file STR_RES "resstrings.txt" file STR_RES "scrstrings.txt" directory "messages" -file SMSG "cam3messages.txt" +file FLIC "genmessages.json" diff --git a/data/base/wrf/cam3/cam3-4/dinit.bjo b/data/base/wrf/cam3/cam3-4/dinit.bjo index f5082c71d1a..973a5ecf228 100644 Binary files a/data/base/wrf/cam3/cam3-4/dinit.bjo and b/data/base/wrf/cam3/cam3-4/dinit.bjo differ diff --git a/data/base/wrf/cam3/cam3-4/struct.bjo b/data/base/wrf/cam3/cam3-4/struct.bjo index 2a32a2f24aa..d905e5353b2 100644 Binary files a/data/base/wrf/cam3/cam3-4/struct.bjo and b/data/base/wrf/cam3/cam3-4/struct.bjo differ diff --git a/data/base/wrf/cam3/cam3a.wrf b/data/base/wrf/cam3/cam3a.wrf index 3638ea72e81..1ffe62e943a 100644 --- a/data/base/wrf/cam3/cam3a.wrf +++ b/data/base/wrf/cam3/cam3a.wrf @@ -5,9 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3-a.txt" -file SMSG "brief3intro.txt" -file SMSG "prox3a.txt" +file FLIC "brief3-a.json" +file PROX "prox3a.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/cam3a/labels.json b/data/base/wrf/cam3/cam3a/labels.json index fcd00b307b5..520ee8dec26 100644 --- a/data/base/wrf/cam3/cam3a/labels.json +++ b/data/base/wrf/cam3/cam3a/labels.json @@ -169,14 +169,20 @@ "area_13": { "label": "middleTrigger", "subscriber": 0, - "pos1": [128, 12672], + "pos1": [128, 12224], "pos2": [6272, 13312] }, "area_14": { "label": "northFactoryTrigger", "subscriber": 0, - "pos1": [6592, 11840], - "pos2": [7424, 12224] + "pos1": [128, 11840], + "pos2": [8064, 12224] + }, + "area_15": { + "label": "westFactoryVTOLTrigger", + "subscriber": 0, + "pos1": [5248, 13312], + "pos2": [5504, 16896] }, "object_0": { diff --git a/data/base/wrf/cam3/cam3ab.wrf b/data/base/wrf/cam3/cam3ab.wrf index 25366dbaf16..5c76b239a27 100644 --- a/data/base/wrf/cam3/cam3ab.wrf +++ b/data/base/wrf/cam3/cam3ab.wrf @@ -5,7 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3a-b.txt" +file FLIC "brief3a-b.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/cam3ad/labels.json b/data/base/wrf/cam3/cam3ad/labels.json index f9eabf1fb6b..ef132f75485 100644 --- a/data/base/wrf/cam3/cam3ad/labels.json +++ b/data/base/wrf/cam3/cam3ad/labels.json @@ -38,8 +38,8 @@ "area_0": { "label": "landingZone", - "pos1": [6200, 31160], - "pos2": [6600, 31560] + "pos1": [6272, 31232], + "pos2": [6528, 31488] }, "area_1": { "label": "NXlandingZone", diff --git a/data/base/wrf/cam3/cam3ad1.wrf b/data/base/wrf/cam3/cam3ad1.wrf index 251ab9d5170..4a1fb5c9a90 100644 --- a/data/base/wrf/cam3/cam3ad1.wrf +++ b/data/base/wrf/cam3/cam3ad1.wrf @@ -5,9 +5,9 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3a-d1.txt" -file SMSG "brief3a-d2.txt" -file SMSG "prox3a-d1.txt" +file FLIC "brief3a-d1.json" +file FLIC "brief3a-d2.json" +file PROX "prox3a-d1.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/cam3ad2.wrf b/data/base/wrf/cam3/cam3ad2.wrf index f5c2ed79efa..79c22076063 100644 --- a/data/base/wrf/cam3/cam3ad2.wrf +++ b/data/base/wrf/cam3/cam3ad2.wrf @@ -5,9 +5,9 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3a-d1.txt" -file SMSG "brief3a-d2.txt" -file SMSG "prox3a-d1.txt" +file FLIC "brief3a-d1.json" +file FLIC "brief3a-d2.json" +file PROX "prox3a-d1.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/cam3b.wrf b/data/base/wrf/cam3/cam3b.wrf index 92836cd27ae..a77a7ff21d8 100644 --- a/data/base/wrf/cam3/cam3b.wrf +++ b/data/base/wrf/cam3/cam3b.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3-b.txt" -file SMSG "prox3b.txt" +file FLIC "brief3-b.json" +file PROX "prox3b.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/cam3c.wrf b/data/base/wrf/cam3/cam3c.wrf index d08ab0da9c9..1d55cc631a3 100644 --- a/data/base/wrf/cam3/cam3c.wrf +++ b/data/base/wrf/cam3/cam3c.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3-c.txt" -file SMSG "prox3c.txt" +file FLIC "brief3-c.json" +file PROX "prox3c.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/cam3d/labels.json b/data/base/wrf/cam3/cam3d/labels.json index 3e158e0dd92..b781830d7e3 100644 --- a/data/base/wrf/cam3/cam3d/labels.json +++ b/data/base/wrf/cam3/cam3d/labels.json @@ -67,8 +67,8 @@ }, "area_1": { "label": "landingZone2", - "pos1": [6200, 31160], - "pos2": [6600, 31560] + "pos1": [6272, 31232], + "pos2": [6528, 31488] }, "area_2": { "label": "mainBaseCleanup", diff --git a/data/base/wrf/cam3/sub3-1.wrf b/data/base/wrf/cam3/sub3-1.wrf index 88d84d8a6da..4096d241351 100644 --- a/data/base/wrf/cam3/sub3-1.wrf +++ b/data/base/wrf/cam3/sub3-1.wrf @@ -38,9 +38,9 @@ file WAV "fdetseq.ogg" /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3-1a.txt" -file SMSG "brief3-1b.txt" -file SMSG "prox3-1.txt" +file FLIC "brief3-1a.json" +file FLIC "brief3-1b.json" +file PROX "prox3-1.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/sub3-1s.wrf b/data/base/wrf/cam3/sub3-1s.wrf index e53ddb8ab12..aebac06bc72 100644 --- a/data/base/wrf/cam3/sub3-1s.wrf +++ b/data/base/wrf/cam3/sub3-1s.wrf @@ -5,8 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3-1a.txt" -file SMSG "prox3-1.txt" +file FLIC "brief3-1a.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/sub3-2.wrf b/data/base/wrf/cam3/sub3-2.wrf index baf0738c9a2..427a0b8ea7d 100644 --- a/data/base/wrf/cam3/sub3-2.wrf +++ b/data/base/wrf/cam3/sub3-2.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3-2.txt" -file SMSG "prox3-2.txt" +file FLIC "brief3-2.json" +file PROX "prox3-2.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/sub3-2/dinit.bjo b/data/base/wrf/cam3/sub3-2/dinit.bjo index bc8a6c8d579..faffc49dbd4 100644 Binary files a/data/base/wrf/cam3/sub3-2/dinit.bjo and b/data/base/wrf/cam3/sub3-2/dinit.bjo differ diff --git a/data/base/wrf/cam3/sub3-2/struct.bjo b/data/base/wrf/cam3/sub3-2/struct.bjo index 11ce03c0bc9..16194b687e2 100644 Binary files a/data/base/wrf/cam3/sub3-2/struct.bjo and b/data/base/wrf/cam3/sub3-2/struct.bjo differ diff --git a/data/base/wrf/cam3/sub3-2s.wrf b/data/base/wrf/cam3/sub3-2s.wrf index ddcce09b203..ed589899258 100644 --- a/data/base/wrf/cam3/sub3-2s.wrf +++ b/data/base/wrf/cam3/sub3-2s.wrf @@ -5,8 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3-2.txt" -file SMSG "prox3-2.txt" +file FLIC "brief3-2.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/sub3-3.wrf b/data/base/wrf/cam3/sub3-3.wrf deleted file mode 100644 index b050014fee4..00000000000 --- a/data/base/wrf/cam3/sub3-3.wrf +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Cam3-3.wrf - * - */ - -/* Directory for Proximity messages and mission briefs */ -directory "messages" -file SMSG "prox3-3.txt" - -directory "script" -file JAVASCRIPT "rules.js" - -directory "script/campaign" -file JAVASCRIPT "cam3-3.js" diff --git a/data/base/wrf/cam3/sub3-3s.wrf b/data/base/wrf/cam3/sub3-3s.wrf deleted file mode 100644 index 4727bec40bf..00000000000 --- a/data/base/wrf/cam3/sub3-3s.wrf +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Cam3-3s.wrf - * - */ - -/* Directory for Proximity messages and mission briefs */ -directory "messages" -file SMSG "brief3-3.txt" -file SMSG "prox3-3.txt" - -directory "script" -file JAVASCRIPT "rules.js" - -directory "script/campaign" -file JAVASCRIPT "cam3-3s.js" diff --git a/data/base/wrf/cam3/sub3-4.wrf b/data/base/wrf/cam3/sub3-4.wrf index 793fce78e2d..e4a3f979ce2 100644 --- a/data/base/wrf/cam3/sub3-4.wrf +++ b/data/base/wrf/cam3/sub3-4.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3-4.txt" -file SMSG "prox3-4.txt" +file FLIC "brief3-4.json" +file PROX "prox3-4.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/cam3/sub3-4s.wrf b/data/base/wrf/cam3/sub3-4s.wrf index b394e42bbe5..a1a59ac8c9c 100644 --- a/data/base/wrf/cam3/sub3-4s.wrf +++ b/data/base/wrf/cam3/sub3-4s.wrf @@ -5,8 +5,7 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brief3-4.txt" -file SMSG "prox3-4.txt" +file FLIC "brief3-4.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/fastplay/fastdemo.wrf b/data/base/wrf/fastplay/fastdemo.wrf index f4422520e41..a3269e4b9d5 100644 --- a/data/base/wrf/fastplay/fastdemo.wrf +++ b/data/base/wrf/fastplay/fastdemo.wrf @@ -6,8 +6,9 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "briefdemo.txt" -file SMSG "proxdemo.txt" +file FLIC "genmessages.json" +file FLIC "briefdemo.json" +file PROX "proxdemo.json" directory "script" file JAVASCRIPT "rules.js" diff --git a/data/base/wrf/frontend.wrf b/data/base/wrf/frontend.wrf index 53ecae9a944..facf65bcc88 100644 --- a/data/base/wrf/frontend.wrf +++ b/data/base/wrf/frontend.wrf @@ -1,5 +1,5 @@ /***********************************************************/ -/* You may have to modify this file for it to be correct! */ +/* You may have to modify this file for it to be correct! */ /******************* WRF\frontend.wrf *******************/ @@ -18,6 +18,6 @@ file WAV "beep8.ogg" file WAV "beep9.ogg" file WAV "gmeshtdn.ogg" directory "audio" -file AUDIOCFG "frontaud.cfg" +file AUDIOCFG "frontaud.json" directory "messages/strings" file STR_RES "names.txt" diff --git a/data/base/wrf/tutorial/newtut.wrf b/data/base/wrf/tutorial/newtut.wrf index 115ad739f69..f4cc065939a 100644 --- a/data/base/wrf/tutorial/newtut.wrf +++ b/data/base/wrf/tutorial/newtut.wrf @@ -5,8 +5,8 @@ /* Directory for Proximity messages and mission briefs */ directory "messages" -file SMSG "brieftut.txt" -file SMSG "proxtut.txt" +file FLIC "brieftut.json" +file PROX "proxtut.json" /* Directory for javascript files*/ directory "script" diff --git a/data/mods/CMakeLists.txt b/data/mods/CMakeLists.txt index f46d2a377fd..7d8ae13ff68 100644 --- a/data/mods/CMakeLists.txt +++ b/data/mods/CMakeLists.txt @@ -2,7 +2,14 @@ if(NOT DEFINED WZ_DATADIR) message(FATAL_ERROR "This file should be included after WZ_DATADIR is defined.") endif() +set(_default_bundled_addon_mod_option_value ON) +if(CMAKE_SYSTEM_NAME MATCHES "Emscripten") + set(_default_bundled_addon_mod_option_value OFF) +endif() + OPTION(WZ_BUILTIN_MODS_CAMCLASSIC "Include the classic campaign balance mod" ON) +OPTION(WZ_BUILTIN_MODS_RECLAMATION "Include the addon campaign: Reclamation" ${_default_bundled_addon_mod_option_value}) +OPTION(WZ_BUILTIN_MODS_FRACTUREDKINGDOM "Include the addon campaign: Fractured Kingdom" ${_default_bundled_addon_mod_option_value}) # Note: Always package mods as actual zip files, *even for Emscripten builds* find_package(ZIP REQUIRED) @@ -13,6 +20,13 @@ find_package(ZIP REQUIRED) set_source_files_properties("${wz2100_autorevision_cache_file}" PROPERTIES GENERATED TRUE) set_source_files_properties("${wz2100_autorevision_h_file}" PROPERTIES GENERATED TRUE) +function(_MODINFO_CREATE_BASE_TARGET) + if(NOT TARGET mod_info_gen) + add_custom_target(mod_info_gen) + set_property(TARGET mod_info_gen PROPERTY FOLDER "_WZBuildProcessTargets") + endif() +endfunction() + function(_MODINFO_JSON_GET_UNIQUE_TARGET_NAME _name _unique_name) set(propertyName "_MODINFO_JSON_UNIQUE_COUNTER_${_name}") get_property(currentCounter GLOBAL PROPERTY "${propertyName}") @@ -44,11 +58,7 @@ function(GENERATE_MOD_INFO_JSON TEMPLATE_FILE OUTPUT_PATH) VERBATIM ) - if(NOT TARGET mod_info_gen) - add_custom_target(mod_info_gen) - set_property(TARGET mod_info_gen PROPERTY FOLDER "_WZBuildProcessTargets") - endif() - + _MODINFO_CREATE_BASE_TARGET() _MODINFO_JSON_GET_UNIQUE_TARGET_NAME(modinfo uniqueTargetName) add_custom_target(${uniqueTargetName} ALL @@ -61,6 +71,90 @@ function(GENERATE_MOD_INFO_JSON TEMPLATE_FILE OUTPUT_PATH) endfunction() +function(PACKAGE_ADDON_CAMPAIGN INPUT_PATH OUTPUT_PATH) + + file(REMOVE "${OUTPUT_PATH}") + + get_filename_component(_input_folder_name "${INPUT_PATH}" NAME) + + if (NOT EXISTS "${INPUT_PATH}") + message(FATAL_ERROR "Missing path: ${INPUT_PATH} - (did you remember to initialize git submodules?)") + return() + endif() + + file(RELATIVE_PATH relative_input_path "${CMAKE_CURRENT_SOURCE_DIR}" "${INPUT_PATH}") + set(STAGING_FILES_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/staging/files/${relative_input_path}") + set(STAGING_INFO_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/staging/info/${relative_input_path}") + message(DEBUG "STAGING_FILES_DIRECTORY=${STAGING_FILES_DIRECTORY}") + message(DEBUG "STAGING_INFO_DIRECTORY=${STAGING_INFO_DIRECTORY}") + + file(GLOB_RECURSE _mod_input_files_list LIST_DIRECTORIES true "${INPUT_PATH}/*") + set(_output_files_list) + set(_info_file_names) + foreach(input_file IN LISTS _mod_input_files_list) + get_filename_component(_input_file_name "${input_file}" NAME) + file(RELATIVE_PATH _input_file_relative "${INPUT_PATH}" "${input_file}") + if (_input_file_name MATCHES "^[.]") # ignore files starting with period + message(DEBUG "Ignoring mod path: ${_input_file_name}") + continue() + endif() + if (IS_DIRECTORY "${input_file}") + list(APPEND _output_files_list "${STAGING_FILES_DIRECTORY}/${_input_file_relative}") + continue() + endif() + # handling files: + if ("${_input_file_relative}" MATCHES "^(mod-info.json|mod-banner.png)") + # Special case - these end up in the STAGING_INFO_DIRECTORY directory + list(APPEND _output_files_list "${STAGING_INFO_DIRECTORY}/${_input_file_relative}") + list(APPEND _info_file_names "${_input_file_name}") + else() + list(APPEND _output_files_list "${STAGING_FILES_DIRECTORY}/${_input_file_relative}") + endif() + endforeach() + + file(GLOB _mod_root_paths LIST_DIRECTORIES true RELATIVE "${INPUT_PATH}" "${INPUT_PATH}/*") + list(FILTER _mod_root_paths EXCLUDE REGEX "^[.]") + list(FILTER _mod_root_paths EXCLUDE REGEX "^(mod-info.json|mod-banner.png)") + + # Stage the mod files + add_custom_command( + COMMAND ${CMAKE_COMMAND} -DCACHEFILE=${wz2100_autorevision_cache_file} -DPROJECT_ROOT=${PROJECT_SOURCE_DIR} -DINPUT_PATH=${INPUT_PATH} -DSTAGING_FILES_DIRECTORY=${STAGING_FILES_DIRECTORY} -DSTAGING_INFO_DIRECTORY=${STAGING_INFO_DIRECTORY} -P ${CMAKE_CURRENT_SOURCE_DIR}/stage_modfiles.cmake + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + DEPENDS ${_mod_input_files_list} "${wz2100_autorevision_cache_file}" "${CMAKE_CURRENT_SOURCE_DIR}/stage_modfiles.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/autorevision_modinfo.cmake" + OUTPUT ${_output_files_list} + VERBATIM + ) + _MODINFO_CREATE_BASE_TARGET() + set(uniqueTargetName "staging_mods_campaign_${_input_folder_name}") + add_custom_target(${uniqueTargetName} ALL + DEPENDS ${_output_files_list} + ) + set_property(TARGET ${uniqueTargetName} PROPERTY FOLDER "_WZBuildProcessTargets") + add_dependencies(${uniqueTargetName} autorevision) # Ensure ordering and non-concurrency + add_dependencies(mod_info_gen ${uniqueTargetName}) + + set(_target_name "data_mods_campaign_${_input_folder_name}") + COMPRESS_ZIP(OUTPUT "${OUTPUT_PATH}" + COMPRESSION_LEVEL 7 + PATHS + ${_info_file_names} + WORKING_DIRECTORY "${STAGING_INFO_DIRECTORY}" + PATHS + ${_mod_root_paths} + WORKING_DIRECTORY "${STAGING_FILES_DIRECTORY}" + BUILD_ALWAYS_TARGET "${_target_name}" + IGNORE_GIT + QUIET + ) + add_dependencies("${_target_name}" mod_info_gen) + set_property(TARGET "${_target_name}" PROPERTY FOLDER "data") + add_dependencies(data_mods "${_target_name}") + + list(APPEND wz2100_mods_FILES "${OUTPUT_PATH}") + set(wz2100_mods_FILES "${wz2100_mods_FILES}" PARENT_SCOPE) + +endfunction() + add_custom_target(data_mods) set_property(TARGET data_mods PROPERTY FOLDER "_WZBuildProcessTargets") @@ -101,6 +195,20 @@ if (WZ_BUILTIN_MODS_CAMCLASSIC) endif(WZ_BUILTIN_MODS_CAMCLASSIC) +if (WZ_BUILTIN_MODS_RECLAMATION) + + # Addon campaign: Reclamation + PACKAGE_ADDON_CAMPAIGN("${CMAKE_CURRENT_SOURCE_DIR}/campaign/reclamation" "${CMAKE_CURRENT_BINARY_DIR}/campaign/reclamation.wz") + +endif(WZ_BUILTIN_MODS_RECLAMATION) + +if (WZ_BUILTIN_MODS_FRACTUREDKINGDOM) + + # Addon campaign: Fractured Kingdom + PACKAGE_ADDON_CAMPAIGN("${CMAKE_CURRENT_SOURCE_DIR}/campaign/fractured-kingdom" "${CMAKE_CURRENT_BINARY_DIR}/campaign/fractured_kingdom.wz") + +endif(WZ_BUILTIN_MODS_FRACTUREDKINGDOM) + #################################################### set(wz2100_mods_FILES ${wz2100_mods_FILES} PARENT_SCOPE) diff --git a/data/mods/autorevision_modinfo.cmake b/data/mods/autorevision_modinfo.cmake index 06479683300..e5a882aa7f6 100644 --- a/data/mods/autorevision_modinfo.cmake +++ b/data/mods/autorevision_modinfo.cmake @@ -82,5 +82,31 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++MODINFO_LATEST_VERSION: ${MO if(NOT EXISTS "${TEMPLATE_FILE}") message( FATAL_ERROR "Input TEMPLATE_FILE does not exist: \"${TEMPLATE_FILE}\"" ) endif() -configure_file("${TEMPLATE_FILE}" "${OUTPUT_FILE}" @ONLY) + +file(READ "${TEMPLATE_FILE}" _mod_info_json) +string(FIND "${_mod_info_json}" "@MODINFO_LATEST_VERSION@" _template_token_pos) +if (_template_token_pos LESS 0) + # Did not find token - might not be a template file - attempt JSON string replacement for just maxVersionTested + + # CMake 3.19+ supports string(JSON ...), but does not preserve json key ordering - so use a regex instead + # regex replace "maxVersionTested": "" + string(REGEX REPLACE "\"maxVersionTested\"[ \t\]*:[ \t\]*\"[^\"]*\"" "\"maxVersionTested\": \"${MODINFO_LATEST_VERSION}\"" _mod_info_json_updated "${_mod_info_json}") + + if (_mod_info_json_updated STREQUAL _mod_info_json) + execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++No update to maxVersionTested applied: ${OUTPUT_FILE}") + # Copy original file (only if input file != output file) + if (NOT TEMPLATE_FILE STREQUAL OUTPUT_FILE) + file(WRITE "${OUTPUT_FILE}" "${_mod_info_json}") + endif() + else() + execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++maxVersionTested updated to \"${MODINFO_LATEST_VERSION}\": ${OUTPUT_FILE}") + set(_mod_info_json "${_mod_info_json_updated}") + # Write it out + file(WRITE "${OUTPUT_FILE}" "${_mod_info_json}") + endif() +else() + # This is a template file - just use configure_file @ONLY + execute_process(COMMAND ${CMAKE_COMMAND} -E echo "++Template @MODINFO_LATEST_VERSION@ updated to \"${MODINFO_LATEST_VERSION}\": ${OUTPUT_FILE}") + configure_file("${TEMPLATE_FILE}" "${OUTPUT_FILE}" @ONLY) +endif() diff --git a/data/mods/campaign/fractured-kingdom b/data/mods/campaign/fractured-kingdom new file mode 160000 index 00000000000..1483cf01182 --- /dev/null +++ b/data/mods/campaign/fractured-kingdom @@ -0,0 +1 @@ +Subproject commit 1483cf01182977e98c3a342aa4e5d7437a7c475b diff --git a/data/mods/campaign/reclamation b/data/mods/campaign/reclamation new file mode 160000 index 00000000000..96016ebf681 --- /dev/null +++ b/data/mods/campaign/reclamation @@ -0,0 +1 @@ +Subproject commit 96016ebf681f2dc14a778766396654a77fe21704 diff --git a/data/mods/campaign/wz2100_camclassic/mod-info.json.in b/data/mods/campaign/wz2100_camclassic/mod-info.json.in index b152bb35502..d3262dc81a0 100644 --- a/data/mods/campaign/wz2100_camclassic/mod-info.json.in +++ b/data/mods/campaign/wz2100_camclassic/mod-info.json.in @@ -30,18 +30,34 @@ "id": "autosavesOnly", "default": false, "userEditable": true + }, + { + "id": "ps1Modifiers", + "default": false, + "userEditable": true } ], "customTweakOptions": [ { - "id": "camclassic_Balance32", + "id": "camClassic_balance32", "type": "bool", "default": false, "displayName": { "en": "3.2.x Balance" }, "description": { - "en": "3.2.x series balance by emulating research bugs" + "en": "3.2.x series balance by emulating research bugs." + } + }, + { + "id": "camClassic_slowProduction", + "type": "bool", + "default": false, + "displayName": { + "en": "Slow Factory Production" + }, + "description": { + "en": "Slower AI factory production times." } } ] diff --git a/data/mods/campaign/wz2100_camclassic/stats/brain.json b/data/mods/campaign/wz2100_camclassic/stats/brain.json index 28ed3070c52..77afbcbc1b0 100644 --- a/data/mods/campaign/wz2100_camclassic/stats/brain.json +++ b/data/mods/campaign/wz2100_camclassic/stats/brain.json @@ -8,7 +8,7 @@ "maxDroidsMult": 2, "name": "Command Turret", "ranks": [ "Rookie", "Green", "Trained", "Regular", "Professional", "Veteran", "Elite", "Special", "Hero" ], - "thresholds": [ 0, 8, 16, 32, 64, 128, 256, 512, 1024 ], + "thresholds": [ 0, 16, 32, 64, 128, 256, 512, 1024, 2048 ], "turret": "CommandTurret1" }, "ZNULLBRAIN": { diff --git a/data/mods/campaign/wz2100_camclassic/stats/propulsion.json b/data/mods/campaign/wz2100_camclassic/stats/propulsion.json new file mode 100644 index 00000000000..39e5d4f100b --- /dev/null +++ b/data/mods/campaign/wz2100_camclassic/stats/propulsion.json @@ -0,0 +1,277 @@ +{ + "BaBaLegs": { + "buildPoints": 15, + "deceleration": 450, + "id": "BaBaLegs", + "name": "BaBaLegs", + "speed": 200, + "spinAngle": 45, + "spinSpeed": 450, + "turnSpeed": 225, + "type": "Legged", + "weight": 10 + }, + "BaBaProp": { + "buildPoints": 15, + "id": "BaBaProp", + "name": "BaBaProp", + "speed": 200, + "type": "Wheeled", + "weight": 10 + }, + "CyborgLegs": { + "buildPoints": 50, + "buildPower": 10, + "deceleration": 450, + "hitpointPctOfBody": 50, + "id": "CyborgLegs", + "model": "cybd_std.pie", + "name": "Cyborg Propulsion", + "speed": 400, + "spinAngle": 45, + "spinSpeed": 450, + "turnSpeed": 225, + "type": "Legged", + "weight": 100 + }, + "CyborgLegs02": { + "buildPoints": 50, + "buildPower": 10, + "deceleration": 450, + "hitpointPctOfBody": 100, + "id": "CyborgLegs02", + "model": "cybd_std.pie", + "name": "Cyborg Propulsion II", + "speed": 400, + "spinAngle": 45, + "spinSpeed": 450, + "turnSpeed": 225, + "type": "Legged", + "weight": 100 + }, + "CyborgLegs03": { + "buildPoints": 50, + "buildPower": 10, + "deceleration": 450, + "hitpointPctOfBody": 150, + "id": "CyborgLegs03", + "model": "cybd_std.pie", + "name": "Cyborg Propulsion III", + "speed": 400, + "spinAngle": 45, + "spinSpeed": 450, + "turnSpeed": 225, + "type": "Legged", + "weight": 100 + }, + "HalfTrack": { + "buildPoints": 75, + "buildPower": 75, + "designable": 1, + "hitpointPctOfBody": 200, + "id": "HalfTrack", + "model": "prlhtr1.pie", + "name": "Half-tracks", + "skidDeceleration": 500, + "speed": 150, + "type": "Half-Tracked", + "weight": 400 + }, + "HalfTrack02": { + "buildPoints": 75, + "buildPower": 100, + "designable": 1, + "hitpointPctOfBody": 350, + "id": "HalfTrack02", + "model": "prlhtr1.pie", + "name": "Half-tracks II", + "skidDeceleration": 500, + "speed": 150, + "type": "Half-Tracked", + "weight": 350 + }, + "HalfTrack03": { + "buildPoints": 75, + "buildPower": 125, + "designable": 1, + "hitpointPctOfBody": 500, + "id": "HalfTrack03", + "model": "prlhtr1.pie", + "name": "Half-tracks III", + "skidDeceleration": 500, + "speed": 150, + "type": "Half-Tracked", + "weight": 300 + }, + "V-Tol": { + "acceleration": 200, + "buildPoints": 125, + "buildPower": 150, + "deceleration": 200, + "designable": 1, + "hitpointPctOfBody": 100, + "id": "V-Tol", + "model": "DPVTOL.PIE", + "name": "VTOL", + "speed": 700, + "spinSpeed": 200, + "turnSpeed": 100, + "type": "Lift", + "weight": 50 + }, + "V-Tol02": { + "acceleration": 200, + "buildPoints": 125, + "buildPower": 250, + "deceleration": 200, + "designable": 1, + "hitpointPctOfBody": 150, + "id": "V-Tol02", + "model": "DPVTOL.PIE", + "name": "VTOL II", + "speed": 800, + "spinSpeed": 200, + "turnSpeed": 100, + "type": "Lift", + "weight": 50 + }, + "V-Tol03": { + "acceleration": 200, + "buildPoints": 125, + "buildPower": 300, + "deceleration": 200, + "designable": 1, + "hitpointPctOfBody": 300, + "id": "V-Tol03", + "model": "DPVTOL.PIE", + "name": "VTOL III", + "speed": 800, + "spinSpeed": 200, + "turnSpeed": 100, + "type": "Lift", + "weight": 50 + }, + "ZNULLPROP": { + "id": "ZNULLPROP", + "model": "znulltracks.pie", + "name": "Z NULL PROP", + "type": "Wheeled" + }, + "hover01": { + "buildPoints": 100, + "buildPower": 100, + "designable": 1, + "hitpointPctOfBody": 150, + "id": "hover01", + "model": "PRLHOV1.PIE", + "name": "Hover", + "skidDeceleration": 120, + "speed": 200, + "type": "Hover", + "weight": 200 + }, + "hover02": { + "buildPoints": 100, + "buildPower": 150, + "designable": 1, + "hitpointPctOfBody": 200, + "id": "hover02", + "model": "PRLHOV1.PIE", + "name": "Hover II", + "skidDeceleration": 120, + "speed": 225, + "type": "Hover", + "weight": 150 + }, + "hover03": { + "buildPoints": 100, + "buildPower": 200, + "designable": 1, + "hitpointPctOfBody": 300, + "id": "hover03", + "model": "PRLHOV1.PIE", + "name": "Hover III", + "skidDeceleration": 120, + "speed": 200, + "type": "Hover", + "weight": 100 + }, + "tracked01": { + "buildPoints": 125, + "buildPower": 125, + "designable": 1, + "hitpointPctOfBody": 400, + "id": "tracked01", + "model": "prltrk1.pie", + "name": "Tracks", + "speed": 125, + "spinAngle": 45, + "type": "Tracked", + "weight": 650 + }, + "tracked02": { + "buildPoints": 125, + "buildPower": 200, + "designable": 1, + "hitpointPctOfBody": 600, + "id": "tracked02", + "model": "prltrk1.pie", + "name": "Tracks II", + "speed": 125, + "spinAngle": 45, + "type": "Tracked", + "weight": 600 + }, + "tracked03": { + "buildPoints": 125, + "buildPower": 275, + "designable": 1, + "hitpointPctOfBody": 800, + "id": "tracked03", + "model": "prltrk1.pie", + "name": "Tracks III", + "speed": 125, + "spinAngle": 45, + "type": "Tracked", + "weight": 550 + }, + "wheeled01": { + "buildPoints": 50, + "buildPower": 50, + "designable": 1, + "hitpointPctOfBody": 100, + "id": "wheeled01", + "model": "prlwhl1.pie", + "name": "Wheels", + "skidDeceleration": 350, + "speed": 175, + "type": "Wheeled", + "weight": 300 + }, + "wheeled02": { + "buildPoints": 50, + "buildPower": 100, + "designable": 1, + "hitpointPctOfBody": 200, + "id": "wheeled02", + "model": "prlwhl1.pie", + "name": "Wheels II", + "skidDeceleration": 350, + "speed": 175, + "type": "Wheeled", + "weight": 250 + }, + "wheeled03": { + "buildPoints": 50, + "buildPower": 150, + "designable": 1, + "hitpointPctOfBody": 300, + "id": "wheeled03", + "model": "prlwhl1.pie", + "name": "Wheels III", + "skidDeceleration": 350, + "speed": 175, + "type": "Wheeled", + "weight": 200 + } +} diff --git a/data/mods/campaign/wz2100_camclassic/stats/research.json b/data/mods/campaign/wz2100_camclassic/stats/research.json index dd714ead317..18aaeed6707 100644 --- a/data/mods/campaign/wz2100_camclassic/stats/research.json +++ b/data/mods/campaign/wz2100_camclassic/stats/research.json @@ -1,4 +1,7 @@ { + "_config_": { + "calculationMode": "improved" + }, "ADVANCEDRESEARCH": { "iconID": "IMAGE_RES_COMPUTERTECH", "id": "ADVANCEDRESEARCH", @@ -8,6 +11,7 @@ "techCode": 1 }, "CAM2RESEARCH-UNDO": { + "excludeFromCheats": 1, "iconID": "IMAGE_RES_COMPUTERTECH", "id": "CAM2RESEARCH-UNDO", "imdName": "MICAPSUL.PIE", @@ -383,6 +387,7 @@ "techCode": 1 }, "CAM2RESEARCH-UNDO-Rockets": { + "excludeFromCheats": 1, "iconID": "IMAGE_RES_COMPUTERTECH", "id": "CAM2RESEARCH-UNDO-Rockets", "imdName": "MICAPSUL.PIE", @@ -409,6 +414,7 @@ "techCode": 1 }, "CAM3RESEARCH-UNDO": { + "excludeFromCheats": 1, "iconID": "IMAGE_RES_COMPUTERTECH", "id": "CAM3RESEARCH-UNDO", "imdName": "MICAPSUL.PIE", diff --git a/data/mods/campaign/wz2100_camclassic/stats/structure.json b/data/mods/campaign/wz2100_camclassic/stats/structure.json index ff6ddc5b411..9e05d86b503 100644 --- a/data/mods/campaign/wz2100_camclassic/stats/structure.json +++ b/data/mods/campaign/wz2100_camclassic/stats/structure.json @@ -1,4 +1,7 @@ { + "_config_": { + "baseStructDamageExpLevel": 0 + }, "A0ADemolishStructure": { "armour": 6, "breadth": 1, diff --git a/data/mods/campaign/wz2100_camclassic/stats/weapons.json b/data/mods/campaign/wz2100_camclassic/stats/weapons.json index 3055a7cbf17..fb79a668d81 100644 --- a/data/mods/campaign/wz2100_camclassic/stats/weapons.json +++ b/data/mods/campaign/wz2100_camclassic/stats/weapons.json @@ -1252,7 +1252,7 @@ "minElevation": -60, "minimumDamage": 33, "missGfx": "FXDIRTsp.PIE", - "model": "cy_gun.pie", + "model": "cy_agun.pie", "mountModel": "Cybody.pie", "movement": "DIRECT", "muzzleGfx": "FXLMgun.PIE", @@ -2289,8 +2289,6 @@ "lightWorld": 1, "longHit": 80, "longRange": 12000, - "maxElevation": 90, - "minElevation": -30, "minRange": 512, "minimumDamage": 33, "missGfx": "FXMExp.PIE", @@ -2572,7 +2570,7 @@ "minElevation": -60, "minimumDamage": 33, "missGfx": "FXDIRTsp.PIE", - "model": "cy_gun.pie", + "model": "cy_agun.pie", "mountModel": "Cybodyjp.pie", "movement": "DIRECT", "muzzleGfx": "FXLMgun2.PIE", diff --git a/data/mods/stage_modfiles.cmake b/data/mods/stage_modfiles.cmake new file mode 100644 index 00000000000..fb3a01df528 --- /dev/null +++ b/data/mods/stage_modfiles.cmake @@ -0,0 +1,63 @@ +cmake_minimum_required(VERSION 3.5...3.27) +if(${CMAKE_VERSION} VERSION_LESS 3.12) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +endif() + +# Expect the script to be called from the directory in which output should be placed (i.e. ${CMAKE_CURRENT_BINARY_DIR} from the caller) +# - CACHEFILE: the path to the autorevision.cache file generated for the build +# - PROJECT_ROOT: the path the project root (${PROJECT_SOURCE_DIR}) +# - INPUT_PATH: the full path for the input mod (i.e. the folder containing the mod files) +# - STAGING_FILES_DIRECTORY: the staging directory into which most files for this mod will be copied +# - STAGING_INFO_DIRECTORY: the staging directory into which info files (mod-info.json, mod-banner.png) will be copied + +if(NOT DEFINED CACHEFILE OR "${CACHEFILE}" STREQUAL "") + message( FATAL_ERROR "Missing required input define: CACHEFILE" ) +endif() +if(NOT DEFINED PROJECT_ROOT OR "${PROJECT_ROOT}" STREQUAL "") + message( FATAL_ERROR "Missing required input define: PROJECT_ROOT" ) +endif() +if(NOT DEFINED INPUT_PATH OR "${INPUT_PATH}" STREQUAL "") + message( FATAL_ERROR "Missing required input define: INPUT_PATH" ) +endif() +if(NOT DEFINED STAGING_FILES_DIRECTORY OR "${STAGING_FILES_DIRECTORY}" STREQUAL "") + message( FATAL_ERROR "Missing required input define: STAGING_FILES_DIRECTORY" ) +endif() +if(NOT DEFINED STAGING_INFO_DIRECTORY OR "${STAGING_INFO_DIRECTORY}" STREQUAL "") + message( FATAL_ERROR "Missing required input define: STAGING_INFO_DIRECTORY" ) +endif() + +################################# + +# Create empty staging directories +message(STATUS "STAGING_FILES_DIRECTORY=${STAGING_FILES_DIRECTORY}") +message(STATUS "STAGING_INFO_DIRECTORY=${STAGING_INFO_DIRECTORY}") + +if(EXISTS "${STAGING_FILES_DIRECTORY}") + file(REMOVE_RECURSE "${STAGING_FILES_DIRECTORY}/") +endif() +if(EXISTS "${STAGING_INFO_DIRECTORY}") + file(REMOVE_RECURSE "${STAGING_INFO_DIRECTORY}/") +endif() +file(MAKE_DIRECTORY "${STAGING_FILES_DIRECTORY}") +file(MAKE_DIRECTORY "${STAGING_INFO_DIRECTORY}") + +# Stage the mod files in STAGING_FILES_DIRECTORY (minus the mod-info.json + mod-banner.png) +file(COPY "${INPUT_PATH}/" DESTINATION "${STAGING_FILES_DIRECTORY}" + PATTERN ".git*" EXCLUDE + PATTERN ".DS_Store" EXCLUDE + PATTERN "mod-info.json" EXCLUDE + PATTERN "mod-banner.png" EXCLUDE +) + +# Stage the mod-banner.png in STAGING_INFO_DIRECTORY +file(GLOB _info_files LIST_DIRECTORIES false + "${INPUT_PATH}/mod-banner.png" +) +if (_info_files) + file(COPY ${_info_files} DESTINATION "${STAGING_INFO_DIRECTORY}") +endif() + +# Autorevision the mod-info.json (updates maxVersionTested) and place in the STAGING_INFO_DIRECTORY +execute_process(COMMAND ${CMAKE_COMMAND} "-DCACHEFILE=${CACHEFILE}" "-DPROJECT_ROOT=${PROJECT_ROOT}" "-DTEMPLATE_FILE=${INPUT_PATH}/mod-info.json" "-DOUTPUT_FILE=${STAGING_INFO_DIRECTORY}/mod-info.json" -P "${PROJECT_ROOT}/data/mods/autorevision_modinfo.cmake" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" +) diff --git a/data/mp/components/weapons/sc_rail2.pie b/data/mp/components/weapons/sc_rail2.pie index ec46d7e7f90..6dc0dfaf0e3 100644 --- a/data/mp/components/weapons/sc_rail2.pie +++ b/data/mp/components/weapons/sc_rail2.pie @@ -3,55 +3,67 @@ TYPE 10200 TEXTURE 0 page-17-droid-weapons.png 0 0 LEVELS 1 LEVEL 1 -POINTS 18 +POINTS 24 1 12 -12 - 1 17 13 1 -8 13 1 -8 -20 + 1 17 13 -9 4 -2 -9 8 26 -9 -7 4 - -9 -7 -6 1 -8 4 + -9 -7 -6 -9 -7 26 -4 -17 4 -4 -17 13 - -4 -16 -49 - -8 -8 -49 - -8 -8 4 -4 -16 4 - 0 -9 -49 + -8 -8 4 + -8 -8 -49 + -4 -16 -49 0 -9 4 -POLYGONS 30 - 200 3 0 1 2 0.0546875 0.074219 0.0625 0 0 0 - 200 3 2 3 0 0 0 0.0078125 0.074219 0.0546875 0.074219 - 200 3 4 5 1 0 0.105469 0.0976562 0.101562 0.0703125 0.078125 - 200 3 4 1 0 0 0.105469 0.0703125 0.078125 0.015625 0.078125 - 200 3 6 7 3 0.0976562 0.101562 0 0.105469 0.015625 0.078125 - 200 3 6 3 8 0.0976562 0.101562 0.015625 0.078125 0.0703125 0.078125 - 200 3 9 5 4 0.046875 0.074219 0.015625 0.074219 0.0195312 0 - 200 3 9 4 7 0.046875 0.074219 0.0195312 0 0.0429688 0 - 200 3 7 4 0 0.0195312 0.511719 0.0429688 0.511719 0.0546875 0.546875 - 200 3 7 0 3 0.0195312 0.511719 0.0546875 0.546875 0.0078125 0.546875 - 200 3 5 9 2 0.015625 0.160156 0.0546875 0.160156 0.0703125 0.183594 - 200 3 5 2 1 0.015625 0.160156 0.0703125 0.183594 0 0.183594 - 200 3 10 8 2 0 0.078125 0.0859375 0.078125 0.0859375 0.089844 - 200 3 10 2 11 0 0.078125 0.0859375 0.089844 0 0.089844 - 200 3 6 10 11 0 0 0.0625 0 0.0625 0.03125 - 200 3 6 11 9 0 0 0.0625 0.03125 0.00390625 0.074219 - 200 3 10 6 8 0.0625 0.523438 0 0.546875 0.0078125 0.5 - 200 3 9 11 2 0.0664062 0.183594 0 0.167969 0.0625 0.148438 - 200 3 12 13 14 0.617188 0.175781 0.59375 0.175781 0.59375 0.277344 - 200 3 12 14 15 0.617188 0.175781 0.59375 0.277344 0.617188 0.277344 - 200 3 15 14 13 0.617188 0.277344 0.59375 0.277344 0.59375 0.175781 - 200 3 15 13 12 0.617188 0.277344 0.59375 0.175781 0.617188 0.175781 - 200 3 13 16 17 0.617188 0.175781 0.59375 0.175781 0.59375 0.277344 - 200 3 13 17 14 0.617188 0.175781 0.59375 0.277344 0.617188 0.277344 - 200 3 14 17 16 0.617188 0.277344 0.59375 0.277344 0.59375 0.175781 - 200 3 14 16 13 0.617188 0.277344 0.59375 0.175781 0.617188 0.175781 - 200 3 16 12 15 0.617188 0.175781 0.59375 0.175781 0.59375 0.277344 - 200 3 16 15 17 0.617188 0.175781 0.59375 0.277344 0.617188 0.277344 - 200 3 17 15 12 0.617188 0.277344 0.59375 0.277344 0.59375 0.175781 - 200 3 17 12 16 0.617188 0.277344 0.59375 0.175781 0.617188 0.175781 + 0 -9 -49 + -4 -13.8937 -49 + -6.315 -9.26375 -49 + -1.685 -9.8425 -49 + -6.315 -9.26375 4 + -1.685 -9.8425 4 + -4 -13.8937 4 +POLYGONS 36 + 200 3 0 1 2 0.0471818 0.0551831 0.00475056 0.00214398 0.00475056 0.0721555 + 200 3 1 0 3 0.00475056 0.00214398 0.0471818 0.0551831 0.0577896 0.00214398 + 200 3 4 5 3 0.0294112 0.107556 0.08017 0.107585 0.0593714 0.0761842 + 200 3 4 3 0 0.0294112 0.107556 0.0593714 0.0761842 0.0136877 0.0783721 + 200 3 6 2 7 0.0814496 0.0762299 0.00620412 0.107582 0.0814496 0.107582 + 200 3 2 6 8 0.00620412 0.107582 0.0814496 0.0762299 0.0500973 0.0762299 + 200 3 9 4 8 0.0434774 0.0719591 0.0194725 0.0108556 0.0434774 0.00212646 + 200 3 4 9 5 0.0194725 0.0108556 0.0434774 0.0719591 0.0107434 0.0719591 + 200 3 8 0 2 0.0205849 0.513177 0.0562233 0.545247 0.00648821 0.545345 + 200 3 0 8 4 0.0562233 0.545247 0.0205849 0.513177 0.0475977 0.514069 + 200 3 5 1 3 0.0167061 0.150625 0.0683665 0.185825 0.00194602 0.185825 + 200 3 1 5 9 0.0683665 0.185825 0.0167061 0.150625 0.0536064 0.150625 + 200 3 10 1 11 0.00538631 0.089844 0.0913238 0.078125 0.00538631 0.078125 + 200 3 1 10 7 0.0913238 0.078125 0.00538631 0.089844 0.0913238 0.089844 + 200 3 6 11 9 0.00475056 0.00214392 0.0600112 0.0316308 0.00472341 0.0721754 + 200 3 11 6 10 0.0600112 0.0316308 0.00475056 0.00214392 0.0600112 0.00214392 + 200 3 10 6 7 0.0625 0.523438 0 0.546875 0.0078125 0.5 + 200 3 9 11 1 0.0617432 0.150669 0.00858395 0.166294 0.0586162 0.185825 + 200 3 12 13 14 0.615323 0.275611 0.595615 0.275611 0.595615 0.177514 + 200 3 12 14 15 0.615323 0.275611 0.595615 0.177514 0.615323 0.177514 + 200 3 13 16 17 0.615323 0.275611 0.595615 0.275611 0.595615 0.177514 + 200 3 13 17 14 0.615323 0.275611 0.595615 0.177514 0.615323 0.177514 + 200 3 16 12 15 0.615323 0.275611 0.595615 0.275611 0.595615 0.177514 + 200 3 16 15 17 0.615323 0.275611 0.595615 0.177514 0.615323 0.177514 + 200 3 14 18 15 0.595679 0.176997 0.611135 0.174935 0.615259 0.176997 + 200 3 18 14 19 0.611135 0.174935 0.595679 0.176997 0.599803 0.174935 + 200 3 17 19 14 0.595996 0.177472 0.611135 0.174935 0.615577 0.177472 + 200 3 19 17 20 0.611135 0.174935 0.595996 0.177472 0.599803 0.174935 + 200 3 15 20 17 0.595361 0.177472 0.611135 0.174935 0.614942 0.177472 + 200 3 20 15 18 0.611135 0.174935 0.595361 0.177472 0.599803 0.174935 + 200 3 20 21 19 0.595615 0.177514 0.615323 0.275611 0.615323 0.177514 + 200 3 21 20 22 0.615323 0.275611 0.595615 0.177514 0.595615 0.275611 + 200 3 19 23 18 0.595615 0.177514 0.615323 0.275611 0.615323 0.177514 + 200 3 23 19 21 0.615323 0.275611 0.595615 0.177514 0.595615 0.275611 + 200 3 18 22 20 0.595615 0.177514 0.615323 0.275611 0.615323 0.177514 + 200 3 22 18 23 0.615323 0.275611 0.595615 0.177514 0.595615 0.275611 CONNECTORS 1 -4 0 -12 diff --git a/data/mp/components/weapons/sc_tk.pie b/data/mp/components/weapons/sc_tk.pie index 4ef729dcf07..6f40ca71d78 100644 --- a/data/mp/components/weapons/sc_tk.pie +++ b/data/mp/components/weapons/sc_tk.pie @@ -3,33 +3,103 @@ TYPE 200 TEXTURE 0 page-17-droid-weapons.png 0 0 LEVELS 1 LEVEL 1 -POINTS 12 - -6 5 -0 - 2 -8 8 - 4 1 -0 - 2 -8 -7 +POINTS 44 -18 3 -21 + -5.68 2.52 -19.56 + -13.32 -3.48 -19.56 -10 9 -21 + -5.68 2.52 19.44 + -18 3 18 + -13.32 -3.48 19.44 + -10 9 18 + -9.4928 -8.7792 -18.3824 2 -9 -17 -5 -15 -17 + -2.1472 -2.7792 -18.3824 2 -9 22 + -9.4928 -8.7792 20.6176 -5 -15 22 - -18 3 18 - -10 9 18 -POLYGONS 14 - 200 3 0 1 2 0.984375 0.972656 0.996094 1 1 0.972656 - 200 3 2 3 0 1 0.972656 0.996094 1 0.984375 0.972656 - 200 3 4 5 6 0.984375 0.417969 1 0.417969 1 0.449219 - 200 3 4 6 7 0.984375 0.417969 1 0.449219 0.984375 0.449219 - 200 3 6 8 9 1 0.457031 1 0.542969 0.984375 0.542969 - 200 3 6 9 7 1 0.457031 0.984375 0.542969 0.984375 0.457031 - 200 3 10 11 5 1 0.542969 0.984375 0.542969 0.984375 0.457031 - 200 3 10 5 4 1 0.542969 0.984375 0.457031 1 0.457031 - 200 3 5 11 8 0.769531 0.644531 0.855469 0.644531 0.855469 0.6875 - 200 3 5 8 6 0.769531 0.644531 0.855469 0.6875 0.769531 0.6875 - 200 3 11 10 9 0.984375 0.414062 1 0.414062 1 0.453125 - 200 3 11 9 8 0.984375 0.414062 1 0.453125 0.984375 0.453125 - 200 3 10 4 7 0.769531 0.644531 0.855469 0.644531 0.855469 0.6875 - 200 3 10 7 9 0.769531 0.644531 0.855469 0.6875 0.769531 0.6875 + -2.1472 -2.7792 20.6176 + -7.14858 4.72089 2.117e-09 + 1.53662 -8.30567 8 + 4 1 -0 + 1.53662 -8.30567 -7 + -2.1472 -2.7792 -7.2674 + -5.68 2.52 -5.17965 + -2.1472 -2.7792 -4.00205 + -5.68 2.52 -8.445 + -2.1472 -2.7792 11.1367 + -5.68 2.52 6.69375 + -5.68 2.52 9.9591 + -2.1472 -2.7792 7.87135 + -9.4928 -8.7792 11.1367 + -13.32 -3.48 6.69375 + -9.4928 -8.7792 7.87135 + -13.32 -3.48 9.9591 + -9.4928 -8.7792 -7.2674 + -13.32 -3.48 -5.17965 + -13.32 -3.48 -8.445 + -9.4928 -8.7792 -4.00205 + -11.9932 -5.31706 7.10199 + -10.7175 -7.08346 -4.37889 + -10.7175 -7.08346 7.49452 + -11.9932 -5.31706 -4.77142 + -3.2777 -1.08346 -4.37888 + -3.2777 -1.08346 7.49452 + -4.4553 0.682944 7.10199 + -4.4553 0.682944 -4.77142 +POLYGONS 52 + 200 3 0 1 2 0.986362 0.442717 0.998142 0.455178 0.986362 0.455178 + 200 3 1 0 3 0.998142 0.455178 0.986362 0.442717 0.998142 0.442717 + 200 3 4 5 6 0.986362 0.455165 0.998142 0.442712 0.998142 0.455165 + 200 3 5 4 7 0.998142 0.442712 0.986362 0.455165 0.986362 0.442712 + 200 3 8 9 10 0.986362 0.443335 0.998142 0.455057 0.986362 0.455057 + 200 3 9 8 11 0.998142 0.455057 0.986362 0.443335 0.998142 0.443335 + 200 3 12 13 14 0.986362 0.455031 0.998142 0.443317 0.998142 0.455031 + 200 3 13 12 15 0.998142 0.443317 0.986362 0.455031 0.986362 0.443317 + 200 3 12 10 9 0.998267 0.545255 0.986294 0.454959 0.998267 0.454959 + 200 3 10 12 14 0.986294 0.454959 0.998267 0.545255 0.986294 0.545255 + 200 3 4 3 7 0.767088 0.658402 0.857667 0.645895 0.767088 0.645895 + 200 3 3 4 1 0.857667 0.645895 0.767088 0.658402 0.857667 0.658402 + 200 3 12 11 15 0.767088 0.68553 0.857667 0.67368 0.767088 0.67368 + 200 3 11 12 9 0.857667 0.67368 0.767088 0.68553 0.857667 0.68553 + 200 3 3 5 7 0.986294 0.454959 0.998267 0.545255 0.986294 0.545255 + 200 3 5 3 0 0.998267 0.545255 0.986294 0.454959 0.998267 0.454959 + 200 3 2 5 0 0.857667 0.658402 0.767088 0.645895 0.857667 0.645895 + 200 3 5 2 6 0.767088 0.645895 0.857667 0.658402 0.767088 0.658402 + 200 3 10 13 8 0.857667 0.68553 0.767088 0.67368 0.857667 0.67368 + 200 3 13 10 14 0.767088 0.67368 0.857667 0.68553 0.767088 0.68553 + 200 3 8 15 11 0.986428 0.454972 0.998416 0.545317 0.998416 0.454972 + 200 3 15 8 13 0.998416 0.545317 0.986428 0.454972 0.986428 0.545317 + 200 3 6 1 4 0.998445 0.545336 0.986417 0.454991 0.986417 0.545336 + 200 3 1 6 2 0.986417 0.454991 0.998445 0.545336 0.998445 0.454991 + 200 3 16 17 18 0.986243 0.974618 0.996094 0.998342 0.9983 0.974618 + 200 3 18 19 16 0.9983 0.974618 0.996094 0.998342 0.986243 0.974618 + 200 3 18 17 19 0.920072 0.459282 0.919354 0.439389 0.939748 0.459782 + 200 3 17 16 19 0.975231 0.428568 0.975072 0.408355 0.954617 0.407955 + 200 3 20 21 22 0.830548 0.674222 0.825698 0.650657 0.825698 0.674222 + 200 3 21 20 23 0.825698 0.650657 0.830548 0.674222 0.830548 0.650668 + 200 3 24 25 26 0.790351 0.670674 0.795265 0.660318 0.790338 0.660318 + 200 3 25 24 27 0.795265 0.660318 0.790351 0.670674 0.795278 0.670674 + 200 3 28 29 30 0.7903 0.671819 0.795371 0.660305 0.795371 0.671819 + 200 3 29 28 31 0.795371 0.660305 0.7903 0.671819 0.7903 0.660331 + 200 3 32 33 34 0.830548 0.674222 0.825698 0.650668 0.830548 0.650668 + 200 3 33 32 35 0.825698 0.650668 0.830548 0.674222 0.825698 0.674222 + 200 3 20 34 23 0.795649 0.649879 0.79044 0.678215 0.790443 0.649953 + 200 3 34 20 32 0.79044 0.678215 0.795649 0.649879 0.795646 0.678141 + 200 3 31 24 26 0.795649 0.649879 0.79044 0.678215 0.795646 0.678141 + 200 3 24 31 28 0.79044 0.678215 0.795649 0.649879 0.790443 0.649953 + 200 3 29 27 30 0.79044 0.678215 0.795649 0.649879 0.795646 0.678141 + 200 3 27 29 25 0.795649 0.649879 0.79044 0.678215 0.790443 0.649953 + 200 3 33 22 21 0.795649 0.649879 0.79044 0.678215 0.795646 0.678141 + 200 3 22 33 35 0.79044 0.678215 0.795649 0.649879 0.790443 0.649953 + 200 3 36 37 38 0.795255 0.665081 0.826093 0.667089 0.795255 0.667089 + 200 3 37 36 39 0.826093 0.667089 0.795255 0.665081 0.826093 0.665081 + 200 3 38 40 41 0.831022 0.651714 0.82525 0.681002 0.82525 0.651714 + 200 3 40 38 37 0.82525 0.681002 0.831022 0.651714 0.831022 0.681002 + 200 3 39 42 43 0.825266 0.681029 0.83101 0.65174 0.83101 0.681029 + 200 3 42 39 36 0.83101 0.65174 0.825266 0.681029 0.825266 0.65174 + 200 3 42 40 43 0.795255 0.665081 0.826093 0.667089 0.826093 0.665081 + 200 3 40 42 41 0.826093 0.667089 0.795255 0.665081 0.795255 0.667089 CONNECTORS 1 -7 -23 -3 diff --git a/data/mp/multiplay/maps/6c-Entropy/game.js b/data/mp/multiplay/maps/6c-Entropy/game.js index 37644837630..1211ccc17b9 100644 --- a/data/mp/multiplay/maps/6c-Entropy/game.js +++ b/data/mp/multiplay/maps/6c-Entropy/game.js @@ -169,7 +169,7 @@ function genRegions(fields) { var regions = []; for (var i = 0; i < fields.count; ++i) { var textureType = textureTypes[gameRand(textureTypes.length)]; - var height = textureType.isWater? 0 : gameRand(500) + 12; + var height = textureType.isWater? 0 : gameRand(499) + 12; regions.push({texture: textureType, height: height, avg: fields.avg[i], reachable: false}); } @@ -522,7 +522,7 @@ function placeStuff(regions, startPos) { features.push({name: sample(snow? snowFeatureTypes : featureTypes), position: pos, direction: gameRand(0x10000)}); } } - + // Add additional oils for(var i=0;i<60*(richness-3);i++){ var oilPos = placeNear(gameRand(mapWidth), gameRand(mapHeight), 1, 1, true, 20); diff --git a/data/mp/multiplay/script/functions/camTechEnabler.js b/data/mp/multiplay/script/functions/camTechEnabler.js index 918232f87de..c39767b1298 100644 --- a/data/mp/multiplay/script/functions/camTechEnabler.js +++ b/data/mp/multiplay/script/functions/camTechEnabler.js @@ -27,27 +27,27 @@ var allRes = { "R-Vehicle-Engine01": 172, "R-Vehicle-Prop-Halftracks": 172, "R-Wpn-Flamer-Damage01": 172, + "R-Sys-Sensor-Tower02": 172, "R-Wpn-Cannon1Mk1": 176, "R-Defense-Pillbox01": 177, - "R-Defense-Pillbox05": 187, - "R-Defense-HardcreteGate": 198, + "R-Defense-Pillbox05": 177, + "R-Defense-HardcreteGate": 177, "R-Struc-Factory-Cyborg": 215, "R-Defense-WallUpgrade01": 215, "R-Struc-CommandRelay": 215, - "R-Sys-Sensor-Tower02": 215, "R-Wpn-MG2Mk1": 219, - "R-Defense-Pillbox04": 230, - "R-Defense-WallTower02": 230, + "R-Defense-Pillbox04": 219, + "R-Defense-WallTower02": 219, "R-Struc-PowerModuleMk1": 258, "R-Wpn-Rocket05-MiniPod": 258, "R-Wpn-Flamer-Damage02": 258, "R-Comp-CommandTurret01": 258, "R-Wpn-Cannon-Damage01": 262, "R-Struc-Research-Module": 301, + "R-Defense-Tower06": 304, "R-Wpn-Flamer-ROF01": 315, "R-Vehicle-Engine02": 329, "R-Wpn-Rocket-Damage01": 329, - "R-Defense-Tower06": 332, "R-Struc-Materials01": 358, "R-Struc-Research-Upgrade01": 358, "R-Defense-WallUpgrade02": 360, @@ -77,8 +77,8 @@ var allRes = { "R-Cyborg-Metals02": 512, "R-Wpn-Cannon-Accuracy01": 512, "R-Wpn-Cannon-Damage03": 512, - "R-Defense-MRL": 528, - "R-Defense-WallTower03": 540, + "R-Defense-MRL": 535, + "R-Defense-WallTower03": 537, "R-Wpn-Rocket-Accuracy01": 547, "R-Wpn-Rocket-Damage03": 547, "R-Struc-RprFac-Upgrade01": 550, @@ -96,16 +96,16 @@ var allRes = { "R-Vehicle-Prop-Tracks": 636, "R-Wpn-Rocket01-LtAT": 650, "R-Wpn-Cannon4AMk1": 667, - "R-Defense-Pillbox06": 671, "R-Defense-WallTower06": 671, + "R-Defense-Pillbox06": 676, "R-Wpn-Rocket-ROF02": 686, "R-Struc-VTOLFactory": 686, "R-Wpn-Cannon-Damage04": 687, + "R-Defense-Emplacement-HPVcannon": 692, + "R-Defense-WallTower-HPVcannon": 692, "R-Struc-Research-Upgrade04": 701, - "R-Defense-Emplacement-HPVcannon": 711, "R-Vehicle-Metals03": 717, "R-Cyborg-Armor-Heat01": 718, - "R-Defense-WallTower-HPVcannon": 730, "R-Wpn-MG-ROF02": 732, "R-Wpn-Mortar-Acc02": 732, "R-Vehicle-Body12": 732, @@ -120,56 +120,56 @@ var allRes = { "R-Wpn-Cannon-ROF01": 786, "R-Wpn-MG-Damage05": 790, "R-Sys-RadarDetector01": 794, + "R-Defense-RotMor": 800, + "R-Defense-HvyMor": 800, "R-Wpn-Sunburst": 803, - "R-Defense-RotMor": 805, - "R-Defense-HvyMor": 805, "R-Wpn-Flame2": 805, "R-Struc-Factory-Upgrade04": 808, "R-Wpn-AAGun01": 818, "R-Sys-Engineering02": 818, "R-Wpn-Cannon-Accuracy02": 818, "R-Wpn-Mortar-ROF01": 819, + "R-Defense-Sunburst": 828, + "R-Defense-HvyFlamer": 830, "R-Wpn-AAGun03": 833, "R-Vehicle-Armor-Heat01": 834, "R-Vehicle-Prop-VTOL": 835, "R-Cyborg-Armor-Heat02": 835, "R-Cyborg-Metals04": 838, + "R-Defense-AASite-QuadBof": 842, + "R-Defense-WallTower-DoubleAAgun": 842, + "R-Defense-AASite-QuadMg1": 844, "R-Struc-Power-Upgrade01": 847, "R-Struc-Research-Upgrade05": 847, "R-Wpn-Flamer-Damage05": 853, - "R-Defense-HvyFlamer": 854, - "R-Defense-Sunburst": 860, "R-Sys-CBSensor-Turret01": 861, "R-Wpn-Cannon-Damage05": 863, "R-Vehicle-Engine04": 869, "R-SuperTransport": 871, - "R-Defense-AASite-QuadBof": 875, "R-Wpn-Mortar-Acc03": 875, "R-Wpn-MG4": 875, + "R-Sys-CBSensor-Tower01": 885, "R-Wpn-Rocket-Accuracy02": 886, - "R-Defense-AASite-QuadMg1": 887, + "R-Defense-RotMG": 886, + "R-Defense-Wall-RotMg": 886, "R-Vehicle-Metals04": 896, "R-Wpn-Cannon5": 898, "R-Wpn-Rocket-Damage05": 912, "R-Wpn-Rocket-ROF03": 914, - "R-Defense-RotMG": 914, "R-Wpn-Mortar-Incendiary": 914, "R-Struc-VTOLPad": 915, - "R-Defense-WallTower-DoubleAAgun": 926, + "R-Defense-Wall-VulcanCan": 922, "R-Cyborg-Hvywpn-Mcannon": 926, "R-Sys-Sensor-Upgrade02": 926, - "R-Sys-CBSensor-Tower01": 939, "R-Wpn-Flamer-ROF02": 940, "R-Defense-MortarPit-Incendiary": 941, "R-Struc-RprFac-Upgrade04": 943, "R-Wpn-Cannon-ROF02": 943, - "R-Defense-Wall-VulcanCan": 950, "R-Defense-WallUpgrade04": 952, "R-Wpn-Mortar-ROF02": 953, "R-Wpn-Bomb01": 956, "R-Wpn-MG-Damage06": 966, "R-Cyborg-Armor-Heat03": 967, - "R-Defense-Wall-RotMg": 978, "R-Wpn-Mortar-Damage04": 984, "R-Struc-Power-Upgrade01b": 984, "R-Vehicle-Armor-Heat02": 988, @@ -194,6 +194,7 @@ var allRes = { "R-Wpn-Mortar-ROF03": 1084, "R-Wpn-Flamer-Damage06": 1090, "R-Vehicle-Metals05": 1097, + "R-Sys-VTOLStrike-Tower01": 1100, "R-Wpn-Bomb-Damage01": 1104, "R-Wpn-Bomb03": 1104, "R-Wpn-Flamer-ROF03": 1105, @@ -211,13 +212,12 @@ var allRes = { "R-Wpn-MG5": 1163, "R-Vehicle-Armor-Heat03": 1168, "R-Wpn-Mortar-Damage05": 1170, + "R-Defense-Cannon6": 1184, + "R-Defense-WallTower-TwinAGun": 1187, "R-Cyborg-Metals06": 1194, - "R-Sys-VTOLStrike-Tower01": 1208, - "R-Defense-WallTower-TwinAGun": 1210, "R-Wpn-HowitzerMk1": 1211, "R-Cyborg-Hvywpn-TK": 1214, "R-Struc-Research-Upgrade07": 1218, - "R-Defense-Cannon6": 1223, "R-Wpn-Rocket-Damage07": 1228, "R-Sys-VTOLCBS-Turret01": 1230, "R-Wpn-Cannon-Damage07": 1230, @@ -225,9 +225,13 @@ var allRes = { "R-Wpn-Mortar-ROF04": 1236, "R-Wpn-Bomb02": 1243, "R-Wpn-PlasmaCannon": 1254, + "R-Defense-AASite-QuadRotMg": 1256, + "R-Defense-WallTower-QuadRotAA": 1256, "R-Comp-CommandTurret02": 1263, + "R-Sys-VTOLCBS-Tower01": 1263, "R-Vehicle-Engine06": 1271, "R-Defense-Super-Cannon": 1275, + "R-Defense-PlasmaCannon": 1277, "R-Wpn-Bomb04": 1278, "R-Wpn-Bomb-Damage02": 1280, "R-Struc-VTOLPad-Upgrade03": 1288, @@ -235,57 +239,55 @@ var allRes = { "R-Vehicle-Body09": 1301, "R-Defense-WallUpgrade06": 1304, "R-Vehicle-Metals06": 1315, - "R-Defense-AASite-QuadRotMg": 1318, "R-Wpn-Howitzer-Damage01": 1319, + "R-Wpn-MG-Damage08": 1326, "R-Cyborg-Armor-Heat04": 1340, "R-Wpn-Howitzer-Accuracy01": 1340, "R-Wpn-Mortar-Damage06": 1342, - "R-Wpn-MG-Damage08": 1344, "R-Sys-Sensor-Upgrade03": 1347, "R-Wpn-Plasmite-Flamer": 1347, - "R-Sys-VTOLCBS-Tower01": 1361, + "R-Defense-PlasmiteFlamer": 1370, "R-Struc-Power-Upgrade02": 1379, - "R-Defense-PlasmaCannon": 1382, - "R-Defense-PlasmiteFlamer": 1383, "R-Wpn-Howitzer-Incendiary": 1390, "R-Wpn-Howitzer03-Rot": 1390, "R-Wpn-AAGun02": 1397, "R-Wpn-Rocket-Damage08": 1400, "R-Cyborg-Metals07": 1404, "R-Wpn-Cannon-ROF04": 1409, + "R-Defense-AASite-QuadBof02": 1420, + "R-Defense-WallTower-DoubleAAgun02": 1420, "R-Wpn-Cannon-Damage08": 1423, "R-Struc-Research-Upgrade08": 1432, - "R-Defense-WallTower-QuadRotAA": 1446, "R-Wpn-Howitzer-Damage02": 1460, "R-Struc-VTOLPad-Upgrade04": 1464, "R-Wpn-Laser01": 1472, "R-Defense-RotHow": 1476, "R-Wpn-Bomb-Damage03": 1476, - "R-Defense-AASite-QuadBof02": 1479, "R-Defense-Howitzer-Incendiary": 1479, "R-Wpn-RailGun01": 1483, "R-Sys-Sensor-WS": 1485, + "R-Defense-PrisLas": 1495, "R-Wpn-Howitzer-Accuracy02": 1499, + "R-Wpn-MG-Damage09": 1502, "R-Vehicle-Armor-Heat04": 1505, + "R-Defense-GuardTower-Rail1": 1506, "R-Wpn-Missile2A-T": 1508, "R-Cyborg-Armor-Heat05": 1511, - "R-Defense-WallTower-DoubleAAgun02": 1518, - "R-Defense-GuardTower-Rail1": 1542, + "R-Sys-Sensor-WSTower": 1514, + "R-Defense-GuardTower-ATMiss": 1531, + "R-Defense-WallTower-A-Tmiss": 1531, "R-Vehicle-Metals07": 1548, - "R-Sys-SpyTurret": 1564, - "R-Defense-GuardTower-ATMiss": 1567, - "R-Defense-WallTower-A-Tmiss": 1567, "R-Wpn-Flamer-Damage07": 1570, + "R-Sys-SpyTurret": 1572, "R-Wpn-Rocket-Damage09": 1580, "R-Struc-Power-Upgrade03": 1580, "R-Sys-Engineering03": 1590, "R-Cyborg-Hvywpn-A-T": 1590, - "R-Defense-PrisLas": 1590, + "R-Sys-SpyTower": 1595, "R-Defense-Super-Rocket": 1600, "R-Wpn-Bomb06": 1608, "R-Wpn-Cannon-ROF05": 1608, "R-Wpn-Cannon-Damage09": 1621, - "R-Sys-SpyTower": 1623, "R-Wpn-Howitzer-Damage03": 1624, "R-Cyborg-Metals08": 1629, "R-Struc-VTOLPad-Upgrade05": 1661, @@ -295,52 +297,53 @@ var allRes = { "R-Wpn-EMPCannon": 1668, "R-Wpn-Bomb05": 1680, "R-Wpn-Howitzer-Accuracy03": 1681, + "R-Defense-EMPCannon": 1691, + "R-Wpn-MG-Damage10": 1693, "R-Wpn-HvyHowitzer": 1693, "R-Wpn-Energy-Accuracy01": 1705, + "R-Wpn-Energy-Damage01": 1705, "R-Cyborg-Armor-Heat06": 1705, "R-Vehicle-Armor-Heat05": 1715, "R-Wpn-Rail-Damage01": 1715, - "R-Defense-EMPCannon": 1723, "R-Wpn-Missile-LtSAM": 1738, "R-Wpn-Missile-ROF01": 1738, - "R-Sys-Sensor-WSTower": 1747, "R-Struc-RprFac-Upgrade06": 1747, "R-Vehicle-Engine07": 1754, "R-Struc-Power-Upgrade03a": 1768, + "R-Defense-SamSite1": 1770, + "R-Defense-WallTower-SamSite": 1770, "R-Defense-WallUpgrade07": 1778, "R-Defense-HvyHowitzer": 1785, "R-Vehicle-Metals08": 1793, "R-Wpn-Flamer-Damage08": 1808, "R-Wpn-Cannon-ROF06": 1824, "R-Struc-Factory-Upgrade07": 1826, - "R-Defense-SamSite1": 1856, "R-Cyborg-Metals09": 1868, "R-Struc-VTOLPad-Upgrade06": 1873, "R-Wpn-MortarEMP": 1881, + "R-Defense-EMPMortar": 1904, "R-Wpn-Howitzer-Damage04": 1912, "R-Wpn-Howitzer-ROF01": 1912, "R-Cyborg-Armor-Heat07": 1917, "R-Wpn-Laser02": 1923, - "R-Wpn-Energy-Damage01": 1923, + "R-Wpn-Energy-ROF01": 1923, "R-Wpn-Rail-Accuracy01": 1934, "R-Sys-Resistance-Circuits": 1935, - "R-Defense-EMPMortar": 1935, "R-Vehicle-Armor-Heat06": 1942, + "R-Defense-WallTower-PulseLas": 1946, + "R-Defense-PulseLas": 1946, "R-Wpn-MdArtMissile": 1956, "R-Wpn-Missile-Damage01": 1956, "R-Struc-Materials03": 1960, + "R-Defense-MdArtMissile": 1982, "R-Defense-WallUpgrade08": 1990, "R-Cyborg-Hvywpn-PulseLsr": 2009, "R-Vehicle-Body07": 2012, - "R-Defense-WallTower-SamSite": 2020, "R-Sys-Sensor-UpLink": 2032, - "R-Defense-WallTower-PulseLas": 2032, - "R-Defense-PulseLas": 2043, "R-Vehicle-Metals09": 2060, "R-Wpn-Flamer-Damage09": 2069, - "R-Defense-MdArtMissile": 2069, "R-Struc-Factory-Upgrade09": 2117, - "R-Wpn-Energy-ROF01": 2141, + "R-Wpn-Energy-Damage02": 2141, "R-Wpn-Rail-Damage02": 2152, "R-Wpn-Rail-ROF01": 2152, "R-Cyborg-Armor-Heat08": 2160, @@ -352,47 +355,46 @@ var allRes = { "R-Wpn-HeavyPlasmaLauncher": 2244, "R-Wpn-Howitzer-ROF02": 2348, "R-Wpn-Howitzer-Damage05": 2354, - "R-Wpn-Energy-Damage02": 2360, + "R-Wpn-Energy-ROF02": 2360, + "R-Wpn-AALaser": 2360, + "R-Defense-AA-Laser": 2383, "R-Wpn-Missile-Damage02": 2393, "R-Cyborg-Armor-Heat09": 2433, "R-Wpn-HvyLaser": 2469, "R-Vehicle-Armor-Heat08": 2488, + "R-Defense-HeavyLas": 2492, "R-Vehicle-Body10": 2497, "R-Defense-WallUpgrade10": 2506, - "R-Wpn-AALaser": 2578, - "R-Wpn-Energy-ROF02": 2578, "R-Wpn-Rail-ROF02": 2589, "R-Wpn-RailGun02": 2596, "R-Wpn-Missile-Accuracy02": 2611, - "R-Defense-HeavyLas": 2624, - "R-Defense-Rail2": 2672, + "R-Defense-Rail2": 2619, + "R-Defense-WallTower-Rail2": 2619, "R-Cyborg-Hvywpn-RailGunner": 2680, "R-Defense-HeavyPlasmaLauncher": 2681, - "R-Defense-WallTower-Rail2": 2706, "R-Vehicle-Engine09": 2755, + "R-Wpn-Energy-Damage03": 2796, "R-Vehicle-Armor-Heat09": 2806, - "R-Defense-AA-Laser": 2807, "R-Wpn-Missile-ROF03": 2829, "R-Wpn-HvArtMissile": 2830, "R-Defense-WallUpgrade11": 2839, "R-Wpn-LasSat": 2890, "R-Wpn-Howitzer-ROF03": 3003, "R-Wpn-Howitzer-Damage06": 3009, - "R-Wpn-Energy-Damage03": 3014, + "R-Wpn-Energy-ROF03": 3014, "R-Wpn-Missile-Damage03": 3048, "R-Vehicle-Body13": 3191, "R-Defense-WallUpgrade12": 3203, - "R-Wpn-Energy-ROF03": 3233, "R-Wpn-Rail-ROF03": 3243, "R-Wpn-Rail-Damage03": 3251, "R-Wpn-RailGun03": 3251, "R-Defense-HvyArtMissile": 3266, - "R-Defense-Rail3": 3327, - "R-Defense-WallTower-Rail3": 3360, + "R-Defense-Rail3": 3274, + "R-Defense-WallTower-Rail3": 3274, "R-Wpn-Missile-HvSAM": 3484, + "R-Defense-SamSite2": 3507, + "R-Defense-WallTower-SamHvy": 3507, "R-Defense-Super-Missile": 3597, - "R-Defense-SamSite2": 3703, - "R-Defense-WallTower-SamHvy": 3757, "R-Vehicle-Body14": 3846, "R-Wpn-Howitzer-ROF04": 3861, "R-Defense-MassDriver": 4009 diff --git a/data/mp/multiplay/script/rules/endconditions.js b/data/mp/multiplay/script/rules/endconditions.js index 3851057240d..679e83dee43 100644 --- a/data/mp/multiplay/script/rules/endconditions.js +++ b/data/mp/multiplay/script/rules/endconditions.js @@ -398,10 +398,9 @@ function activityAlert() console( _("- unit building - research completion - construction of base structures (factories, power plants, laboratories, modules and oil derricks) - dealing damage") ); - if (getMissionTime() > idleTime) + if (getMissionTime() <= -1) { - setMissionTime( - (playersTeam[selectedPlayer].lastActivity + idleTime - gameTime) / 1000); + setMissionTime((playersTeam[selectedPlayer].lastActivity + idleTime - gameTime) / 1000); } } if (playersTeam[selectedPlayer].lastActivity + idleTime / 2 > gameTime) diff --git a/data/mp/multiplay/script/rules/events/gameinit.js b/data/mp/multiplay/script/rules/events/gameinit.js index cfd2205c3bd..23a6d10ba4a 100644 --- a/data/mp/multiplay/script/rules/events/gameinit.js +++ b/data/mp/multiplay/script/rules/events/gameinit.js @@ -4,7 +4,7 @@ function eventGameInit() setupGame(); //From script/rules/printsettings.js - printGameSettings(); + queue("printGameSettings", TICK_TIME); //From script/rules/oildrum.js oilDrumInit(); @@ -49,7 +49,7 @@ function eventGameInit() //Structures might have been removed so we need to update the reticule button states again //From script/rules/reticule.js - setMainReticule(); + queue("setMainReticule", TICK_TIME); if (tilesetType === "URBAN" || tilesetType === "ROCKIES") { diff --git a/data/mp/multiplay/script/rules/events/transfer.js b/data/mp/multiplay/script/rules/events/transfer.js index 399eac83ce2..ca26b1067da 100644 --- a/data/mp/multiplay/script/rules/events/transfer.js +++ b/data/mp/multiplay/script/rules/events/transfer.js @@ -21,3 +21,11 @@ function eventTransporterDisembarked(transport) reticuleUpdate(transport, TRANSFER_LIKE_EVENT); } } + +function eventTransporterLanded(transport) +{ + if (transport.player === selectedPlayer) + { + reticuleUpdate(transport, TRANSFER_LIKE_EVENT); + } +} diff --git a/data/mp/multiplay/script/rules/includes.js b/data/mp/multiplay/script/rules/includes.js index d0f84e8216e..b12e78c70fe 100644 --- a/data/mp/multiplay/script/rules/includes.js +++ b/data/mp/multiplay/script/rules/includes.js @@ -7,7 +7,7 @@ include("multiplay/script/rules/variables.js"); // This file contain functions which contains the logic of technology research equated to time include("multiplay/script/functions/camTechEnabler.js"); -// Spectial effects of weather. +// Special effects of weather. include("multiplay/script/functions/weather.js"); /* *** SETUP *** */ @@ -35,7 +35,7 @@ include("multiplay/script/rules/reticule.js"); // Logic and rules of "End conditions" of the match. include("multiplay/script/rules/endconditions.js"); -// Logic of places oil barrels on the battlefield +// Logic of placing oil barrels on the battlefield include("multiplay/script/rules/oildrum.js"); /* *** EVENTS *** */ @@ -55,5 +55,5 @@ include("multiplay/script/rules/events/chat.js"); /* *** MODS *** */ //All mods, as well as modpacks, must start in this file. -//At the moment, it's an empty stub doll. +//At the moment, it's an empty stub. include("multiplay/script/mods/init.js"); diff --git a/data/mp/multiplay/script/rules/reticule.js b/data/mp/multiplay/script/rules/reticule.js index 2e2350ec82f..5b449f501f4 100644 --- a/data/mp/multiplay/script/rules/reticule.js +++ b/data/mp/multiplay/script/rules/reticule.js @@ -154,7 +154,6 @@ function reticuleUpdate(obj, eventType) if (mainReticule && update_reticule) { //Wait a tick for the counts to update - const TICK_TIME = 100; queue("setMainReticule", TICK_TIME); } } diff --git a/data/mp/multiplay/script/rules/setup/components.js b/data/mp/multiplay/script/rules/setup/components.js index 6e3337bfe88..3154de22da9 100644 --- a/data/mp/multiplay/script/rules/setup/components.js +++ b/data/mp/multiplay/script/rules/setup/components.js @@ -1,5 +1,4 @@ function setupComponents(player) // inside hackNetOff() { - // enable cyborgs components that can't be enabled with research - makeComponentAvailable("CyborgSpade", player); + // Use makeComponentAvailable() here to enable components at the start of a match. } diff --git a/data/mp/multiplay/script/rules/setupgame.js b/data/mp/multiplay/script/rules/setupgame.js index 2fc9e8087d6..4e7a3f782c1 100644 --- a/data/mp/multiplay/script/rules/setupgame.js +++ b/data/mp/multiplay/script/rules/setupgame.js @@ -34,7 +34,10 @@ function setupGame() // Enable all templates setDesign(true); + // Enable all guide topics + addGuideTopic("wz2100::**"); + showInterface(); // init buttons. This MUST come before setting the reticule button data - setMainReticule(); + queue("setMainReticule", TICK_TIME); mainReticule = true; } diff --git a/data/mp/multiplay/script/rules/variables.js b/data/mp/multiplay/script/rules/variables.js index 99648f1acb2..6dab54caa95 100644 --- a/data/mp/multiplay/script/rules/variables.js +++ b/data/mp/multiplay/script/rules/variables.js @@ -7,6 +7,8 @@ var oilDrumData = { maxOilDrums: 0 // maximum amount of random oil drums allowed on the map }; +const TICK_TIME = 100; + const CREATE_LIKE_EVENT = 0; const DESTROY_LIKE_EVENT = 1; const TRANSFER_LIKE_EVENT = 2; diff --git a/data/mp/multiplay/skirmish/bonecrusher/names.js b/data/mp/multiplay/skirmish/bonecrusher/names.js index 3ab10e8a5c1..dcf422da67c 100644 --- a/data/mp/multiplay/skirmish/bonecrusher/names.js +++ b/data/mp/multiplay/skirmish/bonecrusher/names.js @@ -408,6 +408,7 @@ const research_name = { "R-Wpn-MG-Damage07" : "Tungsten-Tipped MG Bullets Mk3", "R-Wpn-MG-Damage08" : "Depleted Uranium MG Bullets", "R-Wpn-MG-Damage09" : "Depleted Uranium MG Bullets Mk2", + "R-Wpn-MG-Damage10" : "Depleted Uranium MG Bullets Mk3", "R-Wpn-MG-ROF01" : "Chaingun Upgrade", "R-Wpn-MG-ROF02" : "Rapid Fire Chaingun", "R-Wpn-MG-ROF03" : "Hyper Fire Chaingun Upgrade", diff --git a/data/mp/multiplay/skirmish/bonecrusher/research-paths.js b/data/mp/multiplay/skirmish/bonecrusher/research-paths.js index ff28e426b55..2e14adb012e 100644 --- a/data/mp/multiplay/skirmish/bonecrusher/research-paths.js +++ b/data/mp/multiplay/skirmish/bonecrusher/research-paths.js @@ -67,7 +67,7 @@ const research_test = [ "R-Sys-MobileRepairTurretHvy", 'R-Defense-WallTower-HPVcannon', "R-Wpn-MG5", //Twin Assault Gun -"R-Wpn-MG-Damage08", //Depleted Uranium MG Bullets +"R-Wpn-MG-Damage10", //Depleted Uranium MG Bullets Mk3 "R-Vehicle-Metals09", //Superdense Composite Alloys Mk3 (финал) "R-Vehicle-Armor-Heat09", //Vehicle Superdense Thermal Armor Mk3 "R-Cyborg-Metals09", @@ -77,18 +77,18 @@ const research_test = [ ];*/ const research_rich2 = [ -"R-Vehicle-Engine01", -"R-Wpn-Cannon1Mk1", -"R-Vehicle-Prop-Halftracks", -"R-Vehicle-Body05", -"R-Vehicle-Body11", +"R-Vehicle-Engine01", +"R-Wpn-Cannon1Mk1", +"R-Vehicle-Prop-Halftracks", +"R-Vehicle-Body05", +"R-Vehicle-Body11", "R-Struc-RepairFacility", "R-Struc-Research-Upgrade09", "R-Wpn-Cannon4AMk1", -"R-Wpn-RailGun03", -"R-Wpn-Cannon6TwinAslt", -"R-Vehicle-Metals04", -"R-Cyborg-Metals04", +"R-Wpn-RailGun03", +"R-Wpn-Cannon6TwinAslt", +"R-Vehicle-Metals04", +"R-Cyborg-Metals04", "R-Cyborg-Hvywpn-Mcannon", "R-Wpn-MG2Mk1", "R-Wpn-Rail-Damage02", @@ -113,12 +113,12 @@ const research_rockets = [ "R-Wpn-Rocket-ROF03", "R-Struc-RepairFacility", "R-Sys-MobileRepairTurret01", //Паяльник -"R-Wpn-MG-Damage08", //Depleted Uranium MG Bullets +"R-Wpn-MG-Damage10", //Depleted Uranium MG Bullets Mk3 "R-Wpn-Rocket01-LtAT", "R-Vehicle-Body05", //Средняя начальная броня "R-Struc-Research-Upgrade09", "R-Sys-MobileRepairTurretHvy", -"R-Vehicle-Metals09", //Superdense Composite Alloys Mk3 (финал) +"R-Vehicle-Metals09", //Superdense Composite Alloys Mk3 (финал) "R-Sys-Autorepair-General", //Автопочинка //"R-Sys-ECM-Upgrade02", //Глушилка "R-Wpn-MG5", //Twin Assault Gun @@ -359,6 +359,8 @@ const research_rich = [ "R-Wpn-Bomb04", // #124 Thermite Bomb Bay "R-Wpn-AAGun01", // #125 AA Cyclone Flak Cannon "R-Defense-WallTower-DoubleAAgun", // #126 AA Cyclone Flak Cannon Hardpoint +"R-Wpn-MG-Damage09", // #127 Depleted Uranium MG Bullets Mk2 +"R-Wpn-MG-Damage10", // #128 Depleted Uranium MG Bullets Mk3 ]; const research_cannon = [ @@ -395,7 +397,7 @@ const research_cannon = [ //"R-Sys-MobileRepairTurretHvy", 'R-Defense-WallTower-HPVcannon', "R-Wpn-MG5", //Twin Assault Gun -"R-Wpn-MG-Damage08", //Depleted Uranium MG Bullets +"R-Wpn-MG-Damage10", //Depleted Uranium MG Bullets Mk3 "R-Vehicle-Metals09", //Superdense Composite Alloys Mk3 (финал) "R-Vehicle-Armor-Heat09", //Vehicle Superdense Thermal Armor Mk3 "R-Cyborg-Metals09", diff --git a/data/mp/multiplay/skirmish/bonecrusher/weap-init.js b/data/mp/multiplay/skirmish/bonecrusher/weap-init.js index 54e3582fe54..209be54867a 100644 --- a/data/mp/multiplay/skirmish/bonecrusher/weap-init.js +++ b/data/mp/multiplay/skirmish/bonecrusher/weap-init.js @@ -145,7 +145,8 @@ guns_pts['mg'] = [ 'R-Wpn-MG-Damage06', 'R-Wpn-MG-Damage07', 'R-Wpn-MG-Damage08', -//'R-Wpn-MG-Damage09', +'R-Wpn-MG-Damage09', +'R-Wpn-MG-Damage10', 'R-Wpn-MG-ROF01', 'R-Wpn-MG-ROF02', 'R-Wpn-MG-ROF03' diff --git a/data/mp/multiplay/skirmish/cobra_includes/events.js b/data/mp/multiplay/skirmish/cobra_includes/events.js index 74a843eed06..e86a8a4d340 100644 --- a/data/mp/multiplay/skirmish/cobra_includes/events.js +++ b/data/mp/multiplay/skirmish/cobra_includes/events.js @@ -1,7 +1,7 @@ //This file contains generic events. Chat and research events are split into //their own seperate files. -function eventGameInit() +function eventGameLoaded() { initCobraGroups(); } diff --git a/data/mp/multiplay/skirmish/cobra_includes/miscFunctions.js b/data/mp/multiplay/skirmish/cobra_includes/miscFunctions.js index 192255a4dbf..9241dc439a6 100644 --- a/data/mp/multiplay/skirmish/cobra_includes/miscFunctions.js +++ b/data/mp/multiplay/skirmish/cobra_includes/miscFunctions.js @@ -395,6 +395,7 @@ function initCobraVars() { let isHoverMap = checkIfSeaMap(); + initCobraGroups(); lastMsg = "eventStartLevel"; lastMsgThrottle = 0; currently_dead = false; diff --git a/data/mp/multiplay/skirmish/cobra_rulesets/CobraStandard.js b/data/mp/multiplay/skirmish/cobra_rulesets/CobraStandard.js index a6997e59020..b29873b37f8 100644 --- a/data/mp/multiplay/skirmish/cobra_rulesets/CobraStandard.js +++ b/data/mp/multiplay/skirmish/cobra_rulesets/CobraStandard.js @@ -82,7 +82,7 @@ const weaponStats = ], // Extra things to research on this path, even if they don't lead to any new stuff extras: [ - "R-Wpn-MG-Damage08", + "R-Wpn-MG-Damage10", "R-Wpn-MG-ROF03", ], }, @@ -661,7 +661,7 @@ const weaponStats = templates: [], extras: [ "R-Wpn-MG-ROF03", - "R-Wpn-MG-Damage08", + "R-Wpn-MG-Damage10", ], }, nexusTech: diff --git a/data/mp/multiplay/skirmish/nb_rulesets/standard.js b/data/mp/multiplay/skirmish/nb_rulesets/standard.js index 1167d2c0285..6a8358a58fe 100644 --- a/data/mp/multiplay/skirmish/nb_rulesets/standard.js +++ b/data/mp/multiplay/skirmish/nb_rulesets/standard.js @@ -224,7 +224,7 @@ const weaponStats = { ], // Extra things to research on this path, even if they don't lead to any new stuff extras: [ - "R-Wpn-MG-Damage08", + "R-Wpn-MG-Damage10", ], }, flamers: { @@ -589,7 +589,7 @@ const weaponStats = { templates: [], extras: [ "R-Wpn-MG-ROF03", - "R-Wpn-MG-Damage08", + "R-Wpn-MG-Damage10", ], }, energy: { diff --git a/data/mp/stats/propulsion.json b/data/mp/stats/propulsion.json index d2f63a0de52..d593dee270e 100644 --- a/data/mp/stats/propulsion.json +++ b/data/mp/stats/propulsion.json @@ -25,6 +25,7 @@ "deceleration": 450, "hitpointPctOfBody": 50, "id": "CyborgLegs", + "model": "cybd_std.pie", "name": "Cyborg Propulsion", "speed": 400, "spinAngle": 45, diff --git a/data/mp/stats/repair.json b/data/mp/stats/repair.json index ac22ee6c3ff..fde3fecbc64 100644 --- a/data/mp/stats/repair.json +++ b/data/mp/stats/repair.json @@ -32,7 +32,7 @@ "name": "Heavy Repair Turret", "repairPoints": 30, "time": 7, - "weight": 3000 + "weight": 2000 }, "LightRepair1": { "buildPoints": 125, diff --git a/data/mp/stats/research.json b/data/mp/stats/research.json index fe0b5011e35..9afada9f5e7 100644 --- a/data/mp/stats/research.json +++ b/data/mp/stats/research.json @@ -667,8 +667,8 @@ "requiredResearch": [ "R-Wpn-AALaser" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "P0-AASite-Laser" ], @@ -682,8 +682,8 @@ "requiredResearch": [ "R-Wpn-AAGun01" ], - "researchPoints": 2400, - "researchPower": 75, + "researchPoints": 1000, + "researchPower": 31, "resultStructures": [ "AASite-QuadBof" ], @@ -700,8 +700,8 @@ "requiredResearch": [ "R-Wpn-AAGun02" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 1300, + "researchPower": 40, "resultStructures": [ "AASite-QuadBof02" ], @@ -715,8 +715,8 @@ "requiredResearch": [ "R-Wpn-AAGun03" ], - "researchPoints": 2400, - "researchPower": 75, + "researchPoints": 1000, + "researchPower": 31, "resultStructures": [ "AASite-QuadMg1" ], @@ -734,8 +734,8 @@ "R-Wpn-AAGun04", "R-Defense-AASite-QuadMg1" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 1300, + "researchPower": 40, "resultStructures": [ "AASite-QuadRotMg" ], @@ -750,8 +750,8 @@ "R-Defense-WallUpgrade04", "R-Wpn-Cannon6TwinAslt" ], - "researchPoints": 3200, - "researchPower": 100, + "researchPoints": 1200, + "researchPower": 37, "resultStructures": [ "PillBox-Cannon6" ], @@ -765,8 +765,8 @@ "requiredResearch": [ "R-Wpn-EMPCannon" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "WallTower-EMP" ], @@ -780,8 +780,8 @@ "requiredResearch": [ "R-Wpn-MortarEMP" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "Emplacement-MortarEMP" ], @@ -798,8 +798,8 @@ "requiredResearch": [ "R-Wpn-Cannon4AMk1" ], - "researchPoints": 1600, - "researchPower": 50, + "researchPoints": 900, + "researchPower": 28, "resultStructures": [ "Emplacement-HPVcannon" ], @@ -816,8 +816,8 @@ "requiredResearch": [ "R-Wpn-Missile2A-T" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1400, + "researchPower": 43, "resultStructures": [ "GuardTower-ATMiss" ], @@ -834,8 +834,8 @@ "requiredResearch": [ "R-Wpn-RailGun01" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1400, + "researchPower": 43, "resultStructures": [ "GuardTower-Rail1" ], @@ -849,8 +849,8 @@ "requiredResearch": [ "R-Defense-HardcreteWall" ], - "researchPoints": 900, - "researchPower": 28, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "A0HardcreteMk1Gate" ], @@ -877,14 +877,11 @@ "id": "R-Defense-HeavyLas", "msgName": "RES_EMP_HEAVYLAS", "name": "Heavy Laser Emplacement", - "redStructures": [ - "Emplacement-PrisLas" - ], "requiredResearch": [ "R-Wpn-HvyLaser" ], - "researchPoints": 10200, - "researchPower": 318, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "Emplacement-HeavyLaser" ], @@ -957,7 +954,9 @@ "msgName": "RES_EMP_HvAM", "name": "Archangel Missile Battery", "redStructures": [ - "Emplacement-Rocket06-IDF" + "Emplacement-Howitzer105", + "Emplacement-Rocket06-IDF", + "Emplacement-MortarPit02" ], "requiredResearch": [ "R-Wpn-HvArtMissile" @@ -980,8 +979,8 @@ "requiredResearch": [ "R-Wpn-Flame2" ], - "researchPoints": 2000, - "researchPower": 62, + "researchPoints": 1000, + "researchPower": 31, "resultStructures": [ "Tower-Projector" ], @@ -992,9 +991,6 @@ "id": "R-Defense-HvyHowitzer", "msgName": "RES_EMP_HvHOW", "name": "Ground Shaker Emplacement", - "redStructures": [ - "Emplacement-Howitzer105" - ], "requiredResearch": [ "R-Defense-Howitzer", "R-Wpn-HvyHowitzer" @@ -1018,8 +1014,8 @@ "R-Defense-MortarPit", "R-Wpn-Mortar02Hvy" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 1000, + "researchPower": 31, "resultStructures": [ "Emplacement-MortarPit02" ], @@ -1050,8 +1046,8 @@ "R-Wpn-Rocket02-MRL", "R-Defense-HardcreteWall" ], - "researchPoints": 600, - "researchPower": 18, + "researchPoints": 800, + "researchPower": 25, "resultStructures": [ "Emplacement-MRL-pit" ], @@ -1080,9 +1076,6 @@ "id": "R-Defense-MassDriver", "msgName": "RES_EMP_MD", "name": "Mass Driver Fortress", - "redStructures": [ - "X-Super-Cannon" - ], "requiredResearch": [ "R-Wpn-RailGun03", "R-Wpn-Rail-ROF03", @@ -1107,8 +1100,8 @@ "requiredResearch": [ "R-Wpn-MdArtMissile" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "Emplacement-MdART-pit" ], @@ -1171,8 +1164,8 @@ "R-Defense-HardcreteWall", "R-Wpn-Cannon1Mk1" ], - "researchPoints": 750, - "researchPower": 23, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "PillBox4" ], @@ -1187,8 +1180,8 @@ "R-Defense-HardcreteWall", "R-Wpn-Flamer01Mk1" ], - "researchPoints": 750, - "researchPower": 23, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "PillBox5" ], @@ -1199,15 +1192,12 @@ "id": "R-Defense-Pillbox06", "msgName": "RES_PB_ATR", "name": "Lancer Tower", - "redStructures": [ - "GuardTower6" - ], "requiredResearch": [ "R-Defense-HardcreteWall", "R-Wpn-Rocket01-LtAT" ], - "researchPoints": 750, - "researchPower": 23, + "researchPoints": 900, + "researchPower": 28, "resultStructures": [ "GuardTower5" ], @@ -1221,8 +1211,8 @@ "requiredResearch": [ "R-Wpn-PlasmaCannon" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1300, + "researchPower": 40, "resultStructures": [ "Emplacement-PlasmaCannon" ], @@ -1240,8 +1230,8 @@ "requiredResearch": [ "R-Wpn-Plasmite-Flamer" ], - "researchPoints": 2000, - "researchPower": 62, + "researchPoints": 1300, + "researchPower": 40, "resultStructures": [ "Plasmite-flamer-bunker" ], @@ -1255,8 +1245,8 @@ "requiredResearch": [ "R-Wpn-Laser01" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1400, + "researchPower": 43, "resultStructures": [ "Emplacement-PrisLas" ], @@ -1270,8 +1260,8 @@ "requiredResearch": [ "R-Wpn-Laser02" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "GuardTower-BeamLas" ], @@ -1285,8 +1275,8 @@ "requiredResearch": [ "R-Wpn-RailGun02" ], - "researchPoints": 5000, - "researchPower": 156, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "Emplacement-Rail2" ], @@ -1303,8 +1293,8 @@ "requiredResearch": [ "R-Wpn-RailGun03" ], - "researchPoints": 5000, - "researchPower": 156, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "Emplacement-Rail3" ], @@ -1340,8 +1330,8 @@ "requiredResearch": [ "R-Wpn-MG4" ], - "researchPoints": 1800, - "researchPower": 56, + "researchPoints": 1100, + "researchPower": 34, "resultStructures": [ "Pillbox-RotMG" ], @@ -1359,8 +1349,8 @@ "R-Defense-MortarPit", "R-Wpn-Mortar3" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 1000, + "researchPower": 31, "resultStructures": [ "Emplacement-RotMor" ], @@ -1371,14 +1361,11 @@ "id": "R-Defense-SamSite1", "msgName": "RES_EMP_SAM1", "name": "Avenger SAM Site", - "redStructures": [ - "P0-AASite-Sunburst" - ], "requiredResearch": [ "R-Wpn-Missile-LtSAM" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "P0-AASite-SAM1" ], @@ -1395,8 +1382,8 @@ "requiredResearch": [ "R-Wpn-Missile-HvSAM" ], - "researchPoints": 14400, - "researchPower": 450, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "P0-AASite-SAM2" ], @@ -1409,8 +1396,8 @@ "requiredResearch": [ "R-Wpn-Sunburst" ], - "researchPoints": 2400, - "researchPower": 75, + "researchPoints": 1000, + "researchPower": 31, "resultStructures": [ "P0-AASite-Sunburst" ], @@ -1438,9 +1425,6 @@ "id": "R-Defense-Super-Missile", "msgName": "RES_EMP_MSL", "name": "Missile Fortress", - "redStructures": [ - "X-Super-Rocket" - ], "requiredResearch": [ "R-Defense-WallUpgrade10", "R-Wpn-Missile-ROF03" @@ -1511,8 +1495,8 @@ "R-Defense-HardcreteWall", "R-Wpn-Rocket05-MiniPod" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "GuardTower6" ], @@ -1527,10 +1511,10 @@ "WallTower01" ], "requiredResearch": [ - "R-Defense-RotMG" + "R-Wpn-MG4" ], - "researchPoints": 1800, - "researchPower": 56, + "researchPoints": 1100, + "researchPower": 34, "resultStructures": [ "Wall-RotMg" ], @@ -1547,8 +1531,8 @@ "requiredResearch": [ "R-Wpn-Cannon5" ], - "researchPoints": 2400, - "researchPower": 75, + "researchPoints": 1100, + "researchPower": 34, "resultStructures": [ "Wall-VulcanCan" ], @@ -1560,13 +1544,13 @@ "msgName": "RES_WT9_ATM", "name": "Scourge Missile Hardpoint", "redStructures": [ - "WallTower-HvATrocket" + "WallTower06" ], "requiredResearch": [ "R-Wpn-Missile2A-T" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1400, + "researchPower": 43, "resultStructures": [ "WallTower-Atmiss" ], @@ -1580,8 +1564,8 @@ "requiredResearch": [ "R-Wpn-AAGun01" ], - "researchPoints": 4800, - "researchPower": 150, + "researchPoints": 1000, + "researchPower": 31, "resultStructures": [ "WallTower-DoubleAAGun" ], @@ -1598,8 +1582,8 @@ "requiredResearch": [ "R-Wpn-AAGun02" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1300, + "researchPower": 40, "resultStructures": [ "WallTower-DoubleAAGun02" ], @@ -1616,8 +1600,8 @@ "requiredResearch": [ "R-Wpn-Cannon4AMk1" ], - "researchPoints": 2400, - "researchPower": 75, + "researchPoints": 900, + "researchPower": 28, "resultStructures": [ "WallTower-HPVcannon" ], @@ -1628,9 +1612,6 @@ "id": "R-Defense-WallTower-HvyA-Trocket", "msgName": "RES_WT12_HAT", "name": "Tank Killer Hardpoint", - "redStructures": [ - "WallTower06" - ], "requiredResearch": [ "R-Wpn-Rocket07-Tank-Killer" ], @@ -1649,8 +1630,8 @@ "requiredResearch": [ "R-Wpn-Laser02" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "WallTower-PulseLas" ], @@ -1662,10 +1643,10 @@ "msgName": "RES_WT_QUADAA", "name": "Whirlwind Hardpoint", "requiredResearch": [ - "R-Defense-AASite-QuadRotMg" + "R-Wpn-AAGun04" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1300, + "researchPower": 40, "resultStructures": [ "WallTower-QuadRotAAGun" ], @@ -1676,16 +1657,11 @@ "id": "R-Defense-WallTower-Rail2", "msgName": "RES_WT15_RL2", "name": "Rail Gun Hardpoint", - "redStructures": [ - "WallTower04", - "WallTower-HPVcannon", - "Wall-VulcanCan" - ], "requiredResearch": [ "R-Wpn-RailGun02" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "WallTower-Rail2" ], @@ -1697,16 +1673,13 @@ "msgName": "RES_WT15_RL3", "name": "Gauss Cannon Hardpoint", "redStructures": [ - "WallTower-Rail2", - "WallTower04", - "WallTower-HPVcannon", - "Wall-VulcanCan" + "WallTower-Rail2" ], "requiredResearch": [ "R-Wpn-RailGun03" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "WallTower-Rail3" ], @@ -1721,11 +1694,10 @@ "WallTower-SamSite" ], "requiredResearch": [ - "R-Wpn-Missile-HvSAM", - "R-Defense-WallUpgrade07" + "R-Wpn-Missile-HvSAM" ], - "researchPoints": 18000, - "researchPower": 450, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "WallTower-SamHvy" ], @@ -1737,11 +1709,10 @@ "msgName": "RES_MS_SAM1WT", "name": "Avenger Hardpoint", "requiredResearch": [ - "R-Defense-WallUpgrade07", - "R-Defense-SamSite1" + "R-Wpn-Missile-LtSAM" ], - "researchPoints": 10800, - "researchPower": 337, + "researchPoints": 1500, + "researchPower": 46, "resultStructures": [ "WallTower-SamSite" ], @@ -1758,8 +1729,8 @@ "requiredResearch": [ "R-Wpn-MG5" ], - "researchPoints": 2400, - "researchPower": 75, + "researchPoints": 1200, + "researchPower": 37, "resultStructures": [ "WallTower-TwinAssaultGun" ], @@ -1790,8 +1761,8 @@ "R-Defense-HardcreteWall", "R-Wpn-Cannon1Mk1" ], - "researchPoints": 750, - "researchPower": 23, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "WallTower02" ], @@ -1809,8 +1780,8 @@ "R-Wpn-Cannon2Mk1", "R-Defense-WallTower02" ], - "researchPoints": 900, - "researchPower": 28, + "researchPoints": 800, + "researchPower": 25, "resultStructures": [ "WallTower03" ], @@ -1841,8 +1812,8 @@ "R-Wpn-Rocket01-LtAT", "R-Defense-HardcreteWall" ], - "researchPoints": 750, - "researchPower": 23, + "researchPoints": 900, + "researchPower": 28, "resultStructures": [ "WallTower06" ], @@ -1953,7 +1924,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 45 + "value": 35 }, { "class": "Building", @@ -1981,7 +1952,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 45 + "value": 35 }, { "class": "Building", @@ -2010,7 +1981,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 45 + "value": 35 }, { "class": "Building", @@ -2041,7 +2012,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 55 + "value": 35 }, { "class": "Building", @@ -2069,7 +2040,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 55 + "value": 35 }, { "class": "Building", @@ -2098,7 +2069,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 55 + "value": 35 }, { "class": "Building", @@ -2127,7 +2098,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 65 + "value": 35 }, { "class": "Building", @@ -2156,7 +2127,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 65 + "value": 35 }, { "class": "Building", @@ -2185,7 +2156,7 @@ "filterParameter": "Type", "filterValue": "Wall", "parameter": "Armour", - "value": 65 + "value": 35 }, { "class": "Building", @@ -3098,8 +3069,8 @@ "R-Sys-CBSensor-Turret01", "R-Sys-Sensor-Tower02" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1100, + "researchPower": 34, "resultStructures": [ "Sys-CB-Tower01" ], @@ -3129,9 +3100,6 @@ "name": "Engineering", "researchPoints": 1200, "researchPower": 37, - "resultComponents": [ - "CyborgSpade" - ], "results": [ { "class": "Construct", @@ -3290,8 +3258,8 @@ "R-Defense-HardcreteWall", "R-Sys-Sensor-Tower01" ], - "researchPoints": 1200, - "researchPower": 37, + "researchPoints": 600, + "researchPower": 18, "resultStructures": [ "Sys-SensoTower02" ], @@ -3413,8 +3381,8 @@ "R-Sys-Sensor-WS", "R-Sys-Sensor-Tower02" ], - "researchPoints": 16400, - "researchPower": 450, + "researchPoints": 1400, + "researchPower": 43, "resultStructures": [ "Sys-SensoTowerWS" ], @@ -3426,7 +3394,8 @@ "name": "Construction Unit", "researchPoints": 10, "resultComponents": [ - "Spade1Mk1" + "Spade1Mk1", + "CyborgSpade" ], "statID": "Spade1Mk1", "techCode": 1 @@ -3439,8 +3408,8 @@ "requiredResearch": [ "R-Sys-SpyTurret" ], - "researchPoints": 3600, - "researchPower": 112, + "researchPoints": 1400, + "researchPower": 43, "resultStructures": [ "Sys-SpyTower" ], @@ -3472,8 +3441,8 @@ "R-Sys-VTOLCBS-Turret01", "R-Sys-Sensor-Tower02" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1300, + "researchPower": 40, "resultStructures": [ "Sys-VTOL-CB-Tower01" ], @@ -3505,8 +3474,8 @@ "R-Sys-VTOLStrike-Turret01", "R-Sys-Sensor-Tower02" ], - "researchPoints": 7200, - "researchPower": 225, + "researchPoints": 1200, + "researchPower": 37, "resultStructures": [ "Sys-VTOL-RadarTower01" ], @@ -5637,7 +5606,7 @@ "msgName": "RES_LASD1", "name": "Hi-Energy Laser Emitter", "requiredResearch": [ - "R-Wpn-Energy-Accuracy01" + "R-Wpn-Laser01" ], "researchPoints": 14400, "researchPower": 450, @@ -6721,7 +6690,7 @@ "msgName": "RES_W_HLAS", "name": "Heavy Laser", "requiredResearch": [ - "R-Wpn-Energy-Damage01" + "R-Wpn-Laser02" ], "researchPoints": 36000, "researchPower": 450, @@ -7046,7 +7015,7 @@ "R-Wpn-MG-Damage07", "R-Struc-Research-Upgrade06" ], - "researchPoints": 10800, + "researchPoints": 9800, "researchPower": 450, "results": [ { @@ -7075,6 +7044,80 @@ "subgroupIconID": "IMAGE_RES_GRPDAM", "techCode": 1 }, + "R-Wpn-MG-Damage09": { + "iconID": "IMAGE_RES_WEAPONTECH", + "id": "R-Wpn-MG-Damage09", + "name": "Depleted Uranium MG Bullets Mk2", + "requiredResearch": [ + "R-Wpn-MG-Damage08", + "R-Struc-Research-Upgrade07" + ], + "researchPoints": 10200, + "researchPower": 450, + "results": [ + { + "class": "Weapon", + "filterParameter": "ImpactClass", + "filterValue": "MACHINE GUN", + "parameter": "Damage", + "value": 25 + }, + { + "class": "Weapon", + "filterParameter": "ImpactClass", + "filterValue": "A-A GUN", + "parameter": "Damage", + "value": 5 + }, + { + "class": "Weapon", + "filterParameter": "ImpactClass", + "filterValue": "A-A GUN", + "parameter": "RadiusDamage", + "value": 5 + } + ], + "statID": "MG1Mk1", + "subgroupIconID": "IMAGE_RES_GRPDAM", + "techCode": 1 + }, + "R-Wpn-MG-Damage10": { + "iconID": "IMAGE_RES_WEAPONTECH", + "id": "R-Wpn-MG-Damage10", + "name": "Depleted Uranium MG Bullets Mk3", + "requiredResearch": [ + "R-Wpn-MG-Damage09", + "R-Struc-Research-Upgrade08" + ], + "researchPoints": 11800, + "researchPower": 450, + "results": [ + { + "class": "Weapon", + "filterParameter": "ImpactClass", + "filterValue": "MACHINE GUN", + "parameter": "Damage", + "value": 25 + }, + { + "class": "Weapon", + "filterParameter": "ImpactClass", + "filterValue": "A-A GUN", + "parameter": "Damage", + "value": 5 + }, + { + "class": "Weapon", + "filterParameter": "ImpactClass", + "filterValue": "A-A GUN", + "parameter": "RadiusDamage", + "value": 5 + } + ], + "statID": "MG1Mk1", + "subgroupIconID": "IMAGE_RES_GRPDAM", + "techCode": 1 + }, "R-Wpn-MG-ROF01": { "iconID": "IMAGE_RES_WEAPONTECH", "id": "R-Wpn-MG-ROF01", diff --git a/data/mp/stats/structure.json b/data/mp/stats/structure.json index 2ede71f289e..44c38454b2c 100644 --- a/data/mp/stats/structure.json +++ b/data/mp/stats/structure.json @@ -49,7 +49,7 @@ "name": "Scavenger MG tower", "resistance": 150, "sensorID": "BaBaSensor", - "strength": "SOFT", + "strength": "HARD", "structureModel": [ "bbaatower.PIE" ], @@ -155,7 +155,7 @@ "name": "Scavenger Flame Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "SOFT", + "strength": "MEDIUM", "structureModel": [ "Blbrtowf.pie" ], @@ -177,7 +177,7 @@ "name": "Scavenger Gun Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "SOFT", + "strength": "MEDIUM", "structureModel": [ "BLBRBTW1.PIE" ], @@ -199,7 +199,7 @@ "name": "*Scavenger End Tower*", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "SOFT", + "strength": "MEDIUM", "structureModel": [ "Blbrbtw2.PIE" ], @@ -239,7 +239,7 @@ "name": "*BaBaMortarPit*", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "SOFT", + "strength": "MEDIUM", "structureModel": [ "BLBRMRTP.PIE" ], @@ -263,7 +263,7 @@ "modulePowerPoints": 40, "resistance": 150, "sensorID": "BaBaSensor", - "strength": "MEDIUM", + "strength": "SOFT", "structureModel": [ "BLBRBGEN.PIE" ], @@ -282,7 +282,7 @@ "name": "Scavenger Rocket Pit", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "SOFT", + "strength": "MEDIUM", "structureModel": [ "EXROCKET.PIE" ], @@ -304,7 +304,7 @@ "name": "Scavenger AT-Rocket Pit", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "SOFT", + "strength": "MEDIUM", "structureModel": [ "EXROCKET.PIE" ], @@ -342,8 +342,8 @@ "id": "A0CannonTower", "name": "Cannon Tower", "resistance": 150, - "sensorID": "DefaultSensor1Mk1", - "strength": "SOFT", + "sensorID": "TowerSensor", + "strength": "MEDIUM", "structureModel": [ "BLBRTOWR.PIE" ], @@ -394,6 +394,69 @@ "type": "HQ", "width": 2 }, + "A0CommandCentreCO": { + "armour": 10, + "baseModel": "blbhq.pie", + "breadth": 2, + "buildPoints": 500, + "buildPower": 100, + "ecmID": "ZNULLECM", + "height": 3, + "hitpoints": 1000, + "id": "A0CommandCentreCO", + "name": "Collective Command Center", + "resistance": 300, + "sensorID": "CCSensor", + "strength": "HARD", + "structureModel": [ + "blhq3.pie" + ], + "thermal": 10, + "type": "HQ", + "width": 2 + }, + "A0CommandCentreNE": { + "armour": 10, + "baseModel": "blbhq.pie", + "breadth": 2, + "buildPoints": 500, + "buildPower": 100, + "ecmID": "ZNULLECM", + "height": 3, + "hitpoints": 1000, + "id": "A0CommandCentreNE", + "name": "*CommandCenterNE*", + "resistance": 300, + "sensorID": "CCSensor", + "strength": "HARD", + "structureModel": [ + "blhq4.pie" + ], + "thermal": 10, + "type": "HQ", + "width": 2 + }, + "A0CommandCentreNP": { + "armour": 10, + "baseModel": "blbhq.pie", + "breadth": 2, + "buildPoints": 500, + "buildPower": 100, + "ecmID": "ZNULLECM", + "height": 3, + "hitpoints": 1000, + "id": "A0CommandCentreNP", + "name": "New Paradigm Command Center", + "resistance": 300, + "sensorID": "CCSensor", + "strength": "HARD", + "structureModel": [ + "blhq2.pie" + ], + "thermal": 10, + "type": "HQ", + "width": 2 + }, "A0CyborgFactory": { "armour": 10, "baseModel": "blbcfact.pie", @@ -443,8 +506,8 @@ "A0HardcreteMk1CWall": { "armour": 15, "breadth": 1, - "buildPoints": 100, - "buildPower": 15, + "buildPoints": 125, + "buildPower": 25, "height": 2, "hitpoints": 700, "id": "A0HardcreteMk1CWall", @@ -460,8 +523,8 @@ "A0HardcreteMk1Gate": { "armour": 15, "breadth": 1, - "buildPoints": 200, - "buildPower": 45, + "buildPoints": 250, + "buildPower": 50, "height": 2, "hitpoints": 700, "id": "A0HardcreteMk1Gate", @@ -480,8 +543,8 @@ "A0HardcreteMk1Wall": { "armour": 15, "breadth": 1, - "buildPoints": 100, - "buildPower": 15, + "buildPoints": 125, + "buildPower": 25, "height": 2, "hitpoints": 700, "id": "A0HardcreteMk1Wall", @@ -722,12 +785,12 @@ "armour": 10, "breadth": 1, "buildPoints": 40, - "buildPower": 5, + "buildPower": 15, "height": 1, "hitpoints": 200, "id": "A0TankTrap", "name": "Tank Traps", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "MITRAP2.PIE" ], @@ -804,7 +867,7 @@ "name": "AA Cyclone Flak Cannon Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blaamnt2.PIE" ], @@ -826,7 +889,7 @@ "name": "AA Tornado Flak Cannon Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blaamnt2.PIE" ], @@ -882,14 +945,14 @@ "width": 1 }, "CO-Tower-HVCan": { - "armour": 18, + "armour": 12, "breadth": 1, "buildPoints": 500, - "buildPower": 275, + "buildPower": 100, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1400, + "hitpoints": 300, "id": "CO-Tower-HVCan", "name": "*CO-Tower-HVCan*", "resistance": 150, @@ -898,7 +961,7 @@ "structureModel": [ "BLGUARD2.pie" ], - "thermal": 18, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Cannon4AUTOMk1" @@ -906,14 +969,14 @@ "width": 1 }, "CO-Tower-HvATRkt": { - "armour": 18, + "armour": 12, "breadth": 1, "buildPoints": 500, - "buildPower": 300, + "buildPower": 100, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1400, + "hitpoints": 300, "id": "CO-Tower-HvATRkt", "name": "*CO-Tower-HvATRkt*", "resistance": 150, @@ -922,7 +985,7 @@ "structureModel": [ "BLGUARD2.pie" ], - "thermal": 18, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Rocket-HvyA-T" @@ -930,13 +993,13 @@ "width": 1 }, "CO-Tower-HvFlame": { - "armour": 10, + "armour": 12, "breadth": 1, - "buildPoints": 200, - "buildPower": 110, + "buildPoints": 500, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 1, - "hitpoints": 700, + "hitpoints": 300, "id": "CO-Tower-HvFlame", "name": "*CO-Tower-HvFlame*", "resistance": 150, @@ -945,7 +1008,7 @@ "structureModel": [ "BLHARDPT.pie" ], - "thermal": 10, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Flame2" @@ -953,22 +1016,22 @@ "width": 1 }, "CO-Tower-LtATRkt": { - "armour": 15, + "armour": 12, "breadth": 1, - "buildPoints": 350, - "buildPower": 200, + "buildPoints": 500, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1000, + "hitpoints": 300, "id": "CO-Tower-LtATRkt", "name": "*CO-Tower-LtATRkt*", "resistance": 150, - "sensorID": "TowerSensor", - "strength": "HARD", + "sensorID": "DefaultSensor1Mk1", + "strength": "MEDIUM", "structureModel": [ "blguardn.pie" ], - "thermal": 15, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Rocket-LtA-T" @@ -976,22 +1039,22 @@ "width": 1 }, "CO-Tower-MG3": { - "armour": 15, + "armour": 12, "breadth": 1, - "buildPoints": 400, - "buildPower": 150, + "buildPoints": 500, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1000, + "hitpoints": 300, "id": "CO-Tower-MG3", "name": "*CO-Tower-MG3*", "resistance": 150, - "sensorID": "TowerSensor", - "strength": "HARD", + "sensorID": "DefaultSensor1Mk1", + "strength": "MEDIUM", "structureModel": [ "blguardn.PIE" ], - "thermal": 15, + "thermal": 12, "type": "DEFENSE", "weapons": [ "MG3Mk1" @@ -999,14 +1062,14 @@ "width": 1 }, "CO-Tower-MdCan": { - "armour": 18, + "armour": 12, "breadth": 1, "buildPoints": 500, - "buildPower": 225, + "buildPower": 100, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1400, + "hitpoints": 300, "id": "CO-Tower-MdCan", "name": "*CO-Tower-MdCan*", "resistance": 150, @@ -1015,7 +1078,7 @@ "structureModel": [ "BLGUARD2.pie" ], - "thermal": 18, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Cannon2A-TMk1" @@ -1023,22 +1086,22 @@ "width": 1 }, "CO-Tower-RotMG": { - "armour": 15, + "armour": 12, "breadth": 1, - "buildPoints": 400, - "buildPower": 150, + "buildPoints": 500, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1000, + "hitpoints": 300, "id": "CO-Tower-RotMG", "name": "*CO-Tower-RotMG*", "resistance": 150, - "sensorID": "TowerSensor", - "strength": "HARD", + "sensorID": "DefaultSensor1Mk1", + "strength": "MEDIUM", "structureModel": [ "blguardn.PIE" ], - "thermal": 15, + "thermal": 12, "type": "DEFENSE", "weapons": [ "MG4ROTARYMk1" @@ -1046,14 +1109,14 @@ "width": 1 }, "CO-WallTower-HvCan": { - "armour": 18, + "armour": 12, "breadth": 1, "buildPoints": 500, - "buildPower": 250, + "buildPower": 100, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1400, + "hitpoints": 400, "id": "CO-WallTower-HvCan", "name": "*CO-WallTower-HvCan*", "resistance": 150, @@ -1062,7 +1125,7 @@ "structureModel": [ "BLGUARD2.pie" ], - "thermal": 18, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Cannon375mmMk1" @@ -1070,14 +1133,14 @@ "width": 1 }, "CO-WallTower-RotCan": { - "armour": 18, + "armour": 12, "breadth": 1, "buildPoints": 500, - "buildPower": 275, + "buildPower": 100, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1400, + "hitpoints": 400, "id": "CO-WallTower-RotCan", "name": "*CO-WallTower-RotCan*", "resistance": 150, @@ -1086,7 +1149,7 @@ "structureModel": [ "BLGUARD2.pie" ], - "thermal": 18, + "thermal": 12, "type": "DEFENSE", "weapons": [ "Cannon5VulcanMk1" @@ -1096,8 +1159,8 @@ "CollectiveCWall": { "armour": 12, "breadth": 1, - "buildPoints": 100, - "buildPower": 15, + "buildPoints": 125, + "buildPower": 25, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 250, @@ -1115,8 +1178,8 @@ "CollectiveWall": { "armour": 12, "breadth": 1, - "buildPoints": 100, - "buildPower": 15, + "buildPoints": 125, + "buildPower": 25, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 250, @@ -1149,37 +1212,37 @@ "width": 1 }, "ECM1PylonMk1": { - "armour": 17, + "armour": 10, "breadth": 1, "buildPoints": 750, "buildPower": 500, "ecmID": "ECM1TurretMk1", "height": 3, - "hitpoints": 1000, + "hitpoints": 300, "id": "ECM1PylonMk1", "name": "Jammer Tower", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "blguardr.pie" ], - "thermal": 17, + "thermal": 10, "type": "DEFENSE", "width": 1 }, "Emplacement-HPVcannon": { "armour": 10, "breadth": 1, - "buildPoints": 225, - "buildPower": 130, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 700, + "hitpoints": 400, "id": "Emplacement-HPVcannon", "name": "Hyper Velocity Cannon Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blhowmnt.PIE" ], @@ -1193,15 +1256,15 @@ "Emplacement-HeavyLaser": { "armour": 10, "breadth": 1, - "buildPoints": 250, - "buildPower": 170, + "buildPoints": 400, + "buildPower": 150, "height": 1, - "hitpoints": 700, + "hitpoints": 400, "id": "Emplacement-HeavyLaser", "name": "Heavy Laser Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], @@ -1213,7 +1276,7 @@ "width": 1 }, "Emplacement-Howitzer-Incendiary": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 525, "buildPower": 375, @@ -1223,11 +1286,11 @@ "name": "Incendiary Howitzer Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blhowmnt.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Howitzer-Incendiary" @@ -1235,7 +1298,7 @@ "width": 1 }, "Emplacement-Howitzer-Incenediary": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 550, "buildPower": 400, @@ -1245,11 +1308,11 @@ "name": "Incendiary Howitzer Emplacement 2", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blhowmnt.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Howitzer-Incendiary" @@ -1257,7 +1320,7 @@ "width": 1 }, "Emplacement-Howitzer105": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 450, "buildPower": 275, @@ -1267,11 +1330,11 @@ "name": "Howitzer Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blhowmnt.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Howitzer105Mk1" @@ -1279,7 +1342,7 @@ "width": 1 }, "Emplacement-Howitzer150": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 600, "buildPower": 475, @@ -1289,11 +1352,11 @@ "name": "Ground Shaker Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blhowmnt.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Howitzer150Mk1" @@ -1301,7 +1364,7 @@ "width": 1 }, "Emplacement-HvART-pit": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 675, "buildPower": 525, @@ -1311,11 +1374,11 @@ "name": "Archangel Missile Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Missile-HvyArt" @@ -1325,15 +1388,15 @@ "Emplacement-HvyATrocket": { "armour": 10, "breadth": 1, - "buildPoints": 225, - "buildPower": 150, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 700, + "hitpoints": 400, "id": "Emplacement-HvyATrocket", "name": "Tank Killer Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blhowmnt.PIE" ], @@ -1345,21 +1408,21 @@ "width": 1 }, "Emplacement-MRL-pit": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 400, - "buildPower": 125, + "buildPower": 100, "height": 1, - "hitpoints": 300, + "hitpoints": 400, "id": "Emplacement-MRL-pit", "name": "Mini-Rocket Battery", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Rocket-MRL" @@ -1367,21 +1430,21 @@ "width": 1 }, "Emplacement-MRLHvy-pit": { - "armour": 12, + "armour": 10, "breadth": 1, - "buildPoints": 450, - "buildPower": 200, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 300, + "hitpoints": 400, "id": "Emplacement-MRLHvy-pit", "name": "Heavy Rocket Battery", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Rocket-MRL-Hvy" @@ -1389,21 +1452,21 @@ "width": 1 }, "Emplacement-MdART-pit": { - "armour": 12, + "armour": 10, "breadth": 1, - "buildPoints": 600, - "buildPower": 450, + "buildPoints": 400, + "buildPower": 150, "height": 1, "hitpoints": 400, "id": "Emplacement-MdART-pit", "name": "Seraph Missile Battery", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Missile-MdArt" @@ -1411,10 +1474,10 @@ "width": 1 }, "Emplacement-MortarEMP": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 450, - "buildPower": 200, + "buildPower": 150, "height": 1, "hitpoints": 300, "id": "Emplacement-MortarEMP", @@ -1425,7 +1488,7 @@ "structureModel": [ "BLMRTPIT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "MortarEMP" @@ -1433,7 +1496,7 @@ "width": 1 }, "Emplacement-MortarPit-Incendiary": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 425, "buildPower": 225, @@ -1447,7 +1510,7 @@ "structureModel": [ "BLMRTPIT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Mortar-Incendiary" @@ -1455,10 +1518,10 @@ "width": 1 }, "Emplacement-MortarPit-Incenediary": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 425, - "buildPower": 225, + "buildPower": 170, "height": 1, "hitpoints": 300, "id": "Emplacement-MortarPit-Incenediary", @@ -1469,7 +1532,7 @@ "structureModel": [ "BLMRTPIT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Mortar-Incendiary" @@ -1477,7 +1540,7 @@ "width": 1 }, "Emplacement-MortarPit01": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 400, "buildPower": 125, @@ -1491,7 +1554,7 @@ "structureModel": [ "BLMRTPIT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Mortar1Mk1" @@ -1499,7 +1562,7 @@ "width": 1 }, "Emplacement-MortarPit02": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 450, "buildPower": 200, @@ -1513,7 +1576,7 @@ "structureModel": [ "BLMRTPIT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Mortar2Mk1" @@ -1523,15 +1586,15 @@ "Emplacement-PlasmaCannon": { "armour": 10, "breadth": 1, - "buildPoints": 250, - "buildPower": 450, + "buildPoints": 400, + "buildPower": 200, "height": 1, - "hitpoints": 700, + "hitpoints": 400, "id": "Emplacement-PlasmaCannon", "name": "Plasma Cannon Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], @@ -1543,7 +1606,7 @@ "width": 1 }, "Emplacement-HeavyPlasmaLauncher": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 675, "buildPower": 525, @@ -1553,11 +1616,11 @@ "name": "Heavy Plasma Launcher Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blaamnt2.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "PlasmaHeavy" @@ -1567,15 +1630,15 @@ "Emplacement-PrisLas": { "armour": 10, "breadth": 1, - "buildPoints": 200, - "buildPower": 130, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 700, + "hitpoints": 400, "id": "Emplacement-PrisLas", "name": "Flashlight Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], @@ -1589,15 +1652,15 @@ "Emplacement-PulseLaser": { "armour": 10, "breadth": 1, - "buildPoints": 225, - "buildPower": 150, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 700, + "hitpoints": 400, "id": "Emplacement-PulseLaser", "name": "Pulse Laser Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], @@ -1611,15 +1674,15 @@ "Emplacement-Rail2": { "armour": 10, "breadth": 1, - "buildPoints": 225, - "buildPower": 150, + "buildPoints": 400, + "buildPower": 125, "height": 1, - "hitpoints": 700, + "hitpoints": 400, "id": "Emplacement-Rail2", "name": "Railgun Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], @@ -1633,15 +1696,15 @@ "Emplacement-Rail3": { "armour": 10, "breadth": 1, - "buildPoints": 250, - "buildPower": 170, + "buildPoints": 400, + "buildPower": 175, "height": 1, - "hitpoints": 700, + "hitpoints": 400, "id": "Emplacement-Rail3", "name": "Gauss Cannon Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], @@ -1653,7 +1716,7 @@ "width": 1 }, "Emplacement-Rocket06-IDF": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 500, "buildPower": 425, @@ -1663,11 +1726,11 @@ "name": "Ripple Rocket Battery", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blhowmnt.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Rocket-IDF" @@ -1675,7 +1738,7 @@ "width": 1 }, "Emplacement-RotHow": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 600, "buildPower": 475, @@ -1685,11 +1748,11 @@ "name": "Hellstorm Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHOWMNT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Howitzer03-Rot" @@ -1697,7 +1760,7 @@ "width": 1 }, "Emplacement-RotMor": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 425, "buildPower": 175, @@ -1711,7 +1774,7 @@ "structureModel": [ "BLMRTPIT.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Mortar3ROTARYMk1" @@ -1719,12 +1782,12 @@ "width": 1 }, "GuardTower-ATMiss": { - "armour": 15, + "armour": 20, "breadth": 1, - "buildPoints": 450, - "buildPower": 250, + "buildPoints": 400, + "buildPower": 175, "height": 2, - "hitpoints": 1000, + "hitpoints": 600, "id": "GuardTower-ATMiss", "name": "Scourge Missile Tower", "resistance": 150, @@ -1733,7 +1796,7 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 15, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Missile-A-T" @@ -1741,12 +1804,12 @@ "width": 1 }, "GuardTower-BeamLas": { - "armour": 15, + "armour": 20, "breadth": 1, "buildPoints": 400, - "buildPower": 200, + "buildPower": 125, "height": 2, - "hitpoints": 1000, + "hitpoints": 600, "id": "GuardTower-BeamLas", "name": "Pulse Laser Tower", "resistance": 150, @@ -1755,7 +1818,7 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 15, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Laser2PULSEMk1" @@ -1763,12 +1826,12 @@ "width": 1 }, "GuardTower-Rail1": { - "armour": 15, + "armour": 20, "breadth": 1, "buildPoints": 400, - "buildPower": 200, + "buildPower": 100, "height": 2, - "hitpoints": 1000, + "hitpoints": 600, "id": "GuardTower-Rail1", "name": "Needle Gun Tower", "resistance": 150, @@ -1777,7 +1840,7 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 15, + "thermal": 20, "type": "DEFENSE", "weapons": [ "RailGun1Mk1" @@ -1785,12 +1848,12 @@ "width": 1 }, "GuardTower-RotMg": { - "armour": 15, + "armour": 20, "breadth": 1, "buildPoints": 400, - "buildPower": 150, + "buildPower": 100, "height": 2, - "hitpoints": 1000, + "hitpoints": 600, "id": "GuardTower-RotMg", "name": "Assault Gun Tower", "resistance": 150, @@ -1799,7 +1862,7 @@ "structureModel": [ "blguardr.pie" ], - "thermal": 15, + "thermal": 20, "type": "DEFENSE", "weapons": [ "MG4ROTARYMk1" @@ -1831,8 +1894,8 @@ "GuardTower2": { "armour": 10, "breadth": 1, - "buildPoints": 300, - "buildPower": 80, + "buildPoints": 400, + "buildPower": 100, "height": 2, "hitpoints": 450, "id": "GuardTower2", @@ -1851,12 +1914,12 @@ "width": 1 }, "GuardTower3": { - "armour": 15, + "armour": 20, "breadth": 1, "buildPoints": 400, - "buildPower": 150, + "buildPower": 100, "height": 2, - "hitpoints": 1000, + "hitpoints": 600, "id": "GuardTower3", "name": "Heavy Machinegun Tower", "resistance": 150, @@ -1865,7 +1928,7 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 15, + "thermal": 20, "type": "DEFENSE", "weapons": [ "MG3Mk1" @@ -1876,14 +1939,14 @@ "armour": 15, "breadth": 1, "buildPoints": 400, - "buildPower": 150, + "buildPower": 100, "height": 2, - "hitpoints": 1000, + "hitpoints": 600, "id": "GuardTower4", "name": "Flamer Guard Tower", "resistance": 150, "sensorID": "TowerSensor", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "BLGUARDR.pie" ], @@ -1895,12 +1958,12 @@ "width": 1 }, "GuardTower5": { - "armour": 15, + "armour": 20, "breadth": 1, - "buildPoints": 350, - "buildPower": 200, + "buildPoints": 400, + "buildPower": 100, "height": 2, - "hitpoints": 1000, + "hitpoints": 600, "id": "GuardTower5", "name": "Lancer Tower", "resistance": 150, @@ -1909,7 +1972,7 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 15, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Rocket-LtA-T" @@ -1917,12 +1980,12 @@ "width": 1 }, "GuardTower6": { - "armour": 15, + "armour": 20, "breadth": 1, "buildPoints": 400, - "buildPower": 150, + "buildPower": 100, "height": 2, - "hitpoints": 1000, + "hitpoints": 600, "id": "GuardTower6", "name": "Mini-Rocket Tower", "resistance": 150, @@ -1931,7 +1994,7 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 15, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Rocket-Pod" @@ -1959,8 +2022,8 @@ "NEXUSCWall": { "armour": 15, "breadth": 1, - "buildPoints": 100, - "buildPower": 15, + "buildPoints": 125, + "buildPower": 25, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 250, @@ -1978,8 +2041,8 @@ "NEXUSWall": { "armour": 15, "breadth": 1, - "buildPoints": 100, - "buildPower": 15, + "buildPoints": 125, + "buildPower": 25, "ecmID": "ZNULLECM", "height": 2, "hitpoints": 250, @@ -2014,7 +2077,7 @@ "width": 1 }, "NX-CruiseSite": { - "armour": 24, + "armour": 20, "breadth": 1, "buildPoints": 500, "buildPower": 100, @@ -2028,7 +2091,7 @@ "structureModel": [ "blbunkms.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "width": 1 }, @@ -2044,7 +2107,7 @@ "name": "*NX-Emp-MedArtMiss-Pit*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], @@ -2067,7 +2130,7 @@ "name": "*NX-Emp-MultiArtMiss-Pit*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], @@ -2090,7 +2153,7 @@ "name": "*NX-Emp-Plasma-Pit*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blaamnt2.PIE" ], @@ -2104,16 +2167,16 @@ "NX-Tower-ATMiss": { "armour": 15, "breadth": 1, - "buildPoints": 450, - "buildPower": 250, + "buildPoints": 400, + "buildPower": 40, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1000, + "hitpoints": 300, "id": "NX-Tower-ATMiss", "name": "*NX-Tower-ATMiss*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "Blgrdnex.PIE" ], @@ -2128,15 +2191,15 @@ "armour": 15, "breadth": 1, "buildPoints": 400, - "buildPower": 200, + "buildPower": 40, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1000, + "hitpoints": 300, "id": "NX-Tower-PulseLas", "name": "*NX-Tower-PulseLas*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "Blgrdnex.PIE" ], @@ -2151,15 +2214,15 @@ "armour": 15, "breadth": 1, "buildPoints": 400, - "buildPower": 200, + "buildPower": 40, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1000, + "hitpoints": 300, "id": "NX-Tower-Rail1", "name": "*NX-Tower-Rail1*", "resistance": 150, "sensorID": "NavGunSensor", - "strength": "HARD", + "strength": "MEDIUM", "structureModel": [ "Blgrdnex.PIE" ], @@ -2171,14 +2234,14 @@ "width": 1 }, "NX-WallTower-BeamLas": { - "armour": 18, + "armour": 15, "breadth": 1, - "buildPoints": 500, - "buildPower": 250, + "buildPoints": 400, + "buildPower": 100, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1400, + "hitpoints": 400, "id": "NX-WallTower-BeamLas", "name": "*NX-WallTower-BeamLas*", "resistance": 150, @@ -2187,7 +2250,7 @@ "structureModel": [ "BLGUARD3.pie" ], - "thermal": 18, + "thermal": 15, "type": "DEFENSE", "weapons": [ "Laser3BEAMMk1" @@ -2195,14 +2258,14 @@ "width": 1 }, "NX-WallTower-Rail2": { - "armour": 18, + "armour": 15, "breadth": 1, - "buildPoints": 500, - "buildPower": 350, + "buildPoints": 400, + "buildPower": 100, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1400, + "hitpoints": 400, "id": "NX-WallTower-Rail2", "name": "*NX-WallTower-Rail2*", "resistance": 150, @@ -2211,7 +2274,7 @@ "structureModel": [ "BLGUARD3.pie" ], - "thermal": 18, + "thermal": 15, "type": "DEFENSE", "weapons": [ "RailGun2Mk1" @@ -2219,14 +2282,14 @@ "width": 1 }, "NX-WallTower-Rail3": { - "armour": 18, + "armour": 15, "breadth": 1, - "buildPoints": 500, - "buildPower": 375, + "buildPoints": 400, + "buildPower": 100, "combinesWithWall": true, "ecmID": "ZNULLECM", "height": 2, - "hitpoints": 1400, + "hitpoints": 400, "id": "NX-WallTower-Rail3", "name": "*NX-WallTower-Rail3*", "resistance": 150, @@ -2235,7 +2298,7 @@ "structureModel": [ "BLGUARD3.pie" ], - "thermal": 18, + "thermal": 15, "type": "DEFENSE", "weapons": [ "RailGun3Mk1" @@ -2261,7 +2324,7 @@ "width": 2 }, "P0-AASite-Laser": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 400, "buildPower": 275, @@ -2271,11 +2334,11 @@ "name": "Stormbringer Emplacement", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blaamnt2.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "AAGunLaser" @@ -2283,7 +2346,7 @@ "width": 1 }, "P0-AASite-SAM1": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 350, "buildPower": 275, @@ -2293,11 +2356,11 @@ "name": "Avenger SAM Site", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blaamnt1.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Missile-LtSAM" @@ -2305,7 +2368,7 @@ "width": 1 }, "P0-AASite-SAM2": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 450, "buildPower": 325, @@ -2315,11 +2378,11 @@ "name": "Vindicator SAM Site", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "Blaamnt2.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Missile-HvySAM" @@ -2327,10 +2390,10 @@ "width": 1 }, "P0-AASite-Sunburst": { - "armour": 12, + "armour": 10, "breadth": 1, "buildPoints": 300, - "buildPower": 175, + "buildPower": 225, "height": 2, "hitpoints": 400, "id": "P0-AASite-Sunburst", @@ -2341,7 +2404,7 @@ "structureModel": [ "Blaamnt1.PIE" ], - "thermal": 12, + "thermal": 10, "type": "DEFENSE", "weapons": [ "Rocket-Sunburst" @@ -2349,12 +2412,12 @@ "width": 1 }, "PillBox-Cannon6": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 340, + "buildPoints": 400, + "buildPower": 150, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "PillBox-Cannon6", "name": "Twin Assault Cannon Bunker", "resistance": 150, @@ -2363,7 +2426,7 @@ "structureModel": [ "Blcanpil.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Cannon6TwinAslt" @@ -2371,12 +2434,12 @@ "width": 1 }, "PillBox1": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 300, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "PillBox1", "name": "Heavy Machinegun Bunker", "resistance": 150, @@ -2385,7 +2448,7 @@ "structureModel": [ "blpilbox.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "MG3-Pillbox" @@ -2393,12 +2456,12 @@ "width": 1 }, "PillBox2": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 300, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "PillBox2", "name": "Twin Machinegun Bunker", "resistance": 150, @@ -2407,7 +2470,7 @@ "structureModel": [ "blpilbox.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "MG2-Pillbox" @@ -2415,12 +2478,12 @@ "width": 1 }, "PillBox3": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 300, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "PillBox3", "name": "HMG Bunker", "resistance": 150, @@ -2429,7 +2492,7 @@ "structureModel": [ "blpilbox.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "MG3-Pillbox" @@ -2437,12 +2500,12 @@ "width": 1 }, "PillBox4": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 310, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "PillBox4", "name": "Light Cannon Bunker", "resistance": 150, @@ -2451,7 +2514,7 @@ "structureModel": [ "Blcanpil.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Cannon1Mk1" @@ -2459,12 +2522,12 @@ "width": 1 }, "PillBox5": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 300, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "PillBox5", "name": "Flamer Bunker", "resistance": 150, @@ -2473,7 +2536,7 @@ "structureModel": [ "Blcanpil.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Flame1Mk1" @@ -2481,12 +2544,12 @@ "width": 1 }, "PillBox6": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 330, + "buildPoints": 400, + "buildPower": 125, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "PillBox6", "name": "Lancer Bunker", "resistance": 150, @@ -2495,7 +2558,7 @@ "structureModel": [ "Blcanpil.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Rocket-LtA-T" @@ -2503,12 +2566,12 @@ "width": 1 }, "Pillbox-RotMG": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 320, + "buildPoints": 400, + "buildPower": 125, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "Pillbox-RotMG", "name": "Rotary MG Bunker", "resistance": 150, @@ -2517,7 +2580,7 @@ "structureModel": [ "blpilbox.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "MG4ROTARY-Pillbox" @@ -2525,12 +2588,12 @@ "width": 1 }, "Plasmite-flamer-bunker": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 330, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "Plasmite-flamer-bunker", "name": "Plasmite Flamer Bunker", "resistance": 150, @@ -2539,7 +2602,7 @@ "structureModel": [ "Blcanpil.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "PlasmiteFlamer" @@ -2547,12 +2610,12 @@ "width": 1 }, "Sys-CB-Tower01": { - "armour": 17, + "armour": 20, "breadth": 1, "buildPoints": 400, - "buildPower": 175, + "buildPower": 100, "height": 3, - "hitpoints": 1000, + "hitpoints": 600, "id": "Sys-CB-Tower01", "name": "CB Tower", "resistance": 150, @@ -2561,18 +2624,18 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 17, + "thermal": 20, "type": "DEFENSE", "width": 1 }, "Sys-NEXUSLinkTOW": { - "armour": 17, + "armour": 15, "breadth": 1, - "buildPoints": 450, - "buildPower": 175, + "buildPoints": 400, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 1000, + "hitpoints": 400, "id": "Sys-NEXUSLinkTOW", "name": "*Sys-NEXUSLinkTOW*", "sensorID": "NavGunSensor", @@ -2580,7 +2643,7 @@ "structureModel": [ "Blgrdnex.PIE" ], - "thermal": 17, + "thermal": 15, "type": "DEFENSE", "weapons": [ "SpyTurret01" @@ -2588,13 +2651,13 @@ "width": 1 }, "Sys-NX-CBTower": { - "armour": 17, + "armour": 15, "breadth": 1, "buildPoints": 400, - "buildPower": 175, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 1000, + "hitpoints": 400, "id": "Sys-NX-CBTower", "name": "*Sys-NX-CBTower*", "resistance": 150, @@ -2603,18 +2666,18 @@ "structureModel": [ "Blgrdnex.PIE" ], - "thermal": 17, + "thermal": 15, "type": "DEFENSE", "width": 1 }, "Sys-NX-SensorTower": { - "armour": 17, + "armour": 15, "breadth": 1, "buildPoints": 400, - "buildPower": 175, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 1000, + "hitpoints": 400, "id": "Sys-NX-SensorTower", "name": "*Sys-NX-SensorTower*", "resistance": 150, @@ -2623,18 +2686,18 @@ "structureModel": [ "Blgrdnex.PIE" ], - "thermal": 17, + "thermal": 15, "type": "DEFENSE", "width": 1 }, "Sys-NX-VTOL-CB-Tow": { - "armour": 17, + "armour": 15, "breadth": 1, "buildPoints": 400, - "buildPower": 175, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 1000, + "hitpoints": 400, "id": "Sys-NX-VTOL-CB-Tow", "name": "*Sys-NX-VTOL-CB-Tow*", "resistance": 150, @@ -2643,18 +2706,18 @@ "structureModel": [ "Blgrdnex.PIE" ], - "thermal": 17, + "thermal": 15, "type": "DEFENSE", "width": 1 }, "Sys-NX-VTOL-RadTow": { - "armour": 17, + "armour": 15, "breadth": 1, "buildPoints": 400, - "buildPower": 175, + "buildPower": 100, "ecmID": "ZNULLECM", "height": 3, - "hitpoints": 1000, + "hitpoints": 400, "id": "Sys-NX-VTOL-RadTow", "name": "*Sys-NX-VTOL-RadTow*", "resistance": 150, @@ -2663,17 +2726,17 @@ "structureModel": [ "Blgrdnex.PIE" ], - "thermal": 17, + "thermal": 15, "type": "DEFENSE", "width": 1 }, "Sys-RadarDetector01": { - "armour": 17, + "armour": 20, "breadth": 1, "buildPoints": 400, - "buildPower": 175, + "buildPower": 100, "height": 2, - "hitpoints": 1000, + "hitpoints": 600, "id": "Sys-RadarDetector01", "name": "Radar Detector Tower", "resistance": 150, @@ -2682,14 +2745,14 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 17, + "thermal": 20, "type": "DEFENSE", "width": 1 }, "Sys-SensoTower01": { "armour": 10, "breadth": 1, - "buildPoints": 200, + "buildPoints": 300, "buildPower": 50, "height": 3, "hitpoints": 450, @@ -2706,12 +2769,12 @@ "width": 1 }, "Sys-SensoTower02": { - "armour": 17, + "armour": 20, "breadth": 1, "buildPoints": 400, - "buildPower": 175, + "buildPower": 100, "height": 3, - "hitpoints": 1000, + "hitpoints": 600, "id": "Sys-SensoTower02", "name": "Hardened Sensor Tower", "resistance": 150, @@ -2720,17 +2783,17 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 17, + "thermal": 20, "type": "DEFENSE", "width": 1 }, "Sys-SensoTowerWS": { - "armour": 17, + "armour": 20, "breadth": 1, - "buildPoints": 800, - "buildPower": 350, + "buildPoints": 600, + "buildPower": 200, "height": 3, - "hitpoints": 1000, + "hitpoints": 600, "id": "Sys-SensoTowerWS", "name": "Wide Spectrum Sensor Tower", "resistance": 150, @@ -2739,26 +2802,26 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 17, + "thermal": 20, "type": "DEFENSE", "width": 1 }, "Sys-SpyTower": { - "armour": 17, + "armour": 20, "breadth": 1, - "buildPoints": 450, - "buildPower": 175, + "buildPoints": 600, + "buildPower": 200, "height": 3, - "hitpoints": 1000, + "hitpoints": 600, "id": "Sys-SpyTower", "name": "Nexus Link Tower", "resistance": 150, - "sensorID": "TowerSensor", + "sensorID": "DefaultSensor1Mk1", "strength": "HARD", "structureModel": [ "BLGUARDR.pie" ], - "thermal": 17, + "thermal": 20, "type": "DEFENSE", "weapons": [ "SpyTurret01" @@ -2766,12 +2829,12 @@ "width": 1 }, "Sys-VTOL-CB-Tower01": { - "armour": 17, + "armour": 20, "breadth": 1, "buildPoints": 400, - "buildPower": 175, + "buildPower": 100, "height": 3, - "hitpoints": 1000, + "hitpoints": 600, "id": "Sys-VTOL-CB-Tower01", "name": "VTOL CB Tower", "resistance": 150, @@ -2780,17 +2843,17 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 17, + "thermal": 20, "type": "DEFENSE", "width": 1 }, "Sys-VTOL-RadarTower01": { - "armour": 17, + "armour": 20, "breadth": 1, "buildPoints": 400, - "buildPower": 175, + "buildPower": 100, "height": 3, - "hitpoints": 1000, + "hitpoints": 600, "id": "Sys-VTOL-RadarTower01", "name": "VTOL Strike Tower", "resistance": 150, @@ -2799,20 +2862,20 @@ "structureModel": [ "BLGUARDR.pie" ], - "thermal": 17, + "thermal": 20, "type": "DEFENSE", "width": 1 }, "TankTrapC": { "armour": 10, "breadth": 1, - "buildPoints": 40, - "buildPower": 5, + "buildPoints": 200, + "buildPower": 15, "height": 1, "hitpoints": 200, "id": "TankTrapC", "name": "Tank Traps", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "MITRAP2.PIE" ], @@ -2821,12 +2884,12 @@ "width": 1 }, "Tower-Projector": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 320, + "buildPoints": 400, + "buildPower": 100, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "Tower-Projector", "name": "Inferno Bunker", "resistance": 150, @@ -2835,7 +2898,7 @@ "structureModel": [ "Blcanpil.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Flame2" @@ -2843,12 +2906,12 @@ "width": 1 }, "Tower-RotMg": { - "armour": 24, + "armour": 20, "breadth": 1, - "buildPoints": 600, - "buildPower": 310, + "buildPoints": 100, + "buildPower": 125, "height": 1, - "hitpoints": 1200, + "hitpoints": 700, "id": "Tower-RotMg", "name": "Assault Gun Emplacement", "resistance": 150, @@ -2857,7 +2920,7 @@ "structureModel": [ "blcanpil.pie" ], - "thermal": 24, + "thermal": 20, "type": "DEFENSE", "weapons": [ "MG4ROTARYMk1" @@ -2865,17 +2928,17 @@ "width": 1 }, "Tower-VulcanCan": { - "armour": 15, + "armour": 20, "breadth": 1, - "buildPoints": 400, - "buildPower": 200, + "buildPoints": 100, + "buildPower": 225, "height": 2, - "hitpoints": 1000, + "hitpoints": 600, "id": "Tower-VulcanCan", "name": "Assault Cannon Guard Tower", "resistance": 150, - "sensorID": "TowerSensor", - "strength": "HARD", + "sensorID": "DefaultSensor1Mk1", + "strength": "MEDIUM", "structureModel": [ "BLGUARDR.PIE" ], @@ -2905,13 +2968,13 @@ "width": 2 }, "Wall-RotMg": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 225, + "buildPoints": 400, + "buildPower": 125, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "Wall-RotMg", "name": "Assault Gun Hardpoint", "resistance": 150, @@ -2920,7 +2983,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "MG4ROTARYMk1" @@ -2928,13 +2991,13 @@ "width": 1 }, "Wall-VulcanCan": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 275, + "buildPoints": 400, + "buildPower": 125, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "Wall-VulcanCan", "name": "Assault Cannon Hardpoint", "resistance": 150, @@ -2943,7 +3006,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Cannon5VulcanMk1" @@ -2951,13 +3014,13 @@ "width": 1 }, "WallTower-Atmiss": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 350, + "buildPoints": 400, + "buildPower": 200, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-Atmiss", "name": "Scourge Missile Hardpoint", "resistance": 150, @@ -2966,7 +3029,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Missile-A-T" @@ -2974,13 +3037,13 @@ "width": 1 }, "WallTower-DoubleAAGun": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, + "buildPoints": 400, "buildPower": 225, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-DoubleAAGun", "name": "AA Cyclone Flak Cannon Hardpoint", "resistance": 150, @@ -2989,7 +3052,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "AAGun2Mk1" @@ -2997,13 +3060,13 @@ "width": 1 }, "WallTower-DoubleAAGun02": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 550, + "buildPoints": 400, "buildPower": 325, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-DoubleAAGun02", "name": "AA Tornado Flak Cannon Hardpoint", "resistance": 150, @@ -3012,7 +3075,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "AAGun2Mk1Quad" @@ -3020,13 +3083,13 @@ "width": 1 }, "WallTower-EMP": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 300, + "buildPoints": 400, + "buildPower": 200, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-EMP", "name": "EMP Cannon Hardpoint", "resistance": 150, @@ -3035,7 +3098,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "EMP-Cannon" @@ -3043,13 +3106,13 @@ "width": 1 }, "WallTower-HPVcannon": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 275, + "buildPoints": 400, + "buildPower": 150, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-HPVcannon", "name": "Hyper Velocity Cannon Hardpoint", "resistance": 150, @@ -3058,7 +3121,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Cannon4AUTOMk1" @@ -3066,13 +3129,13 @@ "width": 1 }, "WallTower-HvATrocket": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 300, + "buildPoints": 400, + "buildPower": 150, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-HvATrocket", "name": "Tank Killer Hardpoint", "resistance": 150, @@ -3081,7 +3144,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Rocket-HvyA-T" @@ -3089,21 +3152,21 @@ "width": 1 }, "WallTower-Projector": { - "armour": 10, + "armour": 20, "breadth": 1, - "buildPoints": 200, - "buildPower": 110, + "buildPoints": 400, + "buildPower": 125, "height": 1, - "hitpoints": 700, + "hitpoints": 800, "id": "WallTower-Projector", "name": "Inferno Hardpoint", "resistance": 150, "sensorID": "DefaultSensor1Mk1", - "strength": "MEDIUM", + "strength": "HARD", "structureModel": [ "BLHARDPT.PIE" ], - "thermal": 10, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Flame2" @@ -3111,13 +3174,13 @@ "width": 1 }, "WallTower-PulseLas": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 275, + "buildPoints": 400, + "buildPower": 150, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-PulseLas", "name": "Pulse Laser Hardpoint", "resistance": 150, @@ -3126,7 +3189,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Laser2PULSEMk1" @@ -3134,13 +3197,13 @@ "width": 1 }, "WallTower-QuadRotAAGun": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 525, + "buildPoints": 400, "buildPower": 275, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-QuadRotAAGun", "name": "Whirlwind Hardpoint", "resistance": 150, @@ -3149,7 +3212,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "QuadRotAAGun" @@ -3157,13 +3220,13 @@ "width": 1 }, "WallTower-Rail2": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 350, + "buildPoints": 400, + "buildPower": 175, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-Rail2", "name": "Rail Gun Hardpoint", "resistance": 150, @@ -3172,7 +3235,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "RailGun2Mk1" @@ -3180,13 +3243,13 @@ "width": 1 }, "WallTower-Rail3": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 375, + "buildPoints": 400, + "buildPower": 225, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-Rail3", "name": "Gauss Cannon Hardpoint", "resistance": 150, @@ -3195,7 +3258,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "RailGun3Mk1" @@ -3203,13 +3266,13 @@ "width": 1 }, "WallTower-SamHvy": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 550, + "buildPoints": 400, "buildPower": 375, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-SamHvy", "name": "Vindicator Hardpoint", "resistance": 150, @@ -3218,7 +3281,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Missile-HvySAM" @@ -3226,13 +3289,13 @@ "width": 1 }, "WallTower-SamSite": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 550, + "buildPoints": 400, "buildPower": 325, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-SamSite", "name": "Avenger Hardpoint", "resistance": 150, @@ -3241,7 +3304,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Missile-LtSAM" @@ -3249,13 +3312,13 @@ "width": 1 }, "WallTower-TwinAssaultGun": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 250, + "buildPoints": 400, + "buildPower": 125, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower-TwinAssaultGun", "name": "Twin Assault Gun Hardpoint", "resistance": 150, @@ -3264,7 +3327,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "MG5TWINROTARY" @@ -3272,13 +3335,13 @@ "width": 1 }, "WallTower01": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 200, + "buildPoints": 400, + "buildPower": 100, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower01", "name": "Heavy Machinegun Hardpoint", "resistance": 150, @@ -3287,7 +3350,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "MG3Mk1" @@ -3295,13 +3358,13 @@ "width": 1 }, "WallTower02": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 200, + "buildPoints": 400, + "buildPower": 100, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower02", "name": "Light Cannon Hardpoint", "resistance": 150, @@ -3310,7 +3373,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Cannon1Mk1" @@ -3318,13 +3381,13 @@ "width": 1 }, "WallTower03": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 225, + "buildPoints": 400, + "buildPower": 125, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower03", "name": "Medium Cannon Hardpoint", "resistance": 150, @@ -3333,7 +3396,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Cannon2A-TMk1" @@ -3341,13 +3404,13 @@ "width": 1 }, "WallTower04": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 250, + "buildPoints": 400, + "buildPower": 150, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower04", "name": "Heavy Cannon Hardpoint", "resistance": 150, @@ -3356,7 +3419,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Cannon375mmMk1" @@ -3364,13 +3427,13 @@ "width": 1 }, "WallTower05": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 200, + "buildPoints": 400, + "buildPower": 100, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower05", "name": "Flamer Hardpoint", "resistance": 150, @@ -3379,7 +3442,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Flame1Mk1" @@ -3387,13 +3450,13 @@ "width": 1 }, "WallTower06": { - "armour": 18, + "armour": 20, "breadth": 1, - "buildPoints": 500, - "buildPower": 225, + "buildPoints": 400, + "buildPower": 125, "combinesWithWall": true, "height": 2, - "hitpoints": 1400, + "hitpoints": 800, "id": "WallTower06", "name": "Lancer Hardpoint", "resistance": 150, @@ -3402,7 +3465,7 @@ "structureModel": [ "BLGUARD1.pie" ], - "thermal": 18, + "thermal": 20, "type": "DEFENSE", "weapons": [ "Rocket-LtA-T" @@ -3427,7 +3490,7 @@ "width": 3 }, "X-Super-Cannon": { - "armour": 18, + "armour": 15, "breadth": 2, "buildPoints": 2000, "buildPower": 1000, @@ -3442,18 +3505,18 @@ "structureModel": [ "STWPFCAN.PIE" ], - "thermal": 18, - "type": "GENERIC", + "thermal": 15, + "type": "FORTRESS", "weapons": [ "CannonSuper" ], "width": 2 }, "X-Super-MassDriver": { - "armour": 18, + "armour": 15, "breadth": 2, "buildPoints": 2000, - "buildPower": 1600, + "buildPower": 1800, "combinesWithWall": true, "height": 3, "hitpoints": 3200, @@ -3465,18 +3528,18 @@ "structureModel": [ "STWPFCAN.PIE" ], - "thermal": 18, - "type": "GENERIC", + "thermal": 15, + "type": "FORTRESS", "weapons": [ "MassDriver" ], "width": 2 }, "X-Super-Missile": { - "armour": 18, + "armour": 15, "breadth": 2, "buildPoints": 2000, - "buildPower": 1800, + "buildPower": 1600, "combinesWithWall": true, "height": 3, "hitpoints": 3200, @@ -3488,15 +3551,15 @@ "structureModel": [ "STWPFCAN.PIE" ], - "thermal": 18, - "type": "GENERIC", + "thermal": 15, + "type": "FORTRESS", "weapons": [ "MissileSuper" ], "width": 2 }, "X-Super-Rocket": { - "armour": 18, + "armour": 15, "breadth": 2, "buildPoints": 2000, "buildPower": 1250, @@ -3511,8 +3574,8 @@ "structureModel": [ "STWPFCAN.PIE" ], - "thermal": 18, - "type": "GENERIC", + "thermal": 15, + "type": "FORTRESS", "weapons": [ "RocketSuper" ], diff --git a/data/mp/stats/structuremodifier.json b/data/mp/stats/structuremodifier.json index 48a1a3dce38..361c1d25379 100644 --- a/data/mp/stats/structuremodifier.json +++ b/data/mp/stats/structuremodifier.json @@ -1,27 +1,27 @@ { "ALL ROUNDER": { - "BUNKER": 65, + "BUNKER": 75, "HARD": 100, "MEDIUM": 100, - "SOFT": 110 + "SOFT": 130 }, "ANTI PERSONNEL": { - "BUNKER": 55, + "BUNKER": 50, "HARD": 40, "MEDIUM": 65, - "SOFT": 75 + "SOFT": 160 }, "ANTI TANK": { - "BUNKER": 20, + "BUNKER": 60, "HARD": 25, "MEDIUM": 50, - "SOFT": 60 + "SOFT": 75 }, "ARTILLERY ROUND": { "BUNKER": 20, "HARD": 100, "MEDIUM": 120, - "SOFT": 130 + "SOFT": 200 }, "BUNKER BUSTER": { "BUNKER": 400, @@ -33,6 +33,6 @@ "BUNKER": 300, "HARD": 10, "MEDIUM": 60, - "SOFT": 70 + "SOFT": 150 } } diff --git a/data/mp/stats/weapons.json b/data/mp/stats/weapons.json index 03465362bad..8c1c484f33b 100644 --- a/data/mp/stats/weapons.json +++ b/data/mp/stats/weapons.json @@ -1846,7 +1846,7 @@ "minElevation": -60, "minimumDamage": 33, "missGfx": "FXDIRTsp.PIE", - "model": "cy_gun.pie", + "model": "cy_agun.pie", "mountModel": "Cybody.pie", "movement": "DIRECT", "muzzleGfx": "FXLMgun.PIE", @@ -3183,8 +3183,6 @@ "lightWorld": 1, "longHit": 65, "longRange": 1920, - "maxElevation": 90, - "minElevation": -30, "minRange": 256, "minimumDamage": 33, "missGfx": "FXMExp.PIE", @@ -3561,11 +3559,11 @@ "flightGfx": "FXLProj.PIE", "flightSpeed": 700, "hitGfx": "FXMETHIT.PIE", - "hitpoints": 125, + "hitpoints": 205, "id": "PlasmiteFlamer", "lightWorld": 1, - "longRange": 512, - "longHit": 50, + "longRange": 640, + "longHit": 75, "maxElevation": 90, "minElevation": -60, "minRange": 64, @@ -3582,8 +3580,8 @@ "periodicalDamageRadius": 60, "periodicalDamageTime": 50, "rotate": 180, - "shortHit": 75, - "shortRange": 384, + "shortHit": 90, + "shortRange": 512, "waterGfx": "FXMETHIT.PIE", "weaponClass": "HEAT", "weaponEffect": "FLAMER", @@ -4100,8 +4098,6 @@ "lightWorld": 1, "longHit": 55, "longRange": 1280, - "maxElevation": 90, - "minElevation": -60, "minRange": 128, "minimumDamage": 33, "missGfx": "FXMNExp.PIE", diff --git a/data/mp/structs/stwpfcan_col.pie b/data/mp/structs/stwpfcan_col.pie new file mode 100644 index 00000000000..309f0d1a1d5 --- /dev/null +++ b/data/mp/structs/stwpfcan_col.pie @@ -0,0 +1,161 @@ +PIE 2 +TYPE 10200 +TEXTURE 0 page-12-player-buildings.png 0 0 +LEVELS 1 +LEVEL 1 +POINTS 66 + -38 0 128 + -88 0 128 + -77 77 128 + -50 77 128 + -128 77 50 + -89 101 37 + -89 101 91 + -128 77 76 + -36 101 91 + -89 0 91 + -36 0 91 + -128 0 38 + -89 0 37 + -128 0 89 + -88 0 -129 + -38 0 -129 + -50 77 -129 + -77 77 -129 + -128 77 -78 + -89 101 -91 + -89 101 -37 + -128 77 -52 + -37 101 -91 + -128 0 -90 + -89 0 -91 + -89 0 -37 + -128 0 -39 + -37 0 -91 + 40 0 -129 + 90 0 -129 + 78 77 -129 + 51 77 -129 + 129 0 -90 + 129 0 -39 + 129 77 -51 + 129 77 -78 + 91 101 -91 + 39 101 -91 + 91 101 -37 + 91 0 -37 + 91 0 -91 + 39 0 -91 + 90 0 128 + 40 0 128 + 51 77 128 + 78 77 128 + 129 0 38 + 129 0 89 + 129 77 76 + 129 77 50 + 91 101 91 + 91 101 37 + 39 101 91 + 39 0 91 + 91 0 91 + 91 0 37 + 40 101 91 + 40 0 91 + 0 101 -91 + 91 101 0 + -89 101 0 + 0 101 91 + 0 127 -80 + -77 127 0 + 78 127 0 + 0 127 77 +POLYGONS 86 + 200 3 3 2 1 140 172 161 172 170 208 + 200 3 3 1 0 140 172 170 208 130 208 + 200 3 7 6 5 0 228 56 225 56 238 + 200 3 7 5 4 0 228 56 238 0 235 + 200 3 3 8 6 0 228 56 225 56 238 + 200 3 3 6 2 0 228 56 238 0 235 + 200 3 2 6 9 130 172 170 172 151 208 + 200 3 2 9 1 130 172 151 208 130 208 + 200 3 8 3 0 130 172 170 172 170 208 + 200 3 8 0 10 130 172 170 208 150 208 + 200 3 5 12 11 170 172 151 208 130 208 + 200 3 11 4 5 130 208 130 172 170 172 + 200 3 6 7 13 130 172 170 172 170 208 + 200 3 6 13 9 130 172 170 208 150 208 + 200 3 7 4 11 140 172 161 172 170 208 + 200 3 7 11 13 140 172 170 208 130 208 + 200 3 17 16 15 140 172 161 172 170 208 + 200 3 17 15 14 140 172 170 208 130 208 + 200 3 21 20 19 0 228 56 225 56 238 + 200 3 21 19 18 0 228 56 238 0 235 + 200 3 17 19 22 0 228 56 225 56 238 + 200 3 17 22 16 0 228 56 238 0 235 + 200 3 19 24 23 170 172 151 208 130 208 + 200 3 23 18 19 130 208 130 172 170 172 + 200 3 20 21 26 130 172 170 172 170 208 + 200 3 20 26 25 130 172 170 208 150 208 + 200 3 21 18 23 140 172 161 172 170 208 + 200 3 21 23 26 140 172 170 208 130 208 + 200 3 22 27 15 170 172 151 208 130 208 + 200 3 15 16 22 130 208 130 172 170 172 + 200 3 19 17 14 130 172 170 172 170 208 + 200 3 19 14 24 130 172 170 208 150 208 + 200 3 31 30 29 140 172 161 172 170 208 + 200 3 31 29 28 140 172 170 208 130 208 + 200 3 35 34 33 140 172 161 172 170 208 + 200 3 35 33 32 140 172 170 208 130 208 + 200 3 31 37 36 0 228 56 225 56 238 + 200 3 31 36 30 0 228 56 238 0 235 + 200 3 35 36 38 0 228 56 225 56 238 + 200 3 35 38 34 0 228 56 238 0 235 + 200 3 34 38 39 130 172 170 172 151 208 + 200 3 34 39 33 130 172 151 208 130 208 + 200 3 36 35 32 130 172 170 172 170 208 + 200 3 36 32 40 130 172 170 208 150 208 + 200 3 36 40 29 170 172 151 208 130 208 + 200 3 29 30 36 130 208 130 172 170 172 + 200 3 37 31 28 130 172 170 172 170 208 + 200 3 37 28 41 130 172 170 208 150 208 + 200 3 45 44 43 140 172 161 172 170 208 + 200 3 45 43 42 140 172 170 208 130 208 + 200 3 49 48 47 140 172 161 172 170 208 + 200 3 49 47 46 140 172 170 208 130 208 + 200 3 49 51 50 0 228 56 225 56 238 + 200 3 49 50 48 0 228 56 238 0 235 + 200 3 45 50 52 0 228 56 225 56 238 + 200 3 45 52 44 0 228 56 238 0 235 + 200 3 44 52 53 130 172 170 172 151 208 + 200 3 44 53 43 130 172 151 208 130 208 + 200 3 50 45 42 130 172 170 172 170 208 + 200 3 50 42 54 130 172 170 208 150 208 + 200 3 48 50 54 130 172 170 172 151 208 + 200 3 48 54 47 130 172 151 208 130 208 + 200 3 51 49 46 130 172 170 172 170 208 + 200 3 51 46 55 130 172 170 208 150 208 + 200 3 37 41 27 170 171 170 208 130 208 + 200 3 37 27 22 170 171 130 208 130 171 + 200 3 20 25 12 170 171 170 208 130 208 + 200 3 20 12 5 170 171 130 208 130 171 + 200 3 51 55 39 170 171 170 208 130 208 + 200 3 51 39 38 170 171 130 208 130 171 + 200 3 57 56 8 130 208 130 171 170 171 + 200 3 57 8 10 130 208 170 171 170 208 + 200 3 59 36 58 170 172 170 208 130 208 + 200 3 60 58 19 130 172 170 208 130 208 + 200 3 6 61 60 130 172 170 172 130 208 + 200 3 59 61 50 170 208 130 172 170 172 + 200 3 63 62 58 0 224 56 224 56 239 + 200 3 63 58 60 0 224 56 239 0 239 + 200 3 62 64 59 56 224 0 224 0 239 + 200 3 62 59 58 56 224 0 239 56 239 + 200 3 64 65 61 56 224 0 224 0 239 + 200 3 64 61 59 56 224 0 239 56 239 + 200 3 65 63 60 0 224 56 224 56 239 + 200 3 65 60 61 0 224 56 239 0 239 + 200 3 65 64 62 226 174 255 174 255 204 + 200 3 65 62 63 226 174 255 204 226 204 +CONNECTORS 1 + 0 0 129 diff --git a/data/mp/structs/stwpfcan_nex.pie b/data/mp/structs/stwpfcan_nex.pie new file mode 100644 index 00000000000..5bcf9b4830e --- /dev/null +++ b/data/mp/structs/stwpfcan_nex.pie @@ -0,0 +1,153 @@ +PIE 2 +TYPE 10200 +TEXTURE 0 page-12-player-buildings.png 0 0 +LEVELS 1 +LEVEL 1 +POINTS 62 + -38 0 128 + -88 0 128 + -77 77 128 + -50 77 128 + -128 77 50 + -89 101 37 + -89 101 91 + -128 77 76 + -36 101 91 + -36 0 91 + -128 0 38 + -89 0 37 + -128 0 89 + -88 0 -129 + -38 0 -129 + -50 77 -129 + -77 77 -129 + -128 77 -78 + -89 101 -91 + -89 101 -37 + -128 77 -52 + -37 101 -91 + -128 0 -90 + -89 0 -37 + -128 0 -39 + -37 0 -91 + 40 0 -129 + 90 0 -129 + 78 77 -129 + 51 77 -129 + 129 0 -90 + 129 0 -39 + 129 77 -51 + 129 77 -78 + 91 101 -91 + 39 101 -91 + 91 101 -37 + 91 0 -37 + 39 0 -91 + 90 0 128 + 40 0 128 + 51 77 128 + 78 77 128 + 129 0 38 + 129 0 89 + 129 77 76 + 129 77 50 + 91 101 91 + 91 101 37 + 39 101 91 + 39 0 91 + 91 0 37 + 40 101 91 + 40 0 91 + 0 101 -91 + 91 101 0 + -89 101 0 + 0 101 91 + 0 127 -80 + -77 127 0 + 78 127 0 + 0 127 77 +POLYGONS 82 + 200 3 3 2 1 180 172 201 172 210 208 + 200 3 3 1 0 180 172 210 208 170 208 + 200 3 7 6 5 0 228 56 225 56 238 + 200 3 7 5 4 0 228 56 238 0 235 + 200 3 3 8 6 0 228 56 225 56 238 + 200 3 3 6 2 0 228 56 238 0 235 + 200 3 8 3 0 170 172 210 172 210 208 + 200 3 8 0 9 170 172 210 208 190 208 + 200 3 5 11 10 210 172 191 208 170 208 + 200 3 10 4 5 170 208 170 172 210 172 + 200 3 7 4 10 180 172 201 172 210 208 + 200 3 7 10 12 180 172 210 208 170 208 + 200 3 16 15 14 180 172 201 172 210 208 + 200 3 16 14 13 180 172 210 208 170 208 + 200 3 20 19 18 0 228 56 225 56 238 + 200 3 20 18 17 0 228 56 238 0 235 + 200 3 16 18 21 0 228 56 225 56 238 + 200 3 16 21 15 0 228 56 238 0 235 + 200 3 19 20 24 170 172 210 172 210 208 + 200 3 19 24 23 170 172 210 208 190 208 + 200 3 20 17 22 180 172 201 172 210 208 + 200 3 20 22 24 180 172 210 208 170 208 + 200 3 21 25 14 210 172 191 208 170 208 + 200 3 14 15 21 170 208 170 172 210 172 + 200 3 29 28 27 180 172 201 172 210 208 + 200 3 29 27 26 180 172 210 208 170 208 + 200 3 33 32 31 180 172 201 172 210 208 + 200 3 33 31 30 180 172 210 208 170 208 + 200 3 29 35 34 0 228 56 225 56 238 + 200 3 29 34 28 0 228 56 238 0 235 + 200 3 33 34 36 0 228 56 225 56 238 + 200 3 33 36 32 0 228 56 238 0 235 + 200 3 32 36 37 170 172 210 172 191 208 + 200 3 32 37 31 170 172 191 208 170 208 + 200 3 35 29 26 170 172 210 172 210 208 + 200 3 35 26 38 170 172 210 208 190 208 + 200 3 42 41 40 180 172 201 172 210 208 + 200 3 42 40 39 180 172 210 208 170 208 + 200 3 46 45 44 180 172 201 172 210 208 + 200 3 46 44 43 180 172 210 208 170 208 + 200 3 46 48 47 0 228 56 225 56 238 + 200 3 46 47 45 0 228 56 238 0 235 + 200 3 42 47 49 0 228 56 225 56 238 + 200 3 42 49 41 0 228 56 238 0 235 + 200 3 41 49 50 170 172 210 172 191 208 + 200 3 41 50 40 170 172 191 208 170 208 + 200 3 48 46 43 170 172 210 172 210 208 + 200 3 48 43 51 170 172 210 208 190 208 + 200 3 35 38 25 210 171 210 208 170 208 + 200 3 35 25 21 210 171 170 208 170 171 + 200 3 19 23 11 210 171 210 208 170 208 + 200 3 19 11 5 210 171 170 208 170 171 + 200 3 48 51 37 210 171 210 208 170 208 + 200 3 48 37 36 210 171 170 208 170 171 + 200 3 53 52 8 170 208 170 171 210 171 + 200 3 53 8 9 170 208 210 171 210 208 + 200 3 55 34 54 170 208 170 172 210 172 + 200 3 56 54 18 210 208 170 172 210 172 + 200 3 6 57 56 170 172 210 172 170 208 + 200 3 55 57 47 210 208 170 172 210 172 + 200 3 59 58 54 0 224 56 224 56 239 + 200 3 59 54 56 0 224 56 239 0 239 + 200 3 58 60 55 56 224 0 224 0 239 + 200 3 58 55 54 56 224 0 239 56 239 + 200 3 60 61 57 56 224 0 224 0 239 + 200 3 60 57 55 56 224 0 239 56 239 + 200 3 61 59 56 0 224 56 224 56 239 + 200 3 61 56 57 0 224 56 239 0 239 + 200 3 61 60 58 226 174 255 174 255 204 + 200 3 61 58 59 226 174 255 204 226 204 + 200 3 28 34 33 0 223 56 231 0 239 + 200 3 17 18 16 0 223 56 231 0 239 + 200 3 45 47 42 0 223 56 231 0 239 + 200 3 2 6 7 0 223 56 231 0 239 + 200 3 30 27 28 206 208 178 208 174 172 + 200 3 16 13 22 210 172 206 208 178 208 + 200 3 12 1 2 206 208 178 208 174 172 + 200 3 44 45 42 178 208 174 172 210 172 + 200 3 30 28 33 206 208 174 172 210 172 + 200 3 16 22 17 210 172 178 208 174 172 + 200 3 12 2 7 206 208 174 172 210 172 + 200 3 44 42 39 178 208 210 172 206 208 +CONNECTORS 1 + 0 0 129 diff --git a/data/terrain_overrides/high b/data/terrain_overrides/high index ed6bef73723..67d4590fb62 160000 --- a/data/terrain_overrides/high +++ b/data/terrain_overrides/high @@ -1 +1 @@ -Subproject commit ed6bef73723070aba7f81e130a7bf97297a728a4 +Subproject commit 67d4590fb62eb60907a3cdc24f2aa112bebfb9f8 diff --git a/doc/BriefAndProximityFormat.md b/doc/BriefAndProximityFormat.md new file mode 100644 index 00000000000..4399c90080d --- /dev/null +++ b/doc/BriefAndProximityFormat.md @@ -0,0 +1,48 @@ +# Briefing and Proximity file formats + +In releases beyond the 4.5 series, the campaign brief and Proximity files are now in a more readable format. + +# Proximity + +Example: +```json +{ + "C1A_BASE0": { + "audio": "pcv390.ogg", + "message": "BARBASE_MSG", + "type": 0, + "x": 3904, + "y": 4672, + "z": 0 + } +} +``` + +Each Proximity message must have a unique ID. This ID will be what can be referenced in scripts. Various key-value pairs in one contain: +- audio: The audio file associated with this Proximity blip when it gets clicked. Either a string to an audio file, or 0 to not use a sound. +- message: A translated string reference that will print a message when the Proximity blip is clicked on. An array of references is supported. +- type: What type of Proximity blip this is (0 - ENEMY|RED, 1 - RESOURCE|BLUE, 2 - ARTIFACT|GREEN). +- x, y, z: Coordinates in World Units (128 World Units = 1 Tile) where the Proximity blip will appear. + +# Briefing + +Example: +```json +{ + "video0000": { + "name": "MB1A_MSG", + "sequences": [ + { "loop": 1, "subtitles": "TRANS_MSG1", "video": "brfcom.ogg" }, + { "loop": 0, "subtitles": ["CAM1A_MSG1", "CAM1A_MSG2", "CAM1A_MSG3"], "video": "cam1/cam1ascv.ogg" } + ] + } +} +``` + +Each video sequence should start with something simple like "video..." or something else at your discretion. Order here does not matter. +Within each sequence, there will be two values: +- name: The unique view data name ID. This will be used as a reference for scripts to invoke to start a video subset. +- sequences: an array of objects (order matters!) containing variables about each sub-video: + - loop: An integer between 0-1 to loop the entire video until its audio stops playing. Will always display subtitles every frame if set to 1. + - subtitles: String or array of string translation references for the video. These are added to the Intel menu icon text messages. + - video: The actual video file to display. Note the directory starts at "data/[base|mp]/sequences/". diff --git a/doc/CampaignMods.md b/doc/CampaignMods.md index b920d46f388..4b3238afd8b 100644 --- a/doc/CampaignMods.md +++ b/doc/CampaignMods.md @@ -4,7 +4,6 @@ In version 4.5.0, a revised process for packaging, distributing, and loading cam - [Basic Structure](#basic-structure) - [mod-info.json](#mod-infojson) - - [JSON Localized String](#json-localized-string) - [Tweak Options](#tweak-options) - [camTweakOptions](#camtweakoptions) - [customTweakOptions](#customtweakoptions) @@ -35,7 +34,7 @@ It may also optionally contain a `mod-banner.png` image, which is used as the ba - **license**: (string) An SPDX License Identifier string, specifying the license for the mod (examples: `"CC0-1.0"`, `"GPL-2.0-or-later"`, `"CC-BY-4.0 OR GPL-2.0-or-later"`) - **minVersionSupported**: (string) The minimum version of Warzone 2100 the mod supports (example: `"4.5.0"`) - **maxVersionTested**: (string) The maximum version of Warzone 2100 that the mod has been tested with -- **description**: [(JSON Localized String)](#json-localized-string) A description of the mod +- **description**: [(JSON Localized String)](WZJsonLocalizedString.md) A description of the mod - updatesURL: (string) A URL to which a user can browse to obtain a newer version of your mod, if available - We recommend hosting your mod on GitHub, and using GitHub releases. ex: `"https://github.com///releases/latest"` - **campaigns**: (array) An array of campaign json file names (which will be loaded from `campaigns/` in your mod) @@ -53,29 +52,6 @@ It may also optionally contain a `mod-banner.png` image, which is used as the ba - camTweakOptions: (object) [See Tweak Options](#tweak-options) - customTweakOptions: (object) [See Tweak Options](#tweak-options) -## JSON Localized String - -The `mod-info.json` file supports providing translations for certain textual information. - -Anything that's listed as `(JSON Localized String)` may either be: - -- An (object) with a key for each language code and a (string) value that is the translation - - Example: - ```json - "description": { - "en": "A description of the mod in English." - "de": "The same description, but in German." - } - ``` - - Note: - - The base / default language for the game is English (`"en"`). We strongly recommend that you _always_ provide an `en` translation of all localized strings. - - The language codes correspond to the ones supported by the game (see the `.po` files in: https://github.com/Warzone2100/warzone2100/tree/master/po) -- A (string) value (_not recommended, does not provide any translations_) - - Example: - ```json - "description": "A description of the mod in English, and only English." - ``` - ## Tweak Options Customizable options can be suppled in the `mod-info.json` file which are: @@ -141,8 +117,8 @@ Example: - Recommendation: Use a prefix in the "id" value that's related to your mod, to avoid any naming conflicts - **type** (string) Must be `"bool"` - **default**: The default value for the option -- **displayName**: [(JSON Localized String)](#json-localized-string) A short name for the tweak -- **description**: [(JSON Localized String)](#json-localized-string) A more detailed description of what the option controls / does +- **displayName**: [(JSON Localized String)](WZJsonLocalizedString.md) A short name for the tweak +- **description**: [(JSON Localized String)](WZJsonLocalizedString.md) A more detailed description of what the option controls / does ### Accessing Tweak Options from scripts diff --git a/doc/CmdInterface.md b/doc/CmdInterface.md index d5d2fa813b1..8552f6c41cc 100644 --- a/doc/CmdInterface.md +++ b/doc/CmdInterface.md @@ -83,9 +83,13 @@ If state of interface buffer is unknown and/or corrupted, interface can send a f * `admin remove `\ Removes admin from room admins list by public key or hash -* `join `\ +* `join `\ Approve or reject an attempt to join the game.\ Pass in the `` received in a `WZEVENT: join approval needed` event. + - `` + - `approvespec` approves the join but forces the client to spectators, and prevents them from switching back to players + - `` is `LOBBY_ERROR_TYPES` enum (use 7 to avoid double-screening client with "you are kicked") + - `` is an (optional) custom rejection message that will be displayed on the client * `ban ip `\ Find and kick (with adding to ip banlist) player with specified ip diff --git a/doc/GuideTopics.md b/doc/GuideTopics.md new file mode 100644 index 00000000000..bf39b3f5eba --- /dev/null +++ b/doc/GuideTopics.md @@ -0,0 +1,154 @@ +# Warzone 2100 Guide Topics JSON + +In version 4.5.0, an in-game guide was introduced. + +Guide topics can be specified using a JSON schema and a hierarchical file layout. + +- [Basic Layout](#basic-layout) + - [Files](#files) + - [Topic IDs](#topic-ids) + - [Categories & Hierarchy](#categories--hierarchy) + - [Translatable Strings](#translatable-strings) +- [Guide Topics JSON](#guide-topics-json) + - [Guide Topic Visuals](#guide-topic-visuals) + - [Stat Visual](#stat-visual) + - [Droid Template Visual](#droid-template-visual) + - [Reticule Button Image](#reticule-button-image) + - [Secondary Unit Order Buttons](#secondary-unit-order-buttons) + - [Example JSON](#example-json) +- [Displaying Guide Topics](#displaying-guide-topics) + +# Basic Layout + +## Files + +Guide topic JSON files are located underneath the `guidetopics/` folder in WZ's virtual filesystem. + +- The base guide topics are in this repo at: [/data/base/guidetopics/](/data/base/guidetopics/) + - These end up in the `base.wz` inside a `guidetopics/` folder +- A mod can add guide topics in a root `guidetopics/` folder in its package + +## Topic IDs + +The path to a guide topic underneath the `guidetopics/` folder corresponds to its `id`. + +> Example: \ +> A guide topic with id `wz2100::general::backstory` would correspond to a JSON file located at `guidetopics/wz2100/general/backstory.json` + +## Categories & Hierarchy + +Hierarchy can be established by making any folder into an official level / category via an `_index.json` category guide topic. + +This special file will establish a new level of hierarchy in the topics display, and is expected to have a guide topic id that matches the folder path. +> i.e. A category guide topic of `wz2100::general` would correspond to a category JSON file located at `guidetopics/wz2100/general/_index.json` + +Category guide topics are automatically loaded when a contained topic is loaded. + +## Translatable Strings + +Several fields of the Guide Topic JSON are [WZ JSON Localized Strings](WZJsonLocalizedString.md). +- For guide topics bundled with the game: + - These should generally just be normal JSON string values _in WZ's "base" language (English)_ + - They will automatically be included in the `warzone2100_guide.pot`, and translations will be managed via Crowdin +- For guide topics bundled with a mod: + - If you want to include your own bundled translations for these strings, you can optionally use the verbose form of a WzJsonLocalizedString (an object which contains keys/values for different languages) + + +# Guide Topics JSON + +- **type**: (string) Should be `"wz2100.guidetopic.v1"` +- **id**: (string) The id for the guide topic. See: [Topic IDs](#topic-ids) +- **title**: [(JSON Localized String)](WZJsonLocalizedString.md) The title for the guide topic + - See [Translatable Strings](#translatable-strings) for pointers +- version: (string, optional) An optional version string, which can be supplied if a guide topic changes substantially (default is "0") + - If the `version` does not match the version of the topic that was viewed by the player, the topic will be treated as "new" until the current `version` of the topic is read +- sort: (string, optional) A string sort key used to sort the guide topic lexicographically relative to others + - Topics with `sort` specified are always sorted before topics that do not have `sort` specified +- applicableModes: (list, optional) If specified, the specific game mode(s) for which this guide topic will be available + - Options are: + - `"campaign"` + - `"challenge"` + - `"skirmish"` + - `"multiplayer"` +- visual: One or more visuals to be displayed below the title of the guide topic + - See [Guide Topic Visuals](#guide-topic-visuals) for more information +- **contents**: (list of [JSON Localized String](WZJsonLocalizedString.md)s) + - The contents of the guide topic + - See [Translatable Strings](#translatable-strings) for pointers + - For ease of translation, each line should be a separate entry in the `contents` list + - Tip: Consider splitting long paragraphs into two or more chunks - see the built-in topic examples: [/data/base/guidetopics/wz2100/](/data/base/guidetopics/wz2100/) + - An empty string entry (`""`) can be used to signify a blank line +- **links**: (list of strings) A list of guide topic `id`s, which will be displayed in a "See Also:" section at the bottom of this guide topic + +## Guide Topic Visuals + +A guide topic visual is a JSON object that can take the form of one or more different types. + +(You can also specify multiple visuals by using an array of these objects. [See an example](/data/base/guidetopics/wz2100/structures/modules.json).) + +### Stat Visual + +Specify a **`"stat"`** key, with a value of either: + - (string) The stat id (ex. `"A0CommandCentre"`) + - (object) An object containing the stat `"id"`, and (optionally `"onlyIfKnown"`) + - **id**: (string) The stat id (ex. `"A0CommandCentre"`) + - onlyIfKnown: Optionally limit this visual to being displayed + - Options are: + - `"false"` - not limited (default) + - `"true"` - only show this stat visual if known to the player + - `"campaign"` - only show this stat visual if known to the player (in campaign mode, otherwise always show) + +### Droid Template Visual + +Specify a **`"droidTemplate"`** key, with a value of: + - An object that matches what you'd find in a `templates.json` + - See example in: [/data/base/guidetopics/wz2100/units/commanders/_index.json](/data/base/guidetopics/wz2100/units/commanders/_index.json) + +### Reticule Button Image + +Specify a **`"retButId"`** key, with a value of: + - `"CANCEL"`, `"FACTORY"`, `"RESEARCH"`, `"BUILD"`, `"DESIGN"`, `"INTELMAP"`, or `"COMMAND"` + +### Secondary Unit Order Buttons + +Specify a **`"secondaryUnitOrderButtons"`** key, with a value of: + - `"ATTACK_RANGE"`, `"REPAIR_LEVEL"`, `"ATTACK_LEVEL"`, `"ASSIGN_PRODUCTION"`, `"ASSIGN_CYBORG_PRODUCTION"`, `"CLEAR_PRODUCTION"`, `"RECYCLE"`, `"PATROL"`, `"HALTTYPE"`, `"RETURN_TO_LOC"`, `"FIRE_DESIGNATOR"`, `"ASSIGN_VTOL_PRODUCTION"`, `"CIRCLE"`, or `"ACCEPT_RETREP"` + +## Example JSON: + +Some example guide topics: +- A category topic: [wz2100/general/_index.json](/data/base/guidetopics/wz2100/general/_index.json) +- Using a stat visual: [wz2100/general/artifacts.json](/data/base/guidetopics/wz2100/general/artifacts.json) +- Limiting display to campaign mode: [wz2100/general/backstory.json](/data/base/guidetopics/wz2100/general/backstory.json) +- Multiple visuals: [wz2100/general/commandpanel.json](/data/base/guidetopics/wz2100/general/commandpanel.json), [wz2100/units/sensors/_index.json](/data/base/guidetopics/wz2100/units/sensors/_index.json) + +# Displaying Guide Topics + +Guide topics can be added to the list of available / visible topics via the `addGuideTopic` JS function. + +By default, all guide topics are made available in skirmish / multiplayer modes. + +In campaign mode, it's expected that the campaign scripts will gradually add guide topics as pertinent events occur. + +## addGuideTopic(guideTopicID[, showFlags[, excludedTopicIDs]]) + +Add a guide topic to the in-game guide. + +guideTopicID is expected to be a "::"-delimited guide topic id (which corresponds to the .json file containing the guide topic information). +> For example, ```"wz2100::structures::hq"``` will attempt to load ```"guidetopics/wz2100/structures/hq.json"```, the guide topic file about the hq / command center. + +guideTopicID also has limited support for trailing wildcards. For example: +- ```"wz2100::units::*"``` will load all guide topic .json files in the folder ```"guidetopics/wz2100/units/"``` (but not any subfolders) +- ```"wz2100::**"``` will load all guide topic .json files within the folder ```"guidetopics/wz2100/"``` **and** all subfolders + +(The wildcard is only supported in the last position.) + +showFlags can be used to configure automatic display of the guide, and can be set to one or more of: +- ```SHOWTOPIC_FIRSTADD```: open guide only if this topic is newly-added (this playthrough) - if topic was already added, the guide won't be automatically displayed +- ```SHOWTOPIC_NEVERVIEWED```: open guide only if this topic has never been viewed by the player before (in any playthrough) + +You can also specify multiple flags (ex. ```SHOWTOPIC_FIRSTADD | SHOWTOPIC_NEVERVIEWED```). + +The default behavior (where showFlags is omitted) merely adds the topic to the guide, but does not automatically display / open the guide. + +excludedTopicIDs can be a string or a list of string guide topic IDs (non-wildcard) to be excluded, when supplying a wildcard guideTopicID. diff --git a/doc/Release.md b/doc/Release.md index 56ee0234ca9..d82232319ab 100644 --- a/doc/Release.md +++ b/doc/Release.md @@ -48,6 +48,7 @@ Wait for all CI builds to complete, and verify they have completed successfully. [![Flatpak](https://github.com/Warzone2100/warzone2100/workflows/Flatpak/badge.svg?branch=master&event=push)](https://github.com/Warzone2100/warzone2100/actions?query=workflow%3AFlatpak+branch%3Amaster+event%3Apush) [![Windows](https://github.com/Warzone2100/warzone2100/workflows/Windows/badge.svg?branch=master&event=push)](https://github.com/Warzone2100/warzone2100/actions?query=workflow%3AWindows+branch%3Amaster+event%3Apush) [![macOS](https://github.com/Warzone2100/warzone2100/workflows/macOS/badge.svg?branch=master&event=push)](https://github.com/Warzone2100/warzone2100/actions?query=workflow%3AmacOS+branch%3Amaster+event%3Apush) +[![Emscripten](https://github.com/Warzone2100/warzone2100/actions/workflows/CI_emscripten.yml/badge.svg?branch=master&event=push)](https://github.com/Warzone2100/warzone2100/actions?query=workflow%3AEmscripten+branch%3Amaster+event%3Apush) Can be flakey: - FreeBSD builds: [![FreeBSD Build Status](https://api.cirrus-ci.com/github/Warzone2100/warzone2100.svg?branch=master)](https://cirrus-ci.com/github/Warzone2100/warzone2100) @@ -78,6 +79,17 @@ Then proceed with normal game testing. Verify that each installer works, and the game runs. (Start by testing the portable installer.) +### Test the Web Edition dev builds + +Once the latest master branch build completes, the dev Web Edition build will be pushed to: + +https://play.wz2100.net/dev/ + +Test Campaign and Skirmish modes in at least: +- Google Chrome +- Mozilla Firefox +- Safari + ### Test the crash handler On both Linux & Windows, you can also test the crash handler now. diff --git a/doc/WZJsonLocalizedString.md b/doc/WZJsonLocalizedString.md new file mode 100644 index 00000000000..ce2a47c5bf3 --- /dev/null +++ b/doc/WZJsonLocalizedString.md @@ -0,0 +1,30 @@ +# WZ JSON Localized String + +Warzone 2100 supports specifying localized strings in certain JSON files. + +Anything that's listed as `(JSON Localized String)` may either be: + +- A (string) value + - Example: + ```json + "description": "A description of the mod in English, and only English." + ``` +- _Verbose Form:_ An (object) with a key for each language code and a (string) value that is the translation + - Example: + ```json + "description": { + "en": "A description of the mod in English." + "de": "The same description, but in German." + } + ``` + - Note: + - The base / default language for the game is English (`"en"`). We strongly recommend that you _always_ provide an `en` translation of all localized strings. + - The language codes correspond to the ones supported by the game (see the `.po` files in: https://github.com/Warzone2100/warzone2100/tree/master/po) + +## Recommendations: + +- For JSON Localized String values in files bundled with the game: + - These should generally just be normal JSON string values _in WZ's "base" language (English)_ + - They will automatically be included in the message catalogs, and translations will be managed via Crowdin +- For values in files in a mod which is distributed separately: + - If you want to include your own bundled translations for these strings, you can optionally use the verbose form of a JSON Localized String (the object form, which contains keys/values for different languages) diff --git a/doc/hosting/AutohostConfig.md b/doc/hosting/AutohostConfig.md index 8519bb73292..3e67d8fbd4e 100644 --- a/doc/hosting/AutohostConfig.md +++ b/doc/hosting/AutohostConfig.md @@ -15,7 +15,7 @@ The `challenge` object defines the game parameters for a multiplayer game. * `scavengers` sets which scavengers should be in game : `0` for none, `1` for basic scavengers, `2` for ultimate scavengers. * `alliances` sets the alliance mode. `0` for free for all, `1` for allow alliances, `2` for fixed teams, `3` for fixed teams without research sharing. * `powerLevel` sets the power generation rate. `0` for low, `1` for medium, `2` for high. -* `bases` sets the starting base. `0` for no base, `1` for small base, `2` for advanced base. +* `bases` sets the starting base. `1` for no base, `2` for small base, `3` for advanced base. * `name` your game name, as it will be shown in the lobby. * `techLevel` sets the starting technology level. `1` for level 1 (wheel), `2` for level 2 (water mill), `3` for level 3 (chip), `4` for level 4 (computer). * `spectatorHost` when `true` or `1`, the host will spectate the game. When `false` or `0`, the host will play the game. @@ -43,6 +43,7 @@ Each player slot can be customized, starting from 0. The first slot will be defi * `team` holds the team number, starting from 0. * `ai` when set, contains the name of the AI to use. This must match the property `js` in the ai `.json` file. * `difficulty` sets the difficulty for an AI. It can be one of `Easy`, `Medium`, `Hard` or `Insane`. +* `faction` sets the faction for an AI. It can be one of `Normal`, `NEXUS` or `Collective`. * `name` sets a custom name for the AI. ## Sample file diff --git a/doc/hosting/linux_scripts/common.sh b/doc/hosting/linux_scripts/common.sh index f7587eefdca..7175ef5cb12 100644 --- a/doc/hosting/linux_scripts/common.sh +++ b/doc/hosting/linux_scripts/common.sh @@ -1,12 +1,12 @@ -#!/bin/bash -e +#!/bin/bash function check { if [ ! $(command -v netstat) ] && [ ! $(command -v ss) ]; then echo "[ERROR] netstat or ss is required to check for available ports" exit 1 fi - if [ ! $(command -v $wz2100cmd) ]; then - echo "[ERROR] Cannot execute \"$wz2100cmd\"." + if [ ! -v wz2100cmd ]; then + echo "[ERROR] wz2100cmd variable is not set." exit 1 fi if [ "$players" == "" ] || [ ! $players -gt 0 ]; then @@ -76,5 +76,5 @@ function run_host { configdir="--configdir=$cfgdir" fi # Run game - $wz2100cmd $configdir --autohost=$hostfile --gameport=$port --startplayers=$players --enablelobbyslashcmd $admcmd --headless --nosound + exec $wz2100cmd $configdir --autohost=$hostfile --gameport=$port --startplayers=$players --enablelobbyslashcmd $admcmd --headless --nosound } diff --git a/doc/hosting/linux_scripts/config_sample.sh b/doc/hosting/linux_scripts/config_sample.sh index 279b974600c..1d9ed246349 100644 --- a/doc/hosting/linux_scripts/config_sample.sh +++ b/doc/hosting/linux_scripts/config_sample.sh @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!/bin/bash ## Common configuration values ## This file is shared between all games diff --git a/doc/hosting/linux_scripts/game_sample.sh b/doc/hosting/linux_scripts/game_sample.sh index 87e88549ffa..8da26a78f40 100644 --- a/doc/hosting/linux_scripts/game_sample.sh +++ b/doc/hosting/linux_scripts/game_sample.sh @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!/bin/bash ## Game configuration values ## One file for each game type diff --git a/doc/js-campaign.md b/doc/js-campaign.md index b7816f4118e..6620a1cd7a7 100644 --- a/doc/js-campaign.md +++ b/doc/js-campaign.md @@ -26,6 +26,7 @@ Tell `libcampaign.js` to manage a certain set of artifacts. The argument is a JavaScript map from object labels to artifact description. If the label points to a game object, artifact will be placed when this object is destroyed; if the label is a position, the artifact will be placed instantly. +The label can point to a pre-existing feature artifact on the map too. Artifact description is a JavaScript object with the following fields: * `tech` The technology to grant when the artifact is recovered. Note that this can be made into an array to make artifacts give out @@ -39,12 +40,33 @@ Artifact description is a JavaScript object with the following fields: @param {Object} artifacts @returns {void} +## camAddArtifact(artiLabel, artiTech) + +Adds another artifact to be managed. Will override existing ones if the names match. + +@param {String} artiLabel +@param {String|Array} artiTech +@returns {void} + +## camDeleteArtifact(artiLabel) + +Deletes the artifact from the list of managed artifacts. + +@param {String} artiLabel +@returns {void} + ## camAllArtifactsPickedUp() Returns `true` if all artifacts managed by `libcampaign.js` were picked up. @returns {boolean} +## camGetArtifacts() + +Returns the labels of all existing artifacts. + +@returns {Object[]} + ## camSetEnemyBases([bases]) Tell `libcampaign.js` to manage a certain set of enemy bases. @@ -173,6 +195,12 @@ and traces entering the area in the TRACE log. @param {Function} callback @returns {void} +## camClassicMode() + +Returns `true` if classic balance mod is enabled. + +@returns {boolean} + ## camDef(something) Returns `false` if something is JavaScript-undefined, `true` otherwise. @@ -253,6 +281,16 @@ Mimics wzscript's `numStructsButNotWallsInArea()`. @param {number} [playerFilter] @returns {number} +## camCleanTileOfObstructions(x, y | pos) + +Obliterates player structures and features near the tile around certain coordinates. +Can be used for spawn locations or transport reinforcement spots. May not +delete very large objects like factories or skyscrapers. + +@param {number|Object} x +@param {number} [y] +@returns {void} + ## camChangeOnDiff(numericValue) Change a numeric value based on campaign difficulty. @@ -284,6 +322,63 @@ Break alliances between all players. @returns {void} +## camGenerateRandomMapEdgeCoordinate(reachPosition) + +Returns a random coordinate anywhere on the edge of the map that reachs a position. + +@param {Object} reachPosition +@returns {Object} + +## camGenerateRandomMapCoordinate(reachPosition) + +Returns a random coordinate anywhere on the map + +@param {Object} reachPosition +@returns {Object} + +## camDiscoverCampaign() + +Figures out what campaign we are in without reliance on the source at all. + +@returns {number} + +## camNexusLaugh() + +Play a random NEXUS laugh. + +@returns {void} + +## camAbsorbPlayer([who[, to]]) + +Completely give all of player `who` droids and structures to player `to`. +Will default to `CAM_HUMAN_PLAYER` and `CAM_NEXUS` respectively. + +@param {number} [who] +@param {number} [to] +@returns {void} + +## camHackIntoPlayer([player[, to]]) + +Steal a droid or structure from a player if the NEXUS hack state is active. +Will default to `CAM_HUMAN_PLAYER` and `CAM_NEXUS` respectively. + +@param {number} [player] +@param {number} [to] +@returns {void} + +## camSetNexusState(flag) + +Turn on/off the NEXUS hacking state feature. + +@param {boolean} flag +@returns {void} + +## camGetNexusState() + +Returns the activation state of the NEXUS hacking feature. + +@returns {boolean} + ## camSetFactories(factories) Tell `libcampaign.js` to manage a certain set of enemy factories. @@ -345,9 +440,8 @@ at the end of its production loop, first queued first served. ## camSetPropulsionTypeLimit([limit]) -On hard and insane the propulsion type can be limited with this. -For type II pass in `2`, and for type III pass in `3`. Hard defaults to type II and insane defaults to type III. -If nothing is passed in then the type limit will match what is in templates.json. +This function can automatically augment units to use Type I/II/III propulsions. +If nothing or zero is passed in then the type limit will match what is in templates.json. @param {number} [limit] @returns {void} @@ -419,6 +513,14 @@ Grants research from the given list to player and also researches the required r @param {number} playerId @returns {void} +## camClassicResearch(researchIds, playerId) + +Grants research from the given list to player based on the "classic balance" variant. + +@param {string[]} researchIds +@param {number} playerId +@returns {void} + ## camManageGroup(group, order, data) Tell `libcampaign.js` to manage a certain group. The group would @@ -491,6 +593,34 @@ Print campaign order as string, useful for debugging. @param {number} order @returns {string} +## camSecondsToMilliseconds(seconds) + +Returns the amount of milliseconds in `seconds`. + +@param {number} seconds +@returns {number} + +## camMinutesToMilliseconds(minutes) + +Returns the amount of milliseconds in `minutes`. + +@param {number} minutes +@returns {number} + +## camMinutesToSeconds(minutes) + +Returns the amount of seconds in `minutes`. + +@param {number} minutes +@returns {number} + +## camHoursToSeconds(hours) + +Returns the amount of seconds in `hours`. + +@param {number} hours +@returns {number} + ## camIsTransporter(gameObject) Determine if the object is a transporter. @@ -557,13 +687,13 @@ The following options are available: The following data parameter fields are available: * `area` The landing zone to return to. * `message` The "Return to LZ" message ID. Optional. + * `playLzReminder` Play and show the "Return to LZ" message. Optional, enabled by default. * `reinforcements` Reinforcements interval, in seconds. For standard and offworld victory, some extra data parameters can be defined: * `callback` A function callback to check for extra win/loss conditions. Return values are interpreted as follows: * `false` means instant defeat ("objective failed"), * `true` means victory as long as other standard victory conditions are met, * `undefined` means suppress other victory checks ("clearly not won yet"). -* `victoryVideo` Pass in the name of a video string here and it will be played before attempting to load the next level. For offworld victory, some more extra data parameters can be defined: * `retlz` Force the player to return to the LZ area: * `false` mission does not require a LZ return, @@ -580,6 +710,27 @@ For offworld victory, some more extra data parameters can be defined: @param {Object} data @returns {void} +## camCheckExtraObjective() + +Checks for extra win conditions defined in level scripts being met, if any. + +@returns {boolean|undefined} + +## camSetExtraObjectiveMessage(message) + +Message(s) the mission script can set to further explain specific victory conditions. +Allows a single string or an array of strings. + +@param {string|Object[]} message +@returns {void} + +## camClearConsoleOnVictoryMessage(clear) + +If the script wants to allow `__camSetupConsoleForVictoryConditions()` to clear the console. + +@param {boolean} clear +@returns {void} + ## camPlayVideos(data) Formats for parameter `data`: `{video: "video string", type: MISS_MSG/CAMP_MSG, immediate: true/false}` OR @@ -593,3 +744,44 @@ as a sound to play before a video. Of which is only supported when parameter `da @param {Object|Object[]} data @returns {void} +## camSetVtolData(player, startPos, exitPos, templates, timer, [obj[, extras]]) + +Setup hit and runner VTOLs. NOTE: Will almost immediately spawn VTOLs upon calling this function. +`Player`: What player number the VTOLs will belong to. +`StartPos`: Starting position object where VTOLs will spawn. Can be an array. Use undefined for random map edge location. +`ExitPos`: Exit position object where VTOLs will despawn at. +`Templates`: An array of templates that the spawn uses. +`Timer`: How much time in milliseconds the VTOLs will wait to spawn again. +`Obj`: A game object that will stop the spawn when it no longer exists. May be undefined for no explicit end condition. +`Extras`: An object with possible members: + `limit`: Numeric limit of a VTOL design in regards to the parameter Templates. May be an array paired to Templates. + `alternate`: A boolean to force the spawn to use one of the designs at a time in parameter Templates. + `altIdx`: Which design index the spawn will first cycle through the list of templates from. + `minVTOLs`: Minimum amount of VTOLs that will spawn. + `maxRandomVTOLs`: Random amount of VTOLs that will spawn in addition to minVTOLs. + +@param {number} player +@param {Object|Object[]|undefined} startPos +@param {Object} exitPos +@param {Object[]} templates +@param {number} timer +@param {Object} obj +@param {Object} extras +@returns {void} + +## camSetVtolSpawnState(state, identifier) + +Sets the active status of a VTOL spawn point. The identifier can either be the +the index number or the label of the object that stops the spawn naturally. + +@param {boolean} state +@param {number|string} identifier +@returns {void} + +## camSetVtolSpawnStateAll(state) + +Sets the active status of all VTOL spawns to `state`. + +@param {boolean} state +@returns {void} + diff --git a/doc/js-events.md b/doc/js-events.md index d415b668955..8a3ca089f14 100644 --- a/doc/js-events.md +++ b/doc/js-events.md @@ -1,8 +1,9 @@ # Events -This section describes event callbacks (or 'events' for short) that are called from the -game when something specific happens. Which scripts receive them is usually filtered -by player. Call ```receiveAllEvents(true)``` to start receiving all events unfiltered. +This section describes event callbacks (or 'events' for short) that are +called from the game when something specific happens. Which scripts +receive them is usually filtered by player. Call ```receiveAllEvents(true)``` +to start receiving all events unfiltered. ## eventGameInit() @@ -53,6 +54,14 @@ An event that is run when the mission transporter has no more reinforcements to An event that is run when the mission transporter has landed with reinforcements. +## eventTransporterEmbarked(transport) + +An event that is run when a unit embarks into a transporter. + +## eventTransporterDisembarked(transport) + +An event that is run when a unit disembarks from a transporter. + ## eventDeliveryPointMoving() An event that is run when the current player starts to move a delivery point. @@ -146,28 +155,34 @@ if the structure was built by a droid. It is not triggered for building theft ## eventStructureDemolish(structure[, droid]) -An event that is run every time a structure begins to be demolished. -This does not trigger again if the structure is partially demolished. +An event that is run every time a structure begins to be demolished. This does +not trigger again if the structure is partially demolished. ## eventStructureReady(structure) -An event that is run every time a structure is ready to perform some special ability. -It will only fire once, so if the time is not right, register your own timer to keep checking. +An event that is run every time a structure is ready to perform some +special ability. It will only fire once, so if the time is not right, +register your own timer to keep checking. ## eventStructureUpgradeStarted(structure) An event that is run every time a structure starts to be upgraded. +## eventDroidRankGained(droid, rankNum) + +An event that is run whenever a droid gains a rank. + ## eventAttacked(victim, attacker) -An event that is run when an object belonging to the script's controlling player is attacked. -The attacker parameter may be either a structure or a droid. +An event that is run when an object belonging to the script's controlling player is +attacked. The attacker parameter may be either a structure or a droid. ## eventResearched(research, structure, player) -An event that is run whenever a new research is available. The structure parameter is set if -the research comes from a research lab owned by the current player. If an ally does the research, -the structure parameter will be set to null. The player parameter gives the player it is called for. +An event that is run whenever a new research is available. The structure +parameter is set if the research comes from a research lab owned by the +current player. If an ally does the research, the structure parameter will +be set to null. The player parameter gives the player it is called for. ## eventDestroyed(object) @@ -176,7 +191,8 @@ the parameter object around, since it is about to vanish! ## eventPickup(feature, droid) -An event that is run whenever a feature is picked up. It is called for all players / scripts. +An event that is run whenever a feature is picked up. It is called for +all players / scripts. Careful passing the parameter object around, since it is about to vanish! (3.2+ only) ## eventObjectSeen(viewer, seen) @@ -184,19 +200,22 @@ Careful passing the parameter object around, since it is about to vanish! (3.2+ An event that is run sometimes when an object, which was marked by an object label, which was reset through resetLabel() to subscribe for events, goes from not seen to seen. An event that is run sometimes when an objectm goes from not seen to seen. -First parameter is **game object** doing the seeing, the next the game object being seen. +First parameter is **game object** doing the seeing, the next the game +object being seen. ## eventGroupSeen(viewer, group) An event that is run sometimes when a member of a group, which was marked by a group label, which was reset through resetLabel() to subscribe for events, goes from not seen to seen. -First parameter is **game object** doing the seeing, the next the id of the group being seen. +First parameter is **game object** doing the seeing, the next the id of the group +being seen. ## eventObjectTransfer(object, from) -An event that is run whenever an object is transferred between players, for example due -to a Nexus Link weapon. The event is called after the object has been transferred, -so the target player is in object.player. The event is called for both players. +An event that is run whenever an object is transferred between players, +for example due to a Nexus Link weapon. The event is called after the +object has been transferred, so the target player is in object.player. +The event is called for both players. ## eventChat(from, to, message) @@ -204,6 +223,14 @@ An event that is run whenever a chat message is received. The ```from``` paramet player sending the chat message. For the moment, the ```to``` parameter is always the script player. +## eventQuickChat(from, to, messageEnum) + +An event that is run whenever a quick chat message is received. The ```from``` parameter is the +player sending the chat message. For the moment, the ```to``` parameter is always the script +player. ```messageEnum``` is the WzQuickChatMessage value (see the WzQuickChatMessages global +object for constants to match with it). The ```teamSpecific``` parameter is true if this message +was sent only to teammates, false otherwise. + ## eventBeacon(x, y, from, to[, message]) An event that is run whenever a beacon message is received. The ```from``` parameter is the @@ -215,20 +242,21 @@ Message may be undefined. An event that is run whenever a beacon message is removed. The ```from``` parameter is the player sending the beacon. For the moment, the ```to``` parameter is always the script player. -## eventGroupLoss(object, groupId, newSize) +## eventGroupLoss(gameObject, groupId, newSize) An event that is run whenever a group becomes empty. Input parameter is the about to be killed object, the group's id, and the new group size. ## eventArea