summaryrefslogtreecommitdiff
path: root/src/strife/r_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/strife/r_main.c')
-rw-r--r--src/strife/r_main.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/src/strife/r_main.c b/src/strife/r_main.c
index 7ea2a329..dea4603b 100644
--- a/src/strife/r_main.c
+++ b/src/strife/r_main.c
@@ -35,6 +35,7 @@
#include "doomdef.h"
+#include "doomstat.h" // villsa [STRIFE]
#include "d_net.h"
#include "m_bbox.h"
@@ -79,6 +80,8 @@ fixed_t viewx;
fixed_t viewy;
fixed_t viewz;
+int viewpitch; // villsa [STRIFE]
+
angle_t viewangle;
fixed_t viewcos;
@@ -697,7 +700,10 @@ void R_ExecuteSetViewSize (void)
detailshift = setdetail;
viewwidth = scaledviewwidth>>detailshift;
- centery = viewheight/2;
+ // villsa [STRIFE] calculate centery from player's pitch
+ centery = (setblocks*players[consoleplayer].pitch);
+ centery = (unsigned int)(centery/10)+viewheight/2;
+
centerx = viewwidth/2;
centerxfrac = centerx<<FRACBITS;
centeryfrac = centery<<FRACBITS;
@@ -823,6 +829,34 @@ R_PointInSubsector
return &subsectors[nodenum & ~NF_SUBSECTOR];
}
+//
+// R_SetupPitch
+// villsa [STRIFE] new function
+// Calculate centery/centeryfrac for player viewpitch
+//
+
+void R_SetupPitch(player_t* player)
+{
+ fixed_t pitchfrac;
+ int i = 0;
+
+ if(viewpitch != player->pitch)
+ {
+ viewpitch = player->pitch;
+ pitchfrac = ((setblocks*player->pitch)/10);
+ centery = (pitchfrac+viewheight)/2;
+ centeryfrac = centery<<FRACBITS;
+
+ if(viewheight > 0)
+ {
+ for(i = 0; i < viewheight; i++)
+ {
+ yslope[i] = FixedDiv(viewwidth/2*FRACUNIT,
+ abs(((i-centery)<<FRACBITS)+(FRACUNIT/2)));
+ }
+ }
+ }
+}
//
@@ -832,6 +866,8 @@ void R_SetupFrame (player_t* player)
{
int i;
+ R_SetupPitch(player); // villsa [STRIFE]
+
viewplayer = player;
viewx = player->mo->x;
viewy = player->mo->y;