From e917cd1f46471cc9be8da606ac03aa9ac3885b87 Mon Sep 17 00:00:00 2001
From: Sergeanur <s.anureev@yandex.ua>
Date: Sat, 9 May 2020 02:50:48 +0300
Subject: [PATCH] Fix corona scaling

---
 src/core/Cam.cpp      |  2 --
 src/core/Camera.h     |  2 ++
 src/render/Sprite.cpp | 12 ++++++++----
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/core/Cam.cpp b/src/core/Cam.cpp
index 76d8d22b..3b11ec5f 100644
--- a/src/core/Cam.cpp
+++ b/src/core/Cam.cpp
@@ -25,8 +25,6 @@
 #include "Camera.h"
 #include "DMAudio.h"
 
-const float DefaultFOV = 70.0f;	// beta: 80.0f
-
 bool PrintDebugCode = false;
 int16 DebugCamMode;
 
diff --git a/src/core/Camera.h b/src/core/Camera.h
index 02122dfe..51138f99 100644
--- a/src/core/Camera.h
+++ b/src/core/Camera.h
@@ -40,6 +40,8 @@ enum
 #define DEFAULT_CAR_ZOOM_VALUE_2 (1.9f)
 #define DEFAULT_CAR_ZOOM_VALUE_3 (3.9f)
 
+const float DefaultFOV = 70.0f; // beta: 80.0f
+
 class CCam
 {
 public:
diff --git a/src/render/Sprite.cpp b/src/render/Sprite.cpp
index 30eaf840..1dd1aaab 100644
--- a/src/render/Sprite.cpp
+++ b/src/render/Sprite.cpp
@@ -29,13 +29,17 @@ CSprite::CalcScreenCoors(const RwV3d &in, RwV3d *out, float *outw, float *outh,
 	float recip = 1.0f/out->z;
 	out->x *= SCREEN_WIDTH * recip;
 	out->y *= SCREEN_HEIGHT * recip;
-	// What is this? size?
-	*outw = 70.0f/CDraw::GetFOV() * SCREEN_WIDTH * recip;
 #ifdef ASPECT_RATIO_SCALE
-	*outh = 70.0f/CDraw::GetFOV() / (DEFAULT_ASPECT_RATIO / SCREEN_ASPECT_RATIO) * SCREEN_HEIGHT * recip;
+	float fov = CDraw::ConvertFOV(DefaultFOV);
 #else
-	*outh = 70.0f/CDraw::GetFOV() * SCREEN_HEIGHT * recip;
+	const float fov = DefaultFOV;
 #endif
+	// this is used to scale correctly if you zoom in with sniper rifle
+	float fovScale = fov / CDraw::GetFOV();
+
+	*outw = fovScale * SCREEN_SCALE_AR(recip) * SCREEN_WIDTH;
+	*outh = fovScale * recip * SCREEN_HEIGHT;
+
 	return true;
 }