From 1b13e6be983c4befbdb2d78d050eb2da4753f03e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 15 Sep 2014 11:24:48 +0200 Subject: [PATCH 1/9] -. fixed:S_LoadSound passed the wrong value for the lump size parameter to LoadSoundVoc. --- src/s_sound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/s_sound.cpp b/src/s_sound.cpp index 32a245675..035b71c74 100644 --- a/src/s_sound.cpp +++ b/src/s_sound.cpp @@ -1321,7 +1321,7 @@ sfxinfo_t *S_LoadSound(sfxinfo_t *sfx) // If the sound is voc, use the custom loader. if (strncmp ((const char *)sfxstart, "Creative Voice File", 19) == 0) { - sfx->data = GSnd->LoadSoundVoc(sfxstart, len); + sfx->data = GSnd->LoadSoundVoc(sfxstart, size); } // If the sound is raw, just load it as such. // Otherwise, try the sound as DMX format. From 4be9a716361c119c4d81eb1571f58420ca333b75 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 15 Sep 2014 11:32:40 +0200 Subject: [PATCH 2/9] - fixed: The VOC reader didn't advance the read index correctly. --- src/sound/i_sound.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sound/i_sound.cpp b/src/sound/i_sound.cpp index c95b0221f..07cd43a4b 100644 --- a/src/sound/i_sound.cpp +++ b/src/sound/i_sound.cpp @@ -494,6 +494,7 @@ SoundHandle SoundRenderer::LoadSoundVoc(BYTE *sfxdata, int length) break; default: break; } + i += blocksize; } } From 94123d5ef40e6843beb27a653f5e01dd3181a375 Mon Sep 17 00:00:00 2001 From: Braden Obrzut Date: Mon, 15 Sep 2014 12:59:07 -0400 Subject: [PATCH 3/9] - Applied anonymous patch to fix uncapped stuttering in SDL backend. --- src/sdl/i_system.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/sdl/i_system.cpp b/src/sdl/i_system.cpp index 9b3027a7d..8fea36c37 100644 --- a/src/sdl/i_system.cpp +++ b/src/sdl/i_system.cpp @@ -123,14 +123,13 @@ void I_EndRead(void) static DWORD TicStart; -static DWORD TicNext; static DWORD BaseTime; static int TicFrozen; // Signal based timer. static Semaphore timerWait; static int tics; -static DWORD sig_start, sig_next; +static DWORD sig_start; void I_SelectTimer(); @@ -169,7 +168,6 @@ int I_GetTimePolled (bool saveMS) if (saveMS) { TicStart = tm; - TicNext = Scale((Scale (tm, TICRATE, 1000) + 1), 1000, TICRATE); } return Scale(tm - BaseTime, TICRATE, 1000); } @@ -179,7 +177,6 @@ int I_GetTimeSignaled (bool saveMS) if (saveMS) { TicStart = sig_start; - TicNext = sig_next; } return tics; } @@ -250,7 +247,6 @@ void I_HandleAlarm (int sig) if(!TicFrozen) tics++; sig_start = SDL_GetTicks(); - sig_next = Scale((Scale (sig_start, TICRATE, 1000) + 1), 1000, TICRATE); SEMAPHORE_SIGNAL(timerWait) } @@ -293,15 +289,14 @@ void I_SelectTimer() fixed_t I_GetTimeFrac (uint32 *ms) { DWORD now = SDL_GetTicks (); - if (ms) *ms = TicNext; - DWORD step = TicNext - TicStart; - if (step == 0) + if (ms) *ms = TicStart + (1000 / TICRATE); + if (TicStart == 0) { return FRACUNIT; } else { - fixed_t frac = clamp ((now - TicStart)*FRACUNIT/step, 0, FRACUNIT); + fixed_t frac = clamp ((now - TicStart)*FRACUNIT*TICRATE/1000, 0, FRACUNIT); return frac; } } From 1c96039d7a1146a50b52335e0af8623f97f98415 Mon Sep 17 00:00:00 2001 From: Edoardo Prezioso Date: Mon, 15 Sep 2014 19:46:43 +0200 Subject: [PATCH 4/9] - Fixed miscompilation with Clang 3.5.0. The optimizer miscompiles the function FBehavior::LoadScriptsDirectory and causes random crashes when zdoom is run with wads containing scripts. As said in the comment, I just hope that the Clang devs fix it for the next patching release, ie 3.5.1. --- src/p_acs.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 235a47933..405d60320 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -2306,6 +2306,12 @@ void FBehavior::LoadScriptsDirectory () default: break; } + +// [EP] Clang 3.5.0 optimizer miscompiles this function and causes random +// crashes in the program. I hope that Clang 3.5.x will fix this. +#if defined(__clang__) && __clang_major__ == 3 && __clang_minor__ >= 5 + asm("" : "+g" (NumScripts)); +#endif for (i = 0; i < NumScripts; ++i) { Scripts[i].Flags = 0; From 864adde92ef98245551d2ab01ac222f332b36b0b Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 16 Sep 2014 08:42:27 +0200 Subject: [PATCH 5/9] - typo for savegame versioning of AActor::weaponspecial: it was introduced in savegame version 4512, not 4511. --- src/p_mobj.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 50461c43a..d035e0117 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -206,7 +206,7 @@ void AActor::Serialize (FArchive &arc) { arc << flags7; } - if (SaveVersion >= 4511) + if (SaveVersion >= 4512) { arc << weaponspecial; } From 7a62459c00c6ffe8ff500ba20a5c55321b52f93b Mon Sep 17 00:00:00 2001 From: MajorCooke Date: Thu, 18 Sep 2014 17:58:06 -0500 Subject: [PATCH 6/9] Allow SXF_SETMASTER to work on non-monsters. --- src/thingdef/thingdef_codeptr.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index b1c9e9065..c443c57d9 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -1843,6 +1843,10 @@ static bool InitSpawnedItem(AActor *self, AActor *mo, int flags) // If this is a missile or something else set the target to the originator mo->target = originator ? originator : self; } + if (flags & SIXF_SETMASTER) + { + mo->master = originator; + } if (flags & SIXF_TRANSFERSCALE) { mo->scaleX = self->scaleX; From 5c4ad9be68a09a08a1c328f346faebb5fc169e12 Mon Sep 17 00:00:00 2001 From: MajorCooke Date: Fri, 19 Sep 2014 14:15:31 -0500 Subject: [PATCH 7/9] Added Blue Shadow's A_SpawnItemEx changes: (1/2) SXF_TRANSFERALPHA and SXF_TRANSFERRENDERSTYLE --- src/thingdef/thingdef_codeptr.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index c443c57d9..f25a0818e 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -1755,6 +1755,8 @@ enum SIX_Flags SIXF_TRANSFERSPECIAL = 1 << 15, SIXF_CLEARCALLERSPECIAL = 1 << 16, SIXF_TRANSFERSTENCILCOL = 1 << 17, + SIXF_TRANSFERALPHA = 1 << 18, + SIXF_TRANSFERRENDERSTYLE = 1 << 19, }; static bool InitSpawnedItem(AActor *self, AActor *mo, int flags) @@ -1875,6 +1877,14 @@ static bool InitSpawnedItem(AActor *self, AActor *mo, int flags) { mo->fillcolor = self->fillcolor; } + if (flags & SIXF_TRANSFERALPHA) + { + mo->alpha = self->alpha; + } + if (flags & SIXF_TRANSFERRENDERSTYLE) + { + mo->RenderStyle = self->RenderStyle; + } return true; } From 33f83cc7f92b9b814f1bdc8e166da01d9386f453 Mon Sep 17 00:00:00 2001 From: MajorCooke Date: Fri, 19 Sep 2014 14:17:24 -0500 Subject: [PATCH 8/9] Added Blue Shadow's A_SpawnItemEx changes: (2/2) SXF_TRANSFERALPHA and SXF_TRANSFERRENDERSTYLE --- wadsrc/static/actors/constants.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wadsrc/static/actors/constants.txt b/wadsrc/static/actors/constants.txt index d5358e5af..bf998e6b0 100644 --- a/wadsrc/static/actors/constants.txt +++ b/wadsrc/static/actors/constants.txt @@ -65,6 +65,8 @@ const int SXF_TRANSFERSCALE = 16384; const int SXF_TRANSFERSPECIAL = 32768; const int SXF_CLEARCALLERSPECIAL = 65536; const int SXF_TRANSFERSTENCILCOL = 131072; +const int SXF_TRANSFERALPHA = 262144; +const int SXF_TRANSFERRENDERSTYLE = 524288; // Flags for A_Chase const int CHF_FASTCHASE = 1; From 16a380f82ad5ded598640f12ac498e3b7cac9d04 Mon Sep 17 00:00:00 2001 From: MajorCooke Date: Fri, 19 Sep 2014 17:27:18 -0500 Subject: [PATCH 9/9] - Added Blue Shadow's DropInventory ACS function. --- src/p_acs.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 405d60320..c5ea7031d 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -4367,6 +4367,7 @@ enum EACSFunctions ACSF_ChangeActorAngle, ACSF_ChangeActorPitch, // 80 ACSF_GetArmorInfo, + ACSF_DropInventory, /* Zandronum's - these must be skipped when we reach 99! -100:ResetMap(0), @@ -5491,6 +5492,42 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) break; } + case ACSF_DropInventory: + { + const char *type = FBehavior::StaticLookupString(args[1]); + AInventory *inv; + + if (type != NULL) + { + if (args[0] == 0) + { + if (activator != NULL) + { + inv = activator->FindInventory(type); + if (inv) + { + activator->DropInventory(inv); + } + } + } + else + { + FActorIterator it(args[0]); + AActor *actor; + + while ((actor = it.Next()) != NULL) + { + inv = actor->FindInventory(type); + if (inv) + { + actor->DropInventory(inv); + } + } + } + } + break; + } + case ACSF_CheckFlag: { AActor *actor = SingleActorFromTID(args[0], activator);