338 |
338 |
339 case Gear^.Kind of |
339 case Gear^.Kind of |
340 vgtFlake: if cFlattenFlakes then gear^.Layer:= 0 |
340 vgtFlake: if cFlattenFlakes then gear^.Layer:= 0 |
341 else if random(3) = 0 then gear^.Layer:= 0 // 33% - far back |
341 else if random(3) = 0 then gear^.Layer:= 0 // 33% - far back |
342 else if random(3) = 0 then gear^.Layer:= 4 // 22% - mid-distance |
342 else if random(3) = 0 then gear^.Layer:= 4 // 22% - mid-distance |
343 else if random(2) = 0 then gear^.Layer:= 5 // 22% - just behind land |
343 else if random(3) <> 0 then gear^.Layer:= 5 // 30% - just behind land |
344 else if random(4) = 0 then gear^.Layer:= 6 // 15% - just in front of land |
344 else if random(2) = 0 then gear^.Layer:= 6 // 7% - just in front of land |
345 else gear^.Layer:= 2; // 7% - close up |
345 else gear^.Layer:= 2; // 7% - close up |
346 |
346 |
347 vgtCloud: if cFlattenClouds then gear^.Layer:= 5 |
347 vgtCloud: if cFlattenClouds then gear^.Layer:= 5 |
348 else if random(3) = 0 then gear^.Layer:= 0 |
348 else if random(3) = 0 then gear^.Layer:= 0 |
349 else gear^.Layer:= random(2) + 4; |
349 else gear^.Layer:= random(2) + 4; |
435 procedure KickFlakes(Radius, X, Y: LongInt); |
435 procedure KickFlakes(Radius, X, Y: LongInt); |
436 var Gear, t: PVisualGear; |
436 var Gear, t: PVisualGear; |
437 dmg, i: LongInt; |
437 dmg, i: LongInt; |
438 begin |
438 begin |
439 if (vobCount = 0) or (vobCount > 200) then exit; |
439 if (vobCount = 0) or (vobCount > 200) then exit; |
440 t:= VisualGearLayers[1]; |
440 for i:= 2 to 6 do |
441 while t <> nil do |
441 if i <> 3 then |
442 begin |
442 begin |
443 Gear:= t; |
443 t:= VisualGearLayers[i]; |
444 if Gear^.Kind = vgtFlake then |
444 while t <> nil do |
445 begin |
|
446 // Damage calc from doMakeExplosion |
|
447 dmg:= Min(101, Radius + cHHRadius div 2 - LongInt(abs(round(Gear^.X) - X) + abs(round(Gear^.Y) - Y)) div 5); |
|
448 if dmg > 1 then |
|
449 begin |
445 begin |
450 Gear^.tdX:= 0.02 * dmg + 0.01; |
446 Gear:= t; |
451 if Gear^.X - X < 0 then Gear^.tdX := -Gear^.tdX; |
447 if Gear^.Kind = vgtFlake then |
452 Gear^.tdY:= 0.02 * dmg + 0.01; |
448 begin |
453 if Gear^.Y - Y < 0 then Gear^.tdY := -Gear^.tdY; |
449 // Damage calc from doMakeExplosion |
454 Gear^.Timer:= 200 |
450 dmg:= Min(101, Radius + cHHRadius div 2 - LongInt(abs(round(Gear^.X) - X) + abs(round(Gear^.Y) - Y)) div 5); |
|
451 if dmg > 1 then |
|
452 begin |
|
453 Gear^.tdX:= 0.02 * dmg + 0.01; |
|
454 if Gear^.X - X < 0 then Gear^.tdX := -Gear^.tdX; |
|
455 Gear^.tdY:= 0.02 * dmg + 0.01; |
|
456 if Gear^.Y - Y < 0 then Gear^.tdY := -Gear^.tdY; |
|
457 Gear^.Timer:= 200 |
|
458 end |
|
459 end; |
|
460 t:= Gear^.NextGear |
455 end |
461 end |
456 end; |
462 end |
457 t:= Gear^.NextGear |
|
458 end; |
|
459 for i:= 3 to 6 do |
|
460 begin |
|
461 t:= VisualGearLayers[i]; |
|
462 while t <> nil do |
|
463 begin |
|
464 Gear:= t; |
|
465 if Gear^.Kind = vgtFlake then |
|
466 begin |
|
467 // Damage calc from doMakeExplosion |
|
468 dmg:= Min(101, Radius + cHHRadius div 2 - LongInt(abs(round(Gear^.X) - X) + abs(round(Gear^.Y) - Y)) div 5); |
|
469 if dmg > 1 then |
|
470 begin |
|
471 Gear^.tdX:= 0.02 * dmg + 0.01; |
|
472 if Gear^.X - X < 0 then Gear^.tdX := -Gear^.tdX; |
|
473 Gear^.tdY:= 0.02 * dmg + 0.01; |
|
474 if Gear^.Y - Y < 0 then Gear^.tdY := -Gear^.tdY; |
|
475 Gear^.Timer:= 200 |
|
476 end |
|
477 end; |
|
478 t:= Gear^.NextGear |
|
479 end |
|
480 end |
|
481 end; |
463 end; |
482 |
464 |
483 procedure DrawVisualGears(Layer: LongWord); |
465 procedure DrawVisualGears(Layer: LongWord); |
484 var Gear: PVisualGear; |
466 var Gear: PVisualGear; |
485 tinted: boolean; |
467 tinted: boolean; |