i can try to explain, well mostly such data like are stored as constant in .rdata (its section in the binary .exe). So as its a constant it stays there for later use. ok now for example 21:9 = 2.3 and 16:9 = 1,777777777777778
devs like to have that values stored as floating point. in that case its a simple code error by just taking the vertical resolution wich is 1080 but 16:9 as we know is using 1080 aswell as nativ resolution so the function wich works as a switch jumps to the stored value for 16:9 wich is 1.7 but we need 2.3... here is snipped of that switch:
well and finding such stuff it helps speaking assembler, wich i cant teach u.
so if u found the function u have two options dissamble the function to jump to the right value or just modificate the wrong constant to the right one (thats the way i chose). so now we have a pattern for a patch look next executable will have "398EE33F55551540" and u have to modifie the first 4 bytes to "CD901840"
that error btw is generic atm for detecting the right ration on a 21:9 screen cause of the same vertical value, devs using codesnippeds or workshops etc so often code is unique then in debugger, like copy paste bug.