21
|
1 #include "task_base.h"
|
19
|
2 #include "task_object.h"
|
2
|
3
|
33
|
4 SchedDefineTask1(Atari, atari);
|
2
|
5
|
|
6 static int
|
33
|
7 atari(SchedTask *smanager, void *rbuf, void *wbuf)
|
2
|
8 {
|
67
|
9 long w = (long)smanager->get_param(0);
|
|
10 long h = (long)smanager->get_param(1);
|
|
11 long tama_lv1_end = (long)smanager->get_param(2);
|
|
12 long tama_lv2_end = (long)smanager->get_param(3);
|
|
13 long laser_lv1_end = (long)smanager->get_param(4);
|
2
|
14
|
34
|
15 CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
|
|
16 player *jiki = (player*)smanager->get_input(rbuf, 1);
|
|
17 stge *lg = (stge*)smanager->get_input(rbuf, 2);
|
|
18 stge *infg = (stge*)smanager->get_input(rbuf, 3);
|
|
19 int *infg_level = (int*)smanager->get_input(rbuf, 4);
|
2
|
20 CollisionPropertyPtr property
|
37
|
21 = (CollisionPropertyPtr)smanager->get_input(rbuf, 5);
|
2
|
22
|
19
|
23 int *enemycount = &property->enemycount;
|
34
|
24 tama1 *tlv3 = &property->tlv3;
|
2
|
25
|
|
26 tama1 *tama_lv1 = property->tama_lv1;
|
|
27 tama2 *tama_lv2 = property->tama_lv2;
|
|
28 laser *laser_lv1 = property->laser_lv1;
|
34
|
29 laser *laser_lv2 = &property->laser_lv2;
|
2
|
30 laser *laser_lv3 = property->laser_lv3;
|
|
31
|
|
32 int i1, ex, ey;
|
|
33 int n;
|
|
34 ex = p->x;
|
|
35 ey = p->y;
|
|
36
|
37
|
37 int length = 1;
|
|
38 smanager->set_outputSize(2, sizeof(ObjContainer)+sizeof(ObjData)*(length-1));
|
|
39 smanager->setup_outputData();
|
|
40
|
34
|
41 CHARACTER *q = (CHARACTER*)smanager->get_output(wbuf, 0);
|
|
42 CollisionPropertyPtr w_property
|
|
43 = (CollisionPropertyPtr)smanager->get_output(wbuf, 1);
|
37
|
44 ObjContainerPtr sprite = (ObjContainerPtr)smanager->get_output(wbuf, 2);
|
|
45 sprite->flag = false;
|
|
46 sprite->length = length;
|
34
|
47
|
2
|
48 //自機やられ
|
|
49 #ifndef INVISIBLE_MODE
|
34
|
50 if ((ex < jiki->x + 128 / 2) && (ex + w > jiki->x + 128 / 2)
|
|
51 && (ey < jiki->y + 128 / 2) && (ey + h > jiki->y + 128 / 2)
|
|
52 && jiki->muteki == 0) {
|
37
|
53 sprite->flag = true;
|
|
54 Bom(jiki->x + 16, jiki->y + 16, &sprite->data[0]);
|
34
|
55 jiki->bf = FALSE;
|
|
56 jiki->zanki--;
|
|
57 jiki->muteki = 120;
|
37
|
58
|
2
|
59
|
34
|
60 infg->stg = 0;
|
|
61 *infg_level--;
|
|
62 if (*infg_level < 0)
|
|
63 *infg_level = 0;
|
2
|
64
|
34
|
65 property->infg_level = *infg_level;
|
|
66 property->jiki = *jiki;
|
|
67 property->lg = *lg;
|
|
68 property->infg = *infg;
|
|
69
|
|
70 *q = *p;
|
|
71 *w_property = *property;
|
2
|
72 return 0;
|
|
73 }
|
|
74 #endif
|
|
75
|
|
76 if (p->tama == TRUE)
|
|
77 goto jumping;
|
|
78 for (i1 = 0; i1 < tama_lv1_end + 1; i1++) {
|
|
79
|
|
80 if ((tama_lv1[i1].x + 64 + 64 > ex)
|
|
81 && (ex + w > tama_lv1[i1].x + 16)
|
|
82 && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
|
|
83 && (tama_lv1[i1].r != -1)) {
|
|
84 tama_lv1[i1].r = -1;
|
|
85 p->vit -= TAMALV1P;
|
34
|
86 infg->stg++;
|
2
|
87 if (p->vit <= 0) {
|
34
|
88 infg->stg += 4;
|
37
|
89 sprite->flag = true;
|
|
90 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
91 *enemycount += (p->score *
|
|
92 ((infg->stg / 128) + *infg_level + 1));
|
19
|
93 p->task = DELETE_CHARA;
|
2
|
94 p->f = FALSE;
|
|
95
|
34
|
96 property->infg_level = *infg_level;
|
|
97 property->jiki = *jiki;
|
|
98 property->lg = *lg;
|
|
99 property->infg = *infg;
|
|
100
|
|
101 *q = *p;
|
|
102 *w_property = *property;
|
2
|
103 return 0;
|
|
104 }
|
|
105 }
|
|
106 if ((tama_lv1[i1].x + 64 > ex) && (ex + w > tama_lv1[i1].x)
|
|
107 && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
|
|
108 && (tama_lv1[i1].l != -1)) {
|
|
109 tama_lv1[i1].l = -1;
|
|
110 p->vit -= TAMALV1P;
|
34
|
111 infg->stg++;
|
2
|
112 if (p->vit <= 0) {
|
34
|
113 infg->stg += 4;
|
37
|
114 sprite->flag = true;
|
|
115 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
116 *enemycount += (p->score *
|
|
117 ((infg->stg / 128) + *infg_level + 1));
|
19
|
118 p->task = DELETE_CHARA;
|
2
|
119 p->f = FALSE;
|
|
120
|
34
|
121 property->infg_level = *infg_level;
|
|
122 property->jiki = *jiki;
|
|
123 property->lg = *lg;
|
|
124 property->infg = *infg;
|
|
125
|
|
126 *q = *p;
|
|
127 *w_property = *property;
|
2
|
128 return 0;
|
|
129 }
|
|
130 }
|
|
131 }
|
|
132
|
|
133 for (i1 = 0; i1 < tama_lv2_end + 1; i1++) {
|
|
134 if ((tama_lv2[i1].x + 128 + 64 > ex)
|
|
135 && (ex + w > tama_lv2[i1].x + 128)
|
|
136 && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
|
|
137 && (tama_lv2[i1].rr != -1)) {
|
|
138 tama_lv2[i1].rr = -1;
|
|
139 p->vit -= TAMALV2P;
|
34
|
140 infg->stg++;
|
2
|
141 if (p->vit <= 0) {
|
34
|
142 infg->stg += 4;
|
37
|
143 sprite->flag = true;
|
|
144 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
145 *enemycount += (p->score *
|
|
146 ((infg->stg / 128) + *infg_level + 1));
|
19
|
147 p->task = DELETE_CHARA;
|
2
|
148 p->f = FALSE;
|
|
149
|
34
|
150 property->infg_level = *infg_level;
|
|
151 property->jiki = *jiki;
|
|
152 property->lg = *lg;
|
|
153 property->infg = *infg;
|
|
154
|
|
155 *q = *p;
|
|
156 *w_property = *property;
|
2
|
157 return 0;
|
|
158 }
|
|
159 }
|
|
160
|
|
161 if ((tama_lv2[i1].x + 64 + 64 > ex)
|
|
162 && (ex + w > tama_lv2[i1].x + 16)
|
|
163 && (tama_lv2[i1].y - 32 + 192 > ey)
|
|
164 && (tama_lv2[i1].y - 32 < ey + h)
|
|
165 && (tama_lv2[i1].sr != -1)) {
|
|
166 tama_lv2[i1].sr = -1;
|
|
167 p->vit -= TAMALV2P;
|
34
|
168 infg->stg++;
|
2
|
169 if (p->vit <= 0) {
|
34
|
170 infg->stg += 4;
|
37
|
171 sprite->flag = true;
|
|
172 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
173 *enemycount += (p->score *
|
|
174 ((infg->stg / 128) + *infg_level + 1));
|
19
|
175 p->task = DELETE_CHARA;
|
2
|
176 p->f = FALSE;
|
|
177
|
34
|
178 property->infg_level = *infg_level;
|
|
179 property->jiki = *jiki;
|
|
180 property->lg = *lg;
|
|
181 property->infg = *infg;
|
|
182
|
|
183 *q = *p;
|
|
184 *w_property = *property;
|
2
|
185 return 0;
|
|
186 }
|
|
187 }
|
|
188 if ((tama_lv2[i1].x + 64 > ex) && (ex + w > tama_lv2[i1].x)
|
|
189 && (tama_lv2[i1].y - 32 + 192 > ey)
|
|
190 && (tama_lv2[i1].y - 32 < ey + h)
|
|
191 && (tama_lv2[i1].sl != -1)) {
|
|
192 tama_lv2[i1].sl = -1;
|
|
193 p->vit -= TAMALV2P;
|
34
|
194 infg->stg++;
|
2
|
195 if (p->vit <= 0) {
|
34
|
196 infg->stg += 4;
|
37
|
197 sprite->flag = true;
|
|
198 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
199 *enemycount += (p->score *
|
|
200 ((infg->stg / 128) + *infg_level + 1));
|
19
|
201 p->task = DELETE_CHARA;
|
2
|
202 p->f = FALSE;
|
|
203
|
34
|
204 property->infg_level = *infg_level;
|
|
205 property->jiki = *jiki;
|
|
206 property->lg = *lg;
|
|
207 property->infg = *infg;
|
|
208
|
|
209 *q = *p;
|
|
210 *w_property = *property;
|
2
|
211 return 0;
|
|
212 }
|
|
213 }
|
|
214 if ((tama_lv2[i1].x - 64 + 64 > ex)
|
|
215 && (ex + w > tama_lv2[i1].x - 64)
|
|
216 && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
|
|
217 && (tama_lv2[i1].ll != -1)) {
|
|
218 tama_lv2[i1].ll = -1;
|
|
219 p->vit -= TAMALV2P;
|
34
|
220 infg->stg++;
|
2
|
221 if (p->vit <= 0) {
|
34
|
222 infg->stg += 4;
|
37
|
223 sprite->flag = true;
|
|
224 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
225 *enemycount += (p->score *
|
|
226 ((infg->stg / 128) + *infg_level + 1));
|
19
|
227 p->task = DELETE_CHARA;
|
2
|
228 p->f = FALSE;
|
|
229
|
34
|
230 property->infg_level = *infg_level;
|
|
231 property->jiki = *jiki;
|
|
232 property->lg = *lg;
|
|
233 property->infg = *infg;
|
|
234
|
|
235 *q = *p;
|
|
236 *w_property = *property;
|
2
|
237 return 0;
|
|
238 }
|
|
239 }
|
|
240 }
|
34
|
241 if ((tlv3->r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
|
|
242 && (jiki->y > ey + h)) {
|
2
|
243 p->vit -= TAMALV3P;
|
34
|
244 infg->stg++;
|
2
|
245 if (p->vit <= 0) {
|
34
|
246 infg->stg += 4;
|
37
|
247 sprite->flag = true;
|
|
248 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
249 *enemycount += (p->score *
|
|
250 ((infg->stg / 128) + *infg_level + 1));
|
19
|
251 p->task = DELETE_CHARA;
|
2
|
252 p->f = FALSE;
|
|
253
|
34
|
254 property->infg_level = *infg_level;
|
|
255 property->jiki = *jiki;
|
|
256 property->lg = *lg;
|
|
257 property->infg = *infg;
|
|
258
|
|
259 *q = *p;
|
|
260 *w_property = *property;
|
2
|
261 return 0;
|
|
262 }
|
|
263 }
|
|
264 jumping:
|
34
|
265 if ((tlv3->r > 0) && (jiki->x < ex + w) && (jiki->x + 128 > ex)
|
|
266 && (jiki->y + 128 > ey) && (jiki->y < ey + h)) {
|
2
|
267 p->vit -= TAMALV3P;
|
34
|
268 infg->stg++;
|
2
|
269 if (p->vit <= 0) {
|
34
|
270 infg->stg += 4;
|
37
|
271 sprite->flag = true;
|
|
272 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
273 *enemycount += (p->score *
|
|
274 ((infg->stg / 128) + *infg_level + 1));
|
19
|
275 p->task = DELETE_CHARA;
|
2
|
276 p->f = FALSE;
|
|
277
|
34
|
278 property->infg_level = *infg_level;
|
|
279 property->jiki = *jiki;
|
|
280 property->lg = *lg;
|
|
281 property->infg = *infg;
|
|
282
|
|
283 *q = *p;
|
|
284 *w_property = *property;
|
2
|
285 return 0;
|
|
286 }
|
|
287 }
|
|
288 /*laser lv1 */
|
|
289 for (i1 = 0; i1 < laser_lv1_end + 1; i1++) {
|
|
290 n = laser_lv1[i1].r * 128 / 4096;
|
|
291
|
|
292 if ((laser_lv1[i1].x + n > ex) && (ex + w > laser_lv1[i1].x)
|
|
293 && (laser_lv1[i1].y + n > ey) && (laser_lv1[i1].y < ey + h)
|
|
294 && (laser_lv1[i1].r != -1)) {
|
|
295 laser_lv1[i1].r = -1;
|
|
296 laser_lv1[i1].y = -1;
|
|
297 p->vit -= LASERLV1P;
|
34
|
298 infg->stg++;
|
2
|
299 if (p->vit <= 0) {
|
34
|
300 infg->stg += 4;
|
37
|
301 sprite->flag = true;
|
|
302 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
303 *enemycount += (p->score *
|
|
304 ((infg->stg / 128) + *infg_level + 1));
|
19
|
305 p->task = DELETE_CHARA;
|
2
|
306 p->f = FALSE;
|
|
307
|
34
|
308 property->infg_level = *infg_level;
|
|
309 property->jiki = *jiki;
|
|
310 property->lg = *lg;
|
|
311 property->infg = *infg;
|
|
312
|
|
313 *q = *p;
|
|
314 *w_property = *property;
|
2
|
315 return 0;
|
|
316 }
|
|
317 }
|
|
318 }
|
|
319 /*shield(laser lv2) */
|
34
|
320 if ((p->tama == TRUE) && (lg->stg > 0) &&
|
2
|
321 (laser_lv2[0].x + 128 > ex) && (ex + w > laser_lv2[0].x - 128)
|
|
322 && (laser_lv2[0].y + 128 > ey) && (laser_lv2[0].y - 128 < ey + h)
|
|
323 && (laser_lv2[0].r != 0)) {
|
|
324 p->vit -= LASERLV2P;
|
34
|
325 lg->stg -= 26;
|
|
326 infg->stg++;
|
2
|
327 if (p->vit <= 0) {
|
34
|
328 infg->stg += 4;
|
37
|
329 sprite->flag = true;
|
|
330 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
331 *enemycount += (p->score *
|
|
332 ((infg->stg / 128) + *infg_level + 1));
|
19
|
333 p->task = DELETE_CHARA;
|
2
|
334 p->f = FALSE;
|
|
335
|
34
|
336 property->infg_level = *infg_level;
|
|
337 property->jiki = *jiki;
|
|
338 property->lg = *lg;
|
|
339 property->infg = *infg;
|
|
340
|
|
341 *q = *p;
|
|
342 *w_property = *property;
|
2
|
343 return 0;
|
|
344 }
|
|
345 }
|
|
346 /*bomber(laser lv3) */
|
|
347 if (laser_lv3[0].r < 62) {
|
|
348 for (i1 = 1; i1 < 128; i1++) {
|
|
349 if ((laser_lv3[i1].x + 128 > ex) && (ex + w > laser_lv3[i1].x)
|
|
350 && (laser_lv3[i1].y + 128 > ey)
|
|
351 && (laser_lv3[i1].y < ey + h)
|
|
352 && (laser_lv3[i1].r > 0)) {
|
|
353 tama_lv2[i1].rr = -1;
|
|
354 p->vit -= LASERLV3P;
|
34
|
355 infg->stg++;
|
2
|
356 if (p->vit <= 0) {
|
34
|
357 infg->stg += 4;
|
37
|
358 sprite->flag = true;
|
|
359 Bom(p->x, p->y, &sprite->data[0]);
|
34
|
360 *enemycount += (p->score *
|
|
361 ((infg->stg / 128) + *infg_level + 1));
|
19
|
362 p->task = DELETE_CHARA;
|
2
|
363 p->f = FALSE;
|
|
364
|
34
|
365 property->infg_level = *infg_level;
|
|
366 property->jiki = *jiki;
|
|
367 property->lg = *lg;
|
|
368 property->infg = *infg;
|
|
369
|
|
370 *q = *p;
|
|
371 *w_property = *property;
|
2
|
372 return 0;
|
|
373 }
|
|
374 }
|
|
375 }
|
|
376 }
|
34
|
377
|
|
378 property->infg_level = *infg_level;
|
|
379 property->jiki = *jiki;
|
|
380 property->lg = *lg;
|
|
381 property->infg = *infg;
|
|
382
|
|
383 *q = *p;
|
|
384 *w_property = *property;
|
2
|
385 return 0;
|
|
386 }
|