changeset 4365 | 4f2b1a152979 |
parent 4337 | 85e02b1a8e8f |
child 4372 | 3836973380b9 |
4363:e944cc43f7a4 | 4365:4f2b1a152979 |
---|---|
129 Gear^.State := gstDrowning; |
129 Gear^.State := gstDrowning; |
130 Gear^.RenderTimer := false; |
130 Gear^.RenderTimer := false; |
131 if (Gear^.Kind <> gtSniperRifleShot) and (Gear^.Kind <> gtShotgunShot) and (Gear^.Kind <> gtDEagleShot) and (Gear^.Kind <> gtSineGunShot) then |
131 if (Gear^.Kind <> gtSniperRifleShot) and (Gear^.Kind <> gtShotgunShot) and (Gear^.Kind <> gtDEagleShot) and (Gear^.Kind <> gtSineGunShot) then |
132 if Gear^.Kind = gtHedgehog then |
132 if Gear^.Kind = gtHedgehog then |
133 begin |
133 begin |
134 if PHedgehog(Gear^.Hedgehog)^.Effects[heResurrectable] then |
134 if Gear^.Hedgehog^.Effects[heResurrectable] then |
135 ResurrectHedgehog(Gear) |
135 ResurrectHedgehog(Gear) |
136 else |
136 else |
137 begin |
137 begin |
138 Gear^.doStep := @doStepDrowningGear; |
138 Gear^.doStep := @doStepDrowningGear; |
139 Gear^.State := Gear^.State and (not gstHHDriven); |
139 Gear^.State := Gear^.State and (not gstHHDriven); |
140 AddCaption(Format(GetEventString(eidDrowned), PHedgehog(Gear^.Hedgehog)^.Name), cWhiteColor, capgrpMessage); |
140 AddCaption(Format(GetEventString(eidDrowned), Gear^.Hedgehog^.Name), cWhiteColor, capgrpMessage); |
141 end |
141 end |
142 end |
142 end |
143 else |
143 else |
144 Gear^.doStep := @doStepDrowningGear |
144 Gear^.doStep := @doStepDrowningGear |
145 end; |
145 end; |
201 end; |
201 end; |
202 |
202 |
203 if (Gear^.Invulnerable) then exit; |
203 if (Gear^.Invulnerable) then exit; |
204 |
204 |
205 //if _0_6 < Gear^.dY then |
205 //if _0_6 < Gear^.dY then |
206 // PlaySound(sndOw4, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack) |
206 // PlaySound(sndOw4, Gear^.Hedgehog^.Team^.voicepack) |
207 //else |
207 //else |
208 // PlaySound(sndOw1, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack); |
208 // PlaySound(sndOw1, Gear^.Hedgehog^.Team^.voicepack); |
209 |
209 |
210 ApplyDamage(Gear, dmg, dsFall); |
210 ApplyDamage(Gear, dmg, dsFall); |
211 end |
211 end |
212 end; |
212 end; |
213 |
213 |
624 exit |
624 exit |
625 end; |
625 end; |
626 dec(Gear^.Timer); |
626 dec(Gear^.Timer); |
627 if Gear^.Timer = 0 then |
627 if Gear^.Timer = 0 then |
628 begin |
628 begin |
629 PHedgehog(Gear^.Hedgehog)^.Gear^.Message:= PHedgehog(Gear^.Hedgehog)^.Gear^.Message and not gmAttack; |
629 Gear^.Hedgehog^.Gear^.Message:= Gear^.Hedgehog^.Gear^.Message and not gmAttack; |
630 PHedgehog(Gear^.Hedgehog)^.Gear^.State:= PHedgehog(Gear^.Hedgehog)^.Gear^.State and not gstAttacking; |
630 Gear^.Hedgehog^.Gear^.State:= Gear^.Hedgehog^.Gear^.State and not gstAttacking; |
631 AttackBar:= 0; |
631 AttackBar:= 0; |
632 |
632 |
633 Gear^.SoundChannel := LoopSound(sndBee); |
633 Gear^.SoundChannel := LoopSound(sndBee); |
634 Gear^.Timer := 5000; |
634 Gear^.Timer := 5000; |
635 // save initial speed in otherwise unused Friction variable |
635 // save initial speed in otherwise unused Friction variable |
804 var |
804 var |
805 HHGear: PGear; |
805 HHGear: PGear; |
806 shell: PVisualGear; |
806 shell: PVisualGear; |
807 begin |
807 begin |
808 cArtillery := true; |
808 cArtillery := true; |
809 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
809 HHGear := Gear^.Hedgehog^.Gear; |
810 HHGear^.State := HHGear^.State or gstNotKickable; |
810 HHGear^.State := HHGear^.State or gstNotKickable; |
811 HedgehogChAngle(HHGear); |
811 HedgehogChAngle(HHGear); |
812 if not cLaserSighting then |
812 if not cLaserSighting then |
813 // game does not have default laser sight. turn it on and give them a chance to aim |
813 // game does not have default laser sight. turn it on and give them a chance to aim |
814 begin |
814 begin |
897 var |
897 var |
898 i, ei: LongInt; |
898 i, ei: LongInt; |
899 HHGear: PGear; |
899 HHGear: PGear; |
900 begin |
900 begin |
901 AllInactive := false; |
901 AllInactive := false; |
902 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
902 HHGear := Gear^.Hedgehog^.Gear; |
903 dec(Gear^.Timer); |
903 dec(Gear^.Timer); |
904 if (Gear^.Timer = 0)or((Gear^.Message and gmDestroy) <> 0)or((HHGear^.State and gstHHDriven) = |
904 if (Gear^.Timer = 0)or((Gear^.Message and gmDestroy) <> 0)or((HHGear^.State and gstHHDriven) = |
905 0) then |
905 0) then |
906 begin |
906 begin |
907 StopSound(Gear^.SoundChannel); |
907 StopSound(Gear^.SoundChannel); |
971 i, y: LongInt; |
971 i, y: LongInt; |
972 ar: TRangeArray; |
972 ar: TRangeArray; |
973 HHGear: PGear; |
973 HHGear: PGear; |
974 begin |
974 begin |
975 i := 0; |
975 i := 0; |
976 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
976 HHGear := Gear^.Hedgehog^.Gear; |
977 |
977 |
978 y := hwRound(Gear^.Y) - cHHRadius * 2; |
978 y := hwRound(Gear^.Y) - cHHRadius * 2; |
979 while y < hwRound(Gear^.Y) do |
979 while y < hwRound(Gear^.Y) do |
980 begin |
980 begin |
981 ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2)); |
981 ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2)); |
1003 b: boolean; |
1003 b: boolean; |
1004 prevX: LongInt; |
1004 prevX: LongInt; |
1005 begin |
1005 begin |
1006 AllInactive := false; |
1006 AllInactive := false; |
1007 dec(Gear^.Timer); |
1007 dec(Gear^.Timer); |
1008 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
1008 HHGear := Gear^.Hedgehog^.Gear; |
1009 |
1009 |
1010 HedgehogChAngle(HHGear); |
1010 HedgehogChAngle(HHGear); |
1011 |
1011 |
1012 b := false; |
1012 b := false; |
1013 |
1013 |
1085 var |
1085 var |
1086 HHGear: PGear; |
1086 HHGear: PGear; |
1087 begin |
1087 begin |
1088 BTPrevAngle := High(LongInt); |
1088 BTPrevAngle := High(LongInt); |
1089 BTSteps := 0; |
1089 BTSteps := 0; |
1090 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
1090 HHGear := Gear^.Hedgehog^.Gear; |
1091 HHGear^.Message := 0; |
1091 HHGear^.Message := 0; |
1092 HHGear^.State := HHGear^.State or gstNotKickable; |
1092 HHGear^.State := HHGear^.State or gstNotKickable; |
1093 Gear^.doStep := @doStepBlowTorchWork |
1093 Gear^.doStep := @doStepBlowTorchWork |
1094 end; |
1094 end; |
1095 |
1095 |
1100 |
1100 |
1101 procedure doStepRopeAfterAttack(Gear: PGear); |
1101 procedure doStepRopeAfterAttack(Gear: PGear); |
1102 var |
1102 var |
1103 HHGear: PGear; |
1103 HHGear: PGear; |
1104 begin |
1104 begin |
1105 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
1105 HHGear := Gear^.Hedgehog^.Gear; |
1106 if ((HHGear^.State and gstHHDriven) = 0) |
1106 if ((HHGear^.State and gstHHDriven) = 0) |
1107 or (CheckGearDrowning(HHGear)) |
1107 or (CheckGearDrowning(HHGear)) |
1108 or TestCollisionYwithGear(HHGear, 1) then |
1108 or TestCollisionYwithGear(HHGear, 1) then |
1109 begin |
1109 begin |
1110 DeleteGear(Gear); |
1110 DeleteGear(Gear); |
1126 if (Gear^.Message and gmAttack) <> 0 then |
1126 if (Gear^.Message and gmAttack) <> 0 then |
1127 begin |
1127 begin |
1128 Gear^.X := HHGear^.X; |
1128 Gear^.X := HHGear^.X; |
1129 Gear^.Y := HHGear^.Y; |
1129 Gear^.Y := HHGear^.Y; |
1130 |
1130 |
1131 ApplyAngleBounds(PHedgehog(Gear^.Hedgehog)^, amRope); |
1131 ApplyAngleBounds(Gear^.Hedgehog^, amRope); |
1132 |
1132 |
1133 Gear^.dX := SignAs(AngleSin(HHGear^.Angle), HHGear^.dX); |
1133 Gear^.dX := SignAs(AngleSin(HHGear^.Angle), HHGear^.dX); |
1134 Gear^.dY := -AngleCos(HHGear^.Angle); |
1134 Gear^.dY := -AngleCos(HHGear^.Angle); |
1135 Gear^.Friction := _450; |
1135 Gear^.Friction := _450; |
1136 Gear^.Elasticity := _0; |
1136 Gear^.Elasticity := _0; |
1168 Gear^.Elasticity := _0; |
1168 Gear^.Elasticity := _0; |
1169 Gear^.doStep := @doStepRopeAfterAttack |
1169 Gear^.doStep := @doStepRopeAfterAttack |
1170 end; |
1170 end; |
1171 |
1171 |
1172 begin |
1172 begin |
1173 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
1173 HHGear := Gear^.Hedgehog^.Gear; |
1174 |
1174 |
1175 if ((HHGear^.State and gstHHDriven) = 0) |
1175 if ((HHGear^.State and gstHHDriven) = 0) |
1176 or (CheckGearDrowning(HHGear)) then |
1176 or (CheckGearDrowning(HHGear)) then |
1177 begin |
1177 begin |
1178 PlaySound(sndRopeRelease); |
1178 PlaySound(sndRopeRelease); |
1331 end; |
1331 end; |
1332 |
1332 |
1333 |
1333 |
1334 if (Gear^.Message and gmAttack) <> 0 then |
1334 if (Gear^.Message and gmAttack) <> 0 then |
1335 if (Gear^.State and gsttmpFlag) <> 0 then |
1335 if (Gear^.State and gsttmpFlag) <> 0 then |
1336 with PHedgehog(Gear^.Hedgehog)^ do |
1336 with Gear^.Hedgehog^ do |
1337 begin |
1337 begin |
1338 PlaySound(sndRopeRelease); |
1338 PlaySound(sndRopeRelease); |
1339 if CurAmmoType <> amParachute then |
1339 if CurAmmoType <> amParachute then |
1340 WaitCollision |
1340 WaitCollision |
1341 else |
1341 else |
1365 begin |
1365 begin |
1366 Gear^.X := Gear^.X - Gear^.dX; |
1366 Gear^.X := Gear^.X - Gear^.dX; |
1367 Gear^.Y := Gear^.Y - Gear^.dY; |
1367 Gear^.Y := Gear^.Y - Gear^.dY; |
1368 Gear^.Elasticity := Gear^.Elasticity + _1; |
1368 Gear^.Elasticity := Gear^.Elasticity + _1; |
1369 |
1369 |
1370 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
1370 HHGear := Gear^.Hedgehog^.Gear; |
1371 DeleteCI(HHGear); |
1371 DeleteCI(HHGear); |
1372 |
1372 |
1373 if (HHGear^.State and gstMoving) <> 0 then |
1373 if (HHGear^.State and gstMoving) <> 0 then |
1374 begin |
1374 begin |
1375 if TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) then SetLittle(HHGear^.dX); |
1375 if TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) then SetLittle(HHGear^.dX); |
1445 if (Gear^.Elasticity > Gear^.Friction) |
1445 if (Gear^.Elasticity > Gear^.Friction) |
1446 or ((Gear^.Message and gmAttack) = 0) |
1446 or ((Gear^.Message and gmAttack) = 0) |
1447 or ((HHGear^.State and gstHHDriven) = 0) |
1447 or ((HHGear^.State and gstHHDriven) = 0) |
1448 or (HHGear^.Damage > 0) then |
1448 or (HHGear^.Damage > 0) then |
1449 begin |
1449 begin |
1450 with PHedgehog(Gear^.Hedgehog)^.Gear^ do |
1450 with Gear^.Hedgehog^.Gear^ do |
1451 begin |
1451 begin |
1452 State := State and not gstAttacking; |
1452 State := State and not gstAttacking; |
1453 Message := Message and not gmAttack |
1453 Message := Message and not gmAttack |
1454 end; |
1454 end; |
1455 DeleteGear(Gear) |
1455 DeleteGear(Gear) |
1806 |
1806 |
1807 procedure doStepShover(Gear: PGear); |
1807 procedure doStepShover(Gear: PGear); |
1808 var |
1808 var |
1809 HHGear: PGear; |
1809 HHGear: PGear; |
1810 begin |
1810 begin |
1811 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
1811 HHGear := Gear^.Hedgehog^.Gear; |
1812 HHGear^.State := HHGear^.State or gstNoDamage; |
1812 HHGear^.State := HHGear^.State or gstNoDamage; |
1813 DeleteCI(HHGear); |
1813 DeleteCI(HHGear); |
1814 |
1814 |
1815 AmmoShove(Gear, 30, 115); |
1815 AmmoShove(Gear, 30, 115); |
1816 |
1816 |
1823 procedure doStepWhip(Gear: PGear); |
1823 procedure doStepWhip(Gear: PGear); |
1824 var |
1824 var |
1825 HHGear: PGear; |
1825 HHGear: PGear; |
1826 i: LongInt; |
1826 i: LongInt; |
1827 begin |
1827 begin |
1828 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
1828 HHGear := Gear^.Hedgehog^.Gear; |
1829 HHGear^.State := HHGear^.State or gstNoDamage; |
1829 HHGear^.State := HHGear^.State or gstNoDamage; |
1830 DeleteCI(HHGear); |
1830 DeleteCI(HHGear); |
1831 |
1831 |
1832 for i:= 0 to 3 do |
1832 for i:= 0 to 3 do |
1833 begin |
1833 begin |
1976 DeleteGear(Gear); |
1976 DeleteGear(Gear); |
1977 AfterAttack; |
1977 AfterAttack; |
1978 exit |
1978 exit |
1979 end; |
1979 end; |
1980 |
1980 |
1981 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
1981 HHGear := Gear^.Hedgehog^.Gear; |
1982 if hwRound(HHGear^.Y) <= Gear^.Tag - 2 then |
1982 if hwRound(HHGear^.Y) <= Gear^.Tag - 2 then |
1983 begin |
1983 begin |
1984 Gear^.Tag := hwRound(HHGear^.Y); |
1984 Gear^.Tag := hwRound(HHGear^.Y); |
1985 DrawTunnel(HHGear^.X - int2hwFloat(cHHRadius), HHGear^.Y - _1, _0_5, _0, cHHRadius * 4, 2); |
1985 DrawTunnel(HHGear^.X - int2hwFloat(cHHRadius), HHGear^.Y - _1, _0_5, _0, cHHRadius * 4, 2); |
1986 HHGear^.State := HHGear^.State or gstNoDamage; |
1986 HHGear^.State := HHGear^.State or gstNoDamage; |
2006 procedure doStepFirePunch(Gear: PGear); |
2006 procedure doStepFirePunch(Gear: PGear); |
2007 var |
2007 var |
2008 HHGear: PGear; |
2008 HHGear: PGear; |
2009 begin |
2009 begin |
2010 AllInactive := false; |
2010 AllInactive := false; |
2011 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2011 HHGear := Gear^.Hedgehog^.Gear; |
2012 DeleteCI(HHGear); |
2012 DeleteCI(HHGear); |
2013 HHGear^.X := int2hwFloat(hwRound(HHGear^.X)) - _0_5; |
2013 HHGear^.X := int2hwFloat(hwRound(HHGear^.X)) - _0_5; |
2014 HHGear^.dX := SignAs(cLittle, Gear^.dX); |
2014 HHGear^.dX := SignAs(cLittle, Gear^.dX); |
2015 |
2015 |
2016 HHGear^.dY := - _0_3; |
2016 HHGear^.dY := - _0_3; |
2029 |
2029 |
2030 procedure doStepParachuteWork(Gear: PGear); |
2030 procedure doStepParachuteWork(Gear: PGear); |
2031 var |
2031 var |
2032 HHGear: PGear; |
2032 HHGear: PGear; |
2033 begin |
2033 begin |
2034 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2034 HHGear := Gear^.Hedgehog^.Gear; |
2035 |
2035 |
2036 inc(Gear^.Timer); |
2036 inc(Gear^.Timer); |
2037 |
2037 |
2038 if TestCollisionYwithGear(HHGear, 1) |
2038 if TestCollisionYwithGear(HHGear, 1) |
2039 or ((HHGear^.State and gstHHDriven) = 0) |
2039 or ((HHGear^.State and gstHHDriven) = 0) |
2068 |
2068 |
2069 procedure doStepParachute(Gear: PGear); |
2069 procedure doStepParachute(Gear: PGear); |
2070 var |
2070 var |
2071 HHGear: PGear; |
2071 HHGear: PGear; |
2072 begin |
2072 begin |
2073 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2073 HHGear := Gear^.Hedgehog^.Gear; |
2074 |
2074 |
2075 DeleteCI(HHGear); |
2075 DeleteCI(HHGear); |
2076 |
2076 |
2077 AfterAttack; |
2077 AfterAttack; |
2078 |
2078 |
2165 HHGear: PGear; |
2165 HHGear: PGear; |
2166 x, y, tx, ty: hwFloat; |
2166 x, y, tx, ty: hwFloat; |
2167 begin |
2167 begin |
2168 AllInactive := false; |
2168 AllInactive := false; |
2169 |
2169 |
2170 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2170 HHGear := Gear^.Hedgehog^.Gear; |
2171 tx := int2hwFloat(TargetPoint.X); |
2171 tx := int2hwFloat(TargetPoint.X); |
2172 ty := int2hwFloat(TargetPoint.Y); |
2172 ty := int2hwFloat(TargetPoint.Y); |
2173 x := HHGear^.X; |
2173 x := HHGear^.X; |
2174 y := HHGear^.Y; |
2174 y := HHGear^.Y; |
2175 |
2175 |
2200 //////////////////////////////////////////////////////////////////////////////// |
2200 //////////////////////////////////////////////////////////////////////////////// |
2201 procedure doStepTeleportAfter(Gear: PGear); |
2201 procedure doStepTeleportAfter(Gear: PGear); |
2202 var |
2202 var |
2203 HHGear: PGear; |
2203 HHGear: PGear; |
2204 begin |
2204 begin |
2205 PHedgehog(Gear^.Hedgehog)^.Unplaced := false; |
2205 Gear^.Hedgehog^.Unplaced := false; |
2206 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2206 HHGear := Gear^.Hedgehog^.Gear; |
2207 HHGear^.Y := HHGear^.Y + HHGear^.dY; |
2207 HHGear^.Y := HHGear^.Y + HHGear^.dY; |
2208 // hedgehog falling to collect cases |
2208 // hedgehog falling to collect cases |
2209 HHGear^.dY := HHGear^.dY + cGravity; |
2209 HHGear^.dY := HHGear^.dY + cGravity; |
2210 if TestCollisionYwithGear(HHGear, 1) |
2210 if TestCollisionYwithGear(HHGear, 1) |
2211 or CheckGearDrowning(HHGear) then |
2211 or CheckGearDrowning(HHGear) then |
2231 var |
2231 var |
2232 HHGear: PGear; |
2232 HHGear: PGear; |
2233 begin |
2233 begin |
2234 AllInactive := false; |
2234 AllInactive := false; |
2235 |
2235 |
2236 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2236 HHGear := Gear^.Hedgehog^.Gear; |
2237 if not TryPlaceOnLand(TargetPoint.X - SpritesData[sprHHTelepMask].Width div 2, |
2237 if not TryPlaceOnLand(TargetPoint.X - SpritesData[sprHHTelepMask].Width div 2, |
2238 TargetPoint.Y - SpritesData[sprHHTelepMask].Height div 2, |
2238 TargetPoint.Y - SpritesData[sprHHTelepMask].Height div 2, |
2239 sprHHTelepMask, 0, false) then |
2239 sprHHTelepMask, 0, false) then |
2240 begin |
2240 begin |
2241 HHGear^.Message := HHGear^.Message and not gmAttack; |
2241 HHGear^.Message := HHGear^.Message and not gmAttack; |
2273 begin |
2273 begin |
2274 AllInactive := false; |
2274 AllInactive := false; |
2275 |
2275 |
2276 if ((Gear^.Message and not gmSwitch) <> 0) or (TurnTimeLeft = 0) then |
2276 if ((Gear^.Message and not gmSwitch) <> 0) or (TurnTimeLeft = 0) then |
2277 begin |
2277 begin |
2278 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2278 HHGear := Gear^.Hedgehog^.Gear; |
2279 Msg := Gear^.Message and not gmSwitch; |
2279 Msg := Gear^.Message and not gmSwitch; |
2280 DeleteGear(Gear); |
2280 DeleteGear(Gear); |
2281 OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^); |
2281 OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^); |
2282 ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^); |
2282 ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^); |
2283 |
2283 |
2324 var |
2324 var |
2325 HHGear: PGear; |
2325 HHGear: PGear; |
2326 begin |
2326 begin |
2327 Gear^.doStep := @doStepSwitcherWork; |
2327 Gear^.doStep := @doStepSwitcherWork; |
2328 |
2328 |
2329 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2329 HHGear := Gear^.Hedgehog^.Gear; |
2330 with HHGear^ do |
2330 with HHGear^ do |
2331 begin |
2331 begin |
2332 State := State and not gstAttacking; |
2332 State := State and not gstAttacking; |
2333 Message := Message and not gmAttack |
2333 Message := Message and not gmAttack |
2334 end |
2334 end |
2375 i: LongWord; |
2375 i: LongWord; |
2376 HHGear: PGear; |
2376 HHGear: PGear; |
2377 begin |
2377 begin |
2378 AllInactive := false; |
2378 AllInactive := false; |
2379 |
2379 |
2380 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2380 HHGear := Gear^.Hedgehog^.Gear; |
2381 HHGear^.State := HHGear^.State or gstNoDamage; |
2381 HHGear^.State := HHGear^.State or gstNoDamage; |
2382 DeleteCI(HHGear); |
2382 DeleteCI(HHGear); |
2383 |
2383 |
2384 Gear^.X := HHGear^.X; |
2384 Gear^.X := HHGear^.X; |
2385 Gear^.Y := HHGear^.Y; |
2385 Gear^.Y := HHGear^.Y; |
2435 AllInactive := false; |
2435 AllInactive := false; |
2436 dec(Gear^.Timer); |
2436 dec(Gear^.Timer); |
2437 if Gear^.Timer = 0 then |
2437 if Gear^.Timer = 0 then |
2438 begin |
2438 begin |
2439 Gear^.Pos := 1; |
2439 Gear^.Pos := 1; |
2440 PlaySound(sndKamikaze, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack); |
2440 PlaySound(sndKamikaze, Gear^.Hedgehog^.Team^.voicepack); |
2441 Gear^.doStep := @doStepKamikazeWork |
2441 Gear^.doStep := @doStepKamikazeWork |
2442 end |
2442 end |
2443 end; |
2443 end; |
2444 |
2444 |
2445 procedure doStepKamikaze(Gear: PGear); |
2445 procedure doStepKamikaze(Gear: PGear); |
2446 var |
2446 var |
2447 HHGear: PGear; |
2447 HHGear: PGear; |
2448 begin |
2448 begin |
2449 AllInactive := false; |
2449 AllInactive := false; |
2450 |
2450 |
2451 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2451 HHGear := Gear^.Hedgehog^.Gear; |
2452 |
2452 |
2453 HHGear^.dX := Gear^.dX; |
2453 HHGear^.dX := Gear^.dX; |
2454 HHGear^.dY := Gear^.dY; |
2454 HHGear^.dY := Gear^.dY; |
2455 |
2455 |
2456 Gear^.dX := SignAs(_0_45, Gear^.dX); |
2456 Gear^.dX := SignAs(_0_45, Gear^.dX); |
2635 var |
2635 var |
2636 HHGear: PGear; |
2636 HHGear: PGear; |
2637 begin |
2637 begin |
2638 AllInactive := false; |
2638 AllInactive := false; |
2639 |
2639 |
2640 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2640 HHGear := Gear^.Hedgehog^.Gear; |
2641 HHGear^.Message := HHGear^.Message and (not gmAttack); |
2641 HHGear^.Message := HHGear^.Message and (not gmAttack); |
2642 DeleteCI(HHGear); |
2642 DeleteCI(HHGear); |
2643 Gear^.IntersectGear:= nil; |
2643 Gear^.IntersectGear:= nil; |
2644 |
2644 |
2645 FollowGear := Gear; |
2645 FollowGear := Gear; |
2685 if Gear^.Timer > 250 then |
2685 if Gear^.Timer > 250 then |
2686 begin |
2686 begin |
2687 Gear^.Timer := 0; |
2687 Gear^.Timer := 0; |
2688 inc(Gear^.Pos); |
2688 inc(Gear^.Pos); |
2689 if Gear^.Pos = 5 then |
2689 if Gear^.Pos = 5 then |
2690 PlaySound(sndYoohoo, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack) |
2690 PlaySound(sndYoohoo, Gear^.Hedgehog^.Team^.voicepack) |
2691 end; |
2691 end; |
2692 |
2692 |
2693 if Gear^.Pos = 14 then |
2693 if Gear^.Pos = 14 then |
2694 Gear^.doStep := @doStepSeductionWork |
2694 Gear^.doStep := @doStepSeductionWork |
2695 end; |
2695 end; |
2696 |
2696 |
2697 procedure doStepSeduction(Gear: PGear); |
2697 procedure doStepSeduction(Gear: PGear); |
2698 begin |
2698 begin |
2699 AllInactive := false; |
2699 AllInactive := false; |
2700 DeleteCI(PHedgehog(Gear^.Hedgehog)^.Gear); |
2700 DeleteCI(Gear^.Hedgehog^.Gear); |
2701 Gear^.doStep := @doStepSeductionWear |
2701 Gear^.doStep := @doStepSeductionWear |
2702 end; |
2702 end; |
2703 |
2703 |
2704 //////////////////////////////////////////////////////////////////////////////// |
2704 //////////////////////////////////////////////////////////////////////////////// |
2705 procedure doStepWaterUp(Gear: PGear); |
2705 procedure doStepWaterUp(Gear: PGear); |
2834 rx, ry: hwFloat; |
2834 rx, ry: hwFloat; |
2835 gX, gY: LongInt; |
2835 gX, gY: LongInt; |
2836 begin |
2836 begin |
2837 AllInactive := false; |
2837 AllInactive := false; |
2838 dec(Gear^.Timer); |
2838 dec(Gear^.Timer); |
2839 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2839 HHGear := Gear^.Hedgehog^.Gear; |
2840 HedgehogChAngle(HHGear); |
2840 HedgehogChAngle(HHGear); |
2841 gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
2841 gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
2842 gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
2842 gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
2843 if (Gear^.Timer mod 100) = 0 then |
2843 if (Gear^.Timer mod 100) = 0 then |
2844 begin |
2844 begin |
2862 |
2862 |
2863 procedure doStepBallgun(Gear: PGear); |
2863 procedure doStepBallgun(Gear: PGear); |
2864 var |
2864 var |
2865 HHGear: PGear; |
2865 HHGear: PGear; |
2866 begin |
2866 begin |
2867 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2867 HHGear := Gear^.Hedgehog^.Gear; |
2868 HHGear^.Message := HHGear^.Message and not (gmUp or gmDown); |
2868 HHGear^.Message := HHGear^.Message and not (gmUp or gmDown); |
2869 HHGear^.State := HHGear^.State or gstNotKickable; |
2869 HHGear^.State := HHGear^.State or gstNotKickable; |
2870 Gear^.doStep := @doStepBallgunWork |
2870 Gear^.doStep := @doStepBallgunWork |
2871 end; |
2871 end; |
2872 |
2872 |
2887 if ((TrainingFlags and tfRCPlane) = 0) and (Gear^.Timer > 0) then dec(Gear^.Timer); |
2887 if ((TrainingFlags and tfRCPlane) = 0) and (Gear^.Timer > 0) then dec(Gear^.Timer); |
2888 |
2888 |
2889 if ((TrainingFlags and tfRCPlane) <> 0) and ((TrainingFlags and tfTimeTrial) <> 0 ) and ( |
2889 if ((TrainingFlags and tfRCPlane) <> 0) and ((TrainingFlags and tfTimeTrial) <> 0 ) and ( |
2890 TimeTrialStartTime = 0) then TimeTrialStartTime := RealTicks; |
2890 TimeTrialStartTime = 0) then TimeTrialStartTime := RealTicks; |
2891 |
2891 |
2892 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2892 HHGear := Gear^.Hedgehog^.Gear; |
2893 FollowGear := Gear; |
2893 FollowGear := Gear; |
2894 |
2894 |
2895 fChanged := false; |
2895 fChanged := false; |
2896 if ((HHGear^.State and gstHHDriven) = 0) or (Gear^.Timer = 0) then |
2896 if ((HHGear^.State and gstHHDriven) = 0) or (Gear^.Timer = 0) then |
2897 begin |
2897 begin |
3023 |
3023 |
3024 procedure doStepRCPlane(Gear: PGear); |
3024 procedure doStepRCPlane(Gear: PGear); |
3025 var |
3025 var |
3026 HHGear: PGear; |
3026 HHGear: PGear; |
3027 begin |
3027 begin |
3028 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
3028 HHGear := Gear^.Hedgehog^.Gear; |
3029 HHGear^.Message := 0; |
3029 HHGear^.Message := 0; |
3030 HHGear^.State := HHGear^.State or gstNotKickable; |
3030 HHGear^.State := HHGear^.State or gstNotKickable; |
3031 Gear^.Angle := HHGear^.Angle; |
3031 Gear^.Angle := HHGear^.Angle; |
3032 Gear^.Tag := hwSign(HHGear^.dX); |
3032 Gear^.Tag := hwSign(HHGear^.dX); |
3033 if HHGear^.dX.isNegative then Gear^.Angle := 4096 - Gear^.Angle; |
3033 if HHGear^.dX.isNegative then Gear^.Angle := 4096 - Gear^.Angle; |
3043 bubble: PVisualGear; |
3043 bubble: PVisualGear; |
3044 begin |
3044 begin |
3045 isUnderwater:= cWaterLine < hwRound(Gear^.Y) + Gear^.Radius; |
3045 isUnderwater:= cWaterLine < hwRound(Gear^.Y) + Gear^.Radius; |
3046 if Gear^.Pos > 0 then dec(Gear^.Pos); |
3046 if Gear^.Pos > 0 then dec(Gear^.Pos); |
3047 AllInactive := false; |
3047 AllInactive := false; |
3048 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
3048 HHGear := Gear^.Hedgehog^.Gear; |
3049 //dec(Gear^.Timer); |
3049 //dec(Gear^.Timer); |
3050 move := _0_2; |
3050 move := _0_2; |
3051 fuel := 50; |
3051 fuel := 50; |
3052 (*if (HHGear^.Message and gmPrecise) <> 0 then |
3052 (*if (HHGear^.Message and gmPrecise) <> 0 then |
3053 begin |
3053 begin |
3167 HHGear: PGear; |
3167 HHGear: PGear; |
3168 begin |
3168 begin |
3169 Gear^.Pos:= 0; |
3169 Gear^.Pos:= 0; |
3170 Gear^.doStep := @doStepJetpackWork; |
3170 Gear^.doStep := @doStepJetpackWork; |
3171 |
3171 |
3172 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
3172 HHGear := Gear^.Hedgehog^.Gear; |
3173 FollowGear := HHGear; |
3173 FollowGear := HHGear; |
3174 AfterAttack; |
3174 AfterAttack; |
3175 with HHGear^ do |
3175 with HHGear^ do |
3176 begin |
3176 begin |
3177 State := State and not gstAttacking; |
3177 State := State and not gstAttacking; |
3425 doPortalColorSwitch(); |
3425 doPortalColorSwitch(); |
3426 |
3426 |
3427 // destroy portal if ground it was attached too is gone |
3427 // destroy portal if ground it was attached too is gone |
3428 if ((Land[hwRound(Gear^.Y), hwRound(Gear^.X)] and $FF00) = 0) |
3428 if ((Land[hwRound(Gear^.Y), hwRound(Gear^.X)] and $FF00) = 0) |
3429 or (Gear^.Timer < 1) |
3429 or (Gear^.Timer < 1) |
3430 or (PHedgehog(Gear^.Hedgehog) <> CurrentHedgehog) |
3430 or (Gear^.Hedgehog <> CurrentHedgehog) |
3431 or (hwRound(Gear^.Y) > cWaterLine) then |
3431 or (hwRound(Gear^.Y) > cWaterLine) then |
3432 begin |
3432 begin |
3433 deleteGear(Gear); |
3433 deleteGear(Gear); |
3434 EXIT; |
3434 EXIT; |
3435 end; |
3435 end; |
3752 procedure doStepMovingPortal(Gear: PGear); |
3752 procedure doStepMovingPortal(Gear: PGear); |
3753 begin |
3753 begin |
3754 doPortalColorSwitch(); |
3754 doPortalColorSwitch(); |
3755 doStepPerPixel(Gear, @doStepMovingPortal_real, true); |
3755 doStepPerPixel(Gear, @doStepMovingPortal_real, true); |
3756 if (Gear^.Timer < 1) |
3756 if (Gear^.Timer < 1) |
3757 or (PHedgehog(Gear^.Hedgehog) <> CurrentHedgehog) then |
3757 or (Gear^.Hedgehog <> CurrentHedgehog) then |
3758 deleteGear(Gear); |
3758 deleteGear(Gear); |
3759 end; |
3759 end; |
3760 |
3760 |
3761 procedure doStepPortalShot(newPortal: PGear); |
3761 procedure doStepPortalShot(newPortal: PGear); |
3762 var |
3762 var |
4045 rx, ry, speed: hwFloat; |
4045 rx, ry, speed: hwFloat; |
4046 i, gX, gY: LongInt; |
4046 i, gX, gY: LongInt; |
4047 Fire: PGear; |
4047 Fire: PGear; |
4048 begin |
4048 begin |
4049 AllInactive := false; |
4049 AllInactive := false; |
4050 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
4050 HHGear := Gear^.Hedgehog^.Gear; |
4051 HedgehogChAngle(HHGear); |
4051 HedgehogChAngle(HHGear); |
4052 gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
4052 gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
4053 gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
4053 gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
4054 |
4054 |
4055 if (GameTicks and $FF) = 0 then |
4055 if (GameTicks and $FF) = 0 then |
4109 |
4109 |
4110 procedure doStepFlamethrower(Gear: PGear); |
4110 procedure doStepFlamethrower(Gear: PGear); |
4111 var |
4111 var |
4112 HHGear: PGear; |
4112 HHGear: PGear; |
4113 begin |
4113 begin |
4114 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
4114 HHGear := Gear^.Hedgehog^.Gear; |
4115 HHGear^.Message := HHGear^.Message and not (gmUp or gmDown or gmLeft or gmRight); |
4115 HHGear^.Message := HHGear^.Message and not (gmUp or gmDown or gmLeft or gmRight); |
4116 HHGear^.State := HHGear^.State or gstNotKickable; |
4116 HHGear^.State := HHGear^.State or gstNotKickable; |
4117 Gear^.doStep := @doStepFlamethrowerWork |
4117 Gear^.doStep := @doStepFlamethrowerWork |
4118 end; |
4118 end; |
4119 |
4119 |
4138 procedure doStepHammer(Gear: PGear); |
4138 procedure doStepHammer(Gear: PGear); |
4139 var HHGear, tmp, tmp2: PGear; |
4139 var HHGear, tmp, tmp2: PGear; |
4140 t: PGearArray; |
4140 t: PGearArray; |
4141 i: LongInt; |
4141 i: LongInt; |
4142 begin |
4142 begin |
4143 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
4143 HHGear:= Gear^.Hedgehog^.Gear; |
4144 HHGear^.State:= HHGear^.State or gstNoDamage; |
4144 HHGear^.State:= HHGear^.State or gstNoDamage; |
4145 DeleteCI(HHGear); |
4145 DeleteCI(HHGear); |
4146 |
4146 |
4147 t:= CheckGearsCollision(Gear); |
4147 t:= CheckGearsCollision(Gear); |
4148 |
4148 |
4179 var |
4179 var |
4180 i, ei: LongInt; |
4180 i, ei: LongInt; |
4181 HHGear: PGear; |
4181 HHGear: PGear; |
4182 begin |
4182 begin |
4183 AllInactive := false; |
4183 AllInactive := false; |
4184 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
4184 HHGear := Gear^.Hedgehog^.Gear; |
4185 dec(Gear^.Timer); |
4185 dec(Gear^.Timer); |
4186 if (HHGear = nil) or (Gear^.Timer = 0) or ((Gear^.Message and gmDestroy) <> 0) then |
4186 if (HHGear = nil) or (Gear^.Timer = 0) or ((Gear^.Message and gmDestroy) <> 0) then |
4187 begin |
4187 begin |
4188 DeleteGear(Gear); |
4188 DeleteGear(Gear); |
4189 exit |
4189 exit |
4232 i, y: LongInt; |
4232 i, y: LongInt; |
4233 ar: TRangeArray; |
4233 ar: TRangeArray; |
4234 HHGear: PGear; |
4234 HHGear: PGear; |
4235 begin |
4235 begin |
4236 i := 0; |
4236 i := 0; |
4237 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
4237 HHGear := Gear^.Hedgehog^.Gear; |
4238 |
4238 |
4239 y := hwRound(Gear^.Y) - cHHRadius * 2; |
4239 y := hwRound(Gear^.Y) - cHHRadius * 2; |
4240 while y < hwRound(Gear^.Y) do |
4240 while y < hwRound(Gear^.Y) do |
4241 begin |
4241 begin |
4242 ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2)); |
4242 ar[i].Left := hwRound(Gear^.X) - Gear^.Radius - LongInt(GetRandom(2)); |
4263 begin |
4263 begin |
4264 if (TurnTimeLeft > 0) then |
4264 if (TurnTimeLeft > 0) then |
4265 dec(TurnTimeLeft); |
4265 dec(TurnTimeLeft); |
4266 |
4266 |
4267 AllInactive := false; |
4267 AllInactive := false; |
4268 hh := PHedgehog(Gear^.Hedgehog); |
4268 hh := Gear^.Hedgehog; |
4269 DrawCentered(hwRound(hh^.Gear^.X) + WorldDx, hwRound(hh^.Gear^.Y) + WorldDy - |
4269 DrawCentered(hwRound(hh^.Gear^.X) + WorldDx, hwRound(hh^.Gear^.Y) + WorldDy - |
4270 cHHRadius - 14 - hh^.HealthTagTex^.h, hh^.HealthTagTex); |
4270 cHHRadius - 14 - hh^.HealthTagTex^.h, hh^.HealthTagTex); |
4271 (*DrawCircle(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Radius, 1.5, 0, 0, $FF, |
4271 (*DrawCircle(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Radius, 1.5, 0, 0, $FF, |
4272 $FF);*) |
4272 $FF);*) |
4273 |
4273 |