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