399 procedure DrawVisualGears(Layer: LongWord); |
491 procedure DrawVisualGears(Layer: LongWord); |
400 var Gear: PVisualGear; |
492 var Gear: PVisualGear; |
401 tinted: boolean; |
493 tinted: boolean; |
402 tmp: real; |
494 tmp: real; |
403 begin |
495 begin |
404 Gear:= VisualGearsList; |
|
405 case Layer of |
496 case Layer of |
406 // this layer is very distant in the background when stereo |
497 // this layer is very distant in the background when stereo |
407 0: while Gear <> nil do |
498 0: begin |
408 begin |
499 Gear:= VisualGearsLayer0; |
409 if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint); |
500 while Gear <> nil do |
410 case Gear^.Kind of |
501 begin |
411 vgtFlake: if SuddenDeathDmg then |
502 if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint); |
412 if vobSDVelocity = 0 then |
503 case Gear^.Kind of |
413 DrawSprite(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
504 vgtFlake: if SuddenDeathDmg then |
414 else |
505 if vobSDVelocity = 0 then |
415 DrawRotatedF(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle) |
506 DrawSprite(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
416 else |
507 else |
417 if vobVelocity = 0 then |
508 DrawRotatedF(sprSDFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle) |
418 DrawSprite(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
509 else |
419 else |
510 if vobVelocity = 0 then |
420 DrawRotatedF(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle); |
511 DrawSprite(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
421 vgtCloud: if SuddenDeathDmg then |
512 else |
422 DrawSprite(sprSDCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
513 DrawRotatedF(sprFlake, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame, 1, Gear^.Angle); |
423 else |
514 vgtCloud: if SuddenDeathDmg then |
424 DrawSprite(sprCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame); |
515 DrawSprite(sprSDCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame) |
425 end; |
516 else |
426 if Gear^.Tint <> $FFFFFFFF then Tint($FF,$FF,$FF,$FF); |
517 DrawSprite(sprCloud, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy + SkyOffset, Gear^.Frame); |
427 Gear:= Gear^.NextGear |
518 end; |
|
519 if Gear^.Tint <> $FFFFFFFF then Tint($FF,$FF,$FF,$FF); |
|
520 Gear:= Gear^.NextGear |
|
521 end |
428 end; |
522 end; |
429 // this layer is on the land level (which is close but behind the screen plane) when stereo |
523 // this layer is on the land level (which is close but behind the screen plane) when stereo |
430 1: while Gear <> nil do |
524 1: begin |
431 begin |
525 Gear:= VisualGearsLayer1; |
432 //tinted:= false; |
526 while Gear <> nil do |
433 if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint); |
527 begin |
434 case Gear^.Kind of |
528 //tinted:= false; |
435 vgtSmokeTrace: if Gear^.State < 8 then DrawSprite(sprSmokeTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State); |
529 if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint); |
436 vgtEvilTrace: if Gear^.State < 8 then DrawSprite(sprEvilTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State); |
530 case Gear^.Kind of |
437 vgtLineTrail: DrawLine(Gear^.X, Gear^.Y, Gear^.dX, Gear^.dY, 1.0, $FF, min(Gear^.Timer, $C0), min(Gear^.Timer, $80), min(Gear^.Timer, $FF)); |
531 vgtSmokeTrace: if Gear^.State < 8 then DrawSprite(sprSmokeTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State); |
438 end; |
532 vgtEvilTrace: if Gear^.State < 8 then DrawSprite(sprEvilTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State); |
439 if (cReducedQuality and rqAntiBoom) = 0 then |
533 vgtLineTrail: DrawLine(Gear^.X, Gear^.Y, Gear^.dX, Gear^.dY, 1.0, $FF, min(Gear^.Timer, $C0), min(Gear^.Timer, $80), min(Gear^.Timer, $FF)); |
440 case Gear^.Kind of |
534 end; |
441 vgtSmoke: DrawSprite(sprSmoke, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame); |
535 if (cReducedQuality and rqAntiBoom) = 0 then |
442 vgtSmokeWhite: DrawSprite(sprSmokeWhite, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame); |
536 case Gear^.Kind of |
443 vgtDust: if Gear^.State = 1 then |
537 vgtSmoke: DrawSprite(sprSmoke, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame); |
444 DrawSprite(sprSnowDust, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame) |
538 vgtSmokeWhite: DrawSprite(sprSmokeWhite, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame); |
445 else |
539 vgtDust: if Gear^.State = 1 then |
446 DrawSprite(sprDust, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame); |
540 DrawSprite(sprSnowDust, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame) |
447 vgtFire: if (Gear^.State and gstTmpFlag) = 0 then |
|
448 DrawSprite(sprFlame, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy, (RealTicks shr 6 + Gear^.Frame) mod 8) |
|
449 else |
|
450 DrawTextureF(SpritesData[sprFlame].Texture, Gear^.FrameTicks / 900, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, (RealTicks shr 7 + Gear^.Frame) mod 8, 1, 16, 16); |
|
451 vgtSplash: if SuddenDeathDmg then |
|
452 DrawSprite(sprSDSplash, round(Gear^.X) + WorldDx - 40, round(Gear^.Y) + WorldDy - 58, 19 - (Gear^.FrameTicks div 37)) |
|
453 else |
541 else |
454 DrawSprite(sprSplash, round(Gear^.X) + WorldDx - 40, round(Gear^.Y) + WorldDy - 58, 19 - (Gear^.FrameTicks div 37)); |
542 DrawSprite(sprDust, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame); |
455 vgtDroplet: if SuddenDeathDmg then |
543 vgtFire: if (Gear^.State and gstTmpFlag) = 0 then |
456 DrawSprite(sprSDDroplet, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame) |
544 DrawSprite(sprFlame, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy, (RealTicks shr 6 + Gear^.Frame) mod 8) |
457 else |
545 else |
458 DrawSprite(sprDroplet, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame); |
546 DrawTextureF(SpritesData[sprFlame].Texture, Gear^.FrameTicks / 900, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, (RealTicks shr 7 + Gear^.Frame) mod 8, 1, 16, 16); |
459 vgtBubble: DrawSprite(sprBubbles, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame);//(RealTicks div 64 + Gear^.Frame) mod 8); |
547 vgtSplash: if SuddenDeathDmg then |
460 end; |
548 DrawSprite(sprSDSplash, round(Gear^.X) + WorldDx - 40, round(Gear^.Y) + WorldDy - 58, 19 - (Gear^.FrameTicks div 37)) |
461 //if (Gear^.Tint <> $FFFFFFFF) or tinted then Tint($FF,$FF,$FF,$FF); |
549 else |
462 if (Gear^.Tint <> $FFFFFFFF) then Tint($FF,$FF,$FF,$FF); |
550 DrawSprite(sprSplash, round(Gear^.X) + WorldDx - 40, round(Gear^.Y) + WorldDy - 58, 19 - (Gear^.FrameTicks div 37)); |
463 Gear:= Gear^.NextGear |
551 vgtDroplet: if SuddenDeathDmg then |
|
552 DrawSprite(sprSDDroplet, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame) |
|
553 else |
|
554 DrawSprite(sprDroplet, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame); |
|
555 vgtBubble: DrawSprite(sprBubbles, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame);//(RealTicks div 64 + Gear^.Frame) mod 8); |
|
556 end; |
|
557 //if (Gear^.Tint <> $FFFFFFFF) or tinted then Tint($FF,$FF,$FF,$FF); |
|
558 if (Gear^.Tint <> $FFFFFFFF) then Tint($FF,$FF,$FF,$FF); |
|
559 Gear:= Gear^.NextGear |
|
560 end |
464 end; |
561 end; |
465 // this layer is on the screen plane (depth = 0) when stereo |
562 // this layer is on the screen plane (depth = 0) when stereo |
466 3: while Gear <> nil do |
563 3: begin |
467 begin |
564 Gear:= VisualGearsLayer3; |
468 tinted:= false; |
565 while Gear <> nil do |
469 if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint); |
566 begin |
470 case Gear^.Kind of |
567 tinted:= false; |
471 vgtSpeechBubble: begin |
568 if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint); |
472 if (Gear^.Tex <> nil) and (((Gear^.State = 0) and (Gear^.Hedgehog^.Team <> CurrentTeam)) or (Gear^.State = 1)) then |
569 case Gear^.Kind of |
473 begin |
570 vgtSpeechBubble: begin |
474 tinted:= true; |
571 if (Gear^.Tex <> nil) and (((Gear^.State = 0) and (Gear^.Hedgehog^.Team <> CurrentTeam)) or (Gear^.State = 1)) then |
475 Tint($FF, $FF, $FF, $66); |
572 begin |
476 DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex) |
573 tinted:= true; |
477 end |
574 Tint($FF, $FF, $FF, $66); |
478 else if (Gear^.Tex <> nil) and (((Gear^.State = 0) and (Gear^.Hedgehog^.Team = CurrentTeam)) or (Gear^.State = 2)) then |
575 DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex) |
479 DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex); |
576 end |
480 end; |
577 else if (Gear^.Tex <> nil) and (((Gear^.State = 0) and (Gear^.Hedgehog^.Team = CurrentTeam)) or (Gear^.State = 2)) then |
481 vgtSmallDamageTag: DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex); |
578 DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex); |
482 vgtHealthTag: if Gear^.Tex <> nil then |
579 end; |
483 begin |
580 vgtSmallDamageTag: DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex); |
484 if Gear^.Frame = 0 then |
581 vgtHealthTag: if Gear^.Tex <> nil then |
485 DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex) |
582 begin |
486 else |
583 if Gear^.Frame = 0 then |
487 begin |
584 DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex) |
488 if Gear^.Angle <> 0 then SetScale(Gear^.Angle) |
585 else |
489 else SetScale(cDefaultZoomLevel); |
586 begin |
490 DrawTexture(round(Gear^.X), round(Gear^.Y), Gear^.Tex); |
587 SetScale(cDefaultZoomLevel); |
491 SetScale(zoom) |
588 if Gear^.Angle = 0 then DrawTexture(round(Gear^.X), round(Gear^.Y), Gear^.Tex) |
492 end |
589 else DrawTexture(round(Gear^.X), round(Gear^.Y), Gear^.Tex, Gear^.Angle); |
493 end; |
590 SetScale(zoom) |
494 //if Gear^.Tex <> nil then DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex); |
591 end |
495 vgtStraightShot: DrawRotatedF(TSprite(Gear^.State), round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
592 end; |
496 end; |
593 //if Ger^.Tex <> nil then DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex); |
497 if (cReducedQuality and rqAntiBoom) = 0 then |
594 vgtStraightShot: DrawRotatedF(TSprite(Gear^.State), round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
498 case Gear^.Kind of |
595 end; |
499 vgtChunk: DrawRotatedF(sprChunk, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
596 if (cReducedQuality and rqAntiBoom) = 0 then |
500 end; |
597 case Gear^.Kind of |
501 if (Gear^.Tint <> $FFFFFFFF) or tinted then Tint($FF,$FF,$FF,$FF); |
598 vgtChunk: DrawRotatedF(sprChunk, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
502 Gear:= Gear^.NextGear |
599 end; |
|
600 if (Gear^.Tint <> $FFFFFFFF) or tinted then Tint($FF,$FF,$FF,$FF); |
|
601 Gear:= Gear^.NextGear |
|
602 end |
503 end; |
603 end; |
504 // this layer is outside the screen when stereo |
604 // this layer is outside the screen when stereo |
505 2: while Gear <> nil do |
605 2: begin |
506 begin |
606 Gear:= VisualGearsLayer2; |
507 tinted:= false; |
607 while Gear <> nil do |
508 if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint); |
608 begin |
509 case Gear^.Kind of |
609 tinted:= false; |
510 vgtExplosion: DrawSprite(sprExplosion50, round(Gear^.X) - 32 + WorldDx, round(Gear^.Y) - 32 + WorldDy, Gear^.State); |
610 if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint); |
511 vgtBigExplosion: begin |
611 case Gear^.Kind of |
512 tinted:= true; |
612 vgtExplosion: DrawSprite(sprExplosion50, round(Gear^.X) - 32 + WorldDx, round(Gear^.Y) - 32 + WorldDy, Gear^.State); |
513 Tint($FF, $FF, $FF, round($FF * (1 - power(Gear^.Timer / 250, 4)))); |
613 vgtBigExplosion: begin |
514 DrawRotatedTextureF(SpritesData[sprBigExplosion].Texture, 0.85 * (-power(2, -10 * Int(Gear^.Timer)/250) + 1) + 0.4, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 0, 1, 385, 385, Gear^.Angle); |
614 tinted:= true; |
|
615 Tint($FF, $FF, $FF, round($FF * (1 - power(Gear^.Timer / 250, 4)))); |
|
616 DrawRotatedTextureF(SpritesData[sprBigExplosion].Texture, 0.85 * (-power(2, -10 * Int(Gear^.Timer)/250) + 1) + 0.4, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 0, 1, 385, 385, Gear^.Angle); |
|
617 end; |
|
618 end; |
|
619 if (cReducedQuality and rqAntiBoom) = 0 then |
|
620 case Gear^.Kind of |
|
621 vgtExplPart: DrawSprite(sprExplPart, round(Gear^.X) + WorldDx - 16, round(Gear^.Y) + WorldDy - 16, 7 - Gear^.Frame); |
|
622 vgtExplPart2: DrawSprite(sprExplPart2, round(Gear^.X) + WorldDx - 16, round(Gear^.Y) + WorldDy - 16, 7 - Gear^.Frame); |
|
623 vgtSteam: DrawSprite(sprSmokeWhite, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame); |
|
624 vgtAmmo: begin |
|
625 tinted:= true; |
|
626 Tint($FF, $FF, $FF, round(Gear^.alpha * $FF)); |
|
627 DrawTextureF(ropeIconTex, Gear^.scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 0, 1, 32, 32); |
|
628 DrawTextureF(SpritesData[sprAMAmmos].Texture, Gear^.scale * 0.90, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame - 1, 1, 32, 32); |
|
629 end; |
|
630 vgtShell: begin |
|
631 if Gear^.FrameTicks < $FF then |
|
632 begin |
|
633 Tint($FF, $FF, $FF, Gear^.FrameTicks); |
|
634 tinted:= true |
|
635 end; |
|
636 DrawRotatedF(sprShell, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
515 end; |
637 end; |
516 end; |
638 vgtFeather: begin |
517 if (cReducedQuality and rqAntiBoom) = 0 then |
639 if Gear^.FrameTicks < 255 then |
518 case Gear^.Kind of |
640 begin |
519 vgtExplPart: DrawSprite(sprExplPart, round(Gear^.X) + WorldDx - 16, round(Gear^.Y) + WorldDy - 16, 7 - Gear^.Frame); |
641 Tint($FF, $FF, $FF, Gear^.FrameTicks); |
520 vgtExplPart2: DrawSprite(sprExplPart2, round(Gear^.X) + WorldDx - 16, round(Gear^.Y) + WorldDy - 16, 7 - Gear^.Frame); |
642 tinted:= true |
521 vgtSteam: DrawSprite(sprSmokeWhite, round(Gear^.X) + WorldDx - 11, round(Gear^.Y) + WorldDy - 11, 7 - Gear^.Frame); |
643 end; |
522 vgtAmmo: begin |
644 DrawRotatedF(sprFeather, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
523 tinted:= true; |
645 end; |
524 Tint($FF, $FF, $FF, round(Gear^.alpha * $FF)); |
646 vgtEgg: begin |
525 DrawTextureF(ropeIconTex, Gear^.scale, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 0, 1, 32, 32); |
647 if Gear^.FrameTicks < $FF then |
526 DrawTextureF(SpritesData[sprAMAmmos].Texture, Gear^.scale * 0.90, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame - 1, 1, 32, 32); |
648 begin |
527 end; |
649 Tint($FF, $FF, $FF, Gear^.FrameTicks); |
528 vgtShell: begin |
650 tinted:= true |
529 if Gear^.FrameTicks < $FF then |
651 end; |
|
652 DrawRotatedF(sprEgg, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
|
653 end; |
|
654 vgtBeeTrace: begin |
|
655 if Gear^.FrameTicks < $FF then |
|
656 Tint($FF, $FF, $FF, Gear^.FrameTicks div 2) |
|
657 else |
|
658 Tint($FF, $FF, $FF, $80); |
|
659 tinted:= true; |
|
660 DrawRotatedF(sprBeeTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, (RealTicks shr 4) mod cMaxAngle); |
|
661 end; |
|
662 vgtSmokeRing: begin |
|
663 tinted:= true; |
|
664 Tint($FF, $FF, $FF, round(Gear^.alpha * $FF)); |
|
665 DrawRotatedTextureF(SpritesData[sprSmokeRing].Texture, Gear^.scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 0, 1, 200, 200, Gear^.Angle); |
|
666 end; |
|
667 vgtNote: DrawRotatedF(sprNote, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
|
668 vgtBulletHit: DrawRotatedF(sprBulletHit, round(Gear^.X) + WorldDx - 0, round(Gear^.Y) + WorldDy - 0, 7 - (Gear^.FrameTicks div 50), 1, Gear^.Angle); |
|
669 end; |
|
670 case Gear^.Kind of |
|
671 vgtCircle: if gear^.Angle = 1 then |
530 begin |
672 begin |
531 Tint($FF, $FF, $FF, Gear^.FrameTicks); |
673 tmp:= Gear^.State / 100; |
532 tinted:= true |
674 DrawTexture(round(Gear^.X-24*tmp) + WorldDx, round(Gear^.Y-24*tmp) + WorldDy, SpritesData[sprVampiric].Texture, tmp) |
533 end; |
675 end |
534 DrawRotatedF(sprShell, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
676 else DrawCircle(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State, Gear^.Timer); |
535 end; |
677 end; |
536 vgtFeather: begin |
678 if (Gear^.Tint <> $FFFFFFFF) or tinted then Tint($FF,$FF,$FF,$FF); |
537 if Gear^.FrameTicks < 255 then |
679 Gear:= Gear^.NextGear |
538 begin |
680 end |
539 Tint($FF, $FF, $FF, Gear^.FrameTicks); |
|
540 tinted:= true |
|
541 end; |
|
542 DrawRotatedF(sprFeather, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
|
543 end; |
|
544 vgtEgg: begin |
|
545 if Gear^.FrameTicks < $FF then |
|
546 begin |
|
547 Tint($FF, $FF, $FF, Gear^.FrameTicks); |
|
548 tinted:= true |
|
549 end; |
|
550 DrawRotatedF(sprEgg, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
|
551 end; |
|
552 vgtBeeTrace: begin |
|
553 if Gear^.FrameTicks < $FF then |
|
554 Tint($FF, $FF, $FF, Gear^.FrameTicks div 2) |
|
555 else |
|
556 Tint($FF, $FF, $FF, $80); |
|
557 tinted:= true; |
|
558 DrawRotatedF(sprBeeTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, (RealTicks shr 4) mod cMaxAngle); |
|
559 end; |
|
560 vgtSmokeRing: begin |
|
561 tinted:= true; |
|
562 Tint($FF, $FF, $FF, round(Gear^.alpha * $FF)); |
|
563 DrawRotatedTextureF(SpritesData[sprSmokeRing].Texture, Gear^.scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 0, 1, 200, 200, Gear^.Angle); |
|
564 end; |
|
565 vgtNote: DrawRotatedF(sprNote, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle); |
|
566 vgtBulletHit: DrawRotatedF(sprBulletHit, round(Gear^.X) + WorldDx - 0, round(Gear^.Y) + WorldDy - 0, 7 - (Gear^.FrameTicks div 50), 1, Gear^.Angle); |
|
567 end; |
|
568 case Gear^.Kind of |
|
569 vgtCircle: if gear^.Angle = 1 then |
|
570 begin |
|
571 tmp:= Gear^.State / 100; |
|
572 DrawTexture(round(Gear^.X-24*tmp) + WorldDx, round(Gear^.Y-24*tmp) + WorldDy, SpritesData[sprVampiric].Texture, tmp) |
|
573 end |
|
574 else DrawCircle(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State, Gear^.Timer); |
|
575 end; |
|
576 if (Gear^.Tint <> $FFFFFFFF) or tinted then Tint($FF,$FF,$FF,$FF); |
|
577 Gear:= Gear^.NextGear |
|
578 end |
681 end |
579 end; |
682 end; |
580 end; |
683 end; |
581 |
684 |
582 function VisualGearByUID(uid : Longword) : PVisualGear; |
685 function VisualGearByUID(uid : Longword) : PVisualGear; |