changeset 49:f4140672ef9f

fix.
author koba <koba@cr.ie.u-ryukyu.ac.jp>
date Fri, 21 Jan 2011 22:18:28 +0900
parents e01948ce859a
children 0d29c70579c8
files Dandy.cc Makefile.def TaskDandy.cc main.c spe/Atari.h spe/Enemy.cc spe/Makefile spe/Player.cc spe/Sankaku.h spe/SimpleState.cc spe/SimpleState.h spe/Sprite.cc spe/chara_state0.cc spe/chara_state1.cc spe/chara_state10.cc spe/chara_state11.cc spe/chara_state12.cc spe/chara_state13.cc spe/chara_state2.cc spe/chara_state20.cc spe/chara_state21.cc spe/chara_state22.cc spe/chara_state25.cc spe/chara_state26.cc spe/chara_state27.cc spe/chara_state28.cc spe/chara_state29.cc spe/chara_state3.cc spe/chara_state30.cc spe/chara_state31.cc spe/chara_state32.cc spe/chara_state33.cc spe/chara_state34.cc spe/chara_state35.cc spe/chara_state4.cc spe/chara_state40.cc spe/chara_state400.cc spe/chara_state401.cc spe/chara_state402.cc spe/chara_state41.cc spe/chara_state411.cc spe/chara_state5.cc spe/chara_state500.cc spe/chara_state501.cc spe/chara_state6.cc spe/chara_state600.cc spe/chara_state601.cc spe/chara_state602.cc spe/chara_state7.cc spe/chara_state8.cc spe/chara_state9.cc spe/noaction.cc spe/noaction.h spe/spe-main.cc spe/tama.cc spe/task_base.h spe/task_object.h spe/tobject.h
diffstat 58 files changed, 1515 insertions(+), 639 deletions(-) [+]
line wrap: on
line diff
--- a/Dandy.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/Dandy.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -31,8 +31,8 @@
 #include "Character_state.h"
 
 static int use_keybord = 0;
-static int cdp[20] = { 16, 16, 16, 17, 18, 0 };
-static int d, i;
+//static int cdp[20] = { 16, 16, 16, 17, 18, 0 };
+static int i;
 
 static int rswait = 0;
 static int cf = 0;
@@ -354,10 +354,10 @@
 	Putbom();
 	tokuten();
     
-	count++;
+	//count++;
 	//PutSprite(count, 0, 960 - 96, 10);
 	/*インフレゲージ */
-	count++;
+	//count++;
 	//PutSprite(count, 0, 0, 48);
 
 	obj_draw();
@@ -380,6 +380,10 @@
     } else if (runmode == 2) {
 	PadfileClose(first);
     }
+    SDL_Event usr_event;
+    usr_event.type = SDL_QUIT;
+
+    SDL_PushEvent(&usr_event);
 
     //_______________________________________________
     // SDL_mixerの後始末
@@ -458,7 +462,7 @@
     PutSprite(count, 640, 640, 192);
     //PutSpriteEx(count, 8192, 8192, 0);
 
-    if (pad[0].st > 1) {
+    if ((pad[0].st > 1)||(runmode == 2)) {
 	jiki.bf = TRUE;
 	
 	//CdPlay(1,&cdp[0],0);                                          
@@ -477,7 +481,6 @@
 static int
 game_pause(int gamef)
 {
-    gamef = 3;
     if (jiki.zanki != 0 && jiki.bf != FALSE) {
 	if (pad[0].se == 1) {
 	    //Mix_Pause(BGM);
--- a/Makefile.def	Sat Jan 15 19:13:03 2011 +0900
+++ b/Makefile.def	Fri Jan 21 22:18:28 2011 +0900
@@ -7,7 +7,7 @@
 ABIBIT = 32
 ABI = -m$(ABIBIT)
 CC      = g++
-OPT = -pg
+OPT = -g
 CFLAGS  =  -Wall $(OPT) $(ABI)
 
 
--- a/TaskDandy.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/TaskDandy.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -33,8 +33,8 @@
 #include "state_task.h"
 
 static int use_keybord = 0;
-static int cdp[20] = { 16, 16, 16, 17, 18, 0 };
-static int d, i;
+//static int cdp[20] = { 16, 16, 16, 17, 18, 0 };
+static int i;
 
 static int rswait = 0;
 static int cf = 0;
@@ -355,15 +355,18 @@
 	//charpatern();
 	//bosguage();
     
-	count++;
+	//count++;
 	//PutSprite(count, 0, 960 - 96, 10);
 	/*インフレゲージ */
-	count++;
+	//count++;
 	//PutSprite(count, 0, 0, 48);
 
 	obj_draw();
 	gamef = game_pause(gamef);
 
+	filpcount++;
+	count = 0;
+
 	KeyAssign(runmode, t_buff, joy, pad);
 
 	return gamef;
@@ -378,6 +381,10 @@
     } else if (runmode == 2) {
 	PadfileClose(first);
     }
+    SDL_Event usr_event;
+    usr_event.type = SDL_QUIT;
+
+    SDL_PushEvent(&usr_event);
 
     //_______________________________________________
     // SDL_mixerの後始末
@@ -446,8 +453,8 @@
     count++;
     PutSprite(count, 224, 776, 119); //  put `super dandy'
     count++;
-    //    PutSprite(count, 200, 64, 190);
-    //    PutSpriteEx(count, 8192, 8192, 0);
+    //PutSprite(count, 200, 64, 190);
+    //PutSpriteEx(count, 8192, 8192, 0);
     PutSpriteEx(190, 800, 264, 2, 2, 5);
     count++;
     PutSprite(count, 396, 432, 191);
@@ -456,7 +463,7 @@
     PutSprite(count, 640, 640, 192);
     //PutSpriteEx(count, 8192, 8192, 0);
 
-    if (pad[0].st > 1) {
+    if ((pad[0].st > 1)||(runmode == 2)) {
 	jiki.bf = TRUE;
 	
 	//CdPlay(1,&cdp[0],0);                                          
@@ -475,7 +482,6 @@
 static int
 game_pause(int gamef)
 {
-    gamef = 3;
     if (jiki.zanki != 0 && jiki.bf != FALSE) {
 	if (pad[0].se == 1) {
 	    //Mix_Pause(BGM);
@@ -531,7 +537,7 @@
 		}
 		SDL_Delay(100);
 		PutSprite(1, 640, 640, 29 - cc / 60);
-		//      	PutSpriteEx(1, 409 * ((cc % 60) + 1), 409 * ((cc % 60) + 1), 0);
+		//PutSpriteEx(1, 409 * ((cc % 60) + 1), 409 * ((cc % 60) + 1), 0);
 
 		Pad(joy);
 		flip();  // this is not correct
--- a/main.c	Sat Jan 15 19:13:03 2011 +0900
+++ b/main.c	Fri Jan 21 22:18:28 2011 +0900
@@ -365,7 +365,7 @@
 	PutSprite(count, 640, 640, 192);
 	//PutSpriteEx(count, 8192, 8192, 0);
 
-	if (pad[0].st > 1) {
+	if ((pad[0].st > 1)||(runmode == 2)) {
 	    jiki.bf = TRUE;
 	    
 	    //CdPlay(1,&cdp[0],0);                                          
--- a/spe/Atari.h	Sat Jan 15 19:13:03 2011 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-#ifndef INCLUDE_COLLISION
-#define INCLUDE_COLLISION
-
-#ifndef INCLUDED_SCHED_TASK
-#include "SchedTask.h"
-#endif
-
-#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spe/Enemy.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -0,0 +1,15 @@
+#include "task_object.h"
+#include "../ObjectType.h"
+
+
+void
+Putenemy(int charano, float x, float y, float vx, float vy, int task, ObjDataPtr obj)
+{
+    obj->type = Enemy;
+    obj->charano = charano;
+    obj->x = x;
+    obj->y = y;
+    obj->vx = vx;
+    obj->vy = vy;
+    obj->task = task;
+}
--- a/spe/Makefile	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/Makefile	Fri Jan 21 22:18:28 2011 +0900
@@ -14,13 +14,13 @@
 .SUFFIXES: .cc .o
 
 .cc.o:
-        $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
+	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
 
 all: $(TARGET)
 
 $(TARGET): $(OBJS)
-        $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS)
+	$(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS)
 
 clean:
-        rm -f $(TARGET) $(OBJS)
-        rm -f *~ \#*
\ No newline at end of file
+	rm -f $(TARGET) $(OBJS)
+	rm -f *~ \#*
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spe/Player.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -0,0 +1,20 @@
+#include "task_base.h"
+
+extern void Player(int playerno);
+extern void tokuten();
+extern void Putbom();
+
+SchedDefineTask1(Player, Player);
+
+static int
+Player(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int playerno = (int)smanager->get_param(0);
+
+    Player(playerno);
+
+    tokuten();
+    Putbom();
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spe/Sankaku.h	Fri Jan 21 22:18:28 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; }
--- a/spe/SimpleState.cc	Sat Jan 15 19:13:03 2011 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#include "SimpleState.h"
-#include "Character_state.h"
-#include "tobject.h"
-
-SchedDefineTask(SimpleState);
-
-static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
-{
-    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
-    p = (*p->state)(p);
-    
-    smanager->swap();
-    return 0;
-}
--- a/spe/SimpleState.h	Sat Jan 15 19:13:03 2011 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-#ifndef INCLUDE_SIMPLE_STATE
-#define INCLUDE_SIMPLE_STATE
-
-#ifndef INCLUDED_SCHED_TASK
-#include "SchedTask.h"
-#endif
-
-#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spe/Sprite.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -0,0 +1,47 @@
+#include <string.h>
+#include "task_object.h"
+#include "../ObjectType.h"
+
+void
+DefSprite(int number, float w, float h, int color, ObjDataPtr obj)
+{
+    obj->type = Def;
+    obj->number = number;
+    obj->w = w;
+    obj->h = h;
+    obj->color = color;
+}
+
+
+void
+DefSpriteEx(int number, short middlex, short middley, ObjDataPtr obj)
+{
+    obj->type = DefEx;
+    obj->number = number;
+    obj->middlex = middlex;
+    obj->middley = middley;
+}
+
+
+void
+PutSprite(int zorder, short x, short y, int number, ObjDataPtr obj)
+{
+    obj->type = Put;
+    obj->zorder = zorder;
+    obj->x = x;
+    obj->y = y;
+    obj->number = number;
+}
+
+
+void
+PutSpriteEx(int number, int x, int y, float scalex, float scaley, float angle, ObjDataPtr obj)
+{
+    obj->type = PutEx;
+    obj->number = number;
+    obj->x = x;
+    obj->y = y;
+    obj->scalex = scalex;
+    obj->scaley = scaley;
+    obj->angle = angle;    
+}
--- a/spe/chara_state0.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state0.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,10 +1,10 @@
-#include "chara_state0.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE0);
+SchedDefineTask1(State0, state0);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state0(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
--- a/spe/chara_state1.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state1.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,10 +1,10 @@
-#include "chara_state1.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE1);
+SchedDefineTask1(State1, state1);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state1(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
--- a/spe/chara_state10.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state10.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,24 +1,34 @@
-#include "chara_state10.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE10);
+SchedDefineTask1(State10, state10);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state10(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rinkx = (int)smanager->get_param(0);
+    int rinky = (int)smanager->get_param(1);
+
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
-
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    
     if(p->dt1 < 48)
     {
 	p->x += p->vx;
 	p->y += p->vy;
 	p->dt1++;
+
 	p->task = STATE10;
+	*q = *p;
 	return 0;
     }
-    rinkf1 = 1;
+    int *w_rinkf1 = (int*)smanager->get_output(wbuf, 1);
+
+    *w_rinkf1 = 1;
     p->dt1 = rinkx;
     p->dt2 = rinky;
+    
     p->task = STATE13;
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state11.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state11.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,23 +1,43 @@
-#include "chara_state11.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE11);
+SchedDefineTask1(State11, state11);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state11(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rinkf1 = (int)smanager->get_param(0);
+    int count = (int)smanager->get_param(1);
+    int length;
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
     if(rinkf1 == 0)
     {
+	length = 2;
+	smanager->set_outputSize(2, 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, 2);
+	sprite->flag = true;
+	sprite->length = length;
+
 	count++;
-	DefSpriteEx(54, 16, 32);
-	PutSpriteEx(54, p->x, p->y, p->s, p->s, 1);
+	DefSpriteEx(54, 16, 32, &sprite->data[0]);
+	PutSpriteEx(54, p->x, p->y, p->s, p->s, 1, &sprite->data[1]);
+
 	p->task = STATE11;
+	*w_count = count;	
+	*q = *p;
 	return 0;
     }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    
     p->dt1 = 0;
     p->dt2 = 0;
+
     p->task = STATE12;
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state12.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state12.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,131 +1,212 @@
-#include "chara_state12.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE12);
+SchedDefineTask1(State12, state12);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state12(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int fastebos = (int)smanager->get_param(0);
+    int count = (int)smanager->get_param(1);
+    int rinkx = (int)smanager->get_param(2);
+    int rinky = (int)smanager->get_param(3);
+
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int length;
+    int rinkf2;
+    int index_count = 0;
 
-    if(fastebos > 60*60)
-    {
-	if(p->y > 240+32)
-	{
-	    p->state = delete_chara;
+    if (fastebos > 60*60) {
+	length = 2;
+	smanager->set_outputSize(6, 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, 3);
+	int *w_rinky = (int*)smanager->get_output(wbuf, 4);
+	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);
-	PutSpriteEx(54, p->x, p->y, 2, 2, 1);
-	p->state = chara_state12;
+	
+	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;
 	return 0;
     }
-    if(p->dt1 <= 60)
-    {
-	if(jiki.x + 15 - rinkx < -5)
-	{
+    
+    player *jiki = (player*)smanager->get_input(rbuf, 1);
+
+    if (p->dt1 <= 60) {
+	length = 2;
+	smanager->set_outputSize(6, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+
+	if (jiki->x + 15 - rinkx < -5) {
 	    p->vx = -0.8;
+	} else if(jiki->x + 15 - rinkx > 5) {
+	    p->vx = +0.8;
+	} else {
+	    p->vx = 0;
 	}
-      else if(jiki.x + 15 - rinkx > 5)
-      {
-	  p->vx = +0.8;
-      }
-      else p->vx = 0;
 	rinkx = p->x;
 	rinky = p->y;
     }
-    if((p->dt1 > 60) && (p->dt1 <= 70))
-    {
-	if(p->dt1 % 2 == 1)
-	{
-	    Puttama(0, rinkx - 16, rinky);
-	    Puttama(0, rinkx, rinky);
-	    Puttama(0, rinkx + 16, rinky);
+
+    if ((p->dt1 > 60) && (p->dt1 <= 70)) {
+	if(p->dt1 % 2 == 1) {
+	    length = 5;
+	    smanager->set_outputSize(6, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->setup_outputData();
+	    
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 6);
+	    sprite->flag = true;
+	    sprite->length = length;
+
+	    Puttama(0, rinkx - 16, rinky, &sprite->data[index_count]);
+	    index_count++;
+	    Puttama(0, rinkx, rinky, &sprite->data[index_count]);
+	    index_count++;
+	    Puttama(0, rinkx + 16, rinky, &sprite->data[index_count]);
+	    index_count++;
+	} else {
+	    length = 2;
+	    smanager->set_outputSize(6, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->setup_outputData();
 	}
     }
-  if((p->dt1 > 180) && (p->dt1 <= 240))
-  {
-      if(p->dt1 % 2 == 1)
-      {
-	  rinkf2 = 1;
-	  Puttama(2, rinkx - 16, p->y - 32);
-	  Puttama(3, rinkx + 32 - 16, p->y - 32);
-      }
-      else
-      {
-	  rinkf2 = 2;
-      }
-  }
-  if(p->dt1 > 240)
-  {
-      rinkf2 = 2;
-  }
-  if((p->dt1 > 240) && (p->dt1 <= 400))
-  {
-      count++;
-      PutSprite(count, rinkx - 16, rinky + 32,
-		58 + p->dt1 % 4);
-  }
-  if((p->dt1 > 300) && (p->dt1 <= 400))
-    {
-	rinkf2 = 3;
-	if(jiki.x + 15 - rinkx < -5)
-	{
+
+    if ((p->dt1 > 70) && (p->dt1 <= 180)) {
+	length = 2;
+	smanager->set_outputSize(6, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+    }
+
+    if ((p->dt1 > 180) && (p->dt1 <= 240)) {
+	if (p->dt1 % 2 == 1) {
+	    length = 4;
+	    smanager->set_outputSize(6, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->setup_outputData();
+	    
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 6);
+
+	    rinkf2 = 1;
+	    Puttama(2, rinkx - 16, p->y - 32, &sprite->data[index_count]);
+	    index_count++;
+	    Puttama(3, rinkx + 32 - 16, p->y - 32, &sprite->data[index_count]);
+	    index_count++;
+	} else {
+	    length = 2;
+	    smanager->set_outputSize(6, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->setup_outputData();
+
+	    rinkf2 = 2;
+	}
+    }
+
+    if (p->dt1 > 240) {
+	rinkf2 = 2;
+    }
+
+    if ((p->dt1 > 240) && (p->dt1 <= 400)) {
+	length = 4;
+	smanager->set_outputSize(6, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+	
+	ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 6);
+
+	count++;
+	PutSprite(count, rinkx - 16, rinky + 32, 58 + p->dt1 % 4, &sprite->data[index_count]);
+	index_count++;
+
+	if (p->dt1 > 300) {
+	    rinkf2 = 3;
+	    if(jiki->x + 15 - rinkx < -5) {
+		p->vx = -1;
+	    } else if (jiki->x + 15 - rinkx > 5) {
+		p->vx = +1;
+	    } else {
+		p->vx = 0;
+	    }
+	    p->x += p->vx;
+	    rinkx = p->x;
+	    rinky = p->y;
+	    Puttama(4, rinkx - 8, rinky + 16, &sprite->data[index_count]);
+	    index_count++;
+	}
+    }
+
+    if (p->dt1 > 400) {
+	length = 2;
+	smanager->set_outputSize(6, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	smanager->setup_outputData();
+    }
+    
+    if ((p->dt1 > 400) && (p->dt1 <= 500)) {
+	rinkf2 = 4;
+	if (jiki->x + 15 - rinkx > 5) {
 	    p->vx = -1;
+	} else if (jiki->x + 15 - rinkx > 5) {
+	    p->vx = +1;
+	} else {
+	    p->vx = 0;
 	}
-	else if(jiki.x + 15 - rinkx > 5)
-	{
-	    p->vx = +1;
-	}
-	else p->vx = 0;
 	p->x += p->vx;
 	rinkx = p->x;
 	rinky = p->y;
-	Puttama(4, rinkx - 8, rinky + 16);
     }
-  if((p->dt1 > 400) && (p->dt1 <= 500))
-  {
-      rinkf2 = 4;
-      if(jiki.x + 15 - rinkx > 5)
-      {
-	  p->vx = -1;
+    
+    if (p->dt1 > 500) {
+	rinkf2 = 5;
+	if (jiki->x + 15 - rinkx < -5) {
+	    p->vx = -1;
+	} else if(jiki->x + 15 - rinkx > 5) {
+	    p->vx = +1;
+	} else {
+	    p->vx = 0;
 	}
-      else if(jiki.x + 15 - rinkx > 5)
-      {
-	  p->vx = +1;
-      }
-      else p->vx = 0;
-      p->x += p->vx;
-      rinkx = p->x;
-      rinky = p->y;
-  }
-  if(p->dt1 > 500)
-  {
-      rinkf2 = 5;
-      if(jiki.x + 15 - rinkx < -5)
-      {
-	  p->vx = -1;
-      }
-      else if(jiki.x + 15 - rinkx > 5)
-      {
-	  p->vx = +1;
-      }
-      else p->vx = 0;
-      p->x += p->vx;
-      rinkx = p->x;
-      rinky = p->y;
-  }
-  if(p->dt1 > 600)
-  {
-      rinkf2 = 0;
-      p->dt1 = 0;
-  }
-  fastebos++;
-  p->dt1++;
-  count++;
-  DefSpriteEx(54, 16, 32);
-  PutSpriteEx(54, p->x, p->y, 2, 2, 1);
-  return 0;
+	p->x += p->vx;
+	rinkx = p->x;
+	rinky = p->y;
+    }
+    if (p->dt1 > 600) {
+	rinkf2 = 0;
+	p->dt1 = 0;
+    }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    int *w_count = (int*)smanager->get_output(wbuf, 1);
+    int *w_fastebos = (int*)smanager->get_output(wbuf, 2);
+    int *w_rinkx = (int*)smanager->get_output(wbuf, 3);
+    int *w_rinky = (int*)smanager->get_output(wbuf, 4);
+    int *w_rinkf2 = (int*)smanager->get_output(wbuf, 5);
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 6);
+    sprite->flag = true;
+    sprite->length = length;
+    
+    fastebos++;
+    p->dt1++;
+    count++;
+
+    DefSpriteEx(54, 16, 32, &sprite->data[index_count]);
+    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;
+    return 0;
 }
--- a/spe/chara_state13.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state13.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,20 +1,48 @@
-#include "chara_state13.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE13);
+SchedDefineTask1(State13, state13);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state13(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rinkx = (int)smanager->get_param(0);
+    int rinky = (int)smanager->get_param(1);
+    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);
+    int rinkf2 = *(int*)smanager->get_input(rbuf, 1);
 
-    if(tekino0->f == FALSE){
-	Bom(p->x, p->y);
+    if(flag == FALSE){
+	length = 1;
+	smanager->set_outputSize(2, 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, 2);
+	sprite->flag = true;
+	sprite->length = length;
+
+	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->state = delete_chara;
-	p->collision = noaction;
+	p->task = DELETE_CHARA;
+
+	*w_count = count;
+	*q = *p;
 	return 0;
     }
+    length = 1;
+    smanager->set_outputSize(2, 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, 2);
+    sprite->flag = false;
     
     p->x += rinkx - p->dt1;
     p->y += rinky - p->dt2;
@@ -24,28 +52,41 @@
     {
 	if(p->x > rinkx)
 	{
-	    Puttama(2, p->x + 32, p->y);
+	    sprite->flag = true;
+	    sprite->length = length;
+	    Puttama(2, p->x + 32, p->y, &sprite->data[0]);
 	}
 	if(p->x < rinkx)
 	{
-	    Puttama(3, p->x, p->y);
+	    sprite->flag = true;
+	    sprite->length = length;
+	    Puttama(3, p->x, p->y, &sprite->data[0]);
 	}
     }
     if(rinkf2 == 4)
     {
+	sprite->flag = true;
+	sprite->length = length;
 	count++;
-	PutSprite(count, p->x, p->y + 56, 58+filpcount % 4);
+	PutSprite(count, p->x, p->y + 56, 58+filpcount % 4, &sprite->data[0]);
     }
     if(rinkf2 == 5)
     {
 	if(p->x > rinkx)
 	{
-	    Puttama(5, p->x + 8, p->y + 24);
+	    sprite->flag = true;
+	    sprite->length = length;
+	    Puttama(5, p->x + 8, p->y + 24, &sprite->data[0]);
 	}
 	if(p->x < rinkx)
 	{
-	    Puttama(5, p->x + 8, p->y + 24);
+	    sprite->flag = true;
+	    sprite->length = length;
+	    Puttama(5, p->x + 8, p->y + 24, &sprite->data[0]);
 	}
     }
+
+    *q = *p;
+    *w_count = count;
     return 0;
 }
--- a/spe/chara_state2.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state2.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,10 +1,10 @@
-#include "chara_state2.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE2);
+SchedDefineTask1(State2, state2);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state2(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
     
--- a/spe/chara_state20.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state20.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,10 +1,10 @@
-#include "chara_state20.h"
-#include "tobject.h"
+#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);
 
@@ -12,5 +12,8 @@
     p->y += p->vy;
     p->vy -= 0.5;
     p->vy += 0.4;
+
+    p->task = STATE20;
+    smanager->swap();
     return 0;
 }
--- a/spe/chara_state21.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state21.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,10 +1,10 @@
-#include "chara_state21.h"
-#include "tobject.h"
+#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);
 
@@ -12,5 +12,8 @@
     p->y += p->vy;
     p->vx += 0.5;
     p->vy += 0.4;
+
+    p->task = STATE21;
+    smanager->swap();
     return 0;
 }
--- a/spe/chara_state22.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state22.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,39 +1,41 @@
-#include "chara_state22.h"
-#include "tobject.h"
+#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)
 {
+    int rand = (int)smanager->get_param(0);
+
     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;
-	  p->y = rand() % (120 - 35);
-	  p->vx = (rand() % 4 + 1);
-	  p->vy = rand() % 3 + 1;
+	  p->y = rand % (120 - 35);
+	  p->vx = (rand % 4 + 1);
+	  p->vy = rand % 3 + 1;
 	  p->task = STATE23;
       }
       if((sf == 2))
       {
-	  p->x = rand() % 290;
+	  p->x = rand % 290;
 	  p->y = -30;
-	  p->vx = rand() % 3 - 1;
-	  p->vy = (rand() % 4 + 1);
+	  p->vx = rand % 3 - 1;
+	  p->vy = (rand % 4 + 1);
 	  p->task = STATE23;
       }
       if(sf == 3)
       {
 	  p->x = 320;
-	  p->y = rand() % (120 - 35);
-	  p->vx = (rand() % 4 + 1) * -1;
-	  p->vy = rand() % 3 -1;
+	  p->y = rand % (120 - 35);
+	  p->vx = (rand % 4 + 1) * -1;
+	  p->vy = rand % 3 -1;
 	  p->task = STATE23;
       }
+
+      smanager->swap();
       return 0;
 }
--- a/spe/chara_state25.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state25.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,14 +1,32 @@
-#include "chara_state25.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
+#include "Sankaku.h"
 
-SchedDefineTask(STATE25);
+SchedDefineTask1(State25, state25);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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);
+    int rand = (int)smanager->get_param(2);
+
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int count = *(int*)smanager->get_input(rbuf, 1);
 
-    int amari;
+    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)
     {
@@ -21,21 +39,24 @@
 	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))
+    *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;
+	*rinkf1 = 1;
     }
-    if((amari == 2) && (enemy_part1->f == TRUE))
+    if((amari == 2) && (part1_f == TRUE))
     {
 	p->task = STATE27;
-	rinkf1 = 5;
-	rinkx = 0;
+	*rinkf1 = 5;
+	*rinkx = 0;
+
+	*q = *p;
 	return 0;
     }
-    if((enemy_part5->f == TRUE) && (enemy_part1->f != TRUE))
+    if((part5_f == TRUE) && (part1_f != TRUE))
     {
 	p->task = STATE28;
     }
@@ -44,5 +65,7 @@
     {
 	p->dt1 = 0;
     }
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state26.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state26.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,34 +1,50 @@
-#include "chara_state26.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE26);
+SchedDefineTask1(State26, state26);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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;
+	*rinkf1 = 2;
     }
     if(p->dt2 > 100)
     {
-	rinkf1 = 3;
+	*rinkf1 = 3;
     }
     if(p->dt2 == 400)
     {
-	rinkf1 = 4;
+	*rinkf1 = 4;
     }
     count++;
-    PutSprite(count, p->x - 42, p->y, 64);
+    *w_count = count;
+    PutSprite(count, p->x - 42, p->y, 64, &sprite->data[0]);
     if(p->dt2 == 401)
     {
 	p->dt2 = 0;
-	rinkf1 = 0;
+	*rinkf1 = 0;
+
 	p->task = STATE25;
+	*q = *p;
 	return 0;
     }
     p->dt2++;
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state27.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state27.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,12 +1,27 @@
-#include "chara_state27.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE27);
+SchedDefineTask1(State27, state27);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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))
     {
@@ -49,15 +64,25 @@
 	}
     }
     count++;
-    PutSprite(count, p->x - 32, p->y, 6);
+    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;
 }
--- a/spe/chara_state28.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state28.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,12 +1,25 @@
-#include "chara_state28.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
+#include "Sankaku.h"
 
-SchedDefineTask(STATE28);
+SchedDefineTask1(State28, state28);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state28(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rand = (int)smanager->get_param(2);
+
+    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;
 
     if (p->dt1 <= 360)
     {
@@ -19,16 +32,22 @@
 	p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
     }
     count++;
-    PutSprite(count, p->x - 42, p->y, 64);
+    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 ==
+		 (rand % 5 + 0.5) * (rand % 2 ==
 				       1 ? -1 : 1),
-		 (rand() % 5 + 0.5) * (rand() % 2 ==
-				       1 ? -1 : 1), chara_state29);
+		 (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/spe/chara_state29.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state29.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,19 +1,31 @@
-#include "chara_state29.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE29);
+SchedDefineTask1(State29, state29);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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)
     {
-	Puttama(0, p->x, p->y);
+	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++;
+    
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state3.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state3.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,11 +1,13 @@
-#include "chara_state3.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
+#include "../ObjectType.h"
 
-SchedDefineTask(STATE3);
+SchedDefineTask1(State3, state3);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state3(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int length;
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
     
     p->x += p->vx;
@@ -14,11 +16,20 @@
        (p->dt1 == 90) ||
        (p->dt1 == 30))
     {
-	Puttama(0, p->x, p->y);
+	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;
-    smanager->swap();
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state30.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state30.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,14 +1,17 @@
-#include "chara_state30.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE30);
+SchedDefineTask1(State30, state30);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state30(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
     p->x = p->x - 32;
     p->y = p->y;
+
+    p->task = STATE30;
+    smanager->swap();
     return 0;
 }
--- a/spe/chara_state31.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state31.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,19 +1,34 @@
-#include "chara_state31.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE31);
+SchedDefineTask1(State31, state31);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state31(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int part3_f = (int)smanager->get_param(2);
+
+    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((enemy_part3->f == FALSE) || (kyeenemyno->f == FALSE))
+    if((part3_f == FALSE) || (kyeenemyno->f == FALSE))
     {
-	Bom(p->x, p->y);
+	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, 2);
+	sprite->flag = true;
+	sprite->length = length;
+
+	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->state = delete_chara;
-	p->collision = noaction;
+	p->task = DELETE_CHARA;
+
+	*q = *p;
 	return 0;
     }
     
@@ -25,10 +40,17 @@
     }
     if(rinkf1 == 5)
     {
+	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->x = kyeenemyno->x + 52;
 	p->y = kyeenemyno->y;
 	count++;
-	PutSprite(count, p->x - 4, p->y - 20, 80 + p->dt2 % 4);
+	PutSprite(count, p->x - 4, p->y - 20, 80 + p->dt2 % 4, &sprite->data[0]);
 	p->dt2++;
     }
     if(rinkf1 == 6)
@@ -39,15 +61,34 @@
 	}
 	else 
 	{
+	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+	    *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);
+	
+	PutSprite(count, p->x - 4, p->y - 20, 90 + p->dt2 % 4, &sprite->data[0]);
 	p->dt2++;
     }
     if(rinkf1 == 7)
     {
-	Putenemy(22, p->x + 14, p->y + 14, 0, 0, chara_state40);
+	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, 2);
+	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)
@@ -58,11 +99,25 @@
 	}
 	else 
 	{
+	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+	    *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);
+	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;
 }
--- a/spe/chara_state32.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state32.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,20 +1,36 @@
-#include "chara_state32.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE32);
+SchedDefineTask1(State32, state32);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state32(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    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);
-
-    if ((enemy_part4->f == FALSE)
+    CHARACTER *kyeenemyno = (CHARACTER*)smanager->get_input(rbuf, 1);
+    int rinkf1 = *(int*)smanager->get_input(rbuf, 3);
+    
+    if ((part4_f == FALSE)
 	|| (kyeenemyno->f == FALSE))
     {
-	Bom(p->x, p->y);
+	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, 2);
+	sprite->flag = true;
+	sprite->length = length;
+
+	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->state = delete_chara;
-	p->collision = noaction;
+	p->task = DELETE_CHARA;
+
+	*q = *p;
 	return 0;
     }
     p->x = kyeenemyno->x - 40;
@@ -23,17 +39,30 @@
     {
 	p->x = kyeenemyno->x - 24 + 4;
 	p->y = kyeenemyno->y + 28;
-	p->charano = enemystate[20].charano;
+	p->charano = enemystate_20;
     }
     if (rinkf1 == 11)
     {
-	p->charano = enemystate[14].charano;
+	p->charano = enemystate_14;
     }
-  if (rinkf1 == 7)
-  {
-      Putenemy(23, p->x + 14,
-	       p->y + 14, 0, 0, chara_state41);
-      return 0;
-  }
-  return 0;
+    if (rinkf1 == 7)
+    {
+	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, 2);
+	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;
 }
--- a/spe/chara_state33.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state33.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,19 +1,35 @@
-#include "chara_state33.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE33);
+SchedDefineTask1(State33, state33);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state33(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int enemystate_11 = (int)smanager->get_param(4);
+    int enemystate_19 = (int)smanager->get_param(5);
+
+    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);
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
 
     if (kyeenemyno->f == FALSE)
     {
-	Bom(p->x, p->y);
+	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, 2);
+	sprite->flag = true;
+	sprite->length = length;
+
+	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->state = delete_chara;
-	p->collision = noaction;
+	p->task = DELETE_CHARA;
+
+	*q = *p;
 	return 0;
     }
     p->x = kyeenemyno->x + 32;
@@ -22,11 +38,12 @@
     {
 	p->x = kyeenemyno->x + 32 - 4;
 	p->y = kyeenemyno->y;
-	p->charano = enemystate[19].charano;
+	p->charano = enemystate_19;
     }
     if (rinkf1 == 6)
     {
-	p->charano = enemystate[11].charano;
+	p->charano = enemystate_11;
     }
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state34.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state34.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,30 +1,47 @@
-#include "chara_state34.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE34);
+SchedDefineTask1(State34, state34);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state34(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int enemystate_12 = (int)smanager->get_param(4);
+    int enemystate_21 = (int)smanager->get_param(5);
+
+    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);
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
 
     if (kyeenemyno->f == FALSE)
     {
-	Bom(p->x, p->y);
+	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, 2);
+	sprite->flag = true;
+	sprite->length = length;
+
+	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->state = delete_chara;
-	p->collision = noaction;
+	p->task = DELETE_CHARA;
+
+	*q = *p;
 	return 0;
     }
     p->x = kyeenemyno->x - 32;
     p->y = kyeenemyno->y;
     if (rinkf1 == 5)
     {
-	p->charano = enemystate[21].charano;
+	p->charano = enemystate_21;
     }
     if (rinkf1 == 6)
     {
-	p->charano = enemystate[12].charano;
+	p->charano = enemystate_12;
     }
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state35.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state35.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,60 +1,97 @@
-#include "chara_state35.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE35);
+SchedDefineTask1(State35, state35);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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)
     {
-	Bom(p->x, p->y);
+	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, 2);
+	sprite->flag = true;
+	sprite->length = length;
+
+	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->state = delete_chara;
-	p->collision = noaction;
+	p->task = DELETE_CHARA;
+
+	*q = *p;
 	return 0;
     }
     p->x = kyeenemyno->x;
     p->y = kyeenemyno->y + 32;
     if (rinkf1 == 1)
     {
-	p->charano = enemystate[16].charano;
+	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);
+		  58 + p->dt2 % 4, &sprite->data[0]);
 	count++;
 	PutSprite(count, p->x + 10,
 		  p->y + 16,
-		  58 + p->dt2 % 4);
+		  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);
+		  58 + p->dt2 % 4, &sprite->data[0]);
 	count++;
 	PutSprite(count, p->x + 10,
 		  p->y + 16,
-		  58 + p->dt2 % 4);
+		  58 + p->dt2 % 4, &sprite->data[1]);
 	if (p->dt2 % 20 == 1)
 	{
-	    Puttama(7, p->x, p->y + 16);
+	    Puttama(7, p->x, p->y + 16, &sprite->data[2]);
 	    Puttama(7, p->x + 20,
-		    p->y + 16);
+		    p->y + 16, &sprite->data[3]);
+	} else {
+	    length = 2;
 	}
+	sprite->length = length;
 	p->dt2++;
     }
     if (rinkf1 == 4) {
-	p->charano = enemystate[15].charano;
+	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;
 }
--- a/spe/chara_state4.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state4.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,22 +1,25 @@
-#include "chara_state3.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE4);
+SchedDefineTask1(State4, state4);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state4(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);    
+    player *jiki = (player*)smanager->get_input(rbuf, 1);
     
     p->y += p->vy;
     p->x += p->vx;
-    if(p->y < jiki.y && p->y + 16 > jiki.y)
+    if(p->y < jiki->y && p->y + 16 > jiki->y)
     {
 	p->vy = -2;
-	p->vx = ((jiki.x > p->x) ? 4 : -4);
+	p->vx = ((jiki->x > p->x) ? 4 : -4);
 	p->task = STATE7;
     }
     else p->task = STATE4;
-    smanager->swap();
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state40.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state40.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,31 +1,46 @@
-#include "chara_state40.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE40);
+SchedDefineTask1(State40, state40);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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)
+    if (enemy_part1_f == FALSE)
     {
-	Bom(p->x, p->y);
+	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+//	Bom(p->x, p->y);
 	p->f = FALSE;
-	p->state = delete_chara;
-	p->collision = noaction;
+	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, boss);
+	    DefSprite(76, 16, p->dt2, 480, &sprite->data[0]);
 	}
 	else
 	{
-	    //                                  rinkf1=9;
+	    //rinkf1=9;
+	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+	    *q = *p;
 	    return 0;
 	}
     }
@@ -33,24 +48,41 @@
     {
 	if (p->dt1 % 15 == 1)
 	{
-	    Puttama(8, p->x, p->y);
+	    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, boss);
+	    DefSprite(76, 16, p->dt2, 480, &sprite->data[0]);
 	}
 	else
 	{
+	    //rinkf1=11;
 	    p->f = FALSE;
-	    p->state = delete_chara;
-	    p->collision = noaction;
-	    //          rinkf1=11;
+	    p->task = DELETE_CHARA;
 	}
     }
+
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
     p->dt1++;
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state400.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state400.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,15 +1,17 @@
-#include "chara_state400.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE400);
+SchedDefineTask1(State400, state400);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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;
 }
--- a/spe/chara_state401.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state401.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,24 +1,37 @@
-#include "chara_state401.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE401);
+SchedDefineTask1(State401, state401);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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))
+    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);
+	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;
 }
--- a/spe/chara_state402.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state402.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,24 +1,37 @@
-#include "chara_state402.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE402);
+SchedDefineTask1(State402, state402);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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))
+    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);
+	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/spe/chara_state41.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state41.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,19 +1,27 @@
-#include "chara_state41.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE41);
+SchedDefineTask1(State41, state41);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state41(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int enemy_part2_f = (int)smanager->get_param(1);
+    int rand = (int)smanager->get_param(6);
+    
+    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)
+    if (enemy_part2_f == FALSE)
     {
-	Bom(p->x, p->y);
+	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+//	Bom(p->x, p->y);
 	p->f = FALSE;
-	p->state = delete_chara;
-	p->collision = noaction;
+	p->task = DELETE_CHARA;
+      
+	*q = *p;
 	return 0;
     }
     p->x = kyeenemyno->x - 20 - 7;
@@ -22,12 +30,22 @@
     {
 	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, boss);	/*左腕アップアーム砲 */
+	    DefSprite(77, p->dt2, 16, 480, &sprite->data[0]);	/*左腕アップアーム砲 */
 	}
 	else
 	{
+	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
 	    rinkf1 = 9;
+	    *q = *p;
 	    return 0;
 	}
     }
@@ -35,24 +53,44 @@
     {
 	if (p->dt1 % 15 == 1) 
 	{
-	    Puttama(9 + rand() % 2, p->x, p->y);
+	    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, boss);
+	    DefSprite(77, p->dt2, 16, 480, &sprite->data[0]);
 	}
 	else
 	{
+	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
 	    p->f = FALSE;
-	    p->state = delete_chara;
-	    p->collision = noaction;
+	    p->task = DELETE_CHARA;
+
+	    *q = *p;
 	    return 0;
 	}
     }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
     p->dt1++;
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state411.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state411.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,12 +1,15 @@
-#include "chara_state411.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
+#include "Sankaku.h"
 
-SchedDefineTask(STATE411);
+SchedDefineTask1(State411, state411);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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)
     {
@@ -16,40 +19,58 @@
     {
 	p->vx = 1;
     }
-    if ((p->dt1) % 62 == 0)
+    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, chara_state7);
-    if ((p->dt1) % 13 == 0)
+		 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);
-    
+		p->y + 32, &sprite->data[0]);
+    }
     p->dt2 += p->vx;
     p->dt1 += p->dt2 / 4;
     
-    p->x = jiki.x - 16 +
+    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 = 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 0;
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    *q = *p;
+    return 0;
 }
--- a/spe/chara_state5.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state5.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,22 +1,26 @@
-#include "chara_state3.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE5);
+SchedDefineTask1(State5, state5);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state5(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);    
+    player *jiki = (player*)smanager->get_input(rbuf, 1);
     
     p->y += p->vy;
     p->x += p->vx;
-    if(p->y + 96 < jiki.y 
-       && p->y + 128 > jiki.y)
+    if(p->y + 96 < jiki->y 
+       && p->y + 128 > jiki->y)
     {
 	p->vy = -2;
-	p->vx = ((jiki.x > p->x) ? 4 : -4);
+	p->vx = ((jiki->x > p->x) ? 4 : -4);
 	p->task = STATE0;
     }
     else p->task = STATE5;
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state500.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state500.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,42 +1,58 @@
-#include "chara_state500.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
+#include "Sankaku.h"
 
-SchedDefineTask(STATE500);
+SchedDefineTask1(State500, state500);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state500(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rand = (int)smanager->get_param(0);
+
     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;
     
-    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);
+    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) {
-	if (rand() % 2 == 1)
+	sprite->length = 3;
+
+	if (rand % 2 == 1)
 	    Putenemy(24, p->x, p->y,
-		     (rand() % 5 + 0.5) * (rand() % 2 ==
+		     (rand % 5 + 0.5) * (rand % 2 ==
 					   1 ? -1 : 1),
-		     (rand() % 5 + 0.5) * (rand() % 2 ==
-					   1 ? -1 : 1), chara_state501);
+		     (rand % 5 + 0.5) * (rand % 2 ==
+					   1 ? -1 : 1), STATE501, &sprite->data[2]);
 	else
-	    Putenemy(rand() % 2 + 1, p->x,
+	    Putenemy(rand % 2 + 1, p->x,
 		     p->y,
 		     (int) Mycos(p->dt1 / 4) * 4 /
 		     SANKAKU,
 		     (int) -Mysin(p->dt1 / 4) * 4 /
-		     SANKAKU, chara_state501);
+		     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;
 }
--- a/spe/chara_state501.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state501.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,19 +1,30 @@
-#include "chara_state501.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE501);
+SchedDefineTask1(State501, state501);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+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)
     {
-	Puttama(11, p->x, p->y);
+	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;
 }
--- a/spe/chara_state6.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state6.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,22 +1,26 @@
-#include "chara_state6.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE6);
+SchedDefineTask1(State6, state6);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state6(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);    
+    player *jiki = (player*)smanager->get_input(rbuf, 1);
 
     p->y += p->vy;
     p->x += p->vx;
-    if(p->y + 96 < jiki.y
-       && p->y + 128 > jiki.y)
+    if(p->y + 96 < jiki->y
+       && p->y + 128 > jiki->y)
     {
 	p->vy = 2;
-	p->vx = ((jiki.x > p->x) ? 4 : -4);
+	p->vx = ((jiki->x > p->x) ? 4 : -4);
 	p->task = STATE0;
     }
     else p->task = STATE6;
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state600.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state600.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,22 +1,31 @@
-#include "chara_state600.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
+#include "Sankaku.h"
 
-SchedDefineTask(STATE600);
+SchedDefineTask1(State600, state600);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state600(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
-    kyeenemyno = p;
+    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);
-    Puttama(11, p->x + 32, p->y + 48);
-    Puttama(11, p->x + 48, p->y + 16);
+
+    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)
@@ -27,5 +36,9 @@
 	p->y = 0;
     if (p->y > 232)
 	p->y = 232;
+
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state601.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state601.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,21 +1,32 @@
-#include "chara_state601.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE601);
+SchedDefineTask1(State601, state601);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state601(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rand = (int)smanager->get_param(0);
+
     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)
+    if (p->x < jiki->x)
 	p->vx++;
-    if (p->x > jiki.x)
+    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);
+    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)
@@ -27,5 +38,8 @@
     if (p->dt2 > 800) {
 	p->task = STATE602;
     }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state602.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state602.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,21 +1,34 @@
-#include "chara_state602.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE602);
+SchedDefineTask1(State602, state602);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state602(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int rand = (int)smanager->get_param(0);
+
     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),
-	     chara_state29);
+	     (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/spe/chara_state7.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state7.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,11 +1,12 @@
-#include "chara_state7.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE7);
+SchedDefineTask1(State7, state7);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state7(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int length;
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
     p->x += p->vx;
@@ -13,9 +14,21 @@
     if((p->dt1 == 60) || (p->dt1 == 90)
        || (p->dt1 == 30))
     {
-	Puttama(1, p->x, p->y);
+	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, p->y, &tama->data[0]);
     }
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
     p->dt1++;
     p->task = STATE7;
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state8.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state8.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,37 +1,45 @@
 #include "task_base.h"
 #include "task_object.h"
 
-SchedDefineTask1(STATE8, state8);
+SchedDefineTask1(State8, state8);
 
 static int
 state8(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
-    int length = 2;
-
-    smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
-    smanager->setup_outputData();
+    int count = *(int*)smanager->get_input(rbuf, 1);
+    int length;
 
-    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
-    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
-    sprite->flag = false;
-
-#if 0
     if(p->y < 520)
     {
-	tekino0 = p;
-	kyeenemyno = p;
+	length = 2;
+	smanager->set_outputSize(2, 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, 2);
+	sprite->flag = true;
+	sprite->length = length;
+
 	p->y += p->vy;
 	count++;
-	DefSpriteEx(p->charano, 16*4, 32*4);
-	PutSpriteEx(p->charano, (p->x * 4), (p->y * 4), 0.2, 0.2, 1);
+
+	DefSpriteEx(p->charano, 16*4, 32*4,  &sprite->data[0]);
+	PutSpriteEx(p->charano, (p->x * 4), (p->y * 4), 0.2, 0.2, 1,  &sprite->data[1]);
+
 	p->dt1 = 512;
 	p->s = 0.125;
 	p->task = STATE8;
+
+	*w_count = count;
+	*q = *p;
 	return 0;
     }
-#endif
 
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
     p->task = STATE9;
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state9.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/chara_state9.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -1,31 +1,64 @@
-#include "chara_state9.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(STATE9);
+SchedDefineTask1(State9, state9);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+state9(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    int count = *(int*)smanager->get_input(rbuf, 1);
+    int length;
 
     if(p->s <= 2)
     {
+	length = 2;
+	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;
+	
 	p->s += 0.05;
 	p->y -= 12;
+
 	count++;
-	DefSpriteEx(54, 16*4, 32*4);
-	PutSpriteEx(54, (p->x * 4), (p->y * 4), p->s, p->s, 1);
+	*w_count = count;
+
+	DefSpriteEx(54, 16*4, 32*4, &sprite->data[0]);
+	PutSpriteEx(54, (p->x * 4), (p->y * 4), p->s, p->s, 1, &sprite->data[1]);
+
 	p->task = STATE9;
+	*q = *p;
 	return 0;
     }
+    length = 4;
+    smanager->set_outputSize(4, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+    smanager->setup_outputData();
+    
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    int *w_rinkx = (int*)smanager->get_output(wbuf, 2);
+    int *w_rinky = (int*)smanager->get_output(wbuf, 3);
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 4);
+    sprite->flag = true;
+    sprite->length = length;
+
     count++;
-    DefSpriteEx(54, 16, 32);
-    PutSpriteEx(54, p->x, p->y, p->s, p->s, 1);
-    rinkx = p->x;
-    rinky = p->y;
-    Putenemy(5, rinkx - 16, rinky - 16, 1, 0, chara_state10);
-    Putenemy(5, rinkx - 16, rinky - 16, -1, 0, chara_state10);
+
+
+    DefSpriteEx(54, 16, 32, &sprite->data[0]);
+    PutSpriteEx(54, p->x, p->y, p->s, p->s, 1, &sprite->data[1]);
+    *w_rinkx = p->x;
+    *w_rinky = p->y;
+    Putenemy(5, *w_rinkx - 16, *w_rinky - 16, 1, 0, STATE10, &sprite->data[2]);
+    Putenemy(5, *w_rinkx - 16, *w_rinky - 16, -1, 0, STATE10, &sprite->data[3]);
+    p->dt1 = 8192;
+
     p->task = STATE11;
-    p->dt1 = 8192;
+
+    *q = *p;
     return 0;
 }
--- a/spe/noaction.cc	Sat Jan 15 19:13:03 2011 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-#include "noaction.h"
-#include "tobject.h"
-
-SchedDefineTask(NO_ACT);
-
-static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
-{
-    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
-
-    p->task = NO_ACT;
-    smanager->swap();
-    return 0;
-}
--- a/spe/noaction.h	Sat Jan 15 19:13:03 2011 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-#ifndef INCLUDE_COLLISION
-#define INCLUDE_COLLISION
-
-#ifndef INCLUDED_SCHED_TASK
-#include "SchedTask.h"
-#endif
-
-#endif
--- a/spe/spe-main.cc	Sat Jan 15 19:13:03 2011 +0900
+++ b/spe/spe-main.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -3,7 +3,54 @@
 
 /* 必ずこの位置に書いて */
 SchedExternTask(Atari);
-SchedExternTask(SimpleState);
+
+SchedExternTask(State0);
+SchedExternTask(State1);
+SchedExternTask(State2);
+SchedExternTask(State3);
+SchedExternTask(State4);
+SchedExternTask(State5);
+SchedExternTask(State6);
+SchedExternTask(State7);
+SchedExternTask(State8);
+SchedExternTask(State9);
+SchedExternTask(State10);
+SchedExternTask(State11);
+SchedExternTask(State12);
+SchedExternTask(State13);
+
+SchedExternTask(State20);
+SchedExternTask(State21);
+SchedExternTask(State22);
+SchedExternTask(State25);
+SchedExternTask(State26);
+SchedExternTask(State27);
+SchedExternTask(State28);
+SchedExternTask(State29);
+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);
 
 /**
  * この関数は ../spe/spe-main と違って
@@ -14,5 +61,52 @@
 task_init(void)
 {
     SchedRegisterTask(ATARI, Atari);
-    SchedRegisterTask(SIMPLE_STATE, SimpleState);
+
+    SchedRegisterTask(STATE0, State0);
+    SchedRegisterTask(STATE1, State1);
+    SchedRegisterTask(STATE2, State2);
+    SchedRegisterTask(STATE3, State3);
+    SchedRegisterTask(STATE4, State4);
+    SchedRegisterTask(STATE5, State5);
+    SchedRegisterTask(STATE6, State6);
+    SchedRegisterTask(STATE7, State7);
+    SchedRegisterTask(STATE8, State8);
+    SchedRegisterTask(STATE9, State9);
+    SchedRegisterTask(STATE10, State10);
+    SchedRegisterTask(STATE11, State11);
+    SchedRegisterTask(STATE12, State12);
+    SchedRegisterTask(STATE13, State13);
+
+    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(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);
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spe/tama.cc	Fri Jan 21 22:18:28 2011 +0900
@@ -0,0 +1,10 @@
+#include "task_object.h"
+#include "../ObjectType.h"
+void
+Puttama(int type, float x, float y, ObjDataPtr tama)
+{
+    tama->type = Tama;
+    tama->tama_type = type;
+    tama->x = x;
+    tama->y = y;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spe/task_base.h	Fri Jan 21 22:18:28 2011 +0900
@@ -0,0 +1,12 @@
+#ifndef INCLUDE_TASK_BASE
+#define INCLUDE_TASK_BASE
+
+#ifndef INCLUDE_FUNC
+#include "../Func.h"
+#endif
+
+#ifndef INCLUDED_SCHED_TASK
+#include "SchedTask.h"
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spe/task_object.h	Fri Jan 21 22:18:28 2011 +0900
@@ -0,0 +1,154 @@
+#ifndef INCLUDE_OBJECT
+#define INCLUDE_OBJECT
+
+#define TAMALV1P 14
+#define TAMALV2P 50
+#define TAMALV3P 24
+
+#define LASERLV1P 17
+#define LASERLV2P 154
+#define LASERLV3P 51
+
+#define TRUE 1
+#define FALSE 0
+#define BOOL char
+
+typedef struct player {
+    int x;
+    int y;
+    int ch;
+    int point;
+    BOOL bf;
+    int muteki;
+    int zanki;
+    int ccount;
+} player;
+
+
+typedef struct tama {
+    int x;
+    int y;
+} tama;
+
+
+typedef struct tama1 {
+    int x;
+    int y;
+    int r;
+    int l;
+} tama1;
+
+
+typedef struct tama2 {
+    int x;
+    int y;
+    int rr;
+    int sr;
+    int sl;
+    int ll;
+} tama2;
+
+
+typedef struct stge {
+    int stg;
+} stge;
+
+
+typedef struct laser {
+    float x;
+    float y;
+    float sx;
+    float sy;
+    int r;
+    int enemyno;
+  float s;
+} laser;
+
+
+typedef struct bomchar {
+    int x;
+    int y;
+    int f;
+    int no;
+} bomchar;
+
+
+typedef struct CHARACTER{
+  float x; //position
+  float y;
+ 
+  float vx; //velocity
+  float vy;
+
+  float vit; //vitality
+  int score;
+  int dt1;
+  int dt2;
+  int charano; //sprite_number
+  BOOL tama; //bullet identifier
+  BOOL f; //apiarance idenfifier
+  float s;
+  int task;
+
+  struct CHARACTER * (*state)(struct CHARACTER *p);
+  struct CHARACTER * (*collision)(struct CHARACTER *p);
+  struct CHARACTER *next;
+  struct CHARACTER *prev;
+
+} CHARACTER;
+
+
+typedef struct CollisionProperty {
+  int infg_level;
+  int enemycount;
+
+  player jiki;
+  stge lg;
+  stge infg;
+
+  tama1 tama_lv1[20];
+  tama2 tama_lv2[20];
+  tama1 tlv3;
+  laser laser_lv1[20];
+  laser laser_lv2;
+  laser laser_lv3[128];
+} CollisionProperty, *CollisionPropertyPtr;
+
+
+typedef struct ObjData {
+  int type;
+
+  int tama_type;
+  int charano;
+  int task;
+  int zorder;
+  int number;
+  int color;
+  float angle;
+  float x, y;
+  float vx, vy;
+  float w, h;
+  float scalex, scaley;
+  short middlex, middley;
+} ObjData, *ObjDataPtr;
+
+
+typedef struct ObjContainer {
+  bool flag;
+  int length;
+
+  ObjData data[1];
+} ObjContainer, *ObjContainerPtr;
+
+
+CHARACTER * noaction(CHARACTER *p);
+CHARACTER * delete_chara(CHARACTER *p);
+void Bom(int x, int y, ObjDataPtr obj);
+void Puttama(int type, float x, float y, ObjDataPtr tama);
+void Putenemy(int charano, float x, float y, float vx, float vy, int task, ObjDataPtr obj);
+void PutSprite(int zorder, short x, short y, int number, ObjDataPtr obj);
+void DefSprite(int number, float w, float h, int color, ObjDataPtr obj);
+void DefSpriteEx(int number, short middlex, short middley, ObjDataPtr obj);
+void PutSpriteEx(int number, int x, int y, float scalex, float scaley, float angle, ObjDataPtr obj);
+
+#endif
--- a/spe/tobject.h	Sat Jan 15 19:13:03 2011 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-#ifndef INCLUDE_OBJECT
-#define INCLUDE_OBJECT
-
-#define TAMALV1P 14
-#define TAMALV2P 50
-#define TAMALV3P 24
-
-#define LASERLV1P 17
-#define LASERLV2P 154
-#define LASERLV3P 51
-
-#define TRUE 1
-#define FALSE 0
-#define BOOL char
-
-typedef struct player {
-    int x;
-    int y;
-    int ch;
-    int point;
-    BOOL bf;
-    int muteki;
-    int zanki;
-    int ccount;
-} player;
-
-typedef struct tama {
-    int x;
-    int y;
-} tama;
-
-typedef struct tama1 {
-    int x;
-    int y;
-    int r;
-    int l;
-} tama1;
-
-typedef struct tama2 {
-    int x;
-    int y;
-    int rr;
-    int sr;
-    int sl;
-    int ll;
-} tama2;
-
-typedef struct stge {
-    int stg;
-} stge;
-
-typedef struct laser {
-    float x;
-    float y;
-    float sx;
-    float sy;
-    int r;
-    int enemyno;
-  float s;
-} laser;
-
-typedef struct bomchar {
-    int x;
-    int y;
-    int f;
-    int no;
-} bomchar;
-
-typedef struct CHARACTER{
-  float x; //position
-  float y;
- 
-  float vx; //velocity
-  float vy;
-
-  float vit; //vitality
-  int score;
-  int dt1;
-  int dt2;
-  int charano; //sprite_number
-  BOOL tama; //bullet identifier
-  BOOL f; //apiarance idenfifier
-  float s;
-  
-  struct CHARACTER * (*state)(struct CHARACTER *p);
-  struct CHARACTER * (*collision)(struct CHARACTER *p);
-  struct CHARACTER *next;
-  struct CHARACTER *prev;
-
-} CHARACTER;
-
-typedef struct CollisionProperty {
-  int infg_level;
-  int enemycount;
-
-  player jiki;
-  CHARACTER p;
-  stge lg;
-  stge infg;
-
-  tama1 tama_lv1[20];
-  tama2 tama_lv2[20];
-  tama1 tlv3;
-  laser laser_lv1[20];
-  laser laser_lv2[20];
-  laser laser_lv3[128];
-  bomchar bchar[100];
-
-} CollisionProperty, *CollisionPropertyPtr;
-
-CHARACTER * noaction(CHARACTER *p);
-CHARACTER * delete_chara(CHARACTER *p);
-void Bom(int x, int y, int bchar, bomchar *bchar);
-
-#endif