shithub: cstory

ref: 5cdb566b5bb15d6ad0437418344d9b7997d0394b
dir: /src/NpcAct120.cpp/

View raw version
#include "WindowsWrapper.h"

#include "NpcAct.h"

#include "MyChar.h"
#include "NpChar.h"
#include "Game.h"
#include "Sound.h"
#include "Back.h"
#include "Triangle.h"

//Hidden item
void ActNpc125(NPCHAR *npc)
{
	if (npc->life < 990)
	{
		SetDestroyNpChar(npc->x, npc->y, npc->view.back, 8);
		PlaySoundObject(70, 1);

		if (npc->direct)
			SetNpChar(86, npc->x, npc->y, 0, 0, 2, 0, 0);
		else
			SetNpChar(87, npc->x, npc->y, 0, 0, 2, 0, 0);

		npc->cond = 0;
	}

	RECT rc[2];

	rc[0] = {0, 96, 16, 112};
	rc[1] = {16, 96, 32, 112};

	if (npc->direct == 0)
		npc->rect = rc[0];
	else
		npc->rect = rc[1];
}

//Machine gun trail (Level 2)
void ActNpc127(NPCHAR *npc)
{
	RECT rcV[3];
	RECT rcH[3];
	rcV[0] = {112, 48, 128, 64};
	rcV[1] = {112, 64, 128, 80};
	rcV[2] = {112, 80, 128, 96};
	rcH[0] = {64, 80, 80, 96};
	rcH[1] = {80, 80, 96, 96};
	rcH[2] = {96, 80, 112, 96};
	
	if (++npc->ani_wait > 0)
	{
		npc->ani_wait = 0;
		if (++npc->ani_no > 2)
			npc->cond = 0;
	}
	
	if (npc->direct)
		npc->rect = rcV[npc->ani_no];
	else
		npc->rect = rcH[npc->ani_no];
}

//Machine gun trail (Level 3)
void ActNpc128(NPCHAR *npc)
{
	RECT rcLeft[5];
	RECT rcRight[5];
	RECT rcUp[5];
	RECT rcDown[5];

	rcLeft[0] = {0, 0, 0, 0};
	rcLeft[1] = {176, 16, 184, 32};
	rcLeft[2] = {184, 16, 192, 32};
	rcLeft[3] = {192, 16, 200, 32};
	rcLeft[4] = {200, 16, 208, 32};
	rcRight[0] = {0, 0, 0, 0};
	rcRight[1] = {232, 16, 240, 32};
	rcRight[2] = {224, 16, 232, 32};
	rcRight[3] = {216, 16, 224, 32};
	rcRight[4] = {208, 16, 216, 32};
	rcUp[0] = {0, 0, 0, 0};
	rcUp[1] = {176, 32, 192, 40};
	rcUp[2] = {176, 40, 192, 48};
	rcUp[3] = {192, 32, 208, 40};
	rcUp[4] = {192, 40, 208, 48};
	rcDown[0] = {0, 0, 0, 0};
	rcDown[1] = {208, 32, 224, 40};
	rcDown[2] = {208, 40, 224, 48};
	rcDown[3] = {224, 32, 232, 40};
	rcDown[4] = {224, 40, 232, 48};
	
	if (!npc->act_no)
	{
		npc->act_no = 1;
		
		if (npc->direct && npc->direct != 2)
		{
			npc->view.front = 0x1000;
			npc->view.top = 0x800;
		}
		else
		{
			npc->view.front = 0x800;
			npc->view.top = 0x1000;
		}
	}
	
	if (++npc->ani_no > 4)
		npc->cond = 0;
	
	switch (npc->direct)
	{
		case 0:
			npc->rect = rcLeft[npc->ani_no];
			break;
		case 1:
			npc->rect = rcUp[npc->ani_no];
			break;
		case 2:
			npc->rect = rcRight[npc->ani_no];
			break;
		case 3:
			npc->rect = rcDown[npc->ani_no];
			break;
	}
}

//Fireball trail (Level 2 & 3)
void ActNpc129(NPCHAR *npc)
{
	RECT rect[18];
	rect[0] = {0x80, 0x30, 0x90, 0x40};
	rect[1] = {0x90, 0x30, 0xA0, 0x40};
	rect[2] = {0xA0, 0x30, 0xB0, 0x40};
	rect[3] = {0x80, 0x40, 0x90, 0x50};
	rect[4] = {0x90, 0x40, 0xA0, 0x50};
	rect[5] = {0xA0, 0x40, 0xB0, 0x50};
	rect[6] = {0x80, 0x50, 0x90, 0x60};
	rect[7] = {0x90, 0x50, 0xA0, 0x60};
	rect[8] = {0xA0, 0x50, 0xB0, 0x60};
	rect[9] = {0xB0, 0x30, 0xC0, 0x40};
	rect[10] = {0xC0, 0x30, 0xD0, 0x40};
	rect[11] = {0xD0, 0x30, 0xE0, 0x40};
	rect[12] = {0xB0, 0x40, 0xC0, 0x50};
	rect[13] = {0xC0, 0x40, 0xD0, 0x50};
	rect[14] = {0xD0, 0x40, 0xE0, 0x50};
	rect[15] = {0xB0, 0x50, 0xC0, 0x60};
	rect[16] = {0xC0, 0x50, 0xD0, 0x60};
	rect[17] = {0xD0, 0x50, 0xE0, 0x60};
	
	if (++npc->ani_wait > 1)
	{
		npc->ani_wait = 0;
		if (++npc->ani_no > 2)
			npc->cond = 0;
	}
	
	npc->y += npc->ym;
	
	npc->rect = rect[npc->ani_no + 3 * npc->direct];
}