256 end; |
256 end; |
257 |
257 |
258 |
258 |
259 //////////////////////////////////////////////////////////////////////////////// |
259 //////////////////////////////////////////////////////////////////////////////// |
260 procedure doStepDrowningGear(Gear: PGear); |
260 procedure doStepDrowningGear(Gear: PGear); |
|
261 var i, d: LongInt; |
|
262 bubble: PVisualGear; |
|
263 begin |
|
264 if Gear^.Timer = 0 then |
261 begin |
265 begin |
262 if Gear^.Timer = 0 then |
266 d:= 2 * Gear^.Radius; |
263 begin |
267 for i:= (Gear^.Radius * Gear^.Radius) div 4 downto 0 do |
264 if (FollowGear = Gear) and (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) then |
268 begin |
265 FollowGear:= CurrentHedgehog^.Gear; |
269 bubble := AddVisualGear(hwRound(Gear^.X) - Gear^.Radius + random(d), hwRound(Gear^.Y) - Gear^.Radius + random(d), vgtBubble); |
266 end |
270 if bubble <> nil then |
267 else if Gear^.Timer > 0 then |
271 bubble^.dY:= 0.1 + random(20)/10; |
268 begin |
272 end; |
269 AllInactive := false; |
273 DeleteGear(Gear); |
270 dec(Gear^.Timer); |
274 exit; |
271 end; |
275 end; |
272 |
276 |
273 Gear^.Y := Gear^.Y + cDrownSpeed; |
277 AllInactive := false; |
274 |
278 dec(Gear^.Timer); |
275 if cWaterLine > hwRound(Gear^.Y) + Gear^.Radius then |
279 |
276 begin |
280 Gear^.Y := Gear^.Y + cDrownSpeed; |
277 if leftX > hwRound(Gear^.X) - Gear^.Radius then |
281 |
278 Gear^.X := Gear^.X - cDrownSpeed |
282 if cWaterLine > hwRound(Gear^.Y) + Gear^.Radius then |
279 else |
283 begin |
280 Gear^.X := Gear^.X + cDrownSpeed; |
284 if leftX > hwRound(Gear^.X) - Gear^.Radius then |
281 end |
285 Gear^.X := Gear^.X - cDrownSpeed |
282 else |
286 else |
283 Gear^.X := Gear^.X + Gear^.dX * cDrownSpeed; |
287 Gear^.X := Gear^.X + cDrownSpeed; |
284 |
288 end |
285 // Create some bubbles (0.5% might be better but causes too few bubbles sometimes) |
289 else |
286 if ((not SuddenDeathDmg and (WaterOpacity < $FF)) |
290 Gear^.X := Gear^.X + Gear^.dX * cDrownSpeed; |
287 or (SuddenDeathDmg and (SDWaterOpacity < $FF))) and ((GameTicks and $1F) = 0) then |
291 |
288 if (Gear^.Kind = gtHedgehog) and (Random(4) = 0) then |
292 // Create some bubbles (0.5% might be better but causes too few bubbles sometimes) |
289 AddVisualGear(hwRound(Gear^.X) - Gear^.Radius, hwRound(Gear^.Y) - Gear^.Radius, vgtBubble) |
293 if ((not SuddenDeathDmg and (WaterOpacity < $FF)) |
290 else if Random(12) = 0 then |
294 or (SuddenDeathDmg and (SDWaterOpacity < $FF))) and ((GameTicks and $1F) = 0) then |
291 AddVisualGear(hwRound(Gear^.X) - Gear^.Radius, hwRound(Gear^.Y) - Gear^.Radius, vgtBubble); |
295 if (Gear^.Kind = gtHedgehog) and (Random(4) = 0) then |
292 if (not SuddenDeathDmg and (WaterOpacity > $FE)) |
296 AddVisualGear(hwRound(Gear^.X) - Gear^.Radius, hwRound(Gear^.Y) - Gear^.Radius, vgtBubble) |
293 or (SuddenDeathDmg and (SDWaterOpacity > $FE)) |
297 else if Random(12) = 0 then |
294 or (hwRound(Gear^.Y) > Gear^.Radius + cWaterLine + cVisibleWater) then |
298 AddVisualGear(hwRound(Gear^.X) - Gear^.Radius, hwRound(Gear^.Y) - Gear^.Radius, vgtBubble); |
295 DeleteGear(Gear); |
299 if (not SuddenDeathDmg and (WaterOpacity > $FE)) |
296 end; |
300 or (SuddenDeathDmg and (SDWaterOpacity > $FE)) |
|
301 or (hwRound(Gear^.Y) > Gear^.Radius + cWaterLine + cVisibleWater) then |
|
302 DeleteGear(Gear); |
|
303 end; |
297 |
304 |
298 //////////////////////////////////////////////////////////////////////////////// |
305 //////////////////////////////////////////////////////////////////////////////// |
299 procedure doStepFallingGear(Gear: PGear); |
306 procedure doStepFallingGear(Gear: PGear); |
300 var |
307 var |
301 isFalling: boolean; |
308 isFalling: boolean; |