changeset 35:c122e3d2302e

add all state task.
author koba <koba@cr.ie.u-ryukyu.ac.jp>
date Sun, 09 Jan 2011 14:28:44 +0900
parents 7aaaaf5dde40
children 4516141d844a
files ppe/Atari.cc ppe/Sprite.cc ppe/chara_state28.cc ppe/chara_state29.cc ppe/chara_state31.cc ppe/chara_state32.cc ppe/chara_state33.cc ppe/chara_state34.cc ppe/chara_state35.cc ppe/chara_state40.cc ppe/chara_state41.cc ppe/chara_state411.cc ppe/chara_state500.cc ppe/chara_state501.cc ppe/chara_state600.cc ppe/chara_state601.cc ppe/chara_state602.cc ppe/task_init.cc ppe/task_object.h property.h schedule3.c state_task.cc
diffstat 22 files changed, 804 insertions(+), 400 deletions(-) [+]
line wrap: on
line diff
--- a/ppe/Atari.cc	Fri Jan 07 23:19:05 2011 +0900
+++ b/ppe/Atari.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -84,7 +84,6 @@
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
-//		p->collision = noaction;
 		p->f = FALSE;
 
 		property->bomend = *bomend;
@@ -110,7 +109,6 @@
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
-//		p->collision = noaction;
 		p->f = FALSE;
 
 		property->bomend = *bomend;
@@ -140,7 +138,6 @@
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
-//		p->collision = noaction;
 		p->f = FALSE;
 
 		property->bomend = *bomend;
@@ -169,7 +166,6 @@
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
-//		p->collision = noaction;
 		p->f = FALSE;
 
 		property->bomend = *bomend;
@@ -196,7 +192,6 @@
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
-//		p->collision = noaction;
 		p->f = FALSE;
 
 		property->bomend = *bomend;
@@ -223,7 +218,6 @@
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
-//		p->collision = noaction;
 		p->f = FALSE;
 
 		property->bomend = *bomend;
@@ -248,7 +242,6 @@
 	    *enemycount += (p->score *
 			   ((infg->stg / 128) + *infg_level + 1));
 	    p->task = DELETE_CHARA;
-//	    p->collision = noaction;
 	    p->f = FALSE;
 
 	    property->bomend = *bomend;
@@ -273,7 +266,6 @@
 	    *enemycount += (p->score *
 			   ((infg->stg / 128) + *infg_level + 1));
 	    p->task = DELETE_CHARA;
-//	    p->collision = noaction;
 	    p->f = FALSE;
 
 	    property->bomend = *bomend;
@@ -304,7 +296,6 @@
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + *infg_level + 1));
 		p->task = DELETE_CHARA;
-//		p->collision = noaction;
 		p->f = FALSE;
 
 		property->bomend = *bomend;
@@ -333,7 +324,6 @@
 	    *enemycount += (p->score *
 			   ((infg->stg / 128) + *infg_level + 1));
 	    p->task = DELETE_CHARA;
-//	    p->collision = noaction;
 	    p->f = FALSE;
 
 	    property->bomend = *bomend;
@@ -363,7 +353,6 @@
 		    *enemycount += (p->score *
 				   ((infg->stg / 128) + *infg_level + 1));
 		    p->task = DELETE_CHARA;
-//		    p->collision = noaction;
 		    p->f = FALSE;
 
 		    property->bomend = *bomend;
--- a/ppe/Sprite.cc	Fri Jan 07 23:19:05 2011 +0900
+++ b/ppe/Sprite.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -1,3 +1,4 @@
+#include <string.h>
 #include "task_object.h"
 #include "../ObjectType.h"
 
@@ -6,6 +7,7 @@
 {
     obj->type = Def;
     obj->number = number;
+    strcpy(obj->name, name);
     obj->w = w;
     obj->h = h;
     obj->color = color;
--- a/ppe/chara_state28.cc	Fri Jan 07 23:19:05 2011 +0900
+++ b/ppe/chara_state28.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -18,7 +18,6 @@
     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)
     {
@@ -40,8 +39,12 @@
 				       1 ? -1 : 1),
 		 (rand() % 5 + 0.5) * (rand() % 2 ==
 				       1 ? -1 : 1), STATE29, &sprite->data[1]);
+    } else {
+	length = 1;
     }
     p->dt1 += 3;
+
+    sprite->length = length;
     *q = *p;
     *w_count = count;
     return 0;
--- a/ppe/chara_state29.cc	Fri Jan 07 23:19:05 2011 +0900
+++ b/ppe/chara_state29.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -13,6 +13,7 @@
     p->y += p->vy;
     if(p->dt1 % 18 == 1)
     {
+	length = 1;
 	smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
 	smanager->setup_outputData();
 	ObjContainerPtr tama = (ObjContainerPtr)smanager->get_output(wbuf, 1);
--- a/ppe/chara_state31.cc	Fri Jan 07 23:19:05 2011 +0900
+++ b/ppe/chara_state31.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -6,7 +6,7 @@
 static int
 state31(SchedTask *smanager, void *rbuf, void *wbuf)
 {
-    int part3_f = (int)smanager->get_param(0);
+    int part3_f = (int)smanager->get_param(2);
 
     int length;
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
@@ -20,7 +20,6 @@
 //	Bom(p->x, p->y);
 	p->f = FALSE;
 	p->task = DELETE_CHARA;
-//	p->collision = noaction;
 
 	*q = *p;
 	return 0;
@@ -35,9 +34,9 @@
     if(rinkf1 == 5)
     {
 	length = 1;
-	smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
 	smanager->setup_outputData();
-	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
 	sprite->flag = true;
 	sprite->length = length;
 
@@ -49,13 +48,6 @@
     }
     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;
@@ -66,18 +58,25 @@
 	    *q = *p;
 	    return 0;
 	}
+	length = 1;
+	smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	sprite->flag = true;
+	sprite->length = length;
+	
 	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->set_outputSize(2, 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);
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
 	sprite->flag = true;
 	sprite->length = length;
 	
@@ -87,13 +86,6 @@
     }
     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--;
@@ -104,6 +96,13 @@
 	    *q = *p;
 	    return 0;
 	}
+	length = 1;
+	smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	sprite->flag = true;
+	sprite->length = length;
+
 	count++;
 	PutSprite(count, p->x + 8, p->y + 44, 58 + p->dt2 % 4, &sprite->data[0]);
 	p->dt2++;
--- a/ppe/chara_state32.cc	Fri Jan 07 23:19:05 2011 +0900
+++ b/ppe/chara_state32.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -6,9 +6,9 @@
 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 part4_f = (int)smanager->get_param(3);
+    int enemystate_14 = (int)smanager->get_param(4);
+    int enemystate_20 = (int)smanager->get_param(5);
     
     int length;
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
@@ -42,10 +42,10 @@
     if (rinkf1 == 7)
     {
 	length = 1;
-	smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->set_outputSize(2, 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);
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
 	sprite->flag = true;
 	sprite->length = length;
 	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state33.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,40 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State33, state33);
+
+static int
+state33(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int enemystate_11 = (int)smanager->get_param(4);
+    int enemystate_19 = (int)smanager->get_param(5);
+    
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    CHARACTER *kyeenemyno = (CHARACTER*)smanager->get_input(rbuf, 1);
+    int rinkf1 = *(int*)smanager->get_input(rbuf, 3);
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    if (kyeenemyno->f == FALSE)
+    {
+//	Bom(p->x, p->y);
+	p->f = FALSE;
+	p->task = DELETE_CHARA;
+
+	*q = *p;
+	return 0;
+    }
+    p->x = kyeenemyno->x + 32;
+    p->y = kyeenemyno->y;
+    if (rinkf1 == 5)
+    {
+	p->x = kyeenemyno->x + 32 - 4;
+	p->y = kyeenemyno->y;
+	p->charano = enemystate_19;
+    }
+    if (rinkf1 == 6)
+    {
+	p->charano = enemystate_11;
+    }
+    *q = *p;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state34.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,38 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State34, state34);
+
+static int
+state34(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int enemystate_12 = (int)smanager->get_param(4);
+    int enemystate_21 = (int)smanager->get_param(5);
+    
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    CHARACTER *kyeenemyno = (CHARACTER*)smanager->get_input(rbuf, 1);
+    int rinkf1 = *(int*)smanager->get_input(rbuf, 3);
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    if (kyeenemyno->f == FALSE)
+    {
+//	Bom(p->x, p->y);
+	p->f = FALSE;
+	p->task = DELETE_CHARA;
+
+	*q = *p;
+	return 0;
+    }
+    p->x = kyeenemyno->x - 32;
+    p->y = kyeenemyno->y;
+    if (rinkf1 == 5)
+    {
+	p->charano = enemystate_21;
+    }
+    if (rinkf1 == 6)
+    {
+	p->charano = enemystate_12;
+    }
+    *q = *p;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state35.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,90 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State35, state35);
+
+static int
+state35(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int enemystate_15 = (int)smanager->get_param(4);
+    int enemystate_16 = (int)smanager->get_param(5);
+    
+    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 (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;
+    p->y = kyeenemyno->y + 32;
+    if (rinkf1 == 1)
+    {
+	p->charano = enemystate_16;
+    }
+    if (rinkf1 == 2)
+    {
+	length = 2;
+	smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	sprite->flag = true;
+	sprite->length = length;
+
+	count++;
+	PutSprite(count, p->x - 10,
+		  p->y + 16,
+		  58 + p->dt2 % 4, &sprite->data[0]);
+	count++;
+	PutSprite(count, p->x + 10,
+		  p->y + 16,
+		  58 + p->dt2 % 4, &sprite->data[1]);
+	p->dt2++;
+    }
+    if (rinkf1 == 3)
+    {
+	length = 4;
+	smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	sprite->flag = true;
+
+	count++;
+	PutSprite(count, p->x - 10,
+		  p->y + 16,
+		  58 + p->dt2 % 4, &sprite->data[0]);
+	count++;
+	PutSprite(count, p->x + 10,
+		  p->y + 16,
+		  58 + p->dt2 % 4, &sprite->data[1]);
+	if (p->dt2 % 20 == 1)
+	{
+	    Puttama(7, p->x, p->y + 16, &sprite->data[2]);
+	    Puttama(7, p->x + 20,
+		    p->y + 16, &sprite->data[3]);
+	} else {
+	    length = 2;
+	}
+	sprite->length = length;
+	p->dt2++;
+    }
+    if (rinkf1 == 4) {
+	p->charano = enemystate_15;
+	p->dt2 = 0;
+    }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    int *w_count = (int*)smanager->get_output(wbuf, 1);
+
+    *w_count = count;
+    *q = *p;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state40.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,88 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State40, state40);
+
+static int
+state40(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int enemy_part1_f = (int)smanager->get_param(0);
+    
+    int length;
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int rinkf1 = *(int*)smanager->get_input(rbuf, 3);
+    
+    if (enemy_part1_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;
+    }
+    if ((rinkf1 == 8) && (p->dt1 % 3 == 1))
+    {
+	if ((p->dt2 < 16))
+	{
+	    length = 1;
+	    smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->setup_outputData();
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	    sprite->flag = true;
+	    sprite->length = length;
+
+	    p->dt2++;
+	    DefSprite(76, "boss2_rightarm_b", 16, p->dt2, 480, &sprite->data[0]);
+	}
+	else
+	{
+	    //rinkf1=9;
+	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+	    *q = *p;
+	    return 0;
+	}
+    }
+    if (rinkf1 == 9)
+    {
+	if (p->dt1 % 15 == 1)
+	{
+	    length = 1;
+	    smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->setup_outputData();
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	    sprite->flag = true;
+	    sprite->length = length;
+
+	    Puttama(8, p->x, p->y, &sprite->data[0]);
+	}
+    }
+    if (rinkf1 == 10)
+    {
+	if (p->dt2 != 0)
+	{
+	    length = 1;
+	    smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->setup_outputData();
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	    sprite->flag = true;
+	    sprite->length = length;
+
+	    p->dt2--;
+	    DefSprite(76, "boss2_rightarm_b", 16, p->dt2, 480, &sprite->data[0]);
+	}
+	else
+	{
+	    //rinkf1=11;
+	    p->f = FALSE;
+	    p->task = DELETE_CHARA;
+	}
+    }
+
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    p->dt1++;
+
+    *q = *p;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state41.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,95 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State41, state41);
+
+static int
+state41(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int enemy_part2_f = (int)smanager->get_param(1);
+    
+    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 (enemy_part2_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 - 20 - 7;
+    p->y = kyeenemyno->y + 28 + 15;
+    if ((rinkf1 == 8) && (p->dt1 % 3 == 1))
+    {
+	if ((p->dt2 < 16))
+	{
+	    length = 1;
+	    smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->setup_outputData();
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	    sprite->flag = true;
+	    sprite->length = length;
+
+	    p->dt2++;
+	    DefSprite(77, "boss2_leftarmbattery", p->dt2, 16, 480, &sprite->data[0]);	/*左腕アップアーム砲 */
+	}
+	else
+	{
+	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+	    rinkf1 = 9;
+	    *q = *p;
+	    return 0;
+	}
+    }
+    if (rinkf1 == 9)
+    {
+	if (p->dt1 % 15 == 1) 
+	{
+	    length = 1;
+	    smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->setup_outputData();
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	    sprite->flag = true;
+	    sprite->length = length;
+
+	    Puttama(9 + rand() % 2, p->x, p->y, &sprite->data[0]);
+	}
+    }
+    if (rinkf1 == 10)
+    {
+	if (p->dt2 != 0)
+	{
+	    length = 1;
+	    smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->setup_outputData();
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	    sprite->flag = true;
+	    sprite->length = length;
+
+	    p->dt2--;
+	    DefSprite(77, "boss2_leftarmbattery", p->dt2, 16, 480, &sprite->data[0]);
+	}
+	else
+	{
+	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+	    p->f = FALSE;
+	    p->task = DELETE_CHARA;
+
+	    *q = *p;
+	    return 0;
+	}
+    }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    p->dt1++;
+    *q = *p;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state411.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,76 @@
+#include "task_base.h"
+#include "task_object.h"
+#include "Sankaku.h"
+
+SchedDefineTask1(State411, state411);
+
+static int
+state411(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int length;
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    player *jiki = (player*)smanager->get_input(rbuf, 1);
+
+    if (p->dt2 > 356)
+    {
+	p->vx = -1;
+    }
+    if (p->dt2 < -398)
+    {
+	p->vx = 1;
+    }
+    if ((p->dt1) % 62 == 0) {
+	length = 1;
+	smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+	sprite->flag = true;
+	sprite->length = length;
+	
+	Putenemy(41,
+		 p->x,
+		 p->y,
+		 (int) -Mycos(p->dt1 / 16) * 4 /
+		 SANKAKU,
+		 (int) -Mysin(p->dt1 / 16) * 4 /
+		 SANKAKU, STATE7, &sprite->data[0]);
+    }
+    if ((p->dt1) % 13 == 0) {
+	length = 1;
+	smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+	sprite->flag = true;
+	sprite->length = length;
+	
+	Puttama(11, p->x + 32,
+		p->y + 32, &sprite->data[0]);
+    }
+    p->dt2 += p->vx;
+    p->dt1 += p->dt2 / 4;
+    
+    p->x = jiki->x - 16 +
+	Mycos(p->dt1 / 16) * 128 / SANKAKU;
+    p->y = jiki->y - 16 +
+	Mysin(p->dt1 / 16) * 128 / SANKAKU;
+    if (p->x < 0)
+    {
+	p->x = 0;
+    }
+    if (p->x > 260)
+    {
+	p->x = 260;
+    }
+    if (p->y < 0)
+    {
+	p->y = 0;
+    }
+    if (p->y > 232)
+    {
+	p->y = 232;
+    }
+    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_state500.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,56 @@
+#include "task_base.h"
+#include "task_object.h"
+#include "Sankaku.h"
+
+SchedDefineTask1(State500, state500);
+
+static int
+state500(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int count = *(int*)smanager->get_input(rbuf, 1);
+
+    int length = 4;
+    smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+    smanager->setup_outputData();
+    
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+    sprite->flag = true;
+    sprite->length = 2;
+
+    p->s = 0;
+    
+    p->dt2++;
+    p->dt2 %= 512;
+    p->dt1++;
+    count++;
+    DefSpriteEx(100, 16, 16, &sprite->data[0]);
+    PutSpriteEx(100, p->x + 16, p->y + 16, 2, 2, p->dt1, &sprite->data[1]);
+    
+    if (p->dt1 % (5 + p->dt2 / 8) == 1) {
+	sprite->length = 3;
+
+	if (rand() % 2 == 1)
+	    Putenemy(24, p->x, p->y,
+		     (rand() % 5 + 0.5) * (rand() % 2 ==
+					   1 ? -1 : 1),
+		     (rand() % 5 + 0.5) * (rand() % 2 ==
+					   1 ? -1 : 1), STATE501, &sprite->data[2]);
+	else
+	    Putenemy(rand() % 2 + 1, p->x,
+		     p->y,
+		     (int) Mycos(p->dt1 / 4) * 4 /
+		     SANKAKU,
+		     (int) -Mysin(p->dt1 / 4) * 4 /
+		     SANKAKU, STATE501, &sprite->data[2]);
+    }
+    if (p->dt1 == 50) {
+	/*Putenemy(44,0,0,1,1,411); */
+    }
+    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_state501.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,30 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State501, state501);
+
+static int
+state501(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 % 32 == 1)
+    {
+	length = 1;
+	smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+	sprite->flag = true;
+	sprite->length = length;
+
+	Puttama(11, p->x, p->y, &sprite->data[0]);
+    }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    p->dt1++;
+    *q = *p;
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/chara_state600.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,44 @@
+#include "task_base.h"
+#include "task_object.h"
+#include "Sankaku.h"
+
+SchedDefineTask1(State600, state600);
+
+static int
+state600(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+
+    int length = 3;
+    smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+    smanager->setup_outputData();
+    
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+    sprite->flag = true;
+    sprite->length = length;
+
+    p->dt1 += 30;
+    p->dt2++;
+    p->dt1 %= 360;
+    p->x += Mycos(p->dt1) * 4 / SANKAKU;
+    p->y += Mysin(p->dt1) * 4 / SANKAKU;
+
+    Puttama(11, p->x + 16, p->y + 16, &sprite->data[0]);
+    Puttama(11, p->x + 32, p->y + 48, &sprite->data[1]);
+    Puttama(11, p->x + 48, p->y + 16, &sprite->data[2]);
+    if (p->dt2 > 240)
+	p->task = STATE601;
+    if (p->x < 0)
+	p->x = 0;
+    if (p->x > 260)
+	p->x = 260;
+    if (p->y < 0)
+	p->y = 0;
+    if (p->y > 232)
+	p->y = 232;
+
+    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_state601.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,43 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State601, state601);
+
+static int
+state601(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    player *jiki = (player*)smanager->get_input(rbuf, 1);
+
+    int length = 1;
+    smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+    smanager->setup_outputData();
+    
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+    sprite->flag = true;
+    sprite->length = length;
+
+    p->dt2++;
+    if (p->x < jiki->x)
+	p->vx++;
+    if (p->x > jiki->x)
+	p->vx--;
+    p->x += p->vx;
+    Putenemy(6, p->x + 16 + rand() % 32,
+	     p->y, 0, rand() % 4, STATE400, &sprite->data[0]);
+    if (p->x < 0)
+	p->x = 0;
+    if (p->x > 260)
+	p->x = 260;
+    if (p->y < 0)
+	p->y = 0;
+    if (p->y > 232)
+	p->y = 232;
+    if (p->dt2 > 800) {
+	p->task = STATE602;
+    }
+    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_state602.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -0,0 +1,32 @@
+#include "task_base.h"
+#include "task_object.h"
+
+SchedDefineTask1(State602, state602);
+
+static int
+state602(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+
+    int length = 1;
+    smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+    smanager->setup_outputData();
+    
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+    sprite->flag = true;
+    sprite->length = length;
+
+    p->dt2++;
+    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[0]);
+    if (p->dt2 > 1024) {
+	p->task = STATE600;
+	p->dt2 = 0;
+    }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    *q = *p;
+    return 0;
+}
--- a/ppe/task_init.cc	Fri Jan 07 23:19:05 2011 +0900
+++ b/ppe/task_init.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -30,11 +30,26 @@
 SchedExternTask(State30);
 SchedExternTask(State31);
 SchedExternTask(State32);
+SchedExternTask(State33);
+SchedExternTask(State34);
+SchedExternTask(State35);
+
+SchedExternTask(State40);
+SchedExternTask(State41);
 
 SchedExternTask(State400);
 SchedExternTask(State401);
 SchedExternTask(State402);
 
+SchedExternTask(State411);
+
+SchedExternTask(State500);
+SchedExternTask(State501);
+
+SchedExternTask(State600);
+SchedExternTask(State601);
+SchedExternTask(State602);
+
 SchedExternTask(Asteroid);
 
 /**
@@ -73,10 +88,25 @@
     SchedRegisterTask(STATE30, State30);
     SchedRegisterTask(STATE31, State31);
     SchedRegisterTask(STATE32, State32);
+    SchedRegisterTask(STATE33, State33);
+    SchedRegisterTask(STATE34, State34);
+    SchedRegisterTask(STATE35, State35);
+
+    SchedRegisterTask(STATE40, State40);
+    SchedRegisterTask(STATE41, State41);
 
     SchedRegisterTask(STATE400, State400);
     SchedRegisterTask(STATE401, State401);
     SchedRegisterTask(STATE402, State402);
 
+    SchedRegisterTask(STATE411, State411);
+
+    SchedRegisterTask(STATE500, State500);
+    SchedRegisterTask(STATE501, State501);
+
+    SchedRegisterTask(STATE600, State600);
+    SchedRegisterTask(STATE601, State601);
+    SchedRegisterTask(STATE602, State602);
+
     SchedRegisterTask(ASTEROID_TASK, Asteroid);
 }
--- a/ppe/task_object.h	Fri Jan 07 23:19:05 2011 +0900
+++ b/ppe/task_object.h	Sun Jan 09 14:28:44 2011 +0900
@@ -121,6 +121,7 @@
 typedef struct ObjData {
   int type;
 
+  char name[20];
   int tama_type;
   int charano;
   int task;
--- a/property.h	Fri Jan 07 23:19:05 2011 +0900
+++ b/property.h	Sun Jan 09 14:28:44 2011 +0900
@@ -29,6 +29,7 @@
 typedef struct ObjData {
   int type;
 
+  char name[20];
   int tama_type;
   int charano;
   int task;
--- a/schedule3.c	Fri Jan 07 23:19:05 2011 +0900
+++ b/schedule3.c	Sun Jan 09 14:28:44 2011 +0900
@@ -419,7 +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);
@@ -427,10 +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);
@@ -440,9 +440,8 @@
 		clear_result[1] = infg_level;
 	    }
 	}
-#endif
     }
-#if 0
+
     if (stage == 2) {
 	switch (filpcount) {
 	case 1:
@@ -658,6 +657,7 @@
 	    Putenemy(44, 0, 0, 1, 1, chara_state410);
 	    break;
 	}
+
 	if (filpcount > FRAME_RATE * 85) {
 	    if (kyeenemyno->f == FALSE) {
 		Superbom(kyeenemyno->x, kyeenemyno->y);
@@ -724,5 +724,4 @@
 	if (filpcount > 4000)
 	    filpcount = 4000;
 	}
-#endif
 }
--- a/state_task.cc	Fri Jan 07 23:19:05 2011 +0900
+++ b/state_task.cc	Sun Jan 09 14:28:44 2011 +0900
@@ -88,25 +88,25 @@
     SetTaskState(STATE30, chara_state30);
     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);
     SetTaskState(STATE501, chara_state501);
+
     SetTaskState(STATE600, chara_state600);
     SetTaskState(STATE601, chara_state601);
     SetTaskState(STATE602, chara_state602);
-#endif
 }
 
 void
@@ -495,7 +495,7 @@
 
 
 CHARACTER*
-Boss2Task2(CHARACTER *p)
+Boss2Task2(CHARACTER *p, int num1, int num2)
 {
     int task_num = p->task;
     int obj_size = sizeof(ObjContainer)+sizeof(ObjData)*DATA_LENGTH;
@@ -504,10 +504,12 @@
     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_param(0, (memaddr)enemy_part1->f);
+    state_task->set_param(1, (memaddr)enemy_part2->f);
+    state_task->set_param(2, (memaddr)enemy_part3->f);
+    state_task->set_param(3, (memaddr)enemy_part4->f);
+    state_task->set_param(4, (memaddr)enemystate[num1].charano);
+    state_task->set_param(5, (memaddr)enemystate[num2].charano);
 
     state_task->set_inData(0, p, sizeof(CHARACTER));
     state_task->set_inData(1, kyeenemyno, sizeof(CHARACTER));
@@ -517,9 +519,34 @@
     
     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_outData(2, obj, 0);
+
+    state_task->set_post(checkContainer, (void*)p, (void*)obj);
+    state_task->set_cpu(SPE_ANY);
+    state_task->spawn();
+    
+    return p;
+}
+
+
+CHARACTER*
+Boss4Task(CHARACTER *p)
+{
+    kyeenemyno = 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));
+    state_task->set_outData(2, obj, 0);
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(SPE_ANY);
@@ -532,7 +559,6 @@
 CHARACTER*
 noaction(CHARACTER *p)
 {
-  p->state = noaction;
   return p;
 }
 
@@ -767,7 +793,7 @@
 chara_state31(CHARACTER *p) //right hand
 {
     p->task = STATE31;
-    return Boss2Task2(p);
+    return Boss2Task2(p, 0, 0);
 }
 
 
@@ -775,216 +801,50 @@
 chara_state32(CHARACTER *p) //left hand
 {
     p->task = STATE32;
-    return Boss2Task2(p);
+    return Boss2Task2(p, 14, 20);
 }
 
 
-#if 0
-CHARACTER * chara_state33(CHARACTER *p) // right shoulder
+
+CHARACTER*
+chara_state33(CHARACTER *p) // right shoulder
 {
-  if (kyeenemyno->f == FALSE)
-    {
-      Bom(p->x, p->y);
-      p->f = FALSE;
-      p->state = delete_chara;
-      p->collision = noaction;
-      return p;
-    }
-  p->x = kyeenemyno->x + 32;
-  p->y = kyeenemyno->y;
-  if (rinkf1 == 5)
-    {
-      p->x = kyeenemyno->x + 32 - 4;
-      p->y = kyeenemyno->y;
-      p->charano = enemystate[19].charano;
-    }
-  if (rinkf1 == 6)
-    {
-      p->charano = enemystate[11].charano;
-    }
-  return p;
+    p->task = STATE33;
+    return Boss2Task2(p, 11, 19);
+}
+
+
+CHARACTER*
+chara_state34(CHARACTER *p) //left shoulder
+{
+    p->task = STATE34;
+    return Boss2Task2(p, 12, 21);
 }
 
 
-CHARACTER * chara_state34(CHARACTER *p) //left shoulder
-{
-  if (kyeenemyno->f == FALSE)
-    {
-      Bom(p->x, p->y);
-      p->f = FALSE;
-      p->state = delete_chara;
-      p->collision = noaction;
-      return p;
-    }
-  p->x = kyeenemyno->x - 32;
-  p->y = kyeenemyno->y;
-  if (rinkf1 == 5)
-    {
-      p->charano = enemystate[21].charano;
-    }
-  if (rinkf1 == 6)
-    {
-      p->charano = enemystate[12].charano;
-    }
-  return p;
-}
-
-CHARACTER * chara_state35(CHARACTER *p) // bust
+CHARACTER*
+chara_state35(CHARACTER *p) // bust
 {
-  if (kyeenemyno->f == FALSE)
-    {
-      Bom(p->x, p->y);
-      p->f = FALSE;
-      p->state = delete_chara;
-      p->collision = noaction;
-      return p;
-    }
-  p->x = kyeenemyno->x;
-  p->y = kyeenemyno->y + 32;
-  if (rinkf1 == 1)
-    {
-      p->charano = enemystate[16].charano;
-    }
-  if (rinkf1 == 2)
-    {
-      count++;
-      PutSprite(count, p->x - 10,
-		p->y + 16,
-		58 + p->dt2 % 4);
-      count++;
-      PutSprite(count, p->x + 10,
-		p->y + 16,
-		58 + p->dt2 % 4);
-      p->dt2++;
-    }
-  if (rinkf1 == 3)
-    {
-      count++;
-      PutSprite(count, p->x - 10,
-		p->y + 16,
-		58 + p->dt2 % 4);
-      count++;
-      PutSprite(count, p->x + 10,
-		p->y + 16,
-		58 + p->dt2 % 4);
-      if (p->dt2 % 20 == 1)
-	{
-	  Puttama(7, p->x, p->y + 16);
-	  Puttama(7, p->x + 20,
-		  p->y + 16);
-	}
-    p->dt2++;
-  }
-  if (rinkf1 == 4) {
-    p->charano = enemystate[15].charano;
-    p->dt2 = 0;
-  }
-  return p;
+    p->task = STATE35;
+    return Boss2Task2(p, 15, 16);
 }
 
 
-CHARACTER * chara_state40(CHARACTER *p) //arm vulkan
+
+CHARACTER*
+chara_state40(CHARACTER *p) //arm vulkan
 {
-  if (enemy_part1->f == FALSE)
-    {
-      Bom(p->x, p->y);
-      p->f = FALSE;
-      p->state = delete_chara;
-      p->collision = noaction;
-      return p;
-    }
-  if ((rinkf1 == 8) && (p->dt1 % 3 == 1))
-    {
-      if ((p->dt2 < 16))
-	{
-	  p->dt2++;
-	  DefSprite(76, "boss2_rightarm_b", 16, p->dt2, 480, boss);
-	}
-      else
-	{
-	  //                                  rinkf1=9;
-	  return p;
-	}
-    }
-  if (rinkf1 == 9)
-    {
-      if (p->dt1 % 15 == 1)
-	{
-	  Puttama(8, p->x, p->y);
-	}
-    }
-  if (rinkf1 == 10)
-    {
-      if (p->dt2 != 0)
-	{
-	  p->dt2--;
-	  DefSprite(76, "boss2_rightarm_b", 16, p->dt2, 480, boss);
-	}
-      else
-	{
-	  p->f = FALSE;
-	  p->state = delete_chara;
-	  p->collision = noaction;
-	  //          rinkf1=11;
-	}
-    }
-  p->dt1++;
-  return p;
+    p->task = STATE40;
+    return Boss2Task2(p, 0, 0);
 }
 
 
-CHARACTER * chara_state41(CHARACTER *p) //left arm up arm vulkan
+CHARACTER*
+chara_state41(CHARACTER *p) //left arm up arm vulkan
 {
-  if (enemy_part2->f == FALSE)
-    {
-      Bom(p->x, p->y);
-      p->f = FALSE;
-      p->state = delete_chara;
-      p->collision = noaction;
-      return p;
-    }
-  p->x = kyeenemyno->x - 20 - 7;
-  p->y = kyeenemyno->y + 28 + 15;
-  if ((rinkf1 == 8) && (p->dt1 % 3 == 1))
-    {
-      if ((p->dt2 < 16))
-	{
-	  p->dt2++;
-	  DefSprite(77, "boss2_leftarmbattery", p->dt2, 16, 480, boss);	/*左腕アップアーム砲 */
-	}
-      else
-	{
-	  rinkf1 = 9;
-	  return p;
-	}
-    }
-  if (rinkf1 == 9)
-    {
-      if (p->dt1 % 15 == 1) 
-	{
-	  Puttama(9 + rand() % 2, p->x, p->y);
-	}
-    }
-  if (rinkf1 == 10)
-    {
-      if (p->dt2 != 0)
-	{
-	  p->dt2--;
-	  DefSprite(77, "boss2_leftarmbattery", p->dt2, 16, 480, boss);
-	}
-      else
-	{
-	  p->f = FALSE;
-	  p->state = delete_chara;
-	  p->collision = noaction;
-	  return p;
-	  //          rinkf1=11;
-	}
-    }
-  p->dt1++;
-  return p;
+    p->task = STATE41;
+    return Boss2Task2(p, 0, 0);
 }
-#endif
 
 
 CHARACTER * chara_state400(CHARACTER *p)
@@ -1010,175 +870,62 @@
 }
 
 
-#if 0
-CHARACTER * chara_state410(CHARACTER *p)
+CHARACTER*
+chara_state410(CHARACTER *p)
 {
-  kyeenemyno = p;
-  p->state = chara_state411;
-  return p;
+    kyeenemyno = p;
+    p->task = STATE411;
+    
+    int num = GetStateNum(p->task);
+    p->state = state_list[num];
+    return p;
 }
 
 
-CHARACTER * chara_state411(CHARACTER *p)
+CHARACTER*
+chara_state411(CHARACTER *p)
 {
-  if (p->dt2 > 356)
-    {
-      p->vx = -1;
-    }
-  if (p->dt2 < -398)
-    {
-      p->vx = 1;
-    }
-  if ((p->dt1) % 62 == 0)
-    Putenemy(41,
-	     p->x,
-	     p->y,
-	     (int) -Mycos(p->dt1 / 16) * 4 /
-	     SANKAKU,
-	     (int) -Mysin(p->dt1 / 16) * 4 /
-	     SANKAKU, chara_state7);
-  if ((p->dt1) % 13 == 0)
-    Puttama(11, p->x + 32,
-	    p->y + 32);
-  
-  p->dt2 += p->vx;
-  p->dt1 += p->dt2 / 4;
-  
-  p->x = jiki.x - 16 +
-    Mycos(p->dt1 / 16) * 128 / SANKAKU;
-  p->y = jiki.y - 16 +
-    Mysin(p->dt1 / 16) * 128 / SANKAKU;
-  if (p->x < 0)
-    {
-      p->x = 0;
-    }
-  if (p->x > 260)
-    {
-      p->x = 260;
-    }
-  if (p->y < 0)
-    {
-      p->y = 0;
-    }
-  if (p->y > 232)
-    {
-      p->y = 232;
-    }
-  return p;
+    p->task = STATE411;
+    return JikiContainerTask(p);
+}
+
+
+CHARACTER*
+chara_state500(CHARACTER *p)
+{
+    p->task = STATE500;
+    return Boss4Task(p);
 }
 
 
-CHARACTER * chara_state500(CHARACTER *p)
+CHARACTER*
+chara_state501(CHARACTER *p)
 {
-  p->s = 0;
-  
-  kyeenemyno = p;
-  p->dt2++;
-  p->dt2 %= 512;
-  p->dt1++;
-  count++;
-  DefSpriteEx(100, 16, 16);
-  //		PutSprite(count, enemy[tekino].x + 16,
-  //  enemy[tekino].y + 16, 100);
-  PutSpriteEx(100, p->x + 16, p->y + 16, 2, 2, p->dt1);
-  
-  if (p->dt1 % (5 + p->dt2 / 8) == 1) {
-    if (rand() % 2 == 1)
-      Putenemy(24, p->x, p->y,
-	       (rand() % 5 + 0.5) * (rand() % 2 ==
-				     1 ? -1 : 1),
-	       (rand() % 5 + 0.5) * (rand() % 2 ==
-				     1 ? -1 : 1), chara_state501);
-    else
-      Putenemy(rand() % 2 + 1, p->x,
-	       p->y,
-	       (int) Mycos(p->dt1 / 4) * 4 /
-	       SANKAKU,
-	       (int) -Mysin(p->dt1 / 4) * 4 /
-	       SANKAKU, chara_state501);
-  }
-  if (p->dt1 == 50) {
-    /*Putenemy(44,0,0,1,1,411); */
-  }
-  return p;
-}
-
-
-CHARACTER * chara_state501(CHARACTER *p)
-{
-  p->x += p->vx;
-  p->y += p->vy;
-  if(p->dt1 % 32 == 1)
-    {
-      Puttama(11, p->x, p->y);
-    }
-  p->dt1++;
-  return p;
+    p->task = STATE501;
+    return sendContainerTask(p);
 }
 
 
-CHARACTER * chara_state600(CHARACTER *p)
+CHARACTER*
+chara_state600(CHARACTER *p)
 {
   kyeenemyno = p;
-  p->dt1 += 30;
-  p->dt2++;
-  p->dt1 %= 360;
-  p->x += Mycos(p->dt1) * 4 / SANKAKU;
-  p->y += Mysin(p->dt1) * 4 / SANKAKU;
-  Puttama(11, p->x + 16, p->y + 16);
-  Puttama(11, p->x + 32, p->y + 48);
-  Puttama(11, p->x + 48, p->y + 16);
-  if (p->dt2 > 240)
-    p->state = chara_state601;
-  if (p->x < 0)
-    p->x = 0;
-  if (p->x > 260)
-    p->x = 260;
-  if (p->y < 0)
-    p->y = 0;
-  if (p->y > 232)
-    p->y = 232;
-  return p;
+  p->task = STATE600;
+  return sendContainerTask(p);
 }
 
 
-CHARACTER * chara_state601(CHARACTER *p)
+CHARACTER*
+chara_state601(CHARACTER *p)
 {
-  p->dt2++;
-  if (p->x < jiki.x)
-    p->vx++;
-  if (p->x > jiki.x)
-    p->vx--;
-  p->x += p->vx;
-  Putenemy(6, p->x + 16 + rand() % 32,
-	   p->y, 0, rand() % 4, chara_state400);
-  if (p->x < 0)
-    p->x = 0;
-  if (p->x > 260)
-    p->x = 260;
-  if (p->y < 0)
-    p->y = 0;
-  if (p->y > 232)
-    p->y = 232;
-  if (p->dt2 > 800) {
-    p->state = chara_state602;
-  }
-  return p;
+    p->task = STATE601;
+    return JikiContainerTask(p);
 }
 
 
-CHARACTER * chara_state602(CHARACTER *p)
+CHARACTER*
+chara_state602(CHARACTER *p)
 {
-  p->dt2++;
-  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);
-  if (p->dt2 > 1024) {
-    p->state = chara_state600;
-    p->dt2 = 0;
-  }
-  return p;
+    p->task = STATE602;
+    return sendContainerTask(p);
 }
-
-#endif