diff --git a/src/p_mobj.c b/src/p_mobj.c index 2598cb64d..90bde4fd3 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -12611,7 +12611,12 @@ fixed_t P_GetMapThingSpawnHeight(const mobjtype_t mobjtype, const mapthing_t* mt switch (mobjtype) { // Objects with a non-zero default height. - // (None yet) + // Horizontal springs, float additional units unless args[0] is set. + case MT_YELLOWHORIZ: + case MT_REDHORIZ: + case MT_BLUEHORIZ: + offset += mthing->args[0] ? 0 : 16*FRACUNIT; + break; // Ring-like items, float additional units unless args[0] is set. case MT_SPIKEBALL: @@ -13747,18 +13752,27 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean break; } - case MT_REDDIAG: - case MT_YELLOWDIAG: - case MT_BLUEDIAG: - case MT_GRAYDIAG: case MT_REDSPRING: case MT_BLUESPRING: case MT_GRAYSPRING: case MT_YELLOWSPRING: case MT_INVISSPRING: { - if (mapnamespace == MNS_SRB2KART) - mobj->flags ^= MF_NOGRAVITY; + if (mthing->args[0] & TMSPR_NOGRAVITY) + mobj->gravity = 0; + break; + } + case MT_YELLOWDIAG: + case MT_REDDIAG: + case MT_BLUEDIAG: + case MT_GRAYDIAG: + { + mobj->angle = FixedAngle(mthing->angle << FRACBITS); + if (mthing->args[0] & TMSPR_NOGRAVITY) + mobj->gravity = 0; + if (mthing->args[0] & TMSPR_ROTATEEXTRA) + mobj->angle += ANGLE_22h; + *doangle = false; break; } case MT_DASHRING: diff --git a/src/p_setup.c b/src/p_setup.c index 19399823f..85d86ae6b 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -7350,9 +7350,9 @@ static void P_ConvertBinaryThingTypes(void) case 557: //Diagonal blue spring case 558: //Diagonal grey spring if (mapthings[i].options & MTF_OBJECTSPECIAL) - mapthings[i].args[0] |= TMDS_NOGRAVITY; + mapthings[i].args[0] |= TMSPR_NOGRAVITY; if (mapthings[i].options & MTF_AMBUSH) - mapthings[i].args[0] |= TMDS_ROTATEEXTRA; + mapthings[i].args[0] |= TMSPR_ROTATEEXTRA; break; case 559: //Horizontal yellow spring case 560: //Horizontal red spring @@ -7971,23 +7971,50 @@ static void P_RemapDoomedNum(boolean mappatch) TYPECONVERT(MT_BLUEHORIZ, 560) TYPECONVERT(MT_GRAYDIAG, 557) TYPECONVERT(MT_GRAYHORIZ, 561) + TYPECONVERT(MT_SNEAKERPANEL, 510) + TYPECONVERT(MT_SNEAKERPANELSPAWNER, 511) + TYPECONVERT(MT_DASHRING, 3441) + TYPECONVERT(MT_RAINBOWDASHRING, 3442) } - TYPECONVERT(MT_SNEAKERPANEL, 510) - TYPECONVERT(MT_SNEAKERPANELSPAWNER, 511) TYPECONVERT(MT_WAYPOINT_RISER, 2002) TYPECONVERT(MT_WAYPOINT_ANCHOR, 2003) TYPECONVERT(MT_BOTHINT, 2004) TYPECONVERT(MT_ITEMCAPSULE, 2010) TYPECONVERT(MT_LOOPENDPOINT, 2020) TYPECONVERT(MT_LOOPCENTERPOINT, 2021) - TYPECONVERT(MT_DASHRING, 3441) - TYPECONVERT(MT_RAINBOWDASHRING, 3442) TYPECONVERT(MT_SCRIPT_THING, 4096) } #undef TYPECONVERT } +static void P_SetCompatArgs(void) +{ + if (mapnamespace != MNS_RINGRACERS) + return; + size_t i; + + for (i = 0; i < nummapthings; i++) + { + switch(mapthings[i].type) + { + case MT_YELLOWDIAG: + case MT_REDDIAG: + case MT_BLUEDIAG: + case MT_GRAYDIAG: + case MT_REDSPRING: + case MT_BLUESPRING: + case MT_GRAYSPRING: + case MT_YELLOWSPRING: + case MT_INVISSPRING: + mapthings[i].args[0] |= TMSPR_NOGRAVITY; + break; + default: + break; + } + } +} + static boolean P_LoadMapFromFile(void) { TracyCZone(__zone, true); @@ -8013,6 +8040,9 @@ static boolean P_LoadMapFromFile(void) // Should allow for textmap conversion of things making it easier for people to convert their RR maps. P_RemapDoomedNum(false); + // Now set some arguments used for compatbility. + P_SetCompatArgs(); + if (!udmf) P_AddBinaryMapTags(); diff --git a/src/p_spec.h b/src/p_spec.h index 276ba4e32..4e5af5c00 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -118,9 +118,9 @@ typedef enum typedef enum { - TMDS_NOGRAVITY = 1, - TMDS_ROTATEEXTRA = 1<<1, -} textmapdiagonalspringflags_t; + TMSPR_NOGRAVITY = 1, + TMSPR_ROTATEEXTRA = 1<<1, +} textmapspringflags_t; typedef enum {