mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-22 12:31:32 +00:00
Merge branch SRB2:next into improve-backtrace
This commit is contained in:
commit
ef0fc97bc6
71 changed files with 3308 additions and 617 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -26,3 +26,4 @@ Win32_LIB_ASM_Release
|
||||||
/CMakeUserPresets.json
|
/CMakeUserPresets.json
|
||||||
/out
|
/out
|
||||||
/objs/VC10
|
/objs/VC10
|
||||||
|
/thirdparty/vcpkg-overlays
|
||||||
|
|
|
@ -8,7 +8,6 @@ endif()
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
|
||||||
|
|
||||||
include(CMakeDependentOption)
|
include(CMakeDependentOption)
|
||||||
include(cmake/CPM.cmake)
|
|
||||||
|
|
||||||
file(STRINGS src/version.h SRB2_VERSION)
|
file(STRINGS src/version.h SRB2_VERSION)
|
||||||
string(REGEX MATCH "[0-9]+\\.[0-9.]+" SRB2_VERSION ${SRB2_VERSION})
|
string(REGEX MATCH "[0-9]+\\.[0-9.]+" SRB2_VERSION ${SRB2_VERSION})
|
||||||
|
@ -46,28 +45,23 @@ SET(CPACK_OUTPUT_FILE_PREFIX package)
|
||||||
include(CPack)
|
include(CPack)
|
||||||
|
|
||||||
# Options
|
# Options
|
||||||
|
if("${CMAKE_SYSTEM_NAME}" MATCHES Windows)
|
||||||
if("${CMAKE_SYSTEM_NAME}" MATCHES Linux)
|
if(DEFINED VCPKG_TARGET_TRIPLET)
|
||||||
set(SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT ON)
|
set(SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT ON)
|
||||||
|
else()
|
||||||
|
set(SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT OFF)
|
set(SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Clang tidy options will be ignored if CMAKE_<LANG>_CLANG_TIDY are set.
|
# Clang tidy options will be ignored if CMAKE_<LANG>_CLANG_TIDY are set.
|
||||||
option(SRB2_CONFIG_ENABLE_CLANG_TIDY_C "Enable default clang-tidy check configuration for C" OFF)
|
option(SRB2_CONFIG_ENABLE_CLANG_TIDY_C "Enable default clang-tidy check configuration for C" OFF)
|
||||||
option(SRB2_CONFIG_ENABLE_CLANG_TIDY_CXX "Enable default clang-tidy check configuration for C++" OFF)
|
option(SRB2_CONFIG_ENABLE_CLANG_TIDY_CXX "Enable default clang-tidy check configuration for C++" OFF)
|
||||||
option(
|
option(
|
||||||
SRB2_CONFIG_SYSTEM_LIBRARIES
|
SRB2_CONFIG_STATIC_STDLIB
|
||||||
"Link dependencies using CMake's find_package and do not use internal builds"
|
"Link static version of standard library. All dependencies must also be static"
|
||||||
${SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT}
|
ON
|
||||||
)
|
|
||||||
option(SRB2_CONFIG_ENABLE_TESTS "Build the test suite" ON)
|
|
||||||
# This option isn't recommended for distribution builds and probably won't work (yet).
|
|
||||||
cmake_dependent_option(
|
|
||||||
SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES
|
|
||||||
"Use dynamic libraries when compiling internal dependencies"
|
|
||||||
OFF "NOT SRB2_CONFIG_SYSTEM_LIBRARIES"
|
|
||||||
OFF
|
|
||||||
)
|
)
|
||||||
option(SRB2_CONFIG_HWRENDER "Enable hardware render (OpenGL) support" ON)
|
option(SRB2_CONFIG_HWRENDER "Enable hardware render (OpenGL) support" ON)
|
||||||
option(SRB2_CONFIG_USE_GME "Enable GME playback support" OFF)
|
option(SRB2_CONFIG_USE_GME "Enable GME playback support" OFF)
|
||||||
|
@ -82,64 +76,28 @@ option(SRB2_CONFIG_ZDEBUG "Compile with ZDEBUG defined." OFF)
|
||||||
option(SRB2_CONFIG_PROFILEMODE "Compile for profiling (GCC only)." OFF)
|
option(SRB2_CONFIG_PROFILEMODE "Compile for profiling (GCC only)." OFF)
|
||||||
set(SRB2_CONFIG_ASSET_DIRECTORY "" CACHE PATH "Path to directory that contains all asset files for the installer. If set, assets will be part of installation and cpack.")
|
set(SRB2_CONFIG_ASSET_DIRECTORY "" CACHE PATH "Path to directory that contains all asset files for the installer. If set, assets will be part of installation and cpack.")
|
||||||
|
|
||||||
if(SRB2_CONFIG_ENABLE_TESTS)
|
|
||||||
# https://github.com/catchorg/Catch2
|
|
||||||
CPMAddPackage(
|
|
||||||
NAME Catch2
|
|
||||||
VERSION 3.4.0
|
|
||||||
GITHUB_REPOSITORY catchorg/Catch2
|
|
||||||
OPTIONS
|
|
||||||
"CATCH_INSTALL_DOCS OFF"
|
|
||||||
)
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${Catch2_SOURCE_DIR}/extras")
|
|
||||||
include(CTest)
|
|
||||||
include(Catch)
|
|
||||||
add_executable(srb2tests)
|
|
||||||
# To add tests, use target_sources to add individual test files to the target in subdirs.
|
|
||||||
target_link_libraries(srb2tests PRIVATE Catch2::Catch2 Catch2::Catch2WithMain)
|
|
||||||
target_compile_features(srb2tests PRIVATE c_std_11 cxx_std_17)
|
|
||||||
catch_discover_tests(srb2tests)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Enable CCache
|
|
||||||
# (Set USE_CCACHE=ON to use, CCACHE_OPTIONS for options)
|
|
||||||
if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL Windows)
|
|
||||||
option(USE_CCACHE "Enable ccache support" OFF)
|
|
||||||
|
|
||||||
if(USE_CCACHE)
|
|
||||||
find_program(CCACHE_TOOL_PATH ccache)
|
|
||||||
if(CCACHE_TOOL_PATH)
|
|
||||||
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_TOOL_PATH} CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_TOOL_PATH} CACHE STRING "" FORCE)
|
|
||||||
else()
|
|
||||||
message(WARNING "USE_CCACHE was set but ccache is not found (set CCACHE_TOOL_PATH)")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
CPMAddPackage(
|
|
||||||
NAME Ccache.cmake
|
|
||||||
GITHUB_REPOSITORY TheLartians/Ccache.cmake
|
|
||||||
VERSION 1.2
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
add_subdirectory(thirdparty)
|
add_subdirectory(thirdparty)
|
||||||
|
|
||||||
if("${SRB2_CONFIG_SYSTEM_LIBRARIES}")
|
if(SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES)
|
||||||
find_package(ZLIB REQUIRED)
|
set(SRB2_INTERNAL_LIBRARY_TYPE SHARED)
|
||||||
find_package(PNG REQUIRED)
|
set(NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES OFF)
|
||||||
find_package(SDL2 REQUIRED)
|
else()
|
||||||
find_package(SDL2_mixer REQUIRED)
|
set(SRB2_INTERNAL_LIBRARY_TYPE STATIC)
|
||||||
find_package(CURL REQUIRED)
|
set(NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES ON)
|
||||||
find_package(OPENMPT REQUIRED)
|
|
||||||
|
|
||||||
# libgme defaults to "Nuked" YM2612 emulator, which is
|
|
||||||
# very SLOW. The system library probably uses the
|
|
||||||
# default so just always build it.
|
|
||||||
#find_package(GME REQUIRED)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
find_package(ZLIB REQUIRED)
|
||||||
|
find_package(PNG REQUIRED)
|
||||||
|
find_package(CURL REQUIRED)
|
||||||
|
find_package(libopenmpt QUIET)
|
||||||
|
if("${SRB2_CONFIG_USE_GME}")
|
||||||
|
find_package(libgme QUIET)
|
||||||
|
endif()
|
||||||
|
find_package(miniupnpc QUIET)
|
||||||
|
|
||||||
|
|
||||||
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
||||||
message(FATAL_ERROR "In-source builds will bring you a world of pain. Please make a separate directory to invoke CMake from.")
|
message(FATAL_ERROR "In-source builds will bring you a world of pain. Please make a separate directory to invoke CMake from.")
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -2,26 +2,263 @@
|
||||||
"version": 3,
|
"version": 3,
|
||||||
"configurePresets": [
|
"configurePresets": [
|
||||||
{
|
{
|
||||||
"name": "default",
|
"name": "__debug",
|
||||||
"description": "Build using default generator",
|
"hidden": true,
|
||||||
"binaryDir": "build",
|
|
||||||
"cacheVariables": {
|
"cacheVariables": {
|
||||||
|
"SRB2_CONFIG_DEV_BUILD": "ON",
|
||||||
|
"CMAKE_BUILD_TYPE": "Debug"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "__develop",
|
||||||
|
"hidden": true,
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_C_FLAGS_RELWITHDEBINFO": "-DNDEBUG",
|
||||||
|
"CMAKE_CXX_FLAGS_RELWITHDEBINFO": "-DNDEBUG",
|
||||||
|
"SRB2_CONFIG_DEV_BUILD": "ON",
|
||||||
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
|
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "debug",
|
"name": "__release",
|
||||||
"description": "Build for development (no optimizations)",
|
"hidden": true,
|
||||||
"inherits": "default",
|
|
||||||
"cacheVariables": {
|
"cacheVariables": {
|
||||||
"CMAKE_BUILD_TYPE": "Debug"
|
"CMAKE_C_FLAGS_RELWITHDEBINFO": "-DNDEBUG",
|
||||||
|
"CMAKE_CXX_FLAGS_RELWITHDEBINFO": "-DNDEBUG",
|
||||||
|
"SRB2_CONFIG_DEV_BUILD": "OFF",
|
||||||
|
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "__testers",
|
||||||
|
"hidden": true,
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_C_FLAGS_RELWITHDEBINFO": "-DNDEBUG",
|
||||||
|
"CMAKE_CXX_FLAGS_RELWITHDEBINFO": "-DNDEBUG",
|
||||||
|
"SRB2_CONFIG_DEV_BUILD": "ON",
|
||||||
|
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
|
||||||
|
"SRB2_CONFIG_TESTERS": "ON"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "__ninja",
|
||||||
|
"hidden": true,
|
||||||
|
"generator": "Ninja",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_COLOR_DIAGNOSTICS": "ON"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "__vcpkg-toolchain",
|
||||||
|
"hidden": true,
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "__compiler-mingw-w64-i686",
|
||||||
|
"hidden": true,
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_C_COMPILER": "i686-w64-mingw32-gcc",
|
||||||
|
"CMAKE_CXX_COMPILER": "i686-w64-mingw32-g++"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "__mingw-dynamic",
|
||||||
|
"hidden": true,
|
||||||
|
"cacheVariables": {
|
||||||
|
"VCPKG_TARGET_TRIPLET": "x86-mingw-dynamic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "__mingw-static",
|
||||||
|
"hidden": true,
|
||||||
|
"cacheVariables": {
|
||||||
|
"VCPKG_HOST_TRIPLET": "x86-mingw-static",
|
||||||
|
"VCPKG_TARGET_TRIPLET": "x86-mingw-static"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "__osx_x64",
|
||||||
|
"hidden": true,
|
||||||
|
"cacheVariables": {
|
||||||
|
"VCPKG_TARGET_TRIPLET": "x64-osx"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "__osx_arm64",
|
||||||
|
"hidden": true,
|
||||||
|
"cacheVariables": {
|
||||||
|
"VCPKG_TARGET_TRIPLET": "arm64-osx"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "ninja-debug",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__debug", "__ninja"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-develop",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__develop", "__ninja"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-release",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__release", "__ninja"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-testers",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__testers", "__ninja"]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "ninja-vcpkg-debug",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__debug", "__ninja", "__vcpkg-toolchain"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-vcpkg-develop",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__develop", "__ninja", "__vcpkg-toolchain"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-vcpkg-release",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__release", "__ninja", "__vcpkg-toolchain"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-vcpkg-testers",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__testers", "__ninja", "__vcpkg-toolchain"]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "ninja-x86_mingw_static_vcpkg-debug",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__debug", "__compiler-mingw-w64-i686", "__ninja", "__vcpkg-toolchain", "__mingw-static"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x86_mingw_static_vcpkg-develop",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__develop", "__compiler-mingw-w64-i686", "__ninja", "__vcpkg-toolchain", "__mingw-static"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x86_mingw_static_vcpkg-release",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__release", "__compiler-mingw-w64-i686", "__ninja", "__vcpkg-toolchain", "__mingw-static"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x86_mingw_static_vcpkg-testers",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__testers", "__compiler-mingw-w64-i686", "__ninja", "__vcpkg-toolchain", "__mingw-static"]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "ninja-x64_osx_vcpkg-debug",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__debug", "__ninja", "__vcpkg-toolchain", "__osx_x64"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x64_osx_vcpkg-develop",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__develop", "__ninja", "__vcpkg-toolchain", "__osx_x64"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x64_osx_vcpkg-release",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__release", "__ninja", "__vcpkg-toolchain", "__osx_x64"]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "ninja-arm64_osx_vcpkg-debug",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__debug", "__ninja", "__vcpkg-toolchain", "__osx_arm64"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-arm64_osx_vcpkg-develop",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__develop", "__ninja", "__vcpkg-toolchain", "__osx_arm64"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-arm64_osx_vcpkg-release",
|
||||||
|
"hidden": false,
|
||||||
|
"binaryDir": "build/${presetName}",
|
||||||
|
"inherits": ["__release", "__ninja", "__vcpkg-toolchain", "__osx_arm64"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
"buildPresets": [
|
"buildPresets": [
|
||||||
{
|
{
|
||||||
"name": "default",
|
"name": "ninja-debug",
|
||||||
"configurePreset": "default"
|
"configurePreset": "ninja-debug"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-develop",
|
||||||
|
"configurePreset": "ninja-develop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-release",
|
||||||
|
"configurePreset": "ninja-release"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x86_mingw_static_vcpkg-debug",
|
||||||
|
"configurePreset": "ninja-x86_mingw_static_vcpkg-debug"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x86_mingw_static_vcpkg-develop",
|
||||||
|
"configurePreset": "ninja-x86_mingw_static_vcpkg-develop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x86_mingw_static_vcpkg-release",
|
||||||
|
"configurePreset": "ninja-x86_mingw_static_vcpkg-release"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x86_mingw_static_vcpkg-testers",
|
||||||
|
"configurePreset": "ninja-x86_mingw_static_vcpkg-testers"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x64_osx_vcpkg-debug",
|
||||||
|
"configurePreset": "ninja-x64_osx_vcpkg-debug"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x64_osx_vcpkg-develop",
|
||||||
|
"configurePreset": "ninja-x64_osx_vcpkg-develop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-x64_osx_vcpkg-release",
|
||||||
|
"configurePreset": "ninja-x64_osx_vcpkg-release"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-arm64_osx_vcpkg-debug",
|
||||||
|
"configurePreset": "ninja-arm64_osx_vcpkg-debug"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-arm64_osx_vcpkg-develop",
|
||||||
|
"configurePreset": "ninja-arm64_osx_vcpkg-develop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ninja-arm64_osx_vcpkg-release",
|
||||||
|
"configurePreset": "ninja-arm64_osx_vcpkg-release"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1,21 +0,0 @@
|
||||||
set(CPM_DOWNLOAD_VERSION 0.38.7)
|
|
||||||
|
|
||||||
if(CPM_SOURCE_CACHE)
|
|
||||||
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
|
||||||
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
|
|
||||||
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
|
||||||
else()
|
|
||||||
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Expand relative path. This is important if the provided path contains a tilde (~)
|
|
||||||
get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE)
|
|
||||||
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
|
|
||||||
message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}")
|
|
||||||
file(DOWNLOAD
|
|
||||||
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
|
|
||||||
${CPM_DOWNLOAD_LOCATION}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(${CPM_DOWNLOAD_LOCATION})
|
|
|
@ -1,33 +0,0 @@
|
||||||
include(LibFindMacros)
|
|
||||||
|
|
||||||
libfind_pkg_check_modules(GME_PKGCONF GME)
|
|
||||||
|
|
||||||
find_path(GME_INCLUDE_DIR
|
|
||||||
NAMES gme.h
|
|
||||||
PATHS
|
|
||||||
${GME_PKGCONF_INCLUDE_DIRS}
|
|
||||||
"/usr/include/gme"
|
|
||||||
"/usr/local/include/gme"
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(GME_LIBRARY
|
|
||||||
NAMES gme
|
|
||||||
PATHS
|
|
||||||
${GME_PKGCONF_LIBRARY_DIRS}
|
|
||||||
"/usr/lib"
|
|
||||||
"/usr/local/lib"
|
|
||||||
)
|
|
||||||
|
|
||||||
set(GME_PROCESS_INCLUDES GME_INCLUDE_DIR)
|
|
||||||
set(GME_PROCESS_LIBS GME_LIBRARY)
|
|
||||||
libfind_process(GME)
|
|
||||||
|
|
||||||
if(GME_FOUND AND NOT TARGET gme)
|
|
||||||
add_library(gme UNKNOWN IMPORTED)
|
|
||||||
set_target_properties(
|
|
||||||
gme
|
|
||||||
PROPERTIES
|
|
||||||
IMPORTED_LOCATION "${GME_LIBRARY}"
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${GME_INCLUDE_DIR}"
|
|
||||||
)
|
|
||||||
endif()
|
|
|
@ -1,33 +0,0 @@
|
||||||
include(LibFindMacros)
|
|
||||||
|
|
||||||
libfind_pkg_check_modules(OPENMPT_PKGCONF OPENMPT)
|
|
||||||
|
|
||||||
find_path(OPENMPT_INCLUDE_DIR
|
|
||||||
NAMES libopenmpt.h
|
|
||||||
PATHS
|
|
||||||
${OPENMPT_PKGCONF_INCLUDE_DIRS}
|
|
||||||
"/usr/include/libopenmpt"
|
|
||||||
"/usr/local/include/libopenmpt"
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(OPENMPT_LIBRARY
|
|
||||||
NAMES openmpt
|
|
||||||
PATHS
|
|
||||||
${OPENMPT_PKGCONF_LIBRARY_DIRS}
|
|
||||||
"/usr/lib"
|
|
||||||
"/usr/local/lib"
|
|
||||||
)
|
|
||||||
|
|
||||||
set(OPENMPT_PROCESS_INCLUDES OPENMPT_INCLUDE_DIR)
|
|
||||||
set(OPENMPT_PROCESS_LIBS OPENMPT_LIBRARY)
|
|
||||||
libfind_process(OPENMPT)
|
|
||||||
|
|
||||||
if(OPENMPT_FOUND AND NOT TARGET openmpt)
|
|
||||||
add_library(openmpt UNKNOWN IMPORTED)
|
|
||||||
set_target_properties(
|
|
||||||
openmpt
|
|
||||||
PROPERTIES
|
|
||||||
IMPORTED_LOCATION "${OPENMPT_LIBRARY}"
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${OPENMPT_INCLUDE_DIR}"
|
|
||||||
)
|
|
||||||
endif()
|
|
38
cmake/Modules/Findlibgme.cmake
Normal file
38
cmake/Modules/Findlibgme.cmake
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
include(LibFindMacros)
|
||||||
|
|
||||||
|
libfind_pkg_check_modules(libgme_PKGCONF gme libgme)
|
||||||
|
|
||||||
|
find_path(libgme_INCLUDE_DIR
|
||||||
|
NAMES gme.h
|
||||||
|
PATHS
|
||||||
|
${libgme_PKGCONF_INCLUDE_DIRS}
|
||||||
|
"/usr/include"
|
||||||
|
"/usr/local/include"
|
||||||
|
PATH_SUFFIXES
|
||||||
|
gme
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(libgme_LIBRARY
|
||||||
|
NAMES gme
|
||||||
|
PATHS
|
||||||
|
${libgme_PKGCONF_LIBRARY_DIRS}
|
||||||
|
"/usr/lib"
|
||||||
|
"/usr/local/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(libgme
|
||||||
|
REQUIRED_VARS libgme_LIBRARY libgme_INCLUDE_DIR)
|
||||||
|
|
||||||
|
if(libgme_FOUND AND NOT TARGET gme)
|
||||||
|
add_library(gme UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(
|
||||||
|
gme
|
||||||
|
PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${libgme_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${libgme_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
add_library(gme::gme ALIAS gme)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(libgme_LIBRARY libgme_INCLUDE_DIR)
|
37
cmake/Modules/Findlibopenmpt.cmake
Normal file
37
cmake/Modules/Findlibopenmpt.cmake
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
include(LibFindMacros)
|
||||||
|
|
||||||
|
libfind_pkg_check_modules(libopenmpt_PKGCONF openmpt)
|
||||||
|
|
||||||
|
find_path(libopenmpt_INCLUDE_DIR
|
||||||
|
NAMES libopenmpt.h
|
||||||
|
PATHS
|
||||||
|
${libopenmpt_PKGCONF_INCLUDE_DIRS}
|
||||||
|
"${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include/libopenmpt"
|
||||||
|
"/usr/include/libopenmpt"
|
||||||
|
"/usr/local/include/libopenmpt"
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(libopenmpt_LIBRARY
|
||||||
|
NAMES openmpt
|
||||||
|
PATHS
|
||||||
|
${libopenmpt_PKGCONF_LIBRARY_DIRS}
|
||||||
|
"/usr/lib"
|
||||||
|
"/usr/local/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(libopenmpt
|
||||||
|
REQUIRED_VARS libopenmpt_LIBRARY libopenmpt_INCLUDE_DIR)
|
||||||
|
|
||||||
|
if(libopenmpt_FOUND AND NOT TARGET openmpt)
|
||||||
|
add_library(openmpt UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(
|
||||||
|
openmpt
|
||||||
|
PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${libopenmpt_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${libopenmpt_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
add_library(libopenmpt::libopenmpt ALIAS openmpt)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(libopenmpt_LIBRARY libopenmpt_INCLUDE_DIR)
|
39
cmake/Modules/Findminiupnpc.cmake
Normal file
39
cmake/Modules/Findminiupnpc.cmake
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
include(LibFindMacros)
|
||||||
|
|
||||||
|
libfind_pkg_check_modules(libminiupnpc_PKGCONF miniupnpc libminiupnpc)
|
||||||
|
|
||||||
|
find_path(libminiupnpc_INCLUDE_DIR
|
||||||
|
NAMES miniupnpc.h
|
||||||
|
PATHS
|
||||||
|
${libminiupnpc_PKGCONF_INCLUDE_DIRS}
|
||||||
|
"${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include"
|
||||||
|
"/usr/include"
|
||||||
|
"/usr/local/include"
|
||||||
|
PATH_SUFFIXES
|
||||||
|
miniupnpc
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(libminiupnpc_LIBRARY
|
||||||
|
NAMES miniupnpc
|
||||||
|
PATHS
|
||||||
|
${libminiupnpc_PKGCONF_LIBRARY_DIRS}
|
||||||
|
"/usr/lib"
|
||||||
|
"/usr/local/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(miniupnpc
|
||||||
|
REQUIRED_VARS libminiupnpc_LIBRARY libminiupnpc_INCLUDE_DIR)
|
||||||
|
|
||||||
|
if(miniupnpc_FOUND AND NOT TARGET miniupnpc)
|
||||||
|
add_library(miniupnpc UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(
|
||||||
|
miniupnpc
|
||||||
|
PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${libminiupnpc_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${libminiupnpc_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
add_library(miniupnpc::miniupnpc ALIAS miniupnpc)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(libminiupnpc_LIBRARY libminiupnpc_INCLUDE_DIR)
|
30
cmake/PatchFile.cmake
Normal file
30
cmake/PatchFile.cmake
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# use GNU Patch from any platform
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
# prioritize Git Patch on Windows as other Patches may be very old and incompatible.
|
||||||
|
find_package(Git)
|
||||||
|
if(Git_FOUND)
|
||||||
|
get_filename_component(GIT_DIR ${GIT_EXECUTABLE} DIRECTORY)
|
||||||
|
get_filename_component(GIT_DIR ${GIT_DIR} DIRECTORY)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_program(PATCH
|
||||||
|
NAMES patch
|
||||||
|
HINTS ${GIT_DIR}
|
||||||
|
PATH_SUFFIXES usr/bin
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT PATCH)
|
||||||
|
message(FATAL_ERROR "Did not find GNU Patch")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(COMMAND ${PATCH} ${in_file} --input=${patch_file} --output=${out_file} --ignore-whitespace
|
||||||
|
TIMEOUT 15
|
||||||
|
COMMAND_ECHO STDOUT
|
||||||
|
RESULT_VARIABLE ret
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT ret EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Failed to apply patch ${patch_file} to ${in_file} with ${PATCH}")
|
||||||
|
endif()
|
16
cmake/Toolchains/mingw-w64-i686.cmake
Normal file
16
cmake/Toolchains/mingw-w64-i686.cmake
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
set(TOOLCHAIN_PREFIX i686-w64-mingw32)
|
||||||
|
|
||||||
|
# cross compilers to use for C, C++ and Fortran
|
||||||
|
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
|
||||||
|
set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran)
|
||||||
|
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)
|
||||||
|
|
||||||
|
# target environment on the build host system
|
||||||
|
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
|
||||||
|
|
||||||
|
# modify default behavior of FIND_XXX() commands
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
16
cmake/Toolchains/mingw-w64-x86_64.cmake
Normal file
16
cmake/Toolchains/mingw-w64-x86_64.cmake
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
|
||||||
|
|
||||||
|
# cross compilers to use for C, C++ and Fortran
|
||||||
|
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
|
||||||
|
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
|
||||||
|
set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran)
|
||||||
|
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)
|
||||||
|
|
||||||
|
# target environment on the build host system
|
||||||
|
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
|
||||||
|
|
||||||
|
# modify default behavior of FIND_XXX() commands
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
@ -134,10 +134,13 @@ add_dependencies(SRB2SDL2 _SRB2_reconf)
|
||||||
|
|
||||||
if("${CMAKE_COMPILER_IS_GNUCC}" AND "${CMAKE_SYSTEM_NAME}" MATCHES "Windows")
|
if("${CMAKE_COMPILER_IS_GNUCC}" AND "${CMAKE_SYSTEM_NAME}" MATCHES "Windows")
|
||||||
target_link_options(SRB2SDL2 PRIVATE "-Wl,--disable-dynamicbase")
|
target_link_options(SRB2SDL2 PRIVATE "-Wl,--disable-dynamicbase")
|
||||||
if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}" AND NOT "${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}")
|
if("${SRB2_CONFIG_STATIC_STDLIB}")
|
||||||
# On MinGW with internal libraries, link the standard library statically
|
# On MinGW with internal libraries, link the standard library statically
|
||||||
target_link_options(SRB2SDL2 PRIVATE "-static")
|
target_link_options(SRB2SDL2 PRIVATE "-static")
|
||||||
endif()
|
endif()
|
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||||
|
target_link_options(SRB2SDL2 PRIVATE "-Wl,--large-address-aware")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_compile_features(SRB2SDL2 PRIVATE c_std_11 cxx_std_17)
|
target_compile_features(SRB2SDL2 PRIVATE c_std_11 cxx_std_17)
|
||||||
|
@ -182,12 +185,7 @@ if("${SRB2_CONFIG_USE_GME}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(SRB2SDL2 PRIVATE openmpt)
|
target_compile_definitions(SRB2SDL2 PRIVATE -D_LARGEFILE64_SOURCE)
|
||||||
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_OPENMPT)
|
|
||||||
|
|
||||||
target_link_libraries(SRB2SDL2 PRIVATE ZLIB::ZLIB PNG::PNG CURL::libcurl)
|
|
||||||
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_ZLIB -DHAVE_PNG -DHAVE_CURL -D_LARGEFILE64_SOURCE)
|
|
||||||
target_sources(SRB2SDL2 PRIVATE apng.c)
|
|
||||||
|
|
||||||
set(SRB2_HAVE_THREADS ON)
|
set(SRB2_HAVE_THREADS ON)
|
||||||
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_THREADS)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_THREADS)
|
||||||
|
@ -403,8 +401,66 @@ if(SRB2_CONFIG_PROFILEMODE AND "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(sdl)
|
add_subdirectory(sdl)
|
||||||
if(SRB2_CONFIG_ENABLE_TESTS)
|
|
||||||
add_subdirectory(tests)
|
if(TARGET ZLIB::ZLIB)
|
||||||
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_ZLIB)
|
||||||
|
message(STATUS "Zlib Found")
|
||||||
|
else()
|
||||||
|
message(STATUS "No Zlib Found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET PNG::PNG)
|
||||||
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_PNG)
|
||||||
|
target_sources(SRB2SDL2 PRIVATE apng.c ${libapng_HEADER})
|
||||||
|
target_include_directories(SRB2SDL2 PRIVATE ${libapng_INCLUDE_DIRS} ${libpng_BINARY_DIR})
|
||||||
|
#message(STATUS "libpng inc DIRS at ${libapng_INCLUDE_DIRS}")
|
||||||
|
#message(STATUS "libpng bin DIRS at ${libpng_BINARY_DIR}")
|
||||||
|
#message(STATUS "png.h at ${libapng_HEADER}")
|
||||||
|
message(STATUS "libpng Found")
|
||||||
|
else()
|
||||||
|
message(STATUS "No libpng Found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET PNG::PNG AND TARGET ZLIB::ZLIB)
|
||||||
|
#libpng links zlib too?
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE PNG::PNG)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT TARGET PNG::PNG AND TARGET ZLIB::ZLIB)
|
||||||
|
#got no libpng? we need zlib
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE ZLIB::ZLIB)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET gme::gme)
|
||||||
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_GME)
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE gme::gme)
|
||||||
|
message(STATUS "libgme Found")
|
||||||
|
else()
|
||||||
|
message(STATUS "No libgme Found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET libopenmpt::libopenmpt)
|
||||||
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_OPENMPT)
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE libopenmpt::libopenmpt)
|
||||||
|
message(STATUS "libopenmpt Found")
|
||||||
|
else()
|
||||||
|
message(STATUS "No libopenmpt Found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET CURL::libcurl)
|
||||||
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_CURL)
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE CURL::libcurl)
|
||||||
|
message(STATUS "libcurl Found")
|
||||||
|
else()
|
||||||
|
message(STATUS "No libcurl Found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET miniupnpc::miniupnpc)
|
||||||
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MINIUPNPC)
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE miniupnpc::miniupnpc)
|
||||||
|
message(STATUS "miniupnpc Found")
|
||||||
|
else()
|
||||||
|
message(STATUS "No miniupnpc Found")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# strip debug symbols into separate file when using gcc.
|
# strip debug symbols into separate file when using gcc.
|
||||||
|
|
|
@ -59,24 +59,19 @@ static inline int lib_freeslot(lua_State *L)
|
||||||
}
|
}
|
||||||
else if (fastcmp(type, "SPR"))
|
else if (fastcmp(type, "SPR"))
|
||||||
{
|
{
|
||||||
char wad;
|
|
||||||
spritenum_t j;
|
spritenum_t j;
|
||||||
lua_getfield(L, LUA_REGISTRYINDEX, "WAD");
|
|
||||||
wad = (char)lua_tointeger(L, -1);
|
if (strlen(word) > MAXSPRITENAME)
|
||||||
lua_pop(L, 1);
|
return luaL_error(L, "Sprite name is longer than %d characters\n", MAXSPRITENAME);
|
||||||
|
|
||||||
for (j = SPR_FIRSTFREESLOT; j <= SPR_LASTFREESLOT; j++)
|
for (j = SPR_FIRSTFREESLOT; j <= SPR_LASTFREESLOT; j++)
|
||||||
{
|
{
|
||||||
if (used_spr[(j-SPR_FIRSTFREESLOT)/8] & (1<<(j%8)))
|
if (in_bit_array(used_spr, j - SPR_FIRSTFREESLOT))
|
||||||
{
|
|
||||||
if (!sprnames[j][4] && memcmp(sprnames[j],word,4)==0)
|
|
||||||
sprnames[j][4] = wad;
|
|
||||||
continue; // Already allocated, next.
|
continue; // Already allocated, next.
|
||||||
}
|
|
||||||
// Found a free slot!
|
// Found a free slot!
|
||||||
CONS_Printf("Sprite SPR_%s allocated.\n",word);
|
CONS_Printf("Sprite SPR_%s allocated.\n",word);
|
||||||
strncpy(sprnames[j],word,4);
|
strcpy(sprnames[j], word);
|
||||||
//sprnames[j][4] = 0;
|
set_bit_array(used_spr, j - SPR_FIRSTFREESLOT); // Okay, this sprite slot has been named now.
|
||||||
used_spr[(j-SPR_FIRSTFREESLOT)/8] |= 1<<(j%8); // Okay, this sprite slot has been named now.
|
|
||||||
// Lua needs to update the value in _G if it exists
|
// Lua needs to update the value in _G if it exists
|
||||||
LUA_UpdateSprName(word, j);
|
LUA_UpdateSprName(word, j);
|
||||||
lua_pushinteger(L, j);
|
lua_pushinteger(L, j);
|
||||||
|
@ -455,17 +450,19 @@ static int ScanConstants(lua_State *L, boolean mathlib, const char *word)
|
||||||
}
|
}
|
||||||
else if (fastncmp("SPR_",word,4)) {
|
else if (fastncmp("SPR_",word,4)) {
|
||||||
p = word+4;
|
p = word+4;
|
||||||
for (i = 0; i < NUMSPRITES; i++)
|
i = R_GetSpriteNumByName(p);
|
||||||
if (!sprnames[i][4] && fastncmp(p,sprnames[i],4)) {
|
if (i != NUMSPRITES)
|
||||||
// updating overridden sprnames is not implemented for soc parser,
|
{
|
||||||
// so don't use cache
|
// updating overridden sprnames is not implemented for soc parser,
|
||||||
if (mathlib)
|
// so don't use cache
|
||||||
lua_pushinteger(L, i);
|
if (mathlib)
|
||||||
else
|
lua_pushinteger(L, i);
|
||||||
CacheAndPushConstant(L, word, i);
|
else
|
||||||
return 1;
|
CacheAndPushConstant(L, word, i);
|
||||||
}
|
return 1;
|
||||||
if (mathlib) return luaL_error(L, "sprite '%s' could not be found.\n", word);
|
}
|
||||||
|
else if (mathlib)
|
||||||
|
return luaL_error(L, "sprite '%s' could not be found.\n", word);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (fastncmp("SPR2_",word,5)) {
|
else if (fastncmp("SPR2_",word,5)) {
|
||||||
|
@ -738,18 +735,18 @@ static inline int lib_getenum(lua_State *L)
|
||||||
// If a sprname has been "cached" to _G, update it to a new value.
|
// If a sprname has been "cached" to _G, update it to a new value.
|
||||||
void LUA_UpdateSprName(const char *name, lua_Integer value)
|
void LUA_UpdateSprName(const char *name, lua_Integer value)
|
||||||
{
|
{
|
||||||
char fullname[9] = "SPR_XXXX";
|
char fullname[4 + MAXSPRITENAME + 1] = "SPR_";
|
||||||
|
|
||||||
if (!gL)
|
if (!gL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
strncpy(&fullname[4], name, 4);
|
strcpy(&fullname[4], name);
|
||||||
lua_pushstring(gL, fullname);
|
lua_pushstring(gL, fullname);
|
||||||
lua_rawget(gL, LUA_GLOBALSINDEX);
|
lua_rawget(gL, LUA_GLOBALSINDEX);
|
||||||
|
|
||||||
if (!lua_isnil(gL, -1))
|
if (!lua_isnil(gL, -1))
|
||||||
{
|
{
|
||||||
lua_pushstring(gL, name);
|
lua_pushstring(gL, fullname);
|
||||||
lua_pushinteger(gL, value);
|
lua_pushinteger(gL, value);
|
||||||
lua_rawset(gL, LUA_GLOBALSINDEX);
|
lua_rawset(gL, LUA_GLOBALSINDEX);
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,18 +440,16 @@ void readfreeslots(MYFILE *f)
|
||||||
S_AddSoundFx(word, false, 0, false);
|
S_AddSoundFx(word, false, 0, false);
|
||||||
else if (fastcmp(type, "SPR"))
|
else if (fastcmp(type, "SPR"))
|
||||||
{
|
{
|
||||||
|
if (strlen(word) > MAXSPRITENAME)
|
||||||
|
I_Error("Sprite name is longer than %d characters\n", MAXSPRITENAME);
|
||||||
|
|
||||||
for (i = SPR_FIRSTFREESLOT; i <= SPR_LASTFREESLOT; i++)
|
for (i = SPR_FIRSTFREESLOT; i <= SPR_LASTFREESLOT; i++)
|
||||||
{
|
{
|
||||||
if (used_spr[(i-SPR_FIRSTFREESLOT)/8] & (1<<(i%8)))
|
if (in_bit_array(used_spr, i - SPR_FIRSTFREESLOT))
|
||||||
{
|
|
||||||
if (!sprnames[i][4] && memcmp(sprnames[i],word,4)==0)
|
|
||||||
sprnames[i][4] = (char)f->wad;
|
|
||||||
continue; // Already allocated, next.
|
continue; // Already allocated, next.
|
||||||
}
|
|
||||||
// Found a free slot!
|
// Found a free slot!
|
||||||
strncpy(sprnames[i],word,4);
|
strcpy(sprnames[i], word);
|
||||||
//sprnames[i][4] = 0;
|
set_bit_array(used_spr, i - SPR_FIRSTFREESLOT); // Okay, this sprite slot has been named now.
|
||||||
used_spr[(i-SPR_FIRSTFREESLOT)/8] |= 1<<(i%8); // Okay, this sprite slot has been named now.
|
|
||||||
// Lua needs to update the value in _G if it exists
|
// Lua needs to update the value in _G if it exists
|
||||||
LUA_UpdateSprName(word, i);
|
LUA_UpdateSprName(word, i);
|
||||||
break;
|
break;
|
||||||
|
@ -4182,9 +4180,9 @@ spritenum_t get_sprite(const char *word)
|
||||||
return atoi(word);
|
return atoi(word);
|
||||||
if (fastncmp("SPR_",word,4))
|
if (fastncmp("SPR_",word,4))
|
||||||
word += 4; // take off the SPR_
|
word += 4; // take off the SPR_
|
||||||
for (i = 0; i < NUMSPRITES; i++)
|
i = R_GetSpriteNumByName(word);
|
||||||
if (!sprnames[i][4] && memcmp(word,sprnames[i],4)==0)
|
if (i != NUMSPRITES)
|
||||||
return i;
|
return i;
|
||||||
deh_warning("Couldn't find sprite named 'SPR_%s'",word);
|
deh_warning("Couldn't find sprite named 'SPR_%s'",word);
|
||||||
return SPR_NULL;
|
return SPR_NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
char *FREE_STATES[NUMSTATEFREESLOTS];
|
char *FREE_STATES[NUMSTATEFREESLOTS];
|
||||||
char *FREE_MOBJS[NUMMOBJFREESLOTS];
|
char *FREE_MOBJS[NUMMOBJFREESLOTS];
|
||||||
char *FREE_SKINCOLORS[NUMCOLORFREESLOTS];
|
char *FREE_SKINCOLORS[NUMCOLORFREESLOTS];
|
||||||
UINT8 used_spr[(NUMSPRITEFREESLOTS / 8) + 1]; // Bitwise flag for sprite freeslot in use! I would use ceil() here if I could, but it only saves 1 byte of memory anyway.
|
bitarray_t used_spr[BIT_ARRAY_SIZE(NUMSPRITEFREESLOTS)]; // Sprite freeslots in use
|
||||||
|
|
||||||
const char NIGHTSGRADE_LIST[] = {
|
const char NIGHTSGRADE_LIST[] = {
|
||||||
'F', // GRADE_F
|
'F', // GRADE_F
|
||||||
|
|
|
@ -23,13 +23,13 @@
|
||||||
extern char *FREE_STATES[NUMSTATEFREESLOTS];
|
extern char *FREE_STATES[NUMSTATEFREESLOTS];
|
||||||
extern char *FREE_MOBJS[NUMMOBJFREESLOTS];
|
extern char *FREE_MOBJS[NUMMOBJFREESLOTS];
|
||||||
extern char *FREE_SKINCOLORS[NUMCOLORFREESLOTS];
|
extern char *FREE_SKINCOLORS[NUMCOLORFREESLOTS];
|
||||||
extern UINT8 used_spr[(NUMSPRITEFREESLOTS / 8) + 1]; // Bitwise flag for sprite freeslot in use! I would use ceil() here if I could, but it only saves 1 byte of memory anyway.
|
extern bitarray_t used_spr[BIT_ARRAY_SIZE(NUMSPRITEFREESLOTS)]; // Sprite freeslots in use
|
||||||
|
|
||||||
#define initfreeslots() {\
|
#define initfreeslots() {\
|
||||||
memset(FREE_STATES,0,sizeof(char *) * NUMSTATEFREESLOTS);\
|
memset(FREE_STATES, 0, sizeof(FREE_STATES));\
|
||||||
memset(FREE_MOBJS,0,sizeof(char *) * NUMMOBJFREESLOTS);\
|
memset(FREE_MOBJS, 0, sizeof(FREE_MOBJS));\
|
||||||
memset(FREE_SKINCOLORS,0,sizeof(char *) * NUMCOLORFREESLOTS);\
|
memset(FREE_SKINCOLORS, 0, sizeof(FREE_SKINCOLORS));\
|
||||||
memset(used_spr,0,sizeof(UINT8) * ((NUMSPRITEFREESLOTS / 8) + 1));\
|
memset(used_spr, 0, sizeof(used_spr));\
|
||||||
memset(actionsoverridden, LUA_REFNIL, sizeof(actionsoverridden));\
|
memset(actionsoverridden, LUA_REFNIL, sizeof(actionsoverridden));\
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1185,7 +1185,7 @@ boolean preparefilemenu(boolean samedepth)
|
||||||
{
|
{
|
||||||
if (!filenamebuf[i][0])
|
if (!filenamebuf[i][0])
|
||||||
{
|
{
|
||||||
strncpy(filenamebuf[i], wadfiles[i]->filename, MAX_WADPATH);
|
strncpy(filenamebuf[i], wadfiles[i]->filename, MAX_WADPATH-1);
|
||||||
filenamebuf[i][MAX_WADPATH - 1] = '\0';
|
filenamebuf[i][MAX_WADPATH - 1] = '\0';
|
||||||
nameonly(filenamebuf[i]);
|
nameonly(filenamebuf[i]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -571,19 +571,15 @@ void HWR_LoadModels(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add sprite models.
|
// Add sprite models.
|
||||||
// Must be 4 characters long exactly. Otherwise, it's not a sprite name.
|
for (i = 0; i < numsprites; i++)
|
||||||
if (len == 4)
|
|
||||||
{
|
{
|
||||||
for (i = 0; i < numsprites; i++)
|
if (stricmp(name, sprnames[i]) == 0)
|
||||||
{
|
{
|
||||||
if (stricmp(name, sprnames[i]) == 0)
|
md2_models[i].scale = scale;
|
||||||
{
|
md2_models[i].offset = offset;
|
||||||
md2_models[i].scale = scale;
|
md2_models[i].found = true;
|
||||||
md2_models[i].offset = offset;
|
strcpy(md2_models[i].filename, filename);
|
||||||
md2_models[i].found = true;
|
goto modelfound;
|
||||||
strcpy(md2_models[i].filename, filename);
|
|
||||||
goto modelfound;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,9 +26,10 @@
|
||||||
#include "hardware/hw_light.h"
|
#include "hardware/hw_light.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Hey, moron! If you change this table, don't forget about the sprite enum in info.h and the sprite lights in hw_light.c!
|
// Hey, moron! If you change this table, don't forget about the sprite enum in info.h and the sprite lights in hw_light.c!
|
||||||
// For the sake of constant merge conflicts, let's spread this out
|
// For the sake of constant merge conflicts, let's spread this out
|
||||||
char sprnames[NUMSPRITES + 1][5] =
|
char sprnames[NUMSPRITES + 1][MAXSPRITENAME + 1] =
|
||||||
{
|
{
|
||||||
"NULL", // invisible object
|
"NULL", // invisible object
|
||||||
"UNKN",
|
"UNKN",
|
||||||
|
@ -525,7 +526,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"GWLR",
|
"GWLR",
|
||||||
};
|
};
|
||||||
|
|
||||||
char spr2names[NUMPLAYERSPRITES][5] =
|
char spr2names[NUMPLAYERSPRITES][MAXSPRITENAME + 1] =
|
||||||
{
|
{
|
||||||
"STND",
|
"STND",
|
||||||
"WAIT",
|
"WAIT",
|
||||||
|
|
|
@ -575,6 +575,7 @@ extern int actionsoverridden[NUMACTIONS][MAX_ACTION_RECURSION];
|
||||||
#define NUMMOBJFREESLOTS 1024
|
#define NUMMOBJFREESLOTS 1024
|
||||||
#define NUMSPRITEFREESLOTS NUMMOBJFREESLOTS
|
#define NUMSPRITEFREESLOTS NUMMOBJFREESLOTS
|
||||||
#define NUMSTATEFREESLOTS (NUMMOBJFREESLOTS*8)
|
#define NUMSTATEFREESLOTS (NUMMOBJFREESLOTS*8)
|
||||||
|
#define MAXSPRITENAME 64
|
||||||
|
|
||||||
// Hey, moron! If you change this table, don't forget about sprnames in info.c and the sprite lights in hw_light.c!
|
// Hey, moron! If you change this table, don't forget about sprnames in info.c and the sprite lights in hw_light.c!
|
||||||
typedef enum sprite
|
typedef enum sprite
|
||||||
|
@ -4383,8 +4384,8 @@ typedef struct
|
||||||
} state_t;
|
} state_t;
|
||||||
|
|
||||||
extern state_t states[NUMSTATES];
|
extern state_t states[NUMSTATES];
|
||||||
extern char sprnames[NUMSPRITES + 1][5];
|
extern char sprnames[NUMSPRITES + 1][MAXSPRITENAME + 1];
|
||||||
extern char spr2names[NUMPLAYERSPRITES][5];
|
extern char spr2names[NUMPLAYERSPRITES][MAXSPRITENAME + 1];
|
||||||
extern playersprite_t spr2defaults[NUMPLAYERSPRITES];
|
extern playersprite_t spr2defaults[NUMPLAYERSPRITES];
|
||||||
extern state_t *astate;
|
extern state_t *astate;
|
||||||
extern playersprite_t free_spr2;
|
extern playersprite_t free_spr2;
|
||||||
|
|
|
@ -3030,6 +3030,9 @@ static int lib_rFrame2Char(lua_State *L)
|
||||||
//HUDSAFE
|
//HUDSAFE
|
||||||
|
|
||||||
c[0] = R_Frame2Char(ch);
|
c[0] = R_Frame2Char(ch);
|
||||||
|
if (c[0] == '\xFF')
|
||||||
|
return luaL_error(L, "frame %u cannot be represented by a character", ch);
|
||||||
|
|
||||||
c[1] = 0;
|
c[1] = 0;
|
||||||
|
|
||||||
lua_pushstring(L, c);
|
lua_pushstring(L, c);
|
||||||
|
|
|
@ -492,9 +492,7 @@ static int libd_getSpritePatch(lua_State *L)
|
||||||
else if (lua_isstring(L, 1)) // sprite prefix name given, e.g. "THOK"
|
else if (lua_isstring(L, 1)) // sprite prefix name given, e.g. "THOK"
|
||||||
{
|
{
|
||||||
const char *name = lua_tostring(L, 1);
|
const char *name = lua_tostring(L, 1);
|
||||||
for (i = 0; i < NUMSPRITES; i++)
|
i = R_GetSpriteNumByName(name);
|
||||||
if (fastcmp(name, sprnames[i]))
|
|
||||||
break;
|
|
||||||
if (i >= NUMSPRITES)
|
if (i >= NUMSPRITES)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,12 +88,12 @@ static int lib_getSprname(lua_State *L)
|
||||||
else if (lua_isstring(L, 1))
|
else if (lua_isstring(L, 1))
|
||||||
{
|
{
|
||||||
const char *name = lua_tostring(L, 1);
|
const char *name = lua_tostring(L, 1);
|
||||||
for (i = 0; i < NUMSPRITES; i++)
|
i = R_GetSpriteNumByName(name);
|
||||||
if (fastcmp(name, sprnames[i]))
|
if (i != NUMSPRITES)
|
||||||
{
|
{
|
||||||
lua_pushinteger(L, i);
|
lua_pushinteger(L, i);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -245,22 +245,15 @@ static int lib_getSpriteInfo(lua_State *L)
|
||||||
if (lua_isstring(L, 1))
|
if (lua_isstring(L, 1))
|
||||||
{
|
{
|
||||||
const char *name = lua_tostring(L, 1);
|
const char *name = lua_tostring(L, 1);
|
||||||
INT32 spr;
|
INT32 spr = R_GetSpriteNumByName(name);
|
||||||
for (spr = 0; spr < NUMSPRITES; spr++)
|
if (spr == NUMSPRITES)
|
||||||
{
|
|
||||||
if (fastcmp(name, sprnames[spr]))
|
|
||||||
{
|
|
||||||
i = spr;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i == NUMSPRITES)
|
|
||||||
{
|
{
|
||||||
char *check;
|
char *check;
|
||||||
i = strtol(name, &check, 10);
|
i = strtol(name, &check, 10);
|
||||||
if (check == name || *check != '\0')
|
if (check == name || *check != '\0')
|
||||||
return luaL_error(L, "unknown sprite name %s", name);
|
return luaL_error(L, "unknown sprite name %s", name);
|
||||||
}
|
}
|
||||||
|
i = spr;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
i = luaL_checkinteger(L, 1);
|
i = luaL_checkinteger(L, 1);
|
||||||
|
@ -359,8 +352,8 @@ static int PopPivotTable(spriteinfo_t *info, lua_State *L, int stk)
|
||||||
default:
|
default:
|
||||||
TYPEERROR("pivot frame", LUA_TNUMBER, lua_type(L, stk+1));
|
TYPEERROR("pivot frame", LUA_TNUMBER, lua_type(L, stk+1));
|
||||||
}
|
}
|
||||||
if ((idx < 0) || (idx >= 64))
|
if ((idx < 0) || (idx >= MAXFRAMENUM))
|
||||||
return luaL_error(L, "pivot frame %d out of range (0 - %d)", idx, 63);
|
return luaL_error(L, "pivot frame %d out of range (0 - %d)", idx, MAXFRAMENUM - 1);
|
||||||
// the values in pivot[] are also tables
|
// the values in pivot[] are also tables
|
||||||
if (PopPivotSubTable(info->pivot, L, stk+2, idx))
|
if (PopPivotSubTable(info->pivot, L, stk+2, idx))
|
||||||
info->available = true;
|
info->available = true;
|
||||||
|
@ -555,7 +548,7 @@ static int pivotlist_set(lua_State *L)
|
||||||
|
|
||||||
static int pivotlist_num(lua_State *L)
|
static int pivotlist_num(lua_State *L)
|
||||||
{
|
{
|
||||||
lua_pushinteger(L, 64);
|
lua_pushinteger(L, MAXFRAMENUM);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -622,9 +622,6 @@ static inline boolean LUA_LoadFile(MYFILE *f, char *name)
|
||||||
if (!gL) // Lua needs to be initialized
|
if (!gL) // Lua needs to be initialized
|
||||||
LUA_ClearState();
|
LUA_ClearState();
|
||||||
|
|
||||||
lua_pushinteger(gL, f->wad);
|
|
||||||
lua_setfield(gL, LUA_REGISTRYINDEX, "WAD");
|
|
||||||
|
|
||||||
lua_pushcfunction(gL, LUA_GetErrorMessage);
|
lua_pushcfunction(gL, LUA_GetErrorMessage);
|
||||||
errorhandlerindex = lua_gettop(gL);
|
errorhandlerindex = lua_gettop(gL);
|
||||||
|
|
||||||
|
|
|
@ -114,16 +114,10 @@ typedef union
|
||||||
} mysockaddr_t;
|
} mysockaddr_t;
|
||||||
|
|
||||||
#ifdef HAVE_MINIUPNPC
|
#ifdef HAVE_MINIUPNPC
|
||||||
#ifdef MINIUPNP_STATICLIB
|
#include "miniupnpc/miniwget.h"
|
||||||
#include "miniwget.h"
|
#include "miniupnpc/miniupnpc.h"
|
||||||
#include "miniupnpc.h"
|
#include "miniupnpc/upnpcommands.h"
|
||||||
#include "upnpcommands.h"
|
static boolean UPNP_support = true;
|
||||||
#else
|
|
||||||
#include "miniupnpc/miniwget.h"
|
|
||||||
#include "miniupnpc/miniupnpc.h"
|
|
||||||
#include "miniupnpc/upnpcommands.h"
|
|
||||||
#endif
|
|
||||||
static boolean UPNP_support = true;
|
|
||||||
#endif // HAVE_MINIUPNC
|
#endif // HAVE_MINIUPNC
|
||||||
|
|
||||||
#define MAXBANS 100
|
#define MAXBANS 100
|
||||||
|
|
|
@ -1365,7 +1365,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MT_NIGHTSEXTRATIME:
|
case MT_NIGHTSEXTRATIME:
|
||||||
if ((player->bot && player->bot != BOT_MPAI) || !(player->powers[pw_carry] == CR_NIGHTSMODE))
|
if ((player->bot && player->bot != BOT_MPAI) || !(player->powers[pw_carry] == CR_NIGHTSMODE || (G_IsSpecialStage(gamemap) && !(maptol & TOL_NIGHTS))))
|
||||||
return;
|
return;
|
||||||
if (!G_IsSpecialStage(gamemap))
|
if (!G_IsSpecialStage(gamemap))
|
||||||
{
|
{
|
||||||
|
@ -1377,7 +1377,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
if (playeringame[i] && players[i].powers[pw_carry] == CR_NIGHTSMODE)
|
if (playeringame[i] && (player->powers[pw_carry] == CR_NIGHTSMODE || (G_IsSpecialStage(gamemap) && !(maptol & TOL_NIGHTS))))
|
||||||
{
|
{
|
||||||
players[i].nightstime += special->info->speed;
|
players[i].nightstime += special->info->speed;
|
||||||
players[i].startedtime += special->info->speed;
|
players[i].startedtime += special->info->speed;
|
||||||
|
@ -3640,7 +3640,7 @@ void P_SpecialStageDamage(player_t *player, mobj_t *inflictor, mobj_t *source)
|
||||||
if (player->nightstime > 5*TICRATE)
|
if (player->nightstime > 5*TICRATE)
|
||||||
player->nightstime -= 5*TICRATE;
|
player->nightstime -= 5*TICRATE;
|
||||||
else
|
else
|
||||||
player->nightstime = 0;
|
player->nightstime = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
P_DoPlayerPain(player, inflictor, source);
|
P_DoPlayerPain(player, inflictor, source);
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// \brief Frame flags: only the frame number - 0 to 256 (Frames from 0 to 63, Sprite2 number uses 0 to 127 plus FF_SPR2SUPER)
|
/// \brief Frame flags: only the frame number - 0 to 256 (Frames from 0 to 255, Sprite2 number uses 0 to 127 plus FF_SPR2SUPER)
|
||||||
#define FF_FRAMEMASK 0xff
|
#define FF_FRAMEMASK 0xff
|
||||||
|
|
||||||
/// \brief Frame flags - SPR2: Super sprite2
|
/// \brief Frame flags - SPR2: Super sprite2
|
||||||
|
|
16
src/p_tick.c
16
src/p_tick.c
|
@ -564,6 +564,12 @@ void P_DoTeamscrambling(void)
|
||||||
CV_SetValue(&cv_teamscramble, 0);
|
CV_SetValue(&cv_teamscramble, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// P_DoSpecialStageStuff()
|
||||||
|
//
|
||||||
|
// For old-style (non-NiGHTS) special stages
|
||||||
|
//
|
||||||
static inline void P_DoSpecialStageStuff(void)
|
static inline void P_DoSpecialStageStuff(void)
|
||||||
{
|
{
|
||||||
boolean stillalive = false;
|
boolean stillalive = false;
|
||||||
|
@ -601,7 +607,15 @@ static inline void P_DoSpecialStageStuff(void)
|
||||||
if (--players[i].nightstime > 6)
|
if (--players[i].nightstime > 6)
|
||||||
{
|
{
|
||||||
if (P_IsLocalPlayer(&players[i]) && oldnightstime > 10*TICRATE && players[i].nightstime <= 10*TICRATE)
|
if (P_IsLocalPlayer(&players[i]) && oldnightstime > 10*TICRATE && players[i].nightstime <= 10*TICRATE)
|
||||||
S_ChangeMusicInternal("_drown", false);
|
{
|
||||||
|
if (mapheaderinfo[gamemap-1]->levelflags & LF_MIXNIGHTSCOUNTDOWN)
|
||||||
|
{
|
||||||
|
S_FadeMusic(0, 10*MUSICRATE);
|
||||||
|
S_StartSound(NULL, sfx_timeup); // that creepy "out of time" music from NiGHTS.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
S_ChangeMusicInternal("_drown", false);
|
||||||
|
}
|
||||||
stillalive = true;
|
stillalive = true;
|
||||||
}
|
}
|
||||||
else if (!players[i].exiting)
|
else if (!players[i].exiting)
|
||||||
|
|
|
@ -976,6 +976,8 @@ typedef struct
|
||||||
#endif
|
#endif
|
||||||
} spriteframe_t;
|
} spriteframe_t;
|
||||||
|
|
||||||
|
#define MAXFRAMENUM 256
|
||||||
|
|
||||||
//
|
//
|
||||||
// A sprite definition: a number of animation frames.
|
// A sprite definition: a number of animation frames.
|
||||||
//
|
//
|
||||||
|
|
|
@ -1570,7 +1570,7 @@ static void R_ParseSpriteInfo(boolean spr2)
|
||||||
spriteinfo_t *info;
|
spriteinfo_t *info;
|
||||||
char *sprinfoToken;
|
char *sprinfoToken;
|
||||||
size_t sprinfoTokenLength;
|
size_t sprinfoTokenLength;
|
||||||
char newSpriteName[5]; // no longer dynamically allocated
|
char newSpriteName[MAXSPRITENAME + 1]; // no longer dynamically allocated
|
||||||
spritenum_t sprnum = NUMSPRITES;
|
spritenum_t sprnum = NUMSPRITES;
|
||||||
playersprite_t spr2num = NUMPLAYERSPRITES;
|
playersprite_t spr2num = NUMPLAYERSPRITES;
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
@ -1584,31 +1584,17 @@ static void R_ParseSpriteInfo(boolean spr2)
|
||||||
I_Error("Error parsing SPRTINFO lump: Unexpected end of file where sprite name should be");
|
I_Error("Error parsing SPRTINFO lump: Unexpected end of file where sprite name should be");
|
||||||
}
|
}
|
||||||
sprinfoTokenLength = strlen(sprinfoToken);
|
sprinfoTokenLength = strlen(sprinfoToken);
|
||||||
if (sprinfoTokenLength != 4)
|
if (sprinfoTokenLength > MAXSPRITENAME)
|
||||||
{
|
I_Error("Error parsing SPRTINFO lump: Sprite name \"%s\" is longer than %d characters", sprinfoToken, MAXSPRITENAME);
|
||||||
I_Error("Error parsing SPRTINFO lump: Sprite name \"%s\" isn't 4 characters long",sprinfoToken);
|
strcpy(newSpriteName, sprinfoToken);
|
||||||
}
|
strupr(newSpriteName); // Just do this now so we don't have to worry about it
|
||||||
else
|
|
||||||
{
|
|
||||||
memset(&newSpriteName, 0, 5);
|
|
||||||
M_Memcpy(newSpriteName, sprinfoToken, sprinfoTokenLength);
|
|
||||||
// ^^ we've confirmed that the token is == 4 characters so it will never overflow a 5 byte char buffer
|
|
||||||
strupr(newSpriteName); // Just do this now so we don't have to worry about it
|
|
||||||
}
|
|
||||||
Z_Free(sprinfoToken);
|
Z_Free(sprinfoToken);
|
||||||
|
|
||||||
if (!spr2)
|
if (!spr2)
|
||||||
{
|
{
|
||||||
for (i = 0; i <= NUMSPRITES; i++)
|
sprnum = R_GetSpriteNumByName(newSpriteName);
|
||||||
{
|
if (sprnum == NUMSPRITES)
|
||||||
if (i == NUMSPRITES)
|
I_Error("Error parsing SPRTINFO lump: Unknown sprite name \"%s\"", newSpriteName);
|
||||||
I_Error("Error parsing SPRTINFO lump: Unknown sprite name \"%s\"", newSpriteName);
|
|
||||||
if (!memcmp(newSpriteName,sprnames[i],4))
|
|
||||||
{
|
|
||||||
sprnum = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -100,7 +100,7 @@ typedef struct
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
spriteframepivot_t pivot[64];
|
spriteframepivot_t pivot[MAXFRAMENUM];
|
||||||
boolean available;
|
boolean available;
|
||||||
} spriteinfo_t;
|
} spriteinfo_t;
|
||||||
|
|
||||||
|
|
|
@ -625,7 +625,7 @@ static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, ski
|
||||||
newlastlump++;
|
newlastlump++;
|
||||||
// load all sprite sets we are aware of... for super!
|
// load all sprite sets we are aware of... for super!
|
||||||
for (sprite2 = start_spr2; sprite2 < free_spr2; sprite2++)
|
for (sprite2 = start_spr2; sprite2 < free_spr2; sprite2++)
|
||||||
R_AddSingleSpriteDef(spr2names[sprite2], &skin->super.sprites[sprite2], wadnum, newlastlump, *lastlump);
|
R_AddSingleSpriteDef(spr2names[sprite2], &skin->super.sprites[sprite2], wadnum, newlastlump, *lastlump, false);
|
||||||
|
|
||||||
newlastlump--;
|
newlastlump--;
|
||||||
*lastlump = newlastlump; // okay, make the normal sprite set loading end there
|
*lastlump = newlastlump; // okay, make the normal sprite set loading end there
|
||||||
|
@ -633,7 +633,7 @@ static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, ski
|
||||||
|
|
||||||
// load all sprite sets we are aware of... for normal stuff.
|
// load all sprite sets we are aware of... for normal stuff.
|
||||||
for (sprite2 = start_spr2; sprite2 < free_spr2; sprite2++)
|
for (sprite2 = start_spr2; sprite2 < free_spr2; sprite2++)
|
||||||
R_AddSingleSpriteDef(spr2names[sprite2], &skin->sprites[sprite2], wadnum, *lump, *lastlump);
|
R_AddSingleSpriteDef(spr2names[sprite2], &skin->sprites[sprite2], wadnum, *lump, *lastlump, false);
|
||||||
|
|
||||||
if (skin->sprites[0].numframes == 0)
|
if (skin->sprites[0].numframes == 0)
|
||||||
CONS_Alert(CONS_ERROR, M_GetText("No frames found for sprite SPR2_%s\n"), spr2names[0]);
|
CONS_Alert(CONS_ERROR, M_GetText("No frames found for sprite SPR2_%s\n"), spr2names[0]);
|
||||||
|
|
385
src/r_things.c
385
src/r_things.c
|
@ -77,7 +77,7 @@ spriteinfo_t spriteinfo[NUMSPRITES];
|
||||||
spritedef_t *sprites;
|
spritedef_t *sprites;
|
||||||
size_t numsprites;
|
size_t numsprites;
|
||||||
|
|
||||||
static spriteframe_t sprtemp[64];
|
static spriteframe_t sprtemp[MAXFRAMENUM];
|
||||||
static size_t maxframe;
|
static size_t maxframe;
|
||||||
static const char *spritename;
|
static const char *spritename;
|
||||||
|
|
||||||
|
@ -116,6 +116,14 @@ static INT32 drawsegs_xrange_count = 0;
|
||||||
//
|
//
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|
||||||
|
spritenum_t R_GetSpriteNumByName(const char *name)
|
||||||
|
{
|
||||||
|
for (spritenum_t i = 0; i < NUMSPRITES; i++)
|
||||||
|
if (!strcmp(name, sprnames[i]))
|
||||||
|
return i;
|
||||||
|
return NUMSPRITES;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -128,10 +136,14 @@ static void R_InstallSpriteLump(UINT16 wad, // graphics patch
|
||||||
{
|
{
|
||||||
char cn = R_Frame2Char(frame), cr = R_Rotation2Char(rotation); // for debugging
|
char cn = R_Frame2Char(frame), cr = R_Rotation2Char(rotation); // for debugging
|
||||||
|
|
||||||
|
char framedescription[256];
|
||||||
|
if (cn != '\xFF')
|
||||||
|
sprintf(framedescription, "%s frame %d (%c)", spritename, frame, cn);
|
||||||
|
else
|
||||||
|
sprintf(framedescription, "%s frame %d", spritename, frame);
|
||||||
|
|
||||||
INT32 r;
|
INT32 r;
|
||||||
lumpnum_t lumppat = wad;
|
lumpnum_t lumppat = (wad << 16) + lump;
|
||||||
lumppat <<= 16;
|
|
||||||
lumppat += lump;
|
|
||||||
|
|
||||||
if (maxframe ==(size_t)-1 || frame > maxframe)
|
if (maxframe ==(size_t)-1 || frame > maxframe)
|
||||||
maxframe = frame;
|
maxframe = frame;
|
||||||
|
@ -147,9 +159,9 @@ static void R_InstallSpriteLump(UINT16 wad, // graphics patch
|
||||||
{
|
{
|
||||||
// the lump should be used for all rotations
|
// the lump should be used for all rotations
|
||||||
if (sprtemp[frame].rotate == SRF_SINGLE)
|
if (sprtemp[frame].rotate == SRF_SINGLE)
|
||||||
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s frame %c has multiple rot = 0 lump\n", spritename, cn);
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s has multiple rot = 0 lump\n", framedescription);
|
||||||
else if (sprtemp[frame].rotate != SRF_NONE) // Let's bundle 1-8/16 and L/R rotations into one debug message.
|
else if (sprtemp[frame].rotate != SRF_NONE) // Let's bundle 1-8/16 and L/R rotations into one debug message.
|
||||||
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s frame %c has rotations and a rot = 0 lump\n", spritename, cn);
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s has rotations and a rot = 0 lump\n", framedescription);
|
||||||
|
|
||||||
sprtemp[frame].rotate = SRF_SINGLE;
|
sprtemp[frame].rotate = SRF_SINGLE;
|
||||||
for (r = 0; r < 16; r++)
|
for (r = 0; r < 16; r++)
|
||||||
|
@ -169,15 +181,15 @@ static void R_InstallSpriteLump(UINT16 wad, // graphics patch
|
||||||
if (sprtemp[frame].rotate == SRF_NONE)
|
if (sprtemp[frame].rotate == SRF_NONE)
|
||||||
sprtemp[frame].rotate = SRF_SINGLE;
|
sprtemp[frame].rotate = SRF_SINGLE;
|
||||||
else if (sprtemp[frame].rotate == SRF_SINGLE)
|
else if (sprtemp[frame].rotate == SRF_SINGLE)
|
||||||
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s frame %c has L/R rotations and a rot = 0 lump\n", spritename, cn);
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s has L/R rotations and a rot = 0 lump\n", framedescription);
|
||||||
else if (sprtemp[frame].rotate == SRF_3D)
|
else if (sprtemp[frame].rotate == SRF_3D)
|
||||||
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s frame %c has both L/R and 1-8 rotations\n", spritename, cn);
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s has both L/R and 1-8 rotations\n", framedescription);
|
||||||
else if (sprtemp[frame].rotate == SRF_3DGE)
|
else if (sprtemp[frame].rotate == SRF_3DGE)
|
||||||
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s frame %c has both L/R and 1-G rotations\n", spritename, cn);
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s has both L/R and 1-G rotations\n", framedescription);
|
||||||
else if ((sprtemp[frame].rotate & SRF_LEFT) && (rotation == ROT_L))
|
else if ((sprtemp[frame].rotate & SRF_LEFT) && (rotation == ROT_L))
|
||||||
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s frame %c has multiple L rotations\n", spritename, cn);
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s has multiple L rotations\n", framedescription);
|
||||||
else if ((sprtemp[frame].rotate & SRF_RIGHT) && (rotation == ROT_R))
|
else if ((sprtemp[frame].rotate & SRF_RIGHT) && (rotation == ROT_R))
|
||||||
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s frame %c has multiple R rotations\n", spritename, cn);
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s has multiple R rotations\n", framedescription);
|
||||||
|
|
||||||
sprtemp[frame].rotate |= ((rotation == ROT_R) ? SRF_RIGHT : SRF_LEFT);
|
sprtemp[frame].rotate |= ((rotation == ROT_R) ? SRF_RIGHT : SRF_LEFT);
|
||||||
if ((sprtemp[frame].rotate & SRF_2D) == SRF_2D)
|
if ((sprtemp[frame].rotate & SRF_2D) == SRF_2D)
|
||||||
|
@ -204,9 +216,9 @@ static void R_InstallSpriteLump(UINT16 wad, // graphics patch
|
||||||
if (sprtemp[frame].rotate == SRF_NONE)
|
if (sprtemp[frame].rotate == SRF_NONE)
|
||||||
sprtemp[frame].rotate = SRF_SINGLE;
|
sprtemp[frame].rotate = SRF_SINGLE;
|
||||||
else if (sprtemp[frame].rotate == SRF_SINGLE)
|
else if (sprtemp[frame].rotate == SRF_SINGLE)
|
||||||
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s frame %c has 1-8/G rotations and a rot = 0 lump\n", spritename, cn);
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s has 1-8/G rotations and a rot = 0 lump\n", framedescription);
|
||||||
else if (sprtemp[frame].rotate & SRF_2D)
|
else if (sprtemp[frame].rotate & SRF_2D)
|
||||||
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s frame %c has both L/R and 1-8/G rotations\n", spritename, cn);
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s has both L/R and 1-8/G rotations\n", framedescription);
|
||||||
|
|
||||||
// make 0 based
|
// make 0 based
|
||||||
rotation--;
|
rotation--;
|
||||||
|
@ -226,7 +238,12 @@ static void R_InstallSpriteLump(UINT16 wad, // graphics patch
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sprtemp[frame].lumppat[rotation] != LUMPERROR)
|
if (sprtemp[frame].lumppat[rotation] != LUMPERROR)
|
||||||
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s: %c%c has two lumps mapped to it\n", spritename, cn, cr);
|
{
|
||||||
|
if (cn != '\xFF')
|
||||||
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s: %d_%c (%c%c) has two lumps mapped to it\n", spritename, frame, cr, cn, cr);
|
||||||
|
else
|
||||||
|
CONS_Debug(DBG_SETUP, "R_InitSprites: Sprite %s: %d_%c has two lumps mapped to it\n", spritename, frame, cr);
|
||||||
|
}
|
||||||
|
|
||||||
// lumppat & lumpid are the same for original Doom, but different
|
// lumppat & lumpid are the same for original Doom, but different
|
||||||
// when using sprites in pwad : the lumppat points the new graphics
|
// when using sprites in pwad : the lumppat points the new graphics
|
||||||
|
@ -238,24 +255,201 @@ static void R_InstallSpriteLump(UINT16 wad, // graphics patch
|
||||||
sprtemp[frame].flip &= ~(1<<rotation);
|
sprtemp[frame].flip &= ~(1<<rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean GetFramesAndRotationsFromShortLumpName(
|
||||||
|
const char *name,
|
||||||
|
INT32 *ret_frame,
|
||||||
|
UINT8 *ret_rotation,
|
||||||
|
INT32 *ret_frame2,
|
||||||
|
UINT8 *ret_rotation2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
size_t namelen = strlen(name);
|
||||||
|
|
||||||
|
if (namelen != 6 && namelen != 8)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*ret_frame = R_Char2Frame(name[4]);
|
||||||
|
*ret_rotation = R_Char2Rotation(name[5]);
|
||||||
|
if (*ret_frame >= 64 || *ret_rotation == 255)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (namelen == 8)
|
||||||
|
{
|
||||||
|
*ret_frame2 = R_Char2Frame(name[6]);
|
||||||
|
*ret_rotation2 = R_Char2Rotation(name[7]);
|
||||||
|
if (*ret_frame2 >= 64 || *ret_rotation2 == 255)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*ret_frame2 = -1;
|
||||||
|
*ret_rotation2 = 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static boolean GetSingleFrameAndRotation(
|
||||||
|
const char *name,
|
||||||
|
size_t len,
|
||||||
|
INT32 *ret_frame,
|
||||||
|
UINT8 *ret_rotation
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const char *underscore = strchr(name, '_');
|
||||||
|
|
||||||
|
// Found but past the part of the name we are parsing
|
||||||
|
if ((size_t)(underscore - name) >= len)
|
||||||
|
underscore = NULL;
|
||||||
|
|
||||||
|
size_t framelen = underscore ? (size_t)(underscore - name) : len;
|
||||||
|
if (framelen < 1 || framelen > 4)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
char framepart[4 + 1]; // Max 9999
|
||||||
|
strlcpy(framepart, name, framelen + 1);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < framelen; i++)
|
||||||
|
if (!isdigit(framepart[i]))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*ret_frame = atoi(framepart);
|
||||||
|
*ret_rotation = underscore ? R_Char2Rotation(*(underscore + 1)) : 0;
|
||||||
|
if (*ret_frame >= MAXFRAMENUM || *ret_rotation == 255)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static boolean GetFramesAndRotationsFromLongLumpName(
|
||||||
|
const char *name,
|
||||||
|
INT32 *ret_frame,
|
||||||
|
UINT8 *ret_rotation,
|
||||||
|
INT32 *ret_frame2,
|
||||||
|
UINT8 *ret_rotation2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const char *plus = strchr(name, '+');
|
||||||
|
|
||||||
|
if (plus)
|
||||||
|
{
|
||||||
|
size_t len1 = plus - name;
|
||||||
|
|
||||||
|
if (!GetSingleFrameAndRotation(name, len1, ret_frame, ret_rotation))
|
||||||
|
return false;
|
||||||
|
if (!GetSingleFrameAndRotation(plus + 1, strlen(name) - len1 - 1, ret_frame2, ret_rotation2))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!GetSingleFrameAndRotation(name, strlen(name), ret_frame, ret_rotation))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*ret_frame2 = -1;
|
||||||
|
*ret_rotation2 = 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static UINT8 GetOppositeRotation(UINT8 rotation, UINT8 flags)
|
||||||
|
{
|
||||||
|
if (flags & ~SRF_3DMASK)
|
||||||
|
I_Error("GetOppositeRotation: rotation type not supported");
|
||||||
|
|
||||||
|
UINT8 numrotations = (flags == SRF_3D) ? 8 : 16;
|
||||||
|
return (rotation == 1) ? 1 : numrotations + 2 - rotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void MirrorMissingRotations(void)
|
||||||
|
{
|
||||||
|
for (UINT32 framenum = 0; framenum < maxframe; framenum++)
|
||||||
|
{
|
||||||
|
spriteframe_t *frame = &sprtemp[framenum];
|
||||||
|
|
||||||
|
if (frame->rotate == SRF_NONE || !(frame->rotate & SRF_3DMASK))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
UINT8 numrotations = frame->rotate == SRF_3D ? 8 : 16;
|
||||||
|
|
||||||
|
for (UINT8 rotation = 1; rotation <= numrotations; rotation++)
|
||||||
|
{
|
||||||
|
if (frame->lumppat[rotation - 1] != LUMPERROR)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
UINT8 baserotation = GetOppositeRotation(rotation, frame->rotate);
|
||||||
|
UINT32 lumpnum = frame->lumppat[baserotation - 1];
|
||||||
|
R_InstallSpriteLump(WADFILENUM(lumpnum), LUMPNUM(lumpnum), frame->lumpid[baserotation], framenum, rotation, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Some checks to help development
|
||||||
|
static void CheckFrame(const char *sprname)
|
||||||
|
{
|
||||||
|
for (UINT32 frame = 0; frame < maxframe; frame++)
|
||||||
|
{
|
||||||
|
spriteframe_t *spriteframe = &sprtemp[frame];
|
||||||
|
|
||||||
|
char framedescription[256];
|
||||||
|
if (frame < 64)
|
||||||
|
sprintf(framedescription, "%s frame %d (%c)", sprname, frame, R_Frame2Char(frame));
|
||||||
|
else
|
||||||
|
sprintf(framedescription, "%s frame %d", sprname, frame);
|
||||||
|
|
||||||
|
switch (spriteframe->rotate)
|
||||||
|
{
|
||||||
|
case SRF_NONE:
|
||||||
|
// no rotations were found for that frame at all
|
||||||
|
I_Error("R_AddSingleSpriteDef: No patches found for %s", framedescription);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SRF_SINGLE:
|
||||||
|
// only the first rotation is needed
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SRF_2D: // both Left and Right rotations
|
||||||
|
// we test to see whether the left and right slots are present
|
||||||
|
if ((spriteframe->lumppat[2] == LUMPERROR) || (spriteframe->lumppat[6] == LUMPERROR))
|
||||||
|
I_Error("R_AddSingleSpriteDef: Sprite %s is missing rotations (L-R mode)",
|
||||||
|
framedescription);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
// must have all 8/16 frames
|
||||||
|
UINT8 rotation = ((spriteframe->rotate & SRF_3DGE) ? 16 : 8);
|
||||||
|
while (rotation--)
|
||||||
|
{
|
||||||
|
// we test the patch lump, or the id lump whatever
|
||||||
|
// if it was not loaded the two are LUMPERROR
|
||||||
|
if (spriteframe->lumppat[rotation] == LUMPERROR)
|
||||||
|
I_Error("R_AddSingleSpriteDef: Sprite %s is missing rotations (1-%c mode)",
|
||||||
|
framedescription, ((spriteframe->rotate & SRF_3DGE) ? 'G' : '8'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Install a single sprite, given its identifying name (4 chars)
|
// Install a single sprite, given its identifying name (4 chars)
|
||||||
//
|
//
|
||||||
// (originally part of R_AddSpriteDefs)
|
// (originally part of R_AddSpriteDefs)
|
||||||
//
|
//
|
||||||
// Pass: name of sprite : 4 chars
|
// Pass: name of sprite
|
||||||
// spritedef_t
|
// spritedef_t
|
||||||
// wadnum : wad number, indexes wadfiles[], where patches
|
// wadnum : wad number, indexes wadfiles[], where patches
|
||||||
// for frames are found
|
// for frames are found
|
||||||
// startlump : first lump to search for sprite frames
|
// startlump : first lump to search for sprite frames
|
||||||
// endlump : AFTER the last lump to search
|
// endlump : AFTER the last lump to search
|
||||||
|
// longname : whether to use long sprite names or 4-char names
|
||||||
//
|
//
|
||||||
// Returns true if the sprite was succesfully added
|
// Returns true if the sprite was succesfully added
|
||||||
//
|
//
|
||||||
boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16 wadnum, UINT16 startlump, UINT16 endlump)
|
boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16 wadnum, UINT16 startlump, UINT16 endlump, boolean longname)
|
||||||
{
|
{
|
||||||
UINT16 l;
|
UINT16 l;
|
||||||
UINT8 frame;
|
|
||||||
UINT8 rotation;
|
|
||||||
lumpinfo_t *lumpinfo;
|
lumpinfo_t *lumpinfo;
|
||||||
UINT16 numadded = 0;
|
UINT16 numadded = 0;
|
||||||
|
|
||||||
|
@ -282,15 +476,23 @@ boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16
|
||||||
|
|
||||||
for (l = startlump; l < endlump; l++)
|
for (l = startlump; l < endlump; l++)
|
||||||
{
|
{
|
||||||
if (memcmp(lumpinfo[l].name,sprname,4)==0)
|
if (longname && W_IsLumpFolder(wadnum, l))
|
||||||
|
I_Error("R_AddSingleSpriteDef: all frame lumps for a sprite should be contained inside a single folder\n");
|
||||||
|
|
||||||
|
// For long sprites, the startlump-endlump range only includes
|
||||||
|
// relevant lumps, so no check needed in that case
|
||||||
|
if (longname || (strlen(sprname) == 4 && !memcmp(lumpinfo[l].name, sprname, 4)))
|
||||||
{
|
{
|
||||||
INT16 width, height;
|
INT16 width, height;
|
||||||
INT16 topoffset, leftoffset;
|
INT16 topoffset, leftoffset;
|
||||||
|
INT32 frame, frame2;
|
||||||
|
UINT8 rotation, rotation2;
|
||||||
|
|
||||||
frame = R_Char2Frame(lumpinfo[l].name[4]);
|
boolean good = longname ?
|
||||||
rotation = R_Char2Rotation(lumpinfo[l].name[5]);
|
GetFramesAndRotationsFromLongLumpName(lumpinfo[l].longname, &frame, &rotation, &frame2, &rotation2) :
|
||||||
|
GetFramesAndRotationsFromShortLumpName(lumpinfo[l].name, &frame, &rotation, &frame2, &rotation2);
|
||||||
|
|
||||||
if (frame >= 64 || rotation == 255) // Give an actual NAME error -_-...
|
if (!good) // Give an actual NAME error -_-...
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Bad sprite name: %s\n"), W_CheckNameForNumPwad(wadnum,l));
|
CONS_Alert(CONS_WARNING, M_GetText("Bad sprite name: %s\n"), W_CheckNameForNumPwad(wadnum,l));
|
||||||
continue;
|
continue;
|
||||||
|
@ -322,19 +524,8 @@ boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
|
|
||||||
R_InstallSpriteLump(wadnum, l, numspritelumps, frame, rotation, 0);
|
R_InstallSpriteLump(wadnum, l, numspritelumps, frame, rotation, 0);
|
||||||
|
if (frame2 != -1)
|
||||||
if (lumpinfo[l].name[6])
|
R_InstallSpriteLump(wadnum, l, numspritelumps, frame2, rotation2, 1);
|
||||||
{
|
|
||||||
frame = R_Char2Frame(lumpinfo[l].name[6]);
|
|
||||||
rotation = R_Char2Rotation(lumpinfo[l].name[7]);
|
|
||||||
|
|
||||||
if (frame >= 64 || rotation == 255) // Give an actual NAME error -_-...
|
|
||||||
{
|
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Bad sprite name: %s\n"), W_CheckNameForNumPwad(wadnum,l));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
R_InstallSpriteLump(wadnum, l, numspritelumps, frame, rotation, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (++numspritelumps >= max_spritelumps)
|
if (++numspritelumps >= max_spritelumps)
|
||||||
{
|
{
|
||||||
|
@ -374,41 +565,10 @@ boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16
|
||||||
|
|
||||||
maxframe++;
|
maxframe++;
|
||||||
|
|
||||||
//
|
if (longname)
|
||||||
// some checks to help development
|
MirrorMissingRotations();
|
||||||
//
|
|
||||||
for (frame = 0; frame < maxframe; frame++)
|
|
||||||
{
|
|
||||||
switch (sprtemp[frame].rotate)
|
|
||||||
{
|
|
||||||
case SRF_NONE:
|
|
||||||
// no rotations were found for that frame at all
|
|
||||||
I_Error("R_AddSingleSpriteDef: No patches found for %.4s frame %c", sprname, R_Frame2Char(frame));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SRF_SINGLE:
|
CheckFrame(sprname);
|
||||||
// only the first rotation is needed
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SRF_2D: // both Left and Right rotations
|
|
||||||
// we test to see whether the left and right slots are present
|
|
||||||
if ((sprtemp[frame].lumppat[2] == LUMPERROR) || (sprtemp[frame].lumppat[6] == LUMPERROR))
|
|
||||||
I_Error("R_AddSingleSpriteDef: Sprite %.4s frame %c is missing rotations (L-R mode)",
|
|
||||||
sprname, R_Frame2Char(frame));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
// must have all 8/16 frames
|
|
||||||
rotation = ((sprtemp[frame].rotate & SRF_3DGE) ? 16 : 8);
|
|
||||||
while (rotation--)
|
|
||||||
// we test the patch lump, or the id lump whatever
|
|
||||||
// if it was not loaded the two are LUMPERROR
|
|
||||||
if (sprtemp[frame].lumppat[rotation] == LUMPERROR)
|
|
||||||
I_Error("R_AddSingleSpriteDef: Sprite %.4s frame %c is missing rotations (1-%c mode)",
|
|
||||||
sprname, R_Frame2Char(frame), ((sprtemp[frame].rotate & SRF_3DGE) ? 'G' : '8'));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// allocate space for the frames present and copy sprtemp to it
|
// allocate space for the frames present and copy sprtemp to it
|
||||||
if (spritedef->numframes && // has been allocated
|
if (spritedef->numframes && // has been allocated
|
||||||
|
@ -429,14 +589,10 @@ boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
static void AddShortSpriteDefs(UINT16 wadnum, size_t *ptr_spritesadded, size_t *ptr_framesadded)
|
||||||
// Search for sprites replacements in a wad whose names are in namelist
|
|
||||||
//
|
|
||||||
void R_AddSpriteDefs(UINT16 wadnum)
|
|
||||||
{
|
{
|
||||||
size_t i, addsprites = 0;
|
size_t i;
|
||||||
UINT16 start, end;
|
UINT16 start, end;
|
||||||
char wadname[MAX_WADPATH];
|
|
||||||
|
|
||||||
// Find the sprites section in this resource file.
|
// Find the sprites section in this resource file.
|
||||||
switch (wadfiles[wadnum]->type)
|
switch (wadfiles[wadnum]->type)
|
||||||
|
@ -474,27 +630,90 @@ void R_AddSpriteDefs(UINT16 wadnum)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// scan through lumps, for each sprite, find all the sprite frames
|
// scan through lumps, for each sprite, find all the sprite frames
|
||||||
//
|
//
|
||||||
for (i = 0; i < numsprites; i++)
|
for (i = 0; i < numsprites; i++)
|
||||||
{
|
{
|
||||||
if (sprnames[i][4] && wadnum >= (UINT16)sprnames[i][4])
|
if (R_AddSingleSpriteDef(sprnames[i], &sprites[i], wadnum, start, end, false))
|
||||||
continue;
|
|
||||||
|
|
||||||
if (R_AddSingleSpriteDef(sprnames[i], &sprites[i], wadnum, start, end))
|
|
||||||
{
|
{
|
||||||
// if a new sprite was added (not just replaced)
|
// if a new sprite was added (not just replaced)
|
||||||
addsprites++;
|
(*ptr_spritesadded)++;
|
||||||
#ifndef ZDEBUG
|
#ifndef ZDEBUG
|
||||||
CONS_Debug(DBG_SETUP, "sprite %s set in pwad %d\n", sprnames[i], wadnum);
|
CONS_Debug(DBG_SETUP, "sprite %s set in pwad %d\n", sprnames[i], wadnum);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nameonly(strcpy(wadname, wadfiles[wadnum]->filename));
|
*ptr_framesadded += end - start;
|
||||||
CONS_Printf(M_GetText("%s added %d frames in %s sprites\n"), wadname, end-start, sizeu1(addsprites));
|
}
|
||||||
|
|
||||||
|
static void AddLongSpriteDefs(UINT16 wadnum, size_t *ptr_spritesadded, size_t *ptr_framesadded)
|
||||||
|
{
|
||||||
|
if (!W_FileHasFolders(wadfiles[wadnum]))
|
||||||
|
return;
|
||||||
|
|
||||||
|
UINT16 start = W_CheckNumForFolderStartPK3("LongSprites/", wadnum, 0);
|
||||||
|
UINT16 end = W_CheckNumForFolderEndPK3("LongSprites/", wadnum, start);
|
||||||
|
|
||||||
|
if (start == INT16_MAX || end == INT16_MAX || start >= end)
|
||||||
|
return;
|
||||||
|
|
||||||
|
size_t lumpnum = start;
|
||||||
|
|
||||||
|
while (lumpnum < end)
|
||||||
|
{
|
||||||
|
if (W_IsLumpFolder(wadnum, lumpnum))
|
||||||
|
{
|
||||||
|
lumpnum++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT16 folderstart, folderend;
|
||||||
|
char *folderpath = W_GetLumpFolderPathPK3(wadnum, lumpnum);
|
||||||
|
folderstart = lumpnum;
|
||||||
|
folderend = W_CheckNumForFolderEndPK3(folderpath, wadnum, lumpnum);
|
||||||
|
Z_Free(folderpath);
|
||||||
|
|
||||||
|
spritenum_t sprnum;
|
||||||
|
char *sprname = W_GetLumpFolderNamePK3(wadnum, lumpnum);
|
||||||
|
strupr(sprname);
|
||||||
|
sprnum = R_GetSpriteNumByName(sprname);
|
||||||
|
|
||||||
|
if (sprnum != NUMSPRITES && R_AddSingleSpriteDef(sprname, &sprites[sprnum], wadnum, folderstart, folderend, true))
|
||||||
|
{
|
||||||
|
// A new sprite was added (not just replaced)
|
||||||
|
(*ptr_spritesadded)++;
|
||||||
|
#ifndef ZDEBUG
|
||||||
|
CONS_Debug(DBG_SETUP, "long sprite %s set in pwad %d\n", sprname, wadnum);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
Z_Free(sprname);
|
||||||
|
|
||||||
|
lumpnum = folderend;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ptr_framesadded += end - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Search for sprites replacements in a wad whose names are in namelist
|
||||||
|
//
|
||||||
|
void R_AddSpriteDefs(UINT16 wadnum)
|
||||||
|
{
|
||||||
|
char wadname[MAX_WADPATH];
|
||||||
|
size_t spritesadded = 0;
|
||||||
|
size_t framesadded = 0;
|
||||||
|
|
||||||
|
AddShortSpriteDefs(wadnum, &spritesadded, &framesadded);
|
||||||
|
AddLongSpriteDefs(wadnum, &spritesadded, &framesadded);
|
||||||
|
|
||||||
|
if (spritesadded || framesadded)
|
||||||
|
{
|
||||||
|
nameonly(strcpy(wadname, wadfiles[wadnum]->filename));
|
||||||
|
CONS_Printf(M_GetText("%s added %s frames in %s sprites\n"), wadname, sizeu1(framesadded), sizeu2(spritesadded));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -27,7 +27,9 @@
|
||||||
|
|
||||||
#define FEETADJUST (4<<FRACBITS) // R_AddSingleSpriteDef
|
#define FEETADJUST (4<<FRACBITS) // R_AddSingleSpriteDef
|
||||||
|
|
||||||
boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16 wadnum, UINT16 startlump, UINT16 endlump);
|
spritenum_t R_GetSpriteNumByName(const char *name);
|
||||||
|
|
||||||
|
boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16 wadnum, UINT16 startlump, UINT16 endlump, boolean longname);
|
||||||
|
|
||||||
//faB: find sprites in wadfile, replace existing, add new ones
|
//faB: find sprites in wadfile, replace existing, add new ones
|
||||||
// (only sprites from namelist are added or replaced)
|
// (only sprites from namelist are added or replaced)
|
||||||
|
|
|
@ -2494,11 +2494,11 @@ static void Command_Tunes_f(void)
|
||||||
track = (UINT16)atoi(COM_Argv(2))-1;
|
track = (UINT16)atoi(COM_Argv(2))-1;
|
||||||
|
|
||||||
strncpy(mapmusname, tunearg, 7);
|
strncpy(mapmusname, tunearg, 7);
|
||||||
|
mapmusname[6] = 0;
|
||||||
|
|
||||||
if (argc > 4)
|
if (argc > 4)
|
||||||
position = (UINT32)atoi(COM_Argv(4));
|
position = (UINT32)atoi(COM_Argv(4));
|
||||||
|
|
||||||
mapmusname[6] = 0;
|
|
||||||
mapmusflags = (track & MUSIC_TRACKMASK);
|
mapmusflags = (track & MUSIC_TRACKMASK);
|
||||||
mapmusposition = position;
|
mapmusposition = position;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
# Declare SDL2 interface sources
|
# Declare SDL2 interface sources
|
||||||
|
|
||||||
target_sources(SRB2SDL2 PRIVATE
|
target_sources(SRB2SDL2 PRIVATE
|
||||||
mixer_sound.c
|
|
||||||
ogl_sdl.c
|
ogl_sdl.c
|
||||||
i_threads.c
|
i_threads.c
|
||||||
i_net.c
|
i_net.c
|
||||||
|
@ -13,6 +12,161 @@ target_sources(SRB2SDL2 PRIVATE
|
||||||
hwsym_sdl.c
|
hwsym_sdl.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Compatibility flag with later versions of GCC
|
||||||
|
# We should really fix our code to not need this
|
||||||
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
|
target_compile_options(SRB2SDL2 PRIVATE -mno-ms-bitfields)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Yes we know we use insecure CRT functions...
|
||||||
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
target_compile_definitions(SRB2SDL2 PRIVATE -D_CRT_SECURE_NO_WARNINGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Compiler warnings configuration
|
||||||
|
target_compile_options(SRB2SDL2 PRIVATE
|
||||||
|
# Using generator expressions to handle per-language compile options
|
||||||
|
|
||||||
|
# C, GNU
|
||||||
|
# This is a direct translation from versions.mk
|
||||||
|
$<$<AND:$<COMPILE_LANGUAGE:C>,$<C_COMPILER_ID:GNU>>:
|
||||||
|
-Wall
|
||||||
|
-Wno-trigraphs
|
||||||
|
-W # Was controlled by RELAXWARNINGS
|
||||||
|
-pedantic
|
||||||
|
-Wpedantic
|
||||||
|
-Wfloat-equal
|
||||||
|
-Wundef
|
||||||
|
-Wpointer-arith
|
||||||
|
-Wbad-function-cast
|
||||||
|
-Wcast-qual
|
||||||
|
-Wcast-align # Was controlled by NOCASTALIGNWARN
|
||||||
|
-Wwrite-strings
|
||||||
|
-Wsign-compare
|
||||||
|
-Wmissing-prototypes
|
||||||
|
-Wmissing-declarations
|
||||||
|
-Wmissing-noreturn
|
||||||
|
-Winline
|
||||||
|
-Wformat-y2k
|
||||||
|
-Wformat-security
|
||||||
|
|
||||||
|
$<$<VERSION_LESS:$<C_COMPILER_VERSION>,2.9.5>:
|
||||||
|
-Wno-div-by-zero
|
||||||
|
-Wendif-labels
|
||||||
|
-Wdisabled-optimization
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,4.0.0>:
|
||||||
|
-Wold-style-definition
|
||||||
|
-Wmissing-field-initializers
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,4.1.0>:
|
||||||
|
-Wshadow
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,4.3.0>:
|
||||||
|
-funit-at-a-time
|
||||||
|
-Wlogical-op
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,4.5.0>:
|
||||||
|
-Wlogical-op
|
||||||
|
-Wno-error=array-bounds
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,4.6.0>:
|
||||||
|
-Wno-suggest-attribute=noreturn
|
||||||
|
-Wno-error=suggest-attribute=noreturn
|
||||||
|
-Werror=vla
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,5.4.0>:
|
||||||
|
-Wno-logical-op
|
||||||
|
-Wno-error=logical-op
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,6.1.0>:
|
||||||
|
-Wno-tautological-compare
|
||||||
|
-Wno-error=tautological-compare
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,7.1.0>:
|
||||||
|
-Wno-error=format-overflow=2
|
||||||
|
-Wimplicit-fallthrough=4
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,8.1.0>:
|
||||||
|
-Wno-error=format-overflow
|
||||||
|
-Wno-error=stringop-truncation
|
||||||
|
-Wno-error=stringop-overflow
|
||||||
|
-Wno-format-overflow
|
||||||
|
-Wno-stringop-truncation
|
||||||
|
-Wno-stringop-overflow
|
||||||
|
-Wno-error=multistatement-macros
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,9.1.0>:
|
||||||
|
-Wno-error=address-of-packed-member
|
||||||
|
>
|
||||||
|
>
|
||||||
|
|
||||||
|
# C, Clang and Apple Clang
|
||||||
|
$<$<AND:$<COMPILE_LANGUAGE:C>,$<OR:$<C_COMPILER_ID:AppleClang>,$<C_COMPILER_ID:Clang>>>:
|
||||||
|
-Wall
|
||||||
|
-Wno-absolute-value
|
||||||
|
-Wno-trigraphs
|
||||||
|
-Wno-error=non-literal-null-conversion
|
||||||
|
-Wno-error=constant-conversion
|
||||||
|
-Wno-unused-but-set-variable
|
||||||
|
-Wno-error=unused-but-set-variable
|
||||||
|
-Wno-shorten-64-to-32
|
||||||
|
>
|
||||||
|
|
||||||
|
# C, MSVC
|
||||||
|
$<$<AND:$<COMPILE_LANGUAGE:C>,$<C_COMPILER_ID:MSVC>>:
|
||||||
|
# All warnings at and before Visual Studio 2019 RTM
|
||||||
|
# https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warnings-by-compiler-version?view=msvc-170
|
||||||
|
/Wv:19.20.27004.0
|
||||||
|
>
|
||||||
|
|
||||||
|
# C++, GNU, Clang and Apple Clang
|
||||||
|
$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<OR:$<C_COMPILER_ID:GNU>,$<C_COMPILER_ID:AppleClang>,$<C_COMPILER_ID:Clang>>>:
|
||||||
|
-Wall
|
||||||
|
-Wno-unused-function
|
||||||
|
-Wno-unused-but-set-variable
|
||||||
|
-Wno-unused-private-field
|
||||||
|
>
|
||||||
|
|
||||||
|
# C++, MSVC
|
||||||
|
$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<C_COMPILER_ID:MSVC>>:
|
||||||
|
/Wv:19.20.27004.0
|
||||||
|
>
|
||||||
|
|
||||||
|
# GNU
|
||||||
|
$<$<C_COMPILER_ID:GNU>:
|
||||||
|
-fmax-errors=5
|
||||||
|
>
|
||||||
|
)
|
||||||
|
if(SRB2_CONFIG_ERRORMODE)
|
||||||
|
target_compile_options(SRB2SDL2 PRIVATE
|
||||||
|
$<$<OR:$<C_COMPILER_ID:GNU>,$<C_COMPILER_ID:AppleClang>,$<C_COMPILER_ID:Clang>>:
|
||||||
|
-Werror
|
||||||
|
>
|
||||||
|
|
||||||
|
$<$<C_COMPILER_ID:MSVC>:
|
||||||
|
/WX
|
||||||
|
>
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Link warnings configuration
|
||||||
|
target_link_options(SRB2SDL2 PRIVATE
|
||||||
|
$<$<C_COMPILER_ID:GNU>:
|
||||||
|
# -Wl,--as-needed - Was controlled by NOLDWARNING
|
||||||
|
>
|
||||||
|
)
|
||||||
|
|
||||||
if("${CMAKE_SYSTEM_NAME}" MATCHES Windows)
|
if("${CMAKE_SYSTEM_NAME}" MATCHES Windows)
|
||||||
target_sources(SRB2SDL2 PRIVATE
|
target_sources(SRB2SDL2 PRIVATE
|
||||||
../win32/win_dbg.c
|
../win32/win_dbg.c
|
||||||
|
@ -62,12 +216,6 @@ if("${CMAKE_SYSTEM_NAME}" MATCHES Windows)
|
||||||
target_link_libraries(SRB2SDL2 PRIVATE SDL2::SDL2main)
|
target_link_libraries(SRB2SDL2 PRIVATE SDL2::SDL2main)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}" AND NOT "${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}")
|
|
||||||
target_link_libraries(SRB2SDL2 PRIVATE SDL2::SDL2-static SDL2_mixer::SDL2_mixer-static)
|
|
||||||
else()
|
|
||||||
target_link_libraries(SRB2SDL2 PRIVATE SDL2::SDL2 SDL2_mixer::SDL2_mixer)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if("${CMAKE_SYSTEM_NAME}" MATCHES Linux)
|
if("${CMAKE_SYSTEM_NAME}" MATCHES Linux)
|
||||||
target_link_libraries(SRB2SDL2 PRIVATE m rt)
|
target_link_libraries(SRB2SDL2 PRIVATE m rt)
|
||||||
endif()
|
endif()
|
||||||
|
@ -81,8 +229,84 @@ if("${CMAKE_SYSTEM_NAME}" MATCHES Windows)
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXER -DSOUND=SOUND_MIXER)
|
find_package(SDL2 CONFIG REQUIRED)
|
||||||
|
find_package(SDL2 REQUIRED)
|
||||||
|
if(TARGET SDL2main)
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE SDL2main)
|
||||||
|
endif()
|
||||||
target_compile_definitions(SRB2SDL2 PRIVATE -DDIRECTFULLSCREEN -DHAVE_SDL)
|
target_compile_definitions(SRB2SDL2 PRIVATE -DDIRECTFULLSCREEN -DHAVE_SDL)
|
||||||
|
target_include_directories(SRB2SDL2 PRIVATE ${SDL2_INCLUDE_DIR})
|
||||||
|
|
||||||
|
find_package(SDL2_mixer_ext CONFIG QUIET)
|
||||||
|
find_package(SDL2_mixer_ext QUIET)
|
||||||
|
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext OR TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static OR TARGET SDL2_mixer_ext OR TARGET SDL2_mixer_ext_Static)
|
||||||
|
if(NOT TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static AND TARGET SDL2_mixer_ext_Static)
|
||||||
|
add_library(SDL2_mixer_ext::SDL2_mixer_ext_Static ALIAS SDL2_mixer_ext_Static)
|
||||||
|
endif()
|
||||||
|
if(NOT TARGET SDL2_mixer_ext::SDL2_mixer_ext AND TARGET SDL2_mixer_ext)
|
||||||
|
add_library(SDL2_mixer_ext::SDL2_mixer_ext ALIAS SDL2_mixer_ext)
|
||||||
|
endif()
|
||||||
|
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext OR TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static)
|
||||||
|
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static)
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE SDL2_mixer_ext::SDL2_mixer_ext_Static)
|
||||||
|
else()
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE SDL2_mixer_ext::SDL2_mixer_ext)
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXER -DHAVE_MIXERX -DSOUND=SOUND_MIXER)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext OR TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static)
|
||||||
|
message(STATUS "SDL2_mixer_ext found, skipping SDL2_mixer")
|
||||||
|
else()
|
||||||
|
message(STATUS "SDL2_mixer_ext not found, going to try SDL2_mixer")
|
||||||
|
find_package(SDL2_mixer CONFIG QUIET)
|
||||||
|
find_package(SDL2_mixer QUIET)
|
||||||
|
if(TARGET SDL2_mixer::SDL2_mixer OR TARGET SDL2_mixer::SDL2_mixer-static OR TARGET SDL2_mixer OR TARGET SDL2_mixer_Static)
|
||||||
|
if(NOT TARGET SDL2_mixer::SDL2_mixer-static AND TARGET SDL2_mixer_Static)
|
||||||
|
add_library(SDL2_mixer::SDL2_mixer-static ALIAS SDL2_mixer_Static)
|
||||||
|
endif()
|
||||||
|
if(NOT TARGET SDL2_mixer::SDL2_mixer AND TARGET SDL2_mixer)
|
||||||
|
add_library(SDL2_mixer::SDL2_mixer ALIAS SDL2_mixer)
|
||||||
|
endif()
|
||||||
|
if(TARGET SDL2_mixer::SDL2_mixer OR TARGET SDL2_mixer::SDL2_mixer-static)
|
||||||
|
if(TARGET SDL2_mixer::SDL2_mixer-static)
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE SDL2_mixer::SDL2_mixer-static)
|
||||||
|
else()
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE SDL2_mixer::SDL2_mixer)
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXER -DSOUND=SOUND_MIXER)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext OR TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static OR TARGET SDL2_mixer::SDL2_mixer OR TARGET SDL2_mixer::SDL2_mixer-static)
|
||||||
|
target_sources(SRB2SDL2 PRIVATE mixer_sound.c)
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE SDL2::SDL2)
|
||||||
|
else()
|
||||||
|
target_sources(SRB2SDL2 PRIVATE sdl_sound.c)
|
||||||
|
target_link_libraries(SRB2SDL2 PRIVATE SDL2::SDL2)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET SDL2::SDL2)
|
||||||
|
message(STATUS "SDL2 Found")
|
||||||
|
else()
|
||||||
|
message(STATUS "no SDL2 Found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET SDL2::SDL2main)
|
||||||
|
message(STATUS "SDL2main Found")
|
||||||
|
else()
|
||||||
|
message(STATUS "No SDL2main Found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TARGET SDL2_mixer_ext::SDL2_mixer_ext OR TARGET SDL2_mixer_ext::SDL2_mixer_ext_Static)
|
||||||
|
message(STATUS "SDL2_mixer_ext Found")
|
||||||
|
elseif(TARGET SDL2_mixer::SDL2_mixer OR TARGET SDL2_mixer::SDL2_mixer-static)
|
||||||
|
message(STATUS "SDL2_mixer found")
|
||||||
|
else()
|
||||||
|
message(STATUS "no SDL2_mixer_ext or SDL2_mixer Found")
|
||||||
|
endif()
|
||||||
|
|
||||||
#### Installation ####
|
#### Installation ####
|
||||||
if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin)
|
if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin)
|
||||||
|
|
|
@ -2316,7 +2316,7 @@ void I_SleepDuration(precise_t duration)
|
||||||
int status;
|
int status;
|
||||||
do status = clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, &ts);
|
do status = clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, &ts);
|
||||||
while (status == EINTR);
|
while (status == EINTR);
|
||||||
#else
|
#elif defined (MIN_SLEEP_DURATION_MS)
|
||||||
UINT64 precision = I_GetPrecisePrecision();
|
UINT64 precision = I_GetPrecisePrecision();
|
||||||
INT32 sleepvalue = cv_sleep.value;
|
INT32 sleepvalue = cv_sleep.value;
|
||||||
UINT64 delaygranularity;
|
UINT64 delaygranularity;
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
target_sources(srb2tests PRIVATE
|
|
||||||
boolcompat.cpp
|
|
||||||
)
|
|
|
@ -1,8 +0,0 @@
|
||||||
#include <catch2/catch_test_macros.hpp>
|
|
||||||
|
|
||||||
#include "../doomtype.h"
|
|
||||||
|
|
||||||
TEST_CASE("C++ bool is convertible to doomtype.h boolean") {
|
|
||||||
REQUIRE(static_cast<boolean>(true) == 1);
|
|
||||||
REQUIRE(static_cast<boolean>(false) == 0);
|
|
||||||
}
|
|
41
src/w_wad.c
41
src/w_wad.c
|
@ -1349,6 +1349,47 @@ UINT16 W_CheckNumForFolderEndPK3(const char *name, UINT16 wad, UINT16 startlump)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *W_GetLumpFolderPathPK3(UINT16 wad, UINT16 lump)
|
||||||
|
{
|
||||||
|
const char *fullname = wadfiles[wad]->lumpinfo[lump].fullname;
|
||||||
|
|
||||||
|
const char *slash = strrchr(fullname, '/');
|
||||||
|
INT32 pathlen = slash ? slash - fullname : 0;
|
||||||
|
|
||||||
|
char *path = Z_Calloc(pathlen + 1, PU_STATIC, NULL);
|
||||||
|
strncpy(path, fullname, pathlen);
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *W_GetLumpFolderNamePK3(UINT16 wad, UINT16 lump)
|
||||||
|
{
|
||||||
|
const char *fullname = wadfiles[wad]->lumpinfo[lump].fullname;
|
||||||
|
size_t start, end;
|
||||||
|
|
||||||
|
INT32 i = strlen(fullname);
|
||||||
|
|
||||||
|
i--;
|
||||||
|
while (i >= 0 && fullname[i] != '/')
|
||||||
|
i--;
|
||||||
|
if (i < 0)
|
||||||
|
return NULL;
|
||||||
|
end = i;
|
||||||
|
|
||||||
|
i--;
|
||||||
|
while (i >= 0 && fullname[i] != '/')
|
||||||
|
i--;
|
||||||
|
if (i < 0)
|
||||||
|
return NULL;
|
||||||
|
start = i + 1;
|
||||||
|
|
||||||
|
size_t namelen = end - start;
|
||||||
|
char *foldername = Z_Calloc(namelen + 1, PU_STATIC, NULL);
|
||||||
|
strncpy(foldername, fullname + start, namelen);
|
||||||
|
|
||||||
|
return foldername;
|
||||||
|
}
|
||||||
|
|
||||||
void W_GetFolderLumpsPwad(const char *name, UINT16 wad, UINT32 **list, UINT16 *list_capacity, UINT16 *numlumps)
|
void W_GetFolderLumpsPwad(const char *name, UINT16 wad, UINT32 **list, UINT16 *list_capacity, UINT16 *numlumps)
|
||||||
{
|
{
|
||||||
size_t name_length = strlen(name);
|
size_t name_length = strlen(name);
|
||||||
|
|
|
@ -180,6 +180,8 @@ UINT16 W_CheckNumForMarkerStartPwad(const char *name, UINT16 wad, UINT16 startlu
|
||||||
UINT16 W_CheckNumForFullNamePK3(const char *name, UINT16 wad, UINT16 startlump);
|
UINT16 W_CheckNumForFullNamePK3(const char *name, UINT16 wad, UINT16 startlump);
|
||||||
UINT16 W_CheckNumForFolderStartPK3(const char *name, UINT16 wad, UINT16 startlump);
|
UINT16 W_CheckNumForFolderStartPK3(const char *name, UINT16 wad, UINT16 startlump);
|
||||||
UINT16 W_CheckNumForFolderEndPK3(const char *name, UINT16 wad, UINT16 startlump);
|
UINT16 W_CheckNumForFolderEndPK3(const char *name, UINT16 wad, UINT16 startlump);
|
||||||
|
char *W_GetLumpFolderPathPK3(UINT16 wad, UINT16 lump);
|
||||||
|
char *W_GetLumpFolderNamePK3(UINT16 wad, UINT16 lump);
|
||||||
|
|
||||||
void W_GetFolderLumpsPwad(const char *name, UINT16 wad, UINT32 **list, UINT16 *list_capacity, UINT16 *numlumps);
|
void W_GetFolderLumpsPwad(const char *name, UINT16 wad, UINT32 **list, UINT16 *list_capacity, UINT16 *numlumps);
|
||||||
void W_GetFolderLumps(const char *name, UINT32 **list, UINT16 *list_capacity, UINT16 *numlumps);
|
void W_GetFolderLumps(const char *name, UINT32 **list, UINT16 *list_capacity, UINT16 *numlumps);
|
||||||
|
|
26
thirdparty/00-SDL-Mixer-X-2.6.0-DISABLE_INSTALL.patch
vendored
Normal file
26
thirdparty/00-SDL-Mixer-X-2.6.0-DISABLE_INSTALL.patch
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
--- a/CMakeLists.txt 2023-11-22 22:42:53.000000000 -0500
|
||||||
|
+++ b/CMakeLists.txt 2024-02-15 18:46:57.852076200 -0500
|
||||||
|
@@ -45,6 +45,7 @@
|
||||||
|
|
||||||
|
option(SDL_MIXER_X_STATIC "Build static library of SDL Mixer X" ${SDL_MIXER_X_STATIC_ENABLED_BY_DEFAULT})
|
||||||
|
option(SDL_MIXER_X_SHARED "Build shared library of SDL Mixer X" ${SDL_MIXER_X_SHARED_ENABLED_BY_DEFAULT})
|
||||||
|
+ option(SDL_MIXER_X_DISABLE_INSTALL "Disable install of SDL Mixer X" OFF)
|
||||||
|
else()
|
||||||
|
set(SDL_MIXER_X_STATIC ON)
|
||||||
|
set(SDL_MIXER_X_SHARED OFF)
|
||||||
|
@@ -475,6 +476,7 @@
|
||||||
|
add_subdirectory(examples)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
+if(NOT SDL_MIXER_X_DISABLE_INSTALL)
|
||||||
|
if(SDL_MIXER_X_STATIC AND NOT BUILD_AS_VB6_BINDING)
|
||||||
|
install(TARGETS SDL2_mixer_ext_Static
|
||||||
|
EXPORT SDL2MixerExtStaticTargets
|
||||||
|
@@ -500,6 +502,7 @@
|
||||||
|
NAMESPACE SDL2_mixer_ext::
|
||||||
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/SDL2_mixer_ext")
|
||||||
|
endif()
|
||||||
|
+endif()
|
||||||
|
|
||||||
|
|
||||||
|
if(BUILD_AS_VB6_BINDING)
|
23
thirdparty/CMakeLists.txt
vendored
23
thirdparty/CMakeLists.txt
vendored
|
@ -1,23 +1,2 @@
|
||||||
macro(export)
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
if(SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES)
|
include("Ccache.cmake")
|
||||||
set(SRB2_INTERNAL_LIBRARY_TYPE SHARED)
|
|
||||||
set(NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES OFF)
|
|
||||||
else()
|
|
||||||
set(SRB2_INTERNAL_LIBRARY_TYPE STATIC)
|
|
||||||
set(NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}")
|
|
||||||
include("cpm-sdl2.cmake")
|
|
||||||
include("cpm-sdl2-mixer.cmake")
|
|
||||||
include("cpm-zlib.cmake")
|
|
||||||
include("cpm-png.cmake")
|
|
||||||
include("cpm-curl.cmake")
|
|
||||||
include("cpm-openmpt.cmake")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if("${SRB2_CONFIG_USE_GME}")
|
|
||||||
include("cpm-libgme.cmake")
|
|
||||||
endif()
|
|
||||||
|
|
15
thirdparty/Ccache.cmake
vendored
Normal file
15
thirdparty/Ccache.cmake
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# Enable CCache
|
||||||
|
# (Set USE_CCACHE=ON to use, CCACHE_OPTIONS for options)
|
||||||
|
if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL Windows)
|
||||||
|
option(USE_CCACHE "Enable ccache support" OFF)
|
||||||
|
|
||||||
|
if(USE_CCACHE)
|
||||||
|
find_program(CCACHE_TOOL_PATH ccache)
|
||||||
|
if(CCACHE_TOOL_PATH)
|
||||||
|
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_TOOL_PATH} CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_TOOL_PATH} CACHE STRING "" FORCE)
|
||||||
|
else()
|
||||||
|
message(WARNING "USE_CCACHE was set but ccache is not found (set CCACHE_TOOL_PATH)")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
16
thirdparty/cpm-libgme.cmake
vendored
16
thirdparty/cpm-libgme.cmake
vendored
|
@ -1,16 +0,0 @@
|
||||||
CPMAddPackage(
|
|
||||||
NAME libgme
|
|
||||||
VERSION 0.6.3
|
|
||||||
URL "https://bitbucket.org/mpyne/game-music-emu/get/e76bdc0cb916e79aa540290e6edd0c445879d3ba.zip"
|
|
||||||
EXCLUDE_FROM_ALL ON
|
|
||||||
OPTIONS
|
|
||||||
"BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
||||||
"ENABLE_UBSAN OFF"
|
|
||||||
"GME_YM2612_EMU MAME"
|
|
||||||
)
|
|
||||||
|
|
||||||
if(libgme_ADDED)
|
|
||||||
target_compile_features(gme PRIVATE cxx_std_11)
|
|
||||||
# libgme's CMakeLists.txt already links this
|
|
||||||
#target_link_libraries(gme PRIVATE ZLIB::ZLIB)
|
|
||||||
endif()
|
|
69
thirdparty/cpm-png.cmake
vendored
69
thirdparty/cpm-png.cmake
vendored
|
@ -1,69 +0,0 @@
|
||||||
CPMAddPackage(
|
|
||||||
NAME png
|
|
||||||
VERSION 1.6.38
|
|
||||||
URL "https://github.com/glennrp/libpng/archive/refs/tags/v1.6.38.zip"
|
|
||||||
# png cmake build is broken on msys/mingw32
|
|
||||||
DOWNLOAD_ONLY YES
|
|
||||||
)
|
|
||||||
|
|
||||||
if(png_ADDED)
|
|
||||||
# Since png's cmake build is broken, we're going to create a target manually
|
|
||||||
set(
|
|
||||||
PNG_SOURCES
|
|
||||||
png.h
|
|
||||||
pngconf.h
|
|
||||||
pngpriv.h
|
|
||||||
pngdebug.h
|
|
||||||
pnginfo.h
|
|
||||||
pngstruct.h
|
|
||||||
png.c
|
|
||||||
pngerror.c
|
|
||||||
pngget.c
|
|
||||||
pngmem.c
|
|
||||||
pngpread.c
|
|
||||||
pngread.c
|
|
||||||
pngrio.c
|
|
||||||
pngrtran.c
|
|
||||||
pngrutil.c
|
|
||||||
pngset.c
|
|
||||||
pngtrans.c
|
|
||||||
pngwio.c
|
|
||||||
pngwrite.c
|
|
||||||
pngwtran.c
|
|
||||||
pngwutil.c
|
|
||||||
)
|
|
||||||
list(TRANSFORM PNG_SOURCES PREPEND "${png_SOURCE_DIR}/")
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT "${png_BINARY_DIR}/include/png.h" "${png_BINARY_DIR}/include/pngconf.h"
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy "${png_SOURCE_DIR}/png.h" "${png_SOURCE_DIR}/pngconf.h" "${png_BINARY_DIR}/include"
|
|
||||||
DEPENDS "${png_SOURCE_DIR}/png.h" "${png_SOURCE_DIR}/pngconf.h"
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT "${png_BINARY_DIR}/include/pnglibconf.h"
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy "${png_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt" "${png_BINARY_DIR}/include/pnglibconf.h"
|
|
||||||
DEPENDS "${png_SOURCE_DIR}/scripts/pnglibconf.h.prebuilt"
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
list(
|
|
||||||
APPEND PNG_SOURCES
|
|
||||||
"${png_BINARY_DIR}/include/png.h"
|
|
||||||
"${png_BINARY_DIR}/include/pngconf.h"
|
|
||||||
"${png_BINARY_DIR}/include/pnglibconf.h"
|
|
||||||
)
|
|
||||||
add_library(png "${SRB2_INTERNAL_LIBRARY_TYPE}" ${PNG_SOURCES})
|
|
||||||
|
|
||||||
# Disable ARM NEON since having it automatic breaks libpng external build on clang for some reason
|
|
||||||
target_compile_definitions(png PRIVATE -DPNG_ARM_NEON_OPT=0)
|
|
||||||
|
|
||||||
# The png includes need to be available to consumers
|
|
||||||
target_include_directories(png PUBLIC "${png_BINARY_DIR}/include")
|
|
||||||
|
|
||||||
# ... and these also need to be present only for png build
|
|
||||||
target_include_directories(png PRIVATE "${ZLIB_SOURCE_DIR}")
|
|
||||||
target_include_directories(png PRIVATE "${ZLIB_BINARY_DIR}")
|
|
||||||
target_include_directories(png PRIVATE "${png_BINARY_DIR}")
|
|
||||||
target_link_libraries(png PRIVATE ZLIB::ZLIB)
|
|
||||||
add_library(PNG::PNG ALIAS png)
|
|
||||||
endif()
|
|
22
thirdparty/cpm-sdl2-mixer.cmake
vendored
22
thirdparty/cpm-sdl2-mixer.cmake
vendored
|
@ -1,22 +0,0 @@
|
||||||
CPMAddPackage(
|
|
||||||
NAME SDL2_mixer
|
|
||||||
VERSION 2.6.2
|
|
||||||
URL "https://github.com/libsdl-org/SDL_mixer/archive/refs/tags/release-2.6.2.zip"
|
|
||||||
EXCLUDE_FROM_ALL ON
|
|
||||||
OPTIONS
|
|
||||||
"BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
||||||
"SDL2MIXER_INSTALL OFF"
|
|
||||||
"SDL2MIXER_DEPS_SHARED OFF"
|
|
||||||
"SDL2MIXER_SAMPLES OFF"
|
|
||||||
"SDL2MIXER_VENDORED ON"
|
|
||||||
"SDL2MIXER_FLAC ON"
|
|
||||||
"SDL2MIXER_FLAC_LIBFLAC OFF"
|
|
||||||
"SDL2MIXER_FLAC_DRFLAC ON"
|
|
||||||
"SDL2MIXER_MOD OFF"
|
|
||||||
"SDL2MIXER_MP3 ON"
|
|
||||||
"SDL2MIXER_MP3_DRMP3 ON"
|
|
||||||
"SDL2MIXER_MIDI ON"
|
|
||||||
"SDL2MIXER_OPUS OFF"
|
|
||||||
"SDL2MIXER_VORBIS STB"
|
|
||||||
"SDL2MIXER_WAVE ON"
|
|
||||||
)
|
|
28
thirdparty/cpm-sdl2.cmake
vendored
28
thirdparty/cpm-sdl2.cmake
vendored
|
@ -1,28 +0,0 @@
|
||||||
set(
|
|
||||||
internal_sdl2_options
|
|
||||||
|
|
||||||
"BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
||||||
"SDL_SHARED ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
||||||
"SDL_STATIC ${NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
|
||||||
"SDL_TEST OFF"
|
|
||||||
"SDL2_DISABLE_INSTALL ON"
|
|
||||||
)
|
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM} MATCHES Windows)
|
|
||||||
list(APPEND internal_sdl2_options "SDL2_DISABLE_SDL2MAIN OFF")
|
|
||||||
endif()
|
|
||||||
if(${CMAKE_SYSTEM} MATCHES Darwin)
|
|
||||||
list(APPEND internal_sdl2_options "SDL2_DISABLE_SDL2MAIN OFF")
|
|
||||||
endif()
|
|
||||||
if(${CMAKE_SYSTEM} MATCHES Linux)
|
|
||||||
list(APPEND internal_sdl2_options "SDL2_DISABLE_SDL2MAIN ON")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
CPMAddPackage(
|
|
||||||
NAME SDL2
|
|
||||||
VERSION 2.28.5
|
|
||||||
GITHUB_REPOSITORY "libsdl-org/SDL"
|
|
||||||
GIT_TAG release-2.28.5
|
|
||||||
EXCLUDE_FROM_ALL ON
|
|
||||||
OPTIONS ${internal_sdl2_options}
|
|
||||||
)
|
|
18
thirdparty/cpm-zlib.cmake
vendored
18
thirdparty/cpm-zlib.cmake
vendored
|
@ -1,18 +0,0 @@
|
||||||
CPMAddPackage(
|
|
||||||
NAME zlib
|
|
||||||
VERSION 1.3.1
|
|
||||||
GITHUB_REPOSITORY "madler/zlib"
|
|
||||||
GIT_TAG v1.3.1
|
|
||||||
EXCLUDE_FROM_ALL
|
|
||||||
OPTIONS
|
|
||||||
"ZLIB_BUILD_EXAMPLES OFF"
|
|
||||||
)
|
|
||||||
|
|
||||||
if(zlib_ADDED)
|
|
||||||
if(SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES)
|
|
||||||
add_library(ZLIB::ZLIB ALIAS zlib)
|
|
||||||
endif()
|
|
||||||
if(NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES)
|
|
||||||
add_library(ZLIB::ZLIB ALIAS zlibstatic)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
|
@ -1,8 +1,16 @@
|
||||||
|
if(TARGET CURL::libcurl)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "Third-party: creating target 'CURL::libcurl'")
|
||||||
|
|
||||||
|
set(CURL_ENABLE_EXPORT_TARGET OFF CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
set(
|
set(
|
||||||
internal_curl_options
|
internal_curl_options
|
||||||
|
|
||||||
"BUILD_CURL_EXE OFF"
|
"BUILD_CURL_EXE OFF"
|
||||||
"BUILD_SHARED_LIBS ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
"BUILD_SHARED_LIBS OFF"
|
||||||
"CURL_DISABLE_TESTS ON"
|
"CURL_DISABLE_TESTS ON"
|
||||||
"HTTP_ONLY ON"
|
"HTTP_ONLY ON"
|
||||||
"CURL_DISABLE_CRYPTO_AUTH ON"
|
"CURL_DISABLE_CRYPTO_AUTH ON"
|
||||||
|
@ -26,10 +34,25 @@ if(${CMAKE_SYSTEM} MATCHES Linux)
|
||||||
list(APPEND internal_curl_options "CURL_USE_OPENSSL ON")
|
list(APPEND internal_curl_options "CURL_USE_OPENSSL ON")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
CPMAddPackage(
|
include(FetchContent)
|
||||||
NAME curl
|
|
||||||
VERSION 7.86.0
|
if (CURL_USE_THIRDPARTY)
|
||||||
URL "https://github.com/curl/curl/archive/refs/tags/curl-7_86_0.zip"
|
FetchContent_Declare(
|
||||||
EXCLUDE_FROM_ALL ON
|
curl
|
||||||
OPTIONS ${internal_curl_options}
|
VERSION 7.88.1
|
||||||
)
|
GITHUB_REPOSITORY "curl/curl"
|
||||||
|
GIT_TAG curl-7_88_1
|
||||||
|
EXCLUDE_FROM_ALL ON
|
||||||
|
OPTIONS ${internal_curl_options}
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
FetchContent_Declare(
|
||||||
|
curl
|
||||||
|
SOURCE_DIR "${CMAKE_SOURCE_DIR}/thirdparty/curl/"
|
||||||
|
EXCLUDE_FROM_ALL ON
|
||||||
|
OPTIONS ${internal_curl_options}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
FetchContent_MakeAvailable(curl)
|
||||||
|
|
38
thirdparty/libapng.cmake
vendored
Normal file
38
thirdparty/libapng.cmake
vendored
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
if(TARGET libapng_static)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "Third-party: creating target 'libapng_static'")
|
||||||
|
|
||||||
|
set(PNG_SHARED OFF CACHE BOOL "" FORCE)
|
||||||
|
set(PNG_BUILD_ZLIB ON CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
|
include(FetchContent)
|
||||||
|
|
||||||
|
FetchContent_Declare(
|
||||||
|
libapng-local
|
||||||
|
SOURCE_DIR "${CMAKE_SOURCE_DIR}/thirdparty/libapng/"
|
||||||
|
EXCLUDE_FROM_ALL ON
|
||||||
|
DOWNLOAD_ONLY YES
|
||||||
|
OPTION
|
||||||
|
"PNG_SHARED OFF"
|
||||||
|
"PNG_EXECUTABLES OFF"
|
||||||
|
"PNG_TESTS OFF"
|
||||||
|
"PNG_BUILD_ZLIB ON"
|
||||||
|
)
|
||||||
|
|
||||||
|
FetchContent_MakeAvailable(libapng-local)
|
||||||
|
|
||||||
|
#add_custom_command(
|
||||||
|
#OUTPUT ${libapng-local_BINARY_DIR}/CMakeLists.txt
|
||||||
|
#COMMAND ${CMAKE_COMMAND}
|
||||||
|
# -Din_file:FILEPATH=${libapng-locall_SOURCE_DIR}/CMakeLists.txt
|
||||||
|
# -Dpatch_file:FILEPATH=${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/00-libapng-ZLIB.patch
|
||||||
|
# -Dout_file:FILEPATH=${libapng-local_BINARY_DIR}/CMakeLists.txt
|
||||||
|
# -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/PatchFile.cmake
|
||||||
|
#DEPENDS ${libapng-local_SOURCE_DIR}/CMakeLists.txt
|
||||||
|
#)
|
||||||
|
|
||||||
|
set(libapng_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/libapng" "${libapng_BINARY_DIR}" CACHE PATH "" FORCE)
|
||||||
|
|
||||||
|
set(libapng_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/libapng/png.h" "${CMAKE_CURRENT_SOURCE_DIR}/libapng/pngconf.h" CACHE PATH "" FORCE)
|
|
@ -1,13 +1,33 @@
|
||||||
CPMAddPackage(
|
if(TARGET libopenmpt)
|
||||||
NAME openmpt
|
#return()
|
||||||
VERSION 0.4.30
|
endif()
|
||||||
URL "https://github.com/OpenMPT/openmpt/archive/refs/tags/libopenmpt-0.4.30.zip"
|
|
||||||
DOWNLOAD_ONLY ON
|
|
||||||
)
|
|
||||||
|
|
||||||
if(openmpt_ADDED)
|
message(STATUS "Third-party: creating target 'libopenmpt'")
|
||||||
|
|
||||||
|
|
||||||
|
include(FetchContent)
|
||||||
|
|
||||||
|
if (libopenmpt_USE_THIRDPARTY)
|
||||||
|
FetchContent_Declare(
|
||||||
|
libopenmpt-local
|
||||||
|
GITHUB_REPOSITORY openmpt
|
||||||
|
GIT_TAG libopenmpt-0.4.38
|
||||||
|
version 0.4.38
|
||||||
|
EXCLUDE_FROM_ALL ON
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
FetchContent_Declare(
|
||||||
|
libopenmpt-local
|
||||||
|
SOURCE_DIR "${CMAKE_SOURCE_DIR}/thirdparty/libopenmpt/"
|
||||||
|
EXCLUDE_FROM_ALL ON
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
FetchContent_MakeAvailable(libopenmpt)
|
||||||
|
|
||||||
|
if(aaaa-libopenmpt-local_ADDED)
|
||||||
set(
|
set(
|
||||||
openmpt_SOURCES
|
libopenmpt-local_SOURCES
|
||||||
|
|
||||||
# minimp3
|
# minimp3
|
||||||
# -DMPT_WITH_MINIMP3
|
# -DMPT_WITH_MINIMP3
|
||||||
|
@ -264,26 +284,26 @@ if(openmpt_ADDED)
|
||||||
libopenmpt/libopenmpt_impl.cpp
|
libopenmpt/libopenmpt_impl.cpp
|
||||||
libopenmpt/libopenmpt_ext_impl.cpp
|
libopenmpt/libopenmpt_ext_impl.cpp
|
||||||
)
|
)
|
||||||
list(TRANSFORM openmpt_SOURCES PREPEND "${openmpt_SOURCE_DIR}/")
|
list(TRANSFORM libopenmpt-local_SOURCES PREPEND "${libopenmpt-local_SOURCE_DIR}/")
|
||||||
|
|
||||||
# -DLIBOPENMPT_BUILD
|
# -DLIBOPENMPT_BUILD
|
||||||
configure_file("openmpt_svn_version.h" "svn_version.h")
|
configure_file("openmpt_svn_version.h" "svn_version.h")
|
||||||
add_library(openmpt "${SRB2_INTERNAL_LIBRARY_TYPE}" ${openmpt_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/svn_version.h)
|
add_library(libopenmpt STATIC ${libopenmpt-local_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/svn_version.h)
|
||||||
if("${CMAKE_C_COMPILER_ID}" STREQUAL GNU OR "${CMAKE_C_COMPILER_ID}" STREQUAL Clang OR "${CMAKE_C_COMPILER_ID}" STREQUAL AppleClang)
|
if("${CMAKE_C_COMPILER_ID}" STREQUAL GNU OR "${CMAKE_C_COMPILER_ID}" STREQUAL Clang OR "${CMAKE_C_COMPILER_ID}" STREQUAL AppleClang)
|
||||||
target_compile_options(openmpt PRIVATE "-g0")
|
target_compile_options(libopenmpt PRIVATE "-g0")
|
||||||
endif()
|
endif()
|
||||||
if("${CMAKE_SYSTEM_NAME}" STREQUAL Windows AND "${CMAKE_C_COMPILER_ID}" STREQUAL MSVC)
|
if("${CMAKE_SYSTEM_NAME}" STREQUAL Windows AND "${CMAKE_C_COMPILER_ID}" STREQUAL MSVC)
|
||||||
target_link_libraries(openmpt PRIVATE Rpcrt4)
|
target_link_libraries(libopenmpt PRIVATE Rpcrt4)
|
||||||
endif()
|
endif()
|
||||||
target_compile_features(openmpt PRIVATE cxx_std_11)
|
target_compile_features(libopenmpt PRIVATE cxx_std_11)
|
||||||
target_compile_definitions(openmpt PRIVATE -DLIBOPENMPT_BUILD)
|
target_compile_definitions(libopenmpt PRIVATE -DLIBOPENMPT_BUILD)
|
||||||
|
|
||||||
target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}/common")
|
target_include_directories(libopenmpt PRIVATE "${libopenmpt-local_SOURCE_DIR}/common")
|
||||||
target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}/src")
|
target_include_directories(libopenmpt PRIVATE "${libopenmpt-local_SOURCE_DIR}/src")
|
||||||
target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}/include")
|
target_include_directories(libopenmpt PRIVATE "${libopenmpt-local_SOURCE_DIR}/include")
|
||||||
target_include_directories(openmpt PRIVATE "${openmpt_SOURCE_DIR}")
|
target_include_directories(libopenmpt PRIVATE "${libopenmpt-local_SOURCE_DIR}")
|
||||||
target_include_directories(openmpt PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
|
target_include_directories(libopenmpt PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
|
||||||
# I wish this wasn't necessary, but it is
|
# I wish this wasn't necessary, but it is
|
||||||
target_include_directories(openmpt PUBLIC "${openmpt_SOURCE_DIR}")
|
target_include_directories(libopenmpt PUBLIC "${libopenmpt-local_SOURCE_DIR}")
|
||||||
endif()
|
endif()
|
1728
thirdparty/libpng-1.6.40-apng.patch
vendored
Normal file
1728
thirdparty/libpng-1.6.40-apng.patch
vendored
Normal file
File diff suppressed because it is too large
Load diff
10
thirdparty/openmpt_svn_version.h
vendored
10
thirdparty/openmpt_svn_version.h
vendored
|
@ -1,10 +0,0 @@
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#define OPENMPT_VERSION_SVNVERSION "17963"
|
|
||||||
#define OPENMPT_VERSION_REVISION 17963
|
|
||||||
#define OPENMPT_VERSION_DIRTY 0
|
|
||||||
#define OPENMPT_VERSION_MIXEDREVISIONS 0
|
|
||||||
#define OPENMPT_VERSION_URL "https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.4.32"
|
|
||||||
#define OPENMPT_VERSION_DATE "2022-09-25T14:19:05.052596Z"
|
|
||||||
#define OPENMPT_VERSION_IS_PACKAGE 1
|
|
||||||
|
|
39
thirdparty/sdl2-mixer-ext.cmake
vendored
Normal file
39
thirdparty/sdl2-mixer-ext.cmake
vendored
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
if(TARGET SDL2_mixer_ext_Static)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "Third-party: creating target 'SDL2_mixer_ext::SDL2_mixer_ext'")
|
||||||
|
|
||||||
|
set(SDL_MIXER_X_SHARED ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES} CACHE BOOL "" FORCE)
|
||||||
|
set(SDL_MIXER_X_STATIC ${NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES} CACHE BOOL "" FORCE)
|
||||||
|
set(SDL_MIXER_X_DISABLE_INSTALL ON CACHE BOOL "" FORCE)
|
||||||
|
set(USE_SYSTEM_SDL2 ON CACHE BOOL "" FORCE)
|
||||||
|
set(SDL2_INCLUDE_PATH ${SDL2_INCLUDE_DIR} CACHE PATH "" FORCE)
|
||||||
|
set(USE_XMP OFF CACHE PATH "" FORCE)
|
||||||
|
|
||||||
|
set(
|
||||||
|
internal_SDL2_mixer_ext_options
|
||||||
|
"SDL_MIXER_X_SHARED ${SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
||||||
|
"SDL_MIXER_X_STATIC ${NOT_SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES}"
|
||||||
|
"SDL_MIXER_X_DISABLE_INSTALL ON"
|
||||||
|
"USE_SYSTEM_SDL2 ON"
|
||||||
|
"USE_XMP OFF"
|
||||||
|
)
|
||||||
|
|
||||||
|
if(${CMAKE_SYSTEM} MATCHES Windows)
|
||||||
|
#list(APPEND internal_SDL2_mixer_ext_options "DOWNLOAD_AUDIO_CODECS_DEPENDENCY ON")
|
||||||
|
#set(DOWNLOAD_AUDIO_CODECS_DEPENDENCY ON CACHE BOOL "" FORCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FetchContent)
|
||||||
|
|
||||||
|
|
||||||
|
FetchContent_Declare(
|
||||||
|
SDL2_mixer_ext
|
||||||
|
OPTIONS ${internal_SDL2_mixer_ext_options}
|
||||||
|
GIT_TAG "2.6.0-1"
|
||||||
|
GIT_REPOSITORY "https://github.com/STJr/SDL-Mixer-X.git"
|
||||||
|
)
|
||||||
|
|
||||||
|
FetchContent_MakeAvailable(SDL2_mixer_ext)
|
||||||
|
|
61
thirdparty/sdl2.cmake
vendored
Normal file
61
thirdparty/sdl2.cmake
vendored
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
if(TARGET SDL2-static)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "Third-party: creating target 'SDL2::SDL2'")
|
||||||
|
|
||||||
|
set(SDL_STATIC ON CACHE BOOL "" FORCE)
|
||||||
|
set(SDL_SHARED OFF CACHE BOOL "" FORCE)
|
||||||
|
set(SDL_TEST OFF CACHE BOOL "" FORCE)
|
||||||
|
set(SDL2_DISABLE_INSTALL OFF CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
|
set(
|
||||||
|
internal_sdl2_options
|
||||||
|
|
||||||
|
"SDL_STATIC ON"
|
||||||
|
"SDL_SHARED OFF"
|
||||||
|
"SDL_TEST OFF"
|
||||||
|
"SDL2_DISABLE_INSTALL OFF"
|
||||||
|
)
|
||||||
|
|
||||||
|
if(${CMAKE_SYSTEM} MATCHES Windows)
|
||||||
|
list(APPEND internal_sdl2_options "SDL2_DISABLE_SDL2MAIN OFF")
|
||||||
|
option(SDL2_DISABLE_SDL2MAIN "Disable building/installation of SDL2main" OFF)
|
||||||
|
set(SDL2_DISABLE_SDL2MAIN OFF CACHE BOOL "" FORCE)
|
||||||
|
endif()
|
||||||
|
if(${CMAKE_SYSTEM} MATCHES Darwin)
|
||||||
|
list(APPEND internal_sdl2_options "SDL2_DISABLE_SDL2MAIN OFF")
|
||||||
|
option(SDL2_DISABLE_SDL2MAIN "Disable building/installation of SDL2main" OFF)
|
||||||
|
set(SDL2_DISABLE_SDL2MAIN OFF CACHE BOOL "" FORCE)
|
||||||
|
endif()
|
||||||
|
if(${CMAKE_SYSTEM} MATCHES Linux)
|
||||||
|
list(APPEND internal_sdl2_options "SDL2_DISABLE_SDL2MAIN ON")
|
||||||
|
option(SDL2_DISABLE_SDL2MAIN "Disable building/installation of SDL2main" ON)
|
||||||
|
set(SDL2_DISABLE_SDL2MAIN ON CACHE BOOL "" FORCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FetchContent)
|
||||||
|
|
||||||
|
if (SDL2_USE_THIRDPARTY)
|
||||||
|
FetchContent_Declare(
|
||||||
|
SDL2
|
||||||
|
VERSION 2.30.0
|
||||||
|
GITHUB_REPOSITORY "libsdl-org/SDL"
|
||||||
|
GIT_TAG release-2.30.0
|
||||||
|
OPTIONS ${internal_sdl2_options}
|
||||||
|
OVERRIDE_FIND_PACKAGE
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
FetchContent_Declare(
|
||||||
|
SDL2
|
||||||
|
SOURCE_DIR "${CMAKE_SOURCE_DIR}/thirdparty/SDL2/"
|
||||||
|
OPTIONS ${internal_sdl2_options}
|
||||||
|
OVERRIDE_FIND_PACKAGE
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
FetchContent_MakeAvailable(SDL2)
|
||||||
|
|
||||||
|
set(SDL2_INCLUDE_DIR "${SDL2_BINARY_DIR}/include" CACHE PATH "" FORCE)
|
||||||
|
set(SDL2_LIBRARY "${SDL2_BINARY_DIR}/SDL2-staticd.lib" CACHE PATH "" FORCE)
|
||||||
|
set(SDL2_DIR ${SDL2_BINARY_DIR} CACHE PATH "" FORCE)
|
0
thirdparty/vcpkg-overlays/.placeholder
vendored
Normal file
0
thirdparty/vcpkg-overlays/.placeholder
vendored
Normal file
36
thirdparty/zlib.cmake
vendored
Normal file
36
thirdparty/zlib.cmake
vendored
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
if(TARGET ZLIB::ZLIB)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "Third-party: creating target 'ZLIB::ZLIB'")
|
||||||
|
|
||||||
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
|
include(FetchContent)
|
||||||
|
|
||||||
|
if (zlib_USE_THIRDPARTY)
|
||||||
|
FetchContent_Declare(
|
||||||
|
ZLIB
|
||||||
|
GITHUB_REPOSITORY "madler/zlib"
|
||||||
|
GIT_TAG v1.3.1
|
||||||
|
OVERRIDE_FIND_PACKAGE
|
||||||
|
OPTIONS
|
||||||
|
"ZLIB_BUILD_EXAMPLES OFF"
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
FetchContent_Declare(
|
||||||
|
ZLIB
|
||||||
|
SOURCE_DIR "${CMAKE_SOURCE_DIR}/thirdparty/zlib/"
|
||||||
|
OVERRIDE_FIND_PACKAGE
|
||||||
|
OPTIONS
|
||||||
|
"ZLIB_BUILD_EXAMPLES OFF"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
FetchContent_MakeAvailable(ZLIB)
|
||||||
|
|
||||||
|
|
||||||
|
add_library(ZLIB::ZLIB ALIAS zlibstatic)
|
||||||
|
|
||||||
|
set(ZLIB_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/zlib" "${zlib_BINARY_DIR}" CACHE PATH "" FORCE)
|
||||||
|
|
6
vcpkg-configuration.json
Normal file
6
vcpkg-configuration.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg-configuration.schema.json",
|
||||||
|
"overlay-ports": [
|
||||||
|
"./thirdparty/vcpkg-overlays"
|
||||||
|
]
|
||||||
|
}
|
85
vcpkg.json
Normal file
85
vcpkg.json
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
|
||||||
|
"name": "srb2",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"builtin-baseline": "c823fd3e57035b10d970a96da2796a2db55e5df5",
|
||||||
|
"dependencies": [
|
||||||
|
"curl",
|
||||||
|
{
|
||||||
|
"name": "libgme",
|
||||||
|
"platform": "!(windows & mingw) & !native"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libopenmpt",
|
||||||
|
"platform": "!(windows & mingw)"
|
||||||
|
},
|
||||||
|
"libpng",
|
||||||
|
"miniupnpc",
|
||||||
|
"sdl2",
|
||||||
|
{
|
||||||
|
"name": "sdl2-mixer-ext",
|
||||||
|
"features": [
|
||||||
|
{
|
||||||
|
"name": "cmd",
|
||||||
|
"platform": "linux"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libflac",
|
||||||
|
"platform": "!(windows & mingw & !static)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libgme",
|
||||||
|
"platform": "!(windows & mingw) & !native"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libmodplug",
|
||||||
|
"platform": "!(windows & mingw)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libopnmidi",
|
||||||
|
"platform": "!(windows & mingw)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libvorbis",
|
||||||
|
"platform": "!(windows & mingw & !static)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "libxmp",
|
||||||
|
"platform": "!(windows & mingw)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mpg123",
|
||||||
|
"platform": "!(windows & mingw)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nativemidi",
|
||||||
|
"platform": "!(windows & mingw)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "opusfile",
|
||||||
|
"platform": "!(windows & mingw)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pxtone",
|
||||||
|
"platform": "!(windows & mingw)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timidity",
|
||||||
|
"platform": "!(windows & mingw)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wavpack",
|
||||||
|
"platform": "!(windows & mingw)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"zlib"
|
||||||
|
],
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"name": "sdl2",
|
||||||
|
"version": "2.28.5",
|
||||||
|
"port-version": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in a new issue