changeset 60:cfd42ee2ad28

change makefile, spe/task. adjust scale api. worked on ps3-ppe.
author yutaka@localhost.localdomain
date Sun, 06 Feb 2011 17:16:43 +0900
parents cd05eee90279
children e66cab264350
files Character.c Character_state.c Makefile.ps3 TaskDandy.cc collision_task.cc spe/Atari.cc spe/Bom.cc spe/CollDataReflect.cc spe/Player.cc spe/asteroid.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_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_state41.cc spe/chara_state5.cc spe/chara_state500.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/spe-main.cc spe/task_object.h
diffstat 46 files changed, 331 insertions(+), 300 deletions(-) [+]
line wrap: on
line diff
--- a/Character.c	Mon Feb 07 03:31:18 2011 +0900
+++ b/Character.c	Sun Feb 06 17:16:43 2011 +0900
@@ -134,13 +134,11 @@
     q->s = 0;
     q->f = TRUE;
 
-    /*    
     if (q->tama == FALSE) {
         printf("F%d: CREATE  [NAME]%s_%d  [COORD]x= %f  y= %f  vx= %f  vy= %f\n",
 	       filpcount, dtable[number].name, q->chara_id,
 	       q->x, q->y, q->vx, q->vy);
     }
-    */
 }
 
 void state_update()
--- a/Character_state.c	Mon Feb 07 03:31:18 2011 +0900
+++ b/Character_state.c	Sun Feb 06 17:16:43 2011 +0900
@@ -45,7 +45,6 @@
 CHARACTER *
 delete_chara(CHARACTER *p)
 {
-  /*
   if (p->tama == FALSE) {
       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,
@@ -53,7 +52,6 @@
       printf("             [BULLET]tlv1 = %d, tlv2 = %d llv1 = %d\n",
 	     tama_lv1_end+1, tama_lv2_end+1, laser_lv1_end+1);
   }
-  */
   
   CHARACTER *parent = p;
   p->f = FALSE;
--- a/Makefile.ps3	Mon Feb 07 03:31:18 2011 +0900
+++ b/Makefile.ps3	Sun Feb 06 17:16:43 2011 +0900
@@ -14,7 +14,7 @@
 TASK_OBJS = $(TASK_SRCS:.cc=.o)
 
 TARGET = dandy spe-main
-OBJS    =  Character.o Bom.o tokuten.o collision.o count2.o Character_state.o schedule3.o tama2.o syokika.o Ss.o sound.o  profile.o debug.o trace.o LoadSprite.o xml.o b64_de.o tree_controll.o object.o sys.o
+OBJS    =   StateList.o Cheat.o Character.o Bom.o tokuten.o count2.o schedule3.o tama2.o syokika.o Ss.o sound.o  profile.o debug.o trace.o LoadSprite.o xml.o b64_de.o tree_controll.o object.o sys.o #collision.o state_task.o
 
 all: $(TARGET)
 
@@ -33,13 +33,15 @@
 test:
 	./demo  -test
 
-demo: $(OBJS) sgoex.o main.o collision.o
+demo: $(OBJS) sgoex.o main.o collision.o  Character_state.o
 	$(CC) $(ABI) -o $@ $? $(LIBS)
 
-dandy: $(OBJS) Dandy.o collision.o
+dandy: $(OBJS) Dandy.o collision.o  Character_state.o
 	$(CC) $(ABI) -o $@ $? $(LIBS)
 
-t_dandy: $(OBJS) $(TASK_OBJS) TaskDandy.o collision_task.o
+cell-dandy: t_dandy spe-main
+
+t_dandy: $(OBJS) $(TASK_OBJS) TaskDandy.o collision_task.o state_task.o
 	 $(CC) $(ABI) -o $@ $? $(LIBS)
 
 clean:
--- a/TaskDandy.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/TaskDandy.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -314,10 +314,13 @@
     root->xyz[1] = 0;
     root->xyz[2] = 30.0f;
 
+    float scale[] = {1,1,1};
+
     /*親の回転、座標から、子の回転、座標を算出*/
-    get_matrix(root->matrix, root->angle, root->xyz, root->scale, camera->matrix);
+    get_matrix(root->matrix, root->angle, root->xyz, camera->matrix);
+    scale_matrix(root->matrix, scale, root->c_xyz);
     /*法線用の行列。Cameraの行列を抜いている(Cameraのコンストラクタで、単位行列にしている)*/
-    get_matrix(root->real_matrix, root->angle, root->xyz, root->scale, camera->real_matrix);
+    get_matrix(root->real_matrix, root->angle, root->xyz, camera->real_matrix);
 
     sgroot->setSceneData(root);
 }
@@ -424,7 +427,7 @@
 	tlv3[i].y = -1;
     }
     filpcount = 0;
-    stage = 1;
+    stage = 0;
     //for (i = 0; i < 300; i++)
     //enemy[i].f = FALSE;
     jiki.zanki = 3;
@@ -651,9 +654,10 @@
     
     float scale[] = {my_scale,my_scale,1};
     /*親の回転、座標から、子の回転、座標を算出*/
-    get_matrix(object->matrix, object->angle, object->xyz, scale, root->matrix);
+    get_matrix(object->matrix, object->angle, object->xyz, root->matrix);
+    scale_matrix(object->matrix, scale, object->c_xyz);
     /*法線用の行列。Cameraの行列を抜いている(Cameraのコンストラクタで、単位行列にしている)*/
-    get_matrix(object->real_matrix, object->angle, object->xyz, scale, root->real_matrix);
+    get_matrix(object->real_matrix, object->angle, object->xyz, root->real_matrix);
 
 }
 
@@ -677,9 +681,10 @@
 
     float scale[] = {5*scalex,5*scaley,1};
     /*親の回転、座標から、子の回転、座標を算出*/
-    get_matrix(object->matrix, object->angle, object->xyz, scale, root->matrix);
+    get_matrix(object->matrix, object->angle, object->xyz, root->matrix);
+    scale_matrix(object->matrix, scale, object->c_xyz);
     /*法線用の行列。Cameraの行列を抜いている(Cameraのコンストラクタで、単位行列にしている)*/
-    get_matrix(object->real_matrix, object->angle, object->xyz, scale, root->real_matrix);
+    get_matrix(object->real_matrix, object->angle, object->xyz, root->real_matrix);
 }
 
 struct SGO_PAD pad[2];
--- a/collision_task.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/collision_task.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -31,7 +31,6 @@
 
     if (p->collision_task == true) {
 	//debug
-/*
 	if (p->tama == FALSE) {
 	    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,
@@ -39,7 +38,6 @@
 	    printf("             [BULLET]tlv1 = %d, tlv2 = %d llv1 = %d\n",
 		   tama_lv1_end+1, tama_lv2_end+1, laser_lv1_end+1);
 	}
-*/
 
 	p->state_task = DELETE_CHARA;
 	p->state = delete_chara;
--- a/spe/Atari.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/Atari.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -1,59 +1,72 @@
-#include "Atari.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
+#include "../ObjectType.h"
 
-SchedDefineTask(Atari);
+SchedDefineTask1(Atari, atari);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+atari(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     int w = (int)smanager->get_param(0);
     int h = (int)smanager->get_param(1);
-    int enemycount = (int)smanager->get_param(2);
-    int bomend = (int)smanager->get_param(3);
-    int tama_lv1_end = (int)smanager->get_param(4);
-    int tama_lv2_end = (int)smanager->get_param(5);
-    int laser_lv1_end = (int)smanager->get_param(6);
+    long load_id = (long)smanager->get_param(2);
+
+    CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
+    CollisionPropertyPtr property = 
+	(CollisionPropertyPtr)smanager->global_get(load_id);
+
+    int *p_infg_level = &property->infg_level;
+    int infg_level = *p_infg_level;
 
-    CollisionPropertyPtr property
-	= (CollisionPropertyPtr)smanager->get_input(rbuf, 0);
+    int tama_lv1_end = property->tama_lv1_end;
+    int tama_lv2_end = property->tama_lv2_end;
+    int laser_lv1_end = property->laser_lv1_end;
 
-    int infg_level = property->infg_level;
+    int *enemycount = &property->enemycount;
+
     player *jiki = &property->jiki;
-    CHARACTER *p = &property->p;
-    tama1 *tlv3 = &property->tlv3;
-    stge lg = property->lg;
-    stge infg = property->infg;
+
+    stge *lg = &property->lg;
+    stge *infg = &property->infg;
 
     tama1 *tama_lv1 = property->tama_lv1;
     tama2 *tama_lv2 = property->tama_lv2;
+    tama1 *tlv3 = &property->tlv3;
     laser *laser_lv1 = property->laser_lv1;
-    laser *laser_lv2 = property->laser_lv2;
+    laser *laser_lv2 = &property->laser_lv2;
     laser *laser_lv3 = property->laser_lv3;
-    bomchar *bchar = property->bchar;
 
     int i1, ex, ey;
     int n;
     ex = p->x;
     ey = p->y;
 
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
+    sprite->flag = false;
+    sprite->length = 1;
+
 //自機やられ
 #ifndef INVISIBLE_MODE
     if ((ex < jiki->x + 128 / 2) && (ex + w > jiki->x + 128 / 2)
 	&& (ey < jiki->y + 128 / 2) && (ey + h > jiki->y + 128 / 2)
 	&& jiki->muteki == 0) {
-	Bom(jiki->x + 16, jiki->y + 16, bomend, bchar);
+	
+	sprite->flag = true;
+	Bom(jiki->x + 16, jiki->y + 16, &sprite->data[0]);
+	
 	jiki->bf = FALSE;
 	jiki->zanki--;
-	jiki->muteki = 120;
+	jiki->muteki = 120;	
+	property->jiki = *jiki;
 
-	infg.stg = 0;
+	infg->stg = 0;
 	infg_level--;
 	if (infg_level < 0)
 	    infg_level = 0;
 
-	property->infg_level = infg_level;
-	property->infg = infg;
-	smanager->swap();
+	*p_infg_level = infg_level;
+	*q = *p;
 	return 0;
     }
 #endif
@@ -66,40 +79,40 @@
 	    && (ex + w > tama_lv1[i1].x + 16)
 	    && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
 	    && (tama_lv1[i1].r != -1)) {
+
 	    tama_lv1[i1].r = -1;
 	    p->vit -= TAMALV1P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+				((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
 	if ((tama_lv1[i1].x + 64 > ex) && (ex + w > tama_lv1[i1].x)
 	    && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
 	    && (tama_lv1[i1].l != -1)) {
+
 	    tama_lv1[i1].l = -1;
 	    p->vit -= TAMALV1P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
@@ -110,20 +123,20 @@
 	    && (ex + w > tama_lv2[i1].x + 128)
 	    && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
 	    && (tama_lv2[i1].rr != -1)) {
+
 	    tama_lv2[i1].rr = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
@@ -133,20 +146,20 @@
 	    && (tama_lv2[i1].y - 32 + 192 > ey)
 	    && (tama_lv2[i1].y - 32 < ey + h)
 	    && (tama_lv2[i1].sr != -1)) {
+
 	    tama_lv2[i1].sr = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
@@ -154,20 +167,20 @@
 	    && (tama_lv2[i1].y - 32 + 192 > ey)
 	    && (tama_lv2[i1].y - 32 < ey + h)
 	    && (tama_lv2[i1].sl != -1)) {
+
 	    tama_lv2[i1].sl = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
@@ -175,58 +188,58 @@
 	    && (ex + w > tama_lv2[i1].x - 64)
 	    && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
 	    && (tama_lv2[i1].ll != -1)) {
+
 	    tama_lv2[i1].ll = -1;
 	    p->vit -= TAMALV2P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
     }
-    if ((tlv3[0].r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
+    if ((tlv3->r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
 	&& (jiki->y > ey + h)) {
+
 	p->vit -= TAMALV3P;
-	infg.stg++;
+	infg->stg++;
 	if (p->vit <= 0) {
-	    infg.stg += 4;
-	    Bom(p->x, p->y, bomend, bchar);
-	    enemycount += (p->score *
-			   ((infg.stg / 128) + infg_level + 1));
-	    //p->state = delete_chara;
-	    //p->collision = noaction;
+	    infg->stg += 4;
+	    sprite->flag = true;
+	    Bom(p->x, p->y, &sprite->data[0]);
+	    *enemycount += (p->score *
+			   ((infg->stg / 128) + infg_level + 1));
+	    p->collision_task = true;
 	    p->f = FALSE;
 
-	    property->infg = infg;
-	    smanager->swap();
+	    *q = *p;
 	    return 0;
 	}
     }
-  jumping:
-    if ((tlv3[0].r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
+jumping:
+    if ((tlv3->r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
 	&& (jiki->y + 128 > ey) && (jiki->y < ey + h)) {
+
 	p->vit -= TAMALV3P;
-	infg.stg++;
+	infg->stg++;
 	if (p->vit <= 0) {
-	    infg.stg += 4;
-	    Bom(p->x, p->y, bomend, bchar);
-	    enemycount += (p->score *
-			   ((infg.stg / 128) + infg_level + 1));
-	    //p->state = delete_chara;
-	    //p->collision = noaction;
+	    infg->stg += 4;
+	    sprite->flag = true;
+	    Bom(p->x, p->y, &sprite->data[0]);
+	    *enemycount += (p->score *
+			   ((infg->stg / 128) + infg_level + 1));
+	    p->collision_task = true;
 	    p->f = FALSE;
 
-	    property->infg = infg;
-	    smanager->swap();
+	    *q = *p;
 	    return 0;
 	}
     }
@@ -237,75 +250,77 @@
 	if ((laser_lv1[i1].x + n > ex) && (ex + w > laser_lv1[i1].x)
 	    && (laser_lv1[i1].y + n > ey) && (laser_lv1[i1].y < ey + h)
 	    && (laser_lv1[i1].r != -1)) {
+
 	    laser_lv1[i1].r = -1;
 	    laser_lv1[i1].y = -1;
 	    p->vit -= LASERLV1P;
-	    infg.stg++;
+	    infg->stg++;
 	    if (p->vit <= 0) {
-		infg.stg += 4;
-		Bom(p->x, p->y, bomend, bchar);
-		enemycount += (p->score *
-			       ((infg.stg / 128) + infg_level + 1));
-		//p->state = delete_chara;
-		//p->collision = noaction;
+		infg->stg += 4;
+		sprite->flag = true;
+		Bom(p->x, p->y, &sprite->data[0]);
+		*enemycount += (p->score *
+			       ((infg->stg / 128) + infg_level + 1));
+		p->collision_task = true;
 		p->f = FALSE;
 
-		property->infg = infg;
-		smanager->swap();
+		*q = *p;
 		return 0;
 	    }
 	}
     }
     /*shield(laser lv2) */
-    if ((p->tama == TRUE) && (lg.stg > 0) &&
+    if ((p->tama == TRUE) && (lg->stg > 0) &&
 	(laser_lv2[0].x + 128 > ex) && (ex + w > laser_lv2[0].x - 128)
 	&& (laser_lv2[0].y + 128 > ey) && (laser_lv2[0].y - 128 < ey + h)
 	&& (laser_lv2[0].r != 0)) {
+
 	p->vit -= LASERLV2P;
-	lg.stg -= 26;
-	infg.stg++;
+	lg->stg -= 26;
+
+	infg->stg++;
 	if (p->vit <= 0) {
-	    infg.stg += 4;
-	    Bom(p->x, p->y, bomend, bchar);
-	    enemycount += (p->score *
-			   ((infg.stg / 128) + infg_level + 1));
-	    //p->state = delete_chara;
-	    //p->collision = noaction;
+	    infg->stg += 4;
+	    property->infg = *infg;
+
+	    sprite->flag = true;
+	    Bom(p->x, p->y, &sprite->data[0]);
+	    *enemycount += (p->score *
+			   ((infg->stg / 128) + infg_level + 1));
+	    p->collision_task = true;
 	    p->f = FALSE;
-
-	    property->lg = lg;
-	    property->infg = infg;
-	    smanager->swap();
+	    
+	    *q = *p;
 	    return 0;
 	}
     }
     /*bomber(laser lv3) */
     if (laser_lv3[0].r < 62) {
-	for (i1 = 1; i1 < 128; i1++) {
+	for (i1 = 1; i1 < 64; i1++) {
 	    if ((laser_lv3[i1].x + 128 > ex) && (ex + w > laser_lv3[i1].x)
 		&& (laser_lv3[i1].y + 128 > ey)
 		&& (laser_lv3[i1].y < ey + h)
 		&& (laser_lv3[i1].r > 0)) {
+
 		tama_lv2[i1].rr = -1;
 		p->vit -= LASERLV3P;
-		infg.stg++;
+		infg->stg++;
 		if (p->vit <= 0) {
-		    infg.stg += 4;
-		    Bom(p->x, p->y, bomend, bchar);
-		    enemycount += (p->score *
-				   ((infg.stg / 128) + infg_level + 1));
-		    //p->state = delete_chara;
-		    //p->collision = noaction;
+		    infg->stg += 4;
+		    sprite->flag = true;
+		    Bom(p->x, p->y, &sprite->data[0]);
+		    *enemycount += (p->score *
+				   ((infg->stg / 128) + infg_level + 1));
+		    p->collision_task = true;
 		    p->f = FALSE;
 
-		    property->infg = infg;
-		    smanager->swap();
+		    *q = *p;
 		    return 0;
 		}
 	    }
 	}
     }
-    property->infg = infg;
-    smanager->swap();
+
+    *q = *p;
     return 0;
 }
--- a/spe/Bom.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/Bom.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -1,19 +1,12 @@
-#include "tobject.h"
+#include "task_object.h"
+#include "../ObjectType.h"
 
 void
-Bom(int x, int y, int bomend, bomchar *bchar)
+Bom(int x, int y, ObjDataPtr obj)
 {
-    int i;
-    bomend++;
-    if (bomend > 49) {
-	bomend = 49;
-	return;
-    }
+    obj->type = Boms;
+    obj->x = x;
+    obj->y = y;
 
-    i = bomend;
-    bchar[i].x = x;
-    bchar[i].y = y;
-    bchar[i].no = 0;
-    bchar[i].f = 0;
     return;
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spe/CollDataReflect.cc	Sun Feb 06 17:16:43 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/spe/Player.cc	Mon Feb 07 03:31:18 2011 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-#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;
-}
--- a/spe/asteroid.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/asteroid.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -1,31 +1,33 @@
-#include "asteroid.h"
-#include "tobject.h"
+#include "task_base.h"
+#include "task_object.h"
 
-SchedDefineTask(ASTEROID);
+SchedDefineTask1(Asteroid, asteroid_task);
 
 static int
-run(SchedTask *smanager, void *rbuf, void *wbuf)
+asteroid_task(SchedTask *smanager, void *rbuf, void *wbuf)
 {
+    int asteroidi = (int)smanager->get_param(0);
+
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
-    int i;
     
-    asteroiddt[asteroidi] = p;
-    //            if(asteroidi==0)
-    //            {
     p->x += p->vx;
     p->y += p->vy;
-    //            }
+    
     if (asteroidi > 0) {
-	for (i = 0; i < asteroidi; i++) {
-	    if ((asteroiddt[i]->x + 32 > p->x)
-		&& (p->x + 32 > asteroiddt[i]->x)
-		&& (asteroiddt[i]->y + 32 > p->y)
-		&& (asteroiddt[i]->y < p->y + 32)) {
+	CHARACTER* asteroiddt = (CHARACTER*)smanager->get_input(rbuf, 1);
+
+	for (int i = 0; i < asteroidi; i++) {
+	    if ((asteroiddt[i].x + 32 > p->x)
+		&& (p->x + 32 > asteroiddt[i].x)
+		&& (asteroiddt[i].y + 32 > p->y)
+		&& (asteroiddt[i].y < p->y + 32)) {
 		p->vx *= -1;
 		p->vy *= -1;
 	    }
 	}
     }
-    asteroidi++;
+    CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
+
+    *q = *p;
     return 0;
 }
--- a/spe/chara_state0.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state0.cc	Sun Feb 06 17:16:43 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/spe/chara_state1.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state1.cc	Sun Feb 06 17:16:43 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/spe/chara_state10.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state10.cc	Sun Feb 06 17:16:43 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/spe/chara_state11.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state11.cc	Sun Feb 06 17:16:43 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/spe/chara_state12.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state12.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -22,14 +22,14 @@
 	smanager->setup_outputData();
 	
 	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
-	int *w_count = (int*)smanager->get_output(wbuf, 3);
+	int *w_count = (int*)smanager->get_output(wbuf, 1);
 	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->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/spe/chara_state13.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state13.cc	Sun Feb 06 17:16:43 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/spe/chara_state2.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state2.cc	Sun Feb 06 17:16:43 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/spe/chara_state20.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state20.cc	Sun Feb 06 17:16:43 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/spe/chara_state21.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state21.cc	Sun Feb 06 17:16:43 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/spe/chara_state22.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state22.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -6,34 +6,37 @@
 static int
 state22(SchedTask *smanager, void *rbuf, void *wbuf)
 {
-    int rand = (int)smanager->get_param(0);
+    int rand1 = (int)smanager->get_param(0);
+    int rand2 = (int)smanager->get_param(1);
+    int rand3 = (int)smanager->get_param(2);
+    int rand4 = (int)smanager->get_param(3);
 
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
-      int sf = rand % 4;
+      int sf = rand1 % 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->task = STATE23;
+	  p->y = rand2 % (120 - 35);
+	  p->vx = (rand3 % 4 + 1);
+	  p->vy = rand4 % 3 + 1;
+	  p->state_task = STATE23;
       }
       if((sf == 2))
       {
-	  p->x = rand % 290;
+	  p->x = rand2 % 290;
 	  p->y = -30;
-	  p->vx = rand % 3 - 1;
-	  p->vy = (rand % 4 + 1);
-	  p->task = STATE23;
+	  p->vx = rand3 % 3 - 1;
+	  p->vy = (rand4 % 4 + 1);
+	  p->state_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->task = STATE23;
+	  p->y = rand2 % (120 - 35);
+	  p->vx = (rand3 % 4 + 1) * -1;
+	  p->vy = rand4 % 3 -1;
+	  p->state_task = STATE23;
       }
 
       smanager->swap();
--- a/spe/chara_state25.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state25.cc	Sun Feb 06 17:16:43 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/spe/chara_state26.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state26.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -40,7 +40,7 @@
 	p->dt2 = 0;
 	*rinkf1 = 0;
 
-	p->task = STATE25;
+	p->state_task = STATE25;
 	*q = *p;
 	return 0;
     }
--- a/spe/chara_state27.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state27.cc	Sun Feb 06 17:16:43 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/spe/chara_state28.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state28.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -7,18 +7,18 @@
 static int
 state28(SchedTask *smanager, void *rbuf, void *wbuf)
 {
-    int rand = (int)smanager->get_param(2);
+    int rand = (int)smanager->get_param(0);
 
     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->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, 4);
+    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
     sprite->flag = true;
 
     if (p->dt1 <= 360)
--- a/spe/chara_state3.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state3.cc	Sun Feb 06 17:16:43 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/spe/chara_state30.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state30.cc	Sun Feb 06 17:16:43 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/spe/chara_state31.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state31.cc	Sun Feb 06 17:16:43 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/spe/chara_state32.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state32.cc	Sun Feb 06 17:16:43 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/spe/chara_state33.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state33.cc	Sun Feb 06 17:16:43 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/spe/chara_state34.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state34.cc	Sun Feb 06 17:16:43 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/spe/chara_state35.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state35.cc	Sun Feb 06 17:16:43 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/spe/chara_state4.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state4.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -12,14 +12,13 @@
     
     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->task = STATE7;
+	p->state_task = STATE7;
+    } else {
+	p->state_task = STATE4;
     }
-    else p->task = STATE4;
-
     *q = *p;
     return 0;
 }
--- a/spe/chara_state40.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state40.cc	Sun Feb 06 17:16:43 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/spe/chara_state400.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state400.cc	Sun Feb 06 17:16:43 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/spe/chara_state41.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state41.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -12,14 +12,14 @@
     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);
+    int rinkf1 = *(int*)smanager->get_input(rbuf, 2);
 
     if (enemy_part2_f == FALSE)
     {
 	CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
 //	Bom(p->x, p->y);
 	p->f = FALSE;
-	p->task = DELETE_CHARA;
+	p->collision_task = true;
       
 	*q = *p;
 	return 0;
@@ -31,9 +31,9 @@
 	if ((p->dt2 < 16))
 	{
 	    length = 1;
-	    smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
 	    smanager->setup_outputData();
-	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
 	    sprite->flag = true;
 	    sprite->length = length;
 
@@ -54,9 +54,9 @@
 	if (p->dt1 % 15 == 1) 
 	{
 	    length = 1;
-	    smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
 	    smanager->setup_outputData();
-	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
 	    sprite->flag = true;
 	    sprite->length = length;
 
@@ -68,9 +68,9 @@
 	if (p->dt2 != 0)
 	{
 	    length = 1;
-	    smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
+	    smanager->set_outputSize(1, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
 	    smanager->setup_outputData();
-	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
+	    ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 1);
 	    sprite->flag = true;
 	    sprite->length = length;
 
@@ -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/spe/chara_state5.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state5.cc	Sun Feb 06 17:16:43 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/spe/chara_state500.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state500.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -29,29 +29,32 @@
     DefSpriteEx(100, 16, 16, &sprite->data[0]);
     PutSpriteEx(100, p->x + 16, p->y + 16, 2, 2, p->dt1, &sprite->data[1]);
     
-    if (p->dt1 % (5 + p->dt2 / 8) == 1) {
-	sprite->length = 3;
-
-	if (rand % 2 == 1)
-	    Putenemy(24, p->x, p->y,
-		     (rand % 5 + 0.5) * (rand % 2 ==
-					   1 ? -1 : 1),
-		     (rand % 5 + 0.5) * (rand % 2 ==
-					   1 ? -1 : 1), STATE501, &sprite->data[2]);
-	else
-	    Putenemy(rand % 2 + 1, p->x,
-		     p->y,
-		     (int) Mycos(p->dt1 / 4) * 4 /
-		     SANKAKU,
-		     (int) -Mysin(p->dt1 / 4) * 4 /
-		     SANKAKU, STATE501, &sprite->data[2]);
-    }
-    if (p->dt1 == 50) {
-	/*Putenemy(44,0,0,1,1,411); */
+    int num = 5 +  p->dt2 / 8;
+    if (num != 0) {
+	if (p->dt1 % num == 1) {
+	    sprite->length = 3;
+	    
+	    if (rand % 2 == 1)
+		Putenemy(24, p->x, p->y,
+			 (rand % 5 + 0.5) * (rand % 2 ==
+					     1 ? -1 : 1),
+			 (rand % 5 + 0.5) * (rand % 2 ==
+					     1 ? -1 : 1), STATE501, &sprite->data[2]);
+	    else
+		Putenemy(rand % 2 + 1, p->x,
+			 p->y,
+			 (int) Mycos(p->dt1 / 4) * 4 /
+			 SANKAKU,
+			 (int) -Mysin(p->dt1 / 4) * 4 /
+			 SANKAKU, STATE501, &sprite->data[2]);
+	}
+	if (p->dt1 == 50) {
+	    /*Putenemy(44,0,0,1,1,411); */
+	}
     }
     CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
     int *w_count = (int*)smanager->get_output(wbuf, 1);
-
+    
     *q = *p;
     *w_count = count;
     return 0;
--- a/spe/chara_state6.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state6.cc	Sun Feb 06 17:16:43 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/spe/chara_state600.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state600.cc	Sun Feb 06 17:16:43 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/spe/chara_state601.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state601.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -6,7 +6,8 @@
 static int
 state601(SchedTask *smanager, void *rbuf, void *wbuf)
 {
-    int rand = (int)smanager->get_param(0);
+    int rand1 = (int)smanager->get_param(0);
+    int rand2 = (int)smanager->get_param(1);
 
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
     player *jiki = (player*)smanager->get_input(rbuf, 1);
@@ -25,8 +26,8 @@
     if (p->x > jiki->x)
 	p->vx--;
     p->x += p->vx;
-    Putenemy(6, p->x + 16 + rand % 32,
-	     p->y, 0, rand % 4, STATE400, &sprite->data[0]);
+    Putenemy(6, p->x + 16 + rand1 % 32,
+	     p->y, 0, rand2 % 4, STATE400, &sprite->data[0]);
     if (p->x < 0)
 	p->x = 0;
     if (p->x > 260)
@@ -36,7 +37,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/spe/chara_state602.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state602.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -6,7 +6,10 @@
 static int
 state602(SchedTask *smanager, void *rbuf, void *wbuf)
 {
-    int rand = (int)smanager->get_param(0);
+    int rand1 = (int)smanager->get_param(0);
+    int rand2 = (int)smanager->get_param(1);
+    int rand3 = (int)smanager->get_param(2);
+    int rand4 = (int)smanager->get_param(3);
 
     CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
 
@@ -20,11 +23,11 @@
 
     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),
+	     (rand1 % 5 + 0.5) * (rand2 % 2 == 1 ? -1 : 1),
+	     (rand3 % 5 + 0.5) * (rand4 % 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/spe/chara_state7.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state7.cc	Sun Feb 06 17:16:43 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/spe/chara_state8.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state8.cc	Sun Feb 06 17:16:43 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/spe/chara_state9.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/chara_state9.cc	Sun Feb 06 17:16:43 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/spe/spe-main.cc	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/spe-main.cc	Sun Feb 06 17:16:43 2011 +0900
@@ -4,6 +4,8 @@
 /* 必ずこの位置に書いて */
 SchedExternTask(Atari);
 
+SchedExternTask(CollDataReflect);
+
 SchedExternTask(State0);
 SchedExternTask(State1);
 SchedExternTask(State2);
@@ -62,6 +64,8 @@
 {
     SchedRegisterTask(ATARI, Atari);
 
+    SchedRegisterTask(COLLDATA_REFLECT, CollDataReflect);
+
     SchedRegisterTask(STATE0, State0);
     SchedRegisterTask(STATE1, State1);
     SchedRegisterTask(STATE2, State2);
--- a/spe/task_object.h	Mon Feb 07 03:31:18 2011 +0900
+++ b/spe/task_object.h	Sun Feb 06 17:16:43 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);
@@ -102,19 +103,25 @@
 
 typedef struct CollisionProperty {
   int infg_level;
-  int enemycount;
+
+  int tama_lv1_end;
+  int tama_lv2_end;
+  int laser_lv1_end;
 
-  CHARACTER p;
+  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];
+  laser laser_lv3[64];
+  
 } CollisionProperty, *CollisionPropertyPtr;