diff --git a/src/hu_stuff.c b/src/hu_stuff.c index cf7118fbe0694c206a2d26497196f2cc81d5787f..281280c9b396f7b837b1b90d3578055e97938c61 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -1863,64 +1863,25 @@ static void HU_DrawChat_Old(void) } #endif -// draw the Crosshair, at the exact center of the view. -// +// Draw crosshairs at the exact center of the view. +// In splitscreen, crosshairs are stretched vertically to compensate for V_PERPLAYER squishing them. // Crosshairs are pre-cached at HU_Init -static inline void HU_DrawCrosshair(void) +static inline void HU_DrawCrosshairs(void) { - INT32 i, y, dupz; - - i = cv_crosshair.value & 3; - if (!i) - return; + INT32 cross1 = cv_crosshair.value & 3; + INT32 cross2 = cv_crosshair2.value & 3; - if ((netgame || multiplayer) && players[displayplayer].spectator) + if (automapactive || demoplayback) return; -#ifdef HWRENDER - if (rendermode != render_soft) - y = (INT32)gl_basewindowcentery; - else -#endif - y = viewwindowy + (viewheight>>1); - - dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy); + stplyr = ((stplyr == &players[displayplayer]) ? &players[secondarydisplayplayer] : &players[displayplayer]); + if (!players[displayplayer].spectator && (!camera.chase || ticcmd_ztargetfocus[0]) && cross1) + V_DrawStretchyFixedPatch((BASEVIDWIDTH/2)<<FRACBITS, (BASEVIDHEIGHT/2)<<FRACBITS, FRACUNIT, splitscreen ? 2*FRACUNIT : FRACUNIT, V_TRANSLUCENT|V_PERPLAYER, crosshair[cross1 - 1], NULL); - V_DrawFixedPatch(vid.width<<(FRACBITS-1), y<<FRACBITS, FRACUNIT/dupz, V_TRANSLUCENT, crosshair[i - 1], NULL); -} - -static inline void HU_DrawCrosshair2(void) -{ - INT32 i, y, dupz; - - i = cv_crosshair2.value & 3; - if (!i) - return; - - if ((netgame || multiplayer) && players[secondarydisplayplayer].spectator) - return; - -#ifdef HWRENDER - if (rendermode != render_soft) - y = (INT32)gl_basewindowcentery; - else -#endif - y = viewwindowy + (viewheight>>1); - - if (!splitscreen) - return; - - #ifdef HWRENDER - if (rendermode != render_soft) - y += (INT32)gl_viewheight; - else - #endif - y += viewheight; - - dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy); - - V_DrawFixedPatch(vid.width<<(FRACBITS-1), y<<FRACBITS, FRACUNIT/dupz, V_TRANSLUCENT, crosshair[i - 1], NULL); + stplyr = ((stplyr == &players[displayplayer]) ? &players[secondarydisplayplayer] : &players[displayplayer]); + if (!players[secondarydisplayplayer].spectator && (!camera2.chase || ticcmd_ztargetfocus[1]) && cross2 && splitscreen) + V_DrawStretchyFixedPatch((BASEVIDWIDTH/2)<<FRACBITS, (BASEVIDHEIGHT/2)<<FRACBITS, FRACUNIT, 2*FRACUNIT, V_TRANSLUCENT|V_PERPLAYER, crosshair[cross2 - 1], NULL); } static void HU_DrawCEcho(void) @@ -2114,19 +2075,9 @@ void HU_Drawer(void) if (gamestate != GS_LEVEL) return; - // draw the crosshair, not when viewing demos nor with chasecam + // draw the crosshair if (LUA_HudEnabled(hud_crosshair)) - { - if (!automapactive && cv_crosshair.value && !demoplayback && - (!camera.chase || ticcmd_ztargetfocus[0]) - && !players[displayplayer].spectator) - HU_DrawCrosshair(); - - if (!automapactive && cv_crosshair2.value && !demoplayback && - (!camera2.chase || ticcmd_ztargetfocus[1]) - && !players[secondarydisplayplayer].spectator) - HU_DrawCrosshair2(); - } + HU_DrawCrosshairs(); // draw desynch text if (hu_redownloadinggamestate)