diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..b0ad3187 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,69 @@ +name: CI +on: + pull_request: + push: + +jobs: + build-windows: + name: Build (Windows) + runs-on: windows-2019 + steps: + - name: Checkout + uses: actions/checkout@v1 + with: + submodules: true + path: openspades + + - name: Cache vcpkg and dependencies + uses: actions/cache@v2 + with: + path: | + vcpkg/installed + !.git + key: ${{ runner.os }}-${{ hashFiles('vcpkg_x86-windows.txt', '.gitmodules') }} + + - name: Bootstrap vcpkg + run: vcpkg/bootstrap-vcpkg.bat + + - name: Build dependencies + run: vcpkg/vcpkg install @vcpkg_x86-windows.txt + + - name: Build application + uses: ashutoshvarma/action-cmake-build@master + with: + build-dir: ${{ runner.workspace }}/openspades.mk + build-type: RelWithDebInfo + configure-options: -A Win32 -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_TOOLCHAIN_FILE=${{ runner.workspace }}/openspades/vcpkg/scripts/buildsystems/vcpkg.cmake -D VCPKG_TARGET_TRIPLET=x86-windows-static + parallel: 8 + + build-macos: + name: Build (macOS) + runs-on: macos-10.15 + steps: + - name: Checkout + uses: actions/checkout@v1 + with: + submodules: true + path: openspades + + - name: Cache vcpkg and dependencies + uses: actions/cache@v2 + with: + path: | + vcpkg/installed + !.git + key: ${{ runner.os }}-${{ hashFiles('vcpkg_x86_64-darwin.txt', '.gitmodules') }} + + - name: Bootstrap vcpkg + run: vcpkg/bootstrap-vcpkg.sh + + - name: Build dependencies + run: vcpkg/vcpkg install @vcpkg_x86_64-darwin.txt + + - name: Build application + uses: ashutoshvarma/action-cmake-build@master + with: + build-dir: ${{ runner.workspace }}/openspades.mk + build-type: RelWithDebInfo + configure-options: -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_TOOLCHAIN_FILE=${{ runner.workspace }}/openspades/vcpkg/scripts/buildsystems/vcpkg.cmake -D VCPKG_TARGET_TRIPLET=x64-osx -D CMAKE_OSX_ARCHITECTURES=x86_64 + parallel: 8 diff --git a/.gitignore b/.gitignore index 843e7309..09522464 100644 --- a/.gitignore +++ b/.gitignore @@ -34,10 +34,6 @@ CMakeCache.txt *CMakeFiles/ *.cmake -# cmake input dir (optional) -Sources/Externals/include/ -Sources/Externals/lib/ - # mac related *.DS_Store diff --git a/.gitmodules b/.gitmodules index ff138137..80d29f20 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "flatpak/shared-modules"] path = flatpak/shared-modules url = https://github.com/flathub/shared-modules.git +[submodule "vcpkg"] + path = vcpkg + url = https://github.com/microsoft/vcpkg.git diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 34496013..00000000 --- a/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: cpp -dist: xenial - -compiler: - - gcc - -cache: apt - -install: - - sudo apt-get install pkg-config libglew-dev libcurl3-openssl-dev libjpeg-dev libxinerama-dev libxft-dev libsdl2-dev libsdl2-image-dev libfreetype6-dev libopus-dev libopusfile-dev gcc - -before_script: - - mkdir openspades.mk - - cd openspades.mk - -script: - - cmake -DOPENSPADES_RESOURCES=off .. - - cat CMakeCache.txt - - make -k \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 528b7188..1cfe1937 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,53 +9,90 @@ set(OPENSPADES_FULL_VERSION "${OpenSpades_VERSION_MAJOR}.${OpenSpades_VERSION_MI set(OS_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -set(CMAKE_PREFIX_PATH Sources/Externals) +if(VCPKG_TARGET_TRIPLET) + set(USE_VCPKG ON) +else() + set(USE_VCPKG OFF) +endif() # Prefer GLVND OpenGL if(POLICY CMP0072) cmake_policy(SET CMP0072 NEW) endif() -include(cmake/FindSDL2.cmake) -if(NOT SDL2_FOUND) - message(FATAL_ERROR "SDL 2.0 not found, set ENV{SDL2DIR} to point to SDL 2.0, and optionally set the cmake var SDL2_LIBRARY_TEMP to the lib dir") -endif() +if(USE_VCPKG) + find_package(Ogg CONFIG REQUIRED) + find_package(Opus CONFIG REQUIRED) + find_package(sdl2-image CONFIG REQUIRED) + find_package(SDL2 CONFIG REQUIRED) + find_package(freetype CONFIG REQUIRED) -include(cmake/FindSDL2_image.cmake) -if(NOT SDL2_IMAGE_FOUND) - message(FATAL_ERROR "SDL_image 2.0 not found, set ENV{SDL2DIR} to point to SDL 2.0, and optionally set the cmake var SDL2_LIBRARY_TEMP to the lib dir") -endif() + if(NOT APPLE) + find_package(GLEW REQUIRED) + set(GLEW_LIBRARY GLEW::GLEW) -include(FindOpenGL) -if(NOT OPENGL_FOUND AND NOT OPENGL_XMESA_FOUND AND NOT OPENGL_GLU_FOUND) - message(FATAL_ERROR "OpenGL not found, please install it") -endif() -if(NOT APPLE) - include(cmake/FindGLEW2.cmake) - if(NOT GLEW_FOUND) - message(FATAL_ERROR "GLEW not found, please install it and make sure CMake can find it (add it to the PATH)") + find_package(CURL REQUIRED) + set(CURL_LIBRARY CURL::libcurl) + endif() + + set(SDL2_LIBRARY SDL2::SDL2main SDL2::SDL2-static) + set(SDL2_IMAGE_LIBRARY SDL2::SDL2_image) + set(FREETYPE_LIBRARIES freetype) + + if(APPLE) + # Use system libraries + include(FindOpenGL) + include(FindCURL) + endif() + + FIND_LIBRARY(OpusFile_LIBRARY + NAMES opusfile + PATH_SUFFIXES lib64 lib + PATHS ${CMAKE_PREFIX_PATH} + ) +else() + include(cmake/FindSDL2.cmake) + if(NOT SDL2_FOUND) + message(FATAL_ERROR "SDL 2.0 not found, set ENV{SDL2DIR} to point to SDL 2.0, and optionally set the cmake var SDL2_LIBRARY_TEMP to the lib dir") + endif() + + include(cmake/FindSDL2_image.cmake) + if(NOT SDL2_IMAGE_FOUND) + message(FATAL_ERROR "SDL_image 2.0 not found, set ENV{SDL2DIR} to point to SDL 2.0, and optionally set the cmake var SDL2_LIBRARY_TEMP to the lib dir") + endif() + + include(FindOpenGL) + if(NOT OPENGL_FOUND AND NOT OPENGL_XMESA_FOUND AND NOT OPENGL_GLU_FOUND) + message(FATAL_ERROR "OpenGL not found, please install it") + endif() + if(NOT APPLE) + include(cmake/FindGLEW2.cmake) + if(NOT GLEW_FOUND) + message(FATAL_ERROR "GLEW not found, please install it and make sure CMake can find it (add it to the PATH)") + endif() + endif() + + include(FindZLIB) + if(NOT ZLIB_FOUND) + message(FATAL_ERROR "ZLIB not found, manually set ZLIB_ROOT in CMake") + endif() + + include(FindCURL) + if(NOT CURL_FOUND) + message(FATAL_ERROR "cURL not found, please install it (and make sure it's in your path)") + endif() + + include(FindFreetype) + if(NOT FREETYPE_FOUND) + message(FATAL_ERROR "FreeType not found, please install it (and make sure it's in your path)") + endif() + + include(cmake/FindOpus.cmake) + if(NOT OpusFile_FOUND) + message(FATAL_ERROR "libopus/libopusfile not found, please install it (and make sure it's in your path)") endif() endif() -include(FindZLIB) -if(NOT ZLIB_FOUND) - message(FATAL_ERROR "ZLIB not found, manually set ZLIB_ROOT in CMake") -endif() - -include(FindCURL) -if(NOT CURL_FOUND) - message(FATAL_ERROR "cURL not found, please install it (and make sure it's in your path)") -endif() - -include(FindFreetype) -if(NOT FREETYPE_FOUND) - message(FATAL_ERROR "FreeType not found, please install it (and make sure it's in your path)") -endif() - -include(cmake/FindOpus.cmake) -if(NOT OpusFile_FOUND) - message(FATAL_ERROR "libopus/libopusfile not found, please install it (and make sure it's in your path)") -endif() if(CMAKE_COMPILER_IS_GNUCXX) # GCC C++11 support @@ -152,7 +189,9 @@ if(HAS_SOCKLEN_T) add_definitions(-DHAS_SOCKLEN_T=1) endif() -option(OPENSPADES_RESOURCES "NO_OPENSPADES_RESOURCES" ON) +option(OPENSPADES_RESOURCES "Build game assets" ON) +option(OPENSPADES_NONFREE_RESOURCES "Download non-GPL game assets" ON) +option(OPENSPADES_YSR "Download YSRSpades (closed-source audio backend; macOS only)" ON) # note that all paths are without trailing slash set(OPENSPADES_INSTALL_DOC "share/doc/openspades" CACHE STRING "Directory for installing documentation. ") @@ -193,24 +232,27 @@ endif() configure_file("${PROJECT_SOURCE_DIR}/OpenSpades.h.in" "${PROJECT_BINARY_DIR}/OpenSpades.h") configure_file("${PROJECT_SOURCE_DIR}/OpenSpades.rc.in" "${PROJECT_BINARY_DIR}/OpenSpades.rc") include_directories(BEFORE "${PROJECT_BINARY_DIR}") -include_directories("${SDL2_INCLUDE_DIR}") -include_directories("${SDL2_IMAGE_INCLUDE_DIR}") -if(OPENGL_INCLUDE_DIR) - include_directories("${OPENGL_INCLUDE_DIR}") +if(USE_VCPKG) + include_directories("${PROJECT_SOURCE_DIR}/vcpkg/installed/${VCPKG_TARGET_TRIPLET}/include") +else() + include_directories("${SDL2_INCLUDE_DIR}") + include_directories("${SDL2_IMAGE_INCLUDE_DIR}") + if(OPENGL_INCLUDE_DIR) + include_directories("${OPENGL_INCLUDE_DIR}") + endif() + if(NOT APPLE) + include_directories("${GLEW_INCLUDE_DIR}") + endif() + include_directories("${ZLIB_INCLUDE_DIR}") + include_directories(${CURL_INCLUDE_DIRS}) + include_directories(${FREETYPE_INCLUDE_DIRS}) + include_directories(${OpusFile_INCLUDE_DIR}) endif() -if(NOT APPLE) -include_directories("${GLEW_INCLUDE_DIR}") -endif() -include_directories("${ZLIB_INCLUDE_DIR}") -include_directories(${CURL_INCLUDE_DIRS}) -include_directories(${FREETYPE_INCLUDE_DIRS}) -include_directories(${OpusFile_INCLUDE_DIR}) add_subdirectory(Resources) add_subdirectory(Sources) - -if(UNIX) +if(UNIX AND NOT APPLE) # various texts INSTALL(FILES AUTHORS LICENSE README.md DESTINATION ${OPENSPADES_INSTALL_DOC}/) @@ -228,15 +270,7 @@ if(UNIX) if(OPENSPADES_RESOURCES) # install asset paks (including non-GPL one) - install(FILES - ${CMAKE_BINARY_DIR}/Resources/pak000-Nonfree.pak - ${CMAKE_BINARY_DIR}/Resources/pak002-Base.pak - ${CMAKE_BINARY_DIR}/Resources/pak005-Models.pak - ${CMAKE_BINARY_DIR}/Resources/pak010-BaseSkin.pak - ${CMAKE_BINARY_DIR}/Resources/pak050-Locales.pak - ${CMAKE_BINARY_DIR}/Resources/pak999-References.pak - ${CMAKE_BINARY_DIR}/Resources/font-unifont.pak - DESTINATION ${OPENSPADES_INSTALL_RESOURCES}) + install(FILES ${PAK_FILES} DESTINATION ${OPENSPADES_INSTALL_RESOURCES}) endif(OPENSPADES_RESOURCES) # Package info (used for automatic update check) @@ -259,9 +293,50 @@ if(UNIX) # Currently there is no files in lib/openspades. But if you reading this message in future and want to # place somewhere libs, binaries or other non-media stuff, place them in lib/openspades. Thank you. -endif(UNIX) +endif(UNIX AND NOT APPLE) +if(APPLE) + # Create a macOS application bundle + set_target_properties(OpenSpades PROPERTIES + MACOSX_BUNDLE ON + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/XSpades/XSpades-Info.plist + MACOSX_BUNDLE_BUNDLE_VERSION ${OPENSPADES_FULL_VERSION} + MACOSX_BUNDLE_LONG_VERSION_STRING ${OPENSPADES_FULL_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${OPENSPADES_FULL_VERSION} + MACOSX_BUNDLE_GUI_IDENTIFIER jp.yvt.openspades + MACOSX_BUNDLE_BUNDLE_NAME OpenSpades) + set(BUNDLE_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Icons/OpenSpades.icns) + list(APPEND BUNDLE_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE) + if(OPENSPADES_RESOURCES) + list(APPEND BUNDLE_RESOURCES ${PAK_FILES}) + set_source_files_properties(${PAK_FILES} + PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + add_dependencies(OpenSpades OpenSpades_Resources_DevPaks OpenSpades_Resources) + endif(OPENSPADES_RESOURCES) + list(APPEND BUNDLE_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Resources/PackageInfo.json) + set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/Resources/PackageInfo.json + PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + + if (OPENSPADES_YSR) + list(APPEND BUNDLE_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/libysrspades.dylib) + + # Download `libysrspades.dylib` automatically + add_dependencies(OpenSpades OpenSpades_YSRSpades_Prebuilt) + add_custom_target(OpenSpades_YSRSpades_Prebuilt ALL COMMENT "Downloading libysrspades.dylib" + DEPENDS ${PROJECT_BINARY_DIR}/libysrspades.dylib) + add_custom_command( + OUTPUT ${PROJECT_BINARY_DIR}/libysrspades.dylib + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMAND + wget -c + https://openspadesmedia.yvt.jp/development-packages/YSRSpades/libysrspades.dylib + ) + endif (OPENSPADES_YSR) + + set_target_properties(OpenSpades PROPERTIES RESOURCE "${BUNDLE_RESOURCES}") + target_sources(OpenSpades PRIVATE "${BUNDLE_RESOURCES}") +endif(APPLE) #see http://www.cmake.org/cmake/help/v2.8.11/cpack.html set(CPACK_PACKAGE_NAME "OpenSpades") diff --git a/OpenSpades.h b/OpenSpades.h deleted file mode 100644 index 56b91dce..00000000 --- a/OpenSpades.h +++ /dev/null @@ -1,17 +0,0 @@ -// This header file is provided for the Xcode project. -// In other platforms, please use OpenSpades.h generated by CMake. - -#define OpenSpades_VERSION_MAJOR 0 -#define OpenSpades_VERSION_MINOR 1 -#define OpenSpades_VERSION_REVISION 3 - -#define OS_STRINGIFY2(x) #x -#define OS_STRINGIFY(x) OS_STRINGIFY2(x) - -#define OpenSpades_VER_STR "OpenSpades 0.1.3-rc for OS X" -#define PACKAGE_STRING OpenSpades_VER_STR - -/* #undef HAS_OPENAL */ - -/* #undef RESDIR_DEFINED */ -//#define RESDIR "" diff --git a/OpenSpades.xcodeproj/project.pbxproj b/OpenSpades.xcodeproj/project.pbxproj index b3eef98c..e69de29b 100644 --- a/OpenSpades.xcodeproj/project.pbxproj +++ b/OpenSpades.xcodeproj/project.pbxproj @@ -1,2563 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - E809500A1E17F66500AECDF2 /* GLSSAOFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80950081E17F66500AECDF2 /* GLSSAOFilter.cpp */; }; - E81012311E1D7301009955D3 /* Icon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E810122F1E1D7301009955D3 /* Icon.cpp */; }; - E82E66ED18EA7914004DBA18 /* StartupScreenHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E842888C18A3D1520060743D /* StartupScreenHelper.cpp */; }; - E82E66EE18EA7954004DBA18 /* GLBloomFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E89E811F179C2C800059C649 /* GLBloomFilter.cpp */; }; - E82E66EF18EA7954004DBA18 /* GLQuadRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8D88AAF179C3004004C2451 /* GLQuadRenderer.cpp */; }; - E82E66F018EA7954004DBA18 /* GLLensFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8D88AB2179C45B7004C2451 /* GLLensFilter.cpp */; }; - E82E66F118EA7954004DBA18 /* GLCameraBlurFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E4469C179D59A900BE8855 /* GLCameraBlurFilter.cpp */; }; - E82E66F218EA7954004DBA18 /* GLFogFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E859510A17C5DA060012810C /* GLFogFilter.cpp */; }; - E82E66F318EA7954004DBA18 /* GLLensFlareFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E859510D17C61F850012810C /* GLLensFlareFilter.cpp */; }; - E82E66F418EA7954004DBA18 /* GLFXAAFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E859511017C645000012810C /* GLFXAAFilter.cpp */; }; - E82E66F518EA7954004DBA18 /* GLColorCorrectionFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8D2ACE117D704E600BE5490 /* GLColorCorrectionFilter.cpp */; }; - E82E66F618EA7954004DBA18 /* GLDepthOfFieldFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6E317E165A400E35523 /* GLDepthOfFieldFilter.cpp */; }; - E82E66F718EA7954004DBA18 /* GLLensDustFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B72917E6095800E35523 /* GLLensDustFilter.cpp */; }; - E82E66F818EA7954004DBA18 /* GLImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF0400178FB52F000683D4 /* GLImage.cpp */; }; - E82E66F918EA7954004DBA18 /* GLFlatMapRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AF9B179A5BC200C6B5A9 /* GLFlatMapRenderer.cpp */; }; - E82E66FA18EA7954004DBA18 /* IGLSpriteRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E44696179D2CA100BE8855 /* IGLSpriteRenderer.cpp */; }; - E82E66FB18EA7954004DBA18 /* GLSpriteRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AFA7179ACDDD00C6B5A9 /* GLSpriteRenderer.cpp */; }; - E82E66FC18EA7954004DBA18 /* GLSoftSpriteRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E44699179D2EDC00BE8855 /* GLSoftSpriteRenderer.cpp */; }; - E82E66FD18EA7954004DBA18 /* GLImageRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AF881798278000C6B5A9 /* GLImageRenderer.cpp */; }; - E82E66FE18EA7954004DBA18 /* GLImageManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88318D6179176F3002ABE6D /* GLImageManager.cpp */; }; - E82E66FF18EA7954004DBA18 /* GLModelManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E741793D60E009D83E0 /* GLModelManager.cpp */; }; - E82E670018EA7954004DBA18 /* GLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E7A1793E105009D83E0 /* GLModel.cpp */; }; - E82E670118EA7954004DBA18 /* GLVoxelModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E7D1793E1B3009D83E0 /* GLVoxelModel.cpp */; }; - E82E670218EA7954004DBA18 /* GLMapRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88318AF1790F73F002ABE6D /* GLMapRenderer.cpp */; }; - E82E670318EA7954004DBA18 /* GLMapChunk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88318B217911A73002ABE6D /* GLMapChunk.cpp */; }; - E82E670418EA7954004DBA18 /* GLModelRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E89A648C17A11B4E00FDA893 /* GLModelRenderer.cpp */; }; - E82E670518EA7954004DBA18 /* GLOptimizedVoxelModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B286F17A4CA2B0056179E /* GLOptimizedVoxelModel.cpp */; }; - E82E670618EA7954004DBA18 /* GLWaterRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B289717AA63FC0056179E /* GLWaterRenderer.cpp */; }; - E82E670718EA7954004DBA18 /* GLLongSpriteRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E844886017CFB32B005105D0 /* GLLongSpriteRenderer.cpp */; }; - E82E670818EA7954004DBA18 /* GLSoftLitSpriteRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B72C17E68B1B00E35523 /* GLSoftLitSpriteRenderer.cpp */; }; - E82E670918EA7954004DBA18 /* GLShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF04191790CCAB000683D4 /* GLShader.cpp */; }; - E82E670A18EA7954004DBA18 /* GLProgramUniform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88318A91790EBAA002ABE6D /* GLProgramUniform.cpp */; }; - E82E670B18EA7954004DBA18 /* GLProgramAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88318AC1790EDDF002ABE6D /* GLProgramAttribute.cpp */; }; - E82E670C18EA7954004DBA18 /* GLProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF04061790455B000683D4 /* GLProgram.cpp */; }; - E82E670D18EA7954004DBA18 /* GLMapShadowRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E446A2179EA60900BE8855 /* GLMapShadowRenderer.cpp */; }; - E82E670E18EA7954004DBA18 /* GLShadowShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E446A5179EAC7800BE8855 /* GLShadowShader.cpp */; }; - E82E670F18EA7954004DBA18 /* GLDynamicLightShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E89A648F17A12FF800FDA893 /* GLDynamicLightShader.cpp */; }; - E82E671018EA7954004DBA18 /* IGLShadowMapRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E89A649817A2402500FDA893 /* IGLShadowMapRenderer.cpp */; }; - E82E671118EA7954004DBA18 /* GLShadowMapShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B286017A2462D0056179E /* GLShadowMapShader.cpp */; }; - E82E671218EA7954004DBA18 /* GLBasicShadowMapRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B286317A24AED0056179E /* GLBasicShadowMapRenderer.cpp */; }; - E82E671318EA7954004DBA18 /* GLDynamicLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B289417A9D6B40056179E /* GLDynamicLight.cpp */; }; - E82E671418EA7954004DBA18 /* GLAmbientShadowRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B28BF17AE7FEB0056179E /* GLAmbientShadowRenderer.cpp */; }; - E82E671518EA7954004DBA18 /* GLRadiosityRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8EE089F17B8F4B000631987 /* GLRadiosityRenderer.cpp */; }; - E82E671618EA7954004DBA18 /* GLSparseShadowMapRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6BD17DF456E00E35523 /* GLSparseShadowMapRenderer.cpp */; }; - E82E671718EA7954004DBA18 /* GLRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03A9178EDF74000683D4 /* GLRenderer.cpp */; }; - E82E671818EA7954004DBA18 /* IGLDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03AC178EDFCD000683D4 /* IGLDevice.cpp */; }; - E82E671918EA7954004DBA18 /* GLFramebufferManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AFB6179C0F2800C6B5A9 /* GLFramebufferManager.cpp */; }; - E82E671A18EA7954004DBA18 /* GLProgramManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF041C1790D6D5000683D4 /* GLProgramManager.cpp */; }; - E82E671B18EA7954004DBA18 /* GLProfiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E859511317C96B260012810C /* GLProfiler.cpp */; }; - E82E671C18EA7954004DBA18 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03BE178EE50E000683D4 /* Main.cpp */; }; - E82E671D18EA7954004DBA18 /* SDLGLDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03BB178EE502000683D4 /* SDLGLDevice.cpp */; }; - E82E671E18EA7954004DBA18 /* SDLRunner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03E1178EF57E000683D4 /* SDLRunner.cpp */; }; - E82E672018EA7954004DBA18 /* MainScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81CE4A7183F7F2000F22685 /* MainScreen.cpp */; }; - E82E672118EA7954004DBA18 /* MainScreenHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8F74CED183FBA9C0085AA54 /* MainScreenHelper.cpp */; }; - E82E672218EA7954004DBA18 /* View.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8F74CE3183F86AE0085AA54 /* View.cpp */; }; - E82E672318EA7954004DBA18 /* Runner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8F74CE7183F8B9D0085AA54 /* Runner.cpp */; }; - E82E672418EA7954004DBA18 /* StartupScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E842888918A3CF6C0060743D /* StartupScreen.cpp */; }; - E82E672518EA7967004DBA18 /* json_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E844887B17D2633C005105D0 /* json_reader.cpp */; }; - E82E672618EA7967004DBA18 /* json_value.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E844887C17D2633C005105D0 /* json_value.cpp */; }; - E82E672718EA7967004DBA18 /* json_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E844887E17D2633C005105D0 /* json_writer.cpp */; }; - E82E672818EA7967004DBA18 /* scriptany.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B70017E4193A00E35523 /* scriptany.cpp */; }; - E82E672918EA7967004DBA18 /* scriptarray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B70217E4193A00E35523 /* scriptarray.cpp */; }; - E82E672A18EA7967004DBA18 /* scriptbuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B70417E4193A00E35523 /* scriptbuilder.cpp */; }; - E82E672B18EA7967004DBA18 /* scriptdictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B70617E4193A00E35523 /* scriptdictionary.cpp */; }; - E82E672C18EA7967004DBA18 /* scripthandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B70817E4193A00E35523 /* scripthandle.cpp */; }; - E82E672D18EA7967004DBA18 /* scripthelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B70A17E4193A00E35523 /* scripthelper.cpp */; }; - E82E672E18EA7967004DBA18 /* scriptmath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B70C17E4193A00E35523 /* scriptmath.cpp */; }; - E82E672F18EA7967004DBA18 /* scriptmathcomplex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B70E17E4193A00E35523 /* scriptmathcomplex.cpp */; }; - E82E673018EA7967004DBA18 /* scriptstdstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B71017E4193A00E35523 /* scriptstdstring.cpp */; }; - E82E673118EA7967004DBA18 /* scriptstdstring_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B71217E4193A00E35523 /* scriptstdstring_utils.cpp */; }; - E82E673218EA7967004DBA18 /* weakref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B71317E4193A00E35523 /* weakref.cpp */; }; - E82E673318EA7972004DBA18 /* as_atomic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B64217DE27B500E35523 /* as_atomic.cpp */; }; - E82E673418EA7972004DBA18 /* as_builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B64417DE27B500E35523 /* as_builder.cpp */; }; - E82E673518EA7972004DBA18 /* as_bytecode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B64617DE27B500E35523 /* as_bytecode.cpp */; }; - E82E673618EA7972004DBA18 /* as_callfunc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B64817DE27B500E35523 /* as_callfunc.cpp */; }; - E82E673718EA7972004DBA18 /* as_callfunc_arm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B64A17DE27B500E35523 /* as_callfunc_arm.cpp */; }; - E82E673818EA7972004DBA18 /* as_callfunc_mips.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B64E17DE27B500E35523 /* as_callfunc_mips.cpp */; }; - E82E673918EA7972004DBA18 /* as_callfunc_ppc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B64F17DE27B500E35523 /* as_callfunc_ppc.cpp */; }; - E82E673A18EA7972004DBA18 /* as_callfunc_ppc_64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B65017DE27B500E35523 /* as_callfunc_ppc_64.cpp */; }; - E82E673B18EA7972004DBA18 /* as_callfunc_sh4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B65117DE27B500E35523 /* as_callfunc_sh4.cpp */; }; - E82E673C18EA7972004DBA18 /* as_callfunc_x64_gcc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B65217DE27B500E35523 /* as_callfunc_x64_gcc.cpp */; }; - E82E673D18EA7972004DBA18 /* as_callfunc_x64_mingw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B65317DE27B500E35523 /* as_callfunc_x64_mingw.cpp */; }; - E82E673E18EA7972004DBA18 /* as_callfunc_x64_msvc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B65417DE27B500E35523 /* as_callfunc_x64_msvc.cpp */; }; - E82E673F18EA7972004DBA18 /* as_callfunc_x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B65617DE27B500E35523 /* as_callfunc_x86.cpp */; }; - E82E674018EA7972004DBA18 /* as_callfunc_xenon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B65717DE27B500E35523 /* as_callfunc_xenon.cpp */; }; - E82E674118EA7972004DBA18 /* as_compiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B65817DE27B500E35523 /* as_compiler.cpp */; }; - E82E674218EA7972004DBA18 /* as_configgroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B65B17DE27B500E35523 /* as_configgroup.cpp */; }; - E82E674318EA7972004DBA18 /* as_context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B65D17DE27B500E35523 /* as_context.cpp */; }; - E82E674418EA7972004DBA18 /* as_datatype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B66017DE27B500E35523 /* as_datatype.cpp */; }; - E82E674518EA7972004DBA18 /* as_gc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B66317DE27B500E35523 /* as_gc.cpp */; }; - E82E674618EA7972004DBA18 /* as_generic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B66517DE27B500E35523 /* as_generic.cpp */; }; - E82E674718EA7972004DBA18 /* as_globalproperty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B66717DE27B500E35523 /* as_globalproperty.cpp */; }; - E82E674818EA7972004DBA18 /* as_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B66917DE27B500E35523 /* as_memory.cpp */; }; - E82E674918EA7972004DBA18 /* as_module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B66B17DE27B500E35523 /* as_module.cpp */; }; - E82E674A18EA7972004DBA18 /* as_objecttype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B66D17DE27B500E35523 /* as_objecttype.cpp */; }; - E82E674B18EA7972004DBA18 /* as_outputbuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B66F17DE27B500E35523 /* as_outputbuffer.cpp */; }; - E82E674C18EA7972004DBA18 /* as_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B67117DE27B500E35523 /* as_parser.cpp */; }; - E82E674D18EA7972004DBA18 /* as_restore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B67417DE27B500E35523 /* as_restore.cpp */; }; - E82E674E18EA7972004DBA18 /* as_scriptcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B67617DE27B500E35523 /* as_scriptcode.cpp */; }; - E82E674F18EA7972004DBA18 /* as_scriptengine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B67817DE27B500E35523 /* as_scriptengine.cpp */; }; - E82E675018EA7972004DBA18 /* as_scriptfunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B67A17DE27B500E35523 /* as_scriptfunction.cpp */; }; - E82E675118EA7972004DBA18 /* as_scriptnode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B67C17DE27B500E35523 /* as_scriptnode.cpp */; }; - E82E675218EA7972004DBA18 /* as_scriptobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B67E17DE27B500E35523 /* as_scriptobject.cpp */; }; - E82E675318EA7972004DBA18 /* as_string.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B68017DE27B500E35523 /* as_string.cpp */; }; - E82E675418EA7972004DBA18 /* as_string_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B68217DE27B500E35523 /* as_string_util.cpp */; }; - E82E675518EA7972004DBA18 /* as_thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B68617DE27B500E35523 /* as_thread.cpp */; }; - E82E675618EA7972004DBA18 /* as_tokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B68917DE27B500E35523 /* as_tokenizer.cpp */; }; - E82E675718EA7972004DBA18 /* as_typeinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B68B17DE27B500E35523 /* as_typeinfo.cpp */; }; - E82E675818EA7972004DBA18 /* as_variablescope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B68D17DE27B500E35523 /* as_variablescope.cpp */; }; - E82E675918EA7972004DBA18 /* ALDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E581792BEFC009D83E0 /* ALDevice.cpp */; }; - E82E675A18EA7972004DBA18 /* ALFuncs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E5C1792C089009D83E0 /* ALFuncs.cpp */; }; - E82E675B18EA7972004DBA18 /* YsrDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88EB02D185D9DC500565D07 /* YsrDevice.cpp */; }; - E82E675C18EA7972004DBA18 /* NullDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E842889118A3D9C40060743D /* NullDevice.cpp */; }; - E82E675D18EA7972004DBA18 /* PngWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E895D66318D614DE00F5B9CA /* PngWriter.cpp */; }; - E82E675E18EA7972004DBA18 /* jpge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E895D65B18D4A10E00F5B9CA /* jpge.cpp */; }; - E82E675F18EA7972004DBA18 /* IBitmapCodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E44684179CC4FF00BE8855 /* IBitmapCodec.cpp */; }; - E82E676018EA7972004DBA18 /* TargaReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E44687179CC65900BE8855 /* TargaReader.cpp */; }; - E82E676118EA7972004DBA18 /* TargaWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E446A8179F822D00BE8855 /* TargaWriter.cpp */; }; - E82E676218EA7972004DBA18 /* SdlImageReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E87AB82118BB3957006B7D73 /* SdlImageReader.cpp */; }; - E82E676318EA7972004DBA18 /* JpegWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E895D65E18D4A15900F5B9CA /* JpegWriter.cpp */; }; - E82E676418EA7972004DBA18 /* Bitmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88318D3179172AF002ABE6D /* Bitmap.cpp */; }; - E82E676518EA7972004DBA18 /* VoxelModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E771793DC37009D83E0 /* VoxelModel.cpp */; }; - E82E676618EA7972004DBA18 /* IAudioStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E611792CA12009D83E0 /* IAudioStream.cpp */; }; - E82E676718EA7972004DBA18 /* WavAudioStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E641792CCE5009D83E0 /* WavAudioStream.cpp */; }; - E82E676818EA7972004DBA18 /* BitmapAtlasGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B288617A52AB60056179E /* BitmapAtlasGenerator.cpp */; }; - E82E676918EA7972004DBA18 /* ServerAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B72617E5AC9C00E35523 /* ServerAddress.cpp */; }; - E82E676A18EA7972004DBA18 /* IFileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF04091790471D000683D4 /* IFileSystem.cpp */; }; - E82E676B18EA7972004DBA18 /* FileManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF040C17904970000683D4 /* FileManager.cpp */; }; - E82E676C18EA7972004DBA18 /* IStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF040F17904ABC000683D4 /* IStream.cpp */; }; - E82E676D18EA7972004DBA18 /* StdStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF041217904E8B000683D4 /* StdStream.cpp */; }; - E82E676E18EA7972004DBA18 /* SdlFileStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E849654E18E94F1200B9706D /* SdlFileStream.cpp */; }; - E82E676F18EA7972004DBA18 /* DirectoryFileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF0415179052F6000683D4 /* DirectoryFileSystem.cpp */; }; - E82E677018EA7972004DBA18 /* DeflateStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E834F55D17950E41004EBE88 /* DeflateStream.cpp */; }; - E82E677118EA7972004DBA18 /* MemoryStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E834F56317951B1A004EBE88 /* MemoryStream.cpp */; }; - E82E677218EA7972004DBA18 /* ZipFileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B28DC17B39EEE0056179E /* ZipFileSystem.cpp */; }; - E82E677318EA7972004DBA18 /* DynamicMemoryStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B28DF17B4FDD40056179E /* DynamicMemoryStream.cpp */; }; - E82E677418EA7972004DBA18 /* VersionInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E85233791839B28C00F40541 /* VersionInfo.cpp */; }; - E82E677518EA7972004DBA18 /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03B0178EE300000683D4 /* Thread.cpp */; }; - E82E677618EA7972004DBA18 /* Semaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03CF178EEF80000683D4 /* Semaphore.cpp */; }; - E82E677818EA7972004DBA18 /* ILockable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03D5178EF09C000683D4 /* ILockable.cpp */; }; - E82E677A18EA7972004DBA18 /* IRunnable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03DE178EF4E9000683D4 /* IRunnable.cpp */; }; - E82E677B18EA7972004DBA18 /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF0403178FF776000683D4 /* Exception.cpp */; }; - E82E677C18EA7972004DBA18 /* DynamicLibrary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E5E1792C0FF009D83E0 /* DynamicLibrary.cpp */; }; - E82E677D18EA7972004DBA18 /* ConcurrentDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B286C17A3B0570056179E /* ConcurrentDispatch.cpp */; }; - E82E677E18EA7972004DBA18 /* ThreadLocalStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B288B17A5FFB30056179E /* ThreadLocalStorage.cpp */; }; - E82E677F18EA7972004DBA18 /* CpuID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C92A0E186A902500740C9F /* CpuID.cpp */; }; - E82E678018EA7972004DBA18 /* MathScript.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6E717E40AF500E35523 /* MathScript.cpp */; }; - E82E678118EA7972004DBA18 /* StringsScript.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E838D42018ADDE2800EE3C53 /* StringsScript.cpp */; }; - E82E678218EA7972004DBA18 /* ScriptManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6E817E40AF500E35523 /* ScriptManager.cpp */; }; - E82E678318EA7972004DBA18 /* IImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6EC17E40B5900E35523 /* IImage.cpp */; }; - E82E678418EA7972004DBA18 /* IModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6F217E40E8200E35523 /* IModel.cpp */; }; - E82E678518EA7972004DBA18 /* IRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6F517E40F9900E35523 /* IRenderer.cpp */; }; - E82E678618EA7972004DBA18 /* GameMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6F817E4130E00E35523 /* GameMap.cpp */; }; - E82E678718EA7972004DBA18 /* Bitmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6FB17E413AB00E35523 /* Bitmap.cpp */; }; - E82E678818EA7972004DBA18 /* VoxelModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6FD17E4141000E35523 /* VoxelModel.cpp */; }; - E82E678918EA7972004DBA18 /* IAudioDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B72017E4508C00E35523 /* IAudioDevice.cpp */; }; - E82E678A18EA7972004DBA18 /* IAudioChunk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B72217E452EC00E35523 /* IAudioChunk.cpp */; }; - E82E678B18EA7972004DBA18 /* PrimitiveArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B72417E46C1B00E35523 /* PrimitiveArray.cpp */; }; - E82E678C18EA7972004DBA18 /* IToolSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B72F17E8C4ED00E35523 /* IToolSkin.cpp */; }; - E82E678D18EA7972004DBA18 /* ScriptFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B73217E8CE1300E35523 /* ScriptFunction.cpp */; }; - E82E678E18EA7972004DBA18 /* ISpadeSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B73817E9E8CF00E35523 /* ISpadeSkin.cpp */; }; - E82E678F18EA7972004DBA18 /* IBlockSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B73B17E9F49700E35523 /* IBlockSkin.cpp */; }; - E82E679018EA7972004DBA18 /* IViewToolSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B73E17EA060900E35523 /* IViewToolSkin.cpp */; }; - E82E679118EA7972004DBA18 /* IThirdPersonToolSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B74117EA0B1500E35523 /* IThirdPersonToolSkin.cpp */; }; - E82E679218EA7972004DBA18 /* IGrenadeSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B74417EA0F1B00E35523 /* IGrenadeSkin.cpp */; }; - E82E679318EA7972004DBA18 /* IWeaponSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B74717EA12E100E35523 /* IWeaponSkin.cpp */; }; - E82E679418EA7972004DBA18 /* IFont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81CE4A4183F7A3000F22685 /* IFont.cpp */; }; - E82E679518EA7972004DBA18 /* MainScreenHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8F74CF0183FBB070085AA54 /* MainScreenHelper.cpp */; }; - E82E679618EA7972004DBA18 /* StartupScreenHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E842888F18A3D6470060743D /* StartupScreenHelper.cpp */; }; - E82E679718EA7972004DBA18 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8F74CF31840D4CC0085AA54 /* Config.cpp */; }; - E82E679818EA7972004DBA18 /* ClientUIHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8F74CFC1845C8D50085AA54 /* ClientUIHelper.cpp */; }; - E82E679918EA7972004DBA18 /* Clipboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8F74CFE184C753F0085AA54 /* Clipboard.cpp */; }; - E82E679A18EA7972004DBA18 /* Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03CC178EE95F000683D4 /* Math.cpp */; }; - E82E679C18EA7972004DBA18 /* Stopwatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88318E21792698D002ABE6D /* Stopwatch.cpp */; }; - E82E679D18EA7972004DBA18 /* Debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E834F5541794BBD4004EBE88 /* Debug.cpp */; }; - E82E679E18EA7972004DBA18 /* Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AFB3179BF25B00C6B5A9 /* Settings.cpp */; }; - E82E679F18EA7972004DBA18 /* FltkPreferenceImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E849654B18E9487300B9706D /* FltkPreferenceImporter.cpp */; }; - E82E67A018EA7972004DBA18 /* RefCountedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B6EF17E40DA700E35523 /* RefCountedObject.cpp */; }; - E82E67A118EA7972004DBA18 /* MiniHeap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81A7C7B1865A2E900BF3FCE /* MiniHeap.cpp */; }; - E82E67A218EA7972004DBA18 /* CP437.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E890F30E187046990090AAB8 /* CP437.cpp */; }; - E82E67A318EA7972004DBA18 /* Strings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E838D41D18AC726B00EE3C53 /* Strings.cpp */; }; - E82E67A418EA7972004DBA18 /* IRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03A6178EDF6A000683D4 /* IRenderer.cpp */; }; - E82E67A518EA7972004DBA18 /* SceneDefinition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03F7178FABA4000683D4 /* SceneDefinition.cpp */; }; - E82E67A618EA7972004DBA18 /* IAudioDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03C6178EE81A000683D4 /* IAudioDevice.cpp */; }; - E82E67A718EA7972004DBA18 /* IAudioChunk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E551792B24D009D83E0 /* IAudioChunk.cpp */; }; - E82E67A818EA7972004DBA18 /* IInputInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03C9178EE869000683D4 /* IInputInterface.cpp */; }; - E82E67A918EA7972004DBA18 /* IImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03F4178FAA8B000683D4 /* IImage.cpp */; }; - E82E67AA18EA7972004DBA18 /* IModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E711793D5AD009D83E0 /* IModel.cpp */; }; - E82E67AC18EA7972004DBA18 /* NetClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E834F55117944778004EBE88 /* NetClient.cpp */; }; - E82E67AD18EA7972004DBA18 /* ILocalEntity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AFAA179ADC2100C6B5A9 /* ILocalEntity.cpp */; }; - E82E67AE18EA7972004DBA18 /* ParticleSpriteEntity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AFAD179ADDCB00C6B5A9 /* ParticleSpriteEntity.cpp */; }; - E82E67AF18EA7972004DBA18 /* SmokeSpriteEntity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AFB0179AF4E600C6B5A9 /* SmokeSpriteEntity.cpp */; }; - E82E67B018EA7972004DBA18 /* FallingBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E89A649217A1677F00FDA893 /* FallingBlock.cpp */; }; - E82E67B118EA7972004DBA18 /* GunCasing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E89A649517A1835900FDA893 /* GunCasing.cpp */; }; - E82E67B218EA7972004DBA18 /* Tracer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E844886417D0C43B005105D0 /* Tracer.cpp */; }; - E82E67B318EA7972004DBA18 /* ClientPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8B6B73517E9C70000E35523 /* ClientPlayer.cpp */; }; - E82E67B418EA7972004DBA18 /* Client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03C1178EE6D8000683D4 /* Client.cpp */; }; - E82E67B518EA7972004DBA18 /* Client_Input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8FE748B18CC6AA100291338 /* Client_Input.cpp */; }; - E82E67B618EA7972004DBA18 /* Client_Update.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8FE748D18CC6C2B00291338 /* Client_Update.cpp */; }; - E82E67B718EA7972004DBA18 /* Client_NetHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8FE748F18CC6CE000291338 /* Client_NetHandler.cpp */; }; - E82E67B818EA7972004DBA18 /* Client_LocalEnts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8FE749118CC6E4900291338 /* Client_LocalEnts.cpp */; }; - E82E67B918EA7972004DBA18 /* Client_Draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8FE749318CC6EB500291338 /* Client_Draw.cpp */; }; - E82E67BA18EA7972004DBA18 /* Client_Scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8FE749518CC6F2900291338 /* Client_Scene.cpp */; }; - E82E67BB18EA7972004DBA18 /* Client_FPSCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82E66B218E9A35C004DBA18 /* Client_FPSCounter.cpp */; }; - E82E67BC18EA7972004DBA18 /* ChatWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E834F56D1797D92F004EBE88 /* ChatWindow.cpp */; }; - E82E67BD18EA7972004DBA18 /* Corpse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AF92179942DB00C6B5A9 /* Corpse.cpp */; }; - E82E67BE18EA7972004DBA18 /* CenterMessageView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AF95179980F500C6B5A9 /* CenterMessageView.cpp */; }; - E82E67BF18EA7972004DBA18 /* HurtRingView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AF98179996A100C6B5A9 /* HurtRingView.cpp */; }; - E82E67C018EA7972004DBA18 /* MapView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AF9E179A698800C6B5A9 /* MapView.cpp */; }; - E82E67C118EA7972004DBA18 /* ScoreboardView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AFA1179A8F1000C6B5A9 /* ScoreboardView.cpp */; }; - E82E67C218EA7972004DBA18 /* LimboView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8E0AFA4179AA31B00C6B5A9 /* LimboView.cpp */; }; - E82E67C318EA7972004DBA18 /* PaletteView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B28CB17AFCCC40056179E /* PaletteView.cpp */; }; - E82E67C418EA7972004DBA18 /* TCProgressView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B28D117AFF77B0056179E /* TCProgressView.cpp */; }; - E82E67C518EA7972004DBA18 /* ClientUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8F74CF61845C5000085AA54 /* ClientUI.cpp */; }; - E82E67C618EA7972004DBA18 /* ClientUIHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8F74CF91845C64B0085AA54 /* ClientUIHelper.cpp */; }; - E82E67C718EA7972004DBA18 /* Quake3Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E834F56617979F55004EBE88 /* Quake3Font.cpp */; }; - E82E67C818EA7972004DBA18 /* IFont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E834F56917979FD3004EBE88 /* IFont.cpp */; }; - E82E67C918EA7972004DBA18 /* Fonts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E842889418A667930060743D /* Fonts.cpp */; }; - E82E67CA18EA7972004DBA18 /* IGameMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E834F5571794DCF9004EBE88 /* IGameMode.cpp */; }; - E82E67CB18EA7972004DBA18 /* CTFGameMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E834F55A1794DDA2004EBE88 /* CTFGameMode.cpp */; }; - E82E67CC18EA7972004DBA18 /* TCGameMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E80B28CE17AFE68A0056179E /* TCGameMode.cpp */; }; - E82E67CD18EA7972004DBA18 /* Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88318D9179256E4002ABE6D /* Player.cpp */; }; - E82E67CE18EA7972004DBA18 /* Grenade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E834F54E17942C43004EBE88 /* Grenade.cpp */; }; - E82E67CF18EA7972004DBA18 /* Weapon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E6E1793AA45009D83E0 /* Weapon.cpp */; }; - E82E67D018EA7972004DBA18 /* GameMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03FA178FACFF000683D4 /* GameMap.cpp */; }; - E82E67D118EA7972004DBA18 /* IGameMapListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CF03FD178FB1E1000683D4 /* IGameMapListener.cpp */; }; - E82E67D218EA7972004DBA18 /* GameMapWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88318DC179257F0002ABE6D /* GameMapWrapper.cpp */; }; - E82E67D318EA7972004DBA18 /* World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E88318E617928F84002ABE6D /* World.cpp */; }; - E82E67D418EA7972004DBA18 /* IWorldListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8567E6A1792F398009D83E0 /* IWorldListener.cpp */; }; - E82E67D518EA7972004DBA18 /* HitTestDebugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8FE748818CB329C00291338 /* HitTestDebugger.cpp */; }; - E82E67D618EA7972004DBA18 /* SWRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81A7C6218610AA900BF3FCE /* SWRenderer.cpp */; }; - E82E67D718EA7972004DBA18 /* SWPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81A7C6518610BE400BF3FCE /* SWPort.cpp */; }; - E82E67D818EA7972004DBA18 /* SWImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81A7C691861525D00BF3FCE /* SWImage.cpp */; }; - E82E67D918EA7972004DBA18 /* SWModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81A7C6C186152A400BF3FCE /* SWModel.cpp */; }; - E82E67DA18EA7972004DBA18 /* SWImageRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81A7C6F1861F4E200BF3FCE /* SWImageRenderer.cpp */; }; - E82E67DB18EA7972004DBA18 /* SWFeatureLevel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81A7C731863566200BF3FCE /* SWFeatureLevel.cpp */; }; - E82E67DC18EA7972004DBA18 /* SWMapRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81A7C751864171100BF3FCE /* SWMapRenderer.cpp */; }; - E82E67DD18EA7972004DBA18 /* SWFlatMapRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E81A7C7818642BCA00BF3FCE /* SWFlatMapRenderer.cpp */; }; - E82E67DE18EA7972004DBA18 /* SWModelRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C92A0A18695EA500740C9F /* SWModelRenderer.cpp */; }; - E82E67DF18EA7A05004DBA18 /* SDL2_image.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E87AB82418BB3A04006B7D73 /* SDL2_image.framework */; }; - E82E67E018EA7A05004DBA18 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8B93AD418559EC600BD01E1 /* SDL2.framework */; }; - E82E67E218EA7A1E004DBA18 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = E8CF039B178EDAC9000683D4 /* libz.tbd */; }; - E82E67E318EA7A51004DBA18 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = E80B28D617B39D160056179E /* ioapi.c */; }; - E82E67E418EA7A51004DBA18 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = E80B28D817B39D160056179E /* unzip.c */; }; - E82E67E518EA7A51004DBA18 /* kiss_fft.c in Sources */ = {isa = PBXBuildFile; fileRef = E80B28B817ABAC790056179E /* kiss_fft.c */; }; - E82E67E618EA7A51004DBA18 /* callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = E88319021792A7CC002ABE6D /* callbacks.c */; }; - E82E67E718EA7A51004DBA18 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = E88319031792A7CC002ABE6D /* compress.c */; }; - E82E67E818EA7A51004DBA18 /* host.c in Sources */ = {isa = PBXBuildFile; fileRef = E88319041792A7CC002ABE6D /* host.c */; }; - E82E67E918EA7A51004DBA18 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = E88319111792A7CC002ABE6D /* list.c */; }; - E82E67EA18EA7A51004DBA18 /* packet.c in Sources */ = {isa = PBXBuildFile; fileRef = E88319121792A7CC002ABE6D /* packet.c */; }; - E82E67EB18EA7A51004DBA18 /* peer.c in Sources */ = {isa = PBXBuildFile; fileRef = E88319131792A7CC002ABE6D /* peer.c */; }; - E82E67EC18EA7A51004DBA18 /* protocol.c in Sources */ = {isa = PBXBuildFile; fileRef = E88319141792A7CC002ABE6D /* protocol.c */; }; - E82E67ED18EA7A51004DBA18 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = E88319161792A7CC002ABE6D /* unix.c */; }; - E82E67EE18EA7A51004DBA18 /* win32.c in Sources */ = {isa = PBXBuildFile; fileRef = E88319171792A7CC002ABE6D /* win32.c */; }; - E82E67EF18EA7A51004DBA18 /* pnglite.c in Sources */ = {isa = PBXBuildFile; fileRef = E895D66118D614DE00F5B9CA /* pnglite.c */; }; - E82E67F018EA7A60004DBA18 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8CF03C4178EE78C000683D4 /* OpenGL.framework */; }; - E82E67FA18EA7EAB004DBA18 /* font-unifont.pak in Resources */ = {isa = PBXBuildFile; fileRef = E82E67F318EA7EAB004DBA18 /* font-unifont.pak */; }; - E82E680418EA7F60004DBA18 /* libysrspades.dylib in Resources */ = {isa = PBXBuildFile; fileRef = E82E680318EA7F60004DBA18 /* libysrspades.dylib */; }; - E83668AF1E05757B00977A63 /* OpusAudioStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E83668AD1E05757B00977A63 /* OpusAudioStream.cpp */; }; - E83668B21E05844E00977A63 /* AudioStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E83668B01E05844E00977A63 /* AudioStream.cpp */; }; - E8403CA8229061BF00093C3E /* RandomAccessAdaptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8403CA6229061BE00093C3E /* RandomAccessAdaptor.cpp */; }; - E8403CAB229123CF00093C3E /* PipeStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8403CA9229123CF00093C3E /* PipeStream.cpp */; }; - E8403CAE2291280800093C3E /* GameMapLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8403CAD2291280700093C3E /* GameMapLoader.cpp */; }; - E8403CB12299073400093C3E /* VoxelModelLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8403CB02299073400093C3E /* VoxelModelLoader.cpp */; }; - E8626EAE1E1009D7003365BF /* libcurl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = E844888617D26699005105D0 /* libcurl.tbd */; }; - E8626EB61E100EC6003365BF /* libfreetype.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E8626EB51E100EC6003365BF /* libfreetype.a */; }; - E8626EB81E100FB2003365BF /* libogg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E8626EB71E100FB2003365BF /* libogg.a */; }; - E8626EBB1E101072003365BF /* libopus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E8626EB91E101072003365BF /* libopus.a */; }; - E8626EBC1E101072003365BF /* libopusfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E8626EBA1E101072003365BF /* libopusfile.a */; }; - E8626EBE1E1010CA003365BF /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = E8626EBD1E1010CA003365BF /* libbz2.tbd */; }; - E8655AA81DFC0A6E00D5058A /* FTFont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8655AA61DFC0A6E00D5058A /* FTFont.cpp */; }; - E8690AEC1D3920C800DBC331 /* pak000-Nonfree.pak in Resources */ = {isa = PBXBuildFile; fileRef = E8690AE61D3920C800DBC331 /* pak000-Nonfree.pak */; }; - E8690AED1D3920C800DBC331 /* pak002-Base.pak in Resources */ = {isa = PBXBuildFile; fileRef = E8690AE71D3920C800DBC331 /* pak002-Base.pak */; }; - E8690AEE1D3920C800DBC331 /* pak005-Models.pak in Resources */ = {isa = PBXBuildFile; fileRef = E8690AE81D3920C800DBC331 /* pak005-Models.pak */; }; - E8690AEF1D3920C800DBC331 /* pak010-BaseSkin.pak in Resources */ = {isa = PBXBuildFile; fileRef = E8690AE91D3920C800DBC331 /* pak010-BaseSkin.pak */; }; - E8690AF01D3920C800DBC331 /* pak050-Locales.pak in Resources */ = {isa = PBXBuildFile; fileRef = E8690AEA1D3920C800DBC331 /* pak050-Locales.pak */; }; - E8690AF11D3920C800DBC331 /* pak999-References.pak in Resources */ = {isa = PBXBuildFile; fileRef = E8690AEB1D3920C800DBC331 /* pak999-References.pak */; }; - E8725DAD1DE33B4D003BC987 /* NoiseSampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8725DAB1DE33B4D003BC987 /* NoiseSampler.cpp */; }; - E874834718EACF0300C29033 /* OpenSpades.icns in Resources */ = {isa = PBXBuildFile; fileRef = E874834618EACF0300C29033 /* OpenSpades.icns */; }; - E874834918ED1BE500C29033 /* SDL2_image.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E87AB82418BB3A04006B7D73 /* SDL2_image.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - E874834A18ED1BE500C29033 /* SDL2.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E8B93AD418559EC600BD01E1 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - E88344101E03244F000C3E39 /* FontManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E883440F1E03244F000C3E39 /* FontManager.cpp */; }; - E88F46591DE1B192009E85E5 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8CF03F2178EF916000683D4 /* Cocoa.framework */; }; - E893A3611E3E141D000654A4 /* PackageUpdateManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E893A35F1E3E141D000654A4 /* PackageUpdateManager.cpp */; }; - E893A3631E3E3331000654A4 /* PackageUpdateManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E893A3621E3E3331000654A4 /* PackageUpdateManager.cpp */; }; - E893A3651E3E4181000654A4 /* PackageInfo.json in Resources */ = {isa = PBXBuildFile; fileRef = E893A3641E3E4181000654A4 /* PackageInfo.json */; }; - E89A5F1E1DF8732200857F65 /* ShellApi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E89A5F1C1DF8732200857F65 /* ShellApi.cpp */; }; - E89A5F201DF8759200857F65 /* ShellApi.mm in Sources */ = {isa = PBXBuildFile; fileRef = E89A5F1F1DF8759200857F65 /* ShellApi.mm */; }; - E89BBDC31B3559CD00F53EE9 /* GLAutoExposureFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E89BBDC01B3559CD00F53EE9 /* GLAutoExposureFilter.cpp */; }; - E8A2EBA01F5BE16D00E39CD9 /* GameProperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8A2EB9E1F5BE16D00E39CD9 /* GameProperties.cpp */; }; - E8C7D7AE22DA34F500F78763 /* ConsoleHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C7D7AB22DA34F400F78763 /* ConsoleHelper.cpp */; }; - E8C7D7AF22DA34F500F78763 /* ConsoleScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C7D7AC22DA34F400F78763 /* ConsoleScreen.cpp */; }; - E8C7D7B122DA35F000F78763 /* ConsoleHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C7D7B022DA35F000F78763 /* ConsoleHelper.cpp */; }; - E8C7D7B422DAF5B500F78763 /* ConsoleCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C7D7B322DAF5B400F78763 /* ConsoleCommand.cpp */; }; - E8C7D7BA22DB220300F78763 /* ConfigConsoleResponder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C7D7B822DB220200F78763 /* ConfigConsoleResponder.cpp */; }; - E8C7D7BE22DB2A4400F78763 /* ConsoleCommandCandidate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C7D7BD22DB2A4400F78763 /* ConsoleCommandCandidate.cpp */; }; - E8C7D7C022DB3AE000F78763 /* ConsoleCommandCandidate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C7D7BF22DB3AE000F78763 /* ConsoleCommandCandidate.cpp */; }; - E8C7D7C222DB636000F78763 /* Client_Console.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8C7D7C122DB635F00F78763 /* Client_Console.cpp */; }; - E8CB47CE1DE071CA00BF606A /* SWUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CB47CC1DE071CA00BF606A /* SWUtils.cpp */; }; - E8CB47D21DE07CF000BF606A /* SettingSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CB47CF1DE07CF000BF606A /* SettingSet.cpp */; }; - E8CB47D61DE084AB00BF606A /* GLSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CB47D41DE084AB00BF606A /* GLSettings.cpp */; }; - E8D0E5D318F321E300DE3BDB /* GLNonlinearizeFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8D0E5D018F3215000DE3BDB /* GLNonlinearizeFilter.cpp */; }; - E8EF8B571E1D70D900E0829C /* SplashWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8EF8B551E1D70D900E0829C /* SplashWindow.cpp */; }; - E8F6E6E71DCF503500FE76BB /* MumbleLink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8F6E6E41DCF503200FE76BB /* MumbleLink.cpp */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - E874834818ED1BDD00C29033 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - E874834918ED1BE500C29033 /* SDL2_image.framework in CopyFiles */, - E874834A18ED1BE500C29033 /* SDL2.framework in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - E80950081E17F66500AECDF2 /* GLSSAOFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLSSAOFilter.cpp; sourceTree = ""; }; - E80950091E17F66500AECDF2 /* GLSSAOFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSSAOFilter.h; sourceTree = ""; }; - E80B286017A2462D0056179E /* GLShadowMapShader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLShadowMapShader.cpp; sourceTree = ""; }; - E80B286117A2462D0056179E /* GLShadowMapShader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLShadowMapShader.h; sourceTree = ""; }; - E80B286317A24AED0056179E /* GLBasicShadowMapRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLBasicShadowMapRenderer.cpp; sourceTree = ""; }; - E80B286417A24AED0056179E /* GLBasicShadowMapRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLBasicShadowMapRenderer.h; sourceTree = ""; }; - E80B286C17A3B0570056179E /* ConcurrentDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConcurrentDispatch.cpp; sourceTree = ""; }; - E80B286D17A3B0570056179E /* ConcurrentDispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConcurrentDispatch.h; sourceTree = ""; }; - E80B286F17A4CA2B0056179E /* GLOptimizedVoxelModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLOptimizedVoxelModel.cpp; sourceTree = ""; }; - E80B287017A4CA2C0056179E /* GLOptimizedVoxelModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLOptimizedVoxelModel.h; sourceTree = ""; }; - E80B288617A52AB60056179E /* BitmapAtlasGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BitmapAtlasGenerator.cpp; sourceTree = ""; }; - E80B288717A52AB70056179E /* BitmapAtlasGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BitmapAtlasGenerator.h; sourceTree = ""; }; - E80B288A17A52CBB0056179E /* binpack2d.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = binpack2d.hpp; sourceTree = ""; }; - E80B288B17A5FFB30056179E /* ThreadLocalStorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadLocalStorage.cpp; sourceTree = ""; }; - E80B288C17A5FFB40056179E /* ThreadLocalStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadLocalStorage.h; sourceTree = ""; }; - E80B289417A9D6B40056179E /* GLDynamicLight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLDynamicLight.cpp; sourceTree = ""; }; - E80B289517A9D6B50056179E /* GLDynamicLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLDynamicLight.h; sourceTree = ""; }; - E80B289717AA63FC0056179E /* GLWaterRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLWaterRenderer.cpp; sourceTree = ""; }; - E80B289817AA63FF0056179E /* GLWaterRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLWaterRenderer.h; sourceTree = ""; }; - E80B28B217ABAC790056179E /* .hg_archival.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .hg_archival.txt; sourceTree = ""; }; - E80B28B317ABAC790056179E /* .hgignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .hgignore; sourceTree = ""; }; - E80B28B417ABAC790056179E /* .hgtags */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .hgtags; sourceTree = ""; }; - E80B28B517ABAC790056179E /* _kiss_fft_guts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _kiss_fft_guts.h; sourceTree = ""; }; - E80B28B617ABAC790056179E /* CHANGELOG */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGELOG; sourceTree = ""; }; - E80B28B717ABAC790056179E /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; - E80B28B817ABAC790056179E /* kiss_fft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = kiss_fft.c; sourceTree = ""; }; - E80B28B917ABAC790056179E /* kiss_fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kiss_fft.h; sourceTree = ""; }; - E80B28BA17ABAC790056179E /* kissfft.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = kissfft.hh; sourceTree = ""; }; - E80B28BB17ABAC790056179E /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; - E80B28BC17ABAC790056179E /* README.simd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.simd; sourceTree = ""; }; - E80B28BF17AE7FEB0056179E /* GLAmbientShadowRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLAmbientShadowRenderer.cpp; sourceTree = ""; }; - E80B28C017AE7FEE0056179E /* GLAmbientShadowRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLAmbientShadowRenderer.h; sourceTree = ""; }; - E80B28CB17AFCCC40056179E /* PaletteView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PaletteView.cpp; sourceTree = ""; }; - E80B28CC17AFCCC70056179E /* PaletteView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaletteView.h; sourceTree = ""; }; - E80B28CE17AFE68A0056179E /* TCGameMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TCGameMode.cpp; sourceTree = ""; }; - E80B28CF17AFE68A0056179E /* TCGameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TCGameMode.h; sourceTree = ""; }; - E80B28D117AFF77B0056179E /* TCProgressView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TCProgressView.cpp; sourceTree = ""; }; - E80B28D217AFF77E0056179E /* TCProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TCProgressView.h; sourceTree = ""; }; - E80B28D617B39D160056179E /* ioapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ioapi.c; sourceTree = ""; }; - E80B28D717B39D160056179E /* ioapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = ""; }; - E80B28D817B39D160056179E /* unzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unzip.c; sourceTree = ""; }; - E80B28D917B39D160056179E /* unzip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = ""; }; - E80B28DC17B39EEE0056179E /* ZipFileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ZipFileSystem.cpp; sourceTree = ""; }; - E80B28DD17B39EEF0056179E /* ZipFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZipFileSystem.h; sourceTree = ""; }; - E80B28DF17B4FDD40056179E /* DynamicMemoryStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DynamicMemoryStream.cpp; sourceTree = ""; }; - E80B28E017B4FDD70056179E /* DynamicMemoryStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicMemoryStream.h; sourceTree = ""; }; - E810122F1E1D7301009955D3 /* Icon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Icon.cpp; sourceTree = ""; }; - E81012301E1D7301009955D3 /* Icon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Icon.h; sourceTree = ""; }; - E81A7C6218610AA900BF3FCE /* SWRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWRenderer.cpp; sourceTree = ""; }; - E81A7C6318610AA900BF3FCE /* SWRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWRenderer.h; sourceTree = ""; }; - E81A7C6518610BE400BF3FCE /* SWPort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWPort.cpp; sourceTree = ""; }; - E81A7C6618610BE400BF3FCE /* SWPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWPort.h; sourceTree = ""; }; - E81A7C691861525D00BF3FCE /* SWImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWImage.cpp; sourceTree = ""; }; - E81A7C6A1861525D00BF3FCE /* SWImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWImage.h; sourceTree = ""; }; - E81A7C6C186152A400BF3FCE /* SWModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWModel.cpp; sourceTree = ""; }; - E81A7C6D186152A400BF3FCE /* SWModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWModel.h; sourceTree = ""; }; - E81A7C6F1861F4E200BF3FCE /* SWImageRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWImageRenderer.cpp; sourceTree = ""; }; - E81A7C701861F4E200BF3FCE /* SWImageRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWImageRenderer.h; sourceTree = ""; }; - E81A7C721863562A00BF3FCE /* SWFeatureLevel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SWFeatureLevel.h; sourceTree = ""; }; - E81A7C731863566200BF3FCE /* SWFeatureLevel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWFeatureLevel.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - E81A7C751864171100BF3FCE /* SWMapRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWMapRenderer.cpp; sourceTree = ""; }; - E81A7C761864171100BF3FCE /* SWMapRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWMapRenderer.h; sourceTree = ""; }; - E81A7C7818642BCA00BF3FCE /* SWFlatMapRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWFlatMapRenderer.cpp; sourceTree = ""; }; - E81A7C7918642BCA00BF3FCE /* SWFlatMapRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWFlatMapRenderer.h; sourceTree = ""; }; - E81A7C7B1865A2E900BF3FCE /* MiniHeap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MiniHeap.cpp; sourceTree = ""; }; - E81A7C7C1865A2E900BF3FCE /* MiniHeap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MiniHeap.h; sourceTree = ""; }; - E81CE4A4183F7A3000F22685 /* IFont.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IFont.cpp; sourceTree = ""; }; - E81CE4A7183F7F2000F22685 /* MainScreen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MainScreen.cpp; sourceTree = ""; }; - E81CE4A8183F7F2000F22685 /* MainScreen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainScreen.h; sourceTree = ""; }; - E82E66B218E9A35C004DBA18 /* Client_FPSCounter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Client_FPSCounter.cpp; sourceTree = ""; }; - E82E66B918EA78F5004DBA18 /* OpenSpades.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OpenSpades.app; sourceTree = BUILT_PRODUCTS_DIR; }; - E82E67F318EA7EAB004DBA18 /* font-unifont.pak */ = {isa = PBXFileReference; lastKnownFileType = file; name = "font-unifont.pak"; path = "Resources/font-unifont.pak"; sourceTree = ""; }; - E82E680318EA7F60004DBA18 /* libysrspades.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libysrspades.dylib; path = lib/libysrspades.dylib; sourceTree = ""; }; - E82E680618EA9502004DBA18 /* XSpades.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = XSpades.entitlements; path = XSpades/XSpades.entitlements; sourceTree = ""; }; - E831D8661FD65BD5003C0D97 /* ClientCameraMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClientCameraMode.h; sourceTree = ""; }; - E834F54E17942C43004EBE88 /* Grenade.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Grenade.cpp; sourceTree = ""; }; - E834F54F17942C43004EBE88 /* Grenade.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Grenade.h; sourceTree = ""; }; - E834F55117944778004EBE88 /* NetClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetClient.cpp; sourceTree = ""; }; - E834F55217944779004EBE88 /* NetClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetClient.h; sourceTree = ""; }; - E834F5541794BBD4004EBE88 /* Debug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Debug.cpp; sourceTree = ""; }; - E834F5551794BBD4004EBE88 /* Debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Debug.h; sourceTree = ""; }; - E834F5571794DCF9004EBE88 /* IGameMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IGameMode.cpp; sourceTree = ""; }; - E834F5581794DCFB004EBE88 /* IGameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGameMode.h; sourceTree = ""; }; - E834F55A1794DDA2004EBE88 /* CTFGameMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTFGameMode.cpp; sourceTree = ""; }; - E834F55B1794DDA4004EBE88 /* CTFGameMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CTFGameMode.h; sourceTree = ""; }; - E834F55D17950E41004EBE88 /* DeflateStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeflateStream.cpp; sourceTree = ""; }; - E834F55E17950E42004EBE88 /* DeflateStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeflateStream.h; sourceTree = ""; }; - E834F56317951B1A004EBE88 /* MemoryStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryStream.cpp; sourceTree = ""; }; - E834F56417951B1B004EBE88 /* MemoryStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryStream.h; sourceTree = ""; }; - E834F56617979F55004EBE88 /* Quake3Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Quake3Font.cpp; sourceTree = ""; }; - E834F56717979F57004EBE88 /* Quake3Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Quake3Font.h; sourceTree = ""; }; - E834F56917979FD3004EBE88 /* IFont.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IFont.cpp; sourceTree = ""; }; - E834F56A17979FD5004EBE88 /* IFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IFont.h; sourceTree = ""; }; - E834F56C1797AA2C004EBE88 /* FontData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FontData.h; sourceTree = ""; }; - E834F56D1797D92F004EBE88 /* ChatWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChatWindow.cpp; sourceTree = ""; }; - E834F56E1797D932004EBE88 /* ChatWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatWindow.h; sourceTree = ""; }; - E83668AD1E05757B00977A63 /* OpusAudioStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OpusAudioStream.cpp; sourceTree = ""; }; - E83668AE1E05757B00977A63 /* OpusAudioStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpusAudioStream.h; sourceTree = ""; }; - E83668B01E05844E00977A63 /* AudioStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioStream.cpp; sourceTree = ""; }; - E83668B11E05844E00977A63 /* AudioStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioStream.h; sourceTree = ""; }; - E838D41D18AC726B00EE3C53 /* Strings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Strings.cpp; sourceTree = ""; }; - E838D41E18AC726B00EE3C53 /* Strings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Strings.h; sourceTree = ""; }; - E838D42018ADDE2800EE3C53 /* StringsScript.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StringsScript.cpp; sourceTree = ""; }; - E8403CA6229061BE00093C3E /* RandomAccessAdaptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RandomAccessAdaptor.cpp; sourceTree = ""; }; - E8403CA7229061BE00093C3E /* RandomAccessAdaptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RandomAccessAdaptor.h; sourceTree = ""; }; - E8403CA9229123CF00093C3E /* PipeStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PipeStream.cpp; sourceTree = ""; }; - E8403CAA229123CF00093C3E /* PipeStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PipeStream.h; sourceTree = ""; }; - E8403CAC2291280700093C3E /* GameMapLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameMapLoader.h; sourceTree = ""; }; - E8403CAD2291280700093C3E /* GameMapLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GameMapLoader.cpp; sourceTree = ""; }; - E8403CAF2299073400093C3E /* VoxelModelLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VoxelModelLoader.h; sourceTree = ""; }; - E8403CB02299073400093C3E /* VoxelModelLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VoxelModelLoader.cpp; sourceTree = ""; }; - E842888918A3CF6C0060743D /* StartupScreen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StartupScreen.cpp; sourceTree = ""; }; - E842888A18A3CF6C0060743D /* StartupScreen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StartupScreen.h; sourceTree = ""; }; - E842888C18A3D1520060743D /* StartupScreenHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StartupScreenHelper.cpp; sourceTree = ""; }; - E842888D18A3D1520060743D /* StartupScreenHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StartupScreenHelper.h; sourceTree = ""; }; - E842888F18A3D6470060743D /* StartupScreenHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StartupScreenHelper.cpp; sourceTree = ""; }; - E842889118A3D9C40060743D /* NullDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NullDevice.cpp; sourceTree = ""; }; - E842889218A3D9C40060743D /* NullDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NullDevice.h; sourceTree = ""; }; - E842889418A667930060743D /* Fonts.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Fonts.cpp; sourceTree = ""; }; - E842889518A667930060743D /* Fonts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Fonts.h; sourceTree = ""; }; - E842D48B17C0D06300381B49 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - E844886017CFB32B005105D0 /* GLLongSpriteRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLLongSpriteRenderer.cpp; sourceTree = ""; }; - E844886117CFB32B005105D0 /* GLLongSpriteRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLLongSpriteRenderer.h; sourceTree = ""; }; - E844886417D0C43B005105D0 /* Tracer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Tracer.cpp; sourceTree = ""; }; - E844886517D0C43B005105D0 /* Tracer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tracer.h; sourceTree = ""; }; - E844886717D262C1005105D0 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - E844886D17D2633C005105D0 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - E844887017D2633C005105D0 /* autolink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = autolink.h; sourceTree = ""; }; - E844887117D2633C005105D0 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; - E844887217D2633C005105D0 /* features.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = features.h; sourceTree = ""; }; - E844887317D2633C005105D0 /* forwards.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = forwards.h; sourceTree = ""; }; - E844887417D2633C005105D0 /* json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json.h; sourceTree = ""; }; - E844887517D2633C005105D0 /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reader.h; sourceTree = ""; }; - E844887617D2633C005105D0 /* value.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value.h; sourceTree = ""; }; - E844887717D2633C005105D0 /* writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = writer.h; sourceTree = ""; }; - E844887817D2633C005105D0 /* json_batchallocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json_batchallocator.h; sourceTree = ""; }; - E844887917D2633C005105D0 /* json_internalarray.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json_internalarray.inl; sourceTree = ""; }; - E844887A17D2633C005105D0 /* json_internalmap.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json_internalmap.inl; sourceTree = ""; }; - E844887B17D2633C005105D0 /* json_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_reader.cpp; sourceTree = ""; }; - E844887C17D2633C005105D0 /* json_value.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_value.cpp; sourceTree = ""; }; - E844887D17D2633C005105D0 /* json_valueiterator.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json_valueiterator.inl; sourceTree = ""; }; - E844887E17D2633C005105D0 /* json_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_writer.cpp; sourceTree = ""; }; - E844887F17D2633C005105D0 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - E844888017D2633C005105D0 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - E844888117D2633C005105D0 /* version */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = version; sourceTree = ""; }; - E844888517D26411005105D0 /* OpenSpades.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenSpades.h; sourceTree = SOURCE_ROOT; }; - E844888617D26699005105D0 /* libcurl.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcurl.tbd; path = usr/lib/libcurl.tbd; sourceTree = SDKROOT; }; - E844888B17D3A059005105D0 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - E8493DB61A7349030055731A /* Config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = ""; }; - E849654B18E9487300B9706D /* FltkPreferenceImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FltkPreferenceImporter.cpp; sourceTree = ""; }; - E849654C18E9487300B9706D /* FltkPreferenceImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FltkPreferenceImporter.h; sourceTree = ""; }; - E849654E18E94F1200B9706D /* SdlFileStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SdlFileStream.cpp; sourceTree = ""; }; - E849654F18E94F1200B9706D /* SdlFileStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SdlFileStream.h; sourceTree = ""; }; - E84E221318BB449A001282B0 /* FindGLEW2.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = FindGLEW2.cmake; sourceTree = ""; }; - E84E221418BB449A001282B0 /* FindSDL2.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = FindSDL2.cmake; sourceTree = ""; }; - E84E221818BB4BA0001282B0 /* Credits.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = Credits.inc; sourceTree = ""; }; - E85233791839B28C00F40541 /* VersionInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VersionInfo.cpp; sourceTree = ""; }; - E852337A1839B28C00F40541 /* VersionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VersionInfo.h; sourceTree = ""; }; - E8567E551792B24D009D83E0 /* IAudioChunk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IAudioChunk.cpp; sourceTree = ""; }; - E8567E561792B24D009D83E0 /* IAudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IAudioChunk.h; sourceTree = ""; }; - E8567E581792BEFC009D83E0 /* ALDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ALDevice.cpp; sourceTree = ""; }; - E8567E591792BEFC009D83E0 /* ALDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ALDevice.h; sourceTree = ""; }; - E8567E5B1792BFFE009D83E0 /* ALFuncs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ALFuncs.h; sourceTree = ""; }; - E8567E5C1792C089009D83E0 /* ALFuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ALFuncs.cpp; sourceTree = ""; }; - E8567E5E1792C0FF009D83E0 /* DynamicLibrary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DynamicLibrary.cpp; sourceTree = ""; }; - E8567E5F1792C0FF009D83E0 /* DynamicLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicLibrary.h; sourceTree = ""; }; - E8567E611792CA12009D83E0 /* IAudioStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IAudioStream.cpp; sourceTree = ""; }; - E8567E621792CA12009D83E0 /* IAudioStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IAudioStream.h; sourceTree = ""; }; - E8567E641792CCE5009D83E0 /* WavAudioStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WavAudioStream.cpp; sourceTree = ""; }; - E8567E651792CCE5009D83E0 /* WavAudioStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WavAudioStream.h; sourceTree = ""; }; - E8567E6A1792F398009D83E0 /* IWorldListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IWorldListener.cpp; sourceTree = ""; }; - E8567E6B1792F399009D83E0 /* IWorldListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IWorldListener.h; sourceTree = ""; }; - E8567E6D1792FEEB009D83E0 /* AL */ = {isa = PBXFileReference; lastKnownFileType = folder; path = AL; sourceTree = ""; }; - E8567E6E1793AA45009D83E0 /* Weapon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Weapon.cpp; sourceTree = ""; }; - E8567E6F1793AA46009D83E0 /* Weapon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Weapon.h; sourceTree = ""; }; - E8567E711793D5AD009D83E0 /* IModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IModel.cpp; sourceTree = ""; }; - E8567E721793D5AD009D83E0 /* IModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IModel.h; sourceTree = ""; }; - E8567E741793D60E009D83E0 /* GLModelManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLModelManager.cpp; sourceTree = ""; }; - E8567E751793D60E009D83E0 /* GLModelManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLModelManager.h; sourceTree = ""; }; - E8567E771793DC37009D83E0 /* VoxelModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VoxelModel.cpp; sourceTree = ""; }; - E8567E781793DC37009D83E0 /* VoxelModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VoxelModel.h; sourceTree = ""; }; - E8567E7A1793E105009D83E0 /* GLModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLModel.cpp; sourceTree = ""; }; - E8567E7B1793E105009D83E0 /* GLModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLModel.h; sourceTree = ""; }; - E8567E7D1793E1B3009D83E0 /* GLVoxelModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLVoxelModel.cpp; sourceTree = ""; }; - E8567E7E1793E1B3009D83E0 /* GLVoxelModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLVoxelModel.h; sourceTree = ""; }; - E859510A17C5DA060012810C /* GLFogFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLFogFilter.cpp; sourceTree = ""; }; - E859510B17C5DA060012810C /* GLFogFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLFogFilter.h; sourceTree = ""; }; - E859510D17C61F850012810C /* GLLensFlareFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLLensFlareFilter.cpp; sourceTree = ""; }; - E859510E17C61F850012810C /* GLLensFlareFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLLensFlareFilter.h; sourceTree = ""; }; - E859511017C645000012810C /* GLFXAAFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLFXAAFilter.cpp; sourceTree = ""; }; - E859511117C645000012810C /* GLFXAAFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLFXAAFilter.h; sourceTree = ""; }; - E859511317C96B260012810C /* GLProfiler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLProfiler.cpp; sourceTree = ""; }; - E859511417C96B270012810C /* GLProfiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLProfiler.h; sourceTree = ""; }; - E8626EB51E100EC6003365BF /* libfreetype.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfreetype.a; path = lib/libfreetype.a; sourceTree = ""; }; - E8626EB71E100FB2003365BF /* libogg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libogg.a; path = lib/libogg.a; sourceTree = ""; }; - E8626EB91E101072003365BF /* libopus.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libopus.a; path = lib/libopus.a; sourceTree = ""; }; - E8626EBA1E101072003365BF /* libopusfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libopusfile.a; path = lib/libopusfile.a; sourceTree = ""; }; - E8626EBD1E1010CA003365BF /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; }; - E8655AA61DFC0A6E00D5058A /* FTFont.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FTFont.cpp; sourceTree = ""; }; - E8655AA71DFC0A6E00D5058A /* FTFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FTFont.h; sourceTree = ""; }; - E8655AA91DFC0AAA00D5058A /* TMPUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TMPUtils.h; sourceTree = ""; }; - E867B6E31DD49D7F0093E4E0 /* as_namespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_namespace.h; sourceTree = ""; }; - E8690AE61D3920C800DBC331 /* pak000-Nonfree.pak */ = {isa = PBXFileReference; lastKnownFileType = file; name = "pak000-Nonfree.pak"; path = "Resources/pak000-Nonfree.pak"; sourceTree = ""; }; - E8690AE71D3920C800DBC331 /* pak002-Base.pak */ = {isa = PBXFileReference; lastKnownFileType = file; name = "pak002-Base.pak"; path = "Resources/pak002-Base.pak"; sourceTree = ""; }; - E8690AE81D3920C800DBC331 /* pak005-Models.pak */ = {isa = PBXFileReference; lastKnownFileType = file; name = "pak005-Models.pak"; path = "Resources/pak005-Models.pak"; sourceTree = ""; }; - E8690AE91D3920C800DBC331 /* pak010-BaseSkin.pak */ = {isa = PBXFileReference; lastKnownFileType = file; name = "pak010-BaseSkin.pak"; path = "Resources/pak010-BaseSkin.pak"; sourceTree = ""; }; - E8690AEA1D3920C800DBC331 /* pak050-Locales.pak */ = {isa = PBXFileReference; lastKnownFileType = file; name = "pak050-Locales.pak"; path = "Resources/pak050-Locales.pak"; sourceTree = ""; }; - E8690AEB1D3920C800DBC331 /* pak999-References.pak */ = {isa = PBXFileReference; lastKnownFileType = file; name = "pak999-References.pak"; path = "Resources/pak999-References.pak"; sourceTree = ""; }; - E86D20D12171BF9700964257 /* Disposable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Disposable.h; sourceTree = ""; }; - E8725DAB1DE33B4D003BC987 /* NoiseSampler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NoiseSampler.cpp; sourceTree = ""; }; - E8725DAC1DE33B4D003BC987 /* NoiseSampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoiseSampler.h; sourceTree = ""; }; - E874834618EACF0300C29033 /* OpenSpades.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = OpenSpades.icns; path = Resources/Icons/OpenSpades.icns; sourceTree = ""; }; - E87AB82118BB3957006B7D73 /* SdlImageReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SdlImageReader.cpp; sourceTree = ""; }; - E87AB82418BB3A04006B7D73 /* SDL2_image.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2_image.framework; path = lib/SDL2_image.framework; sourceTree = ""; }; - E88318A91790EBAA002ABE6D /* GLProgramUniform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLProgramUniform.cpp; sourceTree = ""; }; - E88318AA1790EBAA002ABE6D /* GLProgramUniform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLProgramUniform.h; sourceTree = ""; }; - E88318AC1790EDDF002ABE6D /* GLProgramAttribute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLProgramAttribute.cpp; sourceTree = ""; }; - E88318AD1790EDDF002ABE6D /* GLProgramAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLProgramAttribute.h; sourceTree = ""; }; - E88318AF1790F73F002ABE6D /* GLMapRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLMapRenderer.cpp; sourceTree = ""; }; - E88318B01790F73F002ABE6D /* GLMapRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLMapRenderer.h; sourceTree = ""; }; - E88318B217911A73002ABE6D /* GLMapChunk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLMapChunk.cpp; sourceTree = ""; }; - E88318B317911A73002ABE6D /* GLMapChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLMapChunk.h; sourceTree = ""; }; - E88318D3179172AF002ABE6D /* Bitmap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bitmap.cpp; sourceTree = ""; }; - E88318D4179172AF002ABE6D /* Bitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bitmap.h; sourceTree = ""; }; - E88318D6179176F3002ABE6D /* GLImageManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLImageManager.cpp; sourceTree = ""; }; - E88318D7179176F3002ABE6D /* GLImageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLImageManager.h; sourceTree = ""; }; - E88318D9179256E4002ABE6D /* Player.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Player.cpp; sourceTree = ""; }; - E88318DA179256E5002ABE6D /* Player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Player.h; sourceTree = ""; }; - E88318DC179257F0002ABE6D /* GameMapWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GameMapWrapper.cpp; sourceTree = ""; }; - E88318DD179257F0002ABE6D /* GameMapWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameMapWrapper.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - E88318E21792698D002ABE6D /* Stopwatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Stopwatch.cpp; sourceTree = ""; }; - E88318E31792698D002ABE6D /* Stopwatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Stopwatch.h; sourceTree = ""; }; - E88318E517928EAC002ABE6D /* PhysicsConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PhysicsConstants.h; sourceTree = ""; }; - E88318E617928F84002ABE6D /* World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = World.cpp; sourceTree = ""; }; - E88318E717928F85002ABE6D /* World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = World.h; sourceTree = ""; }; - E88319021792A7CC002ABE6D /* callbacks.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = callbacks.c; sourceTree = ""; }; - E88319031792A7CC002ABE6D /* compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = compress.c; sourceTree = ""; }; - E88319041792A7CC002ABE6D /* host.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = host.c; sourceTree = ""; }; - E88319071792A7CC002ABE6D /* callbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = ""; }; - E88319081792A7CC002ABE6D /* enet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enet.h; sourceTree = ""; }; - E88319091792A7CC002ABE6D /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = ""; }; - E883190A1792A7CC002ABE6D /* protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = protocol.h; sourceTree = ""; }; - E883190B1792A7CC002ABE6D /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = ""; }; - E883190C1792A7CC002ABE6D /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; - E883190D1792A7CC002ABE6D /* unix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unix.h; sourceTree = ""; }; - E883190E1792A7CC002ABE6D /* utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utility.h; sourceTree = ""; }; - E883190F1792A7CC002ABE6D /* win32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = win32.h; sourceTree = ""; }; - E88319101792A7CC002ABE6D /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - E88319111792A7CC002ABE6D /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = ""; }; - E88319121792A7CC002ABE6D /* packet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = packet.c; sourceTree = ""; }; - E88319131792A7CC002ABE6D /* peer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = peer.c; sourceTree = ""; }; - E88319141792A7CC002ABE6D /* protocol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = protocol.c; sourceTree = ""; }; - E88319151792A7CC002ABE6D /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; - E88319161792A7CC002ABE6D /* unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unix.c; sourceTree = ""; }; - E88319171792A7CC002ABE6D /* win32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = win32.c; sourceTree = ""; }; - E883440F1E03244F000C3E39 /* FontManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontManager.cpp; sourceTree = ""; }; - E88EB02D185D9DC500565D07 /* YsrDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = YsrDevice.cpp; sourceTree = ""; }; - E88EB02E185D9DC500565D07 /* YsrDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YsrDevice.h; sourceTree = ""; }; - E890F30E187046990090AAB8 /* CP437.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CP437.cpp; sourceTree = ""; }; - E890F30F187046990090AAB8 /* CP437.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CP437.h; sourceTree = ""; }; - E893A35F1E3E141D000654A4 /* PackageUpdateManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PackageUpdateManager.cpp; sourceTree = ""; }; - E893A3601E3E141D000654A4 /* PackageUpdateManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackageUpdateManager.h; sourceTree = ""; }; - E893A3621E3E3331000654A4 /* PackageUpdateManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PackageUpdateManager.cpp; sourceTree = ""; }; - E893A3641E3E4181000654A4 /* PackageInfo.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = PackageInfo.json; path = XSpades/PackageInfo.json; sourceTree = ""; }; - E895D65B18D4A10E00F5B9CA /* jpge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jpge.cpp; sourceTree = ""; }; - E895D65C18D4A10E00F5B9CA /* jpge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jpge.h; sourceTree = ""; }; - E895D65E18D4A15900F5B9CA /* JpegWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JpegWriter.cpp; sourceTree = ""; }; - E895D66118D614DE00F5B9CA /* pnglite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pnglite.c; sourceTree = ""; }; - E895D66218D614DE00F5B9CA /* pnglite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pnglite.h; sourceTree = ""; }; - E895D66318D614DE00F5B9CA /* PngWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PngWriter.cpp; sourceTree = ""; }; - E89A5F1C1DF8732200857F65 /* ShellApi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShellApi.cpp; sourceTree = ""; }; - E89A5F1D1DF8732200857F65 /* ShellApi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShellApi.h; sourceTree = ""; }; - E89A5F1F1DF8759200857F65 /* ShellApi.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ShellApi.mm; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - E89A648C17A11B4E00FDA893 /* GLModelRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLModelRenderer.cpp; sourceTree = ""; }; - E89A648D17A11B4E00FDA893 /* GLModelRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLModelRenderer.h; sourceTree = ""; }; - E89A648F17A12FF800FDA893 /* GLDynamicLightShader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLDynamicLightShader.cpp; sourceTree = ""; }; - E89A649017A12FF800FDA893 /* GLDynamicLightShader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLDynamicLightShader.h; sourceTree = ""; }; - E89A649217A1677F00FDA893 /* FallingBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FallingBlock.cpp; sourceTree = ""; }; - E89A649317A1677F00FDA893 /* FallingBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FallingBlock.h; sourceTree = ""; }; - E89A649517A1835900FDA893 /* GunCasing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GunCasing.cpp; sourceTree = ""; }; - E89A649617A1835900FDA893 /* GunCasing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GunCasing.h; sourceTree = ""; }; - E89A649817A2402500FDA893 /* IGLShadowMapRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IGLShadowMapRenderer.cpp; sourceTree = ""; }; - E89A649917A2402700FDA893 /* IGLShadowMapRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGLShadowMapRenderer.h; sourceTree = ""; }; - E89BBDC01B3559CD00F53EE9 /* GLAutoExposureFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLAutoExposureFilter.cpp; sourceTree = ""; }; - E89BBDC11B3559CD00F53EE9 /* GLAutoExposureFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLAutoExposureFilter.h; sourceTree = ""; }; - E89E811F179C2C800059C649 /* GLBloomFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLBloomFilter.cpp; sourceTree = ""; }; - E89E8120179C2C800059C649 /* GLBloomFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLBloomFilter.h; sourceTree = ""; }; - E8A2EB9E1F5BE16D00E39CD9 /* GameProperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GameProperties.cpp; sourceTree = ""; }; - E8A2EB9F1F5BE16D00E39CD9 /* GameProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameProperties.h; sourceTree = ""; }; - E8B6B63F17DE27B500E35523 /* angelscript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = angelscript.h; sourceTree = ""; }; - E8B6B64117DE27B500E35523 /* as_array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_array.h; sourceTree = ""; }; - E8B6B64217DE27B500E35523 /* as_atomic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_atomic.cpp; sourceTree = ""; }; - E8B6B64317DE27B500E35523 /* as_atomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_atomic.h; sourceTree = ""; }; - E8B6B64417DE27B500E35523 /* as_builder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_builder.cpp; sourceTree = ""; }; - E8B6B64517DE27B500E35523 /* as_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_builder.h; sourceTree = ""; }; - E8B6B64617DE27B500E35523 /* as_bytecode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_bytecode.cpp; sourceTree = ""; }; - E8B6B64717DE27B500E35523 /* as_bytecode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_bytecode.h; sourceTree = ""; }; - E8B6B64817DE27B500E35523 /* as_callfunc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc.cpp; sourceTree = ""; }; - E8B6B64917DE27B500E35523 /* as_callfunc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_callfunc.h; sourceTree = ""; }; - E8B6B64A17DE27B500E35523 /* as_callfunc_arm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc_arm.cpp; sourceTree = ""; }; - E8B6B64B17DE27B500E35523 /* as_callfunc_arm_gcc.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = as_callfunc_arm_gcc.S; sourceTree = ""; }; - E8B6B64C17DE27B500E35523 /* as_callfunc_arm_msvc.asm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm.asm; path = as_callfunc_arm_msvc.asm; sourceTree = ""; }; - E8B6B64D17DE27B500E35523 /* as_callfunc_arm_xcode.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = as_callfunc_arm_xcode.S; sourceTree = ""; }; - E8B6B64E17DE27B500E35523 /* as_callfunc_mips.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc_mips.cpp; sourceTree = ""; }; - E8B6B64F17DE27B500E35523 /* as_callfunc_ppc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc_ppc.cpp; sourceTree = ""; }; - E8B6B65017DE27B500E35523 /* as_callfunc_ppc_64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc_ppc_64.cpp; sourceTree = ""; }; - E8B6B65117DE27B500E35523 /* as_callfunc_sh4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc_sh4.cpp; sourceTree = ""; }; - E8B6B65217DE27B500E35523 /* as_callfunc_x64_gcc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc_x64_gcc.cpp; sourceTree = ""; }; - E8B6B65317DE27B500E35523 /* as_callfunc_x64_mingw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc_x64_mingw.cpp; sourceTree = ""; }; - E8B6B65417DE27B500E35523 /* as_callfunc_x64_msvc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc_x64_msvc.cpp; sourceTree = ""; }; - E8B6B65517DE27B500E35523 /* as_callfunc_x64_msvc_asm.asm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm.asm; path = as_callfunc_x64_msvc_asm.asm; sourceTree = ""; }; - E8B6B65617DE27B500E35523 /* as_callfunc_x86.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc_x86.cpp; sourceTree = ""; }; - E8B6B65717DE27B500E35523 /* as_callfunc_xenon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_callfunc_xenon.cpp; sourceTree = ""; }; - E8B6B65817DE27B500E35523 /* as_compiler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_compiler.cpp; sourceTree = ""; }; - E8B6B65917DE27B500E35523 /* as_compiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_compiler.h; sourceTree = ""; }; - E8B6B65A17DE27B500E35523 /* as_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_config.h; sourceTree = ""; }; - E8B6B65B17DE27B500E35523 /* as_configgroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_configgroup.cpp; sourceTree = ""; }; - E8B6B65C17DE27B500E35523 /* as_configgroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_configgroup.h; sourceTree = ""; }; - E8B6B65D17DE27B500E35523 /* as_context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_context.cpp; sourceTree = ""; }; - E8B6B65E17DE27B500E35523 /* as_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_context.h; sourceTree = ""; }; - E8B6B65F17DE27B500E35523 /* as_criticalsection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_criticalsection.h; sourceTree = ""; }; - E8B6B66017DE27B500E35523 /* as_datatype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_datatype.cpp; sourceTree = ""; }; - E8B6B66117DE27B500E35523 /* as_datatype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_datatype.h; sourceTree = ""; }; - E8B6B66217DE27B500E35523 /* as_debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_debug.h; sourceTree = ""; }; - E8B6B66317DE27B500E35523 /* as_gc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_gc.cpp; sourceTree = ""; }; - E8B6B66417DE27B500E35523 /* as_gc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_gc.h; sourceTree = ""; }; - E8B6B66517DE27B500E35523 /* as_generic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_generic.cpp; sourceTree = ""; }; - E8B6B66617DE27B500E35523 /* as_generic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_generic.h; sourceTree = ""; }; - E8B6B66717DE27B500E35523 /* as_globalproperty.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_globalproperty.cpp; sourceTree = ""; }; - E8B6B66817DE27B500E35523 /* as_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_map.h; sourceTree = ""; }; - E8B6B66917DE27B500E35523 /* as_memory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_memory.cpp; sourceTree = ""; }; - E8B6B66A17DE27B500E35523 /* as_memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_memory.h; sourceTree = ""; }; - E8B6B66B17DE27B500E35523 /* as_module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_module.cpp; sourceTree = ""; }; - E8B6B66C17DE27B500E35523 /* as_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_module.h; sourceTree = ""; }; - E8B6B66D17DE27B500E35523 /* as_objecttype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_objecttype.cpp; sourceTree = ""; }; - E8B6B66E17DE27B500E35523 /* as_objecttype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_objecttype.h; sourceTree = ""; }; - E8B6B66F17DE27B500E35523 /* as_outputbuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_outputbuffer.cpp; sourceTree = ""; }; - E8B6B67017DE27B500E35523 /* as_outputbuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_outputbuffer.h; sourceTree = ""; }; - E8B6B67117DE27B500E35523 /* as_parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_parser.cpp; sourceTree = ""; }; - E8B6B67217DE27B500E35523 /* as_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_parser.h; sourceTree = ""; }; - E8B6B67317DE27B500E35523 /* as_property.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_property.h; sourceTree = ""; }; - E8B6B67417DE27B500E35523 /* as_restore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_restore.cpp; sourceTree = ""; }; - E8B6B67517DE27B500E35523 /* as_restore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_restore.h; sourceTree = ""; }; - E8B6B67617DE27B500E35523 /* as_scriptcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_scriptcode.cpp; sourceTree = ""; }; - E8B6B67717DE27B500E35523 /* as_scriptcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_scriptcode.h; sourceTree = ""; }; - E8B6B67817DE27B500E35523 /* as_scriptengine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_scriptengine.cpp; sourceTree = ""; }; - E8B6B67917DE27B500E35523 /* as_scriptengine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_scriptengine.h; sourceTree = ""; }; - E8B6B67A17DE27B500E35523 /* as_scriptfunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_scriptfunction.cpp; sourceTree = ""; }; - E8B6B67B17DE27B500E35523 /* as_scriptfunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_scriptfunction.h; sourceTree = ""; }; - E8B6B67C17DE27B500E35523 /* as_scriptnode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_scriptnode.cpp; sourceTree = ""; }; - E8B6B67D17DE27B500E35523 /* as_scriptnode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_scriptnode.h; sourceTree = ""; }; - E8B6B67E17DE27B500E35523 /* as_scriptobject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_scriptobject.cpp; sourceTree = ""; }; - E8B6B67F17DE27B500E35523 /* as_scriptobject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_scriptobject.h; sourceTree = ""; }; - E8B6B68017DE27B500E35523 /* as_string.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_string.cpp; sourceTree = ""; }; - E8B6B68117DE27B500E35523 /* as_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_string.h; sourceTree = ""; }; - E8B6B68217DE27B500E35523 /* as_string_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_string_util.cpp; sourceTree = ""; }; - E8B6B68317DE27B500E35523 /* as_string_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_string_util.h; sourceTree = ""; }; - E8B6B68417DE27B500E35523 /* as_symboltable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_symboltable.h; sourceTree = ""; }; - E8B6B68517DE27B500E35523 /* as_texts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_texts.h; sourceTree = ""; }; - E8B6B68617DE27B500E35523 /* as_thread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_thread.cpp; sourceTree = ""; }; - E8B6B68717DE27B500E35523 /* as_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_thread.h; sourceTree = ""; }; - E8B6B68817DE27B500E35523 /* as_tokendef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_tokendef.h; sourceTree = ""; }; - E8B6B68917DE27B500E35523 /* as_tokenizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_tokenizer.cpp; sourceTree = ""; }; - E8B6B68A17DE27B500E35523 /* as_tokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_tokenizer.h; sourceTree = ""; }; - E8B6B68B17DE27B500E35523 /* as_typeinfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_typeinfo.cpp; sourceTree = ""; }; - E8B6B68C17DE27B500E35523 /* as_typeinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_typeinfo.h; sourceTree = ""; }; - E8B6B68D17DE27B500E35523 /* as_variablescope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = as_variablescope.cpp; sourceTree = ""; }; - E8B6B68E17DE27B500E35523 /* as_variablescope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = as_variablescope.h; sourceTree = ""; }; - E8B6B6BC17DE2F5500E35523 /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - E8B6B6BD17DF456E00E35523 /* GLSparseShadowMapRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLSparseShadowMapRenderer.cpp; sourceTree = ""; }; - E8B6B6BE17DF456F00E35523 /* GLSparseShadowMapRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSparseShadowMapRenderer.h; sourceTree = ""; }; - E8B6B6E317E165A400E35523 /* GLDepthOfFieldFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLDepthOfFieldFilter.cpp; sourceTree = ""; }; - E8B6B6E417E165A500E35523 /* GLDepthOfFieldFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLDepthOfFieldFilter.h; sourceTree = ""; }; - E8B6B6E717E40AF500E35523 /* MathScript.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathScript.cpp; sourceTree = ""; }; - E8B6B6E817E40AF500E35523 /* ScriptManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptManager.cpp; sourceTree = ""; }; - E8B6B6E917E40AF500E35523 /* ScriptManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptManager.h; sourceTree = ""; }; - E8B6B6EC17E40B5900E35523 /* IImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IImage.cpp; sourceTree = ""; }; - E8B6B6EF17E40DA700E35523 /* RefCountedObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RefCountedObject.cpp; sourceTree = ""; }; - E8B6B6F017E40DAA00E35523 /* RefCountedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RefCountedObject.h; sourceTree = ""; }; - E8B6B6F217E40E8200E35523 /* IModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IModel.cpp; sourceTree = ""; }; - E8B6B6F517E40F9900E35523 /* IRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IRenderer.cpp; sourceTree = ""; }; - E8B6B6F817E4130E00E35523 /* GameMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GameMap.cpp; sourceTree = ""; }; - E8B6B6FB17E413AB00E35523 /* Bitmap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bitmap.cpp; sourceTree = ""; }; - E8B6B6FD17E4141000E35523 /* VoxelModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VoxelModel.cpp; sourceTree = ""; }; - E8B6B70017E4193A00E35523 /* scriptany.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scriptany.cpp; sourceTree = ""; }; - E8B6B70117E4193A00E35523 /* scriptany.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scriptany.h; sourceTree = ""; }; - E8B6B70217E4193A00E35523 /* scriptarray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scriptarray.cpp; sourceTree = ""; }; - E8B6B70317E4193A00E35523 /* scriptarray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scriptarray.h; sourceTree = ""; }; - E8B6B70417E4193A00E35523 /* scriptbuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scriptbuilder.cpp; sourceTree = ""; }; - E8B6B70517E4193A00E35523 /* scriptbuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scriptbuilder.h; sourceTree = ""; }; - E8B6B70617E4193A00E35523 /* scriptdictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scriptdictionary.cpp; sourceTree = ""; }; - E8B6B70717E4193A00E35523 /* scriptdictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scriptdictionary.h; sourceTree = ""; }; - E8B6B70817E4193A00E35523 /* scripthandle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scripthandle.cpp; sourceTree = ""; }; - E8B6B70917E4193A00E35523 /* scripthandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scripthandle.h; sourceTree = ""; }; - E8B6B70A17E4193A00E35523 /* scripthelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scripthelper.cpp; sourceTree = ""; }; - E8B6B70B17E4193A00E35523 /* scripthelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scripthelper.h; sourceTree = ""; }; - E8B6B70C17E4193A00E35523 /* scriptmath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scriptmath.cpp; sourceTree = ""; }; - E8B6B70D17E4193A00E35523 /* scriptmath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scriptmath.h; sourceTree = ""; }; - E8B6B70E17E4193A00E35523 /* scriptmathcomplex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scriptmathcomplex.cpp; sourceTree = ""; }; - E8B6B70F17E4193A00E35523 /* scriptmathcomplex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scriptmathcomplex.h; sourceTree = ""; }; - E8B6B71017E4193A00E35523 /* scriptstdstring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scriptstdstring.cpp; sourceTree = ""; }; - E8B6B71117E4193A00E35523 /* scriptstdstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scriptstdstring.h; sourceTree = ""; }; - E8B6B71217E4193A00E35523 /* scriptstdstring_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scriptstdstring_utils.cpp; sourceTree = ""; }; - E8B6B71317E4193A00E35523 /* weakref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = weakref.cpp; sourceTree = ""; }; - E8B6B71417E4193A00E35523 /* weakref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = weakref.h; sourceTree = ""; }; - E8B6B72017E4508C00E35523 /* IAudioDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IAudioDevice.cpp; sourceTree = ""; }; - E8B6B72217E452EC00E35523 /* IAudioChunk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IAudioChunk.cpp; sourceTree = ""; }; - E8B6B72417E46C1B00E35523 /* PrimitiveArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PrimitiveArray.cpp; sourceTree = ""; }; - E8B6B72617E5AC9C00E35523 /* ServerAddress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ServerAddress.cpp; sourceTree = ""; }; - E8B6B72717E5AC9C00E35523 /* ServerAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerAddress.h; sourceTree = ""; }; - E8B6B72917E6095800E35523 /* GLLensDustFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLLensDustFilter.cpp; sourceTree = ""; }; - E8B6B72A17E6095800E35523 /* GLLensDustFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLLensDustFilter.h; sourceTree = ""; }; - E8B6B72C17E68B1B00E35523 /* GLSoftLitSpriteRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLSoftLitSpriteRenderer.cpp; sourceTree = ""; }; - E8B6B72D17E68B1B00E35523 /* GLSoftLitSpriteRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSoftLitSpriteRenderer.h; sourceTree = ""; }; - E8B6B72F17E8C4ED00E35523 /* IToolSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IToolSkin.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - E8B6B73117E8CB1800E35523 /* IToolSkin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IToolSkin.h; sourceTree = ""; }; - E8B6B73217E8CE1300E35523 /* ScriptFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptFunction.cpp; sourceTree = ""; }; - E8B6B73317E8CE1700E35523 /* ScriptFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptFunction.h; sourceTree = ""; }; - E8B6B73517E9C70000E35523 /* ClientPlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClientPlayer.cpp; sourceTree = ""; }; - E8B6B73617E9C70000E35523 /* ClientPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClientPlayer.h; sourceTree = ""; }; - E8B6B73817E9E8CF00E35523 /* ISpadeSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ISpadeSkin.cpp; sourceTree = ""; }; - E8B6B73917E9E8D300E35523 /* ISpadeSkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISpadeSkin.h; sourceTree = ""; }; - E8B6B73B17E9F49700E35523 /* IBlockSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IBlockSkin.cpp; sourceTree = ""; }; - E8B6B73C17E9F49C00E35523 /* IBlockSkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IBlockSkin.h; sourceTree = ""; }; - E8B6B73E17EA060900E35523 /* IViewToolSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IViewToolSkin.cpp; sourceTree = ""; }; - E8B6B73F17EA060D00E35523 /* IViewToolSkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IViewToolSkin.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - E8B6B74117EA0B1500E35523 /* IThirdPersonToolSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IThirdPersonToolSkin.cpp; sourceTree = ""; }; - E8B6B74217EA0B1900E35523 /* IThirdPersonToolSkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IThirdPersonToolSkin.h; sourceTree = ""; }; - E8B6B74417EA0F1B00E35523 /* IGrenadeSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IGrenadeSkin.cpp; sourceTree = ""; }; - E8B6B74517EA0F1E00E35523 /* IGrenadeSkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGrenadeSkin.h; sourceTree = ""; }; - E8B6B74717EA12E100E35523 /* IWeaponSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IWeaponSkin.cpp; sourceTree = ""; }; - E8B6B74817EA12E500E35523 /* IWeaponSkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IWeaponSkin.h; sourceTree = ""; }; - E8B8082718E05B920001013E /* CellToTriangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CellToTriangle.h; sourceTree = ""; }; - E8B93AD418559EC600BD01E1 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = lib/SDL2.framework; sourceTree = ""; }; - E8C7D7AA22DA34F400F78763 /* ConsoleHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConsoleHelper.h; sourceTree = ""; }; - E8C7D7AB22DA34F400F78763 /* ConsoleHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConsoleHelper.cpp; sourceTree = ""; }; - E8C7D7AC22DA34F400F78763 /* ConsoleScreen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConsoleScreen.cpp; sourceTree = ""; }; - E8C7D7AD22DA34F500F78763 /* ConsoleScreen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConsoleScreen.h; sourceTree = ""; }; - E8C7D7B022DA35F000F78763 /* ConsoleHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConsoleHelper.cpp; sourceTree = ""; }; - E8C7D7B222DAF5B400F78763 /* ConsoleCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConsoleCommand.h; sourceTree = ""; }; - E8C7D7B322DAF5B400F78763 /* ConsoleCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConsoleCommand.cpp; sourceTree = ""; }; - E8C7D7B822DB220200F78763 /* ConfigConsoleResponder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConfigConsoleResponder.cpp; sourceTree = ""; }; - E8C7D7B922DB220300F78763 /* ConfigConsoleResponder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConfigConsoleResponder.h; sourceTree = ""; }; - E8C7D7BB22DB263200F78763 /* Iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Iterator.h; sourceTree = ""; }; - E8C7D7BC22DB2A4400F78763 /* ConsoleCommandCandidate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConsoleCommandCandidate.h; sourceTree = ""; }; - E8C7D7BD22DB2A4400F78763 /* ConsoleCommandCandidate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConsoleCommandCandidate.cpp; sourceTree = ""; }; - E8C7D7BF22DB3AE000F78763 /* ConsoleCommandCandidate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConsoleCommandCandidate.cpp; sourceTree = ""; }; - E8C7D7C122DB635F00F78763 /* Client_Console.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Client_Console.cpp; sourceTree = ""; }; - E8C92A0A18695EA500740C9F /* SWModelRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWModelRenderer.cpp; sourceTree = ""; }; - E8C92A0B18695EA500740C9F /* SWModelRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWModelRenderer.h; sourceTree = ""; }; - E8C92A0D186A8D3600740C9F /* CpuID.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CpuID.h; sourceTree = ""; }; - E8C92A0E186A902500740C9F /* CpuID.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CpuID.cpp; sourceTree = ""; }; - E8CB47CC1DE071CA00BF606A /* SWUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWUtils.cpp; sourceTree = ""; }; - E8CB47CF1DE07CF000BF606A /* SettingSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingSet.cpp; sourceTree = ""; }; - E8CB47D01DE07CF000BF606A /* SettingSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingSet.h; sourceTree = ""; }; - E8CB47D31DE0844400BF606A /* GLSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GLSettings.h; sourceTree = ""; }; - E8CB47D41DE084AB00BF606A /* GLSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLSettings.cpp; sourceTree = ""; }; - E8CF039B178EDAC9000683D4 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - E8CF03A6178EDF6A000683D4 /* IRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IRenderer.cpp; path = Sources/Client/IRenderer.cpp; sourceTree = SOURCE_ROOT; }; - E8CF03A7178EDF6A000683D4 /* IRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IRenderer.h; path = Sources/Client/IRenderer.h; sourceTree = SOURCE_ROOT; }; - E8CF03A9178EDF74000683D4 /* GLRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GLRenderer.cpp; path = Sources/Draw/GLRenderer.cpp; sourceTree = SOURCE_ROOT; }; - E8CF03AA178EDF74000683D4 /* GLRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GLRenderer.h; path = Sources/Draw/GLRenderer.h; sourceTree = SOURCE_ROOT; }; - E8CF03AC178EDFCD000683D4 /* IGLDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IGLDevice.cpp; sourceTree = ""; }; - E8CF03AD178EDFCD000683D4 /* IGLDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGLDevice.h; sourceTree = ""; }; - E8CF03B0178EE300000683D4 /* Thread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Thread.cpp; sourceTree = ""; }; - E8CF03B1178EE300000683D4 /* Thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Thread.h; sourceTree = ""; }; - E8CF03B4178EE39A000683D4 /* SDL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDL.h; sourceTree = ""; }; - E8CF03BB178EE502000683D4 /* SDLGLDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SDLGLDevice.cpp; sourceTree = ""; }; - E8CF03BC178EE502000683D4 /* SDLGLDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLGLDevice.h; sourceTree = ""; }; - E8CF03BE178EE50E000683D4 /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Main.cpp; sourceTree = ""; }; - E8CF03C0178EE5B6000683D4 /* OpenGL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenGL.h; sourceTree = ""; }; - E8CF03C1178EE6D8000683D4 /* Client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Client.cpp; sourceTree = ""; }; - E8CF03C2178EE6D8000683D4 /* Client.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Client.h; sourceTree = ""; }; - E8CF03C4178EE78C000683D4 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; - E8CF03C6178EE81A000683D4 /* IAudioDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IAudioDevice.cpp; sourceTree = ""; }; - E8CF03C7178EE81A000683D4 /* IAudioDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IAudioDevice.h; sourceTree = ""; }; - E8CF03C9178EE869000683D4 /* IInputInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IInputInterface.cpp; sourceTree = ""; }; - E8CF03CA178EE869000683D4 /* IInputInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IInputInterface.h; sourceTree = ""; }; - E8CF03CC178EE95F000683D4 /* Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Math.cpp; sourceTree = ""; }; - E8CF03CD178EE95F000683D4 /* Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Math.h; sourceTree = ""; }; - E8CF03CF178EEF80000683D4 /* Semaphore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Semaphore.cpp; sourceTree = ""; }; - E8CF03D0178EEF80000683D4 /* Semaphore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Semaphore.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - E8CF03D5178EF09C000683D4 /* ILockable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ILockable.cpp; sourceTree = ""; }; - E8CF03D6178EF09C000683D4 /* ILockable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ILockable.h; sourceTree = ""; }; - E8CF03DE178EF4E9000683D4 /* IRunnable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IRunnable.cpp; sourceTree = ""; }; - E8CF03DF178EF4E9000683D4 /* IRunnable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRunnable.h; sourceTree = ""; }; - E8CF03E1178EF57E000683D4 /* SDLRunner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SDLRunner.cpp; sourceTree = ""; }; - E8CF03E2178EF57E000683D4 /* SDLRunner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLRunner.h; sourceTree = ""; }; - E8CF03F2178EF916000683D4 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - E8CF03F4178FAA8B000683D4 /* IImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IImage.cpp; sourceTree = ""; }; - E8CF03F5178FAA8B000683D4 /* IImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IImage.h; sourceTree = ""; }; - E8CF03F7178FABA4000683D4 /* SceneDefinition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SceneDefinition.cpp; sourceTree = ""; }; - E8CF03F8178FABA4000683D4 /* SceneDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SceneDefinition.h; sourceTree = ""; }; - E8CF03FA178FACFF000683D4 /* GameMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GameMap.cpp; sourceTree = ""; }; - E8CF03FB178FACFF000683D4 /* GameMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameMap.h; sourceTree = ""; }; - E8CF03FD178FB1E1000683D4 /* IGameMapListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IGameMapListener.cpp; sourceTree = ""; }; - E8CF03FE178FB1E1000683D4 /* IGameMapListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGameMapListener.h; sourceTree = ""; }; - E8CF0400178FB52F000683D4 /* GLImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLImage.cpp; sourceTree = ""; }; - E8CF0401178FB52F000683D4 /* GLImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLImage.h; sourceTree = ""; }; - E8CF0403178FF776000683D4 /* Exception.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Exception.cpp; sourceTree = ""; }; - E8CF0404178FF776000683D4 /* Exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Exception.h; sourceTree = ""; }; - E8CF04061790455B000683D4 /* GLProgram.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLProgram.cpp; sourceTree = ""; }; - E8CF04071790455B000683D4 /* GLProgram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLProgram.h; sourceTree = ""; }; - E8CF04091790471D000683D4 /* IFileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IFileSystem.cpp; sourceTree = ""; }; - E8CF040A1790471D000683D4 /* IFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IFileSystem.h; sourceTree = ""; }; - E8CF040C17904970000683D4 /* FileManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileManager.cpp; sourceTree = ""; }; - E8CF040D17904971000683D4 /* FileManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileManager.h; sourceTree = ""; }; - E8CF040F17904ABC000683D4 /* IStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IStream.cpp; sourceTree = ""; }; - E8CF041017904ABC000683D4 /* IStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IStream.h; sourceTree = ""; }; - E8CF041217904E8B000683D4 /* StdStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StdStream.cpp; sourceTree = ""; }; - E8CF041317904E8C000683D4 /* StdStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StdStream.h; sourceTree = ""; }; - E8CF0415179052F6000683D4 /* DirectoryFileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryFileSystem.cpp; sourceTree = ""; }; - E8CF0416179052F7000683D4 /* DirectoryFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryFileSystem.h; sourceTree = ""; }; - E8CF041817905609000683D4 /* Resources */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Resources; sourceTree = ""; }; - E8CF04191790CCAB000683D4 /* GLShader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLShader.cpp; sourceTree = ""; }; - E8CF041A1790CCAB000683D4 /* GLShader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLShader.h; sourceTree = ""; }; - E8CF041C1790D6D5000683D4 /* GLProgramManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLProgramManager.cpp; sourceTree = ""; }; - E8CF041D1790D6D5000683D4 /* GLProgramManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLProgramManager.h; sourceTree = ""; }; - E8D0E5D018F3215000DE3BDB /* GLNonlinearizeFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLNonlinearizeFilter.cpp; sourceTree = ""; }; - E8D0E5D118F3215000DE3BDB /* GLNonlinearizeFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLNonlinearizeFilter.h; sourceTree = ""; }; - E8D2ACE117D704E600BE5490 /* GLColorCorrectionFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLColorCorrectionFilter.cpp; sourceTree = ""; }; - E8D2ACE217D704E600BE5490 /* GLColorCorrectionFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLColorCorrectionFilter.h; sourceTree = ""; }; - E8D88AAF179C3004004C2451 /* GLQuadRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLQuadRenderer.cpp; sourceTree = ""; }; - E8D88AB0179C3004004C2451 /* GLQuadRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLQuadRenderer.h; sourceTree = ""; }; - E8D88AB2179C45B7004C2451 /* GLLensFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLLensFilter.cpp; sourceTree = ""; }; - E8D88AB3179C45B7004C2451 /* GLLensFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLLensFilter.h; sourceTree = ""; }; - E8E0AF881798278000C6B5A9 /* GLImageRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLImageRenderer.cpp; sourceTree = ""; }; - E8E0AF891798278000C6B5A9 /* GLImageRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLImageRenderer.h; sourceTree = ""; }; - E8E0AF92179942DB00C6B5A9 /* Corpse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Corpse.cpp; sourceTree = ""; }; - E8E0AF93179942DB00C6B5A9 /* Corpse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Corpse.h; sourceTree = ""; }; - E8E0AF95179980F500C6B5A9 /* CenterMessageView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CenterMessageView.cpp; sourceTree = ""; }; - E8E0AF96179980F500C6B5A9 /* CenterMessageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CenterMessageView.h; sourceTree = ""; }; - E8E0AF98179996A100C6B5A9 /* HurtRingView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HurtRingView.cpp; sourceTree = ""; }; - E8E0AF99179996A100C6B5A9 /* HurtRingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HurtRingView.h; sourceTree = ""; }; - E8E0AF9B179A5BC200C6B5A9 /* GLFlatMapRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLFlatMapRenderer.cpp; sourceTree = ""; }; - E8E0AF9C179A5BC200C6B5A9 /* GLFlatMapRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLFlatMapRenderer.h; sourceTree = ""; }; - E8E0AF9E179A698800C6B5A9 /* MapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MapView.cpp; sourceTree = ""; }; - E8E0AF9F179A698800C6B5A9 /* MapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapView.h; sourceTree = ""; }; - E8E0AFA1179A8F1000C6B5A9 /* ScoreboardView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScoreboardView.cpp; sourceTree = ""; }; - E8E0AFA2179A8F1000C6B5A9 /* ScoreboardView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScoreboardView.h; sourceTree = ""; }; - E8E0AFA4179AA31B00C6B5A9 /* LimboView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LimboView.cpp; sourceTree = ""; }; - E8E0AFA5179AA31C00C6B5A9 /* LimboView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LimboView.h; sourceTree = ""; }; - E8E0AFA7179ACDDD00C6B5A9 /* GLSpriteRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLSpriteRenderer.cpp; sourceTree = ""; }; - E8E0AFA8179ACDDD00C6B5A9 /* GLSpriteRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSpriteRenderer.h; sourceTree = ""; }; - E8E0AFAA179ADC2100C6B5A9 /* ILocalEntity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ILocalEntity.cpp; sourceTree = ""; }; - E8E0AFAB179ADC2100C6B5A9 /* ILocalEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ILocalEntity.h; sourceTree = ""; }; - E8E0AFAD179ADDCB00C6B5A9 /* ParticleSpriteEntity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParticleSpriteEntity.cpp; sourceTree = ""; }; - E8E0AFAE179ADDCB00C6B5A9 /* ParticleSpriteEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParticleSpriteEntity.h; sourceTree = ""; }; - E8E0AFB0179AF4E600C6B5A9 /* SmokeSpriteEntity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SmokeSpriteEntity.cpp; sourceTree = ""; }; - E8E0AFB1179AF4E600C6B5A9 /* SmokeSpriteEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmokeSpriteEntity.h; sourceTree = ""; }; - E8E0AFB3179BF25B00C6B5A9 /* Settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Settings.cpp; sourceTree = ""; }; - E8E0AFB4179BF25B00C6B5A9 /* Settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Settings.h; sourceTree = ""; }; - E8E0AFB6179C0F2800C6B5A9 /* GLFramebufferManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLFramebufferManager.cpp; sourceTree = ""; }; - E8E0AFB7179C0F2800C6B5A9 /* GLFramebufferManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLFramebufferManager.h; sourceTree = ""; }; - E8E44684179CC4FF00BE8855 /* IBitmapCodec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IBitmapCodec.cpp; sourceTree = ""; }; - E8E44685179CC4FF00BE8855 /* IBitmapCodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IBitmapCodec.h; sourceTree = ""; }; - E8E44687179CC65900BE8855 /* TargaReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TargaReader.cpp; sourceTree = ""; }; - E8E44696179D2CA100BE8855 /* IGLSpriteRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IGLSpriteRenderer.cpp; sourceTree = ""; }; - E8E44697179D2CA100BE8855 /* IGLSpriteRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGLSpriteRenderer.h; sourceTree = ""; }; - E8E44699179D2EDC00BE8855 /* GLSoftSpriteRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLSoftSpriteRenderer.cpp; sourceTree = ""; }; - E8E4469A179D2EDC00BE8855 /* GLSoftSpriteRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLSoftSpriteRenderer.h; sourceTree = ""; }; - E8E4469C179D59A900BE8855 /* GLCameraBlurFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLCameraBlurFilter.cpp; sourceTree = ""; }; - E8E4469D179D59A900BE8855 /* GLCameraBlurFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLCameraBlurFilter.h; sourceTree = ""; }; - E8E446A2179EA60900BE8855 /* GLMapShadowRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLMapShadowRenderer.cpp; sourceTree = ""; }; - E8E446A3179EA60900BE8855 /* GLMapShadowRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLMapShadowRenderer.h; sourceTree = ""; }; - E8E446A5179EAC7800BE8855 /* GLShadowShader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLShadowShader.cpp; sourceTree = ""; }; - E8E446A6179EAC7800BE8855 /* GLShadowShader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLShadowShader.h; sourceTree = ""; }; - E8E446A8179F822D00BE8855 /* TargaWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TargaWriter.cpp; sourceTree = ""; }; - E8EE089F17B8F4B000631987 /* GLRadiosityRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLRadiosityRenderer.cpp; sourceTree = ""; }; - E8EE08A017B8F4B000631987 /* GLRadiosityRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLRadiosityRenderer.h; sourceTree = ""; }; - E8EE08A217BA016F00631987 /* AUTHORS */ = {isa = PBXFileReference; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - E8EF8B551E1D70D900E0829C /* SplashWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SplashWindow.cpp; sourceTree = ""; }; - E8EF8B561E1D70D900E0829C /* SplashWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SplashWindow.h; sourceTree = ""; }; - E8F6E6E41DCF503200FE76BB /* MumbleLink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MumbleLink.cpp; sourceTree = ""; }; - E8F6E6E51DCF503200FE76BB /* MumbleLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MumbleLink.h; sourceTree = ""; }; - E8F74CE3183F86AE0085AA54 /* View.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = View.cpp; sourceTree = ""; }; - E8F74CE4183F86AE0085AA54 /* View.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = View.h; sourceTree = ""; }; - E8F74CE6183F8A110085AA54 /* Main.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Main.h; sourceTree = ""; }; - E8F74CE7183F8B9D0085AA54 /* Runner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Runner.cpp; sourceTree = ""; }; - E8F74CE8183F8B9D0085AA54 /* Runner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Runner.h; sourceTree = ""; }; - E8F74CEA183F92DA0085AA54 /* SDLmain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLmain.m; sourceTree = ""; }; - E8F74CEC183F931F0085AA54 /* SDLMain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLMain.h; sourceTree = ""; }; - E8F74CED183FBA9C0085AA54 /* MainScreenHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MainScreenHelper.cpp; sourceTree = ""; }; - E8F74CEE183FBA9C0085AA54 /* MainScreenHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainScreenHelper.h; sourceTree = ""; }; - E8F74CF0183FBB070085AA54 /* MainScreenHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MainScreenHelper.cpp; sourceTree = ""; }; - E8F74CF31840D4CC0085AA54 /* Config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Config.cpp; sourceTree = ""; }; - E8F74CF61845C5000085AA54 /* ClientUI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClientUI.cpp; sourceTree = ""; }; - E8F74CF71845C5000085AA54 /* ClientUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClientUI.h; sourceTree = ""; }; - E8F74CF91845C64B0085AA54 /* ClientUIHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClientUIHelper.cpp; sourceTree = ""; }; - E8F74CFA1845C64B0085AA54 /* ClientUIHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClientUIHelper.h; sourceTree = ""; }; - E8F74CFC1845C8D50085AA54 /* ClientUIHelper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ClientUIHelper.cpp; sourceTree = ""; }; - E8F74CFE184C753F0085AA54 /* Clipboard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Clipboard.cpp; sourceTree = ""; }; - E8FC02D8186829BC00F84A0D /* SWUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SWUtils.h; sourceTree = ""; }; - E8FE748818CB329C00291338 /* HitTestDebugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HitTestDebugger.cpp; sourceTree = ""; }; - E8FE748918CB329C00291338 /* HitTestDebugger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HitTestDebugger.h; sourceTree = ""; }; - E8FE748B18CC6AA100291338 /* Client_Input.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Client_Input.cpp; sourceTree = ""; }; - E8FE748D18CC6C2B00291338 /* Client_Update.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Client_Update.cpp; sourceTree = ""; }; - E8FE748F18CC6CE000291338 /* Client_NetHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Client_NetHandler.cpp; sourceTree = ""; }; - E8FE749118CC6E4900291338 /* Client_LocalEnts.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Client_LocalEnts.cpp; sourceTree = ""; }; - E8FE749318CC6EB500291338 /* Client_Draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Client_Draw.cpp; sourceTree = ""; }; - E8FE749518CC6F2900291338 /* Client_Scene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Client_Scene.cpp; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - E82E66B618EA78F5004DBA18 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - E8626EBE1E1010CA003365BF /* libbz2.tbd in Frameworks */, - E8626EBC1E101072003365BF /* libopusfile.a in Frameworks */, - E8626EAE1E1009D7003365BF /* libcurl.tbd in Frameworks */, - E82E67E218EA7A1E004DBA18 /* libz.tbd in Frameworks */, - E8626EBB1E101072003365BF /* libopus.a in Frameworks */, - E8626EB81E100FB2003365BF /* libogg.a in Frameworks */, - E8626EB61E100EC6003365BF /* libfreetype.a in Frameworks */, - E88F46591DE1B192009E85E5 /* Cocoa.framework in Frameworks */, - E82E67F018EA7A60004DBA18 /* OpenGL.framework in Frameworks */, - E82E67DF18EA7A05004DBA18 /* SDL2_image.framework in Frameworks */, - E82E67E018EA7A05004DBA18 /* SDL2.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - E80B288917A52CB70056179E /* binpack2d */ = { - isa = PBXGroup; - children = ( - E80B288A17A52CBB0056179E /* binpack2d.hpp */, - ); - name = binpack2d; - path = Sources/binpack2d; - sourceTree = ""; - }; - E80B28B117ABAC6C0056179E /* kiss_fft130 */ = { - isa = PBXGroup; - children = ( - E80B28B217ABAC790056179E /* .hg_archival.txt */, - E80B28B317ABAC790056179E /* .hgignore */, - E80B28B417ABAC790056179E /* .hgtags */, - E80B28B517ABAC790056179E /* _kiss_fft_guts.h */, - E80B28B617ABAC790056179E /* CHANGELOG */, - E80B28B717ABAC790056179E /* COPYING */, - E80B28B817ABAC790056179E /* kiss_fft.c */, - E80B28B917ABAC790056179E /* kiss_fft.h */, - E80B28BA17ABAC790056179E /* kissfft.hh */, - E80B28BB17ABAC790056179E /* README */, - E80B28BC17ABAC790056179E /* README.simd */, - ); - name = kiss_fft130; - path = Sources/kiss_fft130; - sourceTree = ""; - }; - E80B28D517B39CFE0056179E /* unzip */ = { - isa = PBXGroup; - children = ( - E80B28D617B39D160056179E /* ioapi.c */, - E80B28D717B39D160056179E /* ioapi.h */, - E80B28D817B39D160056179E /* unzip.c */, - E80B28D917B39D160056179E /* unzip.h */, - ); - name = unzip; - path = Sources/unzip; - sourceTree = ""; - }; - E81A7C68186140B000BF3FCE /* Software Renderer */ = { - isa = PBXGroup; - children = ( - E81A7C6218610AA900BF3FCE /* SWRenderer.cpp */, - E81A7C6318610AA900BF3FCE /* SWRenderer.h */, - E81A7C6518610BE400BF3FCE /* SWPort.cpp */, - E81A7C6618610BE400BF3FCE /* SWPort.h */, - E81A7C691861525D00BF3FCE /* SWImage.cpp */, - E81A7C6A1861525D00BF3FCE /* SWImage.h */, - E81A7C6C186152A400BF3FCE /* SWModel.cpp */, - E81A7C6D186152A400BF3FCE /* SWModel.h */, - E81A7C6F1861F4E200BF3FCE /* SWImageRenderer.cpp */, - E81A7C701861F4E200BF3FCE /* SWImageRenderer.h */, - E81A7C721863562A00BF3FCE /* SWFeatureLevel.h */, - E81A7C731863566200BF3FCE /* SWFeatureLevel.cpp */, - E81A7C751864171100BF3FCE /* SWMapRenderer.cpp */, - E81A7C761864171100BF3FCE /* SWMapRenderer.h */, - E81A7C7818642BCA00BF3FCE /* SWFlatMapRenderer.cpp */, - E81A7C7918642BCA00BF3FCE /* SWFlatMapRenderer.h */, - E8CB47CC1DE071CA00BF606A /* SWUtils.cpp */, - E8FC02D8186829BC00F84A0D /* SWUtils.h */, - E8C92A0A18695EA500740C9F /* SWModelRenderer.cpp */, - E8C92A0B18695EA500740C9F /* SWModelRenderer.h */, - ); - name = "Software Renderer"; - sourceTree = ""; - }; - E82E66BA18EA78F5004DBA18 /* Frameworks */ = { - isa = PBXGroup; - children = ( - E8626EBD1E1010CA003365BF /* libbz2.tbd */, - E844888617D26699005105D0 /* libcurl.tbd */, - E8CF039B178EDAC9000683D4 /* libz.tbd */, - E8CF03F2178EF916000683D4 /* Cocoa.framework */, - E8CF03C4178EE78C000683D4 /* OpenGL.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - E844886317D0C404005105D0 /* Local Entities */ = { - isa = PBXGroup; - children = ( - E8E0AFAA179ADC2100C6B5A9 /* ILocalEntity.cpp */, - E8E0AFAB179ADC2100C6B5A9 /* ILocalEntity.h */, - E8E0AFAD179ADDCB00C6B5A9 /* ParticleSpriteEntity.cpp */, - E8E0AFAE179ADDCB00C6B5A9 /* ParticleSpriteEntity.h */, - E8E0AFB0179AF4E600C6B5A9 /* SmokeSpriteEntity.cpp */, - E8E0AFB1179AF4E600C6B5A9 /* SmokeSpriteEntity.h */, - E89A649217A1677F00FDA893 /* FallingBlock.cpp */, - E89A649317A1677F00FDA893 /* FallingBlock.h */, - E89A649517A1835900FDA893 /* GunCasing.cpp */, - E89A649617A1835900FDA893 /* GunCasing.h */, - E844886417D0C43B005105D0 /* Tracer.cpp */, - E844886517D0C43B005105D0 /* Tracer.h */, - E8B6B73517E9C70000E35523 /* ClientPlayer.cpp */, - E8B6B73617E9C70000E35523 /* ClientPlayer.h */, - ); - name = "Local Entities"; - sourceTree = ""; - }; - E844886C17D26337005105D0 /* json */ = { - isa = PBXGroup; - children = ( - E844886D17D2633C005105D0 /* AUTHORS */, - E844886E17D2633C005105D0 /* include */, - E844887817D2633C005105D0 /* json_batchallocator.h */, - E844887917D2633C005105D0 /* json_internalarray.inl */, - E844887A17D2633C005105D0 /* json_internalmap.inl */, - E844887B17D2633C005105D0 /* json_reader.cpp */, - E844887C17D2633C005105D0 /* json_value.cpp */, - E844887D17D2633C005105D0 /* json_valueiterator.inl */, - E844887E17D2633C005105D0 /* json_writer.cpp */, - E844887F17D2633C005105D0 /* LICENSE */, - E844888017D2633C005105D0 /* README.txt */, - E844888117D2633C005105D0 /* version */, - ); - name = json; - path = Sources/json; - sourceTree = ""; - }; - E844886E17D2633C005105D0 /* include */ = { - isa = PBXGroup; - children = ( - E844886F17D2633C005105D0 /* json */, - ); - path = include; - sourceTree = ""; - }; - E844886F17D2633C005105D0 /* json */ = { - isa = PBXGroup; - children = ( - E844887017D2633C005105D0 /* autolink.h */, - E844887117D2633C005105D0 /* config.h */, - E844887217D2633C005105D0 /* features.h */, - E844887317D2633C005105D0 /* forwards.h */, - E844887417D2633C005105D0 /* json.h */, - E844887517D2633C005105D0 /* reader.h */, - E844887617D2633C005105D0 /* value.h */, - E844887717D2633C005105D0 /* writer.h */, - ); - path = json; - sourceTree = ""; - }; - E84E221218BB449A001282B0 /* cmake */ = { - isa = PBXGroup; - children = ( - E84E221318BB449A001282B0 /* FindGLEW2.cmake */, - E84E221418BB449A001282B0 /* FindSDL2.cmake */, - ); - path = cmake; - sourceTree = ""; - }; - E8567E541792B119009D83E0 /* Audio */ = { - isa = PBXGroup; - children = ( - E8567E6D1792FEEB009D83E0 /* AL */, - E8567E581792BEFC009D83E0 /* ALDevice.cpp */, - E8567E591792BEFC009D83E0 /* ALDevice.h */, - E8567E5B1792BFFE009D83E0 /* ALFuncs.h */, - E8567E5C1792C089009D83E0 /* ALFuncs.cpp */, - E88EB02D185D9DC500565D07 /* YsrDevice.cpp */, - E88EB02E185D9DC500565D07 /* YsrDevice.h */, - E842889118A3D9C40060743D /* NullDevice.cpp */, - E842889218A3D9C40060743D /* NullDevice.h */, - ); - path = Audio; - sourceTree = ""; - }; - E8626EA21E1008F9003365BF /* Externals */ = { - isa = PBXGroup; - children = ( - E8626EA31E10090C003365BF /* lib */, - ); - name = Externals; - path = Sources/Externals; - sourceTree = ""; - }; - E8626EA31E10090C003365BF /* lib */ = { - isa = PBXGroup; - children = ( - E87AB82418BB3A04006B7D73 /* SDL2_image.framework */, - E8B93AD418559EC600BD01E1 /* SDL2.framework */, - E82E680318EA7F60004DBA18 /* libysrspades.dylib */, - E8626EB71E100FB2003365BF /* libogg.a */, - E8626EB91E101072003365BF /* libopus.a */, - E8626EBA1E101072003365BF /* libopusfile.a */, - E8626EB51E100EC6003365BF /* libfreetype.a */, - ); - name = lib; - sourceTree = ""; - }; - E88319011792A7C5002ABE6D /* ENet */ = { - isa = PBXGroup; - children = ( - E88319021792A7CC002ABE6D /* callbacks.c */, - E88319031792A7CC002ABE6D /* compress.c */, - E88319041792A7CC002ABE6D /* host.c */, - E88319051792A7CC002ABE6D /* include */, - E88319101792A7CC002ABE6D /* LICENSE */, - E88319111792A7CC002ABE6D /* list.c */, - E88319121792A7CC002ABE6D /* packet.c */, - E88319131792A7CC002ABE6D /* peer.c */, - E88319141792A7CC002ABE6D /* protocol.c */, - E88319151792A7CC002ABE6D /* README */, - E88319161792A7CC002ABE6D /* unix.c */, - E88319171792A7CC002ABE6D /* win32.c */, - ); - name = ENet; - path = Sources/ENet; - sourceTree = ""; - }; - E88319051792A7CC002ABE6D /* include */ = { - isa = PBXGroup; - children = ( - E88319061792A7CC002ABE6D /* enet */, - ); - path = include; - sourceTree = ""; - }; - E88319061792A7CC002ABE6D /* enet */ = { - isa = PBXGroup; - children = ( - E88319071792A7CC002ABE6D /* callbacks.h */, - E88319081792A7CC002ABE6D /* enet.h */, - E88319091792A7CC002ABE6D /* list.h */, - E883190A1792A7CC002ABE6D /* protocol.h */, - E883190B1792A7CC002ABE6D /* time.h */, - E883190C1792A7CC002ABE6D /* types.h */, - E883190D1792A7CC002ABE6D /* unix.h */, - E883190E1792A7CC002ABE6D /* utility.h */, - E883190F1792A7CC002ABE6D /* win32.h */, - ); - path = enet; - sourceTree = ""; - }; - E88F46571DE1AF48009E85E5 /* Built-in Paks */ = { - isa = PBXGroup; - children = ( - E8690AE61D3920C800DBC331 /* pak000-Nonfree.pak */, - E8690AE71D3920C800DBC331 /* pak002-Base.pak */, - E8690AE81D3920C800DBC331 /* pak005-Models.pak */, - E8690AE91D3920C800DBC331 /* pak010-BaseSkin.pak */, - E8690AEA1D3920C800DBC331 /* pak050-Locales.pak */, - E8690AEB1D3920C800DBC331 /* pak999-References.pak */, - E82E67F318EA7EAB004DBA18 /* font-unifont.pak */, - ); - name = "Built-in Paks"; - sourceTree = ""; - }; - E88F46581DE1AF8D009E85E5 /* Libraries */ = { - isa = PBXGroup; - children = ( - E8626EA21E1008F9003365BF /* Externals */, - E844886C17D26337005105D0 /* json */, - E80B28D517B39CFE0056179E /* unzip */, - E80B28B117ABAC6C0056179E /* kiss_fft130 */, - E80B288917A52CB70056179E /* binpack2d */, - E8B6B63D17DE27B200E35523 /* AngelScript */, - E88319011792A7C5002ABE6D /* ENet */, - ); - name = Libraries; - sourceTree = ""; - }; - E89A649B17A2407100FDA893 /* Lighting */ = { - isa = PBXGroup; - children = ( - E8E446A2179EA60900BE8855 /* GLMapShadowRenderer.cpp */, - E8E446A3179EA60900BE8855 /* GLMapShadowRenderer.h */, - E8E446A5179EAC7800BE8855 /* GLShadowShader.cpp */, - E8E446A6179EAC7800BE8855 /* GLShadowShader.h */, - E89A648F17A12FF800FDA893 /* GLDynamicLightShader.cpp */, - E89A649017A12FF800FDA893 /* GLDynamicLightShader.h */, - E89A649817A2402500FDA893 /* IGLShadowMapRenderer.cpp */, - E89A649917A2402700FDA893 /* IGLShadowMapRenderer.h */, - E80B286017A2462D0056179E /* GLShadowMapShader.cpp */, - E80B286117A2462D0056179E /* GLShadowMapShader.h */, - E80B286317A24AED0056179E /* GLBasicShadowMapRenderer.cpp */, - E80B286417A24AED0056179E /* GLBasicShadowMapRenderer.h */, - E80B289417A9D6B40056179E /* GLDynamicLight.cpp */, - E80B289517A9D6B50056179E /* GLDynamicLight.h */, - E80B28BF17AE7FEB0056179E /* GLAmbientShadowRenderer.cpp */, - E80B28C017AE7FEE0056179E /* GLAmbientShadowRenderer.h */, - E8EE089F17B8F4B000631987 /* GLRadiosityRenderer.cpp */, - E8EE08A017B8F4B000631987 /* GLRadiosityRenderer.h */, - E8B6B6BD17DF456E00E35523 /* GLSparseShadowMapRenderer.cpp */, - E8B6B6BE17DF456F00E35523 /* GLSparseShadowMapRenderer.h */, - ); - name = Lighting; - sourceTree = ""; - }; - E89E811E179C2BDC0059C649 /* Post Filters */ = { - isa = PBXGroup; - children = ( - E89BBDC01B3559CD00F53EE9 /* GLAutoExposureFilter.cpp */, - E89BBDC11B3559CD00F53EE9 /* GLAutoExposureFilter.h */, - E89E811F179C2C800059C649 /* GLBloomFilter.cpp */, - E89E8120179C2C800059C649 /* GLBloomFilter.h */, - E8D88AAF179C3004004C2451 /* GLQuadRenderer.cpp */, - E8D88AB0179C3004004C2451 /* GLQuadRenderer.h */, - E8D88AB2179C45B7004C2451 /* GLLensFilter.cpp */, - E8D88AB3179C45B7004C2451 /* GLLensFilter.h */, - E8E4469C179D59A900BE8855 /* GLCameraBlurFilter.cpp */, - E8E4469D179D59A900BE8855 /* GLCameraBlurFilter.h */, - E859510A17C5DA060012810C /* GLFogFilter.cpp */, - E859510B17C5DA060012810C /* GLFogFilter.h */, - E859510D17C61F850012810C /* GLLensFlareFilter.cpp */, - E859510E17C61F850012810C /* GLLensFlareFilter.h */, - E859511017C645000012810C /* GLFXAAFilter.cpp */, - E859511117C645000012810C /* GLFXAAFilter.h */, - E8D2ACE117D704E600BE5490 /* GLColorCorrectionFilter.cpp */, - E8D2ACE217D704E600BE5490 /* GLColorCorrectionFilter.h */, - E8B6B6E317E165A400E35523 /* GLDepthOfFieldFilter.cpp */, - E8B6B6E417E165A500E35523 /* GLDepthOfFieldFilter.h */, - E8B6B72917E6095800E35523 /* GLLensDustFilter.cpp */, - E8B6B72A17E6095800E35523 /* GLLensDustFilter.h */, - E8D0E5D018F3215000DE3BDB /* GLNonlinearizeFilter.cpp */, - E8D0E5D118F3215000DE3BDB /* GLNonlinearizeFilter.h */, - E80950081E17F66500AECDF2 /* GLSSAOFilter.cpp */, - E80950091E17F66500AECDF2 /* GLSSAOFilter.h */, - ); - name = "Post Filters"; - sourceTree = ""; - }; - E8B6B63D17DE27B200E35523 /* AngelScript */ = { - isa = PBXGroup; - children = ( - E8B6B6FF17E4193800E35523 /* addons */, - E8B6B6BA17DE2F5500E35523 /* projects */, - E8B6B63E17DE27B500E35523 /* include */, - E8B6B64017DE27B500E35523 /* source */, - ); - name = AngelScript; - path = Sources/AngelScript; - sourceTree = ""; - }; - E8B6B63E17DE27B500E35523 /* include */ = { - isa = PBXGroup; - children = ( - E8B6B63F17DE27B500E35523 /* angelscript.h */, - ); - path = include; - sourceTree = ""; - }; - E8B6B64017DE27B500E35523 /* source */ = { - isa = PBXGroup; - children = ( - E867B6E31DD49D7F0093E4E0 /* as_namespace.h */, - E8B6B64117DE27B500E35523 /* as_array.h */, - E8B6B64217DE27B500E35523 /* as_atomic.cpp */, - E8B6B64317DE27B500E35523 /* as_atomic.h */, - E8B6B64417DE27B500E35523 /* as_builder.cpp */, - E8B6B64517DE27B500E35523 /* as_builder.h */, - E8B6B64617DE27B500E35523 /* as_bytecode.cpp */, - E8B6B64717DE27B500E35523 /* as_bytecode.h */, - E8B6B64817DE27B500E35523 /* as_callfunc.cpp */, - E8B6B64917DE27B500E35523 /* as_callfunc.h */, - E8B6B64A17DE27B500E35523 /* as_callfunc_arm.cpp */, - E8B6B64B17DE27B500E35523 /* as_callfunc_arm_gcc.S */, - E8B6B64C17DE27B500E35523 /* as_callfunc_arm_msvc.asm */, - E8B6B64D17DE27B500E35523 /* as_callfunc_arm_xcode.S */, - E8B6B64E17DE27B500E35523 /* as_callfunc_mips.cpp */, - E8B6B64F17DE27B500E35523 /* as_callfunc_ppc.cpp */, - E8B6B65017DE27B500E35523 /* as_callfunc_ppc_64.cpp */, - E8B6B65117DE27B500E35523 /* as_callfunc_sh4.cpp */, - E8B6B65217DE27B500E35523 /* as_callfunc_x64_gcc.cpp */, - E8B6B65317DE27B500E35523 /* as_callfunc_x64_mingw.cpp */, - E8B6B65417DE27B500E35523 /* as_callfunc_x64_msvc.cpp */, - E8B6B65517DE27B500E35523 /* as_callfunc_x64_msvc_asm.asm */, - E8B6B65617DE27B500E35523 /* as_callfunc_x86.cpp */, - E8B6B65717DE27B500E35523 /* as_callfunc_xenon.cpp */, - E8B6B65817DE27B500E35523 /* as_compiler.cpp */, - E8B6B65917DE27B500E35523 /* as_compiler.h */, - E8B6B65A17DE27B500E35523 /* as_config.h */, - E8B6B65B17DE27B500E35523 /* as_configgroup.cpp */, - E8B6B65C17DE27B500E35523 /* as_configgroup.h */, - E8B6B65D17DE27B500E35523 /* as_context.cpp */, - E8B6B65E17DE27B500E35523 /* as_context.h */, - E8B6B65F17DE27B500E35523 /* as_criticalsection.h */, - E8B6B66017DE27B500E35523 /* as_datatype.cpp */, - E8B6B66117DE27B500E35523 /* as_datatype.h */, - E8B6B66217DE27B500E35523 /* as_debug.h */, - E8B6B66317DE27B500E35523 /* as_gc.cpp */, - E8B6B66417DE27B500E35523 /* as_gc.h */, - E8B6B66517DE27B500E35523 /* as_generic.cpp */, - E8B6B66617DE27B500E35523 /* as_generic.h */, - E8B6B66717DE27B500E35523 /* as_globalproperty.cpp */, - E8B6B66817DE27B500E35523 /* as_map.h */, - E8B6B66917DE27B500E35523 /* as_memory.cpp */, - E8B6B66A17DE27B500E35523 /* as_memory.h */, - E8B6B66B17DE27B500E35523 /* as_module.cpp */, - E8B6B66C17DE27B500E35523 /* as_module.h */, - E8B6B66D17DE27B500E35523 /* as_objecttype.cpp */, - E8B6B66E17DE27B500E35523 /* as_objecttype.h */, - E8B6B66F17DE27B500E35523 /* as_outputbuffer.cpp */, - E8B6B67017DE27B500E35523 /* as_outputbuffer.h */, - E8B6B67117DE27B500E35523 /* as_parser.cpp */, - E8B6B67217DE27B500E35523 /* as_parser.h */, - E8B6B67317DE27B500E35523 /* as_property.h */, - E8B6B67417DE27B500E35523 /* as_restore.cpp */, - E8B6B67517DE27B500E35523 /* as_restore.h */, - E8B6B67617DE27B500E35523 /* as_scriptcode.cpp */, - E8B6B67717DE27B500E35523 /* as_scriptcode.h */, - E8B6B67817DE27B500E35523 /* as_scriptengine.cpp */, - E8B6B67917DE27B500E35523 /* as_scriptengine.h */, - E8B6B67A17DE27B500E35523 /* as_scriptfunction.cpp */, - E8B6B67B17DE27B500E35523 /* as_scriptfunction.h */, - E8B6B67C17DE27B500E35523 /* as_scriptnode.cpp */, - E8B6B67D17DE27B500E35523 /* as_scriptnode.h */, - E8B6B67E17DE27B500E35523 /* as_scriptobject.cpp */, - E8B6B67F17DE27B500E35523 /* as_scriptobject.h */, - E8B6B68017DE27B500E35523 /* as_string.cpp */, - E8B6B68117DE27B500E35523 /* as_string.h */, - E8B6B68217DE27B500E35523 /* as_string_util.cpp */, - E8B6B68317DE27B500E35523 /* as_string_util.h */, - E8B6B68417DE27B500E35523 /* as_symboltable.h */, - E8B6B68517DE27B500E35523 /* as_texts.h */, - E8B6B68617DE27B500E35523 /* as_thread.cpp */, - E8B6B68717DE27B500E35523 /* as_thread.h */, - E8B6B68817DE27B500E35523 /* as_tokendef.h */, - E8B6B68917DE27B500E35523 /* as_tokenizer.cpp */, - E8B6B68A17DE27B500E35523 /* as_tokenizer.h */, - E8B6B68B17DE27B500E35523 /* as_typeinfo.cpp */, - E8B6B68C17DE27B500E35523 /* as_typeinfo.h */, - E8B6B68D17DE27B500E35523 /* as_variablescope.cpp */, - E8B6B68E17DE27B500E35523 /* as_variablescope.h */, - ); - path = source; - sourceTree = ""; - }; - E8B6B6BA17DE2F5500E35523 /* projects */ = { - isa = PBXGroup; - children = ( - E8B6B6BB17DE2F5500E35523 /* cmake */, - ); - path = projects; - sourceTree = ""; - }; - E8B6B6BB17DE2F5500E35523 /* cmake */ = { - isa = PBXGroup; - children = ( - E8B6B6BC17DE2F5500E35523 /* CMakeLists.txt */, - ); - path = cmake; - sourceTree = ""; - }; - E8B6B6E617E40AF300E35523 /* ScriptBindings */ = { - isa = PBXGroup; - children = ( - E8C7D7BF22DB3AE000F78763 /* ConsoleCommandCandidate.cpp */, - E8C7D7B022DA35F000F78763 /* ConsoleHelper.cpp */, - E8B6B6E717E40AF500E35523 /* MathScript.cpp */, - E838D42018ADDE2800EE3C53 /* StringsScript.cpp */, - E8B6B6E817E40AF500E35523 /* ScriptManager.cpp */, - E8B6B6E917E40AF500E35523 /* ScriptManager.h */, - E8B6B6EC17E40B5900E35523 /* IImage.cpp */, - E8B6B6F217E40E8200E35523 /* IModel.cpp */, - E8B6B6F517E40F9900E35523 /* IRenderer.cpp */, - E8B6B6F817E4130E00E35523 /* GameMap.cpp */, - E8B6B6FB17E413AB00E35523 /* Bitmap.cpp */, - E8B6B6FD17E4141000E35523 /* VoxelModel.cpp */, - E8B6B72017E4508C00E35523 /* IAudioDevice.cpp */, - E8B6B72217E452EC00E35523 /* IAudioChunk.cpp */, - E8B6B72417E46C1B00E35523 /* PrimitiveArray.cpp */, - E8B6B72F17E8C4ED00E35523 /* IToolSkin.cpp */, - E8B6B73117E8CB1800E35523 /* IToolSkin.h */, - E8B6B73217E8CE1300E35523 /* ScriptFunction.cpp */, - E8B6B73317E8CE1700E35523 /* ScriptFunction.h */, - E8B6B73817E9E8CF00E35523 /* ISpadeSkin.cpp */, - E8B6B73917E9E8D300E35523 /* ISpadeSkin.h */, - E8B6B73B17E9F49700E35523 /* IBlockSkin.cpp */, - E8B6B73C17E9F49C00E35523 /* IBlockSkin.h */, - E8B6B73E17EA060900E35523 /* IViewToolSkin.cpp */, - E8B6B73F17EA060D00E35523 /* IViewToolSkin.h */, - E8B6B74117EA0B1500E35523 /* IThirdPersonToolSkin.cpp */, - E8B6B74217EA0B1900E35523 /* IThirdPersonToolSkin.h */, - E8B6B74417EA0F1B00E35523 /* IGrenadeSkin.cpp */, - E8B6B74517EA0F1E00E35523 /* IGrenadeSkin.h */, - E8B6B74717EA12E100E35523 /* IWeaponSkin.cpp */, - E8B6B74817EA12E500E35523 /* IWeaponSkin.h */, - E81CE4A4183F7A3000F22685 /* IFont.cpp */, - E8F74CF0183FBB070085AA54 /* MainScreenHelper.cpp */, - E842888F18A3D6470060743D /* StartupScreenHelper.cpp */, - E8F74CF31840D4CC0085AA54 /* Config.cpp */, - E8493DB61A7349030055731A /* Config.h */, - E8F74CFC1845C8D50085AA54 /* ClientUIHelper.cpp */, - E8F74CFE184C753F0085AA54 /* Clipboard.cpp */, - E883440F1E03244F000C3E39 /* FontManager.cpp */, - E893A3621E3E3331000654A4 /* PackageUpdateManager.cpp */, - ); - name = ScriptBindings; - path = Sources/ScriptBindings; - sourceTree = SOURCE_ROOT; - }; - E8B6B6FF17E4193800E35523 /* addons */ = { - isa = PBXGroup; - children = ( - E8B6B70017E4193A00E35523 /* scriptany.cpp */, - E8B6B70117E4193A00E35523 /* scriptany.h */, - E8B6B70217E4193A00E35523 /* scriptarray.cpp */, - E8B6B70317E4193A00E35523 /* scriptarray.h */, - E8B6B70417E4193A00E35523 /* scriptbuilder.cpp */, - E8B6B70517E4193A00E35523 /* scriptbuilder.h */, - E8B6B70617E4193A00E35523 /* scriptdictionary.cpp */, - E8B6B70717E4193A00E35523 /* scriptdictionary.h */, - E8B6B70817E4193A00E35523 /* scripthandle.cpp */, - E8B6B70917E4193A00E35523 /* scripthandle.h */, - E8B6B70A17E4193A00E35523 /* scripthelper.cpp */, - E8B6B70B17E4193A00E35523 /* scripthelper.h */, - E8B6B70C17E4193A00E35523 /* scriptmath.cpp */, - E8B6B70D17E4193A00E35523 /* scriptmath.h */, - E8B6B70E17E4193A00E35523 /* scriptmathcomplex.cpp */, - E8B6B70F17E4193A00E35523 /* scriptmathcomplex.h */, - E8B6B71017E4193A00E35523 /* scriptstdstring.cpp */, - E8B6B71117E4193A00E35523 /* scriptstdstring.h */, - E8B6B71217E4193A00E35523 /* scriptstdstring_utils.cpp */, - E8B6B71317E4193A00E35523 /* weakref.cpp */, - E8B6B71417E4193A00E35523 /* weakref.h */, - ); - path = addons; - sourceTree = ""; - }; - E8CF037C178ED9D2000683D4 = { - isa = PBXGroup; - children = ( - E893A3641E3E4181000654A4 /* PackageInfo.json */, - E874834618EACF0300C29033 /* OpenSpades.icns */, - E82E680618EA9502004DBA18 /* XSpades.entitlements */, - E88F46571DE1AF48009E85E5 /* Built-in Paks */, - E8E446AB17A02EC700BE8855 /* Supporting Files */, - E8CF041817905609000683D4 /* Resources */, - E88F46581DE1AF8D009E85E5 /* Libraries */, - E8CF0387178ED9D2000683D4 /* Sources */, - E82E66BA18EA78F5004DBA18 /* Frameworks */, - E8CF0386178ED9D2000683D4 /* Products */, - ); - sourceTree = ""; - }; - E8CF0386178ED9D2000683D4 /* Products */ = { - isa = PBXGroup; - children = ( - E82E66B918EA78F5004DBA18 /* OpenSpades.app */, - ); - name = Products; - sourceTree = ""; - }; - E8CF0387178ED9D2000683D4 /* Sources */ = { - isa = PBXGroup; - children = ( - E844888B17D3A059005105D0 /* CMakeLists.txt */, - E844888517D26411005105D0 /* OpenSpades.h */, - E8CF03B3178EE38C000683D4 /* Imports */, - E8567E541792B119009D83E0 /* Audio */, - E8CF03AF178EE2CD000683D4 /* Core */, - E8CF03A2178EDE56000683D4 /* Client */, - E8CF039E178EDDCF000683D4 /* Draw */, - E8CF039D178EDDBF000683D4 /* Gui */, - ); - path = Sources; - sourceTree = ""; - }; - E8CF039D178EDDBF000683D4 /* Gui */ = { - isa = PBXGroup; - children = ( - E8C7D7BD22DB2A4400F78763 /* ConsoleCommandCandidate.cpp */, - E8C7D7BC22DB2A4400F78763 /* ConsoleCommandCandidate.h */, - E8C7D7B822DB220200F78763 /* ConfigConsoleResponder.cpp */, - E8C7D7B922DB220300F78763 /* ConfigConsoleResponder.h */, - E8C7D7B322DAF5B400F78763 /* ConsoleCommand.cpp */, - E8C7D7B222DAF5B400F78763 /* ConsoleCommand.h */, - E8C7D7AB22DA34F400F78763 /* ConsoleHelper.cpp */, - E8C7D7AA22DA34F400F78763 /* ConsoleHelper.h */, - E8C7D7AC22DA34F400F78763 /* ConsoleScreen.cpp */, - E8C7D7AD22DA34F500F78763 /* ConsoleScreen.h */, - E8F74CEC183F931F0085AA54 /* SDLMain.h */, - E8F74CEA183F92DA0085AA54 /* SDLmain.m */, - E8CF03BE178EE50E000683D4 /* Main.cpp */, - E8F74CE6183F8A110085AA54 /* Main.h */, - E8EF8B551E1D70D900E0829C /* SplashWindow.cpp */, - E8EF8B561E1D70D900E0829C /* SplashWindow.h */, - E8CF03BB178EE502000683D4 /* SDLGLDevice.cpp */, - E8CF03BC178EE502000683D4 /* SDLGLDevice.h */, - E8CF03E1178EF57E000683D4 /* SDLRunner.cpp */, - E8CF03E2178EF57E000683D4 /* SDLRunner.h */, - E81CE4A7183F7F2000F22685 /* MainScreen.cpp */, - E81CE4A8183F7F2000F22685 /* MainScreen.h */, - E8F74CED183FBA9C0085AA54 /* MainScreenHelper.cpp */, - E8F74CEE183FBA9C0085AA54 /* MainScreenHelper.h */, - E8F74CE3183F86AE0085AA54 /* View.cpp */, - E8F74CE4183F86AE0085AA54 /* View.h */, - E8F74CE7183F8B9D0085AA54 /* Runner.cpp */, - E8F74CE8183F8B9D0085AA54 /* Runner.h */, - E842888918A3CF6C0060743D /* StartupScreen.cpp */, - E842888A18A3CF6C0060743D /* StartupScreen.h */, - E842888C18A3D1520060743D /* StartupScreenHelper.cpp */, - E842888D18A3D1520060743D /* StartupScreenHelper.h */, - E84E221818BB4BA0001282B0 /* Credits.inc */, - E810122F1E1D7301009955D3 /* Icon.cpp */, - E81012301E1D7301009955D3 /* Icon.h */, - E893A35F1E3E141D000654A4 /* PackageUpdateManager.cpp */, - E893A3601E3E141D000654A4 /* PackageUpdateManager.h */, - ); - path = Gui; - sourceTree = ""; - }; - E8CF039E178EDDCF000683D4 /* Draw */ = { - isa = PBXGroup; - children = ( - E81A7C68186140B000BF3FCE /* Software Renderer */, - E89E811E179C2BDC0059C649 /* Post Filters */, - E8E0AFBA179C0F5B00C6B5A9 /* Client Object */, - E8E0AFB9179C0F3500C6B5A9 /* Low Level */, - E89A649B17A2407100FDA893 /* Lighting */, - E8CF03A9178EDF74000683D4 /* GLRenderer.cpp */, - E8CF03AA178EDF74000683D4 /* GLRenderer.h */, - E8CF03AC178EDFCD000683D4 /* IGLDevice.cpp */, - E8CF03AD178EDFCD000683D4 /* IGLDevice.h */, - E8E0AFB6179C0F2800C6B5A9 /* GLFramebufferManager.cpp */, - E8E0AFB7179C0F2800C6B5A9 /* GLFramebufferManager.h */, - E8CF041C1790D6D5000683D4 /* GLProgramManager.cpp */, - E8CF041D1790D6D5000683D4 /* GLProgramManager.h */, - E859511317C96B260012810C /* GLProfiler.cpp */, - E859511417C96B270012810C /* GLProfiler.h */, - E8CB47D31DE0844400BF606A /* GLSettings.h */, - E8CB47D41DE084AB00BF606A /* GLSettings.cpp */, - ); - path = Draw; - sourceTree = ""; - }; - E8CF03A2178EDE56000683D4 /* Client */ = { - isa = PBXGroup; - children = ( - E8E0AF8D17993CB100C6B5A9 /* I/O Interfaces */, - E8E0AF9017993D1800C6B5A9 /* Net */, - E8E0AF8B17993C2300C6B5A9 /* Client Main */, - E8E0AF8E17993CD600C6B5A9 /* Utilities */, - E8E0AF8C17993C8500C6B5A9 /* World */, - ); - path = Client; - sourceTree = ""; - }; - E8CF03AF178EE2CD000683D4 /* Core */ = { - isa = PBXGroup; - children = ( - E8C7D7BB22DB263200F78763 /* Iterator.h */, - E8E44682179CC4A400BE8855 /* Media */, - E8E44681179CC49C00BE8855 /* I/O */, - E8E44680179CC48B00BE8855 /* System */, - E8B6B6E617E40AF300E35523 /* ScriptBindings */, - E8CF03CC178EE95F000683D4 /* Math.cpp */, - E8CF03CD178EE95F000683D4 /* Math.h */, - E88318E21792698D002ABE6D /* Stopwatch.cpp */, - E88318E31792698D002ABE6D /* Stopwatch.h */, - E834F5541794BBD4004EBE88 /* Debug.cpp */, - E834F5551794BBD4004EBE88 /* Debug.h */, - E8E0AFB3179BF25B00C6B5A9 /* Settings.cpp */, - E8E0AFB4179BF25B00C6B5A9 /* Settings.h */, - E849654B18E9487300B9706D /* FltkPreferenceImporter.cpp */, - E849654C18E9487300B9706D /* FltkPreferenceImporter.h */, - E8B6B6EF17E40DA700E35523 /* RefCountedObject.cpp */, - E8B6B6F017E40DAA00E35523 /* RefCountedObject.h */, - E81A7C7B1865A2E900BF3FCE /* MiniHeap.cpp */, - E81A7C7C1865A2E900BF3FCE /* MiniHeap.h */, - E890F30E187046990090AAB8 /* CP437.cpp */, - E890F30F187046990090AAB8 /* CP437.h */, - E838D41D18AC726B00EE3C53 /* Strings.cpp */, - E838D41E18AC726B00EE3C53 /* Strings.h */, - E8CB47CF1DE07CF000BF606A /* SettingSet.cpp */, - E8CB47D01DE07CF000BF606A /* SettingSet.h */, - E89A5F1C1DF8732200857F65 /* ShellApi.cpp */, - E89A5F1D1DF8732200857F65 /* ShellApi.h */, - E89A5F1F1DF8759200857F65 /* ShellApi.mm */, - E8655AA91DFC0AAA00D5058A /* TMPUtils.h */, - E86D20D12171BF9700964257 /* Disposable.h */, - ); - path = Core; - sourceTree = ""; - }; - E8CF03B3178EE38C000683D4 /* Imports */ = { - isa = PBXGroup; - children = ( - E8CF03B4178EE39A000683D4 /* SDL.h */, - E8CF03C0178EE5B6000683D4 /* OpenGL.h */, - ); - path = Imports; - sourceTree = ""; - }; - E8E0AF8B17993C2300C6B5A9 /* Client Main */ = { - isa = PBXGroup; - children = ( - E844886317D0C404005105D0 /* Local Entities */, - E8CF03C1178EE6D8000683D4 /* Client.cpp */, - E8C7D7C122DB635F00F78763 /* Client_Console.cpp */, - E8FE748B18CC6AA100291338 /* Client_Input.cpp */, - E8FE748D18CC6C2B00291338 /* Client_Update.cpp */, - E8FE748F18CC6CE000291338 /* Client_NetHandler.cpp */, - E8FE749118CC6E4900291338 /* Client_LocalEnts.cpp */, - E8FE749318CC6EB500291338 /* Client_Draw.cpp */, - E8FE749518CC6F2900291338 /* Client_Scene.cpp */, - E82E66B218E9A35C004DBA18 /* Client_FPSCounter.cpp */, - E8CF03C2178EE6D8000683D4 /* Client.h */, - E831D8661FD65BD5003C0D97 /* ClientCameraMode.h */, - E834F56D1797D92F004EBE88 /* ChatWindow.cpp */, - E834F56E1797D932004EBE88 /* ChatWindow.h */, - E8E0AF92179942DB00C6B5A9 /* Corpse.cpp */, - E8E0AF93179942DB00C6B5A9 /* Corpse.h */, - E8E0AF95179980F500C6B5A9 /* CenterMessageView.cpp */, - E8E0AF96179980F500C6B5A9 /* CenterMessageView.h */, - E8E0AF98179996A100C6B5A9 /* HurtRingView.cpp */, - E8E0AF99179996A100C6B5A9 /* HurtRingView.h */, - E8E0AF9E179A698800C6B5A9 /* MapView.cpp */, - E8E0AF9F179A698800C6B5A9 /* MapView.h */, - E8E0AFA1179A8F1000C6B5A9 /* ScoreboardView.cpp */, - E8E0AFA2179A8F1000C6B5A9 /* ScoreboardView.h */, - E8E0AFA4179AA31B00C6B5A9 /* LimboView.cpp */, - E8E0AFA5179AA31C00C6B5A9 /* LimboView.h */, - E80B28CB17AFCCC40056179E /* PaletteView.cpp */, - E80B28CC17AFCCC70056179E /* PaletteView.h */, - E80B28D117AFF77B0056179E /* TCProgressView.cpp */, - E80B28D217AFF77E0056179E /* TCProgressView.h */, - E8F74CF61845C5000085AA54 /* ClientUI.cpp */, - E8F74CF71845C5000085AA54 /* ClientUI.h */, - E8F74CF91845C64B0085AA54 /* ClientUIHelper.cpp */, - E8F74CFA1845C64B0085AA54 /* ClientUIHelper.h */, - ); - name = "Client Main"; - sourceTree = ""; - }; - E8E0AF8C17993C8500C6B5A9 /* World */ = { - isa = PBXGroup; - children = ( - E8E0AF9117993D2B00C6B5A9 /* Game Modes */, - E8E0AF8F17993CEB00C6B5A9 /* Elements */, - E8CF03FA178FACFF000683D4 /* GameMap.cpp */, - E8CF03FB178FACFF000683D4 /* GameMap.h */, - E8CF03FD178FB1E1000683D4 /* IGameMapListener.cpp */, - E8CF03FE178FB1E1000683D4 /* IGameMapListener.h */, - E88318DC179257F0002ABE6D /* GameMapWrapper.cpp */, - E88318DD179257F0002ABE6D /* GameMapWrapper.h */, - E88318E617928F84002ABE6D /* World.cpp */, - E88318E717928F85002ABE6D /* World.h */, - E8567E6A1792F398009D83E0 /* IWorldListener.cpp */, - E8567E6B1792F399009D83E0 /* IWorldListener.h */, - E88318E517928EAC002ABE6D /* PhysicsConstants.h */, - E8FE748818CB329C00291338 /* HitTestDebugger.cpp */, - E8FE748918CB329C00291338 /* HitTestDebugger.h */, - E8A2EB9E1F5BE16D00E39CD9 /* GameProperties.cpp */, - E8A2EB9F1F5BE16D00E39CD9 /* GameProperties.h */, - ); - name = World; - sourceTree = ""; - }; - E8E0AF8D17993CB100C6B5A9 /* I/O Interfaces */ = { - isa = PBXGroup; - children = ( - E8CF03A6178EDF6A000683D4 /* IRenderer.cpp */, - E8CF03A7178EDF6A000683D4 /* IRenderer.h */, - E8CF03F7178FABA4000683D4 /* SceneDefinition.cpp */, - E8CF03F8178FABA4000683D4 /* SceneDefinition.h */, - E8CF03C6178EE81A000683D4 /* IAudioDevice.cpp */, - E8CF03C7178EE81A000683D4 /* IAudioDevice.h */, - E8567E551792B24D009D83E0 /* IAudioChunk.cpp */, - E8567E561792B24D009D83E0 /* IAudioChunk.h */, - E8CF03C9178EE869000683D4 /* IInputInterface.cpp */, - E8CF03CA178EE869000683D4 /* IInputInterface.h */, - E8CF03F4178FAA8B000683D4 /* IImage.cpp */, - E8CF03F5178FAA8B000683D4 /* IImage.h */, - E8567E711793D5AD009D83E0 /* IModel.cpp */, - E8567E721793D5AD009D83E0 /* IModel.h */, - ); - name = "I/O Interfaces"; - sourceTree = ""; - }; - E8E0AF8E17993CD600C6B5A9 /* Utilities */ = { - isa = PBXGroup; - children = ( - E834F56617979F55004EBE88 /* Quake3Font.cpp */, - E834F56717979F57004EBE88 /* Quake3Font.h */, - E834F56917979FD3004EBE88 /* IFont.cpp */, - E834F56A17979FD5004EBE88 /* IFont.h */, - E834F56C1797AA2C004EBE88 /* FontData.h */, - E842889418A667930060743D /* Fonts.cpp */, - E842889518A667930060743D /* Fonts.h */, - E8725DAB1DE33B4D003BC987 /* NoiseSampler.cpp */, - E8725DAC1DE33B4D003BC987 /* NoiseSampler.h */, - E8655AA61DFC0A6E00D5058A /* FTFont.cpp */, - E8655AA71DFC0A6E00D5058A /* FTFont.h */, - ); - name = Utilities; - sourceTree = ""; - }; - E8E0AF8F17993CEB00C6B5A9 /* Elements */ = { - isa = PBXGroup; - children = ( - E88318D9179256E4002ABE6D /* Player.cpp */, - E88318DA179256E5002ABE6D /* Player.h */, - E834F54E17942C43004EBE88 /* Grenade.cpp */, - E834F54F17942C43004EBE88 /* Grenade.h */, - E8567E6E1793AA45009D83E0 /* Weapon.cpp */, - E8567E6F1793AA46009D83E0 /* Weapon.h */, - ); - name = Elements; - sourceTree = ""; - }; - E8E0AF9017993D1800C6B5A9 /* Net */ = { - isa = PBXGroup; - children = ( - E8403CAD2291280700093C3E /* GameMapLoader.cpp */, - E8403CAC2291280700093C3E /* GameMapLoader.h */, - E8F6E6E41DCF503200FE76BB /* MumbleLink.cpp */, - E8F6E6E51DCF503200FE76BB /* MumbleLink.h */, - E834F55117944778004EBE88 /* NetClient.cpp */, - E834F55217944779004EBE88 /* NetClient.h */, - ); - name = Net; - sourceTree = ""; - }; - E8E0AF9117993D2B00C6B5A9 /* Game Modes */ = { - isa = PBXGroup; - children = ( - E834F5571794DCF9004EBE88 /* IGameMode.cpp */, - E834F5581794DCFB004EBE88 /* IGameMode.h */, - E834F55A1794DDA2004EBE88 /* CTFGameMode.cpp */, - E834F55B1794DDA4004EBE88 /* CTFGameMode.h */, - E80B28CE17AFE68A0056179E /* TCGameMode.cpp */, - E80B28CF17AFE68A0056179E /* TCGameMode.h */, - ); - name = "Game Modes"; - sourceTree = ""; - }; - E8E0AFB9179C0F3500C6B5A9 /* Low Level */ = { - isa = PBXGroup; - children = ( - E8CF04191790CCAB000683D4 /* GLShader.cpp */, - E8CF041A1790CCAB000683D4 /* GLShader.h */, - E88318A91790EBAA002ABE6D /* GLProgramUniform.cpp */, - E88318AA1790EBAA002ABE6D /* GLProgramUniform.h */, - E88318AC1790EDDF002ABE6D /* GLProgramAttribute.cpp */, - E88318AD1790EDDF002ABE6D /* GLProgramAttribute.h */, - E8CF04061790455B000683D4 /* GLProgram.cpp */, - E8CF04071790455B000683D4 /* GLProgram.h */, - ); - name = "Low Level"; - sourceTree = ""; - }; - E8E0AFBA179C0F5B00C6B5A9 /* Client Object */ = { - isa = PBXGroup; - children = ( - E8CF0400178FB52F000683D4 /* GLImage.cpp */, - E8CF0401178FB52F000683D4 /* GLImage.h */, - E8E0AF9B179A5BC200C6B5A9 /* GLFlatMapRenderer.cpp */, - E8E0AF9C179A5BC200C6B5A9 /* GLFlatMapRenderer.h */, - E8E44696179D2CA100BE8855 /* IGLSpriteRenderer.cpp */, - E8E44697179D2CA100BE8855 /* IGLSpriteRenderer.h */, - E8E0AFA7179ACDDD00C6B5A9 /* GLSpriteRenderer.cpp */, - E8E0AFA8179ACDDD00C6B5A9 /* GLSpriteRenderer.h */, - E8E44699179D2EDC00BE8855 /* GLSoftSpriteRenderer.cpp */, - E8E4469A179D2EDC00BE8855 /* GLSoftSpriteRenderer.h */, - E8E0AF881798278000C6B5A9 /* GLImageRenderer.cpp */, - E8E0AF891798278000C6B5A9 /* GLImageRenderer.h */, - E88318D6179176F3002ABE6D /* GLImageManager.cpp */, - E88318D7179176F3002ABE6D /* GLImageManager.h */, - E8567E741793D60E009D83E0 /* GLModelManager.cpp */, - E8567E751793D60E009D83E0 /* GLModelManager.h */, - E8567E7A1793E105009D83E0 /* GLModel.cpp */, - E8567E7B1793E105009D83E0 /* GLModel.h */, - E8567E7D1793E1B3009D83E0 /* GLVoxelModel.cpp */, - E8567E7E1793E1B3009D83E0 /* GLVoxelModel.h */, - E88318AF1790F73F002ABE6D /* GLMapRenderer.cpp */, - E88318B01790F73F002ABE6D /* GLMapRenderer.h */, - E88318B217911A73002ABE6D /* GLMapChunk.cpp */, - E88318B317911A73002ABE6D /* GLMapChunk.h */, - E89A648C17A11B4E00FDA893 /* GLModelRenderer.cpp */, - E89A648D17A11B4E00FDA893 /* GLModelRenderer.h */, - E80B286F17A4CA2B0056179E /* GLOptimizedVoxelModel.cpp */, - E80B287017A4CA2C0056179E /* GLOptimizedVoxelModel.h */, - E80B289717AA63FC0056179E /* GLWaterRenderer.cpp */, - E80B289817AA63FF0056179E /* GLWaterRenderer.h */, - E844886017CFB32B005105D0 /* GLLongSpriteRenderer.cpp */, - E844886117CFB32B005105D0 /* GLLongSpriteRenderer.h */, - E8B6B72C17E68B1B00E35523 /* GLSoftLitSpriteRenderer.cpp */, - E8B6B72D17E68B1B00E35523 /* GLSoftLitSpriteRenderer.h */, - E8B8082718E05B920001013E /* CellToTriangle.h */, - ); - name = "Client Object"; - sourceTree = ""; - }; - E8E44680179CC48B00BE8855 /* System */ = { - isa = PBXGroup; - children = ( - E85233791839B28C00F40541 /* VersionInfo.cpp */, - E852337A1839B28C00F40541 /* VersionInfo.h */, - E8CF03B0178EE300000683D4 /* Thread.cpp */, - E8CF03B1178EE300000683D4 /* Thread.h */, - E8CF03CF178EEF80000683D4 /* Semaphore.cpp */, - E8CF03D0178EEF80000683D4 /* Semaphore.h */, - E8CF03D5178EF09C000683D4 /* ILockable.cpp */, - E8CF03D6178EF09C000683D4 /* ILockable.h */, - E8CF03DE178EF4E9000683D4 /* IRunnable.cpp */, - E8CF03DF178EF4E9000683D4 /* IRunnable.h */, - E8CF0403178FF776000683D4 /* Exception.cpp */, - E8CF0404178FF776000683D4 /* Exception.h */, - E8567E5E1792C0FF009D83E0 /* DynamicLibrary.cpp */, - E8567E5F1792C0FF009D83E0 /* DynamicLibrary.h */, - E80B286C17A3B0570056179E /* ConcurrentDispatch.cpp */, - E80B286D17A3B0570056179E /* ConcurrentDispatch.h */, - E80B288B17A5FFB30056179E /* ThreadLocalStorage.cpp */, - E80B288C17A5FFB40056179E /* ThreadLocalStorage.h */, - E8C92A0D186A8D3600740C9F /* CpuID.h */, - E8C92A0E186A902500740C9F /* CpuID.cpp */, - ); - name = System; - sourceTree = ""; - }; - E8E44681179CC49C00BE8855 /* I/O */ = { - isa = PBXGroup; - children = ( - E8403CA9229123CF00093C3E /* PipeStream.cpp */, - E8403CAA229123CF00093C3E /* PipeStream.h */, - E8403CA6229061BE00093C3E /* RandomAccessAdaptor.cpp */, - E8403CA7229061BE00093C3E /* RandomAccessAdaptor.h */, - E8B6B72617E5AC9C00E35523 /* ServerAddress.cpp */, - E8B6B72717E5AC9C00E35523 /* ServerAddress.h */, - E8CF04091790471D000683D4 /* IFileSystem.cpp */, - E8CF040A1790471D000683D4 /* IFileSystem.h */, - E8CF040C17904970000683D4 /* FileManager.cpp */, - E8CF040D17904971000683D4 /* FileManager.h */, - E8CF040F17904ABC000683D4 /* IStream.cpp */, - E8CF041017904ABC000683D4 /* IStream.h */, - E8CF041217904E8B000683D4 /* StdStream.cpp */, - E8CF041317904E8C000683D4 /* StdStream.h */, - E849654E18E94F1200B9706D /* SdlFileStream.cpp */, - E849654F18E94F1200B9706D /* SdlFileStream.h */, - E8CF0415179052F6000683D4 /* DirectoryFileSystem.cpp */, - E8CF0416179052F7000683D4 /* DirectoryFileSystem.h */, - E834F55D17950E41004EBE88 /* DeflateStream.cpp */, - E834F55E17950E42004EBE88 /* DeflateStream.h */, - E834F56317951B1A004EBE88 /* MemoryStream.cpp */, - E834F56417951B1B004EBE88 /* MemoryStream.h */, - E80B28DC17B39EEE0056179E /* ZipFileSystem.cpp */, - E80B28DD17B39EEF0056179E /* ZipFileSystem.h */, - E80B28DF17B4FDD40056179E /* DynamicMemoryStream.cpp */, - E80B28E017B4FDD70056179E /* DynamicMemoryStream.h */, - ); - name = I/O; - sourceTree = ""; - }; - E8E44682179CC4A400BE8855 /* Media */ = { - isa = PBXGroup; - children = ( - E8403CB02299073400093C3E /* VoxelModelLoader.cpp */, - E8403CAF2299073400093C3E /* VoxelModelLoader.h */, - E8E44683179CC4DE00BE8855 /* Bitmap Codecs */, - E88318D3179172AF002ABE6D /* Bitmap.cpp */, - E88318D4179172AF002ABE6D /* Bitmap.h */, - E8567E771793DC37009D83E0 /* VoxelModel.cpp */, - E8567E781793DC37009D83E0 /* VoxelModel.h */, - E8567E611792CA12009D83E0 /* IAudioStream.cpp */, - E8567E621792CA12009D83E0 /* IAudioStream.h */, - E8567E641792CCE5009D83E0 /* WavAudioStream.cpp */, - E8567E651792CCE5009D83E0 /* WavAudioStream.h */, - E80B288617A52AB60056179E /* BitmapAtlasGenerator.cpp */, - E80B288717A52AB70056179E /* BitmapAtlasGenerator.h */, - E83668AD1E05757B00977A63 /* OpusAudioStream.cpp */, - E83668AE1E05757B00977A63 /* OpusAudioStream.h */, - E83668B01E05844E00977A63 /* AudioStream.cpp */, - E83668B11E05844E00977A63 /* AudioStream.h */, - ); - name = Media; - sourceTree = ""; - }; - E8E44683179CC4DE00BE8855 /* Bitmap Codecs */ = { - isa = PBXGroup; - children = ( - E895D66118D614DE00F5B9CA /* pnglite.c */, - E895D66218D614DE00F5B9CA /* pnglite.h */, - E895D66318D614DE00F5B9CA /* PngWriter.cpp */, - E895D65B18D4A10E00F5B9CA /* jpge.cpp */, - E895D65C18D4A10E00F5B9CA /* jpge.h */, - E8E44684179CC4FF00BE8855 /* IBitmapCodec.cpp */, - E8E44685179CC4FF00BE8855 /* IBitmapCodec.h */, - E8E44687179CC65900BE8855 /* TargaReader.cpp */, - E8E446A8179F822D00BE8855 /* TargaWriter.cpp */, - E87AB82118BB3957006B7D73 /* SdlImageReader.cpp */, - E895D65E18D4A15900F5B9CA /* JpegWriter.cpp */, - ); - name = "Bitmap Codecs"; - sourceTree = ""; - }; - E8E446AB17A02EC700BE8855 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - E84E221218BB449A001282B0 /* cmake */, - E844886717D262C1005105D0 /* CMakeLists.txt */, - E8EE08A217BA016F00631987 /* AUTHORS */, - E842D48B17C0D06300381B49 /* README.md */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - E82E66B818EA78F5004DBA18 /* OpenSpades */ = { - isa = PBXNativeTarget; - buildConfigurationList = E82E66E718EA78F5004DBA18 /* Build configuration list for PBXNativeTarget "OpenSpades" */; - buildPhases = ( - E82E66B518EA78F5004DBA18 /* Sources */, - E82E66B618EA78F5004DBA18 /* Frameworks */, - E82E67F218EA7E35004DBA18 /* ShellScript */, - E82E66B718EA78F5004DBA18 /* Resources */, - E874834818ED1BDD00C29033 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = OpenSpades; - productName = XSpades; - productReference = E82E66B918EA78F5004DBA18 /* OpenSpades.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - E8CF037D178ED9D2000683D4 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1010; - ORGANIZATIONNAME = yvt.jp; - TargetAttributes = { - E82E66B818EA78F5004DBA18 = { - SystemCapabilities = { - com.apple.Sandbox = { - enabled = 0; - }; - }; - }; - }; - }; - buildConfigurationList = E8CF0380178ED9D2000683D4 /* Build configuration list for PBXProject "OpenSpades" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - Base, - ); - mainGroup = E8CF037C178ED9D2000683D4; - productRefGroup = E8CF0386178ED9D2000683D4 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - E82E66B818EA78F5004DBA18 /* OpenSpades */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - E82E66B718EA78F5004DBA18 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E8690AEC1D3920C800DBC331 /* pak000-Nonfree.pak in Resources */, - E8690AED1D3920C800DBC331 /* pak002-Base.pak in Resources */, - E8690AEE1D3920C800DBC331 /* pak005-Models.pak in Resources */, - E8690AEF1D3920C800DBC331 /* pak010-BaseSkin.pak in Resources */, - E893A3651E3E4181000654A4 /* PackageInfo.json in Resources */, - E8690AF01D3920C800DBC331 /* pak050-Locales.pak in Resources */, - E8690AF11D3920C800DBC331 /* pak999-References.pak in Resources */, - E874834718EACF0300C29033 /* OpenSpades.icns in Resources */, - E82E680418EA7F60004DBA18 /* libysrspades.dylib in Resources */, - E82E67FA18EA7EAB004DBA18 /* font-unifont.pak in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - E82E67F218EA7E35004DBA18 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "cd Resources\n./mkpak.sh"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - E82E66B518EA78F5004DBA18 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E82E67E318EA7A51004DBA18 /* ioapi.c in Sources */, - E82E67E418EA7A51004DBA18 /* unzip.c in Sources */, - E82E67E518EA7A51004DBA18 /* kiss_fft.c in Sources */, - E82E67E618EA7A51004DBA18 /* callbacks.c in Sources */, - E82E67E718EA7A51004DBA18 /* compress.c in Sources */, - E82E67E818EA7A51004DBA18 /* host.c in Sources */, - E82E67E918EA7A51004DBA18 /* list.c in Sources */, - E82E67EA18EA7A51004DBA18 /* packet.c in Sources */, - E8C7D7AE22DA34F500F78763 /* ConsoleHelper.cpp in Sources */, - E8C7D7AF22DA34F500F78763 /* ConsoleScreen.cpp in Sources */, - E82E67EB18EA7A51004DBA18 /* peer.c in Sources */, - E8403CAB229123CF00093C3E /* PipeStream.cpp in Sources */, - E81012311E1D7301009955D3 /* Icon.cpp in Sources */, - E8A2EBA01F5BE16D00E39CD9 /* GameProperties.cpp in Sources */, - E82E67EC18EA7A51004DBA18 /* protocol.c in Sources */, - E8C7D7B422DAF5B500F78763 /* ConsoleCommand.cpp in Sources */, - E82E67ED18EA7A51004DBA18 /* unix.c in Sources */, - E82E67EE18EA7A51004DBA18 /* win32.c in Sources */, - E82E67EF18EA7A51004DBA18 /* pnglite.c in Sources */, - E82E673318EA7972004DBA18 /* as_atomic.cpp in Sources */, - E8CB47CE1DE071CA00BF606A /* SWUtils.cpp in Sources */, - E82E673418EA7972004DBA18 /* as_builder.cpp in Sources */, - E82E673518EA7972004DBA18 /* as_bytecode.cpp in Sources */, - E82E673618EA7972004DBA18 /* as_callfunc.cpp in Sources */, - E82E673718EA7972004DBA18 /* as_callfunc_arm.cpp in Sources */, - E82E673818EA7972004DBA18 /* as_callfunc_mips.cpp in Sources */, - E82E673918EA7972004DBA18 /* as_callfunc_ppc.cpp in Sources */, - E82E673A18EA7972004DBA18 /* as_callfunc_ppc_64.cpp in Sources */, - E82E673B18EA7972004DBA18 /* as_callfunc_sh4.cpp in Sources */, - E82E673C18EA7972004DBA18 /* as_callfunc_x64_gcc.cpp in Sources */, - E82E673D18EA7972004DBA18 /* as_callfunc_x64_mingw.cpp in Sources */, - E82E673E18EA7972004DBA18 /* as_callfunc_x64_msvc.cpp in Sources */, - E82E673F18EA7972004DBA18 /* as_callfunc_x86.cpp in Sources */, - E82E674018EA7972004DBA18 /* as_callfunc_xenon.cpp in Sources */, - E82E674118EA7972004DBA18 /* as_compiler.cpp in Sources */, - E82E674218EA7972004DBA18 /* as_configgroup.cpp in Sources */, - E8403CA8229061BF00093C3E /* RandomAccessAdaptor.cpp in Sources */, - E82E674318EA7972004DBA18 /* as_context.cpp in Sources */, - E82E674418EA7972004DBA18 /* as_datatype.cpp in Sources */, - E82E674518EA7972004DBA18 /* as_gc.cpp in Sources */, - E8725DAD1DE33B4D003BC987 /* NoiseSampler.cpp in Sources */, - E82E674618EA7972004DBA18 /* as_generic.cpp in Sources */, - E82E674718EA7972004DBA18 /* as_globalproperty.cpp in Sources */, - E8EF8B571E1D70D900E0829C /* SplashWindow.cpp in Sources */, - E82E674818EA7972004DBA18 /* as_memory.cpp in Sources */, - E82E674918EA7972004DBA18 /* as_module.cpp in Sources */, - E82E674A18EA7972004DBA18 /* as_objecttype.cpp in Sources */, - E82E674B18EA7972004DBA18 /* as_outputbuffer.cpp in Sources */, - E82E674C18EA7972004DBA18 /* as_parser.cpp in Sources */, - E8C7D7C022DB3AE000F78763 /* ConsoleCommandCandidate.cpp in Sources */, - E82E674D18EA7972004DBA18 /* as_restore.cpp in Sources */, - E82E674E18EA7972004DBA18 /* as_scriptcode.cpp in Sources */, - E8C7D7BE22DB2A4400F78763 /* ConsoleCommandCandidate.cpp in Sources */, - E82E674F18EA7972004DBA18 /* as_scriptengine.cpp in Sources */, - E82E675018EA7972004DBA18 /* as_scriptfunction.cpp in Sources */, - E82E675118EA7972004DBA18 /* as_scriptnode.cpp in Sources */, - E82E675218EA7972004DBA18 /* as_scriptobject.cpp in Sources */, - E82E675318EA7972004DBA18 /* as_string.cpp in Sources */, - E82E675418EA7972004DBA18 /* as_string_util.cpp in Sources */, - E82E675518EA7972004DBA18 /* as_thread.cpp in Sources */, - E8CB47D21DE07CF000BF606A /* SettingSet.cpp in Sources */, - E82E675618EA7972004DBA18 /* as_tokenizer.cpp in Sources */, - E82E675718EA7972004DBA18 /* as_typeinfo.cpp in Sources */, - E82E675818EA7972004DBA18 /* as_variablescope.cpp in Sources */, - E82E675918EA7972004DBA18 /* ALDevice.cpp in Sources */, - E82E675A18EA7972004DBA18 /* ALFuncs.cpp in Sources */, - E82E675B18EA7972004DBA18 /* YsrDevice.cpp in Sources */, - E82E675C18EA7972004DBA18 /* NullDevice.cpp in Sources */, - E8403CB12299073400093C3E /* VoxelModelLoader.cpp in Sources */, - E82E675D18EA7972004DBA18 /* PngWriter.cpp in Sources */, - E82E675E18EA7972004DBA18 /* jpge.cpp in Sources */, - E82E675F18EA7972004DBA18 /* IBitmapCodec.cpp in Sources */, - E82E676018EA7972004DBA18 /* TargaReader.cpp in Sources */, - E82E676118EA7972004DBA18 /* TargaWriter.cpp in Sources */, - E82E676218EA7972004DBA18 /* SdlImageReader.cpp in Sources */, - E82E676318EA7972004DBA18 /* JpegWriter.cpp in Sources */, - E82E676418EA7972004DBA18 /* Bitmap.cpp in Sources */, - E82E676518EA7972004DBA18 /* VoxelModel.cpp in Sources */, - E82E676618EA7972004DBA18 /* IAudioStream.cpp in Sources */, - E82E676718EA7972004DBA18 /* WavAudioStream.cpp in Sources */, - E82E676818EA7972004DBA18 /* BitmapAtlasGenerator.cpp in Sources */, - E82E676918EA7972004DBA18 /* ServerAddress.cpp in Sources */, - E82E676A18EA7972004DBA18 /* IFileSystem.cpp in Sources */, - E82E676B18EA7972004DBA18 /* FileManager.cpp in Sources */, - E82E676C18EA7972004DBA18 /* IStream.cpp in Sources */, - E82E676D18EA7972004DBA18 /* StdStream.cpp in Sources */, - E82E676E18EA7972004DBA18 /* SdlFileStream.cpp in Sources */, - E82E676F18EA7972004DBA18 /* DirectoryFileSystem.cpp in Sources */, - E82E677018EA7972004DBA18 /* DeflateStream.cpp in Sources */, - E82E677118EA7972004DBA18 /* MemoryStream.cpp in Sources */, - E82E677218EA7972004DBA18 /* ZipFileSystem.cpp in Sources */, - E82E677318EA7972004DBA18 /* DynamicMemoryStream.cpp in Sources */, - E82E677418EA7972004DBA18 /* VersionInfo.cpp in Sources */, - E82E677518EA7972004DBA18 /* Thread.cpp in Sources */, - E82E677618EA7972004DBA18 /* Semaphore.cpp in Sources */, - E82E677818EA7972004DBA18 /* ILockable.cpp in Sources */, - E82E677A18EA7972004DBA18 /* IRunnable.cpp in Sources */, - E82E677B18EA7972004DBA18 /* Exception.cpp in Sources */, - E82E677C18EA7972004DBA18 /* DynamicLibrary.cpp in Sources */, - E82E677D18EA7972004DBA18 /* ConcurrentDispatch.cpp in Sources */, - E82E677E18EA7972004DBA18 /* ThreadLocalStorage.cpp in Sources */, - E82E677F18EA7972004DBA18 /* CpuID.cpp in Sources */, - E82E678018EA7972004DBA18 /* MathScript.cpp in Sources */, - E82E678118EA7972004DBA18 /* StringsScript.cpp in Sources */, - E82E678218EA7972004DBA18 /* ScriptManager.cpp in Sources */, - E82E678318EA7972004DBA18 /* IImage.cpp in Sources */, - E82E678418EA7972004DBA18 /* IModel.cpp in Sources */, - E89BBDC31B3559CD00F53EE9 /* GLAutoExposureFilter.cpp in Sources */, - E82E678518EA7972004DBA18 /* IRenderer.cpp in Sources */, - E82E678618EA7972004DBA18 /* GameMap.cpp in Sources */, - E82E678718EA7972004DBA18 /* Bitmap.cpp in Sources */, - E82E678818EA7972004DBA18 /* VoxelModel.cpp in Sources */, - E82E678918EA7972004DBA18 /* IAudioDevice.cpp in Sources */, - E82E678A18EA7972004DBA18 /* IAudioChunk.cpp in Sources */, - E82E678B18EA7972004DBA18 /* PrimitiveArray.cpp in Sources */, - E82E678C18EA7972004DBA18 /* IToolSkin.cpp in Sources */, - E82E678D18EA7972004DBA18 /* ScriptFunction.cpp in Sources */, - E82E678E18EA7972004DBA18 /* ISpadeSkin.cpp in Sources */, - E82E678F18EA7972004DBA18 /* IBlockSkin.cpp in Sources */, - E82E679018EA7972004DBA18 /* IViewToolSkin.cpp in Sources */, - E82E679118EA7972004DBA18 /* IThirdPersonToolSkin.cpp in Sources */, - E82E679218EA7972004DBA18 /* IGrenadeSkin.cpp in Sources */, - E82E679318EA7972004DBA18 /* IWeaponSkin.cpp in Sources */, - E82E679418EA7972004DBA18 /* IFont.cpp in Sources */, - E82E679518EA7972004DBA18 /* MainScreenHelper.cpp in Sources */, - E8D0E5D318F321E300DE3BDB /* GLNonlinearizeFilter.cpp in Sources */, - E82E679618EA7972004DBA18 /* StartupScreenHelper.cpp in Sources */, - E82E679718EA7972004DBA18 /* Config.cpp in Sources */, - E82E679818EA7972004DBA18 /* ClientUIHelper.cpp in Sources */, - E82E679918EA7972004DBA18 /* Clipboard.cpp in Sources */, - E82E679A18EA7972004DBA18 /* Math.cpp in Sources */, - E89A5F1E1DF8732200857F65 /* ShellApi.cpp in Sources */, - E82E679C18EA7972004DBA18 /* Stopwatch.cpp in Sources */, - E82E679D18EA7972004DBA18 /* Debug.cpp in Sources */, - E82E679E18EA7972004DBA18 /* Settings.cpp in Sources */, - E82E679F18EA7972004DBA18 /* FltkPreferenceImporter.cpp in Sources */, - E82E67A018EA7972004DBA18 /* RefCountedObject.cpp in Sources */, - E82E67A118EA7972004DBA18 /* MiniHeap.cpp in Sources */, - E82E67A218EA7972004DBA18 /* CP437.cpp in Sources */, - E82E67A318EA7972004DBA18 /* Strings.cpp in Sources */, - E82E67A418EA7972004DBA18 /* IRenderer.cpp in Sources */, - E82E67A518EA7972004DBA18 /* SceneDefinition.cpp in Sources */, - E82E67A618EA7972004DBA18 /* IAudioDevice.cpp in Sources */, - E89A5F201DF8759200857F65 /* ShellApi.mm in Sources */, - E82E67A718EA7972004DBA18 /* IAudioChunk.cpp in Sources */, - E82E67A818EA7972004DBA18 /* IInputInterface.cpp in Sources */, - E82E67A918EA7972004DBA18 /* IImage.cpp in Sources */, - E82E67AA18EA7972004DBA18 /* IModel.cpp in Sources */, - E82E67AC18EA7972004DBA18 /* NetClient.cpp in Sources */, - E82E67AD18EA7972004DBA18 /* ILocalEntity.cpp in Sources */, - E82E67AE18EA7972004DBA18 /* ParticleSpriteEntity.cpp in Sources */, - E82E67AF18EA7972004DBA18 /* SmokeSpriteEntity.cpp in Sources */, - E82E67B018EA7972004DBA18 /* FallingBlock.cpp in Sources */, - E82E67B118EA7972004DBA18 /* GunCasing.cpp in Sources */, - E82E67B218EA7972004DBA18 /* Tracer.cpp in Sources */, - E82E67B318EA7972004DBA18 /* ClientPlayer.cpp in Sources */, - E82E67B418EA7972004DBA18 /* Client.cpp in Sources */, - E82E67B518EA7972004DBA18 /* Client_Input.cpp in Sources */, - E82E67B618EA7972004DBA18 /* Client_Update.cpp in Sources */, - E8F6E6E71DCF503500FE76BB /* MumbleLink.cpp in Sources */, - E82E67B718EA7972004DBA18 /* Client_NetHandler.cpp in Sources */, - E82E67B818EA7972004DBA18 /* Client_LocalEnts.cpp in Sources */, - E82E67B918EA7972004DBA18 /* Client_Draw.cpp in Sources */, - E809500A1E17F66500AECDF2 /* GLSSAOFilter.cpp in Sources */, - E82E67BA18EA7972004DBA18 /* Client_Scene.cpp in Sources */, - E82E67BB18EA7972004DBA18 /* Client_FPSCounter.cpp in Sources */, - E82E67BC18EA7972004DBA18 /* ChatWindow.cpp in Sources */, - E82E67BD18EA7972004DBA18 /* Corpse.cpp in Sources */, - E82E67BE18EA7972004DBA18 /* CenterMessageView.cpp in Sources */, - E82E67BF18EA7972004DBA18 /* HurtRingView.cpp in Sources */, - E82E67C018EA7972004DBA18 /* MapView.cpp in Sources */, - E82E67C118EA7972004DBA18 /* ScoreboardView.cpp in Sources */, - E82E67C218EA7972004DBA18 /* LimboView.cpp in Sources */, - E82E67C318EA7972004DBA18 /* PaletteView.cpp in Sources */, - E82E67C418EA7972004DBA18 /* TCProgressView.cpp in Sources */, - E82E67C518EA7972004DBA18 /* ClientUI.cpp in Sources */, - E82E67C618EA7972004DBA18 /* ClientUIHelper.cpp in Sources */, - E82E67C718EA7972004DBA18 /* Quake3Font.cpp in Sources */, - E82E67C818EA7972004DBA18 /* IFont.cpp in Sources */, - E82E67C918EA7972004DBA18 /* Fonts.cpp in Sources */, - E82E67CA18EA7972004DBA18 /* IGameMode.cpp in Sources */, - E82E67CB18EA7972004DBA18 /* CTFGameMode.cpp in Sources */, - E8403CAE2291280800093C3E /* GameMapLoader.cpp in Sources */, - E82E67CC18EA7972004DBA18 /* TCGameMode.cpp in Sources */, - E82E67CD18EA7972004DBA18 /* Player.cpp in Sources */, - E82E67CE18EA7972004DBA18 /* Grenade.cpp in Sources */, - E82E67CF18EA7972004DBA18 /* Weapon.cpp in Sources */, - E82E67D018EA7972004DBA18 /* GameMap.cpp in Sources */, - E82E67D118EA7972004DBA18 /* IGameMapListener.cpp in Sources */, - E82E67D218EA7972004DBA18 /* GameMapWrapper.cpp in Sources */, - E8655AA81DFC0A6E00D5058A /* FTFont.cpp in Sources */, - E82E67D318EA7972004DBA18 /* World.cpp in Sources */, - E82E67D418EA7972004DBA18 /* IWorldListener.cpp in Sources */, - E82E67D518EA7972004DBA18 /* HitTestDebugger.cpp in Sources */, - E82E67D618EA7972004DBA18 /* SWRenderer.cpp in Sources */, - E82E67D718EA7972004DBA18 /* SWPort.cpp in Sources */, - E82E67D818EA7972004DBA18 /* SWImage.cpp in Sources */, - E82E67D918EA7972004DBA18 /* SWModel.cpp in Sources */, - E82E67DA18EA7972004DBA18 /* SWImageRenderer.cpp in Sources */, - E82E67DB18EA7972004DBA18 /* SWFeatureLevel.cpp in Sources */, - E893A3611E3E141D000654A4 /* PackageUpdateManager.cpp in Sources */, - E82E67DC18EA7972004DBA18 /* SWMapRenderer.cpp in Sources */, - E82E67DD18EA7972004DBA18 /* SWFlatMapRenderer.cpp in Sources */, - E82E67DE18EA7972004DBA18 /* SWModelRenderer.cpp in Sources */, - E83668B21E05844E00977A63 /* AudioStream.cpp in Sources */, - E82E672518EA7967004DBA18 /* json_reader.cpp in Sources */, - E82E672618EA7967004DBA18 /* json_value.cpp in Sources */, - E82E672718EA7967004DBA18 /* json_writer.cpp in Sources */, - E82E672818EA7967004DBA18 /* scriptany.cpp in Sources */, - E82E672918EA7967004DBA18 /* scriptarray.cpp in Sources */, - E83668AF1E05757B00977A63 /* OpusAudioStream.cpp in Sources */, - E82E672A18EA7967004DBA18 /* scriptbuilder.cpp in Sources */, - E82E672B18EA7967004DBA18 /* scriptdictionary.cpp in Sources */, - E82E672C18EA7967004DBA18 /* scripthandle.cpp in Sources */, - E82E672D18EA7967004DBA18 /* scripthelper.cpp in Sources */, - E82E672E18EA7967004DBA18 /* scriptmath.cpp in Sources */, - E82E672F18EA7967004DBA18 /* scriptmathcomplex.cpp in Sources */, - E82E673018EA7967004DBA18 /* scriptstdstring.cpp in Sources */, - E82E673118EA7967004DBA18 /* scriptstdstring_utils.cpp in Sources */, - E82E673218EA7967004DBA18 /* weakref.cpp in Sources */, - E82E66EE18EA7954004DBA18 /* GLBloomFilter.cpp in Sources */, - E82E66EF18EA7954004DBA18 /* GLQuadRenderer.cpp in Sources */, - E82E66F018EA7954004DBA18 /* GLLensFilter.cpp in Sources */, - E82E66F118EA7954004DBA18 /* GLCameraBlurFilter.cpp in Sources */, - E82E66F218EA7954004DBA18 /* GLFogFilter.cpp in Sources */, - E8C7D7C222DB636000F78763 /* Client_Console.cpp in Sources */, - E82E66F318EA7954004DBA18 /* GLLensFlareFilter.cpp in Sources */, - E82E66F418EA7954004DBA18 /* GLFXAAFilter.cpp in Sources */, - E8CB47D61DE084AB00BF606A /* GLSettings.cpp in Sources */, - E82E66F518EA7954004DBA18 /* GLColorCorrectionFilter.cpp in Sources */, - E82E66F618EA7954004DBA18 /* GLDepthOfFieldFilter.cpp in Sources */, - E82E66F718EA7954004DBA18 /* GLLensDustFilter.cpp in Sources */, - E82E66F818EA7954004DBA18 /* GLImage.cpp in Sources */, - E82E66F918EA7954004DBA18 /* GLFlatMapRenderer.cpp in Sources */, - E82E66FA18EA7954004DBA18 /* IGLSpriteRenderer.cpp in Sources */, - E82E66FB18EA7954004DBA18 /* GLSpriteRenderer.cpp in Sources */, - E82E66FC18EA7954004DBA18 /* GLSoftSpriteRenderer.cpp in Sources */, - E82E66FD18EA7954004DBA18 /* GLImageRenderer.cpp in Sources */, - E82E66FE18EA7954004DBA18 /* GLImageManager.cpp in Sources */, - E82E66FF18EA7954004DBA18 /* GLModelManager.cpp in Sources */, - E82E670018EA7954004DBA18 /* GLModel.cpp in Sources */, - E82E670118EA7954004DBA18 /* GLVoxelModel.cpp in Sources */, - E82E670218EA7954004DBA18 /* GLMapRenderer.cpp in Sources */, - E82E670318EA7954004DBA18 /* GLMapChunk.cpp in Sources */, - E82E670418EA7954004DBA18 /* GLModelRenderer.cpp in Sources */, - E82E670518EA7954004DBA18 /* GLOptimizedVoxelModel.cpp in Sources */, - E82E670618EA7954004DBA18 /* GLWaterRenderer.cpp in Sources */, - E82E670718EA7954004DBA18 /* GLLongSpriteRenderer.cpp in Sources */, - E82E670818EA7954004DBA18 /* GLSoftLitSpriteRenderer.cpp in Sources */, - E82E670918EA7954004DBA18 /* GLShader.cpp in Sources */, - E8C7D7B122DA35F000F78763 /* ConsoleHelper.cpp in Sources */, - E82E670A18EA7954004DBA18 /* GLProgramUniform.cpp in Sources */, - E82E670B18EA7954004DBA18 /* GLProgramAttribute.cpp in Sources */, - E82E670C18EA7954004DBA18 /* GLProgram.cpp in Sources */, - E82E670D18EA7954004DBA18 /* GLMapShadowRenderer.cpp in Sources */, - E82E670E18EA7954004DBA18 /* GLShadowShader.cpp in Sources */, - E82E670F18EA7954004DBA18 /* GLDynamicLightShader.cpp in Sources */, - E82E671018EA7954004DBA18 /* IGLShadowMapRenderer.cpp in Sources */, - E82E671118EA7954004DBA18 /* GLShadowMapShader.cpp in Sources */, - E82E671218EA7954004DBA18 /* GLBasicShadowMapRenderer.cpp in Sources */, - E82E671318EA7954004DBA18 /* GLDynamicLight.cpp in Sources */, - E82E671418EA7954004DBA18 /* GLAmbientShadowRenderer.cpp in Sources */, - E82E671518EA7954004DBA18 /* GLRadiosityRenderer.cpp in Sources */, - E82E671618EA7954004DBA18 /* GLSparseShadowMapRenderer.cpp in Sources */, - E82E671718EA7954004DBA18 /* GLRenderer.cpp in Sources */, - E82E671818EA7954004DBA18 /* IGLDevice.cpp in Sources */, - E82E671918EA7954004DBA18 /* GLFramebufferManager.cpp in Sources */, - E82E671A18EA7954004DBA18 /* GLProgramManager.cpp in Sources */, - E82E671B18EA7954004DBA18 /* GLProfiler.cpp in Sources */, - E82E671C18EA7954004DBA18 /* Main.cpp in Sources */, - E82E671D18EA7954004DBA18 /* SDLGLDevice.cpp in Sources */, - E82E671E18EA7954004DBA18 /* SDLRunner.cpp in Sources */, - E82E672018EA7954004DBA18 /* MainScreen.cpp in Sources */, - E82E672118EA7954004DBA18 /* MainScreenHelper.cpp in Sources */, - E82E672218EA7954004DBA18 /* View.cpp in Sources */, - E88344101E03244F000C3E39 /* FontManager.cpp in Sources */, - E893A3631E3E3331000654A4 /* PackageUpdateManager.cpp in Sources */, - E82E672318EA7954004DBA18 /* Runner.cpp in Sources */, - E8C7D7BA22DB220300F78763 /* ConfigConsoleResponder.cpp in Sources */, - E82E672418EA7954004DBA18 /* StartupScreen.cpp in Sources */, - E82E66ED18EA7914004DBA18 /* StartupScreenHelper.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - E82E66E818EA78F5004DBA18 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Sources/Externals/lib", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = ""; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - HEADER_SEARCH_PATHS = ( - Sources/Externals/lib/SDL2.framework/Headers, - Sources/Externals/lib/SDL2_image.framework/Headers, - Sources/Externals/include, - Sources/ENet/include, - "$(SRCROOT)", - Sources, - Sources/json/include, - Sources/Externals/include/opus, - ); - INFOPLIST_FILE = "XSpades/XSpades-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Sources/Externals/lib", - ); - PRODUCT_BUNDLE_IDENTIFIER = "jp.yvt.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - E82E66E918EA78F5004DBA18 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; - ENABLE_NS_ASSERTIONS = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Sources/Externals/lib", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = ""; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - HEADER_SEARCH_PATHS = ( - Sources/Externals/lib/SDL2.framework/Headers, - Sources/Externals/lib/SDL2_image.framework/Headers, - Sources/Externals/include, - Sources/ENet/include, - "$(SRCROOT)", - Sources, - Sources/json/include, - Sources/Externals/include/opus, - ); - INFOPLIST_FILE = "XSpades/XSpades-Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Sources/Externals/lib", - ); - PRODUCT_BUNDLE_IDENTIFIER = "jp.yvt.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; - E8CF038C178ED9D2000683D4 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(NATIVE_ARCH_ACTUAL)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = NO; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - "HAS_SOCKLEN_T=1", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ""; - LIBRARY_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.12; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = ""; - }; - name = Debug; - }; - E8CF038D178ED9D2000683D4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(NATIVE_ARCH_ACTUAL)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = NO; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_SEARCH_PATHS = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_PREPROCESSOR_DEFINITIONS = ( - "NDEBUG=1", - "HAS_SOCKLEN_T=1", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ""; - LIBRARY_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.12; - SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = ""; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - E82E66E718EA78F5004DBA18 /* Build configuration list for PBXNativeTarget "OpenSpades" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E82E66E818EA78F5004DBA18 /* Debug */, - E82E66E918EA78F5004DBA18 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E8CF0380178ED9D2000683D4 /* Build configuration list for PBXProject "OpenSpades" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E8CF038C178ED9D2000683D4 /* Debug */, - E8CF038D178ED9D2000683D4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = E8CF037D178ED9D2000683D4 /* Project object */; -} diff --git a/OpenSpades.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/OpenSpades.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 0b41a0f3..00000000 --- a/OpenSpades.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/README.md b/README.md index d847024b..4a1e4532 100644 --- a/README.md +++ b/README.md @@ -85,41 +85,76 @@ GCC 4.9 / Clang 3.2 or later is recommended because OpenSpades relies on C++11 f * PowerShell 5.0 * Integrated with Windows 10. * Older versions are not tested, but might work - * *Visual Studio 2017* + * *Visual Studio 2017* or later * VS2015 is also supported, but VS2017 is more recommended * VS2013 is no longer supported, but might work 2. Grab the source code: * Stable version: https://github.com/yvt/openspades/releases * Latest development version (0.1.x): https://github.com/yvt/openspades/archive/master.zip -3. Extract or checkout the source +3. Checkout the source * All examples will assume `E:/Projects/openspades`, update paths in the examples to reflect yours -4. Get (pre-compiled) copies of glew, curl, sdl2 and zlib, and place them in `E:/Projects/openspades/Sources/Externals` - * See the file `E:/Projects/openspades/Sources/Externals/readme.txt` for details and links to pre-compiled sets of libraries for your version of Visual Studio + * Make sure to update all git submodules, e.g., by `git clone ... --recurse-submodules`). Note that the GitHub website's ZIP download currently does not support submodules. +4. Build libraries using vcpkg: + ```bat + cd E:/Projects/openspades + vcpkg/bootstrap-vcpkg.bat + vcpkg/vcpkg install @vcpkg_x86-windows.txt + ``` + 5. Run CMake: * Source: `E:/Projects/openspades` * Binaries: `E:/Projects/openspades/OpenSpades.msvc` * Generator: - * For VS2017: `Visual Studio 15 (2017)` (not Win64!) - * For VS2015: `Visual Studio 14 (2015)` (not Win64!) + * For VS2019: `Visual Studio 16 (2019)` + * For VS2017: `Visual Studio 15 (2017)` + * For VS2015: `Visual Studio 14 (2015)` + * Platform: `Win32` + * Toolchain file: `E:/Projects/openspades/vcpkg/scripts/buildsystems/vcpkg.cmake` + * Add a new string entry `VCPKG_TARGET_TRIPLET=x86-windows-static` 6. Open `E:/Projects/openspades/OpenSpades.msvc/OpenSpades.sln` in Visual Studio. 7. Build the solution. * The recommended build configuration is `MinSizeRel` or `Release` if you're not an developer * The default build output directory is `E:/projects/OpenSpades/OpenSpades.msvc/bin/BUILD_TYPE/` -8. Copy all `.dll` files from `Source/Externals/lib` to the build output directory. -9. To get audio working, download a [Windows release of OpenSpades](https://github.com/yvt/openspades/releases), extract it, and copy the following dlls to the build output directory: +8. To get audio working, download a [Windows release of OpenSpades](https://github.com/yvt/openspades/releases), extract it, and copy the following dlls to the build output directory: * For OpenAL audio: `openal32.dll` * For YSR audio: `YSRSpades.dll`, `libgcc_s_dw2-1.dll`, `libstdc++-6.dll`, `pthreadGC2.dll` -10. Download the [Non-free pak](https://github.com/yvt/openspades-paks/releases/download/r33/OpenSpadesDevPackage-r33.zip), extract it, and copy `Nonfree/pak000-Nonfree.pak` to the `Resources` folder inside your build output directory, which is probably `E:/Projects/openspades/openspades.msvc/bin/BUILD_TYPE/Resources`. You can also copy the paks contained in `Official Mods/` folder of OpenSpades 0.0.12b to add more fonts and improve localization support of your build. -11. Copy `Resources/PackageInfo.json` to the `Resources` folder inside your build output directory. +9. Download the [Non-free pak](https://github.com/yvt/openspades-paks/releases/download/r33/OpenSpadesDevPackage-r33.zip), extract it, and copy `Nonfree/pak000-Nonfree.pak` to the `Resources` folder inside your build output directory, which is probably `E:/Projects/openspades/openspades.msvc/bin/BUILD_TYPE/Resources`. You can also copy the paks contained in `Official Mods/` folder of OpenSpades 0.0.12b to add more fonts and improve localization support of your build. -### On macOS (with Xcode) -1. Get the latest version of Xcode and OpenSpades source. -2. Get (pre-compiled) copies of libraries, and place them in `Sources/Externals` - * See the file `Sources/Externals/readme.txt` for details -4. Download [macOS release of OpenSpades](https://github.com/yvt/openspades/releases), show the package contents, and copy `libysrspades.dylib` to `Sources/Externals/lib`. -5. Download and extract the [Non-free pak](https://github.com/yvt/openspades-paks/releases/download/r33/OpenSpadesDevPackage-r33.zip). After that, copy `Nonfree/pak000-Nonfree.pak` and `font-unifont.pak` to `Resources/`. -6. Open `OpenSpades.xcodeproj` and build. +### On macOS (with Ninja) +1. Get the latest version of Xcode and the OpenSpades source code. Install the following prerequisites: + - Xcode's command-line tools. Install them by `xcode-select --install` and `sudo xcodebuild -license`. + - CMake. + - Install `pkg-config` by one of the following methods: + - Homebrew: `brew install pkg-config` + - Nix: add `$(nix-build '' -A pkg-config-unwrapped --no-out-link)/bin` to `PATH`. +2. `vcpkg/bootstrap-vcpkg.sh` +3. `vcpkg/vcpkg install @vcpkg_x86_64-darwin.txt` +4. Create directory `openspades.mk` in the cloned/downloaded openspades repo and compile: + + ```bash + mkdir openspades.mk + cd openspades.mk + cmake -G Ninja .. -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_OSX_ARCHITECTURES=x86_64 -D CMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake -D VCPKG_TARGET_TRIPLET=x64-osx + ninja + ``` + +5. Launch: + + ```bash + open bin/OpenSpades.app + ``` + + (Universal builds aren't supported yet.) + +### Network usage during building + +OpenSpades' build process automatically downloads prebuilt game assets and libraries as needed. Specifically: + +- `pak000-Nonfree.pak` and `font-uniform.pak` from . Can be disabled by passing `-D OPENSPADES_NONFREE_RESOURCES=NO` to CMake. +- The prebuilt binaries of YSRSpades (audio engine) from . Can be disabled by passing `-D OPENSPADES_YSR=NO` to CMake. + +In addition, vcpkg (sort of package manager only used for Windows and macOS builds) [collects and sends telemetry data to Microsoft](https://vcpkg.readthedocs.io/en/latest/about/privacy/). You can opt out of this behavior by passing `-disableMetrics` option when running `vcpkg/bootstrap-vcpkg.sh` command. ## Troubleshooting For troubleshooting and common problems see [TROUBLESHOOTING](TROUBLESHOOTING.md). diff --git a/Resources/CMakeLists.txt b/Resources/CMakeLists.txt index b24e7384..adf307f3 100644 --- a/Resources/CMakeLists.txt +++ b/Resources/CMakeLists.txt @@ -1,57 +1,117 @@ +set(COMPILED_PAK_FILES + ${CMAKE_CURRENT_BINARY_DIR}/pak002-Base.pak + ${CMAKE_CURRENT_BINARY_DIR}/pak005-Models.pak + ${CMAKE_CURRENT_BINARY_DIR}/pak010-BaseSkin.pak + ${CMAKE_CURRENT_BINARY_DIR}/pak050-Locales.pak + ${CMAKE_CURRENT_BINARY_DIR}/pak999-References.pak) + +if(OPENSPADES_RESOURCES AND OPENSPADES_NONFREE_RESOURCES) + set(NONFREE_PAK_FILES + ${CMAKE_CURRENT_BINARY_DIR}/pak000-Nonfree.pak + ${CMAKE_CURRENT_BINARY_DIR}/font-unifont.pak) +endif(OPENSPADES_NONFREE_RESOURCES) + +set(PAK_FILES + ${COMPILED_PAK_FILES} + ${NONFREE_PAK_FILES} + PARENT_SCOPE) if(OPENSPADES_RESOURCES) + if(OPENSPADES_NONFREE_RESOURCES) + if (WIN32) + # No automatic downloading for Windows (for now) + elseif (UNIX) + add_custom_target(OpenSpades_Resources_DevPaks ALL COMMENT "Downloading non-GPL assets" + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/pak000-Nonfree.pak + ${CMAKE_CURRENT_BINARY_DIR}/font-unifont.pak) + add_custom_command( + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/downloadpak.sh + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/pak000-Nonfree.pak + ${CMAKE_CURRENT_BINARY_DIR}/font-unifont.pak + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() + endif(OPENSPADES_NONFREE_RESOURCES) - if (WIN32) - # No automatic downloading for Windows (for now) - elseif (UNIX) - add_custom_target(OpenSpades_Resources_DevPaks ALL COMMENT "Downloading non-GPL assets") - add_custom_command( - TARGET OpenSpades_Resources_DevPaks - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/downloadpak.sh - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - endif() - - # TODO: subgroups for script files + file(GLOB_RECURSE GFX_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Gfx/*) + file(GLOB_RECURSE LICENSE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/License/*) + file(GLOB_RECURSE LOCALE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Locales/*) + file(GLOB_RECURSE MAP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Maps/*.vxl) + file(GLOB_RECURSE MODEL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Models/*) file(GLOB_RECURSE SCRIPT_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Scripts/*.as) file(GLOB_RECURSE SHADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/*.fs ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/*.program ${CMAKE_CURRENT_SOURCE_DIR}/Shaders/*.vs) + file(GLOB_RECURSE SOUND_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Sounds/*) + file(GLOB_RECURSE TEXTURE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Textures/*) + set(PAK_IN_FILES + ${GFX_FILES} ${LICENSE_FILES} ${LOCALE_FILES} ${MAP_FILES} + ${MODEL_FILES} ${SCRIPT_FILES} ${SHADER_FILES} ${SOUND_FILES} + ${TEXTURE_FILES}) + set(PACKAGE_INFO_IN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/PackageInfo.json) + set(PACKAGE_INFO_OUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/PackageInfo.json) + source_group("Gfx" FILES ${GFX_FILES}) + source_group("License Texts" FILES ${LICENSE_FILES}) + source_group("Translations" FILES ${LOCALE_FILES}) + source_group("Maps" FILES ${MAP_FILES}) + source_group("Models" FILES ${MODEL_FILES}) source_group("Scripts" FILES ${SCRIPT_FILES}) source_group("Shaders" FILES ${SHADER_FILES}) + source_group("Sounds" FILES ${SOUND_FILES}) + source_group("Textures" FILES ${TEXTURE_FILES}) add_custom_target(OpenSpades_Resources ALL - COMMENT "Packing assets" - SOURCES ${SCRIPT_FILES} ${SHADER_FILES} - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}) + COMMENT "Building assets" + SOURCES ${PAK_IN_FILES} ${PACKAGE_INFO_IN_FILE} + DEPENDS + ${PACKAGE_INFO_OUT_FILE} + ${COMPILED_PAK_FILES}) if(WIN32) - if(MSVC) - # multi-config - add_custom_command( - TARGET OpenSpades_Resources - COMMAND powershell -ExecutionPolicy Bypass ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.ps1 - ${CMAKE_BINARY_DIR}/bin/$/Resources - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - else() - add_custom_command( - TARGET OpenSpades_Resources - COMMAND powershell -ExecutionPolicy Bypass ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.ps1 - ${CMAKE_BINARY_DIR}/bin/Resources - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - endif() + add_custom_command( + OUTPUT ${COMPILED_PAK_FILES} + COMMAND powershell -ExecutionPolicy Bypass + ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.ps1 + ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Building paks" + DEPENDS ${PAK_IN_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.ps1 + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) elseif (UNIX) add_custom_command( - TARGET OpenSpades_Resources + OUTPUT ${COMPILED_PAK_FILES} COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.sh + COMMENT "Building paks" + DEPENDS ${PAK_IN_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.sh WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) endif() - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/PackageInfo.json - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + add_custom_command( + OUTPUT ${PACKAGE_INFO_OUT_FILE} + DEPENDS ${PACKAGE_INFO_IN_FILE} + COMMENT "Copying PackageInfo.json" + COMMAND ${CMAKE_COMMAND} -E copy + ${PACKAGE_INFO_IN_FILE} ${PACKAGE_INFO_OUT_FILE}) + + if (WIN32 AND MSVC) + # copy the output files to the multi-config binary directory + # (you can't use generator expressions (`$<...>`) in `add_custom_command`'s + # `OUTPUT` parameter; it's not supported by CMake.) + add_custom_command( + TARGET OpenSpades_Resources POST_BUILD + COMMENT "Copying assets to the currently-selected configuration's build directory" + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${CMAKE_BINARY_DIR}/bin/$/Resources + COMMAND + ${CMAKE_COMMAND} -E copy_if_different + ${COMPILED_PAK_FILES} ${PACKAGE_INFO_OUT_FILE} + ${CMAKE_BINARY_DIR}/bin/$/Resources) + endif (WIN32 AND MSVC) endif() -if(UNIX) +if(UNIX AND NOT APPLE) add_custom_target(OpenSpades_Unix ALL COMMENT "Process unix stuff") file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Icons) @@ -77,4 +137,4 @@ if(UNIX) COMMAND sh -c \"gzip -9 -c ${CMAKE_CURRENT_BINARY_DIR}/Unix/Man/openspades.6 > openspades.6.gz\" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Unix/Man ) -endif(UNIX) +endif(UNIX AND NOT APPLE) diff --git a/Resources/Locales/de/openspades.po b/Resources/Locales/de/openspades.po index 4da24393..89d34960 100644 --- a/Resources/Locales/de/openspades.po +++ b/Resources/Locales/de/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2017-12-31 04:46-0500\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: openspades\n" @@ -1761,35 +1761,35 @@ msgstr "Automatische Suche nach Aktualisierung ist nicht verfügbar." #: Sources/Client/Client_NetHandler.cpp:271 msgctxt "Client" msgid "Spectator" -msgstr "" +msgstr "Zuschauer" #: Sources/Client/Client_Draw.cpp:99 msgctxt "Client" msgid "Unbound" -msgstr "" +msgstr "Unbelegt" #: Sources/Client/Client_Draw.cpp:655 msgctxt "Client" msgid "[{0}] Cycle camera mode" -msgstr "" +msgstr "[{0}] Kameramodus wechseln" #: Sources/Client/Client_Draw.cpp:657 msgctxt "Client" msgid "[{0}/{1}] Next/previous player" -msgstr "" +msgstr "[{0}/{1}] Nächster/Vorheriger Spieler" #: Sources/Client/Client_Draw.cpp:661 msgctxt "Client" msgid "[{0}] Unfollow" -msgstr "" +msgstr "[{0}] Nicht mehr folgen" #: Sources/Client/Client_Draw.cpp:664 msgctxt "Client" msgid "[{0}/{1}] Follow a player" -msgstr "" +msgstr "[{0}/{1}] Einem Spieler folgen" #: Sources/Client/Client_Draw.cpp:669 msgctxt "Client" msgid "[{0}/{1}] Go up/down" -msgstr "" +msgstr "[{0}/{1}] Gehe hoch/runter" diff --git a/Resources/Locales/el/openspades.po b/Resources/Locales/el/openspades.po index 7418f11f..81131127 100644 --- a/Resources/Locales/el/openspades.po +++ b/Resources/Locales/el/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2019-01-01 05:55\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Greek\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/es/openspades.po b/Resources/Locales/es/openspades.po index 284e5361..8db78876 100644 --- a/Resources/Locales/es/openspades.po +++ b/Resources/Locales/es/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2019-01-01 05:55\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: openspades\n" @@ -256,7 +256,7 @@ msgstr "Granada" #: Sources/Client/Client_Update.cpp:860 Sources/Client/Client_Update.cpp:886 msgctxt "Client" msgid "Headshot" -msgstr "Disparos en la Cabeza" +msgstr "Disparo en la Cabeza" #. ! A cause of death shown in the kill feed. #: Sources/Client/Client_Update.cpp:864 Sources/Client/Client_Update.cpp:890 @@ -268,7 +268,7 @@ msgstr "Cambio de equipo" #: Sources/Client/Client_Update.cpp:868 Sources/Client/Client_Update.cpp:894 msgctxt "Client" msgid "Weapon Change" -msgstr "Cambiar arma" +msgstr "Cambio de arma" #: Sources/Client/Client_Update.cpp:907 Sources/Client/Client_Update.cpp:933 msgctxt "Client" @@ -810,7 +810,7 @@ msgstr "Sangre" #: Resources/Scripts/Gui/Preferences.as:644 msgctxt "Preferences" msgid "Ejecting Brass" -msgstr "" +msgstr "Eyectar cartuchos de bala" #: Resources/Scripts/Gui/Preferences.as:645 #: Resources/Scripts/Gui/Preferences.as:645 @@ -1186,7 +1186,7 @@ msgstr "Avanzado" #: Resources/Scripts/Gui/StartupScreen.as:288 msgctxt "StartupScreen" msgid "An unknown error has occurred while opening the update info website." -msgstr "Un error desconocido ha ocurrido mientras se abria el directorio de configuraciones." +msgstr "Un error desconocido ha ocurrido mientras se abría el sitio web de información de actualización." #: Resources/Scripts/Gui/StartupScreen.as:853 #: Resources/Scripts/Gui/StartupScreen.as:853 @@ -1689,7 +1689,7 @@ msgstr "Desconocido ({0})" #: Resources/Scripts/Gui/StartupScreen.as:1764 msgctxt "StartupScreen" msgid "System default" -msgstr "Predeterminado" +msgstr "Predeterminado por el sistema" #: Resources/Scripts/Gui/StartupScreen.as:1813 #: Resources/Scripts/Gui/StartupScreen.as:1813 @@ -1725,7 +1725,7 @@ msgstr "Mostrar detalles..." #: Resources/Scripts/Gui/UpdateCheckView.as:102 msgctxt "UpdateCheck" msgid "Version {0} is available! (You currently have {1})" -msgstr "¡Una nueva versión {0} está disponible! (Actualmente tienes la {1})" +msgstr "¡La nueva versión {0} está disponible! (Actualmente tienes la {1})" #: Resources/Scripts/Gui/UpdateCheckView.as:105 #: Resources/Scripts/Gui/UpdateCheckView.as:105 @@ -1743,19 +1743,19 @@ msgstr "Buscando actualizaciones..." #: Resources/Scripts/Gui/UpdateCheckView.as:113 msgctxt "UpdateCheck" msgid "Failed to check for updates." -msgstr "No se ha podido buscar actualizaciones." +msgstr "Búsqueda de actualizaciones fallida." #: Resources/Scripts/Gui/UpdateCheckView.as:116 #: Resources/Scripts/Gui/UpdateCheckView.as:116 msgctxt "UpdateCheck" msgid "Automatic update check is not enabled." -msgstr "Las actualizaciones automáticas no están habilitada." +msgstr "La comprobación automática de nuevas actualizaciones no está habilitada." #: Resources/Scripts/Gui/UpdateCheckView.as:119 #: Resources/Scripts/Gui/UpdateCheckView.as:119 msgctxt "UpdateCheck" msgid "Automatic update check is not available." -msgstr "Las actualizaciones automáticas no están disponibles." +msgstr "La comprobación automática de nuevas actualizaciones no está disponible." #: Sources/Client/Client_NetHandler.cpp:258 #: Sources/Client/Client_NetHandler.cpp:271 @@ -1771,12 +1771,12 @@ msgstr "Sin Asignar" #: Sources/Client/Client_Draw.cpp:655 msgctxt "Client" msgid "[{0}] Cycle camera mode" -msgstr "[{0}] Cambiar punto de vista" +msgstr "[{0}] Vista en 3ra persona" #: Sources/Client/Client_Draw.cpp:657 msgctxt "Client" msgid "[{0}/{1}] Next/previous player" -msgstr "[{0}/{1}] Próximo jugador/anterior" +msgstr "[{0}/{1}] Siguiente/anterior jugador" #: Sources/Client/Client_Draw.cpp:661 msgctxt "Client" diff --git a/Resources/Locales/fr/openspades.po b/Resources/Locales/fr/openspades.po index f1519005..41c96322 100644 --- a/Resources/Locales/fr/openspades.po +++ b/Resources/Locales/fr/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2017-12-31 04:46-0500\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: French\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/hu/openspades.po b/Resources/Locales/hu/openspades.po index e035bffc..7dc9c97e 100644 --- a/Resources/Locales/hu/openspades.po +++ b/Resources/Locales/hu/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2019-01-01 05:55\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Hungarian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: openspades\n" @@ -95,7 +95,7 @@ msgstr "Nyomj [{0}]-t az újratöltéshez" #: Sources/Client/Client_Draw.cpp:584 Sources/Client/Client_Draw.cpp:608 msgctxt "Client" msgid "You will respawn in: {0}" -msgstr "{0} mp. múlva újra fogsz éledni" +msgstr "{0} másodperc múlva újra fogsz éledni" #: Sources/Client/Client_Draw.cpp:586 Sources/Client/Client_Draw.cpp:610 msgctxt "Client" @@ -245,7 +245,7 @@ msgstr "Esés" #: Sources/Client/Client_Update.cpp:853 Sources/Client/Client_Update.cpp:879 msgctxt "Client" msgid "Melee" -msgstr "" +msgstr "Közelharc" #: Sources/Client/Client_Update.cpp:856 Sources/Client/Client_Update.cpp:882 msgctxt "Client" @@ -293,7 +293,7 @@ msgstr "Nem tehetsz oda blokkot." #: Sources/Client/LimboView.cpp:79 Sources/Client/LimboView.cpp:79 msgctxt "Client" msgid "Spawn" -msgstr "" +msgstr "Játékba lépés" #: Sources/Client/LimboView.cpp:183 Sources/Client/LimboView.cpp:183 msgctxt "Client" @@ -1264,7 +1264,7 @@ msgid "Antialias:Enables a technique to improve the appearance of high-contrast "FXAA: Performs antialiasing by smoothing artifacts out as a post-process.|Off|MSAA 2x|4x|FXAA" msgstr "Antialias: Javítja a magas kontrasztú élek megjelenítését.\n\n" "MSAA: Antialiasingot végez egy köztes magas felbontású kép generálásával. Ez néz ki a legjobban, de bizonyos beállításokkal nem működik megfelelően.\n\n" -"FXAA: Antialiasingot végez utómunkálatként a kép elsimításával.|Off|MSAA 2x|4x|FXAA" +"FXAA: Antialiasingot végez utómunkálatként a kép elsimításával.|Nincs|MSAA 2x|4x|FXAA" #: Resources/Scripts/Gui/StartupScreen.as:1150 #: Resources/Scripts/Gui/StartupScreen.as:1150 @@ -1288,7 +1288,7 @@ msgstr "Lineáris HDR renderelés" #: Resources/Scripts/Gui/StartupScreen.as:1157 msgctxt "StartupScreen" msgid "Uses a number representation which allows wider dynamic range during rendering process. Additionally, this allows color calculation whose value is in linear correspondence with actual energy, that is, physically accurate blending can be achieved." -msgstr "Számábrázolás segítségével nagyobb dinamikus tartományt tud elérni a renderelés alatt. Továbbá, ez lehetővé teszi az energiájuktól lineárisan függő színek kiszámítását, ezzel fizikailag pontos keverést elérve." +msgstr "Nagyobb dinamikus tartomány elérését lehetővé tévő számábrázolást használ a renderelés közben. Továbbá, ez lehetővé teszi az energiájuktól lineárisan függő színek kiszámítását, ezzel fizikailag pontos színkeverést elérve." #: Resources/Scripts/Gui/StartupScreen.as:1164 #: Resources/Scripts/Gui/StartupScreen.as:1164 @@ -1438,7 +1438,7 @@ msgstr "Az utófeldolgozásnak köszönhetően a kép jobban és élethűbben n #: Resources/Scripts/Gui/StartupScreen.as:1203 msgctxt "StartupScreen" msgid "Particles|Low:Artifact occurs when a particle intersects other objects.|Medium:Particle intersects objects smoothly.|High:Particle intersects objects smoothly, and some objects casts their shadow to particles." -msgstr "" +msgstr "Részecskék|Alacsony:Maradványok láthatók, amikor egy részecske ütközik objektumokkal.|Közepes:A részecskék és objektumok ütközése egyenletes.|Magas:A részecskék és objektumok ütközése egyenletes, és bizonyos objektumok árnyékot vetnek a részecskékre." #: Resources/Scripts/Gui/StartupScreen.as:1213 #: Resources/Scripts/Gui/StartupScreen.as:1213 @@ -1450,7 +1450,7 @@ msgstr "Dinamikus fények" #: Resources/Scripts/Gui/StartupScreen.as:1215 msgctxt "StartupScreen" msgid "Gives some objects an ability to emit light to give them an energy-emitting impression." -msgstr "" +msgstr "Lehetővé teszi, hogy bizonyos tárgyak fényt bocsássanak ki, hogy energiakibocsátás benyomását keltsék." #: Resources/Scripts/Gui/StartupScreen.as:1218 #: Resources/Scripts/Gui/StartupScreen.as:1218 @@ -1510,7 +1510,7 @@ msgstr "Víz shader | Nincs: A víz a többi blokkhoz hasonlóan kerül megrajzo #: Resources/Scripts/Gui/StartupScreen.as:1251 msgctxt "StartupScreen" msgid "Med" -msgstr "" +msgstr "Közepes" #: Resources/Scripts/Gui/StartupScreen.as:1256 #: Resources/Scripts/Gui/StartupScreen.as:1256 @@ -1558,7 +1558,7 @@ msgstr "YSR" #: Resources/Scripts/Gui/StartupScreen.as:1512 msgctxt "StartupScreen" msgid "YSR is an experimental 3D HDR sound engine optimized for OpenSpades. It features several enhanced features including automatic load control, dynamics compressor, HRTF-based 3D audio, and high quality reverb." -msgstr "A YSR egy kísérleti 3D HDR hangot előállító, OpenSpades-re optimalizált szoftver. Több javított funkciót is tartalmaz, mint automatikus terheléselosztó, dinamikus kompresszor, HRTF alapú 3D hang, és magas minőségű visszhang." +msgstr "A YSR egy kísérleti 3D HDR hangot előállító, OpenSpades-re optimalizált szoftver. Több javított funkciót is tartalmaz, mint automatikus terheléselosztás, dinamikai kopresszor, HRTF alapú 3D hang, és magas minőségű visszhang." #. ! The name of audio driver that outputs no audio. #: Resources/Scripts/Gui/StartupScreen.as:1523 @@ -1597,7 +1597,7 @@ msgstr "EAX" #: Resources/Scripts/Gui/StartupScreen.as:1547 msgctxt "StartupScreen" msgid "Enables extended features provided by the OpenAL driver to create more ambience." -msgstr "" +msgstr "Engedélyezi az OpenAL driver által nyújtott extra funkciókat a jobb hangzás érdekében." #: Resources/Scripts/Gui/StartupScreen.as:1563 #: Resources/Scripts/Gui/StartupScreen.as:1563 @@ -1633,7 +1633,7 @@ msgstr "Konfigurációs mappa megnyitása" #: Resources/Scripts/Gui/StartupScreen.as:1649 msgctxt "StartupScreen" msgid "Reveal Config Folder in Finder" -msgstr "" +msgstr "Konfigurációs mappa megnyitása a fájlkezelőben" #: Resources/Scripts/Gui/StartupScreen.as:1651 #: Resources/Scripts/Gui/StartupScreen.as:1651 @@ -1725,7 +1725,7 @@ msgstr "Részletek mutatása..." #: Resources/Scripts/Gui/UpdateCheckView.as:102 msgctxt "UpdateCheck" msgid "Version {0} is available! (You currently have {1})" -msgstr "A verzió {0} elérhető! (Jelenlegi verzió: {1})" +msgstr "A {0} verzió elérhető! (Jelenlegi verzió: {1})" #: Resources/Scripts/Gui/UpdateCheckView.as:105 #: Resources/Scripts/Gui/UpdateCheckView.as:105 diff --git a/Resources/Locales/id/openspades.po b/Resources/Locales/id/openspades.po index ba5e6533..bb0d921e 100644 --- a/Resources/Locales/id/openspades.po +++ b/Resources/Locales/id/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2019-01-01 06:00\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Indonesian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/it.json b/Resources/Locales/it.json new file mode 100644 index 00000000..98f1a275 --- /dev/null +++ b/Resources/Locales/it.json @@ -0,0 +1,4 @@ +{ + "descriptionEnglish": "Italian", + "description": "Italiano" +} diff --git a/Resources/Locales/it/openspades.po b/Resources/Locales/it/openspades.po new file mode 100644 index 00000000..42f46914 --- /dev/null +++ b/Resources/Locales/it/openspades.po @@ -0,0 +1,1795 @@ +msgid "" +msgstr "" +"Project-Id-Version: openspades\n" +"Report-Msgid-Bugs-To: i at yvt.jp\n" +"POT-Creation-Date: 2016-12-25 23:47-0200\n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.7.1\n" +"X-Poedit-SourceCharset: UTF-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: openspades\n" +"X-Crowdin-Language: it\n" +"X-Crowdin-File: openspades.pot\n" +"Language: it_IT\n" + +#: Sources/Client/Client.cpp:585 Sources/Client/Client.cpp:586 +msgctxt "Client" +msgid "Map saved: {0}" +msgstr "Mappa Salvata: {0}" + +#: Sources/Client/Client.cpp:589 Sources/Client/Client.cpp:595 +#: Sources/Client/Client.cpp:590 Sources/Client/Client.cpp:596 +msgctxt "Client" +msgid "Saving map failed: " +msgstr "Salvataggio mappa fallito: " + +#. ! Prefix added to global chat messages. +#. ! +#. ! Example: [Global] playername (Red) blah blah +#. ! +#. ! Crowdin warns that this string shouldn't be translated, +#. ! but it actually can be. +#. ! The extra whitespace is not a typo. +#: Sources/Client/Client.cpp:633 Sources/Client/Client.cpp:634 +msgctxt "Client" +msgid "[Global] " +msgstr "[Global] " + +#: Sources/Client/Client_Draw.cpp:119 Sources/Client/Client_Draw.cpp:135 +msgctxt "Client" +msgid "Sceneshot saved: {0}" +msgstr "Sceneshot salvato: {0}" + +#: Sources/Client/Client_Draw.cpp:121 Sources/Client/Client_Draw.cpp:137 +msgctxt "Client" +msgid "Screenshot saved: {0}" +msgstr "Screenshot salvato: {0}" + +#: Sources/Client/Client_Draw.cpp:125 Sources/Client/Client_Draw.cpp:131 +#: Sources/Client/Client_Draw.cpp:141 Sources/Client/Client_Draw.cpp:147 +msgctxt "Client" +msgid "Screenshot failed: " +msgstr "Screenshot non riuscito: " + +#: Sources/Client/Client_Draw.cpp:198 Sources/Client/Client_Draw.cpp:214 +msgctxt "Client" +msgid "NOW LOADING" +msgstr "Caricamento" + +#: Sources/Client/Client_Draw.cpp:220 Sources/Client/Client_Draw.cpp:236 +msgctxt "Client" +msgid "Disconnecting..." +msgstr "Disconnessione in corso..." + +#: Sources/Client/Client_Draw.cpp:523 Sources/Client/Client_Draw.cpp:548 +msgctxt "Client" +msgid "Out of Block" +msgstr "Blocco mancante" + +#: Sources/Client/Client_Draw.cpp:528 Sources/Client/Client_Draw.cpp:553 +msgctxt "Client" +msgid "Out of Grenade" +msgstr "Granata mancante" + +#: Sources/Client/Client_Draw.cpp:534 Sources/Client/Client_Draw.cpp:559 +msgctxt "Client" +msgid "Reloading" +msgstr "Ricarimento" + +#: Sources/Client/Client_Draw.cpp:536 Sources/Client/Client_Input.cpp:439 +#: Sources/Client/Client_Draw.cpp:561 Sources/Client/Client_Input.cpp:494 +msgctxt "Client" +msgid "Out of Ammo" +msgstr "Munizioni mancanti" + +#: Sources/Client/Client_Draw.cpp:539 Sources/Client/Client_Draw.cpp:564 +msgctxt "Client" +msgid "Press [{0}] to Reload" +msgstr "Premi [{0}] per Ricaricare" + +#: Sources/Client/Client_Draw.cpp:584 Sources/Client/Client_Draw.cpp:608 +msgctxt "Client" +msgid "You will respawn in: {0}" +msgstr "Respawn tra: {0}" + +#: Sources/Client/Client_Draw.cpp:586 Sources/Client/Client_Draw.cpp:610 +msgctxt "Client" +msgid "Waiting for respawn" +msgstr "Aspettando il Respawn" + +#: Sources/Client/Client_Draw.cpp:764 Sources/Client/Client_Draw.cpp:646 +msgctxt "Client" +msgid "Following {0}" +msgstr "Seguendo: {0}" + +#: Sources/Client/Client_Input.cpp:427 Sources/Client/Client_Input.cpp:482 +msgctxt "Client" +msgid "Out of Blocks" +msgstr "Blocchi Mancanti" + +#: Sources/Client/Client_Input.cpp:451 Sources/Client/Client_Input.cpp:506 +msgctxt "Client" +msgid "Out of Grenades" +msgstr "Granate mancanti" + +#: Sources/Client/Client_NetHandler.cpp:89 +#: Sources/Client/Client_NetHandler.cpp:90 +msgctxt "Client" +msgid "{0} captured {1}'s territory" +msgstr "{0} ha catturato il territorio {1}" + +#: Sources/Client/Client_NetHandler.cpp:91 +#: Sources/Client/Client_NetHandler.cpp:92 +msgctxt "Client" +msgid "{0} captured an neutral territory" +msgstr "{0} ha catturato un territorio neutrale" + +#: Sources/Client/Client_NetHandler.cpp:99 +#: Sources/Client/Client_NetHandler.cpp:100 +msgctxt "Client" +msgid "{0} captured {1}'s Territory" +msgstr "{0} ha catturato il territorio {1}" + +#: Sources/Client/Client_NetHandler.cpp:101 +#: Sources/Client/Client_NetHandler.cpp:102 +msgctxt "Client" +msgid "{0} captured an Neutral Territory" +msgstr "{0} ha catturato un territorio neutrale" + +#: Sources/Client/Client_NetHandler.cpp:127 +#: Sources/Client/Client_NetHandler.cpp:128 +msgctxt "Client" +msgid "{0} captured {1}'s intel" +msgstr "{0} ha catturato l'intel {1}" + +#: Sources/Client/Client_NetHandler.cpp:134 +#: Sources/Client/Client_NetHandler.cpp:135 +msgctxt "Client" +msgid "{0} captured {1}'s Intel." +msgstr "{0} ha catturato l'Intel {1}." + +#: Sources/Client/Client_NetHandler.cpp:158 +#: Sources/Client/Client_NetHandler.cpp:159 +msgctxt "Client" +msgid "{0} picked up {1}'s intel" +msgstr "{0} ha preso l'intel {1}" + +#: Sources/Client/Client_NetHandler.cpp:165 +#: Sources/Client/Client_NetHandler.cpp:166 +msgctxt "Client" +msgid "{0} picked up {1}'s Intel." +msgstr "{0} ha preso l'intel {1}." + +#: Sources/Client/Client_NetHandler.cpp:183 +#: Sources/Client/Client_NetHandler.cpp:184 +msgctxt "Client" +msgid "{0} dropped {1}'s intel" +msgstr "Al {0} è caduto l'intel {1}" + +#: Sources/Client/Client_NetHandler.cpp:190 +#: Sources/Client/Client_NetHandler.cpp:191 +msgctxt "Client" +msgid "{0} dropped {1}'s Intel" +msgstr "{0} ha catturato l'intel {1}" + +#: Sources/Client/Client_NetHandler.cpp:237 +#: Sources/Client/Client_NetHandler.cpp:243 +#: Sources/Client/Client_NetHandler.cpp:249 +#: Sources/Client/Client_NetHandler.cpp:255 +msgctxt "Client" +msgid "Player {0} has left" +msgstr "Il Giocatore {0} è uscito" + +#: Sources/Client/Client_NetHandler.cpp:257 +#: Sources/Client/Client_NetHandler.cpp:264 +#: Sources/Client/Client_NetHandler.cpp:276 +#: Sources/Client/Client_NetHandler.cpp:282 +msgctxt "Client" +msgid "{0} joined {1} team" +msgstr "{0} è entrato nel team {1}" + +#: Sources/Client/Client_NetHandler.cpp:294 +#: Sources/Client/Client_NetHandler.cpp:317 +msgctxt "Client" +msgid "{0} wins!" +msgstr "{0} ha Vinto!" + +#: Sources/Client/Client_NetHandler.cpp:298 +#: Sources/Client/Client_NetHandler.cpp:321 +msgctxt "Client" +msgid "{0} Wins!" +msgstr "{0} ha Vinto!" + +#: Sources/Client/Client_Update.cpp:479 Sources/Client/Client_Update.cpp:505 +msgctxt "Client" +msgid "{0} block" +msgid_plural "{0} blocks" +msgstr[0] "{0} blocco" +msgstr[1] "{0} Blocchi" + +#: Sources/Client/Client_Update.cpp:486 Sources/Client/Client_Update.cpp:512 +msgctxt "Client" +msgid "-- blocks" +msgstr "-- blocchi" + +#: Sources/Client/Client_Update.cpp:842 Sources/Client/LimboView.cpp:68 +#: Sources/Client/Client_Update.cpp:868 Sources/Client/LimboView.cpp:68 +msgctxt "Client" +msgid "Rifle" +msgstr "Fucile" + +#: Sources/Client/Client_Update.cpp:843 Sources/Client/LimboView.cpp:71 +#: Sources/Client/Client_Update.cpp:869 Sources/Client/LimboView.cpp:71 +msgctxt "Client" +msgid "SMG" +msgstr "SMG" + +#: Sources/Client/Client_Update.cpp:844 Sources/Client/LimboView.cpp:74 +#: Sources/Client/Client_Update.cpp:870 Sources/Client/LimboView.cpp:74 +msgctxt "Client" +msgid "Shotgun" +msgstr "Shotgun" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:849 Sources/Client/Client_Update.cpp:875 +msgctxt "Client" +msgid "Fall" +msgstr "Caduta" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:853 Sources/Client/Client_Update.cpp:879 +msgctxt "Client" +msgid "Melee" +msgstr "Corpo a Corpo" + +#: Sources/Client/Client_Update.cpp:856 Sources/Client/Client_Update.cpp:882 +msgctxt "Client" +msgid "Grenade" +msgstr "Granata" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:860 Sources/Client/Client_Update.cpp:886 +msgctxt "Client" +msgid "Headshot" +msgstr "Colpo in Testa" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:864 Sources/Client/Client_Update.cpp:890 +msgctxt "Client" +msgid "Team Change" +msgstr "Cambio Team" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:868 Sources/Client/Client_Update.cpp:894 +msgctxt "Client" +msgid "Weapon Change" +msgstr "Cambio Arma" + +#: Sources/Client/Client_Update.cpp:907 Sources/Client/Client_Update.cpp:933 +msgctxt "Client" +msgid "You have killed {0}" +msgstr "Hai ucciso {0}" + +#: Sources/Client/Client_Update.cpp:909 Sources/Client/Client_Update.cpp:935 +msgctxt "Client" +msgid "You were killed by {0}" +msgstr "Sei stato ucciso da {0}" + +#: Sources/Client/Client_Update.cpp:1225 Sources/Client/Client_Update.cpp:1260 +msgctxt "Client" +msgid "Insufficient blocks." +msgstr "Blocchi insufficienti." + +#: Sources/Client/Client_Update.cpp:1228 Sources/Client/Client_Update.cpp:1263 +msgctxt "Client" +msgid "You cannot place a block there." +msgstr "Non puoi piazzare un blocco qui." + +#: Sources/Client/LimboView.cpp:79 Sources/Client/LimboView.cpp:79 +msgctxt "Client" +msgid "Spawn" +msgstr "Spawn" + +#: Sources/Client/LimboView.cpp:183 Sources/Client/LimboView.cpp:183 +msgctxt "Client" +msgid "Select Team:" +msgstr "Seleziona Squadra:" + +#: Sources/Client/LimboView.cpp:191 Sources/Client/LimboView.cpp:191 +msgctxt "Client" +msgid "Select Weapon:" +msgstr "Seleziona Arma:" + +#: Sources/Client/NetClient.cpp:422 Sources/Client/NetClient.cpp:425 +msgctxt "NetClient" +msgid "Connecting to the server" +msgstr "Connessione al server" + +#: Sources/Client/NetClient.cpp:434 Sources/Client/NetClient.cpp:437 +msgctxt "NetClient" +msgid "Not connected" +msgstr "Non connesso" + +#: Sources/Client/NetClient.cpp:498 Sources/Client/NetClient.cpp:516 +msgctxt "NetClient" +msgid "Awaiting for state" +msgstr "Aspettando lo stato" + +#: Sources/Client/NetClient.cpp:508 Sources/Client/NetClient.cpp:1277 +#: Sources/Client/NetClient.cpp:526 Sources/Client/NetClient.cpp:1346 +msgctxt "NetClient" +msgid "Loading snapshot" +msgstr "Caricamento Snapshot" + +#: Sources/Client/NetClient.cpp:523 Sources/Client/NetClient.cpp:541 +msgctxt "NetClient" +msgid "Loading snapshot ({0}/{1})" +msgstr "Caricamento Snapshot ({0}/{1})" + +#: Sources/Client/NetClient.cpp:528 Sources/Client/NetClient.cpp:562 +#: Sources/Client/NetClient.cpp:546 Sources/Client/NetClient.cpp:609 +msgctxt "NetClient" +msgid "Connected" +msgstr "Connesso" + +#: Sources/Client/NetClient.cpp:540 Sources/Client/NetClient.cpp:575 +#: Sources/Client/NetClient.cpp:627 Sources/Client/NetClient.cpp:558 +#: Sources/Client/NetClient.cpp:622 Sources/Client/NetClient.cpp:674 +msgctxt "NetClient" +msgid "Still loading..." +msgstr "Caricando..." + +#: Sources/Client/NetClient.cpp:543 Sources/Client/NetClient.cpp:549 +#: Sources/Client/NetClient.cpp:579 Sources/Client/NetClient.cpp:584 +#: Sources/Client/NetClient.cpp:631 Sources/Client/NetClient.cpp:636 +#: Sources/Client/NetClient.cpp:561 Sources/Client/NetClient.cpp:567 +#: Sources/Client/NetClient.cpp:626 Sources/Client/NetClient.cpp:631 +#: Sources/Client/NetClient.cpp:678 Sources/Client/NetClient.cpp:683 +msgctxt "NetClient" +msgid "Error" +msgstr "Errore" + +#: Sources/Client/NetClient.cpp:702 Sources/Client/NetClient.cpp:749 +msgctxt "NetClient" +msgid "You are banned from this server." +msgstr "Sei stato bannato dal server." + +#: Sources/Client/NetClient.cpp:707 Sources/Client/NetClient.cpp:710 +#: Sources/Client/NetClient.cpp:754 Sources/Client/NetClient.cpp:757 +msgctxt "NetClient" +msgid "You were kicked from this server." +msgstr "Sei stato espulso dal server." + +#: Sources/Client/NetClient.cpp:708 Sources/Client/NetClient.cpp:755 +msgctxt "NetClient" +msgid "Incompatible client protocol version." +msgstr "Versione del protocollo Client incompatibile." + +#: Sources/Client/NetClient.cpp:709 Sources/Client/NetClient.cpp:756 +msgctxt "NetClient" +msgid "Server full" +msgstr "Server Pieno" + +#: Sources/Client/NetClient.cpp:711 Sources/Client/NetClient.cpp:758 +msgctxt "NetClient" +msgid "Unknown Reason" +msgstr "Ragione sconosciuta" + +#: Sources/Client/ScoreboardView.cpp:63 Sources/Client/ScoreboardView.cpp:345 +#: Sources/Client/ScoreboardView.cpp:63 Sources/Client/ScoreboardView.cpp:345 +msgctxt "Client" +msgid "Spectator{1}" +msgid_plural "Spectators{1}" +msgstr[0] "Spettatore {1}" +msgstr[1] "Spettatori {1}" + +#: Sources/Client/TCProgressView.cpp:151 Sources/Client/TCProgressView.cpp:151 +msgctxt "Client" +msgid "Neutral Territory" +msgstr "Territorio neutrale" + +#: Sources/Client/TCProgressView.cpp:154 Sources/Client/TCProgressView.cpp:154 +msgctxt "Client" +msgid "{0}'s Territory" +msgstr "Territorio {0}" + +#: Sources/Gui/Main.cpp:548 Sources/Gui/Main.cpp:577 +msgctxt "Main" +msgid "Localization System Loaded" +msgstr "Sistema di Localizzazione caricato" + +#: Sources/Gui/Main.cpp:604 Sources/Gui/Runner.cpp:56 Sources/Gui/Main.cpp:633 +#: Sources/Gui/Runner.cpp:56 +msgctxt "Main" +msgid "A serious error caused OpenSpades to stop working:\n\n" +"{0}\n\n" +"See SystemMessages.log for more details." +msgstr "Un errore grave ha causato la chiusura di OpenSpades:\n\n" +"{0}\n\n" +"Vedi il SystemMessages.log per ulteriori dettagli." + +#: Sources/Gui/Main.cpp:612 Sources/Gui/Runner.cpp:62 Sources/Gui/Main.cpp:641 +#: Sources/Gui/Runner.cpp:62 +msgctxt "Main" +msgid "OpenSpades Fatal Error" +msgstr "Errore Fatale di Openspades" + +#: Sources/Gui/MainScreen.cpp:225 Sources/Gui/MainScreen.cpp:220 +msgctxt "MainScreen" +msgid "NOW LOADING" +msgstr "CARICANDO" + +#: Resources/Scripts/Gui/ClientUI.as:198 Resources/Scripts/Gui/ClientUI.as:198 +msgctxt "Client" +msgid "Back to Game" +msgstr "Rientra nel Gioco" + +#: Resources/Scripts/Gui/ClientUI.as:205 Resources/Scripts/Gui/ClientUI.as:205 +msgctxt "Client" +msgid "Chat Log" +msgstr "Registro Chat" + +#: Resources/Scripts/Gui/ClientUI.as:212 Resources/Scripts/Gui/ClientUI.as:212 +msgctxt "Client" +msgid "Setup" +msgstr "Setup" + +#: Resources/Scripts/Gui/ClientUI.as:219 Resources/Scripts/Gui/ClientUI.as:219 +msgctxt "Client" +msgid "Disconnect" +msgstr "Disconnessione" + +#: Resources/Scripts/Gui/ClientUI.as:484 Resources/Scripts/Gui/ClientUI.as:484 +msgctxt "Client" +msgid "Say" +msgstr "Parla" + +#: Resources/Scripts/Gui/ClientUI.as:492 Resources/Scripts/Gui/ClientUI.as:492 +msgctxt "Client" +msgid "Cancel" +msgstr "Cancella" + +#: Resources/Scripts/Gui/ClientUI.as:500 Resources/Scripts/Gui/ClientUI.as:500 +msgctxt "Client" +msgid "Chat Text" +msgstr "Testo di Chat" + +#: Resources/Scripts/Gui/ClientUI.as:508 Resources/Scripts/Gui/ClientUI.as:508 +msgctxt "Client" +msgid "Global" +msgstr "Globale" + +#: Resources/Scripts/Gui/ClientUI.as:517 Resources/Scripts/Gui/ClientUI.as:517 +msgctxt "Client" +msgid "Team" +msgstr "Squadra" + +#: Resources/Scripts/Gui/ClientUI.as:661 Resources/Scripts/Gui/ClientUI.as:662 +msgctxt "Client" +msgid "Close" +msgstr "Vicino" + +#: Resources/Scripts/Gui/ClientUI.as:671 Resources/Scripts/Gui/ClientUI.as:672 +msgctxt "Client" +msgid "Say Global" +msgstr "Parla in Globale" + +#: Resources/Scripts/Gui/ClientUI.as:682 Resources/Scripts/Gui/ClientUI.as:683 +msgctxt "Client" +msgid "Say Team" +msgstr "Parla nella Squadra" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:58 +#: Resources/Scripts/Gui/CreateProfileScreen.as:58 +msgctxt "CreateProfileScreen" +msgid "OK" +msgstr "Va Bene" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:70 +#: Resources/Scripts/Gui/CreateProfileScreen.as:70 +msgctxt "CreateProfileScreen" +msgid "Decide later" +msgstr "Decidi Dopo" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:80 +#: Resources/Scripts/Gui/CreateProfileScreen.as:80 +msgctxt "CreateProfileScreen" +msgid "Welcome to OpenSpades" +msgstr "Benvenuto ad OpenSpades" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:88 +#: Resources/Scripts/Gui/CreateProfileScreen.as:88 +msgctxt "CreateProfileScreen" +msgid "Choose a player name:" +msgstr "Scegli il tuo nome per giocare:" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:96 +#: Resources/Scripts/Gui/CreateProfileScreen.as:96 +msgctxt "CreateProfileScreen" +msgid "Player name" +msgstr "Nome del Giocatore" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:104 +#: Resources/Scripts/Gui/CreateProfileScreen.as:104 +msgctxt "CreateProfileScreen" +msgid "You can change it later in the Setup dialog." +msgstr "Puoi modificarlo più tardi nella finestra di configurazione." + +#: Resources/Scripts/Gui/MainScreen.as:376 +#: Resources/Scripts/Gui/MainScreen.as:376 +msgctxt "MainScreen" +msgid "Connect" +msgstr "Connessione" + +#: Resources/Scripts/Gui/MainScreen.as:384 +#: Resources/Scripts/Gui/MainScreen.as:384 +msgctxt "MainScreen" +msgid "Quick Connect" +msgstr "Connessione rapida" + +#: Resources/Scripts/Gui/MainScreen.as:393 +#: Resources/Scripts/Gui/MainScreen.as:447 +#: Resources/Scripts/Gui/MainScreen.as:393 +#: Resources/Scripts/Gui/MainScreen.as:447 +msgctxt "MainScreen" +msgid "0.75" +msgstr "0,75" + +#: Resources/Scripts/Gui/MainScreen.as:403 +#: Resources/Scripts/Gui/MainScreen.as:456 +#: Resources/Scripts/Gui/MainScreen.as:403 +#: Resources/Scripts/Gui/MainScreen.as:456 +msgctxt "MainScreen" +msgid "0.76" +msgstr "0,76" + +#: Resources/Scripts/Gui/MainScreen.as:411 +#: Resources/Scripts/Gui/MainScreen.as:411 +msgctxt "MainScreen" +msgid "Quit" +msgstr "Chiudi" + +#: Resources/Scripts/Gui/MainScreen.as:418 +#: Resources/Scripts/Gui/MainScreen.as:418 +msgctxt "MainScreen" +msgid "Credits" +msgstr "Crediti" + +#: Resources/Scripts/Gui/MainScreen.as:425 +#: Resources/Scripts/Gui/MainScreen.as:425 +msgctxt "MainScreen" +msgid "Setup" +msgstr "Configurazione" + +#: Resources/Scripts/Gui/MainScreen.as:438 +#: Resources/Scripts/Gui/MainScreen.as:482 +#: Resources/Scripts/Gui/MainScreen.as:438 +#: Resources/Scripts/Gui/MainScreen.as:482 +msgctxt "MainScreen" +msgid "Filter" +msgstr "Filtro" + +#: Resources/Scripts/Gui/MainScreen.as:465 +#: Resources/Scripts/Gui/MainScreen.as:465 +msgctxt "MainScreen" +msgid "Empty" +msgstr "Vuoto" + +#: Resources/Scripts/Gui/MainScreen.as:474 +#: Resources/Scripts/Gui/MainScreen.as:474 +msgctxt "MainScreen" +msgid "Not Full" +msgstr "Non completo" + +#: Resources/Scripts/Gui/MainScreen.as:494 +#: Resources/Scripts/Gui/MainScreen.as:494 +msgctxt "MainScreen" +msgid "Server Name" +msgstr "Nome del server" + +#: Resources/Scripts/Gui/MainScreen.as:501 +#: Resources/Scripts/Gui/MainScreen.as:501 +msgctxt "MainScreen" +msgid "Players" +msgstr "Giocatori" + +#: Resources/Scripts/Gui/MainScreen.as:508 +#: Resources/Scripts/Gui/MainScreen.as:508 +msgctxt "MainScreen" +msgid "Map Name" +msgstr "Nome della mappa" + +#: Resources/Scripts/Gui/MainScreen.as:515 +#: Resources/Scripts/Gui/MainScreen.as:515 +msgctxt "MainScreen" +msgid "Game Mode" +msgstr "Modalità di gioco" + +#: Resources/Scripts/Gui/MainScreen.as:522 +#: Resources/Scripts/Gui/MainScreen.as:522 +msgctxt "MainScreen" +msgid "Ver." +msgstr "Versione." + +#: Resources/Scripts/Gui/MainScreen.as:529 +#: Resources/Scripts/Gui/MainScreen.as:529 +msgctxt "MainScreen" +msgid "Loc." +msgstr "Loc." + +#: Resources/Scripts/Gui/MainScreen.as:787 +#: Resources/Scripts/Gui/MainScreen.as:787 +msgctxt "MainScreen" +msgid "You were disconnected from the server because of the following reason:\n\n" +"{0}" +msgstr "Sei stato disconnesso dal server per il seguente motivo:\n\n" +"{0}" + +#: Resources/Scripts/Gui/MainScreen.as:807 +#: Resources/Scripts/Gui/MainScreen.as:807 +msgctxt "MainScreen" +msgid "Loading..." +msgstr "Caricamento in corso..." + +#: Resources/Scripts/Gui/MainScreen.as:825 +#: Resources/Scripts/Gui/MainScreen.as:825 +msgctxt "MainScreen" +msgid "Failed to fetch the server list." +msgstr "Impossibile recuperare la lista server." + +#: Resources/Scripts/Gui/MessageBox.as:130 +#: Resources/Scripts/Gui/MessageBox.as:144 +#: Resources/Scripts/Gui/MessageBox.as:130 +#: Resources/Scripts/Gui/MessageBox.as:144 +msgctxt "MessageBox" +msgid "OK" +msgstr "OK" + +#: Resources/Scripts/Gui/MessageBox.as:144 +#: Resources/Scripts/Gui/MessageBox.as:144 +msgctxt "MessageBox" +msgid "Cancel" +msgstr "Annulla" + +#: Resources/Scripts/Gui/Preferences.as:60 +#: Resources/Scripts/Gui/Preferences.as:60 +msgctxt "Preferences" +msgid "Game Options" +msgstr "Opzioni di Gioco" + +#: Resources/Scripts/Gui/Preferences.as:61 +#: Resources/Scripts/Gui/Preferences.as:61 +msgctxt "Preferences" +msgid "Controls" +msgstr "Comandi" + +#: Resources/Scripts/Gui/Preferences.as:62 +#: Resources/Scripts/Gui/Preferences.as:663 +#: Resources/Scripts/Gui/Preferences.as:708 +#: Resources/Scripts/Gui/Preferences.as:62 +#: Resources/Scripts/Gui/Preferences.as:663 +#: Resources/Scripts/Gui/Preferences.as:708 +msgctxt "Preferences" +msgid "Misc" +msgstr "Varie" + +#: Resources/Scripts/Gui/Preferences.as:66 +#: Resources/Scripts/Gui/Preferences.as:66 +msgctxt "Preferences" +msgid "Back" +msgstr "Torna indietro" + +#: Resources/Scripts/Gui/Preferences.as:407 +#: Resources/Scripts/Gui/Preferences.as:407 +msgctxt "Preferences" +msgid "Press Key to Bind or [Escape] to Cancel..." +msgstr "Premi il tasto per associare o [Escape] per annullare..." + +#: Resources/Scripts/Gui/Preferences.as:418 +#: Resources/Scripts/Gui/Preferences.as:418 +msgctxt "Preferences" +msgid "Space" +msgstr "Spazio" + +#: Resources/Scripts/Gui/Preferences.as:420 +#: Resources/Scripts/Gui/Preferences.as:420 +msgctxt "Preferences" +msgid "Unbound" +msgstr "Non collegato" + +#: Resources/Scripts/Gui/Preferences.as:423 +#: Resources/Scripts/Gui/Preferences.as:423 +msgctxt "Preferences" +msgid "Shift" +msgstr "Tasto Shift" + +#: Resources/Scripts/Gui/Preferences.as:425 +#: Resources/Scripts/Gui/Preferences.as:425 +msgctxt "Preferences" +msgid "Control" +msgstr "Ctrl" + +#: Resources/Scripts/Gui/Preferences.as:427 +#: Resources/Scripts/Gui/Preferences.as:427 +msgctxt "Preferences" +msgid "Meta" +msgstr "Meta" + +#: Resources/Scripts/Gui/Preferences.as:429 +#: Resources/Scripts/Gui/Preferences.as:429 +msgctxt "Preferences" +msgid "Alt" +msgstr "Alt" + +#: Resources/Scripts/Gui/Preferences.as:431 +#: Resources/Scripts/Gui/Preferences.as:431 +msgctxt "Preferences" +msgid "Left Mouse Button" +msgstr "Pulsante sinistro del mouse" + +#: Resources/Scripts/Gui/Preferences.as:433 +#: Resources/Scripts/Gui/Preferences.as:433 +msgctxt "Preferences" +msgid "Right Mouse Button" +msgstr "Pulsante destro del mouse" + +#: Resources/Scripts/Gui/Preferences.as:435 +#: Resources/Scripts/Gui/Preferences.as:435 +msgctxt "Preferences" +msgid "Middle Mouse Button" +msgstr "Tasto centrale del mouse" + +#: Resources/Scripts/Gui/Preferences.as:437 +#: Resources/Scripts/Gui/Preferences.as:437 +msgctxt "Preferences" +msgid "Mouse Button 4" +msgstr "Pulsante mouse 4" + +#: Resources/Scripts/Gui/Preferences.as:439 +#: Resources/Scripts/Gui/Preferences.as:439 +msgctxt "Preferences" +msgid "Mouse Button 5" +msgstr "Pulsante mouse 5" + +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +msgctxt "Preferences" +msgid "ON" +msgstr "ATTIVATO" + +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "OFF" +msgstr "SPENTO" + +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:619 +msgctxt "Preferences" +msgid "REVERSED" +msgstr "INVERTITO" + +#: Resources/Scripts/Gui/Preferences.as:637 +#: Resources/Scripts/Gui/Preferences.as:637 +msgctxt "Preferences" +msgid "Player Information" +msgstr "Informazioni del giocatore" + +#: Resources/Scripts/Gui/Preferences.as:638 +#: Resources/Scripts/Gui/Preferences.as:638 +msgctxt "Preferences" +msgid "Player Name" +msgstr "Nome del giocatore" + +#: Resources/Scripts/Gui/Preferences.as:642 +#: Resources/Scripts/Gui/Preferences.as:642 +msgctxt "Preferences" +msgid "Effects" +msgstr "Effetti" + +#: Resources/Scripts/Gui/Preferences.as:643 +#: Resources/Scripts/Gui/Preferences.as:643 +msgctxt "Preferences" +msgid "Blood" +msgstr "Sangue" + +#: Resources/Scripts/Gui/Preferences.as:644 +#: Resources/Scripts/Gui/Preferences.as:644 +msgctxt "Preferences" +msgid "Ejecting Brass" +msgstr "Espulsione della Cartuccia" + +#: Resources/Scripts/Gui/Preferences.as:645 +#: Resources/Scripts/Gui/Preferences.as:645 +msgctxt "Preferences" +msgid "Ragdoll" +msgstr "Ragdoll" + +#: Resources/Scripts/Gui/Preferences.as:646 +#: Resources/Scripts/Gui/Preferences.as:646 +msgctxt "Preferences" +msgid "Animations" +msgstr "Animazione" + +#: Resources/Scripts/Gui/Preferences.as:647 +#: Resources/Scripts/Gui/Preferences.as:647 +msgctxt "Preferences" +msgid "Camera Shake" +msgstr "Scossa fotocamera" + +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:648 +msgctxt "Preferences" +msgid "MORE" +msgstr "DI PIÙ" + +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "NORMAL" +msgstr "NORMALE" + +#: Resources/Scripts/Gui/Preferences.as:650 +#: Resources/Scripts/Gui/Preferences.as:650 +msgctxt "Preferences" +msgid "Particles" +msgstr "Particelle" + +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "LESS" +msgstr "DI MENO" + +#: Resources/Scripts/Gui/Preferences.as:654 +#: Resources/Scripts/Gui/Preferences.as:654 +msgctxt "Preferences" +msgid "Feedbacks" +msgstr "Feedbacks" + +#: Resources/Scripts/Gui/Preferences.as:655 +#: Resources/Scripts/Gui/Preferences.as:655 +msgctxt "Preferences" +msgid "Chat Notify Sounds" +msgstr "Suono Notifica della Chat" + +#: Resources/Scripts/Gui/Preferences.as:656 +#: Resources/Scripts/Gui/Preferences.as:656 +msgctxt "Preferences" +msgid "Hit Indicator" +msgstr "Indicatore del Colpo" + +#: Resources/Scripts/Gui/Preferences.as:657 +#: Resources/Scripts/Gui/Preferences.as:657 +msgctxt "Preferences" +msgid "Show Alerts" +msgstr "Mostra Allerte" + +#: Resources/Scripts/Gui/Preferences.as:659 +#: Resources/Scripts/Gui/Preferences.as:659 +msgctxt "Preferences" +msgid "AoS 0.75/0.76 Compatibility" +msgstr "Compatibilità con AoS 0.75/0.76" + +#: Resources/Scripts/Gui/Preferences.as:660 +#: Resources/Scripts/Gui/Preferences.as:660 +msgctxt "Preferences" +msgid "Allow Unicode" +msgstr "Consenti Unicode" + +#: Resources/Scripts/Gui/Preferences.as:661 +#: Resources/Scripts/Gui/Preferences.as:661 +msgctxt "Preferences" +msgid "Server Alert" +msgstr "Allerta del Server" + +#: Resources/Scripts/Gui/Preferences.as:664 +#: Resources/Scripts/Gui/Preferences.as:664 +msgctxt "Preferences" +msgid "Field of View" +msgstr "Campo Visivo" + +#: Resources/Scripts/Gui/Preferences.as:666 +#: Resources/Scripts/Gui/Preferences.as:666 +msgctxt "Preferences" +msgid "Minimap size" +msgstr "Grandezza Minimappa" + +#: Resources/Scripts/Gui/Preferences.as:668 +#: Resources/Scripts/Gui/Preferences.as:668 +msgctxt "Preferences" +msgid "Show Statistics" +msgstr "Mostra Statistiche" + +#: Resources/Scripts/Gui/Preferences.as:678 +#: Resources/Scripts/Gui/Preferences.as:678 +msgctxt "Preferences" +msgid "Weapons/Tools" +msgstr "Armi/Attrezzi" + +#: Resources/Scripts/Gui/Preferences.as:679 +#: Resources/Scripts/Gui/Preferences.as:679 +msgctxt "Preferences" +msgid "Attack" +msgstr "Attacco" + +#: Resources/Scripts/Gui/Preferences.as:680 +#: Resources/Scripts/Gui/Preferences.as:680 +msgctxt "Preferences" +msgid "Alt. Attack" +msgstr "Attacco Alternativo" + +#: Resources/Scripts/Gui/Preferences.as:681 +#: Resources/Scripts/Gui/Preferences.as:681 +msgctxt "Preferences" +msgid "Hold Aim Down Sight" +msgstr "Usa il Mirino" + +#: Resources/Scripts/Gui/Preferences.as:682 +#: Resources/Scripts/Gui/Preferences.as:682 +msgctxt "Preferences" +msgid "Mouse Sensitivity" +msgstr "Sensibilità del Mouse" + +#: Resources/Scripts/Gui/Preferences.as:684 +#: Resources/Scripts/Gui/Preferences.as:684 +msgctxt "Preferences" +msgid "ADS Mouse Sens. Scale" +msgstr "Scala la Sensibilità del Mouse" + +#: Resources/Scripts/Gui/Preferences.as:686 +#: Resources/Scripts/Gui/Preferences.as:686 +msgctxt "Preferences" +msgid "Exponential Power" +msgstr "Potere Esponenziale" + +#: Resources/Scripts/Gui/Preferences.as:688 +#: Resources/Scripts/Gui/Preferences.as:688 +msgctxt "Preferences" +msgid "Invert Y-axis Mouse Input" +msgstr "Inverti l'input del mouse nell'asse Y" + +#: Resources/Scripts/Gui/Preferences.as:689 +#: Resources/Scripts/Gui/Preferences.as:689 +msgctxt "Preferences" +msgid "Reload" +msgstr "Ricaricamento" + +#: Resources/Scripts/Gui/Preferences.as:690 +#: Resources/Scripts/Gui/Preferences.as:690 +msgctxt "Preferences" +msgid "Capture Color" +msgstr "Cattura Colore" + +#: Resources/Scripts/Gui/Preferences.as:691 +#: Resources/Scripts/Gui/Preferences.as:691 +msgctxt "Preferences" +msgid "Equip Spade" +msgstr "Equipaggia Pala" + +#: Resources/Scripts/Gui/Preferences.as:692 +#: Resources/Scripts/Gui/Preferences.as:692 +msgctxt "Preferences" +msgid "Equip Block" +msgstr "Equipaggia Blocco" + +#: Resources/Scripts/Gui/Preferences.as:693 +#: Resources/Scripts/Gui/Preferences.as:693 +msgctxt "Preferences" +msgid "Equip Weapon" +msgstr "Equipaggia Arma" + +#: Resources/Scripts/Gui/Preferences.as:694 +#: Resources/Scripts/Gui/Preferences.as:694 +msgctxt "Preferences" +msgid "Equip Grenade" +msgstr "Equipaggia Granata" + +#: Resources/Scripts/Gui/Preferences.as:695 +#: Resources/Scripts/Gui/Preferences.as:695 +msgctxt "Preferences" +msgid "Last Used Tool" +msgstr "Ultimo strumento utilizzato" + +#: Resources/Scripts/Gui/Preferences.as:696 +#: Resources/Scripts/Gui/Preferences.as:696 +msgctxt "Preferences" +msgid "Switch Tools by Wheel" +msgstr "Cambia gli strumenti con Rotellina del Mouse" + +#: Resources/Scripts/Gui/Preferences.as:698 +#: Resources/Scripts/Gui/Preferences.as:698 +msgctxt "Preferences" +msgid "Movement" +msgstr "Movimento" + +#: Resources/Scripts/Gui/Preferences.as:699 +#: Resources/Scripts/Gui/Preferences.as:699 +msgctxt "Preferences" +msgid "Walk Forward" +msgstr "Camminare Avanti" + +#: Resources/Scripts/Gui/Preferences.as:700 +#: Resources/Scripts/Gui/Preferences.as:700 +msgctxt "Preferences" +msgid "Backpedal" +msgstr "Camminare indietro" + +#: Resources/Scripts/Gui/Preferences.as:701 +#: Resources/Scripts/Gui/Preferences.as:701 +msgctxt "Preferences" +msgid "Move Left" +msgstr "Spostarsi a sinistra" + +#: Resources/Scripts/Gui/Preferences.as:702 +#: Resources/Scripts/Gui/Preferences.as:702 +msgctxt "Preferences" +msgid "Move Right" +msgstr "Spostarsi a Destra" + +#: Resources/Scripts/Gui/Preferences.as:703 +#: Resources/Scripts/Gui/Preferences.as:703 +msgctxt "Preferences" +msgid "Crouch" +msgstr "Accovacciarsi" + +#: Resources/Scripts/Gui/Preferences.as:704 +#: Resources/Scripts/Gui/Preferences.as:704 +msgctxt "Preferences" +msgid "Sneak" +msgstr "Cammina Lentamente" + +#: Resources/Scripts/Gui/Preferences.as:705 +#: Resources/Scripts/Gui/Preferences.as:705 +msgctxt "Preferences" +msgid "Jump" +msgstr "Salta" + +#: Resources/Scripts/Gui/Preferences.as:706 +#: Resources/Scripts/Gui/Preferences.as:706 +msgctxt "Preferences" +msgid "Sprint" +msgstr "Scatta" + +#: Resources/Scripts/Gui/Preferences.as:709 +#: Resources/Scripts/Gui/Preferences.as:709 +msgctxt "Preferences" +msgid "Minimap Scale" +msgstr "Grandezza Minimappa" + +#: Resources/Scripts/Gui/Preferences.as:710 +#: Resources/Scripts/Gui/Preferences.as:710 +msgctxt "Preferences" +msgid "Toggle Map" +msgstr "Attiva/Disattiva Mappa" + +#: Resources/Scripts/Gui/Preferences.as:711 +#: Resources/Scripts/Gui/Preferences.as:711 +msgctxt "Preferences" +msgid "Flashlight" +msgstr "Torcia" + +#: Resources/Scripts/Gui/Preferences.as:712 +#: Resources/Scripts/Gui/Preferences.as:712 +msgctxt "Preferences" +msgid "Global Chat" +msgstr "Chat globale" + +#: Resources/Scripts/Gui/Preferences.as:713 +#: Resources/Scripts/Gui/Preferences.as:713 +msgctxt "Preferences" +msgid "Team Chat" +msgstr "Chat della Squadra" + +#: Resources/Scripts/Gui/Preferences.as:714 +#: Resources/Scripts/Gui/Preferences.as:714 +msgctxt "Preferences" +msgid "Limbo Menu" +msgstr "Menu del Limbo" + +#: Resources/Scripts/Gui/Preferences.as:715 +#: Resources/Scripts/Gui/Preferences.as:715 +msgctxt "Preferences" +msgid "Save Map" +msgstr "Salva mappa" + +#: Resources/Scripts/Gui/Preferences.as:716 +#: Resources/Scripts/Gui/Preferences.as:716 +msgctxt "Preferences" +msgid "Save Sceneshot" +msgstr "Salva Sceneshot" + +#: Resources/Scripts/Gui/Preferences.as:717 +#: Resources/Scripts/Gui/Preferences.as:717 +msgctxt "Preferences" +msgid "Save Screenshot" +msgstr "Salva la schermata" + +#: Resources/Scripts/Gui/Preferences.as:736 +#: Resources/Scripts/Gui/Preferences.as:736 +msgctxt "Preferences" +msgid "Enable Startup Window" +msgstr "Abilita finestra di avvio" + +#: Resources/Scripts/Gui/Preferences.as:757 +#: Resources/Scripts/Gui/Preferences.as:757 +msgctxt "Preferences" +msgid "Quit and restart OpenSpades to access the startup window." +msgstr "Esci e riavvia OpenSpades per accedere alla finestra di avvio." + +#: Resources/Scripts/Gui/Preferences.as:758 +#: Resources/Scripts/Gui/Preferences.as:758 +msgctxt "Preferences" +msgid "Some settings only can be changed in the startup window." +msgstr "Alcune impostazioni possono essere modificate solo nella finestra di avvio." + +#: Resources/Scripts/Gui/StartupScreen.as:160 +#: Resources/Scripts/Gui/StartupScreen.as:160 +msgctxt "StartupScreen" +msgid "Start" +msgstr "Avvia" + +#: Resources/Scripts/Gui/StartupScreen.as:167 +#: Resources/Scripts/Gui/StartupScreen.as:167 +msgctxt "StartupScreen" +msgid "Skip this screen next time" +msgstr "La prossima volta salta questa schermata" + +#: Resources/Scripts/Gui/StartupScreen.as:211 +#: Resources/Scripts/Gui/StartupScreen.as:211 +msgctxt "StartupScreen" +msgid "Graphics" +msgstr "Grafica" + +#: Resources/Scripts/Gui/StartupScreen.as:212 +#: Resources/Scripts/Gui/StartupScreen.as:212 +msgctxt "StartupScreen" +msgid "Audio" +msgstr "Audio" + +#: Resources/Scripts/Gui/StartupScreen.as:213 +#: Resources/Scripts/Gui/StartupScreen.as:213 +msgctxt "StartupScreen" +msgid "Generic" +msgstr "Generico" + +#: Resources/Scripts/Gui/StartupScreen.as:214 +#: Resources/Scripts/Gui/StartupScreen.as:214 +msgctxt "StartupScreen" +msgid "System Info" +msgstr "Informazioni del Sistema" + +#: Resources/Scripts/Gui/StartupScreen.as:215 +#: Resources/Scripts/Gui/StartupScreen.as:1679 +#: Resources/Scripts/Gui/StartupScreen.as:215 +#: Resources/Scripts/Gui/StartupScreen.as:1679 +msgctxt "StartupScreen" +msgid "Advanced" +msgstr "Avanzato" + +#: Resources/Scripts/Gui/StartupScreen.as:288 +#: Resources/Scripts/Gui/StartupScreen.as:288 +msgctxt "StartupScreen" +msgid "An unknown error has occurred while opening the update info website." +msgstr "Si è verificato un errore sconosciuto durante l'apertura delle informazioni del sito sull'aggiornamento." + +#: Resources/Scripts/Gui/StartupScreen.as:853 +#: Resources/Scripts/Gui/StartupScreen.as:853 +msgctxt "StartupScreen" +msgid "Custom" +msgstr "Personalizzato" + +#: Resources/Scripts/Gui/StartupScreen.as:979 +#: Resources/Scripts/Gui/StartupScreen.as:979 +msgctxt "StartupScreen" +msgid "Close" +msgstr "Chiudi" + +#: Resources/Scripts/Gui/StartupScreen.as:1085 +#: Resources/Scripts/Gui/StartupScreen.as:1085 +msgctxt "StartupScreen" +msgid "Graphics Settings" +msgstr "Impostazioni grafiche" + +#: Resources/Scripts/Gui/StartupScreen.as:1090 +#: Resources/Scripts/Gui/StartupScreen.as:1090 +msgctxt "StartupScreen" +msgid "Resolution" +msgstr "Risoluzione" + +#: Resources/Scripts/Gui/StartupScreen.as:1100 +#: Resources/Scripts/Gui/StartupScreen.as:1100 +msgctxt "StartupScreen" +msgid "Fullscreen Mode" +msgstr "Modalità tutto schermo" + +#: Resources/Scripts/Gui/StartupScreen.as:1103 +#: Resources/Scripts/Gui/StartupScreen.as:1103 +msgctxt "StartupScreen" +msgid "By running in fullscreen mode OpenSpades occupies the screen, making it easier for you to concentrate on playing the game." +msgstr "In modalità a schermo intero OpenSpades occupa tutto lo schermo, rendendo più facile per te concentrarsi sulla riproduzione del gioco." + +#: Resources/Scripts/Gui/StartupScreen.as:1110 +#: Resources/Scripts/Gui/StartupScreen.as:1492 +#: Resources/Scripts/Gui/StartupScreen.as:1110 +#: Resources/Scripts/Gui/StartupScreen.as:1492 +msgctxt "StartupScreen" +msgid "Backend" +msgstr "Backend" + +#: Resources/Scripts/Gui/StartupScreen.as:1113 +#: Resources/Scripts/Gui/StartupScreen.as:1113 +msgctxt "StartupScreen" +msgid "OpenGL" +msgstr "OpenGL" + +#: Resources/Scripts/Gui/StartupScreen.as:1117 +#: Resources/Scripts/Gui/StartupScreen.as:1117 +msgctxt "StartupScreen" +msgid "OpenGL renderer uses your computer's graphics accelerator to generate the game screen." +msgstr "Il renderer di OpenGL usa l'acceleratore grafico del tuo computer per generare la schermata di gioco." + +#: Resources/Scripts/Gui/StartupScreen.as:1125 +#: Resources/Scripts/Gui/StartupScreen.as:1125 +msgctxt "StartupScreen" +msgid "Software" +msgstr "Software" + +#: Resources/Scripts/Gui/StartupScreen.as:1129 +#: Resources/Scripts/Gui/StartupScreen.as:1129 +msgctxt "StartupScreen" +msgid "Software renderer uses CPU to generate the game screen. Its quality and performance might be inferior to OpenGL renderer, but it works even with an unsupported GPU." +msgstr "Il software renderer utilizza la CPU per generare la schermata di gioco. La sua qualità e prestazioni potrebbero essere inferiori al rendering OpenGL, ma funziona anche con una GPU non supportata." + +#: Resources/Scripts/Gui/StartupScreen.as:1143 +#: Resources/Scripts/Gui/StartupScreen.as:1143 +msgctxt "StartupScreen" +msgid "Antialias:Enables a technique to improve the appearance of high-contrast edges.\n\n" +"MSAA: Performs antialiasing by generating an intermediate high-resolution image. Looks best, but doesn't cope with some settings.\n\n" +"FXAA: Performs antialiasing by smoothing artifacts out as a post-process.|Off|MSAA 2x|4x|FXAA" +msgstr "Antialias:Attiva una tecnica per migliorare l'aspetto dei bordi ad alto contrasto.\n\n" +"MSAA: Esegue l'antialiasing generando un'immagine intermedia ad alta risoluzione. Sembra migliorare, ma non è in grado di gestire alcune impostazioni.\n\n" +"FXAA: Esegue la lisciatura degli artifatti come post-processo.|Spento|MSAA 2x|4x|FXAA" + +#: Resources/Scripts/Gui/StartupScreen.as:1150 +#: Resources/Scripts/Gui/StartupScreen.as:1150 +msgctxt "StartupScreen" +msgid "Global Illumination" +msgstr "Illuminazione Globale" + +#: Resources/Scripts/Gui/StartupScreen.as:1152 +#: Resources/Scripts/Gui/StartupScreen.as:1152 +msgctxt "StartupScreen" +msgid "Enables a physically based simulation of light path for more realistic lighting." +msgstr "Attiva una simulazione fisica del percorso della luce per un illuminazione più realistica." + +#: Resources/Scripts/Gui/StartupScreen.as:1155 +#: Resources/Scripts/Gui/StartupScreen.as:1155 +msgctxt "StartupScreen" +msgid "Linear HDR Rendering" +msgstr "Rendering lineare HDR" + +#: Resources/Scripts/Gui/StartupScreen.as:1157 +#: Resources/Scripts/Gui/StartupScreen.as:1157 +msgctxt "StartupScreen" +msgid "Uses a number representation which allows wider dynamic range during rendering process. Additionally, this allows color calculation whose value is in linear correspondence with actual energy, that is, physically accurate blending can be achieved." +msgstr "Usa una rappresentazione numerica che permette un raggio dinamico più ampio durante il processo di rendering. In più aumenta il calcolo del colore i quali valori sono in corrispondenza lineare con energia effettiva, che è, possibile che venga ottenuta una combinazione fisicamente accurata." + +#: Resources/Scripts/Gui/StartupScreen.as:1164 +#: Resources/Scripts/Gui/StartupScreen.as:1164 +msgctxt "StartupScreen" +msgid "Camera Blur" +msgstr "Sfocamento Telecamera" + +#: Resources/Scripts/Gui/StartupScreen.as:1165 +#: Resources/Scripts/Gui/StartupScreen.as:1165 +msgctxt "StartupScreen" +msgid "Blurs the screen when you turn quickly." +msgstr "Sfoca lo schermo se ti giri velocemente." + +#: Resources/Scripts/Gui/StartupScreen.as:1167 +#: Resources/Scripts/Gui/StartupScreen.as:1167 +msgctxt "StartupScreen" +msgid "Lens Effect" +msgstr "Effetto delle Lenti" + +#: Resources/Scripts/Gui/StartupScreen.as:1168 +#: Resources/Scripts/Gui/StartupScreen.as:1168 +msgctxt "StartupScreen" +msgid "Simulates distortion caused by a real camera lens." +msgstr "Simula una distorsione causata da una vera lente di telecamera." + +#: Resources/Scripts/Gui/StartupScreen.as:1170 +#: Resources/Scripts/Gui/StartupScreen.as:1170 +msgctxt "StartupScreen" +msgid "Lens Scattering Filter" +msgstr "Filtro dispersione della Luce" + +#: Resources/Scripts/Gui/StartupScreen.as:1171 +#: Resources/Scripts/Gui/StartupScreen.as:1171 +msgctxt "StartupScreen" +msgid "Simulates light being scattered by dust on the camera lens." +msgstr "Simula la luce che viene sparsa dalla polvere sulle lenti della fotocamera." + +#: Resources/Scripts/Gui/StartupScreen.as:1174 +#: Resources/Scripts/Gui/StartupScreen.as:1174 +msgctxt "StartupScreen" +msgid "Lens Flare" +msgstr "Riflesso della lente" + +#: Resources/Scripts/Gui/StartupScreen.as:1175 +#: Resources/Scripts/Gui/StartupScreen.as:1175 +msgctxt "StartupScreen" +msgid "The Sun causes lens flare." +msgstr "Il sole causa il riflesso della lente." + +#: Resources/Scripts/Gui/StartupScreen.as:1177 +#: Resources/Scripts/Gui/StartupScreen.as:1177 +msgctxt "StartupScreen" +msgid "Flares for Dynamic Lights" +msgstr "Riflesso per le Luci Dinamiche" + +#: Resources/Scripts/Gui/StartupScreen.as:1178 +#: Resources/Scripts/Gui/StartupScreen.as:1178 +msgctxt "StartupScreen" +msgid "Enables lens flare for light sources other than the Sun." +msgstr "Abilita il riflesso delle lenti per altre superfici di luce oltre che il Sole." + +#: Resources/Scripts/Gui/StartupScreen.as:1180 +#: Resources/Scripts/Gui/StartupScreen.as:1180 +msgctxt "StartupScreen" +msgid "Color Correction" +msgstr "Color Correction" + +#: Resources/Scripts/Gui/StartupScreen.as:1181 +#: Resources/Scripts/Gui/StartupScreen.as:1181 +msgctxt "StartupScreen" +msgid "Applies cinematic color correction to make the image look better." +msgstr "Applica la correzione del colore cinematico per migliorare l'immagine." + +#: Resources/Scripts/Gui/StartupScreen.as:1183 +#: Resources/Scripts/Gui/StartupScreen.as:1183 +msgctxt "StartupScreen" +msgid "Depth of Field" +msgstr "Profondità del Campo" + +#: Resources/Scripts/Gui/StartupScreen.as:1184 +#: Resources/Scripts/Gui/StartupScreen.as:1184 +msgctxt "StartupScreen" +msgid "Blurs out-of-focus objects." +msgstr "Sfoca oggetti fuori dal fuoco." + +#: Resources/Scripts/Gui/StartupScreen.as:1186 +#: Resources/Scripts/Gui/StartupScreen.as:1186 +msgctxt "StartupScreen" +msgid "Screen Space Ambient Occlusion" +msgstr "Occlusione ambientale nello spazio dello schermo" + +#: Resources/Scripts/Gui/StartupScreen.as:1187 +#: Resources/Scripts/Gui/StartupScreen.as:1187 +msgctxt "StartupScreen" +msgid "Simulates soft shadows that occur between nearby objects." +msgstr "Simula ombre morbide che appaiono tra gli oggetti vicini." + +#: Resources/Scripts/Gui/StartupScreen.as:1189 +#: Resources/Scripts/Gui/StartupScreen.as:1228 +#: Resources/Scripts/Gui/StartupScreen.as:1250 +#: Resources/Scripts/Gui/StartupScreen.as:1189 +#: Resources/Scripts/Gui/StartupScreen.as:1228 +#: Resources/Scripts/Gui/StartupScreen.as:1250 +msgctxt "StartupScreen" +msgid "Low" +msgstr "Basso" + +#: Resources/Scripts/Gui/StartupScreen.as:1190 +#: Resources/Scripts/Gui/StartupScreen.as:1229 +#: Resources/Scripts/Gui/StartupScreen.as:1190 +#: Resources/Scripts/Gui/StartupScreen.as:1229 +msgctxt "StartupScreen" +msgid "Medium" +msgstr "Medio" + +#: Resources/Scripts/Gui/StartupScreen.as:1191 +#: Resources/Scripts/Gui/StartupScreen.as:1230 +#: Resources/Scripts/Gui/StartupScreen.as:1252 +#: Resources/Scripts/Gui/StartupScreen.as:1191 +#: Resources/Scripts/Gui/StartupScreen.as:1230 +#: Resources/Scripts/Gui/StartupScreen.as:1252 +msgctxt "StartupScreen" +msgid "High" +msgstr "Alto" + +#: Resources/Scripts/Gui/StartupScreen.as:1192 +#: Resources/Scripts/Gui/StartupScreen.as:1253 +#: Resources/Scripts/Gui/StartupScreen.as:1192 +#: Resources/Scripts/Gui/StartupScreen.as:1253 +msgctxt "StartupScreen" +msgid "Ultra" +msgstr "Ultra" + +#: Resources/Scripts/Gui/StartupScreen.as:1195 +#: Resources/Scripts/Gui/StartupScreen.as:1195 +msgctxt "StartupScreen" +msgid "Post-process" +msgstr "Post Processo" + +#: Resources/Scripts/Gui/StartupScreen.as:1196 +#: Resources/Scripts/Gui/StartupScreen.as:1196 +msgctxt "StartupScreen" +msgid "Post-process modifies the image to make it look better and more realistic." +msgstr "Il post-processo modifica l'immagine per renderla migliore e molto più realistica." + +#: Resources/Scripts/Gui/StartupScreen.as:1203 +#: Resources/Scripts/Gui/StartupScreen.as:1203 +msgctxt "StartupScreen" +msgid "Particles|Low:Artifact occurs when a particle intersects other objects.|Medium:Particle intersects objects smoothly.|High:Particle intersects objects smoothly, and some objects casts their shadow to particles." +msgstr "Particelle|Basse:L'artifatto si verifica quando una particella interseca altri oggetti.|Media:particelle intersecano gli oggetti senza intoppi.|Alta:particelle intersecano gli oggetti senza intoppi, e alcuni oggetti gettano la propria ombra sulle particelle." + +#: Resources/Scripts/Gui/StartupScreen.as:1213 +#: Resources/Scripts/Gui/StartupScreen.as:1213 +msgctxt "StartupScreen" +msgid "Dynamic Lights" +msgstr "Luci dinamiche" + +#: Resources/Scripts/Gui/StartupScreen.as:1215 +#: Resources/Scripts/Gui/StartupScreen.as:1215 +msgctxt "StartupScreen" +msgid "Gives some objects an ability to emit light to give them an energy-emitting impression." +msgstr "Dà ad alcuni oggetti la capacità di emettere la luce per dare loro un'impressione di emissione di energia." + +#: Resources/Scripts/Gui/StartupScreen.as:1218 +#: Resources/Scripts/Gui/StartupScreen.as:1218 +msgctxt "StartupScreen" +msgid "Shadows" +msgstr "Ombre" + +#: Resources/Scripts/Gui/StartupScreen.as:1219 +#: Resources/Scripts/Gui/StartupScreen.as:1219 +msgctxt "StartupScreen" +msgid "Non-static object casts a shadow." +msgstr "Oggetti Non statici gettano un'ombra." + +#: Resources/Scripts/Gui/StartupScreen.as:1221 +#: Resources/Scripts/Gui/StartupScreen.as:1221 +msgctxt "StartupScreen" +msgid "Volumetric Fog" +msgstr "Foschia Volumetrica" + +#: Resources/Scripts/Gui/StartupScreen.as:1222 +#: Resources/Scripts/Gui/StartupScreen.as:1222 +msgctxt "StartupScreen" +msgid "Simulates shadow being casted to the fog particles using a super highly computationally demanding algorithm. " +msgstr "Simula l'ombra che viene gettata sulle particelle di nebbia utilizzando un algoritmo altamente esigente in prestazioni. " + +#: Resources/Scripts/Gui/StartupScreen.as:1225 +#: Resources/Scripts/Gui/StartupScreen.as:1225 +msgctxt "StartupScreen" +msgid "Physically Based Lighting" +msgstr "Luce basata sulla fisica" + +#: Resources/Scripts/Gui/StartupScreen.as:1226 +#: Resources/Scripts/Gui/StartupScreen.as:1226 +msgctxt "StartupScreen" +msgid "Uses more accurate approximation techniques to decide the brightness of objects." +msgstr "Utilizza tecniche di ravvicinamento più accurate per decidere la luminosità degli oggetti." + +#: Resources/Scripts/Gui/StartupScreen.as:1233 +#: Resources/Scripts/Gui/StartupScreen.as:1233 +msgctxt "StartupScreen" +msgid "Direct Lights" +msgstr "Luci dirette" + +#: Resources/Scripts/Gui/StartupScreen.as:1234 +#: Resources/Scripts/Gui/StartupScreen.as:1234 +msgctxt "StartupScreen" +msgid "Controls how light encounting a material and atmosphere directly affects its appearance." +msgstr "Controlla come la luce si scontri contro un materiale e l'atmosfera influisca direttamente sulla sua comparsa." + +#: Resources/Scripts/Gui/StartupScreen.as:1244 +#: Resources/Scripts/Gui/StartupScreen.as:1244 +msgctxt "StartupScreen" +msgid "Water Shader|None:Water is rendered in the same way that normal blocks are done.|Level 1:Refraction and the reflected Sun are simulated.|Level 2:Waving water is simulated as well as reflection and refraction.|Level 3:Reflections and refractions are rendered at the highest quality using screen-space techniques." +msgstr "Shader dell'Acqua|Nessuna:L'acqua è renderizzata come gli altri blocchi|Livello 1:simulate Rifrazione e Riflesso Solare|Livello 2:Insieme a rifrazione e riflessione vengono simulate anche le onde|Livello 3:Riflessi e refrazioni sono renderizzate alla massima qualità usando tecniche spaziali dello schermo." + +#: Resources/Scripts/Gui/StartupScreen.as:1251 +#: Resources/Scripts/Gui/StartupScreen.as:1251 +msgctxt "StartupScreen" +msgid "Med" +msgstr "Medio" + +#: Resources/Scripts/Gui/StartupScreen.as:1256 +#: Resources/Scripts/Gui/StartupScreen.as:1256 +msgctxt "StartupScreen" +msgid "Shader Effects" +msgstr "Effetti dello Shader" + +#: Resources/Scripts/Gui/StartupScreen.as:1256 +#: Resources/Scripts/Gui/StartupScreen.as:1256 +msgctxt "StartupScreen" +msgid "Special effects." +msgstr "Effetti speciali." + +#: Resources/Scripts/Gui/StartupScreen.as:1273 +#: Resources/Scripts/Gui/StartupScreen.as:1273 +msgctxt "StartupScreen" +msgid "Fast Mode:Reduces the image resolution to make the rendering faster.|Off|2x|4x" +msgstr "Modalità veloce:Riduce la risoluzione dell'immagine per rendere il rendering più veloce.|Off|2x|4x" + +#: Resources/Scripts/Gui/StartupScreen.as:1486 +#: Resources/Scripts/Gui/StartupScreen.as:1486 +msgctxt "StartupScreen" +msgid "Audio Settings" +msgstr "Impostazioni Audio" + +#: Resources/Scripts/Gui/StartupScreen.as:1495 +#: Resources/Scripts/Gui/StartupScreen.as:1495 +msgctxt "StartupScreen" +msgid "OpenAL" +msgstr "OpenAL" + +#: Resources/Scripts/Gui/StartupScreen.as:1499 +#: Resources/Scripts/Gui/StartupScreen.as:1499 +msgctxt "StartupScreen" +msgid "Uses an OpenAL-capable sound card to process sound. In most cases where there isn't such a sound card, software emulation is used." +msgstr "Utilizza una scheda audio capace di supportare OpenAL per elaborare il suono. Nella maggior parte dei casi in cui non esiste tale scheda sonora, viene utilizzata l'emulazione del software." + +#: Resources/Scripts/Gui/StartupScreen.as:1508 +#: Resources/Scripts/Gui/StartupScreen.as:1508 +msgctxt "StartupScreen" +msgid "YSR" +msgstr "YSR" + +#: Resources/Scripts/Gui/StartupScreen.as:1512 +#: Resources/Scripts/Gui/StartupScreen.as:1512 +msgctxt "StartupScreen" +msgid "YSR is an experimental 3D HDR sound engine optimized for OpenSpades. It features several enhanced features including automatic load control, dynamics compressor, HRTF-based 3D audio, and high quality reverb." +msgstr "YSR è un engine audio 3D HDR sperimentale ottimizzato per OpenSpades. Porta diverse funzionalità migliorate, tra cui il controllo automatico del carico, il compressore dinamico, audio 3D basato su HRTF e riverbi di alta qualità." + +#. ! The name of audio driver that outputs no audio. +#: Resources/Scripts/Gui/StartupScreen.as:1523 +#: Resources/Scripts/Gui/StartupScreen.as:1523 +msgctxt "StartupScreen" +msgid "Null" +msgstr "Nessuno" + +#: Resources/Scripts/Gui/StartupScreen.as:1527 +#: Resources/Scripts/Gui/StartupScreen.as:1527 +msgctxt "StartupScreen" +msgid "Disables audio output." +msgstr "Disabilita l'uscita dell' audio." + +#: Resources/Scripts/Gui/StartupScreen.as:1538 +#: Resources/Scripts/Gui/StartupScreen.as:1562 +#: Resources/Scripts/Gui/StartupScreen.as:1538 +#: Resources/Scripts/Gui/StartupScreen.as:1562 +msgctxt "StartupScreen" +msgid "Polyphonics" +msgstr "Polifonie" + +#: Resources/Scripts/Gui/StartupScreen.as:1539 +#: Resources/Scripts/Gui/StartupScreen.as:1539 +msgctxt "StartupScreen" +msgid "Specifies how many sounds can be played simultaneously. Higher value needs more processing power, so setting this too high might cause an overload (especially with a software emulation)." +msgstr "Specifica quanti suoni possono essere riprodotti all'unisono. Un valore più alto richiede più potere di elaborazione, quindi impostare questo troppo alto potrebbe causare un sovraccarico (specialmente con un emulazione software)." + +#: Resources/Scripts/Gui/StartupScreen.as:1546 +#: Resources/Scripts/Gui/StartupScreen.as:1546 +msgctxt "StartupScreen" +msgid "EAX" +msgstr "EAX" + +#: Resources/Scripts/Gui/StartupScreen.as:1547 +#: Resources/Scripts/Gui/StartupScreen.as:1547 +msgctxt "StartupScreen" +msgid "Enables extended features provided by the OpenAL driver to create more ambience." +msgstr "Abilita le funzionalità estese fornite dal driver OpenAL per creare più ambientzione." + +#: Resources/Scripts/Gui/StartupScreen.as:1563 +#: Resources/Scripts/Gui/StartupScreen.as:1563 +msgctxt "StartupScreen" +msgid "Specifies how many sounds can be played simultaneously. No matter what value is set, YSR might reduce the number of sounds when an overload is detected." +msgstr "Specifica quanti suoni possono essere riprodotti simultaneamente. A prescindere dal valore impostato, lo YSR potrebbe ridurre il numero di suoni quando viene rilevato un sovraccarico." + +#: Resources/Scripts/Gui/StartupScreen.as:1623 +#: Resources/Scripts/Gui/StartupScreen.as:1623 +msgctxt "StartupScreen" +msgid "Language" +msgstr "Lingua" + +#: Resources/Scripts/Gui/StartupScreen.as:1635 +#: Resources/Scripts/Gui/StartupScreen.as:1635 +msgctxt "StartupScreen" +msgid "Tools" +msgstr "Strumenti" + +#: Resources/Scripts/Gui/StartupScreen.as:1638 +#: Resources/Scripts/Gui/StartupScreen.as:1638 +msgctxt "StartupScreen" +msgid "Reset All Settings" +msgstr "Reimposta tutte le opzioni" + +#: Resources/Scripts/Gui/StartupScreen.as:1647 +#: Resources/Scripts/Gui/StartupScreen.as:1647 +msgctxt "StartupScreen" +msgid "Open Config Folder in Explorer" +msgstr "Apri cartella Config in Explorer" + +#: Resources/Scripts/Gui/StartupScreen.as:1649 +#: Resources/Scripts/Gui/StartupScreen.as:1649 +msgctxt "StartupScreen" +msgid "Reveal Config Folder in Finder" +msgstr "Rivela la cartella Config nel Finder" + +#: Resources/Scripts/Gui/StartupScreen.as:1651 +#: Resources/Scripts/Gui/StartupScreen.as:1651 +msgctxt "StartupScreen" +msgid "Browse Config Folder" +msgstr "Sfoglia cartella Configurazioni" + +#: Resources/Scripts/Gui/StartupScreen.as:1668 +#: Resources/Scripts/Gui/StartupScreen.as:1668 +msgctxt "StartupScreen" +msgid "An unknown error has occurred while opening the config directory." +msgstr "Si è verificato un errore sconosciuto durante l'apertura della cartella di configurazione." + +#: Resources/Scripts/Gui/StartupScreen.as:1674 +#: Resources/Scripts/Gui/StartupScreen.as:1674 +msgctxt "StartupScreen" +msgid "Are you sure to reset all settings? They include (but are not limited to):" +msgstr "Sei sicuro di voler resettare tutte le impostazioni? includono (e non solo):" + +#: Resources/Scripts/Gui/StartupScreen.as:1675 +#: Resources/Scripts/Gui/StartupScreen.as:1675 +msgctxt "StartupScreen" +msgid "All graphics/audio settings" +msgstr "Tutte le impostazioni grafiche/audio" + +#: Resources/Scripts/Gui/StartupScreen.as:1676 +#: Resources/Scripts/Gui/StartupScreen.as:1676 +msgctxt "StartupScreen" +msgid "All key bindings" +msgstr "Tutte le combinazioni di tasti" + +#: Resources/Scripts/Gui/StartupScreen.as:1677 +#: Resources/Scripts/Gui/StartupScreen.as:1677 +msgctxt "StartupScreen" +msgid "Your player name" +msgstr "Il tuo nome da Giocatore" + +#: Resources/Scripts/Gui/StartupScreen.as:1678 +#: Resources/Scripts/Gui/StartupScreen.as:1678 +msgctxt "StartupScreen" +msgid "Other advanced settings only accessible through '{0}' tab and in-game commands" +msgstr "Altre impostazioni avanzate sono accessibili solo tramite '{0}' tab e comandi in-game" + +#: Resources/Scripts/Gui/StartupScreen.as:1748 +#: Resources/Scripts/Gui/StartupScreen.as:1748 +msgctxt "StartupScreen" +msgid "Unknown ({0})" +msgstr "Sconosciuto ({0})" + +#: Resources/Scripts/Gui/StartupScreen.as:1750 +#: Resources/Scripts/Gui/StartupScreen.as:1764 +#: Resources/Scripts/Gui/StartupScreen.as:1750 +#: Resources/Scripts/Gui/StartupScreen.as:1764 +msgctxt "StartupScreen" +msgid "System default" +msgstr "Impostazione predefinita del sistema" + +#: Resources/Scripts/Gui/StartupScreen.as:1813 +#: Resources/Scripts/Gui/StartupScreen.as:1813 +msgctxt "StartupScreen" +msgid "Copy to Clipboard" +msgstr "Copia negli Appunti" + +#: Resources/Scripts/Gui/StartupScreen.as:1849 +#: Resources/Scripts/Gui/StartupScreen.as:1849 +msgctxt "StartupScreen" +msgid "Advanced Settings" +msgstr "Impostazioni avanzate" + +#: Resources/Scripts/Gui/StartupScreen.as:1858 +#: Resources/Scripts/Gui/StartupScreen.as:1858 +msgctxt "StartupScreen" +msgid "Filter" +msgstr "Filtro" + +#: Resources/Scripts/Gui/UpdateCheckView.as:40 +#: Resources/Scripts/Gui/UpdateCheckView.as:40 +msgctxt "UpdateCheck" +msgid "Enable" +msgstr "Attiva" + +#: Resources/Scripts/Gui/UpdateCheckView.as:47 +#: Resources/Scripts/Gui/UpdateCheckView.as:47 +msgctxt "UpdateCheck" +msgid "Show details..." +msgstr "Visualizza i dettagli..." + +#: Resources/Scripts/Gui/UpdateCheckView.as:102 +#: Resources/Scripts/Gui/UpdateCheckView.as:102 +msgctxt "UpdateCheck" +msgid "Version {0} is available! (You currently have {1})" +msgstr "Versione {0} è disponibile! (Al momento hai {1})" + +#: Resources/Scripts/Gui/UpdateCheckView.as:105 +#: Resources/Scripts/Gui/UpdateCheckView.as:105 +msgctxt "UpdateCheck" +msgid "You're using the latest version of OpenSpades. ({0})" +msgstr "Stai utilizzando la versione più recente di OpenSpades. ({0})" + +#: Resources/Scripts/Gui/UpdateCheckView.as:110 +#: Resources/Scripts/Gui/UpdateCheckView.as:110 +msgctxt "UpdateCheck" +msgid "Checking for updates..." +msgstr "Controllo aggiornamenti..." + +#: Resources/Scripts/Gui/UpdateCheckView.as:113 +#: Resources/Scripts/Gui/UpdateCheckView.as:113 +msgctxt "UpdateCheck" +msgid "Failed to check for updates." +msgstr "Impossibile controllare gli aggiornamenti." + +#: Resources/Scripts/Gui/UpdateCheckView.as:116 +#: Resources/Scripts/Gui/UpdateCheckView.as:116 +msgctxt "UpdateCheck" +msgid "Automatic update check is not enabled." +msgstr "Controllo aggiornamenti automatico non abilitato." + +#: Resources/Scripts/Gui/UpdateCheckView.as:119 +#: Resources/Scripts/Gui/UpdateCheckView.as:119 +msgctxt "UpdateCheck" +msgid "Automatic update check is not available." +msgstr "Controllo aggiornamenti automatico non disponibile." + +#: Sources/Client/Client_NetHandler.cpp:258 +#: Sources/Client/Client_NetHandler.cpp:271 +msgctxt "Client" +msgid "Spectator" +msgstr "Spettatore" + +#: Sources/Client/Client_Draw.cpp:99 +msgctxt "Client" +msgid "Unbound" +msgstr "Non collegato" + +#: Sources/Client/Client_Draw.cpp:655 +msgctxt "Client" +msgid "[{0}] Cycle camera mode" +msgstr "[{0}] Modalità ciclo fotocamera" + +#: Sources/Client/Client_Draw.cpp:657 +msgctxt "Client" +msgid "[{0}/{1}] Next/previous player" +msgstr "[{0}/{1}] Prossimo/precedente giocatore" + +#: Sources/Client/Client_Draw.cpp:661 +msgctxt "Client" +msgid "[{0}] Unfollow" +msgstr "[{0}] Non seguire" + +#: Sources/Client/Client_Draw.cpp:664 +msgctxt "Client" +msgid "[{0}/{1}] Follow a player" +msgstr "[{0}/{1}] Seguire un giocatore" + +#: Sources/Client/Client_Draw.cpp:669 +msgctxt "Client" +msgid "[{0}/{1}] Go up/down" +msgstr "[{0}/{1}] Vai su/giù" + diff --git a/Resources/Locales/ja/openspades.po b/Resources/Locales/ja/openspades.po index c0de9840..9d69b791 100644 --- a/Resources/Locales/ja/openspades.po +++ b/Resources/Locales/ja/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2017-12-31 04:46-0500\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Japanese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/ko/openspades.po b/Resources/Locales/ko/openspades.po index c9960a49..31d4cbbb 100644 --- a/Resources/Locales/ko/openspades.po +++ b/Resources/Locales/ko/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2017-12-31 04:46-0500\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Korean\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/lt.json b/Resources/Locales/lt.json new file mode 100644 index 00000000..78695d15 --- /dev/null +++ b/Resources/Locales/lt.json @@ -0,0 +1,4 @@ +{ + "descriptionEnglish": "Lithuanian", + "description": "lietuvių kalba" +} diff --git a/Resources/Locales/lt/openspades.po b/Resources/Locales/lt/openspades.po new file mode 100644 index 00000000..d7dc1973 --- /dev/null +++ b/Resources/Locales/lt/openspades.po @@ -0,0 +1,1799 @@ +msgid "" +msgstr "" +"Project-Id-Version: openspades\n" +"Report-Msgid-Bugs-To: i at yvt.jp\n" +"POT-Creation-Date: 2016-12-25 23:47-0200\n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.7.1\n" +"X-Poedit-SourceCharset: UTF-8\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && (n%100>19 || n%100<11) ? 0 : (n%10>=2 && n%10<=9) && (n%100>19 || n%100<11) ? 1 : n%1!=0 ? 2: 3);\n" +"X-Crowdin-Project: openspades\n" +"X-Crowdin-Language: lt\n" +"X-Crowdin-File: openspades.pot\n" +"Language: lt_LT\n" + +#: Sources/Client/Client.cpp:585 Sources/Client/Client.cpp:586 +msgctxt "Client" +msgid "Map saved: {0}" +msgstr "Žemėlapis išsaugotas: {0}" + +#: Sources/Client/Client.cpp:589 Sources/Client/Client.cpp:595 +#: Sources/Client/Client.cpp:590 Sources/Client/Client.cpp:596 +msgctxt "Client" +msgid "Saving map failed: " +msgstr "Nepavyko išsaugoti žemėlapio: " + +#. ! Prefix added to global chat messages. +#. ! +#. ! Example: [Global] playername (Red) blah blah +#. ! +#. ! Crowdin warns that this string shouldn't be translated, +#. ! but it actually can be. +#. ! The extra whitespace is not a typo. +#: Sources/Client/Client.cpp:633 Sources/Client/Client.cpp:634 +msgctxt "Client" +msgid "[Global] " +msgstr "[Globalus] " + +#: Sources/Client/Client_Draw.cpp:119 Sources/Client/Client_Draw.cpp:135 +msgctxt "Client" +msgid "Sceneshot saved: {0}" +msgstr "Scenos kopija išsaugota: {0}" + +#: Sources/Client/Client_Draw.cpp:121 Sources/Client/Client_Draw.cpp:137 +msgctxt "Client" +msgid "Screenshot saved: {0}" +msgstr "Ekrano kopija išsaugota: {0}" + +#: Sources/Client/Client_Draw.cpp:125 Sources/Client/Client_Draw.cpp:131 +#: Sources/Client/Client_Draw.cpp:141 Sources/Client/Client_Draw.cpp:147 +msgctxt "Client" +msgid "Screenshot failed: " +msgstr "Nepavyko nukopijuoti ekrano: " + +#: Sources/Client/Client_Draw.cpp:198 Sources/Client/Client_Draw.cpp:214 +msgctxt "Client" +msgid "NOW LOADING" +msgstr "DABAR KRAUNAMA" + +#: Sources/Client/Client_Draw.cpp:220 Sources/Client/Client_Draw.cpp:236 +msgctxt "Client" +msgid "Disconnecting..." +msgstr "Atsijungiama..." + +#: Sources/Client/Client_Draw.cpp:523 Sources/Client/Client_Draw.cpp:548 +msgctxt "Client" +msgid "Out of Block" +msgstr "Nebėra Bloko" + +#: Sources/Client/Client_Draw.cpp:528 Sources/Client/Client_Draw.cpp:553 +msgctxt "Client" +msgid "Out of Grenade" +msgstr "Nebėra Granatos" + +#: Sources/Client/Client_Draw.cpp:534 Sources/Client/Client_Draw.cpp:559 +msgctxt "Client" +msgid "Reloading" +msgstr "Užtaisinėjama" + +#: Sources/Client/Client_Draw.cpp:536 Sources/Client/Client_Input.cpp:439 +#: Sources/Client/Client_Draw.cpp:561 Sources/Client/Client_Input.cpp:494 +msgctxt "Client" +msgid "Out of Ammo" +msgstr "Nebėra Kulkų" + +#: Sources/Client/Client_Draw.cpp:539 Sources/Client/Client_Draw.cpp:564 +msgctxt "Client" +msgid "Press [{0}] to Reload" +msgstr "Spausti [{0}], kad Užtaisyti" + +#: Sources/Client/Client_Draw.cpp:584 Sources/Client/Client_Draw.cpp:608 +msgctxt "Client" +msgid "You will respawn in: {0}" +msgstr "Atsirasi po: {0}" + +#: Sources/Client/Client_Draw.cpp:586 Sources/Client/Client_Draw.cpp:610 +msgctxt "Client" +msgid "Waiting for respawn" +msgstr "Laukiama atsiradimo" + +#: Sources/Client/Client_Draw.cpp:764 Sources/Client/Client_Draw.cpp:646 +msgctxt "Client" +msgid "Following {0}" +msgstr "Sekama {0}" + +#: Sources/Client/Client_Input.cpp:427 Sources/Client/Client_Input.cpp:482 +msgctxt "Client" +msgid "Out of Blocks" +msgstr "Nebėra Blokų" + +#: Sources/Client/Client_Input.cpp:451 Sources/Client/Client_Input.cpp:506 +msgctxt "Client" +msgid "Out of Grenades" +msgstr "Nebėra Granatų" + +#: Sources/Client/Client_NetHandler.cpp:89 +#: Sources/Client/Client_NetHandler.cpp:90 +msgctxt "Client" +msgid "{0} captured {1}'s territory" +msgstr "{0} užgrobė {1}'ų teritoriją" + +#: Sources/Client/Client_NetHandler.cpp:91 +#: Sources/Client/Client_NetHandler.cpp:92 +msgctxt "Client" +msgid "{0} captured an neutral territory" +msgstr "{0} užgrobė neutralią teritoriją" + +#: Sources/Client/Client_NetHandler.cpp:99 +#: Sources/Client/Client_NetHandler.cpp:100 +msgctxt "Client" +msgid "{0} captured {1}'s Territory" +msgstr "{0} užgrobė {1}'ų Teritoriją" + +#: Sources/Client/Client_NetHandler.cpp:101 +#: Sources/Client/Client_NetHandler.cpp:102 +msgctxt "Client" +msgid "{0} captured an Neutral Territory" +msgstr "{0} užgrobė Neutralią Teritoriją" + +#: Sources/Client/Client_NetHandler.cpp:127 +#: Sources/Client/Client_NetHandler.cpp:128 +msgctxt "Client" +msgid "{0} captured {1}'s intel" +msgstr "{0} pagrobė {1}'ų informaciją" + +#: Sources/Client/Client_NetHandler.cpp:134 +#: Sources/Client/Client_NetHandler.cpp:135 +msgctxt "Client" +msgid "{0} captured {1}'s Intel." +msgstr "{0} pagrobė {1}'ų Informaciją." + +#: Sources/Client/Client_NetHandler.cpp:158 +#: Sources/Client/Client_NetHandler.cpp:159 +msgctxt "Client" +msgid "{0} picked up {1}'s intel" +msgstr "{0} paemė {1}'ų informaciją" + +#: Sources/Client/Client_NetHandler.cpp:165 +#: Sources/Client/Client_NetHandler.cpp:166 +msgctxt "Client" +msgid "{0} picked up {1}'s Intel." +msgstr "{0} paemė {1}'ų Informaciją." + +#: Sources/Client/Client_NetHandler.cpp:183 +#: Sources/Client/Client_NetHandler.cpp:184 +msgctxt "Client" +msgid "{0} dropped {1}'s intel" +msgstr "{0} pametė {1}'ų informaciją" + +#: Sources/Client/Client_NetHandler.cpp:190 +#: Sources/Client/Client_NetHandler.cpp:191 +msgctxt "Client" +msgid "{0} dropped {1}'s Intel" +msgstr "{0} pametė {1}'ų Informaciją" + +#: Sources/Client/Client_NetHandler.cpp:237 +#: Sources/Client/Client_NetHandler.cpp:243 +#: Sources/Client/Client_NetHandler.cpp:249 +#: Sources/Client/Client_NetHandler.cpp:255 +msgctxt "Client" +msgid "Player {0} has left" +msgstr "Žaidėjas(-a) {0} išėjo" + +#: Sources/Client/Client_NetHandler.cpp:257 +#: Sources/Client/Client_NetHandler.cpp:264 +#: Sources/Client/Client_NetHandler.cpp:276 +#: Sources/Client/Client_NetHandler.cpp:282 +msgctxt "Client" +msgid "{0} joined {1} team" +msgstr "{0} prisijungė prie komandos {1}" + +#: Sources/Client/Client_NetHandler.cpp:294 +#: Sources/Client/Client_NetHandler.cpp:317 +msgctxt "Client" +msgid "{0} wins!" +msgstr "{0} laimi!" + +#: Sources/Client/Client_NetHandler.cpp:298 +#: Sources/Client/Client_NetHandler.cpp:321 +msgctxt "Client" +msgid "{0} Wins!" +msgstr "{0} Laimi!" + +#: Sources/Client/Client_Update.cpp:479 Sources/Client/Client_Update.cpp:505 +msgctxt "Client" +msgid "{0} block" +msgid_plural "{0} blocks" +msgstr[0] "{0} blokas" +msgstr[1] "{0} blokai" +msgstr[2] "{0} blokai" +msgstr[3] "{0} blokai" + +#: Sources/Client/Client_Update.cpp:486 Sources/Client/Client_Update.cpp:512 +msgctxt "Client" +msgid "-- blocks" +msgstr "-- blokai" + +#: Sources/Client/Client_Update.cpp:842 Sources/Client/LimboView.cpp:68 +#: Sources/Client/Client_Update.cpp:868 Sources/Client/LimboView.cpp:68 +msgctxt "Client" +msgid "Rifle" +msgstr "Graižtvinis Šautuvas" + +#: Sources/Client/Client_Update.cpp:843 Sources/Client/LimboView.cpp:71 +#: Sources/Client/Client_Update.cpp:869 Sources/Client/LimboView.cpp:71 +msgctxt "Client" +msgid "SMG" +msgstr "Automatinis Pistoletas" + +#: Sources/Client/Client_Update.cpp:844 Sources/Client/LimboView.cpp:74 +#: Sources/Client/Client_Update.cpp:870 Sources/Client/LimboView.cpp:74 +msgctxt "Client" +msgid "Shotgun" +msgstr "Lygiavamzdis Šautuvas" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:849 Sources/Client/Client_Update.cpp:875 +msgctxt "Client" +msgid "Fall" +msgstr "Krytis" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:853 Sources/Client/Client_Update.cpp:879 +msgctxt "Client" +msgid "Melee" +msgstr "Muštynės" + +#: Sources/Client/Client_Update.cpp:856 Sources/Client/Client_Update.cpp:882 +msgctxt "Client" +msgid "Grenade" +msgstr "Granata" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:860 Sources/Client/Client_Update.cpp:886 +msgctxt "Client" +msgid "Headshot" +msgstr "Šūvis į Galvą" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:864 Sources/Client/Client_Update.cpp:890 +msgctxt "Client" +msgid "Team Change" +msgstr "Komandos Pakeitimas" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:868 Sources/Client/Client_Update.cpp:894 +msgctxt "Client" +msgid "Weapon Change" +msgstr "Ginklo Pakeitimas" + +#: Sources/Client/Client_Update.cpp:907 Sources/Client/Client_Update.cpp:933 +msgctxt "Client" +msgid "You have killed {0}" +msgstr "Tu užmušei {0}" + +#: Sources/Client/Client_Update.cpp:909 Sources/Client/Client_Update.cpp:935 +msgctxt "Client" +msgid "You were killed by {0}" +msgstr "Tave užmušė {0}" + +#: Sources/Client/Client_Update.cpp:1225 Sources/Client/Client_Update.cpp:1260 +msgctxt "Client" +msgid "Insufficient blocks." +msgstr "Nepakanka blokų." + +#: Sources/Client/Client_Update.cpp:1228 Sources/Client/Client_Update.cpp:1263 +msgctxt "Client" +msgid "You cannot place a block there." +msgstr "Negalima ten padėti bloko." + +#: Sources/Client/LimboView.cpp:79 Sources/Client/LimboView.cpp:79 +msgctxt "Client" +msgid "Spawn" +msgstr "Atsirasti" + +#: Sources/Client/LimboView.cpp:183 Sources/Client/LimboView.cpp:183 +msgctxt "Client" +msgid "Select Team:" +msgstr "Pasirink Komandą:" + +#: Sources/Client/LimboView.cpp:191 Sources/Client/LimboView.cpp:191 +msgctxt "Client" +msgid "Select Weapon:" +msgstr "Pasirink Ginklą:" + +#: Sources/Client/NetClient.cpp:422 Sources/Client/NetClient.cpp:425 +msgctxt "NetClient" +msgid "Connecting to the server" +msgstr "Prisijungiama prie serverio" + +#: Sources/Client/NetClient.cpp:434 Sources/Client/NetClient.cpp:437 +msgctxt "NetClient" +msgid "Not connected" +msgstr "Neprisijungta" + +#: Sources/Client/NetClient.cpp:498 Sources/Client/NetClient.cpp:516 +msgctxt "NetClient" +msgid "Awaiting for state" +msgstr "Laukiama būsenos" + +#: Sources/Client/NetClient.cpp:508 Sources/Client/NetClient.cpp:1277 +#: Sources/Client/NetClient.cpp:526 Sources/Client/NetClient.cpp:1346 +msgctxt "NetClient" +msgid "Loading snapshot" +msgstr "Kraunamas momentinis kadras" + +#: Sources/Client/NetClient.cpp:523 Sources/Client/NetClient.cpp:541 +msgctxt "NetClient" +msgid "Loading snapshot ({0}/{1})" +msgstr "Kraunamas momentinis kadras ({0}/{1})" + +#: Sources/Client/NetClient.cpp:528 Sources/Client/NetClient.cpp:562 +#: Sources/Client/NetClient.cpp:546 Sources/Client/NetClient.cpp:609 +msgctxt "NetClient" +msgid "Connected" +msgstr "Prisijungta" + +#: Sources/Client/NetClient.cpp:540 Sources/Client/NetClient.cpp:575 +#: Sources/Client/NetClient.cpp:627 Sources/Client/NetClient.cpp:558 +#: Sources/Client/NetClient.cpp:622 Sources/Client/NetClient.cpp:674 +msgctxt "NetClient" +msgid "Still loading..." +msgstr "Dar kraunama..." + +#: Sources/Client/NetClient.cpp:543 Sources/Client/NetClient.cpp:549 +#: Sources/Client/NetClient.cpp:579 Sources/Client/NetClient.cpp:584 +#: Sources/Client/NetClient.cpp:631 Sources/Client/NetClient.cpp:636 +#: Sources/Client/NetClient.cpp:561 Sources/Client/NetClient.cpp:567 +#: Sources/Client/NetClient.cpp:626 Sources/Client/NetClient.cpp:631 +#: Sources/Client/NetClient.cpp:678 Sources/Client/NetClient.cpp:683 +msgctxt "NetClient" +msgid "Error" +msgstr "Klaida" + +#: Sources/Client/NetClient.cpp:702 Sources/Client/NetClient.cpp:749 +msgctxt "NetClient" +msgid "You are banned from this server." +msgstr "Esate uždraustas šiame serveryje." + +#: Sources/Client/NetClient.cpp:707 Sources/Client/NetClient.cpp:710 +#: Sources/Client/NetClient.cpp:754 Sources/Client/NetClient.cpp:757 +msgctxt "NetClient" +msgid "You were kicked from this server." +msgstr "Buvote išmestas iš šio serverio." + +#: Sources/Client/NetClient.cpp:708 Sources/Client/NetClient.cpp:755 +msgctxt "NetClient" +msgid "Incompatible client protocol version." +msgstr "Nesuderinama vartotojo protokolo versija." + +#: Sources/Client/NetClient.cpp:709 Sources/Client/NetClient.cpp:756 +msgctxt "NetClient" +msgid "Server full" +msgstr "Serveris pilnas" + +#: Sources/Client/NetClient.cpp:711 Sources/Client/NetClient.cpp:758 +msgctxt "NetClient" +msgid "Unknown Reason" +msgstr "Nežinoma Priežastis" + +#: Sources/Client/ScoreboardView.cpp:63 Sources/Client/ScoreboardView.cpp:345 +#: Sources/Client/ScoreboardView.cpp:63 Sources/Client/ScoreboardView.cpp:345 +msgctxt "Client" +msgid "Spectator{1}" +msgid_plural "Spectators{1}" +msgstr[0] "Žiūrovas{1}" +msgstr[1] "Žiūrovai{1}" +msgstr[2] "Žiūrovai{1}" +msgstr[3] "Žiūrovai{1}" + +#: Sources/Client/TCProgressView.cpp:151 Sources/Client/TCProgressView.cpp:151 +msgctxt "Client" +msgid "Neutral Territory" +msgstr "Neutrali Teritorija" + +#: Sources/Client/TCProgressView.cpp:154 Sources/Client/TCProgressView.cpp:154 +msgctxt "Client" +msgid "{0}'s Territory" +msgstr "{0}'ų Teritorija" + +#: Sources/Gui/Main.cpp:548 Sources/Gui/Main.cpp:577 +msgctxt "Main" +msgid "Localization System Loaded" +msgstr "Vertimo Sistema Pakrauta" + +#: Sources/Gui/Main.cpp:604 Sources/Gui/Runner.cpp:56 Sources/Gui/Main.cpp:633 +#: Sources/Gui/Runner.cpp:56 +msgctxt "Main" +msgid "A serious error caused OpenSpades to stop working:\n\n" +"{0}\n\n" +"See SystemMessages.log for more details." +msgstr "Dėl rimtos klaidos OpenSpades nustojo veikti:\n\n" +"{0}\n\n" +"Žiūrėkite SystemMessages.log dėl papildomų detalių." + +#: Sources/Gui/Main.cpp:612 Sources/Gui/Runner.cpp:62 Sources/Gui/Main.cpp:641 +#: Sources/Gui/Runner.cpp:62 +msgctxt "Main" +msgid "OpenSpades Fatal Error" +msgstr "Openspades Kritinė Klaida" + +#: Sources/Gui/MainScreen.cpp:225 Sources/Gui/MainScreen.cpp:220 +msgctxt "MainScreen" +msgid "NOW LOADING" +msgstr "DABAR KRAUNAMA" + +#: Resources/Scripts/Gui/ClientUI.as:198 Resources/Scripts/Gui/ClientUI.as:198 +msgctxt "Client" +msgid "Back to Game" +msgstr "Grįžti į Žaidimą" + +#: Resources/Scripts/Gui/ClientUI.as:205 Resources/Scripts/Gui/ClientUI.as:205 +msgctxt "Client" +msgid "Chat Log" +msgstr "Kalbėjimosi Langas" + +#: Resources/Scripts/Gui/ClientUI.as:212 Resources/Scripts/Gui/ClientUI.as:212 +msgctxt "Client" +msgid "Setup" +msgstr "Nustatymai" + +#: Resources/Scripts/Gui/ClientUI.as:219 Resources/Scripts/Gui/ClientUI.as:219 +msgctxt "Client" +msgid "Disconnect" +msgstr "Atsijungti" + +#: Resources/Scripts/Gui/ClientUI.as:484 Resources/Scripts/Gui/ClientUI.as:484 +msgctxt "Client" +msgid "Say" +msgstr "Pasakyti" + +#: Resources/Scripts/Gui/ClientUI.as:492 Resources/Scripts/Gui/ClientUI.as:492 +msgctxt "Client" +msgid "Cancel" +msgstr "Atšaukti" + +#: Resources/Scripts/Gui/ClientUI.as:500 Resources/Scripts/Gui/ClientUI.as:500 +msgctxt "Client" +msgid "Chat Text" +msgstr "Kalbėjimo Tekstas" + +#: Resources/Scripts/Gui/ClientUI.as:508 Resources/Scripts/Gui/ClientUI.as:508 +msgctxt "Client" +msgid "Global" +msgstr "Globalus" + +#: Resources/Scripts/Gui/ClientUI.as:517 Resources/Scripts/Gui/ClientUI.as:517 +msgctxt "Client" +msgid "Team" +msgstr "Komanda" + +#: Resources/Scripts/Gui/ClientUI.as:661 Resources/Scripts/Gui/ClientUI.as:662 +msgctxt "Client" +msgid "Close" +msgstr "Uždaryti" + +#: Resources/Scripts/Gui/ClientUI.as:671 Resources/Scripts/Gui/ClientUI.as:672 +msgctxt "Client" +msgid "Say Global" +msgstr "Sakyti Globaliai" + +#: Resources/Scripts/Gui/ClientUI.as:682 Resources/Scripts/Gui/ClientUI.as:683 +msgctxt "Client" +msgid "Say Team" +msgstr "Sakyti Komandai" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:58 +#: Resources/Scripts/Gui/CreateProfileScreen.as:58 +msgctxt "CreateProfileScreen" +msgid "OK" +msgstr "Gerai" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:70 +#: Resources/Scripts/Gui/CreateProfileScreen.as:70 +msgctxt "CreateProfileScreen" +msgid "Decide later" +msgstr "Nuspręsti vėliau" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:80 +#: Resources/Scripts/Gui/CreateProfileScreen.as:80 +msgctxt "CreateProfileScreen" +msgid "Welcome to OpenSpades" +msgstr "Sveiki atvykę į OpenSpades" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:88 +#: Resources/Scripts/Gui/CreateProfileScreen.as:88 +msgctxt "CreateProfileScreen" +msgid "Choose a player name:" +msgstr "Pasirinkite žaidėjo vardą:" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:96 +#: Resources/Scripts/Gui/CreateProfileScreen.as:96 +msgctxt "CreateProfileScreen" +msgid "Player name" +msgstr "Žaidėjo vardas" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:104 +#: Resources/Scripts/Gui/CreateProfileScreen.as:104 +msgctxt "CreateProfileScreen" +msgid "You can change it later in the Setup dialog." +msgstr "Galėsite pakeisti vėliau Nustatymų skiltyje." + +#: Resources/Scripts/Gui/MainScreen.as:376 +#: Resources/Scripts/Gui/MainScreen.as:376 +msgctxt "MainScreen" +msgid "Connect" +msgstr "Prisijungti" + +#: Resources/Scripts/Gui/MainScreen.as:384 +#: Resources/Scripts/Gui/MainScreen.as:384 +msgctxt "MainScreen" +msgid "Quick Connect" +msgstr "Greitai Prisijungti" + +#: Resources/Scripts/Gui/MainScreen.as:393 +#: Resources/Scripts/Gui/MainScreen.as:447 +#: Resources/Scripts/Gui/MainScreen.as:393 +#: Resources/Scripts/Gui/MainScreen.as:447 +msgctxt "MainScreen" +msgid "0.75" +msgstr "0.75" + +#: Resources/Scripts/Gui/MainScreen.as:403 +#: Resources/Scripts/Gui/MainScreen.as:456 +#: Resources/Scripts/Gui/MainScreen.as:403 +#: Resources/Scripts/Gui/MainScreen.as:456 +msgctxt "MainScreen" +msgid "0.76" +msgstr "0.76" + +#: Resources/Scripts/Gui/MainScreen.as:411 +#: Resources/Scripts/Gui/MainScreen.as:411 +msgctxt "MainScreen" +msgid "Quit" +msgstr "Išeiti" + +#: Resources/Scripts/Gui/MainScreen.as:418 +#: Resources/Scripts/Gui/MainScreen.as:418 +msgctxt "MainScreen" +msgid "Credits" +msgstr "Padėkos" + +#: Resources/Scripts/Gui/MainScreen.as:425 +#: Resources/Scripts/Gui/MainScreen.as:425 +msgctxt "MainScreen" +msgid "Setup" +msgstr "Nustatymai" + +#: Resources/Scripts/Gui/MainScreen.as:438 +#: Resources/Scripts/Gui/MainScreen.as:482 +#: Resources/Scripts/Gui/MainScreen.as:438 +#: Resources/Scripts/Gui/MainScreen.as:482 +msgctxt "MainScreen" +msgid "Filter" +msgstr "Filtras" + +#: Resources/Scripts/Gui/MainScreen.as:465 +#: Resources/Scripts/Gui/MainScreen.as:465 +msgctxt "MainScreen" +msgid "Empty" +msgstr "Tuščia" + +#: Resources/Scripts/Gui/MainScreen.as:474 +#: Resources/Scripts/Gui/MainScreen.as:474 +msgctxt "MainScreen" +msgid "Not Full" +msgstr "Nepilna" + +#: Resources/Scripts/Gui/MainScreen.as:494 +#: Resources/Scripts/Gui/MainScreen.as:494 +msgctxt "MainScreen" +msgid "Server Name" +msgstr "Serverio Pavadinimas" + +#: Resources/Scripts/Gui/MainScreen.as:501 +#: Resources/Scripts/Gui/MainScreen.as:501 +msgctxt "MainScreen" +msgid "Players" +msgstr "Žaidėjai" + +#: Resources/Scripts/Gui/MainScreen.as:508 +#: Resources/Scripts/Gui/MainScreen.as:508 +msgctxt "MainScreen" +msgid "Map Name" +msgstr "Lauko Pavadinimas" + +#: Resources/Scripts/Gui/MainScreen.as:515 +#: Resources/Scripts/Gui/MainScreen.as:515 +msgctxt "MainScreen" +msgid "Game Mode" +msgstr "Žaidimo Tipas" + +#: Resources/Scripts/Gui/MainScreen.as:522 +#: Resources/Scripts/Gui/MainScreen.as:522 +msgctxt "MainScreen" +msgid "Ver." +msgstr "Ver." + +#: Resources/Scripts/Gui/MainScreen.as:529 +#: Resources/Scripts/Gui/MainScreen.as:529 +msgctxt "MainScreen" +msgid "Loc." +msgstr "Vieta" + +#: Resources/Scripts/Gui/MainScreen.as:787 +#: Resources/Scripts/Gui/MainScreen.as:787 +msgctxt "MainScreen" +msgid "You were disconnected from the server because of the following reason:\n\n" +"{0}" +msgstr "Buvote atjungtas nuo serverio dėl pastarosios priežasties:\n\n" +"{0}" + +#: Resources/Scripts/Gui/MainScreen.as:807 +#: Resources/Scripts/Gui/MainScreen.as:807 +msgctxt "MainScreen" +msgid "Loading..." +msgstr "Kraunama..." + +#: Resources/Scripts/Gui/MainScreen.as:825 +#: Resources/Scripts/Gui/MainScreen.as:825 +msgctxt "MainScreen" +msgid "Failed to fetch the server list." +msgstr "Nepavyko pagriebti serverių sąrašo." + +#: Resources/Scripts/Gui/MessageBox.as:130 +#: Resources/Scripts/Gui/MessageBox.as:144 +#: Resources/Scripts/Gui/MessageBox.as:130 +#: Resources/Scripts/Gui/MessageBox.as:144 +msgctxt "MessageBox" +msgid "OK" +msgstr "Gerai" + +#: Resources/Scripts/Gui/MessageBox.as:144 +#: Resources/Scripts/Gui/MessageBox.as:144 +msgctxt "MessageBox" +msgid "Cancel" +msgstr "Atšaukti" + +#: Resources/Scripts/Gui/Preferences.as:60 +#: Resources/Scripts/Gui/Preferences.as:60 +msgctxt "Preferences" +msgid "Game Options" +msgstr "Žaidimo Parinktys" + +#: Resources/Scripts/Gui/Preferences.as:61 +#: Resources/Scripts/Gui/Preferences.as:61 +msgctxt "Preferences" +msgid "Controls" +msgstr "Valdymas" + +#: Resources/Scripts/Gui/Preferences.as:62 +#: Resources/Scripts/Gui/Preferences.as:663 +#: Resources/Scripts/Gui/Preferences.as:708 +#: Resources/Scripts/Gui/Preferences.as:62 +#: Resources/Scripts/Gui/Preferences.as:663 +#: Resources/Scripts/Gui/Preferences.as:708 +msgctxt "Preferences" +msgid "Misc" +msgstr "Įvairūs" + +#: Resources/Scripts/Gui/Preferences.as:66 +#: Resources/Scripts/Gui/Preferences.as:66 +msgctxt "Preferences" +msgid "Back" +msgstr "Atgal" + +#: Resources/Scripts/Gui/Preferences.as:407 +#: Resources/Scripts/Gui/Preferences.as:407 +msgctxt "Preferences" +msgid "Press Key to Bind or [Escape] to Cancel..." +msgstr "Spauskite Klavišą, kad priskirti, arba [Escape], kad Atšaukti..." + +#: Resources/Scripts/Gui/Preferences.as:418 +#: Resources/Scripts/Gui/Preferences.as:418 +msgctxt "Preferences" +msgid "Space" +msgstr "Tarpas" + +#: Resources/Scripts/Gui/Preferences.as:420 +#: Resources/Scripts/Gui/Preferences.as:420 +msgctxt "Preferences" +msgid "Unbound" +msgstr "Nepriskirta" + +#: Resources/Scripts/Gui/Preferences.as:423 +#: Resources/Scripts/Gui/Preferences.as:423 +msgctxt "Preferences" +msgid "Shift" +msgstr "Shift" + +#: Resources/Scripts/Gui/Preferences.as:425 +#: Resources/Scripts/Gui/Preferences.as:425 +msgctxt "Preferences" +msgid "Control" +msgstr "Ctrl" + +#: Resources/Scripts/Gui/Preferences.as:427 +#: Resources/Scripts/Gui/Preferences.as:427 +msgctxt "Preferences" +msgid "Meta" +msgstr "Meta" + +#: Resources/Scripts/Gui/Preferences.as:429 +#: Resources/Scripts/Gui/Preferences.as:429 +msgctxt "Preferences" +msgid "Alt" +msgstr "Alt" + +#: Resources/Scripts/Gui/Preferences.as:431 +#: Resources/Scripts/Gui/Preferences.as:431 +msgctxt "Preferences" +msgid "Left Mouse Button" +msgstr "Kairysis Pelės Klavišas" + +#: Resources/Scripts/Gui/Preferences.as:433 +#: Resources/Scripts/Gui/Preferences.as:433 +msgctxt "Preferences" +msgid "Right Mouse Button" +msgstr "Dešinysis Pelės Klavišas" + +#: Resources/Scripts/Gui/Preferences.as:435 +#: Resources/Scripts/Gui/Preferences.as:435 +msgctxt "Preferences" +msgid "Middle Mouse Button" +msgstr "Vidurinysis Pelės Klavišas" + +#: Resources/Scripts/Gui/Preferences.as:437 +#: Resources/Scripts/Gui/Preferences.as:437 +msgctxt "Preferences" +msgid "Mouse Button 4" +msgstr "Pelės Klavišas 4" + +#: Resources/Scripts/Gui/Preferences.as:439 +#: Resources/Scripts/Gui/Preferences.as:439 +msgctxt "Preferences" +msgid "Mouse Button 5" +msgstr "Pelės Klavišas 5" + +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +msgctxt "Preferences" +msgid "ON" +msgstr "Įjungta" + +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "OFF" +msgstr "Išjungta" + +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:619 +msgctxt "Preferences" +msgid "REVERSED" +msgstr "Atvirkščiai" + +#: Resources/Scripts/Gui/Preferences.as:637 +#: Resources/Scripts/Gui/Preferences.as:637 +msgctxt "Preferences" +msgid "Player Information" +msgstr "Žaidėjo Informacija" + +#: Resources/Scripts/Gui/Preferences.as:638 +#: Resources/Scripts/Gui/Preferences.as:638 +msgctxt "Preferences" +msgid "Player Name" +msgstr "Žaidėjo Vardas" + +#: Resources/Scripts/Gui/Preferences.as:642 +#: Resources/Scripts/Gui/Preferences.as:642 +msgctxt "Preferences" +msgid "Effects" +msgstr "Efektai" + +#: Resources/Scripts/Gui/Preferences.as:643 +#: Resources/Scripts/Gui/Preferences.as:643 +msgctxt "Preferences" +msgid "Blood" +msgstr "Kraujas" + +#: Resources/Scripts/Gui/Preferences.as:644 +#: Resources/Scripts/Gui/Preferences.as:644 +msgctxt "Preferences" +msgid "Ejecting Brass" +msgstr "Pašalinamos Gilzes" + +#: Resources/Scripts/Gui/Preferences.as:645 +#: Resources/Scripts/Gui/Preferences.as:645 +msgctxt "Preferences" +msgid "Ragdoll" +msgstr "Skudurumas" + +#: Resources/Scripts/Gui/Preferences.as:646 +#: Resources/Scripts/Gui/Preferences.as:646 +msgctxt "Preferences" +msgid "Animations" +msgstr "Animacijos" + +#: Resources/Scripts/Gui/Preferences.as:647 +#: Resources/Scripts/Gui/Preferences.as:647 +msgctxt "Preferences" +msgid "Camera Shake" +msgstr "Ekrano Kratymas" + +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:648 +msgctxt "Preferences" +msgid "MORE" +msgstr "Daugiau" + +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "NORMAL" +msgstr "Vidutiniškai" + +#: Resources/Scripts/Gui/Preferences.as:650 +#: Resources/Scripts/Gui/Preferences.as:650 +msgctxt "Preferences" +msgid "Particles" +msgstr "Dalelės" + +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "LESS" +msgstr "Mažiau" + +#: Resources/Scripts/Gui/Preferences.as:654 +#: Resources/Scripts/Gui/Preferences.as:654 +msgctxt "Preferences" +msgid "Feedbacks" +msgstr "Grįžtamieji Efektai" + +#: Resources/Scripts/Gui/Preferences.as:655 +#: Resources/Scripts/Gui/Preferences.as:655 +msgctxt "Preferences" +msgid "Chat Notify Sounds" +msgstr "Kalbėjimosi Lango Pranešimo Garsai" + +#: Resources/Scripts/Gui/Preferences.as:656 +#: Resources/Scripts/Gui/Preferences.as:656 +msgctxt "Preferences" +msgid "Hit Indicator" +msgstr "Pataikymo Žymekliai" + +#: Resources/Scripts/Gui/Preferences.as:657 +#: Resources/Scripts/Gui/Preferences.as:657 +msgctxt "Preferences" +msgid "Show Alerts" +msgstr "Rodyti Įspėjimus" + +#: Resources/Scripts/Gui/Preferences.as:659 +#: Resources/Scripts/Gui/Preferences.as:659 +msgctxt "Preferences" +msgid "AoS 0.75/0.76 Compatibility" +msgstr "AoS 0.75/0.76 Suderinamumas" + +#: Resources/Scripts/Gui/Preferences.as:660 +#: Resources/Scripts/Gui/Preferences.as:660 +msgctxt "Preferences" +msgid "Allow Unicode" +msgstr "Leisti Unicode" + +#: Resources/Scripts/Gui/Preferences.as:661 +#: Resources/Scripts/Gui/Preferences.as:661 +msgctxt "Preferences" +msgid "Server Alert" +msgstr "Serverio Įspėjimai" + +#: Resources/Scripts/Gui/Preferences.as:664 +#: Resources/Scripts/Gui/Preferences.as:664 +msgctxt "Preferences" +msgid "Field of View" +msgstr "Matymo Erdvė" + +#: Resources/Scripts/Gui/Preferences.as:666 +#: Resources/Scripts/Gui/Preferences.as:666 +msgctxt "Preferences" +msgid "Minimap size" +msgstr "Mini-žemėlapio dydis" + +#: Resources/Scripts/Gui/Preferences.as:668 +#: Resources/Scripts/Gui/Preferences.as:668 +msgctxt "Preferences" +msgid "Show Statistics" +msgstr "Rodyti Statistikas" + +#: Resources/Scripts/Gui/Preferences.as:678 +#: Resources/Scripts/Gui/Preferences.as:678 +msgctxt "Preferences" +msgid "Weapons/Tools" +msgstr "Ginklai/ Įrankiai" + +#: Resources/Scripts/Gui/Preferences.as:679 +#: Resources/Scripts/Gui/Preferences.as:679 +msgctxt "Preferences" +msgid "Attack" +msgstr "Pulti" + +#: Resources/Scripts/Gui/Preferences.as:680 +#: Resources/Scripts/Gui/Preferences.as:680 +msgctxt "Preferences" +msgid "Alt. Attack" +msgstr "Alt. Pulti" + +#: Resources/Scripts/Gui/Preferences.as:681 +#: Resources/Scripts/Gui/Preferences.as:681 +msgctxt "Preferences" +msgid "Hold Aim Down Sight" +msgstr "Laikyti, kad Naudotis Taikikliais" + +#: Resources/Scripts/Gui/Preferences.as:682 +#: Resources/Scripts/Gui/Preferences.as:682 +msgctxt "Preferences" +msgid "Mouse Sensitivity" +msgstr "Pelės Jautrumas" + +#: Resources/Scripts/Gui/Preferences.as:684 +#: Resources/Scripts/Gui/Preferences.as:684 +msgctxt "Preferences" +msgid "ADS Mouse Sens. Scale" +msgstr "Pelės Jautrumo naud. Taikiklius Santykis" + +#: Resources/Scripts/Gui/Preferences.as:686 +#: Resources/Scripts/Gui/Preferences.as:686 +msgctxt "Preferences" +msgid "Exponential Power" +msgstr "Eksponentinė Galia" + +#: Resources/Scripts/Gui/Preferences.as:688 +#: Resources/Scripts/Gui/Preferences.as:688 +msgctxt "Preferences" +msgid "Invert Y-axis Mouse Input" +msgstr "Apversti Y-ašies Pelės Įvestį" + +#: Resources/Scripts/Gui/Preferences.as:689 +#: Resources/Scripts/Gui/Preferences.as:689 +msgctxt "Preferences" +msgid "Reload" +msgstr "Užsitaisyti" + +#: Resources/Scripts/Gui/Preferences.as:690 +#: Resources/Scripts/Gui/Preferences.as:690 +msgctxt "Preferences" +msgid "Capture Color" +msgstr "Nukopijuoti Spalvą" + +#: Resources/Scripts/Gui/Preferences.as:691 +#: Resources/Scripts/Gui/Preferences.as:691 +msgctxt "Preferences" +msgid "Equip Spade" +msgstr "Pasirinkti Kastuvą" + +#: Resources/Scripts/Gui/Preferences.as:692 +#: Resources/Scripts/Gui/Preferences.as:692 +msgctxt "Preferences" +msgid "Equip Block" +msgstr "Pasirinkti Bloką" + +#: Resources/Scripts/Gui/Preferences.as:693 +#: Resources/Scripts/Gui/Preferences.as:693 +msgctxt "Preferences" +msgid "Equip Weapon" +msgstr "Pasirinkti Ginklą" + +#: Resources/Scripts/Gui/Preferences.as:694 +#: Resources/Scripts/Gui/Preferences.as:694 +msgctxt "Preferences" +msgid "Equip Grenade" +msgstr "Pasirinkti Granatą" + +#: Resources/Scripts/Gui/Preferences.as:695 +#: Resources/Scripts/Gui/Preferences.as:695 +msgctxt "Preferences" +msgid "Last Used Tool" +msgstr "Paskutinis Pasirinktas Įrankis" + +#: Resources/Scripts/Gui/Preferences.as:696 +#: Resources/Scripts/Gui/Preferences.as:696 +msgctxt "Preferences" +msgid "Switch Tools by Wheel" +msgstr "Pasirinkti Įrankius Pelės Rateliu" + +#: Resources/Scripts/Gui/Preferences.as:698 +#: Resources/Scripts/Gui/Preferences.as:698 +msgctxt "Preferences" +msgid "Movement" +msgstr "Judėjimas" + +#: Resources/Scripts/Gui/Preferences.as:699 +#: Resources/Scripts/Gui/Preferences.as:699 +msgctxt "Preferences" +msgid "Walk Forward" +msgstr "Eiti Pirmyn" + +#: Resources/Scripts/Gui/Preferences.as:700 +#: Resources/Scripts/Gui/Preferences.as:700 +msgctxt "Preferences" +msgid "Backpedal" +msgstr "Eiti Atbulai" + +#: Resources/Scripts/Gui/Preferences.as:701 +#: Resources/Scripts/Gui/Preferences.as:701 +msgctxt "Preferences" +msgid "Move Left" +msgstr "Judėti Kairėn" + +#: Resources/Scripts/Gui/Preferences.as:702 +#: Resources/Scripts/Gui/Preferences.as:702 +msgctxt "Preferences" +msgid "Move Right" +msgstr "Judėti Dešinėn" + +#: Resources/Scripts/Gui/Preferences.as:703 +#: Resources/Scripts/Gui/Preferences.as:703 +msgctxt "Preferences" +msgid "Crouch" +msgstr "Pritūpti" + +#: Resources/Scripts/Gui/Preferences.as:704 +#: Resources/Scripts/Gui/Preferences.as:704 +msgctxt "Preferences" +msgid "Sneak" +msgstr "Sėlinti" + +#: Resources/Scripts/Gui/Preferences.as:705 +#: Resources/Scripts/Gui/Preferences.as:705 +msgctxt "Preferences" +msgid "Jump" +msgstr "Pašokti" + +#: Resources/Scripts/Gui/Preferences.as:706 +#: Resources/Scripts/Gui/Preferences.as:706 +msgctxt "Preferences" +msgid "Sprint" +msgstr "Bėgti" + +#: Resources/Scripts/Gui/Preferences.as:709 +#: Resources/Scripts/Gui/Preferences.as:709 +msgctxt "Preferences" +msgid "Minimap Scale" +msgstr "Mini-žemėlapio Skalė" + +#: Resources/Scripts/Gui/Preferences.as:710 +#: Resources/Scripts/Gui/Preferences.as:710 +msgctxt "Preferences" +msgid "Toggle Map" +msgstr "Įjungti Žemėlapį" + +#: Resources/Scripts/Gui/Preferences.as:711 +#: Resources/Scripts/Gui/Preferences.as:711 +msgctxt "Preferences" +msgid "Flashlight" +msgstr "Žibintuvėlis" + +#: Resources/Scripts/Gui/Preferences.as:712 +#: Resources/Scripts/Gui/Preferences.as:712 +msgctxt "Preferences" +msgid "Global Chat" +msgstr "Kalbėjimas Globaliai" + +#: Resources/Scripts/Gui/Preferences.as:713 +#: Resources/Scripts/Gui/Preferences.as:713 +msgctxt "Preferences" +msgid "Team Chat" +msgstr "Kalbėjimas Komandai" + +#: Resources/Scripts/Gui/Preferences.as:714 +#: Resources/Scripts/Gui/Preferences.as:714 +msgctxt "Preferences" +msgid "Limbo Menu" +msgstr "Įrangos Meniu" + +#: Resources/Scripts/Gui/Preferences.as:715 +#: Resources/Scripts/Gui/Preferences.as:715 +msgctxt "Preferences" +msgid "Save Map" +msgstr "Išsaugoti Žemėlapį" + +#: Resources/Scripts/Gui/Preferences.as:716 +#: Resources/Scripts/Gui/Preferences.as:716 +msgctxt "Preferences" +msgid "Save Sceneshot" +msgstr "Išsaugoti Scenos Kopiją" + +#: Resources/Scripts/Gui/Preferences.as:717 +#: Resources/Scripts/Gui/Preferences.as:717 +msgctxt "Preferences" +msgid "Save Screenshot" +msgstr "Išsaugoti Ekrano Kopiją" + +#: Resources/Scripts/Gui/Preferences.as:736 +#: Resources/Scripts/Gui/Preferences.as:736 +msgctxt "Preferences" +msgid "Enable Startup Window" +msgstr "Įjungti Pradėjimo Langą" + +#: Resources/Scripts/Gui/Preferences.as:757 +#: Resources/Scripts/Gui/Preferences.as:757 +msgctxt "Preferences" +msgid "Quit and restart OpenSpades to access the startup window." +msgstr "Išeikite ir pradėkite išnaujo Openspades, kad atverti Pradėjimo Langą." + +#: Resources/Scripts/Gui/Preferences.as:758 +#: Resources/Scripts/Gui/Preferences.as:758 +msgctxt "Preferences" +msgid "Some settings only can be changed in the startup window." +msgstr "Kai kurie nustatymai gali būti pakeisti tik Pradėjimo Lange." + +#: Resources/Scripts/Gui/StartupScreen.as:160 +#: Resources/Scripts/Gui/StartupScreen.as:160 +msgctxt "StartupScreen" +msgid "Start" +msgstr "Pradėti" + +#: Resources/Scripts/Gui/StartupScreen.as:167 +#: Resources/Scripts/Gui/StartupScreen.as:167 +msgctxt "StartupScreen" +msgid "Skip this screen next time" +msgstr "Praleisti šį ekraną kitą kartą" + +#: Resources/Scripts/Gui/StartupScreen.as:211 +#: Resources/Scripts/Gui/StartupScreen.as:211 +msgctxt "StartupScreen" +msgid "Graphics" +msgstr "Grafikos" + +#: Resources/Scripts/Gui/StartupScreen.as:212 +#: Resources/Scripts/Gui/StartupScreen.as:212 +msgctxt "StartupScreen" +msgid "Audio" +msgstr "Garsas" + +#: Resources/Scripts/Gui/StartupScreen.as:213 +#: Resources/Scripts/Gui/StartupScreen.as:213 +msgctxt "StartupScreen" +msgid "Generic" +msgstr "Bendri" + +#: Resources/Scripts/Gui/StartupScreen.as:214 +#: Resources/Scripts/Gui/StartupScreen.as:214 +msgctxt "StartupScreen" +msgid "System Info" +msgstr "Sistemos Info" + +#: Resources/Scripts/Gui/StartupScreen.as:215 +#: Resources/Scripts/Gui/StartupScreen.as:1679 +#: Resources/Scripts/Gui/StartupScreen.as:215 +#: Resources/Scripts/Gui/StartupScreen.as:1679 +msgctxt "StartupScreen" +msgid "Advanced" +msgstr "Išplėstiniai" + +#: Resources/Scripts/Gui/StartupScreen.as:288 +#: Resources/Scripts/Gui/StartupScreen.as:288 +msgctxt "StartupScreen" +msgid "An unknown error has occurred while opening the update info website." +msgstr "Įvyko nežinoma klaida bandant atidaryti atnaujinimų info puslapį." + +#: Resources/Scripts/Gui/StartupScreen.as:853 +#: Resources/Scripts/Gui/StartupScreen.as:853 +msgctxt "StartupScreen" +msgid "Custom" +msgstr "Keičiamas" + +#: Resources/Scripts/Gui/StartupScreen.as:979 +#: Resources/Scripts/Gui/StartupScreen.as:979 +msgctxt "StartupScreen" +msgid "Close" +msgstr "Užverti" + +#: Resources/Scripts/Gui/StartupScreen.as:1085 +#: Resources/Scripts/Gui/StartupScreen.as:1085 +msgctxt "StartupScreen" +msgid "Graphics Settings" +msgstr "Grafikos Nustatymai" + +#: Resources/Scripts/Gui/StartupScreen.as:1090 +#: Resources/Scripts/Gui/StartupScreen.as:1090 +msgctxt "StartupScreen" +msgid "Resolution" +msgstr "Rezoliucija" + +#: Resources/Scripts/Gui/StartupScreen.as:1100 +#: Resources/Scripts/Gui/StartupScreen.as:1100 +msgctxt "StartupScreen" +msgid "Fullscreen Mode" +msgstr "Pilno Ekrano Rėžimas" + +#: Resources/Scripts/Gui/StartupScreen.as:1103 +#: Resources/Scripts/Gui/StartupScreen.as:1103 +msgctxt "StartupScreen" +msgid "By running in fullscreen mode OpenSpades occupies the screen, making it easier for you to concentrate on playing the game." +msgstr "Įjungus Pilno Ekrano rėžimą, OpenSpades užima visą ekrano erdvę, kas leidžia jums lengviau susikoncentruoti į žaidimą." + +#: Resources/Scripts/Gui/StartupScreen.as:1110 +#: Resources/Scripts/Gui/StartupScreen.as:1492 +#: Resources/Scripts/Gui/StartupScreen.as:1110 +#: Resources/Scripts/Gui/StartupScreen.as:1492 +msgctxt "StartupScreen" +msgid "Backend" +msgstr "Pagrindas" + +#: Resources/Scripts/Gui/StartupScreen.as:1113 +#: Resources/Scripts/Gui/StartupScreen.as:1113 +msgctxt "StartupScreen" +msgid "OpenGL" +msgstr "OpenGL" + +#: Resources/Scripts/Gui/StartupScreen.as:1117 +#: Resources/Scripts/Gui/StartupScreen.as:1117 +msgctxt "StartupScreen" +msgid "OpenGL renderer uses your computer's graphics accelerator to generate the game screen." +msgstr "OpenGL vaizdavimo sistema naudoja jūsų kompiuterio grafikos akseleratorių, kad sukurtų žaidimo vaizdą." + +#: Resources/Scripts/Gui/StartupScreen.as:1125 +#: Resources/Scripts/Gui/StartupScreen.as:1125 +msgctxt "StartupScreen" +msgid "Software" +msgstr "Programinis" + +#: Resources/Scripts/Gui/StartupScreen.as:1129 +#: Resources/Scripts/Gui/StartupScreen.as:1129 +msgctxt "StartupScreen" +msgid "Software renderer uses CPU to generate the game screen. Its quality and performance might be inferior to OpenGL renderer, but it works even with an unsupported GPU." +msgstr "Programinė vaizdavimo sistema naudoja jūsų Procesorių, kad sukurtų žaidimo vaizdą. Jos vaizdo ir vykdymo kokybės yra prastesnės nei OpenGL sistemos, bet ji veikia net ir su nepalaikoma Vaizdo Korta." + +#: Resources/Scripts/Gui/StartupScreen.as:1143 +#: Resources/Scripts/Gui/StartupScreen.as:1143 +msgctxt "StartupScreen" +msgid "Antialias:Enables a technique to improve the appearance of high-contrast edges.\n\n" +"MSAA: Performs antialiasing by generating an intermediate high-resolution image. Looks best, but doesn't cope with some settings.\n\n" +"FXAA: Performs antialiasing by smoothing artifacts out as a post-process.|Off|MSAA 2x|4x|FXAA" +msgstr "Antialias: Leidžia naudoti techniką didelio kontrasto kraštų vaizdo kokybei padidinti.\n\n" +"MSAA: Įvykdo antialiasing'ą sugeneruojant tarpinį aukštos rezoliucijos vaizdinį. Atrodo geriausiai, bet nesusidoroja su kai kuriais nustatymais.\n\n" +"FXAA: Įvykdo antialiasing'ą panaikinant artifaktus kaip post-procesą.|Išjungta|MSAA 2x|4x|FXAA" + +#: Resources/Scripts/Gui/StartupScreen.as:1150 +#: Resources/Scripts/Gui/StartupScreen.as:1150 +msgctxt "StartupScreen" +msgid "Global Illumination" +msgstr "Globali Iluminacija" + +#: Resources/Scripts/Gui/StartupScreen.as:1152 +#: Resources/Scripts/Gui/StartupScreen.as:1152 +msgctxt "StartupScreen" +msgid "Enables a physically based simulation of light path for more realistic lighting." +msgstr "Leidia fiziškai pagrįstą šviesos krypčių simuliaciją, kad sukurtų labiau tikrovišką apšvietimą." + +#: Resources/Scripts/Gui/StartupScreen.as:1155 +#: Resources/Scripts/Gui/StartupScreen.as:1155 +msgctxt "StartupScreen" +msgid "Linear HDR Rendering" +msgstr "Linijinis HDR Vaizdavimas" + +#: Resources/Scripts/Gui/StartupScreen.as:1157 +#: Resources/Scripts/Gui/StartupScreen.as:1157 +msgctxt "StartupScreen" +msgid "Uses a number representation which allows wider dynamic range during rendering process. Additionally, this allows color calculation whose value is in linear correspondence with actual energy, that is, physically accurate blending can be achieved." +msgstr "Naudoja skaičių reprezentaciją, kas leidžia platesnį dynaminį diapozoną vaizdavimo proceso metu. Taip pat, tai leidžia spalvų apskaičiavimą kurių vertė yra linijiškai atitinkanti realią energiją, tai yra, fiziškai tikslus maišymas gali būti pasiektas." + +#: Resources/Scripts/Gui/StartupScreen.as:1164 +#: Resources/Scripts/Gui/StartupScreen.as:1164 +msgctxt "StartupScreen" +msgid "Camera Blur" +msgstr "Kameros Išplaukimas" + +#: Resources/Scripts/Gui/StartupScreen.as:1165 +#: Resources/Scripts/Gui/StartupScreen.as:1165 +msgctxt "StartupScreen" +msgid "Blurs the screen when you turn quickly." +msgstr "Sudaro efektą, kad greitai pasisukus išplaukia vaizdas." + +#: Resources/Scripts/Gui/StartupScreen.as:1167 +#: Resources/Scripts/Gui/StartupScreen.as:1167 +msgctxt "StartupScreen" +msgid "Lens Effect" +msgstr "Lindzės Efektas" + +#: Resources/Scripts/Gui/StartupScreen.as:1168 +#: Resources/Scripts/Gui/StartupScreen.as:1168 +msgctxt "StartupScreen" +msgid "Simulates distortion caused by a real camera lens." +msgstr "Simuliuoja vaizdo iškraipimą, kurį sukeltų tikras objektyvas." + +#: Resources/Scripts/Gui/StartupScreen.as:1170 +#: Resources/Scripts/Gui/StartupScreen.as:1170 +msgctxt "StartupScreen" +msgid "Lens Scattering Filter" +msgstr "Lindzės Skaldymo Filtras" + +#: Resources/Scripts/Gui/StartupScreen.as:1171 +#: Resources/Scripts/Gui/StartupScreen.as:1171 +msgctxt "StartupScreen" +msgid "Simulates light being scattered by dust on the camera lens." +msgstr "Simuliuoja šviesos skaldymą, kurį sukeltų dulkės ant objektyvo." + +#: Resources/Scripts/Gui/StartupScreen.as:1174 +#: Resources/Scripts/Gui/StartupScreen.as:1174 +msgctxt "StartupScreen" +msgid "Lens Flare" +msgstr "Lindzės Pliūpsnis" + +#: Resources/Scripts/Gui/StartupScreen.as:1175 +#: Resources/Scripts/Gui/StartupScreen.as:1175 +msgctxt "StartupScreen" +msgid "The Sun causes lens flare." +msgstr "Saulė sukelia lindzės pliūpsnį." + +#: Resources/Scripts/Gui/StartupScreen.as:1177 +#: Resources/Scripts/Gui/StartupScreen.as:1177 +msgctxt "StartupScreen" +msgid "Flares for Dynamic Lights" +msgstr "Pliūpsniai Dinamiškom Šviesom" + +#: Resources/Scripts/Gui/StartupScreen.as:1178 +#: Resources/Scripts/Gui/StartupScreen.as:1178 +msgctxt "StartupScreen" +msgid "Enables lens flare for light sources other than the Sun." +msgstr "Leidžia sukelti lindzės pliūpsnį kitiems dinamiškiems šviesos šaltiniams, ne tik Saulei." + +#: Resources/Scripts/Gui/StartupScreen.as:1180 +#: Resources/Scripts/Gui/StartupScreen.as:1180 +msgctxt "StartupScreen" +msgid "Color Correction" +msgstr "Spalvų Pataisymas" + +#: Resources/Scripts/Gui/StartupScreen.as:1181 +#: Resources/Scripts/Gui/StartupScreen.as:1181 +msgctxt "StartupScreen" +msgid "Applies cinematic color correction to make the image look better." +msgstr "Pritaiko kinematografinį spalvų pataisimą, kad pagerintų vaizdo kokybę." + +#: Resources/Scripts/Gui/StartupScreen.as:1183 +#: Resources/Scripts/Gui/StartupScreen.as:1183 +msgctxt "StartupScreen" +msgid "Depth of Field" +msgstr "Ryškumo Gylis" + +#: Resources/Scripts/Gui/StartupScreen.as:1184 +#: Resources/Scripts/Gui/StartupScreen.as:1184 +msgctxt "StartupScreen" +msgid "Blurs out-of-focus objects." +msgstr "Vaizdas, į kurį nėra fokusuojama, išplaukia." + +#: Resources/Scripts/Gui/StartupScreen.as:1186 +#: Resources/Scripts/Gui/StartupScreen.as:1186 +msgctxt "StartupScreen" +msgid "Screen Space Ambient Occlusion" +msgstr "Ekrano Erdvės Aplinkos Okliuzija (SSAO)" + +#: Resources/Scripts/Gui/StartupScreen.as:1187 +#: Resources/Scripts/Gui/StartupScreen.as:1187 +msgctxt "StartupScreen" +msgid "Simulates soft shadows that occur between nearby objects." +msgstr "Simuliuoja švelnius šešėlius, kurie atsiranda tarp artimų objektų." + +#: Resources/Scripts/Gui/StartupScreen.as:1189 +#: Resources/Scripts/Gui/StartupScreen.as:1228 +#: Resources/Scripts/Gui/StartupScreen.as:1250 +#: Resources/Scripts/Gui/StartupScreen.as:1189 +#: Resources/Scripts/Gui/StartupScreen.as:1228 +#: Resources/Scripts/Gui/StartupScreen.as:1250 +msgctxt "StartupScreen" +msgid "Low" +msgstr "Mažai" + +#: Resources/Scripts/Gui/StartupScreen.as:1190 +#: Resources/Scripts/Gui/StartupScreen.as:1229 +#: Resources/Scripts/Gui/StartupScreen.as:1190 +#: Resources/Scripts/Gui/StartupScreen.as:1229 +msgctxt "StartupScreen" +msgid "Medium" +msgstr "Vidutiniškai" + +#: Resources/Scripts/Gui/StartupScreen.as:1191 +#: Resources/Scripts/Gui/StartupScreen.as:1230 +#: Resources/Scripts/Gui/StartupScreen.as:1252 +#: Resources/Scripts/Gui/StartupScreen.as:1191 +#: Resources/Scripts/Gui/StartupScreen.as:1230 +#: Resources/Scripts/Gui/StartupScreen.as:1252 +msgctxt "StartupScreen" +msgid "High" +msgstr "Daug" + +#: Resources/Scripts/Gui/StartupScreen.as:1192 +#: Resources/Scripts/Gui/StartupScreen.as:1253 +#: Resources/Scripts/Gui/StartupScreen.as:1192 +#: Resources/Scripts/Gui/StartupScreen.as:1253 +msgctxt "StartupScreen" +msgid "Ultra" +msgstr "Ultra" + +#: Resources/Scripts/Gui/StartupScreen.as:1195 +#: Resources/Scripts/Gui/StartupScreen.as:1195 +msgctxt "StartupScreen" +msgid "Post-process" +msgstr "Antrinis Apdorojimas" + +#: Resources/Scripts/Gui/StartupScreen.as:1196 +#: Resources/Scripts/Gui/StartupScreen.as:1196 +msgctxt "StartupScreen" +msgid "Post-process modifies the image to make it look better and more realistic." +msgstr "Antrinis Apdorojimas modifikuoja vaizdinį, kad paverstų jį atrodančiu geriau ir labiau tikroviškai." + +#: Resources/Scripts/Gui/StartupScreen.as:1203 +#: Resources/Scripts/Gui/StartupScreen.as:1203 +msgctxt "StartupScreen" +msgid "Particles|Low:Artifact occurs when a particle intersects other objects.|Medium:Particle intersects objects smoothly.|High:Particle intersects objects smoothly, and some objects casts their shadow to particles." +msgstr "Dalelės|Mažai:Atsiranda artifaktai kai dalelė patenka į kitą objektą.|Vidutiniškai:Dalelė sklandžiai pereina per objektus.|Daug:Dalelė sklandžiai pereina per objektus, ir kai kurie objektai ant dalelių meta šešėlį." + +#: Resources/Scripts/Gui/StartupScreen.as:1213 +#: Resources/Scripts/Gui/StartupScreen.as:1213 +msgctxt "StartupScreen" +msgid "Dynamic Lights" +msgstr "Dinaminės Šviesos" + +#: Resources/Scripts/Gui/StartupScreen.as:1215 +#: Resources/Scripts/Gui/StartupScreen.as:1215 +msgctxt "StartupScreen" +msgid "Gives some objects an ability to emit light to give them an energy-emitting impression." +msgstr "Suteikia kai kuriems objektams gebėjimą skleisti šviesą, kad suteikti jeims energijos-skleidimo įvaizdį." + +#: Resources/Scripts/Gui/StartupScreen.as:1218 +#: Resources/Scripts/Gui/StartupScreen.as:1218 +msgctxt "StartupScreen" +msgid "Shadows" +msgstr "Šešėliai" + +#: Resources/Scripts/Gui/StartupScreen.as:1219 +#: Resources/Scripts/Gui/StartupScreen.as:1219 +msgctxt "StartupScreen" +msgid "Non-static object casts a shadow." +msgstr "Judantys objektai meta šešėlį." + +#: Resources/Scripts/Gui/StartupScreen.as:1221 +#: Resources/Scripts/Gui/StartupScreen.as:1221 +msgctxt "StartupScreen" +msgid "Volumetric Fog" +msgstr "Tūrinis Rūkas" + +#: Resources/Scripts/Gui/StartupScreen.as:1222 +#: Resources/Scripts/Gui/StartupScreen.as:1222 +msgctxt "StartupScreen" +msgid "Simulates shadow being casted to the fog particles using a super highly computationally demanding algorithm. " +msgstr "Simuliuoja šešėlio kritimą ant rūko dalelių, naudojant super daug skaičiavimo reikalaujantį algoritmą. " + +#: Resources/Scripts/Gui/StartupScreen.as:1225 +#: Resources/Scripts/Gui/StartupScreen.as:1225 +msgctxt "StartupScreen" +msgid "Physically Based Lighting" +msgstr "Fiziškai Pagrįstas Apšvietimas" + +#: Resources/Scripts/Gui/StartupScreen.as:1226 +#: Resources/Scripts/Gui/StartupScreen.as:1226 +msgctxt "StartupScreen" +msgid "Uses more accurate approximation techniques to decide the brightness of objects." +msgstr "Naudoja tikslesnes spėjimo technikas objektų šviesumui nuspręsti." + +#: Resources/Scripts/Gui/StartupScreen.as:1233 +#: Resources/Scripts/Gui/StartupScreen.as:1233 +msgctxt "StartupScreen" +msgid "Direct Lights" +msgstr "Tiesioginės Šviesos" + +#: Resources/Scripts/Gui/StartupScreen.as:1234 +#: Resources/Scripts/Gui/StartupScreen.as:1234 +msgctxt "StartupScreen" +msgid "Controls how light encounting a material and atmosphere directly affects its appearance." +msgstr "Kontroliuoja kaip šviesos atsimušimas nuo medžiagos ir atmosferos tiesiogiai paveikia jos išvaizdą." + +#: Resources/Scripts/Gui/StartupScreen.as:1244 +#: Resources/Scripts/Gui/StartupScreen.as:1244 +msgctxt "StartupScreen" +msgid "Water Shader|None:Water is rendered in the same way that normal blocks are done.|Level 1:Refraction and the reflected Sun are simulated.|Level 2:Waving water is simulated as well as reflection and refraction.|Level 3:Reflections and refractions are rendered at the highest quality using screen-space techniques." +msgstr "Vandens Efektai|Jokių:Vanduo yra vaizduojamas taip pat kaip įprasti blokai.|1-as Lygis:Yra simuliuojamos refrakcija ir atsispindinti Saulė.|2-as Lygis:Yra simuliuojamas banguojantis vanduo, kartu su atsispindėjimu ir refrakcija|3-ias Lygis:Atspind=iai ir refrakcijos yra vaizduojami aukščiausia kokybe, naudojant ekrano erdvės technikas." + +#: Resources/Scripts/Gui/StartupScreen.as:1251 +#: Resources/Scripts/Gui/StartupScreen.as:1251 +msgctxt "StartupScreen" +msgid "Med" +msgstr "Vid" + +#: Resources/Scripts/Gui/StartupScreen.as:1256 +#: Resources/Scripts/Gui/StartupScreen.as:1256 +msgctxt "StartupScreen" +msgid "Shader Effects" +msgstr "Vaizdo Efektai" + +#: Resources/Scripts/Gui/StartupScreen.as:1256 +#: Resources/Scripts/Gui/StartupScreen.as:1256 +msgctxt "StartupScreen" +msgid "Special effects." +msgstr "Ypatingi efektai." + +#: Resources/Scripts/Gui/StartupScreen.as:1273 +#: Resources/Scripts/Gui/StartupScreen.as:1273 +msgctxt "StartupScreen" +msgid "Fast Mode:Reduces the image resolution to make the rendering faster.|Off|2x|4x" +msgstr "Greitasis Rėžimas:Sumažina vaizdinio rezoliuciją, kad paversti vaizdavimą greitesniu.|Išjungta|2x|4x" + +#: Resources/Scripts/Gui/StartupScreen.as:1486 +#: Resources/Scripts/Gui/StartupScreen.as:1486 +msgctxt "StartupScreen" +msgid "Audio Settings" +msgstr "Garso Nustatymai" + +#: Resources/Scripts/Gui/StartupScreen.as:1495 +#: Resources/Scripts/Gui/StartupScreen.as:1495 +msgctxt "StartupScreen" +msgid "OpenAL" +msgstr "OpenAL" + +#: Resources/Scripts/Gui/StartupScreen.as:1499 +#: Resources/Scripts/Gui/StartupScreen.as:1499 +msgctxt "StartupScreen" +msgid "Uses an OpenAL-capable sound card to process sound. In most cases where there isn't such a sound card, software emulation is used." +msgstr "Naudoja OpenAL gebančia garso kortą, kad apdoroti garsą. Dažniausiai atvėjais, kai tokios garso kortos nėra, yra pritaikoma programinė emuliacija." + +#: Resources/Scripts/Gui/StartupScreen.as:1508 +#: Resources/Scripts/Gui/StartupScreen.as:1508 +msgctxt "StartupScreen" +msgid "YSR" +msgstr "YSR" + +#: Resources/Scripts/Gui/StartupScreen.as:1512 +#: Resources/Scripts/Gui/StartupScreen.as:1512 +msgctxt "StartupScreen" +msgid "YSR is an experimental 3D HDR sound engine optimized for OpenSpades. It features several enhanced features including automatic load control, dynamics compressor, HRTF-based 3D audio, and high quality reverb." +msgstr "YSR yra ekspermentinis 3D HDR garso variklis, optimizuotas OpenSpades'. Jis turi kelias pagerintas funkcijas, tame tarpe: automatinę apkrovos kontrolę, dinaminį kompresorių, HRTF-pagrįstą 3D garsą, ir aukštos kokybės atgarsį." + +#. ! The name of audio driver that outputs no audio. +#: Resources/Scripts/Gui/StartupScreen.as:1523 +#: Resources/Scripts/Gui/StartupScreen.as:1523 +msgctxt "StartupScreen" +msgid "Null" +msgstr "Nieko" + +#: Resources/Scripts/Gui/StartupScreen.as:1527 +#: Resources/Scripts/Gui/StartupScreen.as:1527 +msgctxt "StartupScreen" +msgid "Disables audio output." +msgstr "Išjungia garso išeigą." + +#: Resources/Scripts/Gui/StartupScreen.as:1538 +#: Resources/Scripts/Gui/StartupScreen.as:1562 +#: Resources/Scripts/Gui/StartupScreen.as:1538 +#: Resources/Scripts/Gui/StartupScreen.as:1562 +msgctxt "StartupScreen" +msgid "Polyphonics" +msgstr "Polifonija" + +#: Resources/Scripts/Gui/StartupScreen.as:1539 +#: Resources/Scripts/Gui/StartupScreen.as:1539 +msgctxt "StartupScreen" +msgid "Specifies how many sounds can be played simultaneously. Higher value needs more processing power, so setting this too high might cause an overload (especially with a software emulation)." +msgstr "Patikslina kiek garsų gali būti grojama vienu metu. Didesnės vertės reikalauja daugiau procesavimo galios, tai nustatymas šio nustatymą per aukštai gali sukelti perkrovą (ypač naudojant programinę emuliaciją)." + +#: Resources/Scripts/Gui/StartupScreen.as:1546 +#: Resources/Scripts/Gui/StartupScreen.as:1546 +msgctxt "StartupScreen" +msgid "EAX" +msgstr "EAX" + +#: Resources/Scripts/Gui/StartupScreen.as:1547 +#: Resources/Scripts/Gui/StartupScreen.as:1547 +msgctxt "StartupScreen" +msgid "Enables extended features provided by the OpenAL driver to create more ambience." +msgstr "Leižia papildomas funkcijas pateiktas OpenAL draiverio, tam kad sukurti daugiau garsinės atmosferos." + +#: Resources/Scripts/Gui/StartupScreen.as:1563 +#: Resources/Scripts/Gui/StartupScreen.as:1563 +msgctxt "StartupScreen" +msgid "Specifies how many sounds can be played simultaneously. No matter what value is set, YSR might reduce the number of sounds when an overload is detected." +msgstr "Patikslina kiek garsų gali būti grojama vienu metu. Nesvarbu kokia vertė yra nustatyta, YSR gali sumažinti garsų skaičių kai yra aptikta perkrova." + +#: Resources/Scripts/Gui/StartupScreen.as:1623 +#: Resources/Scripts/Gui/StartupScreen.as:1623 +msgctxt "StartupScreen" +msgid "Language" +msgstr "Kalba" + +#: Resources/Scripts/Gui/StartupScreen.as:1635 +#: Resources/Scripts/Gui/StartupScreen.as:1635 +msgctxt "StartupScreen" +msgid "Tools" +msgstr "Įrankiai" + +#: Resources/Scripts/Gui/StartupScreen.as:1638 +#: Resources/Scripts/Gui/StartupScreen.as:1638 +msgctxt "StartupScreen" +msgid "Reset All Settings" +msgstr "Perkrauti Visus Nustatymus" + +#: Resources/Scripts/Gui/StartupScreen.as:1647 +#: Resources/Scripts/Gui/StartupScreen.as:1647 +msgctxt "StartupScreen" +msgid "Open Config Folder in Explorer" +msgstr "Atidaryti Config Aplankalą su Explorer" + +#: Resources/Scripts/Gui/StartupScreen.as:1649 +#: Resources/Scripts/Gui/StartupScreen.as:1649 +msgctxt "StartupScreen" +msgid "Reveal Config Folder in Finder" +msgstr "Atskleis Config Aplankalą su Finder" + +#: Resources/Scripts/Gui/StartupScreen.as:1651 +#: Resources/Scripts/Gui/StartupScreen.as:1651 +msgctxt "StartupScreen" +msgid "Browse Config Folder" +msgstr "Naršyti Config Aplankalą" + +#: Resources/Scripts/Gui/StartupScreen.as:1668 +#: Resources/Scripts/Gui/StartupScreen.as:1668 +msgctxt "StartupScreen" +msgid "An unknown error has occurred while opening the config directory." +msgstr "Įvyko nežinoma klaida bandant atidaryti config katalogą." + +#: Resources/Scripts/Gui/StartupScreen.as:1674 +#: Resources/Scripts/Gui/StartupScreen.as:1674 +msgctxt "StartupScreen" +msgid "Are you sure to reset all settings? They include (but are not limited to):" +msgstr "Ar jūs tikrai norite perkrauti visus nustatymus? Į juos įeiną (bet jais neapsiriboja):" + +#: Resources/Scripts/Gui/StartupScreen.as:1675 +#: Resources/Scripts/Gui/StartupScreen.as:1675 +msgctxt "StartupScreen" +msgid "All graphics/audio settings" +msgstr "Visi grafikos/garso nustatymai" + +#: Resources/Scripts/Gui/StartupScreen.as:1676 +#: Resources/Scripts/Gui/StartupScreen.as:1676 +msgctxt "StartupScreen" +msgid "All key bindings" +msgstr "Visi klavišų priskirimai" + +#: Resources/Scripts/Gui/StartupScreen.as:1677 +#: Resources/Scripts/Gui/StartupScreen.as:1677 +msgctxt "StartupScreen" +msgid "Your player name" +msgstr "Jūsų žaidėjo vardas" + +#: Resources/Scripts/Gui/StartupScreen.as:1678 +#: Resources/Scripts/Gui/StartupScreen.as:1678 +msgctxt "StartupScreen" +msgid "Other advanced settings only accessible through '{0}' tab and in-game commands" +msgstr "Kiti išplėstiniai nustatymai, prieinami tik per '{0}' langą ir komandas žaidimo metu" + +#: Resources/Scripts/Gui/StartupScreen.as:1748 +#: Resources/Scripts/Gui/StartupScreen.as:1748 +msgctxt "StartupScreen" +msgid "Unknown ({0})" +msgstr "Nežinoma ({0})" + +#: Resources/Scripts/Gui/StartupScreen.as:1750 +#: Resources/Scripts/Gui/StartupScreen.as:1764 +#: Resources/Scripts/Gui/StartupScreen.as:1750 +#: Resources/Scripts/Gui/StartupScreen.as:1764 +msgctxt "StartupScreen" +msgid "System default" +msgstr "Numatyta sistemos" + +#: Resources/Scripts/Gui/StartupScreen.as:1813 +#: Resources/Scripts/Gui/StartupScreen.as:1813 +msgctxt "StartupScreen" +msgid "Copy to Clipboard" +msgstr "Kopijuoti į Iškarpinę" + +#: Resources/Scripts/Gui/StartupScreen.as:1849 +#: Resources/Scripts/Gui/StartupScreen.as:1849 +msgctxt "StartupScreen" +msgid "Advanced Settings" +msgstr "Išplėstiniai Nustatymai" + +#: Resources/Scripts/Gui/StartupScreen.as:1858 +#: Resources/Scripts/Gui/StartupScreen.as:1858 +msgctxt "StartupScreen" +msgid "Filter" +msgstr "Filtras" + +#: Resources/Scripts/Gui/UpdateCheckView.as:40 +#: Resources/Scripts/Gui/UpdateCheckView.as:40 +msgctxt "UpdateCheck" +msgid "Enable" +msgstr "Įjungti" + +#: Resources/Scripts/Gui/UpdateCheckView.as:47 +#: Resources/Scripts/Gui/UpdateCheckView.as:47 +msgctxt "UpdateCheck" +msgid "Show details..." +msgstr "Rodyti detales..." + +#: Resources/Scripts/Gui/UpdateCheckView.as:102 +#: Resources/Scripts/Gui/UpdateCheckView.as:102 +msgctxt "UpdateCheck" +msgid "Version {0} is available! (You currently have {1})" +msgstr "Versija {0} yra prieinama! (Jūs šiuo metu turite {1})" + +#: Resources/Scripts/Gui/UpdateCheckView.as:105 +#: Resources/Scripts/Gui/UpdateCheckView.as:105 +msgctxt "UpdateCheck" +msgid "You're using the latest version of OpenSpades. ({0})" +msgstr "Jūs naudojatės naujiausia OpenSpades versija. ({0})" + +#: Resources/Scripts/Gui/UpdateCheckView.as:110 +#: Resources/Scripts/Gui/UpdateCheckView.as:110 +msgctxt "UpdateCheck" +msgid "Checking for updates..." +msgstr "Ieškoma atnaujinimų..." + +#: Resources/Scripts/Gui/UpdateCheckView.as:113 +#: Resources/Scripts/Gui/UpdateCheckView.as:113 +msgctxt "UpdateCheck" +msgid "Failed to check for updates." +msgstr "Nepavyko patikrinti, ar yra atnaujinimų." + +#: Resources/Scripts/Gui/UpdateCheckView.as:116 +#: Resources/Scripts/Gui/UpdateCheckView.as:116 +msgctxt "UpdateCheck" +msgid "Automatic update check is not enabled." +msgstr "Automatinis atnaujinimų patikrinimas nėra įjungtas." + +#: Resources/Scripts/Gui/UpdateCheckView.as:119 +#: Resources/Scripts/Gui/UpdateCheckView.as:119 +msgctxt "UpdateCheck" +msgid "Automatic update check is not available." +msgstr "Automatinis atnaujinimų patikrinimas nėra prieinamas." + +#: Sources/Client/Client_NetHandler.cpp:258 +#: Sources/Client/Client_NetHandler.cpp:271 +msgctxt "Client" +msgid "Spectator" +msgstr "Žiūrovas" + +#: Sources/Client/Client_Draw.cpp:99 +msgctxt "Client" +msgid "Unbound" +msgstr "Nepriskirta" + +#: Sources/Client/Client_Draw.cpp:655 +msgctxt "Client" +msgid "[{0}] Cycle camera mode" +msgstr "[{0}] Keisti kameros rėžimą" + +#: Sources/Client/Client_Draw.cpp:657 +msgctxt "Client" +msgid "[{0}/{1}] Next/previous player" +msgstr "[{0}/{1}] Kitas/praeitas žaidėjas" + +#: Sources/Client/Client_Draw.cpp:661 +msgctxt "Client" +msgid "[{0}] Unfollow" +msgstr "[{0}] Nebesekti" + +#: Sources/Client/Client_Draw.cpp:664 +msgctxt "Client" +msgid "[{0}/{1}] Follow a player" +msgstr "[{0}/{1}] Sekti žaidėją" + +#: Sources/Client/Client_Draw.cpp:669 +msgctxt "Client" +msgid "[{0}/{1}] Go up/down" +msgstr "[{0}/{1}] Eiti aukštyn/žemyn" + diff --git a/Resources/Locales/nb.json b/Resources/Locales/nb.json new file mode 100644 index 00000000..013d9c74 --- /dev/null +++ b/Resources/Locales/nb.json @@ -0,0 +1,4 @@ +{ + "descriptionEnglish": "Norwegian Bokmål", + "description": "Norsk Bokmål" +} diff --git a/Resources/Locales/nb/openspades.po b/Resources/Locales/nb/openspades.po new file mode 100644 index 00000000..8950f660 --- /dev/null +++ b/Resources/Locales/nb/openspades.po @@ -0,0 +1,1797 @@ +msgid "" +msgstr "" +"Project-Id-Version: openspades\n" +"Report-Msgid-Bugs-To: i at yvt.jp\n" +"POT-Creation-Date: 2016-12-25 23:47-0200\n" +"PO-Revision-Date: 2020-12-20 06:27\n" +"Last-Translator: \n" +"Language-Team: Norwegian Bokmal\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.7.1\n" +"X-Poedit-SourceCharset: UTF-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: openspades\n" +"X-Crowdin-Project-ID: 246828\n" +"X-Crowdin-Language: nb\n" +"X-Crowdin-File: openspades.pot\n" +"X-Crowdin-File-ID: 1\n" +"Language: nb_NO\n" + +#: Sources/Client/Client.cpp:585 Sources/Client/Client.cpp:586 +msgctxt "Client" +msgid "Map saved: {0}" +msgstr "Kart lagret: {0}" + +#: Sources/Client/Client.cpp:589 Sources/Client/Client.cpp:595 +#: Sources/Client/Client.cpp:590 Sources/Client/Client.cpp:596 +msgctxt "Client" +msgid "Saving map failed: " +msgstr "Lagring av kart mislykket: " + +#. ! Prefix added to global chat messages. +#. ! +#. ! Example: [Global] playername (Red) blah blah +#. ! +#. ! Crowdin warns that this string shouldn't be translated, +#. ! but it actually can be. +#. ! The extra whitespace is not a typo. +#: Sources/Client/Client.cpp:633 Sources/Client/Client.cpp:634 +msgctxt "Client" +msgid "[Global] " +msgstr "[Global] " + +#: Sources/Client/Client_Draw.cpp:119 Sources/Client/Client_Draw.cpp:135 +msgctxt "Client" +msgid "Sceneshot saved: {0}" +msgstr "Skjermbilde lagret: {0}" + +#: Sources/Client/Client_Draw.cpp:121 Sources/Client/Client_Draw.cpp:137 +msgctxt "Client" +msgid "Screenshot saved: {0}" +msgstr "Skjermbilde lagret: {0}" + +#: Sources/Client/Client_Draw.cpp:125 Sources/Client/Client_Draw.cpp:131 +#: Sources/Client/Client_Draw.cpp:141 Sources/Client/Client_Draw.cpp:147 +msgctxt "Client" +msgid "Screenshot failed: " +msgstr "Skjermbilde mislykkes: " + +#: Sources/Client/Client_Draw.cpp:198 Sources/Client/Client_Draw.cpp:214 +msgctxt "Client" +msgid "NOW LOADING" +msgstr "LASTER INN" + +#: Sources/Client/Client_Draw.cpp:220 Sources/Client/Client_Draw.cpp:236 +msgctxt "Client" +msgid "Disconnecting..." +msgstr "Kobler fra..." + +#: Sources/Client/Client_Draw.cpp:523 Sources/Client/Client_Draw.cpp:548 +msgctxt "Client" +msgid "Out of Block" +msgstr "Tom for blokker" + +#: Sources/Client/Client_Draw.cpp:528 Sources/Client/Client_Draw.cpp:553 +msgctxt "Client" +msgid "Out of Grenade" +msgstr "Tom for granater" + +#: Sources/Client/Client_Draw.cpp:534 Sources/Client/Client_Draw.cpp:559 +msgctxt "Client" +msgid "Reloading" +msgstr "Lader om" + +#: Sources/Client/Client_Draw.cpp:536 Sources/Client/Client_Input.cpp:439 +#: Sources/Client/Client_Draw.cpp:561 Sources/Client/Client_Input.cpp:494 +msgctxt "Client" +msgid "Out of Ammo" +msgstr "Tom for ammunisjon" + +#: Sources/Client/Client_Draw.cpp:539 Sources/Client/Client_Draw.cpp:564 +msgctxt "Client" +msgid "Press [{0}] to Reload" +msgstr "Trykk [{0}] for å lade om" + +#: Sources/Client/Client_Draw.cpp:584 Sources/Client/Client_Draw.cpp:608 +msgctxt "Client" +msgid "You will respawn in: {0}" +msgstr "Du vil gjenoppstå innen: {0}" + +#: Sources/Client/Client_Draw.cpp:586 Sources/Client/Client_Draw.cpp:610 +msgctxt "Client" +msgid "Waiting for respawn" +msgstr "Venter på gjenoppliving" + +#: Sources/Client/Client_Draw.cpp:764 Sources/Client/Client_Draw.cpp:646 +msgctxt "Client" +msgid "Following {0}" +msgstr "Følger {0}" + +#: Sources/Client/Client_Input.cpp:427 Sources/Client/Client_Input.cpp:482 +msgctxt "Client" +msgid "Out of Blocks" +msgstr "Tom for blokker" + +#: Sources/Client/Client_Input.cpp:451 Sources/Client/Client_Input.cpp:506 +msgctxt "Client" +msgid "Out of Grenades" +msgstr "Tom for granater" + +#: Sources/Client/Client_NetHandler.cpp:89 +#: Sources/Client/Client_NetHandler.cpp:90 +msgctxt "Client" +msgid "{0} captured {1}'s territory" +msgstr "{0} har erobret {1} sitt territorium" + +#: Sources/Client/Client_NetHandler.cpp:91 +#: Sources/Client/Client_NetHandler.cpp:92 +msgctxt "Client" +msgid "{0} captured an neutral territory" +msgstr "{0} har erobret et nøytralt territorium" + +#: Sources/Client/Client_NetHandler.cpp:99 +#: Sources/Client/Client_NetHandler.cpp:100 +msgctxt "Client" +msgid "{0} captured {1}'s Territory" +msgstr "{0} har erobret {1} sitt territorium" + +#: Sources/Client/Client_NetHandler.cpp:101 +#: Sources/Client/Client_NetHandler.cpp:102 +msgctxt "Client" +msgid "{0} captured an Neutral Territory" +msgstr "{0} har erobret et nøytralt territorium" + +#: Sources/Client/Client_NetHandler.cpp:127 +#: Sources/Client/Client_NetHandler.cpp:128 +msgctxt "Client" +msgid "{0} captured {1}'s intel" +msgstr "{0} har kapret {1} sitt intel" + +#: Sources/Client/Client_NetHandler.cpp:134 +#: Sources/Client/Client_NetHandler.cpp:135 +msgctxt "Client" +msgid "{0} captured {1}'s Intel." +msgstr "{0} har kapret {1} sitt intel." + +#: Sources/Client/Client_NetHandler.cpp:158 +#: Sources/Client/Client_NetHandler.cpp:159 +msgctxt "Client" +msgid "{0} picked up {1}'s intel" +msgstr "{0} har tatt {1} sitt intel" + +#: Sources/Client/Client_NetHandler.cpp:165 +#: Sources/Client/Client_NetHandler.cpp:166 +msgctxt "Client" +msgid "{0} picked up {1}'s Intel." +msgstr "{0} har tatt {1} sitt intel." + +#: Sources/Client/Client_NetHandler.cpp:183 +#: Sources/Client/Client_NetHandler.cpp:184 +msgctxt "Client" +msgid "{0} dropped {1}'s intel" +msgstr "{0} mistet {1} sitt intel" + +#: Sources/Client/Client_NetHandler.cpp:190 +#: Sources/Client/Client_NetHandler.cpp:191 +msgctxt "Client" +msgid "{0} dropped {1}'s Intel" +msgstr "{0} mistet {1} sitt intel" + +#: Sources/Client/Client_NetHandler.cpp:237 +#: Sources/Client/Client_NetHandler.cpp:243 +#: Sources/Client/Client_NetHandler.cpp:249 +#: Sources/Client/Client_NetHandler.cpp:255 +msgctxt "Client" +msgid "Player {0} has left" +msgstr "Spiller {0} har forlatt tjeneren" + +#: Sources/Client/Client_NetHandler.cpp:257 +#: Sources/Client/Client_NetHandler.cpp:264 +#: Sources/Client/Client_NetHandler.cpp:276 +#: Sources/Client/Client_NetHandler.cpp:282 +msgctxt "Client" +msgid "{0} joined {1} team" +msgstr "{0} ble med {1} lag" + +#: Sources/Client/Client_NetHandler.cpp:294 +#: Sources/Client/Client_NetHandler.cpp:317 +msgctxt "Client" +msgid "{0} wins!" +msgstr "{0} vinner!" + +#: Sources/Client/Client_NetHandler.cpp:298 +#: Sources/Client/Client_NetHandler.cpp:321 +msgctxt "Client" +msgid "{0} Wins!" +msgstr "{0} vinner!" + +#: Sources/Client/Client_Update.cpp:479 Sources/Client/Client_Update.cpp:505 +msgctxt "Client" +msgid "{0} block" +msgid_plural "{0} blocks" +msgstr[0] "{0} blokk" +msgstr[1] "{0} blokker" + +#: Sources/Client/Client_Update.cpp:486 Sources/Client/Client_Update.cpp:512 +msgctxt "Client" +msgid "-- blocks" +msgstr "-- blokker" + +#: Sources/Client/Client_Update.cpp:842 Sources/Client/LimboView.cpp:68 +#: Sources/Client/Client_Update.cpp:868 Sources/Client/LimboView.cpp:68 +msgctxt "Client" +msgid "Rifle" +msgstr "Gevær" + +#: Sources/Client/Client_Update.cpp:843 Sources/Client/LimboView.cpp:71 +#: Sources/Client/Client_Update.cpp:869 Sources/Client/LimboView.cpp:71 +msgctxt "Client" +msgid "SMG" +msgstr "Maskinpistol" + +#: Sources/Client/Client_Update.cpp:844 Sources/Client/LimboView.cpp:74 +#: Sources/Client/Client_Update.cpp:870 Sources/Client/LimboView.cpp:74 +msgctxt "Client" +msgid "Shotgun" +msgstr "Hagle" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:849 Sources/Client/Client_Update.cpp:875 +msgctxt "Client" +msgid "Fall" +msgstr "Fall" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:853 Sources/Client/Client_Update.cpp:879 +msgctxt "Client" +msgid "Melee" +msgstr "Nærkamp" + +#: Sources/Client/Client_Update.cpp:856 Sources/Client/Client_Update.cpp:882 +msgctxt "Client" +msgid "Grenade" +msgstr "Granat" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:860 Sources/Client/Client_Update.cpp:886 +msgctxt "Client" +msgid "Headshot" +msgstr "Hodeskudd" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:864 Sources/Client/Client_Update.cpp:890 +msgctxt "Client" +msgid "Team Change" +msgstr "Bytte lag" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:868 Sources/Client/Client_Update.cpp:894 +msgctxt "Client" +msgid "Weapon Change" +msgstr "Bytte våpen" + +#: Sources/Client/Client_Update.cpp:907 Sources/Client/Client_Update.cpp:933 +msgctxt "Client" +msgid "You have killed {0}" +msgstr "Du har drept {0}" + +#: Sources/Client/Client_Update.cpp:909 Sources/Client/Client_Update.cpp:935 +msgctxt "Client" +msgid "You were killed by {0}" +msgstr "Du ble drept av {0}" + +#: Sources/Client/Client_Update.cpp:1225 Sources/Client/Client_Update.cpp:1260 +msgctxt "Client" +msgid "Insufficient blocks." +msgstr "Ikke nok blokker." + +#: Sources/Client/Client_Update.cpp:1228 Sources/Client/Client_Update.cpp:1263 +msgctxt "Client" +msgid "You cannot place a block there." +msgstr "Du kan ikke plassere blokken her." + +#: Sources/Client/LimboView.cpp:79 Sources/Client/LimboView.cpp:79 +msgctxt "Client" +msgid "Spawn" +msgstr "Gjennoppliv" + +#: Sources/Client/LimboView.cpp:183 Sources/Client/LimboView.cpp:183 +msgctxt "Client" +msgid "Select Team:" +msgstr "Velg lag:" + +#: Sources/Client/LimboView.cpp:191 Sources/Client/LimboView.cpp:191 +msgctxt "Client" +msgid "Select Weapon:" +msgstr "Velg våpen:" + +#: Sources/Client/NetClient.cpp:422 Sources/Client/NetClient.cpp:425 +msgctxt "NetClient" +msgid "Connecting to the server" +msgstr "Kobler til tjeneren" + +#: Sources/Client/NetClient.cpp:434 Sources/Client/NetClient.cpp:437 +msgctxt "NetClient" +msgid "Not connected" +msgstr "Ikke tilkoblet" + +#: Sources/Client/NetClient.cpp:498 Sources/Client/NetClient.cpp:516 +msgctxt "NetClient" +msgid "Awaiting for state" +msgstr "Venter på status" + +#: Sources/Client/NetClient.cpp:508 Sources/Client/NetClient.cpp:1277 +#: Sources/Client/NetClient.cpp:526 Sources/Client/NetClient.cpp:1346 +msgctxt "NetClient" +msgid "Loading snapshot" +msgstr "Laster inn øyeblikksbilde" + +#: Sources/Client/NetClient.cpp:523 Sources/Client/NetClient.cpp:541 +msgctxt "NetClient" +msgid "Loading snapshot ({0}/{1})" +msgstr "Laster inn øyeblikksbilde ({0}/{1})" + +#: Sources/Client/NetClient.cpp:528 Sources/Client/NetClient.cpp:562 +#: Sources/Client/NetClient.cpp:546 Sources/Client/NetClient.cpp:609 +msgctxt "NetClient" +msgid "Connected" +msgstr "Tilkoblet" + +#: Sources/Client/NetClient.cpp:540 Sources/Client/NetClient.cpp:575 +#: Sources/Client/NetClient.cpp:627 Sources/Client/NetClient.cpp:558 +#: Sources/Client/NetClient.cpp:622 Sources/Client/NetClient.cpp:674 +msgctxt "NetClient" +msgid "Still loading..." +msgstr "Laster fortsatt inn..." + +#: Sources/Client/NetClient.cpp:543 Sources/Client/NetClient.cpp:549 +#: Sources/Client/NetClient.cpp:579 Sources/Client/NetClient.cpp:584 +#: Sources/Client/NetClient.cpp:631 Sources/Client/NetClient.cpp:636 +#: Sources/Client/NetClient.cpp:561 Sources/Client/NetClient.cpp:567 +#: Sources/Client/NetClient.cpp:626 Sources/Client/NetClient.cpp:631 +#: Sources/Client/NetClient.cpp:678 Sources/Client/NetClient.cpp:683 +msgctxt "NetClient" +msgid "Error" +msgstr "Feil" + +#: Sources/Client/NetClient.cpp:702 Sources/Client/NetClient.cpp:749 +msgctxt "NetClient" +msgid "You are banned from this server." +msgstr "Du er bannlyst fra denne tjeneren." + +#: Sources/Client/NetClient.cpp:707 Sources/Client/NetClient.cpp:710 +#: Sources/Client/NetClient.cpp:754 Sources/Client/NetClient.cpp:757 +msgctxt "NetClient" +msgid "You were kicked from this server." +msgstr "Du er sparket ut av denne tjeneren." + +#: Sources/Client/NetClient.cpp:708 Sources/Client/NetClient.cpp:755 +msgctxt "NetClient" +msgid "Incompatible client protocol version." +msgstr "Inkompatibel klient protokol versjon." + +#: Sources/Client/NetClient.cpp:709 Sources/Client/NetClient.cpp:756 +msgctxt "NetClient" +msgid "Server full" +msgstr "Tjeneren er full" + +#: Sources/Client/NetClient.cpp:711 Sources/Client/NetClient.cpp:758 +msgctxt "NetClient" +msgid "Unknown Reason" +msgstr "Ukjent grunn" + +#: Sources/Client/ScoreboardView.cpp:63 Sources/Client/ScoreboardView.cpp:345 +#: Sources/Client/ScoreboardView.cpp:63 Sources/Client/ScoreboardView.cpp:345 +msgctxt "Client" +msgid "Spectator{1}" +msgid_plural "Spectators{1}" +msgstr[0] "Tilskuer{1}" +msgstr[1] "Tilskuere{1}" + +#: Sources/Client/TCProgressView.cpp:151 Sources/Client/TCProgressView.cpp:151 +msgctxt "Client" +msgid "Neutral Territory" +msgstr "Nøytral territorium" + +#: Sources/Client/TCProgressView.cpp:154 Sources/Client/TCProgressView.cpp:154 +msgctxt "Client" +msgid "{0}'s Territory" +msgstr "{0} sitt territorium" + +#: Sources/Gui/Main.cpp:548 Sources/Gui/Main.cpp:577 +msgctxt "Main" +msgid "Localization System Loaded" +msgstr "Lokaliseringssystem lastet inn" + +#: Sources/Gui/Main.cpp:604 Sources/Gui/Runner.cpp:56 Sources/Gui/Main.cpp:633 +#: Sources/Gui/Runner.cpp:56 +msgctxt "Main" +msgid "A serious error caused OpenSpades to stop working:\n\n" +"{0}\n\n" +"See SystemMessages.log for more details." +msgstr "En feil forårsaket OpenSpades til å slutte og fungere:\n\n" +"{0}\n\n" +"Se SystemMessages.log for mer detaljer." + +#: Sources/Gui/Main.cpp:612 Sources/Gui/Runner.cpp:62 Sources/Gui/Main.cpp:641 +#: Sources/Gui/Runner.cpp:62 +msgctxt "Main" +msgid "OpenSpades Fatal Error" +msgstr "OpenSpades fatal feil" + +#: Sources/Gui/MainScreen.cpp:225 Sources/Gui/MainScreen.cpp:220 +msgctxt "MainScreen" +msgid "NOW LOADING" +msgstr "LASTER INN" + +#: Resources/Scripts/Gui/ClientUI.as:198 Resources/Scripts/Gui/ClientUI.as:198 +msgctxt "Client" +msgid "Back to Game" +msgstr "Tilbake til spillet" + +#: Resources/Scripts/Gui/ClientUI.as:205 Resources/Scripts/Gui/ClientUI.as:205 +msgctxt "Client" +msgid "Chat Log" +msgstr "Nettpratlogg" + +#: Resources/Scripts/Gui/ClientUI.as:212 Resources/Scripts/Gui/ClientUI.as:212 +msgctxt "Client" +msgid "Setup" +msgstr "Innstillinger" + +#: Resources/Scripts/Gui/ClientUI.as:219 Resources/Scripts/Gui/ClientUI.as:219 +msgctxt "Client" +msgid "Disconnect" +msgstr "Koble fra" + +#: Resources/Scripts/Gui/ClientUI.as:484 Resources/Scripts/Gui/ClientUI.as:484 +msgctxt "Client" +msgid "Say" +msgstr "Si" + +#: Resources/Scripts/Gui/ClientUI.as:492 Resources/Scripts/Gui/ClientUI.as:492 +msgctxt "Client" +msgid "Cancel" +msgstr "Avbryt" + +#: Resources/Scripts/Gui/ClientUI.as:500 Resources/Scripts/Gui/ClientUI.as:500 +msgctxt "Client" +msgid "Chat Text" +msgstr "Nettprat" + +#: Resources/Scripts/Gui/ClientUI.as:508 Resources/Scripts/Gui/ClientUI.as:508 +msgctxt "Client" +msgid "Global" +msgstr "Global" + +#: Resources/Scripts/Gui/ClientUI.as:517 Resources/Scripts/Gui/ClientUI.as:517 +msgctxt "Client" +msgid "Team" +msgstr "Lag" + +#: Resources/Scripts/Gui/ClientUI.as:661 Resources/Scripts/Gui/ClientUI.as:662 +msgctxt "Client" +msgid "Close" +msgstr "Lukk" + +#: Resources/Scripts/Gui/ClientUI.as:671 Resources/Scripts/Gui/ClientUI.as:672 +msgctxt "Client" +msgid "Say Global" +msgstr "Si globalt" + +#: Resources/Scripts/Gui/ClientUI.as:682 Resources/Scripts/Gui/ClientUI.as:683 +msgctxt "Client" +msgid "Say Team" +msgstr "Si lag" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:58 +#: Resources/Scripts/Gui/CreateProfileScreen.as:58 +msgctxt "CreateProfileScreen" +msgid "OK" +msgstr "OK" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:70 +#: Resources/Scripts/Gui/CreateProfileScreen.as:70 +msgctxt "CreateProfileScreen" +msgid "Decide later" +msgstr "Velg senere" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:80 +#: Resources/Scripts/Gui/CreateProfileScreen.as:80 +msgctxt "CreateProfileScreen" +msgid "Welcome to OpenSpades" +msgstr "Velkommen til OpenSpades" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:88 +#: Resources/Scripts/Gui/CreateProfileScreen.as:88 +msgctxt "CreateProfileScreen" +msgid "Choose a player name:" +msgstr "Lag et kallenavn:" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:96 +#: Resources/Scripts/Gui/CreateProfileScreen.as:96 +msgctxt "CreateProfileScreen" +msgid "Player name" +msgstr "Kallenavn" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:104 +#: Resources/Scripts/Gui/CreateProfileScreen.as:104 +msgctxt "CreateProfileScreen" +msgid "You can change it later in the Setup dialog." +msgstr "Du kan forandre det senere i innstillingene." + +#: Resources/Scripts/Gui/MainScreen.as:376 +#: Resources/Scripts/Gui/MainScreen.as:376 +msgctxt "MainScreen" +msgid "Connect" +msgstr "Koble til" + +#: Resources/Scripts/Gui/MainScreen.as:384 +#: Resources/Scripts/Gui/MainScreen.as:384 +msgctxt "MainScreen" +msgid "Quick Connect" +msgstr "Kjapp tilkobling" + +#: Resources/Scripts/Gui/MainScreen.as:393 +#: Resources/Scripts/Gui/MainScreen.as:447 +#: Resources/Scripts/Gui/MainScreen.as:393 +#: Resources/Scripts/Gui/MainScreen.as:447 +msgctxt "MainScreen" +msgid "0.75" +msgstr "0.75" + +#: Resources/Scripts/Gui/MainScreen.as:403 +#: Resources/Scripts/Gui/MainScreen.as:456 +#: Resources/Scripts/Gui/MainScreen.as:403 +#: Resources/Scripts/Gui/MainScreen.as:456 +msgctxt "MainScreen" +msgid "0.76" +msgstr "0.76" + +#: Resources/Scripts/Gui/MainScreen.as:411 +#: Resources/Scripts/Gui/MainScreen.as:411 +msgctxt "MainScreen" +msgid "Quit" +msgstr "Avslutt" + +#: Resources/Scripts/Gui/MainScreen.as:418 +#: Resources/Scripts/Gui/MainScreen.as:418 +msgctxt "MainScreen" +msgid "Credits" +msgstr "Krediteringer" + +#: Resources/Scripts/Gui/MainScreen.as:425 +#: Resources/Scripts/Gui/MainScreen.as:425 +msgctxt "MainScreen" +msgid "Setup" +msgstr "Innstillinger" + +#: Resources/Scripts/Gui/MainScreen.as:438 +#: Resources/Scripts/Gui/MainScreen.as:482 +#: Resources/Scripts/Gui/MainScreen.as:438 +#: Resources/Scripts/Gui/MainScreen.as:482 +msgctxt "MainScreen" +msgid "Filter" +msgstr "Filter" + +#: Resources/Scripts/Gui/MainScreen.as:465 +#: Resources/Scripts/Gui/MainScreen.as:465 +msgctxt "MainScreen" +msgid "Empty" +msgstr "Tom" + +#: Resources/Scripts/Gui/MainScreen.as:474 +#: Resources/Scripts/Gui/MainScreen.as:474 +msgctxt "MainScreen" +msgid "Not Full" +msgstr "Ikke full" + +#: Resources/Scripts/Gui/MainScreen.as:494 +#: Resources/Scripts/Gui/MainScreen.as:494 +msgctxt "MainScreen" +msgid "Server Name" +msgstr "Tjenernavn" + +#: Resources/Scripts/Gui/MainScreen.as:501 +#: Resources/Scripts/Gui/MainScreen.as:501 +msgctxt "MainScreen" +msgid "Players" +msgstr "Spillere" + +#: Resources/Scripts/Gui/MainScreen.as:508 +#: Resources/Scripts/Gui/MainScreen.as:508 +msgctxt "MainScreen" +msgid "Map Name" +msgstr "Kartnavn" + +#: Resources/Scripts/Gui/MainScreen.as:515 +#: Resources/Scripts/Gui/MainScreen.as:515 +msgctxt "MainScreen" +msgid "Game Mode" +msgstr "Spillmodus" + +#: Resources/Scripts/Gui/MainScreen.as:522 +#: Resources/Scripts/Gui/MainScreen.as:522 +msgctxt "MainScreen" +msgid "Ver." +msgstr "Ver." + +#: Resources/Scripts/Gui/MainScreen.as:529 +#: Resources/Scripts/Gui/MainScreen.as:529 +msgctxt "MainScreen" +msgid "Loc." +msgstr "Lok." + +#: Resources/Scripts/Gui/MainScreen.as:787 +#: Resources/Scripts/Gui/MainScreen.as:787 +msgctxt "MainScreen" +msgid "You were disconnected from the server because of the following reason:\n\n" +"{0}" +msgstr "Du ble avkoblet tjeneren for denne grunnen:\n\n" +"{0}" + +#: Resources/Scripts/Gui/MainScreen.as:807 +#: Resources/Scripts/Gui/MainScreen.as:807 +msgctxt "MainScreen" +msgid "Loading..." +msgstr "Laster inn..." + +#: Resources/Scripts/Gui/MainScreen.as:825 +#: Resources/Scripts/Gui/MainScreen.as:825 +msgctxt "MainScreen" +msgid "Failed to fetch the server list." +msgstr "Mislykkes å få tak i tjenerlisten." + +#: Resources/Scripts/Gui/MessageBox.as:130 +#: Resources/Scripts/Gui/MessageBox.as:144 +#: Resources/Scripts/Gui/MessageBox.as:130 +#: Resources/Scripts/Gui/MessageBox.as:144 +msgctxt "MessageBox" +msgid "OK" +msgstr "OK" + +#: Resources/Scripts/Gui/MessageBox.as:144 +#: Resources/Scripts/Gui/MessageBox.as:144 +msgctxt "MessageBox" +msgid "Cancel" +msgstr "Avbryt" + +#: Resources/Scripts/Gui/Preferences.as:60 +#: Resources/Scripts/Gui/Preferences.as:60 +msgctxt "Preferences" +msgid "Game Options" +msgstr "Spillalternativer" + +#: Resources/Scripts/Gui/Preferences.as:61 +#: Resources/Scripts/Gui/Preferences.as:61 +msgctxt "Preferences" +msgid "Controls" +msgstr "Kontroller" + +#: Resources/Scripts/Gui/Preferences.as:62 +#: Resources/Scripts/Gui/Preferences.as:663 +#: Resources/Scripts/Gui/Preferences.as:708 +#: Resources/Scripts/Gui/Preferences.as:62 +#: Resources/Scripts/Gui/Preferences.as:663 +#: Resources/Scripts/Gui/Preferences.as:708 +msgctxt "Preferences" +msgid "Misc" +msgstr "Diverse" + +#: Resources/Scripts/Gui/Preferences.as:66 +#: Resources/Scripts/Gui/Preferences.as:66 +msgctxt "Preferences" +msgid "Back" +msgstr "Tilbake" + +#: Resources/Scripts/Gui/Preferences.as:407 +#: Resources/Scripts/Gui/Preferences.as:407 +msgctxt "Preferences" +msgid "Press Key to Bind or [Escape] to Cancel..." +msgstr "Trykk en tast for å binde eller [Escape] for å avbryte..." + +#: Resources/Scripts/Gui/Preferences.as:418 +#: Resources/Scripts/Gui/Preferences.as:418 +msgctxt "Preferences" +msgid "Space" +msgstr "Mellomrom" + +#: Resources/Scripts/Gui/Preferences.as:420 +#: Resources/Scripts/Gui/Preferences.as:420 +msgctxt "Preferences" +msgid "Unbound" +msgstr "Ubundet" + +#: Resources/Scripts/Gui/Preferences.as:423 +#: Resources/Scripts/Gui/Preferences.as:423 +msgctxt "Preferences" +msgid "Shift" +msgstr "Skift" + +#: Resources/Scripts/Gui/Preferences.as:425 +#: Resources/Scripts/Gui/Preferences.as:425 +msgctxt "Preferences" +msgid "Control" +msgstr "Kontroll" + +#: Resources/Scripts/Gui/Preferences.as:427 +#: Resources/Scripts/Gui/Preferences.as:427 +msgctxt "Preferences" +msgid "Meta" +msgstr "Meta" + +#: Resources/Scripts/Gui/Preferences.as:429 +#: Resources/Scripts/Gui/Preferences.as:429 +msgctxt "Preferences" +msgid "Alt" +msgstr "Alt" + +#: Resources/Scripts/Gui/Preferences.as:431 +#: Resources/Scripts/Gui/Preferences.as:431 +msgctxt "Preferences" +msgid "Left Mouse Button" +msgstr "Venstre museknapp" + +#: Resources/Scripts/Gui/Preferences.as:433 +#: Resources/Scripts/Gui/Preferences.as:433 +msgctxt "Preferences" +msgid "Right Mouse Button" +msgstr "Høyre museknapp" + +#: Resources/Scripts/Gui/Preferences.as:435 +#: Resources/Scripts/Gui/Preferences.as:435 +msgctxt "Preferences" +msgid "Middle Mouse Button" +msgstr "Midterste museknapp" + +#: Resources/Scripts/Gui/Preferences.as:437 +#: Resources/Scripts/Gui/Preferences.as:437 +msgctxt "Preferences" +msgid "Mouse Button 4" +msgstr "Museknapp 4" + +#: Resources/Scripts/Gui/Preferences.as:439 +#: Resources/Scripts/Gui/Preferences.as:439 +msgctxt "Preferences" +msgid "Mouse Button 5" +msgstr "Museknapp 5" + +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +msgctxt "Preferences" +msgid "ON" +msgstr "PÅ" + +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "OFF" +msgstr "AV" + +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:619 +msgctxt "Preferences" +msgid "REVERSED" +msgstr "REVERSERT" + +#: Resources/Scripts/Gui/Preferences.as:637 +#: Resources/Scripts/Gui/Preferences.as:637 +msgctxt "Preferences" +msgid "Player Information" +msgstr "Spillerinformasjon" + +#: Resources/Scripts/Gui/Preferences.as:638 +#: Resources/Scripts/Gui/Preferences.as:638 +msgctxt "Preferences" +msgid "Player Name" +msgstr "Kallenavn" + +#: Resources/Scripts/Gui/Preferences.as:642 +#: Resources/Scripts/Gui/Preferences.as:642 +msgctxt "Preferences" +msgid "Effects" +msgstr "Effekter" + +#: Resources/Scripts/Gui/Preferences.as:643 +#: Resources/Scripts/Gui/Preferences.as:643 +msgctxt "Preferences" +msgid "Blood" +msgstr "Blod" + +#: Resources/Scripts/Gui/Preferences.as:644 +#: Resources/Scripts/Gui/Preferences.as:644 +msgctxt "Preferences" +msgid "Ejecting Brass" +msgstr "Tomhylser" + +#: Resources/Scripts/Gui/Preferences.as:645 +#: Resources/Scripts/Gui/Preferences.as:645 +msgctxt "Preferences" +msgid "Ragdoll" +msgstr "Filledukker" + +#: Resources/Scripts/Gui/Preferences.as:646 +#: Resources/Scripts/Gui/Preferences.as:646 +msgctxt "Preferences" +msgid "Animations" +msgstr "Animasjoner" + +#: Resources/Scripts/Gui/Preferences.as:647 +#: Resources/Scripts/Gui/Preferences.as:647 +msgctxt "Preferences" +msgid "Camera Shake" +msgstr "Kamerarystelse" + +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:648 +msgctxt "Preferences" +msgid "MORE" +msgstr "MER" + +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "NORMAL" +msgstr "NORMAL" + +#: Resources/Scripts/Gui/Preferences.as:650 +#: Resources/Scripts/Gui/Preferences.as:650 +msgctxt "Preferences" +msgid "Particles" +msgstr "Partikler" + +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "LESS" +msgstr "MINDRE" + +#: Resources/Scripts/Gui/Preferences.as:654 +#: Resources/Scripts/Gui/Preferences.as:654 +msgctxt "Preferences" +msgid "Feedbacks" +msgstr "Tilbakemelding" + +#: Resources/Scripts/Gui/Preferences.as:655 +#: Resources/Scripts/Gui/Preferences.as:655 +msgctxt "Preferences" +msgid "Chat Notify Sounds" +msgstr "Varslingslyder for nettprat" + +#: Resources/Scripts/Gui/Preferences.as:656 +#: Resources/Scripts/Gui/Preferences.as:656 +msgctxt "Preferences" +msgid "Hit Indicator" +msgstr "Treffindikator" + +#: Resources/Scripts/Gui/Preferences.as:657 +#: Resources/Scripts/Gui/Preferences.as:657 +msgctxt "Preferences" +msgid "Show Alerts" +msgstr "Vis varsler" + +#: Resources/Scripts/Gui/Preferences.as:659 +#: Resources/Scripts/Gui/Preferences.as:659 +msgctxt "Preferences" +msgid "AoS 0.75/0.76 Compatibility" +msgstr "AoS 0.75/0.76 kompatibilitet" + +#: Resources/Scripts/Gui/Preferences.as:660 +#: Resources/Scripts/Gui/Preferences.as:660 +msgctxt "Preferences" +msgid "Allow Unicode" +msgstr "Tillat unicode" + +#: Resources/Scripts/Gui/Preferences.as:661 +#: Resources/Scripts/Gui/Preferences.as:661 +msgctxt "Preferences" +msgid "Server Alert" +msgstr "Server varsel" + +#: Resources/Scripts/Gui/Preferences.as:664 +#: Resources/Scripts/Gui/Preferences.as:664 +msgctxt "Preferences" +msgid "Field of View" +msgstr "Synsfelt" + +#: Resources/Scripts/Gui/Preferences.as:666 +#: Resources/Scripts/Gui/Preferences.as:666 +msgctxt "Preferences" +msgid "Minimap size" +msgstr "Minikart størrelse" + +#: Resources/Scripts/Gui/Preferences.as:668 +#: Resources/Scripts/Gui/Preferences.as:668 +msgctxt "Preferences" +msgid "Show Statistics" +msgstr "Vis statistikk" + +#: Resources/Scripts/Gui/Preferences.as:678 +#: Resources/Scripts/Gui/Preferences.as:678 +msgctxt "Preferences" +msgid "Weapons/Tools" +msgstr "Våpen/Verktøy" + +#: Resources/Scripts/Gui/Preferences.as:679 +#: Resources/Scripts/Gui/Preferences.as:679 +msgctxt "Preferences" +msgid "Attack" +msgstr "Angrip" + +#: Resources/Scripts/Gui/Preferences.as:680 +#: Resources/Scripts/Gui/Preferences.as:680 +msgctxt "Preferences" +msgid "Alt. Attack" +msgstr "Alt. Angrep" + +#: Resources/Scripts/Gui/Preferences.as:681 +#: Resources/Scripts/Gui/Preferences.as:681 +msgctxt "Preferences" +msgid "Hold Aim Down Sight" +msgstr "Hold ned siktet" + +#: Resources/Scripts/Gui/Preferences.as:682 +#: Resources/Scripts/Gui/Preferences.as:682 +msgctxt "Preferences" +msgid "Mouse Sensitivity" +msgstr "Mus sensitivitet" + +#: Resources/Scripts/Gui/Preferences.as:684 +#: Resources/Scripts/Gui/Preferences.as:684 +msgctxt "Preferences" +msgid "ADS Mouse Sens. Scale" +msgstr "ADS mus sens. skalering" + +#: Resources/Scripts/Gui/Preferences.as:686 +#: Resources/Scripts/Gui/Preferences.as:686 +msgctxt "Preferences" +msgid "Exponential Power" +msgstr "Eksponentiell kraft" + +#: Resources/Scripts/Gui/Preferences.as:688 +#: Resources/Scripts/Gui/Preferences.as:688 +msgctxt "Preferences" +msgid "Invert Y-axis Mouse Input" +msgstr "Inverter Y-akse musinngang" + +#: Resources/Scripts/Gui/Preferences.as:689 +#: Resources/Scripts/Gui/Preferences.as:689 +msgctxt "Preferences" +msgid "Reload" +msgstr "Lad om" + +#: Resources/Scripts/Gui/Preferences.as:690 +#: Resources/Scripts/Gui/Preferences.as:690 +msgctxt "Preferences" +msgid "Capture Color" +msgstr "Kapringsfarge" + +#: Resources/Scripts/Gui/Preferences.as:691 +#: Resources/Scripts/Gui/Preferences.as:691 +msgctxt "Preferences" +msgid "Equip Spade" +msgstr "Utrust med spade" + +#: Resources/Scripts/Gui/Preferences.as:692 +#: Resources/Scripts/Gui/Preferences.as:692 +msgctxt "Preferences" +msgid "Equip Block" +msgstr "Utrust med blokk" + +#: Resources/Scripts/Gui/Preferences.as:693 +#: Resources/Scripts/Gui/Preferences.as:693 +msgctxt "Preferences" +msgid "Equip Weapon" +msgstr "Utrust med våpen" + +#: Resources/Scripts/Gui/Preferences.as:694 +#: Resources/Scripts/Gui/Preferences.as:694 +msgctxt "Preferences" +msgid "Equip Grenade" +msgstr "Utrust med granat" + +#: Resources/Scripts/Gui/Preferences.as:695 +#: Resources/Scripts/Gui/Preferences.as:695 +msgctxt "Preferences" +msgid "Last Used Tool" +msgstr "Sist brukte verktøy" + +#: Resources/Scripts/Gui/Preferences.as:696 +#: Resources/Scripts/Gui/Preferences.as:696 +msgctxt "Preferences" +msgid "Switch Tools by Wheel" +msgstr "Bytt verktøy med hjulet" + +#: Resources/Scripts/Gui/Preferences.as:698 +#: Resources/Scripts/Gui/Preferences.as:698 +msgctxt "Preferences" +msgid "Movement" +msgstr "Bevegelse" + +#: Resources/Scripts/Gui/Preferences.as:699 +#: Resources/Scripts/Gui/Preferences.as:699 +msgctxt "Preferences" +msgid "Walk Forward" +msgstr "Gå fremover" + +#: Resources/Scripts/Gui/Preferences.as:700 +#: Resources/Scripts/Gui/Preferences.as:700 +msgctxt "Preferences" +msgid "Backpedal" +msgstr "Gå bakover" + +#: Resources/Scripts/Gui/Preferences.as:701 +#: Resources/Scripts/Gui/Preferences.as:701 +msgctxt "Preferences" +msgid "Move Left" +msgstr "Gå venstre" + +#: Resources/Scripts/Gui/Preferences.as:702 +#: Resources/Scripts/Gui/Preferences.as:702 +msgctxt "Preferences" +msgid "Move Right" +msgstr "Gå høyre" + +#: Resources/Scripts/Gui/Preferences.as:703 +#: Resources/Scripts/Gui/Preferences.as:703 +msgctxt "Preferences" +msgid "Crouch" +msgstr "Krøke" + +#: Resources/Scripts/Gui/Preferences.as:704 +#: Resources/Scripts/Gui/Preferences.as:704 +msgctxt "Preferences" +msgid "Sneak" +msgstr "Snik" + +#: Resources/Scripts/Gui/Preferences.as:705 +#: Resources/Scripts/Gui/Preferences.as:705 +msgctxt "Preferences" +msgid "Jump" +msgstr "Hopp" + +#: Resources/Scripts/Gui/Preferences.as:706 +#: Resources/Scripts/Gui/Preferences.as:706 +msgctxt "Preferences" +msgid "Sprint" +msgstr "Løp" + +#: Resources/Scripts/Gui/Preferences.as:709 +#: Resources/Scripts/Gui/Preferences.as:709 +msgctxt "Preferences" +msgid "Minimap Scale" +msgstr "Minikart skalering" + +#: Resources/Scripts/Gui/Preferences.as:710 +#: Resources/Scripts/Gui/Preferences.as:710 +msgctxt "Preferences" +msgid "Toggle Map" +msgstr "Veksle kart" + +#: Resources/Scripts/Gui/Preferences.as:711 +#: Resources/Scripts/Gui/Preferences.as:711 +msgctxt "Preferences" +msgid "Flashlight" +msgstr "Lommelykt" + +#: Resources/Scripts/Gui/Preferences.as:712 +#: Resources/Scripts/Gui/Preferences.as:712 +msgctxt "Preferences" +msgid "Global Chat" +msgstr "Global nettprat" + +#: Resources/Scripts/Gui/Preferences.as:713 +#: Resources/Scripts/Gui/Preferences.as:713 +msgctxt "Preferences" +msgid "Team Chat" +msgstr "Lag nettprat" + +#: Resources/Scripts/Gui/Preferences.as:714 +#: Resources/Scripts/Gui/Preferences.as:714 +msgctxt "Preferences" +msgid "Limbo Menu" +msgstr "Limbo meny" + +#: Resources/Scripts/Gui/Preferences.as:715 +#: Resources/Scripts/Gui/Preferences.as:715 +msgctxt "Preferences" +msgid "Save Map" +msgstr "Lagre kart" + +#: Resources/Scripts/Gui/Preferences.as:716 +#: Resources/Scripts/Gui/Preferences.as:716 +msgctxt "Preferences" +msgid "Save Sceneshot" +msgstr "Lagre sceneskudd" + +#: Resources/Scripts/Gui/Preferences.as:717 +#: Resources/Scripts/Gui/Preferences.as:717 +msgctxt "Preferences" +msgid "Save Screenshot" +msgstr "Lagre skjermbilde" + +#: Resources/Scripts/Gui/Preferences.as:736 +#: Resources/Scripts/Gui/Preferences.as:736 +msgctxt "Preferences" +msgid "Enable Startup Window" +msgstr "Aktiver oppstartsvindu" + +#: Resources/Scripts/Gui/Preferences.as:757 +#: Resources/Scripts/Gui/Preferences.as:757 +msgctxt "Preferences" +msgid "Quit and restart OpenSpades to access the startup window." +msgstr "Avslutt og start på nytt OpenSpades for å adgang til oppstartsvinduet." + +#: Resources/Scripts/Gui/Preferences.as:758 +#: Resources/Scripts/Gui/Preferences.as:758 +msgctxt "Preferences" +msgid "Some settings only can be changed in the startup window." +msgstr "Noen innstillinger kan kun bli forandret i oppstartsvinduet." + +#: Resources/Scripts/Gui/StartupScreen.as:160 +#: Resources/Scripts/Gui/StartupScreen.as:160 +msgctxt "StartupScreen" +msgid "Start" +msgstr "Start" + +#: Resources/Scripts/Gui/StartupScreen.as:167 +#: Resources/Scripts/Gui/StartupScreen.as:167 +msgctxt "StartupScreen" +msgid "Skip this screen next time" +msgstr "Hopp over denne skjermen neste gang" + +#: Resources/Scripts/Gui/StartupScreen.as:211 +#: Resources/Scripts/Gui/StartupScreen.as:211 +msgctxt "StartupScreen" +msgid "Graphics" +msgstr "Grafikk" + +#: Resources/Scripts/Gui/StartupScreen.as:212 +#: Resources/Scripts/Gui/StartupScreen.as:212 +msgctxt "StartupScreen" +msgid "Audio" +msgstr "Lyd" + +#: Resources/Scripts/Gui/StartupScreen.as:213 +#: Resources/Scripts/Gui/StartupScreen.as:213 +msgctxt "StartupScreen" +msgid "Generic" +msgstr "Generelt" + +#: Resources/Scripts/Gui/StartupScreen.as:214 +#: Resources/Scripts/Gui/StartupScreen.as:214 +msgctxt "StartupScreen" +msgid "System Info" +msgstr "Systeminfo" + +#: Resources/Scripts/Gui/StartupScreen.as:215 +#: Resources/Scripts/Gui/StartupScreen.as:1679 +#: Resources/Scripts/Gui/StartupScreen.as:215 +#: Resources/Scripts/Gui/StartupScreen.as:1679 +msgctxt "StartupScreen" +msgid "Advanced" +msgstr "Avansert" + +#: Resources/Scripts/Gui/StartupScreen.as:288 +#: Resources/Scripts/Gui/StartupScreen.as:288 +msgctxt "StartupScreen" +msgid "An unknown error has occurred while opening the update info website." +msgstr "En ukjent feil har skjedd mens nettsiden ble lastet inn." + +#: Resources/Scripts/Gui/StartupScreen.as:853 +#: Resources/Scripts/Gui/StartupScreen.as:853 +msgctxt "StartupScreen" +msgid "Custom" +msgstr "Tilpasset" + +#: Resources/Scripts/Gui/StartupScreen.as:979 +#: Resources/Scripts/Gui/StartupScreen.as:979 +msgctxt "StartupScreen" +msgid "Close" +msgstr "Lukk" + +#: Resources/Scripts/Gui/StartupScreen.as:1085 +#: Resources/Scripts/Gui/StartupScreen.as:1085 +msgctxt "StartupScreen" +msgid "Graphics Settings" +msgstr "Grafikkinnstillinger" + +#: Resources/Scripts/Gui/StartupScreen.as:1090 +#: Resources/Scripts/Gui/StartupScreen.as:1090 +msgctxt "StartupScreen" +msgid "Resolution" +msgstr "Oppløsning" + +#: Resources/Scripts/Gui/StartupScreen.as:1100 +#: Resources/Scripts/Gui/StartupScreen.as:1100 +msgctxt "StartupScreen" +msgid "Fullscreen Mode" +msgstr "Fullskjerm-modus" + +#: Resources/Scripts/Gui/StartupScreen.as:1103 +#: Resources/Scripts/Gui/StartupScreen.as:1103 +msgctxt "StartupScreen" +msgid "By running in fullscreen mode OpenSpades occupies the screen, making it easier for you to concentrate on playing the game." +msgstr "Ved å kjøre i fullskjerm-modus, så dekker OpenSpades hele skjermen. Dette gjør det enklere for deg å konsentrere deg på spillet." + +#: Resources/Scripts/Gui/StartupScreen.as:1110 +#: Resources/Scripts/Gui/StartupScreen.as:1492 +#: Resources/Scripts/Gui/StartupScreen.as:1110 +#: Resources/Scripts/Gui/StartupScreen.as:1492 +msgctxt "StartupScreen" +msgid "Backend" +msgstr "Backend" + +#: Resources/Scripts/Gui/StartupScreen.as:1113 +#: Resources/Scripts/Gui/StartupScreen.as:1113 +msgctxt "StartupScreen" +msgid "OpenGL" +msgstr "OpenGL" + +#: Resources/Scripts/Gui/StartupScreen.as:1117 +#: Resources/Scripts/Gui/StartupScreen.as:1117 +msgctxt "StartupScreen" +msgid "OpenGL renderer uses your computer's graphics accelerator to generate the game screen." +msgstr "OpenGL-gjengiveren bruker maskinens grafikkakselerator til å generere spillskjermen." + +#: Resources/Scripts/Gui/StartupScreen.as:1125 +#: Resources/Scripts/Gui/StartupScreen.as:1125 +msgctxt "StartupScreen" +msgid "Software" +msgstr "Programvare" + +#: Resources/Scripts/Gui/StartupScreen.as:1129 +#: Resources/Scripts/Gui/StartupScreen.as:1129 +msgctxt "StartupScreen" +msgid "Software renderer uses CPU to generate the game screen. Its quality and performance might be inferior to OpenGL renderer, but it works even with an unsupported GPU." +msgstr "Programvaregjengiveren bruker prosessoren til å generere spillskjermen. Kvaliteten og ytelsen er muligens verre en OpenGL-gjengiveren, men virker selv med en ustøttet grafikkakselerator." + +#: Resources/Scripts/Gui/StartupScreen.as:1143 +#: Resources/Scripts/Gui/StartupScreen.as:1143 +msgctxt "StartupScreen" +msgid "Antialias:Enables a technique to improve the appearance of high-contrast edges.\n\n" +"MSAA: Performs antialiasing by generating an intermediate high-resolution image. Looks best, but doesn't cope with some settings.\n\n" +"FXAA: Performs antialiasing by smoothing artifacts out as a post-process.|Off|MSAA 2x|4x|FXAA" +msgstr "Anti-alias: Aktiverer en teknikk som forbedrer utsendet til kanter med høy kontrast.\n\n" +"MSAA: Utfører anti-aliasing ved å generere en mellomliggende høy oppløslig bilde. Ser best ut, men virker ikke bra med noen innstillinger.\n\n" +"FXAA: Utfører anti-aliasing ved å jevne ut artefakter i etterprosessering.|Av|MSAA 2x|4x|FXAA" + +#: Resources/Scripts/Gui/StartupScreen.as:1150 +#: Resources/Scripts/Gui/StartupScreen.as:1150 +msgctxt "StartupScreen" +msgid "Global Illumination" +msgstr "Global belysning" + +#: Resources/Scripts/Gui/StartupScreen.as:1152 +#: Resources/Scripts/Gui/StartupScreen.as:1152 +msgctxt "StartupScreen" +msgid "Enables a physically based simulation of light path for more realistic lighting." +msgstr "Aktiverer en fysisk basert simulering av lys for mer realistisk belysning." + +#: Resources/Scripts/Gui/StartupScreen.as:1155 +#: Resources/Scripts/Gui/StartupScreen.as:1155 +msgctxt "StartupScreen" +msgid "Linear HDR Rendering" +msgstr "Lineær HDR gjengivelse" + +#: Resources/Scripts/Gui/StartupScreen.as:1157 +#: Resources/Scripts/Gui/StartupScreen.as:1157 +msgctxt "StartupScreen" +msgid "Uses a number representation which allows wider dynamic range during rendering process. Additionally, this allows color calculation whose value is in linear correspondence with actual energy, that is, physically accurate blending can be achieved." +msgstr "Bruker en tallrepresentasjon som tillater bredere dynamiske rekkevidde under gjengivelsesprosessen. I tillegg tillater dette fargekalkulering hvis verdi er i lineær korrespondanse med faktisk energi, det vil si fysisk nøyaktig blanding kan oppnås." + +#: Resources/Scripts/Gui/StartupScreen.as:1164 +#: Resources/Scripts/Gui/StartupScreen.as:1164 +msgctxt "StartupScreen" +msgid "Camera Blur" +msgstr "Kamerasløring" + +#: Resources/Scripts/Gui/StartupScreen.as:1165 +#: Resources/Scripts/Gui/StartupScreen.as:1165 +msgctxt "StartupScreen" +msgid "Blurs the screen when you turn quickly." +msgstr "Slører skjermen når du snur deg kjapt." + +#: Resources/Scripts/Gui/StartupScreen.as:1167 +#: Resources/Scripts/Gui/StartupScreen.as:1167 +msgctxt "StartupScreen" +msgid "Lens Effect" +msgstr "Linseeffekt" + +#: Resources/Scripts/Gui/StartupScreen.as:1168 +#: Resources/Scripts/Gui/StartupScreen.as:1168 +msgctxt "StartupScreen" +msgid "Simulates distortion caused by a real camera lens." +msgstr "Simulerer forvrenginger skapt av ekte kameralinser." + +#: Resources/Scripts/Gui/StartupScreen.as:1170 +#: Resources/Scripts/Gui/StartupScreen.as:1170 +msgctxt "StartupScreen" +msgid "Lens Scattering Filter" +msgstr "Linsespredningsfilter" + +#: Resources/Scripts/Gui/StartupScreen.as:1171 +#: Resources/Scripts/Gui/StartupScreen.as:1171 +msgctxt "StartupScreen" +msgid "Simulates light being scattered by dust on the camera lens." +msgstr "Simulerer linsespredning forårsaket av støv på kameralinsen." + +#: Resources/Scripts/Gui/StartupScreen.as:1174 +#: Resources/Scripts/Gui/StartupScreen.as:1174 +msgctxt "StartupScreen" +msgid "Lens Flare" +msgstr "Lysskjær" + +#: Resources/Scripts/Gui/StartupScreen.as:1175 +#: Resources/Scripts/Gui/StartupScreen.as:1175 +msgctxt "StartupScreen" +msgid "The Sun causes lens flare." +msgstr "Solen forårsaker lysskjær." + +#: Resources/Scripts/Gui/StartupScreen.as:1177 +#: Resources/Scripts/Gui/StartupScreen.as:1177 +msgctxt "StartupScreen" +msgid "Flares for Dynamic Lights" +msgstr "Lysskjær for dynamiske lyskilder" + +#: Resources/Scripts/Gui/StartupScreen.as:1178 +#: Resources/Scripts/Gui/StartupScreen.as:1178 +msgctxt "StartupScreen" +msgid "Enables lens flare for light sources other than the Sun." +msgstr "Aktiverer lysskjær for andre lyskilder enn solen." + +#: Resources/Scripts/Gui/StartupScreen.as:1180 +#: Resources/Scripts/Gui/StartupScreen.as:1180 +msgctxt "StartupScreen" +msgid "Color Correction" +msgstr "Fargekorrigering" + +#: Resources/Scripts/Gui/StartupScreen.as:1181 +#: Resources/Scripts/Gui/StartupScreen.as:1181 +msgctxt "StartupScreen" +msgid "Applies cinematic color correction to make the image look better." +msgstr "Legger til fargekorrigering for å få bildet til å se bedre ut." + +#: Resources/Scripts/Gui/StartupScreen.as:1183 +#: Resources/Scripts/Gui/StartupScreen.as:1183 +msgctxt "StartupScreen" +msgid "Depth of Field" +msgstr "Dybdeskarphet" + +#: Resources/Scripts/Gui/StartupScreen.as:1184 +#: Resources/Scripts/Gui/StartupScreen.as:1184 +msgctxt "StartupScreen" +msgid "Blurs out-of-focus objects." +msgstr "Slører til objekter som er ute av fokus." + +#: Resources/Scripts/Gui/StartupScreen.as:1186 +#: Resources/Scripts/Gui/StartupScreen.as:1186 +msgctxt "StartupScreen" +msgid "Screen Space Ambient Occlusion" +msgstr "Omgivelses okklusjon på skjermplass" + +#: Resources/Scripts/Gui/StartupScreen.as:1187 +#: Resources/Scripts/Gui/StartupScreen.as:1187 +msgctxt "StartupScreen" +msgid "Simulates soft shadows that occur between nearby objects." +msgstr "Simulerer myke skygger som finnes mellom objekter." + +#: Resources/Scripts/Gui/StartupScreen.as:1189 +#: Resources/Scripts/Gui/StartupScreen.as:1228 +#: Resources/Scripts/Gui/StartupScreen.as:1250 +#: Resources/Scripts/Gui/StartupScreen.as:1189 +#: Resources/Scripts/Gui/StartupScreen.as:1228 +#: Resources/Scripts/Gui/StartupScreen.as:1250 +msgctxt "StartupScreen" +msgid "Low" +msgstr "Lav" + +#: Resources/Scripts/Gui/StartupScreen.as:1190 +#: Resources/Scripts/Gui/StartupScreen.as:1229 +#: Resources/Scripts/Gui/StartupScreen.as:1190 +#: Resources/Scripts/Gui/StartupScreen.as:1229 +msgctxt "StartupScreen" +msgid "Medium" +msgstr "Middels" + +#: Resources/Scripts/Gui/StartupScreen.as:1191 +#: Resources/Scripts/Gui/StartupScreen.as:1230 +#: Resources/Scripts/Gui/StartupScreen.as:1252 +#: Resources/Scripts/Gui/StartupScreen.as:1191 +#: Resources/Scripts/Gui/StartupScreen.as:1230 +#: Resources/Scripts/Gui/StartupScreen.as:1252 +msgctxt "StartupScreen" +msgid "High" +msgstr "Høy" + +#: Resources/Scripts/Gui/StartupScreen.as:1192 +#: Resources/Scripts/Gui/StartupScreen.as:1253 +#: Resources/Scripts/Gui/StartupScreen.as:1192 +#: Resources/Scripts/Gui/StartupScreen.as:1253 +msgctxt "StartupScreen" +msgid "Ultra" +msgstr "Ultra" + +#: Resources/Scripts/Gui/StartupScreen.as:1195 +#: Resources/Scripts/Gui/StartupScreen.as:1195 +msgctxt "StartupScreen" +msgid "Post-process" +msgstr "Etterprosessering" + +#: Resources/Scripts/Gui/StartupScreen.as:1196 +#: Resources/Scripts/Gui/StartupScreen.as:1196 +msgctxt "StartupScreen" +msgid "Post-process modifies the image to make it look better and more realistic." +msgstr "Etterprosessering modifiserer bildet til å se bedre og mer realistisk ut." + +#: Resources/Scripts/Gui/StartupScreen.as:1203 +#: Resources/Scripts/Gui/StartupScreen.as:1203 +msgctxt "StartupScreen" +msgid "Particles|Low:Artifact occurs when a particle intersects other objects.|Medium:Particle intersects objects smoothly.|High:Particle intersects objects smoothly, and some objects casts their shadow to particles." +msgstr "Partikler|Lav:Artefakter forekommer når en partikkel skjærer inn i andre objekter.|Middels:Partikler skjærer inn i objekter på en fin måte.|Høy:Partikler skjærer inn i objekter på en fin måte og kan ha skygger." + +#: Resources/Scripts/Gui/StartupScreen.as:1213 +#: Resources/Scripts/Gui/StartupScreen.as:1213 +msgctxt "StartupScreen" +msgid "Dynamic Lights" +msgstr "Dynamiske lyskilder" + +#: Resources/Scripts/Gui/StartupScreen.as:1215 +#: Resources/Scripts/Gui/StartupScreen.as:1215 +msgctxt "StartupScreen" +msgid "Gives some objects an ability to emit light to give them an energy-emitting impression." +msgstr "Gir noen objekter muligheten til å avgi lys. Ser ut som de gir fra seg mer energi." + +#: Resources/Scripts/Gui/StartupScreen.as:1218 +#: Resources/Scripts/Gui/StartupScreen.as:1218 +msgctxt "StartupScreen" +msgid "Shadows" +msgstr "Skygger" + +#: Resources/Scripts/Gui/StartupScreen.as:1219 +#: Resources/Scripts/Gui/StartupScreen.as:1219 +msgctxt "StartupScreen" +msgid "Non-static object casts a shadow." +msgstr "Dynamiske objekter gir fra seg skygger." + +#: Resources/Scripts/Gui/StartupScreen.as:1221 +#: Resources/Scripts/Gui/StartupScreen.as:1221 +msgctxt "StartupScreen" +msgid "Volumetric Fog" +msgstr "Volumetrisk tåke" + +#: Resources/Scripts/Gui/StartupScreen.as:1222 +#: Resources/Scripts/Gui/StartupScreen.as:1222 +msgctxt "StartupScreen" +msgid "Simulates shadow being casted to the fog particles using a super highly computationally demanding algorithm. " +msgstr "Simulerer skygger som går gjennom tåke partikler ved å bruke en svært krevende algoritme. " + +#: Resources/Scripts/Gui/StartupScreen.as:1225 +#: Resources/Scripts/Gui/StartupScreen.as:1225 +msgctxt "StartupScreen" +msgid "Physically Based Lighting" +msgstr "Fysisk basert belysning" + +#: Resources/Scripts/Gui/StartupScreen.as:1226 +#: Resources/Scripts/Gui/StartupScreen.as:1226 +msgctxt "StartupScreen" +msgid "Uses more accurate approximation techniques to decide the brightness of objects." +msgstr "Bruken en nøyaktig tilnærming for å bestemme lysstyrken til objekter." + +#: Resources/Scripts/Gui/StartupScreen.as:1233 +#: Resources/Scripts/Gui/StartupScreen.as:1233 +msgctxt "StartupScreen" +msgid "Direct Lights" +msgstr "Direkte lyskilder" + +#: Resources/Scripts/Gui/StartupScreen.as:1234 +#: Resources/Scripts/Gui/StartupScreen.as:1234 +msgctxt "StartupScreen" +msgid "Controls how light encounting a material and atmosphere directly affects its appearance." +msgstr "Kontrollerer hvordan lys støter på materialer, atmosfære og hvordan det direkte påvirker utseendet." + +#: Resources/Scripts/Gui/StartupScreen.as:1244 +#: Resources/Scripts/Gui/StartupScreen.as:1244 +msgctxt "StartupScreen" +msgid "Water Shader|None:Water is rendered in the same way that normal blocks are done.|Level 1:Refraction and the reflected Sun are simulated.|Level 2:Waving water is simulated as well as reflection and refraction.|Level 3:Reflections and refractions are rendered at the highest quality using screen-space techniques." +msgstr "Vann Shader|None:Vann gjengis på same måten som normal blokker.|Nivå 1:Refraksjoner og refleksjoner av solen er simulert.|Nivå 2: Bølger, refraksjoner og refleksjoner er simulert.|Nivå 3:Refleksjoner og refraksjoner blir gjengitt på høyeste kvalitet gjennom screen-space teknikker." + +#: Resources/Scripts/Gui/StartupScreen.as:1251 +#: Resources/Scripts/Gui/StartupScreen.as:1251 +msgctxt "StartupScreen" +msgid "Med" +msgstr "Med" + +#: Resources/Scripts/Gui/StartupScreen.as:1256 +#: Resources/Scripts/Gui/StartupScreen.as:1256 +msgctxt "StartupScreen" +msgid "Shader Effects" +msgstr "Shader-effekter" + +#: Resources/Scripts/Gui/StartupScreen.as:1256 +#: Resources/Scripts/Gui/StartupScreen.as:1256 +msgctxt "StartupScreen" +msgid "Special effects." +msgstr "Spesialeffekter." + +#: Resources/Scripts/Gui/StartupScreen.as:1273 +#: Resources/Scripts/Gui/StartupScreen.as:1273 +msgctxt "StartupScreen" +msgid "Fast Mode:Reduces the image resolution to make the rendering faster.|Off|2x|4x" +msgstr "Rask modus:Reduserer oppløsningen for å få gjengivelsen til å gå raskere.|Av|2x|4x" + +#: Resources/Scripts/Gui/StartupScreen.as:1486 +#: Resources/Scripts/Gui/StartupScreen.as:1486 +msgctxt "StartupScreen" +msgid "Audio Settings" +msgstr "Lydinnstillinger" + +#: Resources/Scripts/Gui/StartupScreen.as:1495 +#: Resources/Scripts/Gui/StartupScreen.as:1495 +msgctxt "StartupScreen" +msgid "OpenAL" +msgstr "OpenAL" + +#: Resources/Scripts/Gui/StartupScreen.as:1499 +#: Resources/Scripts/Gui/StartupScreen.as:1499 +msgctxt "StartupScreen" +msgid "Uses an OpenAL-capable sound card to process sound. In most cases where there isn't such a sound card, software emulation is used." +msgstr "Bruker et OpenAL kompatibelt lydkort til å prosessere lyden. I det fleste tilfeller det det ikke er et kompatibelt lydkort, så brukes programvareemulering." + +#: Resources/Scripts/Gui/StartupScreen.as:1508 +#: Resources/Scripts/Gui/StartupScreen.as:1508 +msgctxt "StartupScreen" +msgid "YSR" +msgstr "YSR" + +#: Resources/Scripts/Gui/StartupScreen.as:1512 +#: Resources/Scripts/Gui/StartupScreen.as:1512 +msgctxt "StartupScreen" +msgid "YSR is an experimental 3D HDR sound engine optimized for OpenSpades. It features several enhanced features including automatic load control, dynamics compressor, HRTF-based 3D audio, and high quality reverb." +msgstr "YSR er en eksperimentell 3D HDR lydmotor som er optimisert for OpenSpades. Det inneholder flere forbedrede egenskaper som automatisk belastningskontroll, dynamisk compressor, HRTF-basert 3D lyd og ekko av høg kvalitet." + +#. ! The name of audio driver that outputs no audio. +#: Resources/Scripts/Gui/StartupScreen.as:1523 +#: Resources/Scripts/Gui/StartupScreen.as:1523 +msgctxt "StartupScreen" +msgid "Null" +msgstr "Null" + +#: Resources/Scripts/Gui/StartupScreen.as:1527 +#: Resources/Scripts/Gui/StartupScreen.as:1527 +msgctxt "StartupScreen" +msgid "Disables audio output." +msgstr "Deaktiverer lyd." + +#: Resources/Scripts/Gui/StartupScreen.as:1538 +#: Resources/Scripts/Gui/StartupScreen.as:1562 +#: Resources/Scripts/Gui/StartupScreen.as:1538 +#: Resources/Scripts/Gui/StartupScreen.as:1562 +msgctxt "StartupScreen" +msgid "Polyphonics" +msgstr "Polyfonikk" + +#: Resources/Scripts/Gui/StartupScreen.as:1539 +#: Resources/Scripts/Gui/StartupScreen.as:1539 +msgctxt "StartupScreen" +msgid "Specifies how many sounds can be played simultaneously. Higher value needs more processing power, so setting this too high might cause an overload (especially with a software emulation)." +msgstr "Spesifiserer hvor mange lyder som kan spilles samtidig. Høyere verdier trenger mer prosesseringskraft, så vis du setter denne innstillingen for høyt, så kan det forårsake en overbelastning (spesielt med programvareemulering)." + +#: Resources/Scripts/Gui/StartupScreen.as:1546 +#: Resources/Scripts/Gui/StartupScreen.as:1546 +msgctxt "StartupScreen" +msgid "EAX" +msgstr "EAX" + +#: Resources/Scripts/Gui/StartupScreen.as:1547 +#: Resources/Scripts/Gui/StartupScreen.as:1547 +msgctxt "StartupScreen" +msgid "Enables extended features provided by the OpenAL driver to create more ambience." +msgstr "Aktiverer utvidede egenskaper fra OpenAL-driveren for å skape mer atmosfære." + +#: Resources/Scripts/Gui/StartupScreen.as:1563 +#: Resources/Scripts/Gui/StartupScreen.as:1563 +msgctxt "StartupScreen" +msgid "Specifies how many sounds can be played simultaneously. No matter what value is set, YSR might reduce the number of sounds when an overload is detected." +msgstr "Spesifiserer hvor mange lyder kan bli spillet av samtidig. Har ikke mye å si hva verdien er satt av på, YSR har muligheten til å redusere mengden av lyder nå den legger merke til overbelastning." + +#: Resources/Scripts/Gui/StartupScreen.as:1623 +#: Resources/Scripts/Gui/StartupScreen.as:1623 +msgctxt "StartupScreen" +msgid "Language" +msgstr "Språk" + +#: Resources/Scripts/Gui/StartupScreen.as:1635 +#: Resources/Scripts/Gui/StartupScreen.as:1635 +msgctxt "StartupScreen" +msgid "Tools" +msgstr "Verktøy" + +#: Resources/Scripts/Gui/StartupScreen.as:1638 +#: Resources/Scripts/Gui/StartupScreen.as:1638 +msgctxt "StartupScreen" +msgid "Reset All Settings" +msgstr "Nullstill instillinger" + +#: Resources/Scripts/Gui/StartupScreen.as:1647 +#: Resources/Scripts/Gui/StartupScreen.as:1647 +msgctxt "StartupScreen" +msgid "Open Config Folder in Explorer" +msgstr "Åpne konfigmappen i utforskeren" + +#: Resources/Scripts/Gui/StartupScreen.as:1649 +#: Resources/Scripts/Gui/StartupScreen.as:1649 +msgctxt "StartupScreen" +msgid "Reveal Config Folder in Finder" +msgstr "Avslør konfigmappe i finder" + +#: Resources/Scripts/Gui/StartupScreen.as:1651 +#: Resources/Scripts/Gui/StartupScreen.as:1651 +msgctxt "StartupScreen" +msgid "Browse Config Folder" +msgstr "Naviger konfigmappen" + +#: Resources/Scripts/Gui/StartupScreen.as:1668 +#: Resources/Scripts/Gui/StartupScreen.as:1668 +msgctxt "StartupScreen" +msgid "An unknown error has occurred while opening the config directory." +msgstr "En ukjent feil har skjedd mens konfigmappen ble åpnet." + +#: Resources/Scripts/Gui/StartupScreen.as:1674 +#: Resources/Scripts/Gui/StartupScreen.as:1674 +msgctxt "StartupScreen" +msgid "Are you sure to reset all settings? They include (but are not limited to):" +msgstr "Er du sikker du vil tilbakestille alle innstillinger? Dette inkluderer (men er ikke begrenset til):" + +#: Resources/Scripts/Gui/StartupScreen.as:1675 +#: Resources/Scripts/Gui/StartupScreen.as:1675 +msgctxt "StartupScreen" +msgid "All graphics/audio settings" +msgstr "Grafikk/lydinnstillinger" + +#: Resources/Scripts/Gui/StartupScreen.as:1676 +#: Resources/Scripts/Gui/StartupScreen.as:1676 +msgctxt "StartupScreen" +msgid "All key bindings" +msgstr "Alle tastebindinger" + +#: Resources/Scripts/Gui/StartupScreen.as:1677 +#: Resources/Scripts/Gui/StartupScreen.as:1677 +msgctxt "StartupScreen" +msgid "Your player name" +msgstr "Kallenavnet ditt" + +#: Resources/Scripts/Gui/StartupScreen.as:1678 +#: Resources/Scripts/Gui/StartupScreen.as:1678 +msgctxt "StartupScreen" +msgid "Other advanced settings only accessible through '{0}' tab and in-game commands" +msgstr "Andre avanserte innstillinger som kun er tilgjengelig gjennom '{0}' tab og kommandoer inne i spillet" + +#: Resources/Scripts/Gui/StartupScreen.as:1748 +#: Resources/Scripts/Gui/StartupScreen.as:1748 +msgctxt "StartupScreen" +msgid "Unknown ({0})" +msgstr "Ukjent ({0})" + +#: Resources/Scripts/Gui/StartupScreen.as:1750 +#: Resources/Scripts/Gui/StartupScreen.as:1764 +#: Resources/Scripts/Gui/StartupScreen.as:1750 +#: Resources/Scripts/Gui/StartupScreen.as:1764 +msgctxt "StartupScreen" +msgid "System default" +msgstr "Systemstandard" + +#: Resources/Scripts/Gui/StartupScreen.as:1813 +#: Resources/Scripts/Gui/StartupScreen.as:1813 +msgctxt "StartupScreen" +msgid "Copy to Clipboard" +msgstr "Kopier til utklippstavlen" + +#: Resources/Scripts/Gui/StartupScreen.as:1849 +#: Resources/Scripts/Gui/StartupScreen.as:1849 +msgctxt "StartupScreen" +msgid "Advanced Settings" +msgstr "Avanserte innstillinger" + +#: Resources/Scripts/Gui/StartupScreen.as:1858 +#: Resources/Scripts/Gui/StartupScreen.as:1858 +msgctxt "StartupScreen" +msgid "Filter" +msgstr "Filter" + +#: Resources/Scripts/Gui/UpdateCheckView.as:40 +#: Resources/Scripts/Gui/UpdateCheckView.as:40 +msgctxt "UpdateCheck" +msgid "Enable" +msgstr "Aktiver" + +#: Resources/Scripts/Gui/UpdateCheckView.as:47 +#: Resources/Scripts/Gui/UpdateCheckView.as:47 +msgctxt "UpdateCheck" +msgid "Show details..." +msgstr "Vis detaljer..." + +#: Resources/Scripts/Gui/UpdateCheckView.as:102 +#: Resources/Scripts/Gui/UpdateCheckView.as:102 +msgctxt "UpdateCheck" +msgid "Version {0} is available! (You currently have {1})" +msgstr "Versjon {0} er tilgjengelig (du har {1})" + +#: Resources/Scripts/Gui/UpdateCheckView.as:105 +#: Resources/Scripts/Gui/UpdateCheckView.as:105 +msgctxt "UpdateCheck" +msgid "You're using the latest version of OpenSpades. ({0})" +msgstr "Du bruker den siste versjonen av OpenSpades. ({0})" + +#: Resources/Scripts/Gui/UpdateCheckView.as:110 +#: Resources/Scripts/Gui/UpdateCheckView.as:110 +msgctxt "UpdateCheck" +msgid "Checking for updates..." +msgstr "Ser etter oppdateringer..." + +#: Resources/Scripts/Gui/UpdateCheckView.as:113 +#: Resources/Scripts/Gui/UpdateCheckView.as:113 +msgctxt "UpdateCheck" +msgid "Failed to check for updates." +msgstr "Mislykkes å sjekke for oppdateringen." + +#: Resources/Scripts/Gui/UpdateCheckView.as:116 +#: Resources/Scripts/Gui/UpdateCheckView.as:116 +msgctxt "UpdateCheck" +msgid "Automatic update check is not enabled." +msgstr "Automatisk oppdateringskontroll er ikke aktivert." + +#: Resources/Scripts/Gui/UpdateCheckView.as:119 +#: Resources/Scripts/Gui/UpdateCheckView.as:119 +msgctxt "UpdateCheck" +msgid "Automatic update check is not available." +msgstr "Automatisk oppdateringskontroll er ikke tilgjengelig." + +#: Sources/Client/Client_NetHandler.cpp:258 +#: Sources/Client/Client_NetHandler.cpp:271 +msgctxt "Client" +msgid "Spectator" +msgstr "Tilskuer" + +#: Sources/Client/Client_Draw.cpp:99 +msgctxt "Client" +msgid "Unbound" +msgstr "Ubundet" + +#: Sources/Client/Client_Draw.cpp:655 +msgctxt "Client" +msgid "[{0}] Cycle camera mode" +msgstr "[{0}] Veksle kameramodus" + +#: Sources/Client/Client_Draw.cpp:657 +msgctxt "Client" +msgid "[{0}/{1}] Next/previous player" +msgstr "[{0}/{1}] Neste/forrige spiller" + +#: Sources/Client/Client_Draw.cpp:661 +msgctxt "Client" +msgid "[{0}] Unfollow" +msgstr "[{0}] Slutt å følge" + +#: Sources/Client/Client_Draw.cpp:664 +msgctxt "Client" +msgid "[{0}/{1}] Follow a player" +msgstr "[{0}/{1}] Følg en spiller" + +#: Sources/Client/Client_Draw.cpp:669 +msgctxt "Client" +msgid "[{0}/{1}] Go up/down" +msgstr "[{0}/{1}] Gå opp/ned" + diff --git a/Resources/Locales/nl/openspades.po b/Resources/Locales/nl/openspades.po index b73f6d44..d185b8bc 100644 --- a/Resources/Locales/nl/openspades.po +++ b/Resources/Locales/nl/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2019-01-01 05:55\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Dutch\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/pl/openspades.po b/Resources/Locales/pl/openspades.po index aa20724a..c0e47da1 100644 --- a/Resources/Locales/pl/openspades.po +++ b/Resources/Locales/pl/openspades.po @@ -3,15 +3,15 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2017-12-31 04:46-0500\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Polish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" "X-Crowdin-Project: openspades\n" "X-Crowdin-Language: pl\n" "X-Crowdin-File: openspades.pot\n" @@ -211,7 +211,8 @@ msgid "{0} block" msgid_plural "{0} blocks" msgstr[0] "blok" msgstr[1] "bloki" -msgstr[2] "bloków" +msgstr[2] "" +msgstr[3] "bloków" #: Sources/Client/Client_Update.cpp:486 Sources/Client/Client_Update.cpp:512 msgctxt "Client" @@ -388,7 +389,8 @@ msgid "Spectator{1}" msgid_plural "Spectators{1}" msgstr[0] "Obserwator{1}" msgstr[1] "Obserwatorzy{1}" -msgstr[2] "Obserwatorzy{1}" +msgstr[2] "" +msgstr[3] "Obserwatorzy{1}" #: Sources/Client/TCProgressView.cpp:151 Sources/Client/TCProgressView.cpp:151 msgctxt "Client" diff --git a/Resources/Locales/pt_br/openspades.po b/Resources/Locales/pt_br/openspades.po index 1d522fb3..994ef8a4 100644 --- a/Resources/Locales/pt_br/openspades.po +++ b/Resources/Locales/pt_br/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2017-12-31 04:46-0500\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Portuguese, Brazilian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/pt_pt/openspades.po b/Resources/Locales/pt_pt/openspades.po index 3108cd38..31619908 100644 --- a/Resources/Locales/pt_pt/openspades.po +++ b/Resources/Locales/pt_pt/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2017-12-31 04:46-0500\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Portuguese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/ru/openspades.po b/Resources/Locales/ru/openspades.po index 4b38c0eb..e2756627 100644 --- a/Resources/Locales/ru/openspades.po +++ b/Resources/Locales/ru/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2019-01-01 05:55\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Russian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/tr.json b/Resources/Locales/tr.json new file mode 100644 index 00000000..8052c48c --- /dev/null +++ b/Resources/Locales/tr.json @@ -0,0 +1,4 @@ +{ + "descriptionEnglish": "Turkish", + "description": "Türkçe" +} diff --git a/Resources/Locales/tr/openspades.po b/Resources/Locales/tr/openspades.po new file mode 100644 index 00000000..7a9e372d --- /dev/null +++ b/Resources/Locales/tr/openspades.po @@ -0,0 +1,1801 @@ +msgid "" +msgstr "" +"Project-Id-Version: openspades\n" +"Report-Msgid-Bugs-To: i at yvt.jp\n" +"POT-Creation-Date: 2016-12-25 23:47-0200\n" +"PO-Revision-Date: 2020-12-20 06:27\n" +"Last-Translator: \n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.7.1\n" +"X-Poedit-SourceCharset: UTF-8\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: openspades\n" +"X-Crowdin-Project-ID: 246828\n" +"X-Crowdin-Language: tr\n" +"X-Crowdin-File: openspades.pot\n" +"X-Crowdin-File-ID: 1\n" +"Language: tr_TR\n" + +#: Sources/Client/Client.cpp:585 Sources/Client/Client.cpp:586 +msgctxt "Client" +msgid "Map saved: {0}" +msgstr "Kayıt edilen haritalar: {0}" + +#: Sources/Client/Client.cpp:589 Sources/Client/Client.cpp:595 +#: Sources/Client/Client.cpp:590 Sources/Client/Client.cpp:596 +msgctxt "Client" +msgid "Saving map failed: " +msgstr "Harita kayıt edilemedi: " + +#. ! Prefix added to global chat messages. +#. ! +#. ! Example: [Global] playername (Red) blah blah +#. ! +#. ! Crowdin warns that this string shouldn't be translated, +#. ! but it actually can be. +#. ! The extra whitespace is not a typo. +#: Sources/Client/Client.cpp:633 Sources/Client/Client.cpp:634 +msgctxt "Client" +msgid "[Global] " +msgstr "[Global] " + +#: Sources/Client/Client_Draw.cpp:119 Sources/Client/Client_Draw.cpp:135 +msgctxt "Client" +msgid "Sceneshot saved: {0}" +msgstr "Manzara resmi kayıt edildi: {0}" + +#: Sources/Client/Client_Draw.cpp:121 Sources/Client/Client_Draw.cpp:137 +msgctxt "Client" +msgid "Screenshot saved: {0}" +msgstr "Ekran resmi kaydedildi: {0}" + +#: Sources/Client/Client_Draw.cpp:125 Sources/Client/Client_Draw.cpp:131 +#: Sources/Client/Client_Draw.cpp:141 Sources/Client/Client_Draw.cpp:147 +msgctxt "Client" +msgid "Screenshot failed: " +msgstr "Ekran resmi kayıt edilemedi: " + +#: Sources/Client/Client_Draw.cpp:198 Sources/Client/Client_Draw.cpp:214 +msgctxt "Client" +msgid "NOW LOADING" +msgstr "Yükleniyor" + +#: Sources/Client/Client_Draw.cpp:220 Sources/Client/Client_Draw.cpp:236 +msgctxt "Client" +msgid "Disconnecting..." +msgstr "Bağlantı kesiliyor..." + +#: Sources/Client/Client_Draw.cpp:523 Sources/Client/Client_Draw.cpp:548 +msgctxt "Client" +msgid "Out of Block" +msgstr "Blok Kalmadı" + +#: Sources/Client/Client_Draw.cpp:528 Sources/Client/Client_Draw.cpp:553 +msgctxt "Client" +msgid "Out of Grenade" +msgstr "El Bombası Kalmadı" + +#: Sources/Client/Client_Draw.cpp:534 Sources/Client/Client_Draw.cpp:559 +msgctxt "Client" +msgid "Reloading" +msgstr "Şarjör değiştiriliyor" + +#: Sources/Client/Client_Draw.cpp:536 Sources/Client/Client_Input.cpp:439 +#: Sources/Client/Client_Draw.cpp:561 Sources/Client/Client_Input.cpp:494 +msgctxt "Client" +msgid "Out of Ammo" +msgstr "Mermi bitti" + +#: Sources/Client/Client_Draw.cpp:539 Sources/Client/Client_Draw.cpp:564 +msgctxt "Client" +msgid "Press [{0}] to Reload" +msgstr "Şarjör değiştirmek için [{0}] tuşuna basın" + +#: Sources/Client/Client_Draw.cpp:584 Sources/Client/Client_Draw.cpp:608 +msgctxt "Client" +msgid "You will respawn in: {0}" +msgstr "{0} saniye içinde canlanacaksın" + +#: Sources/Client/Client_Draw.cpp:586 Sources/Client/Client_Draw.cpp:610 +msgctxt "Client" +msgid "Waiting for respawn" +msgstr "Canlanmak için bekleniyor" + +#: Sources/Client/Client_Draw.cpp:764 Sources/Client/Client_Draw.cpp:646 +msgctxt "Client" +msgid "Following {0}" +msgstr "{0} takip ediliyor" + +#: Sources/Client/Client_Input.cpp:427 Sources/Client/Client_Input.cpp:482 +msgctxt "Client" +msgid "Out of Blocks" +msgstr "Blok Kalmadı" + +#: Sources/Client/Client_Input.cpp:451 Sources/Client/Client_Input.cpp:506 +msgctxt "Client" +msgid "Out of Grenades" +msgstr "El Bombası Kalmadı" + +#: Sources/Client/Client_NetHandler.cpp:89 +#: Sources/Client/Client_NetHandler.cpp:90 +msgctxt "Client" +msgid "{0} captured {1}'s territory" +msgstr "{0}, {1} bir bölgeyi ele geçirdi" + +#: Sources/Client/Client_NetHandler.cpp:91 +#: Sources/Client/Client_NetHandler.cpp:92 +msgctxt "Client" +msgid "{0} captured an neutral territory" +msgstr "{0}, kontrol edilmeyen bir bölgeyi ele geçirdi" + +#: Sources/Client/Client_NetHandler.cpp:99 +#: Sources/Client/Client_NetHandler.cpp:100 +msgctxt "Client" +msgid "{0} captured {1}'s Territory" +msgstr "{0}, {1} bir bölgeyi ele geçirdi" + +#: Sources/Client/Client_NetHandler.cpp:101 +#: Sources/Client/Client_NetHandler.cpp:102 +msgctxt "Client" +msgid "{0} captured an Neutral Territory" +msgstr "{0}, kontrol edilmeyen bir bölgeyi ele geçirdi" + +#: Sources/Client/Client_NetHandler.cpp:127 +#: Sources/Client/Client_NetHandler.cpp:128 +msgctxt "Client" +msgid "{0} captured {1}'s intel" +msgstr "{1} istihbaratını {0} ele geçirdi" + +#: Sources/Client/Client_NetHandler.cpp:134 +#: Sources/Client/Client_NetHandler.cpp:135 +msgctxt "Client" +msgid "{0} captured {1}'s Intel." +msgstr "{1} istihbaratını {0} ele geçirdi." + +#: Sources/Client/Client_NetHandler.cpp:158 +#: Sources/Client/Client_NetHandler.cpp:159 +msgctxt "Client" +msgid "{0} picked up {1}'s intel" +msgstr "{0} {1}'in istihbaratını aldı" + +#: Sources/Client/Client_NetHandler.cpp:165 +#: Sources/Client/Client_NetHandler.cpp:166 +msgctxt "Client" +msgid "{0} picked up {1}'s Intel." +msgstr "{0} {1}'in istihbaratını aldı." + +#: Sources/Client/Client_NetHandler.cpp:183 +#: Sources/Client/Client_NetHandler.cpp:184 +msgctxt "Client" +msgid "{0} dropped {1}'s intel" +msgstr "{0} {1}'in istihbaratını düşürdü" + +#: Sources/Client/Client_NetHandler.cpp:190 +#: Sources/Client/Client_NetHandler.cpp:191 +msgctxt "Client" +msgid "{0} dropped {1}'s Intel" +msgstr "{0} {1}'in istihbaratını düşürdü" + +#: Sources/Client/Client_NetHandler.cpp:237 +#: Sources/Client/Client_NetHandler.cpp:243 +#: Sources/Client/Client_NetHandler.cpp:249 +#: Sources/Client/Client_NetHandler.cpp:255 +msgctxt "Client" +msgid "Player {0} has left" +msgstr "{0} ayrıldı" + +#: Sources/Client/Client_NetHandler.cpp:257 +#: Sources/Client/Client_NetHandler.cpp:264 +#: Sources/Client/Client_NetHandler.cpp:276 +#: Sources/Client/Client_NetHandler.cpp:282 +msgctxt "Client" +msgid "{0} joined {1} team" +msgstr "{0} {1} takımına katıldı" + +#: Sources/Client/Client_NetHandler.cpp:294 +#: Sources/Client/Client_NetHandler.cpp:317 +msgctxt "Client" +msgid "{0} wins!" +msgstr "{0} kazandı!" + +#: Sources/Client/Client_NetHandler.cpp:298 +#: Sources/Client/Client_NetHandler.cpp:321 +msgctxt "Client" +msgid "{0} Wins!" +msgstr "{0} Kazandı!" + +#: Sources/Client/Client_Update.cpp:479 Sources/Client/Client_Update.cpp:505 +msgctxt "Client" +msgid "{0} block" +msgid_plural "{0} blocks" +msgstr[0] "{0} blok\n" +"{0} blok" +msgstr[1] "{0} blok" + +#: Sources/Client/Client_Update.cpp:486 Sources/Client/Client_Update.cpp:512 +msgctxt "Client" +msgid "-- blocks" +msgstr "-- blok" + +#: Sources/Client/Client_Update.cpp:842 Sources/Client/LimboView.cpp:68 +#: Sources/Client/Client_Update.cpp:868 Sources/Client/LimboView.cpp:68 +msgctxt "Client" +msgid "Rifle" +msgstr "Tüfek" + +#: Sources/Client/Client_Update.cpp:843 Sources/Client/LimboView.cpp:71 +#: Sources/Client/Client_Update.cpp:869 Sources/Client/LimboView.cpp:71 +msgctxt "Client" +msgid "SMG" +msgstr "SMG" + +#: Sources/Client/Client_Update.cpp:844 Sources/Client/LimboView.cpp:74 +#: Sources/Client/Client_Update.cpp:870 Sources/Client/LimboView.cpp:74 +msgctxt "Client" +msgid "Shotgun" +msgstr "Pompalı" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:849 Sources/Client/Client_Update.cpp:875 +msgctxt "Client" +msgid "Fall" +msgstr "Düşüş" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:853 Sources/Client/Client_Update.cpp:879 +msgctxt "Client" +msgid "Melee" +msgstr "Arbede" + +#: Sources/Client/Client_Update.cpp:856 Sources/Client/Client_Update.cpp:882 +msgctxt "Client" +msgid "Grenade" +msgstr "El Bombası" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:860 Sources/Client/Client_Update.cpp:886 +msgctxt "Client" +msgid "Headshot" +msgstr "Kafadan vuruş" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:864 Sources/Client/Client_Update.cpp:890 +msgctxt "Client" +msgid "Team Change" +msgstr "Takım Değişikliği" + +#. ! A cause of death shown in the kill feed. +#: Sources/Client/Client_Update.cpp:868 Sources/Client/Client_Update.cpp:894 +msgctxt "Client" +msgid "Weapon Change" +msgstr "Silah Değişikliği" + +#: Sources/Client/Client_Update.cpp:907 Sources/Client/Client_Update.cpp:933 +msgctxt "Client" +msgid "You have killed {0}" +msgstr "{0} oyuncusunu öldürdün" + +#: Sources/Client/Client_Update.cpp:909 Sources/Client/Client_Update.cpp:935 +msgctxt "Client" +msgid "You were killed by {0}" +msgstr "{0} tarafından öldürüldün" + +#: Sources/Client/Client_Update.cpp:1225 Sources/Client/Client_Update.cpp:1260 +msgctxt "Client" +msgid "Insufficient blocks." +msgstr "Yetersiz blok." + +#: Sources/Client/Client_Update.cpp:1228 Sources/Client/Client_Update.cpp:1263 +msgctxt "Client" +msgid "You cannot place a block there." +msgstr "Buraya blok yerleştiremezsiniz." + +#: Sources/Client/LimboView.cpp:79 Sources/Client/LimboView.cpp:79 +msgctxt "Client" +msgid "Spawn" +msgstr "Canlan" + +#: Sources/Client/LimboView.cpp:183 Sources/Client/LimboView.cpp:183 +msgctxt "Client" +msgid "Select Team:" +msgstr "Takımını Seç:" + +#: Sources/Client/LimboView.cpp:191 Sources/Client/LimboView.cpp:191 +msgctxt "Client" +msgid "Select Weapon:" +msgstr "Silahını Seç:" + +#: Sources/Client/NetClient.cpp:422 Sources/Client/NetClient.cpp:425 +msgctxt "NetClient" +msgid "Connecting to the server" +msgstr "Sunucuya bağlanılıyor" + +#: Sources/Client/NetClient.cpp:434 Sources/Client/NetClient.cpp:437 +msgctxt "NetClient" +msgid "Not connected" +msgstr "Bağlantı yok" + +#: Sources/Client/NetClient.cpp:498 Sources/Client/NetClient.cpp:516 +msgctxt "NetClient" +msgid "Awaiting for state" +msgstr "Bölge için bekleniyor" + +#: Sources/Client/NetClient.cpp:508 Sources/Client/NetClient.cpp:1277 +#: Sources/Client/NetClient.cpp:526 Sources/Client/NetClient.cpp:1346 +msgctxt "NetClient" +msgid "Loading snapshot" +msgstr "Snapshot yükleniyor" + +#: Sources/Client/NetClient.cpp:523 Sources/Client/NetClient.cpp:541 +msgctxt "NetClient" +msgid "Loading snapshot ({0}/{1})" +msgstr "Snapshot yükleniyor ({0}/{1})" + +#: Sources/Client/NetClient.cpp:528 Sources/Client/NetClient.cpp:562 +#: Sources/Client/NetClient.cpp:546 Sources/Client/NetClient.cpp:609 +msgctxt "NetClient" +msgid "Connected" +msgstr "Bağlanıldı" + +#: Sources/Client/NetClient.cpp:540 Sources/Client/NetClient.cpp:575 +#: Sources/Client/NetClient.cpp:627 Sources/Client/NetClient.cpp:558 +#: Sources/Client/NetClient.cpp:622 Sources/Client/NetClient.cpp:674 +msgctxt "NetClient" +msgid "Still loading..." +msgstr "Hala yükleniyor..." + +#: Sources/Client/NetClient.cpp:543 Sources/Client/NetClient.cpp:549 +#: Sources/Client/NetClient.cpp:579 Sources/Client/NetClient.cpp:584 +#: Sources/Client/NetClient.cpp:631 Sources/Client/NetClient.cpp:636 +#: Sources/Client/NetClient.cpp:561 Sources/Client/NetClient.cpp:567 +#: Sources/Client/NetClient.cpp:626 Sources/Client/NetClient.cpp:631 +#: Sources/Client/NetClient.cpp:678 Sources/Client/NetClient.cpp:683 +msgctxt "NetClient" +msgid "Error" +msgstr "Hata" + +#: Sources/Client/NetClient.cpp:702 Sources/Client/NetClient.cpp:749 +msgctxt "NetClient" +msgid "You are banned from this server." +msgstr "Bu sunucudan yasaklandınız." + +#: Sources/Client/NetClient.cpp:707 Sources/Client/NetClient.cpp:710 +#: Sources/Client/NetClient.cpp:754 Sources/Client/NetClient.cpp:757 +msgctxt "NetClient" +msgid "You were kicked from this server." +msgstr "Bu sunucudan atıldınız." + +#: Sources/Client/NetClient.cpp:708 Sources/Client/NetClient.cpp:755 +msgctxt "NetClient" +msgid "Incompatible client protocol version." +msgstr "Uyumsuz kullanıcı protokol versiyonu." + +#: Sources/Client/NetClient.cpp:709 Sources/Client/NetClient.cpp:756 +msgctxt "NetClient" +msgid "Server full" +msgstr "Sunucu dolu" + +#: Sources/Client/NetClient.cpp:711 Sources/Client/NetClient.cpp:758 +msgctxt "NetClient" +msgid "Unknown Reason" +msgstr "Bilinmeyen Neden" + +#: Sources/Client/ScoreboardView.cpp:63 Sources/Client/ScoreboardView.cpp:345 +#: Sources/Client/ScoreboardView.cpp:63 Sources/Client/ScoreboardView.cpp:345 +msgctxt "Client" +msgid "Spectator{1}" +msgid_plural "Spectators{1}" +msgstr[0] "İzleyici{1}\n" +"İzleyiciler{1}" +msgstr[1] "İzleyici{1}\n" +"İzleyiciler{1}" + +#: Sources/Client/TCProgressView.cpp:151 Sources/Client/TCProgressView.cpp:151 +msgctxt "Client" +msgid "Neutral Territory" +msgstr "Tarafsız Bölge" + +#: Sources/Client/TCProgressView.cpp:154 Sources/Client/TCProgressView.cpp:154 +msgctxt "Client" +msgid "{0}'s Territory" +msgstr "{0} takımının bölgesi" + +#: Sources/Gui/Main.cpp:548 Sources/Gui/Main.cpp:577 +msgctxt "Main" +msgid "Localization System Loaded" +msgstr "Yer Belirleme Sistemi Yüklendi" + +#: Sources/Gui/Main.cpp:604 Sources/Gui/Runner.cpp:56 Sources/Gui/Main.cpp:633 +#: Sources/Gui/Runner.cpp:56 +msgctxt "Main" +msgid "A serious error caused OpenSpades to stop working:\n\n" +"{0}\n\n" +"See SystemMessages.log for more details." +msgstr "Ciddi bir hata OpenSpades'in çalışmayı durdurmasına neden oldu:\n\n" +"{0}\n\n" +"Daha fazla bilgi için SystemMessages.log dosyasına bakın." + +#: Sources/Gui/Main.cpp:612 Sources/Gui/Runner.cpp:62 Sources/Gui/Main.cpp:641 +#: Sources/Gui/Runner.cpp:62 +msgctxt "Main" +msgid "OpenSpades Fatal Error" +msgstr "OpenSpades Ciddi Bir Hata Verdi" + +#: Sources/Gui/MainScreen.cpp:225 Sources/Gui/MainScreen.cpp:220 +msgctxt "MainScreen" +msgid "NOW LOADING" +msgstr "ŞİMDİ YÜKLENİYOR" + +#: Resources/Scripts/Gui/ClientUI.as:198 Resources/Scripts/Gui/ClientUI.as:198 +msgctxt "Client" +msgid "Back to Game" +msgstr "Oyuna dön" + +#: Resources/Scripts/Gui/ClientUI.as:205 Resources/Scripts/Gui/ClientUI.as:205 +msgctxt "Client" +msgid "Chat Log" +msgstr "Sohbet günlüğü" + +#: Resources/Scripts/Gui/ClientUI.as:212 Resources/Scripts/Gui/ClientUI.as:212 +msgctxt "Client" +msgid "Setup" +msgstr "Kurulum" + +#: Resources/Scripts/Gui/ClientUI.as:219 Resources/Scripts/Gui/ClientUI.as:219 +msgctxt "Client" +msgid "Disconnect" +msgstr "Bağlantıyı Kes" + +#: Resources/Scripts/Gui/ClientUI.as:484 Resources/Scripts/Gui/ClientUI.as:484 +msgctxt "Client" +msgid "Say" +msgstr "Söyle" + +#: Resources/Scripts/Gui/ClientUI.as:492 Resources/Scripts/Gui/ClientUI.as:492 +msgctxt "Client" +msgid "Cancel" +msgstr "İptal Et" + +#: Resources/Scripts/Gui/ClientUI.as:500 Resources/Scripts/Gui/ClientUI.as:500 +msgctxt "Client" +msgid "Chat Text" +msgstr "Sohbet Metni" + +#: Resources/Scripts/Gui/ClientUI.as:508 Resources/Scripts/Gui/ClientUI.as:508 +msgctxt "Client" +msgid "Global" +msgstr "Küresel" + +#: Resources/Scripts/Gui/ClientUI.as:517 Resources/Scripts/Gui/ClientUI.as:517 +msgctxt "Client" +msgid "Team" +msgstr "Ekip" + +#: Resources/Scripts/Gui/ClientUI.as:661 Resources/Scripts/Gui/ClientUI.as:662 +msgctxt "Client" +msgid "Close" +msgstr "Kapat" + +#: Resources/Scripts/Gui/ClientUI.as:671 Resources/Scripts/Gui/ClientUI.as:672 +msgctxt "Client" +msgid "Say Global" +msgstr "Küresele söyle" + +#: Resources/Scripts/Gui/ClientUI.as:682 Resources/Scripts/Gui/ClientUI.as:683 +msgctxt "Client" +msgid "Say Team" +msgstr "Takıma söyle" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:58 +#: Resources/Scripts/Gui/CreateProfileScreen.as:58 +msgctxt "CreateProfileScreen" +msgid "OK" +msgstr "Tamam" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:70 +#: Resources/Scripts/Gui/CreateProfileScreen.as:70 +msgctxt "CreateProfileScreen" +msgid "Decide later" +msgstr "Daha sonra karar ver" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:80 +#: Resources/Scripts/Gui/CreateProfileScreen.as:80 +msgctxt "CreateProfileScreen" +msgid "Welcome to OpenSpades" +msgstr "OpenSpades'e Hoş Geldin" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:88 +#: Resources/Scripts/Gui/CreateProfileScreen.as:88 +msgctxt "CreateProfileScreen" +msgid "Choose a player name:" +msgstr "Oyuncu Adını Seç:" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:96 +#: Resources/Scripts/Gui/CreateProfileScreen.as:96 +msgctxt "CreateProfileScreen" +msgid "Player name" +msgstr "Oyuncu adı" + +#: Resources/Scripts/Gui/CreateProfileScreen.as:104 +#: Resources/Scripts/Gui/CreateProfileScreen.as:104 +msgctxt "CreateProfileScreen" +msgid "You can change it later in the Setup dialog." +msgstr "Daha sonra ayarlardan değiştirebilirsiniz." + +#: Resources/Scripts/Gui/MainScreen.as:376 +#: Resources/Scripts/Gui/MainScreen.as:376 +msgctxt "MainScreen" +msgid "Connect" +msgstr "Bağlan" + +#: Resources/Scripts/Gui/MainScreen.as:384 +#: Resources/Scripts/Gui/MainScreen.as:384 +msgctxt "MainScreen" +msgid "Quick Connect" +msgstr "Hızlı Bağlan" + +#: Resources/Scripts/Gui/MainScreen.as:393 +#: Resources/Scripts/Gui/MainScreen.as:447 +#: Resources/Scripts/Gui/MainScreen.as:393 +#: Resources/Scripts/Gui/MainScreen.as:447 +msgctxt "MainScreen" +msgid "0.75" +msgstr "0.75" + +#: Resources/Scripts/Gui/MainScreen.as:403 +#: Resources/Scripts/Gui/MainScreen.as:456 +#: Resources/Scripts/Gui/MainScreen.as:403 +#: Resources/Scripts/Gui/MainScreen.as:456 +msgctxt "MainScreen" +msgid "0.76" +msgstr "0.76" + +#: Resources/Scripts/Gui/MainScreen.as:411 +#: Resources/Scripts/Gui/MainScreen.as:411 +msgctxt "MainScreen" +msgid "Quit" +msgstr "Çıkış" + +#: Resources/Scripts/Gui/MainScreen.as:418 +#: Resources/Scripts/Gui/MainScreen.as:418 +msgctxt "MainScreen" +msgid "Credits" +msgstr "Yapımcılar" + +#: Resources/Scripts/Gui/MainScreen.as:425 +#: Resources/Scripts/Gui/MainScreen.as:425 +msgctxt "MainScreen" +msgid "Setup" +msgstr "Kurulum" + +#: Resources/Scripts/Gui/MainScreen.as:438 +#: Resources/Scripts/Gui/MainScreen.as:482 +#: Resources/Scripts/Gui/MainScreen.as:438 +#: Resources/Scripts/Gui/MainScreen.as:482 +msgctxt "MainScreen" +msgid "Filter" +msgstr "Filtre" + +#: Resources/Scripts/Gui/MainScreen.as:465 +#: Resources/Scripts/Gui/MainScreen.as:465 +msgctxt "MainScreen" +msgid "Empty" +msgstr "Boş" + +#: Resources/Scripts/Gui/MainScreen.as:474 +#: Resources/Scripts/Gui/MainScreen.as:474 +msgctxt "MainScreen" +msgid "Not Full" +msgstr "Dolu Değil" + +#: Resources/Scripts/Gui/MainScreen.as:494 +#: Resources/Scripts/Gui/MainScreen.as:494 +msgctxt "MainScreen" +msgid "Server Name" +msgstr "Sunucu Adı" + +#: Resources/Scripts/Gui/MainScreen.as:501 +#: Resources/Scripts/Gui/MainScreen.as:501 +msgctxt "MainScreen" +msgid "Players" +msgstr "Oyuncular" + +#: Resources/Scripts/Gui/MainScreen.as:508 +#: Resources/Scripts/Gui/MainScreen.as:508 +msgctxt "MainScreen" +msgid "Map Name" +msgstr "Harita Adı" + +#: Resources/Scripts/Gui/MainScreen.as:515 +#: Resources/Scripts/Gui/MainScreen.as:515 +msgctxt "MainScreen" +msgid "Game Mode" +msgstr "Oyun Modu" + +#: Resources/Scripts/Gui/MainScreen.as:522 +#: Resources/Scripts/Gui/MainScreen.as:522 +msgctxt "MainScreen" +msgid "Ver." +msgstr "Ver." + +#: Resources/Scripts/Gui/MainScreen.as:529 +#: Resources/Scripts/Gui/MainScreen.as:529 +msgctxt "MainScreen" +msgid "Loc." +msgstr "Loc." + +#: Resources/Scripts/Gui/MainScreen.as:787 +#: Resources/Scripts/Gui/MainScreen.as:787 +msgctxt "MainScreen" +msgid "You were disconnected from the server because of the following reason:\n\n" +"{0}" +msgstr "Aşağıdaki nedenden dolayı sunucu ile bağlantınız kesildi:\n\n" +"{0}" + +#: Resources/Scripts/Gui/MainScreen.as:807 +#: Resources/Scripts/Gui/MainScreen.as:807 +msgctxt "MainScreen" +msgid "Loading..." +msgstr "Yükleniyor..." + +#: Resources/Scripts/Gui/MainScreen.as:825 +#: Resources/Scripts/Gui/MainScreen.as:825 +msgctxt "MainScreen" +msgid "Failed to fetch the server list." +msgstr "Sunucu listesi getirilemedi." + +#: Resources/Scripts/Gui/MessageBox.as:130 +#: Resources/Scripts/Gui/MessageBox.as:144 +#: Resources/Scripts/Gui/MessageBox.as:130 +#: Resources/Scripts/Gui/MessageBox.as:144 +msgctxt "MessageBox" +msgid "OK" +msgstr "Tamam" + +#: Resources/Scripts/Gui/MessageBox.as:144 +#: Resources/Scripts/Gui/MessageBox.as:144 +msgctxt "MessageBox" +msgid "Cancel" +msgstr "İptal" + +#: Resources/Scripts/Gui/Preferences.as:60 +#: Resources/Scripts/Gui/Preferences.as:60 +msgctxt "Preferences" +msgid "Game Options" +msgstr "Oyun Ayarları" + +#: Resources/Scripts/Gui/Preferences.as:61 +#: Resources/Scripts/Gui/Preferences.as:61 +msgctxt "Preferences" +msgid "Controls" +msgstr "Denetimler" + +#: Resources/Scripts/Gui/Preferences.as:62 +#: Resources/Scripts/Gui/Preferences.as:663 +#: Resources/Scripts/Gui/Preferences.as:708 +#: Resources/Scripts/Gui/Preferences.as:62 +#: Resources/Scripts/Gui/Preferences.as:663 +#: Resources/Scripts/Gui/Preferences.as:708 +msgctxt "Preferences" +msgid "Misc" +msgstr "Çeşitli" + +#: Resources/Scripts/Gui/Preferences.as:66 +#: Resources/Scripts/Gui/Preferences.as:66 +msgctxt "Preferences" +msgid "Back" +msgstr "Geri" + +#: Resources/Scripts/Gui/Preferences.as:407 +#: Resources/Scripts/Gui/Preferences.as:407 +msgctxt "Preferences" +msgid "Press Key to Bind or [Escape] to Cancel..." +msgstr "Bağlamak için Tuşa veya İptal Etmek için [Escape] tuşuna basın..." + +#: Resources/Scripts/Gui/Preferences.as:418 +#: Resources/Scripts/Gui/Preferences.as:418 +msgctxt "Preferences" +msgid "Space" +msgstr "Boşluk" + +#: Resources/Scripts/Gui/Preferences.as:420 +#: Resources/Scripts/Gui/Preferences.as:420 +msgctxt "Preferences" +msgid "Unbound" +msgstr "Bağlı değil" + +#: Resources/Scripts/Gui/Preferences.as:423 +#: Resources/Scripts/Gui/Preferences.as:423 +msgctxt "Preferences" +msgid "Shift" +msgstr "Shift" + +#: Resources/Scripts/Gui/Preferences.as:425 +#: Resources/Scripts/Gui/Preferences.as:425 +msgctxt "Preferences" +msgid "Control" +msgstr "Control" + +#: Resources/Scripts/Gui/Preferences.as:427 +#: Resources/Scripts/Gui/Preferences.as:427 +msgctxt "Preferences" +msgid "Meta" +msgstr "Meta" + +#: Resources/Scripts/Gui/Preferences.as:429 +#: Resources/Scripts/Gui/Preferences.as:429 +msgctxt "Preferences" +msgid "Alt" +msgstr "Alt" + +#: Resources/Scripts/Gui/Preferences.as:431 +#: Resources/Scripts/Gui/Preferences.as:431 +msgctxt "Preferences" +msgid "Left Mouse Button" +msgstr "Sol fare tuşu" + +#: Resources/Scripts/Gui/Preferences.as:433 +#: Resources/Scripts/Gui/Preferences.as:433 +msgctxt "Preferences" +msgid "Right Mouse Button" +msgstr "Sağ Fare Tuşu" + +#: Resources/Scripts/Gui/Preferences.as:435 +#: Resources/Scripts/Gui/Preferences.as:435 +msgctxt "Preferences" +msgid "Middle Mouse Button" +msgstr "Orta Fare Tuşu" + +#: Resources/Scripts/Gui/Preferences.as:437 +#: Resources/Scripts/Gui/Preferences.as:437 +msgctxt "Preferences" +msgid "Mouse Button 4" +msgstr "Fare Tuşu 4" + +#: Resources/Scripts/Gui/Preferences.as:439 +#: Resources/Scripts/Gui/Preferences.as:439 +msgctxt "Preferences" +msgid "Mouse Button 5" +msgstr "Fare Tuşu 5" + +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +msgctxt "Preferences" +msgid "ON" +msgstr "Açık" + +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:613 +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "OFF" +msgstr "Kapalı" + +#: Resources/Scripts/Gui/Preferences.as:619 +#: Resources/Scripts/Gui/Preferences.as:619 +msgctxt "Preferences" +msgid "REVERSED" +msgstr "Ters" + +#: Resources/Scripts/Gui/Preferences.as:637 +#: Resources/Scripts/Gui/Preferences.as:637 +msgctxt "Preferences" +msgid "Player Information" +msgstr "Oyuncu bilgileri" + +#: Resources/Scripts/Gui/Preferences.as:638 +#: Resources/Scripts/Gui/Preferences.as:638 +msgctxt "Preferences" +msgid "Player Name" +msgstr "Oyuncu adı" + +#: Resources/Scripts/Gui/Preferences.as:642 +#: Resources/Scripts/Gui/Preferences.as:642 +msgctxt "Preferences" +msgid "Effects" +msgstr "Efektler" + +#: Resources/Scripts/Gui/Preferences.as:643 +#: Resources/Scripts/Gui/Preferences.as:643 +msgctxt "Preferences" +msgid "Blood" +msgstr "Kan" + +#: Resources/Scripts/Gui/Preferences.as:644 +#: Resources/Scripts/Gui/Preferences.as:644 +msgctxt "Preferences" +msgid "Ejecting Brass" +msgstr "Kovan Çıkarma" + +#: Resources/Scripts/Gui/Preferences.as:645 +#: Resources/Scripts/Gui/Preferences.as:645 +msgctxt "Preferences" +msgid "Ragdoll" +msgstr "Ragdoll" + +#: Resources/Scripts/Gui/Preferences.as:646 +#: Resources/Scripts/Gui/Preferences.as:646 +msgctxt "Preferences" +msgid "Animations" +msgstr "Animasyonlar" + +#: Resources/Scripts/Gui/Preferences.as:647 +#: Resources/Scripts/Gui/Preferences.as:647 +msgctxt "Preferences" +msgid "Camera Shake" +msgstr "Kamera sarsıntısı" + +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:648 +msgctxt "Preferences" +msgid "MORE" +msgstr "DAHA FAZLA" + +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:648 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "NORMAL" +msgstr "Normal" + +#: Resources/Scripts/Gui/Preferences.as:650 +#: Resources/Scripts/Gui/Preferences.as:650 +msgctxt "Preferences" +msgid "Particles" +msgstr "Parçacıklar" + +#: Resources/Scripts/Gui/Preferences.as:651 +#: Resources/Scripts/Gui/Preferences.as:651 +msgctxt "Preferences" +msgid "LESS" +msgstr "AZ" + +#: Resources/Scripts/Gui/Preferences.as:654 +#: Resources/Scripts/Gui/Preferences.as:654 +msgctxt "Preferences" +msgid "Feedbacks" +msgstr "Geri bildirim" + +#: Resources/Scripts/Gui/Preferences.as:655 +#: Resources/Scripts/Gui/Preferences.as:655 +msgctxt "Preferences" +msgid "Chat Notify Sounds" +msgstr "Sohbet Bildirim Sesleri" + +#: Resources/Scripts/Gui/Preferences.as:656 +#: Resources/Scripts/Gui/Preferences.as:656 +msgctxt "Preferences" +msgid "Hit Indicator" +msgstr "İsabet Göstergesi" + +#: Resources/Scripts/Gui/Preferences.as:657 +#: Resources/Scripts/Gui/Preferences.as:657 +msgctxt "Preferences" +msgid "Show Alerts" +msgstr "Uyarıları göster" + +#: Resources/Scripts/Gui/Preferences.as:659 +#: Resources/Scripts/Gui/Preferences.as:659 +msgctxt "Preferences" +msgid "AoS 0.75/0.76 Compatibility" +msgstr "AoS 0.75/0.76 Uyumluluğu" + +#: Resources/Scripts/Gui/Preferences.as:660 +#: Resources/Scripts/Gui/Preferences.as:660 +msgctxt "Preferences" +msgid "Allow Unicode" +msgstr "Unicode'a izin ver" + +#: Resources/Scripts/Gui/Preferences.as:661 +#: Resources/Scripts/Gui/Preferences.as:661 +msgctxt "Preferences" +msgid "Server Alert" +msgstr "Sunucu uyarıları" + +#: Resources/Scripts/Gui/Preferences.as:664 +#: Resources/Scripts/Gui/Preferences.as:664 +msgctxt "Preferences" +msgid "Field of View" +msgstr "Görüş açısı" + +#: Resources/Scripts/Gui/Preferences.as:666 +#: Resources/Scripts/Gui/Preferences.as:666 +msgctxt "Preferences" +msgid "Minimap size" +msgstr "Küçük Harita boyutu" + +#: Resources/Scripts/Gui/Preferences.as:668 +#: Resources/Scripts/Gui/Preferences.as:668 +msgctxt "Preferences" +msgid "Show Statistics" +msgstr "İstatistikleri göster" + +#: Resources/Scripts/Gui/Preferences.as:678 +#: Resources/Scripts/Gui/Preferences.as:678 +msgctxt "Preferences" +msgid "Weapons/Tools" +msgstr "Silahlar / Araçlar" + +#: Resources/Scripts/Gui/Preferences.as:679 +#: Resources/Scripts/Gui/Preferences.as:679 +msgctxt "Preferences" +msgid "Attack" +msgstr "Saldırı" + +#: Resources/Scripts/Gui/Preferences.as:680 +#: Resources/Scripts/Gui/Preferences.as:680 +msgctxt "Preferences" +msgid "Alt. Attack" +msgstr "Alt. Saldırı" + +#: Resources/Scripts/Gui/Preferences.as:681 +#: Resources/Scripts/Gui/Preferences.as:681 +msgctxt "Preferences" +msgid "Hold Aim Down Sight" +msgstr "Hedefi Aşağı Görüşte Tut" + +#: Resources/Scripts/Gui/Preferences.as:682 +#: Resources/Scripts/Gui/Preferences.as:682 +msgctxt "Preferences" +msgid "Mouse Sensitivity" +msgstr "Fare Hassasiyeti" + +#: Resources/Scripts/Gui/Preferences.as:684 +#: Resources/Scripts/Gui/Preferences.as:684 +msgctxt "Preferences" +msgid "ADS Mouse Sens. Scale" +msgstr "ADS Fare Hassas. ölçüsü" + +#: Resources/Scripts/Gui/Preferences.as:686 +#: Resources/Scripts/Gui/Preferences.as:686 +msgctxt "Preferences" +msgid "Exponential Power" +msgstr "Üstel Güç" + +#: Resources/Scripts/Gui/Preferences.as:688 +#: Resources/Scripts/Gui/Preferences.as:688 +msgctxt "Preferences" +msgid "Invert Y-axis Mouse Input" +msgstr "Y ekseni Fare Girişini Ters Çevir" + +#: Resources/Scripts/Gui/Preferences.as:689 +#: Resources/Scripts/Gui/Preferences.as:689 +msgctxt "Preferences" +msgid "Reload" +msgstr "Tekrar yükle" + +#: Resources/Scripts/Gui/Preferences.as:690 +#: Resources/Scripts/Gui/Preferences.as:690 +msgctxt "Preferences" +msgid "Capture Color" +msgstr "Çekim Rengi" + +#: Resources/Scripts/Gui/Preferences.as:691 +#: Resources/Scripts/Gui/Preferences.as:691 +msgctxt "Preferences" +msgid "Equip Spade" +msgstr "Küreği Kullan" + +#: Resources/Scripts/Gui/Preferences.as:692 +#: Resources/Scripts/Gui/Preferences.as:692 +msgctxt "Preferences" +msgid "Equip Block" +msgstr "Bloğu Donan" + +#: Resources/Scripts/Gui/Preferences.as:693 +#: Resources/Scripts/Gui/Preferences.as:693 +msgctxt "Preferences" +msgid "Equip Weapon" +msgstr "Silahı Donan" + +#: Resources/Scripts/Gui/Preferences.as:694 +#: Resources/Scripts/Gui/Preferences.as:694 +msgctxt "Preferences" +msgid "Equip Grenade" +msgstr "Bombayı Donan" + +#: Resources/Scripts/Gui/Preferences.as:695 +#: Resources/Scripts/Gui/Preferences.as:695 +msgctxt "Preferences" +msgid "Last Used Tool" +msgstr "Son Kullanılan Araç" + +#: Resources/Scripts/Gui/Preferences.as:696 +#: Resources/Scripts/Gui/Preferences.as:696 +msgctxt "Preferences" +msgid "Switch Tools by Wheel" +msgstr "Aletleri Tekerlekle Değiştir" + +#: Resources/Scripts/Gui/Preferences.as:698 +#: Resources/Scripts/Gui/Preferences.as:698 +msgctxt "Preferences" +msgid "Movement" +msgstr "Hareket" + +#: Resources/Scripts/Gui/Preferences.as:699 +#: Resources/Scripts/Gui/Preferences.as:699 +msgctxt "Preferences" +msgid "Walk Forward" +msgstr "İleri Yürü" + +#: Resources/Scripts/Gui/Preferences.as:700 +#: Resources/Scripts/Gui/Preferences.as:700 +msgctxt "Preferences" +msgid "Backpedal" +msgstr "Geriye Git" + +#: Resources/Scripts/Gui/Preferences.as:701 +#: Resources/Scripts/Gui/Preferences.as:701 +msgctxt "Preferences" +msgid "Move Left" +msgstr "Sola hareket et" + +#: Resources/Scripts/Gui/Preferences.as:702 +#: Resources/Scripts/Gui/Preferences.as:702 +msgctxt "Preferences" +msgid "Move Right" +msgstr "Sağa hareket et" + +#: Resources/Scripts/Gui/Preferences.as:703 +#: Resources/Scripts/Gui/Preferences.as:703 +msgctxt "Preferences" +msgid "Crouch" +msgstr "Eğil" + +#: Resources/Scripts/Gui/Preferences.as:704 +#: Resources/Scripts/Gui/Preferences.as:704 +msgctxt "Preferences" +msgid "Sneak" +msgstr "Gizli" + +#: Resources/Scripts/Gui/Preferences.as:705 +#: Resources/Scripts/Gui/Preferences.as:705 +msgctxt "Preferences" +msgid "Jump" +msgstr "Zıpla" + +#: Resources/Scripts/Gui/Preferences.as:706 +#: Resources/Scripts/Gui/Preferences.as:706 +msgctxt "Preferences" +msgid "Sprint" +msgstr "Koş" + +#: Resources/Scripts/Gui/Preferences.as:709 +#: Resources/Scripts/Gui/Preferences.as:709 +msgctxt "Preferences" +msgid "Minimap Scale" +msgstr "Küçük Harita Ölçeği" + +#: Resources/Scripts/Gui/Preferences.as:710 +#: Resources/Scripts/Gui/Preferences.as:710 +msgctxt "Preferences" +msgid "Toggle Map" +msgstr "Haritayı Aç / Kapat" + +#: Resources/Scripts/Gui/Preferences.as:711 +#: Resources/Scripts/Gui/Preferences.as:711 +msgctxt "Preferences" +msgid "Flashlight" +msgstr "El Feneri" + +#: Resources/Scripts/Gui/Preferences.as:712 +#: Resources/Scripts/Gui/Preferences.as:712 +msgctxt "Preferences" +msgid "Global Chat" +msgstr "Genel Sohbet" + +#: Resources/Scripts/Gui/Preferences.as:713 +#: Resources/Scripts/Gui/Preferences.as:713 +msgctxt "Preferences" +msgid "Team Chat" +msgstr "Takım Sohbeti" + +#: Resources/Scripts/Gui/Preferences.as:714 +#: Resources/Scripts/Gui/Preferences.as:714 +msgctxt "Preferences" +msgid "Limbo Menu" +msgstr "Limbo Menüsü" + +#: Resources/Scripts/Gui/Preferences.as:715 +#: Resources/Scripts/Gui/Preferences.as:715 +msgctxt "Preferences" +msgid "Save Map" +msgstr "Haritayı Kayıt Et" + +#: Resources/Scripts/Gui/Preferences.as:716 +#: Resources/Scripts/Gui/Preferences.as:716 +msgctxt "Preferences" +msgid "Save Sceneshot" +msgstr "Sahneyi Kaydet" + +#: Resources/Scripts/Gui/Preferences.as:717 +#: Resources/Scripts/Gui/Preferences.as:717 +msgctxt "Preferences" +msgid "Save Screenshot" +msgstr "Ekran görüntüsünü kaydet" + +#: Resources/Scripts/Gui/Preferences.as:736 +#: Resources/Scripts/Gui/Preferences.as:736 +msgctxt "Preferences" +msgid "Enable Startup Window" +msgstr "Açılır pencereyi etkinleştir" + +#: Resources/Scripts/Gui/Preferences.as:757 +#: Resources/Scripts/Gui/Preferences.as:757 +msgctxt "Preferences" +msgid "Quit and restart OpenSpades to access the startup window." +msgstr "Başlangıç ​​penceresine erişmek için OpenSpades'ten çıkın ve yeniden başlatın." + +#: Resources/Scripts/Gui/Preferences.as:758 +#: Resources/Scripts/Gui/Preferences.as:758 +msgctxt "Preferences" +msgid "Some settings only can be changed in the startup window." +msgstr "Bazı ayarlar yalnızca başlangıç ​​penceresinde değiştirilebilir." + +#: Resources/Scripts/Gui/StartupScreen.as:160 +#: Resources/Scripts/Gui/StartupScreen.as:160 +msgctxt "StartupScreen" +msgid "Start" +msgstr "Başlat" + +#: Resources/Scripts/Gui/StartupScreen.as:167 +#: Resources/Scripts/Gui/StartupScreen.as:167 +msgctxt "StartupScreen" +msgid "Skip this screen next time" +msgstr "Bir Daha ki sefere bu ekranı geç" + +#: Resources/Scripts/Gui/StartupScreen.as:211 +#: Resources/Scripts/Gui/StartupScreen.as:211 +msgctxt "StartupScreen" +msgid "Graphics" +msgstr "Grafikler" + +#: Resources/Scripts/Gui/StartupScreen.as:212 +#: Resources/Scripts/Gui/StartupScreen.as:212 +msgctxt "StartupScreen" +msgid "Audio" +msgstr "Sesler" + +#: Resources/Scripts/Gui/StartupScreen.as:213 +#: Resources/Scripts/Gui/StartupScreen.as:213 +msgctxt "StartupScreen" +msgid "Generic" +msgstr "Genel" + +#: Resources/Scripts/Gui/StartupScreen.as:214 +#: Resources/Scripts/Gui/StartupScreen.as:214 +msgctxt "StartupScreen" +msgid "System Info" +msgstr "Sistem Bilgisi" + +#: Resources/Scripts/Gui/StartupScreen.as:215 +#: Resources/Scripts/Gui/StartupScreen.as:1679 +#: Resources/Scripts/Gui/StartupScreen.as:215 +#: Resources/Scripts/Gui/StartupScreen.as:1679 +msgctxt "StartupScreen" +msgid "Advanced" +msgstr "Gelişmiş" + +#: Resources/Scripts/Gui/StartupScreen.as:288 +#: Resources/Scripts/Gui/StartupScreen.as:288 +msgctxt "StartupScreen" +msgid "An unknown error has occurred while opening the update info website." +msgstr "Güncelleme bilgi sitesini açarken bilinmeyen bir sorun oluştu." + +#: Resources/Scripts/Gui/StartupScreen.as:853 +#: Resources/Scripts/Gui/StartupScreen.as:853 +msgctxt "StartupScreen" +msgid "Custom" +msgstr "Özelleştir" + +#: Resources/Scripts/Gui/StartupScreen.as:979 +#: Resources/Scripts/Gui/StartupScreen.as:979 +msgctxt "StartupScreen" +msgid "Close" +msgstr "Kapat" + +#: Resources/Scripts/Gui/StartupScreen.as:1085 +#: Resources/Scripts/Gui/StartupScreen.as:1085 +msgctxt "StartupScreen" +msgid "Graphics Settings" +msgstr "Grafik Ayarları" + +#: Resources/Scripts/Gui/StartupScreen.as:1090 +#: Resources/Scripts/Gui/StartupScreen.as:1090 +msgctxt "StartupScreen" +msgid "Resolution" +msgstr "Çözünürlük" + +#: Resources/Scripts/Gui/StartupScreen.as:1100 +#: Resources/Scripts/Gui/StartupScreen.as:1100 +msgctxt "StartupScreen" +msgid "Fullscreen Mode" +msgstr "Tam Ekran Modu" + +#: Resources/Scripts/Gui/StartupScreen.as:1103 +#: Resources/Scripts/Gui/StartupScreen.as:1103 +msgctxt "StartupScreen" +msgid "By running in fullscreen mode OpenSpades occupies the screen, making it easier for you to concentrate on playing the game." +msgstr "Tam ekran modunda çalışarak OpenSpades ekranı kaplar ve oyunu oynama ve konsantre olmanızı kolaylaştırır." + +#: Resources/Scripts/Gui/StartupScreen.as:1110 +#: Resources/Scripts/Gui/StartupScreen.as:1492 +#: Resources/Scripts/Gui/StartupScreen.as:1110 +#: Resources/Scripts/Gui/StartupScreen.as:1492 +msgctxt "StartupScreen" +msgid "Backend" +msgstr "Backend" + +#: Resources/Scripts/Gui/StartupScreen.as:1113 +#: Resources/Scripts/Gui/StartupScreen.as:1113 +msgctxt "StartupScreen" +msgid "OpenGL" +msgstr "OpenGL" + +#: Resources/Scripts/Gui/StartupScreen.as:1117 +#: Resources/Scripts/Gui/StartupScreen.as:1117 +msgctxt "StartupScreen" +msgid "OpenGL renderer uses your computer's graphics accelerator to generate the game screen." +msgstr "OpenGL oluşturucu, oyun ekranını yaratmak için bilgisayarınızın grafik işlemcisini kullanır." + +#: Resources/Scripts/Gui/StartupScreen.as:1125 +#: Resources/Scripts/Gui/StartupScreen.as:1125 +msgctxt "StartupScreen" +msgid "Software" +msgstr "Software" + +#: Resources/Scripts/Gui/StartupScreen.as:1129 +#: Resources/Scripts/Gui/StartupScreen.as:1129 +msgctxt "StartupScreen" +msgid "Software renderer uses CPU to generate the game screen. Its quality and performance might be inferior to OpenGL renderer, but it works even with an unsupported GPU." +msgstr "Software oluşturucu, oyun ekranını yaratmak için bilgisayarınızın sadece işlemcisini kullanır. Bunun kalitesi ve performansı OpenGL oluşturucudan daha düşük olabilir, ancak desteklenmeyen bir GPU ile bile çalışır." + +#: Resources/Scripts/Gui/StartupScreen.as:1143 +#: Resources/Scripts/Gui/StartupScreen.as:1143 +msgctxt "StartupScreen" +msgid "Antialias:Enables a technique to improve the appearance of high-contrast edges.\n\n" +"MSAA: Performs antialiasing by generating an intermediate high-resolution image. Looks best, but doesn't cope with some settings.\n\n" +"FXAA: Performs antialiasing by smoothing artifacts out as a post-process.|Off|MSAA 2x|4x|FXAA" +msgstr "Kenar yumuşatma: Yüksek kontrastlı kenarların görünümünü iyileştirmek için bir yöntem sağlar.\n\n" +"MSAA: Ara yüksek çözünürlüklü bir görüntü oluşturarak kenar yumuşatma uygular. En iyi olarak görünüyor, ancak bazı ayarlarla başa çıkmıyor.\n\n" +"FXAA: İşlem sonrası olarak yapay nesneleri yumuşatarak kenar yumuşatma uygular. | Kapalı | MSAA 2x | 4x | FXAA" + +#: Resources/Scripts/Gui/StartupScreen.as:1150 +#: Resources/Scripts/Gui/StartupScreen.as:1150 +msgctxt "StartupScreen" +msgid "Global Illumination" +msgstr "Küresel aydınlatma" + +#: Resources/Scripts/Gui/StartupScreen.as:1152 +#: Resources/Scripts/Gui/StartupScreen.as:1152 +msgctxt "StartupScreen" +msgid "Enables a physically based simulation of light path for more realistic lighting." +msgstr "Daha gerçekçi aydınlatma için fiziksel olarak bir ışık yolu simülasyonu sağlar." + +#: Resources/Scripts/Gui/StartupScreen.as:1155 +#: Resources/Scripts/Gui/StartupScreen.as:1155 +msgctxt "StartupScreen" +msgid "Linear HDR Rendering" +msgstr "Doğrusal HDR Oluşturma" + +#: Resources/Scripts/Gui/StartupScreen.as:1157 +#: Resources/Scripts/Gui/StartupScreen.as:1157 +msgctxt "StartupScreen" +msgid "Uses a number representation which allows wider dynamic range during rendering process. Additionally, this allows color calculation whose value is in linear correspondence with actual energy, that is, physically accurate blending can be achieved." +msgstr "Görüntü oluşturma işlemi sırasında daha geniş dinamik aralığa izin veren bir sayı gösterimi kullanır. Ek olarak bu, değeri gerçek enerjiyle doğrusal bir uyum içinde olan, yani fiziksel olarak doğru karıştırma elde edilebilen renk hesaplamasına izin verir." + +#: Resources/Scripts/Gui/StartupScreen.as:1164 +#: Resources/Scripts/Gui/StartupScreen.as:1164 +msgctxt "StartupScreen" +msgid "Camera Blur" +msgstr "Kamera Bulanıklığı" + +#: Resources/Scripts/Gui/StartupScreen.as:1165 +#: Resources/Scripts/Gui/StartupScreen.as:1165 +msgctxt "StartupScreen" +msgid "Blurs the screen when you turn quickly." +msgstr "Hızlı döndüğünüzde ekranı bulanıklaştırır." + +#: Resources/Scripts/Gui/StartupScreen.as:1167 +#: Resources/Scripts/Gui/StartupScreen.as:1167 +msgctxt "StartupScreen" +msgid "Lens Effect" +msgstr "Lens efekti" + +#: Resources/Scripts/Gui/StartupScreen.as:1168 +#: Resources/Scripts/Gui/StartupScreen.as:1168 +msgctxt "StartupScreen" +msgid "Simulates distortion caused by a real camera lens." +msgstr "Gerçek bir kamera merceğinin neden olduğu bozulmayı simüle eder." + +#: Resources/Scripts/Gui/StartupScreen.as:1170 +#: Resources/Scripts/Gui/StartupScreen.as:1170 +msgctxt "StartupScreen" +msgid "Lens Scattering Filter" +msgstr "Lens Saçılma Filtresi" + +#: Resources/Scripts/Gui/StartupScreen.as:1171 +#: Resources/Scripts/Gui/StartupScreen.as:1171 +msgctxt "StartupScreen" +msgid "Simulates light being scattered by dust on the camera lens." +msgstr "Kamera merceğindeki toz tarafından dağılan ışığın benzetimini yapar." + +#: Resources/Scripts/Gui/StartupScreen.as:1174 +#: Resources/Scripts/Gui/StartupScreen.as:1174 +msgctxt "StartupScreen" +msgid "Lens Flare" +msgstr "Mercek parlaması" + +#: Resources/Scripts/Gui/StartupScreen.as:1175 +#: Resources/Scripts/Gui/StartupScreen.as:1175 +msgctxt "StartupScreen" +msgid "The Sun causes lens flare." +msgstr "Güneş mercek parlamasına neden olur." + +#: Resources/Scripts/Gui/StartupScreen.as:1177 +#: Resources/Scripts/Gui/StartupScreen.as:1177 +msgctxt "StartupScreen" +msgid "Flares for Dynamic Lights" +msgstr "Dinamik Işıklar için parlamalar" + +#: Resources/Scripts/Gui/StartupScreen.as:1178 +#: Resources/Scripts/Gui/StartupScreen.as:1178 +msgctxt "StartupScreen" +msgid "Enables lens flare for light sources other than the Sun." +msgstr "Güneş dışındaki ışık kaynakları için mercek parlamasını etkinleştirir." + +#: Resources/Scripts/Gui/StartupScreen.as:1180 +#: Resources/Scripts/Gui/StartupScreen.as:1180 +msgctxt "StartupScreen" +msgid "Color Correction" +msgstr "Renk Düzeltme" + +#: Resources/Scripts/Gui/StartupScreen.as:1181 +#: Resources/Scripts/Gui/StartupScreen.as:1181 +msgctxt "StartupScreen" +msgid "Applies cinematic color correction to make the image look better." +msgstr "Görüntünün daha iyi görünmesi için sinematik renk düzeltmesi uygular." + +#: Resources/Scripts/Gui/StartupScreen.as:1183 +#: Resources/Scripts/Gui/StartupScreen.as:1183 +msgctxt "StartupScreen" +msgid "Depth of Field" +msgstr "Alan derinliği" + +#: Resources/Scripts/Gui/StartupScreen.as:1184 +#: Resources/Scripts/Gui/StartupScreen.as:1184 +msgctxt "StartupScreen" +msgid "Blurs out-of-focus objects." +msgstr "Odak dışı nesneleri bulanıklaştırır." + +#: Resources/Scripts/Gui/StartupScreen.as:1186 +#: Resources/Scripts/Gui/StartupScreen.as:1186 +msgctxt "StartupScreen" +msgid "Screen Space Ambient Occlusion" +msgstr "Ekran alanı Çevresel perdeleme" + +#: Resources/Scripts/Gui/StartupScreen.as:1187 +#: Resources/Scripts/Gui/StartupScreen.as:1187 +msgctxt "StartupScreen" +msgid "Simulates soft shadows that occur between nearby objects." +msgstr "Yakındaki nesneler arasında oluşan yumuşak gölgeleri simüle eder." + +#: Resources/Scripts/Gui/StartupScreen.as:1189 +#: Resources/Scripts/Gui/StartupScreen.as:1228 +#: Resources/Scripts/Gui/StartupScreen.as:1250 +#: Resources/Scripts/Gui/StartupScreen.as:1189 +#: Resources/Scripts/Gui/StartupScreen.as:1228 +#: Resources/Scripts/Gui/StartupScreen.as:1250 +msgctxt "StartupScreen" +msgid "Low" +msgstr "Düşük" + +#: Resources/Scripts/Gui/StartupScreen.as:1190 +#: Resources/Scripts/Gui/StartupScreen.as:1229 +#: Resources/Scripts/Gui/StartupScreen.as:1190 +#: Resources/Scripts/Gui/StartupScreen.as:1229 +msgctxt "StartupScreen" +msgid "Medium" +msgstr "Orta" + +#: Resources/Scripts/Gui/StartupScreen.as:1191 +#: Resources/Scripts/Gui/StartupScreen.as:1230 +#: Resources/Scripts/Gui/StartupScreen.as:1252 +#: Resources/Scripts/Gui/StartupScreen.as:1191 +#: Resources/Scripts/Gui/StartupScreen.as:1230 +#: Resources/Scripts/Gui/StartupScreen.as:1252 +msgctxt "StartupScreen" +msgid "High" +msgstr "Yüksek" + +#: Resources/Scripts/Gui/StartupScreen.as:1192 +#: Resources/Scripts/Gui/StartupScreen.as:1253 +#: Resources/Scripts/Gui/StartupScreen.as:1192 +#: Resources/Scripts/Gui/StartupScreen.as:1253 +msgctxt "StartupScreen" +msgid "Ultra" +msgstr "Maksimum" + +#: Resources/Scripts/Gui/StartupScreen.as:1195 +#: Resources/Scripts/Gui/StartupScreen.as:1195 +msgctxt "StartupScreen" +msgid "Post-process" +msgstr "İşlem Sonrası" + +#: Resources/Scripts/Gui/StartupScreen.as:1196 +#: Resources/Scripts/Gui/StartupScreen.as:1196 +msgctxt "StartupScreen" +msgid "Post-process modifies the image to make it look better and more realistic." +msgstr "İşlem sonrası, görüntüyü daha iyi ve daha gerçekçi görünmesi için değiştirir." + +#: Resources/Scripts/Gui/StartupScreen.as:1203 +#: Resources/Scripts/Gui/StartupScreen.as:1203 +msgctxt "StartupScreen" +msgid "Particles|Low:Artifact occurs when a particle intersects other objects.|Medium:Particle intersects objects smoothly.|High:Particle intersects objects smoothly, and some objects casts their shadow to particles." +msgstr "Parçacıklar|Düşük:Bir parçacık diğer nesnelerle kesiştiğinde yapaylık oluşur.|Orta:Parçacık nesneleri düzgün bir şekilde keser.|Yüksek:Parçacık, nesneleri düzgün bir şekilde keser ve bazı nesneler gölgelerini parçacıklara verir." + +#: Resources/Scripts/Gui/StartupScreen.as:1213 +#: Resources/Scripts/Gui/StartupScreen.as:1213 +msgctxt "StartupScreen" +msgid "Dynamic Lights" +msgstr "Dinamik ışıklar" + +#: Resources/Scripts/Gui/StartupScreen.as:1215 +#: Resources/Scripts/Gui/StartupScreen.as:1215 +msgctxt "StartupScreen" +msgid "Gives some objects an ability to emit light to give them an energy-emitting impression." +msgstr "Bazı nesnelere enerji yayan bir izlenim vermek için ışık yayma yeteneği verir." + +#: Resources/Scripts/Gui/StartupScreen.as:1218 +#: Resources/Scripts/Gui/StartupScreen.as:1218 +msgctxt "StartupScreen" +msgid "Shadows" +msgstr "Gölgeler" + +#: Resources/Scripts/Gui/StartupScreen.as:1219 +#: Resources/Scripts/Gui/StartupScreen.as:1219 +msgctxt "StartupScreen" +msgid "Non-static object casts a shadow." +msgstr "Sabit olmayan bir nesne gölge verir." + +#: Resources/Scripts/Gui/StartupScreen.as:1221 +#: Resources/Scripts/Gui/StartupScreen.as:1221 +msgctxt "StartupScreen" +msgid "Volumetric Fog" +msgstr "Volumetrik Sis" + +#: Resources/Scripts/Gui/StartupScreen.as:1222 +#: Resources/Scripts/Gui/StartupScreen.as:1222 +msgctxt "StartupScreen" +msgid "Simulates shadow being casted to the fog particles using a super highly computationally demanding algorithm. " +msgstr "Süper yüksek hesaplama gerektiren bir algoritma kullanarak sis parçacıklarına dökülen gölgeyi simüle eder. " + +#: Resources/Scripts/Gui/StartupScreen.as:1225 +#: Resources/Scripts/Gui/StartupScreen.as:1225 +msgctxt "StartupScreen" +msgid "Physically Based Lighting" +msgstr "Fiziksel Tabanlı Aydınlatma" + +#: Resources/Scripts/Gui/StartupScreen.as:1226 +#: Resources/Scripts/Gui/StartupScreen.as:1226 +msgctxt "StartupScreen" +msgid "Uses more accurate approximation techniques to decide the brightness of objects." +msgstr "Nesnelerin parlaklığına karar vermek için daha doğru yaklaşım teknikleri kullanır." + +#: Resources/Scripts/Gui/StartupScreen.as:1233 +#: Resources/Scripts/Gui/StartupScreen.as:1233 +msgctxt "StartupScreen" +msgid "Direct Lights" +msgstr "Direkt Işıklar" + +#: Resources/Scripts/Gui/StartupScreen.as:1234 +#: Resources/Scripts/Gui/StartupScreen.as:1234 +msgctxt "StartupScreen" +msgid "Controls how light encounting a material and atmosphere directly affects its appearance." +msgstr "Bir malzeme ve atmosferle karşılaşan ışığın görünüşünü doğrudan nasıl etkilediğini kontrol eder." + +#: Resources/Scripts/Gui/StartupScreen.as:1244 +#: Resources/Scripts/Gui/StartupScreen.as:1244 +msgctxt "StartupScreen" +msgid "Water Shader|None:Water is rendered in the same way that normal blocks are done.|Level 1:Refraction and the reflected Sun are simulated.|Level 2:Waving water is simulated as well as reflection and refraction.|Level 3:Reflections and refractions are rendered at the highest quality using screen-space techniques." +msgstr "Su Gölgelendirici | Yok: Su, normal blokların yapıldığı gibi işlenir. | Seviye 1: Kırılma ve yansıyan Güneş simüle edilir. | Seviye 2: Dalgalanan su, yansıma ve kırılma gibi simüle edilir. | Seviye 3: Yansımalar ve kırılmalar ekran boşluğu teknikleri kullanılarak en yüksek kalitede gerçekleştirilir." + +#: Resources/Scripts/Gui/StartupScreen.as:1251 +#: Resources/Scripts/Gui/StartupScreen.as:1251 +msgctxt "StartupScreen" +msgid "Med" +msgstr "İlaç" + +#: Resources/Scripts/Gui/StartupScreen.as:1256 +#: Resources/Scripts/Gui/StartupScreen.as:1256 +msgctxt "StartupScreen" +msgid "Shader Effects" +msgstr "Gölgelendirici Efektler" + +#: Resources/Scripts/Gui/StartupScreen.as:1256 +#: Resources/Scripts/Gui/StartupScreen.as:1256 +msgctxt "StartupScreen" +msgid "Special effects." +msgstr "Özel Efektler." + +#: Resources/Scripts/Gui/StartupScreen.as:1273 +#: Resources/Scripts/Gui/StartupScreen.as:1273 +msgctxt "StartupScreen" +msgid "Fast Mode:Reduces the image resolution to make the rendering faster.|Off|2x|4x" +msgstr "Hızlı Mod: İşlemeyi hızlandırmak için görüntü çözünürlüğünü azaltır. | Kapalı | 2x | 4x" + +#: Resources/Scripts/Gui/StartupScreen.as:1486 +#: Resources/Scripts/Gui/StartupScreen.as:1486 +msgctxt "StartupScreen" +msgid "Audio Settings" +msgstr "Ses Ayarları" + +#: Resources/Scripts/Gui/StartupScreen.as:1495 +#: Resources/Scripts/Gui/StartupScreen.as:1495 +msgctxt "StartupScreen" +msgid "OpenAL" +msgstr "OpenAL" + +#: Resources/Scripts/Gui/StartupScreen.as:1499 +#: Resources/Scripts/Gui/StartupScreen.as:1499 +msgctxt "StartupScreen" +msgid "Uses an OpenAL-capable sound card to process sound. In most cases where there isn't such a sound card, software emulation is used." +msgstr "Sesi işlemek için OpenAL özellikli bir ses kartı kullanır. Böyle bir ses kartı bulunmayan çoğu durumda, yazılım benzemesi kullanılır." + +#: Resources/Scripts/Gui/StartupScreen.as:1508 +#: Resources/Scripts/Gui/StartupScreen.as:1508 +msgctxt "StartupScreen" +msgid "YSR" +msgstr "YSR" + +#: Resources/Scripts/Gui/StartupScreen.as:1512 +#: Resources/Scripts/Gui/StartupScreen.as:1512 +msgctxt "StartupScreen" +msgid "YSR is an experimental 3D HDR sound engine optimized for OpenSpades. It features several enhanced features including automatic load control, dynamics compressor, HRTF-based 3D audio, and high quality reverb." +msgstr "YSR, OpenSpades için optimize edilmiş deneysel bir 3D HDR ses motorudur. Otomatik yük kontrolü, dinamik kompresör, HRTF tabanlı 3D ses ve yüksek kaliteli yankı dahil olmak üzere çeşitli gelişmiş özelliklere sahiptir." + +#. ! The name of audio driver that outputs no audio. +#: Resources/Scripts/Gui/StartupScreen.as:1523 +#: Resources/Scripts/Gui/StartupScreen.as:1523 +msgctxt "StartupScreen" +msgid "Null" +msgstr "Boş" + +#: Resources/Scripts/Gui/StartupScreen.as:1527 +#: Resources/Scripts/Gui/StartupScreen.as:1527 +msgctxt "StartupScreen" +msgid "Disables audio output." +msgstr "Ses çıkışını devre dışı bırakır." + +#: Resources/Scripts/Gui/StartupScreen.as:1538 +#: Resources/Scripts/Gui/StartupScreen.as:1562 +#: Resources/Scripts/Gui/StartupScreen.as:1538 +#: Resources/Scripts/Gui/StartupScreen.as:1562 +msgctxt "StartupScreen" +msgid "Polyphonics" +msgstr "Polyphonics" + +#: Resources/Scripts/Gui/StartupScreen.as:1539 +#: Resources/Scripts/Gui/StartupScreen.as:1539 +msgctxt "StartupScreen" +msgid "Specifies how many sounds can be played simultaneously. Higher value needs more processing power, so setting this too high might cause an overload (especially with a software emulation)." +msgstr "Aynı anda kaç sesin çalınabileceğini belirtir. Daha yüksek değer daha fazla işlem gücüne ihtiyaç duyar, bu nedenle bu değerin çok yüksek ayarlanması aşırı yüke neden olabilir (özellikle yazılım benzemesi ile)." + +#: Resources/Scripts/Gui/StartupScreen.as:1546 +#: Resources/Scripts/Gui/StartupScreen.as:1546 +msgctxt "StartupScreen" +msgid "EAX" +msgstr "EAX" + +#: Resources/Scripts/Gui/StartupScreen.as:1547 +#: Resources/Scripts/Gui/StartupScreen.as:1547 +msgctxt "StartupScreen" +msgid "Enables extended features provided by the OpenAL driver to create more ambience." +msgstr "Daha fazla ortam yaratmak için OpenAL sürücüsü tarafından sağlanan genişletilmiş özellikleri etkinleştirir." + +#: Resources/Scripts/Gui/StartupScreen.as:1563 +#: Resources/Scripts/Gui/StartupScreen.as:1563 +msgctxt "StartupScreen" +msgid "Specifies how many sounds can be played simultaneously. No matter what value is set, YSR might reduce the number of sounds when an overload is detected." +msgstr "Eş zamanlı kaç sesin çalınabileceğini belirtir. Hangi değer ayarlanmış olursa olsun, YSR aşırı yük algılandığında ses sayısını azaltabilir." + +#: Resources/Scripts/Gui/StartupScreen.as:1623 +#: Resources/Scripts/Gui/StartupScreen.as:1623 +msgctxt "StartupScreen" +msgid "Language" +msgstr "Dil" + +#: Resources/Scripts/Gui/StartupScreen.as:1635 +#: Resources/Scripts/Gui/StartupScreen.as:1635 +msgctxt "StartupScreen" +msgid "Tools" +msgstr "Araçlar" + +#: Resources/Scripts/Gui/StartupScreen.as:1638 +#: Resources/Scripts/Gui/StartupScreen.as:1638 +msgctxt "StartupScreen" +msgid "Reset All Settings" +msgstr "Tüm ayarları Sıfırla" + +#: Resources/Scripts/Gui/StartupScreen.as:1647 +#: Resources/Scripts/Gui/StartupScreen.as:1647 +msgctxt "StartupScreen" +msgid "Open Config Folder in Explorer" +msgstr "Config Dosyasını Windows Gezgini'nde Aç" + +#: Resources/Scripts/Gui/StartupScreen.as:1649 +#: Resources/Scripts/Gui/StartupScreen.as:1649 +msgctxt "StartupScreen" +msgid "Reveal Config Folder in Finder" +msgstr "Bulucuya Yapılandırma Klasörünü Göster" + +#: Resources/Scripts/Gui/StartupScreen.as:1651 +#: Resources/Scripts/Gui/StartupScreen.as:1651 +msgctxt "StartupScreen" +msgid "Browse Config Folder" +msgstr "Yapılandırma Klasörüne Gözat" + +#: Resources/Scripts/Gui/StartupScreen.as:1668 +#: Resources/Scripts/Gui/StartupScreen.as:1668 +msgctxt "StartupScreen" +msgid "An unknown error has occurred while opening the config directory." +msgstr "Yapılandırma dizinini açarken bilinmeyen bir hata oluştu." + +#: Resources/Scripts/Gui/StartupScreen.as:1674 +#: Resources/Scripts/Gui/StartupScreen.as:1674 +msgctxt "StartupScreen" +msgid "Are you sure to reset all settings? They include (but are not limited to):" +msgstr "Tüm ayarları sıfırlamak istediğinizden emin misiniz? Bunlar içerir (\n" +"ancak bunlarla sınırlı değildirler):" + +#: Resources/Scripts/Gui/StartupScreen.as:1675 +#: Resources/Scripts/Gui/StartupScreen.as:1675 +msgctxt "StartupScreen" +msgid "All graphics/audio settings" +msgstr "Tüm grafik/ses ayarları" + +#: Resources/Scripts/Gui/StartupScreen.as:1676 +#: Resources/Scripts/Gui/StartupScreen.as:1676 +msgctxt "StartupScreen" +msgid "All key bindings" +msgstr "Tüm tuş atamaları" + +#: Resources/Scripts/Gui/StartupScreen.as:1677 +#: Resources/Scripts/Gui/StartupScreen.as:1677 +msgctxt "StartupScreen" +msgid "Your player name" +msgstr "Oyuncu adınız" + +#: Resources/Scripts/Gui/StartupScreen.as:1678 +#: Resources/Scripts/Gui/StartupScreen.as:1678 +msgctxt "StartupScreen" +msgid "Other advanced settings only accessible through '{0}' tab and in-game commands" +msgstr "Diğer gelişmiş ayarlara yalnızca '{0}' sekmesi ve oyun içi komutlarla erişilebilir" + +#: Resources/Scripts/Gui/StartupScreen.as:1748 +#: Resources/Scripts/Gui/StartupScreen.as:1748 +msgctxt "StartupScreen" +msgid "Unknown ({0})" +msgstr "Bilinmeyen ({0})" + +#: Resources/Scripts/Gui/StartupScreen.as:1750 +#: Resources/Scripts/Gui/StartupScreen.as:1764 +#: Resources/Scripts/Gui/StartupScreen.as:1750 +#: Resources/Scripts/Gui/StartupScreen.as:1764 +msgctxt "StartupScreen" +msgid "System default" +msgstr "Sistem varsayılanı" + +#: Resources/Scripts/Gui/StartupScreen.as:1813 +#: Resources/Scripts/Gui/StartupScreen.as:1813 +msgctxt "StartupScreen" +msgid "Copy to Clipboard" +msgstr "Panoya kopyala" + +#: Resources/Scripts/Gui/StartupScreen.as:1849 +#: Resources/Scripts/Gui/StartupScreen.as:1849 +msgctxt "StartupScreen" +msgid "Advanced Settings" +msgstr "Gelişmiş Ayarlar" + +#: Resources/Scripts/Gui/StartupScreen.as:1858 +#: Resources/Scripts/Gui/StartupScreen.as:1858 +msgctxt "StartupScreen" +msgid "Filter" +msgstr "Filtre" + +#: Resources/Scripts/Gui/UpdateCheckView.as:40 +#: Resources/Scripts/Gui/UpdateCheckView.as:40 +msgctxt "UpdateCheck" +msgid "Enable" +msgstr "Etkinleştir" + +#: Resources/Scripts/Gui/UpdateCheckView.as:47 +#: Resources/Scripts/Gui/UpdateCheckView.as:47 +msgctxt "UpdateCheck" +msgid "Show details..." +msgstr "Detayları göster..." + +#: Resources/Scripts/Gui/UpdateCheckView.as:102 +#: Resources/Scripts/Gui/UpdateCheckView.as:102 +msgctxt "UpdateCheck" +msgid "Version {0} is available! (You currently have {1})" +msgstr "{0} sürümü mevcut! (Şu anda {1} sürümü var)" + +#: Resources/Scripts/Gui/UpdateCheckView.as:105 +#: Resources/Scripts/Gui/UpdateCheckView.as:105 +msgctxt "UpdateCheck" +msgid "You're using the latest version of OpenSpades. ({0})" +msgstr "OpenSpades'in en güncel versiyonunu kullanıyorsunuz. ({0})" + +#: Resources/Scripts/Gui/UpdateCheckView.as:110 +#: Resources/Scripts/Gui/UpdateCheckView.as:110 +msgctxt "UpdateCheck" +msgid "Checking for updates..." +msgstr "Güncellemeler kontrol ediliyor..." + +#: Resources/Scripts/Gui/UpdateCheckView.as:113 +#: Resources/Scripts/Gui/UpdateCheckView.as:113 +msgctxt "UpdateCheck" +msgid "Failed to check for updates." +msgstr "Güncellemeler kontrol edilemedi." + +#: Resources/Scripts/Gui/UpdateCheckView.as:116 +#: Resources/Scripts/Gui/UpdateCheckView.as:116 +msgctxt "UpdateCheck" +msgid "Automatic update check is not enabled." +msgstr "Otomatik Güncelleme etkin değil." + +#: Resources/Scripts/Gui/UpdateCheckView.as:119 +#: Resources/Scripts/Gui/UpdateCheckView.as:119 +msgctxt "UpdateCheck" +msgid "Automatic update check is not available." +msgstr "Otomatik güncelleştirme kullanılabilir değil." + +#: Sources/Client/Client_NetHandler.cpp:258 +#: Sources/Client/Client_NetHandler.cpp:271 +msgctxt "Client" +msgid "Spectator" +msgstr "İzleyici" + +#: Sources/Client/Client_Draw.cpp:99 +msgctxt "Client" +msgid "Unbound" +msgstr "Bağlı değil" + +#: Sources/Client/Client_Draw.cpp:655 +msgctxt "Client" +msgid "[{0}] Cycle camera mode" +msgstr "[{0}] Kamera modunu çevir" + +#: Sources/Client/Client_Draw.cpp:657 +msgctxt "Client" +msgid "[{0}/{1}] Next/previous player" +msgstr "[{0} / {1}] Sonraki / önceki oyuncu" + +#: Sources/Client/Client_Draw.cpp:661 +msgctxt "Client" +msgid "[{0}] Unfollow" +msgstr "[{0}]'u Takibi Bırak" + +#: Sources/Client/Client_Draw.cpp:664 +msgctxt "Client" +msgid "[{0}/{1}] Follow a player" +msgstr "[{0}/{1}] Bir oyuncuyu takip etti" + +#: Sources/Client/Client_Draw.cpp:669 +msgctxt "Client" +msgid "[{0}/{1}] Go up/down" +msgstr "[{0} / {1}] Yukarı / aşağı git" + diff --git a/Resources/Locales/uk/openspades.po b/Resources/Locales/uk/openspades.po index c47309a5..f7a8c7c6 100644 --- a/Resources/Locales/uk/openspades.po +++ b/Resources/Locales/uk/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2019-01-01 05:55\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Ukrainian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/vi/openspades.po b/Resources/Locales/vi/openspades.po index 74a482a0..2df69061 100644 --- a/Resources/Locales/vi/openspades.po +++ b/Resources/Locales/vi/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2019-01-01 05:55\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Vietnamese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Locales/zh_CN/openspades.po b/Resources/Locales/zh_CN/openspades.po index 6823f05b..247062b5 100644 --- a/Resources/Locales/zh_CN/openspades.po +++ b/Resources/Locales/zh_CN/openspades.po @@ -3,13 +3,13 @@ msgstr "" "Project-Id-Version: openspades\n" "Report-Msgid-Bugs-To: i at yvt.jp\n" "POT-Creation-Date: 2016-12-25 23:47-0200\n" -"PO-Revision-Date: 2019-01-01 05:55\n" -"Last-Translator: yvt \n" +"PO-Revision-Date: 2020-04-19 14:46\n" +"Last-Translator: FULL NAME \n" "Language-Team: Chinese Simplified\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: crowdin.com\n" +"X-Generator: Poedit 1.8.7.1\n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Crowdin-Project: openspades\n" diff --git a/Resources/Scripts/Gui/StartupScreen/ConfigViewTabs.as b/Resources/Scripts/Gui/StartupScreen/ConfigViewTabs.as index 31aa379d..f8f8a4e8 100644 --- a/Resources/Scripts/Gui/StartupScreen/ConfigViewTabs.as +++ b/Resources/Scripts/Gui/StartupScreen/ConfigViewTabs.as @@ -113,6 +113,7 @@ namespace spades { { StartupScreenConfigView cfg(Manager); + // TODO: Add r_temporalAA when it's more complete cfg.AddRow(StartupScreenConfigSelectItemEditor( ui, StartupScreenGraphicsAntialiasConfig(ui), "0|2|4|fxaa", _Tr("StartupScreen", diff --git a/Resources/Shaders/BasicBlock.vs b/Resources/Shaders/BasicBlock.vs index efa62284..2ce81038 100644 --- a/Resources/Shaders/BasicBlock.vs +++ b/Resources/Shaders/BasicBlock.vs @@ -71,7 +71,6 @@ void main() { vec3 fixedPosition = chunkPosition; fixedPosition += fixedPositionAttribute * 0.5; - fixedPosition += normalAttribute * 0.1; vec3 normal = normalAttribute; vec3 shadowVertexPos = vertexPos.xyz; diff --git a/Resources/Shaders/BasicBlockPhys.vs b/Resources/Shaders/BasicBlockPhys.vs index 733662d0..6f5281a5 100644 --- a/Resources/Shaders/BasicBlockPhys.vs +++ b/Resources/Shaders/BasicBlockPhys.vs @@ -80,7 +80,6 @@ void main() { vec3 fixedPosition = chunkPosition; fixedPosition += fixedPositionAttribute * 0.5; - fixedPosition += normalAttribute * 0.1; vec3 normal = normalAttribute; vec3 shadowVertexPos = vertexPos.xyz; diff --git a/Resources/Shaders/PostFilters/BilateralFilter.fs b/Resources/Shaders/PostFilters/BilateralFilter.fs index 975069f2..5d10a39a 100644 --- a/Resources/Shaders/PostFilters/BilateralFilter.fs +++ b/Resources/Shaders/PostFilters/BilateralFilter.fs @@ -33,13 +33,19 @@ float decodeDepth(float w, float near, float far){ } void main() { - float centerDepth = texture2D(depthTexture, texCoord).x; - if (centerDepth >= 0.999999) { + float centerDepthRaw = texture2D(depthTexture, texCoord).x; + + // A tangent at `texCoord` in `depthTexture` + float centerDepthRawDfdx = dFdx(centerDepthRaw); + float centerDepthRawDfdy = dFdy(centerDepthRaw); + float centerDepthRawDfdi = + dot(vec2(centerDepthRawDfdx, centerDepthRawDfdy), unitShift / vec2(dFdx(texCoord.x), dFdy(texCoord.y))); + + if (centerDepthRaw >= 0.999999) { // skip background gl_FragColor = vec4(1.0); return; } - centerDepth = decodeDepth(centerDepth, zNearFar.x, zNearFar.y); vec2 sum = vec2(0.0000001); if (isUpsampling) { @@ -47,6 +53,10 @@ void main() { inputOriginCoord *= pixelShift.xy * 2.0; for (float i = -4.0; i <= 4.0; i += 2.0) { + // Extrapolate the depth value using the tangent + float centerDepthRawInterpolated = centerDepthRaw + centerDepthRawDfdi * i; + float centerDepth = decodeDepth(centerDepthRawInterpolated, zNearFar.x, zNearFar.y); + vec2 sampledCoord = inputOriginCoord + unitShift * i; float sampledDepth = texture2D(depthTexture, sampledCoord).x; sampledDepth = decodeDepth(sampledDepth, zNearFar.x, zNearFar.y); @@ -61,6 +71,10 @@ void main() { } else { for (float i = -4.0; i <= 4.0; i += 1.0) { + // Extrapolate the depth value using the tangent + float centerDepthRawInterpolated = centerDepthRaw + centerDepthRawDfdi * i; + float centerDepth = decodeDepth(centerDepthRawInterpolated, zNearFar.x, zNearFar.y); + vec2 sampledCoord = texCoord + unitShift * i; float sampledDepth = texture2D(depthTexture, sampledCoord).x; sampledDepth = decodeDepth(sampledDepth, zNearFar.x, zNearFar.y); diff --git a/Resources/Shaders/PostFilters/ColorCorrection.fs b/Resources/Shaders/PostFilters/ColorCorrection.fs index 6e707b51..04e05ee4 100644 --- a/Resources/Shaders/PostFilters/ColorCorrection.fs +++ b/Resources/Shaders/PostFilters/ColorCorrection.fs @@ -20,22 +20,93 @@ uniform sampler2D mainTexture; +uniform sampler2D blurredTexture; varying vec2 texCoord; uniform float enhancement; uniform float saturation; uniform vec3 tint; +uniform float sharpening; +uniform float sharpeningFinalGain; +uniform float blurPixelShift; vec3 acesToneMapping(vec3 x) { return clamp((x * (2.51 * x + 0.03)) / (x * (2.43 * x + 0.59) + 0.14), 0.0, 1.0); } +// 1/(dacesToneMapping(x)/dx) +float acesToneMappingDiffRcp(float color) { + float denom = 0.0576132 + color * (0.242798 + color); + return (denom * denom) / (0.0007112 + color * (0.11902 + color * 0.238446)); +} + void main() { // Input is in the device color space gl_FragColor = texture2D(mainTexture, texCoord); + if (sharpeningFinalGain > 0.0) { + // generated by ./1dgaussGen.rb + // pixelShift is texture coord shift / texture pixel + float pixelShift = blurPixelShift; + float shift1 = pixelShift * -2.30654399138844; + const float scale1 = 0.178704407070903; + float shift2 = pixelShift * -0.629455560633963; + const float scale2 = 0.321295592929097; + float shift3 = pixelShift * 0.629455560633963; + const float scale3 = 0.321295592929097; + float shift4 = pixelShift * 2.30654399138844; + const float scale4 = 0.178704407070903; + + vec4 blurred = texture2D(blurredTexture, texCoord + vec2(0.0, shift1)) * scale1; + blurred += texture2D(blurredTexture, texCoord + vec2(0.0, shift2)) * scale2; + blurred += texture2D(blurredTexture, texCoord + vec2(0.0, shift3)) * scale3; + blurred += texture2D(blurredTexture, texCoord + vec2(0.0, shift4)) * scale4; + + // `sharpening` tells to what extent we must enhance the edges based on + // global factors. + float enhancingFactor = sharpening; +#if USE_HDR + // Now we take the derivative of `acesToneMapping` into consideration. + // Specifially, when `acesToneMapping` reduces the color contrast + // around the current pixel by N times, we compensate by scaling + // `enhancingFactor` by N. + float localLuminance = dot(blurred.xyz, vec3(1. / 3.)); + float localLuminanceLinear = clamp(localLuminance * localLuminance, 0.0, 1.0); + enhancingFactor *= acesToneMappingDiffRcp(localLuminanceLinear * 0.8); + + // We don't want specular highlights to cause black edges, so weaken the + // effect if the local luminance is high. + localLuminance = max(localLuminance, dot(gl_FragColor.xyz, vec3(1. / 3.))); + if (localLuminance > 1.0) { + localLuminance -= 1.0; + enhancingFactor *= 1.0 - (localLuminance + localLuminance * localLuminance) * 100.0; + } +#endif + + // Clamp the sharpening effect's intensity. + enhancingFactor = clamp(enhancingFactor, 1.0, 4.0); + + // Derive the value of `localSharpening` that achieves the desired + // contrast enhancement. When `sharpeningFinalGain = 1`, the sharpening + // effect multiplies the color contrast exactly by `enhancingFactor`. + float localSharpening = (enhancingFactor - 1.0) * sharpeningFinalGain; + + // Given a parameter value `localSharpening`, the sharpening kernel defined + // in here enhances the color difference across a horizontal or vertical + // edge by the following factor: + // + // r_sharp = 1 + localSharpening + + // Sharpening is done by reversing the effect of the blur kernel. + // Clamp the lower bound to suppress the black edges around specular highlights. + vec3 lowerBound = gl_FragColor.xyz * 0.6; + gl_FragColor.xyz += (gl_FragColor.xyz - blurred.xyz) * localSharpening; + gl_FragColor.xyz = max(gl_FragColor.xyz, lowerBound); + } + + // Apply tinting and manual exposure gl_FragColor.xyz *= tint; vec3 gray = vec3(dot(gl_FragColor.xyz, vec3(1. / 3.))); diff --git a/Resources/Shaders/PostFilters/ResampleBicubic.fs b/Resources/Shaders/PostFilters/ResampleBicubic.fs new file mode 100644 index 00000000..c6bbdf68 --- /dev/null +++ b/Resources/Shaders/PostFilters/ResampleBicubic.fs @@ -0,0 +1,88 @@ +/* + Copyright (c) 2021 yvt + + This file is part of OpenSpades. + + OpenSpades is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenSpades is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenSpades. If not, see . + + */ + +/* + * This bi-cubic spline interpolation code is based on + * + * http://www.dannyruijters.nl/cubicinterpolation/ + * https://github.com/DannyRuijters/CubicInterpolationCUDA + * + * @license Copyright (c) 2008-2013, Danny Ruijters. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + */ +void bspline_weights(vec2 fraction, out vec2 w0, out vec2 w1, out vec2 w2, out vec2 w3) { + vec2 one_frac = 1.0 - fraction; + vec2 squared = fraction * fraction; + vec2 one_sqd = one_frac * one_frac; + + w0 = 1.0 / 6.0 * one_sqd * one_frac; + w1 = 2.0 / 3.0 - 0.5 * squared * (2.0 - fraction); + w2 = 2.0 / 3.0 - 0.5 * one_sqd * (2.0 - one_frac); + w3 = 1.0 / 6.0 * squared * fraction; +} + +vec3 cubicTex2D(sampler2D tex, vec2 coord, vec2 inverseTexSize) { + // transform the coordinate from [0,extent] to [-0.5, extent-0.5] + vec2 coord_grid = coord - 0.5; + vec2 index = floor(coord_grid); + vec2 fraction = coord_grid - index; + vec2 w0, w1, w2, w3; + bspline_weights(fraction, w0, w1, w2, w3); + + vec2 g0 = w0 + w1; + vec2 g1 = w2 + w3; + vec2 h0 = + (w1 / g0) - vec2(0.5) + index; // h0 = w1/g0 - 1, move from [-0.5, extent-0.5] to [0, extent] + vec2 h1 = + (w3 / g1) + vec2(1.5) + index; // h1 = w3/g1 + 1, move from [-0.5, extent-0.5] to [0, extent] + + // fetch the four linear interpolations + vec3 tex00 = texture2D(tex, vec2(h0.x, h0.y) * inverseTexSize).xyz; + vec3 tex10 = texture2D(tex, vec2(h1.x, h0.y) * inverseTexSize).xyz; + vec3 tex01 = texture2D(tex, vec2(h0.x, h1.y) * inverseTexSize).xyz; + vec3 tex11 = texture2D(tex, vec2(h1.x, h1.y) * inverseTexSize).xyz; + + // weigh along the y-direction + tex00 = g0.y * tex00 + g1.y * tex01; + tex10 = g0.y * tex10 + g1.y * tex11; + + // weigh along the x-direction + return (g0.x * tex00 + g1.x * tex10); +} + +uniform sampler2D mainTexture; +uniform vec2 inverseVP; + +varying vec2 texCoord; + +void main() { + gl_FragColor.xyz = cubicTex2D(mainTexture, texCoord, inverseVP); + gl_FragColor.w = 1.0; +} diff --git a/Resources/Shaders/PostFilters/ResampleBicubic.program b/Resources/Shaders/PostFilters/ResampleBicubic.program new file mode 100644 index 00000000..41151d7b --- /dev/null +++ b/Resources/Shaders/PostFilters/ResampleBicubic.program @@ -0,0 +1,2 @@ +Shaders/PostFilters/ResampleBicubic.fs +Shaders/PostFilters/ResampleBicubic.vs diff --git a/Resources/Shaders/PostFilters/ResampleBicubic.vs b/Resources/Shaders/PostFilters/ResampleBicubic.vs new file mode 100644 index 00000000..19e0f815 --- /dev/null +++ b/Resources/Shaders/PostFilters/ResampleBicubic.vs @@ -0,0 +1,32 @@ +/* + Copyright (c) 2021 yvt + + This file is part of OpenSpades. + + OpenSpades is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenSpades is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenSpades. If not, see . + + */ + +attribute vec2 positionAttribute; + +varying vec2 texCoord; +uniform vec2 inverseVP; + +void main() { + vec2 scrPos = positionAttribute * 2. - 1.; + + gl_Position = vec4(scrPos, 0.5, 1.); + + texCoord = positionAttribute / inverseVP; +} diff --git a/Resources/Shaders/PostFilters/TemporalAA.fs b/Resources/Shaders/PostFilters/TemporalAA.fs new file mode 100644 index 00000000..02bafb2e --- /dev/null +++ b/Resources/Shaders/PostFilters/TemporalAA.fs @@ -0,0 +1,133 @@ +/* + Copyright (c) 2017 yvt + + This file is part of OpenSpades. + + OpenSpades is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenSpades is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenSpades. If not, see . + + */ + + +uniform sampler2D inputTexture; +uniform sampler2D depthTexture; +uniform sampler2D previousTexture; +uniform sampler2D processedInputTexture; +uniform vec2 inverseVP; +uniform mat4 reprojectionMatrix; + +varying vec2 texCoord; +/* UE4-style temporal AA. Implementation is based on my ShaderToy submission */ + +// YUV-RGB conversion routine from Hyper3D +vec3 encodePalYuv(vec3 rgb) +{ + return vec3( + dot(rgb, vec3(0.299, 0.587, 0.114)), + dot(rgb, vec3(-0.14713, -0.28886, 0.436)), + dot(rgb, vec3(0.615, -0.51499, -0.10001)) + ); +} + +vec3 decodePalYuv(vec3 yuv) +{ + return vec3( + dot(yuv, vec3(1., 0., 1.13983)), + dot(yuv, vec3(1., -0.39465, -0.58060)), + dot(yuv, vec3(1., 2.03211, 0.)) + ); +} + + +void main() { + // ------------------------------------------------------------------------ + // Reprojection + // + // Calulate the Z position of the current pixel. Take the minimum Z value + // of the neighboring pixels to preserve the antialiasing of foreground + // objects. + vec2 off = inverseVP; + float inputZ0 = texture2D(depthTexture, texCoord).x; + float inputZ1 = texture2D(depthTexture, texCoord + vec2(+off.x, 0.0)).x; + float inputZ2 = texture2D(depthTexture, texCoord + vec2(-off.x, 0.0)).x; + float inputZ3 = texture2D(depthTexture, texCoord + vec2(0.0, +off.y)).x; + float inputZ4 = texture2D(depthTexture, texCoord + vec2(0.0, -off.y)).x; + float inputZ5 = texture2D(depthTexture, texCoord + vec2(+off.x, +off.y)).x; + float inputZ6 = texture2D(depthTexture, texCoord + vec2(-off.x, +off.y)).x; + float inputZ7 = texture2D(depthTexture, texCoord + vec2(+off.x, -off.y)).x; + float inputZ8 = texture2D(depthTexture, texCoord + vec2(-off.x, -off.y)).x; + float inputZ = min(min(min(inputZ0, inputZ1), min(inputZ2, inputZ3)), + min(min(inputZ4, inputZ5), min(inputZ6, min(inputZ7, inputZ8)))); + + // Predict where the point was in the previous frame. The Z range [0, 0.1] + // is for a view weapon, so assume no movement in this range. + vec4 reprojectedTexCoord; + if (inputZ < 0.1) { + reprojectedTexCoord.xy = texCoord.xy; + } else { + reprojectedTexCoord = reprojectionMatrix * vec4(texCoord, inputZ, 1.0); + reprojectedTexCoord.xy /= reprojectedTexCoord.w; + } + + vec4 lastColor = texture2D(previousTexture, reprojectedTexCoord.xy); + + // ------------------------------------------------------------------------ + vec3 antialiased = lastColor.xyz; + float mixRate = min(lastColor.w, 0.5); + + vec3 in0 = texture2D(processedInputTexture, texCoord).xyz; + + antialiased = mix(antialiased, in0, mixRate); + + vec3 in1 = texture2D(inputTexture, texCoord + vec2(+off.x, 0.0)).xyz; + vec3 in2 = texture2D(inputTexture, texCoord + vec2(-off.x, 0.0)).xyz; + vec3 in3 = texture2D(inputTexture, texCoord + vec2(0.0, +off.y)).xyz; + vec3 in4 = texture2D(inputTexture, texCoord + vec2(0.0, -off.y)).xyz; + vec3 in5 = texture2D(inputTexture, texCoord + vec2(+off.x, +off.y)).xyz; + vec3 in6 = texture2D(inputTexture, texCoord + vec2(-off.x, +off.y)).xyz; + vec3 in7 = texture2D(inputTexture, texCoord + vec2(+off.x, -off.y)).xyz; + vec3 in8 = texture2D(inputTexture, texCoord + vec2(-off.x, -off.y)).xyz; + + antialiased = encodePalYuv(antialiased); + in0 = encodePalYuv(in0); + in1 = encodePalYuv(in1); + in2 = encodePalYuv(in2); + in3 = encodePalYuv(in3); + in4 = encodePalYuv(in4); + in5 = encodePalYuv(in5); + in6 = encodePalYuv(in6); + in7 = encodePalYuv(in7); + in8 = encodePalYuv(in8); + + vec3 minColor = min(min(min(in0, in1), min(in2, in3)), in4); + vec3 maxColor = max(max(max(in0, in1), max(in2, in3)), in4); + minColor = mix(minColor, + min(min(min(in5, in6), min(in7, in8)), minColor), 0.5); + maxColor = mix(maxColor, + max(max(max(in5, in6), max(in7, in8)), maxColor), 0.5); + + vec3 preclamping = antialiased; + antialiased = clamp(antialiased, minColor, maxColor); + + mixRate = 1.0 / (1.0 / mixRate + 1.0); + + vec3 diff = abs(antialiased - preclamping); + float clampAmount = max(max(diff.x, diff.y), diff.z); + + mixRate += clampAmount * 8.0; + mixRate = clamp(mixRate, 0.05, 0.5); + + antialiased = decodePalYuv(antialiased); + + gl_FragColor = vec4(max(antialiased, vec3(0.0)), mixRate); +} diff --git a/Resources/Shaders/PostFilters/TemporalAA.program b/Resources/Shaders/PostFilters/TemporalAA.program new file mode 100644 index 00000000..b1a53ab8 --- /dev/null +++ b/Resources/Shaders/PostFilters/TemporalAA.program @@ -0,0 +1,2 @@ +Shaders/PostFilters/TemporalAA.fs +Shaders/PostFilters/TemporalAA.vs diff --git a/Resources/Shaders/PostFilters/TemporalAA.vs b/Resources/Shaders/PostFilters/TemporalAA.vs new file mode 100644 index 00000000..4d77072f --- /dev/null +++ b/Resources/Shaders/PostFilters/TemporalAA.vs @@ -0,0 +1,36 @@ +/* + Copyright (c) 2017 yvt + + This file is part of OpenSpades. + + OpenSpades is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenSpades is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenSpades. If not, see . + + */ + + + +attribute vec2 positionAttribute; + +varying vec2 texCoord; + +void main() { + vec2 pos = positionAttribute; + + vec2 scrPos = pos * 2. - 1.; + + gl_Position = vec4(scrPos, 0.5, 1.); + + texCoord = pos; +} + diff --git a/Resources/Shaders/Shadow/Common.vs b/Resources/Shaders/Shadow/Common.vs index c3de17db..7f9c6a5d 100644 --- a/Resources/Shaders/Shadow/Common.vs +++ b/Resources/Shaders/Shadow/Common.vs @@ -1,21 +1,21 @@ /* Copyright (c) 2013 yvt - + This file is part of OpenSpades. - + OpenSpades is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + OpenSpades is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with OpenSpades. If not, see . - + */ @@ -23,6 +23,7 @@ void PrepareForShadow_Map(vec3 vertexCoord, vec3 normal) ; void PrepareForShadow_Model(vec3 vertexCoord, vec3 normal); void PrepareForRadiosity_Map(vec3 vertexCoord, vec3 normal); +void PrepareForRadiosityForMap_Map(vec3 vertexCoord, vec3 centerCoord, vec3 normal); void PrepareForShadow(vec3 vertexCoord, vec3 normal) { PrepareForShadow_Map(vertexCoord, normal); @@ -30,9 +31,9 @@ void PrepareForShadow(vec3 vertexCoord, vec3 normal) { PrepareForRadiosity_Map(vertexCoord, normal); } -// map uses specialized shadow coordinate calculation to avoid glitch -void PrepareForShadowForMap(vec3 vertexCoord, vec3 fixedVertexCoord, vec3 normal) { - PrepareForShadow_Map(fixedVertexCoord, normal); +void PrepareForShadowForMap(vec3 vertexCoord, vec3 centerCoord, vec3 normal) { + // map uses specialized shadow coordinate calculation to avoid glitch + PrepareForShadow_Map(centerCoord + normal * 0.1, normal); PrepareForShadow_Model(vertexCoord, normal); - PrepareForRadiosity_Map(vertexCoord, normal); + PrepareForRadiosityForMap_Map(vertexCoord, centerCoord, normal); } diff --git a/Resources/Shaders/Shadow/MapRadiosity.fs b/Resources/Shaders/Shadow/MapRadiosity.fs index 59d9c3a3..6c302ada 100644 --- a/Resources/Shaders/Shadow/MapRadiosity.fs +++ b/Resources/Shaders/Shadow/MapRadiosity.fs @@ -58,7 +58,8 @@ vec3 Radiosity_Map(float detailAmbientOcclusion, float ssao) { detailAmbientOcclusion *= ssao; // ambient occlusion - float amb = texture3D(ambientShadowTexture, ambientShadowTextureCoord).x; + vec2 ambTexVal = texture3D(ambientShadowTexture, ambientShadowTextureCoord).xy; + float amb = ambTexVal.x / max(ambTexVal.y, 0.25); amb = max(amb, 0.); // for some reason, mainTexture value becomes negative // mix ambient occlusion values generated by two different methods somehow diff --git a/Resources/Shaders/Shadow/MapRadiosity.vs b/Resources/Shaders/Shadow/MapRadiosity.vs index 7c5b15c0..c4cc7a0a 100644 --- a/Resources/Shaders/Shadow/MapRadiosity.vs +++ b/Resources/Shaders/Shadow/MapRadiosity.vs @@ -1,33 +1,80 @@ /* Copyright (c) 2013 yvt - + This file is part of OpenSpades. - + OpenSpades is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + OpenSpades is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with OpenSpades. If not, see . - + */ /**** CPU RADIOSITY (FASTER?) *****/ +uniform sampler3D ambientShadowTexture; + varying vec3 radiosityTextureCoord; varying vec3 ambientShadowTextureCoord; varying vec3 normalVarying; void PrepareForRadiosity_Map(vec3 vertexCoord, vec3 normal) { - radiosityTextureCoord = (vertexCoord + vec3(0., 0., 0.)) / vec3(512., 512., 64.); - ambientShadowTextureCoord = (vertexCoord + vec3(0.5, 0.5, 1.5)) / vec3(512., 512., 65.); - + ambientShadowTextureCoord = (vertexCoord + vec3(0., 0., 1.)) / vec3(512., 512., 65.); + normalVarying = normal; } + +void PrepareForRadiosityForMap_Map(vec3 vertexCoord, vec3 centerCoord, vec3 normal) { + radiosityTextureCoord = (vertexCoord + vec3(0., 0., 0.)) / vec3(512., 512., 64.); + ambientShadowTextureCoord = (vertexCoord + vec3(0., 0., 1.) + normal * 0.5) / vec3(512., 512., 65.); + + vec3 centerAST = (centerCoord + vec3(0., 0., 1.) + normal * 0.5) / vec3(512., 512., 65.); + vec3 rel = vertexCoord - centerCoord; + vec3 relAST = rel * 2.0 / vec3(512., 512., 65.); + + // Detect the following pattern: + // + // +-----+-----+ + // |#####| | + // |#####| | + // |#####| | + // +-----+-----+ + // | V|#####| + // | C |#####| + // | |#####| + // +-----+-----+ + // + // C = centerCoord, V = vertexCoord, # = covered by a solid voxel + // + float weightSum; + if (normal.x != 0.0) { + weightSum = texture3D(ambientShadowTexture, centerAST + vec3(0.0, relAST.y, 0.0)).y + + texture3D(ambientShadowTexture, centerAST + vec3(0.0, 0.0, relAST.z)).y - + texture3D(ambientShadowTexture, centerAST + vec3(0.0, relAST.y, relAST.z)).y; + } else if (normal.y != 0.0) { + weightSum = texture3D(ambientShadowTexture, centerAST + vec3(relAST.x, 0.0, 0.0)).y + + texture3D(ambientShadowTexture, centerAST + vec3(0.0, 0.0, relAST.z)).y - + texture3D(ambientShadowTexture, centerAST + vec3(relAST.x, 0.0, relAST.z)).y; + } else { + weightSum = texture3D(ambientShadowTexture, centerAST + vec3(relAST.x, 0.0, 0.0)).y + + texture3D(ambientShadowTexture, centerAST + vec3(0.0, relAST.y, 0.0)).y - + texture3D(ambientShadowTexture, centerAST + vec3(relAST.x, relAST.y, 0.0)).y; + } + + // Hide the light leaks by corners by modifying the AO texture coordinates + if (weightSum < -0.5) { + radiosityTextureCoord -= rel / vec3(512., 512., 64.); + ambientShadowTextureCoord = centerAST; + } + + normalVarying = normal; +} \ No newline at end of file diff --git a/Resources/Shaders/Shadow/MapRadiosityLow.fs b/Resources/Shaders/Shadow/MapRadiosityLow.fs index 7d69fee1..05e0a85f 100644 --- a/Resources/Shaders/Shadow/MapRadiosityLow.fs +++ b/Resources/Shaders/Shadow/MapRadiosityLow.fs @@ -59,7 +59,8 @@ vec3 Radiosity_Map(float detailAmbientOcclusion, float ssao) { detailAmbientOcclusion *= ssao; // ambient occlusion - float amb = texture3D(ambientShadowTexture, ambientShadowTextureCoord).x; + vec2 ambTexVal = texture3D(ambientShadowTexture, ambientShadowTextureCoord).xy; + float amb = ambTexVal.x / (ambTexVal.y + 1.0e-12); amb = max(amb, 0.); // by some reason, mainTexture value becomes negative // mix ambient occlusion values generated by two different methods somehow diff --git a/Resources/Shaders/Shadow/MapRadiosityNull.vs b/Resources/Shaders/Shadow/MapRadiosityNull.vs index 2b730b06..a05b7915 100644 --- a/Resources/Shaders/Shadow/MapRadiosityNull.vs +++ b/Resources/Shaders/Shadow/MapRadiosityNull.vs @@ -24,3 +24,7 @@ void PrepareForRadiosity_Map(vec3 vertexCoord, vec3 normal) { hemisphereLighting = 1. - normal.z * .2; } +void PrepareForRadiosityForMap_Map(vec3 vertexCoord, vec3 centerCoord, vec3 normal) { + hemisphereLighting = 1. - normal.z * .2; +} + diff --git a/Resources/downloadpak.sh b/Resources/downloadpak.sh index 4fa55d7b..2d19b455 100755 --- a/Resources/downloadpak.sh +++ b/Resources/downloadpak.sh @@ -29,7 +29,7 @@ if [ -f "$PAK_NAME" ]; then fi wget "$PAK_URL" -O "$PAK_NAME" -unzip -u -o "$PAK_NAME" -d "$OUTPUT_DIR" +unzip -o "$PAK_NAME" -d "$OUTPUT_DIR" # relocate paks to the proper location mv "$OUTPUT_DIR/Nonfree/pak000-Nonfree.pak" "$OUTPUT_DIR/" diff --git a/Sources/AngelScript/addons/scriptarray.cpp b/Sources/AngelScript/addons/scriptarray.cpp index 430caa10..3da5fba1 100755 --- a/Sources/AngelScript/addons/scriptarray.cpp +++ b/Sources/AngelScript/addons/scriptarray.cpp @@ -664,7 +664,7 @@ void CScriptArray::RemoveRange(asUINT start, asUINT count) // Compact the elements // As objects in arrays of objects are not stored inline, it is safe to use memmove here // since we're just copying the pointers to objects and not the actual objects. - memcpy(buffer->data + start*elementSize, buffer->data + (start + count)*elementSize, (buffer->numElements - count)*elementSize); + memmove(buffer->data + start*elementSize, buffer->data + (start + count)*elementSize, (buffer->numElements - count)*elementSize); buffer->numElements -= count; } diff --git a/Sources/AngelScript/source/as_config.h b/Sources/AngelScript/source/as_config.h index 27efcbe0..8c0160c7 100755 --- a/Sources/AngelScript/source/as_config.h +++ b/Sources/AngelScript/source/as_config.h @@ -938,7 +938,7 @@ #endif // Free BSD - #elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) + #elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__) #define AS_BSD #if (defined(i386) || defined(__i386) || defined(__i386__)) && !defined(__LP64__) #undef COMPLEX_MASK @@ -947,7 +947,7 @@ #define COMPLEX_RETURN_MASK (asOBJ_APP_CLASS_DESTRUCTOR | asOBJ_APP_CLASS_COPY_CONSTRUCTOR | asOBJ_APP_ARRAY) #define THISCALL_PASS_OBJECT_POINTER_ON_THE_STACK #define AS_X86 - #elif defined(__LP64__) + #elif defined(__LP64__) && !defined(__sparc64__) #define AS_X64_GCC #define HAS_128_BIT_PRIMITIVES #define SPLIT_OBJS_BY_MEMBER_TYPES @@ -1079,15 +1079,23 @@ // Haiku OS #elif __HAIKU__ #define AS_HAIKU - // Only x86-32 is currently supported by Haiku, but they do plan to support - // x86-64 and PowerPC in the future, so should go ahead and check the platform - // for future compatibility #if (defined(i386) || defined(__i386) || defined(__i386__)) && !defined(__LP64__) #define AS_X86 #define THISCALL_PASS_OBJECT_POINTER_ON_THE_STACK #define THISCALL_RETURN_SIMPLE_IN_MEMORY #define CDECL_RETURN_SIMPLE_IN_MEMORY #define STDCALL_RETURN_SIMPLE_IN_MEMORY + #elif defined(__x86_64__) + #define AS_X64_GCC + #define HAS_128_BIT_PRIMITIVES + #undef COMPLEX_MASK + #define COMPLEX_MASK (asOBJ_APP_CLASS_CONSTRUCTOR | asOBJ_APP_CLASS_DESTRUCTOR) + #undef COMPLEX_RETURN_MASK + #define COMPLEX_RETURN_MASK (asOBJ_APP_CLASS_CONSTRUCTOR | asOBJ_APP_CLASS_DESTRUCTOR) + #define AS_LARGE_OBJS_PASSED_BY_REF + #define AS_LARGE_OBJ_MIN_SIZE 5 + #undef STDCALL + #define STDCALL #else #define AS_MAX_PORTABILITY #endif diff --git a/Sources/AngelScript/source/as_memory.cpp b/Sources/AngelScript/source/as_memory.cpp index bd46f371..b8f2cd1b 100755 --- a/Sources/AngelScript/source/as_memory.cpp +++ b/Sources/AngelScript/source/as_memory.cpp @@ -38,7 +38,7 @@ #include -#if !defined(__APPLE__) && !defined(__SNC__) && !defined(__ghs__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) +#if !defined(__APPLE__) && !defined(__SNC__) && !defined(__ghs__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__) #include #endif diff --git a/Sources/CMakeLists.txt b/Sources/CMakeLists.txt index ef0b9b36..e702dda8 100644 --- a/Sources/CMakeLists.txt +++ b/Sources/CMakeLists.txt @@ -47,6 +47,31 @@ set_target_properties(OpenSpades PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BIN set_target_properties(OpenSpades PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set_target_properties(OpenSpades PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +if(APPLE OR WIN32) + # This value is reflected to the macOS application bundle's name, so use + # the correct capitalization. + # We also want the correct capitalization on Windows. + set_target_properties(OpenSpades PROPERTIES OUTPUT_NAME OpenSpades) +else(APPLE) + set_target_properties(OpenSpades PROPERTIES OUTPUT_NAME openspades) +endif(APPLE) + +if (APPLE) + # The built pak files are copied into the macOS application bundle. CMake + # won't copy unless they are included in the target's source files. + # + # Since they are specified as `add_custom_command`'s output files, so they + # have the `GENERATED` property. However, `GENERATED` is a directory-local + # property (until [cmake!5308] lands in CMake 3.20). This means it needs to + # be set again here. + # + # [cmake!5308]: https://gitlab.kitware.com/cmake/cmake/-/merge_requests/5308 + set_source_files_properties(${PAK_FILES} PROPERTIES GENERATED 1) + + # The same goes for `libysrspades.dylib`. + set_source_files_properties(${PROJECT_BINARY_DIR}/libysrspades.dylib PROPERTIES GENERATED 1) +endif(APPLE) + if(WIN32) # Use a single output directory for all configs # (Without this, the generated binary cannot find pak files created by mkpak.ps1 unless @@ -101,6 +126,9 @@ target_link_libraries(OpenSpades ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY} ${OPENGL_ if(NOT APPLE) target_link_libraries(OpenSpades ${GLEW_LIBRARY}) endif() +if(USE_VCPKG) + target_link_libraries(OpenSpades Ogg::ogg Opus::opus) +endif() #todo: MACOSX_BUNDLE_ICON_FILE ? @@ -117,7 +145,11 @@ endif() if(UNIX) if(NOT(CMAKE_SYSTEM_NAME MATCHES "BSD" OR APPLE)) - target_link_libraries(OpenSpades rt) + if (NOT CMAKE_SYSTEM_NAME MATCHES "Haiku") + target_link_libraries(OpenSpades rt) + else() + target_link_libraries(OpenSpades network) + endif() endif() target_link_libraries(OpenSpades pthread) endif() diff --git a/Sources/Client/CTFGameMode.cpp b/Sources/Client/CTFGameMode.cpp index 02b0f176..a195a012 100644 --- a/Sources/Client/CTFGameMode.cpp +++ b/Sources/Client/CTFGameMode.cpp @@ -44,5 +44,12 @@ namespace spades { auto &team = teams[player.GetTeamId()]; return team.hasIntel && team.carrier == player.GetId(); } + + void CTFGameMode::ResetTeamScoreAndIntelHoldingStatus() { + for (Team &team : teams) { + team.score = 0; + team.hasIntel = false; + } + } } // namespace client } // namespace spades diff --git a/Sources/Client/CTFGameMode.h b/Sources/Client/CTFGameMode.h index 26a05221..4db2eb62 100644 --- a/Sources/Client/CTFGameMode.h +++ b/Sources/Client/CTFGameMode.h @@ -53,6 +53,14 @@ namespace spades { void SetCaptureLimit(int v) { captureLimit = v; } bool PlayerHasIntel(World &world, Player &player); + + /** + * Resets both team score and the holding status of both flags. + * + * This is what the vanila client does upon receiving a winning + * `IntelCapture`. + */ + void ResetTeamScoreAndIntelHoldingStatus(); }; } // namespace client } // namespace spades diff --git a/Sources/Client/ClientPlayer.cpp b/Sources/Client/ClientPlayer.cpp index ad1585ca..f2159037 100644 --- a/Sources/Client/ClientPlayer.cpp +++ b/Sources/Client/ClientPlayer.cpp @@ -422,7 +422,7 @@ namespace spades { { float scale = dt; - Vector3 vel = player.GetVelocty(); + Vector3 vel = player.GetVelocity(); Vector3 front = player.GetFront(); Vector3 right = player.GetRight(); Vector3 up = player.GetUp(); @@ -698,8 +698,9 @@ namespace spades { { float sp = 1.f - aimDownState; sp *= .3f; - sp *= std::min(1.f, p.GetVelocty().GetLength() * 5.f); - viewWeaponOffset.x += sinf(p.GetWalkAnimationProgress() * M_PI * 2.f) * 0.013f * sp; + sp *= std::min(1.f, p.GetVelocity().GetLength() * 5.f); + viewWeaponOffset.x += + sinf(p.GetWalkAnimationProgress() * M_PI * 2.f) * 0.013f * sp; float vl = cosf(p.GetWalkAnimationProgress() * M_PI * 2.f); vl *= vl; viewWeaponOffset.z += vl * 0.018f * sp; @@ -897,11 +898,11 @@ namespace spades { Matrix4 leg2 = Matrix4::Translate(0.25f, 0.2f, -0.1f); float ang = sinf(p.GetWalkAnimationProgress() * M_PI * 2.f) * 0.6f; - float walkVel = Vector3::Dot(p.GetVelocty(), p.GetFront2D()) * 4.f; + float walkVel = Vector3::Dot(p.GetVelocity(), p.GetFront2D()) * 4.f; leg1 = leg1 * Matrix4::Rotate(MakeVector3(1, 0, 0), ang * walkVel); leg2 = leg2 * Matrix4::Rotate(MakeVector3(1, 0, 0), -ang * walkVel); - walkVel = Vector3::Dot(p.GetVelocty(), p.GetRight()) * 3.f; + walkVel = Vector3::Dot(p.GetVelocity(), p.GetRight()) * 3.f; leg1 = leg1 * Matrix4::Rotate(MakeVector3(0, 1, 0), ang * walkVel); leg2 = leg2 * Matrix4::Rotate(MakeVector3(0, 1, 0), -ang * walkVel); @@ -931,11 +932,11 @@ namespace spades { Matrix4 leg2 = Matrix4::Translate(0.25f, 0.f, -0.1f); float ang = sinf(p.GetWalkAnimationProgress() * M_PI * 2.f) * 0.6f; - float walkVel = Vector3::Dot(p.GetVelocty(), p.GetFront2D()) * 4.f; + float walkVel = Vector3::Dot(p.GetVelocity(), p.GetFront2D()) * 4.f; leg1 = leg1 * Matrix4::Rotate(MakeVector3(1, 0, 0), ang * walkVel); leg2 = leg2 * Matrix4::Rotate(MakeVector3(1, 0, 0), -ang * walkVel); - walkVel = Vector3::Dot(p.GetVelocty(), p.GetRight()) * 3.f; + walkVel = Vector3::Dot(p.GetVelocity(), p.GetRight()) * 3.f; leg1 = leg1 * Matrix4::Rotate(MakeVector3(0, 1, 0), ang * walkVel); leg2 = leg2 * Matrix4::Rotate(MakeVector3(0, 1, 0), -ang * walkVel); diff --git a/Sources/Client/Client_Input.cpp b/Sources/Client/Client_Input.cpp index 287e38f2..4031cf47 100644 --- a/Sources/Client/Client_Input.cpp +++ b/Sources/Client/Client_Input.cpp @@ -439,7 +439,8 @@ namespace spades { weapInput.secondary = down; } if (world->GetLocalPlayer()->IsToolWeapon() && weapInput.secondary && - !lastVal && world->GetLocalPlayer()->IsReadyToUseTool() && + !lastVal && + world->GetLocalPlayer()->GetWeapon().TimeToNextFire() <= 0 && !world->GetLocalPlayer()->GetWeapon().IsReloading() && GetSprintState() == 0.0f) { AudioParam params; diff --git a/Sources/Client/Client_LocalEnts.cpp b/Sources/Client/Client_LocalEnts.cpp index 026ebf7a..8b27d2e5 100644 --- a/Sources/Client/Client_LocalEnts.cpp +++ b/Sources/Client/Client_LocalEnts.cpp @@ -712,7 +712,7 @@ namespace spades { return Vector3::Dot(result.hitPos - origin, lastSceneDef.viewAxis[2]); } - return std::nan(nullptr); + return NAN; } } // namespace client } // namespace spades diff --git a/Sources/Client/Client_Update.cpp b/Sources/Client/Client_Update.cpp index ad92d88d..ca07115a 100644 --- a/Sources/Client/Client_Update.cpp +++ b/Sources/Client/Client_Update.cpp @@ -388,7 +388,7 @@ namespace spades { PlayerInput inp = playerInput; WeaponInput winp = weapInput; - Vector3 velocity = player.GetVelocty(); + Vector3 velocity = player.GetVelocity(); Vector3 horizontalVelocity{velocity.x, velocity.y, 0.0f}; if (horizontalVelocity.GetLength() < 0.1f) { @@ -448,7 +448,7 @@ namespace spades { hasDelayedReload = false; } - // PlayerInput actualInput = player->GetInput(); + // PlayerInput actualInput = player.GetInput(); WeaponInput actualWeapInput = player.GetWeaponInput(); if (!(actualWeapInput.secondary && player.IsToolWeapon() && player.IsAlive()) && @@ -859,7 +859,7 @@ namespace spades { } else if (kt == KillTypeGrenade) { corp->AddImpulse(MakeVector3(0, 0, -4.f - SampleRandomFloat() * 4.f)); } - corp->AddImpulse(victim.GetVelocty() * 32.f); + corp->AddImpulse(victim.GetVelocity() * 32.f); corpses.emplace_back(std::move(corp)); if (corpses.size() > corpseHardLimit) { diff --git a/Sources/Client/HitTestDebugger.cpp b/Sources/Client/HitTestDebugger.cpp index bed10212..29eb8728 100644 --- a/Sources/Client/HitTestDebugger.cpp +++ b/Sources/Client/HitTestDebugger.cpp @@ -33,8 +33,6 @@ #include #include -SPADES_SETTING(cg_smp); - namespace spades { namespace client { class HitTestDebugger::Port : public draw::SWPort { @@ -141,8 +139,7 @@ namespace spades { def.fovX = def.fovY = range; - // we cannot change GameMap's listener in the client thread with SMP renderer - def.skipWorld = ((int)cg_smp != 0); + def.skipWorld = false; def.zNear = 0.05f; def.zFar = 200.f; diff --git a/Sources/Client/NetClient.cpp b/Sources/Client/NetClient.cpp index ba0cb3cb..fed4d0d6 100644 --- a/Sources/Client/NetClient.cpp +++ b/Sources/Client/NetClient.cpp @@ -87,6 +87,7 @@ namespace spades { PacketTypeWeaponReload = 28, // C2S2P PacketTypeChangeTeam = 29, // C2S2P PacketTypeChangeWeapon = 30, // C2S2P + PacketTypeMapCached = 31, // S2C PacketTypeHandShakeInit = 31, // S2C PacketTypeHandShakeReturn = 32, // C2S PacketTypeVersionGet = 33, // S2C @@ -1285,6 +1286,16 @@ namespace spades { } break; case PacketTypeMapStart: { // next map! + if (protocolVersion == 4) { + // The AoS 0.76 protocol allows the client to load a map from a local cache + // if possible. After receiving MapStart, the client should respond with + // MapCached to indicate whether the map with a given checksum exists in the + // cache or not. We don't implement a local cache, so we always ask the + // server to send fresh map data. + NetPacketWriter wri(PacketTypeMapCached); + wri.Write((uint8_t)0); + enet_peer_send(peer, 0, wri.CreatePacket()); + } client->SetWorld(NULL); auto mapSize = reader.ReadInt(); @@ -1397,8 +1408,10 @@ namespace spades { ctf.GetTeam(p.GetTeamId()).score++; bool winning = reader.ReadByte() != 0; - if (winning) + if (winning) { + ctf.ResetTeamScoreAndIntelHoldingStatus(); client->TeamWon(p.GetTeamId()); + } } break; case PacketTypeIntelPickup: { Player &p = GetPlayer(reader.ReadByte()); diff --git a/Sources/Client/Player.cpp b/Sources/Client/Player.cpp index 68756e67..a9d4b120 100644 --- a/Sources/Client/Player.cpp +++ b/Sources/Client/Player.cpp @@ -552,9 +552,8 @@ namespace spades { SPAssert(map); - if (weapInput.secondary) { - // vanilla behavior (confirmed by measurement) - spread *= 0.5f; + if (!weapInput.secondary) { + spread *= 2; } // pyspades takes destroying more than one block as a @@ -648,7 +647,6 @@ namespace spades { GetHorizontalLength(mapResult.hitPos - muzzle) < hitPlayerDistance)) { IntVector3 outBlockCoord = mapResult.hitBlock; // TODO: set correct ray distance - // FIXME: why ray casting twice? finalHitPos = mapResult.hitPos; @@ -761,17 +759,37 @@ namespace spades { Vector3 rec = weapon->GetRecoil(); float upLimit = Vector3::Dot(GetFront2D(), o); upLimit -= 0.03f; // ??? - o += GetUp() * std::min(rec.y, std::max(0.f, upLimit)) * (input.crouch ? 0.5f : 1.0f); - // vanilla's horizontial recoil seems to driven by a triangular wave generator. - // the period was measured with SMG - float triWave = world.GetTime() * 0.9788f; - triWave -= std::floor(triWave); - if (triWave < 0.5f) { - triWave = triWave * 4.0f - 1.0f; + + // vanilla's horizontial recoil is driven by a triangular wave generator. + int time = (int)(world.GetTime() * 1000); + float triWave; + if (time % 1024 < 512) { + triWave = (time % 512) - 255.5; } else { - triWave = 3.0f - triWave * 4.0f; + triWave = 255.5 - (time % 512); } - o += GetRight() * rec.x * triWave * (input.crouch ? 0.5f : 1.0f); + + float horzModifier = 1; + float vertModifier = 1; + + if ((input.moveLeft || input.moveRight || input.moveForward || input.moveBackward) && !weapInput.secondary) { + horzModifier *= 2; + vertModifier *= 2; + } + + if (airborne) { + horzModifier *= 2; + vertModifier *= 2; + } + else if (input.crouch) { + horzModifier /= 2; + vertModifier /= 2; + } + + horzModifier *= sqrt(1 - pow(o.z, 4)); + + o += GetRight() * rec.x * triWave * horzModifier; + o += GetUp() * std::min(rec.y, std::max(0.f, upLimit)) * vertModifier; o = o.Normalize(); SetOrientation(o); @@ -795,7 +813,7 @@ namespace spades { vel = MakeVector3(0, 0, 0); } - vel += GetVelocty(); + vel += GetVelocity(); if (this == world.GetLocalPlayer()) { auto gren = stmp::make_unique(world, muzzle, vel, fuse); diff --git a/Sources/Client/Player.h b/Sources/Client/Player.h index 23a574e3..80255ba2 100644 --- a/Sources/Client/Player.h +++ b/Sources/Client/Player.h @@ -209,7 +209,7 @@ namespace spades { Vector3 GetUp(); Vector3 GetEye() { return eye; } Vector3 GetOrigin(); // actually not origin at all! - Vector3 GetVelocty() { return velocity; } + Vector3 GetVelocity() { return velocity; } int GetMoveSteps() { return moveSteps; } World &GetWorld() { return world; } diff --git a/Sources/Client/Weapon.cpp b/Sources/Client/Weapon.cpp index 928f3183..6c14582b 100644 --- a/Sources/Client/Weapon.cpp +++ b/Sources/Client/Weapon.cpp @@ -218,9 +218,9 @@ namespace spades { } } Vector3 GetRecoil() override { - return MakeVector3(0.025f, 0.05f, 0.f); // measured + return MakeVector3(0.0001f, 0.05f, 0.f); } - float GetSpread() override { return 0.012f; } // measured (standing, crouched) + float GetSpread() override { return 0.006f; } int GetPelletSize() override { return 1; } }; @@ -228,7 +228,7 @@ namespace spades { public: SMGWeapon3(World &w, Player &p) : Weapon(w, p) {} std::string GetName() override { return "SMG"; } - float GetDelay() override { return 0.11f; } + float GetDelay() override { return 0.1f; } int GetClipSize() override { return 30; } int GetMaxStock() override { return 120; } float GetReloadTime() override { return 2.5f; } @@ -240,14 +240,14 @@ namespace spades { case HitTypeHead: return 75; case HitTypeArms: return 18; case HitTypeLegs: return 18; - case HitTypeBlock: return 35; + case HitTypeBlock: return 34; default: SPAssert(false); return 0; } } Vector3 GetRecoil() override { - return MakeVector3(0.01f, 0.0125f, 0.f); // measured + return MakeVector3(0.00005f, 0.0125f, 0.f); } - float GetSpread() override { return 0.025f; } // measured (standing, crouched) + float GetSpread() override { return 0.012f; } int GetPelletSize() override { return 1; } }; @@ -268,14 +268,14 @@ namespace spades { case HitTypeArms: return 16; case HitTypeLegs: return 16; case HitTypeBlock: - // Actually, you cast a hit per pallet. This value is a guess, by the way. + // Actually, you cast a hit per pallet. // --GM - return 34; + return 22; default: SPAssert(false); return 0; } } Vector3 GetRecoil() override { - return MakeVector3(0.05f, 0.1f, 0.f); // measured + return MakeVector3(0.0002f, 0.1f, 0.f); } float GetSpread() override { return 0.024f; } int GetPelletSize() override { return 8; } @@ -307,8 +307,7 @@ namespace spades { } } Vector3 GetRecoil() override { - // FIXME: needs to measured - return MakeVector3(0.0001f, 0.075f, 0.f); + return MakeVector3(0.0002f, 0.075f, 0.f); } float GetSpread() override { return 0.004f; } int GetPelletSize() override { return 1; } @@ -330,12 +329,11 @@ namespace spades { case HitTypeHead: return 75; case HitTypeArms: return 18; case HitTypeLegs: return 18; - case HitTypeBlock: return 34; + case HitTypeBlock: return 26; default: SPAssert(false); return 0; } } Vector3 GetRecoil() override { - // FIXME: needs to measured return MakeVector3(0.00005f, 0.0125f, 0.f); } float GetSpread() override { return 0.012f; } @@ -363,7 +361,6 @@ namespace spades { } } Vector3 GetRecoil() override { - // FIXME: needs to measured return MakeVector3(0.0002f, 0.075f, 0.f); } float GetSpread() override { return 0.036f; } diff --git a/Sources/Core/CpuID.cpp b/Sources/Core/CpuID.cpp index a4b92ab1..f81c89bf 100644 --- a/Sources/Core/CpuID.cpp +++ b/Sources/Core/CpuID.cpp @@ -16,6 +16,10 @@ namespace spades { std::array regs; #ifdef WIN32 __cpuid(reinterpret_cast(regs.data()), a); +#elif defined(__i386__) && (defined(__pic__) || defined(__PIC__)) + asm volatile("mov %%ebx, %%edi\ncpuid\nxchg %%edi, %%ebx\n" + : "=a"(regs[0]), "=D"(regs[1]), "=c"(regs[2]), "=d"(regs[2]) + : "a"(a), "c"(0)); #else asm volatile("cpuid" : "=a"(regs[0]), "=b"(regs[1]), "=c"(regs[2]), "=d"(regs[3]) diff --git a/Sources/Core/OpusAudioStream.cpp b/Sources/Core/OpusAudioStream.cpp index d656e414..751d1fc3 100644 --- a/Sources/Core/OpusAudioStream.cpp +++ b/Sources/Core/OpusAudioStream.cpp @@ -21,7 +21,7 @@ #include #include -#include +#include #include "OpusAudioStream.h" diff --git a/Sources/Core/ShellApi.cpp b/Sources/Core/ShellApi.cpp index 24d76bdc..17438d11 100644 --- a/Sources/Core/ShellApi.cpp +++ b/Sources/Core/ShellApi.cpp @@ -89,7 +89,7 @@ namespace spades { return false; } } -#elif __unix || __unix__ +#elif (__unix || __unix__) || defined(__HAIKU__) bool ShowDirectoryInShell(const std::string &directoryPath) { // FIXME: escape single quotes if (directoryPath.find("'") != std::string::npos) { diff --git a/Sources/Core/VersionInfo.cpp b/Sources/Core/VersionInfo.cpp index c5a1dcdc..81636dd6 100644 --- a/Sources/Core/VersionInfo.cpp +++ b/Sources/Core/VersionInfo.cpp @@ -46,6 +46,10 @@ std::string VersionInfo::GetVersionInfo() { return std::string("FreeBSD"); #elif defined(__OpenBSD__) return std::string("OpenBSD"); +#elif defined(__NetBSD__) + return std::string("NetBSD"); +#elif defined(__HAIKU__) + return std::string("Haiku"); #else return std::string("Unknown OS"); #endif diff --git a/Sources/Draw/GLAmbientShadowRenderer.cpp b/Sources/Draw/GLAmbientShadowRenderer.cpp index 5bdf815c..3cc7e0ef 100644 --- a/Sources/Draw/GLAmbientShadowRenderer.cpp +++ b/Sources/Draw/GLAmbientShadowRenderer.cpp @@ -69,7 +69,7 @@ namespace spades { for (Chunk &c : chunks) { float *data = (float *)c.data; - std::fill(data, data + ChunkSize * ChunkSize * ChunkSize, 1.f); + std::fill(data, data + ChunkSize * ChunkSize * ChunkSize * 2, 1.f); } for (int x = 0; x < chunkW; x++) { @@ -97,16 +97,16 @@ namespace spades { device.TexParamater(IGLDevice::Texture3D, IGLDevice::TextureWrapT, IGLDevice::Repeat); device.TexParamater(IGLDevice::Texture3D, IGLDevice::TextureWrapR, IGLDevice::ClampToEdge); - device.TexImage3D(IGLDevice::Texture3D, 0, IGLDevice::Red, w, h, d + 1, 0, - IGLDevice::Red, IGLDevice::FloatType, NULL); + device.TexImage3D(IGLDevice::Texture3D, 0, IGLDevice::RG, w, h, d + 1, 0, IGLDevice::RG, + IGLDevice::FloatType, NULL); SPLog("Chunk texture allocated"); std::vector v; - v.resize(w * h); + v.resize(w * h * 2); std::fill(v.begin(), v.end(), 1.f); for (int i = 0; i < d + 1; i++) { - device.TexSubImage3D(IGLDevice::Texture3D, 0, 0, 0, i, w, h, 1, IGLDevice::Red, + device.TexSubImage3D(IGLDevice::Texture3D, 0, 0, 0, i, w, h, 1, IGLDevice::RG, IGLDevice::FloatType, v.data()); } @@ -124,38 +124,22 @@ namespace spades { device.DeleteTexture(texture); } + /** + * Evaluate the AO term at the point specified by given world coordinates. + */ float GLAmbientShadowRenderer::Evaluate(IntVector3 ipos) { SPADES_MARK_FUNCTION_DEBUG(); - float sum = 0; + float sum = 0.0f; Vector3 pos = MakeVector3((float)ipos.x, (float)ipos.y, (float)ipos.z); + pos.x += 0.5f; + pos.y += 0.5f; + pos.z += 0.5f; - float muzzleDiff = 0.02f; + for (int i = 0; i < NumRays; i++) { + Vector3 dir = rays[i]; - // check allowed ray direction - uint8_t directions[8] = {0, 1, 2, 3, 4, 5, 6, 7}; - int numDirections = 0; - for (int x = -1; x <= 0; x++) - for (int y = -1; y <= 0; y++) - for (int z = -1; z <= 0; z++) { - if (!map->IsSolidWrapped(ipos.x + x, ipos.y + y, ipos.z + z)) { - unsigned int bits = 0; - if (x) - bits |= 1; - if (y) - bits |= 2; - if (z) - bits |= 4; - directions[numDirections++] = bits; - } - } - if (numDirections == 0) - numDirections = 8; - - int dirId = 0; - - for (Vector3 dir : rays) { - unsigned int bits = directions[dirId]; + unsigned int bits = i & 7; if (bits & 1) dir.x = -dir.x; if (bits & 2) @@ -163,25 +147,15 @@ namespace spades { if (bits & 4) dir.z = -dir.z; - dirId++; - if (dirId >= numDirections) - dirId = 0; - - Vector3 muzzle = pos + dir * muzzleDiff; + Vector3 muzzle = pos; IntVector3 hitBlock; float brightness = 1.f; - if (map->IsSolidWrapped((int)floorf(muzzle.x), (int)floorf(muzzle.y), - (int)floorf(muzzle.z))) { - if (numDirections < 8) - SPAssert(false); - continue; - } - if (map->CastRay(muzzle, dir, 18.f, hitBlock)) { + if (map->CastRay(muzzle, dir, (float)RayLength, hitBlock)) { Vector3 centerPos = MakeVector3(hitBlock.x + .5f, hitBlock.y + .5f, hitBlock.z + .5f); float dist = (centerPos - muzzle).GetPoweredLength(); - brightness = dist * 0.02f; // 1/7/7 + brightness = dist * (1.0 / float((RayLength - 1) * (RayLength - 1))); if (brightness > 1.f) brightness = 1.f; } @@ -189,8 +163,7 @@ namespace spades { sum += brightness; } - sum *= 1.f / (float)NumRays; - sum *= (float)numDirections / 4.f; + sum = std::min(sum * (2.f / (float)NumRays), 1.0f); return sum; } @@ -201,7 +174,8 @@ namespace spades { return; } - Invalidate(x - 8, y - 8, z - 8, x + 8, y + 8, z + 8); + Invalidate(x - RayLength, y - RayLength, z - RayLength, x + RayLength, y + RayLength, + z + RayLength); } void GLAmbientShadowRenderer::Invalidate(int minX, int minY, int minZ, int maxX, int maxY, @@ -289,7 +263,7 @@ namespace spades { if (!c.transferDone.exchange(true)) { device.TexSubImage3D(IGLDevice::Texture3D, 0, c.cx * ChunkSize, c.cy * ChunkSize, c.cz * ChunkSize + 1, ChunkSize, - ChunkSize, ChunkSize, IGLDevice::Red, IGLDevice::FloatType, + ChunkSize, ChunkSize, IGLDevice::RG, IGLDevice::FloatType, c.data); } } @@ -366,15 +340,166 @@ namespace spades { int originY = cy * ChunkSize; int originZ = cz * ChunkSize; + // Compute the slightly larger volume for blurring + constexpr int padding = 2; + float wData[ChunkSize + padding * 2][ChunkSize + padding * 2][ChunkSize + padding * 2] + [2]; + std::uint8_t wFlags[ChunkSize + padding * 2][ChunkSize + padding * 2] + [ChunkSize + padding * 2]; + int wOriginX = originX - padding; + int wOriginY = originY - padding; + int wOriginZ = originZ - padding; + int wDirtyMinX = c.dirtyMinX; + int wDirtyMinY = c.dirtyMinY; + int wDirtyMinZ = c.dirtyMinZ; + int wDirtyMaxX = c.dirtyMaxX + padding * 2; + int wDirtyMaxY = c.dirtyMaxY + padding * 2; + int wDirtyMaxZ = c.dirtyMaxZ + padding * 2; + + auto b = [](int i) -> std::uint8_t { return (std::uint8_t)1 << i; }; + auto to_b = [](bool b, int i) -> std::uint8_t { return (std::uint8_t)b << i; }; + + for (int z = wDirtyMinZ; z <= wDirtyMaxZ; z++) + for (int y = wDirtyMinY; y <= wDirtyMaxY; y++) + for (int x = wDirtyMinX; x <= wDirtyMaxX; x++) { + IntVector3 pos{ + x + wOriginX, + y + wOriginY, + z + wOriginZ, + }; + + if (map->IsSolidWrapped(pos.x, pos.y, pos.z)) { + wData[z][y][x][0] = 0.0; + wData[z][y][x][1] = 0.0; + } else { + wData[z][y][x][0] = Evaluate(pos); + wData[z][y][x][1] = 1.0; + } + // bit 0: solids + // bit 1: contact (by-surface voxel) + wFlags[z][y][x] = + to_b(map->IsSolidWrapped(pos.x, pos.y, pos.z), 0) | + to_b(map->IsSolidWrapped(pos.x - 1, pos.y - 1, pos.z - 1) | + map->IsSolidWrapped(pos.x - 1, pos.y - 1, pos.z) | + map->IsSolidWrapped(pos.x - 1, pos.y - 1, pos.z + 1) | + map->IsSolidWrapped(pos.x - 1, pos.y, pos.z - 1) | + map->IsSolidWrapped(pos.x - 1, pos.y, pos.z) | + map->IsSolidWrapped(pos.x - 1, pos.y, pos.z + 1) | + map->IsSolidWrapped(pos.x - 1, pos.y + 1, pos.z - 1) | + map->IsSolidWrapped(pos.x - 1, pos.y + 1, pos.z) | + map->IsSolidWrapped(pos.x - 1, pos.y + 1, pos.z + 1) | + map->IsSolidWrapped(pos.x - 1, pos.y - 1, pos.z - 1) | + map->IsSolidWrapped(pos.x, pos.y - 1, pos.z) | + map->IsSolidWrapped(pos.x, pos.y - 1, pos.z + 1) | + map->IsSolidWrapped(pos.x, pos.y, pos.z - 1) | + map->IsSolidWrapped(pos.x, pos.y, pos.z + 1) | + map->IsSolidWrapped(pos.x, pos.y + 1, pos.z - 1) | + map->IsSolidWrapped(pos.x, pos.y + 1, pos.z) | + map->IsSolidWrapped(pos.x, pos.y + 1, pos.z + 1) | + map->IsSolidWrapped(pos.x + 1, pos.y - 1, pos.z - 1) | + map->IsSolidWrapped(pos.x + 1, pos.y - 1, pos.z) | + map->IsSolidWrapped(pos.x + 1, pos.y - 1, pos.z + 1) | + map->IsSolidWrapped(pos.x + 1, pos.y, pos.z - 1) | + map->IsSolidWrapped(pos.x + 1, pos.y, pos.z) | + map->IsSolidWrapped(pos.x + 1, pos.y, pos.z + 1) | + map->IsSolidWrapped(pos.x + 1, pos.y + 1, pos.z - 1) | + map->IsSolidWrapped(pos.x + 1, pos.y + 1, pos.z) | + map->IsSolidWrapped(pos.x + 1, pos.y + 1, pos.z + 1), + 1); + } + + // The AO terms are sampled 0.5 blocks away from the terrain surface, + // which leads to under-shadowing. Compensate for this effect. + for (int z = wDirtyMinZ; z <= wDirtyMaxZ; z++) + for (int y = wDirtyMinY; y <= wDirtyMaxY; y++) + for (int x = wDirtyMinX; x <= wDirtyMaxX; x++) { + float &d = wData[z][y][x][0]; + d *= d * d + 1.0f - d; + } + + // Blur the result to remove noise + // + // | this | neighbor | + // | solid | contact | solid | contact | blur + // | 0 0 | 0 x | 1 + // | 0 1 | 0 0 | 0 (prevent under-shadowing) + // | 0 1 | 0 1 | 1 + // | 0 x | 1 x | 0 (solid voxel's value is zero) + // | 1 x | 0 x | 0 (solid voxel's value must remain zero) + // | 1 x | 1 x | x + // + // + // this voxel + // + // solid + // /-------\ . + // +---+---+---+---+ + // | 1 | 0 | 0 | 0 | + // +---+---+---+---+\ . + // | 1 | 1 | 0 | 0 | | + // /+---+---+---+---+ | contact neighbor + // | | 0 | 0 | | | | + // solid | +---+---+---+---+/ + // | | 0 | 0 | | | + // \+---+---+---+---+ + // \-------/ + // contact + // + static const float divider[] = {1.0f, 1.0f / 2.0f, 1.0f / 3.0f}; + auto mask = [](bool b, float x) { return b ? x : 0.0f; }; + auto shouldBlur = [=](std::uint8_t thisFlags, std::uint8_t neighborFlags) { + return ((neighborFlags & b(0)) | ((~thisFlags | neighborFlags) & b(1))) == 0b10; + }; + for (int blurPass = 0; blurPass < 2; ++blurPass) { + for (int z = wDirtyMinZ; z <= wDirtyMaxZ; z++) + for (int y = wDirtyMinY; y <= wDirtyMaxY; y++) + for (int x = wDirtyMinX + 1; x < wDirtyMaxX; x++) { + if (wFlags[z][y][x] & b(0)) { + continue; + } + // Do not blur between by-surface voxels and + // in-the-air voxels + bool m1 = shouldBlur(wFlags[z][y][x], wFlags[z][y][x - 1]); + bool m2 = shouldBlur(wFlags[z][y][x], wFlags[z][y][x + 1]); + wData[z][y][x][0] = + (wData[z][y][x][0] + mask(m1, wData[z][y][x - 1][0]) + + mask(m2, wData[z][y][x + 1][0])) * + divider[(int)m1 + (int)m2]; + } + for (int z = wDirtyMinZ; z <= wDirtyMaxZ; z++) + for (int y = wDirtyMinY + 1; y < wDirtyMaxY; y++) + for (int x = wDirtyMinX; x <= wDirtyMaxX; x++) { + if (wFlags[z][y][x] & b(0)) { + continue; + } + bool m1 = shouldBlur(wFlags[z][y][x], wFlags[z][y - 1][x]); + bool m2 = shouldBlur(wFlags[z][y][x], wFlags[z][y + 1][x]); + wData[z][y][x][0] = + (wData[z][y][x][0] + mask(m1, wData[z][y - 1][x][0]) + + mask(m2, wData[z][y + 1][x][0])) * + divider[(int)m1 + (int)m2]; + } + for (int z = wDirtyMinZ + 1; z < wDirtyMaxZ; z++) + for (int y = wDirtyMinY; y <= wDirtyMaxY; y++) + for (int x = wDirtyMinX; x <= wDirtyMaxX; x++) { + if (wFlags[z][y][x] & b(0)) { + continue; + } + bool m1 = shouldBlur(wFlags[z][y][x], wFlags[z - 1][y][x]); + bool m2 = shouldBlur(wFlags[z][y][x], wFlags[z + 1][y][x]); + wData[z][y][x][0] = + (wData[z][y][x][0] + mask(m1, wData[z - 1][y][x][0]) + + mask(m2, wData[z + 1][y][x][0])) * + divider[(int)m1 + (int)m2]; + } + } + + // Copy the result to `c.data` for (int z = c.dirtyMinZ; z <= c.dirtyMaxZ; z++) for (int y = c.dirtyMinY; y <= c.dirtyMaxY; y++) for (int x = c.dirtyMinX; x <= c.dirtyMaxX; x++) { - IntVector3 pos; - pos.x = (x + originX); - pos.y = (y + originY); - pos.z = (z + originZ); - - c.data[z][y][x] = Evaluate(pos); + c.data[z][y][x][0] = wData[z + padding][y + padding][x + padding][0]; + c.data[z][y][x][1] = wData[z + padding][y + padding][x + padding][1]; } c.dirty = false; diff --git a/Sources/Draw/GLAmbientShadowRenderer.h b/Sources/Draw/GLAmbientShadowRenderer.h index e5db8338..9261eb25 100644 --- a/Sources/Draw/GLAmbientShadowRenderer.h +++ b/Sources/Draw/GLAmbientShadowRenderer.h @@ -42,6 +42,7 @@ namespace spades { static constexpr int NumRays = 16; static constexpr int ChunkSizeBits = 4; static constexpr int ChunkSize = 1 << ChunkSizeBits; + static constexpr int RayLength = 16; GLRenderer &renderer; IGLDevice &device; @@ -50,7 +51,7 @@ namespace spades { struct Chunk { int cx, cy, cz; - float data[ChunkSize][ChunkSize][ChunkSize]; + float data[ChunkSize][ChunkSize][ChunkSize][2]; bool dirty = true; int dirtyMinX = 0, dirtyMaxX = ChunkSize - 1; int dirtyMinY = 0, dirtyMaxY = ChunkSize - 1; diff --git a/Sources/Draw/GLBasicShadowMapRenderer.cpp b/Sources/Draw/GLBasicShadowMapRenderer.cpp index cfb28e83..9add8294 100644 --- a/Sources/Draw/GLBasicShadowMapRenderer.cpp +++ b/Sources/Draw/GLBasicShadowMapRenderer.cpp @@ -222,10 +222,6 @@ namespace spades { void GLBasicShadowMapRenderer::Render() { SPADES_MARK_FUNCTION(); - IGLDevice::Integer lastFb = device.GetInteger(IGLDevice::FramebufferBinding); - - // client::SceneDefinition def = GetRenderer().GetSceneDef(); - float nearDist = 0.f; for (int i = 0; i < NumSlices; i++) { @@ -244,18 +240,6 @@ namespace spades { BuildMatrix(nearDist, farDist); matrices[i] = matrix; - /* - printf("m[%d]=\n[%f,%f,%f,%f]\n[%f,%f,%f,%f]\n[%f,%f,%f,%f]\n[%f,%f,%f,%f]\n", - i, matrix.m[0], matrix.m[4], matrix.m[8], matrix.m[12], - matrix.m[1], matrix.m[5], matrix.m[9], matrix.m[13], - matrix.m[2], matrix.m[6], matrix.m[10], matrix.m[14], - matrix.m[3], matrix.m[7], matrix.m[11], matrix.m[15]);*/ - /* - matrix = Matrix4::Identity(); - matrix = Matrix4::Scale(1.f / 16.f); - matrix = matrix * Matrix4::Rotate(MakeVector3(1, 0, 0), M_PI / 4.f); - matrix = matrix * Matrix4::Translate(-def.viewOrigin); - matrix = Matrix4::Scale(1,1,16.f / 70.f) * matrix;*/ device.BindFramebuffer(IGLDevice::Framebuffer, framebuffer[i]); device.Viewport(0, 0, textureSize, textureSize); @@ -266,10 +250,6 @@ namespace spades { nearDist = farDist; } - - device.BindFramebuffer(IGLDevice::Framebuffer, lastFb); - - device.Viewport(0, 0, device.ScreenWidth(), device.ScreenHeight()); } bool GLBasicShadowMapRenderer::Cull(const spades::AABB3 &) { diff --git a/Sources/Draw/GLCameraBlurFilter.cpp b/Sources/Draw/GLCameraBlurFilter.cpp index d1932527..dbf3bf91 100644 --- a/Sources/Draw/GLCameraBlurFilter.cpp +++ b/Sources/Draw/GLCameraBlurFilter.cpp @@ -56,7 +56,8 @@ namespace spades { return acosf(v); } - GLColorBuffer GLCameraBlurFilter::Filter(GLColorBuffer input, float radialBlur) { + GLColorBuffer GLCameraBlurFilter::Filter(GLColorBuffer input, float intensity, + float radialBlur) { SPADES_MARK_FUNCTION(); if (radialBlur > 0.f) @@ -114,14 +115,14 @@ namespace spades { } float movePixels = MyACos(diffMatrix.m[0]); - float shutterTimeScale = .3f; + float shutterTimeScale = intensity; movePixels = std::max(movePixels, MyACos(diffMatrix.m[5])); movePixels = std::max(movePixels, MyACos(diffMatrix.m[10])); movePixels = tanf(movePixels) / tanf(def.fovX * .5f); - movePixels *= (float)dev.ScreenWidth() * .5f; + movePixels *= (float)renderer.GetRenderWidth() * .5f; movePixels *= shutterTimeScale; - movePixels = std::max(movePixels, (1.f - radialBlur) * dev.ScreenWidth() * 0.5f); + movePixels = std::max(movePixels, (1.f - radialBlur) * renderer.GetRenderWidth() * 0.5f); if (movePixels < 1.f) { // too less change, skip camera blur diff --git a/Sources/Draw/GLCameraBlurFilter.h b/Sources/Draw/GLCameraBlurFilter.h index 79f7d453..4d4d3144 100644 --- a/Sources/Draw/GLCameraBlurFilter.h +++ b/Sources/Draw/GLCameraBlurFilter.h @@ -34,7 +34,7 @@ namespace spades { public: GLCameraBlurFilter(GLRenderer &); - GLColorBuffer Filter(GLColorBuffer, float radialBlur = 0.f); + GLColorBuffer Filter(GLColorBuffer, float intensity, float radialBlur = 0.f); }; } // namespace draw } // namespace spades diff --git a/Sources/Draw/GLColorCorrectionFilter.cpp b/Sources/Draw/GLColorCorrectionFilter.cpp index cd04ab61..bcd10e0d 100644 --- a/Sources/Draw/GLColorCorrectionFilter.cpp +++ b/Sources/Draw/GLColorCorrectionFilter.cpp @@ -19,6 +19,7 @@ */ #include +#include #include "GLColorCorrectionFilter.h" #include "GLProgram.h" @@ -36,28 +37,75 @@ namespace spades { GLColorCorrectionFilter::GLColorCorrectionFilter(GLRenderer &renderer) : renderer(renderer), settings(renderer.GetSettings()) { lens = renderer.RegisterProgram("Shaders/PostFilters/ColorCorrection.program"); + gaussProgram = renderer.RegisterProgram("Shaders/PostFilters/Gauss1D.program"); } - GLColorBuffer GLColorCorrectionFilter::Filter(GLColorBuffer input, Vector3 tintVal) { + GLColorBuffer GLColorCorrectionFilter::Filter(GLColorBuffer input, Vector3 tintVal, + float fogLuminance) { SPADES_MARK_FUNCTION(); IGLDevice &dev = renderer.GetGLDevice(); GLQuadRenderer qr(dev); + GLColorBuffer output = input.GetManager()->CreateBufferHandle(); + + float sharpeningFinalGainValue = + std::max(std::min(settings.r_sharpen.operator float(), 1.0f), 0.0f); + GLColorBuffer blurredInput = input; + + if (sharpeningFinalGainValue > 0.0f) { + // Apply a 1D gaussian blur on the horizontal direction. + // (The vertical direction blur is done by the final program) + static GLProgramAttribute blur_positionAttribute("positionAttribute"); + static GLProgramUniform blur_textureUniform("mainTexture"); + static GLProgramUniform blur_unitShift("unitShift"); + gaussProgram->Use(); + blur_positionAttribute(gaussProgram); + blur_textureUniform(gaussProgram); + blur_unitShift(gaussProgram); + blur_textureUniform.SetValue(0); + + dev.ActiveTexture(0); + qr.SetCoordAttributeIndex(blur_positionAttribute()); + dev.Enable(IGLDevice::Blend, false); + + blurredInput = renderer.GetFramebufferManager()->CreateBufferHandle(); + dev.BindTexture(IGLDevice::Texture2D, input.GetTexture()); + dev.BindFramebuffer(IGLDevice::Framebuffer, blurredInput.GetFramebuffer()); + blur_unitShift.SetValue(1.0f / (float)input.GetWidth(), 0.f); + qr.Draw(); + } + + float sharpeningFloor = 0.0f; + + // If temporal AA is enabled, enable the sharpening effect regardless of + // the current fog color to offset the blurring caused by the temporal AA. + if (settings.r_temporalAA) { + sharpeningFloor = 1.5f; + } + static GLProgramAttribute lensPosition("positionAttribute"); static GLProgramUniform lensTexture("mainTexture"); + static GLProgramUniform blurredTexture("blurredTexture"); static GLProgramUniform saturation("saturation"); static GLProgramUniform enhancement("enhancement"); static GLProgramUniform tint("tint"); + static GLProgramUniform sharpening("sharpening"); + static GLProgramUniform sharpeningFinalGain("sharpeningFinalGain"); + static GLProgramUniform blurPixelShift("blurPixelShift"); saturation(lens); enhancement(lens); tint(lens); + sharpening(lens); + sharpeningFinalGain(lens); + blurPixelShift(lens); dev.Enable(IGLDevice::Blend, false); lensPosition(lens); lensTexture(lens); + blurredTexture(lens); lens->Use(); @@ -87,11 +135,75 @@ namespace spades { } lensTexture.SetValue(0); + blurredTexture.SetValue(1); + + // Calculate the sharpening factor + // + // One reason to do this is for aesthetic reasons. Another reason is to offset + // OpenSpades' denser fog compared to the vanilla client. Technically, the fog density + // function is mostly identical between these two clients. However, OpenSpades applies + // the fog color in the linear color space, which is physically accurate but has an + // unexpected consequence of somewhat strengthening the effect. + // + // (`r_volumetricFog` completely changes the density function, which we leave out from + // this discussion.) + // + // Given an object color o (only one color channel is discussed here), fog color f, and + // fog density d, the output color c_voxlap and c_os for the vanilla client and + // OpenSpades, respectively, is calculated by: + // + // c_voxlap = o^(1/2)(1-d) + f^(1/2)d + // c_os = (o(1-d) + fd)^(1/2) + // + // Here the sRGB transfer function is approximated by an exact gamma = 2 power law. + // o and f are in the linear color space, whereas c_voxlap and c_os are in the sRGB + // color space (because that's how `ColorCorrection.fs` is implemented). + // + // The contrast reduction by the fog can be calculated by differentiating each of them + // by o: + // + // c_voxlap' = (1-d) / sqrt(o) / 2 + // c_os' = (1-d) / sqrt(o(1-d) + fd) / 2 + // + // Now we find out the amount of color contrast we must recover by dividing c_voxlap' by + // c_os'. Since it's objects around the fog end distance that concern the users, let + // d = 1: + // + // c_voxlap' / c_os' = sqrt(o(1-d) + fd) / sqrt(o) + // = sqrt(f) / sqrt(o) + // + // (Turns out, the result so far does not change whichever color space c_voxlap and c_os + // are represented in.) + // + // This is a function over an object color o and fog color f. Let us calculate the + // average of this function assuming a uniform distribution of o over the interval + // [o_min, o_max]: + // + // ∫[c_voxlap' / c_os', {o, o_min, o_max}] + // = 2sqrt(f)(sqrt(o_max) - sqrt(o_min)) / (o_max - o_min) + // + // Since the pixels aren't usually fully lit nor completely dark, let us arbitrarily + // assume o_min = 0.001 and o_max = 0.5 (I think this is reasonable for a deuce hiding + // in a shady corridor) (and let it be `r_offset`): + // + // r_offset + // = 2sqrt(f)(sqrt(o_max) - sqrt(o_min)) / (o_max - o_min) + // ≈ 2.70 sqrt(f) + // + // So if this value is higher than 1, we need enhance the rendered image. Otherwise, + // we will maintain the status quo for now. (In most servers I have encountered, the fog + // color was a bright color, so this status quo won't be a problem, I think. No one has + // complained about it so far.) + sharpening.SetValue(std::max(std::sqrt(fogLuminance) * 2.7f, sharpeningFloor)); + sharpeningFinalGain.SetValue(sharpeningFinalGainValue); + blurPixelShift.SetValue(1.0f / (float)input.GetHeight()); // composite to the final image - GLColorBuffer output = input.GetManager()->CreateBufferHandle(); qr.SetCoordAttributeIndex(lensPosition()); + dev.ActiveTexture(1); + dev.BindTexture(IGLDevice::Texture2D, blurredInput.GetTexture()); + dev.ActiveTexture(0); dev.BindTexture(IGLDevice::Texture2D, input.GetTexture()); dev.BindFramebuffer(IGLDevice::Framebuffer, output.GetFramebuffer()); dev.Viewport(0, 0, output.GetWidth(), output.GetHeight()); diff --git a/Sources/Draw/GLColorCorrectionFilter.h b/Sources/Draw/GLColorCorrectionFilter.h index 28d26659..10b4c69d 100644 --- a/Sources/Draw/GLColorCorrectionFilter.h +++ b/Sources/Draw/GLColorCorrectionFilter.h @@ -30,11 +30,15 @@ namespace spades { class GLColorCorrectionFilter { GLRenderer &renderer; GLSettings &settings; + GLProgram *gaussProgram; GLProgram *lens; public: GLColorCorrectionFilter(GLRenderer &); - GLColorBuffer Filter(GLColorBuffer, Vector3 tint); + /** + * @param fogLuminance The luminance of the fog color. Must be in the sRGB color space. + */ + GLColorBuffer Filter(GLColorBuffer, Vector3 tint, float fogLuminance); }; } // namespace draw } // namespace spades diff --git a/Sources/Draw/GLDepthOfFieldFilter.cpp b/Sources/Draw/GLDepthOfFieldFilter.cpp index f971b1b5..54161cb7 100644 --- a/Sources/Draw/GLDepthOfFieldFilter.cpp +++ b/Sources/Draw/GLDepthOfFieldFilter.cpp @@ -168,7 +168,6 @@ namespace spades { GLColorBuffer cocBlur = BlurCoC(coc, 1.f); // mix - GLColorBuffer coc2 = renderer.GetFramebufferManager()->CreateBufferHandle(w2, h2, 1); { @@ -262,6 +261,8 @@ namespace spades { int w = buffer1.GetWidth(); int h = buffer1.GetHeight(); + GLColorBuffer buf2 = renderer.GetFramebufferManager()->CreateBufferHandle(w, h, false); + static GLProgramAttribute blur_positionAttribute("positionAttribute"); static GLProgramUniform blur_textureUniform1("texture1"); static GLProgramUniform blur_textureUniform2("texture2"); @@ -291,7 +292,6 @@ namespace spades { dev.Enable(IGLDevice::Blend, false); // x-direction - GLColorBuffer buf2 = renderer.GetFramebufferManager()->CreateBufferHandle(w, h, false); dev.BindFramebuffer(IGLDevice::Framebuffer, buf2.GetFramebuffer()); qr.Draw(); return buf2; @@ -307,6 +307,8 @@ namespace spades { int w = tex.GetWidth(); int h = tex.GetHeight(); + GLColorBuffer buf2 = renderer.GetFramebufferManager()->CreateBufferHandle(w, h, false); + static GLProgramAttribute blur_positionAttribute("positionAttribute"); static GLProgramUniform blur_textureUniform1("mainTexture"); static GLProgramUniform blur_textureUniform2("blurTexture1"); @@ -343,7 +345,6 @@ namespace spades { dev.Enable(IGLDevice::Blend, false); // x-direction - GLColorBuffer buf2 = renderer.GetFramebufferManager()->CreateBufferHandle(w, h, false); dev.BindFramebuffer(IGLDevice::Framebuffer, buf2.GetFramebuffer()); qr.Draw(); return buf2; @@ -358,6 +359,9 @@ namespace spades { int w = tex.GetWidth(); int h = tex.GetHeight(); + GLColorBuffer buf2 = + renderer.GetFramebufferManager()->CreateBufferHandle(w / 2, h / 2, false); + static GLProgramAttribute blur_positionAttribute("positionAttribute"); static GLProgramUniform blur_textureUniform("mainTexture"); static GLProgramUniform blur_colorUniform("colorUniform"); @@ -379,8 +383,6 @@ namespace spades { qr.SetCoordAttributeIndex(blur_positionAttribute()); dev.Enable(IGLDevice::Blend, false); - GLColorBuffer buf2 = - renderer.GetFramebufferManager()->CreateBufferHandle(w / 2, h / 2, false); dev.Viewport(0, 0, w / 2, h / 2); dev.BindFramebuffer(IGLDevice::Framebuffer, buf2.GetFramebuffer()); qr.Draw(); @@ -395,8 +397,8 @@ namespace spades { IGLDevice &dev = renderer.GetGLDevice(); GLQuadRenderer qr(dev); - int w = dev.ScreenWidth(); - int h = dev.ScreenHeight(); + int w = input.GetWidth(); + int h = input.GetHeight(); dev.Enable(IGLDevice::Blend, false); diff --git a/Sources/Draw/GLFXAAFilter.cpp b/Sources/Draw/GLFXAAFilter.cpp index 2de9b477..cd2fe562 100644 --- a/Sources/Draw/GLFXAAFilter.cpp +++ b/Sources/Draw/GLFXAAFilter.cpp @@ -41,6 +41,8 @@ namespace spades { IGLDevice &dev = renderer.GetGLDevice(); GLQuadRenderer qr(dev); + GLColorBuffer output = input.GetManager()->CreateBufferHandle(); + static GLProgramAttribute lensPosition("positionAttribute"); static GLProgramUniform lensTexture("mainTexture"); static GLProgramUniform inverseVP("inverseVP"); @@ -53,11 +55,10 @@ namespace spades { lens->Use(); - inverseVP.SetValue(1.f / dev.ScreenWidth(), 1.f / dev.ScreenHeight()); + inverseVP.SetValue(1.f / input.GetWidth(), 1.f / input.GetHeight()); lensTexture.SetValue(0); // composite to the final image - GLColorBuffer output = input.GetManager()->CreateBufferHandle(); qr.SetCoordAttributeIndex(lensPosition()); dev.BindTexture(IGLDevice::Texture2D, input.GetTexture()); diff --git a/Sources/Draw/GLFramebufferManager.cpp b/Sources/Draw/GLFramebufferManager.cpp index 0c9c20b0..a1f7c261 100644 --- a/Sources/Draw/GLFramebufferManager.cpp +++ b/Sources/Draw/GLFramebufferManager.cpp @@ -56,8 +56,13 @@ namespace spades { SPRaise("OpenGL Framebuffer completeness check failed: %s", type.c_str()); } - GLFramebufferManager::GLFramebufferManager(IGLDevice &dev, GLSettings &settings) - : device(dev), settings(settings), doingPostProcessing(false) { + GLFramebufferManager::GLFramebufferManager(IGLDevice &dev, GLSettings &settings, + int renderWidth, int renderHeight) + : device(dev), + settings(settings), + doingPostProcessing(false), + renderWidth(renderWidth), + renderHeight(renderHeight) { SPADES_MARK_FUNCTION(); SPLog("Initializing framebuffer manager"); @@ -84,8 +89,7 @@ namespace spades { multisampledDepthRenderbuffer = dev.GenRenderbuffer(); dev.BindRenderbuffer(IGLDevice::Renderbuffer, multisampledDepthRenderbuffer); dev.RenderbufferStorage(IGLDevice::Renderbuffer, (int)settings.r_multisamples, - IGLDevice::DepthComponent24, dev.ScreenWidth(), - dev.ScreenHeight()); + IGLDevice::DepthComponent24, renderWidth, renderHeight); SPLog("MSAA Depth Buffer Allocated"); dev.FramebufferRenderbuffer(IGLDevice::Framebuffer, IGLDevice::DepthAttachment, @@ -97,8 +101,7 @@ namespace spades { SPLog("Creating MSAA Color Buffer with SRGB8_ALPHA"); useHighPrec = false; dev.RenderbufferStorage(IGLDevice::Renderbuffer, (int)settings.r_multisamples, - IGLDevice::SRGB8Alpha, dev.ScreenWidth(), - dev.ScreenHeight()); + IGLDevice::SRGB8Alpha, renderWidth, renderHeight); SPLog("MSAA Color Buffer Allocated"); @@ -120,7 +123,7 @@ namespace spades { dev.RenderbufferStorage(IGLDevice::Renderbuffer, (int)settings.r_multisamples, useHdr ? IGLDevice::RGBA16F : IGLDevice::RGB10A2, - dev.ScreenWidth(), dev.ScreenHeight()); + renderWidth, renderHeight); SPLog("MSAA Color Buffer Allocated"); dev.FramebufferRenderbuffer( @@ -140,7 +143,7 @@ namespace spades { settings.r_hdr = 0; dev.RenderbufferStorage(IGLDevice::Renderbuffer, (int)settings.r_multisamples, IGLDevice::RGBA8, - dev.ScreenWidth(), dev.ScreenHeight()); + renderWidth, renderHeight); SPLog("MSAA Color Buffer Allocated"); @@ -171,8 +174,8 @@ namespace spades { renderDepthTexture = dev.GenTexture(); dev.BindTexture(IGLDevice::Texture2D, renderDepthTexture); - dev.TexImage2D(IGLDevice::Texture2D, 0, IGLDevice::DepthComponent24, dev.ScreenWidth(), - dev.ScreenHeight(), 0, IGLDevice::DepthComponent, IGLDevice::UnsignedInt, + dev.TexImage2D(IGLDevice::Texture2D, 0, IGLDevice::DepthComponent24, renderWidth, + renderHeight, 0, IGLDevice::DepthComponent, IGLDevice::UnsignedInt, NULL); SPLog("Depth Buffer Allocated"); dev.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMagFilter, IGLDevice::Nearest); @@ -188,9 +191,8 @@ namespace spades { if (settings.r_srgb) { SPLog("Creating Non-MSAA SRGB buffer"); useHighPrec = false; - dev.TexImage2D(IGLDevice::Texture2D, 0, IGLDevice::SRGB8Alpha, dev.ScreenWidth(), - dev.ScreenHeight(), 0, IGLDevice::RGBA, IGLDevice::UnsignedByte, - NULL); + dev.TexImage2D(IGLDevice::Texture2D, 0, IGLDevice::SRGB8Alpha, renderWidth, + renderHeight, 0, IGLDevice::RGBA, IGLDevice::UnsignedByte, NULL); SPLog("Color Buffer Allocated"); dev.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMagFilter, IGLDevice::Linear); @@ -216,10 +218,9 @@ namespace spades { SPLog("RGB10A2/HDR disabled"); SPRaise("jump to catch(...)"); } - dev.TexImage2D(IGLDevice::Texture2D, 0, - useHdr ? IGLDevice::RGBA16F : IGLDevice::RGB10A2, - dev.ScreenWidth(), dev.ScreenHeight(), 0, IGLDevice::RGBA, - IGLDevice::UnsignedByte, NULL); + dev.TexImage2D( + IGLDevice::Texture2D, 0, useHdr ? IGLDevice::RGBA16F : IGLDevice::RGB10A2, + renderWidth, renderHeight, 0, IGLDevice::RGBA, IGLDevice::UnsignedByte, NULL); SPLog("Color Buffer Allocated"); dev.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMagFilter, IGLDevice::Linear); @@ -244,8 +245,8 @@ namespace spades { useHighPrec = false; useHdr = false; settings.r_hdr = 0; - dev.TexImage2D(IGLDevice::Texture2D, 0, IGLDevice::RGBA8, dev.ScreenWidth(), - dev.ScreenHeight(), 0, IGLDevice::RGBA, IGLDevice::UnsignedByte, + dev.TexImage2D(IGLDevice::Texture2D, 0, IGLDevice::RGBA8, renderWidth, + renderHeight, 0, IGLDevice::RGBA, IGLDevice::UnsignedByte, NULL); SPLog("Color Buffer Allocated"); dev.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMagFilter, @@ -277,9 +278,8 @@ namespace spades { mirrorColorTexture = dev.GenTexture(); dev.BindTexture(IGLDevice::Texture2D, mirrorColorTexture); SPLog("Creating Mirror texture"); - dev.TexImage2D(IGLDevice::Texture2D, 0, fbInternalFormat, dev.ScreenWidth(), - dev.ScreenHeight(), 0, IGLDevice::RGBA, IGLDevice::UnsignedByte, - NULL); + dev.TexImage2D(IGLDevice::Texture2D, 0, fbInternalFormat, renderWidth, + renderHeight, 0, IGLDevice::RGBA, IGLDevice::UnsignedByte, NULL); SPLog("Color Buffer Allocated"); dev.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMagFilter, @@ -297,9 +297,9 @@ namespace spades { SPLog("Creating Mirror depth texture"); mirrorDepthTexture = dev.GenTexture(); dev.BindTexture(IGLDevice::Texture2D, mirrorDepthTexture); - dev.TexImage2D(IGLDevice::Texture2D, 0, IGLDevice::DepthComponent24, - dev.ScreenWidth(), dev.ScreenHeight(), 0, IGLDevice::DepthComponent, - IGLDevice::UnsignedInt, NULL); + dev.TexImage2D(IGLDevice::Texture2D, 0, IGLDevice::DepthComponent24, renderWidth, + renderHeight, 0, IGLDevice::DepthComponent, IGLDevice::UnsignedInt, + NULL); SPLog("Depth Buffer Allocated"); dev.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMagFilter, @@ -331,8 +331,8 @@ namespace spades { buf.framebuffer = renderFramebufferWithoutDepth; buf.texture = renderColorTexture; buf.refCount = 0; - buf.w = device.ScreenWidth(); - buf.h = device.ScreenHeight(); + buf.w = renderWidth; + buf.h = renderHeight; buf.internalFormat = fbInternalFormat; buffers.push_back(buf); @@ -341,8 +341,38 @@ namespace spades { } GLFramebufferManager::~GLFramebufferManager() { - // maybe framebuffers are released automatically when - // application quits... + if (multisampledFramebuffer) { + device.DeleteFramebuffer(multisampledFramebuffer); + } + if (multisampledColorRenderbuffer) { + device.DeleteRenderbuffer(multisampledColorRenderbuffer); + } + if (multisampledDepthRenderbuffer) { + device.DeleteRenderbuffer(multisampledDepthRenderbuffer); + } + if (renderFramebuffer) { + device.DeleteFramebuffer(renderFramebuffer); + } + if (renderColorTexture) { + device.DeleteTexture(renderColorTexture); + } + if (renderDepthTexture) { + device.DeleteTexture(renderDepthTexture); + } + if (mirrorFramebuffer) { + device.DeleteFramebuffer(mirrorFramebuffer); + } + if (mirrorColorTexture) { + device.DeleteTexture(mirrorColorTexture); + } + if (mirrorDepthTexture) { + device.DeleteTexture(mirrorDepthTexture); + } + for (const Buffer &buffer : buffers) { + device.DeleteFramebuffer(buffer.framebuffer); + device.DeleteTexture(buffer.texture); + } + buffers.clear(); } void GLFramebufferManager::PrepareSceneRendering() { @@ -364,7 +394,7 @@ namespace spades { device.Enable(IGLDevice::DepthTest, true); device.DepthMask(true); - device.Viewport(0, 0, device.ScreenWidth(), device.ScreenHeight()); + device.Viewport(0, 0, renderWidth, renderHeight); } GLColorBuffer @@ -387,8 +417,8 @@ namespace spades { IGLDevice::Texture2D, handle.GetTexture(), 0); // downsample - int w = device.ScreenWidth(); - int h = device.ScreenHeight(); + int w = renderWidth; + int h = renderHeight; if (settings.r_blitFramebuffer) { if (useMultisample) { @@ -429,7 +459,7 @@ namespace spades { void GLFramebufferManager::ClearMirrorTexture(spades::Vector3 bgCol) { device.BindFramebuffer(IGLDevice::Framebuffer, mirrorFramebuffer); - device.Viewport(0, 0, device.ScreenWidth(), device.ScreenHeight()); + device.Viewport(0, 0, renderWidth, renderHeight); device.ClearColor(bgCol.x, bgCol.y, bgCol.z, 1.f); device.Clear((IGLDevice::Enum)(IGLDevice::ColorBufferBit | IGLDevice::DepthBufferBit)); @@ -445,8 +475,8 @@ namespace spades { void GLFramebufferManager::CopyToMirrorTexture(IGLDevice::UInteger fb) { SPADES_MARK_FUNCTION(); - int w = device.ScreenWidth(); - int h = device.ScreenHeight(); + int w = renderWidth; + int h = renderHeight; if (fb == 0) { fb = useMultisample ? multisampledFramebuffer : renderFramebuffer; } @@ -458,10 +488,13 @@ namespace spades { if (settings.r_blitFramebuffer) { device.BindFramebuffer(IGLDevice::ReadFramebuffer, fb); device.BindFramebuffer(IGLDevice::DrawFramebuffer, mirrorFramebuffer); - device.BlitFramebuffer(0, 0, w, h, 0, 0, w, h, - IGLDevice::ColorBufferBit | - (needsDepth ? IGLDevice::DepthBufferBit : 0), + device.BlitFramebuffer(0, 0, w, h, 0, 0, w, h, IGLDevice::ColorBufferBit, IGLDevice::Nearest); + if (needsDepth) { + device.BindFramebuffer(IGLDevice::ReadFramebuffer, renderFramebuffer); + device.BlitFramebuffer(0, 0, w, h, 0, 0, w, h, IGLDevice::DepthBufferBit, + IGLDevice::Nearest); + } device.BindFramebuffer(IGLDevice::ReadFramebuffer, 0); device.BindFramebuffer(IGLDevice::DrawFramebuffer, 0); } else { @@ -478,10 +511,13 @@ namespace spades { if (settings.r_blitFramebuffer) { device.BindFramebuffer(IGLDevice::ReadFramebuffer, fb); device.BindFramebuffer(IGLDevice::DrawFramebuffer, mirrorFramebuffer); - device.BlitFramebuffer(0, 0, w, h, 0, 0, w, h, - IGLDevice::ColorBufferBit | - (needsDepth ? IGLDevice::DepthBufferBit : 0), + device.BlitFramebuffer(0, 0, w, h, 0, 0, w, h, IGLDevice::ColorBufferBit, IGLDevice::Nearest); + if (needsDepth) { + device.BindFramebuffer(IGLDevice::ReadFramebuffer, renderFramebuffer); + device.BlitFramebuffer(0, 0, w, h, 0, 0, w, h, IGLDevice::DepthBufferBit, + IGLDevice::Nearest); + } device.BindFramebuffer(IGLDevice::ReadFramebuffer, 0); device.BindFramebuffer(IGLDevice::DrawFramebuffer, 0); } else { @@ -518,8 +554,8 @@ namespace spades { if (useMultisample) { // downsample - int w = device.ScreenWidth(); - int h = device.ScreenHeight(); + int w = renderWidth; + int h = renderHeight; if (settings.r_blitFramebuffer) { device.BindFramebuffer(IGLDevice::ReadFramebuffer, multisampledFramebuffer); device.BindFramebuffer(IGLDevice::DrawFramebuffer, renderFramebuffer); @@ -571,9 +607,9 @@ namespace spades { SPADES_MARK_FUNCTION(); if (w < 0) - w = device.ScreenWidth(); + w = renderWidth; if (h < 0) - h = device.ScreenHeight(); + h = renderHeight; // During the main rendering pass the first buffer is allocated to the render target // and cannot be allocated for pre/postprocessing pass diff --git a/Sources/Draw/GLFramebufferManager.h b/Sources/Draw/GLFramebufferManager.h index 540efd5a..c779e751 100644 --- a/Sources/Draw/GLFramebufferManager.h +++ b/Sources/Draw/GLFramebufferManager.h @@ -71,29 +71,32 @@ namespace spades { bool doingPostProcessing; - IGLDevice::UInteger multisampledFramebuffer; + int renderWidth; + int renderHeight; + + IGLDevice::UInteger multisampledFramebuffer = 0; // for multisample - IGLDevice::UInteger multisampledColorRenderbuffer; - IGLDevice::UInteger multisampledDepthRenderbuffer; + IGLDevice::UInteger multisampledColorRenderbuffer = 0; + IGLDevice::UInteger multisampledDepthRenderbuffer = 0; // common - IGLDevice::UInteger renderFramebuffer; - IGLDevice::UInteger renderColorTexture; - IGLDevice::UInteger renderDepthTexture; + IGLDevice::UInteger renderFramebuffer = 0; + IGLDevice::UInteger renderColorTexture = 0; + IGLDevice::UInteger renderDepthTexture = 0; - IGLDevice::UInteger renderFramebufferWithoutDepth; + IGLDevice::UInteger renderFramebufferWithoutDepth = 0; IGLDevice::Enum fbInternalFormat; - IGLDevice::UInteger mirrorFramebuffer; - IGLDevice::UInteger mirrorColorTexture; - IGLDevice::UInteger mirrorDepthTexture; + IGLDevice::UInteger mirrorFramebuffer = 0; + IGLDevice::UInteger mirrorColorTexture = 0; + IGLDevice::UInteger mirrorDepthTexture = 0; std::vector buffers; public: - GLFramebufferManager(IGLDevice &, GLSettings &); + GLFramebufferManager(IGLDevice &, GLSettings &, int renderWidth, int renderHeight); ~GLFramebufferManager(); /** setups device for scene rendering. */ @@ -106,7 +109,19 @@ namespace spades { void MakeSureAllBuffersReleased(); IGLDevice::UInteger GetDepthTexture() { return renderDepthTexture; } + IGLDevice::Enum GetMainInternalFormat() { return fbInternalFormat; } + + + /** + * Creates BufferHandle with a given size and format. + * Might clobber the current framebuffer and texture bindings. + */ BufferHandle CreateBufferHandle(int w = -1, int h = -1, bool alpha = false); + + /** + * Creates BufferHandle with a given size and format. + * Might clobber the current framebuffer and texture bindings. + */ BufferHandle CreateBufferHandle(int w, int h, IGLDevice::Enum internalFormat); void CopyToMirrorTexture(IGLDevice::UInteger fb = 0); diff --git a/Sources/Draw/GLLensDustFilter.cpp b/Sources/Draw/GLLensDustFilter.cpp index 5fe84889..2b066bc0 100644 --- a/Sources/Draw/GLLensDustFilter.cpp +++ b/Sources/Draw/GLLensDustFilter.cpp @@ -63,6 +63,9 @@ namespace spades { int w = tex.GetWidth(); int h = tex.GetHeight(); + GLColorBuffer buf2 = renderer.GetFramebufferManager()->CreateBufferHandle( + (w + 1) / 2, (h + 1) / 2, false); + static GLProgramAttribute blur_positionAttribute("positionAttribute"); static GLProgramUniform blur_textureUniform("mainTexture"); static GLProgramUniform blur_colorUniform("colorUniform"); @@ -94,8 +97,6 @@ namespace spades { dev.Enable(IGLDevice::Blend, false); } - GLColorBuffer buf2 = - renderer.GetFramebufferManager()->CreateBufferHandle((w + 1) / 2, (h + 1) / 2, false); dev.Viewport(0, 0, buf2.GetWidth(), buf2.GetHeight()); dev.BindFramebuffer(IGLDevice::Framebuffer, buf2.GetFramebuffer()); qr.Draw(); @@ -110,6 +111,8 @@ namespace spades { int w = tex.GetWidth(); int h = tex.GetHeight(); + GLColorBuffer buf2 = renderer.GetFramebufferManager()->CreateBufferHandle(w, h, false); + static GLProgramAttribute blur_positionAttribute("positionAttribute"); static GLProgramUniform blur_textureUniform("mainTexture"); static GLProgramUniform blur_unitShift("unitShift"); @@ -127,7 +130,6 @@ namespace spades { qr.SetCoordAttributeIndex(blur_positionAttribute()); dev.Enable(IGLDevice::Blend, false); - GLColorBuffer buf2 = renderer.GetFramebufferManager()->CreateBufferHandle(w, h, false); dev.Viewport(0, 0, buf2.GetWidth(), buf2.GetHeight()); dev.BindFramebuffer(IGLDevice::Framebuffer, buf2.GetFramebuffer()); qr.Draw(); @@ -272,8 +274,8 @@ namespace spades { dust->Use(); - float facX = renderer.ScreenWidth() / 128.f; - float facY = renderer.ScreenHeight() / 128.f; + float facX = renderer.GetRenderWidth() / 128.f; + float facY = renderer.GetRenderHeight() / 128.f; dustNoiseTexCoordFactor.SetValue(facX, facY, facX / 128.f, facY / 128.f); // composite to the final image diff --git a/Sources/Draw/GLLensFilter.cpp b/Sources/Draw/GLLensFilter.cpp index c975ec21..12ae970c 100644 --- a/Sources/Draw/GLLensFilter.cpp +++ b/Sources/Draw/GLLensFilter.cpp @@ -41,6 +41,8 @@ namespace spades { IGLDevice &dev = renderer.GetGLDevice(); GLQuadRenderer qr(dev); + GLColorBuffer output = input.GetManager()->CreateBufferHandle(); + static GLProgramAttribute lensPosition("positionAttribute"); static GLProgramUniform lensTexture("mainTexture"); static GLProgramUniform lensFov("fov"); @@ -58,7 +60,6 @@ namespace spades { lensTexture.SetValue(0); // composite to the final image - GLColorBuffer output = input.GetManager()->CreateBufferHandle(); qr.SetCoordAttributeIndex(lensPosition()); dev.BindTexture(IGLDevice::Texture2D, input.GetTexture()); diff --git a/Sources/Draw/GLLensFlareFilter.cpp b/Sources/Draw/GLLensFlareFilter.cpp index 0f67aeb7..1b69c879 100644 --- a/Sources/Draw/GLLensFlareFilter.cpp +++ b/Sources/Draw/GLLensFlareFilter.cpp @@ -242,7 +242,7 @@ namespace spades { visibilityTexture.SetValue(0); qr.SetCoordAttributeIndex(positionAttribute()); - dev.Viewport(0, 0, dev.ScreenWidth(), dev.ScreenHeight()); + dev.Viewport(0, 0, renderer.GetRenderWidth(), renderer.GetRenderHeight()); /* render flare */ diff --git a/Sources/Draw/GLNonlinearizeFilter.cpp b/Sources/Draw/GLNonlinearizeFilter.cpp index c7ba30b7..0cf9499b 100644 --- a/Sources/Draw/GLNonlinearizeFilter.cpp +++ b/Sources/Draw/GLNonlinearizeFilter.cpp @@ -41,6 +41,8 @@ namespace spades { IGLDevice &dev = renderer.GetGLDevice(); GLQuadRenderer qr(dev); + + GLColorBuffer output = input.GetManager()->CreateBufferHandle(); static GLProgramAttribute lensPosition("positionAttribute"); static GLProgramUniform lensTexture("mainTexture"); @@ -58,7 +60,6 @@ namespace spades { lensGamma.SetValue(1.f / (float)renderer.GetSettings().r_hdrGamma); // composite to the final image - GLColorBuffer output = input.GetManager()->CreateBufferHandle(); qr.SetCoordAttributeIndex(lensPosition()); dev.BindTexture(IGLDevice::Texture2D, input.GetTexture()); diff --git a/Sources/Draw/GLRadiosityRenderer.cpp b/Sources/Draw/GLRadiosityRenderer.cpp index 20d9ac50..6343eb45 100644 --- a/Sources/Draw/GLRadiosityRenderer.cpp +++ b/Sources/Draw/GLRadiosityRenderer.cpp @@ -28,8 +28,12 @@ #include #include -#ifdef __APPLE__ +#if defined(__APPLE__) +#if defined(__x86_64__) #include +#else +#include +#endif #endif #include "GLProfiler.h" diff --git a/Sources/Draw/GLRenderer.cpp b/Sources/Draw/GLRenderer.cpp index d35c54c4..36e1770b 100644 --- a/Sources/Draw/GLRenderer.cpp +++ b/Sources/Draw/GLRenderer.cpp @@ -50,12 +50,14 @@ #include "GLProgramUniform.h" #include "GLRadiosityRenderer.h" #include "GLRenderer.h" +#include "GLResampleBicubicFilter.h" #include "GLSSAOFilter.h" #include "GLSettings.h" #include "GLShadowMapShader.h" #include "GLSoftLitSpriteRenderer.h" #include "GLSoftSpriteRenderer.h" #include "GLSpriteRenderer.h" +#include "GLTemporalAAFilter.h" #include "GLVoxelModel.h" #include "GLWaterRenderer.h" #include "IGLDevice.h" @@ -73,7 +75,6 @@ namespace spades { GLRenderer::GLRenderer(Handle _device) : device(std::move(_device)), - fbManager(NULL), map(NULL), inited(false), sceneUsedInThisFrame(false), @@ -87,7 +88,6 @@ namespace spades { modelRenderer(NULL), spriteRenderer(NULL), longSpriteRenderer(NULL), - waterRenderer(NULL), ambientShadowRenderer(NULL), radiosityRenderer(NULL), cameraBlur(NULL), @@ -104,7 +104,9 @@ namespace spades { SPLog("GLRenderer bootstrap"); - fbManager = new GLFramebufferManager(*device, settings); + renderWidth = renderHeight = -1; + + UpdateRenderSize(); programManager = new GLProgramManager(*device, shadowMapRenderer.get(), settings); imageManager = new GLImageManager(*device); @@ -127,6 +129,33 @@ namespace spades { Shutdown(); } + void GLRenderer::UpdateRenderSize() { + float renderScale = settings.r_scale; + renderScale = std::max(0.2f, renderScale); + if (!(renderScale < 1.0f)) { // eliminates NaN + renderScale = 1.0f; + } + + int screenWidth = device->ScreenWidth(); + int screenHeight = device->ScreenHeight(); + + int newRenderWidth = static_cast(screenWidth * renderScale); + int newRenderHeight = static_cast(screenHeight * renderScale); + + if (newRenderWidth != renderWidth || newRenderHeight != renderHeight) { + SPLog("Render size has changed"); + renderWidth = newRenderWidth; + renderHeight = newRenderHeight; + + fbManager.reset( + new GLFramebufferManager(*device, settings, renderWidth, renderHeight)); + if (waterRenderer) { + SPLog("Creating Water Renderer"); + waterRenderer.reset(new GLWaterRenderer(*this, map)); + } + } + } + void GLRenderer::Init() { if (modelManager != NULL) { // already initialized @@ -156,6 +185,9 @@ namespace spades { if (settings.r_cameraBlur) { cameraBlur = new GLCameraBlurFilter(*this); } + if (settings.r_temporalAA) { + temporalAAFilter.reset(new GLTemporalAAFilter(*this)); + } if (settings.r_fogShadow) { GLFogFilter(*this); @@ -185,6 +217,10 @@ namespace spades { GLFXAAFilter(*this); } + if (settings.r_scaleFilter.operator int() == 2) { + GLResampleBicubicFilter(*this); + } + if (settings.r_depthOfField) { GLDepthOfFieldFilter(*this); } @@ -198,6 +234,7 @@ namespace spades { SPLog("GLRender finalizing"); SetGameMap(nullptr); + temporalAAFilter.reset(); delete autoExposureFilter; autoExposureFilter = NULL; delete lensDustFilter; @@ -212,8 +249,7 @@ namespace spades { mapShadowRenderer = NULL; delete mapRenderer; mapRenderer = NULL; - delete waterRenderer; - waterRenderer = NULL; + waterRenderer.reset(); delete ambientShadowRenderer; ambientShadowRenderer = NULL; shadowMapRenderer.reset(); @@ -221,8 +257,6 @@ namespace spades { cameraBlur = NULL; delete longSpriteRenderer; longSpriteRenderer = NULL; - delete waterRenderer; - waterRenderer = NULL; delete modelRenderer; modelRenderer = NULL; delete spriteRenderer; @@ -235,8 +269,7 @@ namespace spades { programManager = NULL; delete imageManager; imageManager = NULL; - delete fbManager; - fbManager = NULL; + fbManager.reset(); profiler.reset(); SPLog("GLRenderer finalized"); } @@ -301,8 +334,7 @@ namespace spades { flatMapRenderer = NULL; delete mapShadowRenderer; mapShadowRenderer = NULL; - delete waterRenderer; - waterRenderer = NULL; + waterRenderer.reset(); delete ambientShadowRenderer; ambientShadowRenderer = NULL; @@ -316,7 +348,7 @@ namespace spades { SPLog("Creating Minimap Renderer"); flatMapRenderer = new GLFlatMapRenderer(*this, *newMap); SPLog("Creating Water Renderer"); - waterRenderer = new GLWaterRenderer(*this, newMap.get_pointer()); + waterRenderer.reset(new GLWaterRenderer(*this, newMap.get_pointer())); if (settings.r_radiosity) { SPLog("Creating Ray-traced Ambient Occlusion Renderer"); @@ -395,6 +427,16 @@ namespace spades { mat.m[13] = 0.f; mat.m[14] = -(far * near * 2.f) / c; mat.m[15] = 0.f; + + if (settings.r_temporalAA && temporalAAFilter) { + float jitterX = 1.0f / GetRenderWidth(); + float jitterY = 1.0f / GetRenderHeight(); + Vector2 jitter = temporalAAFilter->GetProjectionMatrixJitter(); + jitterX *= jitter.x * 1.3f; + jitterY *= jitter.y * 1.3f; + mat = Matrix4::Translate(jitterX, jitterY, 0.0f) * mat; + } + projectionMatrix = mat; } @@ -925,9 +967,22 @@ namespace spades { } if (settings.r_cameraBlur && !sceneDef.denyCameraBlur) { + if (!cameraBlur) { + cameraBlur = new GLCameraBlurFilter(*this); + } + GLProfiler::Context p(*profiler, "Camera Blur"); // FIXME: better (correctly constructed) radial blur algorithm - handle = cameraBlur->Filter(handle, sceneDef.radialBlur); + handle = cameraBlur->Filter( + handle, std::min(settings.r_cameraBlur * 0.2f, 1.0f), sceneDef.radialBlur); + } + + if (settings.r_temporalAA) { + if (!temporalAAFilter) { + temporalAAFilter.reset(new GLTemporalAAFilter(*this)); + } + GLProfiler::Context p(*profiler, "Temporal AA"); + handle = temporalAAFilter->Filter(handle, settings.r_fxaa); } if (settings.r_bloom) { @@ -935,7 +990,7 @@ namespace spades { handle = lensDustFilter->Filter(handle); } - // do r_fxaa before lens filter so that color aberration looks nice + // Do r_fxaa before lens filter so that color aberration looks nice. if (settings.r_fxaa) { GLProfiler::Context p(*profiler, "FXAA"); handle = GLFXAAFilter(*this).Filter(handle); @@ -1015,18 +1070,41 @@ namespace spades { tint = Mix(tint, MakeVector3(1.f, 1.f, 1.f), 0.2f); tint *= 1.f / std::min(std::min(tint.x, tint.y), tint.z); + float fogLuminance = (fogColor.x + fogColor.y + fogColor.z) * (1.0f / 3.0f); + float exposure = powf(2.f, (float)settings.r_exposureValue * 0.5f); - handle = GLColorCorrectionFilter(*this).Filter(handle, tint * exposure); + handle = + GLColorCorrectionFilter(*this).Filter(handle, tint * exposure, fogLuminance); // update smoothed fog color smoothedFogColor = Mix(smoothedFogColor, fogColor, 0.002f); } } + // Resample the rendered image using a non-trivial filter if such + // a filter is selected. + int scaleFilter = settings.r_scaleFilter; + bool scalingMayBeNeeded = GetRenderWidth() != device->ScreenWidth() || + GetRenderHeight() != device->ScreenHeight(); + if (scaleFilter == 0) { + // Nearest neighbor - trivial + } else if (scaleFilter == 1) { + // Bi-linear - trivial + } else if (scaleFilter == 2) { + // Bi-cubic - non-trivial + handle = GLResampleBicubicFilter{*this}.Filter(handle, device->ScreenWidth(), + device->ScreenHeight()); + scaleFilter = 0; + } else { + // I don't know this filter. + scaleFilter = 1; + } + if (settings.r_srgb && settings.r_srgb2D) { // in gamma corrected mode, // 2d drawings are done on gamma-corrected FB // see also: FrameDone + // TODO: Handle the case where `scaleFilter == 0` lastColorBufferTexture = handle.GetTexture(); device->BindFramebuffer(IGLDevice::Framebuffer, handle.GetFramebuffer()); device->Enable(IGLDevice::FramebufferSRGB, true); @@ -1038,15 +1116,34 @@ namespace spades { GLProfiler::Context p(*profiler, "Copying to WM-given Framebuffer"); + if (scaleFilter == 0) { + // Temporarily change the textute filter to NN + device->BindTexture(IGLDevice::Texture2D, handle.GetTexture()); + device->TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMagFilter, + IGLDevice::Nearest); + device->TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMinFilter, + IGLDevice::Nearest); + } + device->BindFramebuffer(IGLDevice::Framebuffer, 0); device->Enable(IGLDevice::Blend, false); - device->Viewport(0, 0, handle.GetWidth(), handle.GetHeight()); - auto image = Handle::New(handle.GetTexture(), device.GetPointerOrNull(), - handle.GetWidth(), handle.GetHeight(), false); + device->Viewport(0, 0, device->ScreenWidth(), device->ScreenHeight()); + Handle image(new GLImage(handle.GetTexture(), device.GetPointerOrNull(), + handle.GetWidth(), handle.GetHeight(), false), + false); SetColorAlphaPremultiplied(MakeVector4(1, 1, 1, 1)); - DrawImage(*image, - AABB2(0, handle.GetHeight(), handle.GetWidth(), -handle.GetHeight())); + DrawImage(*image, AABB2(0, device->ScreenHeight(), device->ScreenWidth(), + -device->ScreenHeight())); imageRenderer->Flush(); + + if (scaleFilter == 0) { + // Reset the texture filter + device->BindTexture(IGLDevice::Texture2D, handle.GetTexture()); + device->TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMagFilter, + IGLDevice::Linear); + device->TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMinFilter, + IGLDevice::Linear); + } } handle.Release(); @@ -1058,9 +1155,7 @@ namespace spades { modelRenderer->Clear(); // prepare for 2d drawing - device->BlendFunc(IGLDevice::One, IGLDevice::OneMinusSrcAlpha, IGLDevice::Zero, - IGLDevice::One); - device->Enable(IGLDevice::Blend, true); + Prepare2DRendering(true); } //#pragma mark - 2D Drawings @@ -1246,9 +1341,7 @@ namespace spades { lastTime = sceneDef.time; // ready for 2d draw of next frame - device->BlendFunc(IGLDevice::One, IGLDevice::OneMinusSrcAlpha, IGLDevice::Zero, - IGLDevice::One); - device->Enable(IGLDevice::Blend, true); + Prepare2DRendering(true); profiler->EndFrame(); } @@ -1259,6 +1352,16 @@ namespace spades { EnsureSceneNotStarted(); device->Swap(); + + UpdateRenderSize(); + } + + void GLRenderer::Prepare2DRendering(bool reset) { + device->BlendFunc(IGLDevice::One, IGLDevice::OneMinusSrcAlpha, IGLDevice::Zero, + IGLDevice::One); + device->Enable(IGLDevice::Blend, true); + device->BindFramebuffer(IGLDevice::Framebuffer, 0); + device->Viewport(0, 0, device->ScreenWidth(), device->ScreenHeight()); } Handle GLRenderer::ReadBitmap() { diff --git a/Sources/Draw/GLRenderer.h b/Sources/Draw/GLRenderer.h index dff1a1c4..194a7d71 100644 --- a/Sources/Draw/GLRenderer.h +++ b/Sources/Draw/GLRenderer.h @@ -55,6 +55,7 @@ namespace spades { class GLLensDustFilter; class GLSoftLitSpriteRenderer; class GLAutoExposureFilter; + class GLTemporalAAFilter; class GLProfiler; class GLRenderer : public client::IRenderer, public client::IGameMapListener { @@ -69,10 +70,13 @@ namespace spades { }; Handle device; - GLFramebufferManager *fbManager; + std::unique_ptr fbManager; client::GameMap *map; // TODO: get rid of raw pointers GLSettings settings; + int renderWidth; + int renderHeight; + std::unique_ptr profiler; bool inited; @@ -97,13 +101,14 @@ namespace spades { GLModelRenderer *modelRenderer; IGLSpriteRenderer *spriteRenderer; GLLongSpriteRenderer *longSpriteRenderer; - GLWaterRenderer *waterRenderer; + std::unique_ptr waterRenderer; GLAmbientShadowRenderer *ambientShadowRenderer; GLRadiosityRenderer *radiosityRenderer; GLCameraBlurFilter *cameraBlur; GLLensDustFilter *lensDustFilter; GLAutoExposureFilter *autoExposureFilter; + std::unique_ptr temporalAAFilter; // used when r_ssao = 1. only valid while rendering objects IGLDevice::UInteger ssaoBufferTexture; @@ -142,6 +147,10 @@ namespace spades { void EnsureSceneStarted(); void EnsureSceneNotStarted(); + void UpdateRenderSize(); + + void Prepare2DRendering(bool reset = false); + protected: ~GLRenderer(); @@ -208,10 +217,13 @@ namespace spades { float ScreenWidth() override; float ScreenHeight() override; + int GetRenderWidth() const { return renderWidth; } + int GetRenderHeight() const { return renderHeight; } + GLSettings &GetSettings() { return settings; } IGLDevice &GetGLDevice() { return *device; } GLProfiler &GetGLProfiler() { return *profiler; } - GLFramebufferManager *GetFramebufferManager() { return fbManager; } + GLFramebufferManager *GetFramebufferManager() { return fbManager.get(); } IGLShadowMapRenderer *GetShadowMapRenderer() { return shadowMapRenderer.get(); } GLAmbientShadowRenderer *GetAmbientShadowRenderer() { return ambientShadowRenderer; } GLMapShadowRenderer *GetMapShadowRenderer() { return mapShadowRenderer; } diff --git a/Sources/Draw/GLResampleBicubicFilter.cpp b/Sources/Draw/GLResampleBicubicFilter.cpp new file mode 100644 index 00000000..1b1b7877 --- /dev/null +++ b/Sources/Draw/GLResampleBicubicFilter.cpp @@ -0,0 +1,74 @@ +/* + Copyright (c) 2021 yvt + + This file is part of OpenSpades. + + OpenSpades is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenSpades is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenSpades. If not, see . + + */ + +#include + +#include "GLProgram.h" +#include "GLProgramAttribute.h" +#include "GLProgramUniform.h" +#include "GLQuadRenderer.h" +#include "GLRenderer.h" +#include "GLResampleBicubicFilter.h" +#include "IGLDevice.h" +#include +#include + +namespace spades { + namespace draw { + GLResampleBicubicFilter::GLResampleBicubicFilter(GLRenderer &renderer) + : renderer(renderer) { + lens = renderer.RegisterProgram("Shaders/PostFilters/ResampleBicubic.program"); + } + GLColorBuffer GLResampleBicubicFilter::Filter(GLColorBuffer input, int outputWidth, + int outputHeight) { + SPADES_MARK_FUNCTION(); + + IGLDevice &dev = renderer.GetGLDevice(); + GLQuadRenderer qr(dev); + + GLColorBuffer output = + input.GetManager()->CreateBufferHandle(outputWidth, outputHeight); + + static GLProgramAttribute lensPosition("positionAttribute"); + static GLProgramUniform lensTexture("mainTexture"); + static GLProgramUniform inverseVP("inverseVP"); + + dev.Enable(IGLDevice::Blend, false); + + lensPosition(lens); + lensTexture(lens); + inverseVP(lens); + + lens->Use(); + + inverseVP.SetValue(1.f / input.GetWidth(), 1.f / input.GetHeight()); + lensTexture.SetValue(0); + + qr.SetCoordAttributeIndex(lensPosition()); + dev.BindTexture(IGLDevice::Texture2D, input.GetTexture()); + dev.BindFramebuffer(IGLDevice::Framebuffer, output.GetFramebuffer()); + dev.Viewport(0, 0, output.GetWidth(), output.GetHeight()); + qr.Draw(); + dev.BindTexture(IGLDevice::Texture2D, 0); + + return output; + } + } // namespace draw +} // namespace spades diff --git a/Sources/Draw/GLResampleBicubicFilter.h b/Sources/Draw/GLResampleBicubicFilter.h new file mode 100644 index 00000000..df4fe35f --- /dev/null +++ b/Sources/Draw/GLResampleBicubicFilter.h @@ -0,0 +1,38 @@ +/* + Copyright (c) 2013 yvt + + This file is part of OpenSpades. + + OpenSpades is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenSpades is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenSpades. If not, see . + + */ + +#pragma once + +#include "GLFramebufferManager.h" + +namespace spades { + namespace draw { + class GLRenderer; + class GLProgram; + class GLResampleBicubicFilter { + GLRenderer &renderer; + GLProgram *lens; + + public: + GLResampleBicubicFilter(GLRenderer &); + GLColorBuffer Filter(GLColorBuffer, int outputWidth, int outputHeight); + }; + } // namespace draw +} // namespace spades diff --git a/Sources/Draw/GLSSAOFilter.cpp b/Sources/Draw/GLSSAOFilter.cpp index 5c23c17a..f5727aa4 100644 --- a/Sources/Draw/GLSSAOFilter.cpp +++ b/Sources/Draw/GLSSAOFilter.cpp @@ -85,7 +85,7 @@ namespace spades { float kernelSize = std::max(1.0f, std::min(width, height) * 0.0018f); sampleOffsetScale.SetValue(kernelSize / (float)width, kernelSize / (float)height); - if (width < dev.ScreenWidth()) { + if (width < renderer.GetRenderWidth()) { // 2x downsampling texCoordRange.SetValue(0.25f / width, 0.25f / height, 1.f, 1.f); } else { @@ -127,6 +127,8 @@ namespace spades { int w = width == -1 ? tex.GetWidth() : width; int h = height == -1 ? tex.GetHeight() : height; + GLColorBuffer buf2 = renderer.GetFramebufferManager()->CreateBufferHandle(w, h, 1); + static GLProgramAttribute positionAttribute("positionAttribute"); static GLProgramUniform inputTexture("inputTexture"); static GLProgramUniform depthTexture("depthTexture"); @@ -171,8 +173,6 @@ namespace spades { zNearFar.SetValue(def.zNear, def.zFar); qr.SetCoordAttributeIndex(positionAttribute()); - - GLColorBuffer buf2 = renderer.GetFramebufferManager()->CreateBufferHandle(w, h, 1); dev.Viewport(0, 0, w, h); dev.BindFramebuffer(IGLDevice::Framebuffer, buf2.GetFramebuffer()); qr.Draw(); @@ -189,8 +189,8 @@ namespace spades { IGLDevice &dev = renderer.GetGLDevice(); - int width = dev.ScreenWidth(); - int height = dev.ScreenHeight(); + int width = renderer.GetRenderWidth(); + int height = renderer.GetRenderHeight(); dev.Enable(IGLDevice::Blend, false); diff --git a/Sources/Draw/GLSettings.cpp b/Sources/Draw/GLSettings.cpp index 16c18179..1ac46bb2 100644 --- a/Sources/Draw/GLSettings.cpp +++ b/Sources/Draw/GLSettings.cpp @@ -57,12 +57,16 @@ DEFINE_SPADES_SETTING(r_optimizedVoxelModel, "1"); DEFINE_SPADES_SETTING(r_physicalLighting, "0"); DEFINE_SPADES_SETTING(r_radiosity, "0"); DEFINE_SPADES_SETTING(r_saturation, "1"); +DEFINE_SPADES_SETTING(r_scale, "1"); +DEFINE_SPADES_SETTING(r_scaleFilter, "1"); DEFINE_SPADES_SETTING(r_shadowMapSize, "2048"); +DEFINE_SPADES_SETTING(r_sharpen, "1"); DEFINE_SPADES_SETTING(r_softParticles, "1"); DEFINE_SPADES_SETTING(r_sparseShadowMaps, "1"); DEFINE_SPADES_SETTING(r_srgb, "0"); DEFINE_SPADES_SETTING(r_srgb2D, "1"); DEFINE_SPADES_SETTING(r_ssao, "0"); +DEFINE_SPADES_SETTING(r_temporalAA, "0"); DEFINE_SPADES_SETTING(r_water, "2"); namespace spades { diff --git a/Sources/Draw/GLSettings.h b/Sources/Draw/GLSettings.h index 33ae913e..de688cb5 100644 --- a/Sources/Draw/GLSettings.h +++ b/Sources/Draw/GLSettings.h @@ -30,7 +30,7 @@ namespace spades { // clang-format off TypedItemHandle r_blitFramebuffer { *this, "r_blitFramebuffer" }; TypedItemHandle r_bloom { *this, "r_bloom" }; - TypedItemHandle r_cameraBlur { *this, "r_cameraBlur", ItemFlags::Latch }; + TypedItemHandle r_cameraBlur { *this, "r_cameraBlur" }; TypedItemHandle r_colorCorrection { *this, "r_colorCorrection" }; TypedItemHandle r_debugTiming { *this, "r_debugTiming" }; TypedItemHandle r_debugTimingOutputScreen { *this, "r_debugTimingOutputScreen" }; @@ -65,12 +65,16 @@ namespace spades { TypedItemHandle r_physicalLighting { *this, "r_physicalLighting", ItemFlags::Latch }; TypedItemHandle r_radiosity { *this, "r_radiosity", ItemFlags::Latch }; TypedItemHandle r_saturation { *this, "r_saturation" }; + TypedItemHandle r_scale { *this, "r_scale" }; + TypedItemHandle r_scaleFilter { *this, "r_scaleFilter" }; TypedItemHandle r_shadowMapSize { *this, "r_shadowMapSize", ItemFlags::Latch }; - TypedItemHandle r_softParticles { *this, "r_softParticles" }; + TypedItemHandle r_sharpen { *this, "r_sharpen" }; + TypedItemHandle r_softParticles { *this, "r_softParticles", ItemFlags::Latch }; TypedItemHandle r_sparseShadowMaps { *this, "r_sparseShadowMaps", ItemFlags::Latch }; TypedItemHandle r_srgb { *this, "r_srgb", ItemFlags::Latch }; TypedItemHandle r_srgb2D { *this, "r_srgb2D", ItemFlags::Latch }; TypedItemHandle r_ssao { *this, "r_ssao", ItemFlags::Latch }; + TypedItemHandle r_temporalAA { *this, "r_temporalAA" }; TypedItemHandle r_water { *this, "r_water", ItemFlags::Latch }; // clang-format on }; diff --git a/Sources/Draw/GLShadowShader.cpp b/Sources/Draw/GLShadowShader.cpp index 939a04ec..925a3615 100644 --- a/Sources/Draw/GLShadowShader.cpp +++ b/Sources/Draw/GLShadowShader.cpp @@ -289,8 +289,8 @@ namespace spades { ssaoTexture.SetValue(texStage); texStage++; - ssaoTextureUVScale.SetValue(1.0f / renderer->ScreenWidth(), - 1.0f / renderer->ScreenHeight()); + ssaoTextureUVScale.SetValue(1.0f / renderer->GetRenderWidth(), + 1.0f / renderer->GetRenderHeight()); } } diff --git a/Sources/Draw/GLSoftLitSpriteRenderer.cpp b/Sources/Draw/GLSoftLitSpriteRenderer.cpp index 8256ade0..5749f96d 100644 --- a/Sources/Draw/GLSoftLitSpriteRenderer.cpp +++ b/Sources/Draw/GLSoftLitSpriteRenderer.cpp @@ -321,7 +321,7 @@ namespace spades { // low-res sprites IGLDevice::UInteger lastFb = device.GetInteger(IGLDevice::FramebufferBinding); - int sW = device.ScreenWidth(), sH = device.ScreenHeight(); + int sW = renderer.GetRenderWidth(), sH = renderer.GetRenderHeight(); int lW = (sW + 3) / 4, lH = (sH + 3) / 4; int numLowResSprites = 0; GLColorBuffer buf = renderer.GetFramebufferManager()->CreateBufferHandle(lW, lH, true); diff --git a/Sources/Draw/GLSoftSpriteRenderer.cpp b/Sources/Draw/GLSoftSpriteRenderer.cpp index f40b8810..2da25c2a 100644 --- a/Sources/Draw/GLSoftSpriteRenderer.cpp +++ b/Sources/Draw/GLSoftSpriteRenderer.cpp @@ -214,7 +214,7 @@ namespace spades { // low-res sprites IGLDevice::UInteger lastFb = device.GetInteger(IGLDevice::FramebufferBinding); - int sW = device.ScreenWidth(), sH = device.ScreenHeight(); + int sW = renderer.GetRenderWidth(), sH = renderer.GetRenderHeight(); int lW = (sW + 3) / 4, lH = (sH + 3) / 4; int numLowResSprites = 0; GLColorBuffer buf = renderer.GetFramebufferManager()->CreateBufferHandle(lW, lH, true); diff --git a/Sources/Draw/GLSparseShadowMapRenderer.cpp b/Sources/Draw/GLSparseShadowMapRenderer.cpp index d35ae679..011cb1eb 100644 --- a/Sources/Draw/GLSparseShadowMapRenderer.cpp +++ b/Sources/Draw/GLSparseShadowMapRenderer.cpp @@ -240,10 +240,6 @@ namespace spades { void GLSparseShadowMapRenderer::Render() { SPADES_MARK_FUNCTION(); - IGLDevice::Integer lastFb = device.GetInteger(IGLDevice::FramebufferBinding); - - // client::SceneDefinition def = GetRenderer().GetSceneDef(); - float nearDist = 0.f; float farDist = 150.f; @@ -255,10 +251,6 @@ namespace spades { device.Clear(IGLDevice::DepthBufferBit); RenderShadowMapPass(); - - device.BindFramebuffer(IGLDevice::Framebuffer, lastFb); - - device.Viewport(0, 0, device.ScreenWidth(), device.ScreenHeight()); } #pragma mark - Sparse Processor diff --git a/Sources/Draw/GLTemporalAAFilter.cpp b/Sources/Draw/GLTemporalAAFilter.cpp new file mode 100644 index 00000000..30cc7bde --- /dev/null +++ b/Sources/Draw/GLTemporalAAFilter.cpp @@ -0,0 +1,381 @@ +/* + Copyright (c) 2017 yvt + + This file is part of OpenSpades. + + OpenSpades is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenSpades is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenSpades. If not, see . + + */ + +#include + +#include "GLFXAAFilter.h" +#include "GLProfiler.h" +#include "GLProgram.h" +#include "GLProgramAttribute.h" +#include "GLProgramUniform.h" +#include "GLQuadRenderer.h" +#include "GLRenderer.h" +#include "GLTemporalAAFilter.h" +#include "IGLDevice.h" +#include +#include + +namespace spades { + namespace draw { + GLTemporalAAFilter::GLTemporalAAFilter(GLRenderer &renderer) : renderer(renderer) { + prevMatrix = Matrix4::Identity(); + prevViewOrigin = Vector3(0.0f, 0.0f, 0.0f); + program = renderer.RegisterProgram("Shaders/PostFilters/TemporalAA.program"); + + // Preload + GLFXAAFilter{renderer}; + } + + GLTemporalAAFilter::~GLTemporalAAFilter() { DeleteHistoryBuffer(); } + + void GLTemporalAAFilter::DeleteHistoryBuffer() { + if (!historyBuffer.valid) { + return; + } + + IGLDevice &dev = renderer.GetGLDevice(); + dev.DeleteFramebuffer(historyBuffer.framebuffer); + dev.DeleteTexture(historyBuffer.texture); + + historyBuffer.valid = false; + } + + GLColorBuffer GLTemporalAAFilter::Filter(GLColorBuffer input, bool useFxaa) { + SPADES_MARK_FUNCTION(); + + IGLDevice &dev = renderer.GetGLDevice(); + GLQuadRenderer qr(dev); + + // Calculate the current view-projection matrix. + const client::SceneDefinition &def = renderer.GetSceneDef(); + Matrix4 newMatrix = Matrix4::Identity(); + Vector3 axes[] = {def.viewAxis[0], def.viewAxis[1], def.viewAxis[2]}; + newMatrix.m[0] = axes[0].x; + newMatrix.m[1] = axes[1].x; + newMatrix.m[2] = -axes[2].x; + newMatrix.m[4] = axes[0].y; + newMatrix.m[5] = axes[1].y; + newMatrix.m[6] = -axes[2].y; + newMatrix.m[8] = axes[0].z; + newMatrix.m[9] = axes[1].z; + newMatrix.m[10] = -axes[2].z; + + Matrix4 projectionMatrix; + { + // From `GLRenderer::BuildProjectionMatrix` + float near = def.zNear; + float far = def.zFar; + float t = near * std::tan(def.fovY * .5f); + float r = near * std::tan(def.fovX * .5f); + float a = r * 2.f, b = t * 2.f, c = far - near; + Matrix4 &mat = projectionMatrix; + mat.m[0] = near * 2.f / a; + mat.m[1] = 0.f; + mat.m[2] = 0.f; + mat.m[3] = 0.f; + mat.m[4] = 0.f; + mat.m[5] = near * 2.f / b; + mat.m[6] = 0.f; + mat.m[7] = 0.f; + mat.m[8] = 0.f; + mat.m[9] = 0.f; + mat.m[10] = -(far + near) / c; + mat.m[11] = -1.f; + mat.m[12] = 0.f; + mat.m[13] = 0.f; + mat.m[14] = -(far * near * 2.f) / c; + mat.m[15] = 0.f; + } + + newMatrix = projectionMatrix * newMatrix; + + // In `y = newMatrix * x`, the coordinate space `y` belongs to must + // cover the clip region by range `[0, 1]` (like texture coordinates) + // instead of `[-1, 1]` (like OpenGL clip coordinates) + newMatrix = Matrix4::Translate(1.0f, 1.0f, 1.0f) * newMatrix; + newMatrix = Matrix4::Scale(0.5f, 0.5f, 0.5f) * newMatrix; + + // Camera translation must be incorporated into the calculation + // separately to avoid numerical errors. (You'd be suprised to see + // how visible the visual artifacts can be.) + Matrix4 translationMatrix = Matrix4::Translate(def.viewOrigin - prevViewOrigin); + + // Compute the reprojection matrix + Matrix4 inverseNewMatrix = newMatrix.Inversed(); + Matrix4 diffMatrix = prevMatrix * translationMatrix * inverseNewMatrix; + prevMatrix = newMatrix; + prevViewOrigin = def.viewOrigin; + + if (!historyBuffer.valid || historyBuffer.width != input.GetWidth() || + historyBuffer.height != input.GetHeight()) { + DeleteHistoryBuffer(); + + historyBuffer.width = input.GetWidth(); + historyBuffer.height = input.GetHeight(); + + auto internalFormat = renderer.GetFramebufferManager()->GetMainInternalFormat(); + + historyBuffer.framebuffer = dev.GenFramebuffer(); + dev.BindFramebuffer(IGLDevice::Framebuffer, historyBuffer.framebuffer); + + historyBuffer.texture = dev.GenTexture(); + dev.BindTexture(IGLDevice::Texture2D, historyBuffer.texture); + + historyBuffer.valid = true; + + SPLog("Creating a history buffer"); + dev.TexImage2D(IGLDevice::Texture2D, 0, internalFormat, historyBuffer.width, + historyBuffer.height, 0, IGLDevice::RGBA, IGLDevice::UnsignedByte, + NULL); + SPLog("History buffer allocated"); + dev.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMagFilter, + IGLDevice::Linear); + dev.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMinFilter, + IGLDevice::Linear); + dev.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureWrapS, + IGLDevice::ClampToEdge); + dev.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureWrapT, + IGLDevice::ClampToEdge); + + dev.FramebufferTexture2D(IGLDevice::Framebuffer, IGLDevice::ColorAttachment0, + IGLDevice::Texture2D, historyBuffer.texture, 0); + + IGLDevice::Enum status = dev.CheckFramebufferStatus(IGLDevice::Framebuffer); + if (status != IGLDevice::FramebufferComplete) { + SPRaise("Failed to create a history buffer."); + } + SPLog("Created a history framebuffer"); + + // Initialize the history buffer with the latest input + dev.BindFramebuffer(IGLDevice::DrawFramebuffer, historyBuffer.framebuffer); + dev.BindFramebuffer(IGLDevice::ReadFramebuffer, input.GetFramebuffer()); + dev.BlitFramebuffer(0, 0, input.GetWidth(), input.GetHeight(), 0, 0, + input.GetWidth(), input.GetHeight(), IGLDevice::ColorBufferBit, + IGLDevice::Nearest); + dev.BindFramebuffer(IGLDevice::ReadFramebuffer, 0); + dev.BindFramebuffer(IGLDevice::DrawFramebuffer, 0); + + // Reset the blending factor + dev.BindFramebuffer(IGLDevice::Framebuffer, historyBuffer.framebuffer); + dev.ColorMask(false, false, false, true); + dev.ClearColor(0.0f, 0.0f, 0.0f, 0.5f); + dev.Clear(IGLDevice::ColorBufferBit); + dev.ColorMask(true, true, true, true); + + if (useFxaa) { + return GLFXAAFilter{renderer}.Filter(input); + } + + return input; + } + + GLColorBuffer output = input.GetManager()->CreateBufferHandle(); + + GLColorBuffer processedInput = input; + /* // this didn't work well: + GLColorBuffer processedInput = + useFxaa ? [&] { + GLProfiler::Context p(renderer.GetGLProfiler(), "FXAA"); + return GLFXAAFilter{renderer}.Filter(input); + }() : input; */ + + static GLProgramAttribute positionAttribute("positionAttribute"); + static GLProgramUniform inputTexture("inputTexture"); + static GLProgramUniform depthTexture("depthTexture"); + static GLProgramUniform previousTexture("previousTexture"); + static GLProgramUniform processedInputTexture("processedInputTexture"); + static GLProgramUniform reprojectionMatrix("reprojectionMatrix"); + static GLProgramUniform inverseVP("inverseVP"); + + dev.Enable(IGLDevice::Blend, false); + + positionAttribute(program); + inputTexture(program); + depthTexture(program); + previousTexture(program); + processedInputTexture(program); + reprojectionMatrix(program); + inverseVP(program); + + program->Use(); + + inputTexture.SetValue(0); + previousTexture.SetValue(1); + processedInputTexture.SetValue(2); + depthTexture.SetValue(3); + reprojectionMatrix.SetValue(diffMatrix); + inverseVP.SetValue(1.f / input.GetWidth(), 1.f / input.GetHeight()); + + // Perform temporal AA + // TODO: pre/post tone mapping to prevent aliasing near overbright area + qr.SetCoordAttributeIndex(positionAttribute()); + dev.ActiveTexture(0); + dev.BindTexture(IGLDevice::Texture2D, input.GetTexture()); + dev.ActiveTexture(1); + dev.BindTexture(IGLDevice::Texture2D, historyBuffer.texture); + dev.ActiveTexture(2); + dev.BindTexture(IGLDevice::Texture2D, processedInput.GetTexture()); + dev.ActiveTexture(3); + dev.BindTexture(IGLDevice::Texture2D, + renderer.GetFramebufferManager()->GetDepthTexture()); + dev.ActiveTexture(0); + dev.BindFramebuffer(IGLDevice::Framebuffer, output.GetFramebuffer()); + dev.Viewport(0, 0, output.GetWidth(), output.GetHeight()); + qr.Draw(); + dev.BindTexture(IGLDevice::Texture2D, 0); + + // Copy the result to the history buffer + dev.BindFramebuffer(IGLDevice::DrawFramebuffer, historyBuffer.framebuffer); + dev.BindFramebuffer(IGLDevice::ReadFramebuffer, output.GetFramebuffer()); + dev.BlitFramebuffer(0, 0, input.GetWidth(), input.GetHeight(), 0, 0, input.GetWidth(), + input.GetHeight(), IGLDevice::ColorBufferBit, IGLDevice::Nearest); + dev.BindFramebuffer(IGLDevice::ReadFramebuffer, 0); + dev.BindFramebuffer(IGLDevice::DrawFramebuffer, 0); + return output; + } + + Vector2 GLTemporalAAFilter::GetProjectionMatrixJitter() { + // Obtained from Hyper3D (MIT licensed) + static const std::vector jitterTable = { + 0.281064, 0.645281, -0.167313, 0.685935, -0.160711, -0.113289, + 1.08453, -0.0970135, -0.3655, -0.51894, 0.275308, -0.000830889, + -0.0431051, 0.574405, -0.163071, -0.30989, 0.372959, -0.0161521, + 0.131741, 0.456781, 0.0165477, -0.0975113, -0.273682, -0.509164, + 0.573244, -0.714618, -0.479023, 0.0525875, 0.316595, -0.148211, + -0.423713, -0.22462, -0.528986, 0.390866, 0.0439115, -0.274567, + 0.106133, -0.377686, 0.481055, 0.398664, 0.314325, 0.839894, + -0.625382, 0.0543475, -0.201899, 0.198677, 0.0182834, 0.621111, + 0.128773, -0.265686, 0.602337, 0.296946, 0.773769, 0.0479956, + -0.132997, -0.0410526, -0.254838, 0.326185, 0.347585, -0.580061, + 0.405482, 0.101755, -0.201249, 0.306534, 0.469578, -0.111657, + -0.796765, -0.0773768, -0.538891, 0.206104, -0.0794146, 0.098465, + 0.413728, 0.0259771, -0.823897, 0.0925169, 0.88273, -0.184931, + -0.134422, -0.247737, -0.682095, 0.177566, 0.299386, -0.329205, + 0.0488276, 0.504052, 0.268825, 0.395508, -1.10225, 0.101069, + -0.0408943, -0.580797, -0.00804806, -0.402047, -0.418787, 0.697977, + -0.308492, -0.122199, 0.628944, 0.54588, 0.0622768, -0.488552, + 0.0474367, 0.215963, -0.679212, 0.311237, -0.000920773, -0.721814, + 0.579613, -0.0458724, -0.467233, 0.268248, 0.246741, -0.15576, + 0.0473638, 0.0246596, -0.572414, -0.419131, -0.357526, 0.452787, + -0.112269, 0.710673, -0.41551, 0.429337, 0.0882859, -0.433878, + -0.0818105, -0.180361, 0.36754, -0.49486, 0.449489, -0.837214, + -1.09047, 0.168766, -0.163687, 0.256186, 0.633943, -0.012522, + 0.631576, -0.27161, -0.15392, -0.471082, -0.071748, -0.275351, + -0.134404, 0.126987, -0.478438, -0.144772, -0.38336, 0.37449, + -0.458729, -0.318997, -0.313852, 0.081244, -0.287645, 0.200266, + -0.45997, 0.108317, -0.216842, -0.165177, -0.296687, 0.771041, + 0.933613, 0.617833, -0.263007, -0.236543, -0.406302, 0.241173, + -0.225985, -0.108225, 0.087069, -0.0444767, 0.645569, -0.112983, + -0.689477, 0.498425, 0.0738087, 0.447277, 0.0972104, -0.314627, + 0.393365, -0.0919185, -0.32199, -0.193414, -0.126091, 0.185217, + 0.318475, 0.140509, -0.115877, -0.911059, 0.336104, -0.645395, + 0.00686884, -0.172296, -0.513633, -0.302956, -1.20699, 0.148284, + 0.357629, 0.58123, 0.106886, -0.872183, -0.49183, -0.202535, + -0.869357, 0.0371933, -0.0869231, 0.22624, 0.198995, 0.191016, + 0.151591, 0.347114, 0.056674, -0.213039, -0.228541, -0.473257, + -0.574876, -0.0826995, -0.730448, 0.343791, 0.795006, 0.366191, + 0.419235, -1.11688, 0.227321, -0.0937171, 0.156708, -0.3307, + 0.328026, -0.454046, 0.432153, -0.189323, 0.31821, 0.312532, + 0.0963759, 0.126471, -0.396326, 0.0353236, -0.366891, -0.279321, + 0.106791, 0.0697961, 0.383726, 0.260039, 0.00297499, 0.45812, + -0.544967, -0.230453, -0.150821, -0.374241, -0.739835, 0.462278, + -0.76681, -0.455701, 0.261229, 0.274824, 0.161605, -0.402379, + 0.571192, 0.0844102, -0.47416, 0.683535, 0.144919, -0.134556, + -0.0414159, 0.357005, -0.643226, -0.00324917, -0.173286, 0.770447, + 0.261563, 0.707628, 0.131681, 0.539707, -0.367105, 0.150912, + -0.310055, -0.270554, 0.686523, 0.195065, 0.282361, 0.569649, + 0.106642, 0.296521, 0.185682, 0.124763, 0.182832, 0.42824, + -0.489455, 0.55954, 0.383582, 0.52804, -0.236162, -0.356153, + 0.70445, -0.300133, 1.06101, 0.0289559, 0.4671, -0.0455821, + -1.18106, 0.26797, 0.223324, 0.793996, -0.833809, -0.412982, + -0.443497, -0.634181, -0.000902414, -0.319155, 0.629076, -0.378669, + -0.230422, 0.489184, 0.122302, 0.397895, 0.421496, -0.41475, + 0.192182, -0.477254, -0.32989, 0.285264, -0.0248513, -0.224073, + 0.520192, 0.138148, 0.783388, 0.540348, -0.468401, 0.189778, + 0.327808, 0.387399, 0.0163817, 0.340137, -0.174623, -0.560019, + -0.32246, 0.353305, 0.513422, -0.472848, -0.0151656, 0.0802364, + -0.0833406, 0.000303745, -0.359159, -0.666926, 0.446711, -0.254889, + -0.263977, 0.534997, 0.555322, -0.315034, -0.62762, -0.14342, + -0.78082, 0.29739, 0.0783401, -0.665565, -0.177726, 0.62018, + -0.723053, 0.108446, 0.550657, 0.00324011, 0.387362, -0.251661, + -0.616413, -0.260163, -0.798613, 0.0174665, -0.208833, -0.0398486, + -0.506167, 0.00121689, -0.75707, -0.0326216, 0.30282, 0.085227, + -0.27267, 0.25662, 0.182456, -0.184061, -0.577699, -0.685311, + 0.587003, 0.35393, -0.276868, -0.0617566, -0.365888, 0.673723, + -0.0476918, -0.0914235, 0.560627, -0.387913, -0.194537, 0.135256, + -0.0808623, 0.315394, -0.0383463, 0.267406, 0.545766, -0.659403, + -0.410556, 0.305285, 0.0364261, 0.396365, -0.284096, 0.137003, + 0.611792, 0.191185, 0.440866, 0.87738, 0.470405, -0.372227, + -0.84977, 0.676291, -0.0709138, -0.456707, 0.222892, -0.728947, + 0.2414, 0.109269, 0.707531, 0.027894, -0.381266, -0.1872, + -0.674006, -0.441284, -0.151681, -0.695721, 0.360165, -0.397063, + 0.02772, 0.271526, -0.170258, -0.198509, 0.524165, 0.29589, + -0.895699, -0.266005, 0.0971003, 0.640709, -0.169635, 0.0263381, + -0.779951, -0.37692, -0.703577, 0.00526047, -0.822414, -0.152364, + 0.10004, 0.194787, 0.453202, -0.495236, 1.01192, -0.682168, + -0.453866, 0.387515, -0.355192, 0.214262, 0.2677, -0.263514, + 0.334733, 0.683574, 0.181592, 0.599759, -0.182972, 0.402297, + -0.319075, 0.553958, -0.990873, -0.143754, 0.506054, 0.0535431, + -0.647583, 0.53928, -0.510285, 0.452258, -0.796479, 0.186279, + -0.0960782, -0.124537, 0.509105, -0.1712, 0.219554, -0.528307, + -0.377211, -0.447177, -0.0283537, 0.856948, -0.128052, 0.482509, + 0.528981, -0.785958, 0.816482, 0.213728, -0.433917, -0.0413878, + -0.997625, 0.228201, -0.113198, 0.425206, 0.0261474, 0.68678, + 0.224967, 0.48489, 0.53184, 0.572936, -0.419627, -0.70428, + -0.216836, 0.57302, 0.640487, -0.172722, 0.237492, -0.390903, + 0.0717416, 0.852097, -0.0422118, 0.151465, -0.638427, 0.132246, + -0.0552788, 0.436714, -0.281931, 0.411517, -0.340499, -0.725834, + -0.478547, 0.332275, -0.0243354, -0.499295, 0.238681, -0.324647, + -0.182754, 0.520306, -0.0762625, 0.631812, -0.652095, -0.504378, + -0.534564, 0.118165, -0.384134, 0.611485, 0.635868, 0.100705, + 0.25619, 0.197184, 0.328731, -0.0750947, -0.763023, 0.516191, + 0.375317, -0.17778, 0.880709, 0.668956, 0.376694, 0.425053, + -0.930982, 0.0534644, -0.0423658, 0.695356, 0.352989, 0.0400925, + 0.383482, 0.188746, 0.0193305, 0.128885, -0.23603, -0.288163, + -0.311799, -0.425027, -0.297739, -0.349681, -0.278894, 0.00934887, + -0.38221, 0.542819, 0.234533, -0.213422, 0.198418, 0.694582, + -0.43395, -0.417672, 0.553686, -0.10748, -0.352711, -0.0115025, + 0.0581546, 0.962054, 0.210576, 0.339536, -0.0818458, -0.358587, + -0.342001, -0.0689676, 0.0470595, -0.3791, 0.212149, -0.00608754, + 0.318279, 0.246769, 0.514428, 0.457749, 0.759536, 0.236433, + 0.422228, 0.571146, -0.247402, 0.667306, -0.558038, -0.158556, + -0.369374, -0.341798, 0.30697, -0.535024, -0.487844, -0.0888073, + 0.404439, -0.580029, 0.457389, 0.297961, -0.0356712, 0.508803, + 0.325652, -0.239089, -0.743984, 0.21902, 0.455838, 0.149938, + -0.150058, 0.342239, 0.147549, -0.044282, -0.634129, 0.266822, + -0.764306, -0.13691, -0.59542, -0.503302, -0.581097, 0.455914, + 0.193022, -0.255091, 0.0782733, 0.354385, 0.181455, -0.579845, + -0.597151, -0.747541, -0.471478, -0.257622, 0.80429, 0.908564, + 0.11331, -0.210526, 0.893246, -0.354708, -0.581153, 0.366957, + 0.000682831, 1.05443, 0.310998, 0.455284, -0.251732, -0.567471, + -0.660306, -0.202108, 0.836359, -0.467352, -0.20453, 0.0710459, + 0.0628843, -0.132979, -0.755594, 0.0600963, 0.725805, -0.221625, + 0.133578, -0.802764, 0.00850201, 0.748137, -0.411616, -0.136451, + 0.0531707, -0.977616, 0.162951, 0.0394506, -0.0480862, 0.797194, + 0.52012, 0.238174, 0.169073, 0.249234, 0.00133944, -0.01138, + 0.107195, 0.0101681, -0.247766, -0.415877, -0.450288, 0.800731}; + jitterTableIndex += 2; + if (jitterTableIndex == jitterTable.size()) { + jitterTableIndex = 0; + } + return Vector2{jitterTable[jitterTableIndex], jitterTable[jitterTableIndex + 1]}; + } + } // namespace draw +} // namespace spades diff --git a/Sources/Draw/GLTemporalAAFilter.h b/Sources/Draw/GLTemporalAAFilter.h new file mode 100644 index 00000000..69a223a3 --- /dev/null +++ b/Sources/Draw/GLTemporalAAFilter.h @@ -0,0 +1,62 @@ +/* + Copyright (c) 2017 yvt + + This file is part of OpenSpades. + + OpenSpades is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenSpades is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenSpades. If not, see . + + */ + +#pragma once + +#include "GLFramebufferManager.h" + +namespace spades { + namespace draw { + class GLRenderer; + class GLProgram; + + /** + * Implementation of the temporal anti-aliasing filter. + * + * The current implementation requires `BlitFramebuffer` for simplicity. + */ + class GLTemporalAAFilter { + GLRenderer &renderer; + GLProgram *program; + + struct HistoryBuffer { + bool valid = false; + int width, height; + + IGLDevice::UInteger framebuffer; + IGLDevice::UInteger texture; + } historyBuffer; + + Matrix4 prevMatrix; + Vector3 prevViewOrigin; + std::size_t jitterTableIndex = 0; + + void DeleteHistoryBuffer(); + + public: + GLTemporalAAFilter(GLRenderer &); + ~GLTemporalAAFilter(); + + Vector2 GetProjectionMatrixJitter(); + + GLColorBuffer Filter(GLColorBuffer, bool useFxaa); + }; + } +} diff --git a/Sources/Draw/GLWaterRenderer.cpp b/Sources/Draw/GLWaterRenderer.cpp index ee89c6a8..12424de3 100644 --- a/Sources/Draw/GLWaterRenderer.cpp +++ b/Sources/Draw/GLWaterRenderer.cpp @@ -472,7 +472,7 @@ namespace spades { tempDepthTexture = device.GenTexture(); device.BindTexture(IGLDevice::Texture2D, tempDepthTexture); device.TexImage2D(IGLDevice::Texture2D, 0, IGLDevice::DepthComponent24, - device.ScreenWidth(), device.ScreenHeight(), 0, + renderer.GetRenderWidth(), renderer.GetRenderHeight(), 0, IGLDevice::DepthComponent, IGLDevice::UnsignedInt, NULL); device.TexParamater(IGLDevice::Texture2D, IGLDevice::TextureMagFilter, IGLDevice::Nearest); diff --git a/Sources/Draw/IGLShadowMapRenderer.h b/Sources/Draw/IGLShadowMapRenderer.h index 9f43325f..3f5404e2 100644 --- a/Sources/Draw/IGLShadowMapRenderer.h +++ b/Sources/Draw/IGLShadowMapRenderer.h @@ -45,10 +45,13 @@ namespace spades { GLRenderer &GetRenderer() { return renderer; } + /** + * Clobbers the current framebuffer binding and viewport rectangle. + */ virtual void Render() = 0; virtual bool Cull(const AABB3 &) = 0; virtual bool SphereCull(const Vector3 ¢er, float rad) = 0; }; } // namespace draw -} // namespace spades \ No newline at end of file +} // namespace spades diff --git a/Sources/Externals/include/ignore b/Sources/Externals/include/ignore deleted file mode 100644 index e69de29b..00000000 diff --git a/Sources/Externals/lib/ignore b/Sources/Externals/lib/ignore deleted file mode 100644 index e69de29b..00000000 diff --git a/Sources/Externals/readme.txt b/Sources/Externals/readme.txt deleted file mode 100644 index d602f9dc..00000000 --- a/Sources/Externals/readme.txt +++ /dev/null @@ -1,72 +0,0 @@ - -When building on Windows or macOS, external dependencies should be placed in this folder. - - -## For Windows users: - -C++ headers go in the 'include' folder, as shown in the file tree below. -Libraries go in the 'lib' folder, without any subfolders. - -This should be the resulting directory structure: - -Externals -| readme.txt (this file) -| -+---include/ -| +---zconf.h -| +---zlib.h -| +---ft2build.h -| | -| +---curl/ -| | \---(All curl headers) -| | -| +---GL/ -| | \---(All GL headers) -| | -| +---freetype/ -| | \---(All FreeType 2.7 headers) -| | -| +---opus/ -| | \---(All libopus/libopusfile/libogg headers) -| | -| \---SDL2/ -| \---(All SD2L headers) -| -\---lib/ - (All libs here) - -You may not need to hunt and compile the headers and libraries all by yourself: - * There are pre-compiled zip files containing all required files for some versions of Visual Studio - * They're already packed in the correct layout. You just need to merge. - -Visual Studio 2015: -https://openspadesmedia.yvt.jp/development-packages/OpenSpades-Externals-Windows-VS2015-3.zip - -Visual Studio 2010 (FreeType, libopus and libopusfile is missing): -https://dl.dropboxusercontent.com/u/37804131/OpenSpades-Externals-Windows.zip - - -## For macOS users: - -C++ headers go in the 'include' folder, as shown in the file tree below. -Libraries and frameworks go in the 'lib' folder, without any subfolders. - -Externals -| readme.txt (this file) -| -+---include/ -| +---ft2build.h -| +---opusfile.h -| | -| +---ogg/ -| | \---(All libogg headers) -| | -| \---freetype/ -| \---(All FreeType 2.7 headers) -| -\---lib/ - (All libs here) - -The following URL provides a pre-compiled zip file containing all required files. - -https://openspadesmedia.yvt.jp/development-packages/OpenSpades-Externals-Darwin-4.zip diff --git a/Sources/Gui/ConsoleScreen.cpp b/Sources/Gui/ConsoleScreen.cpp index d6191ea2..8070c469 100644 --- a/Sources/Gui/ConsoleScreen.cpp +++ b/Sources/Gui/ConsoleScreen.cpp @@ -20,6 +20,8 @@ #include #include +#include + #include "ConfigConsoleResponder.h" #include "ConsoleCommand.h" #include "ConsoleHelper.h" diff --git a/Sources/Gui/Main.cpp b/Sources/Gui/Main.cpp index a9028c09..3c53bad6 100644 --- a/Sources/Gui/Main.cpp +++ b/Sources/Gui/Main.cpp @@ -22,7 +22,7 @@ #include #include -#if !defined(__APPLE__) && (__unix || __unix__) +#if (!defined(__APPLE__) && (__unix || __unix__)) || defined(__HAIKU__) #include #include #endif @@ -428,10 +428,8 @@ int main(int argc, char **argv) { SDL_RWops *io = SDL_RWFromFile( (home + "/.openspades/CONTENT_MOVED_TO_NEW_DIR").c_str(), "wb"); if (io != NULL) { - const char *text = ("Content of this directory moved to " + - xdg_data_home + "/openspades") - .c_str(); - io->write(io, text, strlen(text), 1); + std::string text = ("Content of this directory moved to " + xdg_data_home + "/openspades"); + io->write(io, text.c_str(), text.length(), 1); io->close(io); } } diff --git a/Sources/Gui/SDLRunner.cpp b/Sources/Gui/SDLRunner.cpp index cad9c1eb..c55511d4 100644 --- a/Sources/Gui/SDLRunner.cpp +++ b/Sources/Gui/SDLRunner.cpp @@ -122,7 +122,6 @@ namespace spades { break; case SDL_MOUSEMOTION: if (m_active) { - // FIXME: this might fail with cg_smp if (view.NeedsAbsoluteMouseCoordinate()) { view.MouseEvent(event.motion.x, event.motion.y); } else { @@ -219,7 +218,6 @@ namespace spades { if (view->WantsToBeClosed()) { view->Closing(); - running = false; SPLog("Close requested by Client"); break; } diff --git a/Sources/Gui/StartupScreenHelper.cpp b/Sources/Gui/StartupScreenHelper.cpp index 729a7016..a1e9247c 100644 --- a/Sources/Gui/StartupScreenHelper.cpp +++ b/Sources/Gui/StartupScreenHelper.cpp @@ -72,6 +72,7 @@ SPADES_SETTING(r_vsync); SPADES_SETTING(r_renderer); SPADES_SETTING(r_swUndersampling); SPADES_SETTING(r_hdr); +SPADES_SETTING(r_temporalAA); namespace spades { namespace gui { @@ -325,10 +326,12 @@ namespace spades { "GL_EXT_framebuffer_object", NULL}; - SPLog("--- Extensions ---"); - std::vector strs = spades::Split(str, " "); - for (size_t i = 0; i < strs.size(); i++) { - SPLog("%s", strs[i].c_str()); + if (str) { + SPLog("--- Extensions ---"); + std::vector strs = spades::Split(str, " "); + for (size_t i = 0; i < strs.size(); i++) { + SPLog("%s", strs[i].c_str()); + } } SPLog("------------------"); @@ -372,6 +375,10 @@ namespace spades { r_multisamples = 0; SPLog("Disabling r_multisamples: no GL_EXT_framebuffer_blit"); } + if (r_temporalAA) { + r_temporalAA = 0; + SPLog("Disabling r_temporalAA: no GL_EXT_framebuffer_blit"); + } incapableConfigs.insert( std::make_pair("r_blitFramebuffer", [](std::string value) -> std::string { if (std::stoi(value) != 0) { @@ -381,6 +388,15 @@ namespace spades { return std::string(); } })); + incapableConfigs.insert( + std::make_pair("r_temporalAA", [](std::string value) -> std::string { + if (std::stoi(value) != 0) { + return "r_temporalAA is disabled because your video card " + "doesn't support GL_EXT_framebuffer_blit."; + } else { + return std::string(); + } + })); AddReport("GL_EXT_framebuffer_blit is NOT SUPPORTED", MakeVector4(1.f, 1.f, 0.5f, 1.f)); @@ -662,6 +678,8 @@ namespace spades { return "FreeBSD"; #elif defined(__OpenBSD__) return "OpenBSD"; +#elif defined(__HAIKU__) + return "Haiku"; #else return std::string{}; #endif diff --git a/Sources/Imports/OpenGL.h b/Sources/Imports/OpenGL.h index d63a5bdd..cffcbace 100644 --- a/Sources/Imports/OpenGL.h +++ b/Sources/Imports/OpenGL.h @@ -10,6 +10,7 @@ // TODO: support other platform #if __APPLE__ +#define GL_SILENCE_DEPRECATION 1 #include #include #else @@ -20,4 +21,4 @@ # define GL_ANY_SAMPLES_PASSED 0x8C2F #endif -#endif \ No newline at end of file +#endif diff --git a/Sources/ScriptBindings/IWeaponSkin.cpp b/Sources/ScriptBindings/IWeaponSkin.cpp index a19962d6..5c99d7e6 100644 --- a/Sources/ScriptBindings/IWeaponSkin.cpp +++ b/Sources/ScriptBindings/IWeaponSkin.cpp @@ -235,6 +235,7 @@ namespace spades{ r = eng->RegisterInterfaceMethod("IWeaponSkin2", "void SetSoundEnvironment(float, float, float)"); + manager->CheckError(r); r = eng->RegisterInterfaceMethod("IWeaponSkin2", "void set_SoundOrigin(Vector3)"); manager->CheckError(r); diff --git a/Sources/binpack2d/binpack2d.hpp b/Sources/binpack2d/binpack2d.hpp index 6fecc9be..51d1dbab 100644 --- a/Sources/binpack2d/binpack2d.hpp +++ b/Sources/binpack2d/binpack2d.hpp @@ -217,13 +217,6 @@ public: /*const*/ Size size; /*const*/ _T content; - Content( const Content<_T> &src ) - : rotated(src.rotated), - coord(src.coord), - size(src.size), - content(src.content) - {} - Content( const _T &content, const Coord &coord, const Size &size, bool rotated ) : rotated(rotated), diff --git a/XSpades/XSpades.entitlements b/XSpades/XSpades.entitlements deleted file mode 100644 index 0c67376e..00000000 --- a/XSpades/XSpades.entitlements +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/cmake/FindSDL2.cmake b/cmake/FindSDL2.cmake index 8563ae12..7a724f42 100644 --- a/cmake/FindSDL2.cmake +++ b/cmake/FindSDL2.cmake @@ -83,6 +83,7 @@ FIND_PATH(SDL2_INCLUDE_DIR SDL_render.h /usr/include/SDL2 /sw # Fink /opt/local/include/SDL2 # DarwinPorts + /opt/homebrew/include/SDL2 /opt/csw # Blastwave /opt ) @@ -96,6 +97,7 @@ FIND_LIBRARY(SDL2_LIBRARY_TEMP PATHS /sw /opt/local + /opt/homebrew /opt/csw /opt ) diff --git a/crowdin-download.sh b/crowdin-download.sh index 87922135..43e30e75 100755 --- a/crowdin-download.sh +++ b/crowdin-download.sh @@ -34,3 +34,8 @@ remap ru_RU ru remap uk_UA uk remap vi_VN vi remap hu_HU hu +remap lt_LT lt +remap nb_NO nb +remap nn_NO nn +remap tr_TR tr +remap jbo_EN jbo diff --git a/crowdin.yml b/crowdin.yml index d787987b..9bca0ddb 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -2,6 +2,7 @@ # Your crowdin's credentials # "project_identifier" : "openspades" +"project_id" : "246828" "api_key" : "" "base_path" : "" #"base_url" : "" @@ -35,12 +36,6 @@ files: [ # #"ignore" : [], - # - # The dest allows you to specify a file name on Crowdin - # e.g. "/messages.json" - # - "dest" : "/master/openspades.pot", - # # File type # e.g. "json" diff --git a/vcpkg b/vcpkg new file mode 160000 index 00000000..81b67c38 --- /dev/null +++ b/vcpkg @@ -0,0 +1 @@ +Subproject commit 81b67c387848731aefacc19aea7f41364e5d5ba2 diff --git a/vcpkg_x86-windows.txt b/vcpkg_x86-windows.txt new file mode 100644 index 00000000..be286865 --- /dev/null +++ b/vcpkg_x86-windows.txt @@ -0,0 +1,9 @@ +freetype:x86-windows-static +opusfile:x86-windows-static +opus:x86-windows-static +libogg:x86-windows-static +sdl2:x86-windows-static +libjpeg-turbo:x86-windows-static +sdl2-image[libjpeg-turbo]:x86-windows-static +glew:x86-windows-static +curl:x86-windows-static diff --git a/vcpkg_x86_64-darwin.txt b/vcpkg_x86_64-darwin.txt new file mode 100644 index 00000000..2f7d1ee6 --- /dev/null +++ b/vcpkg_x86_64-darwin.txt @@ -0,0 +1,6 @@ +freetype +opusfile +opus +libogg +sdl2 +sdl2-image