Add some more widescreen/tallscreen fixes to Frame.cpp

Like I said in the TODO, this *really* needs to be moved to the
enhanced branch
This commit is contained in:
Clownacy 2019-05-23 14:04:21 +00:00
parent 7db42b0b72
commit d1b71b9fce

View file

@ -16,7 +16,7 @@ void MoveFrame3()
short map_w, map_l; short map_w, map_l;
GetMapData(0, &map_w, &map_l); GetMapData(0, &map_w, &map_l);
#if WINDOW_WIDTH != 320 || WINDOW_HEIGHT != 240 // TODO - Really need to make this a compiler flag #if WINDOW_WIDTH != 320 || WINDOW_HEIGHT != 240 // TODO - Really need to make this a compiler flag (also, should probably move this stuff to the enhanced branch)
if (g_GameFlags & 8) if (g_GameFlags & 8)
{ {
// Use the original camera boundaries during the credits // Use the original camera boundaries during the credits
@ -126,15 +126,64 @@ void SetFramePosition(int fx, int fy)
gFrame.y = fy; gFrame.y = fy;
// Keep in bounds // Keep in bounds
#if WINDOW_WIDTH != 320 || WINDOW_HEIGHT != 240
if (g_GameFlags & 8)
{
// Use the original camera boundaries during the credits
if (gFrame.x / 0x200 < 0)
gFrame.x = 0;
if (gFrame.y / 0x200 < 0)
gFrame.y = 0;
if (gFrame.x > ((map_w - 1) * 0x10 - 320) * 0x200)
gFrame.x = ((map_w - 1) * 0x10 - 320) * 0x200;
if (gFrame.y > ((map_l - 1) * 0x10 - 240) * 0x200)
gFrame.y = ((map_l - 1) * 0x10 - 240) * 0x200;
gFrame.x -= ((WINDOW_WIDTH - 320) / 2) * 0x200;
gFrame.y -= ((WINDOW_HEIGHT - 240) / 2) * 0x200;
}
else
{
// Widescreen/tallscreen-safe behaviour
if (map_w * 0x10 < WINDOW_WIDTH)
{
gFrame.x = -((WINDOW_WIDTH - map_w * 0x10) * 0x200 / 2);
}
else
{
if (gFrame.x / 0x200 < 0)
gFrame.x = 0;
if (gFrame.x > ((map_w - 1) * 0x10 - WINDOW_WIDTH) * 0x200)
gFrame.x = ((map_w - 1) * 0x10 - WINDOW_WIDTH) * 0x200;
}
if (map_l * 0x10 < WINDOW_HEIGHT)
{
gFrame.y = -((WINDOW_HEIGHT - map_l * 0x10) * 0x200 / 2);
}
else
{
if (gFrame.y / 0x200 < 0)
gFrame.y = 0;
if (gFrame.y > ((map_l - 1) * 0x10 - WINDOW_HEIGHT) * 0x200)
gFrame.y = ((map_l - 1) * 0x10 - WINDOW_HEIGHT) * 0x200;
}
}
#else
// Vanilla behaviour
if (gFrame.x / 0x200 < 0) if (gFrame.x / 0x200 < 0)
gFrame.x = 0; gFrame.x = 0;
if (gFrame.y / 0x200 < 0) if (gFrame.y / 0x200 < 0)
gFrame.y = 0; gFrame.y = 0;
if (gFrame.x > ((((map_w - 1) * 0x10) - WINDOW_WIDTH)) * 0x200) if (gFrame.x > (((map_w - 1) * 0x10) - WINDOW_WIDTH) * 0x200)
gFrame.x = (((map_w - 1) * 0x10) - WINDOW_WIDTH) * 0x200; gFrame.x = (((map_w - 1) * 0x10) - WINDOW_WIDTH) * 0x200;
if (gFrame.y > ((((map_l - 1) * 0x10) - WINDOW_HEIGHT)) * 0x200) if (gFrame.y > (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200)
gFrame.y = (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200; gFrame.y = (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200;
#endif
} }
void SetFrameMyChar() void SetFrameMyChar()
@ -150,15 +199,64 @@ void SetFrameMyChar()
gFrame.y = mc_y - (WINDOW_HEIGHT << 8); gFrame.y = mc_y - (WINDOW_HEIGHT << 8);
// Keep in bounds // Keep in bounds
#if WINDOW_WIDTH != 320 || WINDOW_HEIGHT != 240
if (g_GameFlags & 8)
{
// Use the original camera boundaries during the credits
if (gFrame.x / 0x200 < 0)
gFrame.x = 0;
if (gFrame.y / 0x200 < 0)
gFrame.y = 0;
if (gFrame.x > ((map_w - 1) * 0x10 - 320) * 0x200)
gFrame.x = ((map_w - 1) * 0x10 - 320) * 0x200;
if (gFrame.y > ((map_l - 1) * 0x10 - 240) * 0x200)
gFrame.y = ((map_l - 1) * 0x10 - 240) * 0x200;
gFrame.x -= ((WINDOW_WIDTH - 320) / 2) * 0x200;
gFrame.y -= ((WINDOW_HEIGHT - 240) / 2) * 0x200;
}
else
{
// Widescreen/tallscreen-safe behaviour
if (map_w * 0x10 < WINDOW_WIDTH)
{
gFrame.x = -((WINDOW_WIDTH - map_w * 0x10) * 0x200 / 2);
}
else
{
if (gFrame.x / 0x200 < 0)
gFrame.x = 0;
if (gFrame.x > ((map_w - 1) * 0x10 - WINDOW_WIDTH) * 0x200)
gFrame.x = ((map_w - 1) * 0x10 - WINDOW_WIDTH) * 0x200;
}
if (map_l * 0x10 < WINDOW_HEIGHT)
{
gFrame.y = -((WINDOW_HEIGHT - map_l * 0x10) * 0x200 / 2);
}
else
{
if (gFrame.y / 0x200 < 0)
gFrame.y = 0;
if (gFrame.y > ((map_l - 1) * 0x10 - WINDOW_HEIGHT) * 0x200)
gFrame.y = ((map_l - 1) * 0x10 - WINDOW_HEIGHT) * 0x200;
}
}
#else
// Vanilla behaviour
if (gFrame.x / 0x200 < 0) if (gFrame.x / 0x200 < 0)
gFrame.x = 0; gFrame.x = 0;
if (gFrame.y / 0x200 < 0) if (gFrame.y / 0x200 < 0)
gFrame.y = 0; gFrame.y = 0;
if (gFrame.x > ((((map_w - 1) * 0x10) - WINDOW_WIDTH)) * 0x200) if (gFrame.x > (((map_w - 1) * 0x10) - WINDOW_WIDTH) * 0x200)
gFrame.x = (((map_w - 1) * 0x10) - WINDOW_WIDTH) * 0x200; gFrame.x = (((map_w - 1) * 0x10) - WINDOW_WIDTH) * 0x200;
if (gFrame.y > ((((map_l - 1) * 0x10) - WINDOW_HEIGHT)) * 0x200) if (gFrame.y > (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200)
gFrame.y = (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200; gFrame.y = (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200;
#endif
} }
void SetFrameTargetMyChar(int wait) void SetFrameTargetMyChar(int wait)