mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2025-01-31 04:20:34 +00:00
Merge branch 'master' into scripting
Conflicts: src/actor.h src/g_doom/a_doomweaps.cpp src/p_local.h src/p_map.cpp src/sdl/i_main.cpp src/thingdef/thingdef_codeptr.cpp
This commit is contained in:
commit
4deeb8d8ae
50 changed files with 823 additions and 574 deletions
28
.gitignore
vendored
Normal file
28
.gitignore
vendored
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/Debug
|
||||||
|
*.ncb
|
||||||
|
*.suo
|
||||||
|
*.pdb
|
||||||
|
*.ilk
|
||||||
|
*.aps
|
||||||
|
/Release
|
||||||
|
/wadsrc_wad
|
||||||
|
*.user
|
||||||
|
/debug
|
||||||
|
/release
|
||||||
|
*/debug
|
||||||
|
*/release
|
||||||
|
/release_gcc
|
||||||
|
/dumb/vc6/dumb_static/release
|
||||||
|
/dumb/vc6/dumb_static/debug
|
||||||
|
/DOOMSTATS.TXT
|
||||||
|
/src/gitinfo.h
|
||||||
|
/src/sc_man_scanner.h
|
||||||
|
/src/xlat/xlat_parser.c
|
||||||
|
/src/xlat/xlat_parser.h
|
||||||
|
/src/xlat/xlat_parser.out
|
||||||
|
/tools/*/debug
|
||||||
|
/tools/*/release
|
||||||
|
/tools/*/*.exe
|
||||||
|
/tools/lemon/build
|
||||||
|
/tools/re2c/build
|
||||||
|
/wadsrc/*.pk3
|
|
@ -10,9 +10,9 @@ ENDIF( NOT CMAKE_BUILD_TYPE )
|
||||||
set( ZDOOM_OUTPUT_DIR ${CMAKE_BINARY_DIR} CACHE PATH "Directory where zdoom.pk3 and the executable will be created." )
|
set( ZDOOM_OUTPUT_DIR ${CMAKE_BINARY_DIR} CACHE PATH "Directory where zdoom.pk3 and the executable will be created." )
|
||||||
set( ZDOOM_EXE_NAME "zdoom" CACHE FILEPATH "Name of the executable to create." )
|
set( ZDOOM_EXE_NAME "zdoom" CACHE FILEPATH "Name of the executable to create." )
|
||||||
|
|
||||||
if( CMAKE_COMPILER_IS_GNUCXX )
|
if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
set( PROFILE 0 CACHE BOOL "Enable profiling with gprof for Debug and RelWithDebInfo build types." )
|
set( PROFILE 0 CACHE BOOL "Enable profiling with gprof for Debug and RelWithDebInfo build types." )
|
||||||
endif( CMAKE_COMPILER_IS_GNUCXX )
|
endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
|
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
cmake_minimum_required( VERSION 2.4 )
|
cmake_minimum_required( VERSION 2.4 )
|
||||||
|
|
||||||
if( CMAKE_COMPILER_IS_GNUC )
|
if( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fomit-frame-pointer" )
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fomit-frame-pointer" )
|
||||||
endif( CMAKE_COMPILER_IS_GNUC )
|
endif( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
||||||
add_definitions( -DBZ_NO_STDIO )
|
add_definitions( -DBZ_NO_STDIO )
|
||||||
add_library( bz2
|
add_library( bz2
|
||||||
|
|
|
@ -11,9 +11,9 @@ endif( NOT CMAKE_BUILD_TYPE MATCHES "Release" )
|
||||||
|
|
||||||
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -DDEBUGMODE=1" )
|
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -DDEBUGMODE=1" )
|
||||||
|
|
||||||
if( CMAKE_COMPILER_IS_GNUC )
|
if( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-pointer-sign -Wno-uninitialized" )
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-pointer-sign -Wno-uninitialized" )
|
||||||
endif( CMAKE_COMPILER_IS_GNUC )
|
endif( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
||||||
CHECK_FUNCTION_EXISTS( itoa ITOA_EXISTS )
|
CHECK_FUNCTION_EXISTS( itoa ITOA_EXISTS )
|
||||||
if( NOT ITOA_EXISTS )
|
if( NOT ITOA_EXISTS )
|
||||||
|
@ -101,6 +101,6 @@ add_library( dumb
|
||||||
src/it/xmeffect.c )
|
src/it/xmeffect.c )
|
||||||
target_link_libraries( dumb )
|
target_link_libraries( dumb )
|
||||||
|
|
||||||
if( CMAKE_COMPILER_IS_GNUCXX )
|
if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
set_source_files_properties( src/it/filter.cpp PROPERTIES COMPILE_FLAGS -msse )
|
set_source_files_properties( src/it/filter.cpp PROPERTIES COMPILE_FLAGS -msse )
|
||||||
endif( CMAKE_COMPILER_IS_GNUCXX )
|
endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
|
@ -6,7 +6,7 @@ if( NOT CMAKE_BUILD_TYPE MATCHES "Release" )
|
||||||
set( CMAKE_BUILD_TYPE "RelWithDebInfo" )
|
set( CMAKE_BUILD_TYPE "RelWithDebInfo" )
|
||||||
endif( NOT CMAKE_BUILD_TYPE MATCHES "Release" )
|
endif( NOT CMAKE_BUILD_TYPE MATCHES "Release" )
|
||||||
|
|
||||||
if( CMAKE_COMPILER_IS_GNUCXX )
|
if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra" )
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra" )
|
||||||
if( NOT PROFILE )
|
if( NOT PROFILE )
|
||||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fomit-frame-pointer" )
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fomit-frame-pointer" )
|
||||||
|
@ -15,7 +15,7 @@ if( CMAKE_COMPILER_IS_GNUCXX )
|
||||||
if( HAVE_NO_ARRAY_BOUNDS )
|
if( HAVE_NO_ARRAY_BOUNDS )
|
||||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-array-bounds" )
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-array-bounds" )
|
||||||
endif( HAVE_NO_ARRAY_BOUNDS )
|
endif( HAVE_NO_ARRAY_BOUNDS )
|
||||||
endif( CMAKE_COMPILER_IS_GNUCXX )
|
endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
||||||
add_library( gme
|
add_library( gme
|
||||||
gme/Blip_Buffer.cpp
|
gme/Blip_Buffer.cpp
|
||||||
|
|
|
@ -8,9 +8,9 @@ if( MSVC )
|
||||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4554 /wd4102" )
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4554 /wd4102" )
|
||||||
endif( MSVC )
|
endif( MSVC )
|
||||||
|
|
||||||
if( CMAKE_COMPILER_IS_GNUCXX )
|
if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra" )
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra" )
|
||||||
endif( CMAKE_COMPILER_IS_GNUCXX )
|
endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
||||||
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
|
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
|
||||||
add_definitions( -DINFNAN_CHECK -DMULTIPLE_THREADS )
|
add_definitions( -DINFNAN_CHECK -DMULTIPLE_THREADS )
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
cmake_minimum_required( VERSION 2.4 )
|
cmake_minimum_required( VERSION 2.4 )
|
||||||
|
|
||||||
if( CMAKE_COMPILER_IS_GNUC )
|
if( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fomit-frame-pointer" )
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fomit-frame-pointer" )
|
||||||
endif( CMAKE_COMPILER_IS_GNUC )
|
endif( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
||||||
add_library( jpeg
|
add_library( jpeg
|
||||||
jcomapi.c
|
jcomapi.c
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
cmake_minimum_required( VERSION 2.4 )
|
cmake_minimum_required( VERSION 2.4 )
|
||||||
|
|
||||||
if( CMAKE_COMPILER_IS_GNUC )
|
if( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fomit-frame-pointer" )
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fomit-frame-pointer" )
|
||||||
endif( CMAKE_COMPILER_IS_GNUC )
|
endif( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
||||||
set( LZMA_FILES
|
set( LZMA_FILES
|
||||||
C/Archive/7z/7zDecode.c
|
C/Archive/7z/7zDecode.c
|
||||||
|
|
|
@ -113,14 +113,14 @@ conversation // Starts a dialog.
|
||||||
|
|
||||||
// The amount of an item needed to successfully pick this option.
|
// The amount of an item needed to successfully pick this option.
|
||||||
// This can be repeated, but only the first will be shown (provided
|
// This can be repeated, but only the first will be shown (provided
|
||||||
// diaplaycost is true). All costs must be satisfied for success.
|
// displaycost is true). All costs must be satisfied for success.
|
||||||
cost
|
cost
|
||||||
{
|
{
|
||||||
item = <integer>; // Item that is required for this option.
|
item = <integer>; // Item that is required for this option.
|
||||||
amount = <integer>; // Minimum amount of the item needed.
|
amount = <integer>; // Minimum amount of the item needed.
|
||||||
}
|
}
|
||||||
|
|
||||||
displaycost = <bool>; // Weather the cost should be
|
displaycost = <bool>; // Whether the cost should be
|
||||||
// displayed with the option.
|
// displayed with the option.
|
||||||
// If no cost is specified this should
|
// If no cost is specified this should
|
||||||
// be ignored.
|
// be ignored.
|
||||||
|
|
|
@ -10,14 +10,14 @@ include( CheckCXXCompilerFlag )
|
||||||
include( FindPkgConfig )
|
include( FindPkgConfig )
|
||||||
|
|
||||||
option( NO_ASM "Disable assembly code" )
|
option( NO_ASM "Disable assembly code" )
|
||||||
if( CMAKE_COMPILER_IS_GNUCXX )
|
if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
option( NO_STRIP "Do not strip Release or MinSizeRel builds" )
|
option( NO_STRIP "Do not strip Release or MinSizeRel builds" )
|
||||||
# At least some versions of Xcode fail if you strip with the linker
|
# At least some versions of Xcode fail if you strip with the linker
|
||||||
# instead of the separate strip utility.
|
# instead of the separate strip utility.
|
||||||
if( APPLE )
|
if( APPLE )
|
||||||
set( NO_STRIP ON )
|
set( NO_STRIP ON )
|
||||||
endif( APPLE )
|
endif( APPLE )
|
||||||
endif( CMAKE_COMPILER_IS_GNUCXX )
|
endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
||||||
option( DYN_FLUIDSYNTH "Dynamically load fluidsynth" )
|
option( DYN_FLUIDSYNTH "Dynamically load fluidsynth" )
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ set( MINOR_VERSIONS "50" "49" "48" "47" "46" "45" "44" "43" "42" "41"
|
||||||
"27" "26" "25" "24" "23" "22" "21" "20" "21" "19" "18" "17" "16"
|
"27" "26" "25" "24" "23" "22" "21" "20" "21" "19" "18" "17" "16"
|
||||||
"15" "14" "13" "12" "11" "10" "09" "08" "07" "06" "05" "04" "03"
|
"15" "14" "13" "12" "11" "10" "09" "08" "07" "06" "05" "04" "03"
|
||||||
"02" "01" "00" )
|
"02" "01" "00" )
|
||||||
set( MAJOR_VERSIONS "34" "28" "26" "24" "22" "20" )
|
set( MAJOR_VERSIONS "44" "34" "28" "26" "24" "22" "20" )
|
||||||
set( FMOD_DIR_VERSIONS ${FMOD_DIR_VERSIONS} "../fmod" )
|
set( FMOD_DIR_VERSIONS ${FMOD_DIR_VERSIONS} "../fmod" )
|
||||||
foreach( majver ${MAJOR_VERSIONS} )
|
foreach( majver ${MAJOR_VERSIONS} )
|
||||||
foreach( minver ${MINOR_VERSIONS} )
|
foreach( minver ${MINOR_VERSIONS} )
|
||||||
|
@ -391,7 +391,7 @@ endif( SSE_MATTERS )
|
||||||
|
|
||||||
# Set up flags for GCC
|
# Set up flags for GCC
|
||||||
|
|
||||||
if( CMAKE_COMPILER_IS_GNUCXX )
|
if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
if( PROFILE )
|
if( PROFILE )
|
||||||
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -pg" )
|
set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -pg" )
|
||||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg" )
|
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg" )
|
||||||
|
@ -420,7 +420,7 @@ if( CMAKE_COMPILER_IS_GNUCXX )
|
||||||
set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s" )
|
set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s" )
|
||||||
set (CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} -s" )
|
set (CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} -s" )
|
||||||
endif( NOT NO_STRIP )
|
endif( NOT NO_STRIP )
|
||||||
endif( CMAKE_COMPILER_IS_GNUCXX )
|
endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
||||||
# Check for functions that may or may not exist.
|
# Check for functions that may or may not exist.
|
||||||
|
|
||||||
|
@ -483,12 +483,12 @@ if( BACKPATCH )
|
||||||
add_definitions( -DBACKPATCH )
|
add_definitions( -DBACKPATCH )
|
||||||
endif( BACKPATCH )
|
endif( BACKPATCH )
|
||||||
|
|
||||||
# Update svnrevision.h
|
# Update gitinfo.h
|
||||||
|
|
||||||
get_target_property( UPDATEREVISION_EXE updaterevision LOCATION )
|
get_target_property( UPDATEREVISION_EXE updaterevision LOCATION )
|
||||||
|
|
||||||
add_custom_target( revision_check ALL
|
add_custom_target( revision_check ALL
|
||||||
COMMAND ${UPDATEREVISION_EXE} . src/svnrevision.h
|
COMMAND ${UPDATEREVISION_EXE} src/gitinfo.h
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
DEPENDS updaterevision )
|
DEPENDS updaterevision )
|
||||||
|
|
||||||
|
@ -529,15 +529,15 @@ if( WIN32 )
|
||||||
win32/i_system.cpp
|
win32/i_system.cpp
|
||||||
win32/st_start.cpp
|
win32/st_start.cpp
|
||||||
win32/win32video.cpp )
|
win32/win32video.cpp )
|
||||||
if( CMAKE_COMPILER_IS_GNUCXX )
|
if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
# CMake is not set up to compile and link rc files with GCC. :(
|
# CMake is not set up to compile and link rc files with GCC. :(
|
||||||
add_custom_command( OUTPUT zdoom-rc.o
|
add_custom_command( OUTPUT zdoom-rc.o
|
||||||
COMMAND windres -o zdoom-rc.o -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zdoom.rc
|
COMMAND windres -o zdoom-rc.o -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zdoom.rc
|
||||||
DEPENDS win32/zdoom.rc )
|
DEPENDS win32/zdoom.rc )
|
||||||
set( SYSTEM_SOURCES ${SYSTEM_SOURCES} zdoom-rc.o )
|
set( SYSTEM_SOURCES ${SYSTEM_SOURCES} zdoom-rc.o )
|
||||||
else( CMAKE_COMPILER_IS_GNUCXX )
|
else( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
set( SYSTEM_SOURCES ${SYSTEM_SOURCES} win32/zdoom.rc )
|
set( SYSTEM_SOURCES ${SYSTEM_SOURCES} win32/zdoom.rc )
|
||||||
endif( CMAKE_COMPILER_IS_GNUCXX )
|
endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
else( WIN32 )
|
else( WIN32 )
|
||||||
set( SYSTEM_SOURCES_DIR sdl )
|
set( SYSTEM_SOURCES_DIR sdl )
|
||||||
set( SYSTEM_SOURCES
|
set( SYSTEM_SOURCES
|
||||||
|
@ -688,6 +688,7 @@ add_executable( zdoom WIN32
|
||||||
g_skill.cpp
|
g_skill.cpp
|
||||||
gameconfigfile.cpp
|
gameconfigfile.cpp
|
||||||
gi.cpp
|
gi.cpp
|
||||||
|
gitinfo.cpp
|
||||||
hu_scores.cpp
|
hu_scores.cpp
|
||||||
i_net.cpp
|
i_net.cpp
|
||||||
info.cpp
|
info.cpp
|
||||||
|
@ -993,7 +994,7 @@ if( NOT WIN32 )
|
||||||
COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/link-make
|
COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/link-make
|
||||||
COMMAND /bin/sh -c ${CMAKE_CURRENT_BINARY_DIR}/link-make )
|
COMMAND /bin/sh -c ${CMAKE_CURRENT_BINARY_DIR}/link-make )
|
||||||
endif( NOT WIN32 )
|
endif( NOT WIN32 )
|
||||||
if( CMAKE_COMPILER_IS_GNUCXX )
|
if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
# GCC misoptimizes this file
|
# GCC misoptimizes this file
|
||||||
set_source_files_properties( oplsynth/fmopl.cpp PROPERTIES COMPILE_FLAGS "-fno-tree-dominator-opts -fno-tree-fre" )
|
set_source_files_properties( oplsynth/fmopl.cpp PROPERTIES COMPILE_FLAGS "-fno-tree-dominator-opts -fno-tree-fre" )
|
||||||
|
|
||||||
|
@ -1001,7 +1002,7 @@ if( CMAKE_COMPILER_IS_GNUCXX )
|
||||||
if( SSE_MATTERS )
|
if( SSE_MATTERS )
|
||||||
set_source_files_properties( x86.cpp PROPERTIES COMPILE_FLAGS "-msse2 -mmmx" )
|
set_source_files_properties( x86.cpp PROPERTIES COMPILE_FLAGS "-msse2 -mmmx" )
|
||||||
endif( SSE_MATTERS )
|
endif( SSE_MATTERS )
|
||||||
endif( CMAKE_COMPILER_IS_GNUCXX )
|
endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
|
|
||||||
if( MSVC )
|
if( MSVC )
|
||||||
set_target_properties(zdoom PROPERTIES LINK_FLAGS "/MANIFEST:NO")
|
set_target_properties(zdoom PROPERTIES LINK_FLAGS "/MANIFEST:NO")
|
||||||
|
|
|
@ -267,8 +267,8 @@ enum
|
||||||
|
|
||||||
// --- mobj.flags5 ---
|
// --- mobj.flags5 ---
|
||||||
|
|
||||||
MF5_INSTATECALL = 0x00000001, // This actor is being run through CallStateChain
|
MF5_DONTDRAIN = 0x00000001, // cannot be drained health from.
|
||||||
/* = 0x00000002, */
|
MF5_INSTATECALL = 0x00000002, // This actor is being run through CallStateChain
|
||||||
MF5_NODROPOFF = 0x00000004, // cannot drop off under any circumstances.
|
MF5_NODROPOFF = 0x00000004, // cannot drop off under any circumstances.
|
||||||
/* = 0x00000008, */
|
/* = 0x00000008, */
|
||||||
MF5_COUNTSECRET = 0x00000010, // From Doom 64: actor acts like a secret
|
MF5_COUNTSECRET = 0x00000010, // From Doom 64: actor acts like a secret
|
||||||
|
|
|
@ -393,7 +393,7 @@ CCMD (take)
|
||||||
|
|
||||||
CCMD (gameversion)
|
CCMD (gameversion)
|
||||||
{
|
{
|
||||||
Printf ("%s : " __DATE__ "\n", DOTVERSIONSTR);
|
Printf ("%s @ %s\nCommit %s", GetVersionString(), GetGitTime(), GetGitHash());
|
||||||
}
|
}
|
||||||
|
|
||||||
CCMD (print)
|
CCMD (print)
|
||||||
|
|
|
@ -1167,9 +1167,9 @@ void C_DrawConsole (bool hw2d)
|
||||||
if (ConBottom >= 12)
|
if (ConBottom >= 12)
|
||||||
{
|
{
|
||||||
screen->DrawText (ConFont, CR_ORANGE, SCREENWIDTH - 8 -
|
screen->DrawText (ConFont, CR_ORANGE, SCREENWIDTH - 8 -
|
||||||
ConFont->StringWidth ("v" DOTVERSIONSTR),
|
ConFont->StringWidth (GetVersionString()),
|
||||||
ConBottom - ConFont->GetHeight() - 4,
|
ConBottom - ConFont->GetHeight() - 4,
|
||||||
"v" DOTVERSIONSTR, TAG_DONE);
|
GetVersionString(), TAG_DONE);
|
||||||
if (TickerMax)
|
if (TickerMax)
|
||||||
{
|
{
|
||||||
char tickstr[256];
|
char tickstr[256];
|
||||||
|
|
|
@ -80,6 +80,7 @@ enum
|
||||||
CP_SETACTIVATION,
|
CP_SETACTIVATION,
|
||||||
CP_SECTORFLOOROFFSET,
|
CP_SECTORFLOOROFFSET,
|
||||||
CP_SETWALLYSCALE,
|
CP_SETWALLYSCALE,
|
||||||
|
CP_SETTHINGZ,
|
||||||
};
|
};
|
||||||
|
|
||||||
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
||||||
|
@ -89,6 +90,7 @@ enum
|
||||||
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
|
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
|
||||||
|
|
||||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||||
|
extern TArray<FMapThing> MapThingsConverted;
|
||||||
|
|
||||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||||
|
|
||||||
|
@ -294,6 +296,15 @@ void ParseCompatibility()
|
||||||
sc.MustGetFloat();
|
sc.MustGetFloat();
|
||||||
CompatParams.Push(FLOAT2FIXED(sc.Float));
|
CompatParams.Push(FLOAT2FIXED(sc.Float));
|
||||||
}
|
}
|
||||||
|
else if (sc.Compare("setthingz"))
|
||||||
|
{
|
||||||
|
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||||
|
CompatParams.Push(CP_SETTHINGZ);
|
||||||
|
sc.MustGetNumber();
|
||||||
|
CompatParams.Push(sc.Number);
|
||||||
|
sc.MustGetFloat();
|
||||||
|
CompatParams.Push(FLOAT2FIXED(sc.Float));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sc.UnGet();
|
sc.UnGet();
|
||||||
|
@ -497,6 +508,16 @@ void SetCompatibilityParams()
|
||||||
i += 5;
|
i += 5;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case CP_SETTHINGZ:
|
||||||
|
{
|
||||||
|
// When this is called, the things haven't been spawned yet so we can alter the position inside the MapThings array.
|
||||||
|
if ((unsigned)CompatParams[i+1] < MapThingsConverted.Size())
|
||||||
|
{
|
||||||
|
MapThingsConverted[CompatParams[i+1]].z = CompatParams[i+2];
|
||||||
|
}
|
||||||
|
i += 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2334,6 +2334,28 @@ int D_LoadDehLumps()
|
||||||
{
|
{
|
||||||
count += D_LoadDehLump(lumpnum);
|
count += D_LoadDehLump(lumpnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (0 == PatchSize)
|
||||||
|
{
|
||||||
|
// No DEH/BEX patch is loaded yet, try to find lump(s) with specific extensions
|
||||||
|
|
||||||
|
for (lumpnum = 0, lastlump = Wads.GetNumLumps();
|
||||||
|
lumpnum < lastlump;
|
||||||
|
++lumpnum)
|
||||||
|
{
|
||||||
|
const char* const fullName = Wads.GetLumpFullName(lumpnum);
|
||||||
|
const char* const extension = strrchr(fullName, '.');
|
||||||
|
|
||||||
|
const bool isDehOrBex = NULL != extension
|
||||||
|
&& (0 == stricmp(extension, ".deh") || 0 == stricmp(extension, ".bex"));
|
||||||
|
|
||||||
|
if (isDehOrBex)
|
||||||
|
{
|
||||||
|
count += D_LoadDehLump(lumpnum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -134,12 +134,12 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_BrainSpit)
|
||||||
// spawn brain missile
|
// spawn brain missile
|
||||||
spit = P_SpawnMissile (self, targ, spawntype);
|
spit = P_SpawnMissile (self, targ, spawntype);
|
||||||
|
|
||||||
// Boss cubes should move freely to their destination so it's
|
|
||||||
// probably best to disable all collision detection for them.
|
|
||||||
|
|
||||||
if (spit != NULL)
|
if (spit != NULL)
|
||||||
{
|
{
|
||||||
|
// Boss cubes should move freely to their destination so it's
|
||||||
|
// probably best to disable all collision detection for them.
|
||||||
if (spit->flags & MF_NOCLIP) spit->flags5 |= MF5_NOINTERACTION;
|
if (spit->flags & MF_NOCLIP) spit->flags5 |= MF5_NOINTERACTION;
|
||||||
|
|
||||||
spit->target = targ;
|
spit->target = targ;
|
||||||
spit->master = self;
|
spit->master = self;
|
||||||
// [RH] Do this correctly for any trajectory. Doom would divide by 0
|
// [RH] Do this correctly for any trajectory. Doom would divide by 0
|
||||||
|
|
|
@ -132,6 +132,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Saw)
|
||||||
angle_t slope;
|
angle_t slope;
|
||||||
player_t *player;
|
player_t *player;
|
||||||
AActor *linetarget;
|
AActor *linetarget;
|
||||||
|
int actualdamage;
|
||||||
|
|
||||||
if (NULL == (player = self->player))
|
if (NULL == (player = self->player))
|
||||||
{
|
{
|
||||||
|
@ -165,7 +166,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Saw)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
P_LineAttack (self, angle, range, slope, damage, NAME_Melee, pufftype, false, &linetarget);
|
P_LineAttack (self, angle, range, slope, damage, NAME_Melee, pufftype, false, &linetarget, &actualdamage);
|
||||||
|
|
||||||
if (!linetarget)
|
if (!linetarget)
|
||||||
{
|
{
|
||||||
|
@ -194,9 +195,9 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Saw)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lifesteal)
|
if (lifesteal && !(linetarget->flags5 & MF5_DONTDRAIN))
|
||||||
{
|
{
|
||||||
P_GiveBody (self, (damage * lifesteal) >> FRACBITS);
|
P_GiveBody (self, (actualdamage * lifesteal) >> FRACBITS);
|
||||||
}
|
}
|
||||||
|
|
||||||
S_Sound (self, CHAN_WEAPON, hitsound, 1, ATTN_NORM);
|
S_Sound (self, CHAN_WEAPON, hitsound, 1, ATTN_NORM);
|
||||||
|
|
|
@ -827,9 +827,16 @@ void G_AddViewAngle (int yaw)
|
||||||
|
|
||||||
CVAR (Bool, bot_allowspy, false, 0)
|
CVAR (Bool, bot_allowspy, false, 0)
|
||||||
|
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SPY_CANCEL = 0,
|
||||||
|
SPY_NEXT,
|
||||||
|
SPY_PREV,
|
||||||
|
};
|
||||||
|
|
||||||
// [RH] Spy mode has been separated into two console commands.
|
// [RH] Spy mode has been separated into two console commands.
|
||||||
// One goes forward; the other goes backward.
|
// One goes forward; the other goes backward.
|
||||||
static void ChangeSpy (bool forward)
|
static void ChangeSpy (int changespy)
|
||||||
{
|
{
|
||||||
// If you're not in a level, then you can't spy.
|
// If you're not in a level, then you can't spy.
|
||||||
if (gamestate != GS_LEVEL)
|
if (gamestate != GS_LEVEL)
|
||||||
|
@ -855,20 +862,24 @@ static void ChangeSpy (bool forward)
|
||||||
|
|
||||||
// Otherwise, cycle to the next player.
|
// Otherwise, cycle to the next player.
|
||||||
bool checkTeam = !demoplayback && deathmatch;
|
bool checkTeam = !demoplayback && deathmatch;
|
||||||
int pnum = int(players[consoleplayer].camera->player - players);
|
int pnum = consoleplayer;
|
||||||
int step = forward ? 1 : -1;
|
if (changespy != SPY_CANCEL)
|
||||||
|
|
||||||
do
|
|
||||||
{
|
{
|
||||||
pnum += step;
|
pnum = int(players[consoleplayer].camera->player - players);
|
||||||
pnum &= MAXPLAYERS-1;
|
int step = (changespy == SPY_NEXT) ? 1 : -1;
|
||||||
if (playeringame[pnum] &&
|
|
||||||
(!checkTeam || players[pnum].mo->IsTeammate (players[consoleplayer].mo) ||
|
do
|
||||||
(bot_allowspy && players[pnum].isbot)))
|
|
||||||
{
|
{
|
||||||
break;
|
pnum += step;
|
||||||
}
|
pnum &= MAXPLAYERS-1;
|
||||||
} while (pnum != consoleplayer);
|
if (playeringame[pnum] &&
|
||||||
|
(!checkTeam || players[pnum].mo->IsTeammate (players[consoleplayer].mo) ||
|
||||||
|
(bot_allowspy && players[pnum].isbot)))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (pnum != consoleplayer);
|
||||||
|
}
|
||||||
|
|
||||||
players[consoleplayer].camera = players[pnum].mo;
|
players[consoleplayer].camera = players[pnum].mo;
|
||||||
S_UpdateSounds(players[consoleplayer].camera);
|
S_UpdateSounds(players[consoleplayer].camera);
|
||||||
|
@ -882,15 +893,20 @@ static void ChangeSpy (bool forward)
|
||||||
CCMD (spynext)
|
CCMD (spynext)
|
||||||
{
|
{
|
||||||
// allow spy mode changes even during the demo
|
// allow spy mode changes even during the demo
|
||||||
ChangeSpy (true);
|
ChangeSpy (SPY_NEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
CCMD (spyprev)
|
CCMD (spyprev)
|
||||||
{
|
{
|
||||||
// allow spy mode changes even during the demo
|
// allow spy mode changes even during the demo
|
||||||
ChangeSpy (false);
|
ChangeSpy (SPY_PREV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CCMD (spycancel)
|
||||||
|
{
|
||||||
|
// allow spy mode changes even during the demo
|
||||||
|
ChangeSpy (SPY_CANCEL);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// G_Responder
|
// G_Responder
|
||||||
|
@ -2061,6 +2077,8 @@ static void PutSavePic (FILE *file, int width, int height)
|
||||||
|
|
||||||
void G_DoSaveGame (bool okForQuicksave, FString filename, const char *description)
|
void G_DoSaveGame (bool okForQuicksave, FString filename, const char *description)
|
||||||
{
|
{
|
||||||
|
char buf[100];
|
||||||
|
|
||||||
// Do not even try, if we're not in a level. (Can happen after
|
// Do not even try, if we're not in a level. (Can happen after
|
||||||
// a demo finishes playback.)
|
// a demo finishes playback.)
|
||||||
if (lines == NULL || sectors == NULL)
|
if (lines == NULL || sectors == NULL)
|
||||||
|
@ -2087,7 +2105,8 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio
|
||||||
|
|
||||||
SaveVersion = SAVEVER;
|
SaveVersion = SAVEVER;
|
||||||
PutSavePic (stdfile, SAVEPICWIDTH, SAVEPICHEIGHT);
|
PutSavePic (stdfile, SAVEPICWIDTH, SAVEPICHEIGHT);
|
||||||
M_AppendPNGText (stdfile, "Software", "ZDoom " DOTVERSIONSTR);
|
mysnprintf(buf, countof(buf), GAMENAME " %s", GetVersionString());
|
||||||
|
M_AppendPNGText (stdfile, "Software", buf);
|
||||||
M_AppendPNGText (stdfile, "Engine", GAMESIG);
|
M_AppendPNGText (stdfile, "Engine", GAMESIG);
|
||||||
M_AppendPNGText (stdfile, "ZDoom Save Version", SAVESIG);
|
M_AppendPNGText (stdfile, "ZDoom Save Version", SAVESIG);
|
||||||
M_AppendPNGText (stdfile, "Title", description);
|
M_AppendPNGText (stdfile, "Title", description);
|
||||||
|
|
|
@ -259,6 +259,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_GauntletAttack)
|
||||||
player_t *player;
|
player_t *player;
|
||||||
PClassActor *pufftype;
|
PClassActor *pufftype;
|
||||||
AActor *linetarget;
|
AActor *linetarget;
|
||||||
|
int actualdamage = 0;
|
||||||
|
|
||||||
if (NULL == (player = self->player))
|
if (NULL == (player = self->player))
|
||||||
{
|
{
|
||||||
|
@ -291,7 +292,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_GauntletAttack)
|
||||||
pufftype = PClass::FindActor("GauntletPuff1");
|
pufftype = PClass::FindActor("GauntletPuff1");
|
||||||
}
|
}
|
||||||
slope = P_AimLineAttack (self, angle, dist, &linetarget);
|
slope = P_AimLineAttack (self, angle, dist, &linetarget);
|
||||||
P_LineAttack (self, angle, dist, slope, damage, NAME_Melee, pufftype, false, &linetarget);
|
P_LineAttack (self, angle, dist, slope, damage, NAME_Melee, pufftype, false, &linetarget, &actualdamage);
|
||||||
if (!linetarget)
|
if (!linetarget)
|
||||||
{
|
{
|
||||||
if (pr_gatk() > 64)
|
if (pr_gatk() > 64)
|
||||||
|
@ -316,7 +317,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_GauntletAttack)
|
||||||
}
|
}
|
||||||
if (power)
|
if (power)
|
||||||
{
|
{
|
||||||
P_GiveBody (self, damage>>1);
|
if (!(linetarget->flags5 & MF5_DONTDRAIN)) P_GiveBody (self, actualdamage>>1);
|
||||||
S_Sound (self, CHAN_AUTO, "weapons/gauntletspowhit", 1, ATTN_NORM);
|
S_Sound (self, CHAN_AUTO, "weapons/gauntletspowhit", 1, ATTN_NORM);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -225,7 +225,7 @@ FGameConfigFile::~FGameConfigFile ()
|
||||||
|
|
||||||
void FGameConfigFile::WriteCommentHeader (FILE *file) const
|
void FGameConfigFile::WriteCommentHeader (FILE *file) const
|
||||||
{
|
{
|
||||||
fprintf (file, "# This file was generated by " GAMENAME " " DOTVERSIONSTR " on %s\n", myasctime());
|
fprintf (file, "# This file was generated by " GAMENAME " %s on %s\n", GetVersionString(), myasctime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void FGameConfigFile::MigrateStub (const char *pathname, FConfigFile *config, void *userdata)
|
void FGameConfigFile::MigrateStub (const char *pathname, FConfigFile *config, void *userdata)
|
||||||
|
|
18
src/gi.cpp
18
src/gi.cpp
|
@ -96,10 +96,10 @@ const char* GameInfoBorders[] =
|
||||||
strcpy(gameinfo.key, sc.String); \
|
strcpy(gameinfo.key, sc.String); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GAMEINFOKEY_STRINGARRAY(key, variable, length) \
|
#define GAMEINFOKEY_STRINGARRAY(key, variable, length, clear) \
|
||||||
else if(nextKey.CompareNoCase(variable) == 0) \
|
else if(nextKey.CompareNoCase(variable) == 0) \
|
||||||
{ \
|
{ \
|
||||||
gameinfo.key.Clear(); \
|
if (clear) gameinfo.key.Clear(); \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
sc.MustGetToken(TK_StringConst); \
|
sc.MustGetToken(TK_StringConst); \
|
||||||
|
@ -282,8 +282,10 @@ void FMapInfoParser::ParseGameInfo()
|
||||||
}
|
}
|
||||||
// Insert valid keys here.
|
// Insert valid keys here.
|
||||||
GAMEINFOKEY_CSTRING(titlePage, "titlePage", 8)
|
GAMEINFOKEY_CSTRING(titlePage, "titlePage", 8)
|
||||||
GAMEINFOKEY_STRINGARRAY(creditPages, "creditPage", 8)
|
GAMEINFOKEY_STRINGARRAY(creditPages, "addcreditPage", 8, false)
|
||||||
GAMEINFOKEY_STRINGARRAY(PlayerClasses, "playerclasses", 0)
|
GAMEINFOKEY_STRINGARRAY(creditPages, "CreditPage", 8, true)
|
||||||
|
GAMEINFOKEY_STRINGARRAY(PlayerClasses, "addplayerclasses", 0, false)
|
||||||
|
GAMEINFOKEY_STRINGARRAY(PlayerClasses, "playerclasses", 0, true)
|
||||||
GAMEINFOKEY_STRING(titleMusic, "titleMusic")
|
GAMEINFOKEY_STRING(titleMusic, "titleMusic")
|
||||||
GAMEINFOKEY_FLOAT(titleTime, "titleTime")
|
GAMEINFOKEY_FLOAT(titleTime, "titleTime")
|
||||||
GAMEINFOKEY_FLOAT(advisoryTime, "advisoryTime")
|
GAMEINFOKEY_FLOAT(advisoryTime, "advisoryTime")
|
||||||
|
@ -291,8 +293,9 @@ void FMapInfoParser::ParseGameInfo()
|
||||||
GAMEINFOKEY_STRING(chatSound, "chatSound")
|
GAMEINFOKEY_STRING(chatSound, "chatSound")
|
||||||
GAMEINFOKEY_STRING(finaleMusic, "finaleMusic")
|
GAMEINFOKEY_STRING(finaleMusic, "finaleMusic")
|
||||||
GAMEINFOKEY_CSTRING(finaleFlat, "finaleFlat", 8)
|
GAMEINFOKEY_CSTRING(finaleFlat, "finaleFlat", 8)
|
||||||
GAMEINFOKEY_STRINGARRAY(finalePages, "finalePage", 8)
|
GAMEINFOKEY_STRINGARRAY(finalePages, "finalePage", 8, true)
|
||||||
GAMEINFOKEY_STRINGARRAY(infoPages, "infoPage", 8)
|
GAMEINFOKEY_STRINGARRAY(infoPages, "addinfoPage", 8, false)
|
||||||
|
GAMEINFOKEY_STRINGARRAY(infoPages, "infoPage", 8, true)
|
||||||
GAMEINFOKEY_CSTRING(PauseSign, "pausesign", 8)
|
GAMEINFOKEY_CSTRING(PauseSign, "pausesign", 8)
|
||||||
GAMEINFOKEY_STRING(quitSound, "quitSound")
|
GAMEINFOKEY_STRING(quitSound, "quitSound")
|
||||||
GAMEINFOKEY_CSTRING(borderFlat, "borderFlat", 8)
|
GAMEINFOKEY_CSTRING(borderFlat, "borderFlat", 8)
|
||||||
|
@ -321,7 +324,8 @@ void FMapInfoParser::ParseGameInfo()
|
||||||
GAMEINFOKEY_INT(defaultdropstyle, "defaultdropstyle")
|
GAMEINFOKEY_INT(defaultdropstyle, "defaultdropstyle")
|
||||||
GAMEINFOKEY_CSTRING(Endoom, "endoom", 8)
|
GAMEINFOKEY_CSTRING(Endoom, "endoom", 8)
|
||||||
GAMEINFOKEY_INT(player5start, "player5start")
|
GAMEINFOKEY_INT(player5start, "player5start")
|
||||||
GAMEINFOKEY_STRINGARRAY(quitmessages, "quitmessages", 0)
|
GAMEINFOKEY_STRINGARRAY(quitmessages, "addquitmessages", 0, false)
|
||||||
|
GAMEINFOKEY_STRINGARRAY(quitmessages, "quitmessages", 0, true)
|
||||||
GAMEINFOKEY_STRING(mTitleColor, "menufontcolor_title")
|
GAMEINFOKEY_STRING(mTitleColor, "menufontcolor_title")
|
||||||
GAMEINFOKEY_STRING(mFontColor, "menufontcolor_label")
|
GAMEINFOKEY_STRING(mFontColor, "menufontcolor_label")
|
||||||
GAMEINFOKEY_STRING(mFontColorValue, "menufontcolor_value")
|
GAMEINFOKEY_STRING(mFontColorValue, "menufontcolor_value")
|
||||||
|
|
65
src/gitinfo.cpp
Normal file
65
src/gitinfo.cpp
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
** gitinfo.cpp
|
||||||
|
** Returns strings from gitinfo.h.
|
||||||
|
**
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
** Copyright 2013 Randy Heit
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions
|
||||||
|
** are met:
|
||||||
|
**
|
||||||
|
** 1. Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** 3. The name of the author may not be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
**
|
||||||
|
** This file is just here so that when gitinfo.h changes, only one source
|
||||||
|
** file needs to be recompiled.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gitinfo.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
const char *GetGitDescription()
|
||||||
|
{
|
||||||
|
return GIT_DESCRIPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *GetGitHash()
|
||||||
|
{
|
||||||
|
return GIT_HASH;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *GetGitTime()
|
||||||
|
{
|
||||||
|
return GIT_TIME;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *GetVersionString()
|
||||||
|
{
|
||||||
|
if (GetGitDescription()[0] == '\0')
|
||||||
|
{
|
||||||
|
return VERSIONSTR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return GIT_DESCRIPTION;
|
||||||
|
}
|
||||||
|
}
|
|
@ -632,8 +632,10 @@ void WritePCXfile (FILE *file, const BYTE *buffer, const PalEntry *palette,
|
||||||
void WritePNGfile (FILE *file, const BYTE *buffer, const PalEntry *palette,
|
void WritePNGfile (FILE *file, const BYTE *buffer, const PalEntry *palette,
|
||||||
ESSType color_type, int width, int height, int pitch)
|
ESSType color_type, int width, int height, int pitch)
|
||||||
{
|
{
|
||||||
|
char software[100];
|
||||||
|
mysnprintf(software, countof(software), GAMENAME " %s", GetVersionString());
|
||||||
if (!M_CreatePNG (file, buffer, palette, color_type, width, height, pitch) ||
|
if (!M_CreatePNG (file, buffer, palette, color_type, width, height, pitch) ||
|
||||||
!M_AppendPNGText (file, "Software", GAMENAME DOTVERSIONSTR) ||
|
!M_AppendPNGText (file, "Software", software) ||
|
||||||
!M_FinishPNG (file))
|
!M_FinishPNG (file))
|
||||||
{
|
{
|
||||||
Printf ("Could not create screenshot.\n");
|
Printf ("Could not create screenshot.\n");
|
||||||
|
|
|
@ -283,7 +283,6 @@ bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag,
|
||||||
bool rtn;
|
bool rtn;
|
||||||
sector_t* sec;
|
sector_t* sec;
|
||||||
DFloor* floor;
|
DFloor* floor;
|
||||||
//bool manual = false; tag == 0 and manual == true constitutes the same evidence [fdari]
|
|
||||||
fixed_t ceilingheight;
|
fixed_t ceilingheight;
|
||||||
fixed_t newheight;
|
fixed_t newheight;
|
||||||
vertex_t *spot, *spot2;
|
vertex_t *spot, *spot2;
|
||||||
|
@ -296,7 +295,6 @@ bool EV_DoFloor (DFloor::EFloor floortype, line_t *line, int tag,
|
||||||
if (!line || !(sec = line->backsector))
|
if (!line || !(sec = line->backsector))
|
||||||
return rtn;
|
return rtn;
|
||||||
secnum = (int)(sec-sectors);
|
secnum = (int)(sec-sectors);
|
||||||
//manual = true;
|
|
||||||
goto manual_floor;
|
goto manual_floor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -814,7 +812,6 @@ bool EV_DoDonut (int tag, line_t *line, fixed_t pillarspeed, fixed_t slimespeed)
|
||||||
DFloor* floor;
|
DFloor* floor;
|
||||||
vertex_t* spot;
|
vertex_t* spot;
|
||||||
fixed_t height;
|
fixed_t height;
|
||||||
// bool manual = false; Instead of breaking when manual is true, fail to (re)enter loop when tag is false (0).
|
|
||||||
|
|
||||||
secnum = -1;
|
secnum = -1;
|
||||||
rtn = false;
|
rtn = false;
|
||||||
|
@ -823,7 +820,6 @@ bool EV_DoDonut (int tag, line_t *line, fixed_t pillarspeed, fixed_t slimespeed)
|
||||||
{
|
{
|
||||||
if (!line || !(s1 = line->backsector))
|
if (!line || !(s1 = line->backsector))
|
||||||
return rtn;
|
return rtn;
|
||||||
//manual = true;
|
|
||||||
goto manual_donut;
|
goto manual_donut;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1378,7 +1374,6 @@ bool EV_StartWaggle (int tag, line_t *line, int height, int speed, int offset,
|
||||||
sector_t *sector;
|
sector_t *sector;
|
||||||
DWaggleBase *waggle;
|
DWaggleBase *waggle;
|
||||||
bool retCode;
|
bool retCode;
|
||||||
//bool manual = false;
|
|
||||||
|
|
||||||
retCode = false;
|
retCode = false;
|
||||||
sectorIndex = -1;
|
sectorIndex = -1;
|
||||||
|
@ -1387,7 +1382,6 @@ bool EV_StartWaggle (int tag, line_t *line, int height, int speed, int offset,
|
||||||
{
|
{
|
||||||
if (!line || !(sector = line->backsector))
|
if (!line || !(sector = line->backsector))
|
||||||
return retCode;
|
return retCode;
|
||||||
//manual = true;
|
|
||||||
goto manual_waggle;
|
goto manual_waggle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1498,7 +1498,7 @@ void P_SetRenderSector()
|
||||||
seg_t *seg = ss->firstline;
|
seg_t *seg = ss->firstline;
|
||||||
|
|
||||||
// Check for one-dimensional subsectors. These should be ignored when
|
// Check for one-dimensional subsectors. These should be ignored when
|
||||||
// being processed for automap drawinng etc.
|
// being processed for automap drawing etc.
|
||||||
ss->flags |= SSECF_DEGENERATE;
|
ss->flags |= SSECF_DEGENERATE;
|
||||||
for(j=2; j<ss->numlines; j++)
|
for(j=2; j<ss->numlines; j++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -652,14 +652,13 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags)
|
||||||
|
|
||||||
|
|
||||||
FState *diestate = NULL;
|
FState *diestate = NULL;
|
||||||
FName damagetype = (inflictor && inflictor->DeathType != NAME_None) ? inflictor->DeathType : DamageType;
|
|
||||||
|
|
||||||
if (damagetype != NAME_None)
|
if (DamageType != NAME_None)
|
||||||
{
|
{
|
||||||
diestate = FindState (NAME_Death, damagetype, true);
|
diestate = FindState (NAME_Death, DamageType, true);
|
||||||
if (diestate == NULL)
|
if (diestate == NULL)
|
||||||
{
|
{
|
||||||
if (damagetype == NAME_Ice)
|
if (DamageType == NAME_Ice)
|
||||||
{ // If an actor doesn't have an ice death, we can still give them a generic one.
|
{ // If an actor doesn't have an ice death, we can still give them a generic one.
|
||||||
|
|
||||||
if (!deh.NoAutofreeze && !(flags4 & MF4_NOICEDEATH) && (player || (flags3 & MF3_ISMONSTER)))
|
if (!deh.NoAutofreeze && !(flags4 & MF4_NOICEDEATH) && (player || (flags3 & MF3_ISMONSTER)))
|
||||||
|
@ -678,9 +677,9 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags)
|
||||||
// Don't pass on a damage type this actor cannot handle.
|
// Don't pass on a damage type this actor cannot handle.
|
||||||
// (most importantly, prevent barrels from passing on ice damage.)
|
// (most importantly, prevent barrels from passing on ice damage.)
|
||||||
// Massacre must be preserved though.
|
// Massacre must be preserved though.
|
||||||
if (damagetype != NAME_Massacre)
|
if (DamageType != NAME_Massacre)
|
||||||
{
|
{
|
||||||
damagetype = NAME_None;
|
DamageType = NAME_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((health < gibhealth || flags4 & MF4_EXTREMEDEATH) && !(flags4 & MF4_NOEXTREMEDEATH))
|
if ((health < gibhealth || flags4 & MF4_EXTREMEDEATH) && !(flags4 & MF4_NOEXTREMEDEATH))
|
||||||
|
@ -1258,7 +1257,7 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage,
|
||||||
|
|
||||||
// If the damaging player has the power of drain, give the player 50% of the damage
|
// If the damaging player has the power of drain, give the player 50% of the damage
|
||||||
// done in health.
|
// done in health.
|
||||||
if ( source && source->player && source->player->cheats & CF_DRAIN)
|
if ( source && source->player && source->player->cheats & CF_DRAIN && !(target->flags5 & MF5_DONTDRAIN))
|
||||||
{
|
{
|
||||||
if (!target->player || target->player != source->player)
|
if (!target->player || target->player != source->player)
|
||||||
{
|
{
|
||||||
|
@ -1273,6 +1272,10 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage,
|
||||||
if (target->health <= 0)
|
if (target->health <= 0)
|
||||||
{ // Death
|
{ // Death
|
||||||
target->special1 = damage;
|
target->special1 = damage;
|
||||||
|
|
||||||
|
// use inflictor's death type if it got one.
|
||||||
|
if (inflictor && inflictor->DeathType != NAME_None) mod = inflictor->DeathType;
|
||||||
|
|
||||||
// check for special fire damage or ice damage deaths
|
// check for special fire damage or ice damage deaths
|
||||||
if (mod == NAME_Fire)
|
if (mod == NAME_Fire)
|
||||||
{
|
{
|
||||||
|
|
|
@ -464,8 +464,8 @@ enum // P_LineAttack flags
|
||||||
LAF_NORANDOMPUFFZ = 2
|
LAF_NORANDOMPUFFZ = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance, int pitch, int damage, FName damageType, PClassActor *pufftype, int flags = 0, AActor **victim = NULL);
|
AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance, int pitch, int damage, FName damageType, PClassActor *pufftype, int flags = 0, AActor **victim = NULL, int *actualdamage = NULL);
|
||||||
AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance, int pitch, int damage, FName damageType, FName pufftype, int flags = 0, AActor **victim = NULL);
|
AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance, int pitch, int damage, FName damageType, FName pufftype, int flags = 0, AActor **victim = NULL, int *actualdamage = NULL);
|
||||||
void P_TraceBleed (int damage, fixed_t x, fixed_t y, fixed_t z, AActor *target, angle_t angle, int pitch);
|
void P_TraceBleed (int damage, fixed_t x, fixed_t y, fixed_t z, AActor *target, angle_t angle, int pitch);
|
||||||
void P_TraceBleed (int damage, AActor *target, angle_t angle, int pitch);
|
void P_TraceBleed (int damage, AActor *target, angle_t angle, int pitch);
|
||||||
void P_TraceBleed (int damage, AActor *target, AActor *missile); // missile version
|
void P_TraceBleed (int damage, AActor *target, AActor *missile); // missile version
|
||||||
|
|
|
@ -3496,7 +3496,7 @@ static ETraceStatus CheckForSpectral (FTraceResults &res, void *userdata)
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
||||||
int pitch, int damage, FName damageType, PClassActor *pufftype, int flags, AActor **victim)
|
int pitch, int damage, FName damageType, PClassActor *pufftype, int flags, AActor **victim, int *actualdamage)
|
||||||
{
|
{
|
||||||
fixed_t vx, vy, vz, shootz;
|
fixed_t vx, vy, vz, shootz;
|
||||||
FTraceResults trace;
|
FTraceResults trace;
|
||||||
|
@ -3514,6 +3514,10 @@ AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
||||||
{
|
{
|
||||||
*victim = NULL;
|
*victim = NULL;
|
||||||
}
|
}
|
||||||
|
if (actualdamage != NULL)
|
||||||
|
{
|
||||||
|
*actualdamage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
angle >>= ANGLETOFINESHIFT;
|
angle >>= ANGLETOFINESHIFT;
|
||||||
pitch = (angle_t)(pitch) >> ANGLETOFINESHIFT;
|
pitch = (angle_t)(pitch) >> ANGLETOFINESHIFT;
|
||||||
|
@ -3684,6 +3688,10 @@ AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
||||||
killPuff = true;
|
killPuff = true;
|
||||||
}
|
}
|
||||||
newdam = P_DamageMobj (trace.Actor, puff ? puff : t1, t1, damage, damageType, dmgflags);
|
newdam = P_DamageMobj (trace.Actor, puff ? puff : t1, t1, damage, damageType, dmgflags);
|
||||||
|
if (actualdamage != NULL)
|
||||||
|
{
|
||||||
|
*actualdamage = newdam;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!(puffDefaults != NULL && puffDefaults->flags3&MF3_BLOODLESSIMPACT))
|
if (!(puffDefaults != NULL && puffDefaults->flags3&MF3_BLOODLESSIMPACT))
|
||||||
{
|
{
|
||||||
|
@ -3741,7 +3749,7 @@ AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
||||||
}
|
}
|
||||||
|
|
||||||
AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
||||||
int pitch, int damage, FName damageType, FName pufftype, int flags, AActor **victim)
|
int pitch, int damage, FName damageType, FName pufftype, int flags, AActor **victim, int *actualdamage)
|
||||||
{
|
{
|
||||||
PClassActor *type = PClass::FindActor(pufftype);
|
PClassActor *type = PClass::FindActor(pufftype);
|
||||||
if (victim != NULL)
|
if (victim != NULL)
|
||||||
|
@ -3754,7 +3762,7 @@ AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return P_LineAttack(t1, angle, distance, pitch, damage, damageType, type, flags, victim);
|
return P_LineAttack(t1, angle, distance, pitch, damage, damageType, type, flags, victim, actualdamage);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -355,6 +355,10 @@ void AActor::Serialize (FArchive &arc)
|
||||||
<< meleethreshold
|
<< meleethreshold
|
||||||
<< meleerange
|
<< meleerange
|
||||||
<< DamageType;
|
<< DamageType;
|
||||||
|
if (SaveVersion >= 4501)
|
||||||
|
{
|
||||||
|
arc << DamageTypeReceived;
|
||||||
|
}
|
||||||
if (SaveVersion >= 3237)
|
if (SaveVersion >= 3237)
|
||||||
{
|
{
|
||||||
arc
|
arc
|
||||||
|
|
|
@ -848,7 +848,7 @@ FPolyObj::FPolyObj()
|
||||||
|
|
||||||
int FPolyObj::GetMirror()
|
int FPolyObj::GetMirror()
|
||||||
{
|
{
|
||||||
return Linedefs[0]->args[1];
|
return MirrorNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -1572,6 +1572,7 @@ static void SpawnPolyobj (int index, int tag, int type)
|
||||||
sd->linedef->special = 0;
|
sd->linedef->special = 0;
|
||||||
sd->linedef->args[0] = 0;
|
sd->linedef->args[0] = 0;
|
||||||
IterFindPolySides(&polyobjs[index], sd);
|
IterFindPolySides(&polyobjs[index], sd);
|
||||||
|
po->MirrorNum = sd->linedef->args[1];
|
||||||
po->crush = (type != PO_SPAWN_TYPE) ? 3 : 0;
|
po->crush = (type != PO_SPAWN_TYPE) ? 3 : 0;
|
||||||
po->bHurtOnTouch = (type == PO_SPAWNHURT_TYPE);
|
po->bHurtOnTouch = (type == PO_SPAWNHURT_TYPE);
|
||||||
po->tag = tag;
|
po->tag = tag;
|
||||||
|
@ -1647,10 +1648,7 @@ static void SpawnPolyobj (int index, int tag, int type)
|
||||||
po->bHurtOnTouch = (type == PO_SPAWNHURT_TYPE);
|
po->bHurtOnTouch = (type == PO_SPAWNHURT_TYPE);
|
||||||
po->tag = tag;
|
po->tag = tag;
|
||||||
po->seqType = po->Sidedefs[0]->linedef->args[3];
|
po->seqType = po->Sidedefs[0]->linedef->args[3];
|
||||||
// Next, change the polyobj's first line to point to a mirror
|
po->MirrorNum = po->Sidedefs[0]->linedef->args[2];
|
||||||
// if it exists
|
|
||||||
po->Sidedefs[0]->linedef->args[1] =
|
|
||||||
po->Sidedefs[0]->linedef->args[2];
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
I_Error ("SpawnPolyobj: Poly %d does not exist\n", tag);
|
I_Error ("SpawnPolyobj: Poly %d does not exist\n", tag);
|
||||||
|
|
|
@ -54,6 +54,7 @@ struct FPolyObj
|
||||||
FPolyVertex CenterSpot;
|
FPolyVertex CenterSpot;
|
||||||
FBoundingBox Bounds; // Bounds in map coordinates
|
FBoundingBox Bounds; // Bounds in map coordinates
|
||||||
subsector_t *CenterSubsector;
|
subsector_t *CenterSubsector;
|
||||||
|
int MirrorNum;
|
||||||
|
|
||||||
angle_t angle;
|
angle_t angle;
|
||||||
int tag; // reference tag assigned in HereticEd
|
int tag; // reference tag assigned in HereticEd
|
||||||
|
|
|
@ -263,7 +263,7 @@ void R_SetVisibility (float vis)
|
||||||
|
|
||||||
CurrentVisibility = vis;
|
CurrentVisibility = vis;
|
||||||
|
|
||||||
if (FocalTangent == 0)
|
if (FocalTangent == 0 || FocalLengthY == 0)
|
||||||
{ // If r_visibility is called before the renderer is all set up, don't
|
{ // If r_visibility is called before the renderer is all set up, don't
|
||||||
// divide by zero. This will be called again later, and the proper
|
// divide by zero. This will be called again later, and the proper
|
||||||
// values can be initialized then.
|
// values can be initialized then.
|
||||||
|
|
|
@ -1988,7 +1988,6 @@ void R_DrawHeightPlanes(fixed_t height); // kg3D - fake planes
|
||||||
|
|
||||||
void R_DrawMasked (void)
|
void R_DrawMasked (void)
|
||||||
{
|
{
|
||||||
DrewAVoxel = true; // TESTME
|
|
||||||
R_SortVisSprites (DrewAVoxel ? sv_compare2d : sv_compare, firstvissprite - vissprites);
|
R_SortVisSprites (DrewAVoxel ? sv_compare2d : sv_compare, firstvissprite - vissprites);
|
||||||
|
|
||||||
if (height_top == NULL)
|
if (height_top == NULL)
|
||||||
|
|
|
@ -1,276 +1,276 @@
|
||||||
/*
|
/*
|
||||||
** i_main.cpp
|
** i_main.cpp
|
||||||
** System-specific startup code. Eventually calls D_DoomMain.
|
** System-specific startup code. Eventually calls D_DoomMain.
|
||||||
**
|
**
|
||||||
**---------------------------------------------------------------------------
|
**---------------------------------------------------------------------------
|
||||||
** Copyright 1998-2007 Randy Heit
|
** Copyright 1998-2007 Randy Heit
|
||||||
** All rights reserved.
|
** All rights reserved.
|
||||||
**
|
**
|
||||||
** Redistribution and use in source and binary forms, with or without
|
** Redistribution and use in source and binary forms, with or without
|
||||||
** modification, are permitted provided that the following conditions
|
** modification, are permitted provided that the following conditions
|
||||||
** are met:
|
** are met:
|
||||||
**
|
**
|
||||||
** 1. Redistributions of source code must retain the above copyright
|
** 1. Redistributions of source code must retain the above copyright
|
||||||
** notice, this list of conditions and the following disclaimer.
|
** notice, this list of conditions and the following disclaimer.
|
||||||
** 2. Redistributions in binary form must reproduce the above copyright
|
** 2. Redistributions in binary form must reproduce the above copyright
|
||||||
** notice, this list of conditions and the following disclaimer in the
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
** documentation and/or other materials provided with the distribution.
|
** documentation and/or other materials provided with the distribution.
|
||||||
** 3. The name of the author may not be used to endorse or promote products
|
** 3. The name of the author may not be used to endorse or promote products
|
||||||
** derived from this software without specific prior written permission.
|
** derived from this software without specific prior written permission.
|
||||||
**
|
**
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
**---------------------------------------------------------------------------
|
**---------------------------------------------------------------------------
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// HEADER FILES ------------------------------------------------------------
|
// HEADER FILES ------------------------------------------------------------
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <new>
|
#include <new>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#ifndef NO_GTK
|
#ifndef NO_GTK
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#endif
|
#endif
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#if defined(__MACH__) && !defined(NOASM)
|
#if defined(__MACH__) && !defined(NOASM)
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "doomerrors.h"
|
#include "doomerrors.h"
|
||||||
#include "m_argv.h"
|
#include "m_argv.h"
|
||||||
#include "d_main.h"
|
#include "d_main.h"
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
#include "i_video.h"
|
#include "i_video.h"
|
||||||
#include "c_console.h"
|
#include "c_console.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "w_wad.h"
|
#include "w_wad.h"
|
||||||
#include "g_level.h"
|
#include "g_level.h"
|
||||||
#include "r_state.h"
|
#include "r_state.h"
|
||||||
#include "cmdlib.h"
|
#include "cmdlib.h"
|
||||||
#include "r_utility.h"
|
#include "r_utility.h"
|
||||||
#include "doomstat.h"
|
#include "doomstat.h"
|
||||||
|
|
||||||
// MACROS ------------------------------------------------------------------
|
// MACROS ------------------------------------------------------------------
|
||||||
|
|
||||||
// The maximum number of functions that can be registered with atterm.
|
// The maximum number of functions that can be registered with atterm.
|
||||||
#define MAX_TERMS 64
|
#define MAX_TERMS 64
|
||||||
|
|
||||||
// TYPES -------------------------------------------------------------------
|
// TYPES -------------------------------------------------------------------
|
||||||
|
|
||||||
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
||||||
|
|
||||||
extern "C" int cc_install_handlers(int, char**, int, int*, const char*, int(*)(char*, char*));
|
extern "C" int cc_install_handlers(int, char**, int, int*, const char*, int(*)(char*, char*));
|
||||||
|
|
||||||
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
|
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
|
||||||
|
|
||||||
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
|
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
|
||||||
|
|
||||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||||
|
|
||||||
#ifdef USE_XCURSOR
|
#ifdef USE_XCURSOR
|
||||||
extern bool UseXCursor;
|
extern bool UseXCursor;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||||
|
|
||||||
#ifndef NO_GTK
|
#ifndef NO_GTK
|
||||||
bool GtkAvailable;
|
bool GtkAvailable;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// The command line arguments.
|
// The command line arguments.
|
||||||
DArgs *Args;
|
DArgs *Args;
|
||||||
|
|
||||||
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
||||||
|
|
||||||
static void (*TermFuncs[MAX_TERMS]) ();
|
static void (*TermFuncs[MAX_TERMS]) ();
|
||||||
static const char *TermNames[MAX_TERMS];
|
static const char *TermNames[MAX_TERMS];
|
||||||
static int NumTerms;
|
static int NumTerms;
|
||||||
|
|
||||||
// CODE --------------------------------------------------------------------
|
// CODE --------------------------------------------------------------------
|
||||||
|
|
||||||
void addterm (void (*func) (), const char *name)
|
void addterm (void (*func) (), const char *name)
|
||||||
{
|
{
|
||||||
// Make sure this function wasn't already registered.
|
// Make sure this function wasn't already registered.
|
||||||
for (int i = 0; i < NumTerms; ++i)
|
for (int i = 0; i < NumTerms; ++i)
|
||||||
{
|
{
|
||||||
if (TermFuncs[i] == func)
|
if (TermFuncs[i] == func)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (NumTerms == MAX_TERMS)
|
if (NumTerms == MAX_TERMS)
|
||||||
{
|
{
|
||||||
func ();
|
func ();
|
||||||
I_FatalError (
|
I_FatalError (
|
||||||
"Too many exit functions registered.\n"
|
"Too many exit functions registered.\n"
|
||||||
"Increase MAX_TERMS in i_main.cpp");
|
"Increase MAX_TERMS in i_main.cpp");
|
||||||
}
|
}
|
||||||
TermNames[NumTerms] = name;
|
TermNames[NumTerms] = name;
|
||||||
TermFuncs[NumTerms++] = func;
|
TermFuncs[NumTerms++] = func;
|
||||||
}
|
}
|
||||||
|
|
||||||
void popterm ()
|
void popterm ()
|
||||||
{
|
{
|
||||||
if (NumTerms)
|
if (NumTerms)
|
||||||
NumTerms--;
|
NumTerms--;
|
||||||
}
|
}
|
||||||
|
|
||||||
void STACK_ARGS call_terms ()
|
void STACK_ARGS call_terms ()
|
||||||
{
|
{
|
||||||
while (NumTerms > 0)
|
while (NumTerms > 0)
|
||||||
{
|
{
|
||||||
// printf ("term %d - %s\n", NumTerms, TermNames[NumTerms-1]);
|
// printf ("term %d - %s\n", NumTerms, TermNames[NumTerms-1]);
|
||||||
TermFuncs[--NumTerms] ();
|
TermFuncs[--NumTerms] ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void STACK_ARGS NewFailure ()
|
static void STACK_ARGS NewFailure ()
|
||||||
{
|
{
|
||||||
I_FatalError ("Failed to allocate memory from system heap");
|
I_FatalError ("Failed to allocate memory from system heap");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int DoomSpecificInfo (char *buffer, char *end)
|
static int DoomSpecificInfo (char *buffer, char *end)
|
||||||
{
|
{
|
||||||
const char *arg;
|
const char *arg;
|
||||||
int size = end-buffer-2;
|
int size = end-buffer-2;
|
||||||
int i, p;
|
int i, p;
|
||||||
|
|
||||||
p = 0;
|
p = 0;
|
||||||
p += snprintf (buffer+p, size-p, GAMENAME" version " DOTVERSIONSTR " (" __DATE__ ")\n");
|
p += snprintf (buffer+p, size-p, GAMENAME" version %s (%s)\n", GetVersionString(), GetGitHash());
|
||||||
#ifdef __VERSION__
|
#ifdef __VERSION__
|
||||||
p += snprintf (buffer+p, size-p, "Compiler version: %s\n", __VERSION__);
|
p += snprintf (buffer+p, size-p, "Compiler version: %s\n", __VERSION__);
|
||||||
#endif
|
#endif
|
||||||
p += snprintf (buffer+p, size-p, "\nCommand line:");
|
p += snprintf (buffer+p, size-p, "\nCommand line:");
|
||||||
for (i = 0; i < Args->NumArgs(); ++i)
|
for (i = 0; i < Args->NumArgs(); ++i)
|
||||||
{
|
{
|
||||||
p += snprintf (buffer+p, size-p, " %s", Args->GetArg(i));
|
p += snprintf (buffer+p, size-p, " %s", Args->GetArg(i));
|
||||||
}
|
}
|
||||||
p += snprintf (buffer+p, size-p, "\n");
|
p += snprintf (buffer+p, size-p, "\n");
|
||||||
|
|
||||||
for (i = 0; (arg = Wads.GetWadName (i)) != NULL; ++i)
|
for (i = 0; (arg = Wads.GetWadName (i)) != NULL; ++i)
|
||||||
{
|
{
|
||||||
p += snprintf (buffer+p, size-p, "\nWad %d: %s", i, arg);
|
p += snprintf (buffer+p, size-p, "\nWad %d: %s", i, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gamestate != GS_LEVEL && gamestate != GS_TITLELEVEL)
|
if (gamestate != GS_LEVEL && gamestate != GS_TITLELEVEL)
|
||||||
{
|
{
|
||||||
p += snprintf (buffer+p, size-p, "\n\nNot in a level.");
|
p += snprintf (buffer+p, size-p, "\n\nNot in a level.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char name[9];
|
char name[9];
|
||||||
|
|
||||||
strncpy (name, level.mapname, 8);
|
strncpy (name, level.mapname, 8);
|
||||||
name[8] = 0;
|
name[8] = 0;
|
||||||
p += snprintf (buffer+p, size-p, "\n\nCurrent map: %s", name);
|
p += snprintf (buffer+p, size-p, "\n\nCurrent map: %s", name);
|
||||||
|
|
||||||
if (!viewactive)
|
if (!viewactive)
|
||||||
{
|
{
|
||||||
p += snprintf (buffer+p, size-p, "\n\nView not active.");
|
p += snprintf (buffer+p, size-p, "\n\nView not active.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p += snprintf (buffer+p, size-p, "\n\nviewx = %d", (int)viewx);
|
p += snprintf (buffer+p, size-p, "\n\nviewx = %d", (int)viewx);
|
||||||
p += snprintf (buffer+p, size-p, "\nviewy = %d", (int)viewy);
|
p += snprintf (buffer+p, size-p, "\nviewy = %d", (int)viewy);
|
||||||
p += snprintf (buffer+p, size-p, "\nviewz = %d", (int)viewz);
|
p += snprintf (buffer+p, size-p, "\nviewz = %d", (int)viewz);
|
||||||
p += snprintf (buffer+p, size-p, "\nviewangle = %x", (unsigned int)viewangle);
|
p += snprintf (buffer+p, size-p, "\nviewangle = %x", (unsigned int)viewangle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buffer[p++] = '\n';
|
buffer[p++] = '\n';
|
||||||
buffer[p++] = '\0';
|
buffer[p++] = '\0';
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__MACH__) && !defined(NOASM)
|
#if defined(__MACH__) && !defined(NOASM)
|
||||||
// NASM won't let us create custom sections for Mach-O. Whether that's a limitation of NASM
|
// NASM won't let us create custom sections for Mach-O. Whether that's a limitation of NASM
|
||||||
// or of Mach-O, I don't know, but since we're using NASM for the assembly, it doesn't much
|
// or of Mach-O, I don't know, but since we're using NASM for the assembly, it doesn't much
|
||||||
// matter.
|
// matter.
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
extern void *rtext_a_start, *rtext_a_end;
|
extern void *rtext_a_start, *rtext_a_end;
|
||||||
extern void *rtext_tmap_start, *rtext_tmap_end;
|
extern void *rtext_tmap_start, *rtext_tmap_end;
|
||||||
extern void *rtext_tmap2_start, *rtext_tmap2_end;
|
extern void *rtext_tmap2_start, *rtext_tmap2_end;
|
||||||
extern void *rtext_tmap3_start, *rtext_tmap3_end;
|
extern void *rtext_tmap3_start, *rtext_tmap3_end;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void unprotect_pages(long pagesize, void *start, void *end)
|
static void unprotect_pages(long pagesize, void *start, void *end)
|
||||||
{
|
{
|
||||||
char *page = (char *)((intptr_t)start & ~(pagesize - 1));
|
char *page = (char *)((intptr_t)start & ~(pagesize - 1));
|
||||||
size_t len = (char *)end - (char *)start;
|
size_t len = (char *)end - (char *)start;
|
||||||
if (mprotect(page, len, PROT_READ|PROT_WRITE|PROT_EXEC) != 0)
|
if (mprotect(page, len, PROT_READ|PROT_WRITE|PROT_EXEC) != 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "mprotect failed\n");
|
fprintf(stderr, "mprotect failed\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unprotect_rtext()
|
static void unprotect_rtext()
|
||||||
{
|
{
|
||||||
static void *const pages[] =
|
static void *const pages[] =
|
||||||
{
|
{
|
||||||
rtext_a_start, rtext_a_end,
|
rtext_a_start, rtext_a_end,
|
||||||
rtext_tmap_start, rtext_tmap_end,
|
rtext_tmap_start, rtext_tmap_end,
|
||||||
rtext_tmap2_start, rtext_tmap2_end,
|
rtext_tmap2_start, rtext_tmap2_end,
|
||||||
rtext_tmap3_start, rtext_tmap3_end
|
rtext_tmap3_start, rtext_tmap3_end
|
||||||
};
|
};
|
||||||
long pagesize = sysconf(_SC_PAGESIZE);
|
long pagesize = sysconf(_SC_PAGESIZE);
|
||||||
for (void *const *p = pages; p < &pages[countof(pages)]; p += 2)
|
for (void *const *p = pages; p < &pages[countof(pages)]; p += 2)
|
||||||
{
|
{
|
||||||
unprotect_pages(pagesize, p[0], p[1]);
|
unprotect_pages(pagesize, p[0], p[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void I_StartupJoysticks();
|
void I_StartupJoysticks();
|
||||||
void I_ShutdownJoysticks();
|
void I_ShutdownJoysticks();
|
||||||
|
|
||||||
int main (int argc, char **argv)
|
int main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
#if !defined (__APPLE__)
|
#if !defined (__APPLE__)
|
||||||
{
|
{
|
||||||
int s[4] = { SIGSEGV, SIGILL, SIGFPE, SIGBUS };
|
int s[4] = { SIGSEGV, SIGILL, SIGFPE, SIGBUS };
|
||||||
cc_install_handlers(argc, argv, 4, s, "zdoom-crash.log", DoomSpecificInfo);
|
cc_install_handlers(argc, argv, 4, s, "zdoom-crash.log", DoomSpecificInfo);
|
||||||
}
|
}
|
||||||
#endif // !__APPLE__
|
#endif // !__APPLE__
|
||||||
|
|
||||||
printf(GAMENAME" v%s - SVN revision %s - SDL version\nCompiled on %s\n",
|
|
||||||
DOTVERSIONSTR_NOREV,SVN_REVISION_STRING,__DATE__);
|
|
||||||
|
|
||||||
seteuid (getuid ());
|
printf(GAMENAME" %s - %s - SDL version\nCompiled on %s\n",
|
||||||
std::set_new_handler (NewFailure);
|
GetVersionString(), GetGitTime(), __DATE__);
|
||||||
|
|
||||||
#if defined(__MACH__) && !defined(NOASM)
|
seteuid (getuid ());
|
||||||
unprotect_rtext();
|
std::set_new_handler (NewFailure);
|
||||||
#endif
|
|
||||||
|
#if defined(__MACH__) && !defined(NOASM)
|
||||||
#ifndef NO_GTK
|
unprotect_rtext();
|
||||||
GtkAvailable = gtk_init_check (&argc, &argv);
|
#endif
|
||||||
#endif
|
|
||||||
|
#ifndef NO_GTK
|
||||||
setlocale (LC_ALL, "C");
|
GtkAvailable = gtk_init_check (&argc, &argv);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
setlocale (LC_ALL, "C");
|
||||||
|
|
||||||
if (SDL_Init (SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_NOPARACHUTE|SDL_INIT_JOYSTICK) == -1)
|
if (SDL_Init (SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_NOPARACHUTE|SDL_INIT_JOYSTICK) == -1)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "Could not initialize SDL:\n%s\n", SDL_GetError());
|
fprintf (stderr, "Could not initialize SDL:\n%s\n", SDL_GetError());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
atterm (SDL_Quit);
|
atterm (SDL_Quit);
|
||||||
|
|
||||||
{
|
{
|
||||||
char viddriver[80];
|
char viddriver[80];
|
||||||
|
|
||||||
|
@ -284,10 +284,12 @@ int main (int argc, char **argv)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_WM_SetCaption (GAMESIG " " DOTVERSIONSTR " (" __DATE__ ")", NULL);
|
char caption[100];
|
||||||
|
mysnprintf(caption, countof(caption), GAMESIG " %s (%s)", GetVersionString(), GetGitTime());
|
||||||
|
SDL_WM_SetCaption(caption, caption);
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
|
||||||
const SDL_VideoInfo* videoInfo = SDL_GetVideoInfo();
|
const SDL_VideoInfo* videoInfo = SDL_GetVideoInfo();
|
||||||
if ( NULL != videoInfo )
|
if ( NULL != videoInfo )
|
||||||
{
|
{
|
||||||
|
@ -306,59 +308,59 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
#endif // __APPLE__
|
#endif // __APPLE__
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Args = new DArgs(argc, argv);
|
Args = new DArgs(argc, argv);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
killough 1/98:
|
killough 1/98:
|
||||||
|
|
||||||
This fixes some problems with exit handling
|
This fixes some problems with exit handling
|
||||||
during abnormal situations.
|
during abnormal situations.
|
||||||
|
|
||||||
The old code called I_Quit() to end program,
|
The old code called I_Quit() to end program,
|
||||||
while now I_Quit() is installed as an exit
|
while now I_Quit() is installed as an exit
|
||||||
handler and exit() is called to exit, either
|
handler and exit() is called to exit, either
|
||||||
normally or abnormally. Seg faults are caught
|
normally or abnormally. Seg faults are caught
|
||||||
and the error handler is used, to prevent
|
and the error handler is used, to prevent
|
||||||
being left in graphics mode or having very
|
being left in graphics mode or having very
|
||||||
loud SFX noise because the sound card is
|
loud SFX noise because the sound card is
|
||||||
left in an unstable state.
|
left in an unstable state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
atexit (call_terms);
|
atexit (call_terms);
|
||||||
atterm (I_Quit);
|
atterm (I_Quit);
|
||||||
|
|
||||||
// Should we even be doing anything with progdir on Unix systems?
|
// Should we even be doing anything with progdir on Unix systems?
|
||||||
char program[PATH_MAX];
|
char program[PATH_MAX];
|
||||||
if (realpath (argv[0], program) == NULL)
|
if (realpath (argv[0], program) == NULL)
|
||||||
strcpy (program, argv[0]);
|
strcpy (program, argv[0]);
|
||||||
char *slash = strrchr (program, '/');
|
char *slash = strrchr (program, '/');
|
||||||
if (slash != NULL)
|
if (slash != NULL)
|
||||||
{
|
{
|
||||||
*(slash + 1) = '\0';
|
*(slash + 1) = '\0';
|
||||||
progdir = program;
|
progdir = program;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
progdir = "./";
|
progdir = "./";
|
||||||
}
|
}
|
||||||
|
|
||||||
I_StartupJoysticks();
|
I_StartupJoysticks();
|
||||||
C_InitConsole (80*8, 25*8, false);
|
C_InitConsole (80*8, 25*8, false);
|
||||||
D_DoomMain ();
|
D_DoomMain ();
|
||||||
}
|
}
|
||||||
catch (class CDoomError &error)
|
catch (class CDoomError &error)
|
||||||
{
|
{
|
||||||
I_ShutdownJoysticks();
|
I_ShutdownJoysticks();
|
||||||
if (error.GetMessage ())
|
if (error.GetMessage ())
|
||||||
fprintf (stderr, "%s\n", error.GetMessage ());
|
fprintf (stderr, "%s\n", error.GetMessage ());
|
||||||
exit (-1);
|
exit (-1);
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
call_terms ();
|
call_terms ();
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -483,10 +483,12 @@ int I_PickIWad_Gtk (WadStuff *wads, int numwads, bool showwin, int defaultiwad)
|
||||||
GtkTreeIter iter, defiter;
|
GtkTreeIter iter, defiter;
|
||||||
int close_style = 0;
|
int close_style = 0;
|
||||||
int i;
|
int i;
|
||||||
|
char caption[100];
|
||||||
|
|
||||||
// Create the dialog window.
|
// Create the dialog window.
|
||||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_set_title (GTK_WINDOW(window), GAMESIG " " DOTVERSIONSTR ": Select an IWAD to use");
|
mysnprintf(caption, countof(caption), GAMESIG " %s: Select an IWAD to use", GetVersionString());
|
||||||
|
gtk_window_set_title (GTK_WINDOW(window), caption);
|
||||||
gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER);
|
gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER);
|
||||||
gtk_container_set_border_width (GTK_CONTAINER(window), 10);
|
gtk_container_set_border_width (GTK_CONTAINER(window), 10);
|
||||||
g_signal_connect (window, "delete_event", G_CALLBACK(gtk_main_quit), NULL);
|
g_signal_connect (window, "delete_event", G_CALLBACK(gtk_main_quit), NULL);
|
||||||
|
@ -614,9 +616,10 @@ int I_PickIWad (WadStuff *wads, int numwads, bool showwin, int defaultiwad)
|
||||||
const char *str;
|
const char *str;
|
||||||
if((str=getenv("KDE_FULL_SESSION")) && strcmp(str, "true") == 0)
|
if((str=getenv("KDE_FULL_SESSION")) && strcmp(str, "true") == 0)
|
||||||
{
|
{
|
||||||
FString cmd("kdialog --title \""GAMESIG" "DOTVERSIONSTR": Select an IWAD to use\""
|
FString cmd("kdialog --title \""GAMESIG" ");
|
||||||
|
cmd << GetVersionString() << ": Select an IWAD to use\""
|
||||||
" --menu \"ZDoom found more than one IWAD\n"
|
" --menu \"ZDoom found more than one IWAD\n"
|
||||||
"Select from the list below to determine which one to use:\"");
|
"Select from the list below to determine which one to use:\"";
|
||||||
|
|
||||||
for(i = 0; i < numwads; ++i)
|
for(i = 0; i < numwads; ++i)
|
||||||
{
|
{
|
||||||
|
|
|
@ -198,7 +198,9 @@ static const FEnumList SpeakerModeNames[] =
|
||||||
{ "Surround", FMOD_SPEAKERMODE_SURROUND },
|
{ "Surround", FMOD_SPEAKERMODE_SURROUND },
|
||||||
{ "5.1", FMOD_SPEAKERMODE_5POINT1 },
|
{ "5.1", FMOD_SPEAKERMODE_5POINT1 },
|
||||||
{ "7.1", FMOD_SPEAKERMODE_7POINT1 },
|
{ "7.1", FMOD_SPEAKERMODE_7POINT1 },
|
||||||
|
#if FMOD_VERSION < 0x44400
|
||||||
{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },
|
{ "Prologic", FMOD_SPEAKERMODE_PROLOGIC },
|
||||||
|
#endif
|
||||||
{ "1", FMOD_SPEAKERMODE_MONO },
|
{ "1", FMOD_SPEAKERMODE_MONO },
|
||||||
{ "2", FMOD_SPEAKERMODE_STEREO },
|
{ "2", FMOD_SPEAKERMODE_STEREO },
|
||||||
{ "4", FMOD_SPEAKERMODE_QUAD },
|
{ "4", FMOD_SPEAKERMODE_QUAD },
|
||||||
|
|
|
@ -208,8 +208,6 @@ static cheatseq_t HereticCheats[] =
|
||||||
{ CheatPonce, 0, 0, 0, {CHT_HEALTH,0}, Cht_Generic },
|
{ CheatPonce, 0, 0, 0, {CHT_HEALTH,0}, Cht_Generic },
|
||||||
{ CheatSkel, 0, 0, 0, {CHT_KEYS,0}, Cht_Generic },
|
{ CheatSkel, 0, 0, 0, {CHT_KEYS,0}, Cht_Generic },
|
||||||
{ CheatChicken, 0, 0, 0, {CHT_MORPH,0}, Cht_Generic },
|
{ CheatChicken, 0, 0, 0, {CHT_MORPH,0}, Cht_Generic },
|
||||||
{ CheatAmmo, 0, 0, 0, {CHT_TAKEWEAPS,0}, Cht_Generic },
|
|
||||||
{ CheatGod, 0, 0, 0, {CHT_NOWUDIE,0}, Cht_Generic },
|
|
||||||
{ CheatMassacre, 0, 0, 0, {CHT_MASSACRE,0}, Cht_Generic },
|
{ CheatMassacre, 0, 0, 0, {CHT_MASSACRE,0}, Cht_Generic },
|
||||||
{ CheatEngage, 0, 1, 0, {0,0}, Cht_ChangeLevel },
|
{ CheatEngage, 0, 1, 0, {0,0}, Cht_ChangeLevel },
|
||||||
{ CheatPowerup1[0], 0, 0, 0, {CHT_GIMMIEA,0}, Cht_Generic },
|
{ CheatPowerup1[0], 0, 0, 0, {CHT_GIMMIEA,0}, Cht_Generic },
|
||||||
|
@ -223,6 +221,8 @@ static cheatseq_t HereticCheats[] =
|
||||||
{ CheatPowerup1[8], 0, 0, 0, {CHT_GIMMIEI,0}, Cht_Generic },
|
{ CheatPowerup1[8], 0, 0, 0, {CHT_GIMMIEI,0}, Cht_Generic },
|
||||||
{ CheatPowerup1[9], 0, 0, 0, {CHT_GIMMIEJ,0}, Cht_Generic },
|
{ CheatPowerup1[9], 0, 0, 0, {CHT_GIMMIEJ,0}, Cht_Generic },
|
||||||
{ CheatPowerup1[10], 0, 0, 0, {CHT_GIMMIEZ,0}, Cht_Generic },
|
{ CheatPowerup1[10], 0, 0, 0, {CHT_GIMMIEZ,0}, Cht_Generic },
|
||||||
|
{ CheatAmmo, 0, 0, 0, {CHT_TAKEWEAPS,0}, Cht_Generic },
|
||||||
|
{ CheatGod, 0, 0, 0, {CHT_NOWUDIE,0}, Cht_Generic },
|
||||||
};
|
};
|
||||||
|
|
||||||
static cheatseq_t HexenCheats[] =
|
static cheatseq_t HexenCheats[] =
|
||||||
|
@ -270,7 +270,6 @@ static cheatseq_t StrifeCheats[] =
|
||||||
|
|
||||||
static cheatseq_t ChexCheats[] =
|
static cheatseq_t ChexCheats[] =
|
||||||
{
|
{
|
||||||
{ CheatMus, 0, 1, 0, {0,0}, Cht_Music },
|
|
||||||
{ CheatKimHyers, 0, 1, 0, {0,0}, Cht_MyPos },
|
{ CheatKimHyers, 0, 1, 0, {0,0}, Cht_MyPos },
|
||||||
{ CheatShrrill, 0, 0, 0, {0,0}, Cht_AutoMap },
|
{ CheatShrrill, 0, 0, 0, {0,0}, Cht_AutoMap },
|
||||||
{ CheatDavidBrus, 0, 0, 0, {CHT_IDDQD,0}, Cht_Generic },
|
{ CheatDavidBrus, 0, 0, 0, {CHT_IDDQD,0}, Cht_Generic },
|
||||||
|
@ -284,7 +283,8 @@ static cheatseq_t ChexCheats[] =
|
||||||
{ CheatDigitalCafe, 0, 0, 0, {CHT_BEHOLDA,0}, Cht_Generic },
|
{ CheatDigitalCafe, 0, 0, 0, {CHT_BEHOLDA,0}, Cht_Generic },
|
||||||
{ CheatJoshuaStorms, 0, 0, 0, {CHT_BEHOLDL,0}, Cht_Generic },
|
{ CheatJoshuaStorms, 0, 0, 0, {CHT_BEHOLDL,0}, Cht_Generic },
|
||||||
{ CheatJoelKoenigs, 0, 0, 0, {CHT_CHAINSAW,0}, Cht_Generic },
|
{ CheatJoelKoenigs, 0, 0, 0, {CHT_CHAINSAW,0}, Cht_Generic },
|
||||||
{ CheatLeeSnyder, 0, 1, 0, {0,0}, Cht_ChangeLevel }
|
{ CheatLeeSnyder, 0, 1, 0, {0,0}, Cht_ChangeLevel },
|
||||||
|
{ CheatMus, 0, 1, 0, {0,0}, Cht_Music },
|
||||||
};
|
};
|
||||||
|
|
||||||
static cheatseq_t SpecialCheats[] =
|
static cheatseq_t SpecialCheats[] =
|
||||||
|
@ -342,8 +342,8 @@ bool ST_Responder (event_t *ev)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
static cheatseq_t *cheatlists[] = { DoomCheats, HereticCheats, HexenCheats, StrifeCheats, ChexCheats, SpecialCheats };
|
static cheatseq_t *cheatlists[] = { DoomCheats, HereticCheats, HexenCheats, StrifeCheats, ChexCheats, SpecialCheats };
|
||||||
static int counts[] = { countof(DoomCheats), countof(HereticCheats), countof(HexenCheats),
|
static int counts[] = { countof(DoomCheats), countof(HereticCheats)-2, countof(HexenCheats),
|
||||||
countof(StrifeCheats), countof(ChexCheats), countof(SpecialCheats) };
|
countof(StrifeCheats), countof(ChexCheats)-1, countof(SpecialCheats) };
|
||||||
|
|
||||||
for (size_t i=0; i<countof(cheatlists); i++)
|
for (size_t i=0; i<countof(cheatlists); i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1495,6 +1495,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CustomPunch)
|
||||||
angle_t angle;
|
angle_t angle;
|
||||||
int pitch;
|
int pitch;
|
||||||
AActor * linetarget;
|
AActor * linetarget;
|
||||||
|
int actualdamage;
|
||||||
|
|
||||||
if (!norandom)
|
if (!norandom)
|
||||||
damage *= pr_cwpunch() % 8 + 1;
|
damage *= pr_cwpunch() % 8 + 1;
|
||||||
|
@ -1515,13 +1516,13 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CustomPunch)
|
||||||
pufftype = PClass::FindActor(NAME_BulletPuff);
|
pufftype = PClass::FindActor(NAME_BulletPuff);
|
||||||
int puffFlags = LAF_ISMELEEATTACK | (flags & CPF_NORANDOMPUFFZ)? LAF_NORANDOMPUFFZ : 0;
|
int puffFlags = LAF_ISMELEEATTACK | (flags & CPF_NORANDOMPUFFZ)? LAF_NORANDOMPUFFZ : 0;
|
||||||
|
|
||||||
P_LineAttack (self, angle, range, pitch, damage, NAME_Melee, pufftype, puffFlags, &linetarget);
|
P_LineAttack (self, angle, range, pitch, damage, NAME_Melee, pufftype, puffFlags, &linetarget, &actualdamage);
|
||||||
|
|
||||||
// turn to face target
|
// turn to face target
|
||||||
if (linetarget)
|
if (linetarget)
|
||||||
{
|
{
|
||||||
if (lifesteal)
|
if (lifesteal && !(linetarget->flags5 & MF5_DONTDRAIN))
|
||||||
P_GiveBody (self, (damage * lifesteal) >> FRACBITS);
|
P_GiveBody (self, (actualdamage * lifesteal) >> FRACBITS);
|
||||||
|
|
||||||
if (weapon != NULL)
|
if (weapon != NULL)
|
||||||
{
|
{
|
||||||
|
@ -2681,6 +2682,69 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CheckSightOrRange)
|
||||||
return numret;
|
return numret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// A_CheckRange
|
||||||
|
// Jumps if this actor is out of range of all players.
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
static bool DoCheckRange(AActor *self, AActor *camera, double range)
|
||||||
|
{
|
||||||
|
if (camera == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Check distance first, since it's cheaper than checking sight.
|
||||||
|
double dx = self->x - camera->x;
|
||||||
|
double dy = self->y - camera->y;
|
||||||
|
double dz;
|
||||||
|
fixed_t eyez = (camera->z + camera->height - (camera->height>>2)); // same eye height as P_CheckSight
|
||||||
|
if (eyez > self->z + self->height){
|
||||||
|
dz = self->z + self->height - eyez;
|
||||||
|
}
|
||||||
|
else if (eyez < self->z){
|
||||||
|
dz = self->z - eyez;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
dz = 0;
|
||||||
|
}
|
||||||
|
if ((dx*dx) + (dy*dy) + (dz*dz) <= range){
|
||||||
|
// Within range
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CheckRange)
|
||||||
|
{
|
||||||
|
PARAM_ACTION_PROLOGUE;
|
||||||
|
PARAM_FLOAT(range);
|
||||||
|
PARAM_STATE(jump);
|
||||||
|
|
||||||
|
ACTION_SET_RESULT(false); // Jumps should never set the result for inventory state chains!
|
||||||
|
|
||||||
|
range = range * range * (double(FRACUNIT) * FRACUNIT); // no need for square roots
|
||||||
|
for (int i = 0; i < MAXPLAYERS; ++i)
|
||||||
|
{
|
||||||
|
if (playeringame[i])
|
||||||
|
{
|
||||||
|
// Always check from each player.
|
||||||
|
if (DoCheckRange(self, players[i].mo, range))
|
||||||
|
{
|
||||||
|
return numret;
|
||||||
|
}
|
||||||
|
// If a player is viewing from a non-player, check that too.
|
||||||
|
if (players[i].camera != NULL && players[i].camera->player == NULL &&
|
||||||
|
DoCheckRange(self, players[i].camera, range))
|
||||||
|
{
|
||||||
|
return numret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ACTION_JUMP(jump);
|
||||||
|
return numret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//
|
//
|
||||||
|
|
|
@ -182,6 +182,7 @@ static FFlagDef ActorFlags[]=
|
||||||
DEFINE_FLAG(MF4, NOSKIN, AActor, flags4),
|
DEFINE_FLAG(MF4, NOSKIN, AActor, flags4),
|
||||||
DEFINE_FLAG(MF4, BOSSDEATH, AActor, flags4),
|
DEFINE_FLAG(MF4, BOSSDEATH, AActor, flags4),
|
||||||
|
|
||||||
|
DEFINE_FLAG(MF5, DONTDRAIN, AActor, flags5),
|
||||||
DEFINE_FLAG(MF5, NODROPOFF, AActor, flags5),
|
DEFINE_FLAG(MF5, NODROPOFF, AActor, flags5),
|
||||||
DEFINE_FLAG(MF5, COUNTSECRET, AActor, flags5),
|
DEFINE_FLAG(MF5, COUNTSECRET, AActor, flags5),
|
||||||
DEFINE_FLAG(MF5, NODAMAGE, AActor, flags5),
|
DEFINE_FLAG(MF5, NODAMAGE, AActor, flags5),
|
||||||
|
|
|
@ -34,27 +34,24 @@
|
||||||
#ifndef __VERSION_H__
|
#ifndef __VERSION_H__
|
||||||
#define __VERSION_H__
|
#define __VERSION_H__
|
||||||
|
|
||||||
// The svnrevision.h is automatically updated to grab the revision of
|
const char *GetGitDescription();
|
||||||
// of the current source tree so that it can be included with version numbers.
|
const char *GetGitHash();
|
||||||
#include "svnrevision.h"
|
const char *GetGitTime();
|
||||||
|
const char *GetVersionString();
|
||||||
|
|
||||||
/** Lots of different version numbers **/
|
/** Lots of different version numbers **/
|
||||||
|
|
||||||
#define DOTVERSIONSTR_NOREV "2.6.999"
|
#define VERSIONSTR "2.8pre"
|
||||||
|
|
||||||
// The version string the user actually sees.
|
|
||||||
#define DOTVERSIONSTR DOTVERSIONSTR_NOREV " (r" SVN_REVISION_STRING ")"
|
|
||||||
|
|
||||||
// The version as seen in the Windows resource
|
// The version as seen in the Windows resource
|
||||||
#define RC_FILEVERSION 2,6,999,SVN_REVISION_NUMBER
|
#define RC_FILEVERSION 2,7,9999,0
|
||||||
#define RC_PRODUCTVERSION 2,6,999,0
|
#define RC_PRODUCTVERSION 2,7,9999,0
|
||||||
#define RC_FILEVERSION2 DOTVERSIONSTR
|
#define RC_PRODUCTVERSION2 "2.8pre"
|
||||||
#define RC_PRODUCTVERSION2 "2.6"
|
|
||||||
|
|
||||||
// Version identifier for network games.
|
// Version identifier for network games.
|
||||||
// Bump it every time you do a release unless you're certain you
|
// Bump it every time you do a release unless you're certain you
|
||||||
// didn't change anything that will affect sync.
|
// didn't change anything that will affect sync.
|
||||||
#define NETGAMEVERSION 228
|
#define NETGAMEVERSION 229
|
||||||
|
|
||||||
// Version stored in the ini's [LastRun] section.
|
// Version stored in the ini's [LastRun] section.
|
||||||
// Bump it if you made some configuration change that you want to
|
// Bump it if you made some configuration change that you want to
|
||||||
|
@ -75,36 +72,15 @@
|
||||||
// SAVESIG should match SAVEVER.
|
// SAVESIG should match SAVEVER.
|
||||||
|
|
||||||
// MINSAVEVER is the minimum level snapshot version that can be loaded.
|
// MINSAVEVER is the minimum level snapshot version that can be loaded.
|
||||||
#define MINSAVEVER 3100
|
#define MINSAVEVER 3100
|
||||||
|
|
||||||
#if SVN_REVISION_NUMBER < MINSAVEVER
|
// Use 4500 as the base git save version, since it's higher than the
|
||||||
// If we don't know the current revision write something very high to ensure that
|
// SVN revision ever got.
|
||||||
// the reesulting executable can read its own savegames but no regular engine can.
|
#define SAVEVER 4501
|
||||||
#define SAVEVER 999999
|
|
||||||
#define SAVESIG MakeSaveSig()
|
#define SAVEVERSTRINGIFY2(x) #x
|
||||||
static inline const char *MakeSaveSig()
|
#define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)
|
||||||
{
|
#define SAVESIG "ZDOOMSAVE" SAVEVERSTRINGIFY(SAVEVER)
|
||||||
static char foo[] = { 'Z','D','O','O','M','S','A','V','E',
|
|
||||||
#if SAVEVER > 99999
|
|
||||||
'0' + (SAVEVER / 100000),
|
|
||||||
#endif
|
|
||||||
#if SAVEVER > 9999
|
|
||||||
'0' + ((SAVEVER / 10000) % 10),
|
|
||||||
#endif
|
|
||||||
#if SAVEVER > 999
|
|
||||||
'0' + ((SAVEVER / 1000) % 10),
|
|
||||||
#endif
|
|
||||||
'0' + ((SAVEVER / 100) % 10),
|
|
||||||
'0' + ((SAVEVER / 10) % 10),
|
|
||||||
'0' + (SAVEVER % 10),
|
|
||||||
'\0'
|
|
||||||
};
|
|
||||||
return foo;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#define SAVEVER SVN_REVISION_NUMBER
|
|
||||||
#define SAVESIG "ZDOOMSAVE"SVN_REVISION_STRING
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// This is so that derivates can use the same savegame versions without worrying about engine compatibility
|
// This is so that derivates can use the same savegame versions without worrying about engine compatibility
|
||||||
#define GAMESIG "ZDOOM"
|
#define GAMESIG "ZDOOM"
|
||||||
|
|
|
@ -128,7 +128,7 @@ RtlVirtualUnwind (
|
||||||
// If you are working on your own modified version of ZDoom, change
|
// If you are working on your own modified version of ZDoom, change
|
||||||
// the last part of the UPLOAD_AGENT (between parentheses) to your
|
// the last part of the UPLOAD_AGENT (between parentheses) to your
|
||||||
// own program's name. e.g. (Skulltag) or (ZDaemon) or (ZDoomFu)
|
// own program's name. e.g. (Skulltag) or (ZDaemon) or (ZDoomFu)
|
||||||
#define UPLOAD_AGENT "ZDoom/" DOTVERSIONSTR " (" GAMESIG ")"
|
#define UPLOAD_AGENT "ZDoom/" VERSIONSTR " (" GAMESIG ")"
|
||||||
|
|
||||||
// Time, in milliseconds, to wait for a send() or recv() to complete.
|
// Time, in milliseconds, to wait for a send() or recv() to complete.
|
||||||
#define TIMEOUT 60000
|
#define TIMEOUT 60000
|
||||||
|
|
|
@ -95,8 +95,6 @@
|
||||||
#define X64 ""
|
#define X64 ""
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define WINDOW_TITLE GAMESIG " " DOTVERSIONSTR X64 " (" __DATE__ ")"
|
|
||||||
|
|
||||||
// The maximum number of functions that can be registered with atterm.
|
// The maximum number of functions that can be registered with atterm.
|
||||||
#define MAX_TERMS 64
|
#define MAX_TERMS 64
|
||||||
|
|
||||||
|
@ -714,7 +712,9 @@ void ShowErrorPane(const char *text)
|
||||||
}
|
}
|
||||||
if (text != NULL)
|
if (text != NULL)
|
||||||
{
|
{
|
||||||
SetWindowText (Window, "Fatal Error - " WINDOW_TITLE);
|
char caption[100];
|
||||||
|
mysnprintf(caption, countof(caption), "Fatal Error - "GAMESIG" %s "X64" (%s)", GetVersionString(), GetGitTime());
|
||||||
|
SetWindowText (Window, caption);
|
||||||
ErrorIcon = CreateWindowEx (WS_EX_NOPARENTNOTIFY, "STATIC", NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | SS_OWNERDRAW, 0, 0, 0, 0, Window, NULL, g_hInst, NULL);
|
ErrorIcon = CreateWindowEx (WS_EX_NOPARENTNOTIFY, "STATIC", NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | SS_OWNERDRAW, 0, 0, 0, 0, Window, NULL, g_hInst, NULL);
|
||||||
if (ErrorIcon != NULL)
|
if (ErrorIcon != NULL)
|
||||||
{
|
{
|
||||||
|
@ -945,10 +945,12 @@ void DoMain (HINSTANCE hInstance)
|
||||||
I_FatalError ("Could not register window class");
|
I_FatalError ("Could not register window class");
|
||||||
|
|
||||||
/* create window */
|
/* create window */
|
||||||
|
char caption[100];
|
||||||
|
mysnprintf(caption, countof(caption), ""GAMESIG" %s "X64" (%s)", GetVersionString(), GetGitTime());
|
||||||
Window = CreateWindowEx(
|
Window = CreateWindowEx(
|
||||||
WS_EX_APPWINDOW,
|
WS_EX_APPWINDOW,
|
||||||
(LPCTSTR)WinClassName,
|
(LPCTSTR)WinClassName,
|
||||||
(LPCTSTR)WINDOW_TITLE,
|
(LPCTSTR)caption,
|
||||||
WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN,
|
WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN,
|
||||||
x, y, width, height,
|
x, y, width, height,
|
||||||
(HWND) NULL,
|
(HWND) NULL,
|
||||||
|
@ -1045,7 +1047,7 @@ void DoomSpecificInfo (char *buffer, size_t bufflen)
|
||||||
char *const buffend = buffer + bufflen - 2; // -2 for CRLF at end
|
char *const buffend = buffer + bufflen - 2; // -2 for CRLF at end
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
buffer += mysnprintf (buffer, buffend - buffer, "ZDoom version " DOTVERSIONSTR " (" __DATE__ ")\r\n");
|
buffer += mysnprintf (buffer, buffend - buffer, GAMENAME " version %s (%s)", GetVersionString(), GetGitHash());
|
||||||
buffer += mysnprintf (buffer, buffend - buffer, "\r\nCommand line: %s\r\n", GetCommandLine());
|
buffer += mysnprintf (buffer, buffend - buffer, "\r\nCommand line: %s\r\n", GetCommandLine());
|
||||||
|
|
||||||
for (i = 0; (arg = Wads.GetWadName (i)) != NULL; ++i)
|
for (i = 0; (arg = Wads.GetWadName (i)) != NULL; ++i)
|
||||||
|
|
|
@ -1095,7 +1095,7 @@ BOOL CALLBACK IWADBoxCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
FString newlabel;
|
FString newlabel;
|
||||||
|
|
||||||
GetWindowText(hDlg, label, countof(label));
|
GetWindowText(hDlg, label, countof(label));
|
||||||
newlabel.Format(GAMESIG " " DOTVERSIONSTR_NOREV ": %s", label);
|
newlabel.Format(GAMESIG " %s: %s", GetVersionString(), label);
|
||||||
SetWindowText(hDlg, newlabel.GetChars());
|
SetWindowText(hDlg, newlabel.GetChars());
|
||||||
}
|
}
|
||||||
// Populate the list with all the IWADs found
|
// Populate the list with all the IWADs found
|
||||||
|
|
|
@ -8,7 +8,8 @@
|
||||||
// Generated from the TEXTINCLUDE 2 resource.
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
//
|
//
|
||||||
#include "afxres.h"
|
#include "afxres.h"
|
||||||
#include "../version.h"
|
#include "../version.h"
|
||||||
|
#include "../gitinfo.h"
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
@ -36,7 +37,8 @@ END
|
||||||
2 TEXTINCLUDE
|
2 TEXTINCLUDE
|
||||||
BEGIN
|
BEGIN
|
||||||
"#include ""afxres.h""\r\n"
|
"#include ""afxres.h""\r\n"
|
||||||
"#include ""../version.h""\r\0"
|
"#include ""../version.h""\r\r\n"
|
||||||
|
"#include ""../gitinfo.h""\r\0"
|
||||||
END
|
END
|
||||||
|
|
||||||
3 TEXTINCLUDE
|
3 TEXTINCLUDE
|
||||||
|
@ -49,6 +51,7 @@ BEGIN
|
||||||
"//\r\n"
|
"//\r\n"
|
||||||
"// Version\r\n"
|
"// Version\r\n"
|
||||||
"//\r\n"
|
"//\r\n"
|
||||||
|
"#define RC_FILEVERSION2 GIT_DESCRIPTION\r\n"
|
||||||
"\r\n"
|
"\r\n"
|
||||||
"VS_VERSION_INFO VERSIONINFO\r\n"
|
"VS_VERSION_INFO VERSIONINFO\r\n"
|
||||||
" FILEVERSION RC_FILEVERSION\r\n"
|
" FILEVERSION RC_FILEVERSION\r\n"
|
||||||
|
@ -72,8 +75,8 @@ BEGIN
|
||||||
" VALUE ""FileDescription"", ""ZDoom""\r\n"
|
" VALUE ""FileDescription"", ""ZDoom""\r\n"
|
||||||
" VALUE ""FileVersion"", RC_FILEVERSION2\r\n"
|
" VALUE ""FileVersion"", RC_FILEVERSION2\r\n"
|
||||||
" VALUE ""InternalName"", ""ZDoom""\r\n"
|
" VALUE ""InternalName"", ""ZDoom""\r\n"
|
||||||
" VALUE ""LegalCopyright"", ""Copyright \u00A9 1993-1996 id Software, 1998-2010 Randy Heit, 2002-2010 Christoph Oelckers, et al.""\r\n"
|
" VALUE ""LegalCopyright"", ""Copyright \\u00A9 1993-1996 id Software, 1998-2010 Randy Heit, 2002-2010 Christoph Oelckers, et al.""\r\n"
|
||||||
" VALUE ""LegalTrademarks"", ""Doom® is a Registered Trademark of id Software, Inc.""\r\n"
|
" VALUE ""LegalTrademarks"", ""DoomR is a Registered Trademark of id Software, Inc.""\r\n"
|
||||||
" VALUE ""OriginalFilename"", ""zdoom.exe""\r\n"
|
" VALUE ""OriginalFilename"", ""zdoom.exe""\r\n"
|
||||||
" VALUE ""ProductName"", ""ZDoom""\r\n"
|
" VALUE ""ProductName"", ""ZDoom""\r\n"
|
||||||
" VALUE ""ProductVersion"", RC_PRODUCTVERSION2\r\n"
|
" VALUE ""ProductVersion"", RC_PRODUCTVERSION2\r\n"
|
||||||
|
@ -83,7 +86,7 @@ BEGIN
|
||||||
" BEGIN\r\n"
|
" BEGIN\r\n"
|
||||||
" VALUE ""Translation"", 0x409, 1200\r\n"
|
" VALUE ""Translation"", 0x409, 1200\r\n"
|
||||||
" END\r\n"
|
" END\r\n"
|
||||||
"END\0"
|
"EN\0"
|
||||||
END
|
END
|
||||||
|
|
||||||
#endif // APSTUDIO_INVOKED
|
#endif // APSTUDIO_INVOKED
|
||||||
|
@ -468,6 +471,7 @@ IDB_DEADGUY BITMAP "deadguy.bmp"
|
||||||
//
|
//
|
||||||
// Version
|
// Version
|
||||||
//
|
//
|
||||||
|
#define RC_FILEVERSION2 GIT_DESCRIPTION
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION RC_FILEVERSION
|
FILEVERSION RC_FILEVERSION
|
||||||
|
@ -491,8 +495,8 @@ BEGIN
|
||||||
VALUE "FileDescription", "ZDoom"
|
VALUE "FileDescription", "ZDoom"
|
||||||
VALUE "FileVersion", RC_FILEVERSION2
|
VALUE "FileVersion", RC_FILEVERSION2
|
||||||
VALUE "InternalName", "ZDoom"
|
VALUE "InternalName", "ZDoom"
|
||||||
VALUE "LegalCopyright", "Copyright © 1993-1996 id Software, 1998-2010 Randy Heit"
|
VALUE "LegalCopyright", "Copyright \u00A9 1993-1996 id Software, 1998-2010 Randy Heit, 2002-2010 Christoph Oelckers, et al."
|
||||||
VALUE "LegalTrademarks", "Doom® is a Registered Trademark of id Software, Inc."
|
VALUE "LegalTrademarks", "DoomR is a Registered Trademark of id Software, Inc."
|
||||||
VALUE "OriginalFilename", "zdoom.exe"
|
VALUE "OriginalFilename", "zdoom.exe"
|
||||||
VALUE "ProductName", "ZDoom"
|
VALUE "ProductName", "ZDoom"
|
||||||
VALUE "ProductVersion", RC_PRODUCTVERSION2
|
VALUE "ProductVersion", RC_PRODUCTVERSION2
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
cmake_minimum_required( VERSION 2.4 )
|
cmake_minimum_required( VERSION 2.4 )
|
||||||
|
|
||||||
if( WIN32 )
|
if( WIN32 )
|
||||||
if( CMAKE_COMPILER_IS_GNUC OR CMAKE_COMPILER_IS_GNUCXX )
|
if( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/trustinfo.o
|
add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/trustinfo.o
|
||||||
COMMAND windres -o ${CMAKE_CURRENT_BINARY_DIR}/trustinfo.o -i ${CMAKE_CURRENT_SOURCE_DIR}/trustinfo.rc
|
COMMAND windres -o ${CMAKE_CURRENT_BINARY_DIR}/trustinfo.o -i ${CMAKE_CURRENT_SOURCE_DIR}/trustinfo.rc
|
||||||
DEPENDS trustinfo.rc )
|
DEPENDS trustinfo.rc )
|
||||||
set( TRUSTINFO trustinfo.o )
|
set( TRUSTINFO trustinfo.o )
|
||||||
else( CMAKE_COMPILER_IS_GNUC OR CMAKE_COMPILER_IS_GNUCXX )
|
else( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
if( MSVC_VERSION GREATER 1399 )
|
if( MSVC_VERSION GREATER 1399 )
|
||||||
# VC 8+ adds a manifest automatically to the executable. We need to
|
# VC 8+ adds a manifest automatically to the executable. We need to
|
||||||
# merge ours with it.
|
# merge ours with it.
|
||||||
|
@ -14,7 +14,7 @@ if( WIN32 )
|
||||||
else( MSVC_VERSION GREATER 1399 )
|
else( MSVC_VERSION GREATER 1399 )
|
||||||
set( TRUSTINFO trustinfo.rc )
|
set( TRUSTINFO trustinfo.rc )
|
||||||
endif( MSVC_VERSION GREATER 1399 )
|
endif( MSVC_VERSION GREATER 1399 )
|
||||||
endif( CMAKE_COMPILER_IS_GNUC OR CMAKE_COMPILER_IS_GNUCXX )
|
endif( "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
|
||||||
endif( WIN32 )
|
endif( WIN32 )
|
||||||
|
|
||||||
add_executable( updaterevision updaterevision.c ${TRUSTINFO} )
|
add_executable( updaterevision updaterevision.c ${TRUSTINFO} )
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
/* updaterevision.c
|
/* updaterevision.c
|
||||||
*
|
*
|
||||||
* Public domain. This program uses the svnversion command to get the
|
* Public domain. This program uses git commands command to get
|
||||||
* repository revision for a particular directory and writes it into
|
* various bits of repository status for a particular directory
|
||||||
* a header file so that it can be used as a project's build number.
|
* and writes it into a header file so that it can be used for a
|
||||||
|
* project's versioning.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _CRT_SECURE_NO_DEPRECATE
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
@ -13,69 +14,78 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define popen _popen
|
||||||
|
#define pclose _pclose
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Used to strip newline characters from lines read by fgets.
|
||||||
|
void stripnl(char *str)
|
||||||
|
{
|
||||||
|
if (*str != '\0')
|
||||||
|
{
|
||||||
|
size_t len = strlen(str);
|
||||||
|
if (str[len - 1] == '\n')
|
||||||
|
{
|
||||||
|
str[len - 1] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *name;
|
char vertag[64], lastlog[64], lasthash[64], *hash = NULL;
|
||||||
char currev[64], lastrev[64], run[256], *rev;
|
|
||||||
unsigned long urev;
|
|
||||||
FILE *stream = NULL;
|
FILE *stream = NULL;
|
||||||
int gotrev = 0, needupdate = 1;
|
int gotrev = 0, needupdate = 1;
|
||||||
|
|
||||||
if (argc != 3)
|
vertag[0] = '\0';
|
||||||
|
lastlog[0] = '\0';
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "Usage: %s <repository directory> <path to svnrevision.h>\n", argv[0]);
|
fprintf(stderr, "Usage: %s <path to gitinfo.h>\n", argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use svnversion to get the revision number. If that fails, pretend it's
|
// Use git describe --tags to get a version string. If we are sitting directly
|
||||||
// revision 0. Note that this requires you have the command-line svn tools installed.
|
// on a tag, it returns that tag. Otherwise it returns <most recent tag>-<number of
|
||||||
sprintf (run, "svnversion -cn %s", argv[1]);
|
// commits since the tag>-<short hash>.
|
||||||
if ((name = tempnam(NULL, "svnout")) != NULL)
|
// Use git log to get the time of the latest commit in ISO 8601 format and its full hash.
|
||||||
|
stream = popen("git describe --tags && git log -1 --format=%ai*%H", "r");
|
||||||
|
|
||||||
|
if (NULL != stream)
|
||||||
{
|
{
|
||||||
#ifdef __APPLE__
|
if (fgets(vertag, sizeof vertag, stream) == vertag &&
|
||||||
// tempnam will return errno of 2 even though it is successful for our purposes.
|
fgets(lastlog, sizeof lastlog, stream) == lastlog)
|
||||||
errno = 0;
|
|
||||||
#endif
|
|
||||||
if((stream = freopen(name, "w+b", stdout)) != NULL &&
|
|
||||||
system(run) == 0 &&
|
|
||||||
errno == 0 &&
|
|
||||||
fseek(stream, 0, SEEK_SET) == 0 &&
|
|
||||||
fgets(currev, sizeof currev, stream) == currev &&
|
|
||||||
(isdigit(currev[0]) || (currev[0] == '-' && currev[1] == '1')))
|
|
||||||
{
|
{
|
||||||
|
stripnl(vertag);
|
||||||
|
stripnl(lastlog);
|
||||||
gotrev = 1;
|
gotrev = 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (stream != NULL)
|
pclose(stream);
|
||||||
{
|
|
||||||
fclose (stream);
|
|
||||||
remove (name);
|
|
||||||
}
|
|
||||||
if (name != NULL)
|
|
||||||
{
|
|
||||||
free (name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gotrev)
|
if (gotrev)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "Failed to get current revision: %s\n", strerror(errno));
|
hash = strchr(lastlog, '*');
|
||||||
strcpy (currev, "0");
|
if (hash != NULL)
|
||||||
rev = currev;
|
{
|
||||||
|
*hash = '\0';
|
||||||
|
hash++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
if (hash == NULL)
|
||||||
{
|
{
|
||||||
rev = strchr (currev, ':');
|
fprintf(stderr, "Failed to get commit info: %s\n", strerror(errno));
|
||||||
if (rev == NULL)
|
strcpy(vertag, "<unknown version>");
|
||||||
{
|
lastlog[0] = '\0';
|
||||||
rev = currev;
|
lastlog[1] = '0';
|
||||||
}
|
lastlog[2] = '\0';
|
||||||
else
|
hash = lastlog + 1;
|
||||||
{
|
|
||||||
rev += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stream = fopen (argv[2], "r");
|
stream = fopen (argv[1], "r");
|
||||||
if (stream != NULL)
|
if (stream != NULL)
|
||||||
{
|
{
|
||||||
if (!gotrev)
|
if (!gotrev)
|
||||||
|
@ -86,13 +96,10 @@ int main(int argc, char **argv)
|
||||||
// Read the revision that's in this file already. If it's the same as
|
// Read the revision that's in this file already. If it's the same as
|
||||||
// what we've got, then we don't need to modify it and can avoid rebuilding
|
// what we've got, then we don't need to modify it and can avoid rebuilding
|
||||||
// dependant files.
|
// dependant files.
|
||||||
if (fgets(lastrev, sizeof lastrev, stream) == lastrev)
|
if (fgets(lasthash, sizeof lasthash, stream) == lasthash)
|
||||||
{
|
{
|
||||||
if (lastrev[0] != '\0')
|
stripnl(lasthash);
|
||||||
{ // Strip trailing \n
|
if (strcmp(hash, lasthash + 3) == 0)
|
||||||
lastrev[strlen(lastrev) - 1] = '\0';
|
|
||||||
}
|
|
||||||
if (strcmp(rev, lastrev + 3) == 0)
|
|
||||||
{
|
{
|
||||||
needupdate = 0;
|
needupdate = 0;
|
||||||
}
|
}
|
||||||
|
@ -102,27 +109,27 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
if (needupdate)
|
if (needupdate)
|
||||||
{
|
{
|
||||||
stream = fopen (argv[2], "w");
|
stream = fopen (argv[1], "w");
|
||||||
if (stream == NULL)
|
if (stream == NULL)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
urev = strtoul(rev, NULL, 10);
|
fprintf(stream,
|
||||||
fprintf (stream,
|
|
||||||
"// %s\n"
|
"// %s\n"
|
||||||
"//\n"
|
"//\n"
|
||||||
"// This file was automatically generated by the\n"
|
"// This file was automatically generated by the\n"
|
||||||
"// updaterevision tool. Do not edit by hand.\n"
|
"// updaterevision tool. Do not edit by hand.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"#define SVN_REVISION_STRING \"%s\"\n"
|
"#define GIT_DESCRIPTION \"%s\"\n"
|
||||||
"#define SVN_REVISION_NUMBER %lu\n",
|
"#define GIT_HASH \"%s\"\n"
|
||||||
rev, rev, urev);
|
"#define GIT_TIME \"%s\"\n",
|
||||||
fclose (stream);
|
hash, vertag, hash, lastlog);
|
||||||
fprintf (stderr, "%s updated to revision %s.\n", argv[2], rev);
|
fclose(stream);
|
||||||
|
fprintf(stderr, "%s updated to commit %s.\n", argv[1], vertag);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf (stderr, "%s is up to date at revision %s.\n", argv[2], rev);
|
fprintf (stderr, "%s is up to date at commit %s.\n", argv[1], vertag);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -302,6 +302,7 @@ ACTOR Actor native //: Thinker
|
||||||
action native A_SetDamageType(name damagetype);
|
action native A_SetDamageType(name damagetype);
|
||||||
|
|
||||||
action native A_CheckSightOrRange(float distance, state label);
|
action native A_CheckSightOrRange(float distance, state label);
|
||||||
|
action native A_CheckRange(float distance, state label);
|
||||||
|
|
||||||
action native A_RearrangePointers(int newtarget, int newmaster = AAPTR_DEFAULT, int newtracer = AAPTR_DEFAULT, int flags=0);
|
action native A_RearrangePointers(int newtarget, int newmaster = AAPTR_DEFAULT, int newtracer = AAPTR_DEFAULT, int flags=0);
|
||||||
action native A_TransferPointer(int ptr_source, int ptr_recepient, int sourcefield, int recepientfield=AAPTR_DEFAULT, int flags=0);
|
action native A_TransferPointer(int ptr_source, int ptr_recepient, int sourcefield, int recepientfield=AAPTR_DEFAULT, int flags=0);
|
||||||
|
|
|
@ -233,6 +233,7 @@ ACTOR GoldWandPuff2 : GoldWandFX1
|
||||||
Skip_Super
|
Skip_Super
|
||||||
+NOBLOCKMAP
|
+NOBLOCKMAP
|
||||||
+NOGRAVITY
|
+NOGRAVITY
|
||||||
|
+PUFFONACTORS
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
|
|
|
@ -1,5 +1,31 @@
|
||||||
6DC9F6CCEAE7A91AEC48EBE506F22BC4 // void.wad MAP01
|
6DC9F6CCEAE7A91AEC48EBE506F22BC4 // void.wad MAP01
|
||||||
{
|
{
|
||||||
|
// Slightly squash the pillars in the starting room with "stimpacks"
|
||||||
|
// floating on them so that they can be obtained.
|
||||||
|
sectorflooroffset 62 -8
|
||||||
|
setwallyscale 286 front bot 1.090909
|
||||||
|
setwallyscale 287 front bot 1.090909
|
||||||
|
setwallyscale 288 front bot 1.090909
|
||||||
|
setwallyscale 289 front bot 1.090909
|
||||||
|
|
||||||
|
sectorflooroffset 63 -8
|
||||||
|
setwallyscale 290 front bot 1.090909
|
||||||
|
setwallyscale 291 front bot 1.090909
|
||||||
|
setwallyscale 292 front bot 1.090909
|
||||||
|
setwallyscale 293 front bot 1.090909
|
||||||
|
|
||||||
|
sectorflooroffset 118 -8
|
||||||
|
setwallyscale 710 front bot 1.090909
|
||||||
|
setwallyscale 711 front bot 1.090909
|
||||||
|
setwallyscale 712 front bot 1.090909
|
||||||
|
setwallyscale 713 front bot 1.090909
|
||||||
|
|
||||||
|
sectorflooroffset 119 -8
|
||||||
|
setwallyscale 714 front bot 1.090909
|
||||||
|
setwallyscale 715 front bot 1.090909
|
||||||
|
setwallyscale 716 front bot 1.090909
|
||||||
|
setwallyscale 717 front bot 1.090909
|
||||||
|
|
||||||
setslopeoverflow
|
setslopeoverflow
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -306,37 +332,24 @@ F481922F4881F74760F3C0437FD5EDD0 // map03
|
||||||
setactivation 455 16 // SPAC_Push
|
setactivation 455 16 // SPAC_Push
|
||||||
}
|
}
|
||||||
|
|
||||||
6DC9F6CCEAE7A91AEC48EBE506F22BC4 // Void
|
|
||||||
{
|
|
||||||
// Slightly squash the pillars in the starting room with "stimpacks"
|
|
||||||
// floating on them so that they can be obtained.
|
|
||||||
sectorflooroffset 62 -8
|
|
||||||
setwallyscale 286 front bot 1.090909
|
|
||||||
setwallyscale 287 front bot 1.090909
|
|
||||||
setwallyscale 288 front bot 1.090909
|
|
||||||
setwallyscale 289 front bot 1.090909
|
|
||||||
|
|
||||||
sectorflooroffset 63 -8
|
|
||||||
setwallyscale 290 front bot 1.090909
|
|
||||||
setwallyscale 291 front bot 1.090909
|
|
||||||
setwallyscale 292 front bot 1.090909
|
|
||||||
setwallyscale 293 front bot 1.090909
|
|
||||||
|
|
||||||
sectorflooroffset 118 -8
|
|
||||||
setwallyscale 710 front bot 1.090909
|
|
||||||
setwallyscale 711 front bot 1.090909
|
|
||||||
setwallyscale 712 front bot 1.090909
|
|
||||||
setwallyscale 713 front bot 1.090909
|
|
||||||
|
|
||||||
sectorflooroffset 119 -8
|
|
||||||
setwallyscale 714 front bot 1.090909
|
|
||||||
setwallyscale 715 front bot 1.090909
|
|
||||||
setwallyscale 716 front bot 1.090909
|
|
||||||
setwallyscale 717 front bot 1.090909
|
|
||||||
}
|
|
||||||
|
|
||||||
65A1EB4C87386F290816660A52932FF1 // Master Levels, garrison.wad
|
65A1EB4C87386F290816660A52932FF1 // Master Levels, garrison.wad
|
||||||
{
|
{
|
||||||
rebuildnodes
|
rebuildnodes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1891E029994B023910CFE0B3209C3CDB // Ultimate Simplicity, map07
|
||||||
|
{
|
||||||
|
// It is possible to get stuck on skill 0 or 1 when no shots have been fired
|
||||||
|
// after sector 17 became accessible and before entering famous mancubus room.
|
||||||
|
// Monsters from the mentioned sector won't be alerted and so
|
||||||
|
// they won't teleport into the battle. ACS will wait forever for their deaths.
|
||||||
|
setlinespecial 397 NoiseAlert 0 0 0 0 0
|
||||||
|
setlinespecial 411 NoiseAlert 0 0 0 0 0
|
||||||
|
}
|
||||||
|
|
||||||
|
952CC8D03572E17BA550B01B366EFBB9 // Cheogsh map01
|
||||||
|
{
|
||||||
|
// make the blue key spawn above the 3D floor
|
||||||
|
setthingz 918 296
|
||||||
|
}
|
||||||
|
|
22
zdoom.vcproj
22
zdoom.vcproj
|
@ -28,8 +28,8 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreBuildEventTool"
|
Name="VCPreBuildEventTool"
|
||||||
Description="Checking svnrevision.h..."
|
Description="Checking gitinfo.h..."
|
||||||
CommandLine=""$(OutDir)\updaterevision.exe" src src/svnrevision.h"
|
CommandLine=""$(OutDir)\updaterevision.exe" src/gitinfo.h"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
|
@ -151,7 +151,8 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreBuildEventTool"
|
Name="VCPreBuildEventTool"
|
||||||
CommandLine="$(OutDir)\updaterevision.exe src src/svnrevision.h"
|
Description="Checking gitinfo.h..."
|
||||||
|
CommandLine=""$(OutDir)\updaterevision.exe" src/gitinfo.h"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
|
@ -263,8 +264,8 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreBuildEventTool"
|
Name="VCPreBuildEventTool"
|
||||||
Description="Checking svnrevision.h..."
|
Description="Checking gitinfo.h..."
|
||||||
CommandLine="$(OutDir)\updaterevision.exe src src/svnrevision.h"
|
CommandLine=""$(OutDir)\updaterevision.exe" src/gitinfo.h"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
|
@ -370,7 +371,8 @@
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCPreBuildEventTool"
|
Name="VCPreBuildEventTool"
|
||||||
CommandLine="$(OutDir)\updaterevision.exe src src/svnrevision.h"
|
Description="Checking gitinfo.h..."
|
||||||
|
CommandLine=""$(OutDir)\updaterevision.exe" src/gitinfo.h"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCustomBuildTool"
|
Name="VCCustomBuildTool"
|
||||||
|
@ -652,6 +654,10 @@
|
||||||
RelativePath=".\src\gi.cpp"
|
RelativePath=".\src\gi.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\src\gitinfo.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\hu_scores.cpp"
|
RelativePath=".\src\hu_scores.cpp"
|
||||||
>
|
>
|
||||||
|
@ -1161,10 +1167,6 @@
|
||||||
RelativePath=".\src\d_dehacked.h"
|
RelativePath=".\src\d_dehacked.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\src\d_dehackedactions.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\d_event.h"
|
RelativePath=".\src\d_event.h"
|
||||||
>
|
>
|
||||||
|
|
Loading…
Reference in a new issue