hedgewars/GSHandlers.inc
changeset 5313 5e18eaef65d0
parent 5298 abee9fb11b33
child 5336 174734adc06b
equal deleted inserted replaced
5310:4622f83623ac 5313:5e18eaef65d0
   100                 end;
   100                 end;
   101             end;
   101             end;
   102         gi := gi^.NextGear
   102         gi := gi^.NextGear
   103         end;
   103         end;
   104 end;
   104 end;
       
   105 
   105 ////////////////////////////////////////////////////////////////////////////////
   106 ////////////////////////////////////////////////////////////////////////////////
   106 procedure doStepDrowningGear(Gear: PGear);
   107 procedure doStepDrowningGear(Gear: PGear);
   107 forward;
   108 forward;
   108 
   109 
   109 function CheckGearDrowning(Gear: PGear): boolean;
   110 function CheckGearDrowning(Gear: PGear): boolean;
   233             else
   234             else
   234             ApplyDamage(Gear, CurrentHedgehog, dmg, dsFall);
   235             ApplyDamage(Gear, CurrentHedgehog, dmg, dsFall);
   235     end
   236     end
   236 end;
   237 end;
   237 
   238 
   238 ////////////////////////////////////////////////////////////////////////////////
       
   239 ////////////////////////////////////////////////////////////////////////////////
   239 ////////////////////////////////////////////////////////////////////////////////
   240 procedure CalcRotationDirAngle(Gear: PGear);
   240 procedure CalcRotationDirAngle(Gear: PGear);
   241 var 
   241 var 
   242     dAngle: real;
   242     dAngle: real;
   243 begin
   243 begin
   475     if (GameTicks and $3F) = 0 then
   475     if (GameTicks and $3F) = 0 then
   476         if (Gear^.State and gstCollision) = 0 then
   476         if (Gear^.State and gstCollision) = 0 then
   477             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEvilTrace);
   477             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEvilTrace);
   478 end;
   478 end;
   479 end;
   479 end;
       
   480 
   480 ////////////////////////////////////////////////////////////////////////////////
   481 ////////////////////////////////////////////////////////////////////////////////
   481 procedure doStepMolotov(Gear: PGear);
   482 procedure doStepMolotov(Gear: PGear);
   482 var 
   483 var 
   483     i, gX, gY: LongInt;
   484     i, gX, gY: LongInt;
   484     dX, dY: hwFloat;
   485     dX, dY: hwFloat;
   511         DeleteGear(Gear);
   512         DeleteGear(Gear);
   512         exit
   513         exit
   513     end;
   514     end;
   514 end;
   515 end;
   515 
   516 
   516 procedure doStepWatermelon(Gear: PGear);
   517 ////////////////////////////////////////////////////////////////////////////////
   517 begin
       
   518     AllInactive := false;
       
   519     Gear^.doStep := @doStepBomb
       
   520 end;
       
   521 
   518 
   522 procedure doStepCluster(Gear: PGear);
   519 procedure doStepCluster(Gear: PGear);
   523 begin
   520 begin
   524     AllInactive := false;
   521     AllInactive := false;
   525     doStepFallingGear(Gear);
   522     doStepFallingGear(Gear);
   580         particle:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtDust);
   577         particle:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtDust);
   581         if particle <> nil then particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480)
   578         if particle <> nil then particle^.dX := particle^.dX + (Gear^.dX.QWordValue / 21474836480)
   582         end
   579         end
   583 end;
   580 end;
   584 
   581 
       
   582 ////////////////////////////////////////////////////////////////////////////////
   585 procedure doStepSnowflake(Gear: PGear);
   583 procedure doStepSnowflake(Gear: PGear);
   586 var xx, yy, px, py: LongInt;
   584 var xx, yy, px, py: LongInt;
   587     move, draw, allpx, gun: Boolean;
   585     move, draw, allpx, gun: Boolean;
   588     s: PSDL_Surface;
   586     s: PSDL_Surface;
   589     p: PLongwordArray;
   587     p: PLongwordArray;
  2072         DeleteGear(Gear);
  2070         DeleteGear(Gear);
  2073         AfterAttack
  2071         AfterAttack
  2074     end
  2072     end
  2075 end;
  2073 end;
  2076 
  2074 
       
  2075 ////////////////////////////////////////////////////////////////////////////////
  2077 procedure doStepShover(Gear: PGear);
  2076 procedure doStepShover(Gear: PGear);
  2078 var 
  2077 var 
  2079     HHGear: PGear;
  2078     HHGear: PGear;
  2080 begin
  2079 begin
  2081     HHGear := Gear^.Hedgehog^.Gear;
  2080     HHGear := Gear^.Hedgehog^.Gear;
  3306     Gear^.Tag := hwSign(HHGear^.dX);
  3305     Gear^.Tag := hwSign(HHGear^.dX);
  3307     if HHGear^.dX.isNegative then Gear^.Angle := 4096 - Gear^.Angle;
  3306     if HHGear^.dX.isNegative then Gear^.Angle := 4096 - Gear^.Angle;
  3308     Gear^.doStep := @doStepRCPlaneWork
  3307     Gear^.doStep := @doStepRCPlaneWork
  3309 end;
  3308 end;
  3310 
  3309 
       
  3310 ////////////////////////////////////////////////////////////////////////////////
  3311 procedure doStepJetpackWork(Gear: PGear);
  3311 procedure doStepJetpackWork(Gear: PGear);
  3312 var 
  3312 var 
  3313     HHGear: PGear;
  3313     HHGear: PGear;
  3314     fuel, i: LongInt;
  3314     fuel, i: LongInt;
  3315     move: hwFloat;
  3315     move: hwFloat;
  3433 
  3433 
  3434 //AddCaption(trmsg[sidFuel]+': '+inttostr(round(Gear^.Health/20))+'%', cWhiteColor, capgrpAmmostate);
  3434 //AddCaption(trmsg[sidFuel]+': '+inttostr(round(Gear^.Health/20))+'%', cWhiteColor, capgrpAmmostate);
  3435         end
  3435         end
  3436 end;
  3436 end;
  3437 
  3437 
  3438 ////////////////////////////////////////////////////////////////////////////////
       
  3439 procedure doStepJetpack(Gear: PGear);
  3438 procedure doStepJetpack(Gear: PGear);
  3440 var 
  3439 var 
  3441     HHGear: PGear;
  3440     HHGear: PGear;
  3442 begin
  3441 begin
  3443     Gear^.Pos:= 0;
  3442     Gear^.Pos:= 0;
  3469     begin
  3468     begin
  3470         DeleteGear(Gear);
  3469         DeleteGear(Gear);
  3471     end;
  3470     end;
  3472 end;
  3471 end;
  3473 
  3472 
  3474 ////////////////////////////////////////////////////////////////////////////////
       
  3475 procedure doStepBirdyFly(Gear: PGear);
  3473 procedure doStepBirdyFly(Gear: PGear);
  3476 var 
  3474 var 
  3477     HHGear: PGear;
  3475     HHGear: PGear;
  3478     fuel, i: LongInt;
  3476     fuel, i: LongInt;
  3479     move: hwFloat;
  3477     move: hwFloat;
  3563         isCursorVisible := false;
  3561         isCursorVisible := false;
  3564         AfterAttack;
  3562         AfterAttack;
  3565         end
  3563         end
  3566 end;
  3564 end;
  3567 
  3565 
  3568 ////////////////////////////////////////////////////////////////////////////////
       
  3569 procedure doStepBirdyDescend(Gear: PGear);
  3566 procedure doStepBirdyDescend(Gear: PGear);
  3570 var 
  3567 var 
  3571     HHGear: PGear;
  3568     HHGear: PGear;
  3572 begin
  3569 begin
  3573     if Gear^.Timer > 0 then
  3570     if Gear^.Timer > 0 then
  3605         Gear^.State :=  Gear^.State and not gstAnimation;
  3602         Gear^.State :=  Gear^.State and not gstAnimation;
  3606         Gear^.doStep := @doStepBirdyDescend;
  3603         Gear^.doStep := @doStepBirdyDescend;
  3607     end
  3604     end
  3608 end;
  3605 end;
  3609 
  3606 
  3610 ////////////////////////////////////////////////////////////////////////////////
       
  3611 procedure doStepBirdy(Gear: PGear);
  3607 procedure doStepBirdy(Gear: PGear);
  3612 var 
  3608 var 
  3613     HHGear: PGear;
  3609     HHGear: PGear;
  3614 begin
  3610 begin
  3615     gear^.State :=  gear^.State or gstAnimation and not gstTmpFlag;
  3611     gear^.State :=  gear^.State or gstAnimation and not gstTmpFlag;
  4143     newPortal^.State := newPortal^.State and not gstCollision;
  4139     newPortal^.State := newPortal^.State and not gstCollision;
  4144     newPortal^.State := newPortal^.State or gstMoving;
  4140     newPortal^.State := newPortal^.State or gstMoving;
  4145     newPortal^.doStep := @doStepMovingPortal;
  4141     newPortal^.doStep := @doStepMovingPortal;
  4146 end;
  4142 end;
  4147 
  4143 
       
  4144 ////////////////////////////////////////////////////////////////////////////////
  4148 procedure doStepPiano(Gear: PGear);
  4145 procedure doStepPiano(Gear: PGear);
  4149 var 
  4146 var 
  4150     r0, r1: LongInt;
  4147     r0, r1: LongInt;
  4151     odY: hwFloat;
  4148     odY: hwFloat;
  4152 begin
  4149 begin
  4442     HHGear^.Message := HHGear^.Message and not (gmUp or gmDown or gmLeft or gmRight);
  4439     HHGear^.Message := HHGear^.Message and not (gmUp or gmDown or gmLeft or gmRight);
  4443     HHGear^.State := HHGear^.State or gstNotKickable;
  4440     HHGear^.State := HHGear^.State or gstNotKickable;
  4444     Gear^.doStep := @doStepFlamethrowerWork
  4441     Gear^.doStep := @doStepFlamethrowerWork
  4445 end;
  4442 end;
  4446 
  4443 
       
  4444 ////////////////////////////////////////////////////////////////////////////////
  4447 procedure doStepLandGunWork(Gear: PGear);
  4445 procedure doStepLandGunWork(Gear: PGear);
  4448 var 
  4446 var 
  4449     HHGear: PGear;
  4447     HHGear: PGear;
  4450     rx, ry, speed: hwFloat;
  4448     rx, ry, speed: hwFloat;
  4451     i, gX, gY: LongInt;
  4449     i, gX, gY: LongInt;
  4517     HHGear^.Message := HHGear^.Message and not (gmUp or gmDown or gmLeft or gmRight or gmAttack);
  4515     HHGear^.Message := HHGear^.Message and not (gmUp or gmDown or gmLeft or gmRight or gmAttack);
  4518     HHGear^.State := HHGear^.State or gstNotKickable;
  4516     HHGear^.State := HHGear^.State or gstNotKickable;
  4519     Gear^.doStep := @doStepLandGunWork
  4517     Gear^.doStep := @doStepLandGunWork
  4520 end;
  4518 end;
  4521 
  4519 
       
  4520 ////////////////////////////////////////////////////////////////////////////////
  4522 procedure doStepPoisonCloud(Gear: PGear);
  4521 procedure doStepPoisonCloud(Gear: PGear);
  4523 begin
  4522 begin
  4524     if Gear^.Timer = 0 then
  4523     if Gear^.Timer = 0 then
  4525     begin
  4524     begin
  4526         DeleteGear(Gear);
  4525         DeleteGear(Gear);
  4574 HHGear^.State:= HHGear^.State and not gstNoDamage;
  4573 HHGear^.State:= HHGear^.State and not gstNoDamage;
  4575 Gear^.Timer:= 250;
  4574 Gear^.Timer:= 250;
  4576 Gear^.doStep:= @doStepIdle
  4575 Gear^.doStep:= @doStepIdle
  4577 end;
  4576 end;
  4578 
  4577 
  4579 ////////////////////////////////////////////////////////////////////////////////
       
  4580 procedure doStepHammerHitWork(Gear: PGear);
  4578 procedure doStepHammerHitWork(Gear: PGear);
  4581 var 
  4579 var 
  4582     i, ei: LongInt;
  4580     i, ei: LongInt;
  4583     HHGear: PGear;
  4581     HHGear: PGear;
  4584 begin
  4582 begin
  4810 ////////////////////////////////////////////////////////////////////////////////
  4808 ////////////////////////////////////////////////////////////////////////////////
  4811 procedure doStepStructure(Gear: PGear);
  4809 procedure doStepStructure(Gear: PGear);
  4812 var 
  4810 var 
  4813     x, y: LongInt;
  4811     x, y: LongInt;
  4814 begin
  4812 begin
       
  4813     if (Gear^.State and gstMoving) <> 0 then
       
  4814         begin
       
  4815         AddGearCI(Gear);
       
  4816         Gear^.dX:= _0;
       
  4817         Gear^.dY:= _0;
       
  4818         Gear^.State:= Gear^.State and not gstMoving;
       
  4819         end;
       
  4820 
  4815     if CurAmmoGear = Gear then
  4821     if CurAmmoGear = Gear then
  4816         begin
  4822         begin
  4817         if (CurrentHedgehog = nil) or (CurrentHedgehog^.Gear = nil) then 
  4823         if (CurrentHedgehog = nil) or (CurrentHedgehog^.Gear = nil) then 
  4818             begin
  4824             begin
  4819             DeleteGear(Gear);
  4825             DeleteGear(Gear);
  4858 
  4864 
  4859         doMakeExplosion(x, y, 50, CurrentHedgehog, EXPLAutoSound);
  4865         doMakeExplosion(x, y, 50, CurrentHedgehog, EXPLAutoSound);
  4860         end;
  4866         end;
  4861 end;
  4867 end;
  4862 
  4868 
       
  4869 ////////////////////////////////////////////////////////////////////////////////
  4863 procedure doStepTardis(Gear: PGear);
  4870 procedure doStepTardis(Gear: PGear);
  4864 (*var 
  4871 (*var 
  4865     i, x, y: LongInt;
  4872     i, x, y: LongInt;
  4866     dX, dY: hwFloat;
  4873     dX, dY: hwFloat;
  4867     Fire: PGear;
  4874     Fire: PGear;
  4900             SetAllHHToActive;
  4907             SetAllHHToActive;
  4901             end;
  4908             end;
  4902             DeleteGear(Gear)
  4909             DeleteGear(Gear)
  4903         end
  4910         end
  4904 end;
  4911 end;
       
  4912 
       
  4913 ////////////////////////////////////////////////////////////////////////////////
       
  4914