Merge branch 'master' into Translation
2
.github/workflows/build.yml
vendored
|
@ -10,6 +10,8 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
build-cmake:
|
build-cmake:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
env:
|
||||||
|
CARGO_HTTP_MULTIPLEXING: false
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
|
9
.github/workflows/clang-sanitizer.yml
vendored
|
@ -11,6 +11,8 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
check-clang-san:
|
check-clang-san:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
CARGO_HTTP_MULTIPLEXING: false
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
|
@ -24,14 +26,17 @@ jobs:
|
||||||
uses: Swatinem/rust-cache@v2
|
uses: Swatinem/rust-cache@v2
|
||||||
- name: Build with ASan and UBSan
|
- name: Build with ASan and UBSan
|
||||||
run: |
|
run: |
|
||||||
|
mkdir clang-sanitizer
|
||||||
|
cd clang-sanitizer
|
||||||
export CC=clang
|
export CC=clang
|
||||||
export CXX=clang++
|
export CXX=clang++
|
||||||
export CXXFLAGS="-fsanitize=address,undefined -fsanitize-recover=address,undefined -fno-omit-frame-pointer"
|
export CXXFLAGS="-fsanitize=address,undefined -fsanitize-recover=address,undefined -fno-omit-frame-pointer"
|
||||||
export CFLAGS="-fsanitize=address,undefined -fsanitize-recover=address,undefined -fno-omit-frame-pointer"
|
export CFLAGS="-fsanitize=address,undefined -fsanitize-recover=address,undefined -fno-omit-frame-pointer"
|
||||||
cmake -DCMAKE_BUILD_TYPE=Debug -DHEADLESS_CLIENT=ON -Werror=dev -DDOWNLOAD_GTEST=ON -DDEV=ON -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=. .
|
cmake -DCMAKE_BUILD_TYPE=Debug -DHEADLESS_CLIENT=ON -Werror=dev -DDOWNLOAD_GTEST=ON -DDEV=ON -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=. ..
|
||||||
make -j"$(nproc)"
|
make -j"$(nproc)"
|
||||||
- name: Run server and headless client with ASan and UBSan
|
- name: Run server and headless client with ASan and UBSan
|
||||||
run: |
|
run: |
|
||||||
|
cd clang-sanitizer
|
||||||
export UBSAN_OPTIONS=suppressions=./ubsan.supp:log_path=./SAN:print_stacktrace=1:halt_on_errors=0
|
export UBSAN_OPTIONS=suppressions=./ubsan.supp:log_path=./SAN:print_stacktrace=1:halt_on_errors=0
|
||||||
export ASAN_OPTIONS=log_path=./SAN:print_stacktrace=1:check_initialization_order=1:detect_leaks=1:halt_on_errors=0
|
export ASAN_OPTIONS=log_path=./SAN:print_stacktrace=1:check_initialization_order=1:detect_leaks=1:halt_on_errors=0
|
||||||
export LSAN_OPTIONS=suppressions=./lsan.supp
|
export LSAN_OPTIONS=suppressions=./lsan.supp
|
||||||
|
@ -44,6 +49,7 @@ jobs:
|
||||||
fi
|
fi
|
||||||
- name: Run unit tests with ASan and UBSan
|
- name: Run unit tests with ASan and UBSan
|
||||||
run: |
|
run: |
|
||||||
|
cd clang-sanitizer
|
||||||
cmake --build . --config Debug --target run_cxx_tests
|
cmake --build . --config Debug --target run_cxx_tests
|
||||||
# Rust tests work locally, but still not in CI, even with the same directory
|
# Rust tests work locally, but still not in CI, even with the same directory
|
||||||
if test -n "$(find . -maxdepth 1 -name 'SAN.*' -print -quit)"
|
if test -n "$(find . -maxdepth 1 -name 'SAN.*' -print -quit)"
|
||||||
|
@ -53,6 +59,7 @@ jobs:
|
||||||
fi
|
fi
|
||||||
- name: Run integration tests with ASan and UBSan
|
- name: Run integration tests with ASan and UBSan
|
||||||
run: |
|
run: |
|
||||||
|
cd clang-sanitizer
|
||||||
make run_integration_tests
|
make run_integration_tests
|
||||||
if test -n "$(find . -maxdepth 1 -name 'SAN.*' -print -quit)"
|
if test -n "$(find . -maxdepth 1 -name 'SAN.*' -print -quit)"
|
||||||
then
|
then
|
||||||
|
|
2
.github/workflows/clang-tidy.yml
vendored
|
@ -11,6 +11,8 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
check-clang-tidy:
|
check-clang-tidy:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
CARGO_HTTP_MULTIPLEXING: false
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
|
|
2
.github/workflows/codeql-analysis.yml
vendored
|
@ -18,6 +18,8 @@ jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze
|
name: Analyze
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
CARGO_HTTP_MULTIPLEXING: false
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
4
.github/workflows/rust.yml
vendored
|
@ -10,6 +10,8 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
rustdoc:
|
rustdoc:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
CARGO_HTTP_MULTIPLEXING: false
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Cache Rust dependencies
|
- name: Cache Rust dependencies
|
||||||
|
@ -28,6 +30,8 @@ jobs:
|
||||||
|
|
||||||
cargo-deny:
|
cargo-deny:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
CARGO_HTTP_MULTIPLEXING: false
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
checks:
|
checks:
|
||||||
|
|
183
CMakeLists.txt
|
@ -1,7 +1,4 @@
|
||||||
cmake_minimum_required(VERSION 2.8.12...3.19.1)
|
cmake_minimum_required(VERSION 3.12...3.27.4)
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.12)
|
|
||||||
cmake_policy(VERSION ${CMAKE_VERSION})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15 CACHE INTERNAL "Minimum macOS deployment version")
|
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15 CACHE INTERNAL "Minimum macOS deployment version")
|
||||||
if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.15)
|
if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.15)
|
||||||
|
@ -26,16 +23,6 @@ else()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Extra support for CMake pre-3.0
|
# Extra support for CMake pre-3.0
|
||||||
if(NOT POLICY CMP0048)
|
|
||||||
set(PROJECT_VERSION_MAJOR ${VERSION_MAJOR})
|
|
||||||
set(PROJECT_VERSION_MINOR ${VERSION_MINOR})
|
|
||||||
set(PROJECT_VERSION_PATCH ${VERSION_PATCH})
|
|
||||||
if(VERSION_PATCH STREQUAL "0")
|
|
||||||
set(PROJECT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR})
|
|
||||||
else()
|
|
||||||
set(PROJECT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
if(VERSION_PATCH STREQUAL "0")
|
if(VERSION_PATCH STREQUAL "0")
|
||||||
project(DDNet VERSION ${VERSION_MAJOR}.${VERSION_MINOR})
|
project(DDNet VERSION ${VERSION_MAJOR}.${VERSION_MINOR})
|
||||||
else()
|
else()
|
||||||
|
@ -165,26 +152,19 @@ endif()
|
||||||
set(DBG $<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>)
|
set(DBG $<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>)
|
||||||
|
|
||||||
if(IPO)
|
if(IPO)
|
||||||
if(CMAKE_VERSION VERSION_GREATER 3.9)
|
include(CheckIPOSupported)
|
||||||
include(CheckIPOSupported)
|
check_ipo_supported(RESULT ipo_supported OUTPUT ipo_output)
|
||||||
check_ipo_supported(RESULT ipo_supported OUTPUT ipo_output)
|
if(ipo_supported)
|
||||||
if(ipo_supported)
|
message(STATUS "IPO is enabled")
|
||||||
message(STATUS "IPO is enabled")
|
set(ENABLE_IPO TRUE)
|
||||||
set(ENABLE_IPO TRUE)
|
|
||||||
else()
|
|
||||||
message(WARNING "IPO is not supported: ${ipo_output}")
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
message(WARNING "IPO enablement requires CMake 3.9+")
|
message(WARNING "IPO is not supported: ${ipo_output}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.0)
|
if(NOT "${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
configure_file(src/game/version.h vd.h)
|
# Remove version.h generated by previous build code
|
||||||
else()
|
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/src/game/version.h)
|
||||||
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
|
|
||||||
src/game/version.h
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(SERVER_EXECUTABLE DDNet-Server CACHE STRING "Name of the built server executable")
|
set(SERVER_EXECUTABLE DDNet-Server CACHE STRING "Name of the built server executable")
|
||||||
|
@ -290,7 +270,7 @@ if(NOT MSVC AND NOT HAIKU)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.1 OR TARGET_OS STREQUAL "mac")
|
if(TARGET_OS STREQUAL "mac")
|
||||||
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -std=gnu++17)
|
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -std=gnu++17)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -330,12 +310,6 @@ if(NOT MSVC AND NOT HAIKU)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -Wall)
|
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -Wall)
|
||||||
if(CMAKE_VERSION VERSION_GREATER 3.3 OR CMAKE_VERSION VERSION_EQUAL 3.3)
|
|
||||||
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN
|
|
||||||
$<$<COMPILE_LANGUAGE:C>:-Wdeclaration-after-statement>
|
|
||||||
-Wdeclaration-after-statement
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -Wextra)
|
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -Wextra)
|
||||||
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -Wno-psabi) # parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<CCommandProcessorFragment_Vulkan::SMemoryBlock<1>*, std::vector<CCommandProcessorFragment_Vulkan::SMemoryBlock<1>, std::allocator<CCommandProcessorFragment_Vulkan::SMemoryBlock<1> > > >’ changed in GCC 7.1
|
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -Wno-psabi) # parameter passing for argument of type ‘__gnu_cxx::__normal_iterator<CCommandProcessorFragment_Vulkan::SMemoryBlock<1>*, std::vector<CCommandProcessorFragment_Vulkan::SMemoryBlock<1>, std::allocator<CCommandProcessorFragment_Vulkan::SMemoryBlock<1> > > >’ changed in GCC 7.1
|
||||||
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -Wno-unused-parameter)
|
add_cxx_compiler_flag_if_supported(OUR_FLAGS_OWN -Wno-unused-parameter)
|
||||||
|
@ -387,28 +361,25 @@ function(set_glob VAR GLOBBING EXTS DIRECTORY) # ...
|
||||||
if(NOT FILES STREQUAL GLOB_RESULT)
|
if(NOT FILES STREQUAL GLOB_RESULT)
|
||||||
message(AUTHOR_WARNING "${VAR} does not contain every file from directory ${DIRECTORY}")
|
message(AUTHOR_WARNING "${VAR} does not contain every file from directory ${DIRECTORY}")
|
||||||
set(LIST_BUT_NOT_GLOB)
|
set(LIST_BUT_NOT_GLOB)
|
||||||
if(POLICY CMP0057)
|
foreach(file ${FILES})
|
||||||
cmake_policy(SET CMP0057 NEW)
|
if(NOT file IN_LIST GLOB_RESULT)
|
||||||
foreach(file ${FILES})
|
list(APPEND LIST_BUT_NOT_GLOB ${file})
|
||||||
if(NOT file IN_LIST GLOB_RESULT)
|
|
||||||
list(APPEND LIST_BUT_NOT_GLOB ${file})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
if(LIST_BUT_NOT_GLOB)
|
|
||||||
message(AUTHOR_WARNING "Entries only present in ${VAR}: ${LIST_BUT_NOT_GLOB}")
|
|
||||||
endif()
|
endif()
|
||||||
set(GLOB_BUT_NOT_LIST)
|
endforeach()
|
||||||
foreach(file ${GLOB_RESULT})
|
if(LIST_BUT_NOT_GLOB)
|
||||||
if(NOT file IN_LIST FILES)
|
message(AUTHOR_WARNING "Entries only present in ${VAR}: ${LIST_BUT_NOT_GLOB}")
|
||||||
list(APPEND GLOB_BUT_NOT_LIST ${file})
|
endif()
|
||||||
endif()
|
set(GLOB_BUT_NOT_LIST)
|
||||||
endforeach()
|
foreach(file ${GLOB_RESULT})
|
||||||
if(GLOB_BUT_NOT_LIST)
|
if(NOT file IN_LIST FILES)
|
||||||
message(AUTHOR_WARNING "Entries only present in ${DIRECTORY}: ${GLOB_BUT_NOT_LIST}")
|
list(APPEND GLOB_BUT_NOT_LIST ${file})
|
||||||
endif()
|
|
||||||
if(NOT LIST_BUT_NOT_GLOB AND NOT GLOB_BUT_NOT_LIST)
|
|
||||||
message(AUTHOR_WARNING "${VAR} is not alphabetically sorted")
|
|
||||||
endif()
|
endif()
|
||||||
|
endforeach()
|
||||||
|
if(GLOB_BUT_NOT_LIST)
|
||||||
|
message(AUTHOR_WARNING "Entries only present in ${DIRECTORY}: ${GLOB_BUT_NOT_LIST}")
|
||||||
|
endif()
|
||||||
|
if(NOT LIST_BUT_NOT_GLOB AND NOT GLOB_BUT_NOT_LIST)
|
||||||
|
message(AUTHOR_WARNING "${VAR} is not alphabetically sorted")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -424,19 +395,11 @@ set(CHECKSUM_SRC)
|
||||||
|
|
||||||
function(set_own_rpath TARGET)
|
function(set_own_rpath TARGET)
|
||||||
if(NOT TARGET_OS STREQUAL "windows" AND NOT TARGET_OS STREQUAL "mac")
|
if(NOT TARGET_OS STREQUAL "windows" AND NOT TARGET_OS STREQUAL "mac")
|
||||||
if(CMAKE_VERSION VERSION_GREATER 3.8 OR CMAKE_VERSION VERSION_EQUAL 3.8)
|
set_property(TARGET ${TARGET} PROPERTY BUILD_RPATH "$ORIGIN")
|
||||||
set_property(TARGET ${TARGET} PROPERTY BUILD_RPATH "$ORIGIN")
|
|
||||||
endif()
|
|
||||||
set_property(TARGET ${TARGET} PROPERTY INSTALL_RPATH "$ORIGIN/../lib/ddnet")
|
set_property(TARGET ${TARGET} PROPERTY INSTALL_RPATH "$ORIGIN/../lib/ddnet")
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
if(NOT TARGET_OS STREQUAL "windows" AND NOT TARGET_OS STREQUAL "mac" AND CMAKE_VERSION VERSION_LESS 3.8)
|
|
||||||
if((CLIENT AND (STEAM OR DISCORD_DYNAMIC)) OR ANTIBOT)
|
|
||||||
message(STATUS "Can't set BUILD_RPATH in CMake before 3.8, pass -Wl,-rpath,'$ORIGIN' manually if you wish to emulate this. Or just install a newer version of CMake...")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# INITIALIZE TARGET LISTS
|
# INITIALIZE TARGET LISTS
|
||||||
########################################################################
|
########################################################################
|
||||||
|
@ -834,9 +797,6 @@ if(NOT(GTEST_FOUND) AND DOWNLOAD_GTEST)
|
||||||
|
|
||||||
set(GTEST_LIBRARIES gtest gmock)
|
set(GTEST_LIBRARIES gtest gmock)
|
||||||
set(GTEST_INCLUDE_DIRS)
|
set(GTEST_INCLUDE_DIRS)
|
||||||
if(CMAKE_VERSION VERSION_LESS 2.8.11)
|
|
||||||
set(GTEST_INCLUDE_DIRS "${gtest_SOURCE_DIR}/include" "${gmock_SOURCE_DIR}/include")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
@ -1222,8 +1182,11 @@ set(EXPECTED_DATA
|
||||||
countryflags/EG.png
|
countryflags/EG.png
|
||||||
countryflags/EH.png
|
countryflags/EH.png
|
||||||
countryflags/ER.png
|
countryflags/ER.png
|
||||||
|
countryflags/ES-CT.png
|
||||||
|
countryflags/ES-GA.png
|
||||||
countryflags/ES.png
|
countryflags/ES.png
|
||||||
countryflags/ET.png
|
countryflags/ET.png
|
||||||
|
countryflags/EU.png
|
||||||
countryflags/FI.png
|
countryflags/FI.png
|
||||||
countryflags/FJ.png
|
countryflags/FJ.png
|
||||||
countryflags/FK.png
|
countryflags/FK.png
|
||||||
|
@ -1231,6 +1194,10 @@ set(EXPECTED_DATA
|
||||||
countryflags/FO.png
|
countryflags/FO.png
|
||||||
countryflags/FR.png
|
countryflags/FR.png
|
||||||
countryflags/GA.png
|
countryflags/GA.png
|
||||||
|
countryflags/GB-ENG.png
|
||||||
|
countryflags/GB-NIR.png
|
||||||
|
countryflags/GB-SCT.png
|
||||||
|
countryflags/GB-WLS.png
|
||||||
countryflags/GB.png
|
countryflags/GB.png
|
||||||
countryflags/GD.png
|
countryflags/GD.png
|
||||||
countryflags/GE.png
|
countryflags/GE.png
|
||||||
|
@ -1396,13 +1363,6 @@ set(EXPECTED_DATA
|
||||||
countryflags/VU.png
|
countryflags/VU.png
|
||||||
countryflags/WF.png
|
countryflags/WF.png
|
||||||
countryflags/WS.png
|
countryflags/WS.png
|
||||||
countryflags/XCA.png
|
|
||||||
countryflags/XEN.png
|
|
||||||
countryflags/XEU.png
|
|
||||||
countryflags/XGL.png
|
|
||||||
countryflags/XNI.png
|
|
||||||
countryflags/XSC.png
|
|
||||||
countryflags/XWA.png
|
|
||||||
countryflags/YE.png
|
countryflags/YE.png
|
||||||
countryflags/ZA.png
|
countryflags/ZA.png
|
||||||
countryflags/ZM.png
|
countryflags/ZM.png
|
||||||
|
@ -1411,14 +1371,25 @@ set(EXPECTED_DATA
|
||||||
countryflags/index.txt
|
countryflags/index.txt
|
||||||
debug_font.png
|
debug_font.png
|
||||||
editor/audio_source.png
|
editor/audio_source.png
|
||||||
|
editor/automap/basic_freeze.rules
|
||||||
|
editor/automap/ddmax_freeze.rules
|
||||||
|
editor/automap/ddnet_tiles.rules
|
||||||
|
editor/automap/ddnet_walls.rules
|
||||||
|
editor/automap/desert_main.rules
|
||||||
|
editor/automap/fadeout.rules
|
||||||
|
editor/automap/generic_clear.rules
|
||||||
|
editor/automap/generic_unhookable.rules
|
||||||
|
editor/automap/generic_unhookable_0.7.rules
|
||||||
|
editor/automap/grass_main.rules
|
||||||
|
editor/automap/grass_main_0.7.rules
|
||||||
|
editor/automap/jungle_main.rules
|
||||||
|
editor/automap/jungle_midground.rules
|
||||||
|
editor/automap/round_tiles.rules
|
||||||
|
editor/automap/water.rules
|
||||||
|
editor/automap/winter_main.rules
|
||||||
editor/background.png
|
editor/background.png
|
||||||
editor/basic_freeze.rules
|
|
||||||
editor/checker.png
|
editor/checker.png
|
||||||
editor/cursor.png
|
editor/cursor.png
|
||||||
editor/ddmax_freeze.rules
|
|
||||||
editor/ddnet_tiles.rules
|
|
||||||
editor/ddnet_walls.rules
|
|
||||||
editor/desert_main.rules
|
|
||||||
editor/entities/DDNet.png
|
editor/entities/DDNet.png
|
||||||
editor/entities/FNG.png
|
editor/entities/FNG.png
|
||||||
editor/entities/Race.png
|
editor/entities/Race.png
|
||||||
|
@ -1431,23 +1402,12 @@ set(EXPECTED_DATA
|
||||||
editor/entities_clear/fng.png
|
editor/entities_clear/fng.png
|
||||||
editor/entities_clear/race.png
|
editor/entities_clear/race.png
|
||||||
editor/entities_clear/vanilla.png
|
editor/entities_clear/vanilla.png
|
||||||
editor/fadeout.rules
|
|
||||||
editor/front.png
|
editor/front.png
|
||||||
editor/generic_clear.rules
|
|
||||||
editor/generic_unhookable.rules
|
|
||||||
editor/generic_unhookable_0.7.rules
|
|
||||||
editor/grass_main.rules
|
|
||||||
editor/grass_main_0.7.rules
|
|
||||||
editor/jungle_main.rules
|
|
||||||
editor/jungle_midground.rules
|
|
||||||
editor/round_tiles.rules
|
|
||||||
editor/speed_arrow.png
|
editor/speed_arrow.png
|
||||||
editor/speedup.png
|
editor/speedup.png
|
||||||
editor/switch.png
|
editor/switch.png
|
||||||
editor/tele.png
|
editor/tele.png
|
||||||
editor/tune.png
|
editor/tune.png
|
||||||
editor/water.rules
|
|
||||||
editor/winter_main.rules
|
|
||||||
emoticons.png
|
emoticons.png
|
||||||
extras.png
|
extras.png
|
||||||
fonts/DejaVuSans.ttf
|
fonts/DejaVuSans.ttf
|
||||||
|
@ -2019,6 +1979,7 @@ set_src(ENGINE_GFX GLOB src/engine/gfx
|
||||||
image_manipulation.h
|
image_manipulation.h
|
||||||
)
|
)
|
||||||
set_src(GAME_SHARED GLOB src/game
|
set_src(GAME_SHARED GLOB src/game
|
||||||
|
alloc.h
|
||||||
collision.cpp
|
collision.cpp
|
||||||
collision.h
|
collision.h
|
||||||
ddracechat.h
|
ddracechat.h
|
||||||
|
@ -2303,7 +2264,7 @@ if(CLIENT)
|
||||||
ui_scrollregion.cpp
|
ui_scrollregion.cpp
|
||||||
ui_scrollregion.h
|
ui_scrollregion.h
|
||||||
)
|
)
|
||||||
set_src(GAME_EDITOR GLOB src/game/editor
|
set_src(GAME_EDITOR GLOB_RECURSE src/game/editor
|
||||||
auto_map.cpp
|
auto_map.cpp
|
||||||
auto_map.h
|
auto_map.h
|
||||||
component.cpp
|
component.cpp
|
||||||
|
@ -2311,20 +2272,32 @@ if(CLIENT)
|
||||||
editor.cpp
|
editor.cpp
|
||||||
editor.h
|
editor.h
|
||||||
explanations.cpp
|
explanations.cpp
|
||||||
io.cpp
|
|
||||||
layer_game.cpp
|
|
||||||
layer_quads.cpp
|
|
||||||
layer_sounds.cpp
|
|
||||||
layer_tiles.cpp
|
|
||||||
map_grid.cpp
|
map_grid.cpp
|
||||||
map_grid.h
|
map_grid.h
|
||||||
map_view.cpp
|
map_view.cpp
|
||||||
map_view.h
|
map_view.h
|
||||||
|
mapitems/image.cpp
|
||||||
|
mapitems/image.h
|
||||||
|
mapitems/layer_front.cpp
|
||||||
|
mapitems/layer_game.cpp
|
||||||
|
mapitems/layer_group.cpp
|
||||||
|
mapitems/layer_quads.cpp
|
||||||
|
mapitems/layer_sounds.cpp
|
||||||
|
mapitems/layer_speedup.cpp
|
||||||
|
mapitems/layer_switch.cpp
|
||||||
|
mapitems/layer_tele.cpp
|
||||||
|
mapitems/layer_tiles.cpp
|
||||||
|
mapitems/layer_tune.cpp
|
||||||
|
mapitems/map.cpp
|
||||||
|
mapitems/map_io.cpp
|
||||||
|
mapitems/sound.cpp
|
||||||
|
mapitems/sound.h
|
||||||
popups.cpp
|
popups.cpp
|
||||||
proof_mode.cpp
|
proof_mode.cpp
|
||||||
proof_mode.h
|
proof_mode.h
|
||||||
smooth_value.cpp
|
smooth_value.cpp
|
||||||
smooth_value.h
|
smooth_value.h
|
||||||
|
tileart.cpp
|
||||||
)
|
)
|
||||||
set(GAME_GENERATED_CLIENT
|
set(GAME_GENERATED_CLIENT
|
||||||
src/game/generated/checksum.cpp
|
src/game/generated/checksum.cpp
|
||||||
|
@ -2508,7 +2481,6 @@ if(SERVER)
|
||||||
upnp.h
|
upnp.h
|
||||||
)
|
)
|
||||||
set_src(GAME_SERVER GLOB_RECURSE src/game/server
|
set_src(GAME_SERVER GLOB_RECURSE src/game/server
|
||||||
alloc.h
|
|
||||||
ddracechat.cpp
|
ddracechat.cpp
|
||||||
ddracecommands.cpp
|
ddracecommands.cpp
|
||||||
entities/character.cpp
|
entities/character.cpp
|
||||||
|
@ -3078,8 +3050,6 @@ endif()
|
||||||
|
|
||||||
if(DEV)
|
if(DEV)
|
||||||
# Don't generate CPack targets.
|
# Don't generate CPack targets.
|
||||||
elseif(CMAKE_VERSION VERSION_LESS 3.6 OR CMAKE_VERSION VERSION_EQUAL 3.6)
|
|
||||||
message(WARNING "Cannot create CPack targets, CMake version too old. Use CMake 3.6 or newer.")
|
|
||||||
else()
|
else()
|
||||||
set(EXTRA_ARGS DESTINATION ${CPACK_PACKAGE_FILE_NAME} COMPONENT portable EXCLUDE_FROM_ALL)
|
set(EXTRA_ARGS DESTINATION ${CPACK_PACKAGE_FILE_NAME} COMPONENT portable EXCLUDE_FROM_ALL)
|
||||||
install(TARGETS ${CPACK_TARGETS} ${EXTRA_ARGS})
|
install(TARGETS ${CPACK_TARGETS} ${EXTRA_ARGS})
|
||||||
|
@ -3309,11 +3279,9 @@ foreach(target ${TARGETS_LINK})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
foreach(target ${TARGETS_OWN})
|
foreach(target ${TARGETS_OWN})
|
||||||
if((CMAKE_VERSION VERSION_GREATER 3.1 OR CMAKE_VERSION VERSION_EQUAL 3.1))
|
set_property(TARGET ${target} PROPERTY CXX_STANDARD 17)
|
||||||
set_property(TARGET ${target} PROPERTY CXX_STANDARD 17)
|
set_property(TARGET ${target} PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||||
set_property(TARGET ${target} PROPERTY CXX_STANDARD_REQUIRED ON)
|
set_property(TARGET ${target} PROPERTY CXX_EXTENSIONS OFF)
|
||||||
set_property(TARGET ${target} PROPERTY CXX_EXTENSIONS OFF)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
target_compile_options(${target} PRIVATE /wd4244) # Possible loss of data (float -> int, int -> float, etc.).
|
target_compile_options(${target} PRIVATE /wd4244) # Possible loss of data (float -> int, int -> float, etc.).
|
||||||
|
@ -3377,9 +3345,6 @@ foreach(target ${TARGETS_OWN})
|
||||||
target_compile_definitions(${target} PRIVATE CONF_DISCORD_DYNAMIC)
|
target_compile_definitions(${target} PRIVATE CONF_DISCORD_DYNAMIC)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(VERSION)
|
|
||||||
target_compile_definitions(${target} PRIVATE GAME_RELEASE_VERSION="${VERSION}")
|
|
||||||
endif()
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
|
if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
|
||||||
target_compile_definitions(${target} PRIVATE CONF_WEBASM)
|
target_compile_definitions(${target} PRIVATE CONF_WEBASM)
|
||||||
endif()
|
endif()
|
||||||
|
|
Before Width: | Height: | Size: 740 B After Width: | Height: | Size: 740 B |
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 814 B After Width: | Height: | Size: 814 B |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.8 KiB |
|
@ -6,30 +6,30 @@
|
||||||
default
|
default
|
||||||
== -1
|
== -1
|
||||||
|
|
||||||
XEN
|
##### ISO 3166-2 subdivisions #####
|
||||||
|
|
||||||
|
GB-ENG
|
||||||
== 901
|
== 901
|
||||||
|
|
||||||
XNI
|
GB-NIR
|
||||||
== 902
|
== 902
|
||||||
|
|
||||||
XSC
|
GB-SCT
|
||||||
== 903
|
== 903
|
||||||
|
|
||||||
XWA
|
GB-WLS
|
||||||
== 904
|
== 904
|
||||||
|
|
||||||
XEU
|
ES-CT
|
||||||
== 905
|
|
||||||
|
|
||||||
XCA
|
|
||||||
== 906
|
== 906
|
||||||
|
|
||||||
XGL
|
ES-GA
|
||||||
== 907
|
== 907
|
||||||
|
|
||||||
#south sudan, non official code#
|
##### ISO 3166/MA exceptional reservations #####
|
||||||
SS
|
|
||||||
== 737
|
EU
|
||||||
|
== 905
|
||||||
|
|
||||||
##### ISO 3166-1 based #####
|
##### ISO 3166-1 based #####
|
||||||
|
|
||||||
|
@ -648,6 +648,9 @@ SB
|
||||||
SO
|
SO
|
||||||
== 706
|
== 706
|
||||||
|
|
||||||
|
SS
|
||||||
|
== 737
|
||||||
|
|
||||||
ZA
|
ZA
|
||||||
== 710
|
== 710
|
||||||
|
|
||||||
|
|
|
@ -1,448 +1,448 @@
|
||||||
[Random Blocks]
|
[Random Blocks]
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
|
|
||||||
Index 1 XFLIP
|
Index 1 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 1 YFLIP
|
Index 1 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 1 YFLIP XFLIP
|
Index 1 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 2
|
Index 2
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 2 XFLIP
|
Index 2 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 2 YFLIP
|
Index 2 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 2 YFLIP XFLIP
|
Index 2 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 3 XFLIP
|
Index 3 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 3 YFLIP
|
Index 3 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 3 YFLIP XFLIP
|
Index 3 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 4
|
Index 4
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 4 XFLIP
|
Index 4 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 4 YFLIP
|
Index 4 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 4 YFLIP XFLIP
|
Index 4 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 5
|
Index 5
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 5 XFLIP
|
Index 5 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 5 YFLIP
|
Index 5 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 5 YFLIP XFLIP
|
Index 5 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 6
|
Index 6
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 6 XFLIP
|
Index 6 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 6 YFLIP
|
Index 6 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 6 YFLIP XFLIP
|
Index 6 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 64
|
Index 64
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 64 XFLIP
|
Index 64 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 64 YFLIP
|
Index 64 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 64 YFLIP XFLIP
|
Index 64 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 65
|
Index 65
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 65 XFLIP
|
Index 65 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 65 YFLIP
|
Index 65 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 65 YFLIP XFLIP
|
Index 65 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 66
|
Index 66
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 66 XFLIP
|
Index 66 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 66 YFLIP
|
Index 66 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 66 YFLIP XFLIP
|
Index 66 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 67
|
Index 67
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 67 XFLIP
|
Index 67 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 67 YFLIP
|
Index 67 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 67 YFLIP XFLIP
|
Index 67 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
#random 2x2
|
#random 2x2
|
||||||
Index 19
|
Index 19
|
||||||
Pos 0 0 FULL
|
Pos 0 0 FULL
|
||||||
Pos 1 0 FULL
|
Pos 1 0 FULL
|
||||||
Pos 0 1 FULL
|
Pos 0 1 FULL
|
||||||
Pos 1 1 FULL
|
Pos 1 1 FULL
|
||||||
Pos -1 0 NOTINDEX -1
|
Pos -1 0 NOTINDEX -1
|
||||||
Pos 0 -1 NOTINDEX -1
|
Pos 0 -1 NOTINDEX -1
|
||||||
Pos 0 2 NOTINDEX -1
|
Pos 0 2 NOTINDEX -1
|
||||||
Pos 2 0 NOTINDEX -1
|
Pos 2 0 NOTINDEX -1
|
||||||
Random 100
|
Random 100
|
||||||
|
|
||||||
|
|
||||||
#random 3x3
|
#random 3x3
|
||||||
Index 16
|
Index 16
|
||||||
Pos 0 0 FULL
|
Pos 0 0 FULL
|
||||||
Pos 1 0 FULL
|
Pos 1 0 FULL
|
||||||
Pos 2 0 FULL
|
Pos 2 0 FULL
|
||||||
Pos 0 1 FULL
|
Pos 0 1 FULL
|
||||||
Pos 1 1 FULL
|
Pos 1 1 FULL
|
||||||
Pos 2 1 FULL
|
Pos 2 1 FULL
|
||||||
Pos 0 2 FULL
|
Pos 0 2 FULL
|
||||||
Pos 1 2 FULL
|
Pos 1 2 FULL
|
||||||
Pos 2 2 FULL
|
Pos 2 2 FULL
|
||||||
Pos -1 0 NOTINDEX -1
|
Pos -1 0 NOTINDEX -1
|
||||||
Pos 0 -1 NOTINDEX -1
|
Pos 0 -1 NOTINDEX -1
|
||||||
Pos 0 3 NOTINDEX -1
|
Pos 0 3 NOTINDEX -1
|
||||||
Pos 3 0 NOTINDEX -1
|
Pos 3 0 NOTINDEX -1
|
||||||
Random 100
|
Random 100
|
||||||
|
|
||||||
|
|
||||||
NewRun
|
NewRun
|
||||||
|
|
||||||
#Remove overlaps
|
#Remove overlaps
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos -2 -2 INDEX 16 OR 19
|
Pos -2 -2 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos -1 -2 INDEX 16 OR 19
|
Pos -1 -2 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 0 -2 INDEX 16 OR 19
|
Pos 0 -2 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 1 -2 INDEX 16 OR 19
|
Pos 1 -2 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 2 -2 INDEX 16 OR 19
|
Pos 2 -2 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos -2 -1 INDEX 16 OR 19
|
Pos -2 -1 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos -1 -1 INDEX 16 OR 19
|
Pos -1 -1 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 0 -1 INDEX 16 OR 19
|
Pos 0 -1 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 1 -1 INDEX 16 OR 19
|
Pos 1 -1 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 2 -1 INDEX 16 OR 19
|
Pos 2 -1 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos -2 0 INDEX 16 OR 19
|
Pos -2 0 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos -1 0 INDEX 16 OR 19
|
Pos -1 0 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 1 0 INDEX 16 OR 19
|
Pos 1 0 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 2 0 INDEX 16 OR 19
|
Pos 2 0 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos -2 1 INDEX 16 OR 19
|
Pos -2 1 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos -1 1 INDEX 16 OR 19
|
Pos -1 1 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 0 1 INDEX 16 OR 19
|
Pos 0 1 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 1 1 INDEX 16 OR 19
|
Pos 1 1 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 2 1 INDEX 16 OR 19
|
Pos 2 1 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos -2 2 INDEX 16 OR 19
|
Pos -2 2 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos -1 2 INDEX 16 OR 19
|
Pos -1 2 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 0 2 INDEX 16 OR 19
|
Pos 0 2 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 1 2 INDEX 16 OR 19
|
Pos 1 2 INDEX 16 OR 19
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
Pos 0 0 INDEX 16 OR 19
|
Pos 0 0 INDEX 16 OR 19
|
||||||
Pos 2 2 INDEX 16 OR 19
|
Pos 2 2 INDEX 16 OR 19
|
||||||
|
|
||||||
NewRun
|
NewRun
|
||||||
|
|
||||||
#Fill tiles
|
#Fill tiles
|
||||||
Index 20
|
Index 20
|
||||||
Pos -1 0 INDEX 19
|
Pos -1 0 INDEX 19
|
||||||
Index 35
|
Index 35
|
||||||
Pos 0 -1 INDEX 19
|
Pos 0 -1 INDEX 19
|
||||||
Index 36
|
Index 36
|
||||||
Pos -1 -1 INDEX 19
|
Pos -1 -1 INDEX 19
|
||||||
|
|
||||||
Index 17
|
Index 17
|
||||||
Pos -1 0 INDEX 16
|
Pos -1 0 INDEX 16
|
||||||
Index 18
|
Index 18
|
||||||
Pos -2 0 INDEX 16
|
Pos -2 0 INDEX 16
|
||||||
Index 32
|
Index 32
|
||||||
Pos 0 -1 INDEX 16
|
Pos 0 -1 INDEX 16
|
||||||
Index 33
|
Index 33
|
||||||
Pos -1 -1 INDEX 16
|
Pos -1 -1 INDEX 16
|
||||||
Index 34
|
Index 34
|
||||||
Pos -2 -1 INDEX 16
|
Pos -2 -1 INDEX 16
|
||||||
Index 48
|
Index 48
|
||||||
Pos 0 -2 INDEX 16
|
Pos 0 -2 INDEX 16
|
||||||
Index 49
|
Index 49
|
||||||
Pos -1 -2 INDEX 16
|
Pos -1 -2 INDEX 16
|
||||||
Index 50
|
Index 50
|
||||||
Pos -2 -2 INDEX 16
|
Pos -2 -2 INDEX 16
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Random small Blocks]
|
[Random small Blocks]
|
||||||
|
|
||||||
Index 1
|
Index 1
|
||||||
|
|
||||||
Index 1 XFLIP
|
Index 1 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 1 YFLIP
|
Index 1 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 1 YFLIP XFLIP
|
Index 1 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 2
|
Index 2
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 2 XFLIP
|
Index 2 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 2 YFLIP
|
Index 2 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 2 YFLIP XFLIP
|
Index 2 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 3 XFLIP
|
Index 3 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 3 YFLIP
|
Index 3 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 3 YFLIP XFLIP
|
Index 3 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 4
|
Index 4
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 4 XFLIP
|
Index 4 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 4 YFLIP
|
Index 4 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 4 YFLIP XFLIP
|
Index 4 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 5
|
Index 5
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 5 XFLIP
|
Index 5 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 5 YFLIP
|
Index 5 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 5 YFLIP XFLIP
|
Index 5 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 6
|
Index 6
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 6 XFLIP
|
Index 6 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 6 YFLIP
|
Index 6 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 6 YFLIP XFLIP
|
Index 6 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 64
|
Index 64
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 64 XFLIP
|
Index 64 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 64 YFLIP
|
Index 64 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 64 YFLIP XFLIP
|
Index 64 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 65
|
Index 65
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 65 XFLIP
|
Index 65 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 65 YFLIP
|
Index 65 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 65 YFLIP XFLIP
|
Index 65 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 66
|
Index 66
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 66 XFLIP
|
Index 66 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 66 YFLIP
|
Index 66 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 66 YFLIP XFLIP
|
Index 66 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 67
|
Index 67
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 67 XFLIP
|
Index 67 XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 67 YFLIP
|
Index 67 YFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
Index 67 YFLIP XFLIP
|
Index 67 YFLIP XFLIP
|
||||||
Random 40
|
Random 40
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Random Decoration]
|
[Random Decoration]
|
||||||
|
|
||||||
Index 7
|
Index 7
|
||||||
|
|
||||||
Index 7 XFLIP
|
Index 7 XFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 7 YFLIP
|
Index 7 YFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 7 YFLIP XFLIP
|
Index 7 YFLIP XFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 21
|
Index 21
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 21 XFLIP
|
Index 21 XFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 21 YFLIP
|
Index 21 YFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 21 YFLIP XFLIP
|
Index 21 YFLIP XFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 23
|
Index 23
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 23 XFLIP
|
Index 23 XFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 23 YFLIP
|
Index 23 YFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 23 YFLIP XFLIP
|
Index 23 YFLIP XFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 51
|
Index 51
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 51 XFLIP
|
Index 51 XFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 51 YFLIP
|
Index 51 YFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 51 YFLIP XFLIP
|
Index 51 YFLIP XFLIP
|
||||||
Random 18
|
Random 18
|
||||||
|
|
||||||
Index 68
|
Index 68
|
||||||
Random 18
|
Random 18
|
|
@ -140,9 +140,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== ﺔﻣﺰﺟ
|
== ﺔﻣﺰﺟ
|
||||||
|
|
||||||
Filter
|
|
||||||
== ﺔﻴﻔﺼﺗ
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== ﺭﺎﻧ
|
== ﺭﺎﻧ
|
||||||
|
|
||||||
|
@ -155,9 +152,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== ﺮﺤﻟﺍ ﺮﻈﻨﻤﻟﺍ
|
== ﺮﺤﻟﺍ ﺮﻈﻨﻤﻟﺍ
|
||||||
|
|
||||||
Friends
|
|
||||||
== ﺀﺎﻗﺪﺻﻻﺍ
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== ﻞﻣﺎﻜﻟﺍ ﺔﺷﺎﺸﻟﺍ ﻊﺿﻭ
|
== ﻞﻣﺎﻜﻟﺍ ﺔﺷﺎﺸﻟﺍ ﻊﺿﻭ
|
||||||
|
|
||||||
|
@ -354,12 +348,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== ﺮﻓﺮﻴﺴﻟﺍ ﻥﺍﻮﻨﻋ:
|
== ﺮﻓﺮﻴﺴﻟﺍ ﻥﺍﻮﻨﻋ:
|
||||||
|
|
||||||
Server details
|
|
||||||
== ﺮﻓﺮﻴﺴﻟﺍ ﻞﻴﺻﺎﻔﺗ
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== ﺮﻓﺮﻴﺴﻟﺍ ﺔﻴﻔﺼﺗ
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== ﺮﻓﺮﻴﺴﻟﺍ ﺕﺎﻣﻮﻠﻌﻣ
|
== ﺮﻓﺮﻴﺴﻟﺍ ﺕﺎﻣﻮﻠﻌﻣ
|
||||||
|
|
||||||
|
@ -528,9 +516,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== ﺏﺎﻤﻟﺍ:
|
== ﺏﺎﻤﻟﺍ:
|
||||||
|
|
||||||
Info
|
|
||||||
== ﺕﺎﻣﻮﻠﻌﻣ
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== ﻥﻮﻟ
|
== ﻥﻮﻟ
|
||||||
|
|
||||||
|
@ -1355,12 +1340,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1376,12 +1384,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1397,6 +1399,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1448,10 +1453,10 @@ Open the directory that contains the configuration and user files
|
||||||
Open the directory to add custom themes
|
Open the directory to add custom themes
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download community skins
|
Download community skins
|
||||||
|
|
|
@ -147,9 +147,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Ногі
|
== Ногі
|
||||||
|
|
||||||
Filter
|
|
||||||
== Фільтр
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Стрэл
|
== Стрэл
|
||||||
|
|
||||||
|
@ -162,9 +159,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Вольны агляд
|
== Вольны агляд
|
||||||
|
|
||||||
Friends
|
|
||||||
== Сябры
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Поўнаэкранны рэжым
|
== Поўнаэкранны рэжым
|
||||||
|
|
||||||
|
@ -358,12 +352,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Адрас сервера:
|
== Адрас сервера:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Дэталі сервера
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Фільтр сервераў
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Інфармацыя
|
== Інфармацыя
|
||||||
|
|
||||||
|
@ -532,9 +520,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Карта:
|
== Карта:
|
||||||
|
|
||||||
Info
|
|
||||||
== Інфа
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Адценне
|
== Адценне
|
||||||
|
|
||||||
|
@ -1727,6 +1712,26 @@ Unable to rename the folder
|
||||||
(paused)
|
(paused)
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
All combined
|
All combined
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -148,9 +148,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Stopala
|
== Stopala
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filter
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Pucanje
|
== Pucanje
|
||||||
|
|
||||||
|
@ -163,9 +160,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Slobodan pogled
|
== Slobodan pogled
|
||||||
|
|
||||||
Friends
|
|
||||||
== Prijatelji
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Čitav ekran
|
== Čitav ekran
|
||||||
|
|
||||||
|
@ -359,12 +353,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Adresa servera:
|
== Adresa servera:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Podaci o serveru
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filter servera
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== O Serveru
|
== O Serveru
|
||||||
|
|
||||||
|
@ -535,9 +523,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Mapa:
|
== Mapa:
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Nijans.
|
== Nijans.
|
||||||
|
|
||||||
|
@ -1247,12 +1232,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1268,12 +1276,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1289,6 +1291,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1361,10 +1366,10 @@ Open the directory to add custom themes
|
||||||
Max CSVs
|
Max CSVs
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download skins
|
Download skins
|
||||||
|
|
|
@ -170,9 +170,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Pés
|
== Pés
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtro
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Atirar
|
== Atirar
|
||||||
|
|
||||||
|
@ -185,9 +182,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Visualização livre
|
== Visualização livre
|
||||||
|
|
||||||
Friends
|
|
||||||
== Amigos
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Tela cheia
|
== Tela cheia
|
||||||
|
|
||||||
|
@ -384,12 +378,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Endereço:
|
== Endereço:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Detalhes do servidor
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtro de servidores
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Servidor
|
== Servidor
|
||||||
|
|
||||||
|
@ -576,9 +564,6 @@ Show ghost
|
||||||
Clan plates size
|
Clan plates size
|
||||||
== Tamanho da placa do clã
|
== Tamanho da placa do clã
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
No updates available
|
No updates available
|
||||||
== Nenhuma atualização disponível
|
== Nenhuma atualização disponível
|
||||||
|
|
||||||
|
@ -1767,3 +1752,23 @@ Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
|
|
||||||
Moved ingame
|
Moved ingame
|
||||||
== Movido no jogo
|
== Movido no jogo
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
|
@ -145,9 +145,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Крака
|
== Крака
|
||||||
|
|
||||||
Filter
|
|
||||||
== Филтър
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Стрелба
|
== Стрелба
|
||||||
|
|
||||||
|
@ -160,9 +157,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Свободен Изглед
|
== Свободен Изглед
|
||||||
|
|
||||||
Friends
|
|
||||||
== Приятели
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Цял Екран
|
== Цял Екран
|
||||||
|
|
||||||
|
@ -356,12 +350,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Адрес на сървъра:
|
== Адрес на сървъра:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Детайли за Сървъра
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Филтър на сървъра
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Инфо
|
== Инфо
|
||||||
|
|
||||||
|
@ -529,9 +517,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Карта:
|
== Карта:
|
||||||
|
|
||||||
Info
|
|
||||||
== Инфо
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Оттенък
|
== Оттенък
|
||||||
|
|
||||||
|
@ -908,12 +893,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -929,12 +937,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -953,6 +955,9 @@ Cut length
|
||||||
Remove chat
|
Remove chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Please use a different name
|
Please use a different name
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1103,10 +1108,10 @@ Max CSVs
|
||||||
Dummy settings
|
Dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download skins
|
Download skins
|
||||||
|
@ -1160,10 +1165,16 @@ Show all
|
||||||
Toggle dyncam
|
Toggle dyncam
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle dummy
|
Toggle ghost
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle ghost
|
Converse
|
||||||
|
==
|
||||||
|
|
||||||
|
Chat command
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Dummy copy
|
Dummy copy
|
||||||
|
@ -1172,9 +1183,6 @@ Dummy copy
|
||||||
Hammerfly dummy
|
Hammerfly dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Converse
|
|
||||||
==
|
|
||||||
|
|
||||||
Spectate previous
|
Spectate previous
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1190,9 +1198,6 @@ Show entities
|
||||||
Show HUD
|
Show HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Chat command
|
|
||||||
==
|
|
||||||
|
|
||||||
Enable controller
|
Enable controller
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -140,9 +140,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Peus
|
== Peus
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtre
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Disparar
|
== Disparar
|
||||||
|
|
||||||
|
@ -155,9 +152,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Vista lliure
|
== Vista lliure
|
||||||
|
|
||||||
Friends
|
|
||||||
== Amics
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Pantalla completa
|
== Pantalla completa
|
||||||
|
|
||||||
|
@ -354,12 +348,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== IP del servidor:
|
== IP del servidor:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Detalls del servidor
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtre del servidor
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Servidor
|
== Servidor
|
||||||
|
|
||||||
|
@ -540,9 +528,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Mapa:
|
== Mapa:
|
||||||
|
|
||||||
Info
|
|
||||||
== Informació
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Tonalitat
|
== Tonalitat
|
||||||
|
|
||||||
|
@ -1427,12 +1412,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1448,12 +1456,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1469,6 +1471,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1514,10 +1519,10 @@ Open the directory that contains the configuration and user files
|
||||||
Open the directory to add custom themes
|
Open the directory to add custom themes
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download community skins
|
Download community skins
|
||||||
|
|
|
@ -145,9 +145,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Урасем
|
== Урасем
|
||||||
|
|
||||||
Filter
|
|
||||||
== Фильтр
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Пĕрӳ
|
== Пĕрӳ
|
||||||
|
|
||||||
|
@ -160,9 +157,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Ирĕклĕ обзор
|
== Ирĕклĕ обзор
|
||||||
|
|
||||||
Friends
|
|
||||||
== Юлташсем
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Тулли экран
|
== Тулли экран
|
||||||
|
|
||||||
|
@ -356,12 +350,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Сервер адресĕ
|
== Сервер адресĕ
|
||||||
|
|
||||||
Server details
|
|
||||||
== Сервер тĕплĕсем
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Серверсен фильтр
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Пĕлтерӳ
|
== Пĕлтерӳ
|
||||||
|
|
||||||
|
@ -535,9 +523,6 @@ Miscellaneous
|
||||||
Netversion:
|
Netversion:
|
||||||
== Версия:
|
== Версия:
|
||||||
|
|
||||||
Info
|
|
||||||
== Пĕлтерӳ
|
|
||||||
|
|
||||||
UI Color
|
UI Color
|
||||||
== Интерфейс тĕсĕ
|
== Интерфейс тĕсĕ
|
||||||
|
|
||||||
|
@ -911,12 +896,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -932,12 +940,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -956,6 +958,9 @@ Cut length
|
||||||
Remove chat
|
Remove chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Please use a different name
|
Please use a different name
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1106,10 +1111,10 @@ Max CSVs
|
||||||
Dummy settings
|
Dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download skins
|
Download skins
|
||||||
|
@ -1163,10 +1168,16 @@ Show all
|
||||||
Toggle dyncam
|
Toggle dyncam
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle dummy
|
Toggle ghost
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle ghost
|
Converse
|
||||||
|
==
|
||||||
|
|
||||||
|
Chat command
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Dummy copy
|
Dummy copy
|
||||||
|
@ -1175,9 +1186,6 @@ Dummy copy
|
||||||
Hammerfly dummy
|
Hammerfly dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Converse
|
|
||||||
==
|
|
||||||
|
|
||||||
Statboard
|
Statboard
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1190,9 +1198,6 @@ Show entities
|
||||||
Show HUD
|
Show HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Chat command
|
|
||||||
==
|
|
||||||
|
|
||||||
Enable controller
|
Enable controller
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -148,9 +148,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Nohy
|
== Nohy
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtr
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Střelba
|
== Střelba
|
||||||
|
|
||||||
|
@ -163,9 +160,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Volný pohled
|
== Volný pohled
|
||||||
|
|
||||||
Friends
|
|
||||||
== Přátelé
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Celá obrazovka
|
== Celá obrazovka
|
||||||
|
|
||||||
|
@ -355,12 +349,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Adresa serveru:
|
== Adresa serveru:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Detaily serveru
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtr serverů
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Informace
|
== Informace
|
||||||
|
|
||||||
|
@ -531,9 +519,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Mapa:
|
== Mapa:
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Tón
|
== Tón
|
||||||
|
|
||||||
|
@ -1365,12 +1350,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1386,12 +1394,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1407,6 +1409,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1458,10 +1463,10 @@ Open the directory that contains the configuration and user files
|
||||||
Open the directory to add custom themes
|
Open the directory to add custom themes
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download community skins
|
Download community skins
|
||||||
|
|
|
@ -146,9 +146,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Fødder
|
== Fødder
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filter
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Skyd
|
== Skyd
|
||||||
|
|
||||||
|
@ -161,9 +158,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Free-View
|
== Free-View
|
||||||
|
|
||||||
Friends
|
|
||||||
== Venner
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Fuldskærm
|
== Fuldskærm
|
||||||
|
|
||||||
|
@ -357,12 +351,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Serveradresse
|
== Serveradresse
|
||||||
|
|
||||||
Server details
|
|
||||||
== Serverdetaljer
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Serverfilter
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Serverinfo
|
== Serverinfo
|
||||||
|
|
||||||
|
@ -533,9 +521,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Bane
|
== Bane
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Farve
|
== Farve
|
||||||
|
|
||||||
|
@ -1363,12 +1348,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1384,12 +1392,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1405,6 +1407,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1456,10 +1461,10 @@ Open the directory that contains the configuration and user files
|
||||||
Open the directory to add custom themes
|
Open the directory to add custom themes
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download community skins
|
Download community skins
|
||||||
|
|
|
@ -158,9 +158,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Voeten
|
== Voeten
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filter
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Schieten
|
== Schieten
|
||||||
|
|
||||||
|
@ -173,9 +170,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Vrij bewegen
|
== Vrij bewegen
|
||||||
|
|
||||||
Friends
|
|
||||||
== Vrienden
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Volledig scherm
|
== Volledig scherm
|
||||||
|
|
||||||
|
@ -369,12 +363,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Serveradres:
|
== Serveradres:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Serverdetails
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Serverfilter
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Serverinfo
|
== Serverinfo
|
||||||
|
|
||||||
|
@ -545,9 +533,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Kaart:
|
== Kaart:
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Tint
|
== Tint
|
||||||
|
|
||||||
|
@ -1473,12 +1458,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1494,12 +1502,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1515,6 +1517,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -273,9 +273,6 @@ Countries
|
||||||
Favorite
|
Favorite
|
||||||
== Favorati
|
== Favorati
|
||||||
|
|
||||||
Friends
|
|
||||||
== Amikoj
|
|
||||||
|
|
||||||
Name
|
Name
|
||||||
== Nomo
|
== Nomo
|
||||||
|
|
||||||
|
@ -285,9 +282,6 @@ Clan
|
||||||
Add Friend
|
Add Friend
|
||||||
== Aldoni amikon
|
== Aldoni amikon
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtri
|
|
||||||
|
|
||||||
Please use a different name
|
Please use a different name
|
||||||
== Bonvolu uzi malsaman nomon
|
== Bonvolu uzi malsaman nomon
|
||||||
|
|
||||||
|
@ -767,9 +761,6 @@ The server is running a non-standard tuning on a pure game type.
|
||||||
Loading menu images
|
Loading menu images
|
||||||
==
|
==
|
||||||
|
|
||||||
Server filter
|
|
||||||
==
|
|
||||||
|
|
||||||
Has people playing
|
Has people playing
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -797,9 +788,6 @@ Types
|
||||||
Reset filter
|
Reset filter
|
||||||
==
|
==
|
||||||
|
|
||||||
Server details
|
|
||||||
==
|
|
||||||
|
|
||||||
Copy info
|
Copy info
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -843,9 +831,6 @@ Remove friend
|
||||||
Add Clan
|
Add Clan
|
||||||
==
|
==
|
||||||
|
|
||||||
Info
|
|
||||||
==
|
|
||||||
|
|
||||||
Play the current demo
|
Play the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -855,12 +840,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -876,12 +884,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -900,6 +902,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
File already exists, do you want to overwrite it?
|
File already exists, do you want to overwrite it?
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1086,15 +1091,15 @@ Automatically create statboard csv
|
||||||
Max CSVs
|
Max CSVs
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
Loading skin files
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Your skin
|
Your skin
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
|
||||||
==
|
|
||||||
|
|
||||||
Download skins
|
Download skins
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1143,18 +1148,9 @@ Default zoom
|
||||||
Toggle dyncam
|
Toggle dyncam
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle dummy
|
|
||||||
==
|
|
||||||
|
|
||||||
Toggle ghost
|
Toggle ghost
|
||||||
==
|
==
|
||||||
|
|
||||||
Dummy copy
|
|
||||||
==
|
|
||||||
|
|
||||||
Hammerfly dummy
|
|
||||||
==
|
|
||||||
|
|
||||||
Shotgun
|
Shotgun
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1173,6 +1169,18 @@ Team chat
|
||||||
Converse
|
Converse
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Chat command
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle dummy
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy copy
|
||||||
|
==
|
||||||
|
|
||||||
|
Hammerfly dummy
|
||||||
|
==
|
||||||
|
|
||||||
Emoticon
|
Emoticon
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1209,9 +1217,6 @@ Show entities
|
||||||
Show HUD
|
Show HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Chat command
|
|
||||||
==
|
|
||||||
|
|
||||||
Enable controller
|
Enable controller
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -147,9 +147,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Jalat
|
== Jalat
|
||||||
|
|
||||||
Filter
|
|
||||||
== Suotimet
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Ammu
|
== Ammu
|
||||||
|
|
||||||
|
@ -162,9 +159,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Vapaa näkymä
|
== Vapaa näkymä
|
||||||
|
|
||||||
Friends
|
|
||||||
== Ystävät
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Koko näyttö
|
== Koko näyttö
|
||||||
|
|
||||||
|
@ -358,12 +352,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Palvelimen osoite:
|
== Palvelimen osoite:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Palvelimen yksityiskohdat
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Palvelinsuotimet
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Palvelintiedot
|
== Palvelintiedot
|
||||||
|
|
||||||
|
@ -532,9 +520,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Kenttä:
|
== Kenttä:
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Värisävy
|
== Värisävy
|
||||||
|
|
||||||
|
@ -1320,12 +1305,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1341,12 +1349,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1362,6 +1364,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1422,10 +1427,10 @@ Automatically create statboard csv
|
||||||
Max CSVs
|
Max CSVs
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download community skins
|
Download community skins
|
||||||
|
@ -1443,15 +1448,15 @@ Create a random skin
|
||||||
Open the directory to add custom skins
|
Open the directory to add custom skins
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Converse
|
||||||
|
==
|
||||||
|
|
||||||
Dummy copy
|
Dummy copy
|
||||||
==
|
==
|
||||||
|
|
||||||
Hammerfly dummy
|
Hammerfly dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Converse
|
|
||||||
==
|
|
||||||
|
|
||||||
Statboard
|
Statboard
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -169,9 +169,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Pieds
|
== Pieds
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtre
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Tirer
|
== Tirer
|
||||||
|
|
||||||
|
@ -184,9 +181,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Vue libre
|
== Vue libre
|
||||||
|
|
||||||
Friends
|
|
||||||
== Amis
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Plein écran
|
== Plein écran
|
||||||
|
|
||||||
|
@ -380,12 +374,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Adresse du serveur :
|
== Adresse du serveur :
|
||||||
|
|
||||||
Server details
|
|
||||||
== Détails du serveur
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtres du serveur
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Info. serveur
|
== Info. serveur
|
||||||
|
|
||||||
|
@ -556,9 +544,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Carte :
|
== Carte :
|
||||||
|
|
||||||
Info
|
|
||||||
== Info.
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Teinte
|
== Teinte
|
||||||
|
|
||||||
|
@ -1727,6 +1712,23 @@ Unable to rename the folder
|
||||||
No server selected
|
No server selected
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Mark the beginning of a cut (right click to reset)
|
Mark the beginning of a cut (right click to reset)
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1745,6 +1747,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
All combined
|
All combined
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -145,9 +145,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Pés
|
== Pés
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtro
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Disparar
|
== Disparar
|
||||||
|
|
||||||
|
@ -160,9 +157,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Vista libre
|
== Vista libre
|
||||||
|
|
||||||
Friends
|
|
||||||
== Amigos
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Pantalla completa
|
== Pantalla completa
|
||||||
|
|
||||||
|
@ -359,12 +353,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== IP do servidor:
|
== IP do servidor:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Detalles do servidor
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtro do servidor
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Servidor
|
== Servidor
|
||||||
|
|
||||||
|
@ -536,9 +524,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Mapa:
|
== Mapa:
|
||||||
|
|
||||||
Info
|
|
||||||
== Información
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Matiz
|
== Matiz
|
||||||
|
|
||||||
|
@ -1698,6 +1683,23 @@ Unable to rename the folder
|
||||||
No server selected
|
No server selected
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Mark the beginning of a cut (right click to reset)
|
Mark the beginning of a cut (right click to reset)
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1716,6 +1718,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
All combined
|
All combined
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -163,9 +163,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Füße
|
== Füße
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filter
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Feuern
|
== Feuern
|
||||||
|
|
||||||
|
@ -178,9 +175,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Freie Ansicht
|
== Freie Ansicht
|
||||||
|
|
||||||
Friends
|
|
||||||
== Freunde
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Vollbild
|
== Vollbild
|
||||||
|
|
||||||
|
@ -377,12 +371,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Serveradresse:
|
== Serveradresse:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Serverdetails
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filter
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Serverinfo
|
== Serverinfo
|
||||||
|
|
||||||
|
@ -566,9 +554,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Karte:
|
== Karte:
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Farb.
|
== Farb.
|
||||||
|
|
||||||
|
@ -1760,3 +1745,23 @@ Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
|
|
||||||
Moved ingame
|
Moved ingame
|
||||||
== Im Spiel bewegt
|
== Im Spiel bewegt
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
== Gesetzte Dauer zurück
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
== %d Min.
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
== %d Sek.
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
== Überspring-Dauer ändern
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
== Gesetzte Dauer vorwärts
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
== Schnitt zu Video rendern
|
||||||
|
|
|
@ -145,9 +145,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Πόδια
|
== Πόδια
|
||||||
|
|
||||||
Filter
|
|
||||||
== Φίλτρο
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Πυρ
|
== Πυρ
|
||||||
|
|
||||||
|
@ -160,9 +157,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Ελεύθερη Όψη
|
== Ελεύθερη Όψη
|
||||||
|
|
||||||
Friends
|
|
||||||
== Φίλοι
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Πλήρης οθόνη
|
== Πλήρης οθόνη
|
||||||
|
|
||||||
|
@ -359,12 +353,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Διεύθ/ση διακομιστή:
|
== Διεύθ/ση διακομιστή:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Λεπτομέριες διακομιστή
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Φίλτρο διακομιστών
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Πληροφορίες
|
== Πληροφορίες
|
||||||
|
|
||||||
|
@ -538,9 +526,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Χάρτης:
|
== Χάρτης:
|
||||||
|
|
||||||
Info
|
|
||||||
== Πληροφορίες
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Απόχρωση
|
== Απόχρωση
|
||||||
|
|
||||||
|
@ -914,12 +899,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -935,12 +943,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -959,6 +961,9 @@ Cut length
|
||||||
Remove chat
|
Remove chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Please use a different name
|
Please use a different name
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1109,10 +1114,10 @@ Max CSVs
|
||||||
Dummy settings
|
Dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download skins
|
Download skins
|
||||||
|
@ -1166,10 +1171,16 @@ Show all
|
||||||
Toggle dyncam
|
Toggle dyncam
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle dummy
|
Toggle ghost
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle ghost
|
Converse
|
||||||
|
==
|
||||||
|
|
||||||
|
Chat command
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Dummy copy
|
Dummy copy
|
||||||
|
@ -1178,9 +1189,6 @@ Dummy copy
|
||||||
Hammerfly dummy
|
Hammerfly dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Converse
|
|
||||||
==
|
|
||||||
|
|
||||||
Statboard
|
Statboard
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1193,9 +1201,6 @@ Show entities
|
||||||
Show HUD
|
Show HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Chat command
|
|
||||||
==
|
|
||||||
|
|
||||||
Enable controller
|
Enable controller
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -144,9 +144,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Láb
|
== Láb
|
||||||
|
|
||||||
Filter
|
|
||||||
== Szűrő
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Tűz
|
== Tűz
|
||||||
|
|
||||||
|
@ -159,9 +156,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Szabad nézet
|
== Szabad nézet
|
||||||
|
|
||||||
Friends
|
|
||||||
== Barátok
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Teljesképernyő
|
== Teljesképernyő
|
||||||
|
|
||||||
|
@ -349,12 +343,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Szerver címe:
|
== Szerver címe:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Szerver részletei
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Szerver szűrő
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Szerver infó
|
== Szerver infó
|
||||||
|
|
||||||
|
@ -511,9 +499,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Pálya:
|
== Pálya:
|
||||||
|
|
||||||
Info
|
|
||||||
== Infó
|
|
||||||
|
|
||||||
Miscellaneous
|
Miscellaneous
|
||||||
== Egyéb
|
== Egyéb
|
||||||
|
|
||||||
|
@ -1703,6 +1688,23 @@ None
|
||||||
Add Clan
|
Add Clan
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Mark the beginning of a cut (right click to reset)
|
Mark the beginning of a cut (right click to reset)
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1721,6 +1723,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
All combined
|
All combined
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -152,9 +152,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Piedi
|
== Piedi
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtro
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Fuoco
|
== Fuoco
|
||||||
|
|
||||||
|
@ -167,9 +164,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Visione libera
|
== Visione libera
|
||||||
|
|
||||||
Friends
|
|
||||||
== Amici
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Schermo intero
|
== Schermo intero
|
||||||
|
|
||||||
|
@ -363,12 +357,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Indirizzo server:
|
== Indirizzo server:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Dettagli server
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtro server
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Info server
|
== Info server
|
||||||
|
|
||||||
|
@ -536,9 +524,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Mappa:
|
== Mappa:
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Tinta
|
== Tinta
|
||||||
|
|
||||||
|
@ -1167,51 +1152,6 @@ Grabs
|
||||||
9+ new mentions
|
9+ new mentions
|
||||||
== +9 nuove menzioni
|
== +9 nuove menzioni
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
Failed during initialization. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
|
||||||
==
|
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
|
||||||
==
|
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
An error during command recording occurred. Try to update your GPU drivers.
|
|
||||||
==
|
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
A render command failed. Try to update your GPU drivers.
|
|
||||||
==
|
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
Submitting the render commands failed. Try to update your GPU drivers.
|
|
||||||
==
|
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
Failed to swap framebuffers. Try to update your GPU drivers.
|
|
||||||
==
|
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
Unknown error. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
|
||||||
==
|
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
Could not initialize the given graphics backend, reverting to the default backend now.
|
|
||||||
==
|
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
|
||||||
==
|
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
|
||||||
==
|
|
||||||
|
|
||||||
The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs.
|
|
||||||
==
|
|
||||||
|
|
||||||
The format of texture %s is not RGBA which will cause visual bugs.
|
|
||||||
==
|
|
||||||
|
|
||||||
Preparing demo playback
|
Preparing demo playback
|
||||||
== Preparando la riproduzione della demo
|
== Preparando la riproduzione della demo
|
||||||
|
|
||||||
|
@ -1221,9 +1161,6 @@ Connected
|
||||||
Loading map file from storage
|
Loading map file from storage
|
||||||
== Caricando il file mappa dalla memoria
|
== Caricando il file mappa dalla memoria
|
||||||
|
|
||||||
Why are you slowmo replaying to read this?
|
|
||||||
==
|
|
||||||
|
|
||||||
Initializing components
|
Initializing components
|
||||||
== Inizializzando i componenti
|
== Inizializzando i componenti
|
||||||
|
|
||||||
|
@ -1302,55 +1239,18 @@ Join Tutorial Server
|
||||||
Skip Tutorial
|
Skip Tutorial
|
||||||
== Salta Tutorial
|
== Salta Tutorial
|
||||||
|
|
||||||
Loading menu images
|
|
||||||
==
|
|
||||||
|
|
||||||
AFR
|
|
||||||
==
|
|
||||||
|
|
||||||
ASI
|
|
||||||
==
|
|
||||||
|
|
||||||
AUS
|
|
||||||
==
|
|
||||||
|
|
||||||
EUR
|
|
||||||
==
|
|
||||||
|
|
||||||
NA
|
|
||||||
==
|
|
||||||
|
|
||||||
SA
|
|
||||||
==
|
|
||||||
|
|
||||||
CHN
|
|
||||||
==
|
|
||||||
|
|
||||||
Getting server list from master server
|
Getting server list from master server
|
||||||
== Ottenere l'elenco dei server dal server principale
|
== Ottenere l'elenco dei server dal server principale
|
||||||
|
|
||||||
Are you sure that you want to disconnect and switch to a different server?
|
Are you sure that you want to disconnect and switch to a different server?
|
||||||
== Sei sicuro di voler disconnetterti e passare a un altro server?
|
== Sei sicuro di voler disconnetterti e passare a un altro server?
|
||||||
|
|
||||||
Copy info
|
|
||||||
==
|
|
||||||
|
|
||||||
Leak IP
|
|
||||||
==
|
|
||||||
|
|
||||||
No server selected
|
No server selected
|
||||||
== Nessun server selezionato
|
== Nessun server selezionato
|
||||||
|
|
||||||
Online players (%d)
|
|
||||||
==
|
|
||||||
|
|
||||||
Online clanmates (%d)
|
Online clanmates (%d)
|
||||||
== Compagni di clan online
|
== Compagni di clan online
|
||||||
|
|
||||||
[friends (server browser)]
|
|
||||||
Offline (%d)
|
|
||||||
==
|
|
||||||
|
|
||||||
Click to select server. Double click to join your friend.
|
Click to select server. Double click to join your friend.
|
||||||
== Fare click per selezionare il server. Fai doppio click per unirti al tuo amico.
|
== Fare click per selezionare il server. Fai doppio click per unirti al tuo amico.
|
||||||
|
|
||||||
|
@ -1372,123 +1272,9 @@ Are you sure that you want to remove the clan '%s' from your friends list?
|
||||||
Add Clan
|
Add Clan
|
||||||
== Aggiungi Clan
|
== Aggiungi Clan
|
||||||
|
|
||||||
Play the current demo
|
|
||||||
==
|
|
||||||
|
|
||||||
Pause the current demo
|
|
||||||
==
|
|
||||||
|
|
||||||
Stop the current demo
|
|
||||||
==
|
|
||||||
|
|
||||||
Go back one tick
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one tick
|
|
||||||
==
|
|
||||||
|
|
||||||
Slow down the demo
|
|
||||||
==
|
|
||||||
|
|
||||||
Speed up the demo
|
|
||||||
==
|
|
||||||
|
|
||||||
Mark the beginning of a cut (right click to reset)
|
|
||||||
==
|
|
||||||
|
|
||||||
Mark the end of a cut (right click to reset)
|
|
||||||
==
|
|
||||||
|
|
||||||
Export cut as a separate demo
|
|
||||||
==
|
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
|
||||||
==
|
|
||||||
|
|
||||||
Toggle keyboard shortcuts
|
|
||||||
==
|
|
||||||
|
|
||||||
Export demo cut
|
|
||||||
==
|
|
||||||
|
|
||||||
Cut interval
|
|
||||||
==
|
|
||||||
|
|
||||||
Cut length
|
|
||||||
==
|
|
||||||
|
|
||||||
Loading demo files
|
|
||||||
==
|
|
||||||
|
|
||||||
All combined
|
|
||||||
==
|
|
||||||
|
|
||||||
Folder Link
|
|
||||||
==
|
|
||||||
|
|
||||||
Markers:
|
|
||||||
==
|
|
||||||
|
|
||||||
%.2f MiB
|
|
||||||
==
|
|
||||||
|
|
||||||
%.2f KiB
|
|
||||||
==
|
|
||||||
|
|
||||||
Open the directory that contains the demo files
|
|
||||||
==
|
|
||||||
|
|
||||||
Are you sure that you want to delete the folder '%s'?
|
|
||||||
==
|
|
||||||
|
|
||||||
Are you sure that you want to delete the demo '%s'?
|
|
||||||
==
|
|
||||||
|
|
||||||
Delete folder
|
Delete folder
|
||||||
== Cancella cartella
|
== Cancella cartella
|
||||||
|
|
||||||
Unable to delete the demo '%s'
|
|
||||||
==
|
|
||||||
|
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
|
||||||
==
|
|
||||||
|
|
||||||
Loading ghost files
|
|
||||||
==
|
|
||||||
|
|
||||||
Menu opened. Press Esc key again to close menu.
|
|
||||||
==
|
|
||||||
|
|
||||||
Save power by lowering refresh rate (higher input latency)
|
|
||||||
==
|
|
||||||
|
|
||||||
Settings file
|
|
||||||
==
|
|
||||||
|
|
||||||
Open the settings file
|
|
||||||
==
|
|
||||||
|
|
||||||
Config directory
|
|
||||||
==
|
|
||||||
|
|
||||||
Open the directory that contains the configuration and user files
|
|
||||||
==
|
|
||||||
|
|
||||||
Open the directory to add custom themes
|
|
||||||
==
|
|
||||||
|
|
||||||
Loading skin files
|
|
||||||
==
|
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
|
||||||
==
|
|
||||||
|
|
||||||
Download community skins
|
Download community skins
|
||||||
== Scarica skin comunitá
|
== Scarica skin comunitá
|
||||||
|
|
||||||
|
@ -1501,18 +1287,9 @@ Create a random skin
|
||||||
Open the directory to add custom skins
|
Open the directory to add custom skins
|
||||||
== Apri la cartella per aggiungere una skin custom
|
== Apri la cartella per aggiungere una skin custom
|
||||||
|
|
||||||
Converse
|
|
||||||
==
|
|
||||||
|
|
||||||
Chat command
|
|
||||||
==
|
|
||||||
|
|
||||||
Enable controller
|
Enable controller
|
||||||
== Abilitá controller
|
== Abilitá controller
|
||||||
|
|
||||||
Controller
|
|
||||||
==
|
|
||||||
|
|
||||||
Ingame controller mode
|
Ingame controller mode
|
||||||
== Modalitá controller in gioco
|
== Modalitá controller in gioco
|
||||||
|
|
||||||
|
@ -1520,19 +1297,6 @@ Ingame controller mode
|
||||||
Relative
|
Relative
|
||||||
== Relativo
|
== Relativo
|
||||||
|
|
||||||
[Ingame controller mode]
|
|
||||||
Absolute
|
|
||||||
==
|
|
||||||
|
|
||||||
Ingame controller sens.
|
|
||||||
==
|
|
||||||
|
|
||||||
UI controller sens.
|
|
||||||
==
|
|
||||||
|
|
||||||
Controller jitter tolerance
|
|
||||||
==
|
|
||||||
|
|
||||||
No controller found. Plug in a controller.
|
No controller found. Plug in a controller.
|
||||||
== Nessun controller trovato. Collega un controller.
|
== Nessun controller trovato. Collega un controller.
|
||||||
|
|
||||||
|
@ -1542,12 +1306,6 @@ Axis
|
||||||
Status
|
Status
|
||||||
== Stato
|
== Stato
|
||||||
|
|
||||||
Aim bind
|
|
||||||
==
|
|
||||||
|
|
||||||
Mouse
|
|
||||||
==
|
|
||||||
|
|
||||||
Ingame mouse sens.
|
Ingame mouse sens.
|
||||||
== Sens. mouse in gioco
|
== Sens. mouse in gioco
|
||||||
|
|
||||||
|
@ -1563,9 +1321,6 @@ Are you sure that you want to reset the controls to their defaults?
|
||||||
Cancel
|
Cancel
|
||||||
== Cancella
|
== Cancella
|
||||||
|
|
||||||
Dummy
|
|
||||||
==
|
|
||||||
|
|
||||||
Windowed
|
Windowed
|
||||||
== Finestra
|
== Finestra
|
||||||
|
|
||||||
|
@ -1578,42 +1333,15 @@ Windowed fullscreen
|
||||||
Desktop fullscreen
|
Desktop fullscreen
|
||||||
== Desktop schermo intero
|
== Desktop schermo intero
|
||||||
|
|
||||||
Allows maps to render with more detail
|
|
||||||
==
|
|
||||||
|
|
||||||
Renderer
|
|
||||||
==
|
|
||||||
|
|
||||||
default
|
|
||||||
==
|
|
||||||
|
|
||||||
custom
|
|
||||||
==
|
|
||||||
|
|
||||||
Graphics card
|
Graphics card
|
||||||
== Scheda grafica
|
== Scheda grafica
|
||||||
|
|
||||||
auto
|
|
||||||
==
|
|
||||||
|
|
||||||
Appearance
|
|
||||||
==
|
|
||||||
|
|
||||||
Name Plate
|
|
||||||
==
|
|
||||||
|
|
||||||
Hook Collisions
|
Hook Collisions
|
||||||
== Collisione Hook
|
== Collisione Hook
|
||||||
|
|
||||||
Kill Messages
|
|
||||||
==
|
|
||||||
|
|
||||||
Show health, shields and ammo
|
Show health, shields and ammo
|
||||||
== Mostra vita, scudi e munizioni
|
== Mostra vita, scudi e munizioni
|
||||||
|
|
||||||
DDRace HUD
|
|
||||||
==
|
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs in scoreboard
|
||||||
== Mostra gli ID clienti nella scoreboard
|
== Mostra gli ID clienti nella scoreboard
|
||||||
|
|
||||||
|
@ -1671,51 +1399,12 @@ Nothing hookable
|
||||||
Something hookable
|
Something hookable
|
||||||
== Qualcosa hookabile
|
== Qualcosa hookabile
|
||||||
|
|
||||||
A Tee
|
|
||||||
==
|
|
||||||
|
|
||||||
Normal Color
|
|
||||||
==
|
|
||||||
|
|
||||||
Highlight Color
|
|
||||||
==
|
|
||||||
|
|
||||||
Weapons
|
Weapons
|
||||||
== Armi
|
== Armi
|
||||||
|
|
||||||
Rifle Laser Outline Color
|
|
||||||
==
|
|
||||||
|
|
||||||
Rifle Laser Inner Color
|
|
||||||
==
|
|
||||||
|
|
||||||
Shotgun Laser Outline Color
|
|
||||||
==
|
|
||||||
|
|
||||||
Shotgun Laser Inner Color
|
|
||||||
==
|
|
||||||
|
|
||||||
Door Laser Outline Color
|
|
||||||
==
|
|
||||||
|
|
||||||
Door Laser Inner Color
|
|
||||||
==
|
|
||||||
|
|
||||||
Freeze Laser Outline Color
|
|
||||||
==
|
|
||||||
|
|
||||||
Freeze Laser Inner Color
|
|
||||||
==
|
|
||||||
|
|
||||||
Set all to Rifle
|
|
||||||
==
|
|
||||||
|
|
||||||
When you cross the start line, show a ghost tee replicating the movements of your best time
|
When you cross the start line, show a ghost tee replicating the movements of your best time
|
||||||
== Quando attraversi la linea di partenza, mostra una maglietta fantasma che riproduce i movimenti del tuo miglior tempo
|
== Quando attraversi la linea di partenza, mostra una maglietta fantasma che riproduce i movimenti del tuo miglior tempo
|
||||||
|
|
||||||
Overlay entities
|
|
||||||
==
|
|
||||||
|
|
||||||
Opacity
|
Opacity
|
||||||
== Opacitá
|
== Opacitá
|
||||||
|
|
||||||
|
@ -1746,15 +1435,343 @@ Chat command (e.g. showall 1)
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
== Protocollo ed estensioni file non registrati
|
== Protocollo ed estensioni file non registrati
|
||||||
|
|
||||||
Extras
|
|
||||||
==
|
|
||||||
|
|
||||||
Loading assets
|
Loading assets
|
||||||
== Caricando assets
|
== Caricando assets
|
||||||
|
|
||||||
Open the directory to add custom assets
|
Open the directory to add custom assets
|
||||||
== Apri la cartella per aggiungere assets custom
|
== Apri la cartella per aggiungere assets custom
|
||||||
|
|
||||||
|
Can't find a Tutorial server
|
||||||
|
== Impossibile trovare un Server Tutorial
|
||||||
|
|
||||||
|
Loading race demo files
|
||||||
|
== Caricando i file della demo della gara
|
||||||
|
|
||||||
|
Loading sound files
|
||||||
|
== Caricando file musica
|
||||||
|
|
||||||
|
Moved ingame
|
||||||
|
== Spostato in gioco
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
Failed during initialization. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
An error during command recording occurred. Try to update your GPU drivers.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
A render command failed. Try to update your GPU drivers.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
Submitting the render commands failed. Try to update your GPU drivers.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
Failed to swap framebuffers. Try to update your GPU drivers.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
Unknown error. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
Could not initialize the given graphics backend, reverting to the default backend now.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
|
==
|
||||||
|
|
||||||
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
|
==
|
||||||
|
|
||||||
|
The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs.
|
||||||
|
==
|
||||||
|
|
||||||
|
The format of texture %s is not RGBA which will cause visual bugs.
|
||||||
|
==
|
||||||
|
|
||||||
|
Why are you slowmo replaying to read this?
|
||||||
|
==
|
||||||
|
|
||||||
|
Loading menu images
|
||||||
|
==
|
||||||
|
|
||||||
|
AFR
|
||||||
|
==
|
||||||
|
|
||||||
|
ASI
|
||||||
|
==
|
||||||
|
|
||||||
|
AUS
|
||||||
|
==
|
||||||
|
|
||||||
|
EUR
|
||||||
|
==
|
||||||
|
|
||||||
|
NA
|
||||||
|
==
|
||||||
|
|
||||||
|
SA
|
||||||
|
==
|
||||||
|
|
||||||
|
CHN
|
||||||
|
==
|
||||||
|
|
||||||
|
Copy info
|
||||||
|
==
|
||||||
|
|
||||||
|
Leak IP
|
||||||
|
==
|
||||||
|
|
||||||
|
Online players (%d)
|
||||||
|
==
|
||||||
|
|
||||||
|
[friends (server browser)]
|
||||||
|
Offline (%d)
|
||||||
|
==
|
||||||
|
|
||||||
|
Play the current demo
|
||||||
|
==
|
||||||
|
|
||||||
|
Pause the current demo
|
||||||
|
==
|
||||||
|
|
||||||
|
Stop the current demo
|
||||||
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go back one tick
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one tick
|
||||||
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Slow down the demo
|
||||||
|
==
|
||||||
|
|
||||||
|
Speed up the demo
|
||||||
|
==
|
||||||
|
|
||||||
|
Mark the beginning of a cut (right click to reset)
|
||||||
|
==
|
||||||
|
|
||||||
|
Mark the end of a cut (right click to reset)
|
||||||
|
==
|
||||||
|
|
||||||
|
Export cut as a separate demo
|
||||||
|
==
|
||||||
|
|
||||||
|
Close the demo player
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle keyboard shortcuts
|
||||||
|
==
|
||||||
|
|
||||||
|
Export demo cut
|
||||||
|
==
|
||||||
|
|
||||||
|
Cut interval
|
||||||
|
==
|
||||||
|
|
||||||
|
Cut length
|
||||||
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
|
Loading demo files
|
||||||
|
==
|
||||||
|
|
||||||
|
All combined
|
||||||
|
==
|
||||||
|
|
||||||
|
Folder Link
|
||||||
|
==
|
||||||
|
|
||||||
|
Markers:
|
||||||
|
==
|
||||||
|
|
||||||
|
%.2f MiB
|
||||||
|
==
|
||||||
|
|
||||||
|
%.2f KiB
|
||||||
|
==
|
||||||
|
|
||||||
|
Open the directory that contains the demo files
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete the folder '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Are you sure that you want to delete the demo '%s'?
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete the demo '%s'
|
||||||
|
==
|
||||||
|
|
||||||
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
|
==
|
||||||
|
|
||||||
|
Loading ghost files
|
||||||
|
==
|
||||||
|
|
||||||
|
Menu opened. Press Esc key again to close menu.
|
||||||
|
==
|
||||||
|
|
||||||
|
Save power by lowering refresh rate (higher input latency)
|
||||||
|
==
|
||||||
|
|
||||||
|
Settings file
|
||||||
|
==
|
||||||
|
|
||||||
|
Open the settings file
|
||||||
|
==
|
||||||
|
|
||||||
|
Config directory
|
||||||
|
==
|
||||||
|
|
||||||
|
Open the directory that contains the configuration and user files
|
||||||
|
==
|
||||||
|
|
||||||
|
Open the directory to add custom themes
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle to edit your dummy settings
|
||||||
|
==
|
||||||
|
|
||||||
|
Loading skin files
|
||||||
|
==
|
||||||
|
|
||||||
|
Converse
|
||||||
|
==
|
||||||
|
|
||||||
|
Chat command
|
||||||
|
==
|
||||||
|
|
||||||
|
Controller
|
||||||
|
==
|
||||||
|
|
||||||
|
[Ingame controller mode]
|
||||||
|
Absolute
|
||||||
|
==
|
||||||
|
|
||||||
|
Ingame controller sens.
|
||||||
|
==
|
||||||
|
|
||||||
|
UI controller sens.
|
||||||
|
==
|
||||||
|
|
||||||
|
Controller jitter tolerance
|
||||||
|
==
|
||||||
|
|
||||||
|
Aim bind
|
||||||
|
==
|
||||||
|
|
||||||
|
Mouse
|
||||||
|
==
|
||||||
|
|
||||||
|
Dummy
|
||||||
|
==
|
||||||
|
|
||||||
|
Allows maps to render with more detail
|
||||||
|
==
|
||||||
|
|
||||||
|
Renderer
|
||||||
|
==
|
||||||
|
|
||||||
|
default
|
||||||
|
==
|
||||||
|
|
||||||
|
custom
|
||||||
|
==
|
||||||
|
|
||||||
|
auto
|
||||||
|
==
|
||||||
|
|
||||||
|
Appearance
|
||||||
|
==
|
||||||
|
|
||||||
|
Name Plate
|
||||||
|
==
|
||||||
|
|
||||||
|
Kill Messages
|
||||||
|
==
|
||||||
|
|
||||||
|
DDRace HUD
|
||||||
|
==
|
||||||
|
|
||||||
|
A Tee
|
||||||
|
==
|
||||||
|
|
||||||
|
Normal Color
|
||||||
|
==
|
||||||
|
|
||||||
|
Highlight Color
|
||||||
|
==
|
||||||
|
|
||||||
|
Rifle Laser Outline Color
|
||||||
|
==
|
||||||
|
|
||||||
|
Rifle Laser Inner Color
|
||||||
|
==
|
||||||
|
|
||||||
|
Shotgun Laser Outline Color
|
||||||
|
==
|
||||||
|
|
||||||
|
Shotgun Laser Inner Color
|
||||||
|
==
|
||||||
|
|
||||||
|
Door Laser Outline Color
|
||||||
|
==
|
||||||
|
|
||||||
|
Door Laser Inner Color
|
||||||
|
==
|
||||||
|
|
||||||
|
Freeze Laser Outline Color
|
||||||
|
==
|
||||||
|
|
||||||
|
Freeze Laser Inner Color
|
||||||
|
==
|
||||||
|
|
||||||
|
Set all to Rifle
|
||||||
|
==
|
||||||
|
|
||||||
|
Overlay entities
|
||||||
|
==
|
||||||
|
|
||||||
|
Extras
|
||||||
|
==
|
||||||
|
|
||||||
Discord
|
Discord
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1764,20 +1781,8 @@ https://ddnet.org/discord
|
||||||
Tutorial
|
Tutorial
|
||||||
==
|
==
|
||||||
|
|
||||||
Can't find a Tutorial server
|
|
||||||
== Impossibile trovare un Server Tutorial
|
|
||||||
|
|
||||||
Loading race demo files
|
|
||||||
== Caricando i file della demo della gara
|
|
||||||
|
|
||||||
Super
|
Super
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading sound files
|
|
||||||
== Caricando file musica
|
|
||||||
|
|
||||||
FPM
|
FPM
|
||||||
==
|
==
|
||||||
|
|
||||||
Moved ingame
|
|
||||||
== Spostato in gioco
|
|
||||||
|
|
|
@ -145,9 +145,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== 足
|
== 足
|
||||||
|
|
||||||
Filter
|
|
||||||
== フィルタ
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== 射撃
|
== 射撃
|
||||||
|
|
||||||
|
@ -160,9 +157,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== 自由視点
|
== 自由視点
|
||||||
|
|
||||||
Friends
|
|
||||||
== 友達
|
|
||||||
|
|
||||||
Game
|
Game
|
||||||
== ゲーム
|
== ゲーム
|
||||||
|
|
||||||
|
@ -353,12 +347,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== IP アドレス:
|
== IP アドレス:
|
||||||
|
|
||||||
Server details
|
|
||||||
== サーバー情報
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== サーバーフィルタ
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== サーバー情報
|
== サーバー情報
|
||||||
|
|
||||||
|
@ -532,9 +520,6 @@ Miscellaneous
|
||||||
Netversion:
|
Netversion:
|
||||||
== 通信バージョン:
|
== 通信バージョン:
|
||||||
|
|
||||||
Info
|
|
||||||
== 情報
|
|
||||||
|
|
||||||
UI Color
|
UI Color
|
||||||
== UI カラー
|
== UI カラー
|
||||||
|
|
||||||
|
@ -1395,12 +1380,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1416,12 +1424,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1437,6 +1439,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1488,10 +1493,10 @@ Open the directory that contains the configuration and user files
|
||||||
Open the directory to add custom themes
|
Open the directory to add custom themes
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download community skins
|
Download community skins
|
||||||
|
|
|
@ -154,9 +154,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== 발
|
== 발
|
||||||
|
|
||||||
Filter
|
|
||||||
== 필터
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== 발사
|
== 발사
|
||||||
|
|
||||||
|
@ -169,9 +166,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== 자유 시점
|
== 자유 시점
|
||||||
|
|
||||||
Friends
|
|
||||||
== 친구
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== 전체화면
|
== 전체화면
|
||||||
|
|
||||||
|
@ -359,12 +353,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== 서버 주소:
|
== 서버 주소:
|
||||||
|
|
||||||
Server details
|
|
||||||
== 서버 세부정보
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== 서버 필터
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== 서버 정보
|
== 서버 정보
|
||||||
|
|
||||||
|
@ -550,9 +538,6 @@ Miscellaneous
|
||||||
Netversion:
|
Netversion:
|
||||||
== 통신 버전:
|
== 통신 버전:
|
||||||
|
|
||||||
Info
|
|
||||||
== 정보
|
|
||||||
|
|
||||||
UI Color
|
UI Color
|
||||||
== UI 색상
|
== UI 색상
|
||||||
|
|
||||||
|
@ -1715,6 +1700,23 @@ None
|
||||||
Add Clan
|
Add Clan
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Mark the beginning of a cut (right click to reset)
|
Mark the beginning of a cut (right click to reset)
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1733,6 +1735,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
All combined
|
All combined
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -150,9 +150,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Бут
|
== Бут
|
||||||
|
|
||||||
Filter
|
|
||||||
== Фильтр
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Атуу
|
== Атуу
|
||||||
|
|
||||||
|
@ -165,9 +162,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Эркин сереп
|
== Эркин сереп
|
||||||
|
|
||||||
Friends
|
|
||||||
== Достор
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Толук экран
|
== Толук экран
|
||||||
|
|
||||||
|
@ -210,9 +204,6 @@ Hook
|
||||||
Hue
|
Hue
|
||||||
== Түсү
|
== Түсү
|
||||||
|
|
||||||
Info
|
|
||||||
== Маалымат
|
|
||||||
|
|
||||||
Internet
|
Internet
|
||||||
== Интернет
|
== Интернет
|
||||||
|
|
||||||
|
@ -424,12 +415,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Сервер дареги:
|
== Сервер дареги:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Сервер деталдары
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Сервер фильтри
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Маалымат
|
== Маалымат
|
||||||
|
|
||||||
|
@ -905,12 +890,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -926,12 +934,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -950,6 +952,9 @@ Cut length
|
||||||
Remove chat
|
Remove chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Please use a different name
|
Please use a different name
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1100,10 +1105,10 @@ Max CSVs
|
||||||
Dummy settings
|
Dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download skins
|
Download skins
|
||||||
|
@ -1157,10 +1162,16 @@ Show all
|
||||||
Toggle dyncam
|
Toggle dyncam
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle dummy
|
Toggle ghost
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle ghost
|
Converse
|
||||||
|
==
|
||||||
|
|
||||||
|
Chat command
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Dummy copy
|
Dummy copy
|
||||||
|
@ -1169,9 +1180,6 @@ Dummy copy
|
||||||
Hammerfly dummy
|
Hammerfly dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Converse
|
|
||||||
==
|
|
||||||
|
|
||||||
Statboard
|
Statboard
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1184,9 +1192,6 @@ Show entities
|
||||||
Show HUD
|
Show HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Chat command
|
|
||||||
==
|
|
||||||
|
|
||||||
Enable controller
|
Enable controller
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -147,9 +147,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Føtter
|
== Føtter
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filter
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Skyt
|
== Skyt
|
||||||
|
|
||||||
|
@ -162,9 +159,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Fri-visning
|
== Fri-visning
|
||||||
|
|
||||||
Friends
|
|
||||||
== Venner
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Fullskjerm
|
== Fullskjerm
|
||||||
|
|
||||||
|
@ -358,12 +352,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Serveradresse:
|
== Serveradresse:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Serverdetaljer
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Serverfilter
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Serverinfo
|
== Serverinfo
|
||||||
|
|
||||||
|
@ -534,9 +522,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Bane:
|
== Bane:
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Farge
|
== Farge
|
||||||
|
|
||||||
|
@ -1364,12 +1349,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1385,12 +1393,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1406,6 +1408,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1457,10 +1462,10 @@ Open the directory that contains the configuration and user files
|
||||||
Open the directory to add custom themes
|
Open the directory to add custom themes
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download community skins
|
Download community skins
|
||||||
|
|
|
@ -145,9 +145,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== ﺎﭘ
|
== ﺎﭘ
|
||||||
|
|
||||||
Filter
|
|
||||||
== ﺮﺘﻠﯿﻓ
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== ﻚﯿﻠﺷ
|
== ﻚﯿﻠﺷ
|
||||||
|
|
||||||
|
@ -160,9 +157,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== ﺩﺍﺯﺁ-ﺪﯾﺩ
|
== ﺩﺍﺯﺁ-ﺪﯾﺩ
|
||||||
|
|
||||||
Friends
|
|
||||||
== ﻥﺎﺘﺳﻭﺩ
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== ﻞﻣﺎﻛ ى ﻪﺤﻔﺻ
|
== ﻞﻣﺎﻛ ى ﻪﺤﻔﺻ
|
||||||
|
|
||||||
|
@ -472,9 +466,6 @@ Server address:
|
||||||
Refresh
|
Refresh
|
||||||
== ﯼﺯﺎﺳ ﻩﺯﺎﺗ
|
== ﯼﺯﺎﺳ ﻩﺯﺎﺗ
|
||||||
|
|
||||||
Server filter
|
|
||||||
== ﺭﻭﺮﺳ ﺮﺘﻠﯿﻓ
|
|
||||||
|
|
||||||
Server not full
|
Server not full
|
||||||
== ﺪﺷﺎﺒﻧ ﺮﭘ ﺭﻭﺮﺳ
|
== ﺪﺷﺎﺒﻧ ﺮﭘ ﺭﻭﺮﺳ
|
||||||
|
|
||||||
|
@ -505,18 +496,12 @@ Types
|
||||||
Reset filter
|
Reset filter
|
||||||
== ﺮﺘﻠﯿﻓ ﻥﺩﺮﮐ ﺖﺴﯾﺭ
|
== ﺮﺘﻠﯿﻓ ﻥﺩﺮﮐ ﺖﺴﯾﺭ
|
||||||
|
|
||||||
Server details
|
|
||||||
== ﺭﻭﺮﺳ ﺕﺎﻋﻼﻃﺍ
|
|
||||||
|
|
||||||
Scoreboard
|
Scoreboard
|
||||||
== ﺕﺍﺯﺎﯿﺘﻣﺍ ﯼﻮﻠﺑﺎﺗ
|
== ﺕﺍﺯﺎﯿﺘﻣﺍ ﯼﻮﻠﺑﺎﺗ
|
||||||
|
|
||||||
Remove
|
Remove
|
||||||
== ﻥﺩﺮﮐ کﺎﭘ
|
== ﻥﺩﺮﮐ کﺎﭘ
|
||||||
|
|
||||||
Info
|
|
||||||
== ﺕﺎﻋﻼﻃﺍ
|
|
||||||
|
|
||||||
Please use a different name
|
Please use a different name
|
||||||
== ﻦﮐ ﻩﺩﺎﻔﺘﺳﺍ ﺕﻭﺎﻔﺘﻣ ﻡﺎﻧ ﮏﯾ ﺯﺍ ﺎﻔﻄﻟ
|
== ﻦﮐ ﻩﺩﺎﻔﺘﺳﺍ ﺕﻭﺎﻔﺘﻣ ﻡﺎﻧ ﮏﯾ ﺯﺍ ﺎﻔﻄﻟ
|
||||||
|
|
||||||
|
@ -1685,6 +1670,23 @@ None
|
||||||
Add Clan
|
Add Clan
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Mark the beginning of a cut (right click to reset)
|
Mark the beginning of a cut (right click to reset)
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1703,6 +1705,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
All combined
|
All combined
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -149,9 +149,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Stopy
|
== Stopy
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtr
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Strzał
|
== Strzał
|
||||||
|
|
||||||
|
@ -164,9 +161,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Wolna kamera
|
== Wolna kamera
|
||||||
|
|
||||||
Friends
|
|
||||||
== Znajomi
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Pełny ekran
|
== Pełny ekran
|
||||||
|
|
||||||
|
@ -360,12 +354,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Adres serwera:
|
== Adres serwera:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Szczegóły serwera
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtr serwerów
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Info serwera
|
== Info serwera
|
||||||
|
|
||||||
|
@ -551,9 +539,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Mapa:
|
== Mapa:
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Kolor
|
== Kolor
|
||||||
|
|
||||||
|
@ -1465,12 +1450,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1486,12 +1494,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1507,6 +1509,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -152,9 +152,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Pés
|
== Pés
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtro
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Disparar
|
== Disparar
|
||||||
|
|
||||||
|
@ -167,9 +164,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Vista Livre
|
== Vista Livre
|
||||||
|
|
||||||
Friends
|
|
||||||
== Amigos
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Ecrã inteiro
|
== Ecrã inteiro
|
||||||
|
|
||||||
|
@ -375,12 +369,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Endereço do servidor:
|
== Endereço do servidor:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Detalhes do servidor
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtro de servidores
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Info de servidor
|
== Info de servidor
|
||||||
|
|
||||||
|
@ -549,9 +537,6 @@ Map:
|
||||||
FSAA samples
|
FSAA samples
|
||||||
== Amostras FSAA
|
== Amostras FSAA
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Miscellaneous
|
Miscellaneous
|
||||||
== Diversos
|
== Diversos
|
||||||
|
|
||||||
|
@ -1183,12 +1168,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1204,12 +1212,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1225,6 +1227,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1309,10 +1314,10 @@ Open the directory that contains the configuration and user files
|
||||||
Open the directory to add custom themes
|
Open the directory to add custom themes
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download skins
|
Download skins
|
||||||
|
@ -1357,10 +1362,16 @@ Show all
|
||||||
Toggle dyncam
|
Toggle dyncam
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle dummy
|
Toggle ghost
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle ghost
|
Converse
|
||||||
|
==
|
||||||
|
|
||||||
|
Chat command
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Dummy copy
|
Dummy copy
|
||||||
|
@ -1369,9 +1380,6 @@ Dummy copy
|
||||||
Hammerfly dummy
|
Hammerfly dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Converse
|
|
||||||
==
|
|
||||||
|
|
||||||
Statboard
|
Statboard
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1384,9 +1392,6 @@ Show entities
|
||||||
Show HUD
|
Show HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Chat command
|
|
||||||
==
|
|
||||||
|
|
||||||
Enable controller
|
Enable controller
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -151,9 +151,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Picioare
|
== Picioare
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtre
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Foc
|
== Foc
|
||||||
|
|
||||||
|
@ -166,9 +163,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Vizualizare liberă
|
== Vizualizare liberă
|
||||||
|
|
||||||
Friends
|
|
||||||
== Prieteni
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Ecrat complet
|
== Ecrat complet
|
||||||
|
|
||||||
|
@ -365,12 +359,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Adresă server:
|
== Adresă server:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Detalii server
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtru servere:
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Info. server
|
== Info. server
|
||||||
|
|
||||||
|
@ -544,9 +532,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Harta:
|
== Harta:
|
||||||
|
|
||||||
Info
|
|
||||||
== Informații
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Tentă
|
== Tentă
|
||||||
|
|
||||||
|
@ -920,12 +905,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -941,12 +949,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -965,6 +967,9 @@ Cut length
|
||||||
Remove chat
|
Remove chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Please use a different name
|
Please use a different name
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1115,10 +1120,10 @@ Max CSVs
|
||||||
Dummy settings
|
Dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download skins
|
Download skins
|
||||||
|
@ -1172,10 +1177,16 @@ Show all
|
||||||
Toggle dyncam
|
Toggle dyncam
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle dummy
|
Toggle ghost
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle ghost
|
Converse
|
||||||
|
==
|
||||||
|
|
||||||
|
Chat command
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Dummy copy
|
Dummy copy
|
||||||
|
@ -1184,9 +1195,6 @@ Dummy copy
|
||||||
Hammerfly dummy
|
Hammerfly dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Converse
|
|
||||||
==
|
|
||||||
|
|
||||||
Statboard
|
Statboard
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1199,9 +1207,6 @@ Show entities
|
||||||
Show HUD
|
Show HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Chat command
|
|
||||||
==
|
|
||||||
|
|
||||||
Enable controller
|
Enable controller
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -159,9 +159,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Ноги
|
== Ноги
|
||||||
|
|
||||||
Filter
|
|
||||||
== Фильтр
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Стрелять
|
== Стрелять
|
||||||
|
|
||||||
|
@ -174,9 +171,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Свободный обзор
|
== Свободный обзор
|
||||||
|
|
||||||
Friends
|
|
||||||
== Друзья
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Полноэкранный(настр.)
|
== Полноэкранный(настр.)
|
||||||
|
|
||||||
|
@ -370,12 +364,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Адрес сервера:
|
== Адрес сервера:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Сведения сервера
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Фильтр серверов
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Информация
|
== Информация
|
||||||
|
|
||||||
|
@ -607,9 +595,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Карта:
|
== Карта:
|
||||||
|
|
||||||
Info
|
|
||||||
== Инфо
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Оттен.
|
== Оттен.
|
||||||
|
|
||||||
|
@ -1756,3 +1741,23 @@ Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
|
|
||||||
Moved ingame
|
Moved ingame
|
||||||
== Перемещены в игре
|
== Перемещены в игре
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
|
@ -149,9 +149,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Stopala
|
== Stopala
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filter
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Pucaj
|
== Pucaj
|
||||||
|
|
||||||
|
@ -164,9 +161,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Slobodan pregled
|
== Slobodan pregled
|
||||||
|
|
||||||
Friends
|
|
||||||
== Prijatelji
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Preko celog ekrana
|
== Preko celog ekrana
|
||||||
|
|
||||||
|
@ -356,12 +350,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Adresa servera:
|
== Adresa servera:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Detalji o serveru
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filter servera
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== O serveru
|
== O serveru
|
||||||
|
|
||||||
|
@ -562,9 +550,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Mapa
|
== Mapa
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Nijansa
|
== Nijansa
|
||||||
|
|
||||||
|
@ -1507,178 +1492,169 @@ A render command failed. Try to update your GPU drivers.
|
||||||
Submitting the render commands failed. Try to update your GPU drivers.
|
Submitting the render commands failed. Try to update your GPU drivers.
|
||||||
== Неуспешно слање рендерних команди. Покушајте ажурирати драјвере за вашу графичку картицу.
|
== Неуспешно слање рендерних команди. Покушајте ажурирати драјвере за вашу графичку картицу.
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
Failed to swap framebuffers. Try to update your GPU drivers.
|
|
||||||
==
|
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
Unknown error. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
|
||||||
== Неуспешно замена бафера фреймова. Покушајте ажурирати драјвере за вашу графичку картицу.
|
|
||||||
|
|
||||||
[Graphics error]
|
|
||||||
Could not initialize the given graphics backend, reverting to the default backend now.
|
Could not initialize the given graphics backend, reverting to the default backend now.
|
||||||
==
|
== Није било могуће иницијализовати дати графички позадину, сада се враћамо на подразумевану позадину.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
== Није било могуће иницијализовати дати графички позадину, највероватније зато што нисте инсталирали драјвер за интегрисану графичку картицу.
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
== Није могуће сачувати преузету мапу. Покушајте ручно обрисати овај фајл: %s.
|
||||||
|
|
||||||
Initializing components
|
Initializing components
|
||||||
== Иницијализација компоненти
|
== Иницијализација компоненти
|
||||||
|
|
||||||
Quitting. Please wait…
|
Quitting. Please wait…
|
||||||
== Излазим. Молим вас да почекате…
|
== Излазим. Молим вас да почекате...
|
||||||
|
|
||||||
Restarting. Please wait…
|
Restarting. Please wait…
|
||||||
== Поновно покрећем се. Молим вас да почекате…
|
== Поновно покрећем се. Молим вас да почекате...
|
||||||
|
|
||||||
Multi-View
|
Multi-View
|
||||||
==
|
== Мулти-поглед
|
||||||
|
|
||||||
Rename folder
|
Rename folder
|
||||||
==
|
== Преименујте фасциклу
|
||||||
|
|
||||||
A demo with this name already exists
|
A demo with this name already exists
|
||||||
==
|
== Демо са овим именом већ постоји.
|
||||||
|
|
||||||
A folder with this name already exists
|
A folder with this name already exists
|
||||||
==
|
== Фасцикла са овим именом већ постоји.
|
||||||
|
|
||||||
Unable to rename the folder
|
Unable to rename the folder
|
||||||
==
|
== Није могуће преименовати фасциклу.
|
||||||
|
|
||||||
File '%s' already exists, do you want to overwrite it?
|
File '%s' already exists, do you want to overwrite it?
|
||||||
==
|
== Датотека '%s' већ постоји, желите ли да је препишете?
|
||||||
|
|
||||||
(paused)
|
(paused)
|
||||||
==
|
== (паузирано)
|
||||||
|
|
||||||
transmits your player name to info.ddnet.org
|
transmits your player name to info.ddnet.org
|
||||||
==
|
== преноси ваше играчко име на info.ddnet.org
|
||||||
|
|
||||||
Copy info
|
Copy info
|
||||||
==
|
== Копирај информације
|
||||||
|
|
||||||
No server selected
|
No server selected
|
||||||
==
|
== Није изабран сервер
|
||||||
|
|
||||||
Online players (%d)
|
Online players (%d)
|
||||||
==
|
== Играчи на мрежи (%d)
|
||||||
|
|
||||||
Online clanmates (%d)
|
Online clanmates (%d)
|
||||||
==
|
== Чланови клана на мрежи (%d)
|
||||||
|
|
||||||
[friends (server browser)]
|
[friends (server browser)]
|
||||||
Offline (%d)
|
Offline (%d)
|
||||||
==
|
== Изван мреже (%d)
|
||||||
|
|
||||||
Click to select server. Double click to join your friend.
|
Click to select server. Double click to join your friend.
|
||||||
==
|
== Кликните да бисте изабрали сервер. Дупли клик за придруживање пријатељу.
|
||||||
|
|
||||||
Click to remove this player from your friends list.
|
Click to remove this player from your friends list.
|
||||||
==
|
== Кликните да бисте уклонили овог играча са листе пријатеља.
|
||||||
|
|
||||||
Click to remove this clan from your friends list.
|
Click to remove this clan from your friends list.
|
||||||
==
|
== Кликните да бисте уклонили овај клан са листе пријатеља.
|
||||||
|
|
||||||
None
|
None
|
||||||
==
|
== Ништа
|
||||||
|
|
||||||
Are you sure that you want to remove the player '%s' from your friends list?
|
Are you sure that you want to remove the player '%s' from your friends list?
|
||||||
==
|
== Да ли сте сигурни да желите да уклоните играча '%s' са листе пријатеља?
|
||||||
|
|
||||||
Are you sure that you want to remove the clan '%s' from your friends list?
|
Are you sure that you want to remove the clan '%s' from your friends list?
|
||||||
==
|
== Да ли сте сигурни да желите да уклоните клан '%s' са листе пријатеља?
|
||||||
|
|
||||||
Add Clan
|
Add Clan
|
||||||
==
|
== Додај клан
|
||||||
|
|
||||||
Play the current demo
|
Play the current demo
|
||||||
==
|
== Пусти тренутни демо запис
|
||||||
|
|
||||||
Pause the current demo
|
Pause the current demo
|
||||||
==
|
== Паузирај тренутни демо запис
|
||||||
|
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
== Заустави тренутни демо запис
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
== Иди назад један корак
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
== Иди напред један корак
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
== Успори демо запис
|
||||||
|
|
||||||
Speed up the demo
|
Speed up the demo
|
||||||
==
|
== Убрзај демо запис
|
||||||
|
|
||||||
Mark the beginning of a cut (right click to reset)
|
Mark the beginning of a cut (right click to reset)
|
||||||
==
|
== Обележи почетак сечења (десни клик за ресетовање)
|
||||||
|
|
||||||
Mark the end of a cut (right click to reset)
|
Mark the end of a cut (right click to reset)
|
||||||
==
|
== Обележи крај сечења (десни клик за ресетовање)
|
||||||
|
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
== Извоз сечења као засебног демо записа
|
||||||
|
|
||||||
Go back one marker
|
Go back one marker
|
||||||
==
|
== Иди назад један маркер
|
||||||
|
|
||||||
Go forward one marker
|
Go forward one marker
|
||||||
==
|
== Иди напред један маркер
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
== Затвори репродуктор демо записа
|
||||||
|
|
||||||
Toggle keyboard shortcuts
|
Toggle keyboard shortcuts
|
||||||
==
|
== Пребациванје тастатурних пречица
|
||||||
|
|
||||||
Export demo cut
|
Export demo cut
|
||||||
==
|
== Извоз демо сечења
|
||||||
|
|
||||||
Cut interval
|
Cut interval
|
||||||
==
|
== Интервал сечења
|
||||||
|
|
||||||
Cut length
|
Cut length
|
||||||
==
|
== Дужина сечења
|
||||||
|
|
||||||
All combined
|
All combined
|
||||||
==
|
== Све комбиновано
|
||||||
|
|
||||||
Folder Link
|
Folder Link
|
||||||
==
|
== Веза до фасцикле
|
||||||
|
|
||||||
Open the directory that contains the demo files
|
Open the directory that contains the demo files
|
||||||
==
|
== Отвори директоријум који садржи демо фајлове
|
||||||
|
|
||||||
Are you sure that you want to delete the folder '%s'?
|
Are you sure that you want to delete the folder '%s'?
|
||||||
==
|
== Да ли сте сигурни да желите да обришете фасциклу '%s'?
|
||||||
|
|
||||||
Are you sure that you want to delete the demo '%s'?
|
Are you sure that you want to delete the demo '%s'?
|
||||||
==
|
== Да ли сте сигурни да желите да обришете демо запис '%s'?
|
||||||
|
|
||||||
Delete folder
|
Delete folder
|
||||||
==
|
== Обриши фасциклу
|
||||||
|
|
||||||
Unable to delete the demo '%s'
|
Unable to delete the demo '%s'
|
||||||
==
|
== Није могуће обрисати демо запис '%s'
|
||||||
|
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
== Није могуће обрисати фасциклу '%s'. Проверите прво да ли је празна.
|
||||||
|
|
||||||
Menu opened. Press Esc key again to close menu.
|
Menu opened. Press Esc key again to close menu.
|
||||||
==
|
== Мени је отворен. Поново притисните тастер Esc да бисте затворили мени.
|
||||||
|
|
||||||
Save power by lowering refresh rate (higher input latency)
|
Save power by lowering refresh rate (higher input latency)
|
||||||
==
|
== Уштедите струју смањивањем стопе освежавања (већа улазна латенција)
|
||||||
|
|
||||||
Open the settings file
|
Open the settings file
|
||||||
==
|
== Отворите датотеку са подешавањима
|
||||||
|
|
||||||
Open the directory that contains the configuration and user files
|
Open the directory that contains the configuration and user files
|
||||||
== Отворите директоријум који садржи конфигурационе и корисничке датотеке.
|
== Отворите директоријум који садржи конфигурационе и корисничке датотеке.
|
||||||
|
@ -1747,4 +1723,32 @@ Open the directory to add custom assets
|
||||||
== Отворите директоријум за додавање прилагођених ресурса
|
== Отворите директоријум за додавање прилагођених ресурса
|
||||||
|
|
||||||
Moved ingame
|
Moved ingame
|
||||||
|
== Померено у игри
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
Failed to swap framebuffers. Try to update your GPU drivers.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Graphics error]
|
||||||
|
Unknown error. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
||||||
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
==
|
==
|
||||||
|
|
|
@ -145,9 +145,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Стопала
|
== Стопала
|
||||||
|
|
||||||
Filter
|
|
||||||
== Филтер
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Пуцај
|
== Пуцај
|
||||||
|
|
||||||
|
@ -160,9 +157,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Слободан преглед
|
== Слободан преглед
|
||||||
|
|
||||||
Friends
|
|
||||||
== Пријатељи
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Преко целог екрана
|
== Преко целог екрана
|
||||||
|
|
||||||
|
@ -352,12 +346,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Адреса сервера:
|
== Адреса сервера:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Детаљи о серверу
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Филтер сервера
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== О серверу
|
== О серверу
|
||||||
|
|
||||||
|
@ -558,9 +546,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Мапа
|
== Мапа
|
||||||
|
|
||||||
Info
|
|
||||||
== Инфо
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Нијанса
|
== Нијанса
|
||||||
|
|
||||||
|
@ -1601,12 +1586,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1622,12 +1630,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1643,6 +1645,9 @@ Cut interval
|
||||||
Cut length
|
Cut length
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
All combined
|
All combined
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -177,9 +177,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== 脚
|
== 脚
|
||||||
|
|
||||||
Filter
|
|
||||||
== 筛选
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== 开火
|
== 开火
|
||||||
|
|
||||||
|
@ -192,9 +189,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== 自由视角
|
== 自由视角
|
||||||
|
|
||||||
Friends
|
|
||||||
== 好友
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== 独占全屏
|
== 独占全屏
|
||||||
|
|
||||||
|
@ -415,12 +409,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== 服务器地址:
|
== 服务器地址:
|
||||||
|
|
||||||
Server details
|
|
||||||
== 服务器详情
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== 服务器筛选
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== 服务器信息
|
== 服务器信息
|
||||||
|
|
||||||
|
@ -616,9 +604,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== 地图:
|
== 地图:
|
||||||
|
|
||||||
Info
|
|
||||||
== 信息
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== 色调
|
== 色调
|
||||||
|
|
||||||
|
@ -1780,3 +1765,23 @@ Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
|
|
||||||
Moved ingame
|
Moved ingame
|
||||||
== 游戏内移动
|
== 游戏内移动
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
|
@ -145,9 +145,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Nohy
|
== Nohy
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filter
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Streľba
|
== Streľba
|
||||||
|
|
||||||
|
@ -160,9 +157,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Voľná Kamera
|
== Voľná Kamera
|
||||||
|
|
||||||
Friends
|
|
||||||
== Priatelia
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Celá obrazovka
|
== Celá obrazovka
|
||||||
|
|
||||||
|
@ -356,12 +350,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Adresa servera:
|
== Adresa servera:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Detaily servera
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filter serverov
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Informácie
|
== Informácie
|
||||||
|
|
||||||
|
@ -532,9 +520,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Mapa:
|
== Mapa:
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Hue
|
== Hue
|
||||||
|
|
||||||
|
@ -911,12 +896,35 @@ Pause the current demo
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Go back one marker
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward one marker
|
||||||
|
==
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -932,12 +940,6 @@ Mark the end of a cut (right click to reset)
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
==
|
||||||
|
|
||||||
Go back one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Go forward one marker
|
|
||||||
==
|
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -956,6 +958,9 @@ Cut length
|
||||||
Remove chat
|
Remove chat
|
||||||
==
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
||||||
Please use a different name
|
Please use a different name
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1106,10 +1111,10 @@ Max CSVs
|
||||||
Dummy settings
|
Dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Loading skin files
|
Toggle to edit your dummy settings
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Loading skin files
|
||||||
==
|
==
|
||||||
|
|
||||||
Download skins
|
Download skins
|
||||||
|
@ -1163,10 +1168,16 @@ Show all
|
||||||
Toggle dyncam
|
Toggle dyncam
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle dummy
|
Toggle ghost
|
||||||
==
|
==
|
||||||
|
|
||||||
Toggle ghost
|
Converse
|
||||||
|
==
|
||||||
|
|
||||||
|
Chat command
|
||||||
|
==
|
||||||
|
|
||||||
|
Toggle dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Dummy copy
|
Dummy copy
|
||||||
|
@ -1175,9 +1186,6 @@ Dummy copy
|
||||||
Hammerfly dummy
|
Hammerfly dummy
|
||||||
==
|
==
|
||||||
|
|
||||||
Converse
|
|
||||||
==
|
|
||||||
|
|
||||||
Statboard
|
Statboard
|
||||||
==
|
==
|
||||||
|
|
||||||
|
@ -1190,9 +1198,6 @@ Show entities
|
||||||
Show HUD
|
Show HUD
|
||||||
==
|
==
|
||||||
|
|
||||||
Chat command
|
|
||||||
==
|
|
||||||
|
|
||||||
Enable controller
|
Enable controller
|
||||||
==
|
==
|
||||||
|
|
||||||
|
|
|
@ -164,9 +164,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Pies
|
== Pies
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtro
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Disparar
|
== Disparar
|
||||||
|
|
||||||
|
@ -179,9 +176,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Vista libre
|
== Vista libre
|
||||||
|
|
||||||
Friends
|
|
||||||
== Amigos
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Pantalla completa
|
== Pantalla completa
|
||||||
|
|
||||||
|
@ -378,12 +372,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== IP del servidor:
|
== IP del servidor:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Detalles del servidor
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtro del servidor
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Servidor
|
== Servidor
|
||||||
|
|
||||||
|
@ -557,9 +545,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Mapa:
|
== Mapa:
|
||||||
|
|
||||||
Info
|
|
||||||
== Información
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Matiz
|
== Matiz
|
||||||
|
|
||||||
|
@ -1763,3 +1748,23 @@ Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
|
|
||||||
Moved ingame
|
Moved ingame
|
||||||
== Movido dentro del juego
|
== Movido dentro del juego
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
# 3edcxzaq1 2020-06-25 00:00:00
|
# 3edcxzaq1 2020-06-25 00:00:00
|
||||||
# cur.ie 2020-09-28 00:00:00
|
# cur.ie 2020-09-28 00:00:00
|
||||||
# simpygirl 2022-02-20 00:00:00
|
# simpygirl 2022-02-20 00:00:00
|
||||||
|
# furo 2023-08-29 00:00:00
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -149,9 +150,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Fötter
|
== Fötter
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filter
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Skjuta
|
== Skjuta
|
||||||
|
|
||||||
|
@ -164,9 +162,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Friläge
|
== Friläge
|
||||||
|
|
||||||
Friends
|
|
||||||
== Kompisar
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Fullskärm
|
== Fullskärm
|
||||||
|
|
||||||
|
@ -207,7 +202,7 @@ Hook
|
||||||
== Hook
|
== Hook
|
||||||
|
|
||||||
Invalid Demo
|
Invalid Demo
|
||||||
== Ogiltigt deo
|
== Ogiltig demo
|
||||||
|
|
||||||
Join blue
|
Join blue
|
||||||
== Spela i blått
|
== Spela i blått
|
||||||
|
@ -343,7 +338,7 @@ Rename demo
|
||||||
== Byt namn på demo
|
== Byt namn på demo
|
||||||
|
|
||||||
Reset filter
|
Reset filter
|
||||||
== Återställ filter
|
== Nollställ filter
|
||||||
|
|
||||||
Score
|
Score
|
||||||
== Poäng
|
== Poäng
|
||||||
|
@ -360,12 +355,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Serveradress
|
== Serveradress
|
||||||
|
|
||||||
Server details
|
|
||||||
== Serverdetaljer
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Serverfilter
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Serverinfo
|
== Serverinfo
|
||||||
|
|
||||||
|
@ -415,7 +404,7 @@ Strict gametype filter
|
||||||
== Strikt speltypsfilter
|
== Strikt speltypsfilter
|
||||||
|
|
||||||
Sudden Death
|
Sudden Death
|
||||||
== Plötslig död
|
== Sudden Death
|
||||||
|
|
||||||
Switch weapon on pickup
|
Switch weapon on pickup
|
||||||
== Byt vapen vid anskaffning
|
== Byt vapen vid anskaffning
|
||||||
|
@ -433,7 +422,7 @@ The server is running a non-standard tuning on a pure game type.
|
||||||
== Denna server kör inte standardinställningar på en reserverad speltyp.
|
== Denna server kör inte standardinställningar på en reserverad speltyp.
|
||||||
|
|
||||||
There's an unsaved map in the editor, you might want to save it before you quit the game.
|
There's an unsaved map in the editor, you might want to save it before you quit the game.
|
||||||
== Det finns en osparad bana i redigeraden, du kanske vill spara den innan du avslutar.
|
== Det finns en osparad bana i redigeraren, du kanske vill spara den innan du avslutar.
|
||||||
|
|
||||||
Time limit
|
Time limit
|
||||||
== Tidsbegränsning
|
== Tidsbegränsning
|
||||||
|
@ -534,9 +523,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Bana
|
== Bana
|
||||||
|
|
||||||
Info
|
|
||||||
== Info
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Nyans
|
== Nyans
|
||||||
|
|
||||||
|
@ -550,7 +536,7 @@ Size:
|
||||||
== Storlek:
|
== Storlek:
|
||||||
|
|
||||||
Reset to defaults
|
Reset to defaults
|
||||||
== Återställ till standard
|
== Nollställ till standard
|
||||||
|
|
||||||
Quit anyway?
|
Quit anyway?
|
||||||
== Avsluta i alla fall?
|
== Avsluta i alla fall?
|
||||||
|
@ -607,7 +593,7 @@ Show kill messages
|
||||||
== Visa döds meddelanden
|
== Visa döds meddelanden
|
||||||
|
|
||||||
Reset
|
Reset
|
||||||
== Återställ
|
== Nollställ
|
||||||
|
|
||||||
DDNet
|
DDNet
|
||||||
== DDNet
|
== DDNet
|
||||||
|
@ -643,7 +629,7 @@ Reconnect in %d sec
|
||||||
== Återkopplar om %d sekunder
|
== Återkopplar om %d sekunder
|
||||||
|
|
||||||
Successfully saved the replay!
|
Successfully saved the replay!
|
||||||
== Lyckades med att spara repris
|
== Lyckades med att spara repris!
|
||||||
|
|
||||||
Save ghost
|
Save ghost
|
||||||
== Spara spöken
|
== Spara spöken
|
||||||
|
@ -676,13 +662,13 @@ Show votes window after voting
|
||||||
== Visa röstnings fönster efter röstning
|
== Visa röstnings fönster efter röstning
|
||||||
|
|
||||||
DDNet Client needs to be restarted to complete update!
|
DDNet Client needs to be restarted to complete update!
|
||||||
== DDNet Klienten behöves startas om för att genomföra updateringen!
|
== DDNet Klienten behövs startas om för att genomföra uppdateringen!
|
||||||
|
|
||||||
Kill
|
Kill
|
||||||
== Dö
|
== Dö
|
||||||
|
|
||||||
Personal best:
|
Personal best:
|
||||||
== Personligs bästa:
|
== Personligt bästa:
|
||||||
|
|
||||||
Show DDNet map finishes in server browser
|
Show DDNet map finishes in server browser
|
||||||
== Visa DDNet bana avklarningar i server bläddraren
|
== Visa DDNet bana avklarningar i server bläddraren
|
||||||
|
@ -706,7 +692,7 @@ Render
|
||||||
== Rendera
|
== Rendera
|
||||||
|
|
||||||
Are you sure that you want to disconnect?
|
Are you sure that you want to disconnect?
|
||||||
== Är du säker att du vill koppla ifrån?
|
== Är du säker på att du vill koppla ifrån?
|
||||||
|
|
||||||
Grabs
|
Grabs
|
||||||
== Grabs
|
== Grabs
|
||||||
|
@ -808,7 +794,7 @@ Date
|
||||||
== Datum
|
== Datum
|
||||||
|
|
||||||
Show other players' hook collision lines
|
Show other players' hook collision lines
|
||||||
== Visa andra spelares hook kollision linor
|
== Visa andra spelares hook kollisions linjer
|
||||||
|
|
||||||
Fetch Info
|
Fetch Info
|
||||||
== Hämta Info
|
== Hämta Info
|
||||||
|
@ -874,7 +860,7 @@ Show only chat messages from friends
|
||||||
== Visa bara chatt meddelanden från vänner
|
== Visa bara chatt meddelanden från vänner
|
||||||
|
|
||||||
DDNet Client updated!
|
DDNet Client updated!
|
||||||
== DDNet Klienten updaterades!
|
== DDNet Klienten uppdaterades!
|
||||||
|
|
||||||
Converse
|
Converse
|
||||||
== Konversera
|
== Konversera
|
||||||
|
@ -916,7 +902,7 @@ Best
|
||||||
== Bäst
|
== Bäst
|
||||||
|
|
||||||
Updating...
|
Updating...
|
||||||
== Updaterar...
|
== Uppdaterar...
|
||||||
|
|
||||||
Clan plates size
|
Clan plates size
|
||||||
== Klanskylt storlek
|
== Klanskylt storlek
|
||||||
|
@ -925,7 +911,7 @@ Size
|
||||||
== Storlek
|
== Storlek
|
||||||
|
|
||||||
Save the best demo of each race
|
Save the best demo of each race
|
||||||
== Spara the bästa demon av varje race
|
== Spara den bästa demot av varje race
|
||||||
|
|
||||||
Frags
|
Frags
|
||||||
== Frags
|
== Frags
|
||||||
|
@ -997,7 +983,7 @@ Show names in chat in team colors
|
||||||
== Visa namn in chatten med lagets färger
|
== Visa namn in chatten med lagets färger
|
||||||
|
|
||||||
Update now
|
Update now
|
||||||
== Updatera nu
|
== Uppdatera nu
|
||||||
|
|
||||||
Toggle ghost
|
Toggle ghost
|
||||||
== Växla spöke
|
== Växla spöke
|
||||||
|
@ -1009,7 +995,7 @@ Team message
|
||||||
== Lag meddelande
|
== Lag meddelande
|
||||||
|
|
||||||
File already exists, do you want to overwrite it?
|
File already exists, do you want to overwrite it?
|
||||||
== Filen finns redan, vill du skriv över den?
|
== Filen finns redan, vill du skriva över den?
|
||||||
|
|
||||||
Hook collisions
|
Hook collisions
|
||||||
== Hook kollisioner
|
== Hook kollisioner
|
||||||
|
@ -1069,7 +1055,7 @@ Server executable not found, can't run server
|
||||||
== Server exekveringsfil hittades ej, kan ej starta servern
|
== Server exekveringsfil hittades ej, kan ej starta servern
|
||||||
|
|
||||||
Editor
|
Editor
|
||||||
== Editor
|
== Redigeraren
|
||||||
|
|
||||||
[Start menu]
|
[Start menu]
|
||||||
Play
|
Play
|
||||||
|
@ -1091,7 +1077,7 @@ Saving ddnet-settings.cfg failed
|
||||||
== Det gick inte att spara ddnet-settings.cfg
|
== Det gick inte att spara ddnet-settings.cfg
|
||||||
|
|
||||||
The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs.
|
The width of texture %s is not divisible by %d, or the height is not divisible by %d, which might cause visual bugs.
|
||||||
== Bredden på texturen %s är inte delbar med %d, eller höjden är inte delbar med %d, vilket kan orsaka visuella buggar.
|
== Bredden på texturen %s är inte delbar med %d, eller är höjden inte delbar med %d, vilket kan orsaka visuella buggar.
|
||||||
|
|
||||||
Debug mode enabled. Press Ctrl+Shift+D to disable debug mode.
|
Debug mode enabled. Press Ctrl+Shift+D to disable debug mode.
|
||||||
== Felsökningsläge är aktiverad, Klicka Ctrl+Shift+D för att stänga av felsökningsläge.
|
== Felsökningsläge är aktiverad, Klicka Ctrl+Shift+D för att stänga av felsökningsläge.
|
||||||
|
@ -1106,7 +1092,7 @@ Checking for existing player with your name
|
||||||
== Söker efter en befintlig spelare med ditt namn
|
== Söker efter en befintlig spelare med ditt namn
|
||||||
|
|
||||||
Are you sure that you want to disconnect and switch to a different server?
|
Are you sure that you want to disconnect and switch to a different server?
|
||||||
== Är du säker att du vill koppla ifrån och byta server?
|
== Är du säker på att du vill koppla ifrån och byta server?
|
||||||
|
|
||||||
Theme
|
Theme
|
||||||
== Tema
|
== Tema
|
||||||
|
@ -1223,7 +1209,7 @@ Entities
|
||||||
== Entities
|
== Entities
|
||||||
|
|
||||||
Emoticons
|
Emoticons
|
||||||
== Emoticons
|
== Känsloikoner
|
||||||
|
|
||||||
Particles
|
Particles
|
||||||
== Partiklar
|
== Partiklar
|
||||||
|
@ -1239,510 +1225,530 @@ https://ddnet.org/discord
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Failed during initialization. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
Failed during initialization. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
||||||
==
|
== Misslyckades under uppstart. Testa att ändra gfx_backend till OpenGL eller Vulkan i settings_ddnet.cfg i konfig nappen och försök igen.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
Out of VRAM. Try removing custom assets (skins, entities, etc.), especially those with high resolution.
|
||||||
==
|
== Slut på VRAM. Testa att ta bort assets (skins, entities, etc.), speciellt dem i hög upplösning.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
An error during command recording occurred. Try to update your GPU drivers.
|
An error during command recording occurred. Try to update your GPU drivers.
|
||||||
==
|
== Ett fel uppstod under "command recording". Testa att uppdatera ditt grafikkorts drivrutiner.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
A render command failed. Try to update your GPU drivers.
|
A render command failed. Try to update your GPU drivers.
|
||||||
==
|
== Ett "render command" misslyckades. Testa att uppdatera ditt grafikkorts drivrutiner.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Submitting the render commands failed. Try to update your GPU drivers.
|
Submitting the render commands failed. Try to update your GPU drivers.
|
||||||
==
|
== Inskickning av "render commands" misslyckades. Testa att uppdatera ditt grafikkorts drivrutiner.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Failed to swap framebuffers. Try to update your GPU drivers.
|
Failed to swap framebuffers. Try to update your GPU drivers.
|
||||||
==
|
== Misslyckades att "swap framebuffers". Testa att uppdatera ditt grafikkorts drivrutiner.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Unknown error. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
Unknown error. Try to change gfx_backend to OpenGL or Vulkan in settings_ddnet.cfg in the config directory and try again.
|
||||||
==
|
== Okänt fel. Testa att ändra gfx_backend till OpenGL eller Vulkan i settings_ddnet.cfg i konfig nappen och försök igen.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Could not initialize the given graphics backend, reverting to the default backend now.
|
Could not initialize the given graphics backend, reverting to the default backend now.
|
||||||
==
|
== Kunde inte starta den angivna grafikbackend, återgår till standard backend nu.
|
||||||
|
|
||||||
[Graphics error]
|
[Graphics error]
|
||||||
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
Could not initialize the given graphics backend, this is probably because you didn't install the driver of the integrated graphics card.
|
||||||
==
|
== Kunde inte starta den angivna grafikbackend, detta beror någ på att du inte har installerad drivrutinerna för ditt integrerade grafikkort.
|
||||||
|
|
||||||
Could not save downloaded map. Try manually deleting this file: %s
|
Could not save downloaded map. Try manually deleting this file: %s
|
||||||
==
|
== Kunde inte spara nedladdade bana. Testa att manuellt ta bort denna fil: %s
|
||||||
|
|
||||||
The format of texture %s is not RGBA which will cause visual bugs.
|
The format of texture %s is not RGBA which will cause visual bugs.
|
||||||
==
|
== Formatet av texturn %s är inte RGBA, vilket kommer att orsaka visuella buggar.
|
||||||
|
|
||||||
Preparing demo playback
|
Preparing demo playback
|
||||||
==
|
== Förbreder för demo uppspelning
|
||||||
|
|
||||||
Connected
|
Connected
|
||||||
==
|
== Ansluten
|
||||||
|
|
||||||
Loading map file from storage
|
Loading map file from storage
|
||||||
==
|
== Laddar bana fil från lagring
|
||||||
|
|
||||||
Why are you slowmo replaying to read this?
|
Why are you slowmo replaying to read this?
|
||||||
==
|
== Varför försöker du att läsa detta?
|
||||||
|
|
||||||
Initializing components
|
Initializing components
|
||||||
==
|
== Initierar komponenter
|
||||||
|
|
||||||
Initializing assets
|
Initializing assets
|
||||||
==
|
== Initierar assets
|
||||||
|
|
||||||
Initializing map logic
|
Initializing map logic
|
||||||
==
|
== Initierar bana logik
|
||||||
|
|
||||||
Sending initial client info
|
Sending initial client info
|
||||||
==
|
== Skickar första klient info
|
||||||
|
|
||||||
Quitting. Please wait…
|
Quitting. Please wait…
|
||||||
==
|
== Lämnar. Vänligen vänta…
|
||||||
|
|
||||||
Restarting. Please wait…
|
Restarting. Please wait…
|
||||||
==
|
== Startar om. Vänligen vänta…
|
||||||
|
|
||||||
Position:
|
Position:
|
||||||
==
|
== Position
|
||||||
|
|
||||||
Speed:
|
Speed:
|
||||||
==
|
== Hastighet:
|
||||||
|
|
||||||
Angle:
|
Angle:
|
||||||
==
|
== Vinkel:
|
||||||
|
|
||||||
Multi-View
|
Multi-View
|
||||||
==
|
== Multi-Vy
|
||||||
|
|
||||||
Team %d
|
Team %d
|
||||||
==
|
== Lag %d
|
||||||
|
|
||||||
Uploading map data to GPU
|
Uploading map data to GPU
|
||||||
==
|
== Laddar upp bana data till grafikkortet
|
||||||
|
|
||||||
Trying to determine UDP connectivity...
|
Trying to determine UDP connectivity...
|
||||||
==
|
== Försöker att bestämma UDP anslutning...
|
||||||
|
|
||||||
UDP seems to be filtered.
|
UDP seems to be filtered.
|
||||||
==
|
== UDP verkar vara filtrerad.
|
||||||
|
|
||||||
UDP and TCP IP addresses seem to be different. Try disabling VPN, proxy or network accelerators.
|
UDP and TCP IP addresses seem to be different. Try disabling VPN, proxy or network accelerators.
|
||||||
==
|
== UDP och TCP IP adresser verkar vara olika. Testa att stänga av VPN, proxy eller nätverksacceleratorer.
|
||||||
|
|
||||||
No answer from server yet.
|
No answer from server yet.
|
||||||
==
|
== Inget svar från servern än.
|
||||||
|
|
||||||
Getting game info
|
Getting game info
|
||||||
==
|
== Hämtar spel info
|
||||||
|
|
||||||
Requesting to join the game
|
Requesting to join the game
|
||||||
==
|
== Begär att få ansluta till spelet.
|
||||||
|
|
||||||
Rename folder
|
Rename folder
|
||||||
==
|
== Döp om mapp.
|
||||||
|
|
||||||
A demo with this name already exists
|
A demo with this name already exists
|
||||||
==
|
== Ett demo med detta namn finns redan
|
||||||
|
|
||||||
A folder with this name already exists
|
A folder with this name already exists
|
||||||
==
|
== En mapp finns redan med detta namn
|
||||||
|
|
||||||
Unable to rename the folder
|
Unable to rename the folder
|
||||||
==
|
== Misslyckades att döpa om mappen
|
||||||
|
|
||||||
File '%s' already exists, do you want to overwrite it?
|
File '%s' already exists, do you want to overwrite it?
|
||||||
==
|
== Fil '%s' finns redan, vill du skriva över den?
|
||||||
|
|
||||||
(paused)
|
(paused)
|
||||||
==
|
== (pausad)
|
||||||
|
|
||||||
Join Tutorial Server
|
Join Tutorial Server
|
||||||
==
|
== Anslut till Tutorial
|
||||||
|
|
||||||
Skip Tutorial
|
Skip Tutorial
|
||||||
==
|
== Skippa Tutorial
|
||||||
|
|
||||||
Loading menu images
|
Loading menu images
|
||||||
==
|
== Laddar meny bilder
|
||||||
|
|
||||||
Copy info
|
Copy info
|
||||||
==
|
== Kopiera info
|
||||||
|
|
||||||
No server selected
|
No server selected
|
||||||
==
|
== Ingen server vald
|
||||||
|
|
||||||
Online players (%d)
|
Online players (%d)
|
||||||
==
|
== Online spelare (%d)
|
||||||
|
|
||||||
Online clanmates (%d)
|
Online clanmates (%d)
|
||||||
==
|
== Online klanmedlemmar (%d)
|
||||||
|
|
||||||
[friends (server browser)]
|
[friends (server browser)]
|
||||||
Offline (%d)
|
Offline (%d)
|
||||||
==
|
== Offline (%d)
|
||||||
|
|
||||||
Click to select server. Double click to join your friend.
|
Click to select server. Double click to join your friend.
|
||||||
==
|
== Klicka för att välja server. Dubbel klicka för att ansluta till din kamrat.
|
||||||
|
|
||||||
Click to remove this player from your friends list.
|
Click to remove this player from your friends list.
|
||||||
==
|
== Klicka för att ta bort denna spelare från din kompis lista.
|
||||||
|
|
||||||
Click to remove this clan from your friends list.
|
Click to remove this clan from your friends list.
|
||||||
==
|
== Klicka för att ta bort denna klan från din kompis lista.
|
||||||
|
|
||||||
None
|
None
|
||||||
==
|
== Ingen
|
||||||
|
|
||||||
Are you sure that you want to remove the player '%s' from your friends list?
|
Are you sure that you want to remove the player '%s' from your friends list?
|
||||||
==
|
== Är du säker på att du vill ta bort spelare '%s' från din kompis lista?
|
||||||
|
|
||||||
Are you sure that you want to remove the clan '%s' from your friends list?
|
Are you sure that you want to remove the clan '%s' from your friends list?
|
||||||
==
|
== Är du säker på att du vill ta bort klanen '%s' från din kompis lista?
|
||||||
|
|
||||||
Add Clan
|
Add Clan
|
||||||
==
|
== Lägg till klan
|
||||||
|
|
||||||
Play the current demo
|
Play the current demo
|
||||||
==
|
== Spela demo
|
||||||
|
|
||||||
Pause the current demo
|
Pause the current demo
|
||||||
==
|
== Pausa demo
|
||||||
|
|
||||||
Stop the current demo
|
Stop the current demo
|
||||||
==
|
== Stoppa demo
|
||||||
|
|
||||||
Go back one tick
|
Go back one tick
|
||||||
==
|
== Gå tillbaka en tick
|
||||||
|
|
||||||
Go forward one tick
|
Go forward one tick
|
||||||
==
|
== Gå framåt en tick
|
||||||
|
|
||||||
Slow down the demo
|
Slow down the demo
|
||||||
==
|
== Sakta ner demot
|
||||||
|
|
||||||
Speed up the demo
|
Speed up the demo
|
||||||
==
|
== Snabba up demot
|
||||||
|
|
||||||
Mark the beginning of a cut (right click to reset)
|
Mark the beginning of a cut (right click to reset)
|
||||||
==
|
== Markera start av snittet (höger klicka för att nollställa)
|
||||||
|
|
||||||
Mark the end of a cut (right click to reset)
|
Mark the end of a cut (right click to reset)
|
||||||
==
|
== Markera slutet av snittet (höger klicka för att nollställa)
|
||||||
|
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
==
|
== Exportera snitt till en seperat demo fil
|
||||||
|
|
||||||
Go back one marker
|
Go back one marker
|
||||||
==
|
== Gå tillbaka en markör
|
||||||
|
|
||||||
Go forward one marker
|
Go forward one marker
|
||||||
==
|
== Gå framåt en markör
|
||||||
|
|
||||||
Close the demo player
|
Close the demo player
|
||||||
==
|
== Stäng demo spelaren
|
||||||
|
|
||||||
Toggle keyboard shortcuts
|
Toggle keyboard shortcuts
|
||||||
==
|
== Växla kortkommandon
|
||||||
|
|
||||||
Export demo cut
|
Export demo cut
|
||||||
==
|
== Exportera demo snitt
|
||||||
|
|
||||||
Cut interval
|
Cut interval
|
||||||
==
|
== Snitt interval
|
||||||
|
|
||||||
Cut length
|
Cut length
|
||||||
==
|
== Snitt längd
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
==
|
== Laddar demo filer
|
||||||
|
|
||||||
All combined
|
All combined
|
||||||
==
|
== Alla kombinerade
|
||||||
|
|
||||||
Folder Link
|
Folder Link
|
||||||
==
|
== Mapp länk
|
||||||
|
|
||||||
Open the directory that contains the demo files
|
Open the directory that contains the demo files
|
||||||
==
|
== Öppna mappen som innehåller demo filerna
|
||||||
|
|
||||||
Are you sure that you want to delete the folder '%s'?
|
Are you sure that you want to delete the folder '%s'?
|
||||||
==
|
== Är du säker på att du vill ta bort mappen '%s'?
|
||||||
|
|
||||||
Are you sure that you want to delete the demo '%s'?
|
Are you sure that you want to delete the demo '%s'?
|
||||||
==
|
== Är du säker på att du vill ta bort demot '%s'?
|
||||||
|
|
||||||
Delete folder
|
Delete folder
|
||||||
==
|
== Ta bort mapp
|
||||||
|
|
||||||
Unable to delete the demo '%s'
|
Unable to delete the demo '%s'
|
||||||
==
|
== Misslyckades att ta bort demot '%s'
|
||||||
|
|
||||||
Unable to delete the folder '%s'. Make sure it's empty first.
|
Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
==
|
== Misslyckades att ta bort mappen '%s'. Den måste vara tom först.
|
||||||
|
|
||||||
Loading ghost files
|
Loading ghost files
|
||||||
==
|
== Laddar spök filer
|
||||||
|
|
||||||
Menu opened. Press Esc key again to close menu.
|
Menu opened. Press Esc key again to close menu.
|
||||||
==
|
== Meny öppnad. Klicka Esc igen för att stänga menyn.
|
||||||
|
|
||||||
Save power by lowering refresh rate (higher input latency)
|
Save power by lowering refresh rate (higher input latency)
|
||||||
==
|
== Spara batteri genom att sänka uppdateringsfrekvensen (högre inmatnings latens)
|
||||||
|
|
||||||
Open the settings file
|
Open the settings file
|
||||||
==
|
== Öppna inställningsfil
|
||||||
|
|
||||||
Open the directory that contains the configuration and user files
|
Open the directory that contains the configuration and user files
|
||||||
==
|
== Öppna mappen som innehåller konfigurationen och användarfiler
|
||||||
|
|
||||||
Open the directory to add custom themes
|
Open the directory to add custom themes
|
||||||
==
|
== Öppna mappen för att lägga till egna teman
|
||||||
|
|
||||||
Loading skin files
|
Loading skin files
|
||||||
==
|
== Laddar skin filer
|
||||||
|
|
||||||
Toggle to edit your dummy settings
|
Toggle to edit your dummy settings
|
||||||
==
|
== Växla till att ändra dina dummy inställningar
|
||||||
|
|
||||||
Download community skins
|
Download community skins
|
||||||
==
|
== Ladda ner community skins
|
||||||
|
|
||||||
Choose default eyes when joining a server
|
Choose default eyes when joining a server
|
||||||
==
|
== Välj standard ögon när du ansluter till en server
|
||||||
|
|
||||||
Create a random skin
|
Create a random skin
|
||||||
==
|
== Skapa ett slumpad skin
|
||||||
|
|
||||||
Open the directory to add custom skins
|
Open the directory to add custom skins
|
||||||
==
|
== Öppna mappen för att lägga till egna skins
|
||||||
|
|
||||||
Enable controller
|
Enable controller
|
||||||
==
|
== Aktivera kontroller
|
||||||
|
|
||||||
Controller
|
Controller
|
||||||
==
|
== Kontroller
|
||||||
|
|
||||||
Ingame controller mode
|
Ingame controller mode
|
||||||
==
|
== Kontroller läge under spel
|
||||||
|
|
||||||
[Ingame controller mode]
|
[Ingame controller mode]
|
||||||
Relative
|
Relative
|
||||||
==
|
== Relativ
|
||||||
|
|
||||||
[Ingame controller mode]
|
[Ingame controller mode]
|
||||||
Absolute
|
Absolute
|
||||||
==
|
== Absolut
|
||||||
|
|
||||||
Ingame controller sens.
|
Ingame controller sens.
|
||||||
==
|
== Kontroller känslighet i spelet.
|
||||||
|
|
||||||
UI controller sens.
|
UI controller sens.
|
||||||
==
|
== Kontroller känslighet i menyer.
|
||||||
|
|
||||||
Controller jitter tolerance
|
Controller jitter tolerance
|
||||||
==
|
== Kontroller skaka tolerans
|
||||||
|
|
||||||
No controller found. Plug in a controller.
|
No controller found. Plug in a controller.
|
||||||
==
|
== Ingen kontroller hittad. Anslut en kontroller.
|
||||||
|
|
||||||
Axis
|
Axis
|
||||||
==
|
== Axel
|
||||||
|
|
||||||
Status
|
Status
|
||||||
==
|
== Status
|
||||||
|
|
||||||
Aim bind
|
Aim bind
|
||||||
==
|
== Aim bind
|
||||||
|
|
||||||
Mouse
|
Mouse
|
||||||
==
|
== Mus
|
||||||
|
|
||||||
Ingame mouse sens.
|
Ingame mouse sens.
|
||||||
==
|
== Mus känslighet i spelet.
|
||||||
|
|
||||||
UI mouse sens.
|
UI mouse sens.
|
||||||
==
|
== Mus känslighet i menyer.
|
||||||
|
|
||||||
Reset controls
|
Reset controls
|
||||||
==
|
== Nollställ kontrollerna
|
||||||
|
|
||||||
Are you sure that you want to reset the controls to their defaults?
|
Are you sure that you want to reset the controls to their defaults?
|
||||||
==
|
== Är du säker på att du vill nollställa kontrollerna till standard?
|
||||||
|
|
||||||
Cancel
|
Cancel
|
||||||
==
|
== Avbryt
|
||||||
|
|
||||||
Allows maps to render with more detail
|
Allows maps to render with more detail
|
||||||
==
|
== Tillåt banor att visa mer detaljer
|
||||||
|
|
||||||
Renderer
|
Renderer
|
||||||
==
|
== Renderer
|
||||||
|
|
||||||
default
|
default
|
||||||
==
|
== standard
|
||||||
|
|
||||||
custom
|
custom
|
||||||
==
|
== egna
|
||||||
|
|
||||||
Graphics card
|
Graphics card
|
||||||
==
|
== Grafikkort
|
||||||
|
|
||||||
auto
|
auto
|
||||||
==
|
== auto
|
||||||
|
|
||||||
Appearance
|
Appearance
|
||||||
==
|
== Utseende
|
||||||
|
|
||||||
Name Plate
|
Name Plate
|
||||||
==
|
== Namnskylt
|
||||||
|
|
||||||
Hook Collisions
|
Hook Collisions
|
||||||
==
|
== Hook kollisioner
|
||||||
|
|
||||||
Show health, shields and ammo
|
Show health, shields and ammo
|
||||||
==
|
== Visa hälsa, sköldar och ammunition
|
||||||
|
|
||||||
DDRace HUD
|
DDRace HUD
|
||||||
==
|
== DDRace HUD
|
||||||
|
|
||||||
Show client IDs in scoreboard
|
Show client IDs in scoreboard
|
||||||
==
|
== Visa klient ID i poänglista
|
||||||
|
|
||||||
Show DDRace HUD
|
Show DDRace HUD
|
||||||
==
|
== Visa DDRace HUD
|
||||||
|
|
||||||
Show jumps indicator
|
Show jumps indicator
|
||||||
==
|
== Visa hopp indikator
|
||||||
|
|
||||||
Show dummy actions
|
Show dummy actions
|
||||||
==
|
== Visa dummy actions
|
||||||
|
|
||||||
Show player position
|
Show player position
|
||||||
==
|
== Visa spelarens position
|
||||||
|
|
||||||
Show player speed
|
Show player speed
|
||||||
==
|
== Visa spelarens hastighet
|
||||||
|
|
||||||
Show player target angle
|
Show player target angle
|
||||||
==
|
== Visa spelarens vinkel
|
||||||
|
|
||||||
Show freeze bars
|
Show freeze bars
|
||||||
==
|
== Visa freeze bars
|
||||||
|
|
||||||
Opacity of freeze bars inside freeze
|
Opacity of freeze bars inside freeze
|
||||||
==
|
== Opacitet av freeze bars i freeze
|
||||||
|
|
||||||
Show hook strength indicator
|
Show hook strength indicator
|
||||||
==
|
== Visa hook styrka indikator
|
||||||
|
|
||||||
Hook collision line
|
Hook collision line
|
||||||
==
|
== Hook kollisions linje
|
||||||
|
|
||||||
Hook collision line width
|
Hook collision line width
|
||||||
==
|
== Hook kollisions linje bredd
|
||||||
|
|
||||||
Hook collision line opacity
|
Hook collision line opacity
|
||||||
==
|
== Hook kollisions linje opacitet
|
||||||
|
|
||||||
Colors of the hook collision line, in case of a possible collision with:
|
Colors of the hook collision line, in case of a possible collision with:
|
||||||
==
|
== Färger av hook kollisions linje, ifall det finns en kollision med:
|
||||||
|
|
||||||
Your movements are not taken into account when calculating the line colors
|
Your movements are not taken into account when calculating the line colors
|
||||||
==
|
== Dina rörelser tas inte med i beräkningen av linjefärgerna
|
||||||
|
|
||||||
Nothing hookable
|
Nothing hookable
|
||||||
==
|
== Inget hookable
|
||||||
|
|
||||||
Something hookable
|
Something hookable
|
||||||
==
|
== Något hookable
|
||||||
|
|
||||||
A Tee
|
A Tee
|
||||||
==
|
== En Tee
|
||||||
|
|
||||||
Normal Color
|
Normal Color
|
||||||
==
|
== Normal Färg
|
||||||
|
|
||||||
Highlight Color
|
Highlight Color
|
||||||
==
|
== Betonad Färg
|
||||||
|
|
||||||
Weapons
|
Weapons
|
||||||
==
|
== Vapen
|
||||||
|
|
||||||
Rifle Laser Outline Color
|
Rifle Laser Outline Color
|
||||||
==
|
== Gevär Laser Kontur Färg
|
||||||
|
|
||||||
Rifle Laser Inner Color
|
Rifle Laser Inner Color
|
||||||
==
|
== Gevär Laser Inre Färg
|
||||||
|
|
||||||
Shotgun Laser Outline Color
|
Shotgun Laser Outline Color
|
||||||
==
|
== Hagelgevär Laser Kontur Färg
|
||||||
|
|
||||||
Shotgun Laser Inner Color
|
Shotgun Laser Inner Color
|
||||||
==
|
== Hagelgevär Inre Färg
|
||||||
|
|
||||||
Door Laser Outline Color
|
Door Laser Outline Color
|
||||||
==
|
== Dörr Laser Kontur Färg
|
||||||
|
|
||||||
Door Laser Inner Color
|
Door Laser Inner Color
|
||||||
==
|
== Dörr Laser Inre Färg
|
||||||
|
|
||||||
Freeze Laser Outline Color
|
Freeze Laser Outline Color
|
||||||
==
|
== Freeze Laser Kontur Färg
|
||||||
|
|
||||||
Freeze Laser Inner Color
|
Freeze Laser Inner Color
|
||||||
==
|
== Freeze Laser Inre Färg
|
||||||
|
|
||||||
Set all to Rifle
|
Set all to Rifle
|
||||||
==
|
== Sätt alla till Gevär
|
||||||
|
|
||||||
When you cross the start line, show a ghost tee replicating the movements of your best time
|
When you cross the start line, show a ghost tee replicating the movements of your best time
|
||||||
==
|
== När du passera start linjen, visa en spök tee som visar rörelsen av din bästa tid
|
||||||
|
|
||||||
Opacity
|
Opacity
|
||||||
==
|
== Opacitet
|
||||||
|
|
||||||
Adjust the opacity of entities belonging to other teams, such as tees and nameplates
|
Adjust the opacity of entities belonging to other teams, such as tees and nameplates
|
||||||
==
|
== Justera opaciteten av entities som tillhör ett annat lag, som t.ex. tees och namnskyltar
|
||||||
|
|
||||||
Quads are used for background decoration
|
Quads are used for background decoration
|
||||||
==
|
== Quads används till bakgrunds decorationer
|
||||||
|
|
||||||
Tries to predict other entities to give a feel of low latency
|
Tries to predict other entities to give a feel of low latency
|
||||||
==
|
== Försöker att predicera andra entities för att ge känslan av låg latens.
|
||||||
|
|
||||||
Unregister protocol and file extensions
|
Unregister protocol and file extensions
|
||||||
==
|
== Avregistera protokoll och filtillägg
|
||||||
|
|
||||||
Extras
|
Extras
|
||||||
==
|
== Extras
|
||||||
|
|
||||||
Loading assets
|
Loading assets
|
||||||
==
|
== Laddar assets
|
||||||
|
|
||||||
Open the directory to add custom assets
|
Open the directory to add custom assets
|
||||||
==
|
== Öppna mappen för att lägga till egna assets
|
||||||
|
|
||||||
Tutorial
|
Tutorial
|
||||||
==
|
== Tutorial
|
||||||
|
|
||||||
Can't find a Tutorial server
|
Can't find a Tutorial server
|
||||||
==
|
== Kunde inte hitta en Tutorial server
|
||||||
|
|
||||||
Loading race demo files
|
Loading race demo files
|
||||||
==
|
== Laddar race demo filer
|
||||||
|
|
||||||
Super
|
Super
|
||||||
==
|
== Super
|
||||||
|
|
||||||
Loading sound files
|
Loading sound files
|
||||||
==
|
== Laddar ljud filer
|
||||||
|
|
||||||
Moved ingame
|
Moved ingame
|
||||||
==
|
== Förflyttades i spelet
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
== Rendera snitt till video
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
== Gå tillbaka den angivna tiden
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
== %d min.
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
== %d sek.
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
== Ändra tiden för framspolning
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
== Gå framåt den angivna tiden
|
||||||
|
|
|
@ -166,9 +166,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== 腳
|
== 腳
|
||||||
|
|
||||||
Filter
|
|
||||||
== 過濾器
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== 開火
|
== 開火
|
||||||
|
|
||||||
|
@ -181,9 +178,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== 自由視角
|
== 自由視角
|
||||||
|
|
||||||
Friends
|
|
||||||
== 好友
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== 獨占全螢幕
|
== 獨占全螢幕
|
||||||
|
|
||||||
|
@ -404,12 +398,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== 伺服器地址:
|
== 伺服器地址:
|
||||||
|
|
||||||
Server details
|
|
||||||
== 伺服器詳細資訊
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== 伺服器過濾器
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== 伺服器資訊
|
== 伺服器資訊
|
||||||
|
|
||||||
|
@ -605,9 +593,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== 地圖:
|
== 地圖:
|
||||||
|
|
||||||
Info
|
|
||||||
== 資訊
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== 色調
|
== 色調
|
||||||
|
|
||||||
|
@ -1769,3 +1754,23 @@ Unable to delete the folder '%s'. Make sure it's empty first.
|
||||||
|
|
||||||
Moved ingame
|
Moved ingame
|
||||||
== 遊戲內移動
|
== 遊戲內移動
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
|
@ -8,7 +8,8 @@
|
||||||
# Learath2 2012-01-01 22:54:29
|
# Learath2 2012-01-01 22:54:29
|
||||||
# ardadem 2020-08-20 00:00:00
|
# ardadem 2020-08-20 00:00:00
|
||||||
# ardadem 2020-08-22 00:00:00
|
# ardadem 2020-08-22 00:00:00
|
||||||
# h-kaan 2023-08-23 15:57:36
|
# h-kaan 2023-08-23 15:57:36
|
||||||
|
# h-kaan 2023-08-30 01:52:04
|
||||||
##### /authors #####
|
##### /authors #####
|
||||||
|
|
||||||
##### translated strings #####
|
##### translated strings #####
|
||||||
|
@ -151,9 +152,6 @@ Favorites
|
||||||
Feet
|
Feet
|
||||||
== Ayak
|
== Ayak
|
||||||
|
|
||||||
Filter
|
|
||||||
== Filtre
|
|
||||||
|
|
||||||
Fire
|
Fire
|
||||||
== Ateş
|
== Ateş
|
||||||
|
|
||||||
|
@ -166,9 +164,6 @@ Force vote
|
||||||
Free-View
|
Free-View
|
||||||
== Serbest Bakış
|
== Serbest Bakış
|
||||||
|
|
||||||
Friends
|
|
||||||
== Arkadaşlar
|
|
||||||
|
|
||||||
Fullscreen
|
Fullscreen
|
||||||
== Tam ekran
|
== Tam ekran
|
||||||
|
|
||||||
|
@ -359,12 +354,6 @@ Screenshot
|
||||||
Server address:
|
Server address:
|
||||||
== Sunucu adresi:
|
== Sunucu adresi:
|
||||||
|
|
||||||
Server details
|
|
||||||
== Sunucucu detayları
|
|
||||||
|
|
||||||
Server filter
|
|
||||||
== Filtreler
|
|
||||||
|
|
||||||
Server info
|
Server info
|
||||||
== Hakkında
|
== Hakkında
|
||||||
|
|
||||||
|
@ -533,9 +522,6 @@ Netversion:
|
||||||
Map:
|
Map:
|
||||||
== Harita:
|
== Harita:
|
||||||
|
|
||||||
Info
|
|
||||||
== Bilgi
|
|
||||||
|
|
||||||
Hue
|
Hue
|
||||||
== Renk
|
== Renk
|
||||||
|
|
||||||
|
@ -1130,13 +1116,13 @@ Debug mode enabled. Press Ctrl+Shift+D to disable debug mode.
|
||||||
== Hata ayıklama modu etkinleştirildi. Devre dışı bırakmak için Ctrl+Shift+D tuşlarına basın.
|
== Hata ayıklama modu etkinleştirildi. Devre dışı bırakmak için Ctrl+Shift+D tuşlarına basın.
|
||||||
|
|
||||||
Position:
|
Position:
|
||||||
== Pozisyon
|
== Pozisyon:
|
||||||
|
|
||||||
Speed:
|
Speed:
|
||||||
== Hız
|
== Hız:
|
||||||
|
|
||||||
Angle:
|
Angle:
|
||||||
== Açı
|
== Açı:
|
||||||
|
|
||||||
Multi-View
|
Multi-View
|
||||||
== Çoklu İzle
|
== Çoklu İzle
|
||||||
|
@ -1154,7 +1140,7 @@ UDP seems to be filtered.
|
||||||
== UDP filtrelenmiş görünüyor.
|
== UDP filtrelenmiş görünüyor.
|
||||||
|
|
||||||
UDP and TCP IP addresses seem to be different. Try disabling VPN, proxy or network accelerators.
|
UDP and TCP IP addresses seem to be different. Try disabling VPN, proxy or network accelerators.
|
||||||
== UPD ve TCP IP adresleri farklı görünüyor. Proxy, VPN veya ağ hızlandırıcılarını devre dışı bırakmayı deneyin.
|
== UDP ve TCP IP adresleri farklı görünüyor. Proxy, VPN veya ağ hızlandırıcılarını devre dışı bırakmayı deneyin.
|
||||||
|
|
||||||
No answer from server yet.
|
No answer from server yet.
|
||||||
== Henüz sunucudan cevap alınamadı.
|
== Henüz sunucudan cevap alınamadı.
|
||||||
|
@ -1172,7 +1158,7 @@ Existing Player
|
||||||
== Var olan oyuncu
|
== Var olan oyuncu
|
||||||
|
|
||||||
Your nickname '%s' is already used (%d points). Do you still want to use it?
|
Your nickname '%s' is already used (%d points). Do you still want to use it?
|
||||||
== Takma adınız '%s' başkası tarafından kullanılıyor (%d points). Yine de kullanmak istiyor musunuz?
|
== Takma adınız '%s' başkası tarafından kullanılıyor (%d puan). Yine de kullanmak istiyor musunuz?
|
||||||
|
|
||||||
Checking for existing player with your name
|
Checking for existing player with your name
|
||||||
== Adınıza sahip diğer oyuncular aranıyor
|
== Adınıza sahip diğer oyuncular aranıyor
|
||||||
|
@ -1238,7 +1224,7 @@ Getting server list from master server
|
||||||
== %2$d sunucunun %1$d tanesi
|
== %2$d sunucunun %1$d tanesi
|
||||||
|
|
||||||
%d players
|
%d players
|
||||||
== %d oyuncular
|
== %d oyuncu
|
||||||
|
|
||||||
%d player
|
%d player
|
||||||
== %d oyuncu
|
== %d oyuncu
|
||||||
|
@ -1308,13 +1294,13 @@ Speed up the demo
|
||||||
== Demoyu hızlandır
|
== Demoyu hızlandır
|
||||||
|
|
||||||
Mark the beginning of a cut (right click to reset)
|
Mark the beginning of a cut (right click to reset)
|
||||||
== Bir kesimin başlangıcını işaretleyin (sıfırlamak için sağ tıkla)
|
== Bir kesitin başlangıcını işaretleyin (sıfırlamak için sağ tıkla)
|
||||||
|
|
||||||
Mark the end of a cut (right click to reset)
|
Mark the end of a cut (right click to reset)
|
||||||
== Bir kesimin bitişini işaretleyin (sıfırlamak için sağ tıkla)
|
== Bir kesitin bitişini işaretleyin (sıfırlamak için sağ tıkla)
|
||||||
|
|
||||||
Export cut as a separate demo
|
Export cut as a separate demo
|
||||||
== Kesimi ayrı bir demo olarak dışarı aktar
|
== Kesiti ayrı bir demo olarak dışarı aktar
|
||||||
|
|
||||||
Go back one marker
|
Go back one marker
|
||||||
== Bir işaret geri git
|
== Bir işaret geri git
|
||||||
|
@ -1329,13 +1315,13 @@ Toggle keyboard shortcuts
|
||||||
== Klavye kısayollarını kullan
|
== Klavye kısayollarını kullan
|
||||||
|
|
||||||
Export demo cut
|
Export demo cut
|
||||||
== Kesimi dışarı aktar
|
== Kesiti dışarı aktar
|
||||||
|
|
||||||
Cut interval
|
Cut interval
|
||||||
== Kesim aralığı
|
== Kesit aralığı
|
||||||
|
|
||||||
Cut length
|
Cut length
|
||||||
== Kesim uzunluğu
|
== Kesit uzunluğu
|
||||||
|
|
||||||
Loading demo files
|
Loading demo files
|
||||||
== Demo dosyaları yükleniyor
|
== Demo dosyaları yükleniyor
|
||||||
|
@ -1472,10 +1458,10 @@ Mouse
|
||||||
== Fare
|
== Fare
|
||||||
|
|
||||||
Ingame mouse sens.
|
Ingame mouse sens.
|
||||||
== Oyun içi fare hassasiyeti
|
== Oyun hassasiyeti
|
||||||
|
|
||||||
UI mouse sens.
|
UI mouse sens.
|
||||||
== Arayüz fare hassasiyeti
|
== Arayüz hassasiyeti
|
||||||
|
|
||||||
Reset controls
|
Reset controls
|
||||||
== Kontrolleri sıfırla
|
== Kontrolleri sıfırla
|
||||||
|
@ -1556,7 +1542,7 @@ Show DDRace HUD
|
||||||
== DDRace HUD göster
|
== DDRace HUD göster
|
||||||
|
|
||||||
Show jumps indicator
|
Show jumps indicator
|
||||||
== Zıplama göstergesini göster
|
== Kaç zıplama kaldığını göster
|
||||||
|
|
||||||
Show dummy actions
|
Show dummy actions
|
||||||
== Dummy aksiyonlarını göster
|
== Dummy aksiyonlarını göster
|
||||||
|
@ -1749,4 +1735,24 @@ Loading sound files
|
||||||
== Ses dosyaları yükleniyor
|
== Ses dosyaları yükleniyor
|
||||||
|
|
||||||
Moved ingame
|
Moved ingame
|
||||||
== Hareket edildi
|
== Hareket edildi
|
||||||
|
|
||||||
|
Go back the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
|
@ -1749,3 +1749,20 @@ Go forward the specified duration
|
||||||
|
|
||||||
Render cut to video
|
Render cut to video
|
||||||
== Відтворити вирізку відео
|
== Відтворити вирізку відео
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d min.
|
||||||
|
==
|
||||||
|
|
||||||
|
[Demo player duration]
|
||||||
|
%d sec.
|
||||||
|
==
|
||||||
|
|
||||||
|
Change the skip duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Go forward the specified duration
|
||||||
|
==
|
||||||
|
|
||||||
|
Render cut to video
|
||||||
|
==
|
||||||
|
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 4.4 KiB |
|
@ -26,7 +26,7 @@ GameInfoFlags = [
|
||||||
]
|
]
|
||||||
GameInfoFlags2 = [
|
GameInfoFlags2 = [
|
||||||
"ALLOW_X_SKINS", "GAMETYPE_CITY", "GAMETYPE_FDDRACE", "ENTITIES_FDDRACE", "HUD_HEALTH_ARMOR", "HUD_AMMO",
|
"ALLOW_X_SKINS", "GAMETYPE_CITY", "GAMETYPE_FDDRACE", "ENTITIES_FDDRACE", "HUD_HEALTH_ARMOR", "HUD_AMMO",
|
||||||
"HUD_DDRACE", "NO_WEAK_HOOK"
|
"HUD_DDRACE", "NO_WEAK_HOOK", "NO_SKIN_CHANGE_FOR_FROZEN"
|
||||||
]
|
]
|
||||||
ExPlayerFlags = ["AFK", "PAUSED", "SPEC"]
|
ExPlayerFlags = ["AFK", "PAUSED", "SPEC"]
|
||||||
LegacyProjectileFlags = [f"CLIENTID_BIT{i}" for i in range(8)] + [
|
LegacyProjectileFlags = [f"CLIENTID_BIT{i}" for i in range(8)] + [
|
||||||
|
@ -71,7 +71,7 @@ enum
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
GAMEINFO_CURVERSION=8,
|
GAMEINFO_CURVERSION=9,
|
||||||
};
|
};
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
@ -549,4 +549,8 @@ Messages = [
|
||||||
NetIntRange("m_Team", 0, 'MAX_CLIENTS-1'),
|
NetIntRange("m_Team", 0, 'MAX_CLIENTS-1'),
|
||||||
NetIntRange("m_First", -1, 'MAX_CLIENTS-1'),
|
NetIntRange("m_First", -1, 'MAX_CLIENTS-1'),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
|
NetMessageEx("Sv_YourVote", "yourvote@netmsg.ddnet.org", [
|
||||||
|
NetIntRange("m_Voted", -1, 1),
|
||||||
|
]),
|
||||||
]
|
]
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# The second argument is the message to send.
|
# The second argument is the message to send.
|
||||||
if ($args.length -lt 2) {
|
if ($args.length -lt 2) {
|
||||||
Write-Output "Usage: ./send_named_pipe.ps1 <pipename> <message> [message] ... [message]"
|
Write-Output "Usage: ./send_named_pipe.ps1 <pipename> <message> [message] ... [message]"
|
||||||
return
|
exit -1
|
||||||
}
|
}
|
||||||
|
|
||||||
$Wrapper = [pscustomobject]@{
|
$Wrapper = [pscustomobject]@{
|
||||||
|
@ -18,16 +18,24 @@ $Wrapper = [pscustomobject]@{
|
||||||
Reader = $null
|
Reader = $null
|
||||||
Writer = $null
|
Writer = $null
|
||||||
}
|
}
|
||||||
$Wrapper.Pipe.Connect(5000)
|
try {
|
||||||
if (!$?) {
|
$Wrapper.Pipe.Connect(5000)
|
||||||
return
|
$Wrapper.Reader = New-Object System.IO.StreamReader($Wrapper.Pipe)
|
||||||
|
$Wrapper.Writer = New-Object System.IO.StreamWriter($Wrapper.Pipe)
|
||||||
|
$Wrapper.Writer.AutoFlush = $true
|
||||||
|
for ($i = 1; $i -lt $args.length; $i++) {
|
||||||
|
$Wrapper.Writer.WriteLine($args[$i])
|
||||||
|
}
|
||||||
|
# Wait for pipe contents to be read.
|
||||||
|
$Wrapper.Pipe.WaitForPipeDrain()
|
||||||
|
# Dispose the pipe, which also calls Flush and Close.
|
||||||
|
$Wrapper.Pipe.Dispose()
|
||||||
|
# Explicity set error level 0 for success, as otherwise the current error level is kept.
|
||||||
|
exit 0
|
||||||
|
} catch [TimeoutException] {
|
||||||
|
Write-Output "Timeout connecting to pipe"
|
||||||
|
exit 1
|
||||||
|
} catch [System.IO.IOException] {
|
||||||
|
Write-Output "Broken pipe"
|
||||||
|
exit 2
|
||||||
}
|
}
|
||||||
$Wrapper.Reader = New-Object System.IO.StreamReader($Wrapper.Pipe)
|
|
||||||
$Wrapper.Writer = New-Object System.IO.StreamWriter($Wrapper.Pipe)
|
|
||||||
$Wrapper.Writer.AutoFlush = $true
|
|
||||||
for ($i = 1; $i -lt $args.length; $i++) {
|
|
||||||
$Wrapper.Writer.WriteLine($args[$i])
|
|
||||||
}
|
|
||||||
# We need to wait because the lines will not be written if we close the pipe immediately
|
|
||||||
Start-Sleep -Seconds 1.5
|
|
||||||
$Wrapper.Pipe.Close()
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void GlobalFinish() {}
|
virtual void GlobalFinish() {}
|
||||||
/**
|
/**
|
||||||
* Notifies thte logger of a changed `m_Filter`.
|
* Notifies the logger of a changed `m_Filter`.
|
||||||
*/
|
*/
|
||||||
virtual void OnFilterChange() {}
|
virtual void OnFilterChange() {}
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,7 +11,7 @@ use std::str;
|
||||||
///
|
///
|
||||||
/// Callbacks in C are usually represented by a function pointer and some
|
/// Callbacks in C are usually represented by a function pointer and some
|
||||||
/// "userdata" pointer that is also passed to the function pointer. This allows
|
/// "userdata" pointer that is also passed to the function pointer. This allows
|
||||||
/// to hand data to the callback. This type represents such a userdata poiner.
|
/// to hand data to the callback. This type represents such a userdata pointer.
|
||||||
///
|
///
|
||||||
/// It is `unsafe` to convert the `UserPtr` back to its original pointer using
|
/// It is `unsafe` to convert the `UserPtr` back to its original pointer using
|
||||||
/// [`UserPtr::cast`] because its lifetime and type information was lost.
|
/// [`UserPtr::cast`] because its lifetime and type information was lost.
|
||||||
|
|
|
@ -2209,16 +2209,12 @@ int net_would_block()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int net_init()
|
void net_init()
|
||||||
{
|
{
|
||||||
#if defined(CONF_FAMILY_WINDOWS)
|
#if defined(CONF_FAMILY_WINDOWS)
|
||||||
WSADATA wsaData;
|
WSADATA wsa_data;
|
||||||
int err = WSAStartup(MAKEWORD(1, 1), &wsaData);
|
dbg_assert(WSAStartup(MAKEWORD(1, 1), &wsa_data) == 0, "network initialization failed.");
|
||||||
dbg_assert(err == 0, "network initialization failed.");
|
|
||||||
return err == 0 ? 0 : 1;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONF_FAMILY_UNIX)
|
#if defined(CONF_FAMILY_UNIX)
|
||||||
|
|
|
@ -879,11 +879,9 @@ typedef struct sockaddr_un UNIXSOCKETADDR;
|
||||||
*
|
*
|
||||||
* @ingroup Network-General
|
* @ingroup Network-General
|
||||||
*
|
*
|
||||||
* @return 0 on success.
|
|
||||||
*
|
|
||||||
* @remark You must call this function before using any other network functions.
|
* @remark You must call this function before using any other network functions.
|
||||||
*/
|
*/
|
||||||
int net_init();
|
void net_init();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Function: net_host_lookup
|
Function: net_host_lookup
|
||||||
|
|
|
@ -167,7 +167,7 @@ public:
|
||||||
#if defined(CONF_VIDEORECORDER)
|
#if defined(CONF_VIDEORECORDER)
|
||||||
virtual const char *DemoPlayer_Render(const char *pFilename, int StorageType, const char *pVideoName, int SpeedIndex, bool StartPaused = false) = 0;
|
virtual const char *DemoPlayer_Render(const char *pFilename, int StorageType, const char *pVideoName, int SpeedIndex, bool StartPaused = false) = 0;
|
||||||
#endif
|
#endif
|
||||||
virtual void DemoRecorder_Start(const char *pFilename, bool WithTimestamp, int Recorder) = 0;
|
virtual void DemoRecorder_Start(const char *pFilename, bool WithTimestamp, int Recorder, bool Verbose = false) = 0;
|
||||||
virtual void DemoRecorder_HandleAutoStart() = 0;
|
virtual void DemoRecorder_HandleAutoStart() = 0;
|
||||||
virtual void DemoRecorder_Stop(int Recorder, bool RemoveFile = false) = 0;
|
virtual void DemoRecorder_Stop(int Recorder, bool RemoveFile = false) = 0;
|
||||||
virtual class IDemoRecorder *DemoRecorder(int Recorder) = 0;
|
virtual class IDemoRecorder *DemoRecorder(int Recorder) = 0;
|
||||||
|
|
|
@ -1,24 +1,17 @@
|
||||||
#include "backend_base.h"
|
#include "backend_base.h"
|
||||||
#include <engine/gfx/image_manipulation.h>
|
#include <engine/gfx/image_manipulation.h>
|
||||||
|
|
||||||
size_t CCommandProcessorFragment_GLBase::TexFormatToImageColorChannelCount(int TexFormat)
|
|
||||||
{
|
|
||||||
if(TexFormat == CCommandBuffer::TEXFORMAT_RGBA)
|
|
||||||
return 4;
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *CCommandProcessorFragment_GLBase::Resize(const unsigned char *pData, int Width, int Height, int NewWidth, int NewHeight, int BPP)
|
void *CCommandProcessorFragment_GLBase::Resize(const unsigned char *pData, int Width, int Height, int NewWidth, int NewHeight, int BPP)
|
||||||
{
|
{
|
||||||
return ResizeImage((const uint8_t *)pData, Width, Height, NewWidth, NewHeight, BPP);
|
return ResizeImage((const uint8_t *)pData, Width, Height, NewWidth, NewHeight, BPP);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CCommandProcessorFragment_GLBase::Texture2DTo3D(void *pImageBuffer, int ImageWidth, int ImageHeight, int ImageColorChannelCount, int SplitCountWidth, int SplitCountHeight, void *pTarget3DImageData, int &Target3DImageWidth, int &Target3DImageHeight)
|
bool CCommandProcessorFragment_GLBase::Texture2DTo3D(void *pImageBuffer, int ImageWidth, int ImageHeight, size_t PixelSize, int SplitCountWidth, int SplitCountHeight, void *pTarget3DImageData, int &Target3DImageWidth, int &Target3DImageHeight)
|
||||||
{
|
{
|
||||||
Target3DImageWidth = ImageWidth / SplitCountWidth;
|
Target3DImageWidth = ImageWidth / SplitCountWidth;
|
||||||
Target3DImageHeight = ImageHeight / SplitCountHeight;
|
Target3DImageHeight = ImageHeight / SplitCountHeight;
|
||||||
|
|
||||||
size_t FullImageWidth = (size_t)ImageWidth * ImageColorChannelCount;
|
const size_t FullImageWidth = (size_t)ImageWidth * PixelSize;
|
||||||
|
|
||||||
for(int Y = 0; Y < SplitCountHeight; ++Y)
|
for(int Y = 0; Y < SplitCountHeight; ++Y)
|
||||||
{
|
{
|
||||||
|
@ -28,7 +21,7 @@ bool CCommandProcessorFragment_GLBase::Texture2DTo3D(void *pImageBuffer, int Ima
|
||||||
{
|
{
|
||||||
int DepthIndex = X + Y * SplitCountWidth;
|
int DepthIndex = X + Y * SplitCountWidth;
|
||||||
|
|
||||||
size_t TargetImageFullWidth = (size_t)Target3DImageWidth * ImageColorChannelCount;
|
size_t TargetImageFullWidth = (size_t)Target3DImageWidth * PixelSize;
|
||||||
size_t TargetImageFullSize = (size_t)TargetImageFullWidth * Target3DImageHeight;
|
size_t TargetImageFullSize = (size_t)TargetImageFullWidth * Target3DImageHeight;
|
||||||
ptrdiff_t ImageOffset = (ptrdiff_t)(((size_t)Y * FullImageWidth * (size_t)Target3DImageHeight) + ((size_t)Y3D * FullImageWidth) + ((size_t)X * TargetImageFullWidth));
|
ptrdiff_t ImageOffset = (ptrdiff_t)(((size_t)Y * FullImageWidth * (size_t)Target3DImageHeight) + ((size_t)Y3D * FullImageWidth) + ((size_t)X * TargetImageFullWidth));
|
||||||
ptrdiff_t TargetImageOffset = (ptrdiff_t)(TargetImageFullSize * (size_t)DepthIndex + ((size_t)Y3D * TargetImageFullWidth));
|
ptrdiff_t TargetImageOffset = (ptrdiff_t)(TargetImageFullSize * (size_t)DepthIndex + ((size_t)Y3D * TargetImageFullWidth));
|
||||||
|
|
|
@ -84,12 +84,11 @@ protected:
|
||||||
SGFXErrorContainer m_Error;
|
SGFXErrorContainer m_Error;
|
||||||
SGFXWarningContainer m_Warning;
|
SGFXWarningContainer m_Warning;
|
||||||
|
|
||||||
static size_t TexFormatToImageColorChannelCount(int TexFormat);
|
|
||||||
static void *Resize(const unsigned char *pData, int Width, int Height, int NewWidth, int NewHeight, int BPP);
|
static void *Resize(const unsigned char *pData, int Width, int Height, int NewWidth, int NewHeight, int BPP);
|
||||||
|
|
||||||
static bool Texture2DTo3D(void *pImageBuffer, int ImageWidth, int ImageHeight, int ImageColorChannelCount, int SplitCountWidth, int SplitCountHeight, void *pTarget3DImageData, int &Target3DImageWidth, int &Target3DImageHeight);
|
static bool Texture2DTo3D(void *pImageBuffer, int ImageWidth, int ImageHeight, size_t PixelSize, int SplitCountWidth, int SplitCountHeight, void *pTarget3DImageData, int &Target3DImageWidth, int &Target3DImageHeight);
|
||||||
|
|
||||||
virtual bool GetPresentedImageData(uint32_t &Width, uint32_t &Height, uint32_t &Format, std::vector<uint8_t> &vDstData) = 0;
|
virtual bool GetPresentedImageData(uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector<uint8_t> &vDstData) = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~CCommandProcessorFragment_GLBase() = default;
|
virtual ~CCommandProcessorFragment_GLBase() = default;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
class CCommandProcessorFragment_Null : public CCommandProcessorFragment_GLBase
|
class CCommandProcessorFragment_Null : public CCommandProcessorFragment_GLBase
|
||||||
{
|
{
|
||||||
bool GetPresentedImageData(uint32_t &Width, uint32_t &Height, uint32_t &Format, std::vector<uint8_t> &vDstData) override { return false; };
|
bool GetPresentedImageData(uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector<uint8_t> &vDstData) override { return false; };
|
||||||
ERunCommandReturnTypes RunCommand(const CCommandBuffer::SCommand *pBaseCommand) override;
|
ERunCommandReturnTypes RunCommand(const CCommandBuffer::SCommand *pBaseCommand) override;
|
||||||
bool Cmd_Init(const SCommand_Init *pCommand);
|
bool Cmd_Init(const SCommand_Init *pCommand);
|
||||||
virtual void Cmd_Texture_Create(const CCommandBuffer::SCommand_Texture_Create *pCommand);
|
virtual void Cmd_Texture_Create(const CCommandBuffer::SCommand_Texture_Create *pCommand);
|
||||||
|
|
|
@ -42,11 +42,6 @@ void CCommandProcessorFragment_OpenGL::Cmd_Update_Viewport(const CCommandBuffer:
|
||||||
glViewport(pCommand->m_X, pCommand->m_Y, pCommand->m_Width, pCommand->m_Height);
|
glViewport(pCommand->m_X, pCommand->m_Y, pCommand->m_Width, pCommand->m_Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL::Cmd_Finish(const CCommandBuffer::SCommand_Finish *pCommand)
|
|
||||||
{
|
|
||||||
glFinish();
|
|
||||||
}
|
|
||||||
|
|
||||||
int CCommandProcessorFragment_OpenGL::TexFormatToOpenGLFormat(int TexFormat)
|
int CCommandProcessorFragment_OpenGL::TexFormatToOpenGLFormat(int TexFormat)
|
||||||
{
|
{
|
||||||
if(TexFormat == CCommandBuffer::TEXFORMAT_RGBA)
|
if(TexFormat == CCommandBuffer::TEXFORMAT_RGBA)
|
||||||
|
@ -54,7 +49,7 @@ int CCommandProcessorFragment_OpenGL::TexFormatToOpenGLFormat(int TexFormat)
|
||||||
return GL_RGBA;
|
return GL_RGBA;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t CCommandProcessorFragment_OpenGL::GLFormatToImageColorChannelCount(int GLFormat)
|
size_t CCommandProcessorFragment_OpenGL::GLFormatToPixelSize(int GLFormat)
|
||||||
{
|
{
|
||||||
switch(GLFormat)
|
switch(GLFormat)
|
||||||
{
|
{
|
||||||
|
@ -283,7 +278,7 @@ GfxOpenGLMessageCallback(GLenum Source,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool CCommandProcessorFragment_OpenGL::GetPresentedImageData(uint32_t &Width, uint32_t &Height, uint32_t &Format, std::vector<uint8_t> &vDstData)
|
bool CCommandProcessorFragment_OpenGL::GetPresentedImageData(uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector<uint8_t> &vDstData)
|
||||||
{
|
{
|
||||||
if(m_CanvasWidth == 0 || m_CanvasHeight == 0)
|
if(m_CanvasWidth == 0 || m_CanvasHeight == 0)
|
||||||
{
|
{
|
||||||
|
@ -319,7 +314,7 @@ bool CCommandProcessorFragment_OpenGL::InitOpenGL(const SCommand_Init *pCommand)
|
||||||
m_IsOpenGLES = pCommand->m_RequestedBackend == BACKEND_TYPE_OPENGL_ES;
|
m_IsOpenGLES = pCommand->m_RequestedBackend == BACKEND_TYPE_OPENGL_ES;
|
||||||
|
|
||||||
TGLBackendReadPresentedImageData &ReadPresentedImgDataFunc = *pCommand->m_pReadPresentedImageDataFunc;
|
TGLBackendReadPresentedImageData &ReadPresentedImgDataFunc = *pCommand->m_pReadPresentedImageDataFunc;
|
||||||
ReadPresentedImgDataFunc = [this](uint32_t &Width, uint32_t &Height, uint32_t &Format, std::vector<uint8_t> &vDstData) { return GetPresentedImageData(Width, Height, Format, vDstData); };
|
ReadPresentedImgDataFunc = [this](uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector<uint8_t> &vDstData) { return GetPresentedImageData(Width, Height, Format, vDstData); };
|
||||||
|
|
||||||
const char *pVendorString = (const char *)glGetString(GL_VENDOR);
|
const char *pVendorString = (const char *)glGetString(GL_VENDOR);
|
||||||
dbg_msg("opengl", "Vendor string: %s", pVendorString);
|
dbg_msg("opengl", "Vendor string: %s", pVendorString);
|
||||||
|
@ -649,7 +644,7 @@ void CCommandProcessorFragment_OpenGL::TextureUpdate(int Slot, int X, int Y, int
|
||||||
int ResizedW = (int)(Width * ResizeW);
|
int ResizedW = (int)(Width * ResizeW);
|
||||||
int ResizedH = (int)(Height * ResizeH);
|
int ResizedH = (int)(Height * ResizeH);
|
||||||
|
|
||||||
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), Width, Height, ResizedW, ResizedH, GLFormatToImageColorChannelCount(GLFormat));
|
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), Width, Height, ResizedW, ResizedH, GLFormatToPixelSize(GLFormat));
|
||||||
free(pTexData);
|
free(pTexData);
|
||||||
pTexData = pTmpData;
|
pTexData = pTmpData;
|
||||||
|
|
||||||
|
@ -671,7 +666,7 @@ void CCommandProcessorFragment_OpenGL::TextureUpdate(int Slot, int X, int Y, int
|
||||||
Y /= 2;
|
Y /= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), OldWidth, OldHeight, Width, Height, GLFormatToImageColorChannelCount(GLFormat));
|
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), OldWidth, OldHeight, Width, Height, GLFormatToPixelSize(GLFormat));
|
||||||
free(pTexData);
|
free(pTexData);
|
||||||
pTexData = pTmpData;
|
pTexData = pTmpData;
|
||||||
}
|
}
|
||||||
|
@ -723,7 +718,7 @@ void CCommandProcessorFragment_OpenGL::Cmd_Texture_Destroy(const CCommandBuffer:
|
||||||
DestroyTexture(pCommand->m_Slot);
|
DestroyTexture(pCommand->m_Slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int Height, int PixelSize, int GLFormat, int GLStoreFormat, int Flags, void *pTexData)
|
void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int Height, int GLFormat, int GLStoreFormat, int Flags, void *pTexData)
|
||||||
{
|
{
|
||||||
#ifndef BACKEND_GL_MODERN_API
|
#ifndef BACKEND_GL_MODERN_API
|
||||||
|
|
||||||
|
@ -746,7 +741,7 @@ void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int He
|
||||||
int PowerOfTwoHeight = HighestBit(Height);
|
int PowerOfTwoHeight = HighestBit(Height);
|
||||||
if(Width != PowerOfTwoWidth || Height != PowerOfTwoHeight)
|
if(Width != PowerOfTwoWidth || Height != PowerOfTwoHeight)
|
||||||
{
|
{
|
||||||
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), Width, Height, PowerOfTwoWidth, PowerOfTwoHeight, GLFormatToImageColorChannelCount(GLFormat));
|
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), Width, Height, PowerOfTwoWidth, PowerOfTwoHeight, GLFormatToPixelSize(GLFormat));
|
||||||
free(pTexData);
|
free(pTexData);
|
||||||
pTexData = pTmpData;
|
pTexData = pTmpData;
|
||||||
|
|
||||||
|
@ -778,7 +773,7 @@ void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int He
|
||||||
|
|
||||||
if(NeedsResize)
|
if(NeedsResize)
|
||||||
{
|
{
|
||||||
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), OldWidth, OldHeight, Width, Height, GLFormatToImageColorChannelCount(GLFormat));
|
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), OldWidth, OldHeight, Width, Height, GLFormatToPixelSize(GLFormat));
|
||||||
free(pTexData);
|
free(pTexData);
|
||||||
pTexData = pTmpData;
|
pTexData = pTmpData;
|
||||||
}
|
}
|
||||||
|
@ -787,8 +782,7 @@ void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int He
|
||||||
m_vTextures[Slot].m_Height = Height;
|
m_vTextures[Slot].m_Height = Height;
|
||||||
m_vTextures[Slot].m_RescaleCount = RescaleCount;
|
m_vTextures[Slot].m_RescaleCount = RescaleCount;
|
||||||
|
|
||||||
int Oglformat = GLFormat;
|
const size_t PixelSize = GLFormatToPixelSize(GLFormat);
|
||||||
int StoreOglformat = GLStoreFormat;
|
|
||||||
|
|
||||||
if((Flags & CCommandBuffer::TEXFLAG_NO_2D_TEXTURE) == 0)
|
if((Flags & CCommandBuffer::TEXFLAG_NO_2D_TEXTURE) == 0)
|
||||||
{
|
{
|
||||||
|
@ -802,7 +796,7 @@ void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int He
|
||||||
{
|
{
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, StoreOglformat, Width, Height, 0, Oglformat, GL_UNSIGNED_BYTE, pTexData);
|
glTexImage2D(GL_TEXTURE_2D, 0, GLStoreFormat, Width, Height, 0, GLFormat, GL_UNSIGNED_BYTE, pTexData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -818,7 +812,7 @@ void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int He
|
||||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, ((GLfloat)m_OpenGLTextureLodBIAS / 1000.0f));
|
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, ((GLfloat)m_OpenGLTextureLodBIAS / 1000.0f));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, StoreOglformat, Width, Height, 0, Oglformat, GL_UNSIGNED_BYTE, pTexData);
|
glTexImage2D(GL_TEXTURE_2D, 0, GLStoreFormat, Width, Height, 0, GLFormat, GL_UNSIGNED_BYTE, pTexData);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Flag2DArrayTexture = (CCommandBuffer::TEXFLAG_TO_2D_ARRAY_TEXTURE | CCommandBuffer::TEXFLAG_TO_2D_ARRAY_TEXTURE_SINGLE_LAYER);
|
int Flag2DArrayTexture = (CCommandBuffer::TEXFLAG_TO_2D_ARRAY_TEXTURE | CCommandBuffer::TEXFLAG_TO_2D_ARRAY_TEXTURE_SINGLE_LAYER);
|
||||||
|
@ -886,14 +880,12 @@ void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int He
|
||||||
glBindSampler(0, 0);
|
glBindSampler(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ImageColorChannels = GLFormatToImageColorChannelCount(GLFormat);
|
|
||||||
|
|
||||||
uint8_t *p3DImageData = NULL;
|
uint8_t *p3DImageData = NULL;
|
||||||
|
|
||||||
bool IsSingleLayer = (Flags & (CCommandBuffer::TEXFLAG_TO_2D_ARRAY_TEXTURE_SINGLE_LAYER | CCommandBuffer::TEXFLAG_TO_3D_TEXTURE_SINGLE_LAYER)) != 0;
|
bool IsSingleLayer = (Flags & (CCommandBuffer::TEXFLAG_TO_2D_ARRAY_TEXTURE_SINGLE_LAYER | CCommandBuffer::TEXFLAG_TO_3D_TEXTURE_SINGLE_LAYER)) != 0;
|
||||||
|
|
||||||
if(!IsSingleLayer)
|
if(!IsSingleLayer)
|
||||||
p3DImageData = (uint8_t *)malloc((size_t)ImageColorChannels * Width * Height);
|
p3DImageData = (uint8_t *)malloc((size_t)Width * Height * PixelSize);
|
||||||
int Image3DWidth, Image3DHeight;
|
int Image3DWidth, Image3DHeight;
|
||||||
|
|
||||||
int ConvertWidth = Width;
|
int ConvertWidth = Width;
|
||||||
|
@ -906,7 +898,7 @@ void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int He
|
||||||
dbg_msg("gfx", "3D/2D array texture was resized");
|
dbg_msg("gfx", "3D/2D array texture was resized");
|
||||||
int NewWidth = maximum<int>(HighestBit(ConvertWidth), 16);
|
int NewWidth = maximum<int>(HighestBit(ConvertWidth), 16);
|
||||||
int NewHeight = maximum<int>(HighestBit(ConvertHeight), 16);
|
int NewHeight = maximum<int>(HighestBit(ConvertHeight), 16);
|
||||||
uint8_t *pNewTexData = (uint8_t *)Resize((const uint8_t *)pTexData, ConvertWidth, ConvertHeight, NewWidth, NewHeight, GLFormatToImageColorChannelCount(GLFormat));
|
uint8_t *pNewTexData = (uint8_t *)Resize((const uint8_t *)pTexData, ConvertWidth, ConvertHeight, NewWidth, NewHeight, GLFormatToPixelSize(GLFormat));
|
||||||
|
|
||||||
ConvertWidth = NewWidth;
|
ConvertWidth = NewWidth;
|
||||||
ConvertHeight = NewHeight;
|
ConvertHeight = NewHeight;
|
||||||
|
@ -916,15 +908,15 @@ void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int He
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(IsSingleLayer || (Texture2DTo3D(pTexData, ConvertWidth, ConvertHeight, ImageColorChannels, 16, 16, p3DImageData, Image3DWidth, Image3DHeight)))
|
if(IsSingleLayer || (Texture2DTo3D(pTexData, ConvertWidth, ConvertHeight, PixelSize, 16, 16, p3DImageData, Image3DWidth, Image3DHeight)))
|
||||||
{
|
{
|
||||||
if(IsSingleLayer)
|
if(IsSingleLayer)
|
||||||
{
|
{
|
||||||
glTexImage3D(Target, 0, StoreOglformat, ConvertWidth, ConvertHeight, 1, 0, Oglformat, GL_UNSIGNED_BYTE, pTexData);
|
glTexImage3D(Target, 0, GLStoreFormat, ConvertWidth, ConvertHeight, 1, 0, GLFormat, GL_UNSIGNED_BYTE, pTexData);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
glTexImage3D(Target, 0, StoreOglformat, Image3DWidth, Image3DHeight, 256, 0, Oglformat, GL_UNSIGNED_BYTE, p3DImageData);
|
glTexImage3D(Target, 0, GLStoreFormat, Image3DWidth, Image3DHeight, 256, 0, GLFormat, GL_UNSIGNED_BYTE, p3DImageData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -937,12 +929,12 @@ void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int He
|
||||||
m_vTextures[Slot].m_LastWrapMode = CCommandBuffer::WRAP_REPEAT;
|
m_vTextures[Slot].m_LastWrapMode = CCommandBuffer::WRAP_REPEAT;
|
||||||
|
|
||||||
// calculate memory usage
|
// calculate memory usage
|
||||||
m_vTextures[Slot].m_MemSize = Width * Height * PixelSize;
|
m_vTextures[Slot].m_MemSize = (size_t)Width * Height * PixelSize;
|
||||||
while(Width > 2 && Height > 2)
|
while(Width > 2 && Height > 2)
|
||||||
{
|
{
|
||||||
Width >>= 1;
|
Width >>= 1;
|
||||||
Height >>= 1;
|
Height >>= 1;
|
||||||
m_vTextures[Slot].m_MemSize += Width * Height * PixelSize;
|
m_vTextures[Slot].m_MemSize += (size_t)Width * Height * PixelSize;
|
||||||
}
|
}
|
||||||
m_pTextureMemoryUsage->store(m_pTextureMemoryUsage->load(std::memory_order_relaxed) + m_vTextures[Slot].m_MemSize, std::memory_order_relaxed);
|
m_pTextureMemoryUsage->store(m_pTextureMemoryUsage->load(std::memory_order_relaxed) + m_vTextures[Slot].m_MemSize, std::memory_order_relaxed);
|
||||||
|
|
||||||
|
@ -952,7 +944,7 @@ void CCommandProcessorFragment_OpenGL::TextureCreate(int Slot, int Width, int He
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL::Cmd_Texture_Create(const CCommandBuffer::SCommand_Texture_Create *pCommand)
|
void CCommandProcessorFragment_OpenGL::Cmd_Texture_Create(const CCommandBuffer::SCommand_Texture_Create *pCommand)
|
||||||
{
|
{
|
||||||
TextureCreate(pCommand->m_Slot, pCommand->m_Width, pCommand->m_Height, pCommand->m_PixelSize, TexFormatToOpenGLFormat(pCommand->m_Format), TexFormatToOpenGLFormat(pCommand->m_StoreFormat), pCommand->m_Flags, pCommand->m_pData);
|
TextureCreate(pCommand->m_Slot, pCommand->m_Width, pCommand->m_Height, TexFormatToOpenGLFormat(pCommand->m_Format), TexFormatToOpenGLFormat(pCommand->m_StoreFormat), pCommand->m_Flags, pCommand->m_pData);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL::Cmd_TextTexture_Update(const CCommandBuffer::SCommand_TextTexture_Update *pCommand)
|
void CCommandProcessorFragment_OpenGL::Cmd_TextTexture_Update(const CCommandBuffer::SCommand_TextTexture_Update *pCommand)
|
||||||
|
@ -968,16 +960,24 @@ void CCommandProcessorFragment_OpenGL::Cmd_TextTextures_Destroy(const CCommandBu
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL::Cmd_TextTextures_Create(const CCommandBuffer::SCommand_TextTextures_Create *pCommand)
|
void CCommandProcessorFragment_OpenGL::Cmd_TextTextures_Create(const CCommandBuffer::SCommand_TextTextures_Create *pCommand)
|
||||||
{
|
{
|
||||||
void *pTextData = pCommand->m_pTextData;
|
TextureCreate(pCommand->m_Slot, pCommand->m_Width, pCommand->m_Height, GL_ALPHA, GL_ALPHA, CCommandBuffer::TEXFLAG_NOMIPMAPS, pCommand->m_pTextData);
|
||||||
void *pTextOutlineData = pCommand->m_pTextOutlineData;
|
TextureCreate(pCommand->m_SlotOutline, pCommand->m_Width, pCommand->m_Height, GL_ALPHA, GL_ALPHA, CCommandBuffer::TEXFLAG_NOMIPMAPS, pCommand->m_pTextOutlineData);
|
||||||
TextureCreate(pCommand->m_Slot, pCommand->m_Width, pCommand->m_Height, 1, GL_ALPHA, GL_ALPHA, CCommandBuffer::TEXFLAG_NOMIPMAPS, pTextData);
|
|
||||||
TextureCreate(pCommand->m_SlotOutline, pCommand->m_Width, pCommand->m_Height, 1, GL_ALPHA, GL_ALPHA, CCommandBuffer::TEXFLAG_NOMIPMAPS, pTextOutlineData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL::Cmd_Clear(const CCommandBuffer::SCommand_Clear *pCommand)
|
void CCommandProcessorFragment_OpenGL::Cmd_Clear(const CCommandBuffer::SCommand_Clear *pCommand)
|
||||||
{
|
{
|
||||||
|
// if clip is still active, force disable it for clearing, enable it again afterwards
|
||||||
|
bool ClipWasEnabled = m_LastClipEnable;
|
||||||
|
if(ClipWasEnabled)
|
||||||
|
{
|
||||||
|
glDisable(GL_SCISSOR_TEST);
|
||||||
|
}
|
||||||
glClearColor(pCommand->m_Color.r, pCommand->m_Color.g, pCommand->m_Color.b, 0.0f);
|
glClearColor(pCommand->m_Color.r, pCommand->m_Color.g, pCommand->m_Color.b, 0.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
if(ClipWasEnabled)
|
||||||
|
{
|
||||||
|
glEnable(GL_SCISSOR_TEST);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL::Cmd_Render(const CCommandBuffer::SCommand_Render *pCommand)
|
void CCommandProcessorFragment_OpenGL::Cmd_Render(const CCommandBuffer::SCommand_Render *pCommand)
|
||||||
|
@ -1102,9 +1102,6 @@ ERunCommandReturnTypes CCommandProcessorFragment_OpenGL::RunCommand(const CComma
|
||||||
case CCommandBuffer::CMD_UPDATE_VIEWPORT:
|
case CCommandBuffer::CMD_UPDATE_VIEWPORT:
|
||||||
Cmd_Update_Viewport(static_cast<const CCommandBuffer::SCommand_Update_Viewport *>(pBaseCommand));
|
Cmd_Update_Viewport(static_cast<const CCommandBuffer::SCommand_Update_Viewport *>(pBaseCommand));
|
||||||
break;
|
break;
|
||||||
case CCommandBuffer::CMD_FINISH:
|
|
||||||
Cmd_Finish(static_cast<const CCommandBuffer::SCommand_Finish *>(pBaseCommand));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CCommandBuffer::CMD_CREATE_BUFFER_OBJECT: Cmd_CreateBufferObject(static_cast<const CCommandBuffer::SCommand_CreateBufferObject *>(pBaseCommand)); break;
|
case CCommandBuffer::CMD_CREATE_BUFFER_OBJECT: Cmd_CreateBufferObject(static_cast<const CCommandBuffer::SCommand_CreateBufferObject *>(pBaseCommand)); break;
|
||||||
case CCommandBuffer::CMD_UPDATE_BUFFER_OBJECT: Cmd_UpdateBufferObject(static_cast<const CCommandBuffer::SCommand_UpdateBufferObject *>(pBaseCommand)); break;
|
case CCommandBuffer::CMD_UPDATE_BUFFER_OBJECT: Cmd_UpdateBufferObject(static_cast<const CCommandBuffer::SCommand_UpdateBufferObject *>(pBaseCommand)); break;
|
||||||
|
|
|
@ -80,13 +80,13 @@ protected:
|
||||||
virtual bool IsNewApi() { return false; }
|
virtual bool IsNewApi() { return false; }
|
||||||
void DestroyTexture(int Slot);
|
void DestroyTexture(int Slot);
|
||||||
|
|
||||||
bool GetPresentedImageData(uint32_t &Width, uint32_t &Height, uint32_t &Format, std::vector<uint8_t> &vDstData) override;
|
bool GetPresentedImageData(uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector<uint8_t> &vDstData) override;
|
||||||
|
|
||||||
static int TexFormatToOpenGLFormat(int TexFormat);
|
static int TexFormatToOpenGLFormat(int TexFormat);
|
||||||
static size_t GLFormatToImageColorChannelCount(int GLFormat);
|
static size_t GLFormatToPixelSize(int GLFormat);
|
||||||
|
|
||||||
void TextureUpdate(int Slot, int X, int Y, int Width, int Height, int GLFormat, void *pTexData);
|
void TextureUpdate(int Slot, int X, int Y, int Width, int Height, int GLFormat, void *pTexData);
|
||||||
void TextureCreate(int Slot, int Width, int Height, int PixelSize, int GLFormat, int GLStoreFormat, int Flags, void *pTexData);
|
void TextureCreate(int Slot, int Width, int Height, int GLFormat, int GLStoreFormat, int Flags, void *pTexData);
|
||||||
|
|
||||||
virtual bool Cmd_Init(const SCommand_Init *pCommand);
|
virtual bool Cmd_Init(const SCommand_Init *pCommand);
|
||||||
virtual void Cmd_Shutdown(const SCommand_Shutdown *pCommand) {}
|
virtual void Cmd_Shutdown(const SCommand_Shutdown *pCommand) {}
|
||||||
|
@ -102,7 +102,6 @@ protected:
|
||||||
virtual void Cmd_Screenshot(const CCommandBuffer::SCommand_TrySwapAndScreenshot *pCommand);
|
virtual void Cmd_Screenshot(const CCommandBuffer::SCommand_TrySwapAndScreenshot *pCommand);
|
||||||
|
|
||||||
virtual void Cmd_Update_Viewport(const CCommandBuffer::SCommand_Update_Viewport *pCommand);
|
virtual void Cmd_Update_Viewport(const CCommandBuffer::SCommand_Update_Viewport *pCommand);
|
||||||
virtual void Cmd_Finish(const CCommandBuffer::SCommand_Finish *pCommand);
|
|
||||||
|
|
||||||
virtual void Cmd_CreateBufferObject(const CCommandBuffer::SCommand_CreateBufferObject *pCommand) { dbg_assert(false, "Call of unsupported Cmd_CreateBufferObject"); }
|
virtual void Cmd_CreateBufferObject(const CCommandBuffer::SCommand_CreateBufferObject *pCommand) { dbg_assert(false, "Call of unsupported Cmd_CreateBufferObject"); }
|
||||||
virtual void Cmd_RecreateBufferObject(const CCommandBuffer::SCommand_RecreateBufferObject *pCommand) { dbg_assert(false, "Call of unsupported Cmd_RecreateBufferObject"); }
|
virtual void Cmd_RecreateBufferObject(const CCommandBuffer::SCommand_RecreateBufferObject *pCommand) { dbg_assert(false, "Call of unsupported Cmd_RecreateBufferObject"); }
|
||||||
|
|
|
@ -555,7 +555,7 @@ void CCommandProcessorFragment_OpenGL3_3::TextureUpdate(int Slot, int X, int Y,
|
||||||
Y /= 2;
|
Y /= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), Width, Height, Width, Height, GLFormatToImageColorChannelCount(GLFormat));
|
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), Width, Height, Width, Height, GLFormatToPixelSize(GLFormat));
|
||||||
free(pTexData);
|
free(pTexData);
|
||||||
pTexData = pTmpData;
|
pTexData = pTmpData;
|
||||||
}
|
}
|
||||||
|
@ -577,7 +577,7 @@ void CCommandProcessorFragment_OpenGL3_3::Cmd_Texture_Destroy(const CCommandBuff
|
||||||
DestroyTexture(pCommand->m_Slot);
|
DestroyTexture(pCommand->m_Slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int Height, int PixelSize, int GLFormat, int GLStoreFormat, int Flags, void *pTexData)
|
void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int Height, int GLFormat, int GLStoreFormat, int Flags, void *pTexData)
|
||||||
{
|
{
|
||||||
if(Slot >= (int)m_vTextures.size())
|
if(Slot >= (int)m_vTextures.size())
|
||||||
m_vTextures.resize(m_vTextures.size() * 2);
|
m_vTextures.resize(m_vTextures.size() * 2);
|
||||||
|
@ -595,7 +595,7 @@ void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int
|
||||||
++RescaleCount;
|
++RescaleCount;
|
||||||
} while(Width > m_MaxTexSize || Height > m_MaxTexSize);
|
} while(Width > m_MaxTexSize || Height > m_MaxTexSize);
|
||||||
|
|
||||||
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), Width, Height, Width, Height, GLFormatToImageColorChannelCount(GLFormat));
|
void *pTmpData = Resize(static_cast<const unsigned char *>(pTexData), Width, Height, Width, Height, GLFormatToPixelSize(GLFormat));
|
||||||
free(pTexData);
|
free(pTexData);
|
||||||
pTexData = pTmpData;
|
pTexData = pTmpData;
|
||||||
}
|
}
|
||||||
|
@ -604,10 +604,9 @@ void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int
|
||||||
m_vTextures[Slot].m_Height = Height;
|
m_vTextures[Slot].m_Height = Height;
|
||||||
m_vTextures[Slot].m_RescaleCount = RescaleCount;
|
m_vTextures[Slot].m_RescaleCount = RescaleCount;
|
||||||
|
|
||||||
int Oglformat = GLFormat;
|
if(GLStoreFormat == GL_RED)
|
||||||
int StoreOglformat = GLStoreFormat;
|
GLStoreFormat = GL_R8;
|
||||||
if(StoreOglformat == GL_RED)
|
const size_t PixelSize = GLFormatToPixelSize(GLFormat);
|
||||||
StoreOglformat = GL_R8;
|
|
||||||
|
|
||||||
int SamplerSlot = 0;
|
int SamplerSlot = 0;
|
||||||
|
|
||||||
|
@ -628,7 +627,7 @@ void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
glSamplerParameteri(m_vTextures[Slot].m_Sampler, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glSamplerParameteri(m_vTextures[Slot].m_Sampler, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
glSamplerParameteri(m_vTextures[Slot].m_Sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glSamplerParameteri(m_vTextures[Slot].m_Sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, StoreOglformat, Width, Height, 0, Oglformat, GL_UNSIGNED_BYTE, pTexData);
|
glTexImage2D(GL_TEXTURE_2D, 0, GLStoreFormat, Width, Height, 0, GLFormat, GL_UNSIGNED_BYTE, pTexData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -649,7 +648,7 @@ void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int
|
||||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 5.f);
|
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 5.f);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, 5);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, 5);
|
||||||
}
|
}
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, StoreOglformat, Width, Height, 0, Oglformat, GL_UNSIGNED_BYTE, pTexData);
|
glTexImage2D(GL_TEXTURE_2D, 0, GLStoreFormat, Width, Height, 0, GLFormat, GL_UNSIGNED_BYTE, pTexData);
|
||||||
glGenerateMipmap(GL_TEXTURE_2D);
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -671,14 +670,12 @@ void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int
|
||||||
glSamplerParameterf(m_vTextures[Slot].m_Sampler2DArray, GL_TEXTURE_LOD_BIAS, ((GLfloat)m_OpenGLTextureLodBIAS / 1000.0f));
|
glSamplerParameterf(m_vTextures[Slot].m_Sampler2DArray, GL_TEXTURE_LOD_BIAS, ((GLfloat)m_OpenGLTextureLodBIAS / 1000.0f));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int ImageColorChannels = GLFormatToImageColorChannelCount(GLFormat);
|
|
||||||
|
|
||||||
uint8_t *p3DImageData = NULL;
|
uint8_t *p3DImageData = NULL;
|
||||||
|
|
||||||
bool IsSingleLayer = (Flags & CCommandBuffer::TEXFLAG_TO_2D_ARRAY_TEXTURE_SINGLE_LAYER) != 0;
|
bool IsSingleLayer = (Flags & CCommandBuffer::TEXFLAG_TO_2D_ARRAY_TEXTURE_SINGLE_LAYER) != 0;
|
||||||
|
|
||||||
if(!IsSingleLayer)
|
if(!IsSingleLayer)
|
||||||
p3DImageData = (uint8_t *)malloc((size_t)ImageColorChannels * Width * Height);
|
p3DImageData = (uint8_t *)malloc((size_t)Width * Height * PixelSize);
|
||||||
int Image3DWidth, Image3DHeight;
|
int Image3DWidth, Image3DHeight;
|
||||||
|
|
||||||
int ConvertWidth = Width;
|
int ConvertWidth = Width;
|
||||||
|
@ -691,7 +688,7 @@ void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int
|
||||||
dbg_msg("gfx", "3D/2D array texture was resized");
|
dbg_msg("gfx", "3D/2D array texture was resized");
|
||||||
int NewWidth = maximum<int>(HighestBit(ConvertWidth), 16);
|
int NewWidth = maximum<int>(HighestBit(ConvertWidth), 16);
|
||||||
int NewHeight = maximum<int>(HighestBit(ConvertHeight), 16);
|
int NewHeight = maximum<int>(HighestBit(ConvertHeight), 16);
|
||||||
uint8_t *pNewTexData = (uint8_t *)Resize((const uint8_t *)pTexData, ConvertWidth, ConvertHeight, NewWidth, NewHeight, GLFormatToImageColorChannelCount(GLFormat));
|
uint8_t *pNewTexData = (uint8_t *)Resize((const uint8_t *)pTexData, ConvertWidth, ConvertHeight, NewWidth, NewHeight, GLFormatToPixelSize(GLFormat));
|
||||||
|
|
||||||
ConvertWidth = NewWidth;
|
ConvertWidth = NewWidth;
|
||||||
ConvertHeight = NewHeight;
|
ConvertHeight = NewHeight;
|
||||||
|
@ -701,15 +698,15 @@ void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(IsSingleLayer || (Texture2DTo3D(pTexData, ConvertWidth, ConvertHeight, ImageColorChannels, 16, 16, p3DImageData, Image3DWidth, Image3DHeight)))
|
if(IsSingleLayer || (Texture2DTo3D(pTexData, ConvertWidth, ConvertHeight, PixelSize, 16, 16, p3DImageData, Image3DWidth, Image3DHeight)))
|
||||||
{
|
{
|
||||||
if(IsSingleLayer)
|
if(IsSingleLayer)
|
||||||
{
|
{
|
||||||
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, StoreOglformat, ConvertWidth, ConvertHeight, 1, 0, Oglformat, GL_UNSIGNED_BYTE, pTexData);
|
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GLStoreFormat, ConvertWidth, ConvertHeight, 1, 0, GLFormat, GL_UNSIGNED_BYTE, pTexData);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, StoreOglformat, Image3DWidth, Image3DHeight, 256, 0, Oglformat, GL_UNSIGNED_BYTE, p3DImageData);
|
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GLStoreFormat, Image3DWidth, Image3DHeight, 256, 0, GLFormat, GL_UNSIGNED_BYTE, p3DImageData);
|
||||||
}
|
}
|
||||||
glGenerateMipmap(GL_TEXTURE_2D_ARRAY);
|
glGenerateMipmap(GL_TEXTURE_2D_ARRAY);
|
||||||
}
|
}
|
||||||
|
@ -723,12 +720,12 @@ void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int
|
||||||
m_vTextures[Slot].m_LastWrapMode = CCommandBuffer::WRAP_REPEAT;
|
m_vTextures[Slot].m_LastWrapMode = CCommandBuffer::WRAP_REPEAT;
|
||||||
|
|
||||||
// calculate memory usage
|
// calculate memory usage
|
||||||
m_vTextures[Slot].m_MemSize = Width * Height * PixelSize;
|
m_vTextures[Slot].m_MemSize = (size_t)Width * Height * PixelSize;
|
||||||
while(Width > 2 && Height > 2)
|
while(Width > 2 && Height > 2)
|
||||||
{
|
{
|
||||||
Width >>= 1;
|
Width >>= 1;
|
||||||
Height >>= 1;
|
Height >>= 1;
|
||||||
m_vTextures[Slot].m_MemSize += Width * Height * PixelSize;
|
m_vTextures[Slot].m_MemSize += (size_t)Width * Height * PixelSize;
|
||||||
}
|
}
|
||||||
m_pTextureMemoryUsage->store(m_pTextureMemoryUsage->load(std::memory_order_relaxed) + m_vTextures[Slot].m_MemSize, std::memory_order_relaxed);
|
m_pTextureMemoryUsage->store(m_pTextureMemoryUsage->load(std::memory_order_relaxed) + m_vTextures[Slot].m_MemSize, std::memory_order_relaxed);
|
||||||
|
|
||||||
|
@ -737,7 +734,7 @@ void CCommandProcessorFragment_OpenGL3_3::TextureCreate(int Slot, int Width, int
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL3_3::Cmd_Texture_Create(const CCommandBuffer::SCommand_Texture_Create *pCommand)
|
void CCommandProcessorFragment_OpenGL3_3::Cmd_Texture_Create(const CCommandBuffer::SCommand_Texture_Create *pCommand)
|
||||||
{
|
{
|
||||||
TextureCreate(pCommand->m_Slot, pCommand->m_Width, pCommand->m_Height, pCommand->m_PixelSize, TexFormatToOpenGLFormat(pCommand->m_Format), TexFormatToOpenGLFormat(pCommand->m_StoreFormat), pCommand->m_Flags, pCommand->m_pData);
|
TextureCreate(pCommand->m_Slot, pCommand->m_Width, pCommand->m_Height, TexFormatToOpenGLFormat(pCommand->m_Format), TexFormatToOpenGLFormat(pCommand->m_StoreFormat), pCommand->m_Flags, pCommand->m_pData);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL3_3::Cmd_TextTexture_Update(const CCommandBuffer::SCommand_TextTexture_Update *pCommand)
|
void CCommandProcessorFragment_OpenGL3_3::Cmd_TextTexture_Update(const CCommandBuffer::SCommand_TextTexture_Update *pCommand)
|
||||||
|
@ -753,20 +750,28 @@ void CCommandProcessorFragment_OpenGL3_3::Cmd_TextTextures_Destroy(const CComman
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL3_3::Cmd_TextTextures_Create(const CCommandBuffer::SCommand_TextTextures_Create *pCommand)
|
void CCommandProcessorFragment_OpenGL3_3::Cmd_TextTextures_Create(const CCommandBuffer::SCommand_TextTextures_Create *pCommand)
|
||||||
{
|
{
|
||||||
void *pTextData = pCommand->m_pTextData;
|
TextureCreate(pCommand->m_Slot, pCommand->m_Width, pCommand->m_Height, GL_RED, GL_RED, CCommandBuffer::TEXFLAG_NOMIPMAPS, pCommand->m_pTextData);
|
||||||
void *pTextOutlineData = pCommand->m_pTextOutlineData;
|
TextureCreate(pCommand->m_SlotOutline, pCommand->m_Width, pCommand->m_Height, GL_RED, GL_RED, CCommandBuffer::TEXFLAG_NOMIPMAPS, pCommand->m_pTextOutlineData);
|
||||||
TextureCreate(pCommand->m_Slot, pCommand->m_Width, pCommand->m_Height, 1, GL_RED, GL_RED, CCommandBuffer::TEXFLAG_NOMIPMAPS, pTextData);
|
|
||||||
TextureCreate(pCommand->m_SlotOutline, pCommand->m_Width, pCommand->m_Height, 1, GL_RED, GL_RED, CCommandBuffer::TEXFLAG_NOMIPMAPS, pTextOutlineData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL3_3::Cmd_Clear(const CCommandBuffer::SCommand_Clear *pCommand)
|
void CCommandProcessorFragment_OpenGL3_3::Cmd_Clear(const CCommandBuffer::SCommand_Clear *pCommand)
|
||||||
{
|
{
|
||||||
|
// if clip is still active, force disable it for clearing, enable it again afterwards
|
||||||
|
bool ClipWasEnabled = m_LastClipEnable;
|
||||||
|
if(ClipWasEnabled)
|
||||||
|
{
|
||||||
|
glDisable(GL_SCISSOR_TEST);
|
||||||
|
}
|
||||||
if(pCommand->m_Color.r != m_ClearColor.r || pCommand->m_Color.g != m_ClearColor.g || pCommand->m_Color.b != m_ClearColor.b)
|
if(pCommand->m_Color.r != m_ClearColor.r || pCommand->m_Color.g != m_ClearColor.g || pCommand->m_Color.b != m_ClearColor.b)
|
||||||
{
|
{
|
||||||
glClearColor(pCommand->m_Color.r, pCommand->m_Color.g, pCommand->m_Color.b, 0.0f);
|
glClearColor(pCommand->m_Color.r, pCommand->m_Color.g, pCommand->m_Color.b, 0.0f);
|
||||||
m_ClearColor = pCommand->m_Color;
|
m_ClearColor = pCommand->m_Color;
|
||||||
}
|
}
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
if(ClipWasEnabled)
|
||||||
|
{
|
||||||
|
glEnable(GL_SCISSOR_TEST);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCommandProcessorFragment_OpenGL3_3::UploadStreamBufferData(unsigned int PrimitiveType, const void *pVertices, size_t VertSize, unsigned int PrimitiveCount, bool AsTex3D)
|
void CCommandProcessorFragment_OpenGL3_3::UploadStreamBufferData(unsigned int PrimitiveType, const void *pVertices, size_t VertSize, unsigned int PrimitiveCount, bool AsTex3D)
|
||||||
|
|
|
@ -83,7 +83,7 @@ protected:
|
||||||
void RenderText(const CCommandBuffer::SState &State, int DrawNum, int TextTextureIndex, int TextOutlineTextureIndex, int TextureSize, const ColorRGBA &TextColor, const ColorRGBA &TextOutlineColor);
|
void RenderText(const CCommandBuffer::SState &State, int DrawNum, int TextTextureIndex, int TextOutlineTextureIndex, int TextureSize, const ColorRGBA &TextColor, const ColorRGBA &TextOutlineColor);
|
||||||
|
|
||||||
void TextureUpdate(int Slot, int X, int Y, int Width, int Height, int GLFormat, void *pTexData);
|
void TextureUpdate(int Slot, int X, int Y, int Width, int Height, int GLFormat, void *pTexData);
|
||||||
void TextureCreate(int Slot, int Width, int Height, int PixelSize, int GLFormat, int GLStoreFormat, int Flags, void *pTexData);
|
void TextureCreate(int Slot, int Width, int Height, int GLFormat, int GLStoreFormat, int Flags, void *pTexData);
|
||||||
|
|
||||||
bool Cmd_Init(const SCommand_Init *pCommand) override;
|
bool Cmd_Init(const SCommand_Init *pCommand) override;
|
||||||
void Cmd_Shutdown(const SCommand_Shutdown *pCommand) override;
|
void Cmd_Shutdown(const SCommand_Shutdown *pCommand) override;
|
||||||
|
|
|
@ -1102,7 +1102,7 @@ protected:
|
||||||
bool m_CanAssert = false;
|
bool m_CanAssert = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* After an error occured, the rendering stop as soon as possible
|
* After an error occurred, the rendering stop as soon as possible
|
||||||
* Always stop the current code execution after a call to this function (e.g. return false)
|
* Always stop the current code execution after a call to this function (e.g. return false)
|
||||||
*/
|
*/
|
||||||
void SetError(EGFXErrorType ErrType, const char *pErr, const char *pErrStrExtra = nullptr)
|
void SetError(EGFXErrorType ErrType, const char *pErr, const char *pErrStrExtra = nullptr)
|
||||||
|
@ -1282,7 +1282,6 @@ protected:
|
||||||
m_aCommandCallbacks[CommandBufferCMDOff(CCommandBuffer::CMD_RENDER_QUAD_CONTAINER_SPRITE_MULTIPLE)] = {true, [this](SRenderCommandExecuteBuffer &ExecBuffer, const CCommandBuffer::SCommand *pBaseCommand) { Cmd_RenderQuadContainerAsSpriteMultiple_FillExecuteBuffer(ExecBuffer, static_cast<const CCommandBuffer::SCommand_RenderQuadContainerAsSpriteMultiple *>(pBaseCommand)); }, [this](const CCommandBuffer::SCommand *pBaseCommand, SRenderCommandExecuteBuffer &ExecBuffer) { return Cmd_RenderQuadContainerAsSpriteMultiple(static_cast<const CCommandBuffer::SCommand_RenderQuadContainerAsSpriteMultiple *>(pBaseCommand), ExecBuffer); }};
|
m_aCommandCallbacks[CommandBufferCMDOff(CCommandBuffer::CMD_RENDER_QUAD_CONTAINER_SPRITE_MULTIPLE)] = {true, [this](SRenderCommandExecuteBuffer &ExecBuffer, const CCommandBuffer::SCommand *pBaseCommand) { Cmd_RenderQuadContainerAsSpriteMultiple_FillExecuteBuffer(ExecBuffer, static_cast<const CCommandBuffer::SCommand_RenderQuadContainerAsSpriteMultiple *>(pBaseCommand)); }, [this](const CCommandBuffer::SCommand *pBaseCommand, SRenderCommandExecuteBuffer &ExecBuffer) { return Cmd_RenderQuadContainerAsSpriteMultiple(static_cast<const CCommandBuffer::SCommand_RenderQuadContainerAsSpriteMultiple *>(pBaseCommand), ExecBuffer); }};
|
||||||
|
|
||||||
m_aCommandCallbacks[CommandBufferCMDOff(CCommandBuffer::CMD_SWAP)] = {false, [](SRenderCommandExecuteBuffer &ExecBuffer, const CCommandBuffer::SCommand *pBaseCommand) {}, [this](const CCommandBuffer::SCommand *pBaseCommand, SRenderCommandExecuteBuffer &ExecBuffer) { return Cmd_Swap(static_cast<const CCommandBuffer::SCommand_Swap *>(pBaseCommand)); }};
|
m_aCommandCallbacks[CommandBufferCMDOff(CCommandBuffer::CMD_SWAP)] = {false, [](SRenderCommandExecuteBuffer &ExecBuffer, const CCommandBuffer::SCommand *pBaseCommand) {}, [this](const CCommandBuffer::SCommand *pBaseCommand, SRenderCommandExecuteBuffer &ExecBuffer) { return Cmd_Swap(static_cast<const CCommandBuffer::SCommand_Swap *>(pBaseCommand)); }};
|
||||||
m_aCommandCallbacks[CommandBufferCMDOff(CCommandBuffer::CMD_FINISH)] = {false, [](SRenderCommandExecuteBuffer &ExecBuffer, const CCommandBuffer::SCommand *pBaseCommand) {}, [this](const CCommandBuffer::SCommand *pBaseCommand, SRenderCommandExecuteBuffer &ExecBuffer) { return Cmd_Finish(static_cast<const CCommandBuffer::SCommand_Finish *>(pBaseCommand)); }};
|
|
||||||
|
|
||||||
m_aCommandCallbacks[CommandBufferCMDOff(CCommandBuffer::CMD_VSYNC)] = {false, [](SRenderCommandExecuteBuffer &ExecBuffer, const CCommandBuffer::SCommand *pBaseCommand) {}, [this](const CCommandBuffer::SCommand *pBaseCommand, SRenderCommandExecuteBuffer &ExecBuffer) { return Cmd_VSync(static_cast<const CCommandBuffer::SCommand_VSync *>(pBaseCommand)); }};
|
m_aCommandCallbacks[CommandBufferCMDOff(CCommandBuffer::CMD_VSYNC)] = {false, [](SRenderCommandExecuteBuffer &ExecBuffer, const CCommandBuffer::SCommand *pBaseCommand) {}, [this](const CCommandBuffer::SCommand *pBaseCommand, SRenderCommandExecuteBuffer &ExecBuffer) { return Cmd_VSync(static_cast<const CCommandBuffer::SCommand_VSync *>(pBaseCommand)); }};
|
||||||
m_aCommandCallbacks[CommandBufferCMDOff(CCommandBuffer::CMD_MULTISAMPLING)] = {false, [](SRenderCommandExecuteBuffer &ExecBuffer, const CCommandBuffer::SCommand *pBaseCommand) {}, [this](const CCommandBuffer::SCommand *pBaseCommand, SRenderCommandExecuteBuffer &ExecBuffer) { return Cmd_MultiSampling(static_cast<const CCommandBuffer::SCommand_MultiSampling *>(pBaseCommand)); }};
|
m_aCommandCallbacks[CommandBufferCMDOff(CCommandBuffer::CMD_MULTISAMPLING)] = {false, [](SRenderCommandExecuteBuffer &ExecBuffer, const CCommandBuffer::SCommand *pBaseCommand) {}, [this](const CCommandBuffer::SCommand *pBaseCommand, SRenderCommandExecuteBuffer &ExecBuffer) { return Cmd_MultiSampling(static_cast<const CCommandBuffer::SCommand_MultiSampling *>(pBaseCommand)); }};
|
||||||
|
@ -1386,7 +1385,7 @@ protected:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool GetPresentedImageDataImpl(uint32_t &Width, uint32_t &Height, uint32_t &Format, std::vector<uint8_t> &vDstData, bool FlipImgData, bool ResetAlpha)
|
[[nodiscard]] bool GetPresentedImageDataImpl(uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector<uint8_t> &vDstData, bool FlipImgData, bool ResetAlpha)
|
||||||
{
|
{
|
||||||
bool IsB8G8R8A8 = m_VKSurfFormat.format == VK_FORMAT_B8G8R8A8_UNORM;
|
bool IsB8G8R8A8 = m_VKSurfFormat.format == VK_FORMAT_B8G8R8A8_UNORM;
|
||||||
bool UsesRGBALikeFormat = m_VKSurfFormat.format == VK_FORMAT_R8G8B8A8_UNORM || IsB8G8R8A8;
|
bool UsesRGBALikeFormat = m_VKSurfFormat.format == VK_FORMAT_R8G8B8A8_UNORM || IsB8G8R8A8;
|
||||||
|
@ -1397,7 +1396,7 @@ protected:
|
||||||
Height = Viewport.height;
|
Height = Viewport.height;
|
||||||
Format = CImageInfo::FORMAT_RGBA;
|
Format = CImageInfo::FORMAT_RGBA;
|
||||||
|
|
||||||
size_t ImageTotalSize = (size_t)Width * Height * 4;
|
const size_t ImageTotalSize = (size_t)Width * Height * CImageInfo::PixelSize(Format);
|
||||||
|
|
||||||
uint8_t *pResImageData;
|
uint8_t *pResImageData;
|
||||||
if(!PreparePresentedImageDataImage(pResImageData, Width, Height))
|
if(!PreparePresentedImageDataImage(pResImageData, Width, Height))
|
||||||
|
@ -1553,7 +1552,7 @@ protected:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool GetPresentedImageData(uint32_t &Width, uint32_t &Height, uint32_t &Format, std::vector<uint8_t> &vDstData) override
|
[[nodiscard]] bool GetPresentedImageData(uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector<uint8_t> &vDstData) override
|
||||||
{
|
{
|
||||||
return GetPresentedImageDataImpl(Width, Height, Format, vDstData, false, false);
|
return GetPresentedImageDataImpl(Width, Height, Format, vDstData, false, false);
|
||||||
}
|
}
|
||||||
|
@ -2510,7 +2509,7 @@ protected:
|
||||||
* TEXTURES
|
* TEXTURES
|
||||||
************************/
|
************************/
|
||||||
|
|
||||||
size_t VulkanFormatToImageColorChannelCount(VkFormat Format)
|
size_t VulkanFormatToPixelSize(VkFormat Format)
|
||||||
{
|
{
|
||||||
if(Format == VK_FORMAT_R8G8B8_UNORM)
|
if(Format == VK_FORMAT_R8G8B8_UNORM)
|
||||||
return 3;
|
return 3;
|
||||||
|
@ -2521,9 +2520,9 @@ protected:
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool UpdateTexture(size_t TextureSlot, VkFormat Format, void *&pData, int64_t XOff, int64_t YOff, size_t Width, size_t Height, size_t ColorChannelCount)
|
[[nodiscard]] bool UpdateTexture(size_t TextureSlot, VkFormat Format, void *&pData, int64_t XOff, int64_t YOff, size_t Width, size_t Height)
|
||||||
{
|
{
|
||||||
size_t ImageSize = Width * Height * ColorChannelCount;
|
const size_t ImageSize = Width * Height * VulkanFormatToPixelSize(Format);
|
||||||
SMemoryBlock<s_StagingBufferImageCacheID> StagingBuffer;
|
SMemoryBlock<s_StagingBufferImageCacheID> StagingBuffer;
|
||||||
if(!GetStagingBufferImage(StagingBuffer, pData, ImageSize))
|
if(!GetStagingBufferImage(StagingBuffer, pData, ImageSize))
|
||||||
return false;
|
return false;
|
||||||
|
@ -2541,7 +2540,7 @@ protected:
|
||||||
YOff /= 2;
|
YOff /= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *pTmpData = Resize((const uint8_t *)pData, Width, Height, Width, Height, VulkanFormatToImageColorChannelCount(Format));
|
void *pTmpData = Resize((const uint8_t *)pData, Width, Height, Width, Height, VulkanFormatToPixelSize(Format));
|
||||||
free(pData);
|
free(pData);
|
||||||
pData = pTmpData;
|
pData = pTmpData;
|
||||||
}
|
}
|
||||||
|
@ -2571,14 +2570,13 @@ protected:
|
||||||
int Slot,
|
int Slot,
|
||||||
int Width,
|
int Width,
|
||||||
int Height,
|
int Height,
|
||||||
int PixelSize,
|
|
||||||
VkFormat Format,
|
VkFormat Format,
|
||||||
VkFormat StoreFormat,
|
VkFormat StoreFormat,
|
||||||
int Flags,
|
int Flags,
|
||||||
void *&pData)
|
void *&pData)
|
||||||
{
|
{
|
||||||
size_t ImageIndex = (size_t)Slot;
|
size_t ImageIndex = (size_t)Slot;
|
||||||
int ImageColorChannels = VulkanFormatToImageColorChannelCount(Format);
|
const size_t PixelSize = VulkanFormatToPixelSize(Format);
|
||||||
|
|
||||||
while(ImageIndex >= m_vTextures.size())
|
while(ImageIndex >= m_vTextures.size())
|
||||||
{
|
{
|
||||||
|
@ -2596,7 +2594,7 @@ protected:
|
||||||
++RescaleCount;
|
++RescaleCount;
|
||||||
} while((size_t)Width > m_MaxTextureSize || (size_t)Height > m_MaxTextureSize);
|
} while((size_t)Width > m_MaxTextureSize || (size_t)Height > m_MaxTextureSize);
|
||||||
|
|
||||||
void *pTmpData = Resize((const uint8_t *)(pData), Width, Height, Width, Height, ImageColorChannels);
|
void *pTmpData = Resize((const uint8_t *)(pData), Width, Height, Width, Height, PixelSize);
|
||||||
free(pData);
|
free(pData);
|
||||||
pData = pTmpData;
|
pData = pTmpData;
|
||||||
}
|
}
|
||||||
|
@ -2654,7 +2652,7 @@ protected:
|
||||||
dbg_msg("vulkan", "3D/2D array texture was resized");
|
dbg_msg("vulkan", "3D/2D array texture was resized");
|
||||||
int NewWidth = maximum<int>(HighestBit(ConvertWidth), 16);
|
int NewWidth = maximum<int>(HighestBit(ConvertWidth), 16);
|
||||||
int NewHeight = maximum<int>(HighestBit(ConvertHeight), 16);
|
int NewHeight = maximum<int>(HighestBit(ConvertHeight), 16);
|
||||||
uint8_t *pNewTexData = (uint8_t *)Resize((const uint8_t *)pData, ConvertWidth, ConvertHeight, NewWidth, NewHeight, ImageColorChannels);
|
uint8_t *pNewTexData = (uint8_t *)Resize((const uint8_t *)pData, ConvertWidth, ConvertHeight, NewWidth, NewHeight, PixelSize);
|
||||||
|
|
||||||
ConvertWidth = NewWidth;
|
ConvertWidth = NewWidth;
|
||||||
ConvertHeight = NewHeight;
|
ConvertHeight = NewHeight;
|
||||||
|
@ -2668,8 +2666,8 @@ protected:
|
||||||
bool Needs3DTexDel = false;
|
bool Needs3DTexDel = false;
|
||||||
if(!Is2DTextureSingleLayer)
|
if(!Is2DTextureSingleLayer)
|
||||||
{
|
{
|
||||||
p3DTexData = malloc((size_t)ImageColorChannels * ConvertWidth * ConvertHeight);
|
p3DTexData = malloc((size_t)PixelSize * ConvertWidth * ConvertHeight);
|
||||||
if(!Texture2DTo3D(pData, ConvertWidth, ConvertHeight, ImageColorChannels, 16, 16, p3DTexData, Image3DWidth, Image3DHeight))
|
if(!Texture2DTo3D(pData, ConvertWidth, ConvertHeight, PixelSize, 16, 16, p3DTexData, Image3DWidth, Image3DHeight))
|
||||||
{
|
{
|
||||||
free(p3DTexData);
|
free(p3DTexData);
|
||||||
p3DTexData = nullptr;
|
p3DTexData = nullptr;
|
||||||
|
@ -6467,7 +6465,7 @@ public:
|
||||||
Buffer.m_pRawCommand = pBaseCommand;
|
Buffer.m_pRawCommand = pBaseCommand;
|
||||||
Buffer.m_ThreadIndex = 0;
|
Buffer.m_ThreadIndex = 0;
|
||||||
|
|
||||||
if(m_CurCommandInPipe + 1 == m_CommandsInPipe && Buffer.m_Command != CCommandBuffer::CMD_FINISH)
|
if(m_CurCommandInPipe + 1 == m_CommandsInPipe)
|
||||||
{
|
{
|
||||||
m_LastCommandsInPipeThreadIndex = std::numeric_limits<decltype(m_LastCommandsInPipeThreadIndex)>::max();
|
m_LastCommandsInPipeThreadIndex = std::numeric_limits<decltype(m_LastCommandsInPipeThreadIndex)>::max();
|
||||||
}
|
}
|
||||||
|
@ -6493,7 +6491,7 @@ public:
|
||||||
Ret = CallbackObj.m_CMDIsHandled;
|
Ret = CallbackObj.m_CMDIsHandled;
|
||||||
if(!CallbackObj.m_CommandCB(pBaseCommand, Buffer))
|
if(!CallbackObj.m_CommandCB(pBaseCommand, Buffer))
|
||||||
{
|
{
|
||||||
// an error occured, stop this command and ignore all further commands
|
// an error occurred, stop this command and ignore all further commands
|
||||||
return ERunCommandReturnTypes::RUN_COMMAND_COMMAND_ERROR;
|
return ERunCommandReturnTypes::RUN_COMMAND_COMMAND_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6582,7 +6580,7 @@ public:
|
||||||
m_MultiSamplingCount = (g_Config.m_GfxFsaaSamples & 0xFFFFFFFE); // ignore the uneven bit, only even multi sampling works
|
m_MultiSamplingCount = (g_Config.m_GfxFsaaSamples & 0xFFFFFFFE); // ignore the uneven bit, only even multi sampling works
|
||||||
|
|
||||||
TGLBackendReadPresentedImageData &ReadPresentedImgDataFunc = *pCommand->m_pReadPresentedImageDataFunc;
|
TGLBackendReadPresentedImageData &ReadPresentedImgDataFunc = *pCommand->m_pReadPresentedImageDataFunc;
|
||||||
ReadPresentedImgDataFunc = [this](uint32_t &Width, uint32_t &Height, uint32_t &Format, std::vector<uint8_t> &vDstData) { return GetPresentedImageData(Width, Height, Format, vDstData); };
|
ReadPresentedImgDataFunc = [this](uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector<uint8_t> &vDstData) { return GetPresentedImageData(Width, Height, Format, vDstData); };
|
||||||
|
|
||||||
m_pWindow = pCommand->m_pWindow;
|
m_pWindow = pCommand->m_pWindow;
|
||||||
|
|
||||||
|
@ -6657,7 +6655,7 @@ public:
|
||||||
|
|
||||||
void *pData = pCommand->m_pData;
|
void *pData = pCommand->m_pData;
|
||||||
|
|
||||||
if(!UpdateTexture(IndexTex, VK_FORMAT_B8G8R8A8_UNORM, pData, pCommand->m_X, pCommand->m_Y, pCommand->m_Width, pCommand->m_Height, TexFormatToImageColorChannelCount(pCommand->m_Format)))
|
if(!UpdateTexture(IndexTex, VK_FORMAT_B8G8R8A8_UNORM, pData, pCommand->m_X, pCommand->m_Y, pCommand->m_Width, pCommand->m_Height))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
free(pData);
|
free(pData);
|
||||||
|
@ -6682,13 +6680,12 @@ public:
|
||||||
int Slot = pCommand->m_Slot;
|
int Slot = pCommand->m_Slot;
|
||||||
int Width = pCommand->m_Width;
|
int Width = pCommand->m_Width;
|
||||||
int Height = pCommand->m_Height;
|
int Height = pCommand->m_Height;
|
||||||
int PixelSize = pCommand->m_PixelSize;
|
|
||||||
int Format = pCommand->m_Format;
|
int Format = pCommand->m_Format;
|
||||||
int StoreFormat = pCommand->m_StoreFormat;
|
int StoreFormat = pCommand->m_StoreFormat;
|
||||||
int Flags = pCommand->m_Flags;
|
int Flags = pCommand->m_Flags;
|
||||||
void *pData = pCommand->m_pData;
|
void *pData = pCommand->m_pData;
|
||||||
|
|
||||||
if(!CreateTextureCMD(Slot, Width, Height, PixelSize, TextureFormatToVulkanFormat(Format), TextureFormatToVulkanFormat(StoreFormat), Flags, pData))
|
if(!CreateTextureCMD(Slot, Width, Height, TextureFormatToVulkanFormat(Format), TextureFormatToVulkanFormat(StoreFormat), Flags, pData))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
free(pData);
|
free(pData);
|
||||||
|
@ -6706,9 +6703,9 @@ public:
|
||||||
void *pTmpData = pCommand->m_pTextData;
|
void *pTmpData = pCommand->m_pTextData;
|
||||||
void *pTmpData2 = pCommand->m_pTextOutlineData;
|
void *pTmpData2 = pCommand->m_pTextOutlineData;
|
||||||
|
|
||||||
if(!CreateTextureCMD(Slot, Width, Height, 1, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, CCommandBuffer::TEXFLAG_NOMIPMAPS, pTmpData))
|
if(!CreateTextureCMD(Slot, Width, Height, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, CCommandBuffer::TEXFLAG_NOMIPMAPS, pTmpData))
|
||||||
return false;
|
return false;
|
||||||
if(!CreateTextureCMD(SlotOutline, Width, Height, 1, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, CCommandBuffer::TEXFLAG_NOMIPMAPS, pTmpData2))
|
if(!CreateTextureCMD(SlotOutline, Width, Height, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_UNORM, CCommandBuffer::TEXFLAG_NOMIPMAPS, pTmpData2))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(!CreateNewTextDescriptorSets(Slot, SlotOutline))
|
if(!CreateNewTextDescriptorSets(Slot, SlotOutline))
|
||||||
|
@ -6741,7 +6738,7 @@ public:
|
||||||
|
|
||||||
void *pData = pCommand->m_pData;
|
void *pData = pCommand->m_pData;
|
||||||
|
|
||||||
if(!UpdateTexture(IndexTex, VK_FORMAT_R8_UNORM, pData, pCommand->m_X, pCommand->m_Y, pCommand->m_Width, pCommand->m_Height, 1))
|
if(!UpdateTexture(IndexTex, VK_FORMAT_R8_UNORM, pData, pCommand->m_X, pCommand->m_Y, pCommand->m_Width, pCommand->m_Height))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
free(pData);
|
free(pData);
|
||||||
|
@ -6815,7 +6812,7 @@ public:
|
||||||
|
|
||||||
uint32_t Width;
|
uint32_t Width;
|
||||||
uint32_t Height;
|
uint32_t Height;
|
||||||
uint32_t Format;
|
CImageInfo::EImageFormat Format;
|
||||||
if(GetPresentedImageDataImpl(Width, Height, Format, m_vScreenshotHelper, false, true))
|
if(GetPresentedImageDataImpl(Width, Height, Format, m_vScreenshotHelper, false, true))
|
||||||
{
|
{
|
||||||
size_t ImgSize = (size_t)Width * (size_t)Height * (size_t)4;
|
size_t ImgSize = (size_t)Width * (size_t)Height * (size_t)4;
|
||||||
|
@ -6828,7 +6825,7 @@ public:
|
||||||
}
|
}
|
||||||
pCommand->m_pImage->m_Width = (int)Width;
|
pCommand->m_pImage->m_Width = (int)Width;
|
||||||
pCommand->m_pImage->m_Height = (int)Height;
|
pCommand->m_pImage->m_Height = (int)Height;
|
||||||
pCommand->m_pImage->m_Format = (int)Format;
|
pCommand->m_pImage->m_Format = Format;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -6921,12 +6918,6 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool Cmd_Finish(const CCommandBuffer::SCommand_Finish *pCommand)
|
|
||||||
{
|
|
||||||
// just ignore it with vulkan
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] bool Cmd_Swap(const CCommandBuffer::SCommand_Swap *pCommand)
|
[[nodiscard]] bool Cmd_Swap(const CCommandBuffer::SCommand_Swap *pCommand)
|
||||||
{
|
{
|
||||||
return NextFrame();
|
return NextFrame();
|
||||||
|
@ -7659,7 +7650,7 @@ public:
|
||||||
{
|
{
|
||||||
if(!m_aCommandCallbacks[CommandBufferCMDOff(NextCmd.m_Command)].m_CommandCB(NextCmd.m_pRawCommand, NextCmd))
|
if(!m_aCommandCallbacks[CommandBufferCMDOff(NextCmd.m_Command)].m_CommandCB(NextCmd.m_pRawCommand, NextCmd))
|
||||||
{
|
{
|
||||||
// an error occured, the thread will not continue execution
|
// an error occurred, the thread will not continue execution
|
||||||
HasErrorFromCmd = true;
|
HasErrorFromCmd = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -505,7 +505,7 @@ void CClient::RconAuth(const char *pName, const char *pPassword)
|
||||||
|
|
||||||
CMsgPacker Msg(NETMSG_RCON_AUTH, true);
|
CMsgPacker Msg(NETMSG_RCON_AUTH, true);
|
||||||
Msg.AddString(pName, 32);
|
Msg.AddString(pName, 32);
|
||||||
Msg.AddString(pPassword, 32);
|
Msg.AddString(pPassword, 128);
|
||||||
Msg.AddInt(1);
|
Msg.AddInt(1);
|
||||||
SendMsgActive(&Msg, MSGFLAG_VITAL);
|
SendMsgActive(&Msg, MSGFLAG_VITAL);
|
||||||
}
|
}
|
||||||
|
@ -974,7 +974,7 @@ void CClient::ServerInfoRequest()
|
||||||
|
|
||||||
void CClient::LoadDebugFont()
|
void CClient::LoadDebugFont()
|
||||||
{
|
{
|
||||||
m_DebugFont = Graphics()->LoadTexture("debug_font.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
m_DebugFont = Graphics()->LoadTexture("debug_font.png", IStorage::TYPE_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---
|
// ---
|
||||||
|
@ -3120,7 +3120,7 @@ void CClient::Run()
|
||||||
// handle pending map edits
|
// handle pending map edits
|
||||||
if(m_aCmdEditMap[0])
|
if(m_aCmdEditMap[0])
|
||||||
{
|
{
|
||||||
int Result = m_pEditor->Load(m_aCmdEditMap, IStorage::TYPE_ALL_OR_ABSOLUTE);
|
int Result = m_pEditor->HandleMapDrop(m_aCmdEditMap, IStorage::TYPE_ALL_OR_ABSOLUTE);
|
||||||
if(Result)
|
if(Result)
|
||||||
g_Config.m_ClEditor = true;
|
g_Config.m_ClEditor = true;
|
||||||
else
|
else
|
||||||
|
@ -3376,12 +3376,6 @@ void CClient::Run()
|
||||||
else
|
else
|
||||||
LastTime = Now;
|
LastTime = Now;
|
||||||
|
|
||||||
if(g_Config.m_DbgHitch)
|
|
||||||
{
|
|
||||||
std::this_thread::sleep_for(g_Config.m_DbgHitch * 1ms);
|
|
||||||
g_Config.m_DbgHitch = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// update local and global time
|
// update local and global time
|
||||||
m_LocalTime = (time_get() - m_LocalStartTime) / (float)time_freq();
|
m_LocalTime = (time_get() - m_LocalStartTime) / (float)time_freq();
|
||||||
m_GlobalTime = (time_get() - m_GlobalStartTime) / (float)time_freq();
|
m_GlobalTime = (time_get() - m_GlobalStartTime) / (float)time_freq();
|
||||||
|
@ -3957,10 +3951,13 @@ void CClient::Con_DemoSpeed(IConsole::IResult *pResult, void *pUserData)
|
||||||
pSelf->m_DemoPlayer.SetSpeed(pResult->GetFloat(0));
|
pSelf->m_DemoPlayer.SetSpeed(pResult->GetFloat(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::DemoRecorder_Start(const char *pFilename, bool WithTimestamp, int Recorder)
|
void CClient::DemoRecorder_Start(const char *pFilename, bool WithTimestamp, int Recorder, bool Verbose)
|
||||||
{
|
{
|
||||||
if(State() != IClient::STATE_ONLINE)
|
if(State() != IClient::STATE_ONLINE)
|
||||||
m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "demorec/record", "client is not online");
|
{
|
||||||
|
if(Verbose)
|
||||||
|
m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "demorec/record", "client is not online");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char aFilename[IO_MAX_PATH_LENGTH];
|
char aFilename[IO_MAX_PATH_LENGTH];
|
||||||
|
@ -4038,9 +4035,9 @@ void CClient::Con_Record(IConsole::IResult *pResult, void *pUserData)
|
||||||
{
|
{
|
||||||
CClient *pSelf = (CClient *)pUserData;
|
CClient *pSelf = (CClient *)pUserData;
|
||||||
if(pResult->NumArguments())
|
if(pResult->NumArguments())
|
||||||
pSelf->DemoRecorder_Start(pResult->GetString(0), false, RECORDER_MANUAL);
|
pSelf->DemoRecorder_Start(pResult->GetString(0), false, RECORDER_MANUAL, true);
|
||||||
else
|
else
|
||||||
pSelf->DemoRecorder_Start(pSelf->m_aCurrentMap, true, RECORDER_MANUAL);
|
pSelf->DemoRecorder_Start(pSelf->m_aCurrentMap, true, RECORDER_MANUAL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClient::Con_StopRecord(IConsole::IResult *pResult, void *pUserData)
|
void CClient::Con_StopRecord(IConsole::IResult *pResult, void *pUserData)
|
||||||
|
@ -4629,7 +4626,7 @@ int main(int argc, const char **argv)
|
||||||
pClient->GetGPUInfoString(aGPUInfo);
|
pClient->GetGPUInfoString(aGPUInfo);
|
||||||
char aMessage[768];
|
char aMessage[768];
|
||||||
str_format(aMessage, sizeof(aMessage),
|
str_format(aMessage, sizeof(aMessage),
|
||||||
"An assertion error occured. Please write down or take a screenshot of the following information and report this error.\n"
|
"An assertion error occurred. Please write down or take a screenshot of the following information and report this error.\n"
|
||||||
"Please also share the assert log which you should find in the 'dumps' folder in your config directory.\n\n"
|
"Please also share the assert log which you should find in the 'dumps' folder in your config directory.\n\n"
|
||||||
"%s\n\n"
|
"%s\n\n"
|
||||||
"Platform: %s\n"
|
"Platform: %s\n"
|
||||||
|
|
|
@ -164,9 +164,9 @@ class CClient : public IClient, public CDemoPlayer::IListener
|
||||||
int m_aCurrentRecvTick[NUM_DUMMIES];
|
int m_aCurrentRecvTick[NUM_DUMMIES];
|
||||||
int m_aRconAuthed[NUM_DUMMIES];
|
int m_aRconAuthed[NUM_DUMMIES];
|
||||||
char m_aRconUsername[32];
|
char m_aRconUsername[32];
|
||||||
char m_aRconPassword[32];
|
char m_aRconPassword[128];
|
||||||
int m_UseTempRconCommands;
|
int m_UseTempRconCommands;
|
||||||
char m_aPassword[32];
|
char m_aPassword[128];
|
||||||
bool m_SendPassword;
|
bool m_SendPassword;
|
||||||
bool m_ButtonRender = false;
|
bool m_ButtonRender = false;
|
||||||
|
|
||||||
|
@ -482,7 +482,7 @@ public:
|
||||||
void RegisterCommands();
|
void RegisterCommands();
|
||||||
|
|
||||||
const char *DemoPlayer_Play(const char *pFilename, int StorageType) override;
|
const char *DemoPlayer_Play(const char *pFilename, int StorageType) override;
|
||||||
void DemoRecorder_Start(const char *pFilename, bool WithTimestamp, int Recorder) override;
|
void DemoRecorder_Start(const char *pFilename, bool WithTimestamp, int Recorder, bool Verbose = false) override;
|
||||||
void DemoRecorder_HandleAutoStart() override;
|
void DemoRecorder_HandleAutoStart() override;
|
||||||
void DemoRecorder_StartReplayRecorder();
|
void DemoRecorder_StartReplayRecorder();
|
||||||
void DemoRecorder_Stop(int Recorder, bool RemoveFile = false) override;
|
void DemoRecorder_Stop(int Recorder, bool RemoveFile = false) override;
|
||||||
|
|
|
@ -305,27 +305,17 @@ int CGraphics_Threaded::UnloadTexture(CTextureHandle *pIndex)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ImageFormatToPixelSize(int Format)
|
static bool ConvertToRGBA(uint8_t *pDest, const uint8_t *pSrc, size_t SrcWidth, size_t SrcHeight, CImageInfo::EImageFormat SrcFormat)
|
||||||
{
|
|
||||||
switch(Format)
|
|
||||||
{
|
|
||||||
case CImageInfo::FORMAT_RGB: return 3;
|
|
||||||
case CImageInfo::FORMAT_SINGLE_COMPONENT: return 1;
|
|
||||||
default: return 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool ConvertToRGBA(uint8_t *pDest, const uint8_t *pSrc, size_t SrcWidth, size_t SrcHeight, int SrcFormat)
|
|
||||||
{
|
{
|
||||||
if(SrcFormat == CImageInfo::FORMAT_RGBA)
|
if(SrcFormat == CImageInfo::FORMAT_RGBA)
|
||||||
{
|
{
|
||||||
mem_copy(pDest, pSrc, SrcWidth * SrcHeight * 4);
|
mem_copy(pDest, pSrc, SrcWidth * SrcHeight * CImageInfo::PixelSize(CImageInfo::FORMAT_RGBA));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t SrcChannelCount = ImageFormatToPixelSize(SrcFormat);
|
const size_t SrcChannelCount = CImageInfo::PixelSize(SrcFormat);
|
||||||
size_t DstChannelCount = 4;
|
const size_t DstChannelCount = CImageInfo::PixelSize(CImageInfo::FORMAT_RGBA);
|
||||||
for(size_t Y = 0; Y < SrcHeight; ++Y)
|
for(size_t Y = 0; Y < SrcHeight; ++Y)
|
||||||
{
|
{
|
||||||
for(size_t X = 0; X < SrcWidth; ++X)
|
for(size_t X = 0; X < SrcWidth; ++X)
|
||||||
|
@ -333,12 +323,12 @@ static bool ConvertToRGBA(uint8_t *pDest, const uint8_t *pSrc, size_t SrcWidth,
|
||||||
size_t ImgOffsetSrc = (Y * SrcWidth * SrcChannelCount) + (X * SrcChannelCount);
|
size_t ImgOffsetSrc = (Y * SrcWidth * SrcChannelCount) + (X * SrcChannelCount);
|
||||||
size_t ImgOffsetDest = (Y * SrcWidth * DstChannelCount) + (X * DstChannelCount);
|
size_t ImgOffsetDest = (Y * SrcWidth * DstChannelCount) + (X * DstChannelCount);
|
||||||
size_t CopySize = SrcChannelCount;
|
size_t CopySize = SrcChannelCount;
|
||||||
if(SrcChannelCount == 3)
|
if(SrcFormat == CImageInfo::FORMAT_RGB)
|
||||||
{
|
{
|
||||||
mem_copy(&pDest[ImgOffsetDest], &pSrc[ImgOffsetSrc], CopySize);
|
mem_copy(&pDest[ImgOffsetDest], &pSrc[ImgOffsetSrc], CopySize);
|
||||||
pDest[ImgOffsetDest + 3] = 255;
|
pDest[ImgOffsetDest + 3] = 255;
|
||||||
}
|
}
|
||||||
else if(SrcChannelCount == 1)
|
else if(SrcFormat == CImageInfo::FORMAT_SINGLE_COMPONENT)
|
||||||
{
|
{
|
||||||
pDest[ImgOffsetDest + 0] = 255;
|
pDest[ImgOffsetDest + 0] = 255;
|
||||||
pDest[ImgOffsetDest + 1] = 255;
|
pDest[ImgOffsetDest + 1] = 255;
|
||||||
|
@ -351,7 +341,7 @@ static bool ConvertToRGBA(uint8_t *pDest, const uint8_t *pSrc, size_t SrcWidth,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int CGraphics_Threaded::LoadTextureRawSub(CTextureHandle TextureID, int x, int y, size_t Width, size_t Height, int Format, const void *pData)
|
int CGraphics_Threaded::LoadTextureRawSub(CTextureHandle TextureID, int x, int y, size_t Width, size_t Height, CImageInfo::EImageFormat Format, const void *pData)
|
||||||
{
|
{
|
||||||
dbg_assert(TextureID.IsValid(), "Invalid texture handle used with LoadTextureRawSub.");
|
dbg_assert(TextureID.IsValid(), "Invalid texture handle used with LoadTextureRawSub.");
|
||||||
|
|
||||||
|
@ -364,7 +354,7 @@ int CGraphics_Threaded::LoadTextureRawSub(CTextureHandle TextureID, int x, int y
|
||||||
Cmd.m_Format = CCommandBuffer::TEXFORMAT_RGBA;
|
Cmd.m_Format = CCommandBuffer::TEXFORMAT_RGBA;
|
||||||
|
|
||||||
// calculate memory usage
|
// calculate memory usage
|
||||||
const size_t MemSize = Width * Height * 4;
|
const size_t MemSize = Width * Height * CImageInfo::PixelSize(CImageInfo::FORMAT_RGBA);
|
||||||
|
|
||||||
// copy texture data
|
// copy texture data
|
||||||
void *pTmpData = malloc(MemSize);
|
void *pTmpData = malloc(MemSize);
|
||||||
|
@ -377,7 +367,7 @@ int CGraphics_Threaded::LoadTextureRawSub(CTextureHandle TextureID, int x, int y
|
||||||
|
|
||||||
IGraphics::CTextureHandle CGraphics_Threaded::LoadSpriteTextureImpl(CImageInfo &FromImageInfo, int x, int y, size_t w, size_t h)
|
IGraphics::CTextureHandle CGraphics_Threaded::LoadSpriteTextureImpl(CImageInfo &FromImageInfo, int x, int y, size_t w, size_t h)
|
||||||
{
|
{
|
||||||
const size_t PixelSize = ImageFormatToPixelSize(FromImageInfo.m_Format);
|
const size_t PixelSize = FromImageInfo.PixelSize();
|
||||||
m_vSpriteHelper.resize(w * h * PixelSize);
|
m_vSpriteHelper.resize(w * h * PixelSize);
|
||||||
CopyTextureFromTextureBufferSub(m_vSpriteHelper.data(), w, h, (uint8_t *)FromImageInfo.m_pData, FromImageInfo.m_Width, FromImageInfo.m_Height, PixelSize, x, y, w, h);
|
CopyTextureFromTextureBufferSub(m_vSpriteHelper.data(), w, h, (uint8_t *)FromImageInfo.m_pData, FromImageInfo.m_Width, FromImageInfo.m_Height, PixelSize, x, y, w, h);
|
||||||
return LoadTextureRaw(w, h, FromImageInfo.m_Format, m_vSpriteHelper.data(), FromImageInfo.m_Format, 0);
|
return LoadTextureRaw(w, h, FromImageInfo.m_Format, m_vSpriteHelper.data(), FromImageInfo.m_Format, 0);
|
||||||
|
@ -410,13 +400,13 @@ bool CGraphics_Threaded::IsImageSubFullyTransparent(CImageInfo &FromImageInfo, i
|
||||||
if(FromImageInfo.m_Format == CImageInfo::FORMAT_SINGLE_COMPONENT || FromImageInfo.m_Format == CImageInfo::FORMAT_RGBA)
|
if(FromImageInfo.m_Format == CImageInfo::FORMAT_SINGLE_COMPONENT || FromImageInfo.m_Format == CImageInfo::FORMAT_RGBA)
|
||||||
{
|
{
|
||||||
uint8_t *pImgData = (uint8_t *)FromImageInfo.m_pData;
|
uint8_t *pImgData = (uint8_t *)FromImageInfo.m_pData;
|
||||||
int bpp = ImageFormatToPixelSize(FromImageInfo.m_Format);
|
const size_t PixelSize = FromImageInfo.PixelSize();
|
||||||
for(int iy = 0; iy < h; ++iy)
|
for(int iy = 0; iy < h; ++iy)
|
||||||
{
|
{
|
||||||
for(int ix = 0; ix < w; ++ix)
|
for(int ix = 0; ix < w; ++ix)
|
||||||
{
|
{
|
||||||
int RealOffset = (x + ix) * bpp + (y + iy) * bpp * FromImageInfo.m_Width;
|
const size_t RealOffset = (x + ix) * PixelSize + (y + iy) * PixelSize * FromImageInfo.m_Width;
|
||||||
if(pImgData[RealOffset + (bpp - 1)] > 0)
|
if(pImgData[RealOffset + (PixelSize - 1)] > 0)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -438,7 +428,7 @@ bool CGraphics_Threaded::IsSpriteTextureFullyTransparent(CImageInfo &FromImageIn
|
||||||
return IsImageSubFullyTransparent(FromImageInfo, x, y, w, h);
|
return IsImageSubFullyTransparent(FromImageInfo, x, y, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
IGraphics::CTextureHandle CGraphics_Threaded::LoadTextureRaw(size_t Width, size_t Height, int Format, const void *pData, int StoreFormat, int Flags, const char *pTexName)
|
IGraphics::CTextureHandle CGraphics_Threaded::LoadTextureRaw(size_t Width, size_t Height, CImageInfo::EImageFormat Format, const void *pData, int Flags, const char *pTexName)
|
||||||
{
|
{
|
||||||
// don't waste memory on texture if we are stress testing
|
// don't waste memory on texture if we are stress testing
|
||||||
#ifdef CONF_DEBUG
|
#ifdef CONF_DEBUG
|
||||||
|
@ -472,7 +462,6 @@ IGraphics::CTextureHandle CGraphics_Threaded::LoadTextureRaw(size_t Width, size_
|
||||||
Cmd.m_Slot = TextureHandle.Id();
|
Cmd.m_Slot = TextureHandle.Id();
|
||||||
Cmd.m_Width = Width;
|
Cmd.m_Width = Width;
|
||||||
Cmd.m_Height = Height;
|
Cmd.m_Height = Height;
|
||||||
Cmd.m_PixelSize = 4;
|
|
||||||
Cmd.m_Format = CCommandBuffer::TEXFORMAT_RGBA;
|
Cmd.m_Format = CCommandBuffer::TEXFORMAT_RGBA;
|
||||||
Cmd.m_StoreFormat = CCommandBuffer::TEXFORMAT_RGBA;
|
Cmd.m_StoreFormat = CCommandBuffer::TEXFORMAT_RGBA;
|
||||||
|
|
||||||
|
@ -492,7 +481,7 @@ IGraphics::CTextureHandle CGraphics_Threaded::LoadTextureRaw(size_t Width, size_
|
||||||
Cmd.m_Flags |= CCommandBuffer::TEXFLAG_NO_2D_TEXTURE;
|
Cmd.m_Flags |= CCommandBuffer::TEXFLAG_NO_2D_TEXTURE;
|
||||||
|
|
||||||
// copy texture data
|
// copy texture data
|
||||||
const size_t MemSize = Width * Height * Cmd.m_PixelSize;
|
const size_t MemSize = Width * Height * CImageInfo::PixelSize(CImageInfo::FORMAT_RGBA);
|
||||||
void *pTmpData = malloc(MemSize);
|
void *pTmpData = malloc(MemSize);
|
||||||
if(!ConvertToRGBA((uint8_t *)pTmpData, (const uint8_t *)pData, Width, Height, Format))
|
if(!ConvertToRGBA((uint8_t *)pTmpData, (const uint8_t *)pData, Width, Height, Format))
|
||||||
{
|
{
|
||||||
|
@ -505,17 +494,14 @@ IGraphics::CTextureHandle CGraphics_Threaded::LoadTextureRaw(size_t Width, size_
|
||||||
}
|
}
|
||||||
|
|
||||||
// simple uncompressed RGBA loaders
|
// simple uncompressed RGBA loaders
|
||||||
IGraphics::CTextureHandle CGraphics_Threaded::LoadTexture(const char *pFilename, int StorageType, int StoreFormat, int Flags)
|
IGraphics::CTextureHandle CGraphics_Threaded::LoadTexture(const char *pFilename, int StorageType, int Flags)
|
||||||
{
|
{
|
||||||
dbg_assert(pFilename[0] != '\0', "Cannot load texture from file with empty filename"); // would cause Valgrind to crash otherwise
|
dbg_assert(pFilename[0] != '\0', "Cannot load texture from file with empty filename"); // would cause Valgrind to crash otherwise
|
||||||
|
|
||||||
CImageInfo Img;
|
CImageInfo Img;
|
||||||
if(LoadPNG(&Img, pFilename, StorageType))
|
if(LoadPNG(&Img, pFilename, StorageType))
|
||||||
{
|
{
|
||||||
if(StoreFormat == CImageInfo::FORMAT_AUTO)
|
IGraphics::CTextureHandle ID = LoadTextureRaw(Img.m_Width, Img.m_Height, Img.m_Format, Img.m_pData, Flags, pFilename);
|
||||||
StoreFormat = Img.m_Format;
|
|
||||||
|
|
||||||
IGraphics::CTextureHandle ID = LoadTextureRaw(Img.m_Width, Img.m_Height, Img.m_Format, Img.m_pData, StoreFormat, Flags, pFilename);
|
|
||||||
free(Img.m_pData);
|
free(Img.m_pData);
|
||||||
if(ID.Id() != m_InvalidTexture.Id() && g_Config.m_Debug)
|
if(ID.Id() != m_InvalidTexture.Id() && g_Config.m_Debug)
|
||||||
dbg_msg("graphics/texture", "loaded %s", pFilename);
|
dbg_msg("graphics/texture", "loaded %s", pFilename);
|
||||||
|
@ -696,15 +682,7 @@ bool CGraphics_Threaded::CheckImageDivisibility(const char *pFileName, CImageInf
|
||||||
NewWidth = (NewHeight / DivY) * DivX;
|
NewWidth = (NewHeight / DivY) * DivX;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ColorChannelCount = 4;
|
uint8_t *pNewImg = ResizeImage((uint8_t *)Img.m_pData, Img.m_Width, Img.m_Height, NewWidth, NewHeight, Img.PixelSize());
|
||||||
if(Img.m_Format == CImageInfo::FORMAT_SINGLE_COMPONENT)
|
|
||||||
ColorChannelCount = 1;
|
|
||||||
else if(Img.m_Format == CImageInfo::FORMAT_RGB)
|
|
||||||
ColorChannelCount = 3;
|
|
||||||
else if(Img.m_Format == CImageInfo::FORMAT_RGBA)
|
|
||||||
ColorChannelCount = 4;
|
|
||||||
|
|
||||||
uint8_t *pNewImg = ResizeImage((uint8_t *)Img.m_pData, Img.m_Width, Img.m_Height, NewWidth, NewHeight, ColorChannelCount);
|
|
||||||
free(Img.m_pData);
|
free(Img.m_pData);
|
||||||
Img.m_pData = pNewImg;
|
Img.m_pData = pNewImg;
|
||||||
Img.m_Width = NewWidth;
|
Img.m_Width = NewWidth;
|
||||||
|
@ -734,23 +712,23 @@ bool CGraphics_Threaded::IsImageFormatRGBA(const char *pFileName, CImageInfo &Im
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGraphics_Threaded::CopyTextureBufferSub(uint8_t *pDestBuffer, uint8_t *pSourceBuffer, size_t FullWidth, size_t FullHeight, size_t ColorChannelCount, size_t SubOffsetX, size_t SubOffsetY, size_t SubCopyWidth, size_t SubCopyHeight)
|
void CGraphics_Threaded::CopyTextureBufferSub(uint8_t *pDestBuffer, uint8_t *pSourceBuffer, size_t FullWidth, size_t FullHeight, size_t PixelSize, size_t SubOffsetX, size_t SubOffsetY, size_t SubCopyWidth, size_t SubCopyHeight)
|
||||||
{
|
{
|
||||||
for(size_t Y = 0; Y < SubCopyHeight; ++Y)
|
for(size_t Y = 0; Y < SubCopyHeight; ++Y)
|
||||||
{
|
{
|
||||||
const size_t ImgOffset = ((SubOffsetY + Y) * FullWidth * ColorChannelCount) + (SubOffsetX * ColorChannelCount);
|
const size_t ImgOffset = ((SubOffsetY + Y) * FullWidth * PixelSize) + (SubOffsetX * PixelSize);
|
||||||
const size_t CopySize = SubCopyWidth * ColorChannelCount;
|
const size_t CopySize = SubCopyWidth * PixelSize;
|
||||||
mem_copy(&pDestBuffer[ImgOffset], &pSourceBuffer[ImgOffset], CopySize);
|
mem_copy(&pDestBuffer[ImgOffset], &pSourceBuffer[ImgOffset], CopySize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGraphics_Threaded::CopyTextureFromTextureBufferSub(uint8_t *pDestBuffer, size_t DestWidth, size_t DestHeight, uint8_t *pSourceBuffer, size_t SrcWidth, size_t SrcHeight, size_t ColorChannelCount, size_t SrcSubOffsetX, size_t SrcSubOffsetY, size_t SrcSubCopyWidth, size_t SrcSubCopyHeight)
|
void CGraphics_Threaded::CopyTextureFromTextureBufferSub(uint8_t *pDestBuffer, size_t DestWidth, size_t DestHeight, uint8_t *pSourceBuffer, size_t SrcWidth, size_t SrcHeight, size_t PixelSize, size_t SrcSubOffsetX, size_t SrcSubOffsetY, size_t SrcSubCopyWidth, size_t SrcSubCopyHeight)
|
||||||
{
|
{
|
||||||
for(size_t Y = 0; Y < SrcSubCopyHeight; ++Y)
|
for(size_t Y = 0; Y < SrcSubCopyHeight; ++Y)
|
||||||
{
|
{
|
||||||
const size_t SrcImgOffset = ((SrcSubOffsetY + Y) * SrcWidth * ColorChannelCount) + (SrcSubOffsetX * ColorChannelCount);
|
const size_t SrcImgOffset = ((SrcSubOffsetY + Y) * SrcWidth * PixelSize) + (SrcSubOffsetX * PixelSize);
|
||||||
const size_t DstImgOffset = (Y * DestWidth * ColorChannelCount);
|
const size_t DstImgOffset = (Y * DestWidth * PixelSize);
|
||||||
const size_t CopySize = SrcSubCopyWidth * ColorChannelCount;
|
const size_t CopySize = SrcSubCopyWidth * PixelSize;
|
||||||
mem_copy(&pDestBuffer[DstImgOffset], &pSourceBuffer[SrcImgOffset], CopySize);
|
mem_copy(&pDestBuffer[DstImgOffset], &pSourceBuffer[SrcImgOffset], CopySize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2671,7 +2649,7 @@ int CGraphics_Threaded::Init()
|
||||||
}
|
}
|
||||||
const int TextureLoadFlags = HasTextureArrays() ? IGraphics::TEXLOAD_TO_2D_ARRAY_TEXTURE : IGraphics::TEXLOAD_TO_3D_TEXTURE;
|
const int TextureLoadFlags = HasTextureArrays() ? IGraphics::TEXLOAD_TO_2D_ARRAY_TEXTURE : IGraphics::TEXLOAD_TO_3D_TEXTURE;
|
||||||
m_InvalidTexture.Invalidate();
|
m_InvalidTexture.Invalidate();
|
||||||
m_InvalidTexture = LoadTextureRaw(InvalidTextureDimension, InvalidTextureDimension, CImageInfo::FORMAT_RGBA, aNullTextureData, CImageInfo::FORMAT_RGBA, TextureLoadFlags);
|
m_InvalidTexture = LoadTextureRaw(InvalidTextureDimension, InvalidTextureDimension, CImageInfo::FORMAT_RGBA, aNullTextureData, TextureLoadFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
ColorRGBA GPUInfoPrintColor{0.6f, 0.5f, 1.0f, 1.0f};
|
ColorRGBA GPUInfoPrintColor{0.6f, 0.5f, 1.0f, 1.0f};
|
||||||
|
@ -2939,12 +2917,6 @@ void CGraphics_Threaded::Swap()
|
||||||
AddCmd(Cmd);
|
AddCmd(Cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(g_Config.m_GfxFinish)
|
|
||||||
{
|
|
||||||
CCommandBuffer::SCommand_Finish Cmd;
|
|
||||||
AddCmd(Cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
// kick the command buffer
|
// kick the command buffer
|
||||||
KickCommandBuffer();
|
KickCommandBuffer();
|
||||||
// TODO: Remove when https://github.com/libsdl-org/SDL/issues/5203 is fixed
|
// TODO: Remove when https://github.com/libsdl-org/SDL/issues/5203 is fixed
|
||||||
|
|
|
@ -126,7 +126,6 @@ public:
|
||||||
|
|
||||||
// swap
|
// swap
|
||||||
CMD_SWAP,
|
CMD_SWAP,
|
||||||
CMD_FINISH,
|
|
||||||
|
|
||||||
// misc
|
// misc
|
||||||
CMD_MULTISAMPLING,
|
CMD_MULTISAMPLING,
|
||||||
|
@ -495,12 +494,6 @@ public:
|
||||||
SCommand(CMD_SWAP) {}
|
SCommand(CMD_SWAP) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SCommand_Finish : public SCommand
|
|
||||||
{
|
|
||||||
SCommand_Finish() :
|
|
||||||
SCommand(CMD_FINISH) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SCommand_VSync : public SCommand
|
struct SCommand_VSync : public SCommand
|
||||||
{
|
{
|
||||||
SCommand_VSync() :
|
SCommand_VSync() :
|
||||||
|
@ -542,7 +535,6 @@ public:
|
||||||
|
|
||||||
size_t m_Width;
|
size_t m_Width;
|
||||||
size_t m_Height;
|
size_t m_Height;
|
||||||
int m_PixelSize;
|
|
||||||
int m_Format;
|
int m_Format;
|
||||||
int m_StoreFormat;
|
int m_StoreFormat;
|
||||||
int m_Flags;
|
int m_Flags;
|
||||||
|
@ -974,8 +966,8 @@ public:
|
||||||
IGraphics::CTextureHandle FindFreeTextureIndex();
|
IGraphics::CTextureHandle FindFreeTextureIndex();
|
||||||
void FreeTextureIndex(CTextureHandle *pIndex);
|
void FreeTextureIndex(CTextureHandle *pIndex);
|
||||||
int UnloadTexture(IGraphics::CTextureHandle *pIndex) override;
|
int UnloadTexture(IGraphics::CTextureHandle *pIndex) override;
|
||||||
IGraphics::CTextureHandle LoadTextureRaw(size_t Width, size_t Height, int Format, const void *pData, int StoreFormat, int Flags, const char *pTexName = NULL) override;
|
IGraphics::CTextureHandle LoadTextureRaw(size_t Width, size_t Height, CImageInfo::EImageFormat Format, const void *pData, int Flags, const char *pTexName = nullptr) override;
|
||||||
int LoadTextureRawSub(IGraphics::CTextureHandle TextureID, int x, int y, size_t Width, size_t Height, int Format, const void *pData) override;
|
int LoadTextureRawSub(IGraphics::CTextureHandle TextureID, int x, int y, size_t Width, size_t Height, CImageInfo::EImageFormat Format, const void *pData) override;
|
||||||
IGraphics::CTextureHandle InvalidTexture() const override;
|
IGraphics::CTextureHandle InvalidTexture() const override;
|
||||||
|
|
||||||
bool LoadTextTextures(size_t Width, size_t Height, CTextureHandle &TextTexture, CTextureHandle &TextOutlineTexture, void *pTextData, void *pTextOutlineData) override;
|
bool LoadTextTextures(size_t Width, size_t Height, CTextureHandle &TextTexture, CTextureHandle &TextOutlineTexture, void *pTextData, void *pTextOutlineData) override;
|
||||||
|
@ -990,15 +982,15 @@ public:
|
||||||
bool IsSpriteTextureFullyTransparent(CImageInfo &FromImageInfo, struct client_data7::CDataSprite *pSprite) override;
|
bool IsSpriteTextureFullyTransparent(CImageInfo &FromImageInfo, struct client_data7::CDataSprite *pSprite) override;
|
||||||
|
|
||||||
// simple uncompressed RGBA loaders
|
// simple uncompressed RGBA loaders
|
||||||
IGraphics::CTextureHandle LoadTexture(const char *pFilename, int StorageType, int StoreFormat, int Flags) override;
|
IGraphics::CTextureHandle LoadTexture(const char *pFilename, int StorageType, int Flags = 0) override;
|
||||||
int LoadPNG(CImageInfo *pImg, const char *pFilename, int StorageType) override;
|
int LoadPNG(CImageInfo *pImg, const char *pFilename, int StorageType) override;
|
||||||
void FreePNG(CImageInfo *pImg) override;
|
void FreePNG(CImageInfo *pImg) override;
|
||||||
|
|
||||||
bool CheckImageDivisibility(const char *pFileName, CImageInfo &Img, int DivX, int DivY, bool AllowResize) override;
|
bool CheckImageDivisibility(const char *pFileName, CImageInfo &Img, int DivX, int DivY, bool AllowResize) override;
|
||||||
bool IsImageFormatRGBA(const char *pFileName, CImageInfo &Img) override;
|
bool IsImageFormatRGBA(const char *pFileName, CImageInfo &Img) override;
|
||||||
|
|
||||||
void CopyTextureBufferSub(uint8_t *pDestBuffer, uint8_t *pSourceBuffer, size_t FullWidth, size_t FullHeight, size_t ColorChannelCount, size_t SubOffsetX, size_t SubOffsetY, size_t SubCopyWidth, size_t SubCopyHeight) override;
|
void CopyTextureBufferSub(uint8_t *pDestBuffer, uint8_t *pSourceBuffer, size_t FullWidth, size_t FullHeight, size_t PixelSize, size_t SubOffsetX, size_t SubOffsetY, size_t SubCopyWidth, size_t SubCopyHeight) override;
|
||||||
void CopyTextureFromTextureBufferSub(uint8_t *pDestBuffer, size_t DestWidth, size_t DestHeight, uint8_t *pSourceBuffer, size_t SrcWidth, size_t SrcHeight, size_t ColorChannelCount, size_t SrcSubOffsetX, size_t SrcSubOffsetY, size_t SrcSubCopyWidth, size_t SrcSubCopyHeight) override;
|
void CopyTextureFromTextureBufferSub(uint8_t *pDestBuffer, size_t DestWidth, size_t DestHeight, uint8_t *pSourceBuffer, size_t SrcWidth, size_t SrcHeight, size_t PixelSize, size_t SrcSubOffsetX, size_t SrcSubOffsetY, size_t SrcSubCopyWidth, size_t SrcSubCopyHeight) override;
|
||||||
|
|
||||||
bool ScreenshotDirect();
|
bool ScreenshotDirect();
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ class CAtlas
|
||||||
/**
|
/**
|
||||||
* Sections with a smaller width or height will not be created
|
* Sections with a smaller width or height will not be created
|
||||||
* when cutting larger sections, to prevent collecting many
|
* when cutting larger sections, to prevent collecting many
|
||||||
* small, mostly unuseable sections.
|
* small, mostly unusable sections.
|
||||||
*/
|
*/
|
||||||
static constexpr size_t MIN_SECTION_DIMENSION = 6;
|
static constexpr size_t MIN_SECTION_DIMENSION = 6;
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't iterate sections in the map with increasing width and height at the same time,
|
// We don't iterate sections in the map with increasing width and height at the same time,
|
||||||
// because it's slower and doesn't noticable increase the atlas utilization.
|
// because it's slower and doesn't noticeable increase the atlas utilization.
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check vector for larger section
|
// Check vector for larger section
|
||||||
|
@ -261,7 +261,7 @@ public:
|
||||||
}
|
}
|
||||||
} while(SectionIndex > 0);
|
} while(SectionIndex > 0);
|
||||||
if(SmallestLossIndex == m_vSections.size())
|
if(SmallestLossIndex == m_vSections.size())
|
||||||
return false; // No useable section found in vector
|
return false; // No usable section found in vector
|
||||||
|
|
||||||
// Use the section with the smallest loss
|
// Use the section with the smallest loss
|
||||||
const SSection Section = m_vSections[SmallestLossIndex];
|
const SSection Section = m_vSections[SmallestLossIndex];
|
||||||
|
@ -729,7 +729,7 @@ public:
|
||||||
return vec2(0.0f, 0.0f);
|
return vec2(0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UploadEntityLayerText(void *pTexBuff, size_t ImageColorChannelCount, int TexWidth, int TexHeight, int TexSubWidth, int TexSubHeight, const char *pText, int Length, float x, float y, int FontSize)
|
void UploadEntityLayerText(void *pTexBuff, size_t PixelSize, size_t TexWidth, size_t TexHeight, int TexSubWidth, int TexSubHeight, const char *pText, int Length, float x, float y, int FontSize)
|
||||||
{
|
{
|
||||||
if(FontSize < 1)
|
if(FontSize < 1)
|
||||||
return;
|
return;
|
||||||
|
@ -777,11 +777,11 @@ public:
|
||||||
{
|
{
|
||||||
const int ImgOffX = clamp(x + OffX + WidthLastChars, x, (x + TexSubWidth) - 1);
|
const int ImgOffX = clamp(x + OffX + WidthLastChars, x, (x + TexSubWidth) - 1);
|
||||||
const int ImgOffY = clamp(y + OffY, y, (y + TexSubHeight) - 1);
|
const int ImgOffY = clamp(y + OffY, y, (y + TexSubHeight) - 1);
|
||||||
const size_t ImageOffset = ImgOffY * (TexWidth * ImageColorChannelCount) + ImgOffX * ImageColorChannelCount;
|
const size_t ImageOffset = ImgOffY * (TexWidth * PixelSize) + ImgOffX * PixelSize;
|
||||||
const size_t GlyphOffset = OffY * pBitmap->width + OffX;
|
const size_t GlyphOffset = OffY * pBitmap->width + OffX;
|
||||||
for(size_t i = 0; i < ImageColorChannelCount; ++i)
|
for(size_t i = 0; i < PixelSize; ++i)
|
||||||
{
|
{
|
||||||
if(i != ImageColorChannelCount - 1)
|
if(i != PixelSize - 1)
|
||||||
{
|
{
|
||||||
*(pImageBuff + ImageOffset + i) = 255;
|
*(pImageBuff + ImageOffset + i) = 255;
|
||||||
}
|
}
|
||||||
|
@ -1574,7 +1574,11 @@ public:
|
||||||
float LastCharX = DrawX;
|
float LastCharX = DrawX;
|
||||||
float LastCharWidth = 0;
|
float LastCharWidth = 0;
|
||||||
|
|
||||||
|
// Returns true if line was started
|
||||||
const auto &&StartNewLine = [&]() {
|
const auto &&StartNewLine = [&]() {
|
||||||
|
if(pCursor->m_MaxLines > 0 && LineCount >= pCursor->m_MaxLines)
|
||||||
|
return false;
|
||||||
|
|
||||||
DrawX = pCursor->m_StartX;
|
DrawX = pCursor->m_StartX;
|
||||||
DrawY += pCursor->m_AlignedFontSize;
|
DrawY += pCursor->m_AlignedFontSize;
|
||||||
if((RenderFlags & TEXT_RENDER_FLAG_NO_PIXEL_ALIGMENT) == 0)
|
if((RenderFlags & TEXT_RENDER_FLAG_NO_PIXEL_ALIGMENT) == 0)
|
||||||
|
@ -1587,6 +1591,7 @@ public:
|
||||||
LastCharX = DrawX;
|
LastCharX = DrawX;
|
||||||
LastCharWidth = 0;
|
LastCharWidth = 0;
|
||||||
++LineCount;
|
++LineCount;
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
if(pCursor->m_CalculateSelectionMode != TEXT_CURSOR_SELECTION_MODE_NONE || pCursor->m_CursorMode != TEXT_CURSOR_CURSOR_MODE_NONE)
|
if(pCursor->m_CalculateSelectionMode != TEXT_CURSOR_SELECTION_MODE_NONE || pCursor->m_CursorMode != TEXT_CURSOR_CURSOR_MODE_NONE)
|
||||||
|
@ -1606,7 +1611,7 @@ public:
|
||||||
bool GotNewLine = false;
|
bool GotNewLine = false;
|
||||||
bool GotNewLineLast = false;
|
bool GotNewLineLast = false;
|
||||||
|
|
||||||
while(pCurrent < pEnd && (pCursor->m_MaxLines < 1 || LineCount <= pCursor->m_MaxLines) && pCurrent != pEllipsis)
|
while(pCurrent < pEnd && pCurrent != pEllipsis)
|
||||||
{
|
{
|
||||||
bool NewLine = false;
|
bool NewLine = false;
|
||||||
const char *pBatchEnd = pEnd;
|
const char *pBatchEnd = pEnd;
|
||||||
|
@ -1667,8 +1672,7 @@ public:
|
||||||
if((pCursor->m_Flags & TEXTFLAG_DISALLOW_NEWLINE) == 0)
|
if((pCursor->m_Flags & TEXTFLAG_DISALLOW_NEWLINE) == 0)
|
||||||
{
|
{
|
||||||
pLastGlyph = nullptr;
|
pLastGlyph = nullptr;
|
||||||
StartNewLine();
|
if(!StartNewLine())
|
||||||
if(pCursor->m_MaxLines > 0 && LineCount > pCursor->m_MaxLines)
|
|
||||||
break;
|
break;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1859,7 +1863,8 @@ public:
|
||||||
|
|
||||||
if(NewLine)
|
if(NewLine)
|
||||||
{
|
{
|
||||||
StartNewLine();
|
if(!StartNewLine())
|
||||||
|
break;
|
||||||
GotNewLine = true;
|
GotNewLine = true;
|
||||||
GotNewLineLast = true;
|
GotNewLineLast = true;
|
||||||
}
|
}
|
||||||
|
@ -2139,9 +2144,9 @@ public:
|
||||||
return TextContainer.m_BoundingBox;
|
return TextContainer.m_BoundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UploadEntityLayerText(void *pTexBuff, size_t ImageColorChannelCount, int TexWidth, int TexHeight, int TexSubWidth, int TexSubHeight, const char *pText, int Length, float x, float y, int FontSize) override
|
void UploadEntityLayerText(void *pTexBuff, size_t PixelSize, size_t TexWidth, size_t TexHeight, int TexSubWidth, int TexSubHeight, const char *pText, int Length, float x, float y, int FontSize) override
|
||||||
{
|
{
|
||||||
m_pGlyphMap->UploadEntityLayerText(pTexBuff, ImageColorChannelCount, TexWidth, TexHeight, TexSubWidth, TexSubHeight, pText, Length, x, y, FontSize);
|
m_pGlyphMap->UploadEntityLayerText(pTexBuff, PixelSize, TexWidth, TexHeight, TexSubWidth, TexSubHeight, pText, Length, x, y, FontSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
int AdjustFontSize(const char *pText, int TextLength, int MaxSize, int MaxWidth) const override
|
int AdjustFontSize(const char *pText, int TextLength, int MaxSize, int MaxWidth) const override
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
#include <engine/shared/json.h>
|
#include <engine/shared/json.h>
|
||||||
#include <engine/storage.h>
|
#include <engine/storage.h>
|
||||||
|
|
||||||
|
#include <game/version.h>
|
||||||
|
|
||||||
#include <cstdlib> // system
|
#include <cstdlib> // system
|
||||||
|
|
||||||
using std::map;
|
using std::map;
|
||||||
|
|
|
@ -585,7 +585,7 @@ void CVideo::ReadRGBFromGL(size_t ThreadIndex)
|
||||||
{
|
{
|
||||||
uint32_t Width;
|
uint32_t Width;
|
||||||
uint32_t Height;
|
uint32_t Height;
|
||||||
uint32_t Format;
|
CImageInfo::EImageFormat Format;
|
||||||
m_pGraphics->GetReadPresentedImageDataFuncUnsafe()(Width, Height, Format, m_vPixelHelper[ThreadIndex]);
|
m_pGraphics->GetReadPresentedImageDataFuncUnsafe()(Width, Height, Format, m_vPixelHelper[ThreadIndex]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -512,7 +512,7 @@ mod ffi {
|
||||||
/// Used as a last parameter in [`IConsole::Print`].
|
/// Used as a last parameter in [`IConsole::Print`].
|
||||||
///
|
///
|
||||||
/// It is treated as "no color" in the console code, meaning that the default
|
/// It is treated as "no color" in the console code, meaning that the default
|
||||||
/// color of the output medium isn't overriden.
|
/// color of the output medium isn't overridden.
|
||||||
#[allow(non_upper_case_globals)]
|
#[allow(non_upper_case_globals)]
|
||||||
pub const gs_ConsoleDefaultColor: ColorRGBA = ColorRGBA {
|
pub const gs_ConsoleDefaultColor: ColorRGBA = ColorRGBA {
|
||||||
r: 1.0,
|
r: 1.0,
|
||||||
|
|
|
@ -15,6 +15,7 @@ public:
|
||||||
virtual void OnActivate() = 0;
|
virtual void OnActivate() = 0;
|
||||||
virtual void OnWindowResize() = 0;
|
virtual void OnWindowResize() = 0;
|
||||||
virtual bool HasUnsavedData() const = 0;
|
virtual bool HasUnsavedData() const = 0;
|
||||||
|
virtual bool HandleMapDrop(const char *pFilename, int StorageType) = 0;
|
||||||
virtual bool Load(const char *pFilename, int StorageType) = 0;
|
virtual bool Load(const char *pFilename, int StorageType) = 0;
|
||||||
virtual bool Save(const char *pFilename) = 0;
|
virtual bool Save(const char *pFilename) = 0;
|
||||||
virtual void UpdateMentions() = 0;
|
virtual void UpdateMentions() = 0;
|
||||||
|
|
|
@ -17,14 +17,14 @@ struct SLibPNGWarningItem
|
||||||
{
|
{
|
||||||
SLibPNGWarningItem *pUserStruct = (SLibPNGWarningItem *)png_get_error_ptr(png_ptr);
|
SLibPNGWarningItem *pUserStruct = (SLibPNGWarningItem *)png_get_error_ptr(png_ptr);
|
||||||
pUserStruct->m_pByteLoader->m_Err = -1;
|
pUserStruct->m_pByteLoader->m_Err = -1;
|
||||||
dbg_msg("libpng", "error for file \"%s\": %s", pUserStruct->m_pFileName, error_msg);
|
dbg_msg("png", "error for file \"%s\": %s", pUserStruct->m_pFileName, error_msg);
|
||||||
std::longjmp(pUserStruct->m_Buf, 1);
|
std::longjmp(pUserStruct->m_Buf, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LibPNGWarning(png_structp png_ptr, png_const_charp warning_msg)
|
static void LibPNGWarning(png_structp png_ptr, png_const_charp warning_msg)
|
||||||
{
|
{
|
||||||
SLibPNGWarningItem *pUserStruct = (SLibPNGWarningItem *)png_get_error_ptr(png_ptr);
|
SLibPNGWarningItem *pUserStruct = (SLibPNGWarningItem *)png_get_error_ptr(png_ptr);
|
||||||
dbg_msg("libpng", "warning for file \"%s\": %s", pUserStruct->m_pFileName, warning_msg);
|
dbg_msg("png", "warning for file \"%s\": %s", pUserStruct->m_pFileName, warning_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool FileMatchesImageType(SImageByteBuffer &ByteLoader)
|
static bool FileMatchesImageType(SImageByteBuffer &ByteLoader)
|
||||||
|
@ -80,7 +80,7 @@ static void LibPNGDeleteReadStruct(png_structp pPNGStruct, png_infop pPNGInfo)
|
||||||
{
|
{
|
||||||
if(pPNGInfo != nullptr)
|
if(pPNGInfo != nullptr)
|
||||||
png_destroy_info_struct(pPNGStruct, &pPNGInfo);
|
png_destroy_info_struct(pPNGStruct, &pPNGInfo);
|
||||||
png_destroy_read_struct(&pPNGStruct, NULL, NULL);
|
png_destroy_read_struct(&pPNGStruct, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int PngliteIncompatibility(png_structp pPNGStruct, png_infop pPNGInfo)
|
static int PngliteIncompatibility(png_structp pPNGStruct, png_infop pPNGInfo)
|
||||||
|
@ -131,23 +131,19 @@ static int PngliteIncompatibility(png_structp pPNGStruct, png_infop pPNGInfo)
|
||||||
|
|
||||||
bool LoadPNG(SImageByteBuffer &ByteLoader, const char *pFileName, int &PngliteIncompatible, int &Width, int &Height, uint8_t *&pImageBuff, EImageFormat &ImageFormat)
|
bool LoadPNG(SImageByteBuffer &ByteLoader, const char *pFileName, int &PngliteIncompatible, int &Width, int &Height, uint8_t *&pImageBuff, EImageFormat &ImageFormat)
|
||||||
{
|
{
|
||||||
png_infop pPNGInfo = nullptr;
|
|
||||||
int ColorType;
|
|
||||||
png_byte BitDepth;
|
|
||||||
int ColorChannelCount;
|
|
||||||
int BytesInRow;
|
|
||||||
Height = 0;
|
|
||||||
png_bytepp pRowPointers = nullptr;
|
|
||||||
SLibPNGWarningItem UserErrorStruct = {&ByteLoader, pFileName, {}};
|
SLibPNGWarningItem UserErrorStruct = {&ByteLoader, pFileName, {}};
|
||||||
|
|
||||||
png_structp pPNGStruct = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
png_structp pPNGStruct = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
|
||||||
|
|
||||||
if(pPNGStruct == NULL)
|
if(pPNGStruct == nullptr)
|
||||||
{
|
{
|
||||||
dbg_msg("png", "libpng internal failure: png_create_read_struct failed.");
|
dbg_msg("png", "libpng internal failure: png_create_read_struct failed.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
png_infop pPNGInfo = nullptr;
|
||||||
|
png_bytepp pRowPointers = nullptr;
|
||||||
|
Height = 0; // ensure this is not undefined for the error handler
|
||||||
if(setjmp(UserErrorStruct.m_Buf))
|
if(setjmp(UserErrorStruct.m_Buf))
|
||||||
{
|
{
|
||||||
if(pRowPointers != nullptr)
|
if(pRowPointers != nullptr)
|
||||||
|
@ -165,9 +161,9 @@ bool LoadPNG(SImageByteBuffer &ByteLoader, const char *pFileName, int &PngliteIn
|
||||||
|
|
||||||
pPNGInfo = png_create_info_struct(pPNGStruct);
|
pPNGInfo = png_create_info_struct(pPNGStruct);
|
||||||
|
|
||||||
if(pPNGInfo == NULL)
|
if(pPNGInfo == nullptr)
|
||||||
{
|
{
|
||||||
png_destroy_read_struct(&pPNGStruct, NULL, NULL);
|
png_destroy_read_struct(&pPNGStruct, nullptr, nullptr);
|
||||||
dbg_msg("png", "libpng internal failure: png_create_info_struct failed.");
|
dbg_msg("png", "libpng internal failure: png_create_info_struct failed.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -175,6 +171,7 @@ bool LoadPNG(SImageByteBuffer &ByteLoader, const char *pFileName, int &PngliteIn
|
||||||
if(!FileMatchesImageType(ByteLoader))
|
if(!FileMatchesImageType(ByteLoader))
|
||||||
{
|
{
|
||||||
LibPNGDeleteReadStruct(pPNGStruct, pPNGInfo);
|
LibPNGDeleteReadStruct(pPNGStruct, pPNGInfo);
|
||||||
|
dbg_msg("png", "file does not match image type.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,13 +186,14 @@ bool LoadPNG(SImageByteBuffer &ByteLoader, const char *pFileName, int &PngliteIn
|
||||||
if(ByteLoader.m_Err != 0)
|
if(ByteLoader.m_Err != 0)
|
||||||
{
|
{
|
||||||
LibPNGDeleteReadStruct(pPNGStruct, pPNGInfo);
|
LibPNGDeleteReadStruct(pPNGStruct, pPNGInfo);
|
||||||
|
dbg_msg("png", "byte loader error.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Width = png_get_image_width(pPNGStruct, pPNGInfo);
|
Width = png_get_image_width(pPNGStruct, pPNGInfo);
|
||||||
Height = png_get_image_height(pPNGStruct, pPNGInfo);
|
Height = png_get_image_height(pPNGStruct, pPNGInfo);
|
||||||
ColorType = png_get_color_type(pPNGStruct, pPNGInfo);
|
const int ColorType = png_get_color_type(pPNGStruct, pPNGInfo);
|
||||||
BitDepth = png_get_bit_depth(pPNGStruct, pPNGInfo);
|
const png_byte BitDepth = png_get_bit_depth(pPNGStruct, pPNGInfo);
|
||||||
PngliteIncompatible = PngliteIncompatibility(pPNGStruct, pPNGInfo);
|
PngliteIncompatible = PngliteIncompatibility(pPNGStruct, pPNGInfo);
|
||||||
|
|
||||||
if(BitDepth == 16)
|
if(BitDepth == 16)
|
||||||
|
@ -227,8 +225,8 @@ bool LoadPNG(SImageByteBuffer &ByteLoader, const char *pFileName, int &PngliteIn
|
||||||
|
|
||||||
png_read_update_info(pPNGStruct, pPNGInfo);
|
png_read_update_info(pPNGStruct, pPNGInfo);
|
||||||
|
|
||||||
ColorChannelCount = LibPNGGetColorChannelCount(ColorType);
|
const int ColorChannelCount = LibPNGGetColorChannelCount(ColorType);
|
||||||
BytesInRow = png_get_rowbytes(pPNGStruct, pPNGInfo);
|
const int BytesInRow = png_get_rowbytes(pPNGStruct, pPNGInfo);
|
||||||
|
|
||||||
if(BytesInRow == Width * ColorChannelCount)
|
if(BytesInRow == Width * ColorChannelCount)
|
||||||
{
|
{
|
||||||
|
@ -255,6 +253,7 @@ bool LoadPNG(SImageByteBuffer &ByteLoader, const char *pFileName, int &PngliteIn
|
||||||
if(ByteLoader.m_Err != 0)
|
if(ByteLoader.m_Err != 0)
|
||||||
{
|
{
|
||||||
LibPNGDeleteReadStruct(pPNGStruct, pPNGInfo);
|
LibPNGDeleteReadStruct(pPNGStruct, pPNGInfo);
|
||||||
|
dbg_msg("png", "byte loader error.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,11 +262,12 @@ bool LoadPNG(SImageByteBuffer &ByteLoader, const char *pFileName, int &PngliteIn
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LibPNGDeleteReadStruct(pPNGStruct, pPNGInfo);
|
LibPNGDeleteReadStruct(pPNGStruct, pPNGInfo);
|
||||||
|
dbg_msg("png", "bytes in row incorrect.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
png_destroy_info_struct(pPNGStruct, &pPNGInfo);
|
png_destroy_info_struct(pPNGStruct, &pPNGInfo);
|
||||||
png_destroy_read_struct(&pPNGStruct, NULL, NULL);
|
png_destroy_read_struct(&pPNGStruct, nullptr, nullptr);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -304,9 +304,9 @@ static int ImageLoaderHelperFormatToColorChannel(EImageFormat Format)
|
||||||
|
|
||||||
bool SavePNG(EImageFormat ImageFormat, const uint8_t *pRawBuffer, SImageByteBuffer &WrittenBytes, int Width, int Height)
|
bool SavePNG(EImageFormat ImageFormat, const uint8_t *pRawBuffer, SImageByteBuffer &WrittenBytes, int Width, int Height)
|
||||||
{
|
{
|
||||||
png_structp pPNGStruct = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
png_structp pPNGStruct = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
|
||||||
|
|
||||||
if(pPNGStruct == NULL)
|
if(pPNGStruct == nullptr)
|
||||||
{
|
{
|
||||||
dbg_msg("png", "libpng internal failure: png_create_write_struct failed.");
|
dbg_msg("png", "libpng internal failure: png_create_write_struct failed.");
|
||||||
return false;
|
return false;
|
||||||
|
@ -314,9 +314,9 @@ bool SavePNG(EImageFormat ImageFormat, const uint8_t *pRawBuffer, SImageByteBuff
|
||||||
|
|
||||||
png_infop pPNGInfo = png_create_info_struct(pPNGStruct);
|
png_infop pPNGInfo = png_create_info_struct(pPNGStruct);
|
||||||
|
|
||||||
if(pPNGInfo == NULL)
|
if(pPNGInfo == nullptr)
|
||||||
{
|
{
|
||||||
png_destroy_read_struct(&pPNGStruct, NULL, NULL);
|
png_destroy_read_struct(&pPNGStruct, nullptr, nullptr);
|
||||||
dbg_msg("png", "libpng internal failure: png_create_info_struct failed.");
|
dbg_msg("png", "libpng internal failure: png_create_info_struct failed.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -361,7 +361,7 @@ bool SavePNG(EImageFormat ImageFormat, const uint8_t *pRawBuffer, SImageByteBuff
|
||||||
delete[](pRowPointers);
|
delete[](pRowPointers);
|
||||||
|
|
||||||
png_destroy_info_struct(pPNGStruct, &pPNGInfo);
|
png_destroy_info_struct(pPNGStruct, &pPNGInfo);
|
||||||
png_destroy_write_struct(&pPNGStruct, NULL);
|
png_destroy_write_struct(&pPNGStruct, nullptr);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,29 +66,54 @@ struct SGraphicTileTexureCoords
|
||||||
class CImageInfo
|
class CImageInfo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum
|
enum EImageFormat
|
||||||
{
|
{
|
||||||
FORMAT_AUTO = -1,
|
FORMAT_ERROR = -1,
|
||||||
FORMAT_RGB = 0,
|
FORMAT_RGB = 0,
|
||||||
FORMAT_RGBA = 1,
|
FORMAT_RGBA = 1,
|
||||||
FORMAT_SINGLE_COMPONENT = 2,
|
FORMAT_SINGLE_COMPONENT = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Variable: width
|
/**
|
||||||
Contains the width of the image */
|
* Contains the width of the image
|
||||||
int m_Width;
|
*/
|
||||||
|
int m_Width = 0;
|
||||||
|
|
||||||
/* Variable: height
|
/**
|
||||||
Contains the height of the image */
|
* Contains the height of the image
|
||||||
int m_Height;
|
*/
|
||||||
|
int m_Height = 0;
|
||||||
|
|
||||||
/* Variable: format
|
/**
|
||||||
Contains the format of the image. See <Image Formats> for more information. */
|
* Contains the format of the image.
|
||||||
int m_Format;
|
*
|
||||||
|
* @see EImageFormat
|
||||||
|
*/
|
||||||
|
EImageFormat m_Format = FORMAT_ERROR;
|
||||||
|
|
||||||
/* Variable: data
|
/**
|
||||||
Pointer to the image data. */
|
* Pointer to the image data.
|
||||||
void *m_pData;
|
*/
|
||||||
|
void *m_pData = nullptr;
|
||||||
|
|
||||||
|
static size_t PixelSize(EImageFormat Format)
|
||||||
|
{
|
||||||
|
dbg_assert(Format != FORMAT_ERROR, "Format invalid");
|
||||||
|
static const size_t s_aSizes[] = {3, 4, 1};
|
||||||
|
return s_aSizes[(int)Format];
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t PixelSize() const
|
||||||
|
{
|
||||||
|
return PixelSize(m_Format);
|
||||||
|
}
|
||||||
|
|
||||||
|
static EImageFormat ImageFormatFromInt(int Format)
|
||||||
|
{
|
||||||
|
if(Format < (int)FORMAT_RGB || Format > (int)FORMAT_SINGLE_COMPONENT)
|
||||||
|
return FORMAT_ERROR;
|
||||||
|
return (EImageFormat)Format;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -207,7 +232,7 @@ namespace client_data7 {
|
||||||
struct CDataSprite; // NOLINT(bugprone-forward-declaration-namespace)
|
struct CDataSprite; // NOLINT(bugprone-forward-declaration-namespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef std::function<bool(uint32_t &Width, uint32_t &Height, uint32_t &Format, std::vector<uint8_t> &vDstData)> TGLBackendReadPresentedImageData;
|
typedef std::function<bool(uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector<uint8_t> &vDstData)> TGLBackendReadPresentedImageData;
|
||||||
|
|
||||||
class IGraphics : public IInterface
|
class IGraphics : public IInterface
|
||||||
{
|
{
|
||||||
|
@ -307,15 +332,15 @@ public:
|
||||||
virtual bool IsImageFormatRGBA(const char *pFileName, CImageInfo &Img) = 0;
|
virtual bool IsImageFormatRGBA(const char *pFileName, CImageInfo &Img) = 0;
|
||||||
|
|
||||||
// destination and source buffer require to have the same width and height
|
// destination and source buffer require to have the same width and height
|
||||||
virtual void CopyTextureBufferSub(uint8_t *pDestBuffer, uint8_t *pSourceBuffer, size_t FullWidth, size_t FullHeight, size_t ColorChannelCount, size_t SubOffsetX, size_t SubOffsetY, size_t SubCopyWidth, size_t SubCopyHeight) = 0;
|
virtual void CopyTextureBufferSub(uint8_t *pDestBuffer, uint8_t *pSourceBuffer, size_t FullWidth, size_t FullHeight, size_t PixelSize, size_t SubOffsetX, size_t SubOffsetY, size_t SubCopyWidth, size_t SubCopyHeight) = 0;
|
||||||
|
|
||||||
// destination width must be equal to the subwidth of the source
|
// destination width must be equal to the subwidth of the source
|
||||||
virtual void CopyTextureFromTextureBufferSub(uint8_t *pDestBuffer, size_t DestWidth, size_t DestHeight, uint8_t *pSourceBuffer, size_t SrcWidth, size_t SrcHeight, size_t ColorChannelCount, size_t SrcSubOffsetX, size_t SrcSubOffsetY, size_t SrcSubCopyWidth, size_t SrcSubCopyHeight) = 0;
|
virtual void CopyTextureFromTextureBufferSub(uint8_t *pDestBuffer, size_t DestWidth, size_t DestHeight, uint8_t *pSourceBuffer, size_t SrcWidth, size_t SrcHeight, size_t PixelSize, size_t SrcSubOffsetX, size_t SrcSubOffsetY, size_t SrcSubCopyWidth, size_t SrcSubCopyHeight) = 0;
|
||||||
|
|
||||||
virtual int UnloadTexture(CTextureHandle *pIndex) = 0;
|
virtual int UnloadTexture(CTextureHandle *pIndex) = 0;
|
||||||
virtual CTextureHandle LoadTextureRaw(size_t Width, size_t Height, int Format, const void *pData, int StoreFormat, int Flags, const char *pTexName = nullptr) = 0;
|
virtual CTextureHandle LoadTextureRaw(size_t Width, size_t Height, CImageInfo::EImageFormat Format, const void *pData, int Flags, const char *pTexName = nullptr) = 0;
|
||||||
virtual int LoadTextureRawSub(CTextureHandle TextureID, int x, int y, size_t Width, size_t Height, int Format, const void *pData) = 0;
|
virtual int LoadTextureRawSub(CTextureHandle TextureID, int x, int y, size_t Width, size_t Height, CImageInfo::EImageFormat Format, const void *pData) = 0;
|
||||||
virtual CTextureHandle LoadTexture(const char *pFilename, int StorageType, int StoreFormat, int Flags) = 0;
|
virtual CTextureHandle LoadTexture(const char *pFilename, int StorageType, int Flags = 0) = 0;
|
||||||
virtual CTextureHandle InvalidTexture() const = 0;
|
virtual CTextureHandle InvalidTexture() const = 0;
|
||||||
virtual void TextureSet(CTextureHandle Texture) = 0;
|
virtual void TextureSet(CTextureHandle Texture) = 0;
|
||||||
void TextureClear() { TextureSet(CTextureHandle()); }
|
void TextureClear() { TextureSet(CTextureHandle()); }
|
||||||
|
|
|
@ -277,10 +277,14 @@ class IGameServer : public IInterface
|
||||||
MACRO_INTERFACE("gameserver", 0)
|
MACRO_INTERFACE("gameserver", 0)
|
||||||
protected:
|
protected:
|
||||||
public:
|
public:
|
||||||
virtual void OnInit() = 0;
|
// `pPersistentData` may be null if this is the first time `IGameServer`
|
||||||
|
// is instantiated.
|
||||||
|
virtual void OnInit(const void *pPersistentData) = 0;
|
||||||
virtual void OnConsoleInit() = 0;
|
virtual void OnConsoleInit() = 0;
|
||||||
virtual void OnMapChange(char *pNewMapName, int MapNameSize) = 0;
|
virtual void OnMapChange(char *pNewMapName, int MapNameSize) = 0;
|
||||||
virtual void OnShutdown() = 0;
|
// `pPersistentData` may be null if this is the last time `IGameServer`
|
||||||
|
// is destroyed.
|
||||||
|
virtual void OnShutdown(void *pPersistentData) = 0;
|
||||||
|
|
||||||
virtual void OnTick() = 0;
|
virtual void OnTick() = 0;
|
||||||
virtual void OnPreSnap() = 0;
|
virtual void OnPreSnap() = 0;
|
||||||
|
@ -315,6 +319,7 @@ public:
|
||||||
virtual bool IsClientReady(int ClientID) const = 0;
|
virtual bool IsClientReady(int ClientID) const = 0;
|
||||||
virtual bool IsClientPlayer(int ClientID) const = 0;
|
virtual bool IsClientPlayer(int ClientID) const = 0;
|
||||||
|
|
||||||
|
virtual int PersistentDataSize() const = 0;
|
||||||
virtual int PersistentClientDataSize() const = 0;
|
virtual int PersistentClientDataSize() const = 0;
|
||||||
|
|
||||||
virtual CUuid GameUuid() const = 0;
|
virtual CUuid GameUuid() const = 0;
|
||||||
|
|