shithub: cstory

Download patch

ref: b5867c634a1893c50fa6fc68bc24801f8b4f1b1e
parent: adffe17cb7dac78f44ef674b5ffa0fb58f5b23a3
author: Clownacy <[email protected]>
date: Sun Feb 3 19:57:11 EST 2019

Added the fan objects

--- a/src/NpcAct.h
+++ b/src/NpcAct.h
@@ -88,6 +88,10 @@
 void ActNpc093(NPCHAR *npc);
 
 void ActNpc095(NPCHAR *npc);
+void ActNpc096(NPCHAR *npc);
+void ActNpc097(NPCHAR *npc);
+void ActNpc098(NPCHAR *npc);
+void ActNpc099(NPCHAR *npc);
 
 void ActNpc111(NPCHAR *npc);
 void ActNpc112(NPCHAR *npc);
--- a/src/NpcAct080.cpp
+++ b/src/NpcAct080.cpp
@@ -11,6 +11,7 @@
 #include "Caret.h"
 #include "Flash.h"
 #include "Frame.h"
+#include "CommonDefines.h"
 
 //Gravekeeper
 void ActNpc080(NPCHAR *npc)
@@ -1530,4 +1531,198 @@
 		npc->rect = rcLeft[npc->ani_no];
 	else
 		npc->rect = rcRight[npc->ani_no];
+}
+
+//Fan (left)
+void ActNpc096(NPCHAR *npc)
+{
+	RECT rc[3];
+
+	rc[0] = {272, 120, 288, 136};
+	rc[1] = {288, 120, 304, 136};
+	rc[2] = {304, 120, 320, 136};
+
+	switch (npc->act_no)
+	{
+		case 0:
+			if ( npc->direct == 2 )
+				npc->act_no = 2;
+			else
+				npc->ani_no = 1;
+
+			// Fallthrough
+		case 1:
+			npc->ani_no = 0;
+			break;
+
+		case 2:
+			if (++npc->ani_wait > 0)
+			{
+				npc->ani_wait = 0;
+				++npc->ani_no;
+			}
+
+			if (npc->ani_no > 2)
+				npc->ani_no = 0;
+
+			if (gMC.x > npc->x - (WINDOW_WIDTH * 0x200) && gMC.x < npc->x + (WINDOW_WIDTH * 0x200) && gMC.y > npc->y - (WINDOW_HEIGHT * 0x200) && gMC.y < npc->y + (WINDOW_HEIGHT * 0x200))
+			{
+				if (Random(0, 5) == 1)
+					SetNpChar(199, npc->x, npc->y + (Random(-8, 8) * 0x200), 0, 0, 0, 0, 0x100);
+			}
+
+			if (gMC.y < npc->y + 0x1000 && gMC.y > npc->y - 0x1000 && gMC.x < npc->x && gMC.x > npc->x - 0xC000)
+			{
+				gMC.xm -= 0x88;
+				gMC.cond |= 0x20;
+			}
+
+			break;
+	}
+
+	npc->rect = rc[npc->ani_no];
+}
+
+//Fan (up)
+void ActNpc097(NPCHAR *npc)
+{
+	RECT rc[3];
+
+	rc[0] = {272, 136, 288, 152};
+	rc[1] = {288, 136, 304, 152};
+	rc[2] = {304, 136, 320, 152};
+
+	switch (npc->act_no)
+	{
+		case 0:
+			if (npc->direct == 2)
+				npc->act_no = 2;
+			else
+				npc->ani_no = 1;
+
+			// Fallthrough
+		case 1:
+			npc->ani_no = 0;
+			break;
+
+		case 2:
+			if (++npc->ani_wait > 0)
+			{
+				npc->ani_wait = 0;
+				++npc->ani_no;
+			}
+
+			if (npc->ani_no > 2)
+				npc->ani_no = 0;
+
+			if (gMC.x > npc->x - (WINDOW_WIDTH * 0x200) && gMC.x < npc->x + (WINDOW_WIDTH * 0x200) && gMC.y > npc->y - (WINDOW_HEIGHT * 0x200) && gMC.y < npc->y + (WINDOW_HEIGHT * 0x200))
+			{
+				if (Random(0, 5) == 1)
+					SetNpChar(199, npc->x + (Random(-8, 8) * 0x200), npc->y, 0, 0, 1, 0, 0x100);
+			}
+
+			if (gMC.x < npc->x + 0x1000 && gMC.x > npc->x - 0x1000 && gMC.y < npc->y && gMC.y > npc->y - 0xC000)
+				gMC.ym -= 0x88;
+
+			break;
+	}
+
+	npc->rect = rc[npc->ani_no];
+}
+
+//Fan (right)
+void ActNpc098(NPCHAR *npc)
+{
+	RECT rc[3];
+
+	rc[0] = {272, 152, 288, 168};
+	rc[1] = {288, 152, 304, 168};
+	rc[2] = {304, 152, 320, 168};
+
+	switch (npc->act_no)
+	{
+		case 0:
+			if (npc->direct == 2)
+				npc->act_no = 2;
+			else
+				npc->ani_no = 1;
+
+			// Fallthrough
+		case 1:
+			npc->ani_no = 0;
+			break;
+
+		case 2:
+			if (++npc->ani_wait > 0)
+			{
+				npc->ani_wait = 0;
+				++npc->ani_no;
+			}
+
+			if (npc->ani_no > 2)
+				npc->ani_no = 0;
+
+			if (gMC.x > npc->x - (WINDOW_WIDTH * 0x200) && gMC.x < npc->x + (WINDOW_WIDTH * 0x200) && gMC.y > npc->y - (WINDOW_HEIGHT * 0x200) && gMC.y < npc->y + (WINDOW_HEIGHT * 0x200))
+			{
+				if (Random(0, 5) == 1)
+					SetNpChar(199, npc->x, npc->y + (Random(-8, 8) * 0x200), 0, 0, 2, 0, 0x100);
+			}
+
+			if (gMC.y < npc->y + 0x1000 && gMC.y > npc->y - 0x1000 && gMC.x < npc->x + 0xC000 && gMC.x > npc->x)
+			{
+				gMC.xm += 0x88;
+				gMC.cond |= 0x20;
+			}
+
+			break;
+	}
+
+	npc->rect = rc[npc->ani_no];
+}
+
+//Fan (down)
+void ActNpc099(NPCHAR *npc)
+{
+	RECT rc[3];
+
+	rc[0] = {272, 168, 288, 184};
+	rc[1] = {288, 168, 304, 184};
+	rc[2] = {304, 168, 320, 184};
+
+	switch (npc->act_no)
+	{
+		case 0:
+			if (npc->direct == 2)
+				npc->act_no = 2;
+			else
+				npc->ani_no = 1;
+
+			// Fallthrough
+		case 1:
+			npc->ani_no = 0;
+			break;
+
+		case 2:
+			if (++npc->ani_wait > 0)
+			{
+				npc->ani_wait = 0;
+				++npc->ani_no;
+			}
+
+			if (npc->ani_no > 2)
+				npc->ani_no = 0;
+
+			if (gMC.x > npc->x - (WINDOW_WIDTH * 0x200) && gMC.x < npc->x + (WINDOW_WIDTH * 0x200) && gMC.y > npc->y - (WINDOW_HEIGHT * 0x200) && gMC.y < npc->y + (WINDOW_HEIGHT * 0x200))
+			{
+				if (Random(0, 5) == 1)
+					SetNpChar(199, npc->x + (Random(-8, 8) * 0x200), npc->y, 0, 0, 3, 0, 0x100);
+			}
+
+			if (gMC.x < npc->x + 0x1000 && gMC.x > npc->x - 0x1000 && gMC.y < npc->y + 0xC000 && gMC.y > npc->y)
+				gMC.ym += 0x88;
+
+			break;
+	}
+
+	npc->rect = rc[npc->ani_no];
 }
--- a/src/NpcTbl.cpp
+++ b/src/NpcTbl.cpp
@@ -152,10 +152,10 @@
 	ActNpc093,
 	nullptr,
 	ActNpc095,
-	nullptr,
-	nullptr,
-	nullptr,
-	nullptr,
+	ActNpc096,
+	ActNpc097,
+	ActNpc098,
+	ActNpc099,
 	nullptr,
 	nullptr,
 	nullptr,