shithub: cstory

Download patch

ref: ca031aebfe16d0026b86065824d4bc145258ffb2
parent: 1dfab3521dd38e0d41edd41acc757138c1fe5d22
parent: de6bf5209caaefb06b74d116f9b36a27902be676
author: Clownacy <[email protected]>
date: Sun Feb 3 15:10:13 EST 2019

Merge branch 'master' of https://github.com/cuckydev/Cave-Story-Engine-2

--- a/Makefile
+++ b/Makefile
@@ -91,6 +91,7 @@
 	Shoot \
 	Sound \
 	Stage \
+	Star \
 	SelStage \
 	TextScr \
 	Triangle \
binary files /dev/null b/build/Save Curly Booster v2 Spur Whimsical Star.dat differ
--- a/src/Bullet.cpp
+++ b/src/Bullet.cpp
@@ -1018,6 +1018,12 @@
 	}
 }
 
+void ActBullet_Star(BULLET *bul)
+{
+	if (++bul->count1 > bul->life_count)
+		bul->cond = 0;
+}
+
 void ActBullet()
 {
 	for (int i = 0; i < BULLET_MAX; i++)
@@ -1092,7 +1098,11 @@
 					case 33:
 						ActBullet_SuperBom(&gBul[i], 3);
 						break;
-
+					case 45:
+						ActBullet_Star(&gBul[i]);
+						break;
+					default:
+						continue;
 				}
 			}
 			else
--- a/src/Game.cpp
+++ b/src/Game.cpp
@@ -17,6 +17,7 @@
 #include "Bullet.h"
 #include "BulHit.h"
 #include "Shoot.h"
+#include "Star.h"
 #include "Fade.h"
 #include "Frame.h"
 #include "Flags.h"
@@ -103,7 +104,7 @@
 {
 	InitNpChar();
 	InitCaret();
-	//InitStar();
+	InitStar();
 	InitFade();
 	InitFlash();
 	InitBossLife();
@@ -245,7 +246,7 @@
 	
 	//Reset everything
 	InitCaret();
-	//InitStar();
+	InitStar();
 	CutNoise();
 	
 	//Create variables
@@ -436,7 +437,7 @@
 	InitNpChar();
 	InitBullet();
 	InitCaret();
-	//InitStar();
+	InitStar();
 	InitFade();
 	InitFlash();
 	ClearArmsData();
@@ -470,7 +471,7 @@
 				else
 					ActMyChar(false);
 				
-				//ActStar();
+				ActStar();
 				ActNpChar();
 				ActBossChar();
 				ActValueView();
@@ -513,7 +514,7 @@
 			PutNpChar(frame_x, frame_y);
 			PutBullet(frame_x, frame_y);
 			PutMyChar(frame_x, frame_y);
-			//PutStar(frame_x, frame_y);
+			PutStar(frame_x, frame_y);
 			PutMapDataVector(frame_x, frame_y);
 			PutStage_Front(frame_x, frame_y);
 			PutFront(frame_x, frame_y);
--- a/src/MyChar.cpp
+++ b/src/MyChar.cpp
@@ -14,6 +14,7 @@
 #include "TextScr.h"
 #include "Flags.h"
 #include "Game.h"
+#include "Star.h"
 #include "Caret.h"
 
 MYCHAR gMC;
@@ -740,7 +741,7 @@
 	gMC.xm = 0;
 	gMC.ym = 0;
 	gMC.cond &= ~1;
-	//InitStar();
+	InitStar();
 }
 
 void MoveMyChar(int x, int y)
--- a/src/Profile.cpp
+++ b/src/Profile.cpp
@@ -11,6 +11,7 @@
 #include "Flags.h"
 #include "MiniMap.h"
 #include "MyChar.h"
+#include "Star.h"
 #include "NpChar.h"
 #include "Frame.h"
 #include "SelStage.h"
@@ -215,7 +216,7 @@
 	SetFrameTargetMyChar(16);
 	InitBossLife();
 	CutNoise();
-	//InitStar();
+	InitStar();
 	ClearValueView();
 	gCurlyShoot_wait = 0;
 	return true;
--- a/src/Stage.cpp
+++ b/src/Stage.cpp
@@ -8,6 +8,7 @@
 #include "Map.h"
 #include "MapName.h"
 #include "MyChar.h"
+#include "Bullet.h"
 #include "Boss.h"
 #include "Draw.h"
 #include "Tags.h"
@@ -192,7 +193,7 @@
 		
 		StartTextScript(w);
 		SetFrameMyChar();
-		//ClearBullet();
+		ClearBullet();
 		InitCaret();
 		ClearValueView();
 		ResetQuake();
--- /dev/null
+++ b/src/Star.cpp
@@ -1,0 +1,126 @@
+#include <string.h>
+
+#include "WindowsWrapper.h"
+
+#include "MyChar.h"
+#include "Draw.h"
+#include "Bullet.h"
+#include "Game.h"
+
+static struct
+{
+	int cond;
+	int code;
+	int direct;
+	int x;
+	int y;
+	int xm;
+	int ym;
+	int act_no;
+	int act_wait;
+	int ani_no;
+	int ani_wait;
+	int view_left;
+	int view_top;
+	RECT rect;
+} star[3];
+
+void InitStar()
+{
+	//Clear stars
+	memset(star, 0, sizeof(star));
+	
+	//Position
+	star[0].x = gMC.x;
+	star[0].y = gMC.y;
+	
+	star[1].x = gMC.x;
+	star[1].y = gMC.y;
+	
+	star[2].x = gMC.x;
+	star[2].y = gMC.y;
+	
+	//Speed
+	star[0].xm = 0x400;
+	star[0].ym = -0x200;
+	
+	star[1].xm = -0x200;
+	star[1].ym = 0x400;
+	
+	star[2].xm = 0x200;
+	star[2].ym = 0x200;
+}
+
+void ActStar()
+{
+	static int a;
+	a++;
+	a %= 3;
+	
+	for (int i = 0; i < 3; i++)
+	{
+		if (i)
+		{
+			if (star[i - 1].x >= star[i].x)
+				star[i].xm += 0x80;
+			else
+				star[i].xm -= 0x80;
+			
+			if (star[i - 1].y >= star[i].y)
+				star[i].ym += 0xAA;
+			else
+				star[i].ym -= 0xAA;
+		}
+		else
+		{
+			if (gMC.x >= star[0].x)
+				star[0].xm += 0x80;
+			else
+				star[0].xm -= 0x80;
+			if (gMC.y >= star[0].y)
+				star[0].ym += 0xAA;
+			else
+				star[0].ym -= 0xAA;
+		}
+		
+		if (star[i].xm > 0xA00)
+			star[i].xm = 0xA00;
+		if (star[i].xm < -0xA00)
+			star[i].xm = -0xA00;
+		if (star[i].ym > 0xA00)
+			star[i].ym = 0xA00;
+		if (star[i].ym < -0xA00)
+			star[i].ym = -0xA00;
+		if (star[i].xm > 0xA00)
+			star[i].xm = 0xA00;
+		if (star[i].xm < -0xA00)
+			star[i].xm = -0xA00;
+		if (star[i].ym > 0xA00)
+			star[i].ym = 0xA00;
+		if (star[i].ym < -0xA00)
+			star[i].ym = -0xA00;
+		
+		star[i].x += star[i].xm;
+		star[i].y += star[i].ym;
+		
+		if (gMC.star > i && (gMC.equip & 0x80) && (g_GameFlags & 2) && a == i)
+			SetBullet(45, star[a].x, star[a].y, 0);
+	}
+}
+
+void __cdecl PutStar(int fx, int fy)
+{
+	RECT rc[3];
+	rc[0] = {192, 0, 200, 8};
+	rc[1] = {192, 8, 200, 16};
+	rc[2] = {192, 16, 200, 24};
+	
+	if (!(gMC.cond & 2) && (gMC.equip & 0x80))
+	{
+		for (int i = 0; i < 3; i++)
+		{
+			if (gMC.star > i)
+				PutBitmap3(&grcGame, star[i].x / 0x200 - fx / 0x200 - 4, star[i].y / 0x200 - fy / 0x200 - 4, &rc[i], 16);
+		}
+	}
+}
--- /dev/null
+++ b/src/Star.h
@@ -1,0 +1,4 @@
+#pragma once
+void InitStar();
+void ActStar();
+void PutStar(int fx, int fy);