shithub: cstory

Download patch

ref: d019b8561670e522fcc3a8ab88a68fb4a88cab01
parent: 2d23396d0deaf3c76df0dfa81df6497157697eeb
author: Clownacy <[email protected]>
date: Mon Feb 25 19:36:09 EST 2019

Made MiniMap.cpp supposedly ASM-accurate

Goes toward #74
A few core functions like Flip_SystemTask and GetTrg have a different
number of parameters to the original version of the game, so they cause
the ASM to generate differently.

--- a/src/MiniMap.cpp
+++ b/src/MiniMap.cpp
@@ -16,10 +16,13 @@
 #include "MyChar.h"
 #include "Stage.h"
 
-BOOLEAN gMapping[0x80];
+char gMapping[0x80];
 
 void WriteMiniMapLine(int line)
 {
+	int x;
+	unsigned char a;
+
 	RECT rcLevel[4] = {
 		{240, 24, 241, 25},
 		{241, 24, 242, 25},
@@ -27,69 +30,63 @@
 		{243, 24, 244, 25},
 	};
 	
-	for (int x = 0; x < gMap.width; x++)
+	for (x = 0; x < gMap.width; x++)
 	{
-		uint8_t a = GetAttribute(x, line);
-				
-		switch (a)
-		{
-			case 0:
-				Surface2Surface(x, line, &rcLevel[0], 9, 26);
-				break;
+		a = GetAttribute(x, line);
 
-			case 68:
-			case 1:
-			case 64:
-			case 128:
-			case 129:
-			case 130:
-			case 131:
-			case 81:
-			case 82:
-			case 85:
-			case 86:
-			case 2:
-			case 96:
-			case 113:
-			case 114:
-			case 117:
-			case 118:
-			case 160:
-			case 161:
-			case 162:
-			case 163:
-				Surface2Surface(x, line, &rcLevel[1], 9, 26);
-				break;
-				
-			case 67:
-			case 99:
-			case 80:
-			case 83:
-			case 84:
-			case 87:
-			case 112:
-			case 115:
-			case 116:
-			case 119:
-				Surface2Surface(x, line, &rcLevel[2], 9, 26);
-				break;
-				
-			default:
-				Surface2Surface(x, line, &rcLevel[3], 9, 26);
-				break;
-		}
+		// Yup. This really is an if/else chain.
+		// No switch here.
+		if (a == 0)
+			Surface2Surface(x, line, &rcLevel[0], 9, 26);
+		else if (a == 68 ||
+			a == 1 ||
+			a == 64 ||
+			a == 128 ||
+			a == 129 ||
+			a == 130 ||
+			a == 131 ||
+			a == 81 ||
+			a == 82 ||
+			a == 85 ||
+			a == 86 ||
+			a == 2 ||
+			a == 96 ||
+			a == 113 ||
+			a == 114 ||
+			a == 117 ||
+			a == 118 ||
+			a == 160 ||
+			a == 161 ||
+			a == 162 ||
+			a == 163)
+			Surface2Surface(x, line, &rcLevel[1], 9, 26);
+		else if (a == 67 ||
+			a == 99 ||
+			a == 80 ||
+			a == 83 ||
+			a == 84 ||
+			a == 87 ||
+			a == 96 ||	// This is already listed above
+			a == 112 ||
+			a == 115 ||
+			a == 116 ||
+			a == 119)
+			Surface2Surface(x, line, &rcLevel[2], 9, 26);
+		else
+			Surface2Surface(x, line, &rcLevel[3], 9, 26);
 	}
-	return;
 }
 
 int MiniMapLoop()
 {
+	int f;
+
 	RECT my_rect = {0, 57, 1, 58};
 	int my_x = (gMC.x / 0x200 + 8) / 16;
 	int my_y = (gMC.y / 0x200 + 8) / 16;
 	
 	RECT rcView;
-	for (int f = 0; f <= 8; f++)
+	for (f = 0; f <= 8; f++)
 	{
 		GetTrg();
 		
@@ -106,10 +103,10 @@
 		
 		PutBitmap4(&grcGame, 0, 0, &grcGame, SURFACE_ID_SCREEN_GRAB);
 		
-		rcView.left = (WINDOW_WIDTH / 2) - f * gMap.width / 16;
-		rcView.right = (WINDOW_WIDTH / 2) + f * gMap.width / 16;
-		rcView.top = (WINDOW_HEIGHT / 2) - f * gMap.length / 16;
-		rcView.bottom = (WINDOW_HEIGHT / 2) + f * gMap.length / 16;
+		rcView.left = (WINDOW_WIDTH / 2) - gMap.width * f / 8 / 2;
+		rcView.right = (WINDOW_WIDTH / 2) + gMap.width * f / 8 / 2;
+		rcView.top = (WINDOW_HEIGHT / 2) - gMap.length * f / 8 / 2;
+		rcView.bottom = (WINDOW_HEIGHT / 2) + gMap.length * f / 8 / 2;
 
 		PutMapName(true);
 		CortBox(&rcView, 0);
@@ -119,7 +116,12 @@
 			return 0;
 	}
 	
-	RECT rcMiniMap = {0, 0, gMap.width, gMap.length};
+	RECT rcMiniMap;
+	rcMiniMap.left = 0;
+	rcMiniMap.top = gMap.width;
+	rcMiniMap.right = 0;
+	rcMiniMap.bottom = gMap.length;
+
 	rcView.right = --rcView.left + gMap.width + 2;
 	rcView.bottom = --rcView.top + gMap.length + 2;
 	CortBox2(&rcMiniMap, 0, SURFACE_ID_MAP);
@@ -147,15 +149,22 @@
 		PutBitmap4(&grcGame, 0, 0, &grcGame, SURFACE_ID_SCREEN_GRAB);
 		CortBox(&rcView, 0);
 		
-		if (gMap.length > line)
-			WriteMiniMapLine(line++);
-		if (gMap.length > line)
-			WriteMiniMapLine(line++);
+		if (line < gMap.length)
+		{
+			WriteMiniMapLine(line);
+			line++;
+		}
+		if (line < gMap.length)
+		{
+			WriteMiniMapLine(line);
+			line++;
+		}
+
 		PutBitmap3(&grcGame, rcView.left + 1, rcView.top + 1, &rcMiniMap, SURFACE_ID_MAP);
 		
 		PutMapName(true);
 		
-		if ((++my_wait >> 3) & 1)
+		if (++my_wait / 8 % 2)
 			PutBitmap3(&grcGame, my_x + rcView.left + 1, my_y + rcView.top + 1, &my_rect, SURFACE_ID_TEXT_BOX);
 		
 		PutFramePerSecound();
@@ -163,7 +172,7 @@
 			return 0;
 	}
 	
-	for (int f = 8; f >= -1; --f)
+	for (f = 8; f >= -1; --f)
 	{
 		GetTrg();
 
@@ -180,10 +189,10 @@
 
 		PutBitmap4(&grcGame, 0, 0, &grcGame, SURFACE_ID_SCREEN_GRAB);
 
-		rcView.left = (WINDOW_WIDTH / 2) - f * gMap.width / 16;
-		rcView.right = (WINDOW_WIDTH / 2) + f * gMap.width / 16;
-		rcView.top = (WINDOW_HEIGHT / 2) - f * gMap.length / 16;
-		rcView.bottom = (WINDOW_HEIGHT / 2) + f * gMap.length / 16;
+		rcView.left = (WINDOW_WIDTH / 2) - gMap.width * f / 8 / 2;
+		rcView.right = (WINDOW_WIDTH / 2) + gMap.width * f / 8 / 2;
+		rcView.top = (WINDOW_HEIGHT / 2) - gMap.length * f / 8 / 2;
+		rcView.bottom = (WINDOW_HEIGHT / 2) + gMap.length * f / 8 / 2;
 
 		PutMapName(true);
 		CortBox(&rcView, 0);
@@ -198,7 +207,10 @@
 
 BOOL IsMapping()
 {
-	return gMapping[gStageNo];
+	if (gMapping[gStageNo] == FALSE)
+		return FALSE;
+	else
+		return TRUE;
 }
 
 void StartMapping()
--- a/src/MiniMap.h
+++ b/src/MiniMap.h
@@ -4,7 +4,7 @@
 
 #include "WindowsWrapper.h"
 
-extern BOOLEAN gMapping[0x80];
+extern char gMapping[0x80];
 
 int MiniMapLoop();
 BOOL IsMapping();
--- a/src/WindowsWrapper.h
+++ b/src/WindowsWrapper.h
@@ -4,7 +4,6 @@
 void rep_srand(unsigned int seed);
 
 typedef int BOOL;
-typedef unsigned char BOOLEAN;
 
 #ifndef FALSE
 #define FALSE 0