Merge branch 'master' into zscript

This commit is contained in:
Christoph Oelckers 2016-11-23 14:39:14 +01:00
commit d1f5d916c2
19 changed files with 64 additions and 96 deletions

View file

@ -728,15 +728,7 @@ if( WIN32 )
set( SYSTEM_SOURCES ${PLAT_WIN32_SOURCES} ) set( SYSTEM_SOURCES ${PLAT_WIN32_SOURCES} )
set( OTHER_SYSTEM_SOURCES ${PLAT_POSIX_SOURCES} ${PLAT_SDL_SOURCES} ${PLAT_OSX_SOURCES} ${PLAT_COCOA_SOURCES} ${PLAT_UNIX_SOURCES} ) set( OTHER_SYSTEM_SOURCES ${PLAT_POSIX_SOURCES} ${PLAT_SDL_SOURCES} ${PLAT_OSX_SOURCES} ${PLAT_COCOA_SOURCES} ${PLAT_UNIX_SOURCES} )
if( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE ) set( SYSTEM_SOURCES ${SYSTEM_SOURCES} win32/zdoom.rc )
# CMake is not set up to compile and link rc files with GCC. :(
add_custom_command( OUTPUT zdoom-rc.o
COMMAND windres -o zdoom-rc.o -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zdoom.rc
DEPENDS win32/zdoom.rc )
set( SYSTEM_SOURCES ${SYSTEM_SOURCES} zdoom-rc.o )
else()
set( SYSTEM_SOURCES ${SYSTEM_SOURCES} win32/zdoom.rc )
endif()
elseif( APPLE ) elseif( APPLE )
if( OSX_COCOA_BACKEND ) if( OSX_COCOA_BACKEND )
set( SYSTEM_SOURCES_DIR posix posix/cocoa ) set( SYSTEM_SOURCES_DIR posix posix/cocoa )

View file

@ -1508,10 +1508,18 @@ level_info_t *FMapInfoParser::ParseMapHeader(level_info_t &defaultinfo)
if (sc.CheckNumber()) if (sc.CheckNumber())
{ // MAPNAME is a number; assume a Hexen wad { // MAPNAME is a number; assume a Hexen wad
char maptemp[8]; if (format_type == FMT_New)
mysnprintf (maptemp, countof(maptemp), "MAP%02d", sc.Number); {
mapname = maptemp; mapname = sc.String;
HexenHack = true; }
else
{
char maptemp[8];
mysnprintf(maptemp, countof(maptemp), "MAP%02d", sc.Number);
mapname = maptemp;
HexenHack = true;
format_type = FMT_Old;
}
} }
else else
{ {

View file

@ -97,5 +97,5 @@ bool FModule::Open(const char* lib)
void *FModule::GetSym(const char* name) void *FModule::GetSym(const char* name)
{ {
return GetProcAddress((HMODULE)handle, name); return (void *)GetProcAddress((HMODULE)handle, name);
} }

View file

@ -2500,12 +2500,8 @@ DEFINE_ACTION_FUNCTION(AActor, A_SetInventory)
} }
else if (amount <= 0) else if (amount <= 0)
{ {
// Remove it all. //Remove it all.
if (item) res = (mobj->TakeInventory(itemtype, item->Amount, true, false));
{
item->DepleteOrDestroy();
res = true;
}
ACTION_RETURN_BOOL(res); ACTION_RETURN_BOOL(res);
} }
else if (amount < item->Amount) else if (amount < item->Amount)

View file

@ -252,7 +252,7 @@ static bool LoadScriptFile(int lumpnum, FileReader *lump, int numnodes, bool inc
if ((type == 1 && !isbinary) || (type == 2 && isbinary)) if ((type == 1 && !isbinary) || (type == 2 && isbinary))
{ {
DPrintf(DMSG_ERROR, "Incorrect data format for %s.", Wads.GetLumpFullName(lumpnum)); DPrintf(DMSG_ERROR, "Incorrect data format for conversation script in %s.\n", Wads.GetLumpFullName(lumpnum));
return false; return false;
} }
@ -272,7 +272,7 @@ static bool LoadScriptFile(int lumpnum, FileReader *lump, int numnodes, bool inc
// is exactly 1516 bytes long. // is exactly 1516 bytes long.
if (numnodes % 1516 != 0) if (numnodes % 1516 != 0)
{ {
DPrintf(DMSG_ERROR, "Incorrect data format for %s.", Wads.GetLumpFullName(lumpnum)); DPrintf(DMSG_ERROR, "Incorrect data format for conversation script in %s.\n", Wads.GetLumpFullName(lumpnum));
return false; return false;
} }
numnodes /= 1516; numnodes /= 1516;
@ -282,7 +282,7 @@ static bool LoadScriptFile(int lumpnum, FileReader *lump, int numnodes, bool inc
// And the teaser version has 1488-byte entries. // And the teaser version has 1488-byte entries.
if (numnodes % 1488 != 0) if (numnodes % 1488 != 0)
{ {
DPrintf(DMSG_ERROR, "Incorrect data format for %s.", Wads.GetLumpFullName(lumpnum)); DPrintf(DMSG_ERROR, "Incorrect data format for conversation script in %s.\n", Wads.GetLumpFullName(lumpnum));
return false; return false;
} }
numnodes /= 1488; numnodes /= 1488;

View file

@ -850,9 +850,11 @@ bool PIT_CheckLine(FMultiBlockLinesIterator &mit, FMultiBlockLinesIterator::Chec
// If the floor planes on both sides match we should recalculate open.bottom at the actual position we are checking // If the floor planes on both sides match we should recalculate open.bottom at the actual position we are checking
// This is to avoid bumpy movement when crossing a linedef with the same slope on both sides. // This is to avoid bumpy movement when crossing a linedef with the same slope on both sides.
// This should never narrow down the opening, though, only widen it.
if (open.frontfloorplane == open.backfloorplane && open.bottom > LINEOPEN_MIN) if (open.frontfloorplane == open.backfloorplane && open.bottom > LINEOPEN_MIN)
{ {
open.bottom = open.frontfloorplane.ZatPoint(cres.Position); auto newopen = open.frontfloorplane.ZatPoint(cres.Position);
if (newopen < open.bottom) open.bottom = newopen;
} }
if (rail && if (rail &&

View file

@ -3586,11 +3586,14 @@ void AActor::Tick ()
} }
} }
UnlinkFromWorld (); if (!Vel.isZero() || !(flags & MF_NOBLOCKMAP))
flags |= MF_NOBLOCKMAP; {
SetXYZ(Vec3Offset(Vel)); UnlinkFromWorld();
CheckPortalTransition(false); flags |= MF_NOBLOCKMAP;
LinkToWorld (); SetXYZ(Vec3Offset(Vel));
CheckPortalTransition(false);
LinkToWorld();
}
} }
else else
{ {
@ -5327,7 +5330,11 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position)
if (mthing->FloatbobPhase >= 0 && mthing->FloatbobPhase < 64) mobj->FloatBobPhase = mthing->FloatbobPhase; if (mthing->FloatbobPhase >= 0 && mthing->FloatbobPhase < 64) mobj->FloatBobPhase = mthing->FloatbobPhase;
if (mthing->Gravity < 0) mobj->Gravity = -mthing->Gravity; if (mthing->Gravity < 0) mobj->Gravity = -mthing->Gravity;
else if (mthing->Gravity > 0) mobj->Gravity *= mthing->Gravity; else if (mthing->Gravity > 0) mobj->Gravity *= mthing->Gravity;
else mobj->flags &= ~MF_NOGRAVITY; else
{
mobj->flags |= MF_NOGRAVITY;
mobj->Gravity = 0;
}
// For Hexen floatbob 'compatibility' we do not really want to alter the floorz. // For Hexen floatbob 'compatibility' we do not really want to alter the floorz.
if (mobj->specialf1 == 0 || !(mobj->flags2 & MF2_FLOATBOB) || !(ib_compatflags & BCOMPATF_FLOATBOB)) if (mobj->specialf1 == 0 || !(mobj->flags2 & MF2_FLOATBOB) || !(ib_compatflags & BCOMPATF_FLOATBOB))

View file

@ -526,7 +526,7 @@ void ProcessMouseMoveInGame(NSEvent* theEvent)
lastX = x; lastX = x;
lastY = y; lastY = y;
if (0 != event.x | 0 != event.y) if (0 != event.x || 0 != event.y)
{ {
event.type = EV_Mouse; event.type = EV_Mouse;

View file

@ -1018,7 +1018,7 @@ IOKitJoystickManager::~IOKitJoystickManager()
if (0 != notification) if (0 != notification)
{ {
IOObjectRelease(notification); IOObjectRelease(notification);
notification = NULL; notification = 0;
} }
} }
} }

View file

@ -156,7 +156,7 @@ static void I_DetectOS()
case 12: name = "macOS Sierra"; break; case 12: name = "macOS Sierra"; break;
} }
char release[16] = {}; char release[16] = "unknown";
size_t size = sizeof release - 1; size_t size = sizeof release - 1;
sysctlbyname("kern.osversion", release, &size, nullptr, 0); sysctlbyname("kern.osversion", release, &size, nullptr, 0);

View file

@ -585,7 +585,7 @@ bool WriteZip(const char *filename, TArray<FString> &filenames, TArray<FCompress
dirend.DiskNumber = 0; dirend.DiskNumber = 0;
dirend.FirstDisk = 0; dirend.FirstDisk = 0;
dirend.NumEntriesOnAllDisks = dirend.NumEntries = LittleShort(filenames.Size()); dirend.NumEntriesOnAllDisks = dirend.NumEntries = LittleShort(filenames.Size());
dirend.DirectoryOffset = dirofs; dirend.DirectoryOffset = LittleLong(dirofs);
dirend.DirectorySize = LittleLong(ftell(f) - dirofs); dirend.DirectorySize = LittleLong(ftell(f) - dirofs);
dirend.ZipCommentLength = 0; dirend.ZipCommentLength = 0;
if (fwrite(&dirend, sizeof(dirend), 1, f) != 1) if (fwrite(&dirend, sizeof(dirend), 1, f) != 1)

View file

@ -1334,6 +1334,7 @@ void FMultiPatchTexture::ResolvePatches()
{ {
if (Inits[i].HasLine) Inits[i].sc.Message(MSG_WARNING, "Texture '%s' references itself as patch\n", Inits[i].TexName.GetChars()); if (Inits[i].HasLine) Inits[i].sc.Message(MSG_WARNING, "Texture '%s' references itself as patch\n", Inits[i].TexName.GetChars());
else Printf(TEXTCOLOR_YELLOW "Texture '%s' references itself as patch\n", Inits[i].TexName.GetChars()); else Printf(TEXTCOLOR_YELLOW "Texture '%s' references itself as patch\n", Inits[i].TexName.GetChars());
continue;
} }
else else
{ {

View file

@ -72,7 +72,7 @@ FRenderer *Renderer;
IMPLEMENT_CLASS(DCanvas, true, false, false, false) IMPLEMENT_CLASS(DCanvas, true, false, false, false)
IMPLEMENT_CLASS(DFrameBuffer, true, false, false, false) IMPLEMENT_CLASS(DFrameBuffer, true, false, false, false)
#if defined(_DEBUG) && defined(_M_IX86) #if defined(_DEBUG) && defined(_M_IX86) && !defined(__MINGW32__)
#define DBGBREAK { __asm int 3 } #define DBGBREAK { __asm int 3 }
#else #else
#define DBGBREAK #define DBGBREAK

View file

@ -75,54 +75,6 @@
#include <time.h> #include <time.h>
#include <zlib.h> #include <zlib.h>
#if defined(_WIN64) && defined(__GNUC__)
struct KNONVOLATILE_CONTEXT_POINTERS {
union {
PDWORD64 IntegerContext[16];
struct {
PDWORD64 Rax;
PDWORD64 Rcx;
PDWORD64 Rdx;
PDWORD64 Rbx;
PDWORD64 Rsp;
PDWORD64 Rbp;
PDWORD64 Rsi;
PDWORD64 Rdi;
PDWORD64 R8;
PDWORD64 R9;
PDWORD64 R10;
PDWORD64 R11;
PDWORD64 R12;
PDWORD64 R13;
PDWORD64 R14;
PDWORD64 R15;
};
};
};
typedef
EXCEPTION_DISPOSITION
NTAPI
EXCEPTION_ROUTINE (
struct _EXCEPTION_RECORD *ExceptionRecord,
PVOID EstablisherFrame,
struct _CONTEXT *ContextRecord,
PVOID DispatcherContext
);
NTSYSAPI
EXCEPTION_ROUTINE *
NTAPI
RtlVirtualUnwind (
DWORD HandlerType,
DWORD64 ImageBase,
DWORD64 ControlPc,
PRUNTIME_FUNCTION FunctionEntry,
PCONTEXT ContextRecord,
PVOID *HandlerData,
PDWORD64 EstablisherFrame,
KNONVOLATILE_CONTEXT_POINTERS *ContextPointers
);
#endif
// MACROS ------------------------------------------------------------------ // MACROS ------------------------------------------------------------------
#define REMOTE_HOST "localhost" #define REMOTE_HOST "localhost"

View file

@ -21,6 +21,11 @@
#define DINPUT_BUFFERSIZE 32 #define DINPUT_BUFFERSIZE 32
// MinGW-w64 (TDM5.1 - 2016/11/21)
#ifndef DIK_PREVTRACK
#define DIK_PREVTRACK DIK_CIRCUMFLEX
#endif
// TYPES ------------------------------------------------------------------- // TYPES -------------------------------------------------------------------
class FDInputKeyboard : public FKeyboard class FDInputKeyboard : public FKeyboard

View file

@ -389,7 +389,7 @@ bool FRawPS2Controller::ProcessInput(RAWHID *raw, int code)
{ {
// w32api has an incompatible definition of bRawData. // w32api has an incompatible definition of bRawData.
// (But the version that comes with MinGW64 is fine.) // (But the version that comes with MinGW64 is fine.)
#if defined(__GNUC__) && !defined(_WIN64) #if defined(__GNUC__) && !defined(__MINGW64_VERSION_MAJOR)
BYTE *rawdata = &raw->bRawData; BYTE *rawdata = &raw->bRawData;
#else #else
BYTE *rawdata = raw->bRawData; BYTE *rawdata = raw->bRawData;

View file

@ -33,6 +33,7 @@
** **
*/ */
#define _WIN32_WINNT 0x0601
#include <windows.h> #include <windows.h>
#include <lmcons.h> #include <lmcons.h>
#include <shlobj.h> #include <shlobj.h>

View file

@ -33,6 +33,17 @@
#define XUSER_MAX_COUNT 4 #define XUSER_MAX_COUNT 4
#endif #endif
// MinGW
#ifndef XINPUT_DLL
#define XINPUT_DLL_A "xinput1_3.dll"
#define XINPUT_DLL_W L"xinput1_3.dll"
#ifdef UNICODE
#define XINPUT_DLL XINPUT_DLL_W
#else
#define XINPUT_DLL XINPUT_DLL_A
#endif
#endif
// TYPES ------------------------------------------------------------------- // TYPES -------------------------------------------------------------------
typedef DWORD (WINAPI *XInputGetStateType)(DWORD index, XINPUT_STATE *state); typedef DWORD (WINAPI *XInputGetStateType)(DWORD index, XINPUT_STATE *state);

View file

@ -1,19 +1,12 @@
cmake_minimum_required( VERSION 2.8.7 ) cmake_minimum_required( VERSION 2.8.7 )
if( WIN32 ) if( WIN32 )
if( ZD_CMAKE_COMPILER_IS_GNUC_COMPATIBLE OR ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE ) if( MSVC_VERSION GREATER 1399 )
add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/trustinfo.o # VC 8+ adds a manifest automatically to the executable. We need to
COMMAND windres -o ${CMAKE_CURRENT_BINARY_DIR}/trustinfo.o -i ${CMAKE_CURRENT_SOURCE_DIR}/trustinfo.rc # merge ours with it.
DEPENDS trustinfo.rc ) set( MT_MERGE ON )
set( TRUSTINFO trustinfo.o )
else() else()
if( MSVC_VERSION GREATER 1399 ) set( TRUSTINFO trustinfo.rc )
# VC 8+ adds a manifest automatically to the executable. We need to
# merge ours with it.
set( MT_MERGE ON )
else( MSVC_VERSION GREATER 1399 )
set( TRUSTINFO trustinfo.rc )
endif( MSVC_VERSION GREATER 1399 )
endif() endif()
else( WIN32 ) else( WIN32 )
set( TRUSTINFO "" ) set( TRUSTINFO "" )