Mercurial > hg > Members > koba > t_dandy
view ppe/Atari.cc @ 49:f4140672ef9f
fix.
author | koba <koba@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 21 Jan 2011 22:18:28 +0900 |
parents | 6989f8cb0259 |
children | 2e123c4bf5ca 21ac9f57a6d4 |
line wrap: on
line source
#include "task_base.h" #include "task_object.h" SchedDefineTask1(Atari, atari); static int atari(SchedTask *smanager, void *rbuf, void *wbuf) { int w = (int)smanager->get_param(0); int h = (int)smanager->get_param(1); int tama_lv1_end = (int)smanager->get_param(2); int tama_lv2_end = (int)smanager->get_param(3); int laser_lv1_end = (int)smanager->get_param(4); CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0); player *jiki = (player*)smanager->get_input(rbuf, 1); stge *lg = (stge*)smanager->get_input(rbuf, 2); stge *infg = (stge*)smanager->get_input(rbuf, 3); int *infg_level = (int*)smanager->get_input(rbuf, 4); CollisionPropertyPtr property = (CollisionPropertyPtr)smanager->get_input(rbuf, 5); int *enemycount = &property->enemycount; tama1 *tlv3 = &property->tlv3; tama1 *tama_lv1 = property->tama_lv1; tama2 *tama_lv2 = property->tama_lv2; laser *laser_lv1 = property->laser_lv1; laser *laser_lv2 = &property->laser_lv2; laser *laser_lv3 = property->laser_lv3; int i1, ex, ey; int n; ex = p->x; ey = p->y; int length = 1; smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1)); smanager->setup_outputData(); CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0); CollisionPropertyPtr w_property = (CollisionPropertyPtr)smanager->get_output(wbuf, 1); ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2); sprite->flag = false; sprite->length = length; //自機やられ #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) { sprite->flag = true; Bom(jiki->x + 16, jiki->y + 16, &sprite->data[0]); jiki->bf = FALSE; jiki->zanki--; jiki->muteki = 120; infg->stg = 0; *infg_level--; if (*infg_level < 0) *infg_level = 0; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; 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; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; 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; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; 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; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; 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; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; 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; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; 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; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; return 0; } } } if ((tlv3->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; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; return 0; } } 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++; if (p->vit <= 0) { infg->stg += 4; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; 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; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; 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; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; 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; sprite->flag = true; Bom(p->x, p->y, &sprite->data[0]); *enemycount += (p->score * ((infg->stg / 128) + *infg_level + 1)); p->task = DELETE_CHARA; p->f = FALSE; property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; return 0; } } } } property->infg_level = *infg_level; property->jiki = *jiki; property->lg = *lg; property->infg = *infg; *q = *p; *w_property = *property; return 0; }