diff --git a/CHANGELOG b/CHANGELOG index 34331fba..7758c325 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,27 @@ +Quake 2 8.31RR4: +- remove modle skin count limit, +- use short instead byte in frame verts +- mdl improve support of embeded texture, +- support more then 16k gl commends in models, +- support md5 models, +- fix player models select if players are packed to pak file. + +Quake 2 8.31RR3: +- third person support, +- update remasterd maps support in gl3/gl4 based renders, +- uopdate cinama render code for soft render, +- autobuild windows binaries on tag creation. + +Quake 2 8.31RR2: +- Merge hud/players code with ctf code, +- Support Shambler, Guardian monsters. + +Quake 2 8.21RR1: +- Suport mdl/fm/dkm models, +- Support ogv video by ffmpeg, +- Start merge ctf, xatrix, rogue to baseq2 code +- Support remastered maps in gl1/vk + Quake II 8.20 to 8.30: - Use the same image loading code in all renderers. (by 0lvin) - Use the same model loading code in all renderers. (by 0lvin) @@ -273,7 +297,7 @@ Quake II 7.10 to 7.20: - Rename several cvars to be consistent across different renderers. The configuration file will be converted at the first start, when an old cvar name is used a message is printed. -- Make the client unicode compatible. Yamagi Quake II can now be +- Make the client unicode compatible. Yamagi Quake II can now be installed into paths with unicode characters in it. On Windows the user name of the current account may contain unicode characters. As a side effect the game can run on ReFS volumes. While '+set diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index cd4b7c43..00000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,803 +0,0 @@ -cmake_minimum_required(VERSION 3.1 FATAL_ERROR) - -# Print a message that using the Makefiles is recommended. -message(NOTICE: " The CMakeLists.txt is unmaintained. Use the Makefile if possible.") - -# Enforce "Debug" as standard build type. -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) -endif() - -# CMake project configuration. -project(yquake2 C) - -# Cmake module search path. -set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/stuff/cmake/modules ${CMAKE_MODULE_PATH}) -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED OFF) - -if(YQUAKE2LIBS) - if(CMAKE_CROSSCOMPILING) - set(CMAKE_FIND_ROOT_PATH ${YQUAKE2LIBS}) - else() - set(ENV{CMAKE_PREFIX_PATH} ${YQUAKE2LIBS}) - endif() - - set(ENV{OPENALDIR} ${YQUAKE2LIBS}) - set(ENV{SDL2DIR} ${YQUAKE2LIBS}) -endif() - -# Add extended path for FreeBSD and Homebrew on OS X. -list(APPEND CMAKE_PREFIX_PATH /usr/local) - -if (MSVC) - add_compile_options(/MP) # parallel build (use all cores, or as many as configured in VS) - - # ignore some compiler warnings - add_compile_options(/wd4244 /wd4305) # possible loss of data/truncation (double to float etc; ignore) - add_compile_options(/wd4018) # signed/unsigned mismatch - add_compile_options(/wd4996) # 'function': was declared deprecated (like all that secure CRT stuff) - # don't show me warnings for system headers, why the fuck isn't this default - add_compile_options(/experimental:external /external:W0) -else() # GCC/clang/mingw -# Enforce compiler flags: -# -Wall -> More warnings -# -fno-strict-aliasing -> Quake 2 is far away from strict aliasing -# -fwrapv -> Make signed integer overflows defined -# -fvisibility=hidden -> Force defaultsymbol visibility to hidden -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fno-strict-aliasing -fwrapv -fvisibility=hidden") - -# Use -O2 as maximum optimization level. -O3 has it's problems with yquake2. -string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") -endif() # MSVC'S else-case - -# Switch off some annoying warnings -if (${CMAKE_C_COMPILER_ID} STREQUAL "Clang") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-braces") -elseif (${CMAKE_C_COMPILER_ID} STREQUAL "GNU") - if (CMAKE_C_COMPILER_VERSION GREATER 7.99) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format-truncation -Wno-format-overflow") - endif() -endif() - -# Compilation time options. -option(CURL_SUPPORT "cURL support" ON) -option(OPENAL_SUPPORT "OpenAL support" ON) -option(SYSTEMWIDE_SUPPORT "Enable systemwide installation of game assets" OFF) - -set(SYSTEMDIR "" CACHE STRING "Override the system default directory") - -# These variables will act as our list of include folders and linker flags. -set(yquake2IncludeDirectories) -set(yquake2LinkerDirectories) -set(yquake2LinkerFlags) -set(yquake2ClientLinkerFlags) -set(yquake2ServerLinkerFlags) -set(yquake2OpenGLLinkerFlags) -set(yquake2VulkanLinkerFlags) -set(yquake2SDLLinkerFlags) -set(yquake2ZLibLinkerFlags) - -# Set directory locations (allowing us to move directories easily) -set(SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src) -set(BACKENDS_SRC_DIR ${SOURCE_DIR}/backends) -set(COMMON_SRC_DIR ${SOURCE_DIR}/common) -set(GAME_SRC_DIR ${SOURCE_DIR}/game) -set(SERVER_SRC_DIR ${SOURCE_DIR}/server) -set(CLIENT_SRC_DIR ${SOURCE_DIR}/client) -set(REF_SRC_DIR ${SOURCE_DIR}/client/refresh) - -# Operating system. -set(YQ2OSTYPE "${CMAKE_SYSTEM_NAME}" CACHE STRING "Override operation system type") -add_definitions(-DYQ2OSTYPE="${YQ2OSTYPE}") - -# Architecture string -# work around CMake's useless/broken CMAKE_SYSTEM_PROCESSOR (taken from dhewm3) - -set(cpu ${CMAKE_SYSTEM_PROCESSOR}) - -# Originally, ${CMAKE_SYSTEM_PROCESSOR} was supposed to contain the *target* CPU, according to CMake's documentation. -# As far as I can tell this has always been broken (always returns host CPU) at least on Windows -# (see e.g. https://cmake.org/pipermail/cmake-developers/2014-September/011405.html) and wasn't reliable on -# other systems either, for example on Linux with 32bit userland but 64bit kernel it returned the kernel CPU type -# (e.g. x86_64 instead of i686). Instead of fixing this, CMake eventually updated their documentation in 3.20, -# now it's officially the same as CMAKE_HOST_SYSTEM_PROCESSOR except when cross-compiling (where it's explicitly set) -# So we gotta figure out the actual target CPU type ourselves.. -if(NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR)) - # special case: cross-compiling, here CMAKE_SYSTEM_PROCESSOR should be correct, hopefully - # (just leave cpu at ${CMAKE_SYSTEM_PROCESSOR}) -elseif(MSVC) - # because all this wasn't ugly enough, it turned out that, unlike standalone CMake, Visual Studio's - # integrated CMake doesn't set CMAKE_GENERATOR_PLATFORM, so I gave up on guessing the CPU arch here - # and moved the CPU detection to MSVC-specific code in neo/sys/platform.h -else() # not MSVC and not cross-compiling, assume GCC or clang (-compatible), seems to work for MinGW as well - execute_process(COMMAND ${CMAKE_C_COMPILER} "-dumpmachine" - RESULT_VARIABLE cc_dumpmachine_res - OUTPUT_VARIABLE cc_dumpmachine_out) - if(cc_dumpmachine_res EQUAL 0) - string(STRIP ${cc_dumpmachine_out} cc_dumpmachine_out) # get rid of trailing newline - message(DEBUG "`${CMAKE_C_COMPILER} -dumpmachine` says: \"${cc_dumpmachine_out}\"") - # gcc -dumpmachine and clang -dumpmachine seem to print something like "x86_64-linux-gnu" (gcc) - # or "x64_64-pc-linux-gnu" (clang) or "i686-w64-mingw32" (32bit mingw-w64) i.e. starting with the CPU, - # then "-" and then OS or whatever - so use everything up to first "-" - string(REGEX MATCH "^[^-]+" cpu ${cc_dumpmachine_out}) - message(DEBUG " => CPU architecture extracted from that: \"${cpu}\"") - else() - message(WARNING "${CMAKE_C_COMPILER} -dumpmachine failed with error (code) ${cc_dumpmachine_res}") - message(WARNING "will use the (sometimes incorrect) CMAKE_SYSTEM_PROCESSOR (${cpu}) to determine YQ2ARCH") - endif() -endif() - -if(cpu STREQUAL "powerpc") - set(cpu "ppc") -elseif(cpu STREQUAL "aarch64") - # "arm64" is more obvious, and some operating systems (like macOS) use it instead of "aarch64" - set(cpu "arm64") -elseif(cpu MATCHES "[aA][mM][dD]64" OR cpu MATCHES "[xX].*64") - set(cpu "x86_64") -elseif(cpu MATCHES "i.86" OR cpu MATCHES "[xX]86") - set(cpu "i386") -elseif(cpu MATCHES "[aA][rR][mM].*") # some kind of arm.. - # On 32bit Raspbian gcc -dumpmachine returns sth starting with "arm-", - # while clang -dumpmachine says "arm6k-..." - try to unify that to "arm" - if(CMAKE_SIZEOF_VOID_P EQUAL 8) # sizeof(void*) == 8 => must be arm64 - set(cpu "arm64") - else() # should be 32bit arm then (probably "armv7l" "armv6k" or sth like that) - set(cpu "arm") - endif() -endif() - -if(MSVC) - # for MSVC YQ2ARCH is set in code (in src/common/header/common.h) - message(STATUS "Setting YQ2OSTYPE to \"${YQ2OSTYPE}\" - NOT setting YQ2ARCH, because we're targeting MSVC (VisualC++)") -else() - set(ARCH "${cpu}") - add_definitions(-DYQ2ARCH="${ARCH}") - message(STATUS "Setting YQ2OSTYPE to \"${YQ2OSTYPE}\" and YQ2ARCH to \"${ARCH}\".") -endif() -# make sure that ${cpu} isn't used below - if at all use ${ARCH}, but not when compiling with MSVC! -unset(cpu) - -# END OF workarounds for CMake's poor choices regarding CPU architecture detection - - -# Systemwide installation of game assets. -if(${SYSTEMWIDE_SUPPORT}) - add_definitions(-DSYSTEMWIDE) - if(NOT ${SYSTEMDIR} STREQUAL "") - add_definitions(-DSYSTEMDIR="${SYSTEMDIR}") - endif() -endif() - -# We need to pass some options to minizip / unzip. -add_definitions(-DNOUNCRYPT) - -if(NOT (CMAKE_SYSTEM_NAME MATCHES "Linux") AND NOT (CMAKE_SYSTEM_NAME MATCHES "Windows")) - add_definitions(-DIOAPI_NO_64) -endif() - -# Required libraries to build the different components of the binaries. Find -# them and add the include/linker directories and flags (in case the package -# manager find it in a weird place). -find_package(SDL2 REQUIRED) -list(APPEND yquake2IncludeDirectories "${SDL2_INCLUDE_DIR}/..") -list(APPEND yquake2SDLLinkerFlags ${SDL2_LIBRARY}) - -# We need an OpenGL implementation. -set(OpenGL_GL_PREFERENCE GLVND) -find_package(OpenGL REQUIRED) -list(APPEND yquake2IncludeDirectories ${OPENGL_INCLUDE_DIR}) -list(APPEND yquake2OpenGLLinkerFlags ${OPENGL_LIBRARIES}) - -# backtrace lookup -# Some systems like Linux has it within the libc some like the BSD, Haiku ... -# into an external libexecinfo library -include(CheckFunctionExists) -include(CheckLibraryExists) -check_function_exists(backtrace HAVE_EXECINFO_SYS) -IF (NOT HAVE_EXECINFO_SYS) - check_library_exists(execinfo backtrace "" HAVE_EXECINFO_LIB) - if (HAVE_EXECINFO_LIB) - list(APPEND yquake2ClientLinkerFlags execinfo) - list(APPEND yquake2ServerLinkerFlags execinfo) - add_definitions(-DHAVE_EXECINFO) - endif() -else() - add_definitions(-DHAVE_EXECINFO) -endif() - -# cURL support. -if (${CURL_SUPPORT}) - find_package(CURL REQUIRED) - add_definitions(-DUSE_CURL) -endif() - -# OpenAL support. -if(${OPENAL_SUPPORT}) - find_package(OpenAL) - - if(${OPENAL_FOUND}) - list(APPEND yquake2IncludeDirectories "${OPENAL_INCLUDE_DIR}") - list(APPEND yquake2ClientLinkerFlags ${OPENAL_LIBRARY}) - - if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - add_definitions(-DUSE_OPENAL -DDEFAULT_OPENAL_DRIVER="openal32.dll") - elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - add_definitions(-DUSE_OPENAL -DDEFAULT_OPENAL_DRIVER="libopenal.dylib") - elseif((${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") OR (${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")) - add_definitions(-DUSE_OPENAL -DDEFAULT_OPENAL_DRIVER="libopenal.so") - else() - add_definitions(-DUSE_OPENAL -DDEFAULT_OPENAL_DRIVER="libopenal.so.1") - endif() - endif() -endif() - -# General linker flags. -if(NOT MSVC) - list(APPEND yquake2LinkerFlags m) -endif() -list(APPEND yquake2LinkerFlags ${CMAKE_DL_LIBS}) - -if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - if(!MSVC) - list(APPEND yquake2LinkerFlags "-static-libgcc") - endif() -else() - if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "Haiku") - list(APPEND yquake2LinkerFlags "-rdynamic") - else() - list(APPEND yquake2LinkerFlags "-lnetwork") - set(CMAKE_POSITION_INDEPENDENT_CODE ON) - endif() - if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") - list(APPEND yquake2LinkerFlags "-lsocket -lnsl") - endif() -endif() - -if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD" AND NOT WIN32) - list(APPEND yquake2LinkerFlags "-Wl,--no-undefined") -endif() - -# With all of those libraries and user defined paths -# added, lets give them to the compiler and linker. -include_directories(${yquake2IncludeDirectories}) -link_directories(${yquake2LinkerDirectories}) - -# these settings only work for GCC and clang -if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") - # If we're building with gcc for i386 let's define -ffloat-store. - # This helps the old and crappy x87 FPU to produce correct values. - # Would be nice if Clang had something comparable. - if ("${ARCH}" STREQUAL "i386" AND ${CMAKE_C_COMPILER_ID} STREQUAL "GNU") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffloat-store") - endif() - - # Force SSE math on x86_64. All sane compilers should do this - # anyway, just to protect us from broken Linux distros. - if ("${ARCH}" STREQUAL "x86_64") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpmath=sse") - endif() - - if ("${ARCH}" STREQUAL "arm") - if (CMAKE_SIZEOF_VOID_P EQUAL 4) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv6k") - endif() - endif() -endif() - -set(Backends-Generic-Source - ${BACKENDS_SRC_DIR}/generic/misc.c - ) - -set(Backends-Unix-Source - ${BACKENDS_SRC_DIR}/unix/main.c - ${BACKENDS_SRC_DIR}/unix/network.c - ${BACKENDS_SRC_DIR}/unix/signalhandler.c - ${BACKENDS_SRC_DIR}/unix/system.c - ${BACKENDS_SRC_DIR}/unix/shared/hunk.c - ) - -set(Backends-Windows-Source - ${BACKENDS_SRC_DIR}/windows/icon.rc - ${BACKENDS_SRC_DIR}/windows/main.c - ${BACKENDS_SRC_DIR}/windows/network.c - ${BACKENDS_SRC_DIR}/windows/system.c - ${BACKENDS_SRC_DIR}/windows/shared/hunk.c - ) - -set(Backends-Windows-Header - ${BACKENDS_SRC_DIR}/windows/header/resource.h - ) - -set(REF-Windows-Source - ${BACKENDS_SRC_DIR}/windows/shared/hunk.c - ) - -set(REF-Unix-Source - ${BACKENDS_SRC_DIR}/unix/shared/hunk.c - ) - -# Set the nessesary platform specific source -if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - set(Platform-Specific-Source ${Backends-Windows-Source} ${Backends-Windows-Header}) - set(REF-Platform-Specific-Source ${REF-Windows-Source}) -else() - set(Platform-Specific-Source ${Backends-Unix-Source}) - set(REF-Platform-Specific-Source ${REF-Unix-Source}) -endif() - -set(Game-Source - ${COMMON_SRC_DIR}/shared/flash.c - ${COMMON_SRC_DIR}/shared/rand.c - ${COMMON_SRC_DIR}/shared/shared.c - ${GAME_SRC_DIR}/g_ai.c - ${GAME_SRC_DIR}/g_chase.c - ${GAME_SRC_DIR}/g_cmds.c - ${GAME_SRC_DIR}/g_combat.c - ${GAME_SRC_DIR}/g_func.c - ${GAME_SRC_DIR}/g_items.c - ${GAME_SRC_DIR}/g_main.c - ${GAME_SRC_DIR}/g_misc.c - ${GAME_SRC_DIR}/g_monster.c - ${GAME_SRC_DIR}/g_phys.c - ${GAME_SRC_DIR}/g_spawn.c - ${GAME_SRC_DIR}/g_svcmds.c - ${GAME_SRC_DIR}/g_target.c - ${GAME_SRC_DIR}/g_trigger.c - ${GAME_SRC_DIR}/g_turret.c - ${GAME_SRC_DIR}/g_utils.c - ${GAME_SRC_DIR}/g_weapon.c - ${GAME_SRC_DIR}/monster/berserker/berserker.c - ${GAME_SRC_DIR}/monster/boss2/boss2.c - ${GAME_SRC_DIR}/monster/boss3/boss3.c - ${GAME_SRC_DIR}/monster/boss3/boss31.c - ${GAME_SRC_DIR}/monster/boss3/boss32.c - ${GAME_SRC_DIR}/monster/brain/brain.c - ${GAME_SRC_DIR}/monster/chick/chick.c - ${GAME_SRC_DIR}/monster/flipper/flipper.c - ${GAME_SRC_DIR}/monster/float/float.c - ${GAME_SRC_DIR}/monster/flyer/flyer.c - ${GAME_SRC_DIR}/monster/gladiator/gladiator.c - ${GAME_SRC_DIR}/monster/gunner/gunner.c - ${GAME_SRC_DIR}/monster/hover/hover.c - ${GAME_SRC_DIR}/monster/infantry/infantry.c - ${GAME_SRC_DIR}/monster/insane/insane.c - ${GAME_SRC_DIR}/monster/medic/medic.c - ${GAME_SRC_DIR}/monster/misc/move.c - ${GAME_SRC_DIR}/monster/mutant/mutant.c - ${GAME_SRC_DIR}/monster/parasite/parasite.c - ${GAME_SRC_DIR}/monster/soldier/soldier.c - ${GAME_SRC_DIR}/monster/supertank/supertank.c - ${GAME_SRC_DIR}/monster/tank/tank.c - ${GAME_SRC_DIR}/player/client.c - ${GAME_SRC_DIR}/player/hud.c - ${GAME_SRC_DIR}/player/trail.c - ${GAME_SRC_DIR}/player/view.c - ${GAME_SRC_DIR}/player/weapon.c - ${GAME_SRC_DIR}/savegame/savegame.c - ) - -set(Game-Header - ${GAME_SRC_DIR}/header/game.h - ${GAME_SRC_DIR}/header/local.h - ${GAME_SRC_DIR}/monster/berserker/berserker.h - ${GAME_SRC_DIR}/monster/boss2/boss2.h - ${GAME_SRC_DIR}/monster/boss3/boss31.h - ${GAME_SRC_DIR}/monster/boss3/boss32.h - ${GAME_SRC_DIR}/monster/brain/brain.h - ${GAME_SRC_DIR}/monster/chick/chick.h - ${GAME_SRC_DIR}/monster/flipper/flipper.h - ${GAME_SRC_DIR}/monster/float/float.h - ${GAME_SRC_DIR}/monster/flyer/flyer.h - ${GAME_SRC_DIR}/monster/gladiator/gladiator.h - ${GAME_SRC_DIR}/monster/gunner/gunner.h - ${GAME_SRC_DIR}/monster/hover/hover.h - ${GAME_SRC_DIR}/monster/infantry/infantry.h - ${GAME_SRC_DIR}/monster/insane/insane.h - ${GAME_SRC_DIR}/monster/medic/medic.h - ${GAME_SRC_DIR}/monster/misc/player.h - ${GAME_SRC_DIR}/monster/mutant/mutant.h - ${GAME_SRC_DIR}/monster/parasite/parasite.h - ${GAME_SRC_DIR}/monster/soldier/soldier.h - ${GAME_SRC_DIR}/monster/supertank/supertank.h - ${GAME_SRC_DIR}/monster/tank/tank.h - ${GAME_SRC_DIR}/savegame/tables/clientfields.h - ${GAME_SRC_DIR}/savegame/tables/fields.h - ${GAME_SRC_DIR}/savegame/tables/gamefunc_decs.h - ${GAME_SRC_DIR}/savegame/tables/gamefunc_list.h - ${GAME_SRC_DIR}/savegame/tables/gamemmove_decs.h - ${GAME_SRC_DIR}/savegame/tables/gamemmove_list.h - ${GAME_SRC_DIR}/savegame/tables/levelfields.h - ) - -set(Client-Source - ${CLIENT_SRC_DIR}/cl_cin.c - ${CLIENT_SRC_DIR}/cl_console.c - ${CLIENT_SRC_DIR}/cl_download.c - ${CLIENT_SRC_DIR}/cl_effects.c - ${CLIENT_SRC_DIR}/cl_entities.c - ${CLIENT_SRC_DIR}/cl_input.c - ${CLIENT_SRC_DIR}/cl_inventory.c - ${CLIENT_SRC_DIR}/cl_keyboard.c - ${CLIENT_SRC_DIR}/cl_lights.c - ${CLIENT_SRC_DIR}/cl_main.c - ${CLIENT_SRC_DIR}/cl_network.c - ${CLIENT_SRC_DIR}/cl_parse.c - ${CLIENT_SRC_DIR}/cl_particles.c - ${CLIENT_SRC_DIR}/cl_prediction.c - ${CLIENT_SRC_DIR}/cl_screen.c - ${CLIENT_SRC_DIR}/cl_tempentities.c - ${CLIENT_SRC_DIR}/cl_view.c - ${CLIENT_SRC_DIR}/curl/download.c - ${CLIENT_SRC_DIR}/curl/qcurl.c - ${CLIENT_SRC_DIR}/input/sdl.c - ${CLIENT_SRC_DIR}/menu/menu.c - ${CLIENT_SRC_DIR}/menu/qmenu.c - ${CLIENT_SRC_DIR}/menu/videomenu.c - ${CLIENT_SRC_DIR}/sound/ogg.c - ${CLIENT_SRC_DIR}/sound/openal.c - ${CLIENT_SRC_DIR}/sound/qal.c - ${CLIENT_SRC_DIR}/sound/sdl.c - ${CLIENT_SRC_DIR}/sound/sound.c - ${CLIENT_SRC_DIR}/sound/wave.c - ${CLIENT_SRC_DIR}/vid/glimp_sdl.c - ${CLIENT_SRC_DIR}/vid/vid.c - ${COMMON_SRC_DIR}/argproc.c - ${COMMON_SRC_DIR}/clientserver.c - ${COMMON_SRC_DIR}/collision.c - ${COMMON_SRC_DIR}/crc.c - ${COMMON_SRC_DIR}/cmdparser.c - ${COMMON_SRC_DIR}/cvar.c - ${COMMON_SRC_DIR}/filesystem.c - ${COMMON_SRC_DIR}/glob.c - ${COMMON_SRC_DIR}/md4.c - ${COMMON_SRC_DIR}/movemsg.c - ${COMMON_SRC_DIR}/frame.c - ${COMMON_SRC_DIR}/netchan.c - ${COMMON_SRC_DIR}/pmove.c - ${COMMON_SRC_DIR}/szone.c - ${COMMON_SRC_DIR}/zone.c - ${COMMON_SRC_DIR}/shared/flash.c - ${COMMON_SRC_DIR}/shared/rand.c - ${COMMON_SRC_DIR}/shared/shared.c - ${COMMON_SRC_DIR}/shared/utils.c - ${COMMON_SRC_DIR}/unzip/ioapi.c - ${COMMON_SRC_DIR}/unzip/unzip.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.c - ${SERVER_SRC_DIR}/sv_cmd.c - ${SERVER_SRC_DIR}/sv_conless.c - ${SERVER_SRC_DIR}/sv_entities.c - ${SERVER_SRC_DIR}/sv_game.c - ${SERVER_SRC_DIR}/sv_init.c - ${SERVER_SRC_DIR}/sv_main.c - ${SERVER_SRC_DIR}/sv_save.c - ${SERVER_SRC_DIR}/sv_send.c - ${SERVER_SRC_DIR}/sv_user.c - ${SERVER_SRC_DIR}/sv_world.c - ) - -set(Client-Header - ${CLIENT_SRC_DIR}/header/client.h - ${CLIENT_SRC_DIR}/header/console.h - ${CLIENT_SRC_DIR}/header/keyboard.h - ${CLIENT_SRC_DIR}/header/screen.h - ${CLIENT_SRC_DIR}/curl/header/download.h - ${CLIENT_SRC_DIR}/curl/header/qcurl.h - ${CLIENT_SRC_DIR}/input/header/input.h - ${CLIENT_SRC_DIR}/menu/header/qmenu.h - ${CLIENT_SRC_DIR}/sound/header/local.h - ${CLIENT_SRC_DIR}/sound/header/qal.h - ${CLIENT_SRC_DIR}/sound/header/sound.h - ${CLIENT_SRC_DIR}/sound/header/stb_vorbis.h - ${CLIENT_SRC_DIR}/sound/header/vorbis.h - ${CLIENT_SRC_DIR}/vid/header/ref.h - ${CLIENT_SRC_DIR}/vid/header/stb_image_write.h - ${CLIENT_SRC_DIR}/vid/header/vid.h - ${COMMON_SRC_DIR}/header/common.h - ${COMMON_SRC_DIR}/header/crc.h - ${COMMON_SRC_DIR}/header/files.h - ${COMMON_SRC_DIR}/header/glob.h - ${COMMON_SRC_DIR}/header/shared.h - ${COMMON_SRC_DIR}/header/zone.h - ${COMMON_SRC_DIR}/unzip/ioapi.h - ${COMMON_SRC_DIR}/unzip/unzip.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.h - ${COMMON_SRC_DIR}/unzip/miniz/minizconf.h - ${SERVER_SRC_DIR}/header/server.h - ) - -set(Server-Source - ${COMMON_SRC_DIR}/argproc.c - ${COMMON_SRC_DIR}/clientserver.c - ${COMMON_SRC_DIR}/collision.c - ${COMMON_SRC_DIR}/crc.c - ${COMMON_SRC_DIR}/cmdparser.c - ${COMMON_SRC_DIR}/cvar.c - ${COMMON_SRC_DIR}/filesystem.c - ${COMMON_SRC_DIR}/glob.c - ${COMMON_SRC_DIR}/md4.c - ${COMMON_SRC_DIR}/frame.c - ${COMMON_SRC_DIR}/movemsg.c - ${COMMON_SRC_DIR}/netchan.c - ${COMMON_SRC_DIR}/pmove.c - ${COMMON_SRC_DIR}/szone.c - ${COMMON_SRC_DIR}/zone.c - ${COMMON_SRC_DIR}/shared/rand.c - ${COMMON_SRC_DIR}/shared/shared.c - ${COMMON_SRC_DIR}/shared/utils.c - ${COMMON_SRC_DIR}/unzip/ioapi.c - ${COMMON_SRC_DIR}/unzip/unzip.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.c - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.c - ${SERVER_SRC_DIR}/sv_cmd.c - ${SERVER_SRC_DIR}/sv_conless.c - ${SERVER_SRC_DIR}/sv_entities.c - ${SERVER_SRC_DIR}/sv_game.c - ${SERVER_SRC_DIR}/sv_init.c - ${SERVER_SRC_DIR}/sv_main.c - ${SERVER_SRC_DIR}/sv_save.c - ${SERVER_SRC_DIR}/sv_send.c - ${SERVER_SRC_DIR}/sv_user.c - ${SERVER_SRC_DIR}/sv_world.c - ) - -set(Server-Header - ${COMMON_SRC_DIR}/header/common.h - ${COMMON_SRC_DIR}/header/crc.h - ${COMMON_SRC_DIR}/header/files.h - ${COMMON_SRC_DIR}/header/glob.h - ${COMMON_SRC_DIR}/header/shared.h - ${COMMON_SRC_DIR}/header/zone.h - ${COMMON_SRC_DIR}/unzip/ioapi.h - ${COMMON_SRC_DIR}/unzip/unzip.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tdef.h - ${COMMON_SRC_DIR}/unzip/miniz/miniz_tinfl.h - ${COMMON_SRC_DIR}/unzip/miniz/minizconf.h - ${SERVER_SRC_DIR}/header/server.h - ) - -set(GL1-Source - ${REF_SRC_DIR}/gl1/qgl.c - ${REF_SRC_DIR}/gl1/gl1_draw.c - ${REF_SRC_DIR}/gl1/gl1_image.c - ${REF_SRC_DIR}/gl1/gl1_light.c - ${REF_SRC_DIR}/gl1/gl1_lightmap.c - ${REF_SRC_DIR}/gl1/gl1_main.c - ${REF_SRC_DIR}/gl1/gl1_mesh.c - ${REF_SRC_DIR}/gl1/gl1_misc.c - ${REF_SRC_DIR}/gl1/gl1_model.c - ${REF_SRC_DIR}/gl1/gl1_scrap.c - ${REF_SRC_DIR}/gl1/gl1_surf.c - ${REF_SRC_DIR}/gl1/gl1_warp.c - ${REF_SRC_DIR}/gl1/gl1_sdl.c - ${REF_SRC_DIR}/files/models.c - ${REF_SRC_DIR}/files/pcx.c - ${REF_SRC_DIR}/files/stb.c - ${REF_SRC_DIR}/files/surf.c - ${REF_SRC_DIR}/files/wal.c - ${REF_SRC_DIR}/files/pvs.c - ${COMMON_SRC_DIR}/shared/shared.c - ${COMMON_SRC_DIR}/shared/utils.c - ${COMMON_SRC_DIR}/md4.c - ) - -set(GL1-Header - ${REF_SRC_DIR}/ref_shared.h - ${REF_SRC_DIR}/constants/anorms.h - ${REF_SRC_DIR}/constants/anormtab.h - ${REF_SRC_DIR}/constants/warpsin.h - ${REF_SRC_DIR}/files/stb_image.h - ${REF_SRC_DIR}/files/surf.c - ${REF_SRC_DIR}/gl1/header/local.h - ${REF_SRC_DIR}/gl1/header/model.h - ${REF_SRC_DIR}/gl1/header/qgl.h - ${COMMON_SRC_DIR}/header/shared.h - ) - -set(GL3-Source - ${REF_SRC_DIR}/gl3/gl3_draw.c - ${REF_SRC_DIR}/gl3/gl3_image.c - ${REF_SRC_DIR}/gl3/gl3_light.c - ${REF_SRC_DIR}/gl3/gl3_lightmap.c - ${REF_SRC_DIR}/gl3/gl3_main.c - ${REF_SRC_DIR}/gl3/gl3_mesh.c - ${REF_SRC_DIR}/gl3/gl3_misc.c - ${REF_SRC_DIR}/gl3/gl3_model.c - ${REF_SRC_DIR}/gl3/gl3_sdl.c - ${REF_SRC_DIR}/gl3/gl3_surf.c - ${REF_SRC_DIR}/gl3/gl3_warp.c - ${REF_SRC_DIR}/gl3/gl3_shaders.c - ${REF_SRC_DIR}/files/models.c - ${REF_SRC_DIR}/files/pcx.c - ${REF_SRC_DIR}/files/stb.c - ${REF_SRC_DIR}/files/surf.c - ${REF_SRC_DIR}/files/wal.c - ${REF_SRC_DIR}/files/pvs.c - ${COMMON_SRC_DIR}/shared/shared.c - ${COMMON_SRC_DIR}/shared/utils.c - ${COMMON_SRC_DIR}/md4.c - ) - -set(Glad-GL3-Source ${REF_SRC_DIR}/gl3/glad/src/glad.c) -set(Glad-GLES3-Source ${REF_SRC_DIR}/gl3/glad-gles3/src/glad.c) - -set(GL3-Header - ${REF_SRC_DIR}/ref_shared.h - ${REF_SRC_DIR}/constants/anorms.h - ${REF_SRC_DIR}/constants/anormtab.h - ${REF_SRC_DIR}/constants/warpsin.h - ${REF_SRC_DIR}/files/stb_image.h - ${REF_SRC_DIR}/files/DG_dynarr.h - ${REF_SRC_DIR}/files/HandmadeMath.h - ${REF_SRC_DIR}/gl3/header/local.h - ${REF_SRC_DIR}/gl3/header/model.h - ${COMMON_SRC_DIR}/header/shared.h - ) - -set(Glad-GL3-Header - ${REF_SRC_DIR}/gl3/glad/include/glad/glad.h - ${REF_SRC_DIR}/gl3/glad/include/KHR/khrplatform.h - ) - -set(Glad-GLES3-Header - ${REF_SRC_DIR}/gl3/glad-gles3/include/glad/glad.h - ${REF_SRC_DIR}/gl3/glad-gles3/include/KHR/khrplatform.h - ) - -set(SOFT-Source - ${REF_SRC_DIR}/soft/sw_aclip.c - ${REF_SRC_DIR}/soft/sw_alias.c - ${REF_SRC_DIR}/soft/sw_bsp.c - ${REF_SRC_DIR}/soft/sw_draw.c - ${REF_SRC_DIR}/soft/sw_edge.c - ${REF_SRC_DIR}/soft/sw_image.c - ${REF_SRC_DIR}/soft/sw_light.c - ${REF_SRC_DIR}/soft/sw_main.c - ${REF_SRC_DIR}/soft/sw_misc.c - ${REF_SRC_DIR}/soft/sw_model.c - ${REF_SRC_DIR}/soft/sw_part.c - ${REF_SRC_DIR}/soft/sw_poly.c - ${REF_SRC_DIR}/soft/sw_polyset.c - ${REF_SRC_DIR}/soft/sw_rast.c - ${REF_SRC_DIR}/soft/sw_scan.c - ${REF_SRC_DIR}/soft/sw_sprite.c - ${REF_SRC_DIR}/soft/sw_surf.c - ${REF_SRC_DIR}/files/models.c - ${REF_SRC_DIR}/files/pcx.c - ${REF_SRC_DIR}/files/stb.c - ${REF_SRC_DIR}/files/surf.c - ${REF_SRC_DIR}/files/wal.c - ${REF_SRC_DIR}/files/pvs.c - ${COMMON_SRC_DIR}/shared/shared.c - ${COMMON_SRC_DIR}/shared/utils.c - ${COMMON_SRC_DIR}/md4.c - ) - -set(SOFT-Header - ${REF_SRC_DIR}/ref_shared.h - ${REF_SRC_DIR}/files/stb_image.h - ${REF_SRC_DIR}/files/stb_image_resize.h - ${REF_SRC_DIR}/soft/header/local.h - ${REF_SRC_DIR}/soft/header/model.h - ${COMMON_SRC_DIR}/header/shared.h - ) - -# Main Quake 2 executable - -if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - add_executable(yquake2 WIN32 ${Client-Source} ${Client-Header} ${Platform-Specific-Source} - ${Backends-Generic-Source}) - set_target_properties(yquake2 PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - ) - target_link_libraries(yquake2 ${yquake2LinkerFlags} ${yquake2ClientLinkerFlags} - ${yquake2SDLLinkerFlags} ${yquake2ZLibLinkerFlags} ws2_32 winmm) - - if(MSVC AND CMAKE_MAJOR_VERSION GREATER 3 OR ( CMAKE_MAJOR_VERSION EQUAL 3 AND CMAKE_MINOR_VERSION GREATER_EQUAL 6 )) - # CMake >= 3.6 supports setting the default project started for debugging (instead of trying to launch ALL_BUILD ...) - set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT yquake2) - set_target_properties(yquake2 PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/release) - endif() - - # Wrapper for the Windows binary - set(Wrapper-Source - src/win-wrapper/wrapper.c - ${BACKENDS_SRC_DIR}/windows/icon.rc - ) - add_executable(quake2 WIN32 ${Wrapper-Source}) - set_target_properties(quake2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release) -else() - add_executable(quake2 ${Client-Source} ${Client-Header} ${Platform-Specific-Source} - ${Backends-Generic-Source}) - set_target_properties(quake2 PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - ) - target_link_libraries(quake2 ${yquake2LinkerFlags} ${yquake2ClientLinkerFlags} - ${yquake2SDLLinkerFlags} ${yquake2ZLibLinkerFlags}) -endif() - -# Quake 2 Dedicated Server -add_executable(q2ded ${Server-Source} ${Server-Header} ${Platform-Specific-Source} - ${Backends-Generic-Source}) -set_target_properties(q2ded PROPERTIES - COMPILE_DEFINITIONS "DEDICATED_ONLY" - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - ) -if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - target_link_libraries(q2ded ${yquake2LinkerFlags} ${yquake2SDLLinkerFlags} ${yquake2ZLibLinkerFlags} ws2_32 winmm) -else() - target_link_libraries(q2ded ${yquake2LinkerFlags} ${yquake2ServerLinkerFlags} ${yquake2ZLibLinkerFlags}) -endif() - -# Build the game dynamic library -add_library(game MODULE ${Game-Source} ${Game-Header}) - -set_target_properties(game PROPERTIES - PREFIX "" - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) - -get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(isMultiConfig) # multi-config, like Visual Studio solution - set_target_properties(game PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release/$/baseq2 - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release/$/baseq2 - ) -else() # single-config, like normal Makefiles - set_target_properties(game PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release/baseq2 - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release/baseq2 - ) -endif() - -target_link_libraries(game ${yquake2LinkerFlags}) - -# Build the GL1 dynamic library -add_library(ref_gl1 MODULE ${GL1-Source} ${GL1-Header} ${REF-Platform-Specific-Source}) -set_target_properties(ref_gl1 PROPERTIES - PREFIX "" - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) -target_link_libraries(ref_gl1 ${yquake2LinkerFlags} ${yquake2OpenGLLinkerFlags} ${yquake2SDLLinkerFlags}) - -# Build the GL3 dynamic library -add_library(ref_gl3 MODULE ${GL3-Source} ${Glad-GL3-Source} ${GL3-Header} ${Glad-GL3-Header} ${REF-Platform-Specific-Source}) -set_target_properties(ref_gl3 PROPERTIES - PREFIX "" - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) -target_include_directories(ref_gl3 PRIVATE ${CMAKE_SOURCE_DIR}/src/client/refresh/gl3/glad/include) -target_link_libraries(ref_gl3 ${yquake2LinkerFlags} ${yquake2SDLLinkerFlags}) - -# Build the GLES3 dynamic library -add_library(ref_gles3 MODULE ${GL3-Source} ${Glad-GLES3-Source} ${GL3-Header} ${Glad-GLES3-Header} ${REF-Platform-Specific-Source}) -set_target_properties(ref_gles3 PROPERTIES - PREFIX "" - #COMPILE_DEFINITIONS "YQ2_GL3_GLES3=1;YQ2_GL3_GLES=1" - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) -target_include_directories(ref_gles3 PRIVATE ${CMAKE_SOURCE_DIR}/src/client/refresh/gl3/glad-gles3/include) -target_compile_definitions(ref_gles3 PRIVATE YQ2_GL3_GLES3=1 YQ2_GL3_GLES=1) -target_link_libraries(ref_gles3 ${yquake2LinkerFlags} ${yquake2SDLLinkerFlags}) - -# Build the soft renderer dynamic library -add_library(ref_soft MODULE ${SOFT-Source} ${SOFT-Header} ${REF-Platform-Specific-Source}) -set_target_properties(ref_soft PROPERTIES - PREFIX "" - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - ) -target_link_libraries(ref_soft ${yquake2LinkerFlags} ${yquake2SDLLinkerFlags}) diff --git a/README.md b/README.md index 453f58f1..4ca18932 100644 --- a/README.md +++ b/README.md @@ -30,22 +30,47 @@ Monsters: * incorrect dead animation for Arachnoid * broken fire effect for Guardian +Models support: + +| Format | Original Game | Comments | +| mdl | Quake 1 | could be issues with textures | +| md2 | Quake 2 | full support | +| md2 | Anachronox | incorrect normals, does no suport tagged surfaces | +| fm | Heretic 2 | show all meshes, | +| dkm | Daikatana DKM1 | unchecked with game | +| dkm | Daikatana DKM2 | unchecked with game, incorrect normals | +| md3 | Quake 3 | show all meshes, no tags support, unchecked, slow | +| md5 | Doom 3/Quake 4 | requires md2 for skins, show all meshes, slow | + +All models support only single texture for all meshes and only up to 255 frames. + +Texture supported + +| Format | Original Game | Comments | +| wal | Quake 2 | 8 bit | +| wal | Daikatana | 8 bit | +| m8 | Heretic 2 | 8 bit | +| m32 | Heretic 2 | 24 bit | +| pcx | Quake2 | 24 bit | +| tga | Quake2 | 24 bit | +| png | retexturing | 24 bit | +| jpg | retexturing | 24 bit | +| bmp | Daikatana | 24 bit | + Goals (finished): * BSPX DECOUPLEDLM light map support (base1), * QBSP map format support (mguhub), - * RoQ and Theora cinematic videos support. - * FM/Heretic 2 model format support, - * Cinematic videos support in smk, mpeg, ogv format, * Use ffmpeg for load any video, - * MDL/Quake1 model format support, - * Daikatana model/wal/map format support, - * MD5 model support, + * RoQ and Theora cinematic videos support. + * Cinematic videos support in smk, mpeg, ogv format, + * Daikatana/Heretic map partial format support, * Add debug progress loading code for maps. + Goals (none of it finished): * md5 improve load speed, - * md3 fix possible memory coruption, * Single player support, + * support surface flags for Daikatana, Heretic 2, Anachronox, * modified ReRelease game code support with removed KEX only related code. Bonus goals: @@ -55,7 +80,6 @@ Bonus goals: * Convert map surface flag by game type, * Cleanup function declarations in game save code, * Support scalled textures for models and walls in soft render and fix - lighting with remastered maps. Not a goal: