hedgewars/uGearsHandlersMess.pas
branch0.9.25
changeset 14556 5e4df5413e1e
parent 14555 945bf1d4d1a4
child 14557 3be619402d6b
child 14588 e27f1d1c1da9
equal deleted inserted replaced
14555:945bf1d4d1a4 14556:5e4df5413e1e
  1186             DeleteGear(Gear);
  1186             DeleteGear(Gear);
  1187             AfterAttack
  1187             AfterAttack
  1188             end
  1188             end
  1189         end
  1189         end
  1190     else
  1190     else
  1191 		DeleteGear(Gear);
  1191         DeleteGear(Gear);
  1192 end;
  1192 end;
  1193 
  1193 
  1194 procedure CreateShellForGear(Gear: PGear; startFrame: Longword);
  1194 procedure CreateShellForGear(Gear: PGear; startFrame: Longword);
  1195 var
  1195 var
  1196     shell: PVisualGear;
  1196     shell: PVisualGear;
  2035                 or (cMineDudPercent = 0)
  2035                 or (cMineDudPercent = 0)
  2036                 or (getRandom(100) > cMineDudPercent) then
  2036                 or (getRandom(100) > cMineDudPercent) then
  2037                     begin
  2037                     begin
  2038                     doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound);
  2038                     doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound);
  2039                     DeleteGear(Gear);
  2039                     DeleteGear(Gear);
  2040 					exit   // redundant but we've had too many delete gear bugs
  2040                     exit   // redundant but we've had too many delete gear bugs
  2041                     end
  2041                     end
  2042                 else
  2042                 else
  2043                     begin
  2043                     begin
  2044                     vg:= AddVisualGear(hwRound(Gear^.X) - 4  + Random(8), hwRound(Gear^.Y) - 4 - Random(4), vgtSmoke);
  2044                     vg:= AddVisualGear(hwRound(Gear^.X) - 4  + Random(8), hwRound(Gear^.Y) - 4 - Random(4), vgtSmoke);
  2045                     if vg <> nil then
  2045                     if vg <> nil then
  2079                 EraseLand(
  2079                 EraseLand(
  2080                     hwRound(Gear^.X) - SpritesData[sprFrozenAirMine].Width div 2,
  2080                     hwRound(Gear^.X) - SpritesData[sprFrozenAirMine].Width div 2,
  2081                     hwRound(Gear^.Y) - SpritesData[sprFrozenAirMine].Height div 2,
  2081                     hwRound(Gear^.Y) - SpritesData[sprFrozenAirMine].Height div 2,
  2082                     sprFrozenAirMine, 0, 0, false, false, false, false);
  2082                     sprFrozenAirMine, 0, 0, false, false, false, false);
  2083             DeleteGear(Gear);
  2083             DeleteGear(Gear);
  2084 			exit
  2084             exit
  2085             end;
  2085             end;
  2086         doStepFallingGear(Gear);
  2086         doStepFallingGear(Gear);
  2087         exit
  2087         exit
  2088         end;
  2088         end;
  2089     isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius);
  2089     isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius);
  2468                 AddGear(x, y, gtFlame, 0, _0, _0, 0);
  2468                 AddGear(x, y, gtFlame, 0, _0, _0, 0);
  2469             end
  2469             end
  2470         else if k = gtTarget then
  2470         else if k = gtTarget then
  2471             uStats.TargetHit()
  2471             uStats.TargetHit()
  2472         else if k = gtExplosives then
  2472         else if k = gtExplosives then
  2473 			begin
  2473             begin
  2474 			doMakeExplosion(x, y, Gear^.Boom, hog, EXPLAutoSound);
  2474             doMakeExplosion(x, y, Gear^.Boom, hog, EXPLAutoSound);
  2475 			for i:= 0 to 31 do
  2475             for i:= 0 to 31 do
  2476 				begin
  2476                 begin
  2477 				dX := AngleCos(i * 64) * _0_5 * (getrandomf + _1);
  2477                 dX := AngleCos(i * 64) * _0_5 * (getrandomf + _1);
  2478 				dY := AngleSin(i * 64) * _0_5 * (getrandomf + _1);
  2478                 dY := AngleSin(i * 64) * _0_5 * (getrandomf + _1);
  2479 				AddGear(x, y, gtFlame, 0, dX, dY, 0);
  2479                 AddGear(x, y, gtFlame, 0, dX, dY, 0);
  2480 				AddGear(x, y, gtFlame, gstTmpFlag, -dX, -dY, 0);
  2480                 AddGear(x, y, gtFlame, gstTmpFlag, -dX, -dY, 0);
  2481 				end
  2481                 end
  2482 			end;
  2482             end;
  2483         DeleteGear(Gear);
  2483         DeleteGear(Gear);
  2484 		exit
  2484         exit
  2485         end;
  2485         end;
  2486 
  2486 
  2487     if k = gtExplosives then
  2487     if k = gtExplosives then
  2488         begin
  2488         begin
  2489         //if V > _0_03 then Gear^.State:= Gear^.State or gstAnimation;
  2489         //if V > _0_03 then Gear^.State:= Gear^.State or gstAnimation;
  3171 begin
  3171 begin
  3172     if (Gear^.Hedgehog^.Gear = nil) or (Gear^.Hedgehog^.Gear^.Damage > 0) then
  3172     if (Gear^.Hedgehog^.Gear = nil) or (Gear^.Hedgehog^.Gear^.Damage > 0) then
  3173         begin
  3173         begin
  3174         DeleteGear(Gear);
  3174         DeleteGear(Gear);
  3175         AfterAttack;
  3175         AfterAttack;
  3176 		exit
  3176         exit
  3177         end;
  3177         end;
  3178     inc(Gear^.Timer);
  3178     inc(Gear^.Timer);
  3179     if Gear^.Timer = 65 then
  3179     if Gear^.Timer = 65 then
  3180         begin
  3180         begin
  3181         Gear^.Timer := 0;
  3181         Gear^.Timer := 0;
  6478                                 iter^.State:= iter^.State or gstFrozen;
  6478                                 iter^.State:= iter^.State or gstFrozen;
  6479                                 if (hwRound(iter^.X) < RightX-16) and (hwRound(iter^.X) > LeftX+16) and 
  6479                                 if (hwRound(iter^.X) < RightX-16) and (hwRound(iter^.X) > LeftX+16) and 
  6480                                     (hwRound(iter^.Y) > topY+16) and (hwRound(iter^.Y) < LAND_HEIGHT-16) then
  6480                                     (hwRound(iter^.Y) > topY+16) and (hwRound(iter^.Y) < LAND_HEIGHT-16) then
  6481                                     begin
  6481                                     begin
  6482                                     AddCI(iter);
  6482                                     AddCI(iter);
  6483 									iter^.X:= int2hwFloat(min(RightX-16,max(hwRound(iter^.X), LeftX+16)));
  6483                                     iter^.X:= int2hwFloat(min(RightX-16,max(hwRound(iter^.X), LeftX+16)));
  6484 									iter^.Y:= int2hwFloat(min(LAND_HEIGHT-16,max(hwRound(iter^.Y),TopY+16)));
  6484                                     iter^.Y:= int2hwFloat(min(LAND_HEIGHT-16,max(hwRound(iter^.Y),TopY+16)));
  6485                                     ForcePlaceOnLand(hwRound(iter^.X)-16, hwRound(iter^.Y)-16, sprFrozenAirMine, 0, lfIce, $FFFFFFFF, false, false, false);    
  6485                                     ForcePlaceOnLand(hwRound(iter^.X)-16, hwRound(iter^.Y)-16, sprFrozenAirMine, 0, lfIce, $FFFFFFFF, false, false, false);    
  6486                                     iter^.State:= iter^.State or gstInvisible
  6486                                     iter^.State:= iter^.State or gstInvisible
  6487                                     end
  6487                                     end
  6488                                 else
  6488                                 else
  6489 									begin
  6489                                     begin
  6490 									updateTarget(Gear, ndX, ndY);
  6490                                     updateTarget(Gear, ndX, ndY);
  6491 									FlightTime := 0;
  6491                                     FlightTime := 0;
  6492 									Timer := iceWaitCollision;
  6492                                     Timer := iceWaitCollision;
  6493 									Power := GameTicks;
  6493                                     Power := GameTicks;
  6494                                     iter^.State:= iter^.State and (not gstNoGravity)
  6494                                     iter^.State:= iter^.State and (not gstNoGravity)
  6495 									end
  6495                                     end
  6496                                 end
  6496                                 end
  6497                             else // gtExplosives
  6497                             else // gtExplosives
  6498                                 begin
  6498                                 begin
  6499                                 iter^.State:= iter^.State or gstFrozen;
  6499                                 iter^.State:= iter^.State or gstFrozen;
  6500                                 iter^.Health:= iter^.Health + cBarrelHealth
  6500                                 iter^.Health:= iter^.Health + cBarrelHealth