mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2025-12-31 00:10:26 -06:00
69 lines
2.3 KiB
C++
69 lines
2.3 KiB
C++
#include <user/config.h>
|
|
#include <api/SWA.h>
|
|
#include <ui/game_window.h>
|
|
|
|
using SVertexData = SWA::Sequence::Utility::CPlayMovieWrapper::CRender::SVertexData;
|
|
|
|
// Update movie player aspect ratio.
|
|
PPC_FUNC_IMPL(__imp__sub_82AE30D8);
|
|
PPC_FUNC(sub_82AE30D8)
|
|
{
|
|
auto pViewportWidth = (be<uint32_t>*)g_memory.Translate(ctx.r4.u32 + 0x14);
|
|
auto pViewportHeight = (be<uint32_t>*)g_memory.Translate(ctx.r4.u32 + 0x18);
|
|
|
|
auto pTopLeft = (SVertexData*)g_memory.Translate(ctx.r4.u32 + 0x6C);
|
|
auto pTopRight = (SVertexData*)g_memory.Translate(ctx.r4.u32 + 0x6C + sizeof(SVertexData));
|
|
auto pBottomRight = (SVertexData*)g_memory.Translate(ctx.r4.u32 + 0x6C + sizeof(SVertexData) * 2);
|
|
auto pBottomLeft = (SVertexData*)g_memory.Translate(ctx.r4.u32 + 0x6C + sizeof(SVertexData) * 3);
|
|
|
|
auto quadWidth = std::fabs(pTopRight->X - pTopLeft->X) * ((float)*pViewportWidth / 2);
|
|
auto quadHeight = std::fabs(pTopLeft->Y - pBottomLeft->Y) * ((float)*pViewportHeight / 2);
|
|
|
|
auto movieAspectRatio = quadWidth / quadHeight;
|
|
auto windowAspectRatio = (float)GameWindow::s_width / (float)GameWindow::s_height;
|
|
|
|
auto a = -1.00078f;
|
|
auto b = 1.00139f;
|
|
auto scaleU = 1.0f;
|
|
auto scaleV = 1.0f;
|
|
auto centreV = (pTopLeft->V + pBottomRight->V) / 2.0f;
|
|
|
|
if (windowAspectRatio > movieAspectRatio)
|
|
{
|
|
scaleU = movieAspectRatio / windowAspectRatio;
|
|
}
|
|
else
|
|
{
|
|
scaleV = windowAspectRatio / movieAspectRatio;
|
|
}
|
|
|
|
pTopLeft->X = a;
|
|
pTopLeft->Y = b;
|
|
pTopLeft->U = (pTopLeft->U - centreV) / scaleU + centreV;
|
|
pTopLeft->V = (pTopLeft->V - centreV) / scaleV + centreV;
|
|
|
|
pTopRight->X = b;
|
|
pTopRight->Y = b;
|
|
pTopRight->U = (pTopRight->U - centreV) / scaleU + centreV;
|
|
pTopRight->V = (pTopRight->V - centreV) / scaleV + centreV;
|
|
|
|
pBottomLeft->X = a;
|
|
pBottomLeft->Y = a;
|
|
pBottomLeft->U = (pBottomLeft->U - centreV) / scaleU + centreV;
|
|
pBottomLeft->V = (pBottomLeft->V - centreV) / scaleV + centreV;
|
|
|
|
pBottomRight->X = b;
|
|
pBottomRight->Y = a;
|
|
pBottomRight->U = (pBottomRight->U - centreV) / scaleU + centreV;
|
|
pBottomRight->V = (pBottomRight->V - centreV) / scaleV + centreV;
|
|
|
|
__imp__sub_82AE30D8(ctx, base);
|
|
}
|
|
|
|
void RemoveMoviePlayerLetterboxMidAsmHook() {}
|
|
|
|
bool MotionBlurMidAsmHook()
|
|
{
|
|
return Config::MotionBlur != EMotionBlur::Off;
|
|
}
|