All NPCs done
This commit is contained in:
parent
f45a0adb29
commit
8eecbaff3c
4 changed files with 1975 additions and 27 deletions
27
src/NpcAct.h
27
src/NpcAct.h
|
@ -328,25 +328,38 @@ void ActNpc322(NPCHAR *npc);
|
||||||
void ActNpc323(NPCHAR *npc);
|
void ActNpc323(NPCHAR *npc);
|
||||||
void ActNpc324(NPCHAR *npc);
|
void ActNpc324(NPCHAR *npc);
|
||||||
void ActNpc325(NPCHAR *npc);
|
void ActNpc325(NPCHAR *npc);
|
||||||
|
|
||||||
void ActNpc326(NPCHAR *npc);
|
void ActNpc326(NPCHAR *npc);
|
||||||
void ActNpc327(NPCHAR *npc);
|
void ActNpc327(NPCHAR *npc);
|
||||||
void ActNpc328(NPCHAR *npc);
|
void ActNpc328(NPCHAR *npc);
|
||||||
void ActNpc329(NPCHAR *npc);
|
void ActNpc329(NPCHAR *npc);
|
||||||
|
void ActNpc330(NPCHAR *npc);
|
||||||
|
void ActNpc331(NPCHAR *npc);
|
||||||
|
void ActNpc332(NPCHAR *npc);
|
||||||
|
void ActNpc333(NPCHAR *npc);
|
||||||
void ActNpc334(NPCHAR *npc);
|
void ActNpc334(NPCHAR *npc);
|
||||||
void ActNpc335(NPCHAR *npc);
|
void ActNpc335(NPCHAR *npc);
|
||||||
void ActNpc336(NPCHAR *npc);
|
void ActNpc336(NPCHAR *npc);
|
||||||
void ActNpc337(NPCHAR *npc);
|
void ActNpc337(NPCHAR *npc);
|
||||||
|
void ActNpc338(NPCHAR *npc);
|
||||||
|
void ActNpc339(NPCHAR *npc);
|
||||||
|
void ActNpc340(NPCHAR *npc);
|
||||||
|
void ActNpc341(NPCHAR *npc);
|
||||||
|
void ActNpc342(NPCHAR *npc);
|
||||||
|
void ActNpc343(NPCHAR *npc);
|
||||||
|
void ActNpc344(NPCHAR *npc);
|
||||||
|
void ActNpc345(NPCHAR *npc);
|
||||||
|
void ActNpc346(NPCHAR *npc);
|
||||||
void ActNpc347(NPCHAR *npc);
|
void ActNpc347(NPCHAR *npc);
|
||||||
|
void ActNpc348(NPCHAR *npc);
|
||||||
void ActNpc349(NPCHAR *npc);
|
void ActNpc349(NPCHAR *npc);
|
||||||
|
void ActNpc350(NPCHAR *npc);
|
||||||
void ActNpc351(NPCHAR *npc);
|
void ActNpc351(NPCHAR *npc);
|
||||||
void ActNpc352(NPCHAR *npc);
|
void ActNpc352(NPCHAR *npc);
|
||||||
|
void ActNpc353(NPCHAR *npc);
|
||||||
|
void ActNpc354(NPCHAR *npc);
|
||||||
void ActNpc355(NPCHAR *npc);
|
void ActNpc355(NPCHAR *npc);
|
||||||
|
void ActNpc356(NPCHAR *npc);
|
||||||
|
void ActNpc357(NPCHAR *npc);
|
||||||
|
void ActNpc358(NPCHAR *npc);
|
||||||
void ActNpc359(NPCHAR *npc);
|
void ActNpc359(NPCHAR *npc);
|
||||||
void ActNpc360(NPCHAR *npc);
|
void ActNpc360(NPCHAR *npc);
|
|
@ -610,6 +610,242 @@ void ActNpc329(NPCHAR *npc)
|
||||||
npc->rect = {64, 0, 80, 16};
|
npc->rect = {64, 0, 80, 16};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Rolling
|
||||||
|
void ActNpc330(NPCHAR *npc)
|
||||||
|
{
|
||||||
|
RECT rc[3];
|
||||||
|
|
||||||
|
rc[0] = {144, 136, 160, 152};
|
||||||
|
rc[1] = {160, 136, 176, 152};
|
||||||
|
rc[2] = {176, 136, 192, 152};
|
||||||
|
|
||||||
|
switch (npc->act_no)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
ChangeMapParts(npc->x / 0x2000, npc->y / 0x2000, 0);
|
||||||
|
|
||||||
|
if (npc->direct == 0)
|
||||||
|
npc->act_no = 10;
|
||||||
|
else
|
||||||
|
npc->act_no = 30;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 10:
|
||||||
|
npc->xm -= 0x40;
|
||||||
|
npc->ym = 0;
|
||||||
|
|
||||||
|
if (npc->flag & 1)
|
||||||
|
npc->act_no = 20;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 20:
|
||||||
|
npc->xm = 0;
|
||||||
|
npc->ym -= 0x40;
|
||||||
|
|
||||||
|
if (npc->flag & 2)
|
||||||
|
npc->act_no = 30;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 30:
|
||||||
|
npc->xm += 0x40;
|
||||||
|
npc->ym = 0;
|
||||||
|
|
||||||
|
if (npc->flag & 4)
|
||||||
|
npc->act_no = 40;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 40:
|
||||||
|
npc->xm = 0;
|
||||||
|
npc->ym += 0x40;
|
||||||
|
|
||||||
|
if (npc->flag & 8)
|
||||||
|
npc->act_no = 10;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (npc->xm < -0x400)
|
||||||
|
npc->xm = -0x400;
|
||||||
|
if (npc->xm > 0x400)
|
||||||
|
npc->xm = 0x400;
|
||||||
|
|
||||||
|
if (npc->ym < -0x400)
|
||||||
|
npc->ym = -0x400;
|
||||||
|
if (npc->ym > 0x400)
|
||||||
|
npc->ym = 0x400;
|
||||||
|
|
||||||
|
npc->x += npc->xm;
|
||||||
|
npc->y += npc->ym;
|
||||||
|
|
||||||
|
if (++npc->ani_wait > 1)
|
||||||
|
{
|
||||||
|
npc->ani_wait = 0;
|
||||||
|
++npc->ani_no;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (npc->ani_no > 2)
|
||||||
|
npc->ani_no = 0;
|
||||||
|
|
||||||
|
npc->rect = rc[npc->ani_no];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Ballos bone projectile
|
||||||
|
void ActNpc331(NPCHAR *npc)
|
||||||
|
{
|
||||||
|
RECT rc[4];
|
||||||
|
|
||||||
|
rc[0] = {288, 80, 304, 96};
|
||||||
|
rc[1] = {304, 80, 320, 96};
|
||||||
|
rc[2] = {288, 96, 304, 112};
|
||||||
|
rc[3] = {304, 96, 320, 112};
|
||||||
|
|
||||||
|
switch (npc->act_no)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
npc->act_no = 1;
|
||||||
|
// Fallthrough
|
||||||
|
case 1:
|
||||||
|
if (npc->flag & 8)
|
||||||
|
{
|
||||||
|
npc->ym = -0x200;
|
||||||
|
npc->act_no = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 10:
|
||||||
|
if (npc->flag & 8)
|
||||||
|
{
|
||||||
|
npc->cond = 0;
|
||||||
|
SetCaret(npc->x, npc->y, 2, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
npc->ym += 0x40;
|
||||||
|
if (npc->ym > 0x5FF)
|
||||||
|
npc->ym = 0x5FF;
|
||||||
|
|
||||||
|
npc->y += npc->ym;
|
||||||
|
npc->x += npc->xm;
|
||||||
|
|
||||||
|
if (++npc->ani_wait > 3)
|
||||||
|
{
|
||||||
|
npc->ani_wait = 0;
|
||||||
|
|
||||||
|
if (npc->direct == 0)
|
||||||
|
++npc->ani_no;
|
||||||
|
else
|
||||||
|
--npc->ani_no;
|
||||||
|
|
||||||
|
if (npc->ani_no < 0)
|
||||||
|
npc->ani_no += 4;
|
||||||
|
if (npc->ani_no > 3)
|
||||||
|
npc->ani_no -= 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
npc->rect = rc[npc->ani_no];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Ballos shockwave
|
||||||
|
void ActNpc332(NPCHAR *npc)
|
||||||
|
{
|
||||||
|
RECT rc[3];
|
||||||
|
|
||||||
|
rc[0] = {144, 96, 168, 120};
|
||||||
|
rc[1] = {168, 96, 192, 120};
|
||||||
|
rc[2] = {192, 96, 216, 120};
|
||||||
|
|
||||||
|
switch (npc->act_no)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
PlaySoundObject(44, 1);
|
||||||
|
npc->act_no = 1;
|
||||||
|
|
||||||
|
if (npc->direct == 0)
|
||||||
|
npc->xm = -0x400;
|
||||||
|
else
|
||||||
|
npc->xm = 0x400;
|
||||||
|
// Fallthrough
|
||||||
|
case 1:
|
||||||
|
if (++npc->ani_wait > 1)
|
||||||
|
{
|
||||||
|
npc->ani_wait = 0;
|
||||||
|
|
||||||
|
if (++npc->ani_no > 2)
|
||||||
|
npc->ani_no = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (++npc->act_wait % 6 == 1)
|
||||||
|
{
|
||||||
|
if (npc->direct == 0)
|
||||||
|
{
|
||||||
|
const int xm = (Random(-0x10, -4) * 0x200) / 8;
|
||||||
|
SetNpChar(331, npc->x, npc->y, xm, -0x400, 0, 0, 0x100);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const int xm = (Random(4, 0x10) * 0x200) / 8;
|
||||||
|
SetNpChar(331, npc->x, npc->y, xm, -0x400, 0, 0, 0x100);
|
||||||
|
}
|
||||||
|
|
||||||
|
PlaySoundObject(12, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (npc->flag & 1)
|
||||||
|
npc->cond = 0;
|
||||||
|
if (npc->flag & 4)
|
||||||
|
npc->cond = 0;
|
||||||
|
|
||||||
|
npc->x += npc->xm;
|
||||||
|
|
||||||
|
npc->rect = rc[npc->ani_no];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Ballos lightning
|
||||||
|
void ActNpc333(NPCHAR *npc)
|
||||||
|
{
|
||||||
|
RECT rc[2];
|
||||||
|
|
||||||
|
rc[0] = {80, 120, 104, 144};
|
||||||
|
rc[1] = {104, 120, 128, 144};
|
||||||
|
|
||||||
|
switch (npc->act_no)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
npc->act_no = 1;
|
||||||
|
npc->tgt_x = npc->x;
|
||||||
|
npc->tgt_y = npc->y;
|
||||||
|
PlaySoundObject(103, 1);
|
||||||
|
npc->y = gMC.y;
|
||||||
|
// Fallthrough
|
||||||
|
case 1:
|
||||||
|
if (++npc->act_wait / 2 & 1)
|
||||||
|
npc->ani_no = 0;
|
||||||
|
else
|
||||||
|
npc->ani_no = 1;
|
||||||
|
|
||||||
|
if (npc->direct == 0 && npc->act_wait == 20)
|
||||||
|
SetNpChar(146, npc->tgt_x, npc->tgt_y, 0, 0, 0, 0, 0x100);
|
||||||
|
|
||||||
|
if (npc->act_wait > 40)
|
||||||
|
npc->cond = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
npc->rect = rc[npc->ani_no];
|
||||||
|
}
|
||||||
|
|
||||||
//Sweat
|
//Sweat
|
||||||
void ActNpc334(NPCHAR *npc)
|
void ActNpc334(NPCHAR *npc)
|
||||||
{
|
{
|
||||||
|
@ -772,3 +1008,93 @@ void ActNpc337(NPCHAR *npc)
|
||||||
|
|
||||||
npc->rect = rcLeft[npc->ani_no];
|
npc->rect = rcLeft[npc->ani_no];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Green Devil
|
||||||
|
void ActNpc338(NPCHAR *npc)
|
||||||
|
{
|
||||||
|
RECT rcLeft[2];
|
||||||
|
RECT rcRight[2];
|
||||||
|
|
||||||
|
rcLeft[0] = {288, 0, 304, 16};
|
||||||
|
rcLeft[1] = {304, 0, 320, 16};
|
||||||
|
|
||||||
|
rcRight[0] = {288, 16, 304, 32};
|
||||||
|
rcRight[1] = {304, 16, 320, 32};
|
||||||
|
|
||||||
|
switch (npc->act_no)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
npc->act_no = 1;
|
||||||
|
npc->view.top = 0x1000;
|
||||||
|
npc->view.bottom = 0x1000;
|
||||||
|
npc->damage = 3;
|
||||||
|
npc->bits |= 0x20;
|
||||||
|
npc->tgt_y = npc->y;
|
||||||
|
npc->ym = (Random(-10, 10) * 0x200) / 2;
|
||||||
|
// Fallthrough
|
||||||
|
case 1:
|
||||||
|
if (++npc->ani_wait > 2)
|
||||||
|
{
|
||||||
|
npc->ani_wait = 0;
|
||||||
|
++npc->ani_no;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (npc->ani_no > 1)
|
||||||
|
npc->ani_no = 0;
|
||||||
|
|
||||||
|
if (npc->tgt_y > npc->y)
|
||||||
|
npc->ym += 0x80;
|
||||||
|
else
|
||||||
|
npc->ym -= 0x80;
|
||||||
|
|
||||||
|
if (npc->direct == 0)
|
||||||
|
npc->xm -= 0x20;
|
||||||
|
else
|
||||||
|
npc->xm += 0x20;
|
||||||
|
|
||||||
|
if (npc->xm > 0x400)
|
||||||
|
npc->xm = 0x400;
|
||||||
|
if (npc->xm < -0x400)
|
||||||
|
npc->xm = -0x400;
|
||||||
|
|
||||||
|
if (npc->x < 0 || npc->y < 0 || npc->x > gMap.width * 0x2000 || npc->y > gMap.length * 0x2000)
|
||||||
|
{
|
||||||
|
VanishNpChar(npc);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
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];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Green Devil generator
|
||||||
|
void ActNpc339(NPCHAR *npc)
|
||||||
|
{
|
||||||
|
switch (npc->act_no)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
npc->act_no = 1;
|
||||||
|
npc->act_wait = Random(0, 40);
|
||||||
|
// Fallthrough
|
||||||
|
case 1:
|
||||||
|
if (npc->act_wait)
|
||||||
|
{
|
||||||
|
--npc->act_wait;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
npc->act_no = 0;
|
||||||
|
SetNpChar(338, npc->x, npc->y + (Random(-0x10, 0x10) * 0x200), 0, 0, npc->direct, 0, 0x100);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
1609
src/NpcAct340.cpp
1609
src/NpcAct340.cpp
File diff suppressed because it is too large
Load diff
|
@ -386,35 +386,35 @@ NPCFUNCTION gpNpcFuncTbl[361] =
|
||||||
ActNpc327,
|
ActNpc327,
|
||||||
ActNpc328,
|
ActNpc328,
|
||||||
ActNpc329,
|
ActNpc329,
|
||||||
nullptr,
|
ActNpc330,
|
||||||
nullptr,
|
ActNpc331,
|
||||||
nullptr,
|
ActNpc332,
|
||||||
nullptr,
|
ActNpc333,
|
||||||
ActNpc334,
|
ActNpc334,
|
||||||
ActNpc335,
|
ActNpc335,
|
||||||
ActNpc336,
|
ActNpc336,
|
||||||
ActNpc337,
|
ActNpc337,
|
||||||
nullptr,
|
ActNpc338,
|
||||||
nullptr,
|
ActNpc339,
|
||||||
nullptr,
|
ActNpc340,
|
||||||
nullptr,
|
ActNpc341,
|
||||||
nullptr,
|
ActNpc342,
|
||||||
nullptr,
|
ActNpc343,
|
||||||
nullptr,
|
ActNpc344,
|
||||||
nullptr,
|
ActNpc345,
|
||||||
nullptr,
|
ActNpc346,
|
||||||
ActNpc347,
|
ActNpc347,
|
||||||
nullptr,
|
ActNpc348,
|
||||||
ActNpc349,
|
ActNpc349,
|
||||||
nullptr,
|
ActNpc350,
|
||||||
ActNpc351,
|
ActNpc351,
|
||||||
ActNpc352,
|
ActNpc352,
|
||||||
nullptr,
|
ActNpc353,
|
||||||
nullptr,
|
ActNpc354,
|
||||||
ActNpc355,
|
ActNpc355,
|
||||||
nullptr,
|
ActNpc356,
|
||||||
nullptr,
|
ActNpc357,
|
||||||
nullptr,
|
ActNpc358,
|
||||||
ActNpc359,
|
ActNpc359,
|
||||||
ActNpc360,
|
ActNpc360,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue