From d1b71b9fce7c975f97816f3982eec3f900644394 Mon Sep 17 00:00:00 2001 From: Clownacy Date: Thu, 23 May 2019 14:04:21 +0000 Subject: [PATCH] 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 --- src/Frame.cpp | 108 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 103 insertions(+), 5 deletions(-) diff --git a/src/Frame.cpp b/src/Frame.cpp index f50c17be..bf36440b 100644 --- a/src/Frame.cpp +++ b/src/Frame.cpp @@ -16,7 +16,7 @@ void MoveFrame3() short 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) { // Use the original camera boundaries during the credits @@ -126,15 +126,64 @@ void SetFramePosition(int fx, int fy) gFrame.y = fy; // 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) gFrame.x = 0; if (gFrame.y / 0x200 < 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; - 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; +#endif } void SetFrameMyChar() @@ -150,15 +199,64 @@ void SetFrameMyChar() gFrame.y = mc_y - (WINDOW_HEIGHT << 8); // 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) gFrame.x = 0; if (gFrame.y / 0x200 < 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; - 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; +#endif } void SetFrameTargetMyChar(int wait)