2 var i, t: LongInt; |
2 var i, t: LongInt; |
3 amt: TAmmoType; |
3 amt: TAmmoType; |
4 hx, hy, cx, cy, tx, ty, sx, sy, m: LongInt; // hedgehog, crosshair, temp, sprite, direction |
4 hx, hy, cx, cy, tx, ty, sx, sy, m: LongInt; // hedgehog, crosshair, temp, sprite, direction |
5 lx, ly, dx, dy, ax, ay, aAngle, dAngle, hAngle: real; // laser, change |
5 lx, ly, dx, dy, ax, ay, aAngle, dAngle, hAngle: real; // laser, change |
6 defaultPos, HatVisible: boolean; |
6 defaultPos, HatVisible: boolean; |
7 VertexBuffer: array [0..1] of TVertex2f; |
|
8 HH: PHedgehog; |
7 HH: PHedgehog; |
9 begin |
8 begin |
10 HH:= PHedgehog(Gear^.Hedgehog); |
9 HH:= PHedgehog(Gear^.Hedgehog); |
11 if HH^.Unplaced then exit; |
10 if HH^.Unplaced then exit; |
12 m:= 1; |
11 m:= 1; |
28 sx:= hwRound(Gear^.X) + 1 + WorldDx; |
27 sx:= hwRound(Gear^.X) + 1 + WorldDx; |
29 sy:= hwRound(Gear^.Y) - 3 + WorldDy; |
28 sy:= hwRound(Gear^.Y) - 3 + WorldDy; |
30 |
29 |
31 if HH^.Effects[hePoisoned] then |
30 if HH^.Effects[hePoisoned] then |
32 begin |
31 begin |
33 Tint($4040FF00); |
32 Tint($40, $FF, $00, $40); |
34 DrawRotatedTextureF(SpritesData[sprSmokeWhite].texture, 2, 0, 0, sx, sy, 0, 1, 22, 22, (RealTicks shr 36) mod 360); |
33 DrawRotatedTextureF(SpritesData[sprSmokeWhite].texture, 2, 0, 0, sx, sy, 0, 1, 22, 22, (RealTicks shr 36) mod 360); |
35 Tint($FFFFFFFF) |
34 Tint($FF, $FF, $FF, $FF) |
36 end; |
35 end; |
37 |
36 |
38 if ((Gear^.State and gstWinner) <> 0) and |
37 if ((Gear^.State and gstWinner) <> 0) and |
39 ((CurAmmoGear = nil) or (CurAmmoGear^.Kind <> gtPickHammer)) then |
38 ((CurAmmoGear = nil) or (CurAmmoGear^.Kind <> gtPickHammer)) then |
40 begin |
39 begin |
108 ty:= round(ly + ay * (LAND_WIDTH div 4)); |
107 ty:= round(ly + ay * (LAND_WIDTH div 4)); |
109 end; |
108 end; |
110 |
109 |
111 //if (abs(lx-tx)>8) or (abs(ly-ty)>8) then |
110 //if (abs(lx-tx)>8) or (abs(ly-ty)>8) then |
112 begin |
111 begin |
|
112 glEnable(GL_LINE_SMOOTH); |
113 glDisable(GL_TEXTURE_2D); |
113 glDisable(GL_TEXTURE_2D); |
114 glEnable(GL_LINE_SMOOTH); |
|
115 |
|
116 glLineWidth(1.0); |
114 glLineWidth(1.0); |
117 |
115 Tint($FF, $00, $00, $C0); |
118 Tint($C0FF0000); |
116 glBegin(GL_LINES); |
119 VertexBuffer[0].X:= hx + WorldDx; |
117 glVertex3f(hx + WorldDx, hy + WorldDy, 0); |
120 VertexBuffer[0].Y:= hy + WorldDy; |
118 glVertex3f(tx + WorldDx, ty + WorldDy, 0); |
121 VertexBuffer[1].X:= tx + WorldDx; |
119 glEnd(); |
122 VertexBuffer[1].Y:= ty + WorldDy; |
120 glLineWidth(5.0); |
123 |
121 glBegin(GL_LINES); |
124 glEnableClientState(GL_VERTEX_ARRAY); |
122 glVertex3f(tx + WorldDx - 0.5, ty + WorldDy, 0); |
125 glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); |
123 glVertex3f(tx + WorldDx + 0.5, ty + WorldDy, 0); |
126 glDrawArrays(GL_LINES, 0, Length(VertexBuffer)); |
124 glEnd(); |
127 Tint($FFFFFFFF); |
125 Tint($FF, $FF, $FF, $FF); |
|
126 glDisable(GL_LINE_SMOOTH); |
128 glEnable(GL_TEXTURE_2D); |
127 glEnable(GL_TEXTURE_2D); |
129 glDisable(GL_LINE_SMOOTH); |
|
130 end; |
128 end; |
131 end; |
129 end; |
132 // draw crosshair |
130 // draw crosshair |
133 cx:= Round(hwRound(Gear^.X) + dx * 80); |
131 cx:= Round(hwRound(Gear^.X) + dx * 80); |
134 cy:= Round(hwRound(Gear^.Y) + dy * 80); |
132 cy:= Round(hwRound(Gear^.Y) + dy * 80); |
522 if ((Gear^.State and not gstWinner) = 0) |
520 if ((Gear^.State and not gstWinner) = 0) |
523 or (bShowFinger and ((Gear^.State and gstHHDriven) <> 0)) then |
521 or (bShowFinger and ((Gear^.State and gstHHDriven) <> 0)) then |
524 begin |
522 begin |
525 t:= hwRound(Gear^.Y) - cHHRadius - 12 + WorldDy; |
523 t:= hwRound(Gear^.Y) - cHHRadius - 12 + WorldDy; |
526 if (cTagsMask and htTransparent) <> 0 then |
524 if (cTagsMask and htTransparent) <> 0 then |
527 Tint($80FFFFFF); |
525 Tint($FF, $FF, $FF, $80); |
528 if ((cTagsMask and htHealth) <> 0) then |
526 if ((cTagsMask and htHealth) <> 0) then |
529 begin |
527 begin |
530 dec(t, HealthTagTex^.h + 2); |
528 dec(t, HealthTagTex^.h + 2); |
531 DrawCentered(hwRound(Gear^.X) + WorldDx, t, HealthTagTex) |
529 DrawCentered(hwRound(Gear^.X) + WorldDx, t, HealthTagTex) |
532 end; |
530 end; |
539 begin |
537 begin |
540 dec(t, Team^.NameTagTex^.h + 2); |
538 dec(t, Team^.NameTagTex^.h + 2); |
541 DrawCentered(hwRound(Gear^.X) + WorldDx, t, Team^.NameTagTex) |
539 DrawCentered(hwRound(Gear^.X) + WorldDx, t, Team^.NameTagTex) |
542 end; |
540 end; |
543 if (cTagsMask and htTransparent) <> 0 then |
541 if (cTagsMask and htTransparent) <> 0 then |
544 Tint($FFFFFFFF) |
542 Tint($FF, $FF, $FF, $FF) |
545 end; |
543 end; |
546 if (Gear^.State and gstHHDriven) <> 0 then // Current hedgehog |
544 if (Gear^.State and gstHHDriven) <> 0 then // Current hedgehog |
547 begin |
545 begin |
548 if bShowFinger and ((Gear^.State and gstHHDriven) <> 0) then |
546 if bShowFinger and ((Gear^.State and gstHHDriven) <> 0) then |
549 DrawSprite(sprFinger, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 64 + WorldDy, |
547 DrawSprite(sprFinger, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 64 + WorldDy, |
555 end |
553 end |
556 end; |
554 end; |
557 |
555 |
558 if HH^.Effects[hePoisoned] then |
556 if HH^.Effects[hePoisoned] then |
559 begin |
557 begin |
560 Tint($8040FF00); |
558 Tint($40, $FF, $00, $80); |
561 DrawRotatedTextureF(SpritesData[sprSmokeWhite].texture, 1.5, 0, 0, sx, sy, 0, 1, 22, 22, 360 - (RealTicks shr 37) mod 360); |
559 DrawRotatedTextureF(SpritesData[sprSmokeWhite].texture, 1.5, 0, 0, sx, sy, 0, 1, 22, 22, 360 - (RealTicks shr 37) mod 360); |
562 end; |
560 end; |
563 |
561 |
564 if Gear^.Invulnerable then |
562 if Gear^.Invulnerable then |
565 begin |
563 begin |
571 (CurrentHedgehog^.Gear = Gear) then |
569 (CurrentHedgehog^.Gear = Gear) then |
572 begin |
570 begin |
573 Tint($FF, $FF, $FF, max($40, floor($FF * abs(1 - (RealTicks mod 1500) / 750)))); |
571 Tint($FF, $FF, $FF, max($40, floor($FF * abs(1 - (RealTicks mod 1500) / 750)))); |
574 DrawSprite(sprVampiric, sx - 24, sy - 24, 0); |
572 DrawSprite(sprVampiric, sx - 24, sy - 24, 0); |
575 end; |
573 end; |
576 Tint($FFFFFFFF) |
574 Tint($FF, $FF, $FF, $FF) |
577 end; |
575 end; |
578 |
576 |
579 procedure DrawGears; |
577 procedure DrawGears; |
580 var Gear, HHGear: PGear; |
578 var Gear, HHGear: PGear; |
581 i: Longword; |
579 i: Longword; |
671 end; |
669 end; |
672 gtSwitcher: DrawSprite(sprSwitch, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 56 + WorldDy, (GameTicks shr 6) mod 12); |
670 gtSwitcher: DrawSprite(sprSwitch, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 56 + WorldDy, (GameTicks shr 6) mod 12); |
673 gtTarget: begin |
671 gtTarget: begin |
674 Tint($FF, $FF, $FF, floor($FF * Gear^.Timer / 1000)); |
672 Tint($FF, $FF, $FF, floor($FF * Gear^.Timer / 1000)); |
675 DrawSprite(sprTarget, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 16 + WorldDy, 0); |
673 DrawSprite(sprTarget, hwRound(Gear^.X) - 16 + WorldDx, hwRound(Gear^.Y) - 16 + WorldDy, 0); |
676 Tint($FFFFFFFF); |
674 Tint($FF, $FF, $FF, $FF); |
677 end; |
675 end; |
678 gtMortar: DrawRotated(sprMortar, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, DxDy2Angle(Gear^.dY, Gear^.dX)); |
676 gtMortar: DrawRotated(sprMortar, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, DxDy2Angle(Gear^.dY, Gear^.dX)); |
679 gtCake: if Gear^.Pos = 6 then |
677 gtCake: if Gear^.Pos = 6 then |
680 DrawRotatedf(sprCakeWalk, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, (GameTicks div 40) mod 6, hwSign(Gear^.dX), Gear^.DirAngle * hwSign(Gear^.dX) + 90) |
678 DrawRotatedf(sprCakeWalk, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, (GameTicks div 40) mod 6, hwSign(Gear^.dX), Gear^.DirAngle * hwSign(Gear^.dX) + 90) |
681 else |
679 else |
715 DrawTextureF(SpritesData[sprBirdy].Texture, 1, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, ((Gear^.Pos shr 6) or (RealTicks shr 8)) mod 2, Gear^.Tag, 75, 75); |
713 DrawTextureF(SpritesData[sprBirdy].Texture, 1, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, ((Gear^.Pos shr 6) or (RealTicks shr 8)) mod 2, Gear^.Tag, 75, 75); |
716 end; |
714 end; |
717 gtBigExplosion: begin |
715 gtBigExplosion: begin |
718 Tint($FF, $FF, $FF, floor($FF * (1 - power(Gear^.Timer / 250, 4)))); |
716 Tint($FF, $FF, $FF, floor($FF * (1 - power(Gear^.Timer / 250, 4)))); |
719 DrawRotatedTextureF(SpritesData[sprBigExplosion].Texture, 0.85 * (-power(2, -10 * Int(Gear^.Timer)/250) + 1) + 0.4, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, 1, 385, 385, Gear^.Angle); |
717 DrawRotatedTextureF(SpritesData[sprBigExplosion].Texture, 0.85 * (-power(2, -10 * Int(Gear^.Timer)/250) + 1) + 0.4, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, 1, 385, 385, Gear^.Angle); |
720 Tint($FFFFFFFF); |
718 Tint($FF, $FF, $FF, $FF); |
721 end; |
719 end; |
722 gtEgg: DrawRotatedTextureF(SpritesData[sprEgg].Texture, 1, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, 1, 16, 16, Gear^.DirAngle); |
720 gtEgg: DrawRotatedTextureF(SpritesData[sprEgg].Texture, 1, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, 1, 16, 16, Gear^.DirAngle); |
723 gtPiano: begin |
721 gtPiano: begin |
724 if (Gear^.State and gstDrowning) = 0 then |
722 if (Gear^.State and gstDrowning) = 0 then |
725 begin |
723 begin |
726 Tint($10FFFFFF); |
724 Tint($FF, $FF, $FF, $10); |
727 for i:= 8 downto 1 do |
725 for i:= 8 downto 1 do |
728 DrawRotatedTextureF(SpritesData[sprPiano].Texture, 1, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy - hwRound(Gear^.dY * 4 * i), 0, 1, 128, 128, 0); |
726 DrawRotatedTextureF(SpritesData[sprPiano].Texture, 1, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy - hwRound(Gear^.dY * 4 * i), 0, 1, 128, 128, 0); |
729 Tint($FFFFFFFF) |
727 Tint($FF, $FF, $FF, $FF) |
730 end; |
728 end; |
731 DrawRotatedTextureF(SpritesData[sprPiano].Texture, 1, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, 1, 128, 128, 0); |
729 DrawRotatedTextureF(SpritesData[sprPiano].Texture, 1, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, 1, 128, 128, 0); |
732 end; |
730 end; |
733 end; |
731 end; |
734 if Gear^.RenderTimer and (Gear^.Tex <> nil) then DrawCentered(hwRound(Gear^.X) + 8 + WorldDx, hwRound(Gear^.Y) + 8 + WorldDy, Gear^.Tex); |
732 if Gear^.RenderTimer and (Gear^.Tex <> nil) then DrawCentered(hwRound(Gear^.X) + 8 + WorldDx, hwRound(Gear^.Y) + 8 + WorldDy, Gear^.Tex); |