view move.c @ 0:01387a2e419e

initial version
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 07 Dec 2010 15:39:45 +0900
parents
children
line wrap: on
line source

#include <stdlib.h>
#include <SDL.h>
//#include "libps2.h"
#include "move.h"
#include "Enemy.h"
#include "count2.h"
#include "tokuten.h"
#include "schedule.h"
#include "bom.h"
#include "sankaku.h"
//#include "libps.h"
#include "sgoex.h"
#include "atari.h"
#include"debug.h"
#include "SDL_opengl.h"
extern SpriteView spview[MAXOBJ];


int tekino0;
int rinkx;
int rinky;
int rinkf1 = 0, rinkf2 = 0;
int asteroiddt[200];
int asteroidi = 0;
int enemyfaste = 0;
int sf;
int amari;
int fastebos = 0;

void asteroid(int tekino);

void Move()
{
    int tekino;

    for (tekino = 0; tekino < 100; tekino++) {
	if (enemy[tekino].f == TRUE) {
	    if ((enemy[tekino].move != 8) &&
                (enemy[tekino].move != 9))
		if (jiki.bf == TRUE)
		    if (atari(0, tekino)) {
			Bom(enemy[tekino].x, enemy[tekino].y);
			enemy[tekino].f = FALSE;
			enemycount += (enemy[tekino].sc *
			     ((infg.stg / 128) + infg_level + 1));
		    }
	    if (enemy[tekino].f == TRUE);
	    switch (enemy[tekino].move) {
	    case 0:
		enemy[tekino].x += enemy[tekino].sx;
		enemy[tekino].y += enemy[tekino].sy;
		break;
	    case 1:
		enemy[tekino].x -= enemy[tekino].sx;
		enemy[tekino].y -= enemy[tekino].sy;
		break;
	    case 2:
		enemy[tekino].sy -= 0.25;
		enemy[tekino].y += enemy[tekino].sy;
		break;
	    case 3:
		enemy[tekino].x += enemy[tekino].sx;
		enemy[tekino].y += enemy[tekino].sy;
		if ((enemy[tekino].dt1 == 60) ||
                    (enemy[tekino].dt1 == 90) ||
                    (enemy[tekino].dt1 == 30))
		    Puttama(0, enemy[tekino].x, enemy[tekino].y);
		enemy[tekino].dt1++;
		break;
	    case 4:
		enemy[tekino].y += enemy[tekino].sy;
		enemy[tekino].x += enemy[tekino].sx;
		if (enemy[tekino].y < jiki.y
		    && enemy[tekino].y + 16 > jiki.y) {
		    enemy[tekino].sy = -2;
		    enemy[tekino].sx =
			((jiki.x > enemy[tekino].x) ? 4 : -4);
		    enemy[tekino].move = 7;
		}
		break;
	    case 5:
		enemy[tekino].y += enemy[tekino].sy;
		enemy[tekino].x += enemy[tekino].sx;
		if (enemy[tekino].y + 96 < jiki.y
		    && enemy[tekino].y + 128 > jiki.y) {
		    enemy[tekino].sy = -2;
		    enemy[tekino].sx =
			((jiki.x > enemy[tekino].x) ? 4 : -4);
		    enemy[tekino].move = 0;
		}
		break;
	    case 6:
		enemy[tekino].y += enemy[tekino].sy;
		enemy[tekino].x += enemy[tekino].sx;
		if (enemy[tekino].y + 96 < jiki.y
		    && enemy[tekino].y + 128 > jiki.y) {
		    enemy[tekino].sy = 2;
		    enemy[tekino].sx =
			((jiki.x > enemy[tekino].x) ? 4 : -4);
		    enemy[tekino].move = 0;
		}
		break;

	    case 7:
		enemy[tekino].x += enemy[tekino].sx;
		enemy[tekino].y += enemy[tekino].sy;
		if ((enemy[tekino].dt1 == 60) || (enemy[tekino].dt1 == 90)
		    || (enemy[tekino].dt1 == 30))
		    Puttama(1, enemy[tekino].x, enemy[tekino].y);
		enemy[tekino].dt1++;
		break;
////////1面中ボスパターン/////////////////////////////////
	    case 8:		/*8から11まで登場パターン */
		if (enemy[tekino].y < 520) {
		    tekino0 = tekino;
		    kyeenemyno = tekino;
		    enemy[tekino].y += enemy[tekino].sy;
		    count++;
		    DefSpriteEx(enemy[tekino].charno, 16*4, 32*4);
		    //		    PutSprite(count, enemy[tekino].x, enemy[tekino].y,
		    //			      enemy[tekino].charno);
		    PutSpriteEx(enemy[tekino].charno, enemy[tekino].x*4, enemy[tekino].y*4, 0.2, 0.2, 1);
		    enemy[tekino].dt1 = 512;
		    enemy[tekino].s = 0.125;
		    goto putout;
		}
		enemy[tekino].move = 9;
	    case 9:
		if (enemy[tekino].s <= 2) {
		    enemy[tekino].s += 0.05;
		    enemy[tekino].y -= 12;
		    count++;
		    DefSpriteEx(54, 16*4, 32*4);
		    //		    PutSprite(count, enemy[tekino].x, enemy[tekino].y, 54);
		    PutSpriteEx(54, enemy[tekino].x*4, enemy[tekino].y*4, enemy[tekino].s, enemy[tekino].s, 1);
		    goto putout;
		}
		count++;
		DefSpriteEx(54, 16, 32);
		//		PutSprite(count, enemy[tekino].x, enemy[tekino].y, 54);
		PutSpriteEx(54, enemy[tekino].x, enemy[tekino].y, enemy[tekino].s, enemy[tekino].s, 1);

		rinkx = enemy[tekino].x;
		rinky = enemy[tekino].y;
		Putenemy(5, rinkx - 16, rinky - 16, 1, 0, 10);
		Putenemy(5, rinkx - 16, rinky - 16, -1, 0, 10);
		enemy[tekino].move = 11;
		enemy[tekino].dt1 = 8192;
		goto putout;
	    case 10:
		if (enemy[tekino].dt1 < 48) {
		    enemy[tekino].x += enemy[tekino].sx;
		    enemy[tekino].y += enemy[tekino].sy;
		    enemy[tekino].dt1++;
		    break;
		}
		rinkf1 = 1;
		enemy[tekino].dt1 = rinkx;
		enemy[tekino].dt2 = rinky;
		enemy[tekino].move = 13;
		break;
	    case 11:
		if (rinkf1 == 0) {
		    count++;
		    DefSpriteEx(54, 16, 32);
		    //		    PutSprite(count, enemy[tekino].x, enemy[tekino].y, 54);
		    PutSpriteEx(54, enemy[tekino].x, enemy[tekino].y, enemy[tekino].s, enemy[tekino].s, 1);
		    goto putout;
		}
		enemy[tekino].dt1 = 0;
		enemy[tekino].dt2 = 0;
		enemy[tekino].move = 12;
		break;
	    case 12:
		if (fastebos > 60 * 60) {
		    if (enemy[tekino].y > 240 + 32)
			enemy[tekino].f = FALSE;
		    enemy[tekino].y += 3;
		    rinky += 3;
		    count++;
		    DefSpriteEx(54, 16, 32);
		    //		    PutSprite(count, enemy[tekino].x, enemy[tekino].y, 54);
		    PutSpriteEx(54, enemy[tekino].x, enemy[tekino].y, 2, 2, 1);
		    goto putout;
		}
		if (enemy[tekino].dt1 <= 60) {
		    if (jiki.x + 15 - rinkx < -5)
			enemy[tekino].sx = -0.8;
		    else if (jiki.x + 15 - rinkx > 5)
			enemy[tekino].sx = +0.8;
		    else
			enemy[tekino].sx = 0;
		    enemy[tekino].x += enemy[tekino].sx;
		    rinkx = enemy[tekino].x;
		    rinky = enemy[tekino].y;
		}
		if ((enemy[tekino].dt1 > 60) && (enemy[tekino].dt1 <= 70)) {
		    if (enemy[tekino].dt1 % 2 == 1) {
			Puttama(0, rinkx - 16, rinky);
			Puttama(0, rinkx, rinky);
			Puttama(0, rinkx + 16, rinky);
		    }
		}
		if ((enemy[tekino].dt1 > 180)
		    && (enemy[tekino].dt1 <= 240)) {
		    if (enemy[tekino].dt1 % 2 == 1) {
			rinkf2 = 1;
			Puttama(2, rinkx - 16, enemy[tekino].y - 32);
			Puttama(3, rinkx + 32 - 16, enemy[tekino].y - 32);
		    } else
			rinkf2 = 0;
		}
		if (enemy[tekino].dt1 > 240) {
		    rinkf2 = 2;
		}
		if ((enemy[tekino].dt1 > 240)
		    && (enemy[tekino].dt1 <= 400)) {
		    count++;
		    PutSprite(count, rinkx - 16, rinky + 32,
			      58 + enemy[tekino].dt1 % 4);
		}
		if ((enemy[tekino].dt1 > 300)
		    && (enemy[tekino].dt1 <= 400)) {
		    rinkf2 = 3;
		    if (jiki.x + 15 - rinkx < -5)
			enemy[tekino].sx = -1;
		    else if (jiki.x + 15 - rinkx > 5)
			enemy[tekino].sx = +1;
		    else
			enemy[tekino].sx = 0;
		    enemy[tekino].x += enemy[tekino].sx;
		    rinkx = enemy[tekino].x;
		    rinky = enemy[tekino].y;
		    Puttama(4, rinkx - 8, rinky + 16);
		}
		if ((enemy[tekino].dt1 > 400)
		    && (enemy[tekino].dt1 <= 500)) {
		    rinkf2 = 4;
		    if (jiki.x + 15 - rinkx < -5)
			enemy[tekino].sx = -1;
		    else if (jiki.x + 15 - rinkx > 5)
			enemy[tekino].sx = +1;
		    else
			enemy[tekino].sx = 0;
		    enemy[tekino].x += enemy[tekino].sx;
		    rinkx = enemy[tekino].x;
		    rinky = enemy[tekino].y;
		}
		if (enemy[tekino].dt1 > 500) {
		    rinkf2 = 5;
		    if (jiki.x + 15 - rinkx < -5)
			enemy[tekino].sx = -1;
		    else if (jiki.x + 15 - rinkx > 5)
			enemy[tekino].sx = +1;
		    else
			enemy[tekino].sx = 0;
		    enemy[tekino].x += enemy[tekino].sx;
		    rinkx = enemy[tekino].x;
		    rinky = enemy[tekino].y;
		}
		if (enemy[tekino].dt1 > 600) {
		    rinkf2 = 0;
		    enemy[tekino].dt1 = 0;
		}
		fastebos++;
		enemy[tekino].dt1++;
		count++;
		DefSpriteEx(54, 16, 32);
		//		PutSprite(count, enemy[tekino].x, enemy[tekino].y, 54);
		PutSpriteEx(54, enemy[tekino].x, enemy[tekino].y, 2, 2, 1);
		goto putout;
	    case 13:
		if (enemy[tekino0].f == FALSE) {
		    Bom(enemy[tekino].x, enemy[tekino].y);
		    enemy[tekino].f = FALSE;
		}
		enemy[tekino].x += rinkx - enemy[tekino].dt1;
		enemy[tekino].y += rinky - enemy[tekino].dt2;
		enemy[tekino].dt1 = rinkx;
		enemy[tekino].dt2 = rinky;
		if (rinkf2 == 1) {
		    if (enemy[tekino].x > rinkx) {
			Puttama(2, enemy[tekino].x + 32, enemy[tekino].y);
		    }
		    if (enemy[tekino].x < rinkx) {
			Puttama(3, enemy[tekino].x, enemy[tekino].y);
		    }
		}
		if (rinkf2 == 4) {
		    count++;
		    PutSprite(count, enemy[tekino].x, enemy[tekino].y + 56,
			      58 + filpcount % 4);
		}
		if (rinkf2 == 5) {
		    if (enemy[tekino].x > rinkx) {
			Puttama(5, enemy[tekino].x + 8,
				enemy[tekino].y + 24);
		    }
		    if (enemy[tekino].x < rinkx) {
			Puttama(5, enemy[tekino].x + 8,
				enemy[tekino].y + 24);
		    }
		}
		break;
	    case 20:
		enemy[tekino].x += enemy[tekino].sx;
		enemy[tekino].y += enemy[tekino].sy;
		enemy[tekino].sx -= 0.5;	//-=1;
		enemy[tekino].sy += 0.4;	//+=0.8;
		break;
	    case 21:
		enemy[tekino].x += enemy[tekino].sx;
		enemy[tekino].y += enemy[tekino].sy;
		enemy[tekino].sx += 0.5;	//+=1;
		enemy[tekino].sy += 0.4;	//+=0.8;
		break;
///////////ここまで///////////////////////
	    case 22:
		sf = rand() % 4;
		if ((sf == 0) || (sf == 1)) {
		    enemy[tekino].x = -35;
		    enemy[tekino].y = rand() % (120 - 35);
		    enemy[tekino].sx = (rand() % 4 + 1);
		    enemy[tekino].sy = rand() % 3 - 1;
		    enemy[tekino].move = 23;
		}
		if ((sf == 2)) {
		    enemy[tekino].x = rand() % 290;
		    enemy[tekino].y = -30;
		    enemy[tekino].sx = rand() % 3 - 1;
		    enemy[tekino].sy = (rand() % 4 + 1);
		    enemy[tekino].move = 23;
		}
		if (sf == 3) {
		    enemy[tekino].x = 320;
		    enemy[tekino].y = rand() % (120 - 35);
		    enemy[tekino].sx = (rand() % 4 + 1) * -1;
		    enemy[tekino].sy = rand() % 3 - 1;
		    enemy[tekino].move = 23;
		}
		break;
	    case 23:
		asteroid(tekino);
		break;
		////////////////////////////////////////
	    case 24:
		kyeenemyno = tekino;
		tekino0 = 0;
		rinkx = 0;
		rinky = 0;
		rinkf1 = 0;
		rinkf2 = 0;
		enemy[tekino].move = 25;
		break;
	    case 25:
		if (enemy[tekino].dt1 <= 360) {
		    enemy[tekino].x =
			Mycos(enemy[tekino].dt1) * 30 / SANKAKU + 82 + 32;
		    enemy[tekino].y =
			Mysin(enemy[tekino].dt1) * 30 / SANKAKU + 30;
		}
		if (enemy[tekino].dt1 > 360) {
		    enemy[tekino].x =
			Mycos(enemy[tekino].dt1) * 30 * -1 / SANKAKU +
			142 + 32;
		    enemy[tekino].y =
			Mysin(enemy[tekino].dt1) * 30 / SANKAKU + 30;
		}
		count++;
		PutSprite(count, enemy[tekino].x - 42, enemy[tekino].y,
			  64);
		amari = rand() % 160;
		if ((amari == 1) && (enemy[kyeenemyno + 5].f == TRUE)) {
		    enemy[tekino].move = 26;	//バルカンパターン
		    rinkf1 = 1;
		}
		if ((amari == 2) && (enemy[kyeenemyno + 1].f == TRUE)) {
		    enemy[tekino].move = 27;	//ロケットパンチパターン
		    rinkf1 = 5;
		    rinkx = 0;
		    break;
		}
		if ((enemy[kyeenemyno + 5].f != TRUE)
		    && (enemy[kyeenemyno + 1].f != TRUE))
		    enemy[tekino].move = 28;
		enemy[tekino].dt1 += 3;
		if (enemy[tekino].dt1 == 720)
		    enemy[tekino].dt1 = 0;
		break;
	    case 26:		//バルカンパターン
		if ((enemy[tekino].dt2 > 50) && (enemy[tekino].dt2 < 100)) {
		    rinkf1 = 2;
		}
		if (enemy[tekino].dt2 > 100)
		    rinkf1 = 3;
		if (enemy[tekino].dt2 == 400)
		    rinkf1 = 4;
		count++;
		PutSprite(count, enemy[tekino].x - 42, enemy[tekino].y,
			  64);
		if (enemy[tekino].dt2 == 401) {
		    enemy[tekino].dt2 = 0;
		    rinkf1 = 0;
		    enemy[tekino].move = 25;
		    break;
		}
		enemy[tekino].dt2++;
		break;
	    case 27:		//ロケットパンチパターン
		if ((enemy[tekino].dt2 > 50) && (enemy[tekino].dt2 < 60)
		    && (enemy[tekino].x > -24)
		    && (enemy[tekino].y > -24)) {
		    rinkf1 = 6;
		    rinkx -= 4;
		    enemy[tekino].x -= 4;
		    enemy[tekino].y -= 4;
		}
		if (enemy[tekino].dt2 == 80) {
		    rinkf1 = 7;
		}
		if (enemy[tekino].dt2 == 81) {
		    rinkf1 = 8;
		}
		if (enemy[tekino].dt2 == 124) {
		    rinkf1 = 9;
		}

		if (enemy[tekino].dt2 == 400) {
		    rinkf1 = 10;
		}
		if (enemy[tekino].dt2 == 444) {
		    rinkf1 = 11;
		}
		if (enemy[tekino].dt2 == 500) {
		    rinkf1 = 12;
		}
		if ((enemy[tekino].dt2 > 80) && (enemy[tekino].dt2 < 200))
		    if ((rinkx != 0) && (enemy[tekino].dt2 % 2 == 1)) {
			rinkx++;
			enemy[tekino].x++;
			enemy[tekino].y++;
		    }
		count++;
		PutSprite(count, enemy[tekino].x - 32, enemy[tekino].y, 6);
		if (rinkf1 == 12) {
		    enemy[tekino].dt2 = 0;
		    rinkf1 = 0;
		    rinkx = 0;
		    enemy[tekino].move = 25;
		    break;
		}
		enemy[tekino].dt2++;
		break;
	    case 28:
		if (enemy[tekino].dt1 <= 360) {
		    enemy[tekino].x =
			Mycos(enemy[tekino].dt1) * 30 / SANKAKU + 82 + 32;
		    enemy[tekino].y =
			Mysin(enemy[tekino].dt1) * 30 / SANKAKU + 30;
		}
		if (enemy[tekino].dt1 > 360) {
		    enemy[tekino].x =
			Mycos(enemy[tekino].dt1) * 30 * -1 / SANKAKU +
			142 + 32;
		    enemy[tekino].y =
			Mysin(enemy[tekino].dt1) * 30 / SANKAKU + 30;
		}
		count++;
		PutSprite(count, enemy[tekino].x - 42, enemy[tekino].y,
			  64);
		if (enemy[tekino].dt1 % 30 == 3)
		    Putenemy(24, enemy[tekino].x + 14,
			     enemy[tekino].y + 14,
			     (rand() % 5 + 0.5) * (rand() % 2 ==
						   1 ? -1 : 1),
			     (rand() % 5 + 0.5) * (rand() % 2 ==
						   1 ? -1 : 1), 29);
		enemy[tekino].dt1 += 3;
		break;
	    case 29:
		enemy[tekino].x += enemy[tekino].sx;
		enemy[tekino].y += enemy[tekino].sy;
		if (enemy[tekino].dt1 % 18 == 1)
		    Puttama(0, enemy[tekino].x, enemy[tekino].y);
		enemy[tekino].dt1++;
		break;
	    case 30:		//本体
		enemy[tekino].x = enemy[kyeenemyno].x - 32;
		enemy[tekino].y = enemy[kyeenemyno].y;
		break;
	    case 31:		//右腕
		if ((enemy[kyeenemyno + 3].f == FALSE)
		    || (kyeenemyno == -1)) {
		    Bom(enemy[tekino].x, enemy[tekino].y);
		    enemy[tekino].f = FALSE;
		    break;
		}

		if (rinkf1 == 0) {
		    enemy[tekino].x = enemy[kyeenemyno].x + 40;
		    enemy[tekino].y = enemy[kyeenemyno].y + 28;
		    enemy[tekino].dt2 = 0;
		}
		if (rinkf1 == 5) {
		    enemy[tekino].x = enemy[kyeenemyno].x + 52;
		    enemy[tekino].y = enemy[kyeenemyno].y;
		    count++;
		    PutSprite(count, enemy[tekino].x - 4,
			      enemy[tekino].y - 20,
			      80 + enemy[tekino].dt2 % 4);
		    enemy[tekino].dt2++;
		}
		if (rinkf1 == 6) {
		    if (enemy[tekino].y < 240 - 48) {
			enemy[tekino].y += 6;
		    } else {
			//              rinkf1=7;
			break;
		    }
		    count++;
		    PutSprite(count, enemy[tekino].x - 4,
			      enemy[tekino].y - 20,
			      90 + enemy[tekino].dt2 % 4);
		    enemy[tekino].dt2++;
		}
		if (rinkf1 == 7) {
		    Putenemy(22, enemy[tekino].x + 14,
			     enemy[tekino].y + 14, 0, 0, 40);
		    //      rinkf1=8;
		    break;
		}
		if (rinkf1 == 11) {
		    if (enemy[kyeenemyno].y + 20 != enemy[tekino].y) {
			enemy[tekino].y--;
		    } else {
			//              rinkf1=12;
			break;
		    }
		    count++;
		    PutSprite(count, enemy[tekino].x + 8,
			      enemy[tekino].y + 44,
			      58 + enemy[tekino].dt2 % 4);
		    enemy[tekino].dt2++;
		}
		break;
	    case 32:		//左腕
		if ((enemy[kyeenemyno + 4].f == FALSE)
		    || (kyeenemyno == -1)) {
		    Bom(enemy[tekino].x, enemy[tekino].y);
		    enemy[tekino].f = FALSE;
		    break;
		}
		enemy[tekino].x = enemy[kyeenemyno].x - 40;
		enemy[tekino].y = enemy[kyeenemyno].y + 28;
		if (rinkf1 == 5) {
		    enemy[tekino].x = enemy[kyeenemyno].x - 24 + 4;
		    enemy[tekino].y = enemy[kyeenemyno].y + 28;
		    enemy[tekino].charno = enemystate[20].charno;
		}
		if (rinkf1 == 11) {
		    enemy[tekino].charno = enemystate[14].charno;
		}
		if (rinkf1 == 7) {
		    Putenemy(23, enemy[tekino].x + 14,
			     enemy[tekino].y + 14, 0, 0, 41);
		    //      rinkf1=8;
		    break;
		}
		break;
	    case 33:		//右肩
		if ((enemy[kyeenemyno].f == FALSE) || (kyeenemyno == -1)) {
		    Bom(enemy[tekino].x, enemy[tekino].y);
		    enemy[tekino].f = FALSE;
		}
		enemy[tekino].x = enemy[kyeenemyno].x + 32;
		enemy[tekino].y = enemy[kyeenemyno].y;
		if (rinkf1 == 5) {
		    enemy[tekino].x = enemy[kyeenemyno].x + 32 - 4;
		    enemy[tekino].y = enemy[kyeenemyno].y;
		    enemy[tekino].charno = enemystate[19].charno;
		}
		if (rinkf1 == 6) {
		    enemy[tekino].charno = enemystate[11].charno;
		}
		break;
	    case 34:		//左肩
		if ((enemy[kyeenemyno].f == FALSE) || (kyeenemyno == -1)) {
		    Bom(enemy[tekino].x, enemy[tekino].y);
		    enemy[tekino].f = FALSE;
		}
		enemy[tekino].x = enemy[kyeenemyno].x - 32;
		enemy[tekino].y = enemy[kyeenemyno].y;
		if (rinkf1 == 5) {
		    enemy[tekino].charno = enemystate[21].charno;
		}
		if (rinkf1 == 6) {
		    enemy[tekino].charno = enemystate[12].charno;
		}
		break;
	    case 35:		//胸
		if (kyeenemyno == -1) {
		    Bom(enemy[tekino].x, enemy[tekino].y);
		    enemy[tekino].f = FALSE;
		}
		enemy[tekino].x = enemy[kyeenemyno].x;
		enemy[tekino].y = enemy[kyeenemyno].y + 32;
		if (rinkf1 == 1) {
		    enemy[tekino].charno = enemystate[16].charno;
		}
		if (rinkf1 == 2) {
		    count++;
		    PutSprite(count, enemy[tekino].x - 10,
			      enemy[tekino].y + 16,
			      58 + enemy[tekino].dt2 % 4);
		    count++;
		    PutSprite(count, enemy[tekino].x + 10,
			      enemy[tekino].y + 16,
			      58 + enemy[tekino].dt2 % 4);
		    enemy[tekino].dt2++;
		}
		if (rinkf1 == 3) {
		    count++;
		    PutSprite(count, enemy[tekino].x - 10,
			      enemy[tekino].y + 16,
			      58 + enemy[tekino].dt2 % 4);
		    count++;
		    PutSprite(count, enemy[tekino].x + 10,
			      enemy[tekino].y + 16,
			      58 + enemy[tekino].dt2 % 4);
		    if (enemy[tekino].dt2 % 20 == 1) {
			Puttama(7, enemy[tekino].x, enemy[tekino].y + 16);
			Puttama(7, enemy[tekino].x + 20,
				enemy[tekino].y + 16);
		    }
		    enemy[tekino].dt2++;
		}
		if (rinkf1 == 4) {
		    enemy[tekino].charno = enemystate[15].charno;
		    enemy[tekino].dt2 = 0;
		}
		break;
	    case 40:		//アームバルカン
		if (enemy[kyeenemyno + 1].f == FALSE) {
		    Bom(enemy[tekino].x, enemy[tekino].y);
		    enemy[tekino].f = FALSE;
		}
		if ((rinkf1 == 8) && (enemy[tekino].dt1 % 3 == 1)) {
		    if ((enemy[tekino].dt2 < 16)) {
			enemy[tekino].dt2++;
			DefSprite(76, 1, 112, 0, 16, enemy[tekino].dt2,
				  480);
		    } else {
			//                                  rinkf1=9;
			break;
		    }
		}
		if (rinkf1 == 9) {
		    if (enemy[tekino].dt1 % 15 == 1) {
			Puttama(8, enemy[tekino].x, enemy[tekino].y);
		    }
		}
		if (rinkf1 == 10) {
		    if (enemy[tekino].dt2 != 0) {
			enemy[tekino].dt2--;
			DefSprite(76, 1, 112, 0, 16, enemy[tekino].dt2,
				  480);
		    } else {
			enemy[tekino].f = FALSE;
			//          rinkf1=11;
		    }
		}
		enemy[tekino].dt1++;
		break;
	    case 41:		//左腕アップアームバルカン
		if (enemy[kyeenemyno + 2].f == FALSE) {
		    Bom(enemy[tekino].x, enemy[tekino].y);
		    enemy[tekino].f = FALSE;
		}
		enemy[tekino].x = enemy[kyeenemyno].x - 20 - 7;
		enemy[tekino].y = enemy[kyeenemyno].y + 28 + 15;
		if ((rinkf1 == 8) && (enemy[tekino].dt1 % 3 == 1)) {
		    if ((enemy[tekino].dt2 < 16)) {
			enemy[tekino].dt2++;
			DefSprite(77, 1, 112, 16, enemy[tekino].dt2, 16, 480);	/*左腕アップアーム砲 */
		    } else {
			rinkf1 = 9;
			break;
		    }
		}
		if (rinkf1 == 9) {
		    if (enemy[tekino].dt1 % 15 == 1) {
			Puttama(9 + rand() % 2, enemy[tekino].x,
				enemy[tekino].y);
		    }
		}
		if (rinkf1 == 10) {
		    if (enemy[tekino].dt2 != 0) {
			enemy[tekino].dt2--;
			DefSprite(77, 1, 112, 16, enemy[tekino].dt2, 16,
				  480);
		    } else {
			enemy[tekino].f = FALSE;
			//          rinkf1=11;
		    }
		}
		enemy[tekino].dt1++;
		break;
	    case 400:
		enemy[tekino].sy++;
		enemy[tekino].y += enemy[tekino].sy / 4;
		break;
	    case 401:
		enemy[tekino].sx++;
		enemy[tekino].x += enemy[tekino].sx / 8;
		if (enemy[tekino].x > (jiki.x - 32)) {
		    enemy[tekino].sy--;
		}
		enemy[tekino].y += enemy[tekino].sy / 8;
		if (enemy[tekino].dt1 % 50 == 37) {
		    Puttama(1, enemy[tekino].x + 8, enemy[tekino].y + 24);
		}
		enemy[tekino].dt1++;
		break;
	    case 402:
		enemy[tekino].sx--;
		enemy[tekino].x += enemy[tekino].sx / 8;
		if (enemy[tekino].x < (jiki.x + 32)) {
		    enemy[tekino].sy--;
		}
		enemy[tekino].y += enemy[tekino].sy / 8;
		if (enemy[tekino].dt1 % 50 == 37) {
		    Puttama(1, enemy[tekino].x + 8, enemy[tekino].y + 24);
		}
		enemy[tekino].dt1++;
		break;
	    case 410:
		kyeenemyno = tekino;
	    case 411:
		if (enemy[tekino].dt2 > 356)
		    enemy[tekino].sx = -1;
		if (enemy[tekino].dt2 < -398)
		    enemy[tekino].sx = 1;
		if ((enemy[tekino].dt1) % 62 == 0)
		    Putenemy(41,
			     enemy[tekino].x,
			     enemy[tekino].y,
			     (int) -Mycos(enemy[tekino].dt1 / 16) * 4 /
			     SANKAKU,
			     (int) -Mysin(enemy[tekino].dt1 / 16) * 4 /
			     SANKAKU, 7);
		if ((enemy[tekino].dt1) % 13 == 0)
		    Puttama(11, enemy[tekino].x + 32,
			    enemy[tekino].y + 32);

		enemy[tekino].dt2 += enemy[tekino].sx;
		enemy[tekino].dt1 += enemy[tekino].dt2 / 4;

		enemy[tekino].x = jiki.x - 16 +
		    Mycos(enemy[tekino].dt1 / 16) * 128 / SANKAKU;
		enemy[tekino].y = jiki.y - 16 +
		    Mysin(enemy[tekino].dt1 / 16) * 128 / SANKAKU;
		if (enemy[tekino].x < 0)
		    enemy[tekino].x = 0;
		if (enemy[tekino].x > 260)
		    enemy[tekino].x = 260;
		if (enemy[tekino].y < 0)
		    enemy[tekino].y = 0;
		if (enemy[tekino].y > 232)
		    enemy[tekino].y = 232;
		break;
	    case 500:
	      enemy[tekino].s = 0;

		kyeenemyno = tekino;
		enemy[tekino].dt2++;
		enemy[tekino].dt2 %= 512;
		enemy[tekino].dt1++;
		count++;
		DefSpriteEx(100, 16, 16);
		//		PutSprite(count, enemy[tekino].x + 16,
		//  enemy[tekino].y + 16, 100);
		PutSpriteEx(100, enemy[tekino].x + 16, enemy[tekino].y + 16, 2, 2, enemy[tekino].dt1);

		if (enemy[tekino].dt1 % (5 + enemy[tekino].dt2 / 8) == 1) {
		    if (rand() % 2 == 1)
			Putenemy(24, enemy[tekino].x, enemy[tekino].y,
				 (rand() % 5 + 0.5) * (rand() % 2 ==
						       1 ? -1 : 1),
				 (rand() % 5 + 0.5) * (rand() % 2 ==
						       1 ? -1 : 1), 501);
		    else
			Putenemy(rand() % 2 + 1, enemy[tekino].x,
				 enemy[tekino].y,
				 (int) Mycos(enemy[tekino].dt1 / 4) * 4 /
				 SANKAKU,
				 (int) -Mysin(enemy[tekino].dt1 / 4) * 4 /
				 SANKAKU, 501);
		}
		if (enemy[tekino].dt1 == 50) {
		    /*Putenemy(44,0,0,1,1,411); */
		}
		goto putout;
	    case 501:
		enemy[tekino].x += enemy[tekino].sx;
		enemy[tekino].y += enemy[tekino].sy;
		if (enemy[tekino].dt1 % 32 == 1)
		    Puttama(11, enemy[tekino].x, enemy[tekino].y);
		enemy[tekino].dt1++;
		break;
	    case 600:
		kyeenemyno = tekino;
		enemy[tekino].dt1 += 30;
		enemy[tekino].dt2++;
		enemy[tekino].dt1 %= 360;
		enemy[tekino].x += Mycos(enemy[tekino].dt1) * 4 / SANKAKU;
		enemy[tekino].y += Mysin(enemy[tekino].dt1) * 4 / SANKAKU;
		Puttama(11, enemy[tekino].x + 16, enemy[tekino].y + 16);
		Puttama(11, enemy[tekino].x + 32, enemy[tekino].y + 48);
		Puttama(11, enemy[tekino].x + 48, enemy[tekino].y + 16);
		if (enemy[tekino].dt2 > 240)
		    enemy[tekino].move = 601;
		if (enemy[tekino].x < 0)
		    enemy[tekino].x = 0;
		if (enemy[tekino].x > 260)
		    enemy[tekino].x = 260;
		if (enemy[tekino].y < 0)
		    enemy[tekino].y = 0;
		if (enemy[tekino].y > 232)
		    enemy[tekino].y = 232;
		break;
	    case 601:
		enemy[tekino].dt2++;
		if (enemy[tekino].x < jiki.x)
		    enemy[tekino].sx++;
		if (enemy[tekino].x > jiki.x)
		    enemy[tekino].sx--;
		enemy[tekino].x += enemy[tekino].sx;
		Putenemy(6, enemy[tekino].x + 16 + rand() % 32,
			 enemy[tekino].y, 0, rand() % 4, 400);
		if (enemy[tekino].x < 0)
		    enemy[tekino].x = 0;
		if (enemy[tekino].x > 260)
		    enemy[tekino].x = 260;
		if (enemy[tekino].y < 0)
		    enemy[tekino].y = 0;
		if (enemy[tekino].y > 232)
		    enemy[tekino].y = 232;
		if (enemy[tekino].dt2 > 800) {
		    enemy[tekino].move = 602;
		}
		break;
	    case 602:
		enemy[tekino].dt2++;
		Putenemy(24, enemy[tekino].x + 14, enemy[tekino].y + 14,
			 (rand() % 5 + 0.5) * (rand() % 2 == 1 ? -1 : 1),
			 (rand() % 5 + 0.5) * (rand() % 2 == 1 ? -1 : 1),
			 29);
		if (enemy[tekino].dt2 > 1024) {
		    enemy[tekino].move = 600;
		    enemy[tekino].dt2 = 0;
		}
		break;
	    }
	    if ((enemy[tekino].y > 964 + 32)
		|| (enemy[tekino].x > 1688 + 50)
		|| (enemy[tekino].y < 0 - 128)
		|| (enemy[tekino].x < 0 - 200)) {
		enemy[tekino].f = FALSE;
	    }
	    count++;
	    PutSprite(count, enemy[tekino].x, enemy[tekino].y,
		      enemy[tekino].charno);
	}
      putout:;
    }
    asteroidi = 0;
}
void asteroid(int tekino)
{
    int i;

    asteroiddt[asteroidi] = tekino;
    //            if(asteroidi==0)
    //            {
    enemy[tekino].x += enemy[tekino].sx;
    enemy[tekino].y += enemy[tekino].sy;
    //            }
    if (asteroidi > 0) {
	for (i = 0; i < asteroidi; i++) {
	    if ((enemy[asteroiddt[i]].x + 32 > enemy[tekino].x)
		&& (enemy[tekino].x + 32 > enemy[asteroiddt[i]].x)
		&& (enemy[asteroiddt[i]].y + 32 > enemy[tekino].y)
		&& (enemy[asteroiddt[i]].y < enemy[tekino].y + 32)) {
		enemy[tekino].sx *= -1;
		enemy[tekino].sy *= -1;
	    }
	}
    }
    asteroidi++;
}

void charpatern()
{
  /*
    GsSPRITE gt;
    SpriteView st;
    int counttag;
    counttag = count;
    enemyfaste++;
    while (counttag > enemyfaste) {
	st = spview[counttag];
	gt = sprite[counttag];
	sprite[counttag] = sprite[enemyfaste];
	spview[counttag] = spview[enemyfaste];
	sprite[enemyfaste] = gt;
	spview[enemyfaste] = st;
	counttag--;
	enemyfaste++;
    }
  */
}
void cgcg(int p)
{
  /*
    GsSPRITE gt;
    SpriteView st;
    int counttag;
    counttag = count;

    st = spview[counttag];
    gt = sprite[counttag];
    sprite[counttag] = sprite[p];
    spview[counttag] = spview[p];
    sprite[p] = gt;
    spview[p] = st;
*/
}

void bosguage()
{
  int h;
    float py;
    float wariai1, wariai2;
    if (kyeenemyno != -1) {
	if (stage == 0)
	    h = 4;
	if (stage == 1)
	    h = 18;
	if (stage == 2)
	    h = 44;
	if (stage == 3)
	    h = 30;
	if (stage == 4)
	    h = 49;
	wariai2 = enemy[kyeenemyno].p;
	wariai1 = wariai2 / enemystate[h].p;
	py = 186.0 * wariai1;
	DefSprite(94, 3, 48, 64 + (186 - py), 16, py, 480);
	count++;
		//	PutSprite(count, 320 - 16, 220 - py, 94);
		PutSpriteEx(94, 1500, 1100 - py, 4, 4, 0);
	}
}