#include "bury.h"

/*敵を表示する順番*/
void map1_phase(int timer)
{
	extern kyara  teki[TEKI_KAZU];
	extern kyara4 item;

	if (timer < B(0)) {
		switch (timer) {
		case  80: teki[ 0].mode = MOVE1; break;
		case  90: teki[ 1].mode = MOVE1; break;
		case 100: teki[ 2].mode = MOVE1; break;
		case 110: teki[ 3].mode = MOVE1; break;
		case 120: teki[ 4].mode = MOVE1; break;
	
		case 195: teki[ 5].mode = MOVE2; break;
		case 205: teki[ 6].mode = MOVE2; break;
		case 215: teki[ 7].mode = MOVE2; break;
		case 225: teki[ 8].mode = MOVE2; break;
		case 235: teki[ 9].mode = MOVE2; break;

		case 320: teki[10].mode = MOVE4; teki[11].mode = MOVE4; break;
		case 335: teki[12].mode = MOVE4; teki[13].mode = MOVE4; break;
		case 340: t_set(11, 0); break;
		case 360: t_set(11, 1); break;
		case 380: t_set(11, 2); break;
		case 355: t_set(13, 3); break;
		case 375: t_set(13, 4); break;
		case 395: t_set(13, 5); break;

		case 470:
			teki[14].mode = ITEM_BOX;

			t_set_dt(0, 224, 90, ZAKO, 11, ZAKO_AP, 0, 0,0);
			t_set_dt(1, 224, 82, ZAKO, 11, ZAKO_AP, 0, 0,0);
			t_set_dt(2, 224, 74, ZAKO, 11, ZAKO_AP, 0, 0,0);

			t_set_dt(3, 224, 40, ZAKO,  9, ZAKO_AP, 0, 0,0);
			t_set_dt(4, 224, 32, ZAKO,  9, ZAKO_AP, 0, 0,0);
			t_set_dt(5, 224, 24, ZAKO,  9, ZAKO_AP, 0, 0,0);

			t_set_dt(6, 145,144, ZAKO, 11, ZAKO_AP, 0, 0,0);
			t_set_dt(7, 145,144, ZAKO, 11, ZAKO_AP, 0, 0,0);
			t_set_dt(8, 145,144, ZAKO, 11, ZAKO_AP, 0, 0,0);
			t_set_dt(9, 145,144, ZAKO, 11, ZAKO_AP, 0, 0,0);
			break;

		case 570: teki[0].mode = MOVE3; break;
		case 575: teki[1].mode = MOVE3; break;
		case 580: teki[2].mode = MOVE3; break;

		case 660: teki[3].mode = MOVE3; break;
		case 665: teki[4].mode = MOVE3; break;
		case 670: teki[5].mode = MOVE3; break;

		case 770: teki[6].mode = MOVE5; break;
		case 780: teki[7].mode = MOVE5; break;
		case 790: teki[8].mode = MOVE5; break;
		case 800: teki[9].mode = MOVE5; break;

		case 870:
			t_set_dt(14, 224,32, 287, 14, ZAKO_AP, 0, 0,0);
			item.k_no = S;
			teki[14].mode = ITEM_BOX;
			break;

		case 930:
			t_set_dt( 0, 224,100, ZAKO,    11, ZAKO_AP,   0,  0,0);
			t_set_dt( 1, 224,108, ZAKO,    11, ZAKO_AP,   0,  0,0);
			t_set_dt( 2, 224,116, ZAKO,    11, ZAKO_AP,   0,  0,0);

			t_set_dt( 3, 224, 36, ZAKO,     9, ZAKO_AP,   0,  0,0);
			t_set_dt( 4, 224, 28, ZAKO,     9, ZAKO_AP,   0,  0,0);
			t_set_dt( 5, 224, 20, ZAKO,     9, ZAKO_AP,   0,  0,0);

			t_set_dt(10, 224, 64, L_TEKI1, 11, L_TEKI_AP, 0, 10,4);
			t_set_dt(11, 224, 80, L_TEKI2, 11, L_TEKI_AP, 0, 10,4);
			t_set_dt(12, 240, 64, L_TEKI3, 11, L_TEKI_AP, 0, 10,4);
			t_set_dt(13, 240, 80, L_TEKI4, 11, L_TEKI_AP, 0, 10,4);
			
			teki[10].mode = MOVE4; teki[11].mode = MOVE4; 
			teki[12].mode = MOVE4; teki[13].mode = MOVE4;
			break;
		case  970: t_set(10, 0); t_set(11, 1); break;
		case  980: teki[0].mode = MOVE3; teki[3].mode = MOVE3; break;
		case  985: teki[1].mode = MOVE3; teki[4].mode = MOVE3; break;
		case  990: teki[2].mode = MOVE3; teki[5].mode = MOVE3; break;
		case 1000: t_set(10, 2); t_set(11, 3); break;
		case 1030: t_set(10, 4); t_set(11, 5); break;

		case 1120:
			t_set_dt(14, 224,68, 287, 14, ZAKO_AP, 0, 0,0);
			item.k_no = P;
			teki[14].mode=ITEM_BOX;
			break;

		default: break;
		}
	}
	else if (timer == B(0))					 {boss_set0();}
	else if	(B(0) < timer && timer < B(280)) {boss_set1(timer);}
	else if	(timer >= B(280))				 {boss_set2(timer);}
}

void map1_set_data(void)
{
		/* 敵番号,X,　Y,  画像,    色, 耐久力, タイマ,リンク*/
	t_set_dt( 0, 224,  8, ZAKO,    11, ZAKO_AP,   0,  0, 0);
	t_set_dt( 1, 224,  8, ZAKO,    11, ZAKO_AP,   0,  0, 0);
	t_set_dt( 2, 224,  8, ZAKO,    11, ZAKO_AP,   0,  0, 0);
	t_set_dt( 3, 224,  8, ZAKO,    11, ZAKO_AP,   0,  0, 0);
	t_set_dt( 4, 224,  8, ZAKO,    11, ZAKO_AP,   0,  0, 0);

	t_set_dt( 5, 224,120, ZAKO,     9, ZAKO_AP,   0,  0, 0);
	t_set_dt( 6, 224,120, ZAKO,     9, ZAKO_AP,   0,  0, 0);
	t_set_dt( 7, 224,120, ZAKO,     9, ZAKO_AP,   0,  0, 0);
	t_set_dt( 8, 224,120, ZAKO,     9, ZAKO_AP,   0,  0, 0);
	t_set_dt( 9, 224,120, ZAKO,     9, ZAKO_AP,   0,  0, 0);

	t_set_dt(10, 224, 96, M_TEKI1, 11, M_TEKI_AP, 0, 10, 2);
	t_set_dt(11, 224,112, M_TEKI2, 11, M_TEKI_AP, 0, 10, 2);
	t_set_dt(12, 224, 14, M_TEKI1, 11, M_TEKI_AP, 0, 12, 2);
	t_set_dt(13, 224, 30, M_TEKI2, 11, M_TEKI_AP, 0, 12, 2);

	/*アイテムボックス*/
	t_set_dt(14, 224, 66, 287,     14, ZAKO_AP,  0,  0, 0);
}

/*自機のいる方向に向かって弾を撃つ*/
void t_set(int teki_no, int no)
{
	extern kyara jiki;
	extern kyara teki[TEKI_KAZU];
	extern kyara3 teki_tama[T_TAMA_KAZU];
	float  fx, fy, fdt;

	/*弾を発射する敵キャラが破壊されていたら終了*/
	if (teki[teki_no].mode == 0 || teki[teki_no].mode == BREAK) {return;}
	
	teki_tama[no].x = teki[teki_no].x;
	teki_tama[no].y = teki[teki_no].y;

	/*弾の速度を計算*/
	fy = (-1.0 * ((teki_tama[no].y+4) - (jiki.y+8)) );
	fx = (-1.0 * ((teki_tama[no].x+4) - (jiki.x+8)) );
	
	/*弾の速度をs_x,s_y合わせて４までにする*/
	if (fy < 0.0) {
		if (fx < 0.0) {fdt = (-1 * (fx + fy));}
		else		  {fdt = (-1 * fy) + fx;}
	}
	else if (fx < 0)  {fdt = (-1 * fx) + fy;}
	else			  {fdt =  fx + fy;}

	fx /= fdt;
	fx *= 4.0;
	fy /= fdt;
	fy *= 4.0;

	teki_tama[no].s_x = (int)fx;
	teki_tama[no].s_y = (int)fy;
	teki_tama[no].mode=TURUE;
	sprite_set_char_location(teki_tama[no].s_no, (TEKI_TAMA | CFM_SPR_UPPER | PALETTE(8)), teki_tama[no].x, teki_tama[no].y);
}
/*軌道を指定して弾を発射*/
void t_set2(int teki_no, int no, int s_x, int s_y)
{
	extern kyara teki[TEKI_KAZU];
	extern kyara3 teki_tama[T_TAMA_KAZU];
	
	teki_tama[no].x    = teki[teki_no].x;
	teki_tama[no].y    = teki[teki_no].y;
	teki_tama[no].s_x  = s_x;
	teki_tama[no].s_y  = s_y;
	teki_tama[no].mode = TURUE;
	sprite_set_char_location(teki_tama[no].s_no, (TEKI_TAMA | CFM_SPR_UPPER | PALETTE(8)), teki_tama[no].x, teki_tama[no].y);
}

void t_set_dt(int no, int x, int y, int k_no, int pal, int ap, int timer, int link_no, int link_size)
{
	extern kyara teki[TEKI_KAZU];

	teki[no].x         = x;
	teki[no].y         = y;
	teki[no].s_no      = 64 + (no*4);
	teki[no].k_no      = k_no;
	teki[no].pal[0]    = pal;
	teki[no].pal[1]    = pal;
	teki[no].mode      = 0;
	teki[no].ap        = ap;
	teki[no].timer     = timer;
	teki[no].link_no   = link_no;
	teki[no].link_size = link_size;
}

/*ボスの初期設定*/
void boss_set0(void)
{
	t_set_dt( 0, 224, 64, 235, 13, BOSS_AP,  0, 0,13);
	t_set_dt( 1, 224, 80, 239, 13, BOSS_AP,  0, 0,13);

	t_set_dt( 2, 224, 32, 243, 13, BOSS_AP, 16, 0,13);
	t_set_dt( 3, 224, 48, 247, 13, BOSS_AP, 16, 0,13);
	t_set_dt( 4, 224, 64, 251, 13, BOSS_AP, 16, 0,13);
	t_set_dt( 5, 224, 80, 255, 13, BOSS_AP, 16, 0,13);
	t_set_dt( 6, 224, 96, 259, 13, BOSS_AP, 16, 0,13);
	t_set_dt( 7, 224,112, 263, 13, BOSS_AP, 16, 0,13);

	t_set_dt( 8, 224, 40, 267, 13, BOSS_AP, 32, 0,13);
	t_set_dt( 9, 224, 56, 271, 13, BOSS_AP, 32, 0,13);
	t_set_dt(10, 224, 72, 275, 13, BOSS_AP, 32, 0,13);
	t_set_dt(11, 224, 88, 279, 13, BOSS_AP, 32, 0,13);
	t_set_dt(12, 224,104, 283, 13, BOSS_AP, 32, 0,13);
}

void boss_set1(int timer)
{
	extern kyara teki[TEKI_KAZU];
	int    i;

	/*出現させる*/
	switch (timer) {
	case B( 10):
		teki[ 0].mode=BOSS; teki[ 1].mode=BOSS;
		break;
	case B( 26):
		teki[ 2].mode=BOSS; teki[ 3].mode=BOSS; teki[ 4].mode=BOSS;
		teki[ 5].mode=BOSS; teki[ 6].mode=BOSS; teki[ 7].mode=BOSS; 
		break;
	case B( 42):
		teki[ 8].mode=PART; teki[ 9].mode=PART; teki[10].mode=PART;
		teki[11].mode=PART; teki[12].mode=PART;
		break;
	case B(60): for (i=0; i<13; i++) {teki[i].timer = 1020;} break;

	/*弾を撃つタイミング*/
	case B( 70): t_set2(2, 0, -3, 0); t_set2(7, 1, -3, 0); break;
	case B( 80): t_set2(2, 2, -3, 0); t_set2(7, 3, -3, 0); break;
	case B( 90): t_set2(2, 4, -3, 0); t_set2(7, 5, -3, 0); break;
	case B(100): t_set2(2, 6, -3, 0); t_set2(7, 7, -3, 0); break;
	case B(110): t_set2(2, 8, -3, 0); t_set2(7, 9, -3, 0); break;

	case B(130): t_set2(3,10, -3, 0); t_set2(6,11, -3, 0); break;
	case B(140): t_set2(3,12, -3, 0); t_set2(6,13, -3, 0); break;
	case B(150): t_set2(3,14, -3, 0); t_set2(6,15, -3, 0); break;
	case B(160): t_set2(3,16, -3, 0); t_set2(6,17, -3, 0); break;
	case B(170): t_set2(3,18, -3, 0); t_set2(6,19, -3, 0); break;

	case B(190): t_set2(0, 0, -3, 0); t_set2(1, 1, -3, 0); break;
	case B(200): t_set2(0, 2, -3, 0); t_set2(1, 3, -3, 0); break;
	case B(210): t_set2(0, 4, -3, 0); t_set2(1, 5, -3, 0); break;
	case B(220): t_set2(0, 6, -3, 0); t_set2(1, 7, -3, 0); break;
	case B(230): t_set2(0, 8, -3, 0); t_set2(1, 9, -3, 0); break;

	default: break;
	}
}

void boss_set2(int timer)
{
	extern kyara teki[TEKI_KAZU];

	switch (timer) {
	case B(280): t_set2(3,10, -4,-1); t_set2(3,11, -4, 1); t_set2(3,12, -3, 2); t_set2(3,13, -2, 3); break;
	case B(300): t_set2(6,14, -4,-1); t_set2(6,15, -4, 1); t_set2(6,16, -3,-2); t_set2(6,17, -2,-3); break;
	case B(320): t_set2(2,18, -4,-1); t_set2(2,19, -4, 1); t_set2(2, 0, -3, 2); t_set2(3, 1, -2, 3); break;
	case B(340): t_set2(7, 2, -4,-1); t_set2(7, 3, -4, 1); t_set2(7, 4, -3,-2); t_set2(7, 5, -2,-3); break;

	case B(410):
		t_set2(2, 6, -4, 0); t_set2(3, 7, -4, 0); t_set2(2, 8, -3, 0);
		t_set2(3, 9, -3, 0); t_set2(2,10, -2, 0); t_set2(3,11, -2, 0);
		break;
	case B(450):
		t_set2(0,12, -4, 0); t_set2(1,13, -4, 0); t_set2(0,14, -3, 0);
		t_set2(1,15, -3, 0); t_set2(0,16, -2, 0); t_set2(1,17, -2, 0);
		break;
	case B(490):
		t_set2(6,18, -4, 0); t_set2(7,19, -4, 0); t_set2(6, 0, -3, 0);
		t_set2(7, 1, -3, 0); t_set2(6, 2, -2, 0); t_set2(7, 3, -2, 0);
		break;

	case B(540):
		t_set2(3, 4, -2,-1); t_set2(3, 5, -3, 0); t_set2(3, 6, -2,1);
		t_set2(6, 7, -2,-1); t_set2(6, 8, -3, 0); t_set2(6, 9, -2,1);
		break;
	case B(560): t_set2(0,10, -3, 0); t_set2(0,11, -2,-1); t_set2(1,12, -3, 0); t_set2(1,13, -2, 1); break;
	case B(580):
		t_set2(3, 14, -2,-1); t_set2(3, 15, -3, 0); t_set2(3,16, -2,1);
		t_set2(6, 17, -2,-1); t_set2(6, 18, -3, 0); t_set2(6,19, -2,1);
		break;
	case B(600): t_set2(0, 0, -3, 0); t_set2(0, 1, -2,-1); t_set2(1, 2, -3, 0); t_set2(1, 3, -2, 1); break;
	case B(620):
		t_set2(3, 4, -2,-1); t_set2(3, 5, -3, 0); t_set2(3, 6, -2,1);
		t_set2(6, 7, -2,-1); t_set2(6, 8, -3, 0); t_set2(6, 9, -2,1);
		break;
	case B(640): t_set2(0,10, -3, 0); t_set2(0,11, -2,-1); t_set2(1,12, -3, 0); t_set2(1,13, -2, 1); break;
	
	default: break;
	}
}

