mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-28 22:52:02 +00:00
Fix some warnings. Hopefully fix bullet plugin.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5287 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
aede46c776
commit
98b71860ed
33 changed files with 439 additions and 264 deletions
200
CMakeLists.txt
200
CMakeLists.txt
|
@ -1,7 +1,13 @@
|
||||||
#Note: this file was made primarily to support msvc and its project file incompatibilities nightmare.
|
#Note: this file was made primarily to support msvc and its project file incompatibilities nightmare.
|
||||||
|
#Its also useful for various other IDEs like QtCreator etc.
|
||||||
|
#It uses system libraries, so it will have dependancy issues with public releases where those dependancies are distro/version-specific.
|
||||||
|
#Public builds are still built using the (overcomplicated) traditional (g)makefile.
|
||||||
|
|
||||||
|
IF(${ANDROID})
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.9)
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.6) #special dispensation for android crap.
|
||||||
|
ELSE()
|
||||||
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.9)
|
||||||
|
ENDIF()
|
||||||
PROJECT(fteqw)
|
PROJECT(fteqw)
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(
|
INCLUDE_DIRECTORIES(
|
||||||
|
@ -30,14 +36,38 @@ ENDIF()
|
||||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
||||||
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
||||||
|
|
||||||
#use LTO where possible. reportedly requires cmake 3.9 to actually work
|
IF(${CMAKE_VERSION} VERSION_LESS "3.9.0")
|
||||||
INCLUDE(CheckIPOSupported)
|
#android studio sucks and insists on using an outdated version of cmake instead of the system version.
|
||||||
check_ipo_supported(RESULT result)
|
ELSE()
|
||||||
IF(result)
|
IF(NOT ${CMAKE_BUILD_TYPE} MATCHES "Debug")
|
||||||
SET(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
#use LTO where possible. reportedly requires cmake 3.9 to actually work
|
||||||
|
INCLUDE(CheckIPOSupported)
|
||||||
|
check_ipo_supported(RESULT result)
|
||||||
|
IF(result)
|
||||||
|
SET(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(${WIN32})
|
if (CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-pointer-sign")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
IF(${ANDROID})
|
||||||
|
# FIND_PACKAGE(Freetype REQUIRED)
|
||||||
|
|
||||||
|
# INCLUDE_DIRECTORIES( ${FREETYPE_INCLUDE_DIRS} )
|
||||||
|
|
||||||
|
SET(FTE_DEFINES ANDROID;GLQUAKE;VKQUAKE;DYNAMIC_LIBPNG;DYNAMIC_LIBJPEG;MULTITHREAD;stricmp=strcasecmp;strnicmp=strncasecmp)
|
||||||
|
SET(FTE_LIBS android log EGL z m ${CMAKE_DL_LIBS})
|
||||||
|
SET(FTE_ARCH_FILES
|
||||||
|
engine/client/sys_droid.c
|
||||||
|
engine/common/sys_linux_threads.c
|
||||||
|
engine/client/snd_droid.c
|
||||||
|
engine/client/cd_null.c
|
||||||
|
engine/gl/gl_viddroid.c
|
||||||
|
)
|
||||||
|
ELSEIF(${WIN32})
|
||||||
INCLUDE_DIRECTORIES(engine/libs engine/libs/freetype2/include)
|
INCLUDE_DIRECTORIES(engine/libs engine/libs/freetype2/include)
|
||||||
# LINK_DIRECTORIES(engine/libs/mingw64-libs)
|
# LINK_DIRECTORIES(engine/libs/mingw64-libs)
|
||||||
|
|
||||||
|
@ -129,13 +159,13 @@ ELSEIF(${UNIX}) #linux(ish)
|
||||||
)
|
)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(FTESV_DEFINES stricmp=strcasecmp;strnicmp=strncasecmp)
|
SET(FTESV_DEFINES MULTITHREAD;stricmp=strcasecmp;strnicmp=strncasecmp)
|
||||||
SET(FTESV_ARCH_FILES
|
SET(FTESV_ARCH_FILES
|
||||||
engine/server/sv_sys_unix.c
|
engine/server/sv_sys_unix.c
|
||||||
engine/common/sys_linux_threads.c
|
engine/common/sys_linux_threads.c
|
||||||
engine/common/net_ssl_gnutls.c
|
engine/common/net_ssl_gnutls.c
|
||||||
)
|
)
|
||||||
SET(FTESV_LIBS z m ${CMAKE_DL_LIBS})
|
SET(FTESV_LIBS z m ${CMAKE_DL_LIBS} pthread)
|
||||||
ELSEIF(1) #SDL
|
ELSEIF(1) #SDL
|
||||||
FIND_PACKAGE(Freetype REQUIRED)
|
FIND_PACKAGE(Freetype REQUIRED)
|
||||||
# INCLUDE_DIRECTORIES(engine/libs engine/libs/freetype2/include)
|
# INCLUDE_DIRECTORIES(engine/libs engine/libs/freetype2/include)
|
||||||
|
@ -318,11 +348,9 @@ SET(FTE_COMMON_FILES
|
||||||
|
|
||||||
engine/http/httpclient.c
|
engine/http/httpclient.c
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_EXECUTABLE(fteqw WIN32
|
#these files are only in the client
|
||||||
${FTE_ARCH_FILES}
|
SET(FTE_CLIENT_FILES
|
||||||
${FTE_COMMON_FILES}
|
|
||||||
|
|
||||||
engine/client/cl_cam.c
|
engine/client/cl_cam.c
|
||||||
engine/client/cl_cg.c
|
engine/client/cl_cg.c
|
||||||
engine/client/cl_demo.c
|
engine/client/cl_demo.c
|
||||||
|
@ -402,53 +430,73 @@ ADD_EXECUTABLE(fteqw WIN32
|
||||||
engine/gl/gl_screen.c
|
engine/gl/gl_screen.c
|
||||||
engine/gl/gl_vidcommon.c
|
engine/gl/gl_vidcommon.c
|
||||||
engine/gl/glmod_doom.c
|
engine/gl/glmod_doom.c
|
||||||
|
|
||||||
engine/vk/vk_backend.c
|
engine/vk/vk_backend.c
|
||||||
engine/vk/vk_init.c
|
engine/vk/vk_init.c
|
||||||
)
|
)
|
||||||
SET_TARGET_PROPERTIES(fteqw PROPERTIES COMPILE_DEFINITIONS "${FTE_DEFINES};${FTE_REVISON}")
|
|
||||||
TARGET_LINK_LIBRARIES(fteqw ${FTE_LIBS} )
|
|
||||||
|
|
||||||
ADD_EXECUTABLE(fteqw-sv
|
IF(${ANDROID})
|
||||||
${FTESV_ARCH_FILES}
|
#android sucks. everything is a library. so we build the engine as a shared library and completely ignore dedicated servers+tools
|
||||||
${FTE_COMMON_FILES}
|
|
||||||
)
|
ADD_LIBRARY(ftedroid MODULE
|
||||||
SET_TARGET_PROPERTIES(fteqw-sv PROPERTIES COMPILE_DEFINITIONS "SERVERONLY;${FTESV_DEFINES};${FTE_REVISON}")
|
${FTE_ARCH_FILES}
|
||||||
TARGET_LINK_LIBRARIES(fteqw-sv ${FTESV_LIBS})
|
${FTE_COMMON_FILES}
|
||||||
|
${FTE_CLIENT_FILES}
|
||||||
|
)
|
||||||
|
SET_TARGET_PROPERTIES(ftedroid PROPERTIES COMPILE_DEFINITIONS "${FTE_DEFINES};${FTE_REVISON}")
|
||||||
|
TARGET_LINK_LIBRARIES(ftedroid ${FTE_LIBS} )
|
||||||
|
|
||||||
|
ELSE()
|
||||||
|
#systems that actually have executables...
|
||||||
|
ADD_EXECUTABLE(fteqw WIN32
|
||||||
|
${FTE_ARCH_FILES}
|
||||||
|
${FTE_COMMON_FILES}
|
||||||
|
${FTE_CLIENT_FILES}
|
||||||
|
)
|
||||||
|
|
||||||
|
SET_TARGET_PROPERTIES(fteqw PROPERTIES COMPILE_DEFINITIONS "${FTE_DEFINES};${FTE_REVISON}")
|
||||||
|
TARGET_LINK_LIBRARIES(fteqw ${FTE_LIBS} )
|
||||||
|
|
||||||
|
ADD_EXECUTABLE(fteqw-sv
|
||||||
|
${FTESV_ARCH_FILES}
|
||||||
|
${FTE_COMMON_FILES}
|
||||||
|
)
|
||||||
|
SET_TARGET_PROPERTIES(fteqw-sv PROPERTIES COMPILE_DEFINITIONS "SERVERONLY;${FTESV_DEFINES};${FTE_REVISON}")
|
||||||
|
TARGET_LINK_LIBRARIES(fteqw-sv ${FTESV_LIBS})
|
||||||
|
|
||||||
|
|
||||||
ADD_EXECUTABLE(fteqcc
|
ADD_EXECUTABLE(fteqcc
|
||||||
engine/qclib/qcctui.c
|
engine/qclib/qcctui.c
|
||||||
engine/qclib/comprout.c
|
engine/qclib/comprout.c
|
||||||
engine/qclib/hash.c
|
engine/qclib/hash.c
|
||||||
engine/qclib/qcc_cmdlib.c
|
engine/qclib/qcc_cmdlib.c
|
||||||
engine/qclib/qcc_pr_comp.c
|
engine/qclib/qcc_pr_comp.c
|
||||||
engine/qclib/qcc_pr_lex.c
|
engine/qclib/qcc_pr_lex.c
|
||||||
engine/qclib/qccmain.c
|
engine/qclib/qccmain.c
|
||||||
engine/qclib/qcd_main.c
|
engine/qclib/qcd_main.c
|
||||||
)
|
)
|
||||||
TARGET_LINK_LIBRARIES(fteqcc z m)
|
TARGET_LINK_LIBRARIES(fteqcc z m)
|
||||||
|
|
||||||
|
|
||||||
IF(${WIN32})
|
IF(${WIN32})
|
||||||
ADD_EXECUTABLE(fteqccgui WIN32
|
ADD_EXECUTABLE(fteqccgui WIN32
|
||||||
engine/qclib/qccgui.c
|
engine/qclib/qccgui.c
|
||||||
engine/qclib/qccguistuff.c
|
engine/qclib/qccguistuff.c
|
||||||
engine/qclib/comprout.c
|
engine/qclib/comprout.c
|
||||||
engine/qclib/hash.c
|
engine/qclib/hash.c
|
||||||
engine/qclib/qcc_cmdlib.c
|
engine/qclib/qcc_cmdlib.c
|
||||||
engine/qclib/qcc_pr_comp.c
|
engine/qclib/qcc_pr_comp.c
|
||||||
engine/qclib/qcc_pr_lex.c
|
engine/qclib/qcc_pr_lex.c
|
||||||
engine/qclib/qccmain.c
|
engine/qclib/qccmain.c
|
||||||
engine/qclib/decomp.c
|
engine/qclib/decomp.c
|
||||||
engine/qclib/packager.c
|
engine/qclib/packager.c
|
||||||
engine/qclib/qcd_main.c
|
engine/qclib/qcd_main.c
|
||||||
)
|
)
|
||||||
TARGET_LINK_LIBRARIES(fteqccgui z shlwapi ole32 comctl32 comdlg32)
|
TARGET_LINK_LIBRARIES(fteqccgui z shlwapi ole32 comctl32 comdlg32)
|
||||||
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#Quake Injector Alike plugin
|
#Quake Injector Alike plugin
|
||||||
ADD_LIBRARY(qi MODULE
|
ADD_LIBRARY(qi MODULE
|
||||||
plugins/qvm_api.c
|
plugins/qvm_api.c
|
||||||
|
@ -460,6 +508,28 @@ ADD_LIBRARY(qi MODULE
|
||||||
SET_TARGET_PROPERTIES(qi PROPERTIES COMPILE_DEFINITIONS "FTEPLUGIN")
|
SET_TARGET_PROPERTIES(qi PROPERTIES COMPILE_DEFINITIONS "FTEPLUGIN")
|
||||||
SET_TARGET_PROPERTIES(qi PROPERTIES PREFIX "fteplug_")
|
SET_TARGET_PROPERTIES(qi PROPERTIES PREFIX "fteplug_")
|
||||||
|
|
||||||
|
#Bullet Physics library plugin
|
||||||
|
FIND_PACKAGE(Bullet REQUIRED)
|
||||||
|
ADD_LIBRARY(bullet MODULE
|
||||||
|
plugins/qvm_api.c
|
||||||
|
plugins/plugin.c
|
||||||
|
plugins/bullet/bulletplug.cpp
|
||||||
|
)
|
||||||
|
TARGET_INCLUDE_DIRECTORIES(bullet PUBLIC ${BULLET_INCLUDE_DIRS})
|
||||||
|
SET_TARGET_PROPERTIES(bullet PROPERTIES COMPILE_DEFINITIONS "FTEPLUGIN")
|
||||||
|
SET_TARGET_PROPERTIES(bullet PROPERTIES PREFIX "fteplug_")
|
||||||
|
|
||||||
|
#Bullet Physics library plugin
|
||||||
|
#FIND_PACKAGE(ode REQUIRED)
|
||||||
|
ADD_LIBRARY(ode MODULE
|
||||||
|
plugins/qvm_api.c
|
||||||
|
plugins/plugin.c
|
||||||
|
engine/common/com_phys_ode.c
|
||||||
|
)
|
||||||
|
TARGET_INCLUDE_DIRECTORIES(ode PUBLIC ${BULLET_INCLUDE_DIRS})
|
||||||
|
SET_TARGET_PROPERTIES(ode PROPERTIES COMPILE_DEFINITIONS "FTEPLUGIN;ODE_STATIC")
|
||||||
|
SET_TARGET_PROPERTIES(ode PROPERTIES PREFIX "fteplug_")
|
||||||
|
|
||||||
#EzQuake Hud port plugin
|
#EzQuake Hud port plugin
|
||||||
ADD_LIBRARY(ezhud MODULE
|
ADD_LIBRARY(ezhud MODULE
|
||||||
plugins/qvm_api.c
|
plugins/qvm_api.c
|
||||||
|
@ -481,19 +551,21 @@ ADD_LIBRARY(irc MODULE
|
||||||
SET_TARGET_PROPERTIES(irc PROPERTIES COMPILE_DEFINITIONS "FTEPLUGIN")
|
SET_TARGET_PROPERTIES(irc PROPERTIES COMPILE_DEFINITIONS "FTEPLUGIN")
|
||||||
SET_TARGET_PROPERTIES(irc PROPERTIES PREFIX "fteplug_")
|
SET_TARGET_PROPERTIES(irc PROPERTIES PREFIX "fteplug_")
|
||||||
|
|
||||||
#XMPP/jabber client plugin
|
IF(NOT ${ANDROID})
|
||||||
ADD_LIBRARY(xmpp MODULE
|
#XMPP/jabber client plugin
|
||||||
plugins/qvm_api.c
|
ADD_LIBRARY(xmpp MODULE
|
||||||
plugins/plugin.c
|
plugins/qvm_api.c
|
||||||
plugins/jabber/jabberclient.c
|
plugins/plugin.c
|
||||||
plugins/jabber/xml.c
|
plugins/jabber/jabberclient.c
|
||||||
plugins/jabber/jingle.c
|
plugins/jabber/xml.c
|
||||||
plugins/jabber/sift.c
|
plugins/jabber/jingle.c
|
||||||
engine/common/sha1.c
|
plugins/jabber/sift.c
|
||||||
plugins/emailnot/md5.c
|
engine/common/sha1.c
|
||||||
)
|
plugins/emailnot/md5.c
|
||||||
SET_TARGET_PROPERTIES(xmpp PROPERTIES COMPILE_DEFINITIONS "FTEPLUGIN")
|
)
|
||||||
SET_TARGET_PROPERTIES(xmpp PROPERTIES PREFIX "fteplug_")
|
SET_TARGET_PROPERTIES(xmpp PROPERTIES COMPILE_DEFINITIONS "FTEPLUGIN")
|
||||||
|
SET_TARGET_PROPERTIES(xmpp PROPERTIES PREFIX "fteplug_")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
#ffmpeg plugin
|
#ffmpeg plugin
|
||||||
#cef plugin
|
#cef plugin
|
||||||
|
|
|
@ -35,6 +35,7 @@ OPUSVER=1.2.1
|
||||||
SPEEXVER=1.2.0
|
SPEEXVER=1.2.0
|
||||||
SPEEXDSPVER=1.2rc3
|
SPEEXDSPVER=1.2rc3
|
||||||
FREETYPEVER=2.9
|
FREETYPEVER=2.9
|
||||||
|
BULLETVER=2.87
|
||||||
|
|
||||||
#only limited forms of cross-making is supported
|
#only limited forms of cross-making is supported
|
||||||
#only the following 3 are supported
|
#only the following 3 are supported
|
||||||
|
@ -106,9 +107,11 @@ endif
|
||||||
|
|
||||||
ifeq ($(BITS),64)
|
ifeq ($(BITS),64)
|
||||||
CC:=$(CC) -m64
|
CC:=$(CC) -m64
|
||||||
|
CXX:=$(CXX) -m64
|
||||||
endif
|
endif
|
||||||
ifeq ($(BITS),32)
|
ifeq ($(BITS),32)
|
||||||
CC:=$(CC) -m32
|
CC:=$(CC) -m32
|
||||||
|
CXX:=$(CXX) -m32
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#correct the gcc build when cross compiling
|
#correct the gcc build when cross compiling
|
||||||
|
@ -119,6 +122,7 @@ ifneq (,$(findstring win32,$(FTE_TARGET)))
|
||||||
ifneq ($(shell which i586-mingw32msvc-gcc 2> /dev/null),)
|
ifneq ($(shell which i586-mingw32msvc-gcc 2> /dev/null),)
|
||||||
#yup, the alternative exists (this matches the one debian has)
|
#yup, the alternative exists (this matches the one debian has)
|
||||||
CC=i586-mingw32msvc-gcc
|
CC=i586-mingw32msvc-gcc
|
||||||
|
CXX=i586-mingw32msvc-g++
|
||||||
AR=i586-mingw32msvc-ar
|
AR=i586-mingw32msvc-ar
|
||||||
WINDRES=i586-mingw32msvc-windres
|
WINDRES=i586-mingw32msvc-windres
|
||||||
STRIP=i586-mingw32msvc-strip
|
STRIP=i586-mingw32msvc-strip
|
||||||
|
@ -128,6 +132,7 @@ ifneq (,$(findstring win32,$(FTE_TARGET)))
|
||||||
ifneq ($(shell which i686-w64-mingw32-gcc 2> /dev/null),)
|
ifneq ($(shell which i686-w64-mingw32-gcc 2> /dev/null),)
|
||||||
#yup, the alternative exists (this matches the one debian has)
|
#yup, the alternative exists (this matches the one debian has)
|
||||||
CC=i686-w64-mingw32-gcc
|
CC=i686-w64-mingw32-gcc
|
||||||
|
CXX=i686-w64-mingw32-g++
|
||||||
AR=i686-w64-mingw32-ar
|
AR=i686-w64-mingw32-ar
|
||||||
WINDRES=i686-w64-mingw32-windres
|
WINDRES=i686-w64-mingw32-windres
|
||||||
STRIP=i686-w64-mingw32-strip
|
STRIP=i686-w64-mingw32-strip
|
||||||
|
@ -143,6 +148,7 @@ ifneq (,$(findstring win64,$(FTE_TARGET)))
|
||||||
ifneq ($(shell which x86_64-w64-mingw32-gcc 2> /dev/null),)
|
ifneq ($(shell which x86_64-w64-mingw32-gcc 2> /dev/null),)
|
||||||
#yup, the alternative exists (this matches the one debian has)
|
#yup, the alternative exists (this matches the one debian has)
|
||||||
CC=x86_64-w64-mingw32-gcc -m64
|
CC=x86_64-w64-mingw32-gcc -m64
|
||||||
|
CXX=x86_64-w64-mingw32-g++ -m64
|
||||||
AR=x86_64-w64-mingw32-ar
|
AR=x86_64-w64-mingw32-ar
|
||||||
WINDRES=x86_64-w64-mingw32-windres
|
WINDRES=x86_64-w64-mingw32-windres
|
||||||
STRIP=x86_64-w64-mingw32-strip
|
STRIP=x86_64-w64-mingw32-strip
|
||||||
|
@ -151,6 +157,7 @@ ifneq (,$(findstring win64,$(FTE_TARGET)))
|
||||||
ifneq ($(shell which amd64-mingw32msvc-gcc 2> /dev/null),)
|
ifneq ($(shell which amd64-mingw32msvc-gcc 2> /dev/null),)
|
||||||
#yup, the alternative exists (this matches the one debian has)
|
#yup, the alternative exists (this matches the one debian has)
|
||||||
CC=amd64-mingw32msvc-gcc -m64
|
CC=amd64-mingw32msvc-gcc -m64
|
||||||
|
CXX=amd64-mingw32msvc-g++ -m64
|
||||||
AR=amd64-mingw32msvc-ar
|
AR=amd64-mingw32msvc-ar
|
||||||
WINDRES=amd64-mingw32msvc-windres
|
WINDRES=amd64-mingw32msvc-windres
|
||||||
STRIP=amd64-mingw32msvc-strip
|
STRIP=amd64-mingw32msvc-strip
|
||||||
|
@ -279,6 +286,7 @@ ifeq ($(FTE_TARGET),droid)
|
||||||
ANDROID_SCRIPT=android.bat
|
ANDROID_SCRIPT=android.bat
|
||||||
#make can't cope with absolute win32 paths in dependancy files
|
#make can't cope with absolute win32 paths in dependancy files
|
||||||
DEPCC=
|
DEPCC=
|
||||||
|
DEPCXX=
|
||||||
|
|
||||||
ifneq ($(realpath $(TOOLCHAINPATH)),) #don't invoke cygpath when realpath returns nothing due to dodgy paths (which happens when stuff isn't set up right for the top-level makefile)
|
ifneq ($(realpath $(TOOLCHAINPATH)),) #don't invoke cygpath when realpath returns nothing due to dodgy paths (which happens when stuff isn't set up right for the top-level makefile)
|
||||||
#configure hates android, with its broken default sysroot and lack of path etc
|
#configure hates android, with its broken default sysroot and lack of path etc
|
||||||
|
@ -289,6 +297,7 @@ ifeq ($(FTE_TARGET),droid)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CC:=$(TOOLCHAIN)gcc --sysroot="$(DROIDSYSROOT)" -DANDROID $(DROID_ABI) -fno-strict-aliasing
|
CC:=$(TOOLCHAIN)gcc --sysroot="$(DROIDSYSROOT)" -DANDROID $(DROID_ABI) -fno-strict-aliasing
|
||||||
|
CXX:=$(TOOLCHAIN)g++ --sysroot="$(DROIDSYSROOT)" -DANDROID $(DROID_ABI) -fno-strict-aliasing
|
||||||
DO_LD=$(DO_ECHO) $(CC) -Wl,-soname,libftedroid.so -shared -Wl,--no-undefined -Wl,-z,noexecstack -o $@ $(LTO_LD) $(WCFLAGS) $(BRANDFLAGS) $(CFLAGS) -llog -lc -lm -lz
|
DO_LD=$(DO_ECHO) $(CC) -Wl,-soname,libftedroid.so -shared -Wl,--no-undefined -Wl,-z,noexecstack -o $@ $(LTO_LD) $(WCFLAGS) $(BRANDFLAGS) $(CFLAGS) -llog -lc -lm -lz
|
||||||
LD:=$(TOOLCHAIN)ld
|
LD:=$(TOOLCHAIN)ld
|
||||||
AR:=$(TOOLCHAIN)ar
|
AR:=$(TOOLCHAIN)ar
|
||||||
|
@ -305,6 +314,7 @@ ifeq ($(FTE_TARGET),macosx)
|
||||||
ifeq ($(shell $(CC) -v 2>&1 | grep apple),)
|
ifeq ($(shell $(CC) -v 2>&1 | grep apple),)
|
||||||
ifneq ($(shell which powerpc-apple-darwin8-gcc 2> /dev/null),)
|
ifneq ($(shell which powerpc-apple-darwin8-gcc 2> /dev/null),)
|
||||||
CC=powerpc-apple-darwin8-gcc
|
CC=powerpc-apple-darwin8-gcc
|
||||||
|
CXX=powerpc-apple-darwin8-g++
|
||||||
STRIP=powerpc-apple-darwin8-strip
|
STRIP=powerpc-apple-darwin8-strip
|
||||||
#seems, macosx has a more limited version of strip
|
#seems, macosx has a more limited version of strip
|
||||||
STRIPFLAGS=
|
STRIPFLAGS=
|
||||||
|
@ -319,6 +329,7 @@ ifeq ($(FTE_TARGET),macosx_ppc64)
|
||||||
ifneq ($(shell which powerpc-apple-darwin8-gcc 2> /dev/null),)
|
ifneq ($(shell which powerpc-apple-darwin8-gcc 2> /dev/null),)
|
||||||
FTE_TARGET=macosx
|
FTE_TARGET=macosx
|
||||||
CC=powerpc-apple-darwin8-gcc -arch ppc64
|
CC=powerpc-apple-darwin8-gcc -arch ppc64
|
||||||
|
CXX=powerpc-apple-darwin8-g++ -arch ppc64
|
||||||
STRIP=powerpc-apple-darwin8-strip
|
STRIP=powerpc-apple-darwin8-strip
|
||||||
#seems, macosx has a more limited version of strip
|
#seems, macosx has a more limited version of strip
|
||||||
STRIPFLAGS=
|
STRIPFLAGS=
|
||||||
|
@ -334,6 +345,7 @@ ifeq ($(FTE_TARGET),macosx_x86)
|
||||||
FTE_TARGET=macosx
|
FTE_TARGET=macosx
|
||||||
# i686-apple-darwin8-gcc's default target is i386, powerpc-apple-darwin8-gcc -arch i386 just invokes i686-apple-darwin8-gcc anyway
|
# i686-apple-darwin8-gcc's default target is i386, powerpc-apple-darwin8-gcc -arch i386 just invokes i686-apple-darwin8-gcc anyway
|
||||||
CC=i686-apple-darwin8-gcc
|
CC=i686-apple-darwin8-gcc
|
||||||
|
CXX=i686-apple-darwin8-g++
|
||||||
STRIP=i686-apple-darwin8-strip
|
STRIP=i686-apple-darwin8-strip
|
||||||
#seems, macosx has a more limited version of strip
|
#seems, macosx has a more limited version of strip
|
||||||
STRIPFLAGS=
|
STRIPFLAGS=
|
||||||
|
@ -347,6 +359,7 @@ ifeq ($(FTE_TARGET),morphos)
|
||||||
ifeq ($(shell $(CC) -v 2>&1 | grep morphos),)
|
ifeq ($(shell $(CC) -v 2>&1 | grep morphos),)
|
||||||
ifneq ($(shell which ppc-morphos-gcc 2> /dev/null),)
|
ifneq ($(shell which ppc-morphos-gcc 2> /dev/null),)
|
||||||
CC=ppc-morphos-gcc
|
CC=ppc-morphos-gcc
|
||||||
|
CXX=ppc-morphos-g++
|
||||||
#morphos strip has a 'feature', it strips permissions
|
#morphos strip has a 'feature', it strips permissions
|
||||||
STRIP=ppc-morphos-strip
|
STRIP=ppc-morphos-strip
|
||||||
endif
|
endif
|
||||||
|
@ -356,6 +369,7 @@ endif
|
||||||
ifeq ($(FTE_TARGET),dos)
|
ifeq ($(FTE_TARGET),dos)
|
||||||
#at least from dos.
|
#at least from dos.
|
||||||
CC=i586-pc-msdosdjgpp-gcc
|
CC=i586-pc-msdosdjgpp-gcc
|
||||||
|
CXX=i586-pc-msdosdjgpp-g++
|
||||||
CFLAGS+=-DNO_ZLIB
|
CFLAGS+=-DNO_ZLIB
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -363,12 +377,14 @@ endif
|
||||||
ifeq ($(FTE_TARGET),linux32)
|
ifeq ($(FTE_TARGET),linux32)
|
||||||
FTE_TARGET=linux
|
FTE_TARGET=linux
|
||||||
CC=gcc -m32
|
CC=gcc -m32
|
||||||
|
CXX=g++ -m32
|
||||||
BITS=32
|
BITS=32
|
||||||
endif
|
endif
|
||||||
ifeq ($(FTE_TARGET),linuxarmhf)
|
ifeq ($(FTE_TARGET),linuxarmhf)
|
||||||
#debian's armhf is armv7, but armv6 works on RPI too.
|
#debian's armhf is armv7, but armv6 works on RPI too.
|
||||||
FTE_TARGET=linux
|
FTE_TARGET=linux
|
||||||
CC=arm-linux-gnueabihf-gcc -marm -march=armv6 -mfpu=vfp -mfloat-abi=hard
|
CC=arm-linux-gnueabihf-gcc -marm -march=armv6 -mfpu=vfp -mfloat-abi=hard
|
||||||
|
CXX=arm-linux-gnueabihf-g++ -marm -march=armv6 -mfpu=vfp -mfloat-abi=hard
|
||||||
BITS=armhf
|
BITS=armhf
|
||||||
endif
|
endif
|
||||||
ifeq ($(FTE_TARGET),linuxx32)
|
ifeq ($(FTE_TARGET),linuxx32)
|
||||||
|
@ -376,11 +392,13 @@ ifeq ($(FTE_TARGET),linuxx32)
|
||||||
#at the current time, you will need to edit your kernel's commandline to allow this stuff to run
|
#at the current time, you will need to edit your kernel's commandline to allow this stuff to run
|
||||||
FTE_TARGET=linux
|
FTE_TARGET=linux
|
||||||
CC=gcc -mx32
|
CC=gcc -mx32
|
||||||
|
CXX=g++ -mx32
|
||||||
BITS=x32
|
BITS=x32
|
||||||
endif
|
endif
|
||||||
ifeq ($(FTE_TARGET),linux64)
|
ifeq ($(FTE_TARGET),linux64)
|
||||||
FTE_TARGET=linux
|
FTE_TARGET=linux
|
||||||
CC=gcc -m64
|
CC=gcc -m64
|
||||||
|
CXX=g++ -m64
|
||||||
BITS=64
|
BITS=64
|
||||||
endif
|
endif
|
||||||
ifeq ($(FTE_TARGET),cygwin)
|
ifeq ($(FTE_TARGET),cygwin)
|
||||||
|
@ -445,6 +463,7 @@ ifeq ($(NOCOMPAT),1)
|
||||||
NCDIRPREFIX=nc
|
NCDIRPREFIX=nc
|
||||||
endif
|
endif
|
||||||
ALL_CFLAGS=$(HAVECONFIG) $(VISIBILITY_FLAGS) $(BRANDFLAGS) $(CFLAGS) $(BASE_CFLAGS) $(WCFLAGS) $(ARCH_CFLAGS) $(NCCFLAGS) -I$(ARCHLIBS)
|
ALL_CFLAGS=$(HAVECONFIG) $(VISIBILITY_FLAGS) $(BRANDFLAGS) $(CFLAGS) $(BASE_CFLAGS) $(WCFLAGS) $(ARCH_CFLAGS) $(NCCFLAGS) -I$(ARCHLIBS)
|
||||||
|
ALL_CXXFLAGS=$(subst -Wno-pointer-sign,,$(ALL_CFLAGS))
|
||||||
|
|
||||||
#cheap compile-everything-in-one-unit (compile becomes preprocess only)
|
#cheap compile-everything-in-one-unit (compile becomes preprocess only)
|
||||||
ifneq ($(WPO),)
|
ifneq ($(WPO),)
|
||||||
|
@ -463,6 +482,7 @@ endif
|
||||||
DO_ECHO=@
|
DO_ECHO=@
|
||||||
#DO_ECHO=
|
#DO_ECHO=
|
||||||
DO_CC=$(DO_ECHO) $(CC) $(LTO_CC) $(ALL_CFLAGS) -o $@ -c $<
|
DO_CC=$(DO_ECHO) $(CC) $(LTO_CC) $(ALL_CFLAGS) -o $@ -c $<
|
||||||
|
DO_CXX=$(DO_ECHO) $(CXX) $(LTO_CC) $(ALL_CXXFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
ifeq ($(FTE_TARGET),vc)
|
ifeq ($(FTE_TARGET),vc)
|
||||||
BASELDFLAGS=
|
BASELDFLAGS=
|
||||||
|
@ -829,6 +849,12 @@ ifeq (1,$(USE_BOTLIB))
|
||||||
l_struct.o
|
l_struct.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
COMMONLIBFLAGS=
|
||||||
|
COMMONLDDEPS=
|
||||||
|
CLIENTLIBFLAGS=$(COMMONLIBFLAGS) $(LIBOPUS_STATIC) $(LIBSPEEX_STATIC) $(OGGVORBISFILE_STATIC) $(LIBFREETYPE_STATIC)
|
||||||
|
SERVERLIBFLAGS=$(COMMONLIBFLAGS)
|
||||||
|
CLIENTLDDEPS=$(COMMONLDDEPS) $(LIBOPUS_LDFLAGS) $(LIBSPEEX_LDFLAGS) $(OGGVORBISLDFLAGS) $(LIBFREETYPE_LDFLAGS)
|
||||||
|
SERVERLDDEPS=$(COMMONLDDEPS)
|
||||||
ifeq (1,$(USE_OPUS))
|
ifeq (1,$(USE_OPUS))
|
||||||
LIBOPUS_STATIC=-DOPUS_STATIC
|
LIBOPUS_STATIC=-DOPUS_STATIC
|
||||||
LIBOPUS_LDFLAGS=-lopus
|
LIBOPUS_LDFLAGS=-lopus
|
||||||
|
@ -851,15 +877,12 @@ ifeq (1,$(USE_FREETYPE))
|
||||||
endif
|
endif
|
||||||
ifeq (1,$(strip $(INTERNAL_BULLET)))
|
ifeq (1,$(strip $(INTERNAL_BULLET)))
|
||||||
COMMON_OBJS+=com_phys_bullet.o
|
COMMON_OBJS+=com_phys_bullet.o
|
||||||
|
ALL_CFLAGS+=-I/usr/include/bullet -I$(ARCHLIBS)/bullet3-$(BULLETVER)/src
|
||||||
|
COMMONLDDEPS+=-lBulletDynamics -lBulletCollision -lLinearMath
|
||||||
|
LDCC=$(CXX)
|
||||||
|
MAKELIBS+=libs-$(ARCH)/libBulletDynamics.a
|
||||||
endif
|
endif
|
||||||
|
|
||||||
COMMONLIBFLAGS=
|
|
||||||
CLIENTLIBFLAGS=$(COMMONLIBFLAGS) $(LIBOPUS_STATIC) $(LIBSPEEX_STATIC) $(OGGVORBISFILE_STATIC) $(LIBFREETYPE_STATIC)
|
|
||||||
SERVERLIBFLAGS=$(COMMONLIBFLAGS)
|
|
||||||
COMMONLDDEPS=
|
|
||||||
CLIENTLDDEPS=$(COMMONLDDEPS) $(LIBOPUS_LDFLAGS) $(LIBSPEEX_LDFLAGS) $(OGGVORBISLDFLAGS) $(LIBFREETYPE_LDFLAGS)
|
|
||||||
SERVERLDDEPS=$(COMMONLDDEPS)
|
|
||||||
|
|
||||||
#the defaults for sdl come first
|
#the defaults for sdl come first
|
||||||
#CC_MACHINE:=$(shell $(CC) -dumpmachine)
|
#CC_MACHINE:=$(shell $(CC) -dumpmachine)
|
||||||
ifeq ($(FTE_TARGET),SDL2)
|
ifeq ($(FTE_TARGET),SDL2)
|
||||||
|
@ -941,28 +964,33 @@ ifeq ($(FTE_TARGET),nacl)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CC=
|
CC=
|
||||||
|
CXX=
|
||||||
STRIP=
|
STRIP=
|
||||||
NACLLIBC=glibc
|
NACLLIBC=glibc
|
||||||
ifeq ($(NARCH),x86_32)
|
ifeq ($(NARCH),x86_32)
|
||||||
CC=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_x86_$(NACLLIBC)/bin/i686-nacl-gcc -DNACL -m32
|
CC=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_x86_$(NACLLIBC)/bin/i686-nacl-gcc -DNACL -m32
|
||||||
|
CXX=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_x86_$(NACLLIBC)/bin/i686-nacl-g++ -DNACL -m32
|
||||||
STRIP=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_x86_$(NACLLIBC)/bin/i686-nacl-strip
|
STRIP=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_x86_$(NACLLIBC)/bin/i686-nacl-strip
|
||||||
BITS=
|
BITS=
|
||||||
NACLLIBS=$(NACLLIBC)_x86_32/Release
|
NACLLIBS=$(NACLLIBC)_x86_32/Release
|
||||||
endif
|
endif
|
||||||
ifeq ($(NARCH),x86_64)
|
ifeq ($(NARCH),x86_64)
|
||||||
CC=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_x86_$(NACLLIBC)/bin/i686-nacl-gcc -DNACL -m64
|
CC=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_x86_$(NACLLIBC)/bin/i686-nacl-gcc -DNACL -m64
|
||||||
|
CXX=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_x86_$(NACLLIBC)/bin/i686-nacl-g++ -DNACL -m64
|
||||||
STRIP=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_x86_$(NACLLIBC)/bin/i686-nacl-strip
|
STRIP=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_x86_$(NACLLIBC)/bin/i686-nacl-strip
|
||||||
BITS=
|
BITS=
|
||||||
NACLLIBS=$(NACLLIBC)_x86_64/Release
|
NACLLIBS=$(NACLLIBC)_x86_64/Release
|
||||||
endif
|
endif
|
||||||
ifeq ($(NARCH),arm)
|
ifeq ($(NARCH),arm)
|
||||||
CC=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_arm_$(NACLLIBC)/bin/arm-nacl-gcc -DNACL
|
CC=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_arm_$(NACLLIBC)/bin/arm-nacl-gcc -DNACL
|
||||||
|
CXX=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_arm_$(NACLLIBC)/bin/arm-nacl-g++ -DNACL
|
||||||
STRIP=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_arm_$(NACLLIBC)/bin/arm-nacl-strip
|
STRIP=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_arm_$(NACLLIBC)/bin/arm-nacl-strip
|
||||||
BITS=
|
BITS=
|
||||||
NACLLIBS=$(NACLLIBC)_arm/Release
|
NACLLIBS=$(NACLLIBC)_arm/Release
|
||||||
endif
|
endif
|
||||||
ifeq ($(NARCH),pnacl)
|
ifeq ($(NARCH),pnacl)
|
||||||
CC=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_pnacl/bin/pnacl-clang -DNACL
|
CC=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_pnacl/bin/pnacl-clang -DNACL
|
||||||
|
CXX=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_pnacl/bin/pnacl-clang++ -DNACL
|
||||||
STRIP=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_pnacl/bin/pnacl-strip
|
STRIP=$(NACL_SDK_ROOT)/toolchain/$(MYOS)_pnacl/bin/pnacl-strip
|
||||||
STRIPFLAGS=
|
STRIPFLAGS=
|
||||||
BITS=
|
BITS=
|
||||||
|
@ -1121,6 +1149,7 @@ ifeq ($(FTE_TARGET),vc)
|
||||||
EXEPOSTFIX=.exe
|
EXEPOSTFIX=.exe
|
||||||
|
|
||||||
CC=PATH="C:\Program Files (x86)\$(MSVCDIR)\Common7\IDE" "$(MSVCPATH)cl" $(SDKINC) $(MSVCINC) -D_CRT_SECURE_NO_WARNINGS
|
CC=PATH="C:\Program Files (x86)\$(MSVCDIR)\Common7\IDE" "$(MSVCPATH)cl" $(SDKINC) $(MSVCINC) -D_CRT_SECURE_NO_WARNINGS
|
||||||
|
CXX=PATH="C:\Program Files (x86)\$(MSVCDIR)\Common7\IDE" "$(MSVCPATH)cl" $(SDKINC) $(MSVCINC) -D_CRT_SECURE_NO_WARNINGS
|
||||||
DEBUG_CFLAGS ?= -Od $(CPUOPTIMIZATIONS) /fp:fast
|
DEBUG_CFLAGS ?= -Od $(CPUOPTIMIZATIONS) /fp:fast
|
||||||
PROFILE_CFLAGS = -O2 -Ot -Ox -GL $(CPUOPTIMISATIONS) /fp:fast
|
PROFILE_CFLAGS = -O2 -Ot -Ox -GL $(CPUOPTIMISATIONS) /fp:fast
|
||||||
PROFILE_LDFLAGS = /LTCG:PGINSTRUMENT
|
PROFILE_LDFLAGS = /LTCG:PGINSTRUMENT
|
||||||
|
@ -1129,9 +1158,11 @@ ifeq ($(FTE_TARGET),vc)
|
||||||
# /LTCG:PGOPTIMIZE
|
# /LTCG:PGOPTIMIZE
|
||||||
|
|
||||||
DO_CC=$(DO_ECHO) $(CC) /nologo $(ALL_CFLAGS) -Fo$(shell cygpath -m $@) -c $(shell cygpath -m $<)
|
DO_CC=$(DO_ECHO) $(CC) /nologo $(ALL_CFLAGS) -Fo$(shell cygpath -m $@) -c $(shell cygpath -m $<)
|
||||||
|
DO_CXX=$(DO_ECHO) $(CXX) /nologo $(ALL_CFLAGS) -Fo$(shell cygpath -m $@) -c $(shell cygpath -m $<)
|
||||||
DO_LD=$(DO_ECHO) PATH="C:\Program Files (x86)\$(MSVCDIR)\Common7\IDE" "$(MSVCPATH)link" /nologo /out:"$(shell cygpath -m $@)" /nodefaultlib:libc.lib /LARGEADDRESSAWARE /nodefaultlib:MSVCRT $(MSVCLIB) $(SDKLIB) /manifest:no /OPT:REF wsock32.lib user32.lib kernel32.lib advapi32.lib winmm.lib libs/zlib$(BITS).lib shell32.lib
|
DO_LD=$(DO_ECHO) PATH="C:\Program Files (x86)\$(MSVCDIR)\Common7\IDE" "$(MSVCPATH)link" /nologo /out:"$(shell cygpath -m $@)" /nodefaultlib:libc.lib /LARGEADDRESSAWARE /nodefaultlib:MSVCRT $(MSVCLIB) $(SDKLIB) /manifest:no /OPT:REF wsock32.lib user32.lib kernel32.lib advapi32.lib winmm.lib libs/zlib$(BITS).lib shell32.lib
|
||||||
PRECOMPHEADERS =
|
PRECOMPHEADERS =
|
||||||
DEPCC=
|
DEPCC=
|
||||||
|
DEPCXX=
|
||||||
|
|
||||||
LIBS_DIR=./libs/
|
LIBS_DIR=./libs/
|
||||||
|
|
||||||
|
@ -1372,6 +1403,7 @@ ifneq (,$(findstring rpi,$(FTE_TARGET)))
|
||||||
#These next two lines enable cross compiling. If you're compiling natively you can just kill the two.
|
#These next two lines enable cross compiling. If you're compiling natively you can just kill the two.
|
||||||
RPI_SYSROOT:=$(realpath $(shell echo ~)/rpi/rpi-sysroot/)
|
RPI_SYSROOT:=$(realpath $(shell echo ~)/rpi/rpi-sysroot/)
|
||||||
CC=~/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$(RPI_SYSROOT)
|
CC=~/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$(RPI_SYSROOT)
|
||||||
|
CXX=~/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ --sysroot=$(RPI_SYSROOT)
|
||||||
SDLCONFIG=$(RPI_SYSROOT)/usr/bin/sdl-config --prefix=$(RPI_SYSROOT)/usr
|
SDLCONFIG=$(RPI_SYSROOT)/usr/bin/sdl-config --prefix=$(RPI_SYSROOT)/usr
|
||||||
GL_CFLAGS+= -I$(RPI_SYSROOT)/opt/vc/include -I$(RPI_SYSROOT)/opt/vc/include/interface/vmcs_host/linux -I$(RPI_SYSROOT)/opt/vc/include/interface/vcos/pthreads -DFTE_RPI -DUSE_EGL
|
GL_CFLAGS+= -I$(RPI_SYSROOT)/opt/vc/include -I$(RPI_SYSROOT)/opt/vc/include/interface/vmcs_host/linux -I$(RPI_SYSROOT)/opt/vc/include/interface/vcos/pthreads -DFTE_RPI -DUSE_EGL
|
||||||
GL_LDFLAGS+= -L$(RPI_SYSROOT)/opt/vc/lib -Wl,--sysroot=$(RPI_SYSROOT),-rpath=/opt/vc/lib,-rpath-link=$(RPI_SYSROOT)/opt/vc/lib -lbcm_host
|
GL_LDFLAGS+= -L$(RPI_SYSROOT)/opt/vc/lib -Wl,--sysroot=$(RPI_SYSROOT),-rpath=/opt/vc/lib,-rpath-link=$(RPI_SYSROOT)/opt/vc/lib -lbcm_host
|
||||||
|
@ -1544,6 +1576,7 @@ ifeq ($(FTE_TARGET),web)
|
||||||
# RELEASE_LDFLAGS=-s ASM_JS=0 -O1 -s TOTAL_MEMORY=$(WEB_MEMORY) $(EMCC_ARGS)
|
# RELEASE_LDFLAGS=-s ASM_JS=0 -O1 -s TOTAL_MEMORY=$(WEB_MEMORY) $(EMCC_ARGS)
|
||||||
DEBUG_LDFLAGS=-O0 -g4 -s TOTAL_MEMORY=$(WEB_MEMORY) $(EMCC_ARGS) -s SAFE_HEAP=1 -s ALIASING_FUNCTION_POINTERS=0 -s ASSERTIONS=2
|
DEBUG_LDFLAGS=-O0 -g4 -s TOTAL_MEMORY=$(WEB_MEMORY) $(EMCC_ARGS) -s SAFE_HEAP=1 -s ALIASING_FUNCTION_POINTERS=0 -s ASSERTIONS=2
|
||||||
CC?=emcc
|
CC?=emcc
|
||||||
|
CXX?=emcc
|
||||||
#BASELDFLAGS=
|
#BASELDFLAGS=
|
||||||
PRECOMPHEADERS=
|
PRECOMPHEADERS=
|
||||||
|
|
||||||
|
@ -1574,10 +1607,12 @@ ifeq ($(FTE_TARGET),web)
|
||||||
BOTLIB_CFLAGS=
|
BOTLIB_CFLAGS=
|
||||||
#generate deps properly
|
#generate deps properly
|
||||||
#DEPCC=
|
#DEPCC=
|
||||||
|
#DEPCXX=
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SV_DIR?=sv_sdl
|
SV_DIR?=sv_sdl
|
||||||
DEPCC?=$(CC)
|
DEPCC?=$(CC)
|
||||||
|
DEPCXX?=$(CXX)
|
||||||
ARCH:=$(ARCH)
|
ARCH:=$(ARCH)
|
||||||
BASELDFLAGS:=-L$(ARCHLIBS) $(BASELDFLAGS)
|
BASELDFLAGS:=-L$(ARCHLIBS) $(BASELDFLAGS)
|
||||||
|
|
||||||
|
@ -1648,24 +1683,24 @@ endif
|
||||||
$(DO_CC) -I$(OUT_DIR)
|
$(DO_CC) -I$(OUT_DIR)
|
||||||
|
|
||||||
$(OUT_DIR)/%.o $(OUT_DIR)/%.d : %.cpp
|
$(OUT_DIR)/%.o $(OUT_DIR)/%.d : %.cpp
|
||||||
ifneq ($(DEPCC),)
|
ifneq ($(DEPCXX),)
|
||||||
@-set -e; rm -f $@.d; \
|
@-set -e; rm -f $@.d; \
|
||||||
$(DEPCC) -MM $(ALL_CFLAGS) $< > $@.d.$$$$; \
|
$(DEPCXX) -MM $(ALL_CXXFLAGS) $< > $@.d.$$$$; \
|
||||||
sed 's,\($*\)\.o[ :]*,$@ $@.d : ,g' < $@.d.$$$$ > $@.d; \
|
sed 's,\($*\)\.o[ :]*,$@ $@.d : ,g' < $@.d.$$$$ > $@.d; \
|
||||||
sed -e 's/.*://' -e 's/\\$$//' < $@.d.$$$$ | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $@.d; \
|
sed -e 's/.*://' -e 's/\\$$//' < $@.d.$$$$ | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $@.d; \
|
||||||
rm -f $@.d.$$$$
|
rm -f $@.d.$$$$
|
||||||
endif
|
endif
|
||||||
$(DO_CC) -I$(OUT_DIR)
|
$(DO_CXX) -I$(OUT_DIR)
|
||||||
|
|
||||||
$(OUT_DIR)/%.o $(OUT_DIR)/%.d : %.cxx
|
$(OUT_DIR)/%.o $(OUT_DIR)/%.d : %.cxx
|
||||||
ifneq ($(DEPCC),)
|
ifneq ($(DEPCXX),)
|
||||||
@-set -e; rm -f $@.d; \
|
@-set -e; rm -f $@.d; \
|
||||||
$(DEPCC) -MM $(ALL_CFLAGS) $< > $@.d.$$$$; \
|
$(DEPCXX) -MM $(ALL_CXXFLAGS) $< > $@.d.$$$$; \
|
||||||
sed 's,\($*\)\.o[ :]*,$@ $@.d : ,g' < $@.d.$$$$ > $@.d; \
|
sed 's,\($*\)\.o[ :]*,$@ $@.d : ,g' < $@.d.$$$$ > $@.d; \
|
||||||
sed -e 's/.*://' -e 's/\\$$//' < $@.d.$$$$ | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $@.d; \
|
sed -e 's/.*://' -e 's/\\$$//' < $@.d.$$$$ | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $@.d; \
|
||||||
rm -f $@.d.$$$$
|
rm -f $@.d.$$$$
|
||||||
endif
|
endif
|
||||||
$(DO_CC) -I$(OUT_DIR)
|
$(DO_CXX) -I$(OUT_DIR)
|
||||||
|
|
||||||
$(OUT_DIR)/%.oo $(OUT_DIR)/%.d : %.c
|
$(OUT_DIR)/%.oo $(OUT_DIR)/%.d : %.c
|
||||||
ifneq ($(DEPCC),)
|
ifneq ($(DEPCC),)
|
||||||
|
@ -1696,7 +1731,8 @@ PRECOMPHEADERS ?= $(OUT_DIR)/quakedef.h.gch
|
||||||
#god knows how gcc loads the list properly.
|
#god knows how gcc loads the list properly.
|
||||||
#or at least I hope he does. It makes no sence to mortals.
|
#or at least I hope he does. It makes no sence to mortals.
|
||||||
|
|
||||||
DO_LD ?= $(DO_ECHO) $(CC) -o $@ $(LTO_LD) $(WCFLAGS) $(BRANDFLAGS) $(CFLAGS)
|
LDCC ?=$(CC)
|
||||||
|
DO_LD ?= $(DO_ECHO) $(LDCC) -o $@ $(LTO_LD) $(WCFLAGS) $(BRANDFLAGS) $(CFLAGS)
|
||||||
$(OUT_DIR)/$(EXE_NAME): $(PRECOMPHEADERS) $(foreach fn, $(CUSTOMOBJS) $(foreach ol, $(OBJS), $($(ol))),$(if $(findstring ltox,$(fn)),,$(OUT_DIR)/$(fn)))
|
$(OUT_DIR)/$(EXE_NAME): $(PRECOMPHEADERS) $(foreach fn, $(CUSTOMOBJS) $(foreach ol, $(OBJS), $($(ol))),$(if $(findstring ltox,$(fn)),,$(OUT_DIR)/$(fn)))
|
||||||
$(DO_LD) $(foreach fn, $(CUSTOMOBJS) $(foreach ol, $(OBJS) $(LTO_END), $($(ol))),$(if $(findstring ltox,$(fn)),$(subst ltox,-x ,$(fn)),$(NATIVE_OUT_DIR)/$(fn)) ) $(LDFLAGS)
|
$(DO_LD) $(foreach fn, $(CUSTOMOBJS) $(foreach ol, $(OBJS) $(LTO_END), $($(ol))),$(if $(findstring ltox,$(fn)),$(subst ltox,-x ,$(fn)),$(NATIVE_OUT_DIR)/$(fn)) ) $(LDFLAGS)
|
||||||
|
|
||||||
|
@ -2152,7 +2188,11 @@ libs-$(ARCH)/libfreetype.a:
|
||||||
test -f freetype-$(FREETYPEVER).tar.gz || wget https://download.savannah.gnu.org/releases/freetype/freetype-$(FREETYPEVER).tar.gz
|
test -f freetype-$(FREETYPEVER).tar.gz || wget https://download.savannah.gnu.org/releases/freetype/freetype-$(FREETYPEVER).tar.gz
|
||||||
-test -f libs-$(ARCH)/libfreetype.a || (mkdir -p libs-$(ARCH) && cd libs-$(ARCH) && tar -xvzf ../freetype-$(FREETYPEVER).tar.gz && cd freetype-$(FREETYPEVER) && CFLAGS="$(CFLAGS) -Os" $(TOOLOVERRIDES) ./configure $(CONFIGARGS) && $(TOOLOVERRIDES) $(MAKE) && cp objs/.libs/libfreetype.a ../ && cp -r include/ ../)
|
-test -f libs-$(ARCH)/libfreetype.a || (mkdir -p libs-$(ARCH) && cd libs-$(ARCH) && tar -xvzf ../freetype-$(FREETYPEVER).tar.gz && cd freetype-$(FREETYPEVER) && CFLAGS="$(CFLAGS) -Os" $(TOOLOVERRIDES) ./configure $(CONFIGARGS) && $(TOOLOVERRIDES) $(MAKE) && cp objs/.libs/libfreetype.a ../ && cp -r include/ ../)
|
||||||
|
|
||||||
makelibs: libs-$(ARCH)/libjpeg.a libs-$(ARCH)/libz.a libs-$(ARCH)/libpng.a libs-$(ARCH)/libogg.a libs-$(ARCH)/libvorbis.a libs-$(ARCH)/libopus.a libs-$(ARCH)/libspeex.a libs-$(ARCH)/libspeexdsp.a libs-$(ARCH)/libfreetype.a
|
libs-$(ARCH)/libBulletDynamics.a:
|
||||||
|
test -f bullet3-$(BULLETVER).tar.gz || wget https://github.com/bulletphysics/bullet3/archive/$(BULLETVER).tar.gz
|
||||||
|
-test -f libs-$(ARCH)/libBulletDynamics.a || (mkdir -p libs-$(ARCH) && cd libs-$(ARCH) && tar -xvzf ../bullet3-$(BULLETVER).tar.gz && cd bullet3-$(BULLETVER) && CFLAGS="$(CFLAGS) -Os" $(TOOLOVERRIDES) cmake . && $(TOOLOVERRIDES) $(MAKE) LinearMath BulletDynamics BulletCollision && cp src/LinearMath/libLinearMath.a src/BulletDynamics/libBulletDynamics.a src/BulletCollision/libBulletCollision.a src/btBulletCollisionCommon.h src/btBulletDynamicsCommon.h ..)
|
||||||
|
|
||||||
|
makelibs: libs-$(ARCH)/libjpeg.a libs-$(ARCH)/libz.a libs-$(ARCH)/libpng.a libs-$(ARCH)/libogg.a libs-$(ARCH)/libvorbis.a libs-$(ARCH)/libopus.a libs-$(ARCH)/libspeex.a libs-$(ARCH)/libspeexdsp.a libs-$(ARCH)/libfreetype.a $(MAKELIBS)
|
||||||
|
|
||||||
HTTP_OBJECTS=http/httpserver.c http/iwebiface.c common/fs_stdio.c http/ftpserver.c
|
HTTP_OBJECTS=http/httpserver.c http/iwebiface.c common/fs_stdio.c http/ftpserver.c
|
||||||
$(RELEASE_DIR)/httpserver$(BITS): $(HTTP_OBJECTS)
|
$(RELEASE_DIR)/httpserver$(BITS): $(HTTP_OBJECTS)
|
||||||
|
|
|
@ -28,10 +28,7 @@ struct searchpathfuncs_s;
|
||||||
struct model_s;
|
struct model_s;
|
||||||
struct font_s;
|
struct font_s;
|
||||||
struct shader_s;
|
struct shader_s;
|
||||||
enum slist_test_e;
|
|
||||||
enum hostcachekey_e; //obtained via calls to gethostcacheindexforkey
|
|
||||||
enum fs_relative;
|
|
||||||
enum com_tokentype_e;
|
|
||||||
#ifndef __QUAKEDEF_H__
|
#ifndef __QUAKEDEF_H__
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
typedef enum {qfalse, qtrue} qboolean;//false and true are forcivly defined.
|
typedef enum {qfalse, qtrue} qboolean;//false and true are forcivly defined.
|
||||||
|
@ -52,6 +49,15 @@ enum com_tokentype_e;
|
||||||
typedef uint64_t qofs_t;
|
typedef uint64_t qofs_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 1 //c++ or standard C
|
||||||
|
#include "cl_master.h"
|
||||||
|
#else
|
||||||
|
enum slist_test_e;
|
||||||
|
enum hostcachekey_e; //obtained via calls to gethostcacheindexforkey
|
||||||
|
#endif
|
||||||
|
enum fs_relative;
|
||||||
|
enum com_tokentype_e;
|
||||||
|
|
||||||
struct menu_inputevent_args_s
|
struct menu_inputevent_args_s
|
||||||
{
|
{
|
||||||
enum {
|
enum {
|
||||||
|
@ -166,8 +172,8 @@ typedef struct {
|
||||||
char *(*gethostcachestring) (struct serverinfo_s *host, enum hostcachekey_e fld);
|
char *(*gethostcachestring) (struct serverinfo_s *host, enum hostcachekey_e fld);
|
||||||
float (*gethostcachenumber) (struct serverinfo_s *host, enum hostcachekey_e fld);
|
float (*gethostcachenumber) (struct serverinfo_s *host, enum hostcachekey_e fld);
|
||||||
void (*resethostcachemasks) (void);
|
void (*resethostcachemasks) (void);
|
||||||
void (*sethostcachemaskstring) (qboolean or, enum hostcachekey_e fld, const char *str, enum slist_test_e op);
|
void (*sethostcachemaskstring) (qboolean or_, enum hostcachekey_e fld, const char *str, enum slist_test_e op);
|
||||||
void (*sethostcachemasknumber) (qboolean or, enum hostcachekey_e fld, int num, enum slist_test_e op);
|
void (*sethostcachemasknumber) (qboolean or_, enum hostcachekey_e fld, int num, enum slist_test_e op);
|
||||||
void (*sethostcachesort) (enum hostcachekey_e fld, qboolean descending);
|
void (*sethostcachesort) (enum hostcachekey_e fld, qboolean descending);
|
||||||
int (*resorthostcache) (void);
|
int (*resorthostcache) (void);
|
||||||
void (*refreshhostcache) (qboolean fullreset);
|
void (*refreshhostcache) (qboolean fullreset);
|
||||||
|
|
|
@ -485,7 +485,7 @@ static int CL_FindHighTrack(int seat, char *rule)
|
||||||
; //don't block if the players have different powerups
|
; //don't block if the players have different powerups
|
||||||
else if ((cl.players[j].stats[STAT_ITEMS] & (IT_ROCKET_LAUNCHER|IT_LIGHTNING)) && !(cl.players[i].stats[STAT_ITEMS] & (IT_ROCKET_LAUNCHER|IT_LIGHTNING)))
|
else if ((cl.players[j].stats[STAT_ITEMS] & (IT_ROCKET_LAUNCHER|IT_LIGHTNING)) && !(cl.players[i].stats[STAT_ITEMS] & (IT_ROCKET_LAUNCHER|IT_LIGHTNING)))
|
||||||
; //don't block the switch if the new player has a decent weapon, and the guy we're tracking does not.
|
; //don't block the switch if the new player has a decent weapon, and the guy we're tracking does not.
|
||||||
else if ((cl.players[j].stats[STAT_ITEMS] & (IT_ROCKET_LAUNCHER|IT_INVULNERABILITY))==(IT_ROCKET_LAUNCHER|IT_INVULNERABILITY) && (cl.players[i].stats[STAT_ITEMS] & (IT_ROCKET_LAUNCHER|IT_LIGHTNING)) != (IT_ROCKET_LAUNCHER|IT_INVULNERABILITY))
|
else if ((cl.players[j].stats[STAT_ITEMS] & (IT_ROCKET_LAUNCHER|IT_INVULNERABILITY))==(IT_ROCKET_LAUNCHER|IT_INVULNERABILITY) && (cl.players[i].stats[STAT_ITEMS] & (IT_ROCKET_LAUNCHER|IT_INVULNERABILITY)) != (IT_ROCKET_LAUNCHER|IT_INVULNERABILITY))
|
||||||
; //don't block if we're switching to someone with pent+rl from someone that does not.
|
; //don't block if we're switching to someone with pent+rl from someone that does not.
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5045,17 +5045,17 @@ done:
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(loadcommand, sizeof(loadcommand), "map \"%s\"\n", shortname);
|
Q_snprintfz(loadcommand, sizeof(loadcommand), "map \"%s\"\n", shortname);
|
||||||
snprintf(displayname, sizeof(displayname), "map: %s", shortname);
|
Q_snprintfz(displayname, sizeof(displayname), "map: %s", shortname);
|
||||||
snprintf(qname, sizeof(qname), "maps/%s.bsp", shortname);
|
Q_snprintfz(qname, sizeof(qname), "maps/%s.bsp", shortname);
|
||||||
}
|
}
|
||||||
else if (f->flags & HRF_PACKAGE)
|
else if (f->flags & HRF_PACKAGE)
|
||||||
{
|
{
|
||||||
char *shortname;
|
char *shortname;
|
||||||
shortname = COM_SkipPath(f->fname);
|
shortname = COM_SkipPath(f->fname);
|
||||||
snprintf(qname, sizeof(qname), "%s", shortname);
|
Q_snprintfz(qname, sizeof(qname), "%s", shortname);
|
||||||
snprintf(loadcommand, sizeof(loadcommand), "fs_restart\n");
|
Q_snprintfz(loadcommand, sizeof(loadcommand), "fs_restart\n");
|
||||||
snprintf(displayname, sizeof(displayname), "package: %s", shortname);
|
Q_snprintfz(displayname, sizeof(displayname), "package: %s", shortname);
|
||||||
}
|
}
|
||||||
else if (f->flags & HRF_MANIFEST)
|
else if (f->flags & HRF_MANIFEST)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
#ifndef CL_MASTER_H
|
||||||
|
#define CL_MASTER_H
|
||||||
|
|
||||||
enum masterprotocol_e
|
enum masterprotocol_e
|
||||||
{
|
{
|
||||||
MP_UNSPECIFIED,
|
MP_UNSPECIFIED,
|
||||||
|
@ -238,9 +241,13 @@ qboolean Master_GetSortDescending(void);
|
||||||
int Master_NumSorted(void);
|
int Master_NumSorted(void);
|
||||||
void Master_ClearMasks(void);
|
void Master_ClearMasks(void);
|
||||||
serverinfo_t *Master_SortedServer(int idx);
|
serverinfo_t *Master_SortedServer(int idx);
|
||||||
void Master_SetMaskString(qboolean or, hostcachekey_t field, const char *param, slist_test_t testop);
|
void Master_SetMaskString(qboolean or_, hostcachekey_t field, const char *param, slist_test_t testop);
|
||||||
void Master_SetMaskInteger(qboolean or, hostcachekey_t field, int param, slist_test_t testop);
|
void Master_SetMaskInteger(qboolean or_, hostcachekey_t field, int param, slist_test_t testop);
|
||||||
serverinfo_t *Master_FindRoute(netadr_t target);
|
serverinfo_t *Master_FindRoute(netadr_t target);
|
||||||
#else
|
#else
|
||||||
#define MasterInfo_WriteServers()
|
#define MasterInfo_WriteServers()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -3457,7 +3457,7 @@ void CL_MasterListParse(netadrtype_t adrtype, int type, qboolean slashpad)
|
||||||
info->special = type;
|
info->special = type;
|
||||||
info->refreshtime = 0;
|
info->refreshtime = 0;
|
||||||
|
|
||||||
snprintf(info->name, sizeof(info->name), "%s (via %s)", NET_AdrToString(adr, sizeof(adr), &info->adr), madr);
|
Q_snprintfz(info->name, sizeof(info->name), "%s (via %s)", NET_AdrToString(adr, sizeof(adr), &info->adr), madr);
|
||||||
|
|
||||||
info->next = last;
|
info->next = last;
|
||||||
last = info;
|
last = info;
|
||||||
|
|
|
@ -2927,7 +2927,7 @@ static void P_ImportEffectInfo(char *config, char *line)
|
||||||
for (i = 0; i < 64; i++)
|
for (i = 0; i < 64; i++)
|
||||||
{
|
{
|
||||||
parenttype = ptype - part_type;
|
parenttype = ptype - part_type;
|
||||||
snprintf(newname, sizeof(newname), "%i+%s", i, arg[1]);
|
Q_snprintfz(newname, sizeof(newname), "%i+%s", i, arg[1]);
|
||||||
ptype = P_GetParticleType(config, newname);
|
ptype = P_GetParticleType(config, newname);
|
||||||
if (!ptype->loaded)
|
if (!ptype->loaded)
|
||||||
{
|
{
|
||||||
|
|
|
@ -317,6 +317,17 @@ static cvar_t s_al_velocityscale = CVAR("s_al_velocityscale", "1");
|
||||||
static cvar_t s_al_static_listener = CVAR("s_al_static_listener", "0"); //cheat
|
static cvar_t s_al_static_listener = CVAR("s_al_static_listener", "0"); //cheat
|
||||||
extern cvar_t snd_doppler;
|
extern cvar_t snd_doppler;
|
||||||
|
|
||||||
|
enum distancemodel_e
|
||||||
|
{
|
||||||
|
DM_INVERSE = 0,
|
||||||
|
DM_INVERSE_CLAMPED = 1,
|
||||||
|
DM_LINEAR = 2,
|
||||||
|
DM_LINEAR_CLAMPED = 3,
|
||||||
|
DM_EXPONENT = 4,
|
||||||
|
DM_EXPONENT_CLAMPED = 5,
|
||||||
|
DM_NONE = 6
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
ALuint *source;
|
ALuint *source;
|
||||||
|
@ -873,20 +884,20 @@ static void OpenAL_ChannelUpdate(soundcardinfo_t *sc, channel_t *chan, unsigned
|
||||||
if (srcrel)
|
if (srcrel)
|
||||||
{
|
{
|
||||||
#ifdef FTE_TARGET_WEB
|
#ifdef FTE_TARGET_WEB
|
||||||
switch(0) //emscripten omits it, and this is webaudio's default too.
|
switch(DM_INVERSE) //emscripten omits it, and this is webaudio's default too.
|
||||||
#else
|
#else
|
||||||
switch(s_al_distancemodel.ival)
|
switch((enum distancemodel_e)s_al_distancemodel.ival)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case 0:
|
case DM_INVERSE:
|
||||||
case 1:
|
case DM_INVERSE_CLAMPED:
|
||||||
palSourcef(src, AL_ROLLOFF_FACTOR, 0);
|
palSourcef(src, AL_ROLLOFF_FACTOR, 0);
|
||||||
palSourcef(src, AL_REFERENCE_DISTANCE, 1); //0 would be silent, or a division by 0
|
palSourcef(src, AL_REFERENCE_DISTANCE, 1); //0 would be silent, or a division by 0
|
||||||
palSourcef(src, AL_MAX_DISTANCE, 1); //only used for clamped mode
|
palSourcef(src, AL_MAX_DISTANCE, 1); //only used for clamped mode
|
||||||
break;
|
break;
|
||||||
case 2:
|
case DM_LINEAR:
|
||||||
case 3:
|
case DM_LINEAR_CLAMPED:
|
||||||
palSourcef(src, AL_ROLLOFF_FACTOR, 0);
|
palSourcef(src, AL_ROLLOFF_FACTOR, 0);
|
||||||
palSourcef(src, AL_REFERENCE_DISTANCE, 0); //doesn't matter when rolloff is 0
|
palSourcef(src, AL_REFERENCE_DISTANCE, 0); //doesn't matter when rolloff is 0
|
||||||
palSourcef(src, AL_MAX_DISTANCE, 1); //doesn't matter, so long as its not a nan
|
palSourcef(src, AL_MAX_DISTANCE, 1); //doesn't matter, so long as its not a nan
|
||||||
|
@ -896,20 +907,20 @@ static void OpenAL_ChannelUpdate(soundcardinfo_t *sc, channel_t *chan, unsigned
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef FTE_TARGET_WEB
|
#ifdef FTE_TARGET_WEB
|
||||||
switch(2) //emscripten hardcodes it.
|
switch(DM_LINEAR) //emscripten hardcodes it in a buggy kind of way.
|
||||||
#else
|
#else
|
||||||
switch(s_al_distancemodel.ival)
|
switch((enum distancemodel_e)s_al_distancemodel.ival)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case 0:
|
case DM_INVERSE:
|
||||||
case 1:
|
case DM_INVERSE_CLAMPED:
|
||||||
palSourcef(src, AL_ROLLOFF_FACTOR, s_al_reference_distance.value);
|
palSourcef(src, AL_ROLLOFF_FACTOR, s_al_reference_distance.value);
|
||||||
palSourcef(src, AL_REFERENCE_DISTANCE, 1);
|
palSourcef(src, AL_REFERENCE_DISTANCE, 1);
|
||||||
palSourcef(src, AL_MAX_DISTANCE, 1/chan->dist_mult); //clamp to the maximum distance you'd normally be allowed to hear... this is probably going to be annoying.
|
palSourcef(src, AL_MAX_DISTANCE, 1/chan->dist_mult); //clamp to the maximum distance you'd normally be allowed to hear... this is probably going to be annoying.
|
||||||
break;
|
break;
|
||||||
case 2: //linear, mimic quake.
|
case DM_LINEAR: //linear, mimic quake.
|
||||||
case 3: //linear clamped to further than ref distance
|
case DM_LINEAR_CLAMPED: //linear clamped to further than ref distance
|
||||||
palSourcef(src, AL_ROLLOFF_FACTOR, 1);
|
palSourcef(src, AL_ROLLOFF_FACTOR, 1);
|
||||||
#ifdef FTE_TARGET_WEB
|
#ifdef FTE_TARGET_WEB
|
||||||
//chrome complains about 0.
|
//chrome complains about 0.
|
||||||
|
@ -1093,45 +1104,45 @@ static void QDECL OnChangeALSettings (cvar_t *var, char *value)
|
||||||
|
|
||||||
if (palDistanceModel)
|
if (palDistanceModel)
|
||||||
{
|
{
|
||||||
switch (s_al_distancemodel.ival)
|
switch ((enum distancemodel_e)s_al_distancemodel.ival)
|
||||||
{
|
{
|
||||||
case 0:
|
case DM_INVERSE:
|
||||||
//gain = AL_REFERENCE_DISTANCE / (AL_REFERENCE_DISTANCE + AL_ROLLOFF_FACTOR * (distance – AL_REFERENCE_DISTANCE) )
|
//gain = AL_REFERENCE_DISTANCE / (AL_REFERENCE_DISTANCE + AL_ROLLOFF_FACTOR * (distance – AL_REFERENCE_DISTANCE) )
|
||||||
palDistanceModel(AL_INVERSE_DISTANCE);
|
palDistanceModel(AL_INVERSE_DISTANCE);
|
||||||
break;
|
break;
|
||||||
case 1: //openal's default mode
|
case DM_INVERSE_CLAMPED: //openal's default mode
|
||||||
//istance = max(distance,AL_REFERENCE_DISTANCE);
|
//istance = max(distance,AL_REFERENCE_DISTANCE);
|
||||||
//distance = min(distance,AL_MAX_DISTANCE);
|
//distance = min(distance,AL_MAX_DISTANCE);
|
||||||
//gain = AL_REFERENCE_DISTANCE / (AL_REFERENCE_DISTANCE + AL_ROLLOFF_FACTOR * (distance – AL_REFERENCE_DISTANCE) )
|
//gain = AL_REFERENCE_DISTANCE / (AL_REFERENCE_DISTANCE + AL_ROLLOFF_FACTOR * (distance – AL_REFERENCE_DISTANCE) )
|
||||||
palDistanceModel(AL_INVERSE_DISTANCE_CLAMPED);
|
palDistanceModel(AL_INVERSE_DISTANCE_CLAMPED);
|
||||||
break;
|
break;
|
||||||
case 2: //most quake-like
|
case DM_LINEAR: //most quake-like. linear
|
||||||
//distance = min(distance, AL_MAX_DISTANCE) // avoid negative gain
|
//distance = min(distance, AL_MAX_DISTANCE) // avoid negative gain
|
||||||
//gain = ( 1 – AL_ROLLOFF_FACTOR * (distance – AL_REFERENCE_DISTANCE) / (AL_MAX_DISTANCE – AL_REFERENCE_DISTANCE) )
|
//gain = ( 1 – AL_ROLLOFF_FACTOR * (distance – AL_REFERENCE_DISTANCE) / (AL_MAX_DISTANCE – AL_REFERENCE_DISTANCE) )
|
||||||
palDistanceModel(AL_LINEAR_DISTANCE);
|
palDistanceModel(AL_LINEAR_DISTANCE);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case DM_LINEAR_CLAMPED: //linear, with near stuff clamped to further away
|
||||||
//distance = max(distance, AL_REFERENCE_DISTANCE)
|
//distance = max(distance, AL_REFERENCE_DISTANCE)
|
||||||
//distance = min(distance, AL_MAX_DISTANCE)
|
//distance = min(distance, AL_MAX_DISTANCE)
|
||||||
//gain = ( 1 – AL_ROLLOFF_FACTOR * (distance – AL_REFERENCE_DISTANCE) / (AL_MAX_DISTANCE – AL_REFERENCE_DISTANCE) )
|
//gain = ( 1 – AL_ROLLOFF_FACTOR * (distance – AL_REFERENCE_DISTANCE) / (AL_MAX_DISTANCE – AL_REFERENCE_DISTANCE) )
|
||||||
palDistanceModel(AL_LINEAR_DISTANCE_CLAMPED);
|
palDistanceModel(AL_LINEAR_DISTANCE_CLAMPED);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case DM_EXPONENT:
|
||||||
//gain = (distance / AL_REFERENCE_DISTANCE) ^ (- AL_ROLLOFF_FACTOR)
|
//gain = (distance / AL_REFERENCE_DISTANCE) ^ (- AL_ROLLOFF_FACTOR)
|
||||||
palDistanceModel(AL_EXPONENT_DISTANCE);
|
palDistanceModel(AL_EXPONENT_DISTANCE);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case DM_EXPONENT_CLAMPED:
|
||||||
//distance = max(distance, AL_REFERENCE_DISTANCE)
|
//distance = max(distance, AL_REFERENCE_DISTANCE)
|
||||||
//distance = min(distance, AL_MAX_DISTANCE)
|
//distance = min(distance, AL_MAX_DISTANCE)
|
||||||
//gain = (distance / AL_REFERENCE_DISTANCE) ^ (- AL_ROLLOFF_FACTOR)
|
//gain = (distance / AL_REFERENCE_DISTANCE) ^ (- AL_ROLLOFF_FACTOR)
|
||||||
palDistanceModel(AL_EXPONENT_DISTANCE_CLAMPED);
|
palDistanceModel(AL_EXPONENT_DISTANCE_CLAMPED);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case DM_NONE:
|
||||||
//gain = 1
|
//gain = 1
|
||||||
palDistanceModel(AL_NONE);
|
palDistanceModel(AL_NONE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Cvar_ForceSet(&s_al_distancemodel, "0");
|
Cvar_ForceSet(&s_al_distancemodel, "2");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1258,7 +1269,6 @@ static ALuint OpenAL_LoadEffect(const struct reverbproperties_s *reverb)
|
||||||
{
|
{
|
||||||
/* EAX Reverb is available. Set the EAX effect type then load the
|
/* EAX Reverb is available. Set the EAX effect type then load the
|
||||||
* reverb properties. */
|
* reverb properties. */
|
||||||
|
|
||||||
palEffectf(effect, AL_EAXREVERB_DENSITY, reverb->flDensity);
|
palEffectf(effect, AL_EAXREVERB_DENSITY, reverb->flDensity);
|
||||||
palEffectf(effect, AL_EAXREVERB_DIFFUSION, reverb->flDiffusion);
|
palEffectf(effect, AL_EAXREVERB_DIFFUSION, reverb->flDiffusion);
|
||||||
palEffectf(effect, AL_EAXREVERB_GAIN, reverb->flGain);
|
palEffectf(effect, AL_EAXREVERB_GAIN, reverb->flGain);
|
||||||
|
@ -1284,7 +1294,9 @@ static ALuint OpenAL_LoadEffect(const struct reverbproperties_s *reverb)
|
||||||
palEffecti(effect, AL_EAXREVERB_DECAY_HFLIMIT, reverb->iDecayHFLimit);
|
palEffecti(effect, AL_EAXREVERB_DECAY_HFLIMIT, reverb->iDecayHFLimit);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
#ifdef AL_EFFECT_REVERB
|
||||||
/* No EAX Reverb. Set the standard reverb effect type then load the
|
/* No EAX Reverb. Set the standard reverb effect type then load the
|
||||||
* available reverb properties. */
|
* available reverb properties. */
|
||||||
palEffecti(effect, AL_EFFECT_TYPE, AL_EFFECT_REVERB);
|
palEffecti(effect, AL_EFFECT_TYPE, AL_EFFECT_REVERB);
|
||||||
|
@ -1302,8 +1314,8 @@ static ALuint OpenAL_LoadEffect(const struct reverbproperties_s *reverb)
|
||||||
palEffectf(effect, AL_REVERB_AIR_ABSORPTION_GAINHF, reverb->flAirAbsorptionGainHF);
|
palEffectf(effect, AL_REVERB_AIR_ABSORPTION_GAINHF, reverb->flAirAbsorptionGainHF);
|
||||||
palEffectf(effect, AL_REVERB_ROOM_ROLLOFF_FACTOR, reverb->flRoomRolloffFactor);
|
palEffectf(effect, AL_REVERB_ROOM_ROLLOFF_FACTOR, reverb->flRoomRolloffFactor);
|
||||||
palEffecti(effect, AL_REVERB_DECAY_HFLIMIT, reverb->iDecayHFLimit);
|
palEffecti(effect, AL_REVERB_DECAY_HFLIMIT, reverb->iDecayHFLimit);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
return effect;
|
return effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3881,11 +3881,11 @@ void S_PlayVol(void)
|
||||||
{
|
{
|
||||||
if (!Q_strrchr(Cmd_Argv(i), '.'))
|
if (!Q_strrchr(Cmd_Argv(i), '.'))
|
||||||
{
|
{
|
||||||
Q_strncpy(name, Cmd_Argv(i), sizeof(name)-4);
|
Q_strncpyz(name, Cmd_Argv(i), sizeof(name)-4);
|
||||||
Q_strcat(name, ".wav");
|
Q_strcat(name, ".wav");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Q_strncpy(name, Cmd_Argv(i), sizeof(name));
|
Q_strncpyz(name, Cmd_Argv(i), sizeof(name));
|
||||||
sfx = S_PrecacheSound(name);
|
sfx = S_PrecacheSound(name);
|
||||||
vol = Q_atof(Cmd_Argv(i+1));
|
vol = Q_atof(Cmd_Argv(i+1));
|
||||||
S_StartSound(0, -1, sfx, NULL, NULL, vol, 0.0, 0, 0, CF_NOSPACIALISE);
|
S_StartSound(0, -1, sfx, NULL, NULL, vol, 0.0, 0, 0, CF_NOSPACIALISE);
|
||||||
|
|
|
@ -719,7 +719,12 @@ void Cmd_Exec_f (void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (cl_warncmd.ival || developer.ival || cvar_watched)
|
if (cl_warncmd.ival || developer.ival || cvar_watched)
|
||||||
Con_TPrintf ("execing %s\n",name);
|
{
|
||||||
|
if (loc.search)
|
||||||
|
Con_TPrintf ("execing %s/%s\n",name, loc.search->logicalpath);
|
||||||
|
else
|
||||||
|
Con_TPrintf ("execing %s\n",name);
|
||||||
|
}
|
||||||
|
|
||||||
l = VFS_GETLEN(file);
|
l = VFS_GETLEN(file);
|
||||||
f = BZ_Malloc(l+1);
|
f = BZ_Malloc(l+1);
|
||||||
|
|
|
@ -568,7 +568,7 @@ void Q_ftoa(char *str, float in)
|
||||||
sprintf(str, "%.0f", in);
|
sprintf(str, "%.0f", in);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char tstr[8];
|
char tstr[32];
|
||||||
char *lsig = str - 1;
|
char *lsig = str - 1;
|
||||||
sprintf(tstr, "%%.%if", exp);
|
sprintf(tstr, "%%.%if", exp);
|
||||||
sprintf(str, tstr, in);
|
sprintf(str, tstr, in);
|
||||||
|
@ -5040,6 +5040,12 @@ void COM_Version_f (void)
|
||||||
#else
|
#else
|
||||||
Con_DPrintf(" ^h(disabled: openal)^7");
|
Con_DPrintf(" ^h(disabled: openal)^7");
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifdef USE_INTERNAL_BULLET
|
||||||
|
Con_Printf(" bullet");
|
||||||
|
#endif
|
||||||
|
#ifdef ENGINE_ROUTING
|
||||||
|
Con_Printf(" routing");
|
||||||
#endif
|
#endif
|
||||||
Con_Printf("\n");
|
Con_Printf("\n");
|
||||||
|
|
||||||
|
@ -5102,6 +5108,9 @@ void COM_Version_f (void)
|
||||||
#if defined(MENU_DAT)
|
#if defined(MENU_DAT)
|
||||||
Con_Printf(" menuqc");
|
Con_Printf(" menuqc");
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(MENU_NATIVECODE)
|
||||||
|
Con_Printf(" nmenu");
|
||||||
|
#endif
|
||||||
#if defined(CSQC_DAT)
|
#if defined(CSQC_DAT)
|
||||||
Con_Printf(" csqc");
|
Con_Printf(" csqc");
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -141,7 +141,7 @@
|
||||||
#undef TEXTEDITOR //my funky text editor! its awesome!
|
#undef TEXTEDITOR //my funky text editor! its awesome!
|
||||||
#undef TCPCONNECT //support for playing over tcp sockets, instead of just udp. compatible with qizmo.
|
#undef TCPCONNECT //support for playing over tcp sockets, instead of just udp. compatible with qizmo.
|
||||||
#undef IRCCONNECT //lame support for routing game packets via irc server. not a good idea.
|
#undef IRCCONNECT //lame support for routing game packets via irc server. not a good idea.
|
||||||
#undef PLUGINS //support for external plugins (like huds or fancy menus or whatever)
|
#define PLUGINS //support for external plugins (like huds or fancy menus or whatever)
|
||||||
#undef SUPPORT_ICE //Internet Connectivity Establishment, for use by plugins to establish voice or game connections.
|
#undef SUPPORT_ICE //Internet Connectivity Establishment, for use by plugins to establish voice or game connections.
|
||||||
#undef PSET_CLASSIC //support the 'classic' particle system, for that classic quake feel.
|
#undef PSET_CLASSIC //support the 'classic' particle system, for that classic quake feel.
|
||||||
#undef HAVE_CDPLAYER //includes cd playback. actual cds. named/numbered tracks are supported regardless (though you need to use the 'music' command to play them without this).
|
#undef HAVE_CDPLAYER //includes cd playback. actual cds. named/numbered tracks are supported regardless (though you need to use the 'music' command to play them without this).
|
||||||
|
|
|
@ -2553,7 +2553,7 @@ static void FS_AddDataFiles(searchpath_t **oldpaths, const char *purepath, const
|
||||||
char pakfile[MAX_OSPATH];
|
char pakfile[MAX_OSPATH];
|
||||||
char logicalpaths[MAX_OSPATH]; //with a slash
|
char logicalpaths[MAX_OSPATH]; //with a slash
|
||||||
char purefile[MAX_OSPATH];
|
char purefile[MAX_OSPATH];
|
||||||
char logicalfile[MAX_OSPATH];
|
char logicalfile[MAX_OSPATH*2];
|
||||||
unsigned int keptflags;
|
unsigned int keptflags;
|
||||||
vfsfile_t *vfs;
|
vfsfile_t *vfs;
|
||||||
flocation_t loc;
|
flocation_t loc;
|
||||||
|
@ -2621,7 +2621,7 @@ static void FS_AddDataFiles(searchpath_t **oldpaths, const char *purepath, const
|
||||||
if (!search->handle->FindFile(search->handle, &loc, pakfile, NULL))
|
if (!search->handle->FindFile(search->handle, &loc, pakfile, NULL))
|
||||||
break; //not found..
|
break; //not found..
|
||||||
|
|
||||||
snprintf (logicalfile, sizeof(pakfile), "%spak%i.%s", logicalpaths, i, extension);
|
snprintf (logicalfile, sizeof(logicalfile), "%spak%i.%s", logicalpaths, i, extension);
|
||||||
snprintf (purefile, sizeof(purefile), "%s/pak%i.%s", purepath, i, extension);
|
snprintf (purefile, sizeof(purefile), "%s/pak%i.%s", purepath, i, extension);
|
||||||
|
|
||||||
for (existing = com_searchpaths; existing; existing = existing->next)
|
for (existing = com_searchpaths; existing; existing = existing->next)
|
||||||
|
|
|
@ -7777,13 +7777,15 @@ int QDECL VFSTCP_WriteBytes (struct vfsfile_s *file, const void *buffer, int byt
|
||||||
|
|
||||||
if (tf->conpending)
|
if (tf->conpending)
|
||||||
{
|
{
|
||||||
fd_set fd;
|
fd_set fdw, fdx;
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
timeout.tv_sec = 0;
|
timeout.tv_sec = 0;
|
||||||
timeout.tv_usec = 0;
|
timeout.tv_usec = 0;
|
||||||
FD_ZERO(&fd);
|
FD_ZERO(&fdw);
|
||||||
FD_SET(tf->sock, &fd);
|
FD_SET(tf->sock, &fdw);
|
||||||
if (!select((int)tf->sock+1, NULL, &fd, &fd, &timeout))
|
FD_ZERO(&fdx);
|
||||||
|
FD_SET(tf->sock, &fdx);
|
||||||
|
if (!select((int)tf->sock+1, NULL, &fdw, &fdx, &timeout))
|
||||||
return 0;
|
return 0;
|
||||||
tf->conpending = false;
|
tf->conpending = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ struct
|
||||||
} staticplugins[] =
|
} staticplugins[] =
|
||||||
{
|
{
|
||||||
#if defined(USE_INTERNAL_BULLET)
|
#if defined(USE_INTERNAL_BULLET)
|
||||||
{"Bullet_internal", Plug_Bullet_Init},
|
{"bullet_internal", Plug_Bullet_Init},
|
||||||
#endif
|
#endif
|
||||||
#if defined(USE_INTERNAL_ODE)
|
#if defined(USE_INTERNAL_ODE)
|
||||||
{"ODE_internal", Plug_ODE_Init},
|
{"ODE_internal", Plug_ODE_Init},
|
||||||
|
|
|
@ -2508,7 +2508,7 @@ void Mod_BSPXRW_SetLump(struct bspxrw *ctx, const char *lumpname, void *data, si
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Z_ReallocElements(&ctx->lumps, &ctx->totallumps, ctx->totallumps+1, sizeof(*ctx->lumps));
|
Z_ReallocElements((void**)&ctx->lumps, &ctx->totallumps, ctx->totallumps+1, sizeof(*ctx->lumps));
|
||||||
Q_strncpyz(ctx->lumps[i].lumpname, lumpname, sizeof(ctx->lumps[i].lumpname));
|
Q_strncpyz(ctx->lumps[i].lumpname, lumpname, sizeof(ctx->lumps[i].lumpname));
|
||||||
ctx->lumps[i].data = data;
|
ctx->lumps[i].data = data;
|
||||||
ctx->lumps[i].filelen = datasize;
|
ctx->lumps[i].filelen = datasize;
|
||||||
|
@ -2594,7 +2594,7 @@ qboolean Mod_BSPXRW_Read(struct bspxrw *ctx, const char *fname)
|
||||||
l = (lump_t*)(ctx->origfile+ctx->lumpofs);
|
l = (lump_t*)(ctx->origfile+ctx->lumpofs);
|
||||||
for (i = 0; i < ctx->corelumps; i++)
|
for (i = 0; i < ctx->corelumps; i++)
|
||||||
{
|
{
|
||||||
Z_ReallocElements(&ctx->lumps, &ctx->totallumps, ctx->totallumps+1, sizeof(*ctx->lumps));
|
Z_ReallocElements((void**)&ctx->lumps, &ctx->totallumps, ctx->totallumps+1, sizeof(*ctx->lumps));
|
||||||
ctx->lumps[ctx->totallumps-1].data = ctx->origfile+l[i].fileofs;
|
ctx->lumps[ctx->totallumps-1].data = ctx->origfile+l[i].fileofs;
|
||||||
ctx->lumps[ctx->totallumps-1].filelen = l[i].filelen;
|
ctx->lumps[ctx->totallumps-1].filelen = l[i].filelen;
|
||||||
if (corelumpnames)
|
if (corelumpnames)
|
||||||
|
@ -2608,7 +2608,7 @@ qboolean Mod_BSPXRW_Read(struct bspxrw *ctx, const char *fname)
|
||||||
{
|
{
|
||||||
for (i = 0; i < bspxheader->numlumps; i++)
|
for (i = 0; i < bspxheader->numlumps; i++)
|
||||||
{
|
{
|
||||||
Z_ReallocElements(&ctx->lumps, &ctx->totallumps, ctx->totallumps+1, sizeof(*ctx->lumps));
|
Z_ReallocElements((void**)&ctx->lumps, &ctx->totallumps, ctx->totallumps+1, sizeof(*ctx->lumps));
|
||||||
ctx->lumps[ctx->totallumps-1].data = ctx->origfile+bspxheader->lumps[i].fileofs;
|
ctx->lumps[ctx->totallumps-1].data = ctx->origfile+bspxheader->lumps[i].fileofs;
|
||||||
ctx->lumps[ctx->totallumps-1].filelen = bspxheader->lumps[i].filelen;
|
ctx->lumps[ctx->totallumps-1].filelen = bspxheader->lumps[i].filelen;
|
||||||
memcpy(ctx->lumps[ctx->totallumps-1].lumpname, bspxheader->lumps[i].lumpname, sizeof(ctx->lumps[0].lumpname));
|
memcpy(ctx->lumps[ctx->totallumps-1].lumpname, bspxheader->lumps[i].lumpname, sizeof(ctx->lumps[0].lumpname));
|
||||||
|
@ -2730,7 +2730,7 @@ void Mod_FindCubemaps_f(void)
|
||||||
if (isenvmap)
|
if (isenvmap)
|
||||||
{
|
{
|
||||||
int e = nenvmap;
|
int e = nenvmap;
|
||||||
if (ZF_ReallocElements(&envmap, &nenvmap, nenvmap+1, sizeof(*envmap)))
|
if (ZF_ReallocElements((void**)&envmap, &nenvmap, nenvmap+1, sizeof(*envmap)))
|
||||||
{
|
{
|
||||||
VectorCopy(origin, envmap[e].origin);
|
VectorCopy(origin, envmap[e].origin);
|
||||||
envmap[e].cubesize = size;
|
envmap[e].cubesize = size;
|
||||||
|
@ -2741,7 +2741,7 @@ void Mod_FindCubemaps_f(void)
|
||||||
if (nenvmap)
|
if (nenvmap)
|
||||||
{
|
{
|
||||||
qsort(envmap, nenvmap, sizeof(*envmap), envmapsort);
|
qsort(envmap, nenvmap, sizeof(*envmap), envmapsort);
|
||||||
if (ZF_ReallocElements(&envmapidx, &nenvmapidx, cl.worldmodel->numsurfaces, sizeof(*envmapidx)))
|
if (ZF_ReallocElements((void**)&envmapidx, &nenvmapidx, cl.worldmodel->numsurfaces, sizeof(*envmapidx)))
|
||||||
{
|
{
|
||||||
for(i = 0; i < cl.worldmodel->numsurfaces; i++)
|
for(i = 0; i < cl.worldmodel->numsurfaces; i++)
|
||||||
envmapidx[i] = Mod_NearestCubeForSurf(cl.worldmodel->surfaces+i, envmap, nenvmap);
|
envmapidx[i] = Mod_NearestCubeForSurf(cl.worldmodel->surfaces+i, envmap, nenvmap);
|
||||||
|
@ -2778,11 +2778,11 @@ void Mod_BSPX_List_f(void)
|
||||||
{
|
{
|
||||||
for (i = 0; i < ctx.corelumps; i++)
|
for (i = 0; i < ctx.corelumps; i++)
|
||||||
{
|
{
|
||||||
Con_Printf("%s: %u\n", ctx.lumps[i].lumpname, ctx.lumps[i].filelen);
|
Con_Printf("%s: %u\n", ctx.lumps[i].lumpname, (unsigned int)ctx.lumps[i].filelen);
|
||||||
}
|
}
|
||||||
for ( ; i < ctx.totallumps; i++)
|
for ( ; i < ctx.totallumps; i++)
|
||||||
{
|
{
|
||||||
Con_Printf("%s: %u\n", ctx.lumps[i].lumpname, ctx.lumps[i].filelen);
|
Con_Printf("%s: %u\n", ctx.lumps[i].lumpname, (unsigned int)ctx.lumps[i].filelen);
|
||||||
}
|
}
|
||||||
Mod_BSPXRW_Free(&ctx);
|
Mod_BSPXRW_Free(&ctx);
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@ qboolean QVM_LoadDLL(vm_t *vm, const char *name, qboolean binroot, void **vmMain
|
||||||
char dllname_anycpu[MAX_OSPATH];//simple
|
char dllname_anycpu[MAX_OSPATH];//simple
|
||||||
dllhandle_t *hVM;
|
dllhandle_t *hVM;
|
||||||
|
|
||||||
char fname[MAX_OSPATH];
|
char fname[MAX_OSPATH*2];
|
||||||
char gpath[MAX_OSPATH];
|
char gpath[MAX_OSPATH];
|
||||||
void *iterator;
|
void *iterator;
|
||||||
|
|
||||||
|
|
|
@ -151,7 +151,9 @@ void *Sys_CreateMutexNamed(char *file, int line);
|
||||||
#define Sys_IsMainThread() Sys_MutexStub()
|
#define Sys_IsMainThread() Sys_MutexStub()
|
||||||
#define Sys_LockMutex(m) Sys_MutexStub()
|
#define Sys_LockMutex(m) Sys_MutexStub()
|
||||||
#define Sys_UnlockMutex(m) Sys_MutexStub()
|
#define Sys_UnlockMutex(m) Sys_MutexStub()
|
||||||
static inline qboolean Sys_IsThread(void *thread) {return !thread;}
|
#ifndef __cplusplus
|
||||||
|
static inline qboolean Sys_IsThread(void *thread) {return !thread;}
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#define Sys_IsMainThread() (qboolean)(true)
|
#define Sys_IsMainThread() (qboolean)(true)
|
||||||
#define Sys_CreateMutex() (void*)(NULL)
|
#define Sys_CreateMutex() (void*)(NULL)
|
||||||
|
|
|
@ -1777,7 +1777,7 @@ struct font_s *Font_LoadFont(const char *fontfilename, float vheight)
|
||||||
char *aname;
|
char *aname;
|
||||||
char *parms;
|
char *parms;
|
||||||
int height = ((vheight * vid.rotpixelheight)/vid.height) + 0.5;
|
int height = ((vheight * vid.rotpixelheight)/vid.height) + 0.5;
|
||||||
char facename[MAX_QPATH];
|
char facename[MAX_QPATH*12];
|
||||||
struct charcache_s *c;
|
struct charcache_s *c;
|
||||||
float aspect = 1;
|
float aspect = 1;
|
||||||
enum
|
enum
|
||||||
|
@ -1790,7 +1790,7 @@ struct font_s *Font_LoadFont(const char *fontfilename, float vheight)
|
||||||
FMT_HORIZONTAL, //unicode, charcount=width/(height-2). single strip of chars, like halflife.
|
FMT_HORIZONTAL, //unicode, charcount=width/(height-2). single strip of chars, like halflife.
|
||||||
} fmt = FMT_AUTO;
|
} fmt = FMT_AUTO;
|
||||||
|
|
||||||
Q_strncpy(facename, fontfilename, sizeof(facename));
|
Q_strncpyz(facename, fontfilename, sizeof(facename));
|
||||||
|
|
||||||
aname = strstr(facename, ":");
|
aname = strstr(facename, ":");
|
||||||
if (aname)
|
if (aname)
|
||||||
|
|
|
@ -800,8 +800,14 @@ void Mod_Init (qboolean initial)
|
||||||
|
|
||||||
//q2/q3bsps
|
//q2/q3bsps
|
||||||
#if defined(Q2BSPS) || defined(Q3BSPS)
|
#if defined(Q2BSPS) || defined(Q3BSPS)
|
||||||
|
#ifndef Q2BSPS
|
||||||
|
Mod_RegisterModelFormatMagic(NULL, "Quake3 Map (bsp)", IDBSPHEADER, Mod_LoadQ2BrushModel);
|
||||||
|
#elif !defined(Q3BSPS)
|
||||||
|
Mod_RegisterModelFormatMagic(NULL, "Quake2 Map (bsp)", IDBSPHEADER, Mod_LoadQ2BrushModel);
|
||||||
|
#else
|
||||||
Mod_RegisterModelFormatMagic(NULL, "Quake2/Quake3 Map (bsp)", IDBSPHEADER, Mod_LoadQ2BrushModel);
|
Mod_RegisterModelFormatMagic(NULL, "Quake2/Quake3 Map (bsp)", IDBSPHEADER, Mod_LoadQ2BrushModel);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#ifdef RFBSPS
|
#ifdef RFBSPS
|
||||||
Mod_RegisterModelFormatMagic(NULL, "Raven Map (bsp)", ('R'<<0)+('B'<<8)+('S'<<16)+('P'<<24), Mod_LoadQ2BrushModel);
|
Mod_RegisterModelFormatMagic(NULL, "Raven Map (bsp)", ('R'<<0)+('B'<<8)+('S'<<16)+('P'<<24), Mod_LoadQ2BrushModel);
|
||||||
Mod_RegisterModelFormatMagic(NULL, "QFusion Map (bsp)", ('F'<<0)+('B'<<8)+('S'<<16)+('P'<<24), Mod_LoadQ2BrushModel);
|
Mod_RegisterModelFormatMagic(NULL, "QFusion Map (bsp)", ('F'<<0)+('B'<<8)+('S'<<16)+('P'<<24), Mod_LoadQ2BrushModel);
|
||||||
|
|
|
@ -11188,7 +11188,7 @@ void QCC_PR_ParseStatement (void)
|
||||||
pr_labels = realloc(pr_labels, sizeof(*pr_labels)*max_labels);
|
pr_labels = realloc(pr_labels, sizeof(*pr_labels)*max_labels);
|
||||||
}
|
}
|
||||||
|
|
||||||
strncpy(pr_labels[num_labels].name, pr_token, sizeof(pr_labels[num_labels].name) -1);
|
QC_strlcpy(pr_labels[num_labels].name, pr_token, sizeof(pr_labels[num_labels].name));
|
||||||
pr_labels[num_labels].lineno = pr_source_line;
|
pr_labels[num_labels].lineno = pr_source_line;
|
||||||
pr_labels[num_labels].statementno = numstatements;
|
pr_labels[num_labels].statementno = numstatements;
|
||||||
|
|
||||||
|
@ -11368,7 +11368,7 @@ void QCC_PR_ParseStatement (void)
|
||||||
pr_labels = realloc(pr_labels, sizeof(*pr_labels)*max_labels);
|
pr_labels = realloc(pr_labels, sizeof(*pr_labels)*max_labels);
|
||||||
}
|
}
|
||||||
|
|
||||||
strncpy(pr_labels[num_labels].name, pr_token, sizeof(pr_labels[num_labels].name) -1);
|
QC_strlcpy(pr_labels[num_labels].name, pr_token, sizeof(pr_labels[num_labels].name));
|
||||||
pr_labels[num_labels].lineno = pr_source_line;
|
pr_labels[num_labels].lineno = pr_source_line;
|
||||||
pr_labels[num_labels].statementno = numstatements;
|
pr_labels[num_labels].statementno = numstatements;
|
||||||
|
|
||||||
|
@ -13588,6 +13588,7 @@ QCC_def_t *QCC_PR_DummyDef(QCC_type_t *type, const char *name, QCC_function_t *s
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ev_accessor: //shouldn't happen.
|
case ev_accessor: //shouldn't happen.
|
||||||
|
case ev_enum:
|
||||||
case ev_float:
|
case ev_float:
|
||||||
case ev_string:
|
case ev_string:
|
||||||
case ev_entity:
|
case ev_entity:
|
||||||
|
@ -14007,6 +14008,7 @@ QCC_def_t *QCC_PR_DummyFieldDef(QCC_type_t *type, QCC_function_t *scope, int arr
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//fallthrough. any named structs will become global structs that contain field references. hopefully.
|
//fallthrough. any named structs will become global structs that contain field references. hopefully.
|
||||||
|
case ev_enum:
|
||||||
case ev_accessor:
|
case ev_accessor:
|
||||||
case ev_float:
|
case ev_float:
|
||||||
case ev_string:
|
case ev_string:
|
||||||
|
@ -14120,15 +14122,15 @@ pbool QCC_PR_ParseInitializerType(int arraysize, QCC_def_t *basedef, QCC_sref_t
|
||||||
else if (pr_token_type == tt_immediate && pr_immediate_type == type_integer)
|
else if (pr_token_type == tt_immediate && pr_immediate_type == type_integer)
|
||||||
binum = pr_immediate._int;
|
binum = pr_immediate._int;
|
||||||
else if (pr_token_type == tt_immediate && pr_immediate_type == type_string)
|
else if (pr_token_type == tt_immediate && pr_immediate_type == type_string)
|
||||||
strncpy(fname, pr_immediate_string, sizeof(fname));
|
QC_strlcpy(fname, pr_immediate_string, sizeof(fname));
|
||||||
else if (pr_token_type == tt_name)
|
else if (pr_token_type == tt_name)
|
||||||
strncpy(fname, pr_token, sizeof(fname));
|
QC_strlcpy(fname, pr_token, sizeof(fname));
|
||||||
else
|
else
|
||||||
QCC_PR_ParseError (ERR_BADBUILTINIMMEDIATE, "Bad builtin immediate");
|
QCC_PR_ParseError (ERR_BADBUILTINIMMEDIATE, "Bad builtin immediate");
|
||||||
QCC_PR_Lex();
|
QCC_PR_Lex();
|
||||||
|
|
||||||
if (!*fname && QCC_PR_CheckToken (":"))
|
if (!*fname && QCC_PR_CheckToken (":"))
|
||||||
strncpy(fname, QCC_PR_ParseName(), sizeof(fname));
|
QC_strlcpy(fname, QCC_PR_ParseName(), sizeof(fname));
|
||||||
|
|
||||||
//if the builtin already exists, just use that dfunction instead
|
//if the builtin already exists, just use that dfunction instead
|
||||||
if (basedef && basedef->initialized)
|
if (basedef && basedef->initialized)
|
||||||
|
|
|
@ -5271,7 +5271,6 @@ QCC_type_t *QCC_PR_ParseType (int newtype, pbool silentfail)
|
||||||
pbool redeclaration;
|
pbool redeclaration;
|
||||||
int basicindex;
|
int basicindex;
|
||||||
QCC_def_t *d;
|
QCC_def_t *d;
|
||||||
int d_offset = 0;
|
|
||||||
QCC_type_t *pc;
|
QCC_type_t *pc;
|
||||||
pbool found = false;
|
pbool found = false;
|
||||||
int assumevirtual = 0; //0=erk, 1=yes, -1=no
|
int assumevirtual = 0; //0=erk, 1=yes, -1=no
|
||||||
|
|
|
@ -4375,7 +4375,7 @@ int qccmline;
|
||||||
char *qccmsrc;
|
char *qccmsrc;
|
||||||
//char *qccmsrc2;
|
//char *qccmsrc2;
|
||||||
char qccmfilename[1024];
|
char qccmfilename[1024];
|
||||||
char qccmprogsdat[1024];
|
char qccmprogsdat[1024*2];
|
||||||
|
|
||||||
void QCC_FinishCompile(void);
|
void QCC_FinishCompile(void);
|
||||||
|
|
||||||
|
@ -4930,14 +4930,15 @@ memset(pr_immediate_string, 0, sizeof(pr_immediate_string));
|
||||||
{
|
{
|
||||||
p = QCC_CheckParm ("-qc");
|
p = QCC_CheckParm ("-qc");
|
||||||
if (p && p < argc-1 )
|
if (p && p < argc-1 )
|
||||||
sprintf (qccmprogsdat, "%s", argv[p+1]);
|
QC_strlcpy(qccmprogsdat, argv[p+1], sizeof(qccmprogsdat));
|
||||||
else
|
else
|
||||||
{ //look for a preprogs.src... :o)
|
{ //look for a preprogs.src... :o)
|
||||||
sprintf (qccmprogsdat, "%spreprogs.src", qccmsourcedir);
|
char tmp[sizeof(qccmsourcedir)+16];
|
||||||
if (externs->FileSize(qccmprogsdat) <= 0)
|
QC_snprintfz (tmp, sizeof(tmp), "%spreprogs.src", qccmsourcedir);
|
||||||
sprintf (qccmprogsdat, "progs.src");
|
if (externs->FileSize(tmp) <= 0)
|
||||||
|
QC_snprintfz (qccmprogsdat, sizeof(qccmprogsdat), "progs.src");
|
||||||
else
|
else
|
||||||
sprintf (qccmprogsdat, "preprogs.src");
|
QC_snprintfz (qccmprogsdat, sizeof(qccmprogsdat), "preprogs.src");
|
||||||
}
|
}
|
||||||
|
|
||||||
numsourcefiles = 0;
|
numsourcefiles = 0;
|
||||||
|
@ -4958,7 +4959,7 @@ memset(pr_immediate_string, 0, sizeof(pr_immediate_string));
|
||||||
else
|
else
|
||||||
printf("%s\n", QCC_VersionString());
|
printf("%s\n", QCC_VersionString());
|
||||||
|
|
||||||
sprintf (qccmprogsdat, "%s%s", qccmsourcedir, sourcefileslist[currentsourcefile++]);
|
QC_snprintfz (qccmprogsdat, sizeof(qccmprogsdat), "%s%s", qccmsourcedir, sourcefileslist[currentsourcefile++]);
|
||||||
printf ("Source file: %s\n", qccmprogsdat);
|
printf ("Source file: %s\n", qccmprogsdat);
|
||||||
|
|
||||||
QC_strlcpy(compilingrootfile, qccmprogsdat, sizeof(compilingrootfile));
|
QC_strlcpy(compilingrootfile, qccmprogsdat, sizeof(compilingrootfile));
|
||||||
|
|
|
@ -462,7 +462,7 @@ void SV_Map_f (void)
|
||||||
{
|
{
|
||||||
char level[MAX_QPATH];
|
char level[MAX_QPATH];
|
||||||
char spot[MAX_QPATH];
|
char spot[MAX_QPATH];
|
||||||
char expanded[MAX_QPATH];
|
char expanded[MAX_QPATH+64];
|
||||||
char *nextserver;
|
char *nextserver;
|
||||||
qboolean preserveplayers= false;
|
qboolean preserveplayers= false;
|
||||||
qboolean isrestart = false; //don't hurt settings
|
qboolean isrestart = false; //don't hurt settings
|
||||||
|
|
|
@ -323,7 +323,7 @@ int sql_serverworker(void *sref)
|
||||||
if (qres)
|
if (qres)
|
||||||
{
|
{
|
||||||
if (qerror)
|
if (qerror)
|
||||||
Q_strncpy(qres->error, qerror, qesize);
|
Q_strncpyz(qres->error, qerror, qesize);
|
||||||
qres->result = res;
|
qres->result = res;
|
||||||
qres->rows = rows;
|
qres->rows = rows;
|
||||||
qres->columns = columns;
|
qres->columns = columns;
|
||||||
|
@ -491,7 +491,7 @@ int sql_serverworker(void *sref)
|
||||||
if (qres)
|
if (qres)
|
||||||
{ // hopefully the qmysql_close gained us some memory otherwise we're pretty screwed
|
{ // hopefully the qmysql_close gained us some memory otherwise we're pretty screwed
|
||||||
qres->rows = qres->columns = -1;
|
qres->rows = qres->columns = -1;
|
||||||
Q_strncpy(qres->error, error, esize);
|
Q_strncpyz(qres->error, error, esize);
|
||||||
|
|
||||||
SQL_PushResult(server, qres);
|
SQL_PushResult(server, qres);
|
||||||
}
|
}
|
||||||
|
@ -872,14 +872,14 @@ int SQL_NewServer(const char *driver, const char **paramstr)
|
||||||
for (i = 0; i < SQL_CONNECT_STRUCTPARAMS; i++)
|
for (i = 0; i < SQL_CONNECT_STRUCTPARAMS; i++)
|
||||||
{
|
{
|
||||||
server->connectparams[i] = ((char *)(server + 1)) + tsize;
|
server->connectparams[i] = ((char *)(server + 1)) + tsize;
|
||||||
Q_strncpy(server->connectparams[i], paramstr[i], paramsize[i]);
|
Q_strncpyz(server->connectparams[i], paramstr[i], paramsize[i]);
|
||||||
// string should be null-terminated due to Z_Malloc
|
// string should be null-terminated due to Z_Malloc
|
||||||
tsize += paramsize[i] + 1;
|
tsize += paramsize[i] + 1;
|
||||||
}
|
}
|
||||||
for (i = SQL_CONNECT_STRUCTPARAMS; i < SQL_CONNECT_PARAMS; i++)
|
for (i = SQL_CONNECT_STRUCTPARAMS; i < SQL_CONNECT_PARAMS; i++)
|
||||||
{
|
{
|
||||||
server->connectparams[i] = (char *)Z_Malloc(sizeof(char) * (paramsize[i] + 1));
|
server->connectparams[i] = (char *)Z_Malloc(sizeof(char) * (paramsize[i] + 1));
|
||||||
Q_strncpy(server->connectparams[i], paramstr[i], paramsize[i]);
|
Q_strncpyz(server->connectparams[i], paramstr[i], paramsize[i]);
|
||||||
// string should be null-terminated due to Z_Malloc
|
// string should be null-terminated due to Z_Malloc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -936,7 +936,7 @@ int SQL_NewQuery(sqlserver_t *server, qboolean (*callback)(queryrequest_t *req,
|
||||||
}
|
}
|
||||||
|
|
||||||
qreq->callback = callback;
|
qreq->callback = callback;
|
||||||
Q_strncpy(qreq->query, str, qsize);
|
Q_strncpyz(qreq->query, str, qsize);
|
||||||
|
|
||||||
qreq->nextreq = server->requests;
|
qreq->nextreq = server->requests;
|
||||||
server->requests = qreq;
|
server->requests = qreq;
|
||||||
|
|
|
@ -1231,9 +1231,9 @@ void SV_SendClientPrespawnInfo(client_t *client)
|
||||||
{
|
{
|
||||||
//grab the model name... without a progs/ prefix if it has one
|
//grab the model name... without a progs/ prefix if it has one
|
||||||
if (!strncmp(sv.strings.vw_model_precache[i], "progs/", 6))
|
if (!strncmp(sv.strings.vw_model_precache[i], "progs/", 6))
|
||||||
Q_strncpy(mname, sv.strings.vw_model_precache[i]+6, sizeof(mname));
|
Q_strncpyz(mname, sv.strings.vw_model_precache[i]+6, sizeof(mname));
|
||||||
else
|
else
|
||||||
Q_strncpy(mname, sv.strings.vw_model_precache[i], sizeof(mname));
|
Q_strncpyz(mname, sv.strings.vw_model_precache[i], sizeof(mname));
|
||||||
|
|
||||||
//strip .mdl extensions, for compat with ezquake
|
//strip .mdl extensions, for compat with ezquake
|
||||||
COM_FileExtension(mname, ext, sizeof(ext));
|
COM_FileExtension(mname, ext, sizeof(ext));
|
||||||
|
|
|
@ -72,6 +72,7 @@ PLUG_NATIVE_EXT?=_unk.so
|
||||||
PLUG_DEFFILE?=
|
PLUG_DEFFILE?=
|
||||||
PLUG_CFLAGS?=-fPIC -Wl,--no-undefined -Bsymbolic -fvisibility=hidden
|
PLUG_CFLAGS?=-fPIC -Wl,--no-undefined -Bsymbolic -fvisibility=hidden
|
||||||
PLUG_CXXFLAGS?=-fPIC -Wl,--no-undefined -Bsymbolic -fvisibility=hidden
|
PLUG_CXXFLAGS?=-fPIC -Wl,--no-undefined -Bsymbolic -fvisibility=hidden
|
||||||
|
PLUG_CMAKE?=-DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX)
|
||||||
PLUG_LDFLAGS_ZLIB?=
|
PLUG_LDFLAGS_ZLIB?=
|
||||||
ARCH:=$(shell $(CC) -dumpmachine)
|
ARCH:=$(shell $(CC) -dumpmachine)
|
||||||
PLUG_LDFLAGS:=-L../engine/libs-$(ARCH) $(PLUG_LDFLAGS)
|
PLUG_LDFLAGS:=-L../engine/libs-$(ARCH) $(PLUG_LDFLAGS)
|
||||||
|
@ -222,20 +223,28 @@ $(OUT_DIR)/fteplug_ode$(PLUG_NATIVE_EXT): $(ODE_FILES)
|
||||||
#NATIVE_PLUGINS+=ode
|
#NATIVE_PLUGINS+=ode
|
||||||
|
|
||||||
|
|
||||||
BULLET_VER=2.83.7
|
BULLET_VER=2.87
|
||||||
BULLET_URL=https://github.com/bulletphysics/bullet3/archive/$(BULLET_VER).tar.gz
|
BULLET_URL=https://github.com/bulletphysics/bullet3/archive/$(BULLET_VER).tar.gz
|
||||||
BULLET_BASE=$(OUT_DIR)/../bullet3-$(ODE_VER)_$(FTE_TARGET)/
|
BULLET_BASE=$(OUT_DIR)/../bullet3-$(BULLET_VER)_$(FTE_TARGET)/
|
||||||
BULLET_LIB=$(ODE_BASE)bullet3-$(ODE_VER)/ode/src/.libs/libode.a
|
BULLET_LIBS= \
|
||||||
|
$(BULLET_BASE)bullet3-$(BULLET_VER)/src/BulletDynamics/libBulletDynamics.a \
|
||||||
|
$(BULLET_BASE)bullet3-$(BULLET_VER)/src/BulletCollision/libBulletCollision.a \
|
||||||
|
$(BULLET_BASE)bullet3-$(BULLET_VER)/src/LinearMath/libLinearMath.a
|
||||||
|
BULLET_CFLAGS=-I$(BULLET_BASE)bullet3-$(BULLET_VER)/src
|
||||||
$(OUT_DIR)/../bullet3-$(BULLET_VER).tar.gz:
|
$(OUT_DIR)/../bullet3-$(BULLET_VER).tar.gz:
|
||||||
mkdir -p $(BULLET_BASE)
|
mkdir -p $(BULLET_BASE)
|
||||||
wget -N $(BULLET_URL) -O $@
|
wget -N $(BULLET_URL) -O $@
|
||||||
|
|
||||||
|
BULLET_LIB=$(BULLET_BASE)bullet3-$(BULLET_VER)/src/LinearMath/libLinearMath.a
|
||||||
|
$(BULLET_BASE)bullet3-$(BULLET_VER)/src/BulletDynamics/libBulletDynamics.a $(BULLET_BASE)bullet3-$(BULLET_VER)/src/BulletCollision/libBulletCollision.a: $(BULLET_LIB)
|
||||||
$(BULLET_LIB): $(OUT_DIR)/../bullet3-$(BULLET_VER).tar.gz
|
$(BULLET_LIB): $(OUT_DIR)/../bullet3-$(BULLET_VER).tar.gz
|
||||||
mkdir -p $(BULLET_BASE) && cd $(BULLET_BASE) && tar xvfz $<
|
mkdir -p $(BULLET_BASE) && cd $(BULLET_BASE) && tar xvfz $<
|
||||||
cd $(BULLET_BASE)bullet3-$(BULLET_VER)/ && ./bootstrap && ./configure --enable-double-precision --disable-demos --without-x CXX="$(CC)" CFLAGS="$(PLUG_CFLAGS)" CXXFLAGS="$(PLUG_CXXFLAGS)" --host=`$(CC) -dumpmachine` && make
|
cd $(BULLET_BASE)bullet3-$(BULLET_VER)/ && cmake $(PLUG_CMAKE) . && $(MAKE) LinearMath BulletDynamics BulletCollision
|
||||||
|
#./configure --enable-double-precision --disable-demos --without-x CXX="$(CC)" CFLAGS="$(PLUG_CFLAGS)" CXXFLAGS="$(PLUG_CXXFLAGS)" --host=`$(CC) -dumpmachine` && make
|
||||||
|
|
||||||
|
|
||||||
$(OUT_DIR)/fteplug_bullet$(PLUG_NATIVE_EXT): bullet/bulletplug.c plugin.c qvm_api.c $(BULLET_LIB)
|
$(OUT_DIR)/fteplug_bullet$(PLUG_NATIVE_EXT): bullet/bulletplug.cpp plugin.c qvm_api.c $(BULLET_LIBS)
|
||||||
$(CC) $(BASE_CFLAGS) $(CFLAGS) -DFTEPLUGIN -o $@ -shared $(PLUG_CFLAGS) $^ $(PLUG_DEFFILE) $(PLUG_LDFLAGS)
|
$(CXX) $(BASE_CFLAGS) $(CFLAGS) -DFTEPLUGIN -o $@ -shared $(PLUG_CFLAGS) $^ $(PLUG_DEFFILE) $(PLUG_LDFLAGS) $(BULLET_CFLAGS)
|
||||||
#NATIVE_PLUGINS+=bullet
|
#NATIVE_PLUGINS+=bullet
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#define BZ_Malloc malloc
|
#define BZ_Malloc malloc
|
||||||
#define BZ_Free free
|
#define BZ_Free free
|
||||||
#define Z_Free BZ_Free
|
#define Z_Free BZ_Free
|
||||||
static vec3_t vec3_origin;
|
//#define vec3_origin vec3_origin_
|
||||||
|
//static vec3_t vec3_origin;
|
||||||
|
#define VectorCompare VectorCompare_
|
||||||
static int VectorCompare (const vec3_t v1, const vec3_t v2)
|
static int VectorCompare (const vec3_t v1, const vec3_t v2)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -62,7 +64,7 @@ static rbeplugfuncs_t *rbefuncs;
|
||||||
#define DEG2RAD(d) (d * M_PI * (1/180.0f))
|
#define DEG2RAD(d) (d * M_PI * (1/180.0f))
|
||||||
#define RAD2DEG(d) ((d*180) / M_PI)
|
#define RAD2DEG(d) ((d*180) / M_PI)
|
||||||
|
|
||||||
#include <btBulletDynamicsCommon.h>
|
#include "btBulletDynamicsCommon.h"
|
||||||
|
|
||||||
|
|
||||||
static void World_Bullet_RunCmd(world_t *world, rbecommandqueue_t *cmd);
|
static void World_Bullet_RunCmd(world_t *world, rbecommandqueue_t *cmd);
|
||||||
|
@ -176,13 +178,13 @@ static void QDECL World_Bullet_RemoveFromEntity(world_t *world, wedict_t *ed)
|
||||||
ed->rbe.physics = qfalse;
|
ed->rbe.physics = qfalse;
|
||||||
|
|
||||||
body = (btRigidBody*)ed->rbe.body.body;
|
body = (btRigidBody*)ed->rbe.body.body;
|
||||||
ed->rbe.body = NULL;
|
ed->rbe.body.body = NULL;
|
||||||
if (body)
|
if (body)
|
||||||
ctx->dworld->removeRigidBody (body);
|
ctx->dworld->removeRigidBody (body);
|
||||||
|
|
||||||
geom = (btCollisionShape*)ed->rbe.geom;
|
geom = (btCollisionShape*)ed->rbe.body.geom;
|
||||||
ed->rbe.geom = NULL;
|
ed->rbe.body.geom = NULL;
|
||||||
if (ed->rbe.geom)
|
if (ed->rbe.body.geom)
|
||||||
delete geom;
|
delete geom;
|
||||||
|
|
||||||
//FIXME: joints
|
//FIXME: joints
|
||||||
|
@ -202,7 +204,7 @@ static void World_Bullet_Frame_BodyToEntity(world_t *world, wedict_t *ed)
|
||||||
const float *o;
|
const float *o;
|
||||||
const float *r; // for some reason dBodyGetRotation returns a [3][4] matrix
|
const float *r; // for some reason dBodyGetRotation returns a [3][4] matrix
|
||||||
const float *vel;
|
const float *vel;
|
||||||
btRigidBody *body = (btRigidBody*)ed->rbe.body;
|
btRigidBody *body = (btRigidBody*)ed->rbe.body.body;
|
||||||
int movetype;
|
int movetype;
|
||||||
float bodymatrix[16];
|
float bodymatrix[16];
|
||||||
float entitymatrix[16];
|
float entitymatrix[16];
|
||||||
|
@ -352,11 +354,11 @@ static void World_Bullet_Frame_JointFromEntity(world_t *world, wedict_t *ed)
|
||||||
jointtype = 0; // can't have both
|
jointtype = 0; // can't have both
|
||||||
|
|
||||||
e1 = (wedict_t*)PROG_TO_EDICT(world->progs, enemy);
|
e1 = (wedict_t*)PROG_TO_EDICT(world->progs, enemy);
|
||||||
b1 = (btRigidBody*)e1->rbe.body;
|
b1 = (btRigidBody*)e1->rbe.body.body;
|
||||||
if(ED_ISFREE(e1) || !b1)
|
if(ED_ISFREE(e1) || !b1)
|
||||||
enemy = 0;
|
enemy = 0;
|
||||||
e2 = (wedict_t*)PROG_TO_EDICT(world->progs, aiment);
|
e2 = (wedict_t*)PROG_TO_EDICT(world->progs, aiment);
|
||||||
b2 = (btRigidBody*)e2->rbe.body;
|
b2 = (btRigidBody*)e2->rbe.body.body;
|
||||||
if(ED_ISFREE(e2) || !b2)
|
if(ED_ISFREE(e2) || !b2)
|
||||||
aiment = 0;
|
aiment = 0;
|
||||||
// see http://www.ode.org/old_list_archives/2006-January/017614.html
|
// see http://www.ode.org/old_list_archives/2006-January/017614.html
|
||||||
|
@ -364,9 +366,9 @@ static void World_Bullet_Frame_JointFromEntity(world_t *world, wedict_t *ed)
|
||||||
// note: if movedir[2] is 0, it becomes ERP = 1, CFM = 1.0 / (H * K)
|
// note: if movedir[2] is 0, it becomes ERP = 1, CFM = 1.0 / (H * K)
|
||||||
if(movedir[0] > 0 && movedir[1] > 0)
|
if(movedir[0] > 0 && movedir[1] > 0)
|
||||||
{
|
{
|
||||||
float K = movedir[0];
|
// float K = movedir[0];
|
||||||
float D = movedir[1];
|
// float D = movedir[1];
|
||||||
float R = 2.0 * D * sqrt(K); // we assume D is premultiplied by sqrt(sprungMass)
|
// float R = 2.0 * D * sqrt(K); // we assume D is premultiplied by sqrt(sprungMass)
|
||||||
// CFM = 1.0 / (rbe->ode_step * K + R); // always > 0
|
// CFM = 1.0 / (rbe->ode_step * K + R); // always > 0
|
||||||
// ERP = rbe->ode_step * K * CFM;
|
// ERP = rbe->ode_step * K * CFM;
|
||||||
Vel = 0;
|
Vel = 0;
|
||||||
|
@ -392,11 +394,11 @@ static void World_Bullet_Frame_JointFromEntity(world_t *world, wedict_t *ed)
|
||||||
if(jointtype == ed->rbe.joint_type && VectorCompare(origin, ed->rbe.joint_origin) && VectorCompare(velocity, ed->rbe.joint_velocity) && VectorCompare(ed->v->angles, ed->rbe.joint_angles) && enemy == ed->rbe.joint_enemy && aiment == ed->rbe.joint_aiment && VectorCompare(movedir, ed->rbe.joint_movedir))
|
if(jointtype == ed->rbe.joint_type && VectorCompare(origin, ed->rbe.joint_origin) && VectorCompare(velocity, ed->rbe.joint_velocity) && VectorCompare(ed->v->angles, ed->rbe.joint_angles) && enemy == ed->rbe.joint_enemy && aiment == ed->rbe.joint_aiment && VectorCompare(movedir, ed->rbe.joint_movedir))
|
||||||
return; // nothing to do
|
return; // nothing to do
|
||||||
|
|
||||||
if(ed->rbe.joint)
|
if(ed->rbe.joint.joint)
|
||||||
{
|
{
|
||||||
j = (btTypedConstraint*)ed->rbe.joint;
|
j = (btTypedConstraint*)ed->rbe.joint.joint;
|
||||||
rbe->dworld->removeConstraint(j);
|
rbe->dworld->removeConstraint(j);
|
||||||
ed->rbe.joint = NULL;
|
ed->rbe.joint.joint = NULL;
|
||||||
delete j;
|
delete j;
|
||||||
}
|
}
|
||||||
if (!jointtype)
|
if (!jointtype)
|
||||||
|
@ -523,7 +525,7 @@ static void World_Bullet_Frame_JointFromEntity(world_t *world, wedict_t *ed)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ed->rbe.joint = (void *) j;
|
ed->rbe.joint.joint = (void *) j;
|
||||||
if (j)
|
if (j)
|
||||||
{
|
{
|
||||||
j->setUserConstraintPtr((void *) ed);
|
j->setUserConstraintPtr((void *) ed);
|
||||||
|
@ -575,7 +577,7 @@ static qboolean QDECL World_Bullet_RagCreateBody(world_t *world, rbebody_t *body
|
||||||
bulletcontext_t *ctx = (bulletcontext_t*)world->rbe;
|
bulletcontext_t *ctx = (bulletcontext_t*)world->rbe;
|
||||||
int axisindex;
|
int axisindex;
|
||||||
ctx->hasextraobjs = true;
|
ctx->hasextraobjs = true;
|
||||||
|
|
||||||
switch(bodyinfo->geomshape)
|
switch(bodyinfo->geomshape)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -953,7 +955,7 @@ public:
|
||||||
|
|
||||||
rbefuncs->VectorAngles(fwd, up, edict->v->angles, (qboolean)NegativeMeshPitch(world, edict));
|
rbefuncs->VectorAngles(fwd, up, edict->v->angles, (qboolean)NegativeMeshPitch(world, edict));
|
||||||
|
|
||||||
const btVector3 &vel = ((btRigidBody*)edict->rbe.body)->getLinearVelocity();
|
const btVector3 &vel = ((btRigidBody*)edict->rbe.body.body)->getLinearVelocity();
|
||||||
VectorCopy(vel.m_floats, edict->v->velocity);
|
VectorCopy(vel.m_floats, edict->v->velocity);
|
||||||
|
|
||||||
//so it doesn't get rebuilt
|
//so it doesn't get rebuilt
|
||||||
|
@ -1218,7 +1220,7 @@ static void World_Bullet_Frame_BodyFromEntity(world_t *world, wedict_t *ed)
|
||||||
// ed->rbe.massbuf = BZ_Malloc(sizeof(dMass));
|
// ed->rbe.massbuf = BZ_Malloc(sizeof(dMass));
|
||||||
// memcpy(ed->rbe.massbuf, &mass, sizeof(dMass));
|
// memcpy(ed->rbe.massbuf, &mass, sizeof(dMass));
|
||||||
|
|
||||||
ed->rbe.geom = (void *)geom;
|
ed->rbe.body.geom = (void *)geom;
|
||||||
}
|
}
|
||||||
|
|
||||||
//non-moving objects need to be static objects (and thus need 0 mass)
|
//non-moving objects need to be static objects (and thus need 0 mass)
|
||||||
|
@ -1229,32 +1231,32 @@ static void World_Bullet_Frame_BodyFromEntity(world_t *world, wedict_t *ed)
|
||||||
if (ed->rbe.mass != massval)
|
if (ed->rbe.mass != massval)
|
||||||
{
|
{
|
||||||
ed->rbe.mass = massval;
|
ed->rbe.mass = massval;
|
||||||
body = (btRigidBody*)ed->rbe.body;
|
body = (btRigidBody*)ed->rbe.body.body;
|
||||||
if (body)
|
if (body)
|
||||||
ctx->dworld->removeRigidBody(body);
|
ctx->dworld->removeRigidBody(body);
|
||||||
ed->rbe.body = NULL;
|
ed->rbe.body.body = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if(ed->rbe.geom)
|
// if(ed->rbe.body.geom)
|
||||||
// dGeomSetData(ed->rbe.geom, (void*)ed);
|
// dGeomSetData(ed->rbe.body.geom, (void*)ed);
|
||||||
if (movetype == MOVETYPE_PHYSICS && ed->rbe.mass)
|
if (movetype == MOVETYPE_PHYSICS && ed->rbe.mass)
|
||||||
{
|
{
|
||||||
if (ed->rbe.body == NULL)
|
if (ed->rbe.body.body == NULL)
|
||||||
{
|
{
|
||||||
// ed->rbe.body = (void *)(body = dBodyCreate(world->rbe.world));
|
// ed->rbe.body.body = (void *)(body = dBodyCreate(world->rbe.world));
|
||||||
// dGeomSetBody(ed->rbe.geom, body);
|
// dGeomSetBody(ed->rbe.body.geom, body);
|
||||||
// dBodySetData(body, (void*)ed);
|
// dBodySetData(body, (void*)ed);
|
||||||
// dBodySetMass(body, (dMass *) ed->rbe.massbuf);
|
// dBodySetMass(body, (dMass *) ed->rbe.massbuf);
|
||||||
|
|
||||||
btVector3 fallInertia(0, 0, 0);
|
btVector3 fallInertia(0, 0, 0);
|
||||||
((btCollisionShape*)ed->rbe.geom)->calculateLocalInertia(ed->rbe.mass, fallInertia);
|
((btCollisionShape*)ed->rbe.body.geom)->calculateLocalInertia(ed->rbe.mass, fallInertia);
|
||||||
btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(ed->rbe.mass, new QCMotionState(ed,world), (btCollisionShape*)ed->rbe.geom, fallInertia);
|
btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(ed->rbe.mass, new QCMotionState(ed,world), (btCollisionShape*)ed->rbe.body.geom, fallInertia);
|
||||||
body = new btRigidBody(fallRigidBodyCI);
|
body = new btRigidBody(fallRigidBodyCI);
|
||||||
body->setUserPointer(ed);
|
body->setUserPointer(ed);
|
||||||
// btTransform trans;
|
// btTransform trans;
|
||||||
// trans.setFromOpenGLMatrix(ed->rbe.offsetmatrix);
|
// trans.setFromOpenGLMatrix(ed->rbe.offsetmatrix);
|
||||||
// body->setCenterOfMassTransform(trans);
|
// body->setCenterOfMassTransform(trans);
|
||||||
ed->rbe.body = (void*)body;
|
ed->rbe.body.body = (void*)body;
|
||||||
|
|
||||||
//motion threshhold should be speed/physicsframerate.
|
//motion threshhold should be speed/physicsframerate.
|
||||||
//FIXME: recalculate...
|
//FIXME: recalculate...
|
||||||
|
@ -1269,15 +1271,15 @@ static void World_Bullet_Frame_BodyFromEntity(world_t *world, wedict_t *ed)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (ed->rbe.body == NULL)
|
if (ed->rbe.body.body == NULL)
|
||||||
{
|
{
|
||||||
btRigidBody::btRigidBodyConstructionInfo rbci(ed->rbe.mass, new QCMotionState(ed,world), (btCollisionShape*)ed->rbe.geom, btVector3(0, 0, 0));
|
btRigidBody::btRigidBodyConstructionInfo rbci(ed->rbe.mass, new QCMotionState(ed,world), (btCollisionShape*)ed->rbe.body.geom, btVector3(0, 0, 0));
|
||||||
body = new btRigidBody(rbci);
|
body = new btRigidBody(rbci);
|
||||||
body->setUserPointer(ed);
|
body->setUserPointer(ed);
|
||||||
// btTransform trans;
|
// btTransform trans;
|
||||||
// trans.setFromOpenGLMatrix(ed->rbe.offsetmatrix);
|
// trans.setFromOpenGLMatrix(ed->rbe.offsetmatrix);
|
||||||
// body->setCenterOfMassTransform(trans);
|
// body->setCenterOfMassTransform(trans);
|
||||||
ed->rbe.body = (void*)body;
|
ed->rbe.body.body = (void*)body;
|
||||||
if (ed->rbe.mass)
|
if (ed->rbe.mass)
|
||||||
body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
|
body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
|
||||||
else
|
else
|
||||||
|
@ -1288,7 +1290,7 @@ static void World_Bullet_Frame_BodyFromEntity(world_t *world, wedict_t *ed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
body = (btRigidBody*)ed->rbe.body;
|
body = (btRigidBody*)ed->rbe.body.body;
|
||||||
|
|
||||||
// get current data from entity
|
// get current data from entity
|
||||||
gravity = qtrue;
|
gravity = qtrue;
|
||||||
|
@ -1376,7 +1378,7 @@ static void World_Bullet_Frame_BodyFromEntity(world_t *world, wedict_t *ed)
|
||||||
modified = qtrue;
|
modified = qtrue;
|
||||||
|
|
||||||
// store the qc values into the physics engine
|
// store the qc values into the physics engine
|
||||||
body = (btRigidBody*)ed->rbe.body;
|
body = (btRigidBody*)ed->rbe.body.body;
|
||||||
if (modified && body)
|
if (modified && body)
|
||||||
{
|
{
|
||||||
// dVector3 r[3];
|
// dVector3 r[3];
|
||||||
|
@ -1508,7 +1510,7 @@ static void VARGS nearCallback (void *data, dGeomID o1, dGeomID o2)
|
||||||
//ragdolls don't make contact with the bbox of the doll entity
|
//ragdolls don't make contact with the bbox of the doll entity
|
||||||
//the origional entity should probably not be solid anyway.
|
//the origional entity should probably not be solid anyway.
|
||||||
//these bodies should probably not collide against bboxes of other entities with ragdolls either, but meh.
|
//these bodies should probably not collide against bboxes of other entities with ragdolls either, but meh.
|
||||||
if (ed1->rbe.body == b1 || ed2->rbe.body == b2)
|
if (ed1->rbe.body.body == b1 || ed2->rbe.body == b2)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!ed1 || ed1->isfree)
|
if(!ed1 || ed1->isfree)
|
||||||
|
@ -1605,7 +1607,7 @@ static void QDECL World_Bullet_Frame(world_t *world, double frametime, double gr
|
||||||
struct bulletcontext_s *ctx = (struct bulletcontext_s*)world->rbe;
|
struct bulletcontext_s *ctx = (struct bulletcontext_s*)world->rbe;
|
||||||
if (world->rbe_hasphysicsents || ctx->hasextraobjs)
|
if (world->rbe_hasphysicsents || ctx->hasextraobjs)
|
||||||
{
|
{
|
||||||
int i;
|
unsigned int i;
|
||||||
wedict_t *ed;
|
wedict_t *ed;
|
||||||
|
|
||||||
// world->rbe.iterations = bound(1, physics_bullet_iterationsperframe.ival, 1000);
|
// world->rbe.iterations = bound(1, physics_bullet_iterationsperframe.ival, 1000);
|
||||||
|
@ -1674,7 +1676,7 @@ static void QDECL World_Bullet_Frame(world_t *world, double frametime, double gr
|
||||||
|
|
||||||
static void World_Bullet_RunCmd(world_t *world, rbecommandqueue_t *cmd)
|
static void World_Bullet_RunCmd(world_t *world, rbecommandqueue_t *cmd)
|
||||||
{
|
{
|
||||||
btRigidBody *body = (btRigidBody*)(cmd->edict->rbe.body);
|
btRigidBody *body = (btRigidBody*)(cmd->edict->rbe.body.body);
|
||||||
switch(cmd->command)
|
switch(cmd->command)
|
||||||
{
|
{
|
||||||
case RBECMD_ENABLE:
|
case RBECMD_ENABLE:
|
||||||
|
@ -1693,7 +1695,7 @@ static void World_Bullet_RunCmd(world_t *world, rbecommandqueue_t *cmd)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RBECMD_TORQUE:
|
case RBECMD_TORQUE:
|
||||||
if (cmd->edict->rbe.body)
|
if (cmd->edict->rbe.body.body)
|
||||||
{
|
{
|
||||||
body->setActivationState(1);
|
body->setActivationState(1);
|
||||||
body->applyTorque(btVector3(cmd->v1[0], cmd->v1[1], cmd->v1[2]));
|
body->applyTorque(btVector3(cmd->v1[0], cmd->v1[1], cmd->v1[2]));
|
||||||
|
@ -1722,7 +1724,7 @@ static void QDECL World_Bullet_PushCommand(world_t *world, rbecommandqueue_t *va
|
||||||
static void QDECL World_Bullet_TraceEntity(world_t *world, vec3_t start, vec3_t end, wedict_t *ed)
|
static void QDECL World_Bullet_TraceEntity(world_t *world, vec3_t start, vec3_t end, wedict_t *ed)
|
||||||
{
|
{
|
||||||
struct bulletcontext_s *ctx = (struct bulletcontext_s*)world->rbe;
|
struct bulletcontext_s *ctx = (struct bulletcontext_s*)world->rbe;
|
||||||
btCollisionShape *shape = (btCollisionShape*)ed->rbe.geom;
|
btCollisionShape *shape = (btCollisionShape*)ed->rbe.body.geom;
|
||||||
|
|
||||||
class myConvexResultCallback : public btCollisionWorld::ConvexResultCallback
|
class myConvexResultCallback : public btCollisionWorld::ConvexResultCallback
|
||||||
{
|
{
|
||||||
|
|
|
@ -150,9 +150,9 @@ void SCR_HUD_DrawBar(int direction, int value, float max_value, float *rgba, int
|
||||||
|
|
||||||
if(direction >= 2)
|
if(direction >= 2)
|
||||||
// top-down
|
// top-down
|
||||||
amount = Q_rint(abs((height * value) / max_value));
|
amount = Q_rint(fabs((height * value) / max_value));
|
||||||
else// left-right
|
else// left-right
|
||||||
amount = Q_rint(abs((width * value) / max_value));
|
amount = Q_rint(fabs((width * value) / max_value));
|
||||||
|
|
||||||
pDraw_Colour4f(rgba[0]/255.0, rgba[1]/255.0, rgba[2]/255.0, rgba[3]/255.0 * alphamul);
|
pDraw_Colour4f(rgba[0]/255.0, rgba[1]/255.0, rgba[2]/255.0, rgba[3]/255.0 * alphamul);
|
||||||
if(direction == 0)
|
if(direction == 0)
|
||||||
|
@ -390,7 +390,7 @@ char *SCR_GetGameTime(int t, char *buffer, size_t buffersize)
|
||||||
if (cl.countdown || cl.standby)
|
if (cl.countdown || cl.standby)
|
||||||
SecondsToMinutesString(timelimit, buffer, buffersize);
|
SecondsToMinutesString(timelimit, buffer, buffersize);
|
||||||
else
|
else
|
||||||
SecondsToMinutesString((int) abs(timelimit - (cl.time - cl.matchstart)), buffer, buffersize);
|
SecondsToMinutesString((int) fabs(timelimit - (cl.time - cl.matchstart)), buffer, buffersize);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,8 +64,8 @@ BUILTINR(qhandle_t, Con_POpen, (const char *conname, quintptr_t flags));
|
||||||
#define ARGNAMES ,conname,text
|
#define ARGNAMES ,conname,text
|
||||||
BUILTIN(void, Con_SubPrint, (const char *conname, const char *text)); //on to named sub console (creating it too).
|
BUILTIN(void, Con_SubPrint, (const char *conname, const char *text)); //on to named sub console (creating it too).
|
||||||
#undef ARGNAMES
|
#undef ARGNAMES
|
||||||
#define ARGNAMES ,old,new
|
#define ARGNAMES ,old,newname
|
||||||
BUILTIN(void, Con_RenameSub, (const char *old, const char *new)); //rename a subconsole
|
BUILTIN(void, Con_RenameSub, (const char *old, const char *newname)); //rename a subconsole
|
||||||
#undef ARGNAMES
|
#undef ARGNAMES
|
||||||
#define ARGNAMES ,conname
|
#define ARGNAMES ,conname
|
||||||
BUILTINR(int, Con_IsActive, (const char *conname));
|
BUILTINR(int, Con_IsActive, (const char *conname));
|
||||||
|
@ -565,18 +565,18 @@ qintptr_t QDECL Plug_InitAPI(qintptr_t *args)
|
||||||
|
|
||||||
qboolean Plug_Export(const char *name, export_t func)
|
qboolean Plug_Export(const char *name, export_t func)
|
||||||
{
|
{
|
||||||
int i;
|
size_t i;
|
||||||
for (i = 0; i < sizeof(exports)/sizeof(exports[0]); i++)
|
for (i = 0; i < sizeof(exports)/sizeof(exports[0]); i++)
|
||||||
{
|
{
|
||||||
if (!exports[i].name)
|
if (!exports[i].name)
|
||||||
{
|
{
|
||||||
exports[i].name = name;
|
exports[i].name = name;
|
||||||
exports[i].func = func;
|
exports[i].func = func;
|
||||||
return pPlug_ExportToEngine(name, i);
|
return pPlug_ExportToEngine(name, i)?qtrue:qfalse;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pSys_Error("Plugin exports too many functions");
|
pSys_Error("Plugin exports too many functions");
|
||||||
return 0;
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -277,7 +277,7 @@ void QI_RefreshMapList(qboolean forcedisplay)
|
||||||
|
|
||||||
tech = XML_ChildOfTree(file, "techinfo", 0);
|
tech = XML_ChildOfTree(file, "techinfo", 0);
|
||||||
//if the filter isn't contained in the id/desc then don't display it.
|
//if the filter isn't contained in the id/desc then don't display it.
|
||||||
if (filters.namefilter)
|
if (*filters.namefilter)
|
||||||
{
|
{
|
||||||
if (!QI_strcasestr(id, filters.namefilter) && !QI_strcasestr(desc, filters.namefilter) && !QI_strcasestr(author, filters.namefilter))
|
if (!QI_strcasestr(id, filters.namefilter) && !QI_strcasestr(desc, filters.namefilter) && !QI_strcasestr(author, filters.namefilter))
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,12 +13,13 @@ You can probably get a better version from somewhere.
|
||||||
int Q_vsnprintf(char *buffer, size_t maxlen, const char *format, va_list vargs)
|
int Q_vsnprintf(char *buffer, size_t maxlen, const char *format, va_list vargs)
|
||||||
{
|
{
|
||||||
int tokens=0;
|
int tokens=0;
|
||||||
|
const char *string_;
|
||||||
char *string;
|
char *string;
|
||||||
char tempbuffer[64];
|
char tempbuffer[64];
|
||||||
char sign;
|
char sign;
|
||||||
unsigned int _uint;
|
unsigned int uint_;
|
||||||
int _int;
|
int int_;
|
||||||
float _float;
|
float float_;
|
||||||
int i;
|
int i;
|
||||||
int use0s;
|
int use0s;
|
||||||
int width, useprepad, plus;
|
int width, useprepad, plus;
|
||||||
|
@ -75,50 +76,50 @@ retry:
|
||||||
*buffer++ = *format;
|
*buffer++ = *format;
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
string = va_arg(vargs, char *);
|
string_ = va_arg(vargs, char *);
|
||||||
if (!string)
|
if (!string_)
|
||||||
string = "(null)";
|
string_ = "(null)";
|
||||||
if (width)
|
if (width)
|
||||||
{
|
{
|
||||||
while (*string && width--)
|
while (*string_ && width--)
|
||||||
{
|
{
|
||||||
if (maxlen-- == 0)
|
if (maxlen-- == 0)
|
||||||
{*buffer++='\0';return tokens;}
|
{*buffer++='\0';return tokens;}
|
||||||
*buffer++ = *string++;
|
*buffer++ = *string_++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (*string)
|
while (*string_)
|
||||||
{
|
{
|
||||||
if (maxlen-- == 0)
|
if (maxlen-- == 0)
|
||||||
{*buffer++='\0';return tokens;}
|
{*buffer++='\0';return tokens;}
|
||||||
*buffer++ = *string++;
|
*buffer++ = *string_++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tokens++;
|
tokens++;
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
_int = va_arg(vargs, int);
|
int_ = va_arg(vargs, int);
|
||||||
if (maxlen-- == 0)
|
if (maxlen-- == 0)
|
||||||
{*buffer++='\0';return tokens;}
|
{*buffer++='\0';return tokens;}
|
||||||
*buffer++ = _int;
|
*buffer++ = int_;
|
||||||
tokens++;
|
tokens++;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
if (1)
|
if (1)
|
||||||
_uint = (size_t)va_arg(vargs, void*);
|
uint_ = (size_t)va_arg(vargs, void*);
|
||||||
else
|
else
|
||||||
case 'x':
|
case 'x':
|
||||||
_uint = va_arg(vargs, unsigned int);
|
uint_ = va_arg(vargs, unsigned int);
|
||||||
i = sizeof(tempbuffer)-2;
|
i = sizeof(tempbuffer)-2;
|
||||||
tempbuffer[i+1] = '\0';
|
tempbuffer[i+1] = '\0';
|
||||||
while(_uint)
|
while(uint_)
|
||||||
{
|
{
|
||||||
tempbuffer[i] = (_uint&0xf) + '0';
|
tempbuffer[i] = (uint_&0xf) + '0';
|
||||||
if (tempbuffer[i] > '9')
|
if (tempbuffer[i] > '9')
|
||||||
tempbuffer[i] = tempbuffer[i] - ':' + 'a';
|
tempbuffer[i] = tempbuffer[i] - ':' + 'a';
|
||||||
_uint/=16;
|
uint_/=16;
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
string = tempbuffer+i+1;
|
string = tempbuffer+i+1;
|
||||||
|
@ -153,23 +154,23 @@ retry:
|
||||||
case 'd':
|
case 'd':
|
||||||
case 'u':
|
case 'u':
|
||||||
case 'i':
|
case 'i':
|
||||||
_int = va_arg(vargs, int);
|
int_ = va_arg(vargs, int);
|
||||||
if (useprepad)
|
if (useprepad)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
if (_int >= 1000)
|
if (int_ >= 1000)
|
||||||
useprepad = 4;
|
useprepad = 4;
|
||||||
else if (_int >= 100)
|
else if (int_ >= 100)
|
||||||
useprepad = 3;
|
useprepad = 3;
|
||||||
else if (_int >= 10)
|
else if (int_ >= 10)
|
||||||
useprepad = 2;
|
useprepad = 2;
|
||||||
else if (_int >= 0)
|
else if (int_ >= 0)
|
||||||
useprepad = 1;
|
useprepad = 1;
|
||||||
else if (_int <= -1000)
|
else if (int_ <= -1000)
|
||||||
useprepad = 5;
|
useprepad = 5;
|
||||||
else if (_int <= -100)
|
else if (int_ <= -100)
|
||||||
useprepad = 4;
|
useprepad = 4;
|
||||||
else if (_int <= -10)
|
else if (int_ <= -10)
|
||||||
useprepad = 3;
|
useprepad = 3;
|
||||||
else
|
else
|
||||||
useprepad = 2;
|
useprepad = 2;
|
||||||
|
@ -186,10 +187,10 @@ Con_Printf("add %i chars\n", useprepad);
|
||||||
Con_Printf("%i bytes left\n", maxlen);
|
Con_Printf("%i bytes left\n", maxlen);
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
if (_int < 0)
|
if (int_ < 0)
|
||||||
{
|
{
|
||||||
sign = '-';
|
sign = '-';
|
||||||
_int *= -1;
|
int_ *= -1;
|
||||||
}
|
}
|
||||||
else if (plus)
|
else if (plus)
|
||||||
sign = '+';
|
sign = '+';
|
||||||
|
@ -197,10 +198,10 @@ Con_Printf("%i bytes left\n", maxlen);
|
||||||
sign = 0;
|
sign = 0;
|
||||||
i = sizeof(tempbuffer)-2;
|
i = sizeof(tempbuffer)-2;
|
||||||
tempbuffer[sizeof(tempbuffer)-1] = '\0';
|
tempbuffer[sizeof(tempbuffer)-1] = '\0';
|
||||||
while(_int)
|
while(int_)
|
||||||
{
|
{
|
||||||
tempbuffer[i--] = _int%10 + '0';
|
tempbuffer[i--] = int_%10 + '0';
|
||||||
_int/=10;
|
int_/=10;
|
||||||
}
|
}
|
||||||
if (sign)
|
if (sign)
|
||||||
tempbuffer[i--] = sign;
|
tempbuffer[i--] = sign;
|
||||||
|
@ -242,29 +243,29 @@ Con_Printf("%i bytes left\n", maxlen);
|
||||||
tokens++;
|
tokens++;
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
_float = (float)va_arg(vargs, double);
|
float_ = (float)va_arg(vargs, double);
|
||||||
|
|
||||||
//integer part.
|
//integer part.
|
||||||
_int = (int)_float;
|
int_ = (int)float_;
|
||||||
if (_int < 0)
|
if (int_ < 0)
|
||||||
{
|
{
|
||||||
if (maxlen-- == 0)
|
if (maxlen-- == 0)
|
||||||
{*buffer++='\0';return tokens;}
|
{*buffer++='\0';return tokens;}
|
||||||
*buffer++ = '-';
|
*buffer++ = '-';
|
||||||
_int *= -1;
|
int_ *= -1;
|
||||||
}
|
}
|
||||||
i = sizeof(tempbuffer)-2;
|
i = sizeof(tempbuffer)-2;
|
||||||
tempbuffer[sizeof(tempbuffer)-1] = '\0';
|
tempbuffer[sizeof(tempbuffer)-1] = '\0';
|
||||||
if (!_int)
|
if (!int_)
|
||||||
{
|
{
|
||||||
tempbuffer[i--] = '0';
|
tempbuffer[i--] = '0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while(_int)
|
while(int_)
|
||||||
{
|
{
|
||||||
tempbuffer[i--] = _int%10 + '0';
|
tempbuffer[i--] = int_%10 + '0';
|
||||||
_int/=10;
|
int_/=10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
string = tempbuffer+i+1;
|
string = tempbuffer+i+1;
|
||||||
|
@ -275,21 +276,21 @@ Con_Printf("%i bytes left\n", maxlen);
|
||||||
*buffer++ = *string++;
|
*buffer++ = *string++;
|
||||||
}
|
}
|
||||||
|
|
||||||
_int = sizeof(tempbuffer)-2-i;
|
int_ = sizeof(tempbuffer)-2-i;
|
||||||
|
|
||||||
//floating point part.
|
//floating point part.
|
||||||
_float -= (int)_float;
|
float_ -= (int)float_;
|
||||||
i = 0;
|
i = 0;
|
||||||
tempbuffer[i++] = '.';
|
tempbuffer[i++] = '.';
|
||||||
if (precision < 0)
|
if (precision < 0)
|
||||||
precision = 7;
|
precision = 7;
|
||||||
while(_float - (int)_float)
|
while(float_ - (int)float_)
|
||||||
{
|
{
|
||||||
if (i > precision) //remove the excess presision.
|
if (i > precision) //remove the excess presision.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
_float*=10;
|
float_*=10;
|
||||||
tempbuffer[i++] = (int)_float%10 + '0';
|
tempbuffer[i++] = (int)float_%10 + '0';
|
||||||
}
|
}
|
||||||
if (i == 1) //no actual fractional part
|
if (i == 1) //no actual fractional part
|
||||||
{
|
{
|
||||||
|
@ -310,12 +311,12 @@ Con_Printf("%i bytes left\n", maxlen);
|
||||||
tokens++;
|
tokens++;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
string = "ERROR IN FORMAT";
|
string_ = "ERROR IN FORMAT";
|
||||||
while (*string)
|
while (*string_)
|
||||||
{
|
{
|
||||||
if (maxlen-- == 0)
|
if (maxlen-- == 0)
|
||||||
{*buffer++='\0';return tokens;}
|
{*buffer++='\0';return tokens;}
|
||||||
*buffer++ = *string++;
|
*buffer++ = *string_++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -635,7 +636,7 @@ char *Plug_Info_ValueForKey (const char *s, const char *key, char *out, size_t o
|
||||||
isvalue = !isvalue;
|
isvalue = !isvalue;
|
||||||
if (isvalue)
|
if (isvalue)
|
||||||
{
|
{
|
||||||
if (strlen(key) == s - start && !strncmp(start, key, s - start))
|
if (strlen(key) == (size_t)(s - start) && !strncmp(start, key, s - start))
|
||||||
{
|
{
|
||||||
s++;
|
s++;
|
||||||
while (outsize --> 1)
|
while (outsize --> 1)
|
||||||
|
|
Loading…
Reference in a new issue