From aa80132976397f500a482e32bcf89b59f9d7bb4b Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 4 May 2020 17:33:43 -0700 Subject: [PATCH 1/8] Let Waypoint Anchors apply to multiple waypoints with the same ID --- src/k_waypoint.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/k_waypoint.c b/src/k_waypoint.c index f32cf68b0..d320d4a19 100644 --- a/src/k_waypoint.c +++ b/src/k_waypoint.c @@ -1937,8 +1937,7 @@ void K_AdjustWaypointsParameters (void) waypointmobj; waypointmobj = waypointmobj->tracer ){ - if (K_AnchorWaypointRadius(waypointmobj, anchor)) - break; + K_AnchorWaypointRadius(waypointmobj, anchor); } } } From e2d4ddcec2dddad5b103c272e7db8b6832f3e287 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 4 May 2020 17:39:11 -0700 Subject: [PATCH 2/8] SOC: DefaultWaypointRadius in the level header picardy --- src/dehacked.c | 2 ++ src/doomstat.h | 1 + src/k_waypoint.h | 2 ++ src/p_mobj.c | 2 +- src/p_setup.c | 2 ++ 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/dehacked.c b/src/dehacked.c index db94c5227..37a8d1766 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1305,6 +1305,8 @@ static void readlevelheader(MYFILE *f, INT32 num) }*/ else if (fastcmp(word, "MOBJSCALE")) mapheaderinfo[num-1]->mobj_scale = get_number(word2); + else if (fastcmp(word, "DEFAULTWAYPOINTRADIUS")) + mapheaderinfo[num-1]->default_waypoint_radius = get_number(word2); // Individual triggers for level flags, for ease of use (and 2.0 compatibility) else if (fastcmp(word, "SCRIPTISFILE")) diff --git a/src/doomstat.h b/src/doomstat.h index 9464385ea..fcb99b507 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -290,6 +290,7 @@ typedef struct // SRB2kart //boolean automap; ///< Displays a level's white map outline in modified games fixed_t mobj_scale; ///< Replacement for TOL_ERZ3 + fixed_t default_waypoint_radius; // Music stuff. UINT32 musinterfadeout; ///< Fade out level music on intermission screen in milliseconds diff --git a/src/k_waypoint.h b/src/k_waypoint.h index 0017c443e..b34527b6f 100644 --- a/src/k_waypoint.h +++ b/src/k_waypoint.h @@ -18,6 +18,8 @@ #include "p_mobj.h" #include "k_pathfind.h" +#define DEFAULT_WAYPOINT_RADIUS (384*FRACUNIT) + typedef struct waypoint_s { mobj_t *mobj; diff --git a/src/p_mobj.c b/src/p_mobj.c index 1a7c562a7..57ef4a426 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -12667,7 +12667,7 @@ ML_NOCLIMB : Direction not controllable { // Just like MT_SPINMACEPOINT, this now works here too! INT32 line = P_FindSpecialLineFromTag(2000, mthing->angle, -1); - mobj->radius = 384*FRACUNIT; + mobj->radius = mapheaderinfo[gamemap-1]->default_waypoint_radius; // Set the radius, mobj z, and mthing z to match what the parameters want if (line != -1) { diff --git a/src/p_setup.c b/src/p_setup.c index 0708379ed..459160bd6 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -258,6 +258,8 @@ static void P_ClearSingleMapHeaderInfo(INT16 i) //mapheaderinfo[num]->automap = false; DEH_WriteUndoline("MOBJSCALE", va("%d", mapheaderinfo[num]->mobj_scale), UNDO_NONE); mapheaderinfo[num]->mobj_scale = FRACUNIT; + DEH_WriteUndoline("DEFAULTWAYPOINTRADIUS", va("%d", mapheaderinfo[num]->default_waypoint_radius), UNDO_NONE); + mapheaderinfo[num]->default_waypoint_radius = DEFAULT_WAYPOINT_RADIUS; // an even further impossibility, delfile custom opts support mapheaderinfo[num]->customopts = NULL; mapheaderinfo[num]->numCustomOptions = 0; From 7c9824dc5645372539d66bbf1794762e4a2e83a8 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 4 May 2020 17:54:43 -0700 Subject: [PATCH 3/8] Multiply the default radius of 384 by mobjscale, but not user set radiuses --- src/doomstat.h | 2 +- src/k_waypoint.h | 2 +- src/p_mobj.c | 10 +++++++++- src/p_setup.c | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/doomstat.h b/src/doomstat.h index fcb99b507..3043df8e1 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -290,7 +290,7 @@ typedef struct // SRB2kart //boolean automap; ///< Displays a level's white map outline in modified games fixed_t mobj_scale; ///< Replacement for TOL_ERZ3 - fixed_t default_waypoint_radius; + fixed_t default_waypoint_radius; ///< 0 is a special value for DEFAULT_WAYPOINT_RADIUS, but scaled with mobjscale // Music stuff. UINT32 musinterfadeout; ///< Fade out level music on intermission screen in milliseconds diff --git a/src/k_waypoint.h b/src/k_waypoint.h index b34527b6f..41230b49b 100644 --- a/src/k_waypoint.h +++ b/src/k_waypoint.h @@ -18,7 +18,7 @@ #include "p_mobj.h" #include "k_pathfind.h" -#define DEFAULT_WAYPOINT_RADIUS (384*FRACUNIT) +#define DEFAULT_WAYPOINT_RADIUS (384) typedef struct waypoint_s { diff --git a/src/p_mobj.c b/src/p_mobj.c index 57ef4a426..a628c8325 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -12665,9 +12665,17 @@ ML_NOCLIMB : Direction not controllable break; case MT_WAYPOINT: { + const fixed_t mobjscale = + mapheaderinfo[gamemap-1]->default_waypoint_radius; + // Just like MT_SPINMACEPOINT, this now works here too! INT32 line = P_FindSpecialLineFromTag(2000, mthing->angle, -1); - mobj->radius = mapheaderinfo[gamemap-1]->default_waypoint_radius; + + if (mobjscale == 0) + mobj->radius = DEFAULT_WAYPOINT_RADIUS * mapobjectscale; + else + mobj->radius = mobjscale; + // Set the radius, mobj z, and mthing z to match what the parameters want if (line != -1) { diff --git a/src/p_setup.c b/src/p_setup.c index 459160bd6..ddd11eac4 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -259,7 +259,7 @@ static void P_ClearSingleMapHeaderInfo(INT16 i) DEH_WriteUndoline("MOBJSCALE", va("%d", mapheaderinfo[num]->mobj_scale), UNDO_NONE); mapheaderinfo[num]->mobj_scale = FRACUNIT; DEH_WriteUndoline("DEFAULTWAYPOINTRADIUS", va("%d", mapheaderinfo[num]->default_waypoint_radius), UNDO_NONE); - mapheaderinfo[num]->default_waypoint_radius = DEFAULT_WAYPOINT_RADIUS; + mapheaderinfo[num]->default_waypoint_radius = 0; // an even further impossibility, delfile custom opts support mapheaderinfo[num]->customopts = NULL; mapheaderinfo[num]->numCustomOptions = 0; From 347b9bfc5c7bb765df977fe982aeea29a5e94662 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 10 May 2020 02:41:35 -0400 Subject: [PATCH 4/8] Low water gravity only applies going up --- src/p_mobj.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 1a7c562a7..676709e32 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1248,29 +1248,38 @@ fixed_t P_GetMobjGravity(mobj_t *mo) } // Less gravity underwater. - if (mo->eflags & MFE_UNDERWATER && !goopgravity) + if ((mo->eflags & MFE_UNDERWATER) && !goopgravity && mo->momz > 0) + { gravityadd = gravityadd/3; + } if (mo->player) { - //if ((mo->player->pflags & PF_GLIDING) - //|| (mo->player->charability == CA_FLY && (mo->player->powers[pw_tailsfly] - // || (mo->state >= &states[S_PLAY_SPC1] && mo->state <= &states[S_PLAY_SPC4])))) - // gravityadd = gravityadd/3; // less gravity while flying/gliding if (mo->player->climbing || (mo->player->pflags & PF_NIGHTSMODE)) + { return 0; + } if (!(mo->flags2 & MF2_OBJECTFLIP) != !(mo->player->powers[pw_gravityboots])) // negated to turn numeric into bool - would be double negated, but not needed if both would be { gravityadd = -gravityadd; mo->eflags ^= MFE_VERTICALFLIP; } + if (wasflip == !(mo->eflags & MFE_VERTICALFLIP)) // note!! == ! is not equivalent to != here - turns numeric into bool this way + { P_PlayerFlip(mo); + } + if (mo->player->kartstuff[k_pogospring]) + { gravityadd = (5*gravityadd)/2; + } + if (mo->player->kartstuff[k_waterskip]) + { gravityadd = (4*gravityadd)/3; + } } else { @@ -1278,10 +1287,15 @@ fixed_t P_GetMobjGravity(mobj_t *mo) if (mo->flags2 & MF2_OBJECTFLIP) { mo->eflags |= MFE_VERTICALFLIP; + if (mo->z + mo->height >= mo->ceilingz) + { gravityadd = 0; + } else if (gravityadd < 0) // Don't sink, only rise up - gravityadd *= -1; + { + gravityadd = -gravityadd; + } } else //Otherwise, sort through the other exceptions. { @@ -1316,7 +1330,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) } break; case MT_WATERDROP: - gravityadd >>= 1; + gravityadd /= 2; break; case MT_BANANA: case MT_EGGMANITEM: @@ -1341,7 +1355,9 @@ fixed_t P_GetMobjGravity(mobj_t *mo) // Goop has slower, reversed gravity if (goopgravity) + { gravityadd = -gravityadd/5; + } gravityadd = FixedMul(gravityadd, mo->scale); From 2d7113ac2cd34073e80dd06c822fc59a23f2cba2 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 10 May 2020 02:42:05 -0400 Subject: [PATCH 5/8] Ice physics when touching/underwater --- src/k_kart.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 2a672af13..b4fdc4fef 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7900,6 +7900,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground) if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0) player->mo->friction += 1228; + if (player->mo->eflags & (MFE_UNDERWATER|MFE_TOUCHWATER)) + player->mo->friction += 614; + // Wipeout slowdown if (player->kartstuff[k_spinouttimer] && player->kartstuff[k_wipeoutslow]) { From f11751bf8f32037af6927e0808678992096409e6 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 10 May 2020 03:18:41 -0400 Subject: [PATCH 6/8] Stronger turning while underwater --- src/k_kart.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index b4fdc4fef..63eedd917 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6745,6 +6745,11 @@ static INT16 K_GetKartDriftValue(player_t *player, fixed_t countersteer) basedrift += (basedrift / greasetics) * player->kartstuff[k_tiregrease]; } + if (player->mo->eflags & (MFE_UNDERWATER|MFE_TOUCHWATER)) + { + countersteer = 3*countersteer/2; + } + return basedrift + (FixedMul(driftadjust * FRACUNIT, countersteer) / FRACUNIT); } @@ -6780,6 +6785,11 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue) turnvalue = 5*turnvalue/4; } + if (player->mo->eflags & (MFE_UNDERWATER|MFE_TOUCHWATER)) + { + turnvalue = 3*turnvalue/2; + } + turnvalue = FixedMul(turnvalue * FRACUNIT, weightadjust) / FRACUNIT; // Weight has a small effect on turning return turnvalue; From 393c63795402350a7b26dd080fab592a59e394c1 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 10 May 2020 03:19:21 -0400 Subject: [PATCH 7/8] Gravity is higher underwater when going down --- src/p_mobj.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 676709e32..a13112ae5 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1248,9 +1248,16 @@ fixed_t P_GetMobjGravity(mobj_t *mo) } // Less gravity underwater. - if ((mo->eflags & MFE_UNDERWATER) && !goopgravity && mo->momz > 0) + if ((mo->eflags & MFE_UNDERWATER) && !goopgravity) { - gravityadd = gravityadd/3; + if (mo->momz <= 0) + { + gravityadd = 4*gravityadd/3; + } + else + { + gravityadd = gravityadd/3; + } } if (mo->player) From b51f206c1cb5fb3c0d5f9d93684cebc68502197a Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Thu, 14 May 2020 18:45:54 -0400 Subject: [PATCH 8/8] Support antigrav --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index a13112ae5..03875975f 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1250,7 +1250,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) // Less gravity underwater. if ((mo->eflags & MFE_UNDERWATER) && !goopgravity) { - if (mo->momz <= 0) + if (mo->momz * P_MobjFlip(mo) <= 0) { gravityadd = 4*gravityadd/3; }