2970 end; |
2970 end; |
2971 |
2971 |
2972 procedure doStepCakeDown(Gear: PGear); |
2972 procedure doStepCakeDown(Gear: PGear); |
2973 var |
2973 var |
2974 gi: PGear; |
2974 gi: PGear; |
2975 dmg: LongInt; |
2975 dmg, dmgBase: LongInt; |
|
2976 fX, fY, tdX, tdY: hwFloat; |
2976 begin |
2977 begin |
2977 AllInactive := false; |
2978 AllInactive := false; |
2978 |
2979 |
2979 inc(Gear^.Tag); |
2980 inc(Gear^.Tag); |
2980 if Gear^.Tag < 100 then |
2981 if Gear^.Tag < 100 then |
2981 exit; |
2982 exit; |
2982 Gear^.Tag := 0; |
2983 Gear^.Tag := 0; |
2983 |
2984 |
2984 if Gear^.Pos = 0 then |
2985 if Gear^.Pos = 0 then |
2985 begin |
2986 begin |
|
2987 ///////////// adapted from doMakeExplosion /////////////////////////// |
|
2988 //fX:= Gear^.X; |
|
2989 //fY:= Gear^.Y; |
|
2990 //fX.QWordValue:= fX.QWordValue and $FFFFFFFF00000000; |
|
2991 //fY.QWordValue:= fY.QWordValue and $FFFFFFFF00000000; |
|
2992 fX:= int2hwFloat(hwRound(Gear^.X)); |
|
2993 fY:= int2hwFloat(hwRound(Gear^.Y)); |
|
2994 dmgBase:= cakeDmg shl 1 + cHHRadius div 2; |
2986 gi := GearsList; |
2995 gi := GearsList; |
2987 while gi <> nil do |
2996 while gi <> nil do |
2988 begin |
2997 begin |
2989 dmg := cakeDmg * 2 - hwRound(Distance(gi^.X - Gear^.X, gi^.Y - Gear^.Y)); |
2998 if gi^.Kind = gtHedgehog then |
2990 if (dmg > 1) and (gi^.Kind = gtHedgehog) then |
2999 begin |
2991 if (CurrentHedgehog^.Gear = gi) and (not gi^.Invulnerable) then |
3000 dmg:= 0; |
2992 gi^.State := gi^.State or gstLoser |
3001 tdX:= gi^.X-fX; |
2993 else |
3002 tdY:= gi^.Y-fY; |
2994 gi^.State := gi^.State or gstWinner; |
3003 if hwRound(hwAbs(tdX)+hwAbs(tdY)) < dmgBase then |
|
3004 dmg:= dmgBase - max(hwRound(Distance(tdX, tdY)),gi^.Radius); |
|
3005 if (dmg > 1) then dmg:= ModifyDamage(min(dmg div 2, cakeDmg), gi); |
|
3006 if (dmg > 1) then |
|
3007 if (CurrentHedgehog^.Gear = gi) and (not gi^.Invulnerable) then |
|
3008 gi^.State := gi^.State or gstLoser |
|
3009 else |
|
3010 gi^.State := gi^.State or gstWinner; |
|
3011 end; |
2995 gi := gi^.NextGear |
3012 gi := gi^.NextGear |
2996 end; |
3013 end; |
|
3014 ////////////////////////////////////////////////////////////////////// |
2997 Gear^.doStep := @doStepCakeExpl; |
3015 Gear^.doStep := @doStepCakeExpl; |
2998 PlaySound(sndCake) |
3016 PlaySound(sndCake) |
2999 end |
3017 end |
3000 else dec(Gear^.Pos) |
3018 else dec(Gear^.Pos) |
3001 end; |
3019 end; |