hedgewars/uGearsHandlersMess.pas
changeset 11523 50636bc6d145
parent 11519 aab4767d9a50
child 11527 44e646598e6a
equal deleted inserted replaced
11522:17bd1c25670a 11523:50636bc6d145
  3161 
  3161 
  3162     inc(Gear^.Tag);
  3162     inc(Gear^.Tag);
  3163     if Gear^.Tag < 2250 then
  3163     if Gear^.Tag < 2250 then
  3164         exit;
  3164         exit;
  3165 
  3165 
       
  3166     InCinematicMode:= false;
  3166     doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound);
  3167     doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound);
  3167     AfterAttack;
  3168     AfterAttack;
  3168     DeleteGear(Gear)
  3169     DeleteGear(Gear)
  3169 end;
  3170 end;
  3170 
  3171 
  3171 procedure doStepCakeDown(Gear: PGear);
  3172 procedure doStepCakeDown(Gear: PGear);
  3172 var
  3173 var
  3173     gi: PGear;
  3174     gi: PGear;
  3174     dmg, dmgBase: LongInt;
  3175     dmg, dmgBase, partyEpicness, i: LongInt;
  3175     fX, fY, tdX, tdY: hwFloat;
  3176     fX, fY, tdX, tdY: hwFloat;
       
  3177     sparkles: PVisualGear;
  3176 begin
  3178 begin
  3177     AllInactive := false;
  3179     AllInactive := false;
  3178 
  3180 
  3179     inc(Gear^.Tag);
  3181     inc(Gear^.Tag);
  3180     if Gear^.Tag < 100 then
  3182     if Gear^.Tag < 100 then
  3189         //fX.QWordValue:= fX.QWordValue and $FFFFFFFF00000000;
  3191         //fX.QWordValue:= fX.QWordValue and $FFFFFFFF00000000;
  3190         //fY.QWordValue:= fY.QWordValue and $FFFFFFFF00000000;
  3192         //fY.QWordValue:= fY.QWordValue and $FFFFFFFF00000000;
  3191         fX:= int2hwFloat(hwRound(Gear^.X));
  3193         fX:= int2hwFloat(hwRound(Gear^.X));
  3192         fY:= int2hwFloat(hwRound(Gear^.Y));
  3194         fY:= int2hwFloat(hwRound(Gear^.Y));
  3193         dmgBase:= cakeDmg shl 1 + cHHRadius div 2;
  3195         dmgBase:= cakeDmg shl 1 + cHHRadius div 2;
       
  3196         partyEpicness:= 0;
  3194         gi := GearsList;
  3197         gi := GearsList;
  3195         while gi <> nil do
  3198         while gi <> nil do
  3196             begin
  3199             begin
  3197             if gi^.Kind = gtHedgehog then
  3200             if gi^.Kind = gtHedgehog then
  3198                 begin
  3201                 begin
  3202                 if hwRound(hwAbs(tdX)+hwAbs(tdY)) < dmgBase then
  3205                 if hwRound(hwAbs(tdX)+hwAbs(tdY)) < dmgBase then
  3203                     dmg:= dmgBase - max(hwRound(Distance(tdX, tdY)),gi^.Radius);
  3206                     dmg:= dmgBase - max(hwRound(Distance(tdX, tdY)),gi^.Radius);
  3204                 if (dmg > 1) then dmg:= ModifyDamage(min(dmg div 2, cakeDmg), gi);
  3207                 if (dmg > 1) then dmg:= ModifyDamage(min(dmg div 2, cakeDmg), gi);
  3205                 if (dmg > 1) then
  3208                 if (dmg > 1) then
  3206                     if (CurrentHedgehog^.Gear = gi) and (gi^.Hedgehog^.Effects[heInvulnerable] = 0) then
  3209                     if (CurrentHedgehog^.Gear = gi) and (gi^.Hedgehog^.Effects[heInvulnerable] = 0) then
  3207                         gi^.State := gi^.State or gstLoser
  3210                         begin
       
  3211                         gi^.State := gi^.State or gstLoser;
       
  3212                         // probably not too epic if hitting self too...
       
  3213                         dec(partyEpicness, 45);
       
  3214                         end
  3208                     else
  3215                     else
       
  3216                         begin
  3209                         gi^.State := gi^.State or gstWinner;
  3217                         gi^.State := gi^.State or gstWinner;
       
  3218                         if CurrentHedgehog^.Gear = gi then
       
  3219                             dec(partyEpicness, 45)
       
  3220                         else
       
  3221                             inc(partyEpicness);
       
  3222                         end;
  3210                 end;
  3223                 end;
  3211             gi := gi^.NextGear
  3224             gi := gi^.NextGear
  3212             end;
  3225             end;
  3213 //////////////////////////////////////////////////////////////////////
  3226 //////////////////////////////////////////////////////////////////////
  3214         Gear^.doStep := @doStepCakeExpl;
  3227         Gear^.doStep := @doStepCakeExpl;
       
  3228         if partyEpicness > 6 then
       
  3229             begin
       
  3230             for i := 0 to (2 * partyEpicness) do
       
  3231                 begin
       
  3232                 sparkles:= AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEgg, 1);
       
  3233                 if sparkles <> nil then
       
  3234                     begin
       
  3235                     sparkles^.dX:= 0.008 * (random(100) - 50);
       
  3236                     sparkles^.dY:= -0.3 + 0.002 * (random(100) - 50);
       
  3237                     sparkles^.Tint:= ((random(210)+45) shl 24) or ((random(210)+45) shl 16) or ((random(210)+45) shl 8) or $FF;
       
  3238                     sparkles^.Angle:= random(360);
       
  3239                     end
       
  3240                 end;
       
  3241             InCinematicMode:= true;
       
  3242             end;
  3215         PlaySound(sndCake)
  3243         PlaySound(sndCake)
  3216         end
  3244         end
  3217     else dec(Gear^.Pos)
  3245     else dec(Gear^.Pos)
  3218 end;
  3246 end;
  3219 
  3247