hedgewars/GSHandlers.inc
changeset 984 dd5f16f69926
parent 980 20128e98988b
child 987 0fcd3fadda41
equal deleted inserted replaced
983:d21ad13cd17d 984:dd5f16f69926
  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