1866 |
1866 |
1867 HHGear := Gear^.Hedgehog^.Gear; |
1867 HHGear := Gear^.Hedgehog^.Gear; |
1868 |
1868 |
1869 HedgehogChAngle(HHGear); |
1869 HedgehogChAngle(HHGear); |
1870 |
1870 |
1871 b := false; |
1871 dig := false; |
1872 |
1872 |
1873 if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7 then |
1873 if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7 then |
1874 begin |
1874 begin |
1875 Gear^.dX := SignAs(AngleSin(HHGear^.Angle) * _0_5, Gear^.dX); |
1875 Gear^.dX := SignAs(AngleSin(HHGear^.Angle) * _0_5, Gear^.dX); |
1876 Gear^.dY := AngleCos(HHGear^.Angle) * ( - _0_5); |
1876 Gear^.dY := AngleCos(HHGear^.Angle) * ( - _0_5); |
1877 BTPrevAngle := HHGear^.Angle; |
1877 BTPrevAngle := HHGear^.Angle; |
1878 b := true |
1878 dig := true |
1879 end; |
1879 end; |
1880 |
1880 |
1881 if ((HHGear^.State and gstMoving) <> 0) then |
1881 if ((HHGear^.State and gstMoving) <> 0) then |
1882 begin |
1882 begin |
1883 doStepHedgehogMoving(HHGear); |
1883 doStepHedgehogMoving(HHGear); |
1885 Gear^.Timer := 0 |
1885 Gear^.Timer := 0 |
1886 end; |
1886 end; |
1887 |
1887 |
1888 if Gear^.Timer mod cHHStepTicks = 0 then |
1888 if Gear^.Timer mod cHHStepTicks = 0 then |
1889 begin |
1889 begin |
1890 b := true; |
1890 dig := true; |
1891 if Gear^.dX.isNegative then |
1891 if Gear^.dX.isNegative then |
1892 HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmLeft |
1892 HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmLeft |
1893 else |
1893 else |
1894 HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmRight; |
1894 HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmRight; |
1895 |
1895 |
1896 if ((HHGear^.State and gstMoving) = 0) then |
1896 if ((HHGear^.State and gstMoving) = 0) then |
1897 begin |
1897 begin |
1898 HHGear^.State := HHGear^.State and (not gstAttacking); |
1898 HHGear^.State := HHGear^.State and (not gstAttacking); |
1899 prevX := hwRound(HHGear^.X); |
1899 prevX := hwRound(HHGear^.X); |
1900 |
1900 |
1901 // why the call to HedgehogStep then a further increment of X? |
1901 if CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y),lfIndestructible) then |
1902 if (prevX = hwRound(HHGear^.X)) and |
1902 begin |
1903 CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y), |
1903 HedgehogStep(HHGear); |
1904 lfIndestructible) then HedgehogStep(HHGear); |
1904 if (prevX = hwRound(HHGear^.X)) then |
1905 |
1905 HHGear^.X := HHGear^.X + SignAs(_1, HHGear^.dX); |
1906 if (prevX = hwRound(HHGear^.X)) and |
1906 end; |
1907 CheckLandValue(hwRound(HHGear^.X + SignAs(_6, HHGear^.dX)), hwRound(HHGear^.Y), |
1907 |
1908 lfIndestructible) then HHGear^.X := HHGear^.X + SignAs(_1, HHGear^.dX); |
|
1909 HHGear^.State := HHGear^.State or gstAttacking |
1908 HHGear^.State := HHGear^.State or gstAttacking |
1910 end; |
1909 end; |
1911 |
1910 |
1912 inc(BTSteps); |
1911 inc(BTSteps); |
1913 if BTSteps = 7 then |
1912 if BTSteps = 7 then |
1922 AmmoShove(Gear, Gear^.Boom, 15); |
1921 AmmoShove(Gear, Gear^.Boom, 15); |
1923 HHGear^.State := HHGear^.State and (not gstNoDamage) |
1922 HHGear^.State := HHGear^.State and (not gstNoDamage) |
1924 end; |
1923 end; |
1925 end; |
1924 end; |
1926 |
1925 |
1927 if b then |
1926 if dig then |
1928 begin |
1927 begin |
1929 DrawTunnel(HHGear^.X + Gear^.dX * cHHRadius, |
1928 DrawTunnel(HHGear^.X + Gear^.dX * cHHRadius, |
1930 HHGear^.Y + Gear^.dY * cHHRadius - _1 - |
1929 HHGear^.Y + Gear^.dY * cHHRadius - _1 - |
1931 ((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7), |
1930 ((hwAbs(Gear^.dX) / (hwAbs(Gear^.dX) + hwAbs(Gear^.dY))) * _0_5 * 7), |
1932 Gear^.dX, Gear^.dY, |
1931 Gear^.dX, Gear^.dY, |