282 Gear^.doStep:= @doStepUFOWork |
282 Gear^.doStep:= @doStepUFOWork |
283 end; |
283 end; |
284 end; |
284 end; |
285 |
285 |
286 //////////////////////////////////////////////////////////////////////////////// |
286 //////////////////////////////////////////////////////////////////////////////// |
|
287 procedure doStepShotIdle(Gear: PGear); |
|
288 begin |
|
289 AllInactive:= false; |
|
290 inc(Gear^.Timer); |
|
291 if Gear^.Timer > 75 then |
|
292 begin |
|
293 DeleteGear(Gear); |
|
294 AfterAttack |
|
295 end |
|
296 end; |
|
297 |
287 procedure doStepShotgunShot(Gear: PGear); |
298 procedure doStepShotgunShot(Gear: PGear); |
288 var i: LongWord; |
299 var i: LongWord; |
289 begin |
300 begin |
290 AllInactive:= false; |
301 AllInactive:= false; |
291 if Gear^.Timer > 0 then |
302 |
292 begin |
303 if ((Gear^.State and gstAnimation) = 0) then |
293 dec(Gear^.Timer); |
304 begin |
294 if Gear^.Timer = 0 then PlaySound(sndShotgunFire, false); |
305 dec(Gear^.Timer); |
295 exit |
306 if Gear^.Timer = 0 then |
296 end; |
307 begin |
|
308 PlaySound(sndShotgunFire, false); |
|
309 Gear^.State:= Gear^.State or gstAnimation |
|
310 end; |
|
311 exit |
|
312 end |
|
313 else inc(Gear^.Timer); |
|
314 |
297 i:= 200; |
315 i:= 200; |
298 repeat |
316 repeat |
299 Gear^.X:= Gear^.X + Gear^.dX; |
317 Gear^.X:= Gear^.X + Gear^.dX; |
300 Gear^.Y:= Gear^.Y + Gear^.dY; |
318 Gear^.Y:= Gear^.Y + Gear^.dY; |
301 CheckCollision(Gear); |
319 CheckCollision(Gear); |
302 if (Gear^.State and gstCollision) <> 0 then |
320 if (Gear^.State and gstCollision) <> 0 then |
303 begin |
321 begin |
304 Gear^.X:= Gear^.X + Gear^.dX * 8; |
322 Gear^.X:= Gear^.X + Gear^.dX * 8; |
305 Gear^.Y:= Gear^.Y + Gear^.dY * 8; |
323 Gear^.Y:= Gear^.Y + Gear^.dY * 8; |
306 ShotgunShot(Gear); |
324 ShotgunShot(Gear); |
307 DeleteGear(Gear); |
325 Gear^.doStep:= @doStepShotIdle; |
308 AfterAttack; |
326 exit |
309 exit |
327 end; |
310 end; |
|
311 dec(i) |
328 dec(i) |
312 until i = 0; |
329 until i = 0; |
313 if (Gear^.X < _0) or (Gear^.Y < _0) or (Gear^.X > _2048) or (Gear^.Y > _1024) then |
330 if (Gear^.X < _0) or (Gear^.Y < _0) or (Gear^.X > _2048) or (Gear^.Y > _1024) then |
314 begin |
331 Gear^.doStep:= @doStepShotIdle |
315 DeleteGear(Gear); |
|
316 AfterAttack |
|
317 end |
|
318 end; |
332 end; |
319 |
333 |
320 //////////////////////////////////////////////////////////////////////////////// |
334 //////////////////////////////////////////////////////////////////////////////// |
321 procedure doStepDEagleShotWork(Gear: PGear); |
335 procedure doStepDEagleShotWork(Gear: PGear); |
322 var i, x, y: LongWord; |
336 var i, x, y: LongWord; |
323 oX, oY: hwFloat; |
337 oX, oY: hwFloat; |
324 begin |
338 begin |
325 AllInactive:= false; |
339 AllInactive:= false; |
|
340 inc(Gear^.Timer); |
326 i:= 80; |
341 i:= 80; |
327 oX:= Gear^.X; |
342 oX:= Gear^.X; |
328 oY:= Gear^.Y; |
343 oY:= Gear^.Y; |
329 repeat |
344 repeat |
330 Gear^.X:= Gear^.X + Gear^.dX; |
345 Gear^.X:= Gear^.X + Gear^.dX; |
341 DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 82 - i, 1); |
356 DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 82 - i, 1); |
342 dec(Gear^.Health, Gear^.Damage); |
357 dec(Gear^.Health, Gear^.Damage); |
343 Gear^.Damage:= 0 |
358 Gear^.Damage:= 0 |
344 end; |
359 end; |
345 if (Gear^.Health <= 0) or (Gear^.X < _0) or (Gear^.Y < _0) or (Gear^.X > _2048) or (Gear^.Y > _1024) then |
360 if (Gear^.Health <= 0) or (Gear^.X < _0) or (Gear^.Y < _0) or (Gear^.X > _2048) or (Gear^.Y > _1024) then |
346 DeleteGear(Gear) |
361 Gear^.doStep:= @doStepShotIdle |
347 end; |
362 end; |
348 |
363 |
349 procedure doStepDEagleShot(Gear: PGear); |
364 procedure doStepDEagleShot(Gear: PGear); |
350 begin |
365 begin |
351 PlaySound(sndGun, false); |
366 PlaySound(sndGun, false); |