57 else |
59 else |
58 if Angle < - 360 then |
60 if Angle < - 360 then |
59 Angle:= Angle + 360; |
61 Angle:= Angle + 360; |
60 |
62 |
61 |
63 |
62 if (round(X) >= cLeftScreenBorder) and |
64 if (round(X) >= cLeftScreenBorder) |
63 (round(X) <= cRightScreenBorder) and |
65 and (round(X) <= cRightScreenBorder) |
64 (round(Y) - 75 <= LAND_HEIGHT) and |
66 and (round(Y) - 75 <= LAND_HEIGHT) |
65 (Timer > 0) and (Timer-Steps > 0) then |
67 and (Timer > 0) and (Timer-Steps > 0) then |
66 begin |
68 begin |
67 if tdX > 0 then sign := 1 |
69 if tdX > 0 then |
68 else sign:= -1; |
70 sign := 1 |
|
71 else |
|
72 sign:= -1; |
69 tdX:= tdX - 0.005*Steps*sign; |
73 tdX:= tdX - 0.005*Steps*sign; |
70 if ((sign < 0) and (tdX > 0)) or ((sign > 0) and (tdX < 0)) then tdX:= 0; |
74 if ((sign < 0) and (tdX > 0)) or ((sign > 0) and (tdX < 0)) then |
71 if tdX > 0 then sign := 1 |
75 tdX:= 0; |
72 else sign:= -1; |
76 if tdX > 0 then |
|
77 sign := 1 |
|
78 else |
|
79 sign:= -1; |
73 tdY:= tdY - 0.005*Steps*sign; |
80 tdY:= tdY - 0.005*Steps*sign; |
74 if ((sign < 0) and (tdY > 0)) or ((sign > 0) and (tdY < 0)) then tdY:= 0; |
81 if ((sign < 0) and (tdY > 0)) or ((sign > 0) and (tdY < 0)) then |
|
82 tdY:= 0; |
75 dec(Timer, Steps) |
83 dec(Timer, Steps) |
76 end |
84 end |
77 else |
85 else |
78 begin |
86 begin |
79 if round(X) < cLeftScreenBorder then X:= X + cScreenSpace else |
87 if round(X) < cLeftScreenBorder then |
80 if round(X) > cRightScreenBorder then X:= X - cScreenSpace; |
88 X:= X + cScreenSpace |
81 // if round(Y) < (LAND_HEIGHT - 1024 - 75) then Y:= Y + 25.0; // For if flag is set for flakes rising upwards? |
89 else |
82 if (Gear^.Layer = 2) and (round(Y) - 225 > LAND_HEIGHT) then Y:= Y - (1024 + 300) // TODO - configure in theme (jellies for example could use limited range) |
90 if round(X) > cRightScreenBorder then |
83 else if (Gear^.Layer <> 2) and (round(Y) + 50 > LAND_HEIGHT) then Y:= Y - (1024 + 25); |
91 X:= X - cScreenSpace; |
|
92 // if round(Y) < (LAND_HEIGHT - 1024 - 75) then Y:= Y + 25.0; // For if flag is set for flakes rising upwards? |
|
93 if (Gear^.Layer = 2) and (round(Y) - 225 > LAND_HEIGHT) then |
|
94 Y:= Y - (1024 + 300) // TODO - configure in theme (jellies for example could use limited range) |
|
95 else if (Gear^.Layer <> 2) and (round(Y) + 50 > LAND_HEIGHT) then |
|
96 Y:= Y - (1024 + 25); |
84 Timer:= 0; |
97 Timer:= 0; |
85 tdX:= 0; |
98 tdX:= 0; |
86 tdY:= 0 |
99 tdY:= 0 |
87 end; |
100 end; |
88 end; |
101 end; |
241 end; |
258 end; |
242 |
259 |
243 //////////////////////////////////////////////////////////////////////////////// |
260 //////////////////////////////////////////////////////////////////////////////// |
244 procedure doStepBubble(Gear: PVisualGear; Steps: Longword); |
261 procedure doStepBubble(Gear: PVisualGear; Steps: Longword); |
245 begin |
262 begin |
246 Gear^.X:= Gear^.X + Gear^.dX * Steps; |
263 Gear^.X:= Gear^.X + Gear^.dX * Steps; |
247 Gear^.Y:= Gear^.Y + Gear^.dY * Steps; |
264 Gear^.Y:= Gear^.Y + Gear^.dY * Steps; |
248 Gear^.Y:= Gear^.Y - cDrownSpeedf * Steps; |
265 Gear^.Y:= Gear^.Y - cDrownSpeedf * Steps; |
249 |
266 Gear^.dX := Gear^.dX / (1.001 * Steps); |
250 Gear^.dX := Gear^.dX / (1.001 * Steps); |
267 Gear^.dY := Gear^.dY / (1.001 * Steps); |
251 Gear^.dY := Gear^.dY / (1.001 * Steps); |
268 |
252 |
269 if (Gear^.FrameTicks <= Steps) or (round(Gear^.Y) < cWaterLine) then |
253 if (Gear^.FrameTicks <= Steps) or (round(Gear^.Y) < cWaterLine) then |
270 DeleteVisualGear(Gear) |
|
271 else |
|
272 dec(Gear^.FrameTicks, Steps) |
|
273 end; |
|
274 |
|
275 //////////////////////////////////////////////////////////////////////////////// |
|
276 procedure doStepSteam(Gear: PVisualGear; Steps: Longword); |
|
277 begin |
|
278 Gear^.X:= Gear^.X + (cWindSpeedf * 100 + Gear^.dX) * Steps; |
|
279 Gear^.Y:= Gear^.Y - cDrownSpeedf * Steps; |
|
280 |
|
281 if Gear^.FrameTicks <= Steps then |
|
282 if Gear^.Frame = 0 then |
254 DeleteVisualGear(Gear) |
283 DeleteVisualGear(Gear) |
255 else |
284 else |
256 dec(Gear^.FrameTicks, Steps) |
285 begin |
257 end; |
286 if Random(2) = 0 then |
258 |
287 dec(Gear^.Frame); |
259 //////////////////////////////////////////////////////////////////////////////// |
288 Gear^.FrameTicks:= cExplFrameTicks |
260 procedure doStepSteam(Gear: PVisualGear; Steps: Longword); |
289 end |
261 begin |
290 else dec(Gear^.FrameTicks, Steps) |
262 Gear^.X:= Gear^.X + (cWindSpeedf * 100 + Gear^.dX) * Steps; |
|
263 Gear^.Y:= Gear^.Y - cDrownSpeedf * Steps; |
|
264 |
|
265 if Gear^.FrameTicks <= Steps then |
|
266 if Gear^.Frame = 0 then DeleteVisualGear(Gear) |
|
267 else |
|
268 begin |
|
269 if Random(2) = 0 then dec(Gear^.Frame); |
|
270 Gear^.FrameTicks:= cExplFrameTicks |
|
271 end |
|
272 else dec(Gear^.FrameTicks, Steps) |
|
273 end; |
291 end; |
274 |
292 |
275 //////////////////////////////////////////////////////////////////////////////// |
293 //////////////////////////////////////////////////////////////////////////////// |
276 procedure doStepAmmo(Gear: PVisualGear; Steps: Longword); |
294 procedure doStepAmmo(Gear: PVisualGear; Steps: Longword); |
277 begin |
295 begin |
278 Gear^.Y:= Gear^.Y - cDrownSpeedf * Steps; |
296 Gear^.Y:= Gear^.Y - cDrownSpeedf * Steps; |
279 |
297 |
280 Gear^.scale:= Gear^.scale + 0.0025 * Steps; |
298 Gear^.scale:= Gear^.scale + 0.0025 * Steps; |
281 Gear^.alpha:= Gear^.alpha - 0.0015 * Steps; |
299 Gear^.alpha:= Gear^.alpha - 0.0015 * Steps; |
282 |
300 |
283 if Gear^.alpha < 0 then DeleteVisualGear(Gear) |
301 if Gear^.alpha < 0 then |
|
302 DeleteVisualGear(Gear) |
284 end; |
303 end; |
285 |
304 |
286 //////////////////////////////////////////////////////////////////////////////// |
305 //////////////////////////////////////////////////////////////////////////////// |
287 procedure doStepSmoke(Gear: PVisualGear; Steps: Longword); |
306 procedure doStepSmoke(Gear: PVisualGear; Steps: Longword); |
288 begin |
307 begin |
289 Gear^.X:= Gear^.X + (cWindSpeedf + Gear^.dX) * Steps; |
308 Gear^.X:= Gear^.X + (cWindSpeedf + Gear^.dX) * Steps; |
290 Gear^.Y:= Gear^.Y - (cDrownSpeedf + Gear^.dY) * Steps; |
309 Gear^.Y:= Gear^.Y - (cDrownSpeedf + Gear^.dY) * Steps; |
291 |
310 |
292 Gear^.dX := Gear^.dX + (cWindSpeedf * 0.3 * Steps); |
311 Gear^.dX := Gear^.dX + (cWindSpeedf * 0.3 * Steps); |
293 //Gear^.dY := Gear^.dY - (cDrownSpeedf * 0.995); |
312 //Gear^.dY := Gear^.dY - (cDrownSpeedf * 0.995); |
294 |
313 |
295 if Gear^.FrameTicks <= Steps then |
314 if Gear^.FrameTicks <= Steps then |
296 if Gear^.Frame = 0 then DeleteVisualGear(Gear) |
315 if Gear^.Frame = 0 then |
297 else |
316 DeleteVisualGear(Gear) |
298 begin |
317 else |
299 if Random(2) = 0 then dec(Gear^.Frame); |
318 begin |
300 Gear^.FrameTicks:= cExplFrameTicks |
319 if Random(2) = 0 then |
301 end |
320 dec(Gear^.Frame); |
302 else dec(Gear^.FrameTicks, Steps) |
321 Gear^.FrameTicks:= cExplFrameTicks |
|
322 end |
|
323 else dec(Gear^.FrameTicks, Steps) |
303 end; |
324 end; |
304 |
325 |
305 //////////////////////////////////////////////////////////////////////////////// |
326 //////////////////////////////////////////////////////////////////////////////// |
306 procedure doStepDust(Gear: PVisualGear; Steps: Longword); |
327 procedure doStepDust(Gear: PVisualGear; Steps: Longword); |
307 begin |
328 begin |
308 Gear^.X:= Gear^.X + (cWindSpeedf + (cWindSpeedf * 0.03 * Steps) + Gear^.dX) * Steps; |
329 Gear^.X:= Gear^.X + (cWindSpeedf + (cWindSpeedf * 0.03 * Steps) + Gear^.dX) * Steps; |
309 Gear^.Y:= Gear^.Y - (Gear^.dY) * Steps; |
330 Gear^.Y:= Gear^.Y - (Gear^.dY) * Steps; |
310 |
331 |
311 Gear^.dX := Gear^.dX - (Gear^.dX * 0.005 * Steps); |
332 Gear^.dX := Gear^.dX - (Gear^.dX * 0.005 * Steps); |
312 Gear^.dY := Gear^.dY - (cDrownSpeedf * 0.001 * Steps); |
333 Gear^.dY := Gear^.dY - (cDrownSpeedf * 0.001 * Steps); |
313 |
334 |
314 if Gear^.FrameTicks <= Steps then |
335 if Gear^.FrameTicks <= Steps then |
315 if Gear^.Frame = 0 then DeleteVisualGear(Gear) |
336 if Gear^.Frame = 0 then |
316 else |
337 DeleteVisualGear(Gear) |
317 begin |
338 else |
318 dec(Gear^.Frame); |
339 begin |
319 Gear^.FrameTicks:= cExplFrameTicks |
340 dec(Gear^.Frame); |
320 end |
341 Gear^.FrameTicks:= cExplFrameTicks |
321 else dec(Gear^.FrameTicks, Steps) |
342 end |
|
343 else dec(Gear^.FrameTicks, Steps) |
322 end; |
344 end; |
323 |
345 |
324 //////////////////////////////////////////////////////////////////////////////// |
346 //////////////////////////////////////////////////////////////////////////////// |
325 procedure doStepSplash(Gear: PVisualGear; Steps: Longword); |
347 procedure doStepSplash(Gear: PVisualGear; Steps: Longword); |
326 begin |
348 begin |
327 if Gear^.FrameTicks <= Steps then |
349 if Gear^.FrameTicks <= Steps then |
328 DeleteVisualGear(Gear) |
350 DeleteVisualGear(Gear) |
329 else |
351 else |
330 dec(Gear^.FrameTicks, Steps); |
352 dec(Gear^.FrameTicks, Steps); |
331 end; |
353 end; |
332 |
354 |
333 //////////////////////////////////////////////////////////////////////////////// |
355 //////////////////////////////////////////////////////////////////////////////// |
334 procedure doStepDroplet(Gear: PVisualGear; Steps: Longword); |
356 procedure doStepDroplet(Gear: PVisualGear; Steps: Longword); |
335 begin |
357 begin |
336 Gear^.X:= Gear^.X + Gear^.dX * Steps; |
358 Gear^.X:= Gear^.X + Gear^.dX * Steps; |
337 |
359 |
338 Gear^.Y:= Gear^.Y + Gear^.dY * Steps; |
360 Gear^.Y:= Gear^.Y + Gear^.dY * Steps; |
339 Gear^.dY:= Gear^.dY + cGravityf * Steps; |
361 Gear^.dY:= Gear^.dY + cGravityf * Steps; |
340 |
362 |
341 if round(Gear^.Y) > cWaterLine then begin |
363 if round(Gear^.Y) > cWaterLine then |
|
364 begin |
342 DeleteVisualGear(Gear); |
365 DeleteVisualGear(Gear); |
343 PlaySound(TSound(ord(sndDroplet1) + Random(3))); |
366 PlaySound(TSound(ord(sndDroplet1) + Random(3))); |
344 end; |
367 end; |
345 end; |
368 end; |
346 |
369 |
347 //////////////////////////////////////////////////////////////////////////////// |
370 //////////////////////////////////////////////////////////////////////////////// |
348 procedure doStepSmokeRing(Gear: PVisualGear; Steps: Longword); |
371 procedure doStepSmokeRing(Gear: PVisualGear; Steps: Longword); |
349 begin |
372 begin |
350 inc(Gear^.Timer, Steps); |
373 inc(Gear^.Timer, Steps); |
351 if Gear^.Timer >= Gear^.FrameTicks then DeleteVisualGear(Gear) |
374 if Gear^.Timer >= Gear^.FrameTicks then |
|
375 DeleteVisualGear(Gear) |
352 else |
376 else |
353 begin |
377 begin |
354 Gear^.scale := 1.25 * (-power(2, -10 * Int(Gear^.Timer)/Gear^.FrameTicks) + 1) + 0.4; |
378 Gear^.scale := 1.25 * (-power(2, -10 * Int(Gear^.Timer)/Gear^.FrameTicks) + 1) + 0.4; |
355 Gear^.alpha := 1 - power(Gear^.Timer / 350, 4); |
379 Gear^.alpha := 1 - power(Gear^.Timer / 350, 4); |
356 if Gear^.alpha < 0 then Gear^.alpha:= 0; |
380 if Gear^.alpha < 0 then |
|
381 Gear^.alpha:= 0; |
357 end; |
382 end; |
358 end; |
383 end; |
359 |
384 |
360 //////////////////////////////////////////////////////////////////////////////// |
385 //////////////////////////////////////////////////////////////////////////////// |
361 procedure doStepFeather(Gear: PVisualGear; Steps: Longword); |
386 procedure doStepFeather(Gear: PVisualGear; Steps: Longword); |
670 begin |
704 begin |
671 inc(FrameTicks); |
705 inc(FrameTicks); |
672 if (FrameTicks mod Frame) = 0 then |
706 if (FrameTicks mod Frame) = 0 then |
673 begin |
707 begin |
674 tmp:= Gear^.Tint and $FF; |
708 tmp:= Gear^.Tint and $FF; |
675 if tdY >= 0 then inc(tmp) |
709 if tdY >= 0 then |
676 else dec(tmp); |
710 inc(tmp) |
677 if tmp < round(dX) then tdY:= 1; |
711 else |
678 if tmp > round(dY) then tdY:= -1; |
712 dec(tmp); |
679 if tmp > 255 then tmp := 255; |
713 if tmp < round(dX) then |
680 if tmp < 0 then tmp := 0; |
714 tdY:= 1; |
|
715 if tmp > round(dY) then |
|
716 tdY:= -1; |
|
717 if tmp > 255 then |
|
718 tmp := 255; |
|
719 if tmp < 0 then |
|
720 tmp := 0; |
681 Gear^.Tint:= (Gear^.Tint and $FFFFFF00) or Longword(tmp) |
721 Gear^.Tint:= (Gear^.Tint and $FFFFFF00) or Longword(tmp) |
682 end |
722 end |
683 end |
723 end |
684 end; |
724 end; |
685 |
725 |
686 //////////////////////////////////////////////////////////////////////////////// |
726 //////////////////////////////////////////////////////////////////////////////// |
687 procedure doStepSmoothWindBar(Gear: PVisualGear; Steps: Longword); |
727 procedure doStepSmoothWindBar(Gear: PVisualGear; Steps: Longword); |
688 begin |
728 begin |
689 inc(Gear^.Timer, Steps); |
729 inc(Gear^.Timer, Steps); |
690 |
730 |
691 while Gear^.Timer >= 10 do |
731 while Gear^.Timer >= 10 do |
692 begin |
732 begin |
693 dec(Gear^.Timer, 10); |
733 dec(Gear^.Timer, 10); |
694 if WindBarWidth < Gear^.Tag then inc(WindBarWidth) |
734 if WindBarWidth < Gear^.Tag then |
695 else if WindBarWidth > Gear^.Tag then dec(WindBarWidth); |
735 inc(WindBarWidth) |
|
736 else if WindBarWidth > Gear^.Tag then |
|
737 dec(WindBarWidth); |
696 end; |
738 end; |
697 |
739 |
698 if WindBarWidth = Gear^.Tag then |
740 if WindBarWidth = Gear^.Tag then |
699 DeleteVisualGear(Gear) |
741 DeleteVisualGear(Gear) |
700 end; |
742 end; |