1946 HHGear^.Message:= HHGear^.Message and not (gm_Up or gm_Down); |
1946 HHGear^.Message:= HHGear^.Message and not (gm_Up or gm_Down); |
1947 HHGear^.State:= HHGear^.State or gstNotKickable; |
1947 HHGear^.State:= HHGear^.State or gstNotKickable; |
1948 Gear^.doStep:= @doStepBallgunWork |
1948 Gear^.doStep:= @doStepBallgunWork |
1949 end; |
1949 end; |
1950 |
1950 |
|
1951 //////////////////////////////////////////////////////////////////////////////// |
1951 procedure doStepRCPlaneWork(Gear: PGear); |
1952 procedure doStepRCPlaneWork(Gear: PGear); |
1952 const cAngleSpeed = 3; |
1953 const cAngleSpeed = 3; |
1953 var HHGear: PGear; |
1954 var HHGear: PGear; |
1954 i: LongInt; |
1955 i: LongInt; |
1955 dX, dY: hwFloat; |
1956 dX, dY: hwFloat; |
1957 trueAngle: Longword; |
1958 trueAngle: Longword; |
1958 t: PGear; |
1959 t: PGear; |
1959 begin |
1960 begin |
1960 AllInactive:= false; |
1961 AllInactive:= false; |
1961 |
1962 |
1962 dec(Gear^.Timer); |
1963 if Gear^.Timer > 0 then dec(Gear^.Timer); |
1963 |
1964 |
1964 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
1965 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
1965 FollowGear:= Gear; |
1966 FollowGear:= Gear; |
1966 |
1967 |
1967 fChanged:= false; |
1968 fChanged:= false; |
1968 if ((Gear^.Message and gm_Left) <> 0) then |
1969 if ((HHGear^.State and gstHHDriven) = 0) or (Gear^.Timer = 0) then |
1969 begin |
1970 begin |
1970 fChanged:= true; |
1971 fChanged:= true; |
1971 Gear^.Angle:= (Gear^.Angle + (4096 - cAngleSpeed)) mod 4096 |
1972 if Gear^.Angle > 2048 then dec(Gear^.Angle) else |
1972 end; |
1973 if Gear^.Angle < 2048 then inc(Gear^.Angle) else fChanged:= false |
1973 |
1974 end |
1974 if ((Gear^.Message and gm_Right) <> 0) then |
1975 else |
1975 begin |
1976 begin |
1976 fChanged:= true; |
1977 if ((Gear^.Message and gm_Left) <> 0) then |
1977 Gear^.Angle:= (Gear^.Angle + cAngleSpeed) mod 4096 |
1978 begin |
|
1979 fChanged:= true; |
|
1980 Gear^.Angle:= (Gear^.Angle + (4096 - cAngleSpeed)) mod 4096 |
|
1981 end; |
|
1982 |
|
1983 if ((Gear^.Message and gm_Right) <> 0) then |
|
1984 begin |
|
1985 fChanged:= true; |
|
1986 Gear^.Angle:= (Gear^.Angle + cAngleSpeed) mod 4096 |
|
1987 end |
1978 end; |
1988 end; |
1979 |
1989 |
1980 if fChanged then |
1990 if fChanged then |
1981 begin |
1991 begin |
1982 Gear^.dX.isNegative:= (Gear^.Angle > 2048); |
1992 Gear^.dX.isNegative:= (Gear^.Angle > 2048); |
1987 |
1997 |
1988 Gear^.dX:= SignAs(AngleSin(trueAngle), Gear^.dX) * _0_25; |
1998 Gear^.dX:= SignAs(AngleSin(trueAngle), Gear^.dX) * _0_25; |
1989 Gear^.dY:= AngleCos(trueAngle) * -_0_25; |
1999 Gear^.dY:= AngleCos(trueAngle) * -_0_25; |
1990 end; |
2000 end; |
1991 |
2001 |
1992 |
|
1993 Gear^.X:= Gear^.X + Gear^.dX; |
2002 Gear^.X:= Gear^.X + Gear^.dX; |
1994 Gear^.Y:= Gear^.Y + Gear^.dY; |
2003 Gear^.Y:= Gear^.Y + Gear^.dY; |
1995 |
2004 |
1996 if (GameTicks and $FF) = 0 then |
2005 if (GameTicks and $FF) = 0 then |
1997 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0); |
2006 if Gear^.Timer < 2500 then |
1998 |
2007 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtEvilTrace, 0, _0, _0, 0) |
1999 if ((HHGear^.Message and gm_Attack) <> 0)and(Gear^.Health <> 0) then |
2008 else |
|
2009 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtSmokeTrace, 0, _0, _0, 0); |
|
2010 |
|
2011 if ((HHGear^.Message and gm_Attack) <> 0) and (Gear^.Health <> 0) then |
2000 begin |
2012 begin |
2001 HHGear^.Message := HHGear^.Message and not gm_Attack; |
2013 HHGear^.Message := HHGear^.Message and not gm_Attack; |
2002 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
2014 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
2003 dec(Gear^.Health) |
2015 dec(Gear^.Health) |
2004 end; |
2016 end; |
2008 if t <> nil then |
2020 if t <> nil then |
2009 PickUp(HHGear, t); |
2021 PickUp(HHGear, t); |
2010 |
2022 |
2011 CheckCollision(Gear); |
2023 CheckCollision(Gear); |
2012 |
2024 |
2013 if ((Gear^.State and gstCollision) <> 0) or (Gear^.Timer = 0) then |
2025 if ((Gear^.State and gstCollision) <> 0) then |
2014 begin |
2026 begin |
2015 HHGear^.Message:= 0; |
2027 HHGear^.Message:= 0; |
2016 //HHGear^.State:= HHGear^.State and (not gstNotKickable); |
2028 //HHGear^.State:= HHGear^.State and (not gstNotKickable); |
2017 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, EXPLAutoSound); |
2029 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 25, EXPLAutoSound); |
2018 for i:= 0 to 25 do |
2030 for i:= 0 to 25 do |
2035 begin |
2047 begin |
2036 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
2048 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
2037 HHGear^.Message:= 0; |
2049 HHGear^.Message:= 0; |
2038 HHGear^.State:= HHGear^.State or gstNotKickable; |
2050 HHGear^.State:= HHGear^.State or gstNotKickable; |
2039 Gear^.Angle:= HHGear^.Angle; |
2051 Gear^.Angle:= HHGear^.Angle; |
|
2052 Gear^.Tag:= hwSign(HHGear^.dX); |
2040 if HHGear^.dX.isNegative then Gear^.Angle:= 4096 - Gear^.Angle; |
2053 if HHGear^.dX.isNegative then Gear^.Angle:= 4096 - Gear^.Angle; |
2041 Gear^.doStep:= @doStepRCPlaneWork |
2054 Gear^.doStep:= @doStepRCPlaneWork |
2042 end; |
2055 end; |