hedgewars/uGears.pas
branchhedgeroid
changeset 5530 25d4118056e1
parent 5525 5fb06333314e
child 5556 5b8ca3955834
equal deleted inserted replaced
5516:8710987d3484 5530:25d4118056e1
   205 
   205 
   206 New(gear);
   206 New(gear);
   207 FillChar(gear^, sizeof(TGear), 0);
   207 FillChar(gear^, sizeof(TGear), 0);
   208 gear^.X:= int2hwFloat(X);
   208 gear^.X:= int2hwFloat(X);
   209 gear^.Y:= int2hwFloat(Y);
   209 gear^.Y:= int2hwFloat(Y);
       
   210 gear^.TargetX:= NoPointX;
   210 gear^.Kind := Kind;
   211 gear^.Kind := Kind;
   211 gear^.State:= State;
   212 gear^.State:= State;
   212 gear^.Active:= true;
   213 gear^.Active:= true;
   213 gear^.dX:= dX;
   214 gear^.dX:= dX;
   214 gear^.dY:= dY;
   215 gear^.dY:= dY;
   273        gtShell: begin
   274        gtShell: begin
   274                 gear^.Radius:= 4;
   275                 gear^.Radius:= 4;
   275                 gear^.Density:= _1;
   276                 gear^.Density:= _1;
   276                 end;
   277                 end;
   277        gtSnowball: begin
   278        gtSnowball: begin
       
   279                 gear^.ImpactSound:= sndMudballImpact;
       
   280                 gear^.nImpactSounds:= 1;
   278                 gear^.Radius:= 4;
   281                 gear^.Radius:= 4;
   279                 gear^.Elasticity:= _1;
   282                 gear^.Elasticity:= _1;
   280                 gear^.Friction:= _1;
   283                 gear^.Friction:= _1;
   281                 gear^.Density:= _0_5;
   284                 gear^.Density:= _0_5;
   282                 end;
   285                 end;
   308                 gear^.Timer:= 500;
   311                 gear^.Timer:= 500;
   309                 gear^.RenderTimer:= true;
   312                 gear^.RenderTimer:= true;
   310                 gear^.Elasticity:= _0_9;
   313                 gear^.Elasticity:= _0_9;
   311                 gear^.Tag:= getRandom(32);
   314                 gear^.Tag:= getRandom(32);
   312                 end;
   315                 end;
       
   316    gtSeduction: begin
       
   317                 gear^.Radius:= 250;
       
   318                 end;
   313  gtShotgunShot: begin
   319  gtShotgunShot: begin
   314                 gear^.Timer:= 900;
   320                 gear^.Timer:= 900;
   315                 gear^.Radius:= 2
   321                 gear^.Radius:= 2
   316                 end;
   322                 end;
   317   gtPickHammer: begin
   323   gtPickHammer: begin
   326                 gear^.Radius:= 3;
   332                 gear^.Radius:= 3;
   327                 gear^.Friction:= _450 * _0_01 * cRopePercent;
   333                 gear^.Friction:= _450 * _0_01 * cRopePercent;
   328                 RopePoints.Count:= 0;
   334                 RopePoints.Count:= 0;
   329                 end;
   335                 end;
   330         gtMine: begin
   336         gtMine: begin
       
   337                 gear^.ImpactSound:= sndMineImpact;
       
   338                 gear^.nImpactSounds:= 1;
   331                 gear^.Health:= 10;
   339                 gear^.Health:= 10;
   332                 gear^.State:= gear^.State or gstMoving;
   340                 gear^.State:= gear^.State or gstMoving;
   333                 gear^.Radius:= 2;
   341                 gear^.Radius:= 2;
   334                 gear^.Elasticity:= _0_55;
   342                 gear^.Elasticity:= _0_55;
   335                 gear^.Friction:= _0_995;
   343                 gear^.Friction:= _0_995;
   908         delay2:= cInactDelay * 50
   916         delay2:= cInactDelay * 50
   909     else
   917     else
   910         begin
   918         begin
   911         dec(delay2);
   919         dec(delay2);
   912 
   920 
   913         if ((delay2 mod cInactDelay) = 0) and (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) then 
   921         if ((delay2 mod cInactDelay) = 0) and (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and not CurrentHedgehog^.Unplaced then
       
   922             begin
       
   923             if (CurrentHedgehog^.Gear^.State and gstAttacked <> 0) and (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0) then
       
   924                 begin
       
   925                 CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State or gstHHChooseTarget;
       
   926                 isCursorVisible := true
       
   927                 end;
   914             CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State and not gstAttacked;
   928             CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State and not gstAttacked;
       
   929             end;
   915         if delay2 = 0 then
   930         if delay2 = 0 then
   916             begin
   931             begin
   917             if (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.Gear^.State and gstAttacked = 0) then SweepDirty;
   932             if (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.Gear^.State and gstAttacked = 0) then SweepDirty;
   918             CheckNoDamage;
   933             CheckNoDamage;
   919             AliveCount:= 0; // shorter version of check for win to allow typical step activity to proceed
   934             AliveCount:= 0; // shorter version of check for win to allow typical step activity to proceed
  1208     dmg, dmgRadius, dmgBase: LongInt;
  1223     dmg, dmgRadius, dmgBase: LongInt;
  1209     fX, fY: hwFloat;
  1224     fX, fY: hwFloat;
  1210     vg: PVisualGear;
  1225     vg: PVisualGear;
  1211     i, cnt: LongInt;
  1226     i, cnt: LongInt;
  1212 begin
  1227 begin
  1213 TargetPoint.X:= NoPointX;
       
  1214 if Radius > 4 then AddFileLog('Explosion: at (' + inttostr(x) + ',' + inttostr(y) + ')');
  1228 if Radius > 4 then AddFileLog('Explosion: at (' + inttostr(x) + ',' + inttostr(y) + ')');
  1215 if Radius > 25 then KickFlakes(Radius, X, Y);
  1229 if Radius > 25 then KickFlakes(Radius, X, Y);
  1216 
  1230 
  1217 if ((Mask and EXPLNoGfx) = 0) then
  1231 if ((Mask and EXPLNoGfx) = 0) then
  1218     begin
  1232     begin
  1585 procedure ResurrectHedgehog(gear: PGear);
  1599 procedure ResurrectHedgehog(gear: PGear);
  1586 var tempTeam : PTeam;
  1600 var tempTeam : PTeam;
  1587 begin
  1601 begin
  1588     gear^.dX := _0;
  1602     gear^.dX := _0;
  1589     gear^.dY := _0;
  1603     gear^.dY := _0;
  1590     gear^.State := gstWait;
       
  1591     gear^.Damage := 0;
  1604     gear^.Damage := 0;
  1592     gear^.Health := gear^.Hedgehog^.InitialHealth;
  1605     gear^.Health := gear^.Hedgehog^.InitialHealth;
  1593     gear^.Hedgehog^.Effects[hePoisoned] := false;
  1606     gear^.Hedgehog^.Effects[hePoisoned] := false;
  1594     if not CurrentHedgehog^.Effects[heResurrectable] then
  1607     if not CurrentHedgehog^.Effects[heResurrectable] then
  1595         with CurrentHedgehog^ do 
  1608         with CurrentHedgehog^ do 
  1602     DeleteCI(gear);
  1615     DeleteCI(gear);
  1603     FindPlace(gear, false, 0, LAND_WIDTH, true); 
  1616     FindPlace(gear, false, 0, LAND_WIDTH, true); 
  1604     if gear <> nil then begin
  1617     if gear <> nil then begin
  1605         RenderHealth(gear^.Hedgehog^);
  1618         RenderHealth(gear^.Hedgehog^);
  1606         ScriptCall('onGearResurrect', gear^.uid);
  1619         ScriptCall('onGearResurrect', gear^.uid);
       
  1620         gear^.State := gstWait;
  1607     end;
  1621     end;
  1608     RecountTeamHealth(tempTeam);
  1622     RecountTeamHealth(tempTeam);
  1609 end;
  1623 end;
  1610 
  1624 
  1611 function SpawnCustomCrateAt(x, y: LongInt; crate: TCrateType; content: Longword): PGear;
  1625 function SpawnCustomCrateAt(x, y: LongInt; crate: TCrateType; content: Longword): PGear;