172 Gear^.Angle:= round(Gear^.Angle + Steps) mod cMaxAngle; |
172 Gear^.Angle:= round(Gear^.Angle + Steps) mod cMaxAngle; |
173 |
173 |
174 if Gear^.FrameTicks <= Steps then |
174 if Gear^.FrameTicks <= Steps then |
175 DeleteVisualGear(Gear) |
175 DeleteVisualGear(Gear) |
176 else |
176 else |
177 dec(Gear^.FrameTicks, Steps) |
177 dec(Gear^.FrameTicks, Steps); |
|
178 |
|
179 if Gear^.FrameTicks < $FF then |
|
180 Gear^.Tint:= (Gear^.Tint and $FFFFFF00) or Gear^.FrameTicks |
178 end; |
181 end; |
179 |
182 |
180 //////////////////////////////////////////////////////////////////////////////// |
183 //////////////////////////////////////////////////////////////////////////////// |
181 procedure doStepFire(Gear: PVisualGear; Steps: Longword); |
184 procedure doStepFire(Gear: PVisualGear; Steps: Longword); |
182 var vgt: PVisualGear; |
185 var vgt: PVisualGear; |
585 end; |
588 end; |
586 |
589 |
587 |
590 |
588 //////////////////////////////////////////////////////////////////////////////// |
591 //////////////////////////////////////////////////////////////////////////////// |
589 procedure doStepBigExplosionWork(Gear: PVisualGear; Steps: Longword); |
592 procedure doStepBigExplosionWork(Gear: PVisualGear; Steps: Longword); |
590 //var maxMovement: LongInt; |
593 var maxMovement: LongInt; |
591 begin |
594 begin |
592 |
595 |
593 inc(Gear^.Timer, Steps); |
596 inc(Gear^.Timer, Steps); |
594 (* |
|
595 FIXME - This block desyncs due to the way WorldDx is important for various things network related. |
|
596 One possible solution is, instead of using WorldDx, to use straight gl/SDL calls to jitter the screen a bit. |
|
597 |
|
598 // a comment by unC0Rr: instead of changing WorldDx shake cursor coordinates, that should be safe |
|
599 // ... seems to still desync, and I tried banning when targetting too |
|
600 |
|
601 if (Gear^.Timer and 5) = 0 then |
597 if (Gear^.Timer and 5) = 0 then |
602 begin |
598 begin |
603 maxMovement := max(1, 13 - ((Gear^.Timer * 15) div 250)); |
599 maxMovement := max(1, 13 - ((Gear^.Timer * 15) div 250)); |
604 ShakeCamera(maxMovement); |
600 ShakeCamera(maxMovement); |
605 end; |
601 end; |
606 *) |
|
607 |
602 |
608 if Gear^.Timer > 250 then DeleteVisualGear(Gear); |
603 if Gear^.Timer > 250 then DeleteVisualGear(Gear); |
609 end; |
604 end; |
610 |
605 |
611 procedure doStepBigExplosion(Gear: PVisualGear; Steps: Longword); |
606 procedure doStepBigExplosion(Gear: PVisualGear; Steps: Longword); |
612 var i: LongWord; |
607 var i: LongWord; |
613 gX,gY: LongInt; |
608 gX,gY: LongInt; |
614 vg: PVisualGear; |
609 vg: PVisualGear; |
615 begin |
610 begin |
616 ScreenFade:= sfFromWhite; |
611 //ScreenFade:= sfFromWhite; |
617 ScreenFadeValue:= 250; |
612 //ScreenFadeValue:= round(60 * zoom * zoom); |
618 ScreenFadeSpeed:= 5; |
613 //ScreenFadeSpeed:= 5; |
619 gX:= round(Gear^.X); |
614 gX:= round(Gear^.X); |
620 gY:= round(Gear^.Y); |
615 gY:= round(Gear^.Y); |
621 AddVisualGear(gX, gY, vgtSmokeRing); |
616 AddVisualGear(gX, gY, vgtSmokeRing); |
622 for i:= 0 to 46 do |
617 for i:= 0 to 46 do |
623 begin |
618 begin |