fix(view): Adjust default camera height to compensate for screen aspect ratio - #1711
fix(view): Adjust default camera height to compensate for screen aspect ratio#1711Mauller wants to merge 1 commit into
Conversation
My goal was to try match the vertical view as close as possible to retail, I think it's slightly less than compared to 4:3 but slightly more than 16:9 gentool + retail. I think it has a reasonable tradeoff considering the extended horizontal view. It also gives a reasonable view for aspect ratios between 4:3 and 1:1 as well. Giving a little more vertical view. Under 1:1 things are still quite broken but a lot needs changing in the view handling to properly support portrait mode. |
|
Yes GenTool did take some vertical view away to compensate for the wider view, perhaps in an attempt to keep conditions fair. Additional camera height does give a competitive advantage. Are we ok with giving advantages to Wide Screen? |
|
I wouldn't consider it an issue since most screens have been wide aspect For the past decade. If anything widescreen is the standard now. Ultrawide is where it becomes more of an issue. But we could look at implementing a locked aspect mode for the tactical view in future. Or another option could be implementing tactical zoom to let people zoom out to view the entire map etc. |
02a64e0 to
57fe78d
Compare
xezon
left a comment
There was a problem hiding this comment.
Simple implementation, but man the EA code is confusing.
57fe78d to
271ca5b
Compare
|
Tweaked the code so Still need to look at the zoom default handling. |
271ca5b to
f6c96d8
Compare
|
Updated with tweaked max and default zoom handling code. |
f6c96d8 to
c3c7b85
Compare
|
Small tweak to comments |
f0dc49b to
f5167b0
Compare
|
How far are we from having this in the main build? I want to try all the new things... |
5617740 to
a076193
Compare
a076193 to
2523ec0
Compare
bb8c588 to
ec0c082
Compare
|
I think we can go ahead with this now. Can you rebase it? |
Sure, i will rebase and take a look back over the implementation to see if theres any tweaks i can make after your recent changes. |
ec0c082 to
baa303e
Compare
|
Just a raw rebase on current main of the original implementation, still need to look back over it, make any suggestions. I think i can move a lot of what i seperated out back into |
baa303e to
0813a5b
Compare
|
The scripted camera is too high. In my opinion the height difference compared to GenTool is too much - around 3.6% difference. Especially with Control Bar Pro it will give a significant bump is viewable terrain. For starters, I suggest to set it up exactly like GenTool did. GenTool nerfs the height by this much: |
Does this have to be as is in GenTool implementation ? I believe no here is why
I have been waiting for too long but (since first implementation it was fine for me except units in the edge of map) still better than current state, why not fix it is as it is implemented than patch later better way if there is ? |
The widescreen nerf was deliberate to reduce it a bit to make the advantage over 4:3 not as large. The game was originally made for 4:3 aspect ratios and is still played this way by many players. GenTool was the standard tool to use from 2010 to 2025, and still is for retailers. |
0813a5b to
50d5e19
Compare
|
Do we have actual data on how common 4:3 resolutions still are for our player base? For context, when 4:3 resolutions last appeared in the Steam Hardware Survey stats back in August 2023, they made up 0.0021% of users. |
|
I expect 16:9 are dominating but 4:3 is still a valid resolution to support because the original game UI was designed for 4:3. |
50d5e19 to
25691fe
Compare
|
Any update on this? |
25691fe to
23ae250
Compare
23ae250 to
51811c2
Compare
| if (currentAspectRatio > baseAspectRatio) | ||
| { | ||
| aspectRatioScale = fabs((1.0f + (currentAspectRatio - baseAspectRatio))); | ||
| const float nerf = 1.0f - (currentAspectRatio - baseAspectRatio) / 12.0f; |
There was a problem hiding this comment.
Can add comment here that this nerf replicates what GenTool originally did as well. The purpose was to artificially nerf the widescreen bonus a bit.
|
|
||
| if (currentAspectRatio > baseAspectRatio) | ||
| { | ||
| aspectRatioScale = fabs((1.0f + (currentAspectRatio - baseAspectRatio))); |
| { | ||
| // TheSuperHackers @fix Mauller 08/05/2026 Adjust the maximum camera height to compensate for screen aspect ratio | ||
| Real baseAspectRatio = (Real)DEFAULT_DISPLAY_WIDTH / (Real)DEFAULT_DISPLAY_HEIGHT; | ||
| Real currentAspectRatio = (Real)TheTacticalView->getWidth() / (Real)TheTacticalView->getHeight(); |
There was a problem hiding this comment.
I would like us to implement a define to clamp the max aspect ratio scaling here and set that to 1.7777 for 16:9 in GameDefines.h
That is also what GenTool did. It is then up to the Game Design Committee to decide what the actual limit should be for multiplayer.
|
|
||
| // MDC - we no longer want to rotate maps (design made all of them right to begin with) | ||
| // m_defaultAngle = angle * M_PI/180.0f; | ||
| setDefaultPitch(pitch); |
There was a problem hiding this comment.
I suggest keep this line at the top of the function to have the things separated.
| @@ -2233,10 +2233,24 @@ void W3DView::setPitchToDefault() | |||
| //------------------------------------------------------------------------------------------------- | |||
| void W3DView::setDefaultView(Real pitch, Real angle, Real maxHeight) | |||
There was a problem hiding this comment.
maxHeight is ambiguous name. Maybe rename to maxHeightScale. It reaches from 0 to 1 (or higher)
| @@ -2233,10 +2233,24 @@ void W3DView::setPitchToDefault() | |||
| //------------------------------------------------------------------------------------------------- | |||
| void W3DView::setDefaultView(Real pitch, Real angle, Real maxHeight) | |||
There was a problem hiding this comment.
I suggest we clamp maxHeight at above 0. It should not become negative.
There was a problem hiding this comment.
For camera height in cinematics:
After #3003 is merged, there will be ScriptEngine::isLetterBoxActive to act on regular campaign cinematics. Is logic bound.
Otherwise there also is View::m_isUserControlled to check whether the user was the last one to control the camera. Is client bound.
| m_heightAboveGround = m_maxHeightAboveGround; | ||
| m_zoom = getMaxZoom(m_pos.x, m_pos.y); | ||
|
|
||
| stopDoingScriptedCamera(); |
There was a problem hiding this comment.
If I am not mistaken right now all calls to stopDoingScriptedCamera in this file are as was originally. It would be nice if we can remove all these calls in this file except in W3DView::reset, but I am not sure if that is safe then. It depends on scripted calls I think. Maybe you can investigate this matter.
stopDoingScriptedCamera is already called extensively in View::doUserAction which we added and is verified to come through user input exclusively (good)!


Merge with Rebase
This PR adjusts the default max camera height to compensate for different screen aspect ratios.
Previous work fixed the vertical field of view to match retail and adjusted the horizontal fields of view.
But this resulted in significant distortion being observed in the periphery of the view and lower corners.
This distortion was also observed at the 16:9 aspect ratio and became significantly worse as the aspect ratio increased.
By maintaining the original 60 degrees horizontal field of view, while allowing the game to narrow the vertical field of view, increasing the camera height results in minimal to no distortion being observed.
This PR does not fix any other known camera issues and focuses on giving a playable default view.TODO