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);