[iortcw] 334/497: All: Add cg_fixedAspect cvar to maintain aspect in widescreen modes: Based on Knightmare's RTCW-SP

Simon McVittie smcv at debian.org
Fri Sep 8 10:37:19 UTC 2017


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to annotated tag 1.42d
in repository iortcw.

commit c60f99d9dae0fabf667a4ab8a8b79c51d306ac8c
Author: MAN-AT-ARMS <M4N4T4RMS at gmail.com>
Date:   Wed Apr 15 18:45:31 2015 -0400

    All: Add cg_fixedAspect cvar to maintain aspect in widescreen modes:
    Based on Knightmare's RTCW-SP
---
 MP/code/cgame/cg_local.h   |  1 +
 MP/code/cgame/cg_main.c    |  2 ++
 MP/code/cgame/cg_view.c    | 29 +++++++++++++++++++++++++++--
 MP/code/cgame/cg_weapons.c |  2 +-
 SP/code/cgame/cg_local.h   |  1 +
 SP/code/cgame/cg_main.c    |  2 ++
 SP/code/cgame/cg_view.c    | 29 +++++++++++++++++++++++++++--
 SP/code/cgame/cg_weapons.c |  2 +-
 8 files changed, 62 insertions(+), 6 deletions(-)

diff --git a/MP/code/cgame/cg_local.h b/MP/code/cgame/cg_local.h
index d4fafef..61c74aa 100644
--- a/MP/code/cgame/cg_local.h
+++ b/MP/code/cgame/cg_local.h
@@ -1660,6 +1660,7 @@ extern vmCvar_t cg_autoswitch;
 extern vmCvar_t cg_ignore;
 extern vmCvar_t cg_simpleItems;
 extern vmCvar_t cg_fov;
+extern vmCvar_t cg_fixedAspect;
 extern vmCvar_t cg_zoomFov;
 extern vmCvar_t cg_zoomDefaultBinoc;
 extern vmCvar_t cg_zoomDefaultSniper;
diff --git a/MP/code/cgame/cg_main.c b/MP/code/cgame/cg_main.c
index 6084681..6287dac 100644
--- a/MP/code/cgame/cg_main.c
+++ b/MP/code/cgame/cg_main.c
@@ -164,6 +164,7 @@ vmCvar_t cg_autoswitch;
 vmCvar_t cg_ignore;
 vmCvar_t cg_simpleItems;
 vmCvar_t cg_fov;
+vmCvar_t cg_fixedAspect;
 vmCvar_t cg_zoomFov;
 vmCvar_t cg_zoomStepBinoc;
 vmCvar_t cg_zoomStepSniper;
@@ -304,6 +305,7 @@ cvarTable_t cvarTable[] = {
 	{ &cg_zoomStepSnooper, "cg_zoomStepSnooper", "5", CVAR_ARCHIVE },
 	{ &cg_zoomStepFG, "cg_zoomStepFG", "10", CVAR_ARCHIVE },          //----(SA)	added
 	{ &cg_fov, "cg_fov", "90", CVAR_ARCHIVE },
+	{ &cg_fixedAspect, "cg_fixedAspect", "0", CVAR_ARCHIVE }, // Essentially the same as setting DF_FIXED_FOV for widescreen aspects
 	{ &cg_viewsize, "cg_viewsize", "100", CVAR_ARCHIVE },
 	{ &cg_letterbox, "cg_letterbox", "0", CVAR_TEMP },    //----(SA)	added
 	{ &cg_shadows, "cg_shadows", "1", CVAR_ARCHIVE  },
diff --git a/MP/code/cgame/cg_view.c b/MP/code/cgame/cg_view.c
index 81e7ea0..29a8c3c 100644
--- a/MP/code/cgame/cg_view.c
+++ b/MP/code/cgame/cg_view.c
@@ -805,6 +805,7 @@ Fixed fov at intermissions, otherwise account for fov variable and zooms.
 */
 #define WAVE_AMPLITUDE  1
 #define WAVE_FREQUENCY  0.4
+#define STANDARD_ASPECT_RATIO  ( (float)640 / (float)480 )
 
 static int CG_CalcFov( void ) {
 	static float lastfov = 90;      // for transitions back from zoomed in modes
@@ -830,7 +831,7 @@ static int CG_CalcFov( void ) {
 		fov_x = 90;
 	} else {
 		// user selectable
-		if ( cgs.dmflags & DF_FIXED_FOV ) {
+		if ( ( cgs.dmflags & DF_FIXED_FOV ) || cg_fixedAspect.value ) {
 			// dmflag to prevent wide fov for all clients
 			fov_x = 90;
 		} else {
@@ -893,6 +894,14 @@ static int CG_CalcFov( void ) {
 		fov_x = 55;
 	}
 
+	if ( cg_fixedAspect.value ) {
+		float aspectRatio = (float)cg.refdef.width / (float)cg.refdef.height;
+
+		if ( aspectRatio > STANDARD_ASPECT_RATIO )
+			fov_x = RAD2DEG( 2 * atan2( ( aspectRatio / STANDARD_ASPECT_RATIO ) * tan( DEG2RAD( fov_x ) * 0.5 ), 1 ) );
+		fov_x = min( fov_x, 160 );
+	}
+
 	x = cg.refdef.width / tan( fov_x / 360 * M_PI );
 	fov_y = atan2( cg.refdef.height, x );
 	fov_y = fov_y * 360 / M_PI;
@@ -1124,6 +1133,14 @@ static int CG_CalcViewValues( void ) {
 			VectorCopy( angles, cg.refdefViewAngles );
 			AnglesToAxis( cg.refdefViewAngles, cg.refdef.viewaxis );
 
+			if ( cg_fixedAspect.value ) {
+				float aspectRatio = (float)cg.refdef.width / (float)cg.refdef.height;
+
+				if ( aspectRatio > STANDARD_ASPECT_RATIO )
+					fov = RAD2DEG( 2 * atan2( ( aspectRatio / STANDARD_ASPECT_RATIO ) * tan( DEG2RAD( fov ) * 0.5 ), 1 ) );
+				fov = min( fov, 160 );
+			}
+
 			x = cg.refdef.width / tan( fov / 360 * M_PI );
 			cg.refdef.fov_y = atan2( cg.refdef.height, x );
 			cg.refdef.fov_y = cg.refdef.fov_y * 360 / M_PI;
@@ -1403,7 +1420,7 @@ void CG_DrawSkyBoxPortal( void ) {
 		fov_x = 90;
 	} else {
 		// user selectable
-		if ( cgs.dmflags & DF_FIXED_FOV ) {
+		if ( ( cgs.dmflags & DF_FIXED_FOV ) || cg_fixedAspect.value ) {
 			// dmflag to prevent wide fov for all clients
 			fov_x = 90;
 		} else {
@@ -1458,6 +1475,14 @@ void CG_DrawSkyBoxPortal( void ) {
 		fov_x = 55;
 	}
 
+	if ( cg_fixedAspect.value ) {
+		float aspectRatio = (float)cg.refdef.width / (float)cg.refdef.height;
+
+		if ( aspectRatio > STANDARD_ASPECT_RATIO )
+			fov_x = RAD2DEG( 2 * atan2( ( aspectRatio / STANDARD_ASPECT_RATIO ) * tan( DEG2RAD( fov_x ) * 0.5 ), 1 ) );
+		fov_x = min( fov_x, 160 );
+	}
+
 	cg.refdef.time = cg.time;
 
 	x = cg.refdef.width / tan( fov_x / 360 * M_PI );
diff --git a/MP/code/cgame/cg_weapons.c b/MP/code/cgame/cg_weapons.c
index c1b15bd..7901e68 100644
--- a/MP/code/cgame/cg_weapons.c
+++ b/MP/code/cgame/cg_weapons.c
@@ -2817,7 +2817,7 @@ void CG_AddViewWeapon( playerState_t *ps ) {
 	}
 
 	// drop gun lower at higher fov
-	if ( cg_fov.integer > 90 ) {
+	if ( cg_fov.integer > 90 && !cg_fixedAspect.value ) {
 		fovOffset = -0.2 * ( cg_fov.integer - 90 );
 	} else {
 		fovOffset = 0;
diff --git a/SP/code/cgame/cg_local.h b/SP/code/cgame/cg_local.h
index e6ba0c2..9c4b557 100644
--- a/SP/code/cgame/cg_local.h
+++ b/SP/code/cgame/cg_local.h
@@ -1678,6 +1678,7 @@ extern vmCvar_t cg_autoswitch;
 extern vmCvar_t cg_ignore;
 extern vmCvar_t cg_simpleItems;
 extern vmCvar_t cg_fov;
+extern vmCvar_t cg_fixedAspect;
 extern vmCvar_t cg_zoomFov;
 extern vmCvar_t cg_zoomDefaultBinoc;
 extern vmCvar_t cg_zoomDefaultSniper;
diff --git a/SP/code/cgame/cg_main.c b/SP/code/cgame/cg_main.c
index 6788e90..103186f 100644
--- a/SP/code/cgame/cg_main.c
+++ b/SP/code/cgame/cg_main.c
@@ -164,6 +164,7 @@ vmCvar_t cg_autoswitch;
 vmCvar_t cg_ignore;
 vmCvar_t cg_simpleItems;
 vmCvar_t cg_fov;
+vmCvar_t cg_fixedAspect;
 vmCvar_t cg_zoomFov;
 vmCvar_t cg_zoomStepBinoc;
 vmCvar_t cg_zoomStepSniper;
@@ -295,6 +296,7 @@ cvarTable_t cvarTable[] = {
 	{ &cg_zoomStepSnooper, "cg_zoomStepSnooper", "5", CVAR_ARCHIVE },
 	{ &cg_zoomStepFG, "cg_zoomStepFG", "10", CVAR_ARCHIVE },          //----(SA)	added
 	{ &cg_fov, "cg_fov", "90", CVAR_ARCHIVE },	// NOTE: there is already a dmflag (DF_FIXED_FOV) to allow server control of this cheat
+	{ &cg_fixedAspect, "cg_fixedAspect", "0", CVAR_ARCHIVE }, // Essentially the same as setting DF_FIXED_FOV for widescreen aspects
 	{ &cg_viewsize, "cg_viewsize", "100", CVAR_ARCHIVE },
 	{ &cg_letterbox, "cg_letterbox", "0", CVAR_TEMP },    //----(SA)	added
 	{ &cg_shadows, "cg_shadows", "1", CVAR_ARCHIVE  },
diff --git a/SP/code/cgame/cg_view.c b/SP/code/cgame/cg_view.c
index 135f916..0e141f3 100644
--- a/SP/code/cgame/cg_view.c
+++ b/SP/code/cgame/cg_view.c
@@ -775,6 +775,7 @@ Fixed fov at intermissions, otherwise account for fov variable and zooms.
 */
 #define WAVE_AMPLITUDE  1
 #define WAVE_FREQUENCY  0.4
+#define STANDARD_ASPECT_RATIO  ( (float)640 / (float)480 )
 
 static int CG_CalcFov( void ) {
 	static float lastfov = 90;      // for transitions back from zoomed in modes
@@ -804,7 +805,7 @@ static int CG_CalcFov( void ) {
 		fov_x = 90;
 	} else {
 		// user selectable
-		if ( cgs.dmflags & DF_FIXED_FOV ) {
+		if ( ( cgs.dmflags & DF_FIXED_FOV ) || cg_fixedAspect.value ) {
 			// dmflag to prevent wide fov for all clients
 			fov_x = 90;
 		} else {
@@ -867,6 +868,14 @@ static int CG_CalcFov( void ) {
 		fov_x = 55;
 	}
 
+	if ( cg_fixedAspect.value ) {
+		float aspectRatio = (float)cg.refdef.width / (float)cg.refdef.height;
+
+		if ( aspectRatio > STANDARD_ASPECT_RATIO )
+			fov_x = RAD2DEG( 2 * atan2( ( aspectRatio / STANDARD_ASPECT_RATIO ) * tan( DEG2RAD( fov_x ) * 0.5 ), 1 ) );	
+		fov_x = min( fov_x, 160 );
+	}
+
 	x = cg.refdef.width / tan( fov_x / 360 * M_PI );
 	fov_y = atan2( cg.refdef.height, x );
 	fov_y = fov_y * 360 / M_PI;
@@ -1050,6 +1059,14 @@ static int CG_CalcViewValues( void ) {
 			VectorCopy( angles, cg.refdefViewAngles );
 			AnglesToAxis( cg.refdefViewAngles, cg.refdef.viewaxis );
 
+			if ( cg_fixedAspect.value ) {
+				float aspectRatio = (float)cg.refdef.width / (float)cg.refdef.height;
+
+				if ( aspectRatio > STANDARD_ASPECT_RATIO )
+					fov = RAD2DEG( 2 * atan2( ( aspectRatio / STANDARD_ASPECT_RATIO ) * tan( DEG2RAD( fov ) * 0.5 ), 1 ) );
+				fov = min( fov, 160 );
+			}
+
 			x = cg.refdef.width / tan( fov / 360 * M_PI );
 			cg.refdef.fov_y = atan2( cg.refdef.height, x );
 			cg.refdef.fov_y = cg.refdef.fov_y * 360 / M_PI;
@@ -1299,7 +1316,7 @@ void CG_DrawSkyBoxPortal( void ) {
 			fov_x = 90;
 		} else {
 			// user selectable
-			if ( cgs.dmflags & DF_FIXED_FOV ) {
+			if ( ( cgs.dmflags & DF_FIXED_FOV ) || cg_fixedAspect.value ) {
 				// dmflag to prevent wide fov for all clients
 				fov_x = 90;
 			} else {
@@ -1354,6 +1371,14 @@ void CG_DrawSkyBoxPortal( void ) {
 			fov_x = 55;
 		}
 
+		if ( cg_fixedAspect.value ) {
+			float aspectRatio = (float)cg.refdef.width / (float)cg.refdef.height;
+
+			if ( aspectRatio > STANDARD_ASPECT_RATIO )
+				fov_x = RAD2DEG( 2 * atan2( ( aspectRatio / STANDARD_ASPECT_RATIO ) * tan( DEG2RAD( fov_x ) * 0.5 ), 1 ) );
+			fov_x = min( fov_x, 160 );
+		}
+
 		x = cg.refdef.width / tan( fov_x / 360 * M_PI );
 		fov_y = atan2( cg.refdef.height, x );
 		fov_y = fov_y * 360 / M_PI;
diff --git a/SP/code/cgame/cg_weapons.c b/SP/code/cgame/cg_weapons.c
index f64c488..e6ea655 100644
--- a/SP/code/cgame/cg_weapons.c
+++ b/SP/code/cgame/cg_weapons.c
@@ -2997,7 +2997,7 @@ void CG_AddViewWeapon( playerState_t *ps ) {
 
 
 	// drop gun lower at higher fov
-	if ( cg_fov.integer > 90 ) {
+	if ( cg_fov.integer > 90 && !cg_fixedAspect.value ) {
 		fovOffset = -0.2 * ( cg_fov.integer - 90 );
 	} else {
 		fovOffset = 0;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git



More information about the Pkg-games-commits mailing list