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 {
|
|
9 int w = (int)smanager->get_param(0);
|
|
10 int h = (int)smanager->get_param(1);
|
19
|
11 int tama_lv1_end = (int)smanager->get_param(2);
|
|
12 int tama_lv2_end = (int)smanager->get_param(3);
|
|
13 int laser_lv1_end = (int)smanager->get_param(4);
|
2
|
14
|
28
|
15 CHARACTER *p = (CHARACTER*)smanager->get_input(rbuf, 0);
|
2
|
16 CollisionPropertyPtr property
|
28
|
17 = (CollisionPropertyPtr)smanager->get_input(rbuf, 1);
|
2
|
18
|
19
|
19 int *bomend = &property->bomend;
|
|
20 int *enemycount = &property->enemycount;
|
8
|
21 int infg_level = property->infg_level;
|
2
|
22 stge lg = property->lg;
|
|
23 stge infg = property->infg;
|
19
|
24 player jiki = property->jiki;
|
|
25 tama1 tlv3 = property->tlv3;
|
2
|
26
|
|
27 tama1 *tama_lv1 = property->tama_lv1;
|
|
28 tama2 *tama_lv2 = property->tama_lv2;
|
|
29 laser *laser_lv1 = property->laser_lv1;
|
|
30 laser *laser_lv2 = property->laser_lv2;
|
|
31 laser *laser_lv3 = property->laser_lv3;
|
|
32 bomchar *bchar = property->bchar;
|
|
33
|
|
34 int i1, ex, ey;
|
|
35 int n;
|
|
36 ex = p->x;
|
|
37 ey = p->y;
|
|
38
|
|
39 //自機やられ
|
|
40 #ifndef INVISIBLE_MODE
|
19
|
41 if ((ex < jiki.x + 128 / 2) && (ex + w > jiki.x + 128 / 2)
|
|
42 && (ey < jiki.y + 128 / 2) && (ey + h > jiki.y + 128 / 2)
|
|
43 && jiki.muteki == 0) {
|
|
44 Bom(jiki.x + 16, jiki.y + 16, bomend, bchar);
|
|
45 jiki.bf = FALSE;
|
|
46 jiki.zanki--;
|
|
47 jiki.muteki = 120;
|
2
|
48
|
|
49 infg.stg = 0;
|
|
50 infg_level--;
|
|
51 if (infg_level < 0)
|
|
52 infg_level = 0;
|
|
53
|
8
|
54 property->infg_level = infg_level;
|
2
|
55 property->infg = infg;
|
19
|
56 property->jiki = jiki;
|
2
|
57 smanager->swap();
|
|
58 return 0;
|
|
59 }
|
|
60 #endif
|
|
61
|
|
62 if (p->tama == TRUE)
|
|
63 goto jumping;
|
|
64 for (i1 = 0; i1 < tama_lv1_end + 1; i1++) {
|
|
65
|
|
66 if ((tama_lv1[i1].x + 64 + 64 > ex)
|
|
67 && (ex + w > tama_lv1[i1].x + 16)
|
|
68 && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
|
|
69 && (tama_lv1[i1].r != -1)) {
|
|
70 tama_lv1[i1].r = -1;
|
|
71 p->vit -= TAMALV1P;
|
|
72 infg.stg++;
|
|
73 if (p->vit <= 0) {
|
|
74 infg.stg += 4;
|
|
75 Bom(p->x, p->y, bomend, bchar);
|
|
76 enemycount += (p->score *
|
|
77 ((infg.stg / 128) + infg_level + 1));
|
19
|
78 p->task = DELETE_CHARA;
|
|
79 // p->collision = noaction;
|
2
|
80 p->f = FALSE;
|
|
81
|
|
82 property->infg = infg;
|
|
83 smanager->swap();
|
|
84 return 0;
|
|
85 }
|
|
86 }
|
|
87 if ((tama_lv1[i1].x + 64 > ex) && (ex + w > tama_lv1[i1].x)
|
|
88 && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
|
|
89 && (tama_lv1[i1].l != -1)) {
|
|
90 tama_lv1[i1].l = -1;
|
|
91 p->vit -= TAMALV1P;
|
|
92 infg.stg++;
|
|
93 if (p->vit <= 0) {
|
|
94 infg.stg += 4;
|
|
95 Bom(p->x, p->y, bomend, bchar);
|
|
96 enemycount += (p->score *
|
|
97 ((infg.stg / 128) + infg_level + 1));
|
19
|
98 p->task = DELETE_CHARA;
|
|
99 // p->collision = noaction;
|
2
|
100 p->f = FALSE;
|
|
101
|
|
102 property->infg = infg;
|
|
103 smanager->swap();
|
|
104 return 0;
|
|
105 }
|
|
106 }
|
|
107 }
|
|
108
|
|
109 for (i1 = 0; i1 < tama_lv2_end + 1; i1++) {
|
|
110 if ((tama_lv2[i1].x + 128 + 64 > ex)
|
|
111 && (ex + w > tama_lv2[i1].x + 128)
|
|
112 && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
|
|
113 && (tama_lv2[i1].rr != -1)) {
|
|
114 tama_lv2[i1].rr = -1;
|
|
115 p->vit -= TAMALV2P;
|
|
116 infg.stg++;
|
|
117 if (p->vit <= 0) {
|
|
118 infg.stg += 4;
|
|
119 Bom(p->x, p->y, bomend, bchar);
|
|
120 enemycount += (p->score *
|
|
121 ((infg.stg / 128) + infg_level + 1));
|
19
|
122 p->task = DELETE_CHARA;
|
|
123 // p->collision = noaction;
|
2
|
124 p->f = FALSE;
|
|
125
|
|
126 property->infg = infg;
|
|
127 smanager->swap();
|
|
128 return 0;
|
|
129 }
|
|
130 }
|
|
131
|
|
132 if ((tama_lv2[i1].x + 64 + 64 > ex)
|
|
133 && (ex + w > tama_lv2[i1].x + 16)
|
|
134 && (tama_lv2[i1].y - 32 + 192 > ey)
|
|
135 && (tama_lv2[i1].y - 32 < ey + h)
|
|
136 && (tama_lv2[i1].sr != -1)) {
|
|
137 tama_lv2[i1].sr = -1;
|
|
138 p->vit -= TAMALV2P;
|
|
139 infg.stg++;
|
|
140 if (p->vit <= 0) {
|
|
141 infg.stg += 4;
|
|
142 Bom(p->x, p->y, bomend, bchar);
|
|
143 enemycount += (p->score *
|
|
144 ((infg.stg / 128) + infg_level + 1));
|
19
|
145 p->task = DELETE_CHARA;
|
|
146 // p->collision = noaction;
|
2
|
147 p->f = FALSE;
|
|
148
|
|
149 property->infg = infg;
|
|
150 smanager->swap();
|
|
151 return 0;
|
|
152 }
|
|
153 }
|
|
154 if ((tama_lv2[i1].x + 64 > ex) && (ex + w > tama_lv2[i1].x)
|
|
155 && (tama_lv2[i1].y - 32 + 192 > ey)
|
|
156 && (tama_lv2[i1].y - 32 < ey + h)
|
|
157 && (tama_lv2[i1].sl != -1)) {
|
|
158 tama_lv2[i1].sl = -1;
|
|
159 p->vit -= TAMALV2P;
|
|
160 infg.stg++;
|
|
161 if (p->vit <= 0) {
|
|
162 infg.stg += 4;
|
|
163 Bom(p->x, p->y, bomend, bchar);
|
|
164 enemycount += (p->score *
|
|
165 ((infg.stg / 128) + infg_level + 1));
|
19
|
166 p->task = DELETE_CHARA;
|
|
167 // p->collision = noaction;
|
2
|
168 p->f = FALSE;
|
|
169
|
|
170 property->infg = infg;
|
|
171 smanager->swap();
|
|
172 return 0;
|
|
173 }
|
|
174 }
|
|
175 if ((tama_lv2[i1].x - 64 + 64 > ex)
|
|
176 && (ex + w > tama_lv2[i1].x - 64)
|
|
177 && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
|
|
178 && (tama_lv2[i1].ll != -1)) {
|
|
179 tama_lv2[i1].ll = -1;
|
|
180 p->vit -= TAMALV2P;
|
|
181 infg.stg++;
|
|
182 if (p->vit <= 0) {
|
|
183 infg.stg += 4;
|
|
184 Bom(p->x, p->y, bomend, bchar);
|
|
185 enemycount += (p->score *
|
|
186 ((infg.stg / 128) + infg_level + 1));
|
19
|
187 p->task = DELETE_CHARA;
|
|
188 // p->collision = noaction;
|
2
|
189 p->f = FALSE;
|
|
190
|
|
191 property->infg = infg;
|
|
192 smanager->swap();
|
|
193 return 0;
|
|
194 }
|
|
195 }
|
|
196 }
|
19
|
197 if ((tlv3.r > 0) && (jiki.x < ex + w) && (jiki.x + 128 > ex)
|
|
198 && (jiki.y > ey + h)) {
|
2
|
199 p->vit -= TAMALV3P;
|
|
200 infg.stg++;
|
|
201 if (p->vit <= 0) {
|
|
202 infg.stg += 4;
|
|
203 Bom(p->x, p->y, bomend, bchar);
|
|
204 enemycount += (p->score *
|
|
205 ((infg.stg / 128) + infg_level + 1));
|
19
|
206 p->task = DELETE_CHARA;
|
|
207 // p->collision = noaction;
|
2
|
208 p->f = FALSE;
|
|
209
|
|
210 property->infg = infg;
|
|
211 smanager->swap();
|
|
212 return 0;
|
|
213 }
|
|
214 }
|
|
215 jumping:
|
19
|
216 if ((tlv3.r > 0) && (jiki.x < ex + w) && (jiki.x + 128 > ex)
|
|
217 && (jiki.y + 128 > ey) && (jiki.y < ey + h)) {
|
2
|
218 p->vit -= TAMALV3P;
|
|
219 infg.stg++;
|
|
220 if (p->vit <= 0) {
|
|
221 infg.stg += 4;
|
|
222 Bom(p->x, p->y, bomend, bchar);
|
|
223 enemycount += (p->score *
|
|
224 ((infg.stg / 128) + infg_level + 1));
|
19
|
225 p->task = DELETE_CHARA;
|
|
226 // p->collision = noaction;
|
2
|
227 p->f = FALSE;
|
|
228
|
|
229 property->infg = infg;
|
|
230 smanager->swap();
|
|
231 return 0;
|
|
232 }
|
|
233 }
|
|
234 /*laser lv1 */
|
|
235 for (i1 = 0; i1 < laser_lv1_end + 1; i1++) {
|
|
236 n = laser_lv1[i1].r * 128 / 4096;
|
|
237
|
|
238 if ((laser_lv1[i1].x + n > ex) && (ex + w > laser_lv1[i1].x)
|
|
239 && (laser_lv1[i1].y + n > ey) && (laser_lv1[i1].y < ey + h)
|
|
240 && (laser_lv1[i1].r != -1)) {
|
|
241 laser_lv1[i1].r = -1;
|
|
242 laser_lv1[i1].y = -1;
|
|
243 p->vit -= LASERLV1P;
|
|
244 infg.stg++;
|
|
245 if (p->vit <= 0) {
|
|
246 infg.stg += 4;
|
|
247 Bom(p->x, p->y, bomend, bchar);
|
|
248 enemycount += (p->score *
|
|
249 ((infg.stg / 128) + infg_level + 1));
|
19
|
250 p->task = DELETE_CHARA;
|
|
251 // p->collision = noaction;
|
2
|
252 p->f = FALSE;
|
|
253
|
|
254 property->infg = infg;
|
|
255 smanager->swap();
|
|
256 return 0;
|
|
257 }
|
|
258 }
|
|
259 }
|
|
260 /*shield(laser lv2) */
|
|
261 if ((p->tama == TRUE) && (lg.stg > 0) &&
|
|
262 (laser_lv2[0].x + 128 > ex) && (ex + w > laser_lv2[0].x - 128)
|
|
263 && (laser_lv2[0].y + 128 > ey) && (laser_lv2[0].y - 128 < ey + h)
|
|
264 && (laser_lv2[0].r != 0)) {
|
|
265 p->vit -= LASERLV2P;
|
|
266 lg.stg -= 26;
|
|
267 infg.stg++;
|
|
268 if (p->vit <= 0) {
|
|
269 infg.stg += 4;
|
|
270 Bom(p->x, p->y, bomend, bchar);
|
|
271 enemycount += (p->score *
|
|
272 ((infg.stg / 128) + infg_level + 1));
|
19
|
273 p->task = DELETE_CHARA;
|
|
274 // p->collision = noaction;
|
2
|
275 p->f = FALSE;
|
|
276
|
|
277 property->lg = lg;
|
|
278 property->infg = infg;
|
|
279 smanager->swap();
|
|
280 return 0;
|
|
281 }
|
|
282 }
|
|
283 /*bomber(laser lv3) */
|
|
284 if (laser_lv3[0].r < 62) {
|
|
285 for (i1 = 1; i1 < 128; i1++) {
|
|
286 if ((laser_lv3[i1].x + 128 > ex) && (ex + w > laser_lv3[i1].x)
|
|
287 && (laser_lv3[i1].y + 128 > ey)
|
|
288 && (laser_lv3[i1].y < ey + h)
|
|
289 && (laser_lv3[i1].r > 0)) {
|
|
290 tama_lv2[i1].rr = -1;
|
|
291 p->vit -= LASERLV3P;
|
|
292 infg.stg++;
|
|
293 if (p->vit <= 0) {
|
|
294 infg.stg += 4;
|
|
295 Bom(p->x, p->y, bomend, bchar);
|
|
296 enemycount += (p->score *
|
|
297 ((infg.stg / 128) + infg_level + 1));
|
19
|
298 p->task = DELETE_CHARA;
|
|
299 // p->collision = noaction;
|
2
|
300 p->f = FALSE;
|
|
301
|
|
302 property->infg = infg;
|
|
303 smanager->swap();
|
|
304 return 0;
|
|
305 }
|
|
306 }
|
|
307 }
|
|
308 }
|
|
309 property->infg = infg;
|
|
310 smanager->swap();
|
|
311 return 0;
|
|
312 }
|