diff --git a/src/dehacked.c b/src/dehacked.c index 53fb25253..5e50f9a12 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1164,6 +1164,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 66fd530d5..78f412d1a 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; ///< 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.c b/src/k_waypoint.c index 1faf3b4cb..69b488dd6 100644 --- a/src/k_waypoint.c +++ b/src/k_waypoint.c @@ -1967,8 +1967,7 @@ void K_AdjustWaypointsParameters (void) waypointmobj; waypointmobj = waypointmobj->tracer ){ - if (K_AnchorWaypointRadius(waypointmobj, anchor)) - break; + K_AnchorWaypointRadius(waypointmobj, anchor); } } } diff --git a/src/k_waypoint.h b/src/k_waypoint.h index 0017c443e..41230b49b 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) + typedef struct waypoint_s { mobj_t *mobj; diff --git a/src/p_mobj.c b/src/p_mobj.c index 305e83d8a..cac8c7f0d 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 = 384 * mapobjectscale; + + 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 b2d14b456..84b1586e7 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -260,6 +260,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 = 0; // an even further impossibility, delfile custom opts support mapheaderinfo[num]->customopts = NULL; mapheaderinfo[num]->numCustomOptions = 0;