1381 end; |
1381 end; |
1382 |
1382 |
1383 if (GameTicks and $3F) = 0 then |
1383 if (GameTicks and $3F) = 0 then |
1384 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0) |
1384 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0) |
1385 end; |
1385 end; |
|
1386 |
|
1387 //////////////////////////////////////////////////////////////////////////////// |
|
1388 procedure doStepKamikazeWork(Gear: PGear); |
|
1389 const upd: Longword = 0; |
|
1390 var i, x, y: LongWord; |
|
1391 oX, oY: hwFloat; |
|
1392 HHGear: PGear; |
|
1393 begin |
|
1394 AllInactive:= false; |
|
1395 |
|
1396 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
|
1397 HHGear^.State:= HHGear^.State or gstNoDamage; |
|
1398 DeleteCI(HHGear); |
|
1399 |
|
1400 i:= 2; |
|
1401 oX:= Gear^.X; |
|
1402 oY:= Gear^.Y; |
|
1403 repeat |
|
1404 Gear^.X:= Gear^.X + HHGear^.dX; |
|
1405 Gear^.Y:= Gear^.Y + HHGear^.dY; |
|
1406 HHGear^.X:= Gear^.X; |
|
1407 HHGear^.Y:= Gear^.Y; |
|
1408 |
|
1409 inc(Gear^.Damage, 2); |
|
1410 |
|
1411 if TestCollisionXwithGear(HHGear, hwSign(Gear^.dX)) |
|
1412 or TestCollisionYwithGear(HHGear, hwSign(Gear^.dY)) then inc(Gear^.Damage, 3); |
|
1413 |
|
1414 dec(i) |
|
1415 until (i = 0) or (Gear^.Damage > Gear^.Health); |
|
1416 addfilelog(inttostr(Gear^.Damage)); |
|
1417 |
|
1418 inc(upd); |
|
1419 if upd > 3 then |
|
1420 begin |
|
1421 AmmoShove(Gear, 30, 40); |
|
1422 |
|
1423 DrawTunnel(HHGear^.X - HHGear^.dX * 10, |
|
1424 HHGear^.Y - _3 - HHGear^.dY * 10 + hwAbs(HHGear^.dY) * 5, |
|
1425 HHGear^.dX, |
|
1426 HHGear^.dY, |
|
1427 20 + cHHRadius * 2, |
|
1428 cHHRadius * 2 + 4); |
|
1429 |
|
1430 upd:= 0 |
|
1431 end; |
|
1432 |
|
1433 if Gear^.Health < Gear^.Damage then |
|
1434 begin |
|
1435 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, EXPLAutoSound); |
|
1436 AfterAttack; |
|
1437 DeleteGear(Gear); |
|
1438 DeleteGear(HHGear); |
|
1439 end else |
|
1440 begin |
|
1441 dec(Gear^.Health, Gear^.Damage); |
|
1442 Gear^.Damage:= 0 |
|
1443 end |
|
1444 end; |
|
1445 |
|
1446 procedure doStepKamikaze(Gear: PGear); |
|
1447 var HHGear: PGear; |
|
1448 begin |
|
1449 AllInactive:= false; |
|
1450 |
|
1451 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
|
1452 |
|
1453 HHGear^.dX:= Gear^.dX; |
|
1454 HHGear^.dY:= Gear^.dY; |
|
1455 |
|
1456 Gear^.dX:= SignAs(_0_45, Gear^.dX); |
|
1457 Gear^.dY:= - _0_9; |
|
1458 |
|
1459 Gear^.doStep:= @doStepKamikazeWork |
|
1460 end; |
|
1461 |