Added NPC015, NPC018, and NPC020 (chest close, door, and chest open)

This commit is contained in:
Clownacy 2019-01-27 12:18:21 +00:00
parent ce34eea2dc
commit 27cfd5a575
5 changed files with 122 additions and 3 deletions

View file

@ -55,6 +55,7 @@ SOURCES = \
MyChar \ MyChar \
MycHit \ MycHit \
NpcAct000 \ NpcAct000 \
NpcAct020 \
NpChar \ NpChar \
NpcHit \ NpcHit \
NpcTbl \ NpcTbl \

View file

@ -7,5 +7,9 @@ void ActNpc004(NPCHAR *npc);
void ActNpc005(NPCHAR *npc); void ActNpc005(NPCHAR *npc);
void ActNpc006(NPCHAR *npc); void ActNpc006(NPCHAR *npc);
void ActNpc015(NPCHAR *npc);
void ActNpc016(NPCHAR *npc); void ActNpc016(NPCHAR *npc);
void ActNpc017(NPCHAR *npc); void ActNpc017(NPCHAR *npc);
void ActNpc018(NPCHAR *npc);
void ActNpc021(NPCHAR *npc);

View file

@ -615,6 +615,63 @@ void ActNpc006(NPCHAR *npc)
npc->rect = rcLeft[npc->ani_no]; 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 //Save point
void ActNpc016(NPCHAR *npc) void ActNpc016(NPCHAR *npc)
{ {
@ -748,3 +805,31 @@ void ActNpc017(NPCHAR *npc)
npc->y += npc->ym; 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

@ -71,13 +71,13 @@ NPCFUNCTION gpNpcFuncTbl[] =
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
nullptr, ActNpc015,
ActNpc016, ActNpc016,
ActNpc017, ActNpc017,
ActNpc018,
nullptr, nullptr,
nullptr, nullptr,
nullptr, ActNpc021,
nullptr,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,