changeset 57:978097c6427a

bug fix.
author koba <koba@cr.ie.u-ryukyu.ac.jp>
date Sat, 29 Jan 2011 22:43:17 +0900
parents a80422eb44a9
children e0018f39f7e1
files Character.c Character.h TaskDandy.cc collision_task.cc collision_task.h ppe/Atari.cc ppe/CollDataReflect.cc ppe/chara_state0.cc ppe/chara_state1.cc ppe/chara_state10.cc ppe/chara_state11.cc ppe/chara_state12.cc ppe/chara_state13.cc ppe/chara_state2.cc ppe/chara_state20.cc ppe/chara_state21.cc ppe/chara_state22.cc ppe/chara_state25.cc ppe/chara_state26.cc ppe/chara_state27.cc ppe/chara_state3.cc ppe/chara_state30.cc ppe/chara_state31.cc ppe/chara_state32.cc ppe/chara_state33.cc ppe/chara_state34.cc ppe/chara_state35.cc ppe/chara_state4.cc ppe/chara_state40.cc ppe/chara_state400.cc ppe/chara_state41.cc ppe/chara_state5.cc ppe/chara_state6.cc ppe/chara_state600.cc ppe/chara_state601.cc ppe/chara_state602.cc ppe/chara_state7.cc ppe/chara_state8.cc ppe/chara_state9.cc ppe/task_object.h state_task.cc state_task.h
diffstat 42 files changed, 251 insertions(+), 154 deletions(-) [+]
line wrap: on
line diff
--- a/Character.c	Sat Jan 29 02:46:41 2011 +0900
+++ b/Character.c	Sat Jan 29 22:43:17 2011 +0900
@@ -58,7 +58,8 @@
       q[i]->state = noaction;
       q[i]->dt1 = 0;
       q[i]->dt2 = 0;
-      q[i]->task = 0;
+      q[i]->state_task = 0;
+      q[i]->collision_task = false;
       q[i]->collision = noaction;
     }
 
@@ -127,6 +128,8 @@
     q->tama = tf;
     q->vit = enemystate[charano].p;
     q->score = enemystate[charano].sc;
+    q->state_task = 0;
+    q->collision_task = false;
     q->charano = number;
     q->s = 0;
     q->f = TRUE;
--- a/Character.h	Sat Jan 29 02:46:41 2011 +0900
+++ b/Character.h	Sat Jan 29 22:43:17 2011 +0900
@@ -45,7 +45,8 @@
   //int group;  
 
   int chara_id;
-  int task;
+  int state_task;
+  bool collision_task;
 
   State state;
   Collision collision;
--- a/TaskDandy.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/TaskDandy.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -31,6 +31,7 @@
 #include "Character_state.h"
 #include "property.h"
 #include "collision_task.h"
+#include "state_task.h"
 #include "StateList.h"
 #include "Cheat.h"
 #include "debug_db.h"
@@ -108,7 +109,7 @@
 static int get_option(int argc, char *argv[]);
 static int opening(int gamef);
 static int dandy_closing(int gamef);
-static int dandy_main_loop(int gamef);
+static int dandy_main_loop(int gamef, HTaskPtr next);
 static int dandy_main_init(int gamef);
 extern int init(TaskManager *manager, int argc, char *argv[]);
 extern void task_initialize();
@@ -128,7 +129,7 @@
     case 0:    gamef= dandy_main_init(gamef); break;
     case 1:    gamef= gamesyokika(gamef); break;
     case 2:    gamef= opening(gamef); break;
-    case 3:    gamef= dandy_main_loop(gamef); break;
+    case 3:    gamef= dandy_main_loop(gamef, next); break;
     case 4:    gamef= dandy_closing(gamef); break;
     }
     return next;
@@ -322,7 +323,7 @@
 
 
 static int
-dandy_main_loop(int gamef)
+dandy_main_loop(int gamef, HTaskPtr next)
 {
 	if ((pad[0].l1 != 0) && (pad[0].r1 != 0) &&
 	    (pad[0].l2 != 0) && (pad[0].r2 != 0)) {
@@ -353,15 +354,22 @@
 	outofwindow();
 	// timeprof_end(timeprof_move);
 
+	HTaskPtr state_next = create_next();
+
 	state_update();
 
 	HTaskPtr update = collision_update();
 	HTaskPtr reflect = collision_reflect();
+
 	collision_detect();
+
+	next->wait_for(state_next);
+	next->wait_for(reflect);
+
+	state_next->spawn();
 	update->spawn();
 	reflect->spawn();
 
-
 	//charpatern();
 	//bosguage();
     
@@ -374,11 +382,11 @@
 	obj_draw();
 	gamef = game_pause(gamef);
 
+	KeyAssign(runmode, t_buff, joy, pad);
+
 	filpcount++;
 	count = 0;
 
-	KeyAssign(runmode, t_buff, joy, pad);
-
 	return gamef;
 }
 
--- a/collision_task.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/collision_task.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -3,7 +3,6 @@
 #include <SDL.h>
 #include "Func.h"
 #include "TaskManager.h"
-#include "collision_task.h"
 #include "Character.h"
 #include "Character_state.h"
 #include "count2.h"
@@ -13,6 +12,7 @@
 
 #include "StateList.h"
 #include "property.h"
+#include "collision_task.h"
 
 
 extern SpriteTable sptable[DEFOBJ];
@@ -21,6 +21,21 @@
 HTaskPtr update_task;
 HTaskPtr reflect_task;
 
+
+void
+state_check(CHARACTER *p)
+{
+    if (p->collision_task == true) {
+	p->state_task = DELETE_CHARA;
+	p->state = delete_chara;
+	p->collision = noaction;
+	return;
+    } else {
+	int num = GetStateNum(p->state_task);
+	p->state = state_list[num].state;
+    }
+}
+
 static CollisionPropertyPtr
 get_property()
 {
@@ -75,17 +90,6 @@
     memcpy(laser_lv3, property->laser_lv3, sizeof(laser)*128);
 }
 
-void
-collision_update(SchedTask *s, void *object, void *chara)
-{
-    CHARACTER *p = (CHARACTER*)chara;
-
-    if (p->task == DELETE_CHARA) {
-        p->state = delete_chara;
-	p->collision = noaction;
-    }
-    free(object);
-}
 
 void
 after_free(SchedTask *s, void *object, void *none)
@@ -152,6 +156,16 @@
 }
 
 
+void
+collision_check(SchedTask *s, void *object, void *chara)
+{    
+    CHARACTER *p = (CHARACTER*)chara;
+    state_check(p);
+
+    free(object);
+}
+
+
 CHARACTER*
 atari(CHARACTER *p)
 {
@@ -177,7 +191,7 @@
     collision_task->set_outData(0, p, sizeof(CHARACTER));
     collision_task->set_outData(1, obj, obj_size);
 
-    collision_task->set_post(collision_update, (void*)obj, (void*)p);
+    collision_task->set_post(collision_check, (void*)obj, (void*)p);
     collision_task->set_cpu(SPE_0);
 
     collision_task->wait_for(update_task);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/collision_task.h	Sat Jan 29 22:43:17 2011 +0900
@@ -0,0 +1,11 @@
+#ifndef INCLUDE_COLLISION_TASK
+#define INCLUDE_COLLISION_TASK
+
+void state_check(CHARACTER *p);
+
+void collision_allocate();
+HTaskPtr collision_update();
+HTaskPtr collision_reflect();
+void collision_free();
+
+#endif
--- a/ppe/Atari.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/Atari.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -89,7 +89,7 @@
 		Bom(p->x, p->y, &sprite->data[0]);
 		*enemycount += (p->score *
 				((infg->stg / 128) + infg_level + 1));
-		p->task = DELETE_CHARA;
+		p->collision_task = true;
 		p->f = FALSE;
 
 		*q = *p;
@@ -109,7 +109,7 @@
 		Bom(p->x, p->y, &sprite->data[0]);
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + infg_level + 1));
-		p->task = DELETE_CHARA;
+		p->collision_task = true;
 		p->f = FALSE;
 
 		*q = *p;
@@ -133,7 +133,7 @@
 		Bom(p->x, p->y, &sprite->data[0]);
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + infg_level + 1));
-		p->task = DELETE_CHARA;
+		p->collision_task = true;
 		p->f = FALSE;
 
 		*q = *p;
@@ -156,7 +156,7 @@
 		Bom(p->x, p->y, &sprite->data[0]);
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + infg_level + 1));
-		p->task = DELETE_CHARA;
+		p->collision_task = true;
 		p->f = FALSE;
 
 		*q = *p;
@@ -177,7 +177,7 @@
 		Bom(p->x, p->y, &sprite->data[0]);
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + infg_level + 1));
-		p->task = DELETE_CHARA;
+		p->collision_task = true;
 		p->f = FALSE;
 
 		*q = *p;
@@ -198,7 +198,7 @@
 		Bom(p->x, p->y, &sprite->data[0]);
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + infg_level + 1));
-		p->task = DELETE_CHARA;
+		p->collision_task = true;
 		p->f = FALSE;
 
 		*q = *p;
@@ -217,7 +217,7 @@
 	    Bom(p->x, p->y, &sprite->data[0]);
 	    *enemycount += (p->score *
 			   ((infg->stg / 128) + infg_level + 1));
-	    p->task = DELETE_CHARA;
+	    p->collision_task = true;
 	    p->f = FALSE;
 
 	    *q = *p;
@@ -236,7 +236,7 @@
 	    Bom(p->x, p->y, &sprite->data[0]);
 	    *enemycount += (p->score *
 			   ((infg->stg / 128) + infg_level + 1));
-	    p->task = DELETE_CHARA;
+	    p->collision_task = true;
 	    p->f = FALSE;
 
 	    *q = *p;
@@ -261,7 +261,7 @@
 		Bom(p->x, p->y, &sprite->data[0]);
 		*enemycount += (p->score *
 			       ((infg->stg / 128) + infg_level + 1));
-		p->task = DELETE_CHARA;
+		p->collision_task = true;
 		p->f = FALSE;
 
 		*q = *p;
@@ -287,7 +287,7 @@
 	    Bom(p->x, p->y, &sprite->data[0]);
 	    *enemycount += (p->score *
 			   ((infg->stg / 128) + infg_level + 1));
-	    p->task = DELETE_CHARA;
+	    p->collision_task = true;
 	    p->f = FALSE;
 	    
 	    *q = *p;
@@ -311,7 +311,7 @@
 		    Bom(p->x, p->y, &sprite->data[0]);
 		    *enemycount += (p->score *
 				   ((infg->stg / 128) + infg_level + 1));
-		    p->task = DELETE_CHARA;
+		    p->collision_task = true;
 		    p->f = FALSE;
 
 		    *q = *p;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/CollDataReflect.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -0,0 +1,20 @@
+#include <string.h>
+#include "task_base.h"
+#include "task_object.h"
+
+
+SchedDefineTask1(CollDataReflect, coll_reflect);
+
+static int
+coll_reflect(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    long load_id = (long)smanager->get_param(0);
+
+    void* odata = smanager->get_output(wbuf, 0);
+    long size = (long)smanager->get_outputSize(0);
+
+    void *global_data = (void*)smanager->global_get(load_id);
+    memcpy(odata, global_data, size);
+    
+    return 0;
+}
--- a/ppe/chara_state0.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state0.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -11,7 +11,7 @@
     p->x += p->vx;
     p->y += p->vy;
 
-    p->task = STATE0;
+    p->state_task = STATE0;
     smanager->swap();
     return 0;
 }
--- a/ppe/chara_state1.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state1.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -11,7 +11,7 @@
     p->x -= p->vx;
     p->y -= p->vy;
 
-    p->task = STATE1;
+    p->state_task = STATE1;
     smanager->swap();
     return 0;
 }
--- a/ppe/chara_state10.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state10.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -18,7 +18,7 @@
 	p->y += p->vy;
 	p->dt1++;
 
-	p->task = STATE10;
+	p->state_task = STATE10;
 	*q = *p;
 	return 0;
     }
@@ -28,7 +28,7 @@
     p->dt1 = rinkx;
     p->dt2 = rinky;
     
-    p->task = STATE13;
+    p->state_task = STATE13;
     *q = *p;
     return 0;
 }
--- a/ppe/chara_state11.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state11.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -27,7 +27,7 @@
 	DefSpriteEx(54, 16, 32, &sprite->data[0]);
 	PutSpriteEx(54, p->x, p->y, p->s, p->s, 1, &sprite->data[1]);
 
-	p->task = STATE11;
+	p->state_task = STATE11;
 	*w_count = count;	
 	*q = *p;
 	return 0;
@@ -37,7 +37,7 @@
     p->dt1 = 0;
     p->dt2 = 0;
 
-    p->task = STATE12;
+    p->state_task = STATE12;
     *q = *p;
     return 0;
 }
--- a/ppe/chara_state12.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state12.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -29,7 +29,7 @@
 	sprite->length = length;
 	
 	if (p->y > 240+32) {
-	    p->task = DELETE_CHARA;
+	    p->state_task = DELETE_CHARA;
 	}
 	p->y += 3;
 	rinky += 3;
@@ -38,7 +38,7 @@
 	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;
+	p->state_task = STATE12;
 	
 	*w_rinky = rinky;
 	*w_count = count;
--- a/ppe/chara_state13.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state13.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -29,7 +29,7 @@
 
 	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->task = DELETE_CHARA;
+	p->state_task = DELETE_CHARA;
 
 	*w_count = count;
 	*q = *p;
--- a/ppe/chara_state2.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state2.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -11,7 +11,7 @@
     p->vy -= 0.25;
     p->y += p->vy;
     
-    p->task = STATE2;
+    p->state_task = STATE2;
     smanager->swap();
     return 0;
 }
--- a/ppe/chara_state20.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state20.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -13,7 +13,7 @@
     p->vy -= 0.5;
     p->vy += 0.4;
 
-    p->task = STATE20;
+    p->state_task = STATE20;
     smanager->swap();
     return 0;
 }
--- a/ppe/chara_state21.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state21.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -13,7 +13,7 @@
     p->vx += 0.5;
     p->vy += 0.4;
 
-    p->task = STATE21;
+    p->state_task = STATE21;
     smanager->swap();
     return 0;
 }
--- a/ppe/chara_state22.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state22.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -17,7 +17,7 @@
 	  p->y = rand % (120 - 35);
 	  p->vx = (rand % 4 + 1);
 	  p->vy = rand % 3 + 1;
-	  p->task = STATE23;
+	  p->state_task = STATE23;
       }
       if((sf == 2))
       {
@@ -25,7 +25,7 @@
 	  p->y = -30;
 	  p->vx = rand % 3 - 1;
 	  p->vy = (rand % 4 + 1);
-	  p->task = STATE23;
+	  p->state_task = STATE23;
       }
       if(sf == 3)
       {
@@ -33,7 +33,7 @@
 	  p->y = rand % (120 - 35);
 	  p->vx = (rand % 4 + 1) * -1;
 	  p->vy = rand % 3 -1;
-	  p->task = STATE23;
+	  p->state_task = STATE23;
       }
 
       smanager->swap();
--- a/ppe/chara_state25.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state25.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -44,12 +44,12 @@
     amari = rand % 160;
     if((amari == 1) && (part5_f == TRUE))
     {
-	p->task = STATE26;
+	p->state_task = STATE26;
 	*rinkf1 = 1;
     }
     if((amari == 2) && (part1_f == TRUE))
     {
-	p->task = STATE27;
+	p->state_task = STATE27;
 	*rinkf1 = 5;
 	*rinkx = 0;
 
@@ -58,7 +58,7 @@
     }
     if((part5_f == TRUE) && (part1_f != TRUE))
     {
-	p->task = STATE28;
+	p->state_task = STATE28;
     }
     p->dt1 += 3;
     if(p->dt1 == 720)
--- a/ppe/chara_state26.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state26.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -40,7 +40,7 @@
 	p->dt2 = 0;
 	*rinkf1 = 0;
 
-	p->task = STATE25;
+	p->state_task = STATE25;
 	*q = *p;
 	return 0;
     }
--- a/ppe/chara_state27.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state27.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -71,7 +71,7 @@
 	rinkf1 = 0;
 	rinkx = 0;
 
-	p->task = STATE25;
+	p->state_task = STATE25;
 	*q = *p;
 	*w_count = count;
 	*w_rinkx = rinkx;
--- a/ppe/chara_state3.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state3.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -28,7 +28,7 @@
     CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
 
     p->dt1++;
-    p->task = STATE3;
+    p->state_task = STATE3;
 
     *q = *p;
     return 0;
--- a/ppe/chara_state30.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state30.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -11,7 +11,7 @@
     p->x = p->x - 32;
     p->y = p->y;
 
-    p->task = STATE30;
+    p->state_task = STATE30;
     smanager->swap();
     return 0;
 }
--- a/ppe/chara_state31.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state31.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -26,7 +26,7 @@
 
 	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->task = DELETE_CHARA;
+	p->collision_task = true;
 
 	*q = *p;
 	return 0;
--- a/ppe/chara_state32.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state32.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -28,7 +28,7 @@
 
 	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->task = DELETE_CHARA;
+	p->collision_task = true;
 
 	*q = *p;
 	return 0;
--- a/ppe/chara_state33.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state33.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -27,7 +27,7 @@
 
 	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->task = DELETE_CHARA;
+	p->collision_task = true;
 
 	*q = *p;
 	return 0;
--- a/ppe/chara_state34.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state34.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -27,7 +27,7 @@
 
 	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->task = DELETE_CHARA;
+	p->collision_task = true;
 
 	*q = *p;
 	return 0;
--- a/ppe/chara_state35.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state35.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -27,7 +27,7 @@
 
 	Bom(p->x, p->y, &sprite->data[0]);
 	p->f = FALSE;
-	p->task = DELETE_CHARA;
+	p->collision_task = true;
 
 	*q = *p;
 	return 0;
--- a/ppe/chara_state4.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state4.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -15,9 +15,9 @@
     if ((p->y < jiki->y) && (p->y + 16 > jiki->y)) {
 	p->vy = -2;
 	p->vx = ((jiki->x > p->x) ? 4 : -4);
-	p->task = STATE7;
+	p->state_task = STATE7;
     } else {
-	p->task = STATE4;
+	p->state_task = STATE4;
     }
     *q = *p;
     return 0;
--- a/ppe/chara_state40.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state40.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -17,7 +17,7 @@
 	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
 //	Bom(p->x, p->y);
 	p->f = FALSE;
-	p->task = DELETE_CHARA;
+	p->collision_task = true;
 
 	*q = *p;
 	return 0;
@@ -76,7 +76,7 @@
 	{
 	    //rinkf1=11;
 	    p->f = FALSE;
-	    p->task = DELETE_CHARA;
+	    p->collision_task = true;
 	}
     }
 
--- a/ppe/chara_state400.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state400.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -10,7 +10,7 @@
 
     p->vy++;
     p->y += p->vy / 4;
-    p->task = STATE400;
+    p->state_task = STATE400;
 
     smanager->swap();
     return 0;
--- a/ppe/chara_state41.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state41.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -19,7 +19,7 @@
 	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
 //	Bom(p->x, p->y);
 	p->f = FALSE;
-	p->task = DELETE_CHARA;
+	p->collision_task = true;
       
 	*q = *p;
 	return 0;
@@ -82,7 +82,7 @@
 	    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
 
 	    p->f = FALSE;
-	    p->task = DELETE_CHARA;
+	    p->collision_task = true;
 
 	    *q = *p;
 	    return 0;
--- a/ppe/chara_state5.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state5.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -17,9 +17,9 @@
     {
 	p->vy = -2;
 	p->vx = ((jiki->x > p->x) ? 4 : -4);
-	p->task = STATE0;
+	p->state_task = STATE0;
     }
-    else p->task = STATE5;
+    else p->state_task = STATE5;
 
     *q = *p;
     return 0;
--- a/ppe/chara_state6.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state6.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -17,9 +17,9 @@
     {
 	p->vy = 2;
 	p->vx = ((jiki->x > p->x) ? 4 : -4);
-	p->task = STATE0;
+	p->state_task = STATE0;
     }
-    else p->task = STATE6;
+    else p->state_task = STATE6;
 
     *q = *p;
     return 0;
--- a/ppe/chara_state600.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state600.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -27,7 +27,7 @@
     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;
+	p->state_task = STATE601;
     if (p->x < 0)
 	p->x = 0;
     if (p->x > 260)
--- a/ppe/chara_state601.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state601.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -36,7 +36,7 @@
     if (p->y > 232)
 	p->y = 232;
     if (p->dt2 > 800) {
-	p->task = STATE602;
+	p->state_task = STATE602;
     }
     CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
 
--- a/ppe/chara_state602.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state602.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -24,7 +24,7 @@
 	     (rand % 5 + 0.5) * (rand % 2 == 1 ? -1 : 1),
 	     STATE29, &sprite->data[0]);
     if (p->dt2 > 1024) {
-	p->task = STATE600;
+	p->state_task = STATE600;
 	p->dt2 = 0;
     }
     CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
--- a/ppe/chara_state7.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state7.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -27,7 +27,7 @@
     CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
 
     p->dt1++;
-    p->task = STATE7;
+    p->state_task = STATE7;
 
     *q = *p;
     return 0;
--- a/ppe/chara_state8.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state8.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -30,7 +30,7 @@
 
 	p->dt1 = 512;
 	p->s = 0.125;
-	p->task = STATE8;
+	p->state_task = STATE8;
 
 	*w_count = count;
 	*q = *p;
@@ -38,7 +38,7 @@
     }
 
     CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
-    p->task = STATE9;
+    p->state_task = STATE9;
 
     *q = *p;
     return 0;
--- a/ppe/chara_state9.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/chara_state9.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -31,7 +31,7 @@
 	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;
+	p->state_task = STATE9;
 	*q = *p;
 	return 0;
     }
@@ -57,7 +57,7 @@
     Putenemy(5, *w_rinkx - 16, *w_rinky - 16, -1, 0, STATE10, &sprite->data[3]);
     p->dt1 = 8192;
 
-    p->task = STATE11;
+    p->state_task = STATE11;
 
     *q = *p;
     return 0;
--- a/ppe/task_object.h	Sat Jan 29 02:46:41 2011 +0900
+++ b/ppe/task_object.h	Sat Jan 29 22:43:17 2011 +0900
@@ -90,7 +90,8 @@
   float s;
 
   int chara_id;
-  int task;
+  int state_task;
+  bool collision_task;
 
   struct CHARACTER * (*state)(struct CHARACTER *p);
   struct CHARACTER * (*collision)(struct CHARACTER *p);
--- a/state_task.cc	Sat Jan 29 02:46:41 2011 +0900
+++ b/state_task.cc	Sat Jan 29 22:43:17 2011 +0900
@@ -18,6 +18,7 @@
 #include "ObjectType.h"
 #include "debug_db.h"
 #include "StateList.h"
+#include "collision_task.h"
 
 
 extern DebugDB dtable[DEFOBJ];
@@ -32,6 +33,8 @@
 CHARACTER *enemy_part4 = NULL;
 CHARACTER *enemy_part5 = NULL;
 
+HTaskPtr state_next;
+
 //int tekino0;
 int rinkx = 0;
 int rinky = 0;
@@ -44,19 +47,23 @@
 
 static int cpu_counter = SPE_1;
 
+HTaskPtr
+create_next()
+{
+    state_next = tmanager->create_task(Dummy);
+
+    return state_next;
+}
 
 static CPU_TYPE
 get_cpunum()
 {
-/*
     cpu_counter += 1;
-    if ((cpu_counter % SPE_5) == 0) {
+    if ((cpu_counter % SPE_5) == 1) {
 	cpu_counter = SPE_1;
     }
     
     return (CPU_TYPE)cpu_counter;
-*/
-    return SPE_1;
 }
 
 static int
@@ -90,8 +97,7 @@
 {
     CHARACTER *p = (CHARACTER*)chara;
 
-    int num = GetStateNum(p->task);
-    p->state = state_list[num].state;
+    state_check(p);
 }
 
 
@@ -101,8 +107,7 @@
     CHARACTER *p = (CHARACTER*)chara;
     printf("x = %f, y = %f, vx = %f, vy = %f\n",p->x, p->y, p->vx, p->vy);
 
-    int num = GetStateNum(p->task);
-    p->state = state_list[num].state;
+    state_check(p);
 }
 
 
@@ -113,8 +118,7 @@
 
     CHARACTER *p = (CHARACTER*)chara;
 
-    int num = GetStateNum(p->task);
-    p->state = state_list[num].state;
+    state_check(p);
 }
 
 
@@ -160,9 +164,8 @@
 	    }
 	}
     }
-    int num = GetStateNum(p->task);
-    p->state = state_list[num].state;
-    
+
+    state_check(p);
     free(new_obj);
 }
 
@@ -170,7 +173,7 @@
 CHARACTER*
 SimpleStateTask(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_task;
     HTaskPtr state_task = tmanager->create_task(task_num);
 
     state_task->set_inData(0, p, sizeof(CHARACTER));
@@ -179,6 +182,8 @@
 
     state_task->set_post(updateState, (void*)p, NULL);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
 
     return p;
@@ -189,7 +194,7 @@
 CHARACTER*
 FixRandomTask(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_task;
     HTaskPtr state_task = tmanager->create_task(task_num);
     
     state_task->set_param(0, (memaddr)myrand);
@@ -200,6 +205,8 @@
 
     state_task->set_post(PrintCoordinate, (void*)p, NULL);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
 
     return p;
@@ -209,7 +216,7 @@
 CHARACTER*
 withJikiTask(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_task;
     HTaskPtr state_task = tmanager->create_task(task_num);
 
     state_task->set_inData(0, p, sizeof(CHARACTER));
@@ -219,6 +226,8 @@
 
     state_task->set_post(updateState, (void*)p, NULL);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -228,7 +237,7 @@
 CHARACTER*
 sendContainerTask(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -242,6 +251,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -251,7 +262,7 @@
 CHARACTER*
 JikiContainerTask(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -266,6 +277,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);    
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -298,6 +311,8 @@
 	state_task->set_post(updateState, (void*)p, NULL);
     }
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     asteroidi++;
@@ -308,7 +323,7 @@
 CHARACTER*
 Boss1Task1(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -324,6 +339,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -333,7 +350,7 @@
 CHARACTER*
 Boss1Task2(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -351,6 +368,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -360,7 +379,7 @@
 CHARACTER*
 Boss1Task3(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_task;
     HTaskPtr state_task = tmanager->create_task(task_num);
     
     state_task->set_param(0, (memaddr)rinkx);
@@ -373,6 +392,8 @@
     
     state_task->set_post(updateState, (void*)p, NULL);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -382,7 +403,7 @@
 CHARACTER*
 Boss1Task4(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -400,6 +421,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -409,7 +432,7 @@
 CHARACTER*
 Boss1Task5(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -434,6 +457,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -443,7 +468,7 @@
 CHARACTER*
 Boss1Task6(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -465,6 +490,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -474,7 +501,7 @@
 CHARACTER*
 Boss2Task1(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -498,6 +525,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -507,7 +536,7 @@
 CHARACTER*
 Boss2Task2(CHARACTER *p, int num1, int num2)
 {
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -533,6 +562,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -544,7 +575,7 @@
 {
     kyeenemyno = p;
 
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -562,6 +593,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -571,7 +604,7 @@
 CHARACTER*
 Boss5Task(CHARACTER *p)
 {
-    int task_num = p->task;
+    int task_num = p->state_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);
@@ -588,6 +621,8 @@
 
     state_task->set_post(checkContainer, (void*)p, (void*)obj);    
     state_task->set_cpu(get_cpunum());
+
+    state_next->wait_for(state_task);
     state_task->spawn();
     
     return p;
@@ -608,7 +643,7 @@
 	printf("F%d: DELETE  [NAME]%s_%d  [COORD]x= %f  y= %f  vx= %f  vy= %f\n",
 	       filpcount, dtable[p->charano].name, p->chara_id,
 	       p->x, p->y, p->vx, p->vy);
-	printf("             [TAMA]lv1 = %d, lv2 = %d [LASER]lv1 = %d\n",
+	printf("            [TAMA]lv1 = %d, lv2 = %d [LASER]lv1 = %d\n",
 	       tama_lv1_end, tama_lv2_end, laser_lv1_end);
     }
 
@@ -623,7 +658,7 @@
 CHARACTER*
 chara_state0(CHARACTER *p)
 {
-    p->task = STATE0;
+    p->state_task = STATE0;
     return SimpleStateTask(p);
 }
 
@@ -631,7 +666,7 @@
 CHARACTER*
 chara_state1(CHARACTER *p)
 {
-    p->task = STATE1;
+    p->state_task = STATE1;
     return SimpleStateTask(p);
 }
 
@@ -639,7 +674,7 @@
 CHARACTER*
 chara_state2(CHARACTER *p)
 {
-    p->task = STATE2;
+    p->state_task = STATE2;
     return SimpleStateTask(p);
 }
 
@@ -647,7 +682,7 @@
 CHARACTER*
 chara_state3(CHARACTER *p)
 {
-    p->task = STATE3;
+    p->state_task = STATE3;
     return sendContainerTask(p);
 }
 
@@ -655,7 +690,7 @@
 CHARACTER*
 chara_state4(CHARACTER *p)
 {
-    p->task = STATE4;
+    p->state_task = STATE4;
     return withJikiTask(p);
 }
 
@@ -663,7 +698,7 @@
 CHARACTER*
 chara_state5(CHARACTER *p)
 {
-    p->task = STATE5;
+    p->state_task = STATE5;
     return withJikiTask(p);
 }
 
@@ -671,7 +706,7 @@
 CHARACTER*
 chara_state6(CHARACTER *p)
 {
-    p->task = STATE6;
+    p->state_task = STATE6;
     return withJikiTask(p);
 }
 
@@ -679,7 +714,7 @@
 CHARACTER*
 chara_state7(CHARACTER *p)
 {
-    p->task = STATE7;
+    p->state_task = STATE7;
     return sendContainerTask(p);
 }
 
@@ -691,7 +726,7 @@
     tekino0 = p;
     kyeenemyno = p;
 
-    p->task = STATE8;
+    p->state_task = STATE8;
     return Boss1Task1(p);
 }
 
@@ -699,7 +734,7 @@
 CHARACTER*
 chara_state9(CHARACTER *p)
 {
-    p->task = STATE9;    
+    p->state_task = STATE9;    
     return Boss1Task2(p);
 }
 
@@ -707,7 +742,7 @@
 CHARACTER*
 chara_state10(CHARACTER *p)
 {
-    p->task =STATE10;
+    p->state_task =STATE10;
     return Boss1Task3(p);
 }
 
@@ -715,7 +750,7 @@
 CHARACTER*
 chara_state11(CHARACTER *p)
 {
-    p->task = STATE11;
+    p->state_task = STATE11;
     return Boss1Task4(p);
 }
 
@@ -723,7 +758,7 @@
 CHARACTER*
 chara_state12(CHARACTER *p)
 {
-    p->task = STATE12;
+    p->state_task = STATE12;
     return Boss1Task5(p);
 }
 
@@ -731,7 +766,7 @@
 CHARACTER*
 chara_state13(CHARACTER *p)
 {
-    p->task = STATE13;
+    p->state_task = STATE13;
     return Boss1Task6(p);
 }
 
@@ -739,7 +774,7 @@
 CHARACTER*
 chara_state20(CHARACTER *p)
 {
-    p->task = STATE20;
+    p->state_task = STATE20;
     return SimpleStateTask(p);
 }
 
@@ -747,7 +782,7 @@
 CHARACTER*
 chara_state21(CHARACTER *p)
 {
-    p->task = STATE21;
+    p->state_task = STATE21;
     return SimpleStateTask(p);
 }
 //ここまでgetate boss
@@ -756,7 +791,7 @@
 CHARACTER*
 chara_state22(CHARACTER *p)
 {
-    p->task = STATE22;
+    p->state_task = STATE22;
     return FixRandomTask(p);
 }
 
@@ -764,7 +799,7 @@
 CHARACTER*
 chara_state23(CHARACTER *p)
 {
-    p->task = STATE23;
+    p->state_task = STATE23;
     return AsteroidTask(p);
 }
 
@@ -783,37 +818,36 @@
     rinky = 0;
     rinkf1 = 0;
     rinkf2 = 0;
-    p->task = STATE25;
+    p->state_task = STATE25;
 
-    int num = GetStateNum(p->task);
-    p->state = state_list[num].state;
+    state_check(p);
     return p;
 }
 
 CHARACTER*
 chara_state25(CHARACTER *p)
 {
-    p->task = STATE25;
+    p->state_task = STATE25;
     return Boss2Task1(p);
 }
 
 CHARACTER*
 chara_state26(CHARACTER *p)
 {
-    p->task = STATE26;
+    p->state_task = STATE26;
     return Boss2Task1(p);
 }
 
 CHARACTER*
 chara_state27(CHARACTER *p) //rocket punch
 {
-    p->task = STATE27;
+    p->state_task = STATE27;
     return Boss2Task1(p);
 }
 CHARACTER*
 chara_state28(CHARACTER *p)
 {
-    p->task = STATE28;
+    p->state_task = STATE28;
     return Boss2Task1(p);
 }
 
@@ -821,7 +855,7 @@
 CHARACTER*
 chara_state29(CHARACTER *p)
 {
-    p->task = STATE29;
+    p->state_task = STATE29;
     return sendContainerTask(p);
 }
 
@@ -829,7 +863,7 @@
 CHARACTER*
 chara_state30(CHARACTER *p)
 {
-    p->task = STATE30;
+    p->state_task = STATE30;
     return SimpleStateTask(p);
 }
 
@@ -837,7 +871,7 @@
 CHARACTER*
 chara_state31(CHARACTER *p) //right hand
 {
-    p->task = STATE31;
+    p->state_task = STATE31;
     return Boss2Task2(p, 0, 0);
 }
 
@@ -845,7 +879,7 @@
 CHARACTER*
 chara_state32(CHARACTER *p) //left hand
 {
-    p->task = STATE32;
+    p->state_task = STATE32;
     return Boss2Task2(p, 14, 20);
 }
 
@@ -854,7 +888,7 @@
 CHARACTER*
 chara_state33(CHARACTER *p) // right shoulder
 {
-    p->task = STATE33;
+    p->state_task = STATE33;
     return Boss2Task2(p, 11, 19);
 }
 
@@ -862,7 +896,7 @@
 CHARACTER*
 chara_state34(CHARACTER *p) //left shoulder
 {
-    p->task = STATE34;
+    p->state_task = STATE34;
     return Boss2Task2(p, 12, 21);
 }
 
@@ -870,7 +904,7 @@
 CHARACTER*
 chara_state35(CHARACTER *p) // bust
 {
-    p->task = STATE35;
+    p->state_task = STATE35;
     return Boss2Task2(p, 15, 16);
 }
 
@@ -879,7 +913,7 @@
 CHARACTER*
 chara_state40(CHARACTER *p) //arm vulkan
 {
-    p->task = STATE40;
+    p->state_task = STATE40;
     return Boss2Task2(p, 0, 0);
 }
 
@@ -887,7 +921,7 @@
 CHARACTER*
 chara_state41(CHARACTER *p) //left arm up arm vulkan
 {
-    p->task = STATE41;
+    p->state_task = STATE41;
     return Boss2Task2(p, 0, 0);
 }
 
@@ -895,7 +929,7 @@
 CHARACTER*
 chara_state400(CHARACTER *p)
 {
-    p->task = STATE400;
+    p->state_task = STATE400;
     return SimpleStateTask(p);
 }
 
@@ -903,7 +937,7 @@
 CHARACTER*
 chara_state401(CHARACTER *p)
 {
-    p->task = STATE401;
+    p->state_task = STATE401;
     return JikiContainerTask(p);
 }
 
@@ -911,7 +945,7 @@
 CHARACTER*
 chara_state402(CHARACTER *p)
 {
-    p->task = STATE402;
+    p->state_task = STATE402;
     return JikiContainerTask(p);
 }
 
@@ -920,10 +954,9 @@
 chara_state410(CHARACTER *p)
 {
     kyeenemyno = p;
-    p->task = STATE411;
+    p->state_task = STATE411;
     
-    int num = GetStateNum(p->task);
-    p->state = state_list[num].state;
+    state_check(p);
     return p;
 }
 
@@ -931,7 +964,7 @@
 CHARACTER*
 chara_state411(CHARACTER *p)
 {
-    p->task = STATE411;
+    p->state_task = STATE411;
     return JikiContainerTask(p);
 }
 
@@ -939,7 +972,7 @@
 CHARACTER*
 chara_state500(CHARACTER *p)
 {
-    p->task = STATE500;
+    p->state_task = STATE500;
     return Boss4Task(p);
 }
 
@@ -947,7 +980,7 @@
 CHARACTER*
 chara_state501(CHARACTER *p)
 {
-    p->task = STATE501;
+    p->state_task = STATE501;
     return sendContainerTask(p);
 }
 
@@ -956,7 +989,7 @@
 chara_state600(CHARACTER *p)
 {
   kyeenemyno = p;
-  p->task = STATE600;
+  p->state_task = STATE600;
   return sendContainerTask(p);
 }
 
@@ -964,7 +997,7 @@
 CHARACTER*
 chara_state601(CHARACTER *p)
 {
-    p->task = STATE601;
+    p->state_task = STATE601;
     return Boss5Task(p);
 }
 
@@ -972,6 +1005,6 @@
 CHARACTER*
 chara_state602(CHARACTER *p)
 {
-    p->task = STATE602;
+    p->state_task = STATE602;
     return Boss5Task(p);
 }
--- a/state_task.h	Sat Jan 29 02:46:41 2011 +0900
+++ b/state_task.h	Sat Jan 29 22:43:17 2011 +0900
@@ -0,0 +1,6 @@
+#ifndef INCLUDE_STATE_TASK
+#define INCLUDE_STATE_TASK
+
+HTaskPtr create_next();
+
+#endif