changeset 34:7aaaaf5dde40

add new task.
author koba <koba@cr.ie.u-ryukyu.ac.jp>
date Fri, 07 Jan 2011 23:19:05 +0900
parents 39e643fc4f90
children c122e3d2302e
files Character.c TaskDandy.cc collision_task.cc game_task.h main.c ppe/Atari.cc ppe/Sankaku.h ppe/asteroid.cc ppe/chara_state12.cc ppe/chara_state13.cc ppe/chara_state20.cc ppe/chara_state21.cc ppe/chara_state22.cc ppe/chara_state25.cc ppe/chara_state26.cc ppe/chara_state27.cc ppe/chara_state28.cc ppe/chara_state29.cc ppe/chara_state3.cc ppe/chara_state31.cc ppe/chara_state32.cc ppe/chara_state400.cc ppe/chara_state401.cc ppe/chara_state402.cc ppe/chara_state7.cc ppe/chara_state8.cc ppe/chara_state9.cc ppe/task_init.cc ppe/task_object.h property.h schedule3.c state_task.cc
diffstat 32 files changed, 1131 insertions(+), 522 deletions(-) [+]
line wrap: on
line diff
--- a/Character.c	Wed Jan 05 14:41:26 2011 +0900
+++ b/Character.c	Fri Jan 07 23:19:05 2011 +0900
@@ -145,11 +145,9 @@
   CHARACTER *p;
   for(p = active_chara_list->next; p!=NULL;p = p->next)
     {
-      //      if((p->state != chara_state8) && (p->state != chara_state9)
-      //	 && (p->collision != noaction))
-      //	{
+      if((p->state != chara_state8) && (p->state != chara_state9)) {
 	  p=(*p->collision)(p);
-	  //	}
+      }
     }
 }
 
@@ -170,8 +168,8 @@
   CHARACTER *p;
   for(p = active_chara_list->next; p!=NULL; p = p->next)
     {
-      //      if((p->state != chara_state8) && (p->state != chara_state9))
-      //      {
+      if((p->state != chara_state8) && (p->state != chara_state9))
+	{
 	  if ((p->y > 964 + 32)
 	      || (p->x > 1688 + 50)
 	      || (p->y < 0 - 128)
@@ -181,6 +179,6 @@
 	      p->state = delete_chara;
 	      p->collision = noaction;
 	    }
-	  //	}
+	}
     }
 }
--- a/TaskDandy.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/TaskDandy.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -278,14 +278,17 @@
 	    count++;
 	    PutSprite(count, jiki.x, jiki.y, jiki.ch);
 	}
-    
+
+	Putbom();
+	tokuten();
+
+	asteroidi = 0;
 	// timeprof_begin(timeprof_move);
 	//Move(); //enemy move
 	collision_detect();
 	outofwindow();
 	// timeprof_end(timeprof_move);
 	state_update();
-	asteroidi = 0;
 	//charpatern();
 	//bosguage();
     
@@ -298,9 +301,6 @@
 	obj_draw();
 	gamef = game_pause(gamef);
 
-
-	Putbom();
-	tokuten();
 	if (use_keybord) {
 	    keybord();
 	} else {
--- a/collision_task.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/collision_task.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -22,19 +22,13 @@
 {
     CollisionPropertyPtr property = (CollisionPropertyPtr)tmanager->allocate(sizeof(CollisionProperty));
 
-    property->bomend = bomend;
     property->enemycount = 0;
-    property->infg_level = infg_level;
-
-    property->lg = lg;
-    property->infg = infg;
-    property->jiki = jiki;
     property->tlv3 = tlv3[0];
+    property->laser_lv2 = laser_lv2[0];
 
     memcpy(property->tama_lv1, tama_lv1, sizeof(tama1)*20);
     memcpy(property->tama_lv2, tama_lv2, sizeof(tama2)*20);
     memcpy(property->laser_lv1, laser_lv1, sizeof(laser)*20);
-    memcpy(property->laser_lv2, laser_lv2, sizeof(laser)*20);
     memcpy(property->laser_lv3, laser_lv3, sizeof(laser)*128);
     memcpy(property->bchar, bchar, sizeof(bomchar)*100);
 
@@ -46,7 +40,7 @@
 {
     CollisionPropertyPtr property = (CollisionPropertyPtr)prop;
 
-    if(bomend > property->bomend) {
+    if(property->bomend > bomend) {
 	bomend = property->bomend;
     }
     if(lg.stg > property->lg.stg) {
@@ -61,7 +55,7 @@
 
     infg = property->infg;
 
-    memcpy(tama_lv1, property->tama_lv1, sizeof(tama1)*20);    
+    memcpy(tama_lv1, property->tama_lv1, sizeof(tama1)*20);
     memcpy(tama_lv2, property->tama_lv2, sizeof(tama2)*20);
     memcpy(laser_lv1, property->laser_lv1, sizeof(laser)*20);
     memcpy(bchar, property->bchar, sizeof(bomchar)*100);
@@ -88,12 +82,18 @@
     collision_task->set_param(3,(memaddr)tama_lv2_end);
     collision_task->set_param(4,(memaddr)laser_lv1_end);
 
-    collision_task->add_inData(p, sizeof(CHARACTER));
-    collision_task->add_inData(property, sizeof(CollisionProperty));
-    collision_task->add_outData(p, sizeof(CHARACTER));
-    collision_task->add_outData(property, sizeof(CollisionProperty));
+    collision_task->set_inData(0, p, sizeof(CHARACTER));
+    collision_task->set_inData(1, &jiki, sizeof(player));
+    collision_task->set_inData(2, &lg, sizeof(stge));
+    collision_task->set_inData(3, &infg, sizeof(stge));
+    collision_task->set_inData(4, &infg_level, sizeof(int));
+    collision_task->set_inData(5, &bomend, sizeof(int));
+    collision_task->set_inData(6, property, sizeof(CollisionProperty));
+
+    collision_task->set_outData(0, p, sizeof(CHARACTER));
+    collision_task->set_outData(1, property, sizeof(CollisionProperty));
+
     collision_task->set_post(free_property, (void*)property, NULL);
-
     collision_task->set_cpu(SPE_ANY);
     collision_task->spawn();
 
--- a/game_task.h	Wed Jan 05 14:41:26 2011 +0900
+++ b/game_task.h	Fri Jan 07 23:19:05 2011 +0900
@@ -44,3 +44,4 @@
      STATE600,
      STATE601,
      STATE602,
+     ASTEROID_TASK,
--- a/main.c	Wed Jan 05 14:41:26 2011 +0900
+++ b/main.c	Fri Jan 07 23:19:05 2011 +0900
@@ -282,7 +282,7 @@
 	tlv3[i].y = -1;
     }
     filpcount = 0;
-    stage = 0;
+    stage = 1;
     //for (i = 0; i < 300; i++)
     //enemy[i].f = FALSE;
     jiki.zanki = 3;
--- a/ppe/Atari.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/Atari.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -12,22 +12,22 @@
     int tama_lv2_end = (int)smanager->get_param(3);
     int laser_lv1_end = (int)smanager->get_param(4);
 
-    CHARACTER *p =  (CHARACTER*)smanager->get_input(rbuf, 0);
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    player *jiki = (player*)smanager->get_input(rbuf, 1);
+    stge *lg = (stge*)smanager->get_input(rbuf, 2);
+    stge *infg = (stge*)smanager->get_input(rbuf, 3);
+    int *infg_level = (int*)smanager->get_input(rbuf, 4);
+    int *bomend = (int*)smanager->get_input(rbuf, 5);
     CollisionPropertyPtr property
-	= (CollisionPropertyPtr)smanager->get_input(rbuf, 1);
+	= (CollisionPropertyPtr)smanager->get_input(rbuf, 6);
 
-    int *bomend = &property->bomend;
     int *enemycount = &property->enemycount;
-    int infg_level = property->infg_level;
-    stge lg = property->lg;
-    stge infg = property->infg;
-    player jiki = property->jiki;
-    tama1 tlv3 = property->tlv3;
+    tama1 *tlv3 = &property->tlv3;
 
     tama1 *tama_lv1 = property->tama_lv1;
     tama2 *tama_lv2 = property->tama_lv2;
     laser *laser_lv1 = property->laser_lv1;
-    laser *laser_lv2 = property->laser_lv2;
+    laser *laser_lv2 = &property->laser_lv2;
     laser *laser_lv3 = property->laser_lv3;
     bomchar *bchar = property->bchar;
 
@@ -36,25 +36,33 @@
     ex = p->x;
     ey = p->y;
 
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    CollisionPropertyPtr w_property
+	= (CollisionPropertyPtr)smanager->get_output(wbuf, 1);
+
 //自機やられ
 #ifndef INVISIBLE_MODE
-    if ((ex < jiki.x + 128 / 2) && (ex + w > jiki.x + 128 / 2)
-	&& (ey < jiki.y + 128 / 2) && (ey + h > jiki.y + 128 / 2)
-	&& jiki.muteki == 0) {
-	Bom(jiki.x + 16, jiki.y + 16, bomend, bchar);
-	jiki.bf = FALSE;
-	jiki.zanki--;
-	jiki.muteki = 120;
+    if ((ex < jiki->x + 128 / 2) && (ex + w > jiki->x + 128 / 2)
+	&& (ey < jiki->y + 128 / 2) && (ey + h > jiki->y + 128 / 2)
+	&& jiki->muteki == 0) {
+	Bom(jiki->x + 16, jiki->y + 16, bomend, bchar);
+	jiki->bf = FALSE;
+	jiki->zanki--;
+	jiki->muteki = 120;
 
-	infg.stg = 0;
-	infg_level--;
-	if (infg_level < 0)
-	    infg_level = 0;
+	infg->stg = 0;
+	*infg_level--;
+	if (*infg_level < 0)
+	    *infg_level = 0;
 
-	property->infg_level = infg_level;
-	property->infg = infg;
-	property->jiki = jiki;
-	smanager->swap();
+	property->bomend = *bomend;
+	property->infg_level = *infg_level;
+	property->jiki = *jiki;
+	property->lg = *lg;
+	property->infg = *infg;
+
+	*q = *p;
+	*w_property = *property;
 	return 0;
     }
 #endif
@@ -69,18 +77,24 @@
 	    && (tama_lv1[i1].r != -1)) {
 	    tama_lv1[i1].r = -1;
 	    p->vit -= TAMALV1P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
+		infg->stg += 4;
 		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
 //		p->collision = noaction;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		property->bomend = *bomend;
+		property->infg_level = *infg_level;
+		property->jiki = *jiki;
+		property->lg = *lg;
+		property->infg = *infg;
+		
+		*q = *p;
+		*w_property = *property;
 		return 0;
 	    }
 	}
@@ -89,18 +103,24 @@
 	    && (tama_lv1[i1].l != -1)) {
 	    tama_lv1[i1].l = -1;
 	    p->vit -= TAMALV1P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
+		infg->stg += 4;
 		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
 //		p->collision = noaction;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		property->bomend = *bomend;
+		property->infg_level = *infg_level;
+		property->jiki = *jiki;
+		property->lg = *lg;
+		property->infg = *infg;
+		
+		*q = *p;
+		*w_property = *property;
 		return 0;
 	    }
 	}
@@ -113,18 +133,24 @@
 	    && (tama_lv2[i1].rr != -1)) {
 	    tama_lv2[i1].rr = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
+		infg->stg += 4;
 		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
 //		p->collision = noaction;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		property->bomend = *bomend;
+		property->infg_level = *infg_level;
+		property->jiki = *jiki;
+		property->lg = *lg;
+		property->infg = *infg;
+		
+		*q = *p;
+		*w_property = *property;
 		return 0;
 	    }
 	}
@@ -136,18 +162,24 @@
 	    && (tama_lv2[i1].sr != -1)) {
 	    tama_lv2[i1].sr = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
+		infg->stg += 4;
 		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
 //		p->collision = noaction;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		property->bomend = *bomend;
+		property->infg_level = *infg_level;
+		property->jiki = *jiki;
+		property->lg = *lg;
+		property->infg = *infg;
+		
+		*q = *p;
+		*w_property = *property;
 		return 0;
 	    }
 	}
@@ -157,18 +189,24 @@
 	    && (tama_lv2[i1].sl != -1)) {
 	    tama_lv2[i1].sl = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
+		infg->stg += 4;
 		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
 //		p->collision = noaction;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		property->bomend = *bomend;
+		property->infg_level = *infg_level;
+		property->jiki = *jiki;
+		property->lg = *lg;
+		property->infg = *infg;
+		
+		*q = *p;
+		*w_property = *property;
 		return 0;
 	    }
 	}
@@ -178,56 +216,74 @@
 	    && (tama_lv2[i1].ll != -1)) {
 	    tama_lv2[i1].ll = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
+		infg->stg += 4;
 		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
 //		p->collision = noaction;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		property->bomend = *bomend;
+		property->infg_level = *infg_level;
+		property->jiki = *jiki;
+		property->lg = *lg;
+		property->infg = *infg;
+		
+		*q = *p;
+		*w_property = *property;
 		return 0;
 	    }
 	}
     }
-    if ((tlv3.r > 0) && (jiki.x < ex + w) && (jiki.x + 128 > ex)
-	&& (jiki.y > ey + h)) {
+    if ((tlv3->r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
+	&& (jiki->y > ey + h)) {
 	p->vit -= TAMALV3P;
-	infg.stg++;
+	infg->stg++;
 	if (p->vit <= 0) {
-	    infg.stg += 4;
+	    infg->stg += 4;
 	    Bom(p->x, p->y, bomend, bchar);
-	    enemycount += (p->score *
-			   ((infg.stg / 128) + infg_level + 1));
+	    *enemycount += (p->score *
+			   ((infg->stg / 128) + *infg_level + 1));
 	    p->task = DELETE_CHARA;
 //	    p->collision = noaction;
 	    p->f = FALSE;
 
-	    property->infg = infg;
-	    smanager->swap();
+	    property->bomend = *bomend;
+	    property->infg_level = *infg_level;
+	    property->jiki = *jiki;
+	    property->lg = *lg;
+	    property->infg = *infg;
+	    
+	    *q = *p;
+	    *w_property = *property;
 	    return 0;
 	}
     }
   jumping:
-    if ((tlv3.r > 0) && (jiki.x < ex + w) && (jiki.x + 128 > ex)
-	&& (jiki.y + 128 > ey) && (jiki.y < ey + h)) {
+    if ((tlv3->r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
+	&& (jiki->y + 128 > ey) && (jiki->y < ey + h)) {
 	p->vit -= TAMALV3P;
-	infg.stg++;
+	infg->stg++;
 	if (p->vit <= 0) {
-	    infg.stg += 4;
+	    infg->stg += 4;
 	    Bom(p->x, p->y, bomend, bchar);
-	    enemycount += (p->score *
-			   ((infg.stg / 128) + infg_level + 1));
+	    *enemycount += (p->score *
+			   ((infg->stg / 128) + *infg_level + 1));
 	    p->task = DELETE_CHARA;
 //	    p->collision = noaction;
 	    p->f = FALSE;
 
-	    property->infg = infg;
-	    smanager->swap();
+	    property->bomend = *bomend;
+	    property->infg_level = *infg_level;
+	    property->jiki = *jiki;
+	    property->lg = *lg;
+	    property->infg = *infg;
+	    
+	    *q = *p;
+	    *w_property = *property;
 	    return 0;
 	}
     }
@@ -241,42 +297,53 @@
 	    laser_lv1[i1].r = -1;
 	    laser_lv1[i1].y = -1;
 	    p->vit -= LASERLV1P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
+		infg->stg += 4;
 		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
 //		p->collision = noaction;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		property->bomend = *bomend;
+		property->infg_level = *infg_level;
+		property->jiki = *jiki;
+		property->lg = *lg;
+		property->infg = *infg;
+		
+		*q = *p;
+		*w_property = *property;
 		return 0;
 	    }
 	}
     }
     /*shield(laser lv2) */
-    if ((p->tama == TRUE) && (lg.stg > 0) &&
+    if ((p->tama == TRUE) && (lg->stg > 0) &&
 	(laser_lv2[0].x + 128 > ex) && (ex + w > laser_lv2[0].x - 128)
 	&& (laser_lv2[0].y + 128 > ey) && (laser_lv2[0].y - 128 < ey + h)
 	&& (laser_lv2[0].r != 0)) {
 	p->vit -= LASERLV2P;
-	lg.stg -= 26;
-	infg.stg++;
+	lg->stg -= 26;
+	infg->stg++;
 	if (p->vit <= 0) {
-	    infg.stg += 4;
+	    infg->stg += 4;
 	    Bom(p->x, p->y, bomend, bchar);
-	    enemycount += (p->score *
-			   ((infg.stg / 128) + infg_level + 1));
+	    *enemycount += (p->score *
+			   ((infg->stg / 128) + *infg_level + 1));
 	    p->task = DELETE_CHARA;
 //	    p->collision = noaction;
 	    p->f = FALSE;
 
-	    property->lg = lg;
-	    property->infg = infg;
-	    smanager->swap();
+	    property->bomend = *bomend;
+	    property->infg_level = *infg_level;
+	    property->jiki = *jiki;
+	    property->lg = *lg;
+	    property->infg = *infg;
+	    
+	    *q = *p;
+	    *w_property = *property;
 	    return 0;
 	}
     }
@@ -289,24 +356,37 @@
 		&& (laser_lv3[i1].r > 0)) {
 		tama_lv2[i1].rr = -1;
 		p->vit -= LASERLV3P;
-		infg.stg++;
+		infg->stg++;
 		if (p->vit <= 0) {
-		    infg.stg += 4;
+		    infg->stg += 4;
 		    Bom(p->x, p->y, bomend, bchar);
-		    enemycount += (p->score *
-				   ((infg.stg / 128) + infg_level + 1));
+		    *enemycount += (p->score *
+				   ((infg->stg / 128) + *infg_level + 1));
 		    p->task = DELETE_CHARA;
 //		    p->collision = noaction;
 		    p->f = FALSE;
 
-		    property->infg = infg;
-		    smanager->swap();
+		    property->bomend = *bomend;
+		    property->infg_level = *infg_level;
+		    property->jiki = *jiki;
+		    property->lg = *lg;
+		    property->infg = *infg;
+		    
+		    *q = *p;
+		    *w_property = *property;
 		    return 0;
 		}
 	    }
 	}
     }
-    property->infg = infg;
-    smanager->swap();
+
+    property->bomend = *bomend;
+    property->infg_level = *infg_level;
+    property->jiki = *jiki;
+    property->lg = *lg;
+    property->infg = *infg;
+    
+    *q = *p;
+    *w_property = *property;
     return 0;
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/Sankaku.h	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,8 @@
+#include <math.h>
+
+#define SANKAKU (100000.0)
+
+static const double pi2 = M_PI * 2.0;
+
+static inline float Mycos(float c) { return cosf( c /  360.0 * pi2 ) * SANKAKU; }
+static inline float Mysin(float c) { return sinf( c /  360.0 * pi2 ) * SANKAKU; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/asteroid.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,33 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(Asteroid, asteroid_task);
+
+static int
+asteroid_task(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int asteroidi = (int)smanager->get_param(0);
+
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    
+    p->x += p->vx;
+    p->y += p->vy;
+    
+    if (asteroidi > 0) {
+	CHARACTER* asteroiddt = (CHARACTER*)smanager->get_input(rbuf, 1);
+
+	for (int i = 0; i < asteroidi; i++) {
+	    if ((asteroiddt[i].x + 32 > p->x)
+		&& (p->x + 32 > asteroiddt[i].x)
+		&& (asteroiddt[i].y + 32 > p->y)
+		&& (asteroiddt[i].y < p->y + 32)) {
+		p->vx *= -1;
+		p->vy *= -1;
+	    }
+	}
+    }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    *q = *p;
+    return 0;
+}
--- a/ppe/chara_state12.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/chara_state12.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -27,25 +27,25 @@
 	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 6);
 	sprite->flag = true;
 	sprite->length = length;
-
+	
 	if (p->y > 240+32) {
 	    p->task = DELETE_CHARA;
 	}
 	p->y += 3;
 	rinky += 3;
 	count++;
-
+	
 	DefSpriteEx(54, 16, 32, &sprite->data[index_count]);
 	index_count++;
 	PutSpriteEx(54, p->x, p->y, 2, 2, 1, &sprite->data[index_count]);
-
+	p->task = STATE12;
+	
 	*w_rinky = rinky;
 	*w_count = count;
 	*q = *p;
-	p->task = STATE12;
 	return 0;
     }
-
+    
     player *jiki = (player*)smanager->get_input(rbuf, 1);
 
     if (p->dt1 <= 60) {
@@ -202,11 +202,11 @@
     index_count++;
     PutSpriteEx(54, p->x, p->y, 2, 2, 1, &sprite->data[index_count]);
 
+    *q = *p;
     *w_count = count;
     *w_fastebos = fastebos;
     *w_rinkx = rinkx;
     *w_rinky = rinky;
-    *w_rinkf2 = rinkf2;    
-    *q = *p;
+    *w_rinkf2 = rinkf2;
     return 0;
 }
--- a/ppe/chara_state13.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/chara_state13.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -8,33 +8,40 @@
 {
     int rinkx = (int)smanager->get_param(0);
     int rinky = (int)smanager->get_param(1);
-    int rinkf2 = (int)smanager->get_param(2);
-    int count = (int)smanager->get_param(3);
-    int filpcount = (int)smanager->get_param(4);
-    int flag = (int)smanager->get_param(5);
-    int bomend = (int)smanager->get_param(6);
+    int filpcount = (int)smanager->get_param(2);
+    int flag = (int)smanager->get_param(3);
+    int count = (int)smanager->get_param(4);
 
     int length;
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    bomchar *bchar = (bomchar*)smanager->get_input(rbuf, 1);
+    int bomend = *(int*)smanager->get_input(rbuf, 2);
+    int rinkf2 = *(int*)smanager->get_input(rbuf, 3);
 
     if(flag == FALSE){
-	bomchar *bchar = (bomchar*)smanager->get_input(rbuf, 1);
 	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
-	int *o_bomend = (int*)smanager->get_output(wbuf, 2);
+	int *w_count = (int*)smanager->get_output(wbuf, 1);
+	int *w_bomend = (int*)smanager->get_output(wbuf, 2);
+	bomchar *w_bchar = (bomchar*)smanager->get_output(wbuf, 3);
 	Bom(p->x, p->y, &bomend, bchar);
 	p->f = FALSE;
 	p->task = DELETE_CHARA;
 
-	*o_bomend = bomend;
+	*w_count = count;
+	*w_bomend = bomend;
+	*w_bchar = *bchar;
 	*q = *p;
 	return 0;
     }
     length = 1;
-    smanager->set_outputSize(3, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+    smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
     smanager->setup_outputData();
 
     CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
-    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 3);
+    int *w_count = (int*)smanager->get_output(wbuf, 1);
+    int *w_bomend = (int*)smanager->get_output(wbuf, 2);
+    bomchar *w_bchar = (bomchar*)smanager->get_output(wbuf, 3);
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
     sprite->flag = false;
     
     p->x += rinkx - p->dt1;
@@ -58,11 +65,9 @@
     }
     if(rinkf2 == 4)
     {
-	int *o_count = (int*)smanager->get_output(wbuf, 1);
 	sprite->flag = true;
 	sprite->length = length;
 	count++;
-	*o_count = count;
 	PutSprite(count, p->x, p->y + 56, 58+filpcount % 4, &sprite->data[0]);
     }
     if(rinkf2 == 5)
@@ -82,5 +87,8 @@
     }
 
     *q = *p;
+    *w_count = count;
+    *w_bomend = bomend;
+    *w_bchar = *bchar;
     return 0;
 }
--- a/ppe/chara_state20.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/chara_state20.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -1,10 +1,10 @@
 #include "task_base.h"
 #include "task_object.h"
 
-SchedDefineTask(State20);
+SchedDefineTask1(State20, state20);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state20(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
--- a/ppe/chara_state21.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/chara_state21.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -1,10 +1,10 @@
 #include "task_base.h"
 #include "task_object.h"
 
-SchedDefineTask(State21);
+SchedDefineTask1(State21, state21);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state21(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
--- a/ppe/chara_state22.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/chara_state22.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -1,16 +1,14 @@
 #include "task_base.h"
 #include "task_object.h"
 
-SchedDefineTask(State22);
+SchedDefineTask1(State22, state22);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state22(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
-      int sf;
-
-      sf = rand() % 4;
+      int sf = rand() % 4;
       if((sf == 0) || (sf == 1))
       {
 	  p->x = -35;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state25.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,70 @@
+#include "task_base.h"
+#include "task_object.h"
+#include "Sankaku.h"
+
+SchedDefineTask1(State25, state25);
+
+static int
+state25(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int length = 1;
+    int amari;
+
+    int part1_f = (int)smanager->get_param(0);
+    int part5_f = (int)smanager->get_param(1);
+
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int count = *(int*)smanager->get_input(rbuf, 1);
+
+    smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+    smanager->setup_outputData();
+
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    int *w_count = (int*)smanager->get_output(wbuf, 1);
+    int *rinkx = (int*)smanager->get_output(wbuf, 2);
+    int *rinkf1 = (int*)smanager->get_output(wbuf, 3);
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+    sprite->flag = true;
+    sprite->length = length;
+    
+    if(p->dt1 <= 360)
+    {
+	p->x = Mycos(p->dt1) * 30 / SANKAKU + 82 + 32;
+	p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
+    }
+    if(p->dt1 > 360)
+    {
+	p->x = Mycos(p->dt1) * 30 * -1 /SANKAKU + 142 + 32;
+	p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
+    }
+    count++;
+    *w_count = count;
+    PutSprite(count, p->x - 42, p->y, 64, &sprite->data[0]);
+    amari = rand() % 160;
+    if((amari == 1) && (part5_f == TRUE))
+    {
+	p->task = STATE26;
+	*rinkf1 = 1;
+    }
+    if((amari == 2) && (part1_f == TRUE))
+    {
+	p->task = STATE27;
+	*rinkf1 = 5;
+	*rinkx = 0;
+
+	*q = *p;
+	return 0;
+    }
+    if((part5_f == TRUE) && (part1_f != TRUE))
+    {
+	p->task = STATE28;
+    }
+    p->dt1 += 3;
+    if(p->dt1 == 720)
+    {
+	p->dt1 = 0;
+    }
+
+    *q = *p;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state26.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,50 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State26, state26);
+
+static int
+state26(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int length = 1;
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int count = *(int*)smanager->get_input(rbuf, 1);
+
+    smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+    smanager->setup_outputData();
+
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    int *w_count = (int*)smanager->get_output(wbuf, 1);
+    int *rinkf1 = (int*)smanager->get_output(wbuf, 3);
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+    sprite->flag = true;
+    sprite->length = length;
+
+    if((p->dt2 > 50) && (p->dt2 < 100))
+    {
+	*rinkf1 = 2;
+    }
+    if(p->dt2 > 100)
+    {
+	*rinkf1 = 3;
+    }
+    if(p->dt2 == 400)
+    {
+	*rinkf1 = 4;
+    }
+    count++;
+    *w_count = count;
+    PutSprite(count, p->x - 42, p->y, 64, &sprite->data[0]);
+    if(p->dt2 == 401)
+    {
+	p->dt2 = 0;
+	*rinkf1 = 0;
+
+	p->task = STATE25;
+	*q = *p;
+	return 0;
+    }
+    p->dt2++;
+    *q = *p;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state27.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,88 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State27, state27);
+
+static int
+state27(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int length = 1;
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int count = *(int*)smanager->get_input(rbuf, 1);
+    int rinkx = *(int*)smanager->get_input(rbuf, 2);
+    int rinkf1 = *(int*)smanager->get_input(rbuf, 3);
+
+    smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+    smanager->setup_outputData();
+
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    int *w_count = (int*)smanager->get_output(wbuf, 1);
+    int *w_rinkx = (int*)smanager->get_output(wbuf, 2);
+    int *w_rinkf1 = (int*)smanager->get_output(wbuf, 3);
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+    sprite->flag = true;
+    sprite->length = length;
+
+    if((p->dt2 > 50) && (p->dt2 < 60) && (p->x > -24) && (p->y > -24))
+    {
+	rinkf1 = 6;
+	rinkx -= 4;
+	p->x -= 4;
+	p->y -= 4;
+    }
+    if(p->dt2 == 80)
+    {
+	rinkf1 = 7;
+    }
+    if(p->dt2 == 81)
+    {
+	rinkf1 = 8;
+    }
+    if(p->dt2 == 124)
+    {
+	rinkf1 = 9;
+    }
+    if(p->dt2 == 400)
+    {
+	rinkf1 = 10;
+    }
+    if(p->dt2 == 444)
+    {
+	rinkf1 = 11;
+    }
+    if(p->dt2 == 500)
+    {
+	rinkf1 = 12;
+    }
+    if((p->dt2 > 80) && (p->dt2 < 200))
+    {
+	if((rinkx != 0) && (p->dt2 % 2 == 1))
+	{
+	    rinkx++;
+	    p->x++;
+	    p->y++;
+	}
+    }
+    count++;
+    PutSprite(count, p->x - 32, p->y, 6, &sprite->data[0]);
+    if(rinkf1 == 12)
+    {
+	p->dt2 = 0;
+	rinkf1 = 0;
+	rinkx = 0;
+
+	p->task = STATE25;
+	*q = *p;
+	*w_count = count;
+	*w_rinkx = rinkx;
+	*w_rinkf1 = rinkf1;
+	return 0;
+    }
+    p->dt2++;
+
+    *q = *p;
+    *w_count = count;
+    *w_rinkx = rinkx;
+    *w_rinkf1 = rinkf1;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state28.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,48 @@
+#include "task_base.h"
+#include "task_object.h"
+#include "Sankaku.h"
+
+SchedDefineTask1(State28, state28);
+
+static int
+state28(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int length = 2;
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int count = *(int*)smanager->get_input(rbuf, 1);
+
+    smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+    smanager->setup_outputData();
+
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    int *w_count = (int*)smanager->get_output(wbuf, 1);
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+    sprite->flag = true;
+    sprite->length = length;
+
+    if (p->dt1 <= 360)
+    {
+	p->x = Mycos(p->dt1) * 30 / SANKAKU + 82 + 32;
+	p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
+    }
+    if (p->dt1 > 360)
+    {
+	p->x = Mycos(p->dt1) * 30 * -1 / SANKAKU + 142 + 32;
+	p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
+    }
+    count++;
+    PutSprite(count, p->x - 42, p->y, 64, &sprite->data[0]);
+    if (p->dt1 % 30 == 3)
+    {
+	Putenemy(24, p->x + 14,
+		 p->y + 14,
+		 (rand() % 5 + 0.5) * (rand() % 2 ==
+				       1 ? -1 : 1),
+		 (rand() % 5 + 0.5) * (rand() % 2 ==
+				       1 ? -1 : 1), STATE29, &sprite->data[1]);
+    }
+    p->dt1 += 3;
+    *q = *p;
+    *w_count = count;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state29.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,30 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State29, state29);
+
+static int
+state29(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int length;
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    
+    p->x += p->vx;
+    p->y += p->vy;
+    if(p->dt1 % 18 == 1)
+    {
+	smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr tama = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+	tama->flag = true;
+	tama->length = length;
+
+	Puttama(0, p->x, p->y, &tama->data[0]);
+    }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    p->dt1++;
+    
+    *q = *p;
+    return 0;
+}
--- a/ppe/chara_state3.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/chara_state3.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -7,15 +7,8 @@
 static int
 state3(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int length;
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
-    int length = 1;
-
-    smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
-    smanager->setup_outputData();
-
-    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
-    ObjContainerPtr tama = (ObjContainerPtr)smanager->get_output(wbuf, 1);
-    tama->flag = false;
     
     p->x += p->vx;
     p->y += p->vy;
@@ -23,11 +16,17 @@
        (p->dt1 == 90) ||
        (p->dt1 == 30))
     {
+	length = 1;
+	smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr tama = (ObjContainerPtr)smanager->get_output(wbuf, 1);
 	tama->flag = true;
 	tama->length = length;
 
 	Puttama(0, p->x, p->y, &tama->data[0]);
     }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
     p->dt1++;
     p->task = STATE3;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state31.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,117 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State31, state31);
+
+static int
+state31(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int part3_f = (int)smanager->get_param(0);
+
+    int length;
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    CHARACTER *kyeenemyno = (CHARACTER*)smanager->get_input(rbuf, 1);
+    int count = *(int*)smanager->get_input(rbuf, 2);
+    int rinkf1 = *(int*)smanager->get_input(rbuf, 3);
+
+    if((part3_f == FALSE) || (kyeenemyno->f == FALSE))
+    {
+	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+//	Bom(p->x, p->y);
+	p->f = FALSE;
+	p->task = DELETE_CHARA;
+//	p->collision = noaction;
+
+	*q = *p;
+	return 0;
+    }
+    
+    if(rinkf1 == 0)
+    {
+	p->x = kyeenemyno->x + 40;
+	p->y = kyeenemyno->y + 28;
+	p->dt2 = 0;
+    }
+    if(rinkf1 == 5)
+    {
+	length = 1;
+	smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+	sprite->flag = true;
+	sprite->length = length;
+
+	p->x = kyeenemyno->x + 52;
+	p->y = kyeenemyno->y;
+	count++;
+	PutSprite(count, p->x - 4, p->y - 20, 80 + p->dt2 % 4, &sprite->data[0]);
+	p->dt2++;
+    }
+    if(rinkf1 == 6)
+    {
+	length = 1;
+	smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+	sprite->flag = true;
+	sprite->length = length;
+
+	if(p->y < 240 - 40)
+	{
+	    p->y += 6;
+	}
+	else 
+	{
+	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+	    *q = *p;
+	    return 0;
+	}
+	count++;
+
+	PutSprite(count, p->x - 4, p->y - 20, 90 + p->dt2 % 4, &sprite->data[0]);
+	p->dt2++;
+    }
+    if(rinkf1 == 7)
+    {
+	length = 1;
+	smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+	sprite->flag = true;
+	sprite->length = length;
+	
+	Putenemy(22, p->x + 14, p->y + 14, 0, 0, STATE40, &sprite->data[0]);
+	*q = *p;
+	return 0;
+    }
+    if(rinkf1 == 11)
+    {
+	length = 1;
+	smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+	sprite->flag = true;
+	sprite->length = length;
+
+	if(p->y + 20 != p->y)
+	{
+	    p->y--;
+	}
+	else 
+	{
+	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+	    *q = *p;
+	    return 0;
+	}
+	count++;
+	PutSprite(count, p->x + 8, p->y + 44, 58 + p->dt2 % 4, &sprite->data[0]);
+	p->dt2++;
+    }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    int *w_count = (int*)smanager->get_output(wbuf, 1);
+
+    *q = *p;
+    *w_count = count;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state32.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,62 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State32, state32);
+
+static int
+state32(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int part4_f = (int)smanager->get_param(1);
+    int enemystate_14 = (int)smanager->get_param(2);
+    int enemystate_20 = (int)smanager->get_param(3);
+    
+    int length;
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    CHARACTER *kyeenemyno = (CHARACTER*)smanager->get_input(rbuf, 1);
+    int rinkf1 = *(int*)smanager->get_input(rbuf, 3);
+    
+    if ((part4_f == FALSE)
+	|| (kyeenemyno->f == FALSE))
+    {
+	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+//	Bom(p->x, p->y);
+	p->f = FALSE;
+	p->task = DELETE_CHARA;
+
+	*q = *p;
+	return 0;
+    }
+    p->x = kyeenemyno->x - 40;
+    p->y = kyeenemyno->y + 28;
+    if (rinkf1 == 5)
+    {
+	p->x = kyeenemyno->x - 24 + 4;
+	p->y = kyeenemyno->y + 28;
+	p->charano = enemystate_20;
+    }
+    if (rinkf1 == 11)
+    {
+	p->charano = enemystate_14;
+    }
+    if (rinkf1 == 7)
+    {
+	length = 1;
+	smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+	sprite->flag = true;
+	sprite->length = length;
+	
+	Putenemy(23, p->x + 14,
+		 p->y + 14, 0, 0, STATE41, &sprite->data[0]);
+	
+	*q = *p;
+	return 0;
+    }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    
+    *q = *p;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state400.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,17 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State400, state400);
+
+static int
+state400(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+
+    p->vy++;
+    p->y += p->vy / 4;
+    p->task = STATE400;
+
+    smanager->swap();
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state401.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,37 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State401, state401);
+
+static int
+state401(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int length;
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    player *jiki = (player*)smanager->get_input(rbuf, 1);
+
+    p->vx++;
+    p->x += p->vx / 8;
+    if (p->x > (jiki->x - 32))
+    {
+	p->vy--;
+    }
+    p->y += p->vy / 8;
+    if (p->dt1 % 50 == 37)
+    {
+	length = 1;
+	smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+
+	ObjContainerPtr tama = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+	tama->flag = true;
+	tama->length = length;
+
+	Puttama(1, p->x + 8, p->y + 24, &tama->data[0]);
+    }
+    p->dt1++;
+
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    *q = *p;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state402.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -0,0 +1,37 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State402, state402);
+
+static int
+state402(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int length;
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    player *jiki = (player*)smanager->get_input(rbuf, 1);
+
+    p->vx--;
+    p->x += p->vx / 8;
+    if (p->x < (jiki->x + 32))
+    {
+	p->vy--;
+    }
+    p->y += p->vy / 8;
+    if (p->dt1 % 50 == 37)
+    {
+	length = 1;
+	smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	
+	ObjContainerPtr tama = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+	tama->flag = true;
+	tama->length = length;
+
+	Puttama(1, p->x + 8, p->y + 24, &tama->data[0]);
+    }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    p->dt1++;
+    *q = *p;
+    return 0;
+}
--- a/ppe/chara_state7.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/chara_state7.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -6,26 +6,26 @@
 static int
 state7(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int length;
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
-    int length = 1;
-
-    smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
-    smanager->setup_outputData();
-
-    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
-    ObjContainerPtr tama = (ObjContainerPtr)smanager->get_output(wbuf, 1);
-    tama->flag = false;
 
     p->x += p->vx;
     p->y += p->vy;
     if((p->dt1 == 60) || (p->dt1 == 90)
        || (p->dt1 == 30))
     {
+	length = 1;
+	smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr tama = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+
 	tama->flag = true;
-	tama->length = 1;
+	tama->length = length;
 
 	Puttama(1, p->x, p->y, &tama->data[0]);
     }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
     p->dt1++;
     p->task = STATE7;
 
--- a/ppe/chara_state8.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/chara_state8.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -6,8 +6,8 @@
 static int
 state8(SchedTask *smanager, void *rbuf, void *wbuf)
 {
-    int count = (int)smanager->get_param(0);
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int count = *(int*)smanager->get_input(rbuf, 1);
     int length;
 
     if(p->y < 520)
--- a/ppe/chara_state9.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/chara_state9.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -6,8 +6,8 @@
 static int
 state9(SchedTask *smanager, void *rbuf, void *wbuf)
 {
-    int count = (int)smanager->get_param(0);
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int count = *(int*)smanager->get_input(rbuf, 1);
     int length;
 
     if(p->s <= 2)
--- a/ppe/task_init.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/task_init.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -22,8 +22,21 @@
 SchedExternTask(State20);
 SchedExternTask(State21);
 SchedExternTask(State22);
+SchedExternTask(State25);
+SchedExternTask(State26);
+SchedExternTask(State27);
+SchedExternTask(State28);
+SchedExternTask(State29);
+SchedExternTask(State30);
+SchedExternTask(State31);
+SchedExternTask(State32);
 
-SchedExternTask(State30);
+SchedExternTask(State400);
+SchedExternTask(State401);
+SchedExternTask(State402);
+
+SchedExternTask(Asteroid);
+
 /**
  * この関数は ../spe/spe-main と違って
  * 自分で呼び出せばいい関数なので
@@ -52,6 +65,18 @@
     SchedRegisterTask(STATE20, State20);
     SchedRegisterTask(STATE21, State21);
     SchedRegisterTask(STATE22, State22);
-
+    SchedRegisterTask(STATE25, State25);
+    SchedRegisterTask(STATE26, State26);
+    SchedRegisterTask(STATE27, State27);
+    SchedRegisterTask(STATE28, State28);
+    SchedRegisterTask(STATE29, State29);
     SchedRegisterTask(STATE30, State30);
+    SchedRegisterTask(STATE31, State31);
+    SchedRegisterTask(STATE32, State32);
+
+    SchedRegisterTask(STATE400, State400);
+    SchedRegisterTask(STATE401, State401);
+    SchedRegisterTask(STATE402, State402);
+
+    SchedRegisterTask(ASTEROID_TASK, Asteroid);
 }
--- a/ppe/task_object.h	Wed Jan 05 14:41:26 2011 +0900
+++ b/ppe/task_object.h	Fri Jan 07 23:19:05 2011 +0900
@@ -24,11 +24,13 @@
     int ccount;
 } player;
 
+
 typedef struct tama {
     int x;
     int y;
 } tama;
 
+
 typedef struct tama1 {
     int x;
     int y;
@@ -36,6 +38,7 @@
     int l;
 } tama1;
 
+
 typedef struct tama2 {
     int x;
     int y;
@@ -45,10 +48,12 @@
     int ll;
 } tama2;
 
+
 typedef struct stge {
     int stg;
 } stge;
 
+
 typedef struct laser {
     float x;
     float y;
@@ -59,6 +64,7 @@
   float s;
 } laser;
 
+
 typedef struct bomchar {
     int x;
     int y;
@@ -66,6 +72,7 @@
     int no;
 } bomchar;
 
+
 typedef struct CHARACTER{
   float x; //position
   float y;
@@ -90,10 +97,11 @@
 
 } CHARACTER;
 
+
 typedef struct CollisionProperty {
   int bomend;
+  int infg_level;
   int enemycount;
-  int infg_level;
 
   player jiki;
   stge lg;
@@ -103,12 +111,13 @@
   tama2 tama_lv2[20];
   tama1 tlv3;
   laser laser_lv1[20];
-  laser laser_lv2[20];
+  laser laser_lv2;
   laser laser_lv3[128];
   bomchar bchar[100];
 
 } CollisionProperty, *CollisionPropertyPtr;
 
+
 typedef struct ObjData {
   int type;
 
@@ -126,6 +135,7 @@
   short middlex, middley;
 } ObjData, *ObjDataPtr;
 
+
 typedef struct ObjContainer {
   bool flag;
   int length;
@@ -133,6 +143,7 @@
   ObjData data[1];
 } ObjContainer, *ObjContainerPtr;
 
+
 CHARACTER * noaction(CHARACTER *p);
 CHARACTER * delete_chara(CHARACTER *p);
 void Bom(int x, int y, int *bomend, bomchar *bchar);
--- a/property.h	Wed Jan 05 14:41:26 2011 +0900
+++ b/property.h	Fri Jan 07 23:19:05 2011 +0900
@@ -8,8 +8,8 @@
 
 typedef struct CollisionProperty {
   int bomend;
+  int infg_level;
   int enemycount;
-  int infg_level;
 
   player jiki;
   stge lg;
@@ -19,7 +19,7 @@
   tama2 tama_lv2[20];
   tama1 tlv3;
   laser laser_lv1[20];
-  laser laser_lv2[20];
+  laser laser_lv2;
   laser laser_lv3[128];
   bomchar bchar[100];
 
--- a/schedule3.c	Wed Jan 05 14:41:26 2011 +0900
+++ b/schedule3.c	Fri Jan 07 23:19:05 2011 +0900
@@ -241,7 +241,6 @@
 	    Putenemy(4, 520, -128, 0, 1, chara_state8);	// 1面ボスをPutenemy
 	}			//case文
 
-#if 0
 	//kyeenemynoはenemyオブジェクトのID。
 	//ボスが登場していないときはkyeenemynoに-1がセットされる。
 	//move.cではenemyオブジェクトのIDはtekinoで扱うが、
@@ -263,10 +262,8 @@
 	      clear_result[0] = infg_level;
 	    }
 	}
-#endif
     }			//stage0.end
     
-#if 0
     if (stage == 1) {
       switch (filpcount) {
 	case 1:
@@ -422,6 +419,7 @@
 	    /*  Puttama(6,100,0); */
 
 	    Putenemy(13, 688, 28, 0, 0, chara_state31);
+#if 0
 	    Putenemy(14, 368, 28, 0, 0, chara_state32);
 
 	    Putenemy(11, 656, 0, 0, 0, chara_state33);
@@ -429,9 +427,10 @@
 
 	    Putenemy(15, 528, 32, 0, 0, chara_state35);
 	    break;
+#endif
 	}
 	//////////////////////
-	
+#if 0	
 	if (filpcount > FRAME_RATE * 64) {
 	    if (kyeenemyno->f == FALSE) {
 		Superbom(kyeenemyno->x, kyeenemyno->y);
@@ -441,7 +440,9 @@
 		clear_result[1] = infg_level;
 	    }
 	}
+#endif
     }
+#if 0
     if (stage == 2) {
 	switch (filpcount) {
 	case 1:
--- a/state_task.cc	Wed Jan 05 14:41:26 2011 +0900
+++ b/state_task.cc	Fri Jan 07 23:19:05 2011 +0900
@@ -79,26 +79,26 @@
     SetTaskState(STATE21, chara_state21);
     SetTaskState(STATE22, chara_state22);
     SetTaskState(STATE23, chara_state23);
-#if 0
     SetTaskState(STATE24, chara_state24);
     SetTaskState(STATE25, chara_state25);
     SetTaskState(STATE26, chara_state26);
     SetTaskState(STATE27, chara_state27);
     SetTaskState(STATE28, chara_state28);
     SetTaskState(STATE29, chara_state29);
-#endif
     SetTaskState(STATE30, chara_state30);
-#if 0
     SetTaskState(STATE31, chara_state31);
     SetTaskState(STATE32, chara_state32);
+#if 0
     SetTaskState(STATE33, chara_state33);
     SetTaskState(STATE34, chara_state34);
     SetTaskState(STATE35, chara_state35);
     SetTaskState(STATE40, chara_state40);
     SetTaskState(STATE41, chara_state41);
+#endif
     SetTaskState(STATE400, chara_state400);
     SetTaskState(STATE401, chara_state401);
     SetTaskState(STATE402, chara_state402);
+#if 0
     SetTaskState(STATE410, chara_state410);
     SetTaskState(STATE411, chara_state411);
     SetTaskState(STATE500, chara_state500);
@@ -120,6 +120,17 @@
 
 
 void
+freeObject(SchedTask *s, void *chara, void *obj)
+{
+    free(obj);
+
+    CHARACTER *p = (CHARACTER*)chara;
+    int num = GetStateNum(p->task);
+    p->state = state_list[num];
+}
+
+
+void
 checkContainer(SchedTask *s, void *chara, void *obj)
 {
     CHARACTER *p = (CHARACTER*)chara;
@@ -225,7 +236,7 @@
 
 
 CHARACTER*
-BossTask1(CHARACTER *p)
+JikiContainerTask(CHARACTER *p)
 {
     int task_num = p->task;
     int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH;
@@ -234,9 +245,65 @@
     obj->flag = false;
     obj->length = 0;
 
-    state_task->set_param(0, (memaddr)count);
+    state_task->set_inData(0, p, sizeof(CHARACTER));
+    state_task->set_inData(1, &jiki, sizeof(player));
+
+    state_task->set_outData(0, p, sizeof(CHARACTER));
+    state_task->set_outData(1, obj, 0);
+
+    state_task->set_post(checkContainer, (void*)p, (void*)obj);    
+    state_task->set_cpu(SPE_ANY);
+    state_task->spawn();
+    
+    return p;
+}
+
+
+CHARACTER*
+AsteroidTask(CHARACTER *p)
+{
+    asteroiddt[asteroidi] = p;
+
+    int task_num = ASTEROID_TASK;
+    HTaskPtr state_task = tmanager->create_task(task_num);
+    
+    state_task->set_param(0, (memaddr)asteroidi);
+    
+    state_task->set_inData(0, p, sizeof(CHARACTER));
+    
+    state_task->set_outData(0, p, sizeof(CHARACTER));
+    
+    int array_size = sizeof(CHARACTER)*asteroidi;
+    if (array_size > 0) {
+	CHARACTER *asteroid_array = (CHARACTER*)tmanager->allocate(array_size);
+	for (int i = 0; i < asteroidi; i++) {
+	    asteroid_array[i] = *asteroiddt[i];
+	}
+	state_task->set_inData(1, asteroid_array, array_size);
+	state_task->set_post(freeObject, (void*)p, (void*)asteroid_array);
+    } else {
+	state_task->set_post(updateState, (void*)p, NULL);
+    }
+    state_task->set_cpu(SPE_ANY);
+    state_task->spawn();
+
+    asteroidi++;
+    return p;
+}
+
+
+CHARACTER*
+Boss1Task1(CHARACTER *p)
+{
+    int task_num = p->task;
+    int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH;
+    HTaskPtr state_task = tmanager->create_task(task_num);
+    ObjContainerPtr obj = (ObjContainerPtr)tmanager->allocate(obj_size);
+    obj->flag = false;
+    obj->length = 0;
 
     state_task->set_inData(0, p, sizeof(CHARACTER));
+    state_task->set_inData(1, &count, sizeof(int));
 
     state_task->set_outData(0, p, sizeof(CHARACTER));
     state_task->set_outData(1, &count, sizeof(int));
@@ -251,7 +318,7 @@
 
 
 CHARACTER*
-BossTask2(CHARACTER *p)
+Boss1Task2(CHARACTER *p)
 {
     int task_num = p->task;
     int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH;
@@ -260,9 +327,8 @@
     obj->flag = false;
     obj->length = 0;
     
-    state_task->set_param(0, (memaddr)count);
-    
     state_task->set_inData(0, p, sizeof(CHARACTER));
+    state_task->set_inData(1, &count, sizeof(int));
     
     state_task->set_outData(0, p, sizeof(CHARACTER));
     state_task->set_outData(1, &count, sizeof(int));
@@ -279,7 +345,7 @@
 
 
 CHARACTER*
-BossTask3(CHARACTER *p)
+Boss1Task3(CHARACTER *p)
 {
     int task_num = p->task;
     HTaskPtr state_task = tmanager->create_task(task_num);
@@ -301,7 +367,7 @@
 
 
 CHARACTER*
-BossTask4(CHARACTER *p)
+Boss1Task4(CHARACTER *p)
 {
     int task_num = p->task;
     int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH;
@@ -328,7 +394,7 @@
 
 
 CHARACTER*
-BossTask5(CHARACTER *p)
+Boss1Task5(CHARACTER *p)
 {
     int task_num = p->task;
     int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH;
@@ -362,7 +428,7 @@
 
 
 CHARACTER*
-BossTask6(CHARACTER *p)
+Boss1Task6(CHARACTER *p)
 {
     int task_num = p->task;
     int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH;
@@ -373,19 +439,87 @@
     
     state_task->set_param(0, (memaddr)rinkx);
     state_task->set_param(1, (memaddr)rinky);
-    state_task->set_param(2, (memaddr)rinkf2);
-    state_task->set_param(3, (memaddr)count);
-    state_task->set_param(4, (memaddr)filpcount);
-    state_task->set_param(5, (memaddr)tekino0->f);
-    state_task->set_param(6, (memaddr)bomend);
+    state_task->set_param(2, (memaddr)filpcount);
+    state_task->set_param(3, (memaddr)tekino0->f);
+    state_task->set_param(4, (memaddr)count);
 
     state_task->set_inData(0, p, sizeof(CHARACTER));
-    state_task->set_inData(1, bchar, sizeof(bomchar)*(bomend+1));
+    state_task->set_inData(1, bchar, sizeof(bomchar)*100);
+    state_task->set_inData(2, &bomend, sizeof(int));
+    state_task->set_inData(3, &rinkf2, sizeof(int));
     
     state_task->set_outData(0, p, sizeof(CHARACTER));
     state_task->set_outData(1, &count, sizeof(int));
     state_task->set_outData(2, &bomend, sizeof(int));
-    state_task->set_outData(3, obj, 0);
+    state_task->set_outData(3, bchar, sizeof(bomchar)*100);
+    state_task->set_outData(4, obj, 0);
+
+    state_task->set_post(checkContainer, (void*)p, (void*)obj);
+    state_task->set_cpu(SPE_ANY);
+    state_task->spawn();
+    
+    return p;
+}
+
+
+CHARACTER*
+Boss2Task1(CHARACTER *p)
+{
+    int task_num = p->task;
+    int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH;
+    HTaskPtr state_task = tmanager->create_task(task_num);
+    ObjContainerPtr obj = (ObjContainerPtr)tmanager->allocate(obj_size);
+    obj->flag = false;
+    obj->length = 0;
+
+    state_task->set_param(0, (memaddr)enemy_part1->f);
+    state_task->set_param(1, (memaddr)enemy_part5->f);
+
+    state_task->set_inData(0, p, sizeof(CHARACTER));
+    state_task->set_inData(1, &count, sizeof(int));
+    state_task->set_inData(2, &rinkx, sizeof(int));
+    state_task->set_inData(3, &rinkf1, sizeof(int));
+    
+    state_task->set_outData(0, p, sizeof(CHARACTER));
+    state_task->set_outData(1, &count, sizeof(int));
+    state_task->set_outData(2, &rinkx, sizeof(int));
+    state_task->set_outData(3, &rinkf1, sizeof(int));
+    state_task->set_outData(4, obj, 0);
+
+    state_task->set_post(checkContainer, (void*)p, (void*)obj);
+    state_task->set_cpu(SPE_ANY);
+    state_task->spawn();
+    
+    return p;
+}
+
+
+CHARACTER*
+Boss2Task2(CHARACTER *p)
+{
+    int task_num = p->task;
+    int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH;
+    HTaskPtr state_task = tmanager->create_task(task_num);
+    ObjContainerPtr obj = (ObjContainerPtr)tmanager->allocate(obj_size);
+    obj->flag = false;
+    obj->length = 0;
+
+    state_task->set_param(0, (memaddr)enemy_part3->f);
+    state_task->set_param(1, (memaddr)enemy_part4->f);
+    state_task->set_param(2, (memaddr)enemystate[14].charano);
+    state_task->set_param(3, (memaddr)enemystate[20].charano);
+
+    state_task->set_inData(0, p, sizeof(CHARACTER));
+    state_task->set_inData(1, kyeenemyno, sizeof(CHARACTER));
+    state_task->set_inData(2, &count, sizeof(int));
+    state_task->set_inData(3, &rinkf1, sizeof(int));
+    state_task->set_inData(4, bchar, sizeof(bomchar)*100);
+    
+    state_task->set_outData(0, p, sizeof(CHARACTER));
+    state_task->set_outData(1, &count, sizeof(int));
+    state_task->set_outData(2, &rinkx, sizeof(int));
+    state_task->set_outData(3, &rinkf1, sizeof(int));
+    state_task->set_outData(4, obj, 0);
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(SPE_ANY);
@@ -487,7 +621,7 @@
     kyeenemyno = p;
 
     p->task = STATE8;
-    return BossTask1(p);
+    return Boss1Task1(p);
 }
 
 
@@ -495,7 +629,7 @@
 chara_state9(CHARACTER *p)
 {
     p->task = STATE9;    
-    return BossTask2(p);
+    return Boss1Task2(p);
 }
 
 
@@ -503,7 +637,7 @@
 chara_state10(CHARACTER *p)
 {
     p->task =STATE10;
-    return BossTask3(p);
+    return Boss1Task3(p);
 }
 
 
@@ -511,7 +645,7 @@
 chara_state11(CHARACTER *p)
 {
     p->task = STATE11;
-    return BossTask4(p);
+    return Boss1Task4(p);
 }
 
 
@@ -519,7 +653,7 @@
 chara_state12(CHARACTER *p)
 {
     p->task = STATE12;
-    return BossTask5(p);
+    return Boss1Task5(p);
 }
 
 
@@ -527,7 +661,7 @@
 chara_state13(CHARACTER *p)
 {
     p->task = STATE13;
-    return BossTask6(p);
+    return Boss1Task6(p);
 }
 
 
@@ -548,305 +682,104 @@
 //ここまでgetate boss
 
 
-CHARACTER * chara_state22(CHARACTER *p)
+CHARACTER*
+chara_state22(CHARACTER *p)
 {
+    p->task = STATE22;    
     return SimpleStateTask(p);
 }
 
 
-CHARACTER * chara_state23(CHARACTER *p)
+CHARACTER*
+chara_state23(CHARACTER *p)
 {
-//  p=asteroid(p);
-  return p;
+    p->task = STATE23;
+    return AsteroidTask(p);
 }
 
 
-#if 0
-CHARACTER * chara_state24(CHARACTER *p)
+CHARACTER*
+chara_state24(CHARACTER *p)
 {
-  kyeenemyno = p;
-  tekino0 = 0;
-  enemy_part1 = p->next;
-  enemy_part2 = enemy_part1->next;
-  enemy_part3 = enemy_part2->next;
-  enemy_part4 = enemy_part3->next;
-  enemy_part5 = enemy_part4->next;
-  rinkx = 0;
-  rinky = 0;
-  rinkf1 = 0;
-  rinkf2 = 0;
-  p->state = chara_state25;
-  return p;
-}
-
-CHARACTER * chara_state25(CHARACTER *p)
-{
-  int amari;
+    kyeenemyno = p;
+    tekino0 = 0;
+    enemy_part1 = p->next;
+    enemy_part2 = enemy_part1->next;
+    enemy_part3 = enemy_part2->next;
+    enemy_part4 = enemy_part3->next;
+    enemy_part5 = enemy_part4->next;
+    rinkx = 0;
+    rinky = 0;
+    rinkf1 = 0;
+    rinkf2 = 0;
+    p->task = STATE25;
 
-  if(p->dt1 <= 360)
-    {
-      p->x = Mycos(p->dt1) * 30 / SANKAKU + 82 + 32;
-      p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
-    }
-  if(p->dt1 > 360)
-    {
-      p->x = Mycos(p->dt1) * 30 * -1 /SANKAKU + 142 + 32;
-      p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
-    }
-  count++;
-  PutSprite(count, p->x - 42, p->y, 64);
-  amari = rand() % 160;
-  if((amari == 1) && (enemy_part5->f == TRUE))
-    {
-      p->state = chara_state26;
-      rinkf1 = 1;
-    }
-  if((amari == 2) && (enemy_part1->f == TRUE))
-    {
-      p->state = chara_state27;
-      rinkf1 = 5;
-      rinkx = 0;
-      return p;
-    }
-  if((enemy_part5->f == TRUE) && (enemy_part1->f != TRUE))
-    {
-      p->state = chara_state28;
-    }
-  p->dt1 += 3;
-  if(p->dt1 == 720)
-    {
-      p->dt1 = 0;
-    }
-  return p;
+    int num = GetStateNum(p->task);
+    p->state = state_list[num];
+    return p;
 }
 
-CHARACTER * chara_state26(CHARACTER *p)
+CHARACTER*
+chara_state25(CHARACTER *p)
 {
-  if((p->dt2 > 50) && (p->dt2 < 100))
-    {
-      rinkf1 = 2;
-    }
-  if(p->dt2 > 100)
-    {
-      rinkf1 = 3;
-    }
-  if(p->dt2 == 400)
-    {
-      rinkf1 = 4;
-    }
-  count++;
-  PutSprite(count, p->x - 42, p->y, 64);
-  if(p->dt2 == 401)
-    {
-      p->dt2 = 0;
-      rinkf1 = 0;
-      p->state = chara_state25;
-      return p;
-    }
-  p->dt2++;
-  return p;
+    p->task = STATE25;
+    return Boss2Task1(p);
 }
 
-CHARACTER * chara_state27(CHARACTER *p) //rocket punch
+CHARACTER*
+chara_state26(CHARACTER *p)
 {
-  if((p->dt2 > 50) && (p->dt2 < 60) && (p->x > -24) && (p->y > -24))
-    {
-      rinkf1 = 6;
-      rinkx -= 4;
-      p->x -= 4;
-      p->y -= 4;
-    }
-  if(p->dt2 == 80)
-    {
-      rinkf1 = 7;
-    }
-  if(p->dt2 == 81)
-    {
-      rinkf1 = 8;
-    }
-  if(p->dt2 == 124)
-    {
-      rinkf1 = 9;
-    }
-  if(p->dt2 == 400)
-    {
-      rinkf1 = 10;
-    }
-  if(p->dt2 == 444)
-    {
-      rinkf1 = 11;
-    }
-  if(p->dt2 == 500)
-    {
-      rinkf1 = 12;
-    }
-  if((p->dt2 > 80) && (p->dt2 < 200))
-    {
-      if((rinkx != 0) && (p->dt2 % 2 == 1))
-	{
-	  rinkx++;
-	  p->x++;
-	  p->y++;
-	}
-    }
-  count++;
-  PutSprite(count, p->x - 32, p->y, 6);
-  if(rinkf1 == 12)
-    {
-      p->dt2 = 0;
-      rinkf1 = 0;
-      rinkx = 0;
-      p->state = chara_state25;
-      return p;
-    }
-  p->dt2++;
-  return p;
+    p->task = STATE26;
+    return Boss2Task1(p);
 }
-CHARACTER * chara_state28(CHARACTER *p)
+
+CHARACTER*
+chara_state27(CHARACTER *p) //rocket punch
 {
-  if (p->dt1 <= 360)
-    {
-      p->x = Mycos(p->dt1) * 30 / SANKAKU + 82 + 32;
-      p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
-    }
-  if (p->dt1 > 360)
-    {
-      p->x = Mycos(p->dt1) * 30 * -1 / SANKAKU + 142 + 32;
-      p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
-    }
-  count++;
-  PutSprite(count, p->x - 42, p->y, 64);
-  if (p->dt1 % 30 == 3)
-    {
-      Putenemy(24, p->x + 14,
-	       p->y + 14,
-	       (rand() % 5 + 0.5) * (rand() % 2 ==
-				     1 ? -1 : 1),
-	       (rand() % 5 + 0.5) * (rand() % 2 ==
-				     1 ? -1 : 1), chara_state29);
-    }
-  p->dt1 += 3;
-  return p;
+    p->task = STATE27;
+    return Boss2Task1(p);
+}
+CHARACTER*
+chara_state28(CHARACTER *p)
+{
+    p->task = STATE28;
+    return Boss2Task1(p);
 }
 
 
-CHARACTER * chara_state29(CHARACTER *p)
+CHARACTER*
+chara_state29(CHARACTER *p)
 {
-  p->x += p->vx;
-  p->y += p->vy;
-  if(p->dt1 % 18 == 1)
-    {
-      Puttama(0, p->x, p->y);
-    }
-  p->dt1++;
-  return p;
+    p->task = STATE29;
+    return sendContainerTask(p);
 }
-#endif
+
 
-CHARACTER * chara_state30(CHARACTER *p)
+CHARACTER*
+chara_state30(CHARACTER *p)
 {
     p->task = STATE30;
     return SimpleStateTask(p);
 }
 
-#if 0
-CHARACTER * chara_state31(CHARACTER *p) //right hand
+
+CHARACTER*
+chara_state31(CHARACTER *p) //right hand
 {
-  
-  if((enemy_part3->f == FALSE) || (kyeenemyno->f == FALSE))
-    {
-      Bom(p->x, p->y);
-      p->f = FALSE;
-      p->state = delete_chara;
-      p->collision = noaction;
-      return p;
-    }
-
-  if(rinkf1 == 0)
-    {
-      p->x = kyeenemyno->x + 40;
-      p->y = kyeenemyno->y + 28;
-      p->dt2 = 0;
-    }
-  if(rinkf1 == 5)
-    {
-      p->x = kyeenemyno->x + 52;
-      p->y = kyeenemyno->y;
-      count++;
-      PutSprite(count, p->x - 4, p->y - 20, 80 + p->dt2 % 4);
-      p->dt2++;
-    }
-  if(rinkf1 == 6)
-    {
-      if(p->y < 240 - 40)
-	{
-	  p->y += 6;
-	}
-      else 
-	{
-	  return p;
-	}
-      count++;
-      PutSprite(count, p->x - 4, p->y - 20, 90 + p->dt2 % 4);
-      p->dt2++;
-    }
-  if(rinkf1 == 7)
-    {
-      Putenemy(22, p->x + 14, p->y + 14, 0, 0, chara_state40);
-      return p;
-    }
-  if(rinkf1 == 11)
-    {
-      if(p->y + 20 != p->y)
-	{
-	  p->y--;
-	}
-      else 
-	{
-	  return p;
-	}
-      count++;
-      PutSprite(count, p->x + 8, p->y + 44, 58 + p->dt2 % 4);
-      p->dt2++;
-    }
-  return p;
+    p->task = STATE31;
+    return Boss2Task2(p);
 }
 
 
-CHARACTER * chara_state32(CHARACTER *p) //left hand
+CHARACTER*
+chara_state32(CHARACTER *p) //left hand
 {
-  if ((enemy_part4->f == FALSE)
-      || (kyeenemyno->f == FALSE))
-    {
-      Bom(p->x, p->y);
-      p->f = FALSE;
-      p->state = delete_chara;
-      p->collision = noaction;
-      return p;
-    }
-  p->x = kyeenemyno->x - 40;
-  p->y = kyeenemyno->y + 28;
-  if (rinkf1 == 5)
-    {
-      p->x = kyeenemyno->x - 24 + 4;
-      p->y = kyeenemyno->y + 28;
-      p->charano = enemystate[20].charano;
-    }
-  if (rinkf1 == 11)
-    {
-      p->charano = enemystate[14].charano;
-    }
-  if (rinkf1 == 7)
-    {
-      Putenemy(23, p->x + 14,
-	       p->y + 14, 0, 0, chara_state41);
-      //      rinkf1=8;
-      return p;
-    }
-  return p;
+    p->task = STATE32;
+    return Boss2Task2(p);
 }
 
 
+#if 0
 CHARACTER * chara_state33(CHARACTER *p) // right shoulder
 {
   if (kyeenemyno->f == FALSE)
@@ -1051,50 +984,33 @@
   p->dt1++;
   return p;
 }
+#endif
 
 
 CHARACTER * chara_state400(CHARACTER *p)
 {
+    p->task = STATE400;
     return SimpleStateTask(p);
 }
 
 
-CHARACTER * chara_state401(CHARACTER *p)
+CHARACTER*
+chara_state401(CHARACTER *p)
 {
-  p->vx++;
-  p->x += p->vx / 8;
-  if (p->x > (jiki.x - 32))
-    {
-      p->vy--;
-    }
-  p->y += p->vy / 8;
-  if (p->dt1 % 50 == 37)
-    {
-      Puttama(1, p->x + 8, p->y + 24);
-    }
-  p->dt1++;
-  return p;
+    p->task = STATE401;
+    return JikiContainerTask(p);
 }
 
 
-CHARACTER * chara_state402(CHARACTER *p)
+CHARACTER*
+chara_state402(CHARACTER *p)
 {
-  p->vx--;
-  p->x += p->vx / 8;
-  if (p->x < (jiki.x + 32))
-    {
-      p->vy--;
-    }
-  p->y += p->vy / 8;
-  if (p->dt1 % 50 == 37)
-    {
-      Puttama(1, p->x + 8, p->y + 24);
-    }
-  p->dt1++;
-  return p;
+    p->task = STATE402;
+    return JikiContainerTask(p);
 }
 
 
+#if 0
 CHARACTER * chara_state410(CHARACTER *p)
 {
   kyeenemyno = p;
@@ -1265,29 +1181,4 @@
   return p;
 }
 
-
-CHARACTER *  asteroid(CHARACTER *p)
-{
-    int i;
-
-    asteroiddt[asteroidi] = p;
-    //            if(asteroidi==0)
-    //            {
-    p->x += p->vx;
-    p->y += p->vy;
-    //            }
-    if (asteroidi > 0) {
-	for (i = 0; i < asteroidi; i++) {
-	    if ((asteroiddt[i]->x + 32 > p->x)
-		&& (p->x + 32 > asteroiddt[i]->x)
-		&& (asteroiddt[i]->y + 32 > p->y)
-		&& (asteroiddt[i]->y < p->y + 32)) {
-		p->vx *= -1;
-		p->vy *= -1;
-	    }
-	}
-    }
-    asteroidi++;
-    return p;
-}
 #endif