shithub: cstory

Download patch

ref: b57bb0fdbc9000e7c27c5de22e6553e4575e3e7e
parent: 7eae431e3a02767a76b9eb88c786d4afae5652a2
author: Clownacy <Clownacy@users.noreply.github.com>
date: Thu Mar 7 13:07:26 EST 2019

Made Frame.cpp ASM-accurate

I'll re-add widescreen support next

--- a/src/Frame.cpp
+++ b/src/Frame.cpp
@@ -15,60 +15,39 @@
 {
 	int16_t map_w, map_l;
 	GetMapData(0, &map_w, &map_l);
-	
-	gFrame.x += (*gFrame.tgt_x - (WINDOW_WIDTH << 8) - gFrame.x) / gFrame.wait;
-	gFrame.y += (*gFrame.tgt_y - (WINDOW_HEIGHT << 8) - gFrame.y) / gFrame.wait;
-	
-	//Keep in bounds
-	const int num_x = ((WINDOW_WIDTH + 0xF) >> 4) + 1;
-	const int num_y = ((WINDOW_HEIGHT + 0xF) >> 4) + 1;
-	
-	if (map_w >= num_x)
-	{
-		if (gFrame.x <= -0x200)
-			gFrame.x = 0;
-		if (gFrame.x > ((((map_w - 1) << 4) - ((g_GameFlags & 8) ? 320 : WINDOW_WIDTH))) << 9)
-			gFrame.x = (((map_w - 1) << 4) - ((g_GameFlags & 8) ? 320 : WINDOW_WIDTH)) << 9;
-	}
-	else
-	{
-		gFrame.x = (((map_w - 1) << 4) - WINDOW_WIDTH) << 8;
-	}
-	
-	if (map_l >= num_y)
-	{
-		if (gFrame.y <= -0x200)
-			gFrame.y = 0;
-		if (gFrame.y > ((((map_l - 1) << 4) - ((g_GameFlags & 8) ? 240 : WINDOW_HEIGHT))) << 9)
-			gFrame.y = (((map_l - 1) << 4) - ((g_GameFlags & 8) ? 240 : WINDOW_HEIGHT)) << 9;
-	}
-	else
-	{
-		gFrame.y = (((map_l - 1) << 4) - WINDOW_HEIGHT) << 8;
-	}
 
+	gFrame.x += (*gFrame.tgt_x - (WINDOW_WIDTH * 0x100) - gFrame.x) / gFrame.wait;
+	gFrame.y += (*gFrame.tgt_y - (WINDOW_HEIGHT * 0x100) - gFrame.y) / gFrame.wait;
+
+	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)
+		gFrame.x = ((map_w - 1) * 0x10 - WINDOW_WIDTH) * 0x200;
+	if (gFrame.y > ((map_l - 1) * 0x10 - WINDOW_HEIGHT) * 0x200)
+		gFrame.y = ((map_l - 1) * 0x10 - WINDOW_HEIGHT) * 0x200;
+
 	//Quake
 	if (gFrame.quake2)
 	{
-		gFrame.x += (Random(-5, 5) << 9);
-		gFrame.y += (Random(-3, 3) << 9);
+		gFrame.x += (Random(-5, 5) * 0x200);
+		gFrame.y += (Random(-3, 3) * 0x200);
 		--gFrame.quake2;
 	}
 	else if (gFrame.quake)
 	{
-		gFrame.x += (Random(-1, 1) << 9);
-		gFrame.y += (Random(-1, 1) << 9);
+		gFrame.x += (Random(-1, 1) * 0x200);
+		gFrame.y += (Random(-1, 1) * 0x200);
 		--gFrame.quake;
 	}
-	
-	//Keep in bounds
-	if (map_w >= num_x && map_l >= num_y)
-	{
-		if (gFrame.x <= -0x200)
-			gFrame.x = 0;
-		if (gFrame.y <= -0x200)
-			gFrame.y = 0;
-	}
+
+	// This code exists in the Linux port, but not the Windows version
+/*	if (gFrame.x / 0x200 < 0)
+		gFrame.x = 0;
+	if (gFrame.y / 0x200 < 0)
+		gFrame.y = 0;*/
 }
 
 void GetFramePosition(int *fx, int *fy)
@@ -91,15 +70,15 @@
 	gFrame.y = fy;
 	
 	//Keep in bounds
-	if (gFrame.x <= -0x200)
+	if (gFrame.x / 0x200 < 0)
 		gFrame.x = 0;
-	if (gFrame.y <= -0x200)
+	if (gFrame.y / 0x200 < 0)
 		gFrame.y = 0;
 
-	if (gFrame.x > ((((map_w - 1) << 4) - WINDOW_WIDTH)) << 9)
-		gFrame.x = (((map_w - 1) << 4) - WINDOW_WIDTH) << 9;
-	if (gFrame.y > ((((map_l - 1) << 4) - WINDOW_HEIGHT)) << 9)
-		gFrame.y = (((map_l - 1) << 4) - WINDOW_HEIGHT) << 9;
+	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)
+		gFrame.y = (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200;
 }
 
 void SetFrameMyChar()
@@ -115,15 +94,15 @@
 	gFrame.y = mc_y - (WINDOW_HEIGHT << 8);
 	
 	//Keep in bounds
-	if (gFrame.x <= -0x200)
+	if (gFrame.x / 0x200 < 0)
 		gFrame.x = 0;
-	if (gFrame.y <= -0x200)
+	if (gFrame.y / 0x200 < 0)
 		gFrame.y = 0;
 	
-	if (gFrame.x > ((((map_w - 1) << 4) - WINDOW_WIDTH)) << 9)
-		gFrame.x = (((map_w - 1) << 4) - WINDOW_WIDTH) << 9;
-	if (gFrame.y > ((((map_l - 1) << 4) - WINDOW_HEIGHT)) << 9)
-		gFrame.y = (((map_l - 1) << 4) - WINDOW_HEIGHT) << 9;
+	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)
+		gFrame.y = (((map_l - 1) * 0x10) - WINDOW_HEIGHT) * 0x200;
 }
 
 void SetFrameTargetMyChar(int wait)
@@ -135,16 +114,17 @@
 
 void SetFrameTargetNpChar(int event, int wait)
 {
-	for (int i = 0; i < NPC_MAX; i++)
-	{
+	int i;
+	for (i = 0; i < NPC_MAX; i++)
 		if (gNPC[i].code_event == event)
-		{
-			gFrame.tgt_x = &gNPC[i].x;
-			gFrame.tgt_y = &gNPC[i].y;
-			gFrame.wait = wait;
 			break;
-		}
-	}
+
+	if (i == NPC_MAX)
+		return;
+
+	gFrame.tgt_x = &gNPC[i].x;
+	gFrame.tgt_y = &gNPC[i].y;
+	gFrame.wait = wait;
 }
 
 void SetFrameTargetBoss(int no, int wait)