From e85f73117cfa29e8e3af8ee8b4ac2511544ac87c Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Mon, 12 Nov 2018 20:07:45 +0000 Subject: [PATCH] Split camera initialisation code from P_SetupLevel, make sure the camera has an initial subsector set! --- src/p_setup.c | 69 ++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/src/p_setup.c b/src/p_setup.c index f00781a5..9f3ff423 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -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);