From 213216368ab1988a93087827db2b074c7beadec9 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 6 Sep 2015 16:36:32 +0200 Subject: [PATCH 01/13] - more DECORATE fixing of Doom monsters, this time the Mancubus. It looks like the definitions that got added on November 4th, 2006 had some issues that mostly went unnoticed over time... --- wadsrc/static/actors/doom/fatso.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wadsrc/static/actors/doom/fatso.txt b/wadsrc/static/actors/doom/fatso.txt index 1ad40fd93..0b3039325 100644 --- a/wadsrc/static/actors/doom/fatso.txt +++ b/wadsrc/static/actors/doom/fatso.txt @@ -30,9 +30,9 @@ ACTOR Fatso Missile: FATT G 20 A_FatRaise FATT H 10 BRIGHT A_FatAttack1 - FATT IG 5 + FATT IG 5 A_FaceTarget FATT H 10 BRIGHT A_FatAttack2 - FATT IG 5 + FATT IG 5 A_FaceTarget FATT H 10 BRIGHT A_FatAttack3 FATT IG 5 Goto See From ee7eb3253a70933098cebc2054caea8c22eb02cb Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Tue, 15 Sep 2015 16:45:20 +0300 Subject: [PATCH 02/13] Added compatibility flag for point-on-line algorithm It's possible to use original but buggy implementations of P_PointOnLineSide() and P_PointOnDivlineSide() function See http://forum.zdoom.org/viewtopic.php?f=2&t=49544 --- src/compatibility.cpp | 1 + src/d_main.cpp | 4 +++- src/doomdef.h | 1 + src/g_mapinfo.cpp | 1 + src/p_local.h | 10 ++++++++-- wadsrc/static/menudef.txt | 1 + 6 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/compatibility.cpp b/src/compatibility.cpp index d60677f64..498fefb2a 100644 --- a/src/compatibility.cpp +++ b/src/compatibility.cpp @@ -145,6 +145,7 @@ static FCompatOption Options[] = { "badangles", COMPATF2_BADANGLES, SLOT_COMPAT2 }, { "floormove", COMPATF2_FLOORMOVE, SLOT_COMPAT2 }, { "soundcutoff", COMPATF2_SOUNDCUTOFF, SLOT_COMPAT2 }, + { "pointonline", COMPATF2_POINTONLINE, SLOT_COMPAT2 }, { NULL, 0, 0 } }; diff --git a/src/d_main.cpp b/src/d_main.cpp index 98be13e33..3b3cce1f4 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -561,7 +561,7 @@ CUSTOM_CVAR(Int, compatmode, 0, CVAR_ARCHIVE|CVAR_NOINITCALL) COMPATF_TRACE|COMPATF_MISSILECLIP|COMPATF_SOUNDTARGET|COMPATF_NO_PASSMOBJ|COMPATF_LIMITPAIN| COMPATF_DEHHEALTH|COMPATF_INVISIBILITY|COMPATF_CROSSDROPOFF|COMPATF_CORPSEGIBS|COMPATF_HITSCAN| COMPATF_WALLRUN|COMPATF_NOTOSSDROPS|COMPATF_LIGHT|COMPATF_MASKEDMIDTEX; - w = COMPATF2_BADANGLES|COMPATF2_FLOORMOVE; + w = COMPATF2_BADANGLES|COMPATF2_FLOORMOVE|COMPATF2_POINTONLINE; break; case 3: // Boom compat mode @@ -580,6 +580,7 @@ CUSTOM_CVAR(Int, compatmode, 0, CVAR_ARCHIVE|CVAR_NOINITCALL) case 6: // Boom with some added settings to reenable some 'broken' behavior v = COMPATF_TRACE|COMPATF_SOUNDTARGET|COMPATF_BOOMSCROLL|COMPATF_MISSILECLIP|COMPATF_NO_PASSMOBJ| COMPATF_INVISIBILITY|COMPATF_CORPSEGIBS|COMPATF_HITSCAN|COMPATF_WALLRUN|COMPATF_NOTOSSDROPS; + w = COMPATF2_POINTONLINE; break; } @@ -622,6 +623,7 @@ CVAR (Flag, compat_maskedmidtex, compatflags, COMPATF_MASKEDMIDTEX); CVAR (Flag, compat_badangles, compatflags2, COMPATF2_BADANGLES); CVAR (Flag, compat_floormove, compatflags2, COMPATF2_FLOORMOVE); CVAR (Flag, compat_soundcutoff, compatflags2, COMPATF2_SOUNDCUTOFF); +CVAR (Flag, compat_pointonline, compatflags2, COMPATF2_POINTONLINE); //========================================================================== // diff --git a/src/doomdef.h b/src/doomdef.h index c8aa66c17..802591386 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -340,6 +340,7 @@ enum COMPATF2_BADANGLES = 1 << 0, // It is impossible to face directly NSEW. COMPATF2_FLOORMOVE = 1 << 1, // Use the same floor motion behavior as Doom. COMPATF2_SOUNDCUTOFF = 1 << 2, // Cut off sounds when an actor vanishes instead of making it owner-less + COMPATF2_POINTONLINE = 1 << 3, // Use original but buggy P_PointOnLineSide() and P_PointOnDivlineSide() }; // Emulate old bugs for select maps. These are not exposed by a cvar diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index 49493667e..ac938797d 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -1333,6 +1333,7 @@ MapFlagHandlers[] = { "compat_badangles", MITYPE_COMPATFLAG, 0, COMPATF2_BADANGLES }, { "compat_floormove", MITYPE_COMPATFLAG, 0, COMPATF2_FLOORMOVE }, { "compat_soundcutoff", MITYPE_COMPATFLAG, 0, COMPATF2_SOUNDCUTOFF }, + { "compat_pointonline", MITYPE_COMPATFLAG, 0, COMPATF2_POINTONLINE }, { "cd_start_track", MITYPE_EATNEXT, 0, 0 }, { "cd_end1_track", MITYPE_EATNEXT, 0, 0 }, { "cd_end2_track", MITYPE_EATNEXT, 0, 0 }, diff --git a/src/p_local.h b/src/p_local.h index a8aaaeb0d..0e06ad72b 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -240,7 +240,10 @@ fixed_t P_AproxDistance (fixed_t dx, fixed_t dy); inline int P_PointOnLineSide (fixed_t x, fixed_t y, const line_t *line) { - return DMulScale32 (y-line->v1->y, line->dx, line->v1->x-x, line->dy) > 0; + const SDWORD result = DMulScale32 (y-line->v1->y, line->dx, line->v1->x-x, line->dy); + return (compatflags2 & COMPATF2_POINTONLINE) + ? result >= 0 + : result > 0; } //========================================================================== @@ -254,7 +257,10 @@ inline int P_PointOnLineSide (fixed_t x, fixed_t y, const line_t *line) inline int P_PointOnDivlineSide (fixed_t x, fixed_t y, const divline_t *line) { - return DMulScale32 (y-line->y, line->dx, line->x-x, line->dy) > 0; + const SDWORD result = DMulScale32 (y-line->y, line->dx, line->x-x, line->dy); + return (compatflags2 & COMPATF2_POINTONLINE) + ? result >= 0 + : result > 0; } //========================================================================== diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index f15f91dff..b1ca44de7 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -1303,6 +1303,7 @@ OptionMenu "CompatibilityOptions" Option "Find shortest textures like Doom", "compat_SHORTTEX", "YesNo" Option "Use buggier stair building", "compat_stairs", "YesNo" Option "Use Doom's floor motion behavior", "compat_floormove", "YesNo" + Option "Use Doom's point-on-line algorithm", "compat_pointonline", "YesNo" StaticText " " StaticText "Physics Behavior",1 From 39b18a3447c3960c31043dd73ec5f2dbf5e2bcca Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Tue, 15 Sep 2015 18:21:05 +0300 Subject: [PATCH 03/13] Improved point-on-line compatibility feature P_PointOnLineSide() and P_PointOnDivlineSide() functions from the initial Doom source code release are used in compatibility mode --- src/p_local.h | 16 +++++---- src/p_maputl.cpp | 89 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 7 deletions(-) diff --git a/src/p_local.h b/src/p_local.h index 0e06ad72b..cb404eb8c 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -240,10 +240,11 @@ fixed_t P_AproxDistance (fixed_t dx, fixed_t dy); inline int P_PointOnLineSide (fixed_t x, fixed_t y, const line_t *line) { - const SDWORD result = DMulScale32 (y-line->v1->y, line->dx, line->v1->x-x, line->dy); - return (compatflags2 & COMPATF2_POINTONLINE) - ? result >= 0 - : result > 0; + extern int P_VanillaPointOnLineSide(fixed_t x, fixed_t y, const line_t* line); + + return compatflags2 & COMPATF2_POINTONLINE + ? P_VanillaPointOnLineSide(x, y, line) + : DMulScale32 (y-line->v1->y, line->dx, line->v1->x-x, line->dy) > 0; } //========================================================================== @@ -257,10 +258,11 @@ inline int P_PointOnLineSide (fixed_t x, fixed_t y, const line_t *line) inline int P_PointOnDivlineSide (fixed_t x, fixed_t y, const divline_t *line) { - const SDWORD result = DMulScale32 (y-line->y, line->dx, line->x-x, line->dy); + extern int P_VanillaPointOnDivlineSide(fixed_t x, fixed_t y, const divline_t* line); + return (compatflags2 & COMPATF2_POINTONLINE) - ? result >= 0 - : result > 0; + ? P_VanillaPointOnDivlineSide(x, y, line) + : (DMulScale32 (y-line->y, line->dx, line->x-x, line->dy) > 0); } //========================================================================== diff --git a/src/p_maputl.cpp b/src/p_maputl.cpp index 3a4a4c6a0..0a39460e7 100644 --- a/src/p_maputl.cpp +++ b/src/p_maputl.cpp @@ -1523,3 +1523,92 @@ static AActor *RoughBlockCheck (AActor *mo, int index, void *param) } return NULL; } + +//=========================================================================== +// +// P_VanillaPointOnLineSide +// P_PointOnLineSide() from the initial Doom source code release +// +//=========================================================================== + +int P_VanillaPointOnLineSide(fixed_t x, fixed_t y, const line_t* line) +{ + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + + if (!line->dx) + { + if (x <= line->v1->x) + return line->dy > 0; + + return line->dy < 0; + } + if (!line->dy) + { + if (y <= line->v1->y) + return line->dx < 0; + + return line->dx > 0; + } + + dx = (x - line->v1->x); + dy = (y - line->v1->y); + + left = FixedMul ( line->dy>>FRACBITS , dx ); + right = FixedMul ( dy , line->dx>>FRACBITS ); + + if (right < left) + return 0; // front side + return 1; // back side +} + +//=========================================================================== +// +// P_VanillaPointOnDivlineSide +// P_PointOnDivlineSide() from the initial Doom source code release +// +//=========================================================================== + +int P_VanillaPointOnDivlineSide(fixed_t x, fixed_t y, const divline_t* line) +{ + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + + if (!line->dx) + { + if (x <= line->x) + return line->dy > 0; + + return line->dy < 0; + } + if (!line->dy) + { + if (y <= line->y) + return line->dx < 0; + + return line->dx > 0; + } + + dx = (x - line->x); + dy = (y - line->y); + + // try to quickly decide by looking at sign bits + if ( (line->dy ^ line->dx ^ dx ^ dy)&0x80000000 ) + { + if ( (line->dy ^ dx) & 0x80000000 ) + return 1; // (left is negative) + return 0; + } + + left = FixedMul ( line->dy>>8, dx>>8 ); + right = FixedMul ( dy>>8 , line->dx>>8 ); + + if (right < left) + return 0; // front side + return 1; // back side +} + From fea2cb38cc3caf4a71922faf658c3524a19beccc Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Tue, 15 Sep 2015 19:27:05 +0300 Subject: [PATCH 04/13] Fixed compatibility flags comparison for point-on-line Now it works in both cases: for compatibility mode set by user and for internal compatibility handler --- src/p_local.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_local.h b/src/p_local.h index cb404eb8c..95d7541a8 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -242,7 +242,7 @@ inline int P_PointOnLineSide (fixed_t x, fixed_t y, const line_t *line) { extern int P_VanillaPointOnLineSide(fixed_t x, fixed_t y, const line_t* line); - return compatflags2 & COMPATF2_POINTONLINE + return i_compatflags2 & COMPATF2_POINTONLINE ? P_VanillaPointOnLineSide(x, y, line) : DMulScale32 (y-line->v1->y, line->dx, line->v1->x-x, line->dy) > 0; } @@ -260,7 +260,7 @@ inline int P_PointOnDivlineSide (fixed_t x, fixed_t y, const divline_t *line) { extern int P_VanillaPointOnDivlineSide(fixed_t x, fixed_t y, const divline_t* line); - return (compatflags2 & COMPATF2_POINTONLINE) + return (i_compatflags2 & COMPATF2_POINTONLINE) ? P_VanillaPointOnDivlineSide(x, y, line) : (DMulScale32 (y-line->y, line->dx, line->x-x, line->dy) > 0); } From 66437e32f6dec75e5692475ed737547d626bf1e4 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Tue, 15 Sep 2015 19:29:43 +0300 Subject: [PATCH 05/13] Added compatibility setting for Return to Hadron E1M9 See http://forum.zdoom.org/viewtopic.php?f=2&t=49544 --- wadsrc/static/compatibility.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/wadsrc/static/compatibility.txt b/wadsrc/static/compatibility.txt index 6cbe36af4..799168f75 100644 --- a/wadsrc/static/compatibility.txt +++ b/wadsrc/static/compatibility.txt @@ -401,3 +401,8 @@ D0139194F7817BF06F3988DFC47DB38D // Whispers of Satan map29 { nopassover } + +D7F6E9F08C39A17026349A04F8C0B0BE // Return to Hadron, e1m9 +{ + pointonline +} From f4b637db626412dcc3890689fcedb9b2aaeef490 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Tue, 15 Sep 2015 19:30:32 +0300 Subject: [PATCH 06/13] Changed compatibility fix for Nuke Mine E1M2 http://forum.zdoom.org/viewtopic.php?f=7&t=34013 --- wadsrc/static/compatibility.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/wadsrc/static/compatibility.txt b/wadsrc/static/compatibility.txt index 799168f75..3c41f871f 100644 --- a/wadsrc/static/compatibility.txt +++ b/wadsrc/static/compatibility.txt @@ -320,8 +320,7 @@ F481922F4881F74760F3C0437FD5EDD0 // map03 7C1913DEE396BA26CFF22A0E9369B7D2 // Nuke Mine, e1m2 { - clearlinespecial 1107 - clearlinespecial 1108 + pointonline } 5B862477519B21B30059A466F2FF6460 // Khorus, map08 From 6ee0672885b5856899efc6214d3ea203b28f7ac9 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Wed, 16 Sep 2015 13:36:18 +0300 Subject: [PATCH 07/13] Fixed missing hit sound for Heretic weapon Dragon Claw See http://forum.zdoom.org/viewtopic.php?f=2&t=49459 --- wadsrc/static/actors/heretic/hereticweaps.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/wadsrc/static/actors/heretic/hereticweaps.txt b/wadsrc/static/actors/heretic/hereticweaps.txt index 711c3fd29..f0db7caf2 100644 --- a/wadsrc/static/actors/heretic/hereticweaps.txt +++ b/wadsrc/static/actors/heretic/hereticweaps.txt @@ -802,6 +802,7 @@ ACTOR BlasterPuff +NOGRAVITY +PUFFONACTORS RenderStyle Add + SeeSound "weapons/blasterhit" States { Crash: From b2fa4970fd57773f5f3353fa64af6a3480177009 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Wed, 16 Sep 2015 16:13:56 +0300 Subject: [PATCH 08/13] Fixed potential crash in ACS engine Unknown p-code in compiled script may lead to a crash if the current module was changed during script execution, e.g. by function call See http://forum.zdoom.org/viewtopic.php?f=2&t=48524 --- src/p_acs.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/p_acs.cpp b/src/p_acs.cpp index b85ae28e1..f4d148d09 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -6032,6 +6032,7 @@ int DLevelScript::RunScript () int sp = 0; int *pc = this->pc; ACSFormat fmt = activeBehavior->GetFormat(); + FBehavior* const savedActiveBehavior = activeBehavior; unsigned int runaway = 0; // used to prevent infinite loops int pcd; FString work; @@ -6065,6 +6066,7 @@ int DLevelScript::RunScript () { default: Printf ("Unknown P-Code %d in %s\n", pcd, ScriptPresentation(script).GetChars()); + activeBehavior = savedActiveBehavior; // fall through case PCD_TERMINATE: DPrintf ("%s finished\n", ScriptPresentation(script).GetChars()); From 924a2aaaa7e12bf1ddb3fa1991735a4fe1be1e96 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Wed, 16 Sep 2015 16:56:43 +0300 Subject: [PATCH 09/13] Added "support" for PCD_CONSOLECOMMAND in ACS Now attempt to execute a console command from a script will not terminate its execution An error message will be issued in the console on every such attempt --- src/p_acs.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/p_acs.cpp b/src/p_acs.cpp index f4d148d09..63ab71717 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -75,6 +75,7 @@ #include "actorptrselect.h" #include "farchive.h" #include "decallib.h" +#include "version.h" #include "g_shared/a_pickups.h" @@ -9357,6 +9358,10 @@ scriptwait: } break; + case PCD_CONSOLECOMMAND: + Printf (TEXTCOLOR_RED GAMENAME " doesn't support execution of console commands from scripts\n"); + sp -= 3; + break; } } From 4de57cd2967236a31b8206aec2a04c026a8c2b87 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Thu, 17 Sep 2015 10:14:54 +0300 Subject: [PATCH 10/13] Fixed compatibility issues on MAP25 of Eternal Doom See http://forum.zdoom.org/viewtopic.php?f=2&t=49577 --- wadsrc/static/compatibility.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wadsrc/static/compatibility.txt b/wadsrc/static/compatibility.txt index 3c41f871f..1bd031ed8 100644 --- a/wadsrc/static/compatibility.txt +++ b/wadsrc/static/compatibility.txt @@ -55,6 +55,8 @@ A80E7EE40E0D0C76A6FBD242BE29FE27 // map15 { stairs maskedmidtex + corpsegibs + vileghosts } 10E1E2B36302D31AC4AE68C84B5DC457 // Eternal Doom MAP28 @@ -125,7 +127,6 @@ BA530202AF0BA0C6CBAE6A0C7076FB72 // Requiem map04 CBDFEFAC579A62DE8F1B48CA4A09D381 // gather2.wad map05 and darkside.wad map01 C7A2FAFB0AFB2632C50AD625CDB50E51 // Reverie map18 9E5724BC6135AA6F86EE54FD4D91F1E2 // Project X map14 -6DA6FCBA8089161BDEC6A1D3F6C8D60F // Eternal Doom map25 01899825FFEAE016D39C02A7DA4B218F // Archie map01 1D9F3AFDC2517C2E450491ED13896712 // Seej map01 0AE745A3AB86D15FB2FB74489962C421 // 6pack2 map02 From 621116a289d6066889eefd02693b60117795429d Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Fri, 18 Sep 2015 10:53:46 +0300 Subject: [PATCH 11/13] Disabled loading of SDL output plugin for FMOD Ex on OS X Long path to executable file corrupts stack inside FMOD library This plugin is not being built for OS X, output through CoreAudio works just fine --- src/sound/fmodsound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sound/fmodsound.cpp b/src/sound/fmodsound.cpp index 8433b301b..33ca0495d 100644 --- a/src/sound/fmodsound.cpp +++ b/src/sound/fmodsound.cpp @@ -771,7 +771,7 @@ bool FMODSoundRenderer::Init() } #endif -#ifndef _WIN32 +#if !defined _WIN32 && !defined __APPLE__ // Try to load SDL output plugin result = Sys->setPluginPath(progdir); // Should we really look for it in the program directory? result = Sys->loadPlugin("liboutput_sdl.so", &OutputPlugin); From b613db4ae5c05655a93792671b50b41d4b4c80d4 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 18 Sep 2015 17:41:16 +0200 Subject: [PATCH 12/13] Revert "Merge pull request #359 from Leonard2/master" This reverts commit 364ca11b43d8f4cd736506918f5c1fdb63721235, reversing changes made to dae0e217d1f16260c6e94a3d5db5a8dfcf117ecb. Conflicts: src/r_data/r_interpolate.cpp --- src/d_player.h | 1 - src/g_game.cpp | 9 -- src/p_pspr.cpp | 21 ---- src/p_pspr.h | 6 -- src/p_saveg.cpp | 5 - src/p_user.cpp | 15 --- src/r_data/r_interpolate.cpp | 196 +---------------------------------- src/version.h | 2 +- 8 files changed, 4 insertions(+), 251 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 2ac2ad0d5..e27bf1087 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -427,7 +427,6 @@ public: short fixedcolormap; // can be set to REDCOLORMAP, etc. short fixedlightlevel; pspdef_t psprites[NUMPSPRITES]; // view sprites (gun, etc) - TObjPtr pspinterp[NUMPSPRITES]; // view sprite interpolations int morphTics; // player is a chicken/pig if > 0 const PClass *MorphedPlayerClass; // [MH] (for SBARINFO) class # for this player instance when morphed int MorphStyle; // which effects to apply for this player instance when morphed diff --git a/src/g_game.cpp b/src/g_game.cpp index f77949687..8101ca23d 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -1726,15 +1726,6 @@ void G_DoPlayerPop(int playernum) players[playernum].mo = NULL; players[playernum].camera = NULL; } - // Now's the ideal time to remove his psprite interpolations. - for (int ii = 0; ii < NUMPSPRITES; ii++) - { - if (players[playernum].psprites[ii].interpolation != NULL) - { - players[playernum].psprites[ii].StopInterpolation(); - players[playernum].pspinterp[ii] = NULL; - } - } // [RH] Let the scripts know the player left FBehavior::StaticStartTypedScripts(SCRIPT_Disconnect, NULL, true, playernum); } diff --git a/src/p_pspr.cpp b/src/p_pspr.cpp index d2bf8cc87..63f3bc648 100644 --- a/src/p_pspr.cpp +++ b/src/p_pspr.cpp @@ -1104,32 +1104,11 @@ void P_MovePsprites (player_t *player) P_CheckWeaponZoom (player); } } - - psp = &player->psprites[0]; - for (i = 0; i < NUMPSPRITES; i++, psp++) - { - if (psp->state == NULL) - { - if (psp->interpolation != NULL) - { - player->pspinterp[i] = NULL; - psp->StopInterpolation(); - } - } - else if (psp->interpolation == NULL) - { - player->pspinterp[i] = psp->SetInterpolation(player - players, i); - } - } } FArchive &operator<< (FArchive &arc, pspdef_t &def) { arc << def.state << def.tics << def.sx << def.sy << def.sprite << def.frame; - - if (SaveVersion >= 4525) - arc << def.interpolation; - return arc; } diff --git a/src/p_pspr.h b/src/p_pspr.h index 62c2a6fe4..ca9b45ee8 100644 --- a/src/p_pspr.h +++ b/src/p_pspr.h @@ -26,7 +26,6 @@ // Basic data types. // Needs fixed point, and BAM angles. #include "tables.h" -#include "r_data/r_interpolate.h" #include "thingdef/thingdef.h" #define WEAPONBOTTOM 128*FRACUNIT @@ -72,11 +71,6 @@ struct pspdef_t int sprite; int frame; bool processPending; // true: waiting for periodic processing on this tick - - TObjPtr interpolation; - DInterpolation *SetInterpolation(int player, int position); - void UpdateInterpolation(int player); - void StopInterpolation(); }; class FArchive; diff --git a/src/p_saveg.cpp b/src/p_saveg.cpp index f16bdb0f9..480494320 100644 --- a/src/p_saveg.cpp +++ b/src/p_saveg.cpp @@ -297,11 +297,6 @@ static void CopyPlayer (player_t *dst, player_t *src, const char *name) { dst->mo->player = dst; } - // Fix the psprite interpolation pointers too. - for (int i = 0; i < NUMPSPRITES; i++) - { - dst->psprites[i].UpdateInterpolation(dst - players); - } // These 2 variables may not be overwritten. dst->attackdown = attackdown; dst->usedown = usedown; diff --git a/src/p_user.cpp b/src/p_user.cpp index ced6732a3..0d5cdce20 100644 --- a/src/p_user.cpp +++ b/src/p_user.cpp @@ -316,7 +316,6 @@ player_t::player_t() memset (&cmd, 0, sizeof(cmd)); memset (frags, 0, sizeof(frags)); memset (psprites, 0, sizeof(psprites)); - memset (pspinterp, 0, sizeof(pspinterp)); } player_t &player_t::operator=(const player_t &p) @@ -372,7 +371,6 @@ player_t &player_t::operator=(const player_t &p) fixedcolormap = p.fixedcolormap; fixedlightlevel = p.fixedlightlevel; memcpy(psprites, &p.psprites, sizeof(psprites)); - memcpy(pspinterp, &p.pspinterp, sizeof(pspinterp)); morphTics = p.morphTics; MorphedPlayerClass = p.MorphedPlayerClass; MorphStyle = p.MorphStyle; @@ -437,10 +435,6 @@ size_t player_t::FixPointers (const DObject *old, DObject *rep) if (*&ConversationNPC == old) ConversationNPC = replacement, changed++; if (*&ConversationPC == old) ConversationPC = replacement, changed++; if (*&MUSINFOactor == old) MUSINFOactor = replacement, changed++; - - for (int i = 0; i < NUMPSPRITES; i++) - if (*&pspinterp[i] == old) pspinterp[i] = static_cast(rep), changed++; - return changed; } @@ -460,11 +454,6 @@ size_t player_t::PropagateMark() { GC::Mark(PendingWeapon); } - for (int i = 0; i < NUMPSPRITES; i++) - { - GC::Mark(pspinterp[i]); - } - return sizeof(*this); } @@ -3063,11 +3052,7 @@ void player_t::Serialize (FArchive &arc) for (i = 0; i < MAXPLAYERS; i++) arc << frags[i]; for (i = 0; i < NUMPSPRITES; i++) - { arc << psprites[i]; - if (SaveVersion >= 4525) - arc << pspinterp[i]; - } arc << CurrentPlayerClass; diff --git a/src/r_data/r_interpolate.cpp b/src/r_data/r_interpolate.cpp index 6c2221520..3ca3b557c 100644 --- a/src/r_data/r_interpolate.cpp +++ b/src/r_data/r_interpolate.cpp @@ -151,35 +151,6 @@ public: }; -//========================================================================== -// -// -// -//========================================================================== - -class DPSpriteInterpolation : public DInterpolation -{ - DECLARE_CLASS(DPSpriteInterpolation, DInterpolation) - - pspdef_t *psp; - int player, position; - fixed_t oldx, oldy; - fixed_t bakx, baky; - fixed_t ofsx, ofsy; - fixed_t nfsx, nfsy; - -public: - - DPSpriteInterpolation() {} - DPSpriteInterpolation(pspdef_t *psp, int player, int position); - void UpdatePointer(int player); - void Destroy(); - void UpdateInterpolation(); - void Restore(); - void Interpolate(fixed_t smoothratio); - void Serialize(FArchive &arc); -}; - //========================================================================== // // @@ -191,7 +162,6 @@ IMPLEMENT_CLASS(DSectorPlaneInterpolation) IMPLEMENT_CLASS(DSectorScrollInterpolation) IMPLEMENT_CLASS(DWallScrollInterpolation) IMPLEMENT_CLASS(DPolyobjInterpolation) -IMPLEMENT_CLASS(DPSpriteInterpolation) //========================================================================== // @@ -658,6 +628,7 @@ void DSectorScrollInterpolation::Serialize(FArchive &arc) arc << sector << ceiling << oldx << oldy; } + //========================================================================== // // @@ -853,113 +824,6 @@ void DPolyobjInterpolation::Serialize(FArchive &arc) if (arc.IsLoading()) bakverts.Resize(oldverts.Size()); } -//========================================================================== -// -// -// -//========================================================================== - -//========================================================================== -// -// -// -//========================================================================== - -DPSpriteInterpolation::DPSpriteInterpolation(pspdef_t *_psp, int _player, int _position) -: psp(_psp), player(_player), position(_position), - ofsx(0), ofsy(0), nfsx(0), nfsy(0) -{ - UpdateInterpolation (); - interpolator.AddInterpolation(this); -} - -//========================================================================== -// -// -// -//========================================================================== - -void DPSpriteInterpolation::UpdatePointer(int _player) -{ - player = _player; - psp = &players[player].psprites[position]; -} - -//========================================================================== -// -// -// -//========================================================================== - -void DPSpriteInterpolation::Destroy() -{ - psp->interpolation = NULL; - Super::Destroy(); -} - -//========================================================================== -// -// -// -//========================================================================== - -void DPSpriteInterpolation::UpdateInterpolation() -{ - if ( position == ps_weapon ) - P_BobWeapon( &players[player], psp, &ofsx, &ofsy ); - - oldx = psp->sx + ofsx; - oldy = psp->sy + ofsy; -} - -//========================================================================== -// -// -// -//========================================================================== - -void DPSpriteInterpolation::Restore() -{ - psp->sx = bakx - nfsx; - psp->sy = baky - nfsy; -} - -//========================================================================== -// -// -// -//========================================================================== - -void DPSpriteInterpolation::Interpolate(fixed_t smoothratio) -{ - if ( position == ps_weapon ) - P_BobWeapon( &players[player], psp, &nfsx, &nfsy ); - - bakx = psp->sx + nfsx; - baky = psp->sy + nfsy; - - psp->sx = oldx + FixedMul(bakx - oldx, smoothratio) - nfsx; - psp->sy = oldy + FixedMul(baky - oldy, smoothratio) - nfsy; -} - -//========================================================================== -// -// -// -//========================================================================== - -void DPSpriteInterpolation::Serialize(FArchive &arc) -{ - Super::Serialize(arc); - arc << player << position << oldx << oldy << ofsx << ofsy; - UpdatePointer(player); -} - -//========================================================================== -// -// -// -//========================================================================== //========================================================================== // @@ -1080,62 +944,6 @@ void FPolyObj::StopInterpolation() } } -//========================================================================== -// -// -// -//========================================================================== - -DInterpolation *pspdef_t::SetInterpolation(int player, int position) -{ - if (interpolation == NULL) - { - interpolation = new DPSpriteInterpolation(this, player, position); - } - interpolation->AddRef(); - GC::WriteBarrier(interpolation); - return interpolation; -} - -//========================================================================== -// -// -// -//========================================================================== - -void pspdef_t::UpdateInterpolation(int player) -{ - if (interpolation != NULL) - { - barrier_cast(interpolation)->UpdatePointer(player); - } -} - -//========================================================================== -// -// -// -//========================================================================== - -void pspdef_t::StopInterpolation() -{ - if (interpolation != NULL) - { - interpolation->DelRef(); - } -} - -//========================================================================== -// -// -// -//========================================================================== - -//========================================================================== -// -// -// -//========================================================================== ADD_STAT (interpolations) { @@ -1143,3 +951,5 @@ ADD_STAT (interpolations) out.Format ("%d interpolations", interpolator.CountInterpolations ()); return out; } + + diff --git a/src/version.h b/src/version.h index 168cb7519..913c9bd18 100644 --- a/src/version.h +++ b/src/version.h @@ -76,7 +76,7 @@ const char *GetVersionString(); // Use 4500 as the base git save version, since it's higher than the // SVN revision ever got. -#define SAVEVER 4525 +#define SAVEVER 4524 #define SAVEVERSTRINGIFY2(x) #x #define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x) From 98bdbb1ad8c9d7e06a5a7d2ed2e64779b12c097d Mon Sep 17 00:00:00 2001 From: ZzZombo Date: Sat, 19 Sep 2015 09:40:19 +0800 Subject: [PATCH 13/13] -Fixed PCD_DROP affecting script result value. --- src/p_acs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 63ab71717..4e5875836 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -7274,9 +7274,9 @@ int DLevelScript::RunScript () sp--; break; - case PCD_DROP: case PCD_SETRESULTVALUE: resultValue = STACK(1); + case PCD_DROP: //fall through. sp--; break;