Merge branch 'camera-subsector-crash-fix' into 'master'

Camera subsector crash fix

See merge request STJr/SRB2!318
This commit is contained in:
Monster Iestyn 2018-11-18 08:28:38 -05:00
commit a400bb9ef6

View file

@ -2477,6 +2477,43 @@ static void P_LoadNightsGhosts(void)
free(gpath);
}
static void P_SetupCamera(void)
{
if (players[displayplayer].mo && (server || addedtogame))
{
camera.x = players[displayplayer].mo->x;
camera.y = players[displayplayer].mo->y;
camera.z = players[displayplayer].mo->z;
camera.angle = players[displayplayer].mo->angle;
camera.subsector = R_PointInSubsector(camera.x, camera.y); // make sure camera has a subsector set -- Monster Iestyn (12/11/18)
}
else
{
mapthing_t *thing;
switch (gametype)
{
case GT_MATCH:
case GT_TAG:
thing = deathmatchstarts[0];
break;
default:
thing = playerstarts[0];
break;
}
if (thing)
{
camera.x = thing->x;
camera.y = thing->y;
camera.z = thing->z;
camera.angle = FixedAngle((fixed_t)thing->angle << FRACBITS);
camera.subsector = R_PointInSubsector(camera.x, camera.y); // make sure camera has a subsector set -- Monster Iestyn (12/11/18)
}
}
}
/** Loads a level from a lump or external wad.
*
* \param skipprecip If true, don't spawn precipitation.
@ -2814,37 +2851,7 @@ boolean P_SetupLevel(boolean skipprecip)
if (!dedicated)
{
if (players[displayplayer].mo && (server || addedtogame))
{
camera.x = players[displayplayer].mo->x;
camera.y = players[displayplayer].mo->y;
camera.z = players[displayplayer].mo->z;
camera.angle = players[displayplayer].mo->angle;
}
else
{
mapthing_t *thing;
switch (gametype)
{
case GT_MATCH:
case GT_TAG:
thing = deathmatchstarts[0];
break;
default:
thing = playerstarts[0];
break;
}
if (thing)
{
camera.x = thing->x;
camera.y = thing->y;
camera.z = thing->z;
camera.angle = FixedAngle((fixed_t)thing->angle << FRACBITS);
}
}
P_SetupCamera();
if (!cv_cam_height.changed)
CV_Set(&cv_cam_height, cv_cam_height.defaultvalue);