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 |