shithub: cstory

Download patch

ref: d1b71b9fce7c975f97816f3982eec3f900644394
parent: 7db42b0b725f1b8cd37f1e40596875933c4133cb
author: Clownacy <[email protected]>
date: Thu May 23 10:04:21 EDT 2019

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

--- a/src/Frame.cpp
+++ b/src/Frame.cpp
@@ -16,7 +16,7 @@
 	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 @@
 	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 @@
 	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)