Merge pull request #13 from Clownacy/master

Added NPCs
This commit is contained in:
Cucky 2019-01-27 14:55:11 -05:00 committed by GitHub
commit b29f119f3d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 268 additions and 12 deletions

View file

@ -56,6 +56,7 @@ SOURCES = \
MycHit \
MycParam \
NpcAct000 \
NpcAct020 \
NpChar \
NpcHit \
NpcTbl \

View file

@ -6,3 +6,10 @@ void ActNpc003(NPCHAR *npc);
void ActNpc004(NPCHAR *npc);
void ActNpc005(NPCHAR *npc);
void ActNpc006(NPCHAR *npc);
void ActNpc015(NPCHAR *npc);
void ActNpc016(NPCHAR *npc);
void ActNpc017(NPCHAR *npc);
void ActNpc018(NPCHAR *npc);
void ActNpc021(NPCHAR *npc);

View file

@ -614,3 +614,222 @@ void ActNpc006(NPCHAR *npc)
else
npc->rect = rcLeft[npc->ani_no];
}
//Chest (closed)
void ActNpc015(NPCHAR *npc)
{
RECT rcLeft[3];
rcLeft[0] = {240, 0, 256, 16};
rcLeft[1] = {256, 0, 272, 16};
rcLeft[2] = {272, 0, 288, 16};
switch (npc->act_no)
{
case 0:
npc->act_no = 1;
npc->bits |= 0x2000u;
if (npc->direct == 2)
{
npc->ym = -0x200;
for (int i = 0; i < 4; ++i)
SetNpChar(4, npc->x + (Random(-12, 12) * 0x200), npc->y + (Random(-12, 12) * 0x200), Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100);
}
// Fallthrough
case 1:
npc->ani_no = 0;
if (Random(0, 30) == 0)
npc->act_no = 2;
break;
case 2:
if (++npc->ani_wait > 1)
{
npc->ani_wait = 0;
++npc->ani_no;
}
if (npc->ani_no > 2)
{
npc->ani_no = 0;
npc->act_no = 1;
}
break;
}
npc->ym += 0x40;
if (npc->ym > 0x5FF)
npc->ym = 0x5FF;
npc->y += npc->ym;
npc->rect = rcLeft[npc->ani_no];
}
//Save point
void ActNpc016(NPCHAR *npc)
{
RECT rects[8];
rects[0] = {96, 16, 112, 32};
rects[1] = {112, 16, 128, 32};
rects[2] = {128, 16, 144, 32};
rects[3] = {144, 16, 160, 32};
rects[4] = {160, 16, 176, 32};
rects[5] = {176, 16, 192, 32};
rects[6] = {192, 16, 208, 32};
rects[7] = {208, 16, 224, 32};
switch (npc->act_no)
{
case 0:
npc->bits |= 0x2000u;
npc->act_no = 1;
if (npc->direct == 2)
{
npc->bits &= ~0x2000u;
npc->ym = -0x200;
for (int i = 0; i < 4; ++i)
SetNpChar(4, npc->x + (Random(-12, 12) * 0x200), npc->y + (Random(-12, 12) * 0x200), Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100);
}
// Fallthrough
case 1:
if (npc->flag & 8)
npc->bits |= 0x2000u;
break;
}
if ( ++npc->ani_wait > 2 )
{
npc->ani_wait = 0;
++npc->ani_no;
}
if ( npc->ani_no > 7 )
npc->ani_no = 0;
npc->ym += 0x40;
if ( npc->ym > 0x5FF )
npc->ym = 0x5FF;
npc->y += npc->ym;
npc->rect = rects[npc->ani_no];
}
// Health refill
void ActNpc017(NPCHAR *npc)
{
RECT rect[2];
rect[0] = {288, 0, 304, 16};
rect[1] = {304, 0, 320, 16};
int aa;
switch (npc->act_no)
{
case 0:
npc->act_no = 1;
if (npc->direct == 2)
{
npc->ym = -512;
for (int a = 0; a < 4; ++a)
SetNpChar(4, npc->x + (Random(-12, 12) * 0x200), npc->y + (Random(-12, 12) * 0x200), Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100);
}
// Fallthrough
case 1:
aa = Random(0, 30);
if (aa >= 10)
{
if (aa >= 25)
npc->act_no = 4;
else
npc->act_no = 3;
}
else
{
npc->act_no = 2;
}
npc->act_wait = Random(0x10, 0x40);
npc->ani_wait = 0;
break;
case 2:
npc->rect = rect[0];
if (--npc->act_wait == 0)
npc->act_no = 1;
break;
case 3:
if (++npc->ani_wait % 2)
npc->rect = rect[0];
else
npc->rect = rect[1];
if (--npc->act_wait == 0)
npc->act_no = 1;
break;
case 4:
npc->rect = rect[1];
if (--npc->act_wait == 0)
npc->act_no = 1;
break;
}
npc->ym += 0x40;
if (npc->ym > 0x5FF)
npc->ym = 0x5FF;
npc->y += npc->ym;
}
// Door
void ActNpc018(NPCHAR *npc)
{
RECT rect[2];
rect[0] = {224, 16, 240, 40};
rect[1] = {192, 112, 208, 136};
switch (npc->act_no)
{
case 0:
if (npc->direct == 0)
npc->rect = rect[0];
else
npc->rect = rect[1];
break;
case 1:
for (int i = 0; i < 4; ++i)
SetNpChar(4, npc->x, npc->y, Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100);
npc->act_no = 0;
npc->rect = rect[0];
break;
}
}

29
src/NpcAct020.cpp Normal file
View file

@ -0,0 +1,29 @@
#include "WindowsWrapper.h"
#include "MyChar.h"
#include "NpChar.h"
#include "Game.h"
#include "Sound.h"
#include "Back.h"
#include "Triangle.h"
//Chest (open)
void ActNpc021(NPCHAR *npc)
{
switch (npc->act_no)
{
case 0:
npc->act_no = 1;
if (npc->direct == 2)
npc->y += 0x2000;
break;
}
RECT rect[0];
rect[0] = {224, 40, 240, 48};
npc->rect = rect[0];
}

View file

@ -56,18 +56,13 @@ void ReleaseNpcTable()
//Npc function table
NPCFUNCTION gpNpcFuncTbl[] =
{
&ActNpc000,
&ActNpc001,
&ActNpc002,
&ActNpc003,
&ActNpc004,
&ActNpc005,
&ActNpc006,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
ActNpc000,
ActNpc001,
ActNpc002,
ActNpc003,
ActNpc004,
ActNpc005,
ActNpc006,
nullptr,
nullptr,
nullptr,
@ -76,8 +71,13 @@ NPCFUNCTION gpNpcFuncTbl[] =
nullptr,
nullptr,
nullptr,
ActNpc015,
ActNpc016,
ActNpc017,
ActNpc018,
nullptr,
nullptr,
ActNpc021,
nullptr,
nullptr,
nullptr,