Fix slope spawning; let polyobjects spawn again

Move P_SpawnMapThings before P_SpawnSpecialsThatRequireObjects.

Do not remove special from lines with ML_NETONLY or ML_NONET until after
slopes are spawned.
This commit is contained in:
James R 2020-09-25 13:32:14 -07:00
parent 285ec3e08c
commit 3cad7398f0
3 changed files with 55 additions and 38 deletions

View file

@ -3986,11 +3986,12 @@ boolean P_LoadLevel(boolean fromnetsave)
P_SpawnSlopes(fromnetsave); P_SpawnSlopes(fromnetsave);
P_RaiseThings(); P_SpawnSpecialsAfterSlopes();
P_SpawnMapThings(!fromnetsave);
P_SpawnSpecialsThatRequireObjects(); P_SpawnSpecialsThatRequireObjects();
P_SpawnMapThings(!fromnetsave);
skyboxmo[0] = skyboxviewpnts[0]; skyboxmo[0] = skyboxviewpnts[0];
skyboxmo[1] = skyboxcenterpnts[0]; skyboxmo[1] = skyboxcenterpnts[0];

View file

@ -5545,26 +5545,6 @@ P_RaiseTaggedThingsToFakeFloor (
} }
} }
void
P_RaiseThings (void)
{
size_t i;
for (i = 0; i < numlines; ++i)
{
switch (lines[i].special)
{
case 80: // Raise tagged things by type to this FOF
P_RaiseTaggedThingsToFakeFloor(
( sides[lines[i].sidenum[0]].textureoffset >> FRACBITS ),
lines[i].tag,
lines[i].frontsector
);
break;
}
}
}
// //
// SPECIAL SPAWNING // SPECIAL SPAWNING
// //
@ -5953,6 +5933,26 @@ static void P_ApplyFlatAlignment(line_t *master, sector_t *sector, angle_t flata
} }
} }
static boolean P_IsLineDisabled (const line_t * line)
{
if (line->special != 7) // This is a hack. I can at least hope nobody wants to prevent flat alignment in netgames...
{
if (netgame || multiplayer)
{
if (line->flags & ML_NONET)
{
return true;
}
}
else if (line->flags & ML_NETONLY)
{
return true;
}
}
return false;
}
/** After the map has loaded, scans for specials that spawn 3Dfloors and /** After the map has loaded, scans for specials that spawn 3Dfloors and
* thinkers. * thinkers.
* *
@ -5973,6 +5973,8 @@ void P_SpawnSpecials(boolean fromnetsave)
// but currently isn't. // but currently isn't.
(void)fromnetsave; (void)fromnetsave;
CONS_Printf("%d\n", sectors[11].floorheight);
// yep, we do this here - "bossdisabled" is considered an apparatus of specials. // yep, we do this here - "bossdisabled" is considered an apparatus of specials.
bossdisabled = 0; bossdisabled = 0;
stoppedclock = false; stoppedclock = false;
@ -6070,23 +6072,10 @@ void P_SpawnSpecials(boolean fromnetsave)
// Init line EFFECTs // Init line EFFECTs
for (i = 0; i < numlines; i++) for (i = 0; i < numlines; i++)
{ {
if (lines[i].special != 7) // This is a hack. I can at least hope nobody wants to prevent flat alignment in netgames... if (P_IsLineDisabled(&lines[i]))
{ {
// set line specials to 0 here too, same reason as above
if (netgame || multiplayer)
{
if (lines[i].flags & ML_NONET)
{
lines[i].special = 0;
continue; continue;
} }
}
else if (lines[i].flags & ML_NETONLY)
{
lines[i].special = 0;
continue;
}
}
switch (lines[i].special) switch (lines[i].special)
{ {
@ -6987,6 +6976,33 @@ void P_SpawnSpecialsThatRequireObjects(void)
P_RunLevelLoadExecutors(); P_RunLevelLoadExecutors();
} }
/** Fuck ML_NONET
*/
void P_SpawnSpecialsAfterSlopes(void)
{
size_t i;
for (i = 0; i < numlines; ++i)
{
if (P_IsLineDisabled(&lines[i]))
{
/* remove the special so it can't even be found during the level */
lines[i].special = 0;
}
switch (lines[i].special)
{
case 80: // Raise tagged things by type to this FOF
P_RaiseTaggedThingsToFakeFloor(
( sides[lines[i].sidenum[0]].textureoffset >> FRACBITS ),
lines[i].tag,
lines[i].frontsector
);
break;
}
}
}
/** Adds 3Dfloors as appropriate based on a common control linedef. /** Adds 3Dfloors as appropriate based on a common control linedef.
* *
* \param line Control linedef to use. * \param line Control linedef to use.

View file

@ -43,7 +43,7 @@ void P_SetupLevelFlatAnims(void);
// at map load // at map load
void P_InitSpecials(void); void P_InitSpecials(void);
void P_SpawnSpecials(boolean fromnetsave); void P_SpawnSpecials(boolean fromnetsave);
void P_RaiseThings(void); void P_SpawnSpecialsAfterSlopes(void);
void P_SpawnSpecialsThatRequireObjects(void); void P_SpawnSpecialsThatRequireObjects(void);
// every tic // every tic