# HG changeset patch # User koba # Date 1292183783 -32400 # Node ID b4c797eee72a2c67d9404fdd471fadf2187e6e22 # Parent 435ac1cdb64edbb98b09e0d481277ac425d38b4c task dandy base diff -r 435ac1cdb64e -r b4c797eee72a Dandy.cc --- 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 #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; diff -r 435ac1cdb64e -r b4c797eee72a Dandy.h --- 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); diff -r 435ac1cdb64e -r b4c797eee72a Func.h --- 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" +}; diff -r 435ac1cdb64e -r b4c797eee72a Makefile --- 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 diff -r 435ac1cdb64e -r b4c797eee72a bom.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]; diff -r 435ac1cdb64e -r b4c797eee72a collision.c --- 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) diff -r 435ac1cdb64e -r b4c797eee72a ppe/collision.cc --- /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; +} diff -r 435ac1cdb64e -r b4c797eee72a ppe/collision.h --- /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 diff -r 435ac1cdb64e -r b4c797eee72a ppe/task_init.cc --- /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); +} diff -r 435ac1cdb64e -r b4c797eee72a ppe/tobject.h --- /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 diff -r 435ac1cdb64e -r b4c797eee72a task_dandy.h --- /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 diff -r 435ac1cdb64e -r b4c797eee72a tcollision.cc --- /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 +#include +#include +#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; +}