changeset 1:b4c797eee72a

task dandy base
author koba <koba@cr.ie.u-ryukyu.ac.jp>
date Mon, 13 Dec 2010 04:56:23 +0900
parents 435ac1cdb64e
children 6382d8f6a973
files Dandy.cc Dandy.h Func.h Makefile bom.h collision.c ppe/collision.cc ppe/collision.h ppe/task_init.cc ppe/tobject.h task_dandy.h tcollision.cc
diffstat 12 files changed, 538 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/Dandy.cc	Sat Dec 11 21:25:28 2010 +0900
+++ b/Dandy.cc	Mon Dec 13 04:56:23 2010 +0900
@@ -27,7 +27,7 @@
 #include <SDL_mixer.h>
 #include "error.h"
 #include "matrix_calc.h"
-
+#include "task_dandy.h"
 #include "Character.h"
 #include "Character_state.h"
 
@@ -73,6 +73,8 @@
 
 static Viewer *sgroot;
 
+TaskManager *tmanager;
+
 static    int screen_w;
 static    int screen_h;
 
@@ -82,6 +84,7 @@
     screen_w = w;
     screen_h = h;
     sgroot = sgroot_;
+    tmanager = sgroot->manager;
     return sgroot;
 }
 
@@ -118,7 +121,7 @@
     case 4:    gamef= dandy_closing(gamef); break;
     }
     return next;
-}; 
+};
 
 
 
@@ -148,7 +151,7 @@
 static int light_num = 4;
 
 static void 
-LightSysSwitch(Viewer *sgroot) {
+_LightSysSwitch(Viewer *sgroot) {
   if (light_sysswitch == 1) {
     sgroot->OnLightSysSwitch();
     for (int i = 0; i < light_num; i++) {
@@ -180,7 +183,7 @@
     sgroot->createFromXMLfile("xml/effect.xml");
     sgroot->createFromXMLfile("xml/boss.xml");
 
-    LightSysSwitch(sgroot);
+    _LightSysSwitch(sgroot);
 
 
     init_sprite(0,0,0,0);
@@ -216,7 +219,7 @@
 
     // ボリューム調整
     InitVolume();
-	
+
     // 音出しテスト
     PlaySdlMixer(-1, BGM);
 
@@ -269,7 +272,7 @@
 	flip();
 
 	//SDL_FillRect(screen, NULL, background);
-    
+
 	schedule();
 	enemyfaste = count;
     
--- a/Dandy.h	Sat Dec 11 21:25:28 2010 +0900
+++ b/Dandy.h	Mon Dec 13 04:56:23 2010 +0900
@@ -5,7 +5,6 @@
 #include "SceneGraph.h"
 #include "Application.h"
 #include "MainLoop.h"
-#include "Func.h"
 
 class Dandy : public Application {
     bool app_loop(Viewer *viewer);
--- a/Func.h	Sat Dec 11 21:25:28 2010 +0900
+++ b/Func.h	Mon Dec 13 04:56:23 2010 +0900
@@ -0,0 +1,14 @@
+// Task ID
+enum {
+#include "SysTasks.h"
+#include "RenderingTasks.h"
+#include "game_task.h"
+};
+
+// global alloc ID
+enum {
+#include "RenderingGlobal.h"
+#include "global_alloc.h"
+#include "KeyID.h"
+#include "global_id.h"
+};
--- a/Makefile	Sat Dec 11 21:25:28 2010 +0900
+++ b/Makefile	Mon Dec 13 04:56:23 2010 +0900
@@ -4,31 +4,41 @@
 srcdir  = .
 ABI = -m32
 
+TASK_DIR  = ppe
+TASK_SRCS_TMP = $(wildcard $(TASK_DIR)/*.cc)
+TASK_SRCS_EXCLUDE = 
+TASK_SRCS = $(filter-out $(TASK_DIR)/$(TASK_SRCS_EXCLUDE),$(TASK_SRCS_TMP))
+TASK_OBJS = $(TASK_SRCS:.cc=.o)
+
 CFLAGS  += -g $(ABI) -O2 -Wall `sdl-config --cflags` `xml2-config --cflags` $(INCLUDE)
 LIBS	+=  `sdl-config --libs`,-framework,OpenGL -lSDL_mixer -lSDL_image `xml2-config --libs`
 LIBS += -lCerium -lFifoManager
 
-TARGET = demo dandy
-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 
+TARGET = demo dandy t_dandy
+OBJS    =  Character.o Bom.o tokuten.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 
 
 all: $(TARGET)
 
 test: $(TARGET)
 	./demo  -test
 
-demo: $(OBJS) sgoex.o main.o
-	$(CC) $(ABI) -o $@ main.o sgoex.o $(OBJS) $(LIBS)
+demo: $(OBJS) sgoex.o main.o collision.o
+	$(CC) $(ABI) -o $@ main.o sgoex.o collision.o $(OBJS) $(LIBS)
 
-dandy: $(OBJS) Dandy.o
-	$(CC) $(ABI) -o $@ $(OBJS) Dandy.o $(LIBS)
+dandy: $(OBJS) Dandy.o collision.o
+	$(CC) $(ABI) -o $@ $(OBJS) Dandy.o collision.o $(LIBS)
+
+t_dandy: $(OBJS) $(TASK_OBJS) tcollision.o Dandy.o
+	$(CC) $(ABI) -o $@ $(OBJS) $(TASK_OBJS) tcollision.o Dandy.o $(LIBS)
 
 clean:
 	rm -f $(TARGET) $(OBJS)
+	rm -f Dandy.o tcollision.o ppe/collision.o ppe/task_init.o
 
 .c.o:
 	$(CC) $(CFLAGS) $(INCLUDES) -c $<
 
 .cc.o:
-	$(CC) $(CFLAGS) $(INCLUDES) -c $<
+	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
 
 debug.o:debug.h
--- a/bom.h	Sat Dec 11 21:25:28 2010 +0900
+++ b/bom.h	Mon Dec 13 04:56:23 2010 +0900
@@ -13,6 +13,7 @@
 void Superbom(int x, int y);
 
 extern int count;
+extern int bomend;
 
 extern int sb_size;
 extern int se_voice[9];
--- a/collision.c	Sat Dec 11 21:25:28 2010 +0900
+++ b/collision.c	Mon Dec 13 04:56:23 2010 +0900
@@ -26,7 +26,6 @@
     h = sptable[charno].h;
     //i2 = playerno;
 
-
     //自機やられ
 #ifndef INVISIBLE_MODE
     if ((ex < jiki.x + 128 / 2) && (ex + w > jiki.x + 128 / 2)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/collision.cc	Mon Dec 13 04:56:23 2010 +0900
@@ -0,0 +1,308 @@
+#include "collision.h"
+#include "tobject.h"
+
+SchedDefineTask(Atari);
+
+/*
+CHARACTER *
+noaction(CHARACTER *p)
+{
+    p->state = noaction;
+    return p;
+}
+
+CHARACTER *
+delete_chara(CHARACTER *p)
+{
+  CHARACTER *parent = p;
+  p->f = FALSE;
+  p->state = noaction;
+  p->collision = noaction;
+  return parent;
+}
+*/
+
+void
+Bom(int x, int y, int bomend, bomchar *bchar)
+{
+    int i;
+    bomend++;
+    if (bomend > 49) {
+	bomend = 49;
+	return;
+    }
+
+    i = bomend;
+    bchar[i].x = x;
+    bchar[i].y = y;
+    bchar[i].no = 0;
+    bchar[i].f = 0;
+    return;
+}
+
+static int
+run(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);
+    int infg_level = (int)smanager->get_param(7);
+
+    player *jiki = (player *)smanager->get_input(rbuf, 0);
+    tama1 *tama_lv1 = (tama1 *)smanager->get_input(rbuf, 1);
+    tama2 *tama_lv2 = (tama2 *)smanager->get_input(rbuf, 2);
+    tama1 *tlv3 = (tama1 *)smanager->get_input(rbuf, 3);
+    laser *laser_lv1 = (laser *)smanager->get_input(rbuf, 4);
+    laser *laser_lv2 = (laser *)smanager->get_input(rbuf, 5);
+    laser *laser_lv3 = (laser *)smanager->get_input(rbuf, 6);
+    bomchar *bchar = (bomchar *)smanager->get_input(rbuf, 7);
+    CHARACTER *p = (CHARACTER *)smanager->get_input(rbuf, 8);
+    stge lg = *(stge *)smanager->get_input(rbuf, 9);
+    stge infg = *(stge *)smanager->get_input(rbuf, 10);
+
+    int i1, ex, ey;
+    int n;
+    ex = p->x;
+    ey = p->y;
+
+
+
+//自機やられ
+#ifndef INVISIBLE_MODE
+    if ((ex < jiki->x + 128 / 2) && (ex + w > jiki->x + 128 / 2)
+	&& (ey < jiki->y + 128 / 2) && (ey + h > jiki->y + 128 / 2)
+	&& jiki->muteki == 0) {
+	Bom(jiki->x + 16, jiki->y + 16, bomend, bchar);
+	jiki->bf = FALSE;
+	jiki->zanki--;
+	jiki->muteki = 120;
+
+	infg.stg = 0;
+	infg_level--;
+	if (infg_level < 0)
+	    infg_level = 0;
+
+	return 0;
+    }
+#endif
+
+    if (p->tama == TRUE)
+	goto jumping;
+    for (i1 = 0; i1 < tama_lv1_end + 1; i1++) {
+
+	if ((tama_lv1[i1].x + 64 + 64 > ex)
+	    && (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++;
+	    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;
+		p->f = FALSE;
+		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++;
+	    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;
+		p->f = FALSE;
+		return 0;
+	    }
+	}
+    }
+
+    for (i1 = 0; i1 < tama_lv2_end + 1; i1++) {
+	if ((tama_lv2[i1].x + 128 + 64 > ex)
+	    && (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++;
+	    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;
+		p->f = FALSE;
+		return 0;
+	    }
+	}
+
+	if ((tama_lv2[i1].x + 64 + 64 > ex)
+	    && (ex + w > tama_lv2[i1].x + 16)
+	    && (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++;
+	    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;
+		p->f = FALSE;
+		return 0;
+	    }
+	}
+	if ((tama_lv2[i1].x + 64 > ex) && (ex + w > tama_lv2[i1].x)
+	    && (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++;
+	    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;
+		p->f = FALSE;
+		return 0;
+	    }
+	}
+	if ((tama_lv2[i1].x - 64 + 64 > ex)
+	    && (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++;
+	    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;
+		p->f = FALSE;
+		return 0;
+	    }
+	}
+    }
+    if ((tlv3[0].r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
+	&& (jiki->y > ey + h)) {
+	p->vit -= TAMALV3P;
+	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;
+	    p->f = FALSE;
+	    return 0;
+	}
+    }
+  jumping:
+    if ((tlv3[0].r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
+	&& (jiki->y + 128 > ey) && (jiki->y < ey + h)) {
+	p->vit -= TAMALV3P;
+	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;
+	    p->f = FALSE;
+	    return 0;
+	}
+    }
+    /*laser lv1 */
+    for (i1 = 0; i1 < laser_lv1_end + 1; i1++) {
+	n = laser_lv1[i1].r * 128 / 4096;
+
+	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++;
+	    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;
+		p->f = FALSE;
+		return 0;
+	    }
+	}
+    }
+    /*shield(laser lv2) */
+    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++;
+	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;
+	    p->f = FALSE;
+	    return 0;
+	}
+    }
+    /*bomber(laser lv3) */
+    if (laser_lv3[0].r < 62) {
+	for (i1 = 1; i1 < 128; 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++;
+		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;
+		    p->f = FALSE;
+		    return 0;
+		}
+	    }
+	}
+    }
+    smanager->swap();
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/collision.h	Mon Dec 13 04:56:23 2010 +0900
@@ -0,0 +1,6 @@
+#ifndef INCLUDE_COLLISION
+#define INCLUDE_COLLISION
+
+#include "SchedTask.h"
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/task_init.cc	Mon Dec 13 04:56:23 2010 +0900
@@ -0,0 +1,16 @@
+#include "../Func.h"
+#include "Scheduler.h"
+
+/* 必ずこの位置に書いて */
+SchedExternTask(Atari);
+
+/**
+ * この関数は ../spe/spe-main と違って
+ * 自分で呼び出せばいい関数なので
+ * 好きな関数名でおk (SchedRegisterTask は必須)
+ */
+void
+task_init(void)
+{
+  SchedRegister(Atari);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ppe/tobject.h	Mon Dec 13 04:56:23 2010 +0900
@@ -0,0 +1,96 @@
+#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;
+
+CHARACTER * noaction(CHARACTER *p);
+CHARACTER * delete_chara(CHARACTER *p);
+extern void Bom(int x, int y, int bchar, bomchar bchar);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/task_dandy.h	Mon Dec 13 04:56:23 2010 +0900
@@ -0,0 +1,6 @@
+#ifndef INCLUDE_TASK_DANDY
+#define INCLUDE_TASK_DANDY
+
+extern TaskManager *tmanager;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tcollision.cc	Mon Dec 13 04:56:23 2010 +0900
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <SDL.h>
+#include "SDL_opengl.h"
+#include "object.h"
+#include "Character.h"
+#include "Character_state.h"
+#include "tokuten.h"
+#include "collision.h"
+#include "bom.h"
+#include "count2.h"
+#include "sgoex.h"
+#include "TaskManager.h"
+#include "Func.h"
+#include "task_dandy.h"
+
+extern SpriteTable sptable[DEFOBJ];
+
+CHARACTER * atari(CHARACTER *p)
+{
+    int w, h, charno;
+
+    charno = p->charano;
+    w = sptable[charno].w;
+    h = sptable[charno].h;
+
+    HTaskPtr collision = tmanager->create_task(Atari);
+    collision->set_param(0,(memaddr)w);
+    collision->set_param(1,(memaddr)h);
+    collision->set_param(2,(memaddr)enemycount);
+    collision->set_param(3,(memaddr)bomend);
+    collision->set_param(4,(memaddr)tama_lv1_end);
+    collision->set_param(5,(memaddr)tama_lv2_end);
+    collision->set_param(6,(memaddr)laser_lv1_end);
+    collision->set_param(7,(memaddr)infg_level);
+    
+    collision->add_inData(&jiki, sizeof(player));
+    collision->add_inData(tama_lv1, sizeof(tama1)*tama_lv1_end);
+    collision->add_inData(tama_lv2, sizeof(tama2)*tama_lv2_end);
+    collision->add_inData(&tlv3[0], sizeof(tama1));
+    collision->add_inData(laser_lv1, sizeof(laser)*laser_lv1_end);
+    collision->add_inData(&laser_lv2[0], sizeof(laser));
+    collision->add_inData(laser_lv3, sizeof(laser)*128);
+    collision->add_inData(&bchar[0], sizeof(bomchar));
+    collision->add_inData(&p, sizeof(CHARACTER));
+    collision->add_inData(&lg, sizeof(stge));
+    collision->add_inData(&infg, sizeof(stge));
+
+    collision->add_outData(&jiki, sizeof(player));
+    collision->add_outData(tama_lv1, sizeof(tama1)*tama_lv1_end);
+    collision->add_outData(tama_lv2, sizeof(tama2)*tama_lv2_end);
+    collision->add_outData(&tlv3[0], sizeof(tama1));
+    collision->add_outData(laser_lv1, sizeof(laser)*laser_lv1_end);
+    collision->add_outData(&laser_lv2[0], sizeof(laser));
+    collision->add_outData(laser_lv3, sizeof(laser)*128);
+    collision->add_outData(&bchar[0], sizeof(bomchar));
+    collision->add_outData(&p, sizeof(CHARACTER));
+    collision->add_outData(&lg, sizeof(stge));
+    collision->add_outData(&infg, sizeof(stge));
+
+    collision->set_cpu(SPE_ANY);
+    collision->spawn();
+
+    return p;
+}