From 28516c2defb94f62593a43f573f64fc3b6594532 Mon Sep 17 00:00:00 2001 From: Rachael Alexanderson Date: Mon, 10 Dec 2018 14:25:29 -0500 Subject: [PATCH 1/6] - split gl_texture_hqresize into two variables - one for mode, one for multiplier. --- src/gameconfigfile.cpp | 89 ++++++++++++++++++ src/r_videoscale.cpp | 2 +- src/textures/hires/hqresize.cpp | 108 +++++++++++----------- src/version.h | 2 +- wadsrc/static/language.enu | 33 ++----- wadsrc/static/menudef.txt | 66 +++++-------- wadsrc/static/zscript/menu/optionmenu.txt | 42 +-------- 7 files changed, 179 insertions(+), 163 deletions(-) diff --git a/src/gameconfigfile.cpp b/src/gameconfigfile.cpp index 2979420f9a..3bd34fd158 100644 --- a/src/gameconfigfile.cpp +++ b/src/gameconfigfile.cpp @@ -60,6 +60,8 @@ EXTERN_CVAR (Color, am_fdwallcolor) EXTERN_CVAR (Color, am_cdwallcolor) EXTERN_CVAR (Float, spc_amp) EXTERN_CVAR (Bool, wi_percents) +EXTERN_CVAR (Int, gl_texture_hqresizemode) +EXTERN_CVAR (Int, gl_texture_hqresizemult) FGameConfigFile::FGameConfigFile () { @@ -395,6 +397,93 @@ void FGameConfigFile::DoGlobalSetup () FBaseCVar *var = FindCVar("snd_hrtf", NULL); if (var != NULL) var->ResetToDefault(); } + if (last < 216) + { + FBaseCVar *var = FindCVar("gl_texture_hqresize", NULL); + if (var != NULL) + { + auto v = var->GetGenericRep(CVAR_Int); + switch (v.Int) + { + case 1: + gl_texture_hqresizemode = 1; gl_texture_hqresizemult = 2; + break; + case 2: + gl_texture_hqresizemode = 1; gl_texture_hqresizemult = 3; + break; + case 3: + gl_texture_hqresizemode = 1; gl_texture_hqresizemult = 4; + break; + case 4: + gl_texture_hqresizemode = 2; gl_texture_hqresizemult = 2; + break; + case 5: + gl_texture_hqresizemode = 2; gl_texture_hqresizemult = 3; + break; + case 6: + gl_texture_hqresizemode = 2; gl_texture_hqresizemult = 4; + break; + case 7: + gl_texture_hqresizemode = 3; gl_texture_hqresizemult = 2; + break; + case 8: + gl_texture_hqresizemode = 3; gl_texture_hqresizemult = 3; + break; + case 9: + gl_texture_hqresizemode = 3; gl_texture_hqresizemult = 4; + break; + case 10: + gl_texture_hqresizemode = 4; gl_texture_hqresizemult = 2; + break; + case 11: + gl_texture_hqresizemode = 4; gl_texture_hqresizemult = 3; + break; + case 12: + gl_texture_hqresizemode = 4; gl_texture_hqresizemult = 4; + break; + case 18: + gl_texture_hqresizemode = 4; gl_texture_hqresizemult = 5; + break; + case 19: + gl_texture_hqresizemode = 4; gl_texture_hqresizemult = 6; + break; + case 13: + gl_texture_hqresizemode = 5; gl_texture_hqresizemult = 2; + break; + case 14: + gl_texture_hqresizemode = 5; gl_texture_hqresizemult = 3; + break; + case 15: + gl_texture_hqresizemode = 5; gl_texture_hqresizemult = 4; + break; + case 16: + gl_texture_hqresizemode = 5; gl_texture_hqresizemult = 5; + break; + case 17: + gl_texture_hqresizemode = 5; gl_texture_hqresizemult = 6; + break; + case 20: + gl_texture_hqresizemode = 6; gl_texture_hqresizemult = 2; + break; + case 21: + gl_texture_hqresizemode = 6; gl_texture_hqresizemult = 3; + break; + case 22: + gl_texture_hqresizemode = 6; gl_texture_hqresizemult = 4; + break; + case 23: + gl_texture_hqresizemode = 6; gl_texture_hqresizemult = 5; + break; + case 24: + gl_texture_hqresizemode = 6; gl_texture_hqresizemult = 6; + break; + case 0: + default: + gl_texture_hqresizemode = 0; gl_texture_hqresizemult = 1; + break; + } + } + } } } } diff --git a/src/r_videoscale.cpp b/src/r_videoscale.cpp index 9918def624..95f7881350 100644 --- a/src/r_videoscale.cpp +++ b/src/r_videoscale.cpp @@ -78,7 +78,7 @@ namespace } void R_ShowCurrentScaling(); -CUSTOM_CVAR(Float, vid_scalefactor, 1.0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +CUSTOM_CVAR(Float, vid_scalefactor, 1.0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { setsizeneeded = true; if (self < 0.05 || self > 2.0) diff --git a/src/textures/hires/hqresize.cpp b/src/textures/hires/hqresize.cpp index 01f310ed2f..7512be703d 100644 --- a/src/textures/hires/hqresize.cpp +++ b/src/textures/hires/hqresize.cpp @@ -45,18 +45,22 @@ #include "parallel_for.h" #include "hwrenderer/textures/hw_material.h" -CUSTOM_CVAR(Int, gl_texture_hqresize, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) +EXTERN_CVAR(Int, gl_texture_hqresizemult) +CUSTOM_CVAR(Int, gl_texture_hqresizemode, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { - if (self < 0 || self > 24) - { + if (self < 0 || self > 6) self = 0; - } - #ifndef HAVE_MMX - // This is to allow the menu option to work properly so that these filters can be skipped while cycling through them. - if (self == 7) self = 10; - if (self == 8) self = 10; - if (self == 9) self = 6; - #endif + if ((gl_texture_hqresizemult > 4) && (self < 4) && (self > 0)) + gl_texture_hqresizemult = 4; + FMaterial::FlushAll(); +} + +CUSTOM_CVAR(Int, gl_texture_hqresizemult, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) +{ + if (self < 1 || self > 6) + self = 1; + if ((self > 4) && (gl_texture_hqresizemode < 4) && (gl_texture_hqresizemode > 0)) + self = 4; FMaterial::FlushAll(); } @@ -385,64 +389,60 @@ unsigned char *FTexture::CreateUpsampledTextureBuffer (unsigned char *inputBuffe if (inputBuffer) { - int type = gl_texture_hqresize; + int type = gl_texture_hqresizemode; + int mult = gl_texture_hqresizemult; outWidth = inWidth; outHeight = inHeight; #ifdef HAVE_MMX // hqNx MMX does not preserve the alpha channel so fall back to C-version for such textures - if (hasAlpha && type > 6 && type <= 9) + if (hasAlpha && type == 3) { - type -= 3; + type = 2; } #endif + if (mult < 2) + type = 0; switch (type) { case 1: - return scaleNxHelper( &scale2x, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + switch(mult) + { + case 2: + return scaleNxHelper( &scale2x, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 3: + return scaleNxHelper( &scale3x, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + default: + return scaleNxHelper( &scale4x, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + } case 2: - return scaleNxHelper( &scale3x, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 3: - return scaleNxHelper( &scale4x, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 4: - return hqNxHelper( &hq2x_32, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 5: - return hqNxHelper( &hq3x_32, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 6: - return hqNxHelper( &hq4x_32, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + switch(mult) + { + case 2: + return hqNxHelper( &hq2x_32, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 3: + return hqNxHelper( &hq3x_32, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + default: + return hqNxHelper( &hq4x_32, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + } #ifdef HAVE_MMX - case 7: - return hqNxAsmHelper( &HQnX_asm::hq2x_32, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 8: - return hqNxAsmHelper( &HQnX_asm::hq3x_32, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 9: - return hqNxAsmHelper( &HQnX_asm::hq4x_32, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 3: + switch(mult) + { + case 2: + return hqNxAsmHelper( &HQnX_asm::hq2x_32, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 3: + return hqNxAsmHelper( &HQnX_asm::hq3x_32, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + default: + return hqNxAsmHelper( &HQnX_asm::hq4x_32, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + } #endif - case 10: - case 11: - case 12: - return xbrzHelper(xbrz::scale, type - 8, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - - case 13: - case 14: - case 15: - case 16: - case 17: - return xbrzHelper(xbrzOldScale, type - 11, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - - case 18: - case 19: - return xbrzHelper(xbrz::scale, type - 13, inputBuffer, inWidth, inHeight, outWidth, outHeight); - case 20: - return normalNxHelper( &normalNx, 2, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 21: - return normalNxHelper( &normalNx, 3, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 22: - return normalNxHelper( &normalNx, 4, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 23: - return normalNxHelper( &normalNx, 5, inputBuffer, inWidth, inHeight, outWidth, outHeight ); - case 24: - return normalNxHelper( &normalNx, 6, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 4: + return xbrzHelper(xbrz::scale, mult, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 5: + return xbrzHelper(xbrzOldScale, mult, inputBuffer, inWidth, inHeight, outWidth, outHeight ); + case 6: + return normalNxHelper( &normalNx, mult, inputBuffer, inWidth, inHeight, outWidth, outHeight ); } } return inputBuffer; diff --git a/src/version.h b/src/version.h index 7ee00c9509..7cd576e3ad 100644 --- a/src/version.h +++ b/src/version.h @@ -68,7 +68,7 @@ const char *GetVersionString(); // Version stored in the ini's [LastRun] section. // Bump it if you made some configuration change that you want to // be able to migrate in FGameConfigFile::DoGlobalSetup(). -#define LASTRUNVERSION "215" +#define LASTRUNVERSION "216" // Protocol version used in demos. // Bump it if you change existing DEM_ commands or add new ones. diff --git a/wadsrc/static/language.enu b/wadsrc/static/language.enu index 2b49fe55f9..81b7d17f26 100644 --- a/wadsrc/static/language.enu +++ b/wadsrc/static/language.enu @@ -2783,7 +2783,8 @@ GLTEXMNU_ANISOTROPIC = "Anisotropic filter"; GLTEXMNU_TEXFORMAT = "Texture Format"; GLTEXMNU_ENABLEHIRES = "Enable hires textures"; GLTEXMNU_HQRESIZE = "High Quality Resize mode"; -GLTEXMNU_HQRESIZEWARN = "This mode requires %d times more video memory"; +GLTEXMNU_HQRESIZEMULT = "High Quality Resize multiplier"; +GLTEXMNU_HQRESIZEWARN = "This mode requires %d times more video memory"; GLTEXMNU_RESIZETEX = "Resize textures"; GLTEXMNU_RESIZESPR = "Resize sprites"; GLTEXMNU_RESIZEFNT = "Resize fonts"; @@ -2881,30 +2882,12 @@ OPTVAL_YAXIS = "Y Axis"; OPTVAL_XYAXIS = "X/Y Axis"; OPTVAL_SQUARE = "Square"; OPTVAL_ROUND = "Round"; -OPTVAL_SCALE2X = "Scale2x"; -OPTVAL_SCALE3X = "Scale3x"; -OPTVAL_SCALE4X = "Scale4x"; -OPTVAL_NORMAL2X = "Normal2x"; -OPTVAL_NORMAL3X = "Normal3x"; -OPTVAL_NORMAL4X = "Normal4x"; -OPTVAL_NORMAL5X = "Normal5x"; -OPTVAL_NORMAL6X = "Normal6x"; -OPTVAL_HQ2X = "hq2x"; -OPTVAL_HQ3X = "hq3x"; -OPTVAL_HQ4X = "hq4x"; -OPTVAL_HQ2XMMX = "hq2x MMX"; -OPTVAL_HQ3XMMX = "hq3x MMX"; -OPTVAL_HQ4XMMX = "hq4x MMX"; -OPTVAL_2XBRZ = "2xBRZ"; -OPTVAL_3XBRZ = "3xBRZ"; -OPTVAL_4XBRZ = "4xBRZ"; -OPTVAL_5XBRZ = "5xBRZ"; -OPTVAL_6XBRZ = "6xBRZ"; -OPTVAL_OLD_2XBRZ = "Old 2xBRZ"; -OPTVAL_OLD_3XBRZ = "Old 3xBRZ"; -OPTVAL_OLD_4XBRZ = "Old 4xBRZ"; -OPTVAL_OLD_5XBRZ = "Old 5xBRZ"; -OPTVAL_OLD_6XBRZ = "Old 6xBRZ"; +OPTVAL_SCALENX = "ScaleNx"; +OPTVAL_NORMALNX = "NormalNx"; +OPTVAL_HQNX = "hqNx"; +OPTVAL_HQNXMMX = "hqNx MMX"; +OPTVAL_NXBRZ = "xBRZ"; +OPTVAL_OLD_NXBRZ = "Old xBRZ"; OPTVAL_RADIAL = "Radial"; OPTVAL_PIXELFUZZ = "Pixel fuzz"; OPTVAL_SMOOTHFUZZ = "Smooth fuzz"; diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index 965f23d0c9..4026e2bc04 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -2151,51 +2151,32 @@ OptionValue "Particles" OptionValue "HqResizeModes" { 0, "$OPTVAL_OFF" - 1, "$OPTVAL_SCALE2X" - 2, "$OPTVAL_SCALE3X" - 3, "$OPTVAL_SCALE4X" - 4, "$OPTVAL_HQ2X" - 5, "$OPTVAL_HQ3X" - 6, "$OPTVAL_HQ4X" - 7, "$OPTVAL_HQ2XMMX" - 8, "$OPTVAL_HQ3XMMX" - 9, "$OPTVAL_HQ4XMMX" - 10, "$OPTVAL_2XBRZ" - 11, "$OPTVAL_3XBRZ" - 12, "$OPTVAL_4XBRZ" - 18, "$OPTVAL_5XBRZ" - 19, "$OPTVAL_6XBRZ" - 13, "$OPTVAL_OLD_2XBRZ" - 14, "$OPTVAL_OLD_3XBRZ" - 15, "$OPTVAL_OLD_4XBRZ" - 16, "$OPTVAL_OLD_5XBRZ" - 17, "$OPTVAL_OLD_6XBRZ" - 20, "$OPTVAL_NORMAL2X" - 21, "$OPTVAL_NORMAL3X" - 22, "$OPTVAL_NORMAL4X" - 23, "$OPTVAL_NORMAL5X" - 24, "$OPTVAL_NORMAL6X" + 1, "$OPTVAL_SCALENX" + 2, "$OPTVAL_HQNX" + 3, "$OPTVAL_HQNXMMX" + 4, "$OPTVAL_NXBRZ" + 5, "$OPTVAL_OLD_NXBRZ" + 6, "$OPTVAL_NORMALNX" +} + +OptionValue "HqResizeMultipliers" +{ + 1, "$OPTVAL_OFF" + 2, "2x" + 3, "3x" + 4, "4x" + 5, "5x" + 6, "6x" } OptionValue "HqResizeModesNoMMX" { 0, "$OPTVAL_OFF" - 1, "$OPTVAL_SCALE2X" - 2, "$OPTVAL_SCALE3X" - 3, "$OPTVAL_SCALE4X" - 4, "$OPTVAL_HQ2X" - 5, "$OPTVAL_HQ3X" - 6, "$OPTVAL_HQ4X" - 10, "$OPTVAL_2XBRZ" - 11, "$OPTVAL_3XBRZ" - 12, "$OPTVAL_4XBRZ" - 18, "$OPTVAL_5XBRZ" - 19, "$OPTVAL_6XBRZ" - 13, "$OPTVAL_OLD_2XBRZ" - 14, "$OPTVAL_OLD_3XBRZ" - 15, "$OPTVAL_OLD_4XBRZ" - 16, "$OPTVAL_OLD_5XBRZ" - 17, "$OPTVAL_OLD_6XBRZ" + 1, "$OPTVAL_SCALENX" + 2, "$OPTVAL_HQNX" + 4, "$OPTVAL_NXBRZ" + 5, "$OPTVAL_OLD_NXBRZ" + 6, "$OPTVAL_NORMALNX" } OptionValue "FogMode" @@ -2262,12 +2243,13 @@ OptionMenu "GLTextureGLOptions" protected ifOption(MMX) { - Option "$GLTEXMNU_HQRESIZE", gl_texture_hqresize, "HqResizeModes" + Option "$GLTEXMNU_HQRESIZE", gl_texture_hqresizemode, "HqResizeModes" } else { - Option "$GLTEXMNU_HQRESIZE", gl_texture_hqresize, "HqResizeModesNoMMX" + Option "$GLTEXMNU_HQRESIZE", gl_texture_hqresizemode, "HqResizeModesNoMMX" } + Option "$GLTEXMNU_HQRESIZEMULT", gl_texture_hqresizemult, "HqResizeMultipliers" StaticText "!HQRESIZE_WARNING!" Option "$GLTEXMNU_RESIZETEX", gl_texture_hqresize_textures, "OnOff" diff --git a/wadsrc/static/zscript/menu/optionmenu.txt b/wadsrc/static/zscript/menu/optionmenu.txt index f73035ab0e..10bd91140d 100644 --- a/wadsrc/static/zscript/menu/optionmenu.txt +++ b/wadsrc/static/zscript/menu/optionmenu.txt @@ -579,47 +579,9 @@ class GLTextureGLOptions : OptionMenu { string message; - if (gl_texture_hqresize > 0) + if (gl_texture_hqresizemult > 1 && gl_texture_hqresizemode > 0) { - int multiplier; - - switch (gl_texture_hqresize) - { - case 1: - case 4: - case 7: - case 10: - case 13: - case 20: - multiplier = 4; - break; - case 2: - case 5: - case 8: - case 11: - case 14: - case 21: - multiplier = 9; - break; - case 3: - case 6: - case 9: - case 12: - case 15: - case 22: - multiplier = 16; - break; - case 16: - case 18: - case 23: - multiplier = 25; - break; - case 17: - case 19: - case 24: - multiplier = 36; - break; - } + int multiplier = gl_texture_hqresizemult * gl_texture_hqresizemult; string localized = StringTable.Localize("$GLTEXMNU_HQRESIZEWARN"); message = String.Format(localized, multiplier); From ad8f48483634e27faaecfcfbf9f1c86a95a6a95f Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 11 Dec 2018 00:21:37 +0100 Subject: [PATCH 2/6] - fixed: The JIT compiler crashed on missing ArgFlags. For ad-hoc Dehacked state functions no ArgFlags are created, in this case they can just be assumed to not be relevant here, because none of these function produces reference arguments. --- src/scripting/vm/jit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripting/vm/jit.cpp b/src/scripting/vm/jit.cpp index 6aacc4bf1e..319130aa45 100644 --- a/src/scripting/vm/jit.cpp +++ b/src/scripting/vm/jit.cpp @@ -268,7 +268,7 @@ void JitCompiler::SetupSimpleFrame() for (unsigned int i = 0; i < sfunc->Proto->ArgumentTypes.Size(); i++) { const PType *type = sfunc->Proto->ArgumentTypes[i]; - if (sfunc->ArgFlags[i] & (VARF_Out | VARF_Ref)) + if (sfunc->ArgFlags.Size() && sfunc->ArgFlags[i] & (VARF_Out | VARF_Ref)) { cc.mov(regA[rega++], x86::ptr(args, argsPos++ * sizeof(VMValue) + offsetof(VMValue, a))); } From abd6729d39ccff59fed9b151196183517f0346ef Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 11 Dec 2018 00:35:22 +0100 Subject: [PATCH 3/6] - fixed deprecation warnings for member functions not checking the version. --- src/scripting/backend/codegen.cpp | 6 +++--- src/scripting/thingdef.cpp | 4 ++-- src/scripting/thingdef.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/scripting/backend/codegen.cpp b/src/scripting/backend/codegen.cpp index 0eecab9a9b..db87134ddd 100644 --- a/src/scripting/backend/codegen.cpp +++ b/src/scripting/backend/codegen.cpp @@ -7600,7 +7600,7 @@ FxExpression *FxFunctionCall::Resolve(FCompileContext& ctx) if (ctx.Class != nullptr) { - PFunction *afd = FindClassMemberFunction(ctx.Class, ctx.Class, MethodName, ScriptPosition, &error); + PFunction *afd = FindClassMemberFunction(ctx.Class, ctx.Class, MethodName, ScriptPosition, &error, ctx.Version); if (afd != nullptr) { @@ -8002,7 +8002,7 @@ FxExpression *FxMemberFunctionCall::Resolve(FCompileContext& ctx) if (novirtual) { bool error; - PFunction *afd = FindClassMemberFunction(ccls, ctx.Class, MethodName, ScriptPosition, &error); + PFunction *afd = FindClassMemberFunction(ccls, ctx.Class, MethodName, ScriptPosition, &error, ctx.Version); if ((nullptr != afd) && (afd->Variants[0].Flags & VARF_Method) && (afd->Variants[0].Flags & VARF_Virtual)) { staticonly = false; @@ -8309,7 +8309,7 @@ FxExpression *FxMemberFunctionCall::Resolve(FCompileContext& ctx) isresolved: bool error = false; - PFunction *afd = FindClassMemberFunction(cls, ctx.Class, MethodName, ScriptPosition, &error); + PFunction *afd = FindClassMemberFunction(cls, ctx.Class, MethodName, ScriptPosition, &error, ctx.Version); if (error) { delete this; diff --git a/src/scripting/thingdef.cpp b/src/scripting/thingdef.cpp index 928f645a88..439bf8ce8a 100644 --- a/src/scripting/thingdef.cpp +++ b/src/scripting/thingdef.cpp @@ -236,7 +236,7 @@ PFunction *CreateAnonymousFunction(PContainerType *containingclass, PType *retur // //========================================================================== -PFunction *FindClassMemberFunction(PContainerType *selfcls, PContainerType *funccls, FName name, FScriptPosition &sc, bool *error) +PFunction *FindClassMemberFunction(PContainerType *selfcls, PContainerType *funccls, FName name, FScriptPosition &sc, bool *error, const VersionInfo &version) { // Skip ACS_NamedExecuteWithResult. Anything calling this should use the builtin instead. if (name == NAME_ACS_NamedExecuteWithResult) return nullptr; @@ -263,7 +263,7 @@ PFunction *FindClassMemberFunction(PContainerType *selfcls, PContainerType *func { sc.Message(MSG_ERROR, "%s is declared protected and not accessible", symbol->SymbolName.GetChars()); } - else if (funcsym->Variants[0].Flags & VARF_Deprecated) + else if ((funcsym->Variants[0].Flags & VARF_Deprecated) && funcsym->mVersion <= version) { sc.Message(MSG_WARNING, "Call to deprecated function %s", symbol->SymbolName.GetChars()); } diff --git a/src/scripting/thingdef.h b/src/scripting/thingdef.h index 844e389572..6e6737282d 100644 --- a/src/scripting/thingdef.h +++ b/src/scripting/thingdef.h @@ -204,7 +204,7 @@ class FxVMFunctionCall *ParseAction(FScanner &sc, FState state, FString statestr FName CheckCastKludges(FName in); void SetImplicitArgs(TArray *args, TArray *argflags, TArray *argnames, PContainerType *cls, uint32_t funcflags, int useflags); PFunction *CreateAnonymousFunction(PContainerType *containingclass, PType *returntype, int flags); -PFunction *FindClassMemberFunction(PContainerType *cls, PContainerType *funccls, FName name, FScriptPosition &sc, bool *error); +PFunction *FindClassMemberFunction(PContainerType *cls, PContainerType *funccls, FName name, FScriptPosition &sc, bool *error, const VersionInfo &version); void CreateDamageFunction(PNamespace *ns, const VersionInfo &ver, PClassActor *info, AActor *defaults, FxExpression *id, bool fromDecorate, int lumpnum); //========================================================================== From f6aa16947ac5f15a66c057603aa841dc0b8e3ad1 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 11 Dec 2018 00:35:53 +0100 Subject: [PATCH 4/6] - re-added PlayerInfo.BringUpWeapon. --- wadsrc/static/zscript/shared/player.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/wadsrc/static/zscript/shared/player.txt b/wadsrc/static/zscript/shared/player.txt index 391ae38a64..9a06f78b4e 100644 --- a/wadsrc/static/zscript/shared/player.txt +++ b/wadsrc/static/zscript/shared/player.txt @@ -2431,6 +2431,11 @@ struct PlayerInfo native play // self is what internally is known as player_t mo.DropWeapon(); } } + + deprecated("3.7") void BringUpWeapon() + { + if (mo) mo.BringUpWeapon(); + } bool IsTotallyFrozen() { From 8b46be768695674a04c0a66a1e580ef8b06c7c07 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Tue, 11 Dec 2018 10:46:56 +0200 Subject: [PATCH 5/6] - print VM stack trace on startup abort exception https://forum.zdoom.org/viewtopic.php?t=62650 --- src/posix/cocoa/i_main_except.cpp | 21 +++++++++++++++++---- src/posix/sdl/i_main.cpp | 24 ++++++++++++++++++++---- src/win32/i_main.cpp | 6 ++++++ 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/posix/cocoa/i_main_except.cpp b/src/posix/cocoa/i_main_except.cpp index a61eca2ccb..afb0ba7e41 100644 --- a/src/posix/cocoa/i_main_except.cpp +++ b/src/posix/cocoa/i_main_except.cpp @@ -32,9 +32,11 @@ */ // Workaround for GCC Objective-C++ with C++ exceptions bug. -#include "doomerrors.h" #include +#include "doomerrors.h" +#include "vm.h" + // Import some functions from i_main.mm void call_terms(); void Mac_I_FatalError(const char* const message); @@ -50,10 +52,21 @@ void OriginalMainExcept(int argc, char** argv) { const char* const message = error.what(); - if (NULL != message) + if (strcmp(message, "NoRunExit")) { - if (strcmp(message, "NoRunExit")) fprintf(stderr, "%s\n", message); - Mac_I_FatalError(message); + if (CVMAbortException::stacktrace.IsNotEmpty()) + { + Printf("%s", CVMAbortException::stacktrace.GetChars()); + } + + if (batchrun) + { + Printf("%s\n", message); + } + else + { + Mac_I_FatalError(message); + } } exit(-1); diff --git a/src/posix/sdl/i_main.cpp b/src/posix/sdl/i_main.cpp index 0c23892948..3d7912fc8b 100644 --- a/src/posix/sdl/i_main.cpp +++ b/src/posix/sdl/i_main.cpp @@ -52,6 +52,7 @@ #include "cmdlib.h" #include "r_utility.h" #include "doomstat.h" +#include "vm.h" // MACROS ------------------------------------------------------------------ @@ -261,16 +262,31 @@ int main (int argc, char **argv) catch (std::exception &error) { I_ShutdownJoysticks(); - if (error.what () && strcmp(error.what(), "NoRunExit")) - fprintf (stderr, "%s\n", error.what ()); + const char *const message = error.what(); + + if (strcmp(message, "NoRunExit")) + { + if (CVMAbortException::stacktrace.IsNotEmpty()) + { + Printf("%s", CVMAbortException::stacktrace.GetChars()); + } + + if (batchrun) + { + Printf("%s\n", message); + } + else + { #ifdef __APPLE__ - Mac_I_FatalError(error.what()); + Mac_I_FatalError(message); #endif // __APPLE__ #ifdef __linux__ - Linux_I_FatalError(error.what()); + Linux_I_FatalError(message); #endif // __linux__ + } + } exit (-1); } diff --git a/src/win32/i_main.cpp b/src/win32/i_main.cpp index 6a75a597a9..4bd3aed66e 100644 --- a/src/win32/i_main.cpp +++ b/src/win32/i_main.cpp @@ -71,6 +71,7 @@ #include "r_utility.h" #include "g_levellocals.h" #include "s_sound.h" +#include "vm.h" #include "stats.h" #include "st_start.h" @@ -1057,6 +1058,11 @@ void DoMain (HINSTANCE hInstance) auto msg = error.what(); if (strcmp(msg, "NoRunExit")) { + if (CVMAbortException::stacktrace.IsNotEmpty()) + { + Printf("%s", CVMAbortException::stacktrace.GetChars()); + } + if (!batchrun) { ShowErrorPane(msg); From eb8614fc716818d0603c92eafbac7be62008d92d Mon Sep 17 00:00:00 2001 From: Player701 Date: Tue, 11 Dec 2018 17:07:21 +0300 Subject: [PATCH 6/6] - Force node rebuild for Plutonia 2 MAP25 to fix BSP glitches --- wadsrc/static/compatibility.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/wadsrc/static/compatibility.txt b/wadsrc/static/compatibility.txt index 030cea322c..03d8b32239 100644 --- a/wadsrc/static/compatibility.txt +++ b/wadsrc/static/compatibility.txt @@ -175,6 +175,7 @@ AF40D0E49BD1B76D4B1AADD8212ADC46 // MAP01 (the wad that shall not be named =P) D5F64E02679A81B82006AF34A6A8EAC3 // plutonia.wad map32 BA4860C7A2F5D705DB32A1A38DB77EC4 // pl2.wad map10 EDA5CE7C462BD171BF8110AC56B67857 // pl2.wad map11 +A9A9A728E689266939C1B71655F320CA // pl2.wad map25 { rebuildnodes }