mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2025-12-30 15:50:05 -06:00
* Map CSD structures by full path. * Initial work for unstretching & aligning to edges. * Add extend flag, fix cast lookups. * Add right extend flag. * Fill the flags map with a bunch of casts. * Implement unstretching. * Set more title casts to unscretch. * Add some more flags. * Move CSD patches to its own file. * Replace CSD vertex shaders to get rid of pixel snapping. * Snap to pixel on the CPU. * Current work trying to get 3D screen position casts working correctly. * Fix and properly align font, handle most 3D screen positions. * Add stretch flags for background casts. * Use 4:3 as the base aspect ratio instead of 16:9. * Replicate the game's 4:3 downscaling behavior. * World map now identical to original 4:3. * Replace camera aspect ratio/field of view logic. * Make original 4:3 scaling a separate option, use custom behavior for auto. * Keep UI scale same only above Steam Deck aspect ratio. * Release paths when the YNCP file gets freed. * Add more path flags. * Interpolate to original 4:3 scale. * Scaling animation offset to prevent offscreen casts from showing up in ultrawide. * Queue draw calls without actually executing anything to extract the corner. * Clean unnecessary hooks. * Add result screen modifiers. * Stretch loading primitive 2D. * Scale DoF correctly at different aspect ratios. * Remove stretch option. * Make aspect ratio a global variable. * Ultrawide patch for HUD 3D items. * Fix world map 3D to 2D projection. * Right align world map info box. * Set medal positions. * Respect center option in more places. * Implement the aspect ratio option. * Use viewport dimensions for snapping CSD pixels. * Fix DoF fix not using viewport height. * Implement aspect ratio patches for 2D drop ring emitter. * Implement inspire letterbox. * Add cutscene aspect ratio option. * Shift subtitles by aspect ratio. * Fix crash in earth restoration cutscenes. * Offset scale patches for Tornado Defense. * Scale new record arrow casts. * Expose aspect ratio variables globally. * Properly center the achievements menu. * 4:3 scaling for options menu. * Fix procedural filtering logic in ImGui pixel shader. * Fix button guide offset. * UI scaling for installer. * Remove grid snaps in the installer. * Handle center UI scale option for rings going to HUD. * Remove unnecessary diff. * Revert temporary changes. * Fix typo.
51 lines
1.4 KiB
C++
51 lines
1.4 KiB
C++
#include <api/SWA.h>
|
|
#include <ui/game_window.h>
|
|
#include <user/config.h>
|
|
#include <gpu/video.h>
|
|
#include "camera_patches.h"
|
|
#include "aspect_ratio_patches.h"
|
|
|
|
void CameraAspectRatioMidAsmHook(PPCRegister& r30, PPCRegister& r31)
|
|
{
|
|
r30.u32 = 0;
|
|
|
|
auto camera = (SWA::CCamera*)g_memory.Translate(r31.u32);
|
|
|
|
// Dynamically adjust horizontal aspect ratio to window dimensions.
|
|
camera->m_HorzAspectRatio = g_aspectRatio;
|
|
}
|
|
|
|
float AdjustFieldOfView(float fieldOfView, float aspectRatio)
|
|
{
|
|
if (Config::AspectRatio == EAspectRatio::OriginalNarrow)
|
|
{
|
|
// Replicate the original incorrect field of view formula if requested.
|
|
fieldOfView *= NARROW_ASPECT_RATIO;
|
|
}
|
|
else if (aspectRatio < WIDE_ASPECT_RATIO)
|
|
{
|
|
// Use proper VERT+ otherwise for narrow aspect ratios.
|
|
fieldOfView = 2.0 * atan(tan(0.5 * fieldOfView) / aspectRatio * WIDE_ASPECT_RATIO);
|
|
}
|
|
|
|
return fieldOfView;
|
|
}
|
|
|
|
void CameraFieldOfViewMidAsmHook(PPCRegister& r31, PPCRegister& f31)
|
|
{
|
|
auto camera = (SWA::CCamera*)g_memory.Translate(r31.u32);
|
|
|
|
f31.f64 = AdjustFieldOfView(f31.f64, camera->m_HorzAspectRatio);
|
|
}
|
|
|
|
PPC_FUNC_IMPL(__imp__sub_824697B0);
|
|
PPC_FUNC(sub_824697B0)
|
|
{
|
|
auto pCamera = (SWA::CCamera*)g_memory.Translate(ctx.r3.u32);
|
|
|
|
pCamera->m_InvertX = Config::InvertCameraX;
|
|
pCamera->m_InvertY = Config::InvertCameraY;
|
|
|
|
__imp__sub_824697B0(ctx, base);
|
|
}
|