ref: 74bdbf86ca1ca3f78025ab92c37248419d9e8907
parent: 4f7db164d68fa3ad6f062b5c5911c5b6d59ea150
author: Clownacy <Clownacy@users.noreply.github.com>
date: Wed Jan 30 13:13:23 EST 2019
More NPCs Cemetery done (minus Ma Pignon of course)
--- a/Makefile
+++ b/Makefile
@@ -73,6 +73,7 @@
NpcAct120 \
NpcAct140 \
NpcAct200 \
+ NpcAct260 \
NpcAct280 \
NpcAct300 \
NpcAct340 \
--- a/src/NpcAct.h
+++ b/src/NpcAct.h
@@ -49,6 +49,7 @@
void ActNpc064(NPCHAR *npc);
void ActNpc065(NPCHAR *npc);
+void ActNpc069(NPCHAR *npc);
void ActNpc070(NPCHAR *npc);
void ActNpc071(NPCHAR *npc);
void ActNpc072(NPCHAR *npc);
@@ -59,6 +60,8 @@
void ActNpc077(NPCHAR *npc);
void ActNpc078(NPCHAR *npc);
void ActNpc079(NPCHAR *npc);
+void ActNpc080(NPCHAR *npc);
+void ActNpc081(NPCHAR *npc);
void ActNpc083(NPCHAR *npc);
void ActNpc084(NPCHAR *npc);
@@ -77,6 +80,8 @@
void ActNpc151(NPCHAR *npc);
void ActNpc211(NPCHAR *npc);
+
+void ActNpc278(NPCHAR *npc);
void ActNpc298(NPCHAR *npc);
void ActNpc299(NPCHAR *npc);
--- a/src/NpcAct060.cpp
+++ b/src/NpcAct060.cpp
@@ -661,6 +661,142 @@
}
//Sparkle
+void ActNpc069(NPCHAR *npc)
+{
+ RECT rcLeft[6];
+ RECT rcRight[6];
+
+ rcLeft[0] = {48, 0, 64, 16};
+ rcLeft[1] = {64, 0, 80, 16};
+ rcLeft[2] = {80, 0, 96, 16};
+ rcLeft[3] = {96, 0, 112, 16};
+ rcLeft[4] = {48, 0, 64, 16};
+ rcLeft[5] = {112, 0, 128, 16};
+
+ rcRight[0] = {48, 16, 64, 32};
+ rcRight[1] = {64, 16, 80, 32};
+ rcRight[2] = {80, 16, 96, 32};
+ rcRight[3] = {96, 16, 112, 32};
+ rcRight[4] = {48, 16, 64, 32};
+ rcRight[5] = {112, 16, 128, 32};
+
+ switch (npc->act_no)
+ {
+ case 0:
+ npc->act_no = 1;
+ npc->ani_no = 0;
+ npc->ani_wait = 0;
+ npc->xm = 0;
+ // Fallthrough
+ case 1:
+ if (Random(0, 100) == 1)
+ {
+ npc->act_no = 2;
+ npc->act_wait = 0;
+ npc->ani_no = 1;
+ }
+ else
+ {
+ if (Random(0, 150) == 1)
+ {
+ if (npc->direct == 0)
+ npc->direct = 2;
+ else
+ npc->direct = 0;
+ }
+
+ if (Random(0, 150) == 1)
+ {
+ npc->act_no = 3;
+ npc->act_wait = 50;
+ npc->ani_no = 0;
+ }
+ }
+
+ break;
+
+ case 2:
+ if (++npc->act_wait > 8)
+ {
+ npc->act_no = 1;
+ npc->ani_no = 0;
+ }
+
+ break;
+
+ case 3:
+ npc->act_no = 4;
+ npc->ani_no = 2;
+ npc->ani_wait = 0;
+ // Fallthrough
+ case 4:
+ if (--npc->act_wait == 0)
+ npc->act_no = 0;
+
+ if (++npc->ani_wait > 2)
+ {
+ npc->ani_wait = 0;
+ ++npc->ani_no;
+ }
+
+ if (npc->ani_no > 4)
+ npc->ani_no = 2;
+
+ if (npc->flag & 1)
+ {
+ npc->direct = 2;
+ npc->xm = 0x200;
+ }
+
+ if (npc->flag & 4)
+ {
+ npc->direct = 0;
+ npc->xm = -0x200;
+ }
+
+ if (npc->direct == 0)
+ npc->xm = -0x100u;
+ else
+ npc->xm = 0x100;
+
+ break;
+
+ case 5:
+ if (npc->flag & 8)
+ npc->act_no = 0;
+
+ break;
+ }
+
+ switch (npc->act_no)
+ {
+ case 1:
+ case 2:
+ case 4:
+ if (npc->shock)
+ {
+ npc->ym = -0x200;
+ npc->ani_no = 5;
+ npc->act_no = 5;
+ }
+
+ break;
+ }
+
+ npc->ym += 0x40;
+ if (npc->ym > 0x5FF)
+ npc->ym = 0x5FF;
+
+ npc->x += npc->xm;
+ npc->y += npc->ym;
+
+ if (npc->direct == 0)
+ npc->rect = rcLeft[npc->ani_no];
+ else
+ npc->rect = rcRight[npc->ani_no];
+}
+
+//Sparkle
void ActNpc070(NPCHAR *npc)
{
RECT rect[4];
--- a/src/NpcAct080.cpp
+++ b/src/NpcAct080.cpp
@@ -10,6 +10,298 @@
#include "Triangle.h"
#include "Caret.h"
+//Gravekeeper
+void ActNpc080(NPCHAR *npc)
+{
+ RECT rcLeft[7];
+ RECT rcRight[7];
+
+ rcLeft[0] = {0, 64, 24, 88};
+ rcLeft[1] = {24, 64, 48, 88};
+ rcLeft[2] = {0, 64, 24, 88};
+ rcLeft[3] = {48, 64, 72, 88};
+ rcLeft[4] = {72, 64, 96, 88};
+ rcLeft[5] = {96, 64, 120, 88};
+ rcLeft[6] = {120, 64, 144, 88};
+
+ rcRight[0] = {0, 88, 24, 112};
+ rcRight[1] = {24, 88, 48, 112};
+ rcRight[2] = {0, 88, 24, 112};
+ rcRight[3] = {48, 88, 72, 112};
+ rcRight[4] = {72, 88, 96, 112};
+ rcRight[5] = {96, 88, 120, 112};
+ rcRight[6] = {120, 88, 144, 112};
+
+ switch (npc->act_no)
+ {
+ case 0:
+ npc->bits &= ~0x20;
+ npc->act_no = 1;
+ npc->damage = 0;
+ npc->hit.front = 0x800;
+ // Fallthrough
+ case 1:
+ npc->ani_no = 0;
+
+ if (npc->x - 0x10000 < gMC.x && npc->x + 0x10000 > gMC.x && npc->y - 0x6000 < gMC.y && npc->y + 0x4000 > gMC.y)
+ {
+ npc->ani_wait = 0;
+ npc->act_no = 2;
+ }
+
+ if (npc->shock)
+ {
+ npc->ani_no = 1;
+ npc->ani_wait = 0;
+ npc->act_no = 2;
+ npc->bits &= ~0x20u;
+ }
+
+ if (gMC.x >= npc->x)
+ npc->direct = 2;
+ else
+ npc->direct = 0;
+
+ break;
+
+ case 2:
+ if (++npc->ani_wait > 6)
+ {
+ npc->ani_wait = 0;
+ ++npc->ani_no;
+ }
+
+ if (npc->ani_no > 3)
+ npc->ani_no = 0;
+
+ if (npc->x - 0x2000 < gMC.x && npc->x + 0x2000 > gMC.x)
+ {
+ npc->hit.front = 0x2400;
+ npc->act_wait = 0;
+ npc->act_no = 3;
+ npc->bits |= 0x20;
+ PlaySoundObject(34, 1);
+
+ if (npc->direct == 0)
+ npc->xm = -0x400;
+ else
+ npc->xm = 0x400;
+ }
+
+ if (gMC.x >= npc->x)
+ {
+ npc->direct = 2;
+ npc->xm = 0x100;
+ }
+ else
+ {
+ npc->direct = 0;
+ npc->xm = -0x100;
+ }
+
+ break;
+
+ case 3:
+ npc->xm = 0;
+
+ if (++npc->act_wait > 40)
+ {
+ npc->act_wait = 0;
+ npc->act_no = 4;
+ PlaySoundObject(106, 1);
+ }
+
+ npc->ani_no = 4;
+ break;
+
+ case 4:
+ npc->damage = 10;
+
+ if (++npc->act_wait > 2)
+ {
+ npc->act_wait = 0;
+ npc->act_no = 5;
+ }
+
+ npc->ani_no = 5;
+ break;
+
+ case 5:
+ npc->ani_no = 6;
+
+ if (++npc->act_wait > 60)
+ npc->act_no = 0;
+
+ break;
+ }
+
+ if (npc->xm < 0 && npc->flag & 1)
+ npc->xm = 0;
+ if (npc->xm > 0 && npc->flag & 4)
+ npc->xm = 0;
+
+ npc->ym += 0x20;
+
+ if (npc->xm > 0x400)
+ npc->xm = 0x400;
+ if (npc->xm < -0x400)
+ npc->xm = -0x400;
+
+ if (npc->ym > 0x5FF)
+ npc->xm = 0x5FF;
+ if (npc->ym < -0x5FF)
+ npc->xm = -0x5FF;
+
+ npc->x += npc->xm;
+ npc->y += npc->ym;
+
+ if (npc->direct == 0)
+ npc->rect = rcLeft[npc->ani_no];
+ else
+ npc->rect = rcRight[npc->ani_no];
+}
+
+//Giant pignon
+void ActNpc081(NPCHAR *npc)
+{
+ RECT rcLeft[6];
+ RECT rcRight[6];
+
+ rcLeft[0] = {144, 64, 168, 88};
+ rcLeft[1] = {168, 64, 192, 88};
+ rcLeft[2] = {192, 64, 216, 88};
+ rcLeft[3] = {216, 64, 240, 88};
+ rcLeft[4] = {144, 64, 168, 88};
+ rcLeft[5] = {240, 64, 264, 88};
+
+ rcRight[0] = {144, 88, 168, 112};
+ rcRight[1] = {168, 88, 192, 112};
+ rcRight[2] = {192, 88, 216, 112};
+ rcRight[3] = {216, 88, 240, 112};
+ rcRight[4] = {144, 88, 168, 112};
+ rcRight[5] = {240, 88, 264, 112};
+
+ switch (npc->act_no)
+ {
+ case 0:
+ npc->act_no = 1;
+ npc->ani_no = 0;
+ npc->ani_wait = 0;
+ npc->xm = 0;
+ // Fallthrough
+ case 1:
+ if (Random(0, 100) == 1)
+ {
+ npc->act_no = 2;
+ npc->act_wait = 0;
+ npc->ani_no = 1;
+ }
+ else
+ {
+ if (Random(0, 150) == 1)
+ {
+ if (npc->direct == 0)
+ npc->direct = 2;
+ else
+ npc->direct = 0;
+ }
+
+ if (Random(0, 150) == 1)
+ {
+ npc->act_no = 3;
+ npc->act_wait = 50;
+ npc->ani_no = 0;
+ }
+ }
+
+ break;
+
+ case 2:
+ if (++npc->act_wait > 8)
+ {
+ npc->act_no = 1;
+ npc->ani_no = 0;
+ }
+
+ break;
+
+ case 3:
+ npc->act_no = 4;
+ npc->ani_no = 2;
+ npc->ani_wait = 0;
+ // Fallthrough
+ case 4:
+ if (--npc->act_wait == 0)
+ npc->act_no = 0;
+
+ if (++npc->ani_wait > 2)
+ {
+ npc->ani_wait = 0;
+ ++npc->ani_no;
+ }
+
+ if (npc->ani_no > 4)
+ npc->ani_no = 2;
+
+ if (npc->flag & 1)
+ {
+ npc->direct = 2;
+ npc->xm = 0x200;
+ }
+
+ if (npc->flag & 4)
+ {
+ npc->direct = 0;
+ npc->xm = -0x200;
+ }
+
+ if (npc->direct == 0)
+ npc->xm = -0x100;
+ else
+ npc->xm = 0x100;
+
+ break;
+
+ case 5:
+ if (npc->flag & 8)
+ npc->act_no = 0;
+
+ break;
+ }
+
+ switch (npc->act_no)
+ {
+ case 1:
+ case 2:
+ case 4:
+ if (npc->shock )
+ {
+ npc->ym = -0x200;
+ npc->ani_no = 5;
+ npc->act_no = 5;
+
+ if (npc->x >= gMC.x)
+ npc->xm = -0x100;
+ else
+ npc->xm = 0x100;
+ }
+
+ break;
+ }
+
+ npc->ym += 0x40;
+ if (npc->ym > 0x5FF)
+ npc->ym = 0x5FF;
+
+ npc->x += npc->xm;
+ npc->y += npc->ym;
+
+ if (npc->direct == 0)
+ npc->rect = rcLeft[npc->ani_no];
+ else
+ npc->rect = rcRight[npc->ani_no];
+}
+
//Igor (cutscene)
void ActNpc083(NPCHAR *npc)
{
--- /dev/null
+++ b/src/NpcAct260.cpp
@@ -1,0 +1,122 @@
+#include "WindowsWrapper.h"
+
+#include "NpcAct.h"
+
+#include "MyChar.h"
+#include "NpChar.h"
+#include "Game.h"
+#include "Sound.h"
+#include "Back.h"
+#include "Triangle.h"
+
+//Little family
+void ActNpc278(NPCHAR *npc)
+{
+ RECT rcMama[2];
+ RECT rcPapa[2];
+ RECT rcKodomo[2];
+
+ rcPapa[0] = {0, 120, 8, 128};
+ rcPapa[1] = {8, 120, 16, 128};
+
+ rcMama[0] = {16, 120, 24, 128};
+ rcMama[1] = {24, 120, 32, 128};
+
+ rcKodomo[0] = {32, 120, 40, 128};
+ rcKodomo[1] = {40, 120, 48, 128};
+
+ switch (npc->act_no)
+ {
+ case 0:
+ npc->act_no = 1;
+ npc->ani_no = 0;
+ npc->ani_wait = 0;
+ npc->xm = 0;
+ // Fallthrough
+ case 1:
+ if (Random(0, 60) == 1)
+ {
+ npc->act_no = 2;
+ npc->act_wait = 0;
+ npc->ani_no = 1;
+ }
+
+ if (Random(0, 60) == 1)
+ {
+ npc->act_no = 10;
+ npc->act_wait = 0;
+ npc->ani_no = 1;
+ }
+
+ break;
+
+ case 2:
+ if (++npc->act_wait > 8)
+ {
+ npc->act_no = 1;
+ npc->ani_no = 0;
+ }
+
+ break;
+
+ case 10:
+ npc->act_no = 11;
+ npc->act_wait = Random(0, 16);
+ npc->ani_no = 0;
+ npc->ani_wait = 0;
+
+ if (Random(0, 9) % 2)
+ npc->direct = 0;
+ else
+ npc->direct = 2;
+
+ // Fallthrough
+ case 11:
+ if (npc->direct == 0 && (npc->flag & 1))
+ npc->direct = 2;
+ else if ( npc->direct == 2 && npc->flag & 4 )
+ npc->direct = 0;
+
+ if (npc->direct == 0)
+ npc->xm = -0x100;
+ else
+ npc->xm = 0x100;
+
+ if (++npc->ani_wait > 4)
+ {
+ npc->ani_wait = 0;
+ ++npc->ani_no;
+ }
+
+ if (npc->ani_no > 1)
+ npc->ani_no = 0;
+
+ if (++npc->act_wait > 0x20)
+ npc->act_no = 0;
+
+ break;
+ }
+
+ npc->ym += 0x20;
+ if (npc->ym > 0x5FF)
+ npc->ym = 0x5FF;
+
+ npc->x += npc->xm;
+ npc->y += npc->ym;
+
+
+ switch (npc->code_event)
+ {
+ case 200:
+ npc->rect = rcPapa[npc->ani_no];
+ break;
+
+ case 210:
+ npc->rect = rcMama[npc->ani_no];
+ break;
+
+ default:
+ npc->rect = rcKodomo[npc->ani_no];
+ break;
+ }
+}
--- a/src/NpcTbl.cpp
+++ b/src/NpcTbl.cpp
@@ -125,7 +125,7 @@
nullptr,
nullptr,
nullptr,
- nullptr,
+ ActNpc069,
ActNpc070,
ActNpc071,
ActNpc072,
@@ -136,9 +136,9 @@
ActNpc077,
ActNpc078,
ActNpc079,
+ ActNpc080,
+ ActNpc081,
nullptr,
- nullptr,
- nullptr,
ActNpc083,
ActNpc084,
ActNpc085,
@@ -334,7 +334,7 @@
nullptr,
nullptr,
nullptr,
- nullptr,
+ ActNpc278,
nullptr,
nullptr,
nullptr,
--
⑨