diff --git a/.travis.yml b/.travis.yml index 956ed21cfc..6962cbaffe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ matrix: - CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=Debug -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9" - os: osx - osx_image: xcode9.4 + osx_image: xcode10 env: - CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9" diff --git a/src/p_teleport.cpp b/src/p_teleport.cpp index 2bb71f82b7..78f21b741f 100644 --- a/src/p_teleport.cpp +++ b/src/p_teleport.cpp @@ -523,18 +523,21 @@ bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBO // Is this really still necessary with real math instead of imprecise trig tables? #if 1 + const double fudgeamount = 1. / 65536.; + int side = reverse || (player && stepdown); int fudge = FUDGEFACTOR; double dx = line->Delta().X; double dy = line->Delta().Y; + // Make sure we are on correct side of exit linedef. while (P_PointOnLineSidePrecise(p, l) != side && --fudge >= 0) { if (fabs(dx) > fabs(dy)) - p.Y -= (dx < 0) != side ? -1 : 1; + p.Y -= (dx < 0) != side ? -fudgeamount : fudgeamount; else - p.X += (dy < 0) != side ? -1 : 1; + p.X += (dy < 0) != side ? -fudgeamount : fudgeamount; } #endif diff --git a/src/r_data/models/models_md3.cpp b/src/r_data/models/models_md3.cpp index f47ee90cd6..b3f12b853c 100644 --- a/src/r_data/models/models_md3.cpp +++ b/src/r_data/models/models_md3.cpp @@ -363,7 +363,10 @@ void FMD3Model::RenderFrame(FModelRenderer *renderer, FTexture * skin, int frame surfaceSkin = TexMan(surf->skins[0]); } - if (!surfaceSkin) return; + if (!surfaceSkin) + { + continue; + } } renderer->SetMaterial(surfaceSkin, false, translation); diff --git a/src/version.h b/src/version.h index e014d54ed9..61c6ceff8e 100644 --- a/src/version.h +++ b/src/version.h @@ -48,16 +48,16 @@ const char *GetVersionString(); #ifdef GIT_DESCRIPTION #define VERSIONSTR GIT_DESCRIPTION #else -#define VERSIONSTR "3.6pre" +#define VERSIONSTR "3.7pre" #endif // The version as seen in the Windows resource -#define RC_FILEVERSION 3,5,9999,0 -#define RC_PRODUCTVERSION 3,5,9999,0 +#define RC_FILEVERSION 3,6,9999,0 +#define RC_PRODUCTVERSION 3,6,9999,0 #define RC_PRODUCTVERSION2 VERSIONSTR // These are for content versioning. #define VER_MAJOR 3 -#define VER_MINOR 6 +#define VER_MINOR 7 #define VER_REVISION 0 // Version identifier for network games. diff --git a/wadsrc/static/shaders/glsl/main.fp b/wadsrc/static/shaders/glsl/main.fp index 228d7b02d8..f096d0dd7d 100644 --- a/wadsrc/static/shaders/glsl/main.fp +++ b/wadsrc/static/shaders/glsl/main.fp @@ -451,7 +451,7 @@ vec3 AmbientOcclusionColor() // if (uFogEnabled == -1) { - fogdist = pixelpos.w; + fogdist = max(16.0, pixelpos.w); } else { @@ -489,7 +489,7 @@ void main() { if (uFogEnabled == 1 || uFogEnabled == -1) { - fogdist = pixelpos.w; + fogdist = max(16.0, pixelpos.w); } else { diff --git a/wadsrc/static/zscript/hexen/spike.txt b/wadsrc/static/zscript/hexen/spike.txt index cb8df17e27..a411dbf3f6 100644 --- a/wadsrc/static/zscript/hexen/spike.txt +++ b/wadsrc/static/zscript/hexen/spike.txt @@ -179,26 +179,29 @@ class ThrustFloor : Actor while (it.Next()) { let targ = it.thing; - double blockdist = radius + it.thing.radius; - if (abs(targ.pos.x - it.Position.X) >= blockdist || abs(targ.pos.y - it.Position.Y) >= blockdist) - continue; - - // Q: Make this z-aware for everything? It never was before. - if (targ.pos.z + targ.height < pos.z || targ.pos.z > pos.z + height) + if (targ != null) { - if (CurSector.PortalGroup != targ.CurSector.PortalGroup) + double blockdist = radius + targ.radius; + if (abs(targ.pos.x - it.Position.X) >= blockdist || abs(targ.pos.y - it.Position.Y) >= blockdist) continue; + + // Q: Make this z-aware for everything? It never was before. + if (targ.pos.z + targ.height < pos.z || targ.pos.z > pos.z + height) + { + if (CurSector.PortalGroup != targ.CurSector.PortalGroup) + continue; + } + + if (!targ.bShootable) + continue; + + if (targ == self) + continue; // don't clip against self + + int newdam = targ.DamageMobj (self, self, 10001, 'Crush'); + targ.TraceBleed (newdam > 0 ? newdam : 10001, null); + args[1] = 1; // Mark thrust thing as bloody } - - if (!targ.bShootable) - continue; - - if (targ == self) - continue; // don't clip against self - - int newdam = targ.DamageMobj (self, self, 10001, 'Crush'); - targ.TraceBleed (newdam > 0 ? newdam : 10001, null); - args[1] = 1; // Mark thrust thing as bloody } } } diff --git a/wadsrc/static/zscript/level_compatibility.txt b/wadsrc/static/zscript/level_compatibility.txt index a932a0b185..7bc2b017a5 100644 --- a/wadsrc/static/zscript/level_compatibility.txt +++ b/wadsrc/static/zscript/level_compatibility.txt @@ -605,6 +605,28 @@ class LevelCompatibility play } break; } + + case '57386AEF275684BA06756359B08F4391': // Perdition's Gate MAP03 + { + // Stairs where one sector is too thin to score. + SetSectorSpecial(227, 0); + break; + } + + case 'F1A9938C4FC3906A582AB7D5088B5F87': // Perdition's Gate MAP12 + { + // Sector unintentionally left as a secret near switch + SetSectorSpecial(112, 0); + break; + } + + case '5C419E581D9570F44A24163A83032086': // Perdition's Gate MAP27 + { + // Sectors unintentionally left as secrets and cannot be scored + SetSectorSpecial(338, 0); + SetSectorSpecial(459, 0); + break; + } case 'FCCA97FC851F6473EAA069F74247B317': // pg-raw.wad map31 { @@ -621,8 +643,59 @@ class LevelCompatibility play break; } - case '712BB4CFBD0753178CA0C6814BE4C288': // beta version of map12 BTSX_E1 - patch some rendering glitches that are problematic to detect + case '5379C080299EB961792B50AD96821543': // Hell to Pay MAP14 { + // Two secrets are unreachable without jumping and crouching. + SetSectorSpecial(82, 0); + SetSectorSpecial(83, 0); + break; + } + + case '7837B5334A277F107515D649BCEFB682': // Hell to Pay MAP22 + { + // Four enemies (six if multiplayer) never spawn in the map, + // so the lines closest to them should teleport them instead. + SetLineSpecial(1835, Teleport, 0, 40); + SetLineActivation(1835, SPAC_MCross); + SetLineFlags(1835, Line.ML_REPEAT_SPECIAL); + + SetLineSpecial(1847, Teleport, 0, 40); + SetLineActivation(1847, SPAC_MCross); + SetLineFlags(1847, Line.ML_REPEAT_SPECIAL); + break; + } + + case '1A1AB6415851B9F17715A0C36412752E': // Hell to Pay MAP24 + { + // Remove Chaingunner far below the map, making 100% kills + // impractical. + SetThingFlags(70, 0); + break; + } + + case 'A7ACB57A2CAF17434D0DFE0FAC0E0480': // Hell to Pay MAP28 + { + // Three Lost Souls placed outside the map for some reason. + for(int i=0; i<3; i++) + { + SetThingFlags(217+i, 0); + } + break; + } + + case '2F1A18633C30E938B50B6D928C730CB6': // Hell to Pay MAP29 + { + // Three Lost Souls placed outside the map, again... + for(int i=0; i<3; i++) + { + SetThingFlags(239+i, 0); + } + break; + } + + case '712BB4CFBD0753178CA0C6814BE4C288': // beta version of map12 BTSX_E1 + { + // patch some rendering glitches that are problematic to detect AddSectorTag(545, 32000); AddSectorTag(1618, 32000); SetLineSpecial(2853, Sector_Set3DFloor, 32000, 4);