Adjustments to how springs work for customization

Springs are now have gravity by default and that gets inverted if arg0 is set with flag TMSPR_NOGRAVITY
This commit is contained in:
NepDisk 2025-11-20 09:45:14 -05:00
parent 4610034752
commit 2474569652
3 changed files with 60 additions and 16 deletions

View file

@ -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:

View file

@ -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();

View file

@ -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
{