shithub: cstory

Download patch

ref: 7a44e6c8e087be7fc1ddf04f12b1eaed4aa662b1
parent: fafce1f4c6c5b53aef944135ac72a8a02ad96702
author: cuckydev <[email protected]>
date: Wed Jan 30 11:41:18 EST 2019

Bullets collide with slopes

--- a/src/BulHit.cpp
+++ b/src/BulHit.cpp
@@ -151,6 +151,142 @@
 	return hit;
 }
 
+int JudgeHitBulletTriangleA(int x, int y, BULLET *bul)
+{
+	int hit = 0;
+	if (bul->x < (2 * x + 1) << 12
+		&& bul->x > (2 * x - 1) << 12
+		&& bul->y - 0x400 < (y << 13) - (-0x2000 * x + bul->x) / 2 + 0x800
+		&& bul->y + 0x400 > (2 * y - 1) << 12)
+	{
+		if (bul->bbits & 8)
+			bul->y = (y << 13) - (-0x2000 * x + bul->x) / 2 + 0xC00;
+		else
+			Vanish(bul);
+		hit = 0x82;
+	}
+	return hit;
+}
+
+int JudgeHitBulletTriangleB(int x, int y, BULLET *bul)
+{
+	int hit = 0;
+	if (bul->x < (2 * x + 1) << 12
+		&& bul->x > (2 * x - 1) << 12
+		&& bul->y - 0x400 < (y << 13) - (-0x2000 * x + bul->x) / 2 - 0x800
+		&& bul->y + 0x400 > (2 * y - 1) << 12)
+	{
+		if (bul->bbits & 8)
+			bul->y = (y << 13) - (-0x2000 * x + bul->x) / 2 - 0x400;
+		else
+			Vanish(bul);
+		hit = 0x82;
+	}
+	return hit;
+}
+
+int JudgeHitBulletTriangleC(int x, int y, BULLET *bul)
+{
+	int hit = 0;
+	if (bul->x < (2 * x + 1) << 12
+		&& bul->x > (2 * x - 1) << 12
+		&& bul->y - 0x400 < (y << 13) + (-0x2000 * x + bul->x) / 2 - 0x800
+		&& bul->y + 0x400 > (2 * y - 1) << 12)
+	{
+		if (bul->bbits & 8)
+			bul->y = (y << 13) + (-0x2000 * x + bul->x) / 2 - 0x400;
+		else
+			Vanish(bul);
+		hit = 0x82;
+	}
+	return hit;
+}
+
+int JudgeHitBulletTriangleD(int x, int y, BULLET *bul)
+{
+	int hit = 0;
+	if (bul->x < (2 * x + 1) << 12
+		&& bul->x > (2 * x - 1) << 12
+		&& bul->y - 0x400 < (y << 13) + (-0x2000 * x + bul->x) / 2 + 0x800
+		&& bul->y + 0x400 > (2 * y - 1) << 12)
+	{
+		if (bul->bbits & 8)
+			bul->y = (y << 13) + (-0x2000 * x + bul->x) / 2 + 0xC00;
+		else
+			Vanish(bul);
+		hit = 0x82;
+	}
+	return hit;
+}
+
+int JudgeHitBulletTriangleE(int x, int y, BULLET *bul)
+{
+	int hit = 0;
+	if (bul->x < (2 * x + 1) << 12
+		&& bul->x - 0x200 > (2 * x - 1) << 12
+		&& bul->y + 0x400 > (y << 13) + (-0x2000 * x + bul->x) / 2 - 0x800
+		&& bul->y - 0x400 < (2 * y + 1) << 12 )
+	{
+		if (bul->bbits & 8)
+			bul->y = (y << 13) + (-0x2000 * x + bul->x) / 2 - 0xC00;
+		else
+			Vanish(bul);
+		hit = 0x28;
+	}
+	return hit;
+}
+
+int JudgeHitBulletTriangleF(int x, int y, BULLET *bul)
+{
+	int hit = 0;
+	if (bul->x < (2 * x + 1) << 12
+		&& bul->x > (2 * x - 1) << 12
+		&& bul->y + 0x400 > (y << 13) + (-0x2000 * x + bul->x) / 2 + 0x800
+		&& bul->y - 0x400 < (2 * y + 1) << 12)
+	{
+		if (bul->bbits & 8)
+			bul->y = (y << 13) + (-0x2000 * x + bul->x) / 2 + 0x400;
+		else
+			Vanish(bul);
+		hit = 0x28;
+	}
+	return hit;
+}
+
+int JudgeHitBulletTriangleG(int x, int y, BULLET *bul)
+{
+	int hit = 0;
+	if (bul->x < (2 * x + 1) << 12
+		&& bul->x > (2 * x - 1) << 12
+		&& bul->y + 0x400 > (y << 13) - (-0x2000 * x + bul->x) / 2 + 0x800
+		&& bul->y - 0x400 < (2 * y + 1) << 12)
+	{
+		if (bul->bbits & 8)
+			bul->y = (y << 13) - (-0x2000 * x + bul->x) / 2 + 0x400;
+		else
+			Vanish(bul);
+		hit = 0x18;
+	}
+	return hit;
+}
+
+int JudgeHitBulletTriangleH(int x, int y, BULLET *bul)
+{
+	int hit = 0;
+	if (bul->x < (2 * x + 1) << 12
+		&& bul->x > (2 * x - 1) << 12
+		&& bul->y + 0x400 > (y << 13) - (-0x2000 * x + bul->x) / 2 - 0x800
+		&& bul->y - 0x400 < (2 * y + 1) << 12 )
+	{
+		if (bul->bbits & 8)
+			bul->y = (y << 13) - (-0x2000 * x + bul->x) / 2 - 0xC00;
+		else
+			Vanish(bul);
+		hit = 0x18;
+	}
+	return hit;
+}
+
 void HitBulletMap()
 {
 	for (int i = 0; i < BULLET_MAX; i++)
@@ -196,7 +332,6 @@
 							case 0x64:
 								gBul[i].flag |= JudgeHitBulletBlock(x + offx[j], y + offy[j], &gBul[i]);
 								break;
-						/*
 							case 0x50:
 							case 0x70:
 								gBul[i].flag |= JudgeHitBulletTriangleA(x + offx[j], y + offy[j], &gBul[i]);
@@ -229,7 +364,6 @@
 							case 0x77:
 								gBul[i].flag |= JudgeHitBulletTriangleH(x + offx[j], y + offy[j], &gBul[i]);
 								break;
-						*/
 							default:
 								break;
 						}
--- a/src/Main.cpp
+++ b/src/Main.cpp
@@ -236,10 +236,6 @@
 		}
 		
 		//Create window
-		#ifdef WINDOWS
-		SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl"); //This fixes textures unloading in fullscreen
-		#endif
-		
 		gWindow = SDL_CreateWindow(lpWindowName, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, gWindowWidth, gWindowHeight, bFullscreen ? SDL_WINDOW_FULLSCREEN : 0);
 		
 		if (gWindow)