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