From e93de62f98ff8c18ac6b422d8f40b409941b4b8e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 21 Jun 2019 19:42:19 +0200 Subject: [PATCH 01/15] - eliminated dependency of CVar code on AActor. As a low level feature, the CVAR management should not access game structures like actors, just to retrieve a player index. The index should be calculated by the calling code instead and passed into the function. # Conflicts: # src/win32/i_specialpaths.cpp --- src/c_cvars.cpp | 10 +++------- src/c_cvars.h | 3 +-- src/g_statusbar/sbarinfo_commands.cpp | 4 ++-- src/p_acs.cpp | 5 +++-- src/p_actionfunctions.cpp | 4 ++-- src/win32/i_specialpaths.cpp | 4 ---- 6 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/c_cvars.cpp b/src/c_cvars.cpp index a62f2fa95..20d854498 100644 --- a/src/c_cvars.cpp +++ b/src/c_cvars.cpp @@ -1599,7 +1599,7 @@ DEFINE_ACTION_FUNCTION(_CVar, GetCVar) PARAM_PROLOGUE; PARAM_NAME(name); PARAM_POINTER(plyr, player_t); - ACTION_RETURN_POINTER(GetCVar(plyr ? plyr->mo : nullptr, name)); + ACTION_RETURN_POINTER(GetCVar(plyr ? int(plyr - players) : -1, name)); } FBaseCVar *FindCVarSub (const char *var_name, int namelen) @@ -1624,7 +1624,7 @@ FBaseCVar *FindCVarSub (const char *var_name, int namelen) return var; } -FBaseCVar *GetCVar(AActor *activator, const char *cvarname) +FBaseCVar *GetCVar(int playernum, const char *cvarname) { FBaseCVar *cvar = FindCVar(cvarname, nullptr); // Either the cvar doesn't exist, or it's for a mod that isn't loaded, so return nullptr. @@ -1637,11 +1637,7 @@ FBaseCVar *GetCVar(AActor *activator, const char *cvarname) // For userinfo cvars, redirect to GetUserCVar if (cvar->GetFlags() & CVAR_USERINFO) { - if (activator == nullptr || activator->player == nullptr) - { - return nullptr; - } - return GetUserCVar(int(activator->player - players), cvarname); + return GetUserCVar(playernum, cvarname); } return cvar; } diff --git a/src/c_cvars.h b/src/c_cvars.h index 11166098b..a74a4c0e4 100644 --- a/src/c_cvars.h +++ b/src/c_cvars.h @@ -90,7 +90,6 @@ enum ECVarType }; class FConfigFile; -class AActor; class FxCVar; @@ -194,7 +193,7 @@ FBaseCVar *FindCVar (const char *var_name, FBaseCVar **prev); FBaseCVar *FindCVarSub (const char *var_name, int namelen); // Used for ACS and DECORATE. -FBaseCVar *GetCVar(AActor *activator, const char *cvarname); +FBaseCVar *GetCVar(int playernum, const char *cvarname); FBaseCVar *GetUserCVar(int playernum, const char *cvarname); // Create a new cvar with the specified name and type diff --git a/src/g_statusbar/sbarinfo_commands.cpp b/src/g_statusbar/sbarinfo_commands.cpp index d96ca66ec..f415cf2df 100644 --- a/src/g_statusbar/sbarinfo_commands.cpp +++ b/src/g_statusbar/sbarinfo_commands.cpp @@ -1484,7 +1484,7 @@ class CommandDrawNumber : public CommandDrawString break; case INTCVAR: { - FBaseCVar *CVar = GetCVar(statusBar->CPlayer->mo, cvarName); + FBaseCVar *CVar = GetCVar(int(statusBar->CPlayer - players), cvarName); if (CVar != nullptr) { ECVarType cvartype = CVar->GetRealType(); @@ -3534,7 +3534,7 @@ class CommandIfCVarInt : public SBarInfoNegatableFlowControl SBarInfoNegatableFlowControl::Tick(block, statusBar, hudChanged); bool result = false; - cvar = GetCVar(statusBar->CPlayer->mo, cvarname); + cvar = GetCVar(int(statusBar->CPlayer - players), cvarname); if (cvar != nullptr) { diff --git a/src/p_acs.cpp b/src/p_acs.cpp index ab64fcb89..d9061f762 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -5788,7 +5788,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_GetCVarString: if (argCount == 1) { - return DoGetCVar(GetCVar(activator, Level->Behaviors.LookupString(args[0])), true); + return DoGetCVar(GetCVar(activator && activator->player ? int(activator->player - players) : -1, Level->Behaviors.LookupString(args[0])), true); } break; @@ -9733,7 +9733,8 @@ scriptwait: break; case PCD_GETCVAR: - STACK(1) = DoGetCVar(GetCVar(activator, Level->Behaviors.LookupString(STACK(1))), false); + // This should not use Level->PlayerNum! + STACK(1) = DoGetCVar(GetCVar(activator && activator->player? int(activator->player - players) : -1, Level->Behaviors.LookupString(STACK(1))), false); break; case PCD_SETHUDSIZE: diff --git a/src/p_actionfunctions.cpp b/src/p_actionfunctions.cpp index afd704909..114fd3f7e 100644 --- a/src/p_actionfunctions.cpp +++ b/src/p_actionfunctions.cpp @@ -383,7 +383,7 @@ DEFINE_ACTION_FUNCTION(AActor, GetCVar) PARAM_SELF_PROLOGUE(AActor); PARAM_STRING(cvarname); - FBaseCVar *cvar = GetCVar(self, cvarname); + FBaseCVar *cvar = GetCVar(self->player ? int(self->player - players) : -1, cvarname); if (cvar == nullptr) { ret->SetFloat(0); @@ -413,7 +413,7 @@ DEFINE_ACTION_FUNCTION(AActor, GetCVarString) PARAM_SELF_PROLOGUE(AActor); PARAM_STRING(cvarname); - FBaseCVar *cvar = GetCVar(self, cvarname); + FBaseCVar *cvar = GetCVar(self->player? int(self->player - players) : -1, cvarname); if (cvar == nullptr) { ret->SetString(""); diff --git a/src/win32/i_specialpaths.cpp b/src/win32/i_specialpaths.cpp index d7a9e7c2e..00631645c 100644 --- a/src/win32/i_specialpaths.cpp +++ b/src/win32/i_specialpaths.cpp @@ -101,10 +101,6 @@ bool UseKnownFolders() bool GetKnownFolder(int shell_folder, REFKNOWNFOLDERID known_folder, bool create, FString &path) { - using OptWin32::SHGetKnownFolderPath; - - WCHAR pathstr[MAX_PATH]; - // SHGetKnownFolderPath knows about more folders than SHGetFolderPath, but is // new to Vista, hence the reason we support both. if (!SHGetKnownFolderPath) From 1081338af253d128e85303bc6066eeb01b962d99 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 26 Jun 2019 22:13:12 +0200 Subject: [PATCH 02/15] - removed a few obsolete definitions from basictypes.h --- src/basictypes.h | 16 ---------------- src/s_sound.cpp | 10 +++++----- src/sound/i_soundinternal.h | 2 +- src/sound/oalsound.cpp | 14 +++++++------- src/win32/i_specialpaths.cpp | 34 ++++++---------------------------- 5 files changed, 19 insertions(+), 57 deletions(-) diff --git a/src/basictypes.h b/src/basictypes.h index fed81fa1c..5a57aa9c9 100644 --- a/src/basictypes.h +++ b/src/basictypes.h @@ -17,19 +17,6 @@ typedef struct _GUID } GUID; #endif -union QWORD_UNION -{ - uint64_t AsOne; - struct - { -#ifdef __BIG_ENDIAN__ - unsigned int Hi, Lo; -#else - unsigned int Lo, Hi; -#endif - }; -}; - // // fixed point, 32bit as 16.16. // @@ -41,9 +28,6 @@ typedef int32_t fixed_t; #define FIXED_MAX (signed)(0x7fffffff) #define FIXED_MIN (signed)(0x80000000) -#define DWORD_MIN ((uint32_t)0) -#define DWORD_MAX ((uint32_t)0xffffffff) - // the last remnants of tables.h #define ANGLE_90 (0x40000000) #define ANGLE_180 (0x80000000) diff --git a/src/s_sound.cpp b/src/s_sound.cpp index 762b1db07..f114e1035 100644 --- a/src/s_sound.cpp +++ b/src/s_sound.cpp @@ -2084,7 +2084,7 @@ void S_EvictAllChannels() { if (!(chan->ChanFlags & CHAN_ABSTIME)) { - chan->StartTime.AsOne = GSnd ? GSnd->GetPosition(chan) : 0; + chan->StartTime = GSnd ? GSnd->GetPosition(chan) : 0; chan->ChanFlags |= CHAN_ABSTIME; } S_StopChannel(chan); @@ -2414,7 +2414,7 @@ static FSerializer &Serialize(FSerializer &arc, const char *key, FSoundChan &cha ("entchannel", chan.EntChannel) ("priority", chan.Priority) ("nearlimit", chan.NearLimit) - ("starttime", chan.StartTime.AsOne) + ("starttime", chan.StartTime) ("rolloftype", chan.Rolloff.RolloffType) ("rolloffmin", chan.Rolloff.MinDistance) ("rolloffmax", chan.Rolloff.MaxDistance) @@ -2468,10 +2468,10 @@ void S_SerializeSounds(FSerializer &arc) for (unsigned int i = chans.Size(); i-- != 0; ) { // Replace start time with sample position. - uint64_t start = chans[i]->StartTime.AsOne; - chans[i]->StartTime.AsOne = GSnd ? GSnd->GetPosition(chans[i]) : 0; + uint64_t start = chans[i]->StartTime; + chans[i]->StartTime = GSnd ? GSnd->GetPosition(chans[i]) : 0; arc(nullptr, *chans[i]); - chans[i]->StartTime.AsOne = start; + chans[i]->StartTime = start; } arc.EndArray(); } diff --git a/src/sound/i_soundinternal.h b/src/sound/i_soundinternal.h index a0661baf0..6c926b431 100644 --- a/src/sound/i_soundinternal.h +++ b/src/sound/i_soundinternal.h @@ -101,7 +101,7 @@ struct SoundHandle struct FISoundChannel { void *SysChannel; // Channel information from the system interface. - QWORD_UNION StartTime; // Sound start time in DSP clocks. + uint64_t StartTime; // Sound start time in DSP clocks. // The sound interface doesn't use these directly but it needs to pass them to a // callback that can't be passed a sound channel pointer diff --git a/src/sound/oalsound.cpp b/src/sound/oalsound.cpp index 2d23faceb..7369020e0 100644 --- a/src/sound/oalsound.cpp +++ b/src/sound/oalsound.cpp @@ -1602,17 +1602,17 @@ FISoundChannel *OpenALSoundRenderer::StartSound(SoundHandle sfx, float vol, int else alSourcef(source, AL_PITCH, PITCH(pitch)); - if(!reuse_chan || reuse_chan->StartTime.AsOne == 0) + if(!reuse_chan || reuse_chan->StartTime == 0) alSourcef(source, AL_SEC_OFFSET, 0.f); else { if((chanflags&SNDF_ABSTIME)) - alSourcei(source, AL_SAMPLE_OFFSET, reuse_chan->StartTime.Lo); + alSourcei(source, AL_SAMPLE_OFFSET, ALint(reuse_chan->StartTime)); else { float offset = std::chrono::duration_cast>( std::chrono::steady_clock::now().time_since_epoch() - - std::chrono::steady_clock::time_point::duration(reuse_chan->StartTime.AsOne) + std::chrono::steady_clock::time_point::duration(reuse_chan->StartTime) ).count(); if(offset > 0.f) alSourcef(source, AL_SEC_OFFSET, offset); } @@ -1813,17 +1813,17 @@ FISoundChannel *OpenALSoundRenderer::StartSound3D(SoundHandle sfx, SoundListener else alSourcef(source, AL_PITCH, PITCH(pitch)); - if(!reuse_chan || reuse_chan->StartTime.AsOne == 0) + if(!reuse_chan || reuse_chan->StartTime == 0) alSourcef(source, AL_SEC_OFFSET, 0.f); else { if((chanflags&SNDF_ABSTIME)) - alSourcei(source, AL_SAMPLE_OFFSET, reuse_chan->StartTime.Lo); + alSourcei(source, AL_SAMPLE_OFFSET, ALint(reuse_chan->StartTime)); else { float offset = std::chrono::duration_cast>( std::chrono::steady_clock::now().time_since_epoch() - - std::chrono::steady_clock::time_point::duration(reuse_chan->StartTime.AsOne) + std::chrono::steady_clock::time_point::duration(reuse_chan->StartTime) ).count(); if(offset > 0.f) alSourcef(source, AL_SEC_OFFSET, offset); } @@ -2220,7 +2220,7 @@ void OpenALSoundRenderer::MarkStartTime(FISoundChannel *chan) { // FIXME: Get current time (preferably from the audio clock, but the system // time will have to do) - chan->StartTime.AsOne = std::chrono::steady_clock::now().time_since_epoch().count(); + chan->StartTime = std::chrono::steady_clock::now().time_since_epoch().count(); } float OpenALSoundRenderer::GetAudibility(FISoundChannel *chan) diff --git a/src/win32/i_specialpaths.cpp b/src/win32/i_specialpaths.cpp index 00631645c..dcc1ab6d9 100644 --- a/src/win32/i_specialpaths.cpp +++ b/src/win32/i_specialpaths.cpp @@ -101,36 +101,14 @@ bool UseKnownFolders() bool GetKnownFolder(int shell_folder, REFKNOWNFOLDERID known_folder, bool create, FString &path) { - // SHGetKnownFolderPath knows about more folders than SHGetFolderPath, but is - // new to Vista, hence the reason we support both. - if (!SHGetKnownFolderPath) + PWSTR wpath; + if (FAILED(SHGetKnownFolderPath(known_folder, create ? KF_FLAG_CREATE : 0, NULL, &wpath))) { - if (shell_folder < 0) - { // Not supported by SHGetFolderPath - return false; - } - if (create) - { - shell_folder |= CSIDL_FLAG_CREATE; - } - if (FAILED(SHGetFolderPathW(NULL, shell_folder, NULL, 0, pathstr))) - { - return false; - } - path = pathstr; - return true; - } - else - { - PWSTR wpath; - if (FAILED(SHGetKnownFolderPath(known_folder, create ? KF_FLAG_CREATE : 0, NULL, &wpath))) - { - return false; - } - path = wpath; - CoTaskMemFree(wpath); - return true; + return false; } + path = wpath; + CoTaskMemFree(wpath); + return true; } //=========================================================================== From 80c20b6a3b73cdd4d71c7251954e749a5ee0519a Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Fri, 28 Jun 2019 12:20:52 +0300 Subject: [PATCH 03/15] - added detection of macOS Catalina --- src/posix/cocoa/i_main.mm | 1 + 1 file changed, 1 insertion(+) diff --git a/src/posix/cocoa/i_main.mm b/src/posix/cocoa/i_main.mm index c5e865ee0..5b4ea31b7 100644 --- a/src/posix/cocoa/i_main.mm +++ b/src/posix/cocoa/i_main.mm @@ -111,6 +111,7 @@ static void I_DetectOS() case 12: name = "macOS Sierra"; break; case 13: name = "macOS High Sierra"; break; case 14: name = "macOS Mojave"; break; + case 15: name = "macOS Catalina"; break; } char release[16] = "unknown"; From 5c29d8805854c379ca371de38802b32e21a3f201 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Fri, 28 Jun 2019 12:24:36 +0300 Subject: [PATCH 04/15] - updated bzip2 to version 1.0.7 https://www.sourceware.org/bzip2/ https://www.sourceware.org/pub/bzip2/bzip2-1.0.7.tar.gz --- bzip2/CHANGES | 17 +++++++++++++++-- bzip2/LICENSE | 4 ++-- bzip2/README | 36 ++++++++---------------------------- bzip2/blocksort.c | 10 +++++----- bzip2/bzlib.c | 12 ++++++------ bzip2/bzlib.h | 36 ++++++++++++++++++++++++++---------- bzip2/bzlib_private.h | 6 +++--- bzip2/compress.c | 6 +++--- bzip2/crctable.c | 4 ++-- bzip2/decompress.c | 8 ++++---- bzip2/huffman.c | 4 ++-- bzip2/randtable.c | 4 ++-- 12 files changed, 78 insertions(+), 69 deletions(-) diff --git a/bzip2/CHANGES b/bzip2/CHANGES index 81e97ca6f..d9b4c05c5 100644 --- a/bzip2/CHANGES +++ b/bzip2/CHANGES @@ -2,8 +2,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -325,3 +325,16 @@ Security fix only. Fixes CERT-FI 20469 as it applies to bzip2. Izdebski. * Make the documentation build on Ubuntu 10.04 + +1.0.7 (27 Jun 19) +~~~~~~~~~~~~~~~~~ + +* Fix undefined behavior in the macros SET_BH, CLEAR_BH, & ISSET_BH + +* bzip2: Fix return value when combining --test,-t and -q. + +* bzip2recover: Fix buffer overflow for large argv[0] + +* bzip2recover: Fix use after free issue with outFile (CVE-2016-3189) + +* Make sure nSelectors is not out of range (CVE-2019-12900) diff --git a/bzip2/LICENSE b/bzip2/LICENSE index cc614178c..95f9598f8 100644 --- a/bzip2/LICENSE +++ b/bzip2/LICENSE @@ -36,7 +36,7 @@ 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. -Julian Seward, jseward@bzip.org -bzip2/libbzip2 version 1.0.6 of 6 September 2010 +Julian Seward, jseward@acm.org +bzip2/libbzip2 version 1.0.7 of 27 June 2019 -------------------------------------------------------------------------- diff --git a/bzip2/README b/bzip2/README index 9fb0f6360..64873f982 100644 --- a/bzip2/README +++ b/bzip2/README @@ -6,8 +6,8 @@ This version is fully compatible with the previous public releases. This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. -bzip2/libbzip2 version 1.0.6 of 6 September 2010 -Copyright (C) 1996-2010 Julian Seward +bzip2/libbzip2 version 1.0.7 of 27 June 2019 +Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in this file. @@ -73,7 +73,7 @@ HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc. It's difficult for me to support compilation on all these platforms. My approach is to collect binaries for these platforms, and put them -on the master web site (http://www.bzip.org). Look there. However +on the master web site (https://sourceware.org/bzip2/). Look there. However (FWIW), bzip2-1.0.X is very standard ANSI C and should compile unmodified with MS Visual C. If you have difficulties building, you might want to read README.COMPILATION.PROBLEMS. @@ -161,43 +161,22 @@ WHAT'S NEW IN 0.9.5 ? * Many small improvements in file and flag handling. * A Y2K statement. -WHAT'S NEW IN 1.0.0 ? +WHAT'S NEW IN 1.0.x ? See the CHANGES file. -WHAT'S NEW IN 1.0.2 ? - - See the CHANGES file. - -WHAT'S NEW IN 1.0.3 ? - - See the CHANGES file. - -WHAT'S NEW IN 1.0.4 ? - - See the CHANGES file. - -WHAT'S NEW IN 1.0.5 ? - - See the CHANGES file. - -WHAT'S NEW IN 1.0.6 ? - - See the CHANGES file. - - I hope you find bzip2 useful. Feel free to contact me at - jseward@bzip.org + jseward@acm.org if you have any suggestions or queries. Many people mailed me with comments, suggestions and patches after the releases of bzip-0.15, bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this feedback. I thank you for your comments. -bzip2's "home" is http://www.bzip.org/ +bzip2's "home" is https://sourceware.org/bzip2/ Julian Seward -jseward@bzip.org +jseward@acm.org Cambridge, UK. 18 July 1996 (version 0.15) @@ -213,3 +192,4 @@ Cambridge, UK. 20 December 2006 (bzip2, version 1.0.4) 10 December 2007 (bzip2, version 1.0.5) 6 Sept 2010 (bzip2, version 1.0.6) +27 June 2019 (bzip2, version 1.0.7) diff --git a/bzip2/blocksort.c b/bzip2/blocksort.c index d0d662cd4..26579017a 100644 --- a/bzip2/blocksort.c +++ b/bzip2/blocksort.c @@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -202,9 +202,9 @@ void fallbackQSort3 ( UInt32* fmap, bhtab [ 0 .. 2+(nblock/32) ] destroyed */ -#define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31)) -#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31)) -#define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31))) +#define SET_BH(zz) bhtab[(zz) >> 5] |= ((UInt32)1 << ((zz) & 31)) +#define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~((UInt32)1 << ((zz) & 31)) +#define ISSET_BH(zz) (bhtab[(zz) >> 5] & ((UInt32)1 << ((zz) & 31))) #define WORD_BH(zz) bhtab[(zz) >> 5] #define UNALIGNED_BH(zz) ((zz) & 0x01f) diff --git a/bzip2/bzlib.c b/bzip2/bzlib.c index 9db864ef2..f9da295c7 100644 --- a/bzip2/bzlib.c +++ b/bzip2/bzlib.c @@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -43,7 +43,7 @@ void BZ2_bz__AssertH__fail ( int errcode ) fprintf(stderr, "\n\nbzip2/libbzip2: internal error number %d.\n" "This is a bug in bzip2/libbzip2, %s.\n" - "Please report it to me at: jseward@bzip.org. If this happened\n" + "Please report it to me at: jseward@acm.org. If this happened\n" "when you were using some program which uses libbzip2 as a\n" "component, you should also report this bug to the author(s)\n" "of that program. Please make an effort to report this bug;\n" @@ -1234,7 +1234,7 @@ void BZ_API(BZ2_bzReadGetUnused) BZ_SETERR(BZ_OK); *nUnused = bzf->strm.avail_in; - *unused = (void **)bzf->strm.next_in; + *unused = bzf->strm.next_in; } #endif @@ -1247,7 +1247,7 @@ void BZ_API(BZ2_bzReadGetUnused) int BZ_API(BZ2_bzBuffToBuffCompress) ( char* dest, unsigned int* destLen, - const char* source, + char* source, unsigned int sourceLen, int blockSize100k, int verbosity, @@ -1299,7 +1299,7 @@ int BZ_API(BZ2_bzBuffToBuffCompress) int BZ_API(BZ2_bzBuffToBuffDecompress) ( char* dest, unsigned int* destLen, - const char* source, + char* source, unsigned int sourceLen, int small, int verbosity ) diff --git a/bzip2/bzlib.h b/bzip2/bzlib.h index 8a6e58f0a..8cf07918f 100644 --- a/bzip2/bzlib.h +++ b/bzip2/bzlib.h @@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -47,7 +47,7 @@ extern "C" { typedef struct { - const char *next_in; + char *next_in; unsigned int avail_in; unsigned int total_in_lo32; unsigned int total_in_hi32; @@ -75,8 +75,24 @@ typedef #include #endif -#define BZ_API(func) func -#define BZ_EXTERN extern +#ifdef _WIN32 +# include +# ifdef small + /* windows.h define small to char */ +# undef small +# endif +# ifdef BZ_EXPORT +# define BZ_API(func) WINAPI func +# define BZ_EXTERN extern +# else + /* import windows dll dynamically */ +# define BZ_API(func) (WINAPI * func) +# define BZ_EXTERN +# endif +#else +# define BZ_API(func) func +# define BZ_EXTERN extern +#endif /*-- Core (low-level) library functions --*/ @@ -100,7 +116,7 @@ BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( bz_stream *strm, int verbosity, - int lowmem + int small ); BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( @@ -124,7 +140,7 @@ BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( int* bzerror, FILE* f, int verbosity, - int lowmem, + int small, void* unused, int nUnused ); @@ -188,7 +204,7 @@ BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( char* dest, unsigned int* destLen, - const char* source, + char* source, unsigned int sourceLen, int blockSize100k, int verbosity, @@ -198,9 +214,9 @@ BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( char* dest, unsigned int* destLen, - const char* source, + char* source, unsigned int sourceLen, - int lowmem, + int small, int verbosity ); diff --git a/bzip2/bzlib_private.h b/bzip2/bzlib_private.h index 5d0217f46..797555222 100644 --- a/bzip2/bzlib_private.h +++ b/bzip2/bzlib_private.h @@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -36,7 +36,7 @@ /*-- General stuff. --*/ -#define BZ_VERSION "1.0.6, 6-Sept-2010" +#define BZ_VERSION "1.0.7, 27-Jun-2019" typedef char Char; typedef unsigned char Bool; diff --git a/bzip2/compress.c b/bzip2/compress.c index 9e944ab67..237620d85 100644 --- a/bzip2/compress.c +++ b/bzip2/compress.c @@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -202,7 +202,7 @@ void generateMTFValues ( EState* s ) *ryy_j = rtmp2; }; yy[0] = rtmp; - j = (Int32)(ryy_j - &(yy[0])); + j = ryy_j - &(yy[0]); mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++; } diff --git a/bzip2/crctable.c b/bzip2/crctable.c index 1fea7e946..746efac1c 100644 --- a/bzip2/crctable.c +++ b/bzip2/crctable.c @@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. diff --git a/bzip2/decompress.c b/bzip2/decompress.c index 311f5668f..20ce4936c 100644 --- a/bzip2/decompress.c +++ b/bzip2/decompress.c @@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. @@ -285,9 +285,9 @@ Int32 BZ2_decompress ( DState* s ) /*--- Now the selectors ---*/ GET_BITS(BZ_X_SELECTOR_1, nGroups, 3); - if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR); + if (nGroups < 2 || nGroups > BZ_N_GROUPS) RETURN(BZ_DATA_ERROR); GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15); - if (nSelectors < 1) RETURN(BZ_DATA_ERROR); + if (nSelectors < 1 || nSelectors > BZ_MAX_SELECTORS) RETURN(BZ_DATA_ERROR); for (i = 0; i < nSelectors; i++) { j = 0; while (True) { diff --git a/bzip2/huffman.c b/bzip2/huffman.c index 2283fdbc5..0fd6fd762 100644 --- a/bzip2/huffman.c +++ b/bzip2/huffman.c @@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. diff --git a/bzip2/randtable.c b/bzip2/randtable.c index 6d6245990..726d62f0c 100644 --- a/bzip2/randtable.c +++ b/bzip2/randtable.c @@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.6 of 6 September 2010 - Copyright (C) 1996-2010 Julian Seward + bzip2/libbzip2 version 1.0.7 of 27 June 2019 + Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. From 1b7aeb35e18053d1f92e1f471e0d505447ea1dfc Mon Sep 17 00:00:00 2001 From: cybermind Date: Sat, 29 Jun 2019 21:39:02 +0500 Subject: [PATCH 05/15] Fixed copy-paste typo in SphericalCoords --- src/scripting/vmthunks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripting/vmthunks.cpp b/src/scripting/vmthunks.cpp index 6046ff585..6f6e37d13 100644 --- a/src/scripting/vmthunks.cpp +++ b/src/scripting/vmthunks.cpp @@ -2952,7 +2952,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, SphericalCoords, SphericalCoords) PARAM_FLOAT(viewPitch); PARAM_BOOL(absolute); DVector3 result; - SphericalCoords(self, viewpointX, viewpointY, viewpointZ, targetX, targetY, targetZ, viewYaw, viewpointZ, absolute, &result); + SphericalCoords(self, viewpointX, viewpointY, viewpointZ, targetX, targetY, targetZ, viewYaw, viewPitch, absolute, &result); ACTION_RETURN_VEC3(result); } From 6e29d8150291a276713bf394e68c0563f0313857 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sun, 30 Jun 2019 21:13:15 +0200 Subject: [PATCH 06/15] - remove dead code --- src/win32/i_dijoy.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/win32/i_dijoy.cpp b/src/win32/i_dijoy.cpp index 1736aa725..471152fe8 100644 --- a/src/win32/i_dijoy.cpp +++ b/src/win32/i_dijoy.cpp @@ -221,7 +221,6 @@ protected: void OrderAxes(); bool ReorderAxisPair(const GUID &x, const GUID &y, int pos); HRESULT SetDataFormat(); - bool SetConfigSection(bool create); friend class FDInputJoystickManager; }; @@ -266,8 +265,6 @@ protected: // PRIVATE FUNCTION PROTOTYPES --------------------------------------------- -static void MapAxis(FIntCVar &var, int num); - // EXTERNAL DATA DECLARATIONS ---------------------------------------------- extern LPDIRECTINPUT8 g_pdi; From 259909b6dd4e537703e7d9d4334b809519d5f03a Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sun, 30 Jun 2019 21:13:56 +0200 Subject: [PATCH 07/15] - fix querying for the wrong interface when the UNICODE define is set --- src/win32/i_input.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/win32/i_input.cpp b/src/win32/i_input.cpp index a6b2e3939..cbfa2864b 100644 --- a/src/win32/i_input.cpp +++ b/src/win32/i_input.cpp @@ -650,7 +650,7 @@ bool I_InitInput (void *hwnd) blah di8c = (blah)GetProcAddress(DInputDLL, "DirectInput8Create"); if (di8c != NULL) { - hr = di8c(g_hInst, DIRECTINPUT_VERSION, IID_IDirectInput8A, (void **)&g_pdi, NULL); + hr = di8c(g_hInst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void **)&g_pdi, NULL); if (FAILED(hr)) { Printf(TEXTCOLOR_ORANGE "DirectInput8Create failed: %08lx\n", hr); @@ -676,7 +676,11 @@ bool I_InitInput (void *hwnd) } typedef HRESULT (WINAPI *blah)(HINSTANCE, DWORD, LPDIRECTINPUT*, LPUNKNOWN); - blah dic = (blah)GetProcAddress (DInputDLL, "DirectInputCreateA"); +#ifdef UNICODE + blah dic = (blah)GetProcAddress (DInputDLL, "DirectInputCreateW"); +#else + blah dic = (blah)GetProcAddress(DInputDLL, "DirectInputCreateA"); +#endif if (dic == NULL) { From bc88ceea94886fb82669c542c2836cc93fb42939 Mon Sep 17 00:00:00 2001 From: Rachael Alexanderson Date: Sun, 30 Jun 2019 22:14:23 -0400 Subject: [PATCH 08/15] - clarify too old ZScript version message --- src/scripting/zscript/zcc_parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripting/zscript/zcc_parser.cpp b/src/scripting/zscript/zcc_parser.cpp index df1c993d5..6a4d5a7be 100644 --- a/src/scripting/zscript/zcc_parser.cpp +++ b/src/scripting/zscript/zcc_parser.cpp @@ -401,7 +401,7 @@ static void DoParse(int lumpnum) } if (state.ParseVersion > MakeVersion(VER_MAJOR, VER_MINOR, VER_REVISION)) { - sc.ScriptError("Version mismatch. %d.%d.%d expected but only %d.%d.%d supported", state.ParseVersion.major, state.ParseVersion.minor, state.ParseVersion.revision, VER_MAJOR, VER_MINOR, VER_REVISION); + sc.ScriptError("The file you are attempting to run requires a newer version of " GAMENAME ".\n\nA version with ZScript version %d.%d.%d is required, but your copy of " GAMENAME " only supports %d.%d.%d. Please upgrade!", state.ParseVersion.major, state.ParseVersion.minor, state.ParseVersion.revision, VER_MAJOR, VER_MINOR, VER_REVISION); } } else From 73f46089cceb4c2f125c8b8badfbaef971a0e1a0 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Wed, 3 Jul 2019 13:11:48 +0300 Subject: [PATCH 09/15] - added validation of LevelCompatibility.Apply() signature --- src/maploader/compatibility.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/maploader/compatibility.cpp b/src/maploader/compatibility.cpp index 63586a1a7..bf9d389c7 100644 --- a/src/maploader/compatibility.cpp +++ b/src/maploader/compatibility.cpp @@ -54,6 +54,7 @@ #include "actor.h" #include "p_setup.h" #include "maploader/maploader.h" +#include "types.h" // MACROS ------------------------------------------------------------------ @@ -365,11 +366,21 @@ void MapLoader::SetCompatibilityParams(FName checksum) if (cls->IsDescendantOf(RUNTIME_CLASS(DLevelCompatibility))) { PFunction *const func = dyn_cast(cls->FindSymbol("Apply", false)); - if (func != nullptr) + if (func == nullptr) { - VMValue param[] = { lc, checksum.GetIndex(), &Level->MapName }; - VMCall(func->Variants[0].Implementation, param, 3, nullptr, 0); + Printf("Missing 'Apply' method in class '%s', level compatibility object ignored\n", cls->TypeName.GetChars()); + continue; } + + auto argTypes = func->Variants[0].Proto->ArgumentTypes; + if (argTypes.Size() != 3 || argTypes[1] != TypeName || argTypes[2] != TypeString) + { + Printf("Wrong signature of 'Apply' method in class '%s', level compatibility object ignored\n", cls->TypeName.GetChars()); + continue; + } + + VMValue param[] = { lc, checksum.GetIndex(), &Level->MapName }; + VMCall(func->Variants[0].Implementation, param, 3, nullptr, 0); } } } From e7e46f8c7c83ebf01a72da44c9403251eb2d9263 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Wed, 3 Jul 2019 10:49:06 -0400 Subject: [PATCH 10/15] vk: Check for the time query support on the graphics queue (#884) --- src/rendering/vulkan/system/vk_device.cpp | 2 ++ src/rendering/vulkan/system/vk_device.h | 2 ++ src/rendering/vulkan/system/vk_framebuffer.cpp | 15 +++++++++------ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/rendering/vulkan/system/vk_device.cpp b/src/rendering/vulkan/system/vk_device.cpp index e0b70fa82..a1c775489 100644 --- a/src/rendering/vulkan/system/vk_device.cpp +++ b/src/rendering/vulkan/system/vk_device.cpp @@ -158,6 +158,7 @@ void VulkanDevice::SelectPhysicalDevice() if (queueFamily.queueCount > 0 && (queueFamily.queueFlags & VK_QUEUE_GRAPHICS_BIT)) { dev.graphicsFamily = i; + dev.graphicsTimeQueries = queueFamily.timestampValidBits != 0; break; } } @@ -205,6 +206,7 @@ void VulkanDevice::SelectPhysicalDevice() PhysicalDevice = *SupportedDevices[selected].device; graphicsFamily = SupportedDevices[selected].graphicsFamily; presentFamily = SupportedDevices[selected].presentFamily; + graphicsTimeQueries = SupportedDevices[selected].graphicsTimeQueries; } bool VulkanDevice::SupportsDeviceExtension(const char *ext) const diff --git a/src/rendering/vulkan/system/vk_device.h b/src/rendering/vulkan/system/vk_device.h index 7609e7fdb..43185bd50 100644 --- a/src/rendering/vulkan/system/vk_device.h +++ b/src/rendering/vulkan/system/vk_device.h @@ -30,6 +30,7 @@ public: VulkanPhysicalDevice *device = nullptr; int graphicsFamily = -1; int presentFamily = -1; + bool graphicsTimeQueries = false; }; class VulkanDevice @@ -76,6 +77,7 @@ public: int graphicsFamily = -1; int presentFamily = -1; + bool graphicsTimeQueries = false; private: void CreateInstance(); diff --git a/src/rendering/vulkan/system/vk_framebuffer.cpp b/src/rendering/vulkan/system/vk_framebuffer.cpp index df283c60e..17610145c 100644 --- a/src/rendering/vulkan/system/vk_framebuffer.cpp +++ b/src/rendering/vulkan/system/vk_framebuffer.cpp @@ -172,11 +172,14 @@ void VulkanFrameBuffer::InitializeState() mRenderState.reset(new VkRenderState()); #endif - QueryPoolBuilder querybuilder; - querybuilder.setQueryType(VK_QUERY_TYPE_TIMESTAMP, MaxTimestampQueries); - mTimestampQueryPool = querybuilder.create(device); + if (device->graphicsTimeQueries) + { + QueryPoolBuilder querybuilder; + querybuilder.setQueryType(VK_QUERY_TYPE_TIMESTAMP, MaxTimestampQueries); + mTimestampQueryPool = querybuilder.create(device); - GetDrawCommands()->resetQueryPool(mTimestampQueryPool.get(), 0, MaxTimestampQueries); + GetDrawCommands()->resetQueryPool(mTimestampQueryPool.get(), 0, MaxTimestampQueries); + } } void VulkanFrameBuffer::Update() @@ -831,7 +834,7 @@ void VulkanFrameBuffer::PushGroup(const FString &name) if (!gpuStatActive) return; - if (mNextTimestampQuery < VulkanFrameBuffer::MaxTimestampQueries) + if (mNextTimestampQuery < VulkanFrameBuffer::MaxTimestampQueries && device->graphicsTimeQueries) { TimestampQuery q; q.name = name; @@ -851,7 +854,7 @@ void VulkanFrameBuffer::PopGroup() TimestampQuery &q = timeElapsedQueries[mGroupStack.back()]; mGroupStack.pop_back(); - if (mNextTimestampQuery < VulkanFrameBuffer::MaxTimestampQueries) + if (mNextTimestampQuery < VulkanFrameBuffer::MaxTimestampQueries && device->graphicsTimeQueries) { q.endIndex = mNextTimestampQuery++; GetDrawCommands()->writeTimestamp(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, mTimestampQueryPool.get(), q.endIndex); From 7b698b4a0e0be2ba8c7bb1a4a70bd4f1c2f80633 Mon Sep 17 00:00:00 2001 From: Major Cooke Date: Sat, 22 Jun 2019 20:02:35 -0500 Subject: [PATCH 11/15] Added RenderUnderlay. - Works exactly like RenderOverlay, but is drawn behind the status bar/huds instead. --- src/events.cpp | 21 +++++++++++++++++++++ src/events.h | 3 +++ src/g_statusbar/shared_sbar.cpp | 1 + wadsrc/static/zscript/events.zs | 1 + 4 files changed, 26 insertions(+) diff --git a/src/events.cpp b/src/events.cpp index 935249d86..bb91ca8b0 100755 --- a/src/events.cpp +++ b/src/events.cpp @@ -491,6 +491,14 @@ void EventManager::RenderOverlay(EHudState state) handler->RenderOverlay(state); } +void EventManager::RenderUnderlay(EHudState state) +{ + if (ShouldCallStatic(false)) staticEventManager.RenderUnderlay(state); + + for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) + handler->RenderUnderlay(state); +} + bool EventManager::CheckUiProcessors() { if (ShouldCallStatic(false)) @@ -960,6 +968,19 @@ void DStaticEventHandler::RenderOverlay(EHudState state) } } +void DStaticEventHandler::RenderUnderlay(EHudState state) +{ + IFVIRTUAL(DStaticEventHandler, RenderUnderlay) + { + // don't create excessive DObjects if not going to be processed anyway + if (isEmpty(func)) return; + FRenderEvent e = owner->SetupRenderEvent(); + e.HudState = int(state); + VMValue params[2] = { (DStaticEventHandler*)this, &e }; + VMCall(func, params, 2, nullptr, 0); + } +} + void DStaticEventHandler::PlayerEntered(int num, bool fromhub) { IFVIRTUAL(DStaticEventHandler, PlayerEntered) diff --git a/src/events.h b/src/events.h index a2c5e67aa..52bf9ac21 100755 --- a/src/events.h +++ b/src/events.h @@ -91,6 +91,7 @@ public: // void RenderFrame(); void RenderOverlay(EHudState state); + void RenderUnderlay(EHudState state); // void PlayerEntered(int num, bool fromhub); @@ -289,6 +290,8 @@ struct EventManager void RenderFrame(); // called after everything's been rendered, but before console/menus void RenderOverlay(EHudState state); + // called after everything's been rendered, but before console/menus/huds + void RenderUnderlay(EHudState state); // this executes when a player enters the level (once). PlayerEnter+inhub = RETURN void PlayerEntered(int num, bool fromhub); // this executes when a player respawns. includes resurrect cheat. diff --git a/src/g_statusbar/shared_sbar.cpp b/src/g_statusbar/shared_sbar.cpp index a9dbf43e8..7bd1f48b1 100644 --- a/src/g_statusbar/shared_sbar.cpp +++ b/src/g_statusbar/shared_sbar.cpp @@ -1297,6 +1297,7 @@ void DBaseStatusBar::SetMugShotState(const char *stateName, bool waitTillDone, b void DBaseStatusBar::DrawBottomStuff (EHudState state) { DrawMessages (HUDMSGLayer_UnderHUD, (state == HUD_StatusBar) ? GetTopOfStatusbar() : SCREENHEIGHT); + primaryLevel->localEventManager->RenderUnderlay(state); } //--------------------------------------------------------------------------- diff --git a/wadsrc/static/zscript/events.zs b/wadsrc/static/zscript/events.zs index 19f29c202..f79f8635b 100644 --- a/wadsrc/static/zscript/events.zs +++ b/wadsrc/static/zscript/events.zs @@ -336,6 +336,7 @@ class StaticEventHandler : Object native play version("2.4") // //virtual ui void RenderFrame(RenderEvent e) {} virtual ui void RenderOverlay(RenderEvent e) {} + virtual ui void RenderUnderlay(RenderEvent e) {} // virtual void PlayerEntered(PlayerEvent e) {} From b4cfea4e4da91a09c18f439a9b9d0de0df681ab0 Mon Sep 17 00:00:00 2001 From: Major Cooke Date: Sun, 23 Jun 2019 06:35:32 -0500 Subject: [PATCH 12/15] Re-ordered drawing a little. --- src/g_statusbar/shared_sbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/g_statusbar/shared_sbar.cpp b/src/g_statusbar/shared_sbar.cpp index 7bd1f48b1..539b32464 100644 --- a/src/g_statusbar/shared_sbar.cpp +++ b/src/g_statusbar/shared_sbar.cpp @@ -1296,8 +1296,8 @@ void DBaseStatusBar::SetMugShotState(const char *stateName, bool waitTillDone, b void DBaseStatusBar::DrawBottomStuff (EHudState state) { - DrawMessages (HUDMSGLayer_UnderHUD, (state == HUD_StatusBar) ? GetTopOfStatusbar() : SCREENHEIGHT); primaryLevel->localEventManager->RenderUnderlay(state); + DrawMessages (HUDMSGLayer_UnderHUD, (state == HUD_StatusBar) ? GetTopOfStatusbar() : SCREENHEIGHT); } //--------------------------------------------------------------------------- From b66b4ae0eca41805697321d8d0bb695a829a2ac3 Mon Sep 17 00:00:00 2001 From: Major Cooke Date: Wed, 3 Jul 2019 09:46:02 -0500 Subject: [PATCH 13/15] 'Fixed' spacing. --- wadsrc/static/zscript/events.zs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wadsrc/static/zscript/events.zs b/wadsrc/static/zscript/events.zs index f79f8635b..6f85bc188 100644 --- a/wadsrc/static/zscript/events.zs +++ b/wadsrc/static/zscript/events.zs @@ -336,7 +336,7 @@ class StaticEventHandler : Object native play version("2.4") // //virtual ui void RenderFrame(RenderEvent e) {} virtual ui void RenderOverlay(RenderEvent e) {} - virtual ui void RenderUnderlay(RenderEvent e) {} + virtual ui void RenderUnderlay(RenderEvent e) {} // virtual void PlayerEntered(PlayerEvent e) {} From 3467e0edcfee93ee3a6a47f7f1429fa7c6e8158d Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Thu, 4 Jul 2019 20:15:59 -0400 Subject: [PATCH 14/15] Switch command buffers to be one-time-submittable (#885) --- src/rendering/vulkan/system/vk_objects.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rendering/vulkan/system/vk_objects.h b/src/rendering/vulkan/system/vk_objects.h index 9a71503c8..4c6a7ace4 100644 --- a/src/rendering/vulkan/system/vk_objects.h +++ b/src/rendering/vulkan/system/vk_objects.h @@ -551,7 +551,7 @@ inline void VulkanCommandBuffer::begin() { VkCommandBufferBeginInfo beginInfo = {}; beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; - beginInfo.flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT; + beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; beginInfo.pInheritanceInfo = nullptr; VkResult result = vkBeginCommandBuffer(buffer, &beginInfo); From 1533abcb064c11efceb2731c00b8188107eb1ee2 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Fri, 5 Jul 2019 10:13:21 +0300 Subject: [PATCH 15/15] - fixed missing dive and surface player sounds https://forum.zdoom.org/viewtopic.php?t=65233 --- src/p_mobj.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index decb58b3a..f37bd669f 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -4259,11 +4259,12 @@ void AActor::SplashCheck() bool AActor::UpdateWaterLevel(bool dosplash) { + int oldlevel = waterlevel; + if (dosplash) SplashCheck(); double fh = -FLT_MAX; bool reset = false; - int oldlevel = waterlevel; waterlevel = 0;