755 cLaserSighting := true; |
755 cLaserSighting := true; |
756 HHGear^.Message := 0; |
756 HHGear^.Message := 0; |
757 if (HHGear^.Angle - 32 >= 0) then dec(HHGear^.Angle,32) |
757 if (HHGear^.Angle - 32 >= 0) then dec(HHGear^.Angle,32) |
758 end; |
758 end; |
759 |
759 |
760 if (HHGear^.Message and gm_Attack) <> 0 then |
760 if (HHGear^.Message and gmAttack) <> 0 then |
761 begin |
761 begin |
762 shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); |
762 shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); |
763 if shell <> nil then |
763 if shell <> nil then |
764 begin |
764 begin |
765 shell^.dX := gear^.dX.QWordValue / -8589934592; |
765 shell^.dX := gear^.dX.QWordValue / -8589934592; |
892 |
892 |
893 Gear^.X := Gear^.X + HHGear^.dX; |
893 Gear^.X := Gear^.X + HHGear^.dX; |
894 HHGear^.X := Gear^.X; |
894 HHGear^.X := Gear^.X; |
895 HHGear^.Y := Gear^.Y - int2hwFloat(cHHRadius); |
895 HHGear^.Y := Gear^.Y - int2hwFloat(cHHRadius); |
896 |
896 |
897 if (Gear^.Message and gm_Attack) <> 0 then |
897 if (Gear^.Message and gmAttack) <> 0 then |
898 if (Gear^.State and gsttmpFlag) <> 0 then Gear^.Timer := 1 |
898 if (Gear^.State and gsttmpFlag) <> 0 then Gear^.Timer := 1 |
899 else |
899 else |
900 else |
900 else |
901 if (Gear^.State and gsttmpFlag) = 0 then Gear^.State := Gear^.State or gsttmpFlag; |
901 if (Gear^.State and gsttmpFlag) = 0 then Gear^.State := Gear^.State or gsttmpFlag; |
902 if ((Gear^.Message and gm_Left) <> 0) then Gear^.dX := - _0_3 |
902 if ((Gear^.Message and gmLeft) <> 0) then Gear^.dX := - _0_3 |
903 else |
903 else |
904 if ((Gear^.Message and gm_Right) <> 0) then Gear^.dX := _0_3 |
904 if ((Gear^.Message and gmRight) <> 0) then Gear^.dX := _0_3 |
905 else Gear^.dX := _0; |
905 else Gear^.dX := _0; |
906 end; |
906 end; |
907 |
907 |
908 procedure doStepPickHammer(Gear: PGear); |
908 procedure doStepPickHammer(Gear: PGear); |
909 var |
909 var |
966 |
966 |
967 if Gear^.Timer mod cHHStepTicks = 0 then |
967 if Gear^.Timer mod cHHStepTicks = 0 then |
968 begin |
968 begin |
969 b := true; |
969 b := true; |
970 if Gear^.dX.isNegative then |
970 if Gear^.dX.isNegative then |
971 HHGear^.Message := (HHGear^.Message and (gm_Attack or gm_Up or gm_Down)) or gm_Left |
971 HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmLeft |
972 else |
972 else |
973 HHGear^.Message := (HHGear^.Message and (gm_Attack or gm_Up or gm_Down)) or gm_Right; |
973 HHGear^.Message := (HHGear^.Message and (gmAttack or gmUp or gmDown)) or gmRight; |
974 |
974 |
975 if ((HHGear^.State and gstMoving) = 0) then |
975 if ((HHGear^.State and gstMoving) = 0) then |
976 begin |
976 begin |
977 HHGear^.State := HHGear^.State and not gstAttacking; |
977 HHGear^.State := HHGear^.State and not gstAttacking; |
978 prevX := hwRound(HHGear^.X); |
978 prevX := hwRound(HHGear^.X); |
1059 if HHGear^.dY.isNegative and TestCollisionYwithGear(HHGear, -1) then HHGear^.dY := _0; |
1059 if HHGear^.dY.isNegative and TestCollisionYwithGear(HHGear, -1) then HHGear^.dY := _0; |
1060 HHGear^.X := HHGear^.X + HHGear^.dX; |
1060 HHGear^.X := HHGear^.X + HHGear^.dX; |
1061 HHGear^.Y := HHGear^.Y + HHGear^.dY; |
1061 HHGear^.Y := HHGear^.Y + HHGear^.dY; |
1062 HHGear^.dY := HHGear^.dY + cGravity; |
1062 HHGear^.dY := HHGear^.dY + cGravity; |
1063 |
1063 |
1064 if (Gear^.Message and gm_Attack) <> 0 then |
1064 if (Gear^.Message and gmAttack) <> 0 then |
1065 begin |
1065 begin |
1066 Gear^.X := HHGear^.X; |
1066 Gear^.X := HHGear^.X; |
1067 Gear^.Y := HHGear^.Y; |
1067 Gear^.Y := HHGear^.Y; |
1068 |
1068 |
1069 ApplyAngleBounds(PHedgehog(Gear^.Hedgehog)^, amRope); |
1069 ApplyAngleBounds(PHedgehog(Gear^.Hedgehog)^, amRope); |
1141 |
1141 |
1142 ///// |
1142 ///// |
1143 tx := HHGear^.X; |
1143 tx := HHGear^.X; |
1144 ty := HHGear^.Y; |
1144 ty := HHGear^.Y; |
1145 |
1145 |
1146 if ((Gear^.Message and gm_Down) <> 0) and (Gear^.Elasticity < Gear^.Friction) then |
1146 if ((Gear^.Message and gmDown) <> 0) and (Gear^.Elasticity < Gear^.Friction) then |
1147 if not (TestCollisionXwithGear(HHGear, hwSign(ropeDx)) |
1147 if not (TestCollisionXwithGear(HHGear, hwSign(ropeDx)) |
1148 or TestCollisionYwithGear(HHGear, hwSign(ropeDy))) then |
1148 or TestCollisionYwithGear(HHGear, hwSign(ropeDy))) then |
1149 Gear^.Elasticity := Gear^.Elasticity + _0_3; |
1149 Gear^.Elasticity := Gear^.Elasticity + _0_3; |
1150 |
1150 |
1151 if ((Gear^.Message and gm_Up) <> 0) and (Gear^.Elasticity > _30) then |
1151 if ((Gear^.Message and gmUp) <> 0) and (Gear^.Elasticity > _30) then |
1152 if not (TestCollisionXwithGear(HHGear, -hwSign(ropeDx)) |
1152 if not (TestCollisionXwithGear(HHGear, -hwSign(ropeDx)) |
1153 or TestCollisionYwithGear(HHGear, -hwSign(ropeDy))) then |
1153 or TestCollisionYwithGear(HHGear, -hwSign(ropeDy))) then |
1154 Gear^.Elasticity := Gear^.Elasticity - _0_3; |
1154 Gear^.Elasticity := Gear^.Elasticity - _0_3; |
1155 |
1155 |
1156 HHGear^.X := Gear^.X + mdX * Gear^.Elasticity; |
1156 HHGear^.X := Gear^.X + mdX * Gear^.Elasticity; |
1981 end; |
1981 end; |
1982 |
1982 |
1983 if not TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) then |
1983 if not TestCollisionXwithGear(HHGear, hwSign(HHGear^.dX)) then |
1984 HHGear^.X := HHGear^.X + cWindSpeed * 200; |
1984 HHGear^.X := HHGear^.X + cWindSpeed * 200; |
1985 |
1985 |
1986 if (Gear^.Message and gm_Left) <> 0 then HHGear^.X := HHGear^.X - cMaxWindSpeed * 80 |
1986 if (Gear^.Message and gmLeft) <> 0 then HHGear^.X := HHGear^.X - cMaxWindSpeed * 80 |
1987 else if (Gear^.Message and gm_Right) <> 0 then HHGear^.X := HHGear^.X + cMaxWindSpeed * 80; |
1987 else if (Gear^.Message and gmRight) <> 0 then HHGear^.X := HHGear^.X + cMaxWindSpeed * 80; |
1988 if (Gear^.Message and gm_Up) <> 0 then HHGear^.Y := HHGear^.Y - cGravity * 40 |
1988 if (Gear^.Message and gmUp) <> 0 then HHGear^.Y := HHGear^.Y - cGravity * 40 |
1989 else if (Gear^.Message and gm_Down) <> 0 then HHGear^.Y := HHGear^.Y + cGravity * 40; |
1989 else if (Gear^.Message and gmDown) <> 0 then HHGear^.Y := HHGear^.Y + cGravity * 40; |
1990 |
1990 |
1991 HHGear^.Y := HHGear^.Y + cGravity * 100; |
1991 HHGear^.Y := HHGear^.Y + cGravity * 100; |
1992 Gear^.X := HHGear^.X; |
1992 Gear^.X := HHGear^.X; |
1993 Gear^.Y := HHGear^.Y |
1993 Gear^.Y := HHGear^.Y |
1994 end; |
1994 end; |
2102 not TryPlaceOnLand(TargetPoint.X - SpritesData[sprAmGirder].Width div 2, |
2102 not TryPlaceOnLand(TargetPoint.X - SpritesData[sprAmGirder].Width div 2, |
2103 TargetPoint.Y - SpritesData[sprAmGirder].Height div 2, |
2103 TargetPoint.Y - SpritesData[sprAmGirder].Height div 2, |
2104 sprAmGirder, Gear^.State, true) then |
2104 sprAmGirder, Gear^.State, true) then |
2105 begin |
2105 begin |
2106 PlaySound(sndDenied); |
2106 PlaySound(sndDenied); |
2107 HHGear^.Message := HHGear^.Message and not gm_Attack; |
2107 HHGear^.Message := HHGear^.Message and not gmAttack; |
2108 HHGear^.State := HHGear^.State and not gstAttacking; |
2108 HHGear^.State := HHGear^.State and not gstAttacking; |
2109 HHGear^.State := HHGear^.State or gstHHChooseTarget; |
2109 HHGear^.State := HHGear^.State or gstHHChooseTarget; |
2110 isCursorVisible := true; |
2110 isCursorVisible := true; |
2111 DeleteGear(Gear) |
2111 DeleteGear(Gear) |
2112 end |
2112 end |
2161 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2161 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2162 if not TryPlaceOnLand(TargetPoint.X - SpritesData[sprHHTelepMask].Width div 2, |
2162 if not TryPlaceOnLand(TargetPoint.X - SpritesData[sprHHTelepMask].Width div 2, |
2163 TargetPoint.Y - SpritesData[sprHHTelepMask].Height div 2, |
2163 TargetPoint.Y - SpritesData[sprHHTelepMask].Height div 2, |
2164 sprHHTelepMask, 0, false) then |
2164 sprHHTelepMask, 0, false) then |
2165 begin |
2165 begin |
2166 HHGear^.Message := HHGear^.Message and not gm_Attack; |
2166 HHGear^.Message := HHGear^.Message and not gmAttack; |
2167 HHGear^.State := HHGear^.State and not gstAttacking; |
2167 HHGear^.State := HHGear^.State and not gstAttacking; |
2168 HHGear^.State := HHGear^.State or gstHHChooseTarget; |
2168 HHGear^.State := HHGear^.State or gstHHChooseTarget; |
2169 DeleteGear(Gear); |
2169 DeleteGear(Gear); |
2170 isCursorVisible := true; |
2170 isCursorVisible := true; |
2171 PlaySound(sndDenied) |
2171 PlaySound(sndDenied) |
2196 HHGear: PGear; |
2196 HHGear: PGear; |
2197 Msg, State: Longword; |
2197 Msg, State: Longword; |
2198 begin |
2198 begin |
2199 AllInactive := false; |
2199 AllInactive := false; |
2200 |
2200 |
2201 if ((Gear^.Message and not gm_Switch) <> 0) or (TurnTimeLeft = 0) then |
2201 if ((Gear^.Message and not gmSwitch) <> 0) or (TurnTimeLeft = 0) then |
2202 begin |
2202 begin |
2203 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2203 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2204 Msg := Gear^.Message and not gm_Switch; |
2204 Msg := Gear^.Message and not gmSwitch; |
2205 DeleteGear(Gear); |
2205 DeleteGear(Gear); |
2206 OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^); |
2206 OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^); |
2207 ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^); |
2207 ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^); |
2208 |
2208 |
2209 HHGear := CurrentHedgehog^.Gear; |
2209 HHGear := CurrentHedgehog^.Gear; |
2210 ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^); |
2210 ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^); |
2211 HHGear^.Message := Msg; |
2211 HHGear^.Message := Msg; |
2212 exit |
2212 exit |
2213 end; |
2213 end; |
2214 |
2214 |
2215 if (Gear^.Message and gm_Switch) <> 0 then |
2215 if (Gear^.Message and gmSwitch) <> 0 then |
2216 begin |
2216 begin |
2217 HHGear := CurrentHedgehog^.Gear; |
2217 HHGear := CurrentHedgehog^.Gear; |
2218 HHGear^.Message := HHGear^.Message and not gm_Switch; |
2218 HHGear^.Message := HHGear^.Message and not gmSwitch; |
2219 Gear^.Message := Gear^.Message and not gm_Switch; |
2219 Gear^.Message := Gear^.Message and not gmSwitch; |
2220 State := HHGear^.State; |
2220 State := HHGear^.State; |
2221 HHGear^.State := 0; |
2221 HHGear^.State := 0; |
2222 HHGear^.Active := false; |
2222 HHGear^.Active := false; |
2223 HHGear^.Z := cHHZ; |
2223 HHGear^.Z := cHHZ; |
2224 RemoveGearFromList(HHGear); |
2224 RemoveGearFromList(HHGear); |
2848 if Gear^.Timer < 3500 then |
2848 if Gear^.Timer < 3500 then |
2849 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEvilTrace) |
2849 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtEvilTrace) |
2850 else |
2850 else |
2851 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
2851 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace); |
2852 |
2852 |
2853 if ((HHGear^.Message and gm_Attack) <> 0) and (Gear^.Health <> 0) then |
2853 if ((HHGear^.Message and gmAttack) <> 0) and (Gear^.Health <> 0) then |
2854 begin |
2854 begin |
2855 HHGear^.Message := HHGear^.Message and not gm_Attack; |
2855 HHGear^.Message := HHGear^.Message and not gmAttack; |
2856 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, Gear^.dX * _0_5, Gear^.dY * |
2856 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, Gear^.dX * _0_5, Gear^.dY * |
2857 _0_5, 0); |
2857 _0_5, 0); |
2858 dec(Gear^.Health) |
2858 dec(Gear^.Health) |
2859 end; |
2859 end; |
2860 |
2860 |
2861 if ((HHGear^.Message and gm_LJump) <> 0) |
2861 if ((HHGear^.Message and gmLJump) <> 0) |
2862 and ((Gear^.State and gsttmpFlag) = 0) then |
2862 and ((Gear^.State and gsttmpFlag) = 0) then |
2863 begin |
2863 begin |
2864 Gear^.State := Gear^.State or gsttmpFlag; |
2864 Gear^.State := Gear^.State or gsttmpFlag; |
2865 PauseMusic; |
2865 PauseMusic; |
2866 playSound(sndRideOfTheValkyries); |
2866 playSound(sndRideOfTheValkyries); |
2954 AllInactive := false; |
2954 AllInactive := false; |
2955 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2955 HHGear := PHedgehog(Gear^.Hedgehog)^.Gear; |
2956 //dec(Gear^.Timer); |
2956 //dec(Gear^.Timer); |
2957 move := _0_1; |
2957 move := _0_1; |
2958 fuel := 50; |
2958 fuel := 50; |
2959 (*if (HHGear^.Message and gm_Precise) <> 0 then |
2959 (*if (HHGear^.Message and gmPrecise) <> 0 then |
2960 begin |
2960 begin |
2961 move:= _0_02; |
2961 move:= _0_02; |
2962 fuel:= 5; |
2962 fuel:= 5; |
2963 end;*) |
2963 end;*) |
2964 |
2964 |
2965 if (HHGear^.Message and gm_Up) <> 0 then |
2965 if (HHGear^.Message and gmUp) <> 0 then |
2966 begin |
2966 begin |
2967 if (not HHGear^.dY.isNegative) or (HHGear^.Y > -_256) then |
2967 if (not HHGear^.dY.isNegative) or (HHGear^.Y > -_256) then |
2968 HHGear^.dY := HHGear^.dY - move; |
2968 HHGear^.dY := HHGear^.dY - move; |
2969 HHGear^.dY := HHGear^.dY - move; |
2969 HHGear^.dY := HHGear^.dY - move; |
2970 dec(Gear^.Health, fuel); |
2970 dec(Gear^.Health, fuel); |
2971 Gear^.MsgParam := Gear^.MsgParam or gm_Up; |
2971 Gear^.MsgParam := Gear^.MsgParam or gmUp; |
2972 Gear^.Timer := GameTicks |
2972 Gear^.Timer := GameTicks |
2973 end; |
2973 end; |
2974 if (HHGear^.Message and gm_Left) <> 0 then move.isNegative := true; |
2974 if (HHGear^.Message and gmLeft) <> 0 then move.isNegative := true; |
2975 if (HHGear^.Message and (gm_Left or gm_Right)) <> 0 then |
2975 if (HHGear^.Message and (gmLeft or gmRight)) <> 0 then |
2976 begin |
2976 begin |
2977 HHGear^.dX := HHGear^.dX + (move * _0_2); |
2977 HHGear^.dX := HHGear^.dX + (move * _0_2); |
2978 dec(Gear^.Health, fuel div 5); |
2978 dec(Gear^.Health, fuel div 5); |
2979 Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gm_Left or gm_Right)); |
2979 Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight)); |
2980 Gear^.Timer := GameTicks |
2980 Gear^.Timer := GameTicks |
2981 end; |
2981 end; |
2982 |
2982 |
2983 // erases them all at once :-/ |
2983 // erases them all at once :-/ |
2984 if (Gear^.Timer <> 0) and (GameTicks - Gear^.Timer > 250) then |
2984 if (Gear^.Timer <> 0) and (GameTicks - Gear^.Timer > 250) then |
2994 if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); |
2994 if Gear^.Tex <> nil then FreeTexture(Gear^.Tex); |
2995 Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 20)) + |
2995 Gear^.Tex := RenderStringTex(trmsg[sidFuel] + ': ' + inttostr(round(Gear^.Health / 20)) + |
2996 '%', cWhiteColor, fntSmall) |
2996 '%', cWhiteColor, fntSmall) |
2997 end; |
2997 end; |
2998 |
2998 |
2999 if HHGear^.Message and (gm_Attack or gm_Up or gm_Precise or gm_Left or gm_Right) <> 0 then Gear^ |
2999 if HHGear^.Message and (gmAttack or gmUp or gmPrecise or gmLeft or gmRight) <> 0 then Gear^ |
3000 .State := Gear^.State and not gsttmpFlag; |
3000 .State := Gear^.State and not gsttmpFlag; |
3001 HHGear^.Message := HHGear^.Message and not (gm_Up or gm_Precise or gm_Left or gm_Right); |
3001 HHGear^.Message := HHGear^.Message and not (gmUp or gmPrecise or gmLeft or gmRight); |
3002 HHGear^.State := HHGear^.State or gstMoving; |
3002 HHGear^.State := HHGear^.State or gstMoving; |
3003 |
3003 |
3004 Gear^.X := HHGear^.X; |
3004 Gear^.X := HHGear^.X; |
3005 Gear^.Y := HHGear^.Y; |
3005 Gear^.Y := HHGear^.Y; |
3006 // For some reason I need to reapply followgear here, something else grabs it otherwise. |
3006 // For some reason I need to reapply followgear here, something else grabs it otherwise. |
3081 move := _0_1; |
3081 move := _0_1; |
3082 fuel := 50; |
3082 fuel := 50; |
3083 |
3083 |
3084 if Gear^.Pos > 0 then |
3084 if Gear^.Pos > 0 then |
3085 dec(Gear^.Pos, 1) |
3085 dec(Gear^.Pos, 1) |
3086 else if (HHGear^.Message and (gm_Left or gm_Right or gm_Up)) <> 0 then |
3086 else if (HHGear^.Message and (gmLeft or gmRight or gmUp)) <> 0 then |
3087 Gear^.Pos := 500; |
3087 Gear^.Pos := 500; |
3088 |
3088 |
3089 if HHGear^.dX.isNegative then |
3089 if HHGear^.dX.isNegative then |
3090 Gear^.Tag := -1 |
3090 Gear^.Tag := -1 |
3091 else |
3091 else |
3092 Gear^.Tag := 1; |
3092 Gear^.Tag := 1; |
3093 |
3093 |
3094 if (HHGear^.Message and gm_Up) <> 0 then |
3094 if (HHGear^.Message and gmUp) <> 0 then |
3095 begin |
3095 begin |
3096 if (not HHGear^.dY.isNegative) or (HHGear^.Y > -_256) then |
3096 if (not HHGear^.dY.isNegative) or (HHGear^.Y > -_256) then |
3097 HHGear^.dY := HHGear^.dY - move; |
3097 HHGear^.dY := HHGear^.dY - move; |
3098 HHGear^.dY := HHGear^.dY - move; |
3098 HHGear^.dY := HHGear^.dY - move; |
3099 dec(Gear^.Health, fuel); |
3099 dec(Gear^.Health, fuel); |
3100 Gear^.MsgParam := Gear^.MsgParam or gm_Up; |
3100 Gear^.MsgParam := Gear^.MsgParam or gmUp; |
3101 end; |
3101 end; |
3102 if (HHGear^.Message and gm_Left) <> 0 then move.isNegative := true; |
3102 if (HHGear^.Message and gmLeft) <> 0 then move.isNegative := true; |
3103 if (HHGear^.Message and (gm_Left or gm_Right)) <> 0 then |
3103 if (HHGear^.Message and (gmLeft or gmRight)) <> 0 then |
3104 begin |
3104 begin |
3105 HHGear^.dX := HHGear^.dX + (move * _0_2); |
3105 HHGear^.dX := HHGear^.dX + (move * _0_2); |
3106 dec(Gear^.Health, fuel div 5); |
3106 dec(Gear^.Health, fuel div 5); |
3107 Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gm_Left or gm_Right)); |
3107 Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight)); |
3108 end; |
3108 end; |
3109 |
3109 |
3110 if Gear^.Health < 0 then Gear^.Health := 0; |
3110 if Gear^.Health < 0 then Gear^.Health := 0; |
3111 if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) then |
3111 if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) then |
3112 for i:= ((500-Gear^.Health) div 250) downto 0 do |
3112 for i:= ((500-Gear^.Health) div 250) downto 0 do |
3113 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather); |
3113 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather); |
3114 |
3114 |
3115 if (HHGear^.Message and gm_Attack <> 0) then |
3115 if (HHGear^.Message and gmAttack <> 0) then |
3116 begin |
3116 begin |
3117 HHGear^.Message := HHGear^.Message and not gm_Attack; |
3117 HHGear^.Message := HHGear^.Message and not gmAttack; |
3118 if Gear^.FlightTime > 0 then |
3118 if Gear^.FlightTime > 0 then |
3119 begin |
3119 begin |
3120 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) + 32, gtEgg, 0, Gear^.dX * _0_5, Gear^.dY, 0) |
3120 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) + 32, gtEgg, 0, Gear^.dX * _0_5, Gear^.dY, 0) |
3121 ; |
3121 ; |
3122 PlaySound(sndBirdyLay); |
3122 PlaySound(sndBirdyLay); |
3123 dec(Gear^.FlightTime) |
3123 dec(Gear^.FlightTime) |
3124 end; |
3124 end; |
3125 end; |
3125 end; |
3126 |
3126 |
3127 if HHGear^.Message and (gm_Up or gm_Precise or gm_Left or gm_Right) <> 0 then |
3127 if HHGear^.Message and (gmUp or gmPrecise or gmLeft or gmRight) <> 0 then |
3128 Gear^.State := Gear^.State and not gsttmpFlag; |
3128 Gear^.State := Gear^.State and not gsttmpFlag; |
3129 HHGear^.Message := HHGear^.Message and not (gm_Up or gm_Precise or gm_Left or gm_Right); |
3129 HHGear^.Message := HHGear^.Message and not (gmUp or gmPrecise or gmLeft or gmRight); |
3130 HHGear^.State := HHGear^.State or gstMoving; |
3130 HHGear^.State := HHGear^.State or gstMoving; |
3131 |
3131 |
3132 Gear^.X := HHGear^.X; |
3132 Gear^.X := HHGear^.X; |
3133 Gear^.Y := HHGear^.Y - int2hwFloat(32); |
3133 Gear^.Y := HHGear^.Y - int2hwFloat(32); |
3134 // For some reason I need to reapply followgear here, something else grabs it otherwise. |
3134 // For some reason I need to reapply followgear here, something else grabs it otherwise. |
3273 var flags: LongWord; |
3273 var flags: LongWord; |
3274 CurWeapon: PAmmo; |
3274 CurWeapon: PAmmo; |
3275 begin |
3275 begin |
3276 if (CurrentHedgehog <> nil) |
3276 if (CurrentHedgehog <> nil) |
3277 and (CurrentHedgehog^.Gear <> nil) |
3277 and (CurrentHedgehog^.Gear <> nil) |
3278 and ((CurrentHedgehog^.Gear^.Message and gm_Switch) <> 0) then |
3278 and ((CurrentHedgehog^.Gear^.Message and gmSwitch) <> 0) then |
3279 With CurrentHedgehog^ do |
3279 With CurrentHedgehog^ do |
3280 if (CurAmmoType = amPortalGun) then |
3280 if (CurAmmoType = amPortalGun) then |
3281 begin |
3281 begin |
3282 CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and not gm_Switch; |
3282 CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and not gmSwitch; |
3283 |
3283 |
3284 CurWeapon:= GetAmmoEntry(CurrentHedgehog^); |
3284 CurWeapon:= GetAmmoEntry(CurrentHedgehog^); |
3285 flags := CurWeapon^.Timer and not 2; |
3285 flags := CurWeapon^.Timer and not 2; |
3286 if (flags and 1) = 0 then |
3286 if (flags and 1) = 0 then |
3287 CurWeapon^.Timer := flags or 1 |
3287 CurWeapon^.Timer := flags or 1 |
3629 7: PlaySound(sndPiano7); |
3629 7: PlaySound(sndPiano7); |
3630 else PlaySound(sndPiano8); |
3630 else PlaySound(sndPiano8); |
3631 end; |
3631 end; |
3632 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtNote); |
3632 AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtNote); |
3633 CurrentHedgehog^.Gear^.MsgParam := 0; |
3633 CurrentHedgehog^.Gear^.MsgParam := 0; |
3634 CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and not gm_Slot; |
3634 CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and not gmSlot; |
3635 end; |
3635 end; |
3636 |
3636 |
3637 if (*((Gear^.Pos = 3) and ((GameFlags and gfSolidLand) <> 0)) or*) (Gear^.Pos = 5) then |
3637 if (*((Gear^.Pos = 3) and ((GameFlags and gfSolidLand) <> 0)) or*) (Gear^.Pos = 5) then |
3638 // bounce up to 10 times (3 times on gameflagged solid land) before dropping past landscape |
3638 // bounce up to 10 times (3 times on gameflagged solid land) before dropping past landscape |
3639 begin |
3639 begin |
3838 gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
3838 gX := hwRound(Gear^.X) + GetLaunchX(amBallgun, hwSign(HHGear^.dX), HHGear^.Angle); |
3839 gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
3839 gY := hwRound(Gear^.Y) + GetLaunchY(amBallgun, HHGear^.Angle); |
3840 |
3840 |
3841 if (GameTicks and $FF) = 0 then |
3841 if (GameTicks and $FF) = 0 then |
3842 begin |
3842 begin |
3843 if (HHGear^.Message and gm_Right) <> 0 then |
3843 if (HHGear^.Message and gmRight) <> 0 then |
3844 begin |
3844 begin |
3845 if HHGear^.dX.isNegative and (Gear^.Tag < 20) then inc(Gear^.Tag) |
3845 if HHGear^.dX.isNegative and (Gear^.Tag < 20) then inc(Gear^.Tag) |
3846 else if Gear^.Tag > 5 then dec(Gear^.Tag); |
3846 else if Gear^.Tag > 5 then dec(Gear^.Tag); |
3847 end |
3847 end |
3848 else if (HHGear^.Message and gm_Left) <> 0 then |
3848 else if (HHGear^.Message and gmLeft) <> 0 then |
3849 begin |
3849 begin |
3850 if HHGear^.dX.isNegative and (Gear^.Tag > 5) then dec(Gear^.Tag) |
3850 if HHGear^.dX.isNegative and (Gear^.Tag > 5) then dec(Gear^.Tag) |
3851 else if Gear^.Tag < 20 then inc(Gear^.Tag); |
3851 else if Gear^.Tag < 20 then inc(Gear^.Tag); |
3852 end |
3852 end |
3853 end; |
3853 end; |