136 procedure doStepIceGun(Gear: PGear); |
136 procedure doStepIceGun(Gear: PGear); |
137 procedure doStepAddAmmo(Gear: PGear); |
137 procedure doStepAddAmmo(Gear: PGear); |
138 procedure doStepGenericFaller(Gear: PGear); |
138 procedure doStepGenericFaller(Gear: PGear); |
139 //procedure doStepCreeper(Gear: PGear); |
139 //procedure doStepCreeper(Gear: PGear); |
140 procedure doStepKnife(Gear: PGear); |
140 procedure doStepKnife(Gear: PGear); |
|
141 procedure doStepDuck(Gear: PGear); |
141 |
142 |
142 var |
143 var |
143 upd: Longword; |
144 upd: Longword; |
144 snowLeft,snowRight: LongInt; |
145 snowLeft,snowRight: LongInt; |
145 |
146 |
6343 and (TestCollisionXwithGear(Gear, 1) = 0) |
6344 and (TestCollisionXwithGear(Gear, 1) = 0) |
6344 and (TestCollisionXwithGear(Gear,-1) = 0) |
6345 and (TestCollisionXwithGear(Gear,-1) = 0) |
6345 and (TestCollisionYwithGear(Gear, 1) = 0) then Gear^.State:= Gear^.State and (not gstCollision) or gstMoving; |
6346 and (TestCollisionYwithGear(Gear, 1) = 0) then Gear^.State:= Gear^.State and (not gstCollision) or gstMoving; |
6346 end |
6347 end |
6347 end; |
6348 end; |
|
6349 |
|
6350 //////////////////////////////////////////////////////////////////////////////// |
|
6351 procedure doStepDuck(Gear: PGear); |
|
6352 begin |
|
6353 // Mirror duck on bounce world edge, even turn around later |
|
6354 if WorldWrap(Gear) and (WorldEdge = weBounce) then |
|
6355 begin |
|
6356 Gear^.Tag:= Gear^.Tag * -1; |
|
6357 if Gear^.Pos = 2 then |
|
6358 Gear^.Pos:= 1 |
|
6359 else if Gear^.Pos = 1 then |
|
6360 Gear^.Pos:= 2; |
|
6361 end; |
|
6362 |
|
6363 AllInactive := false; |
|
6364 |
|
6365 // Duck falls (Pos = 0) |
|
6366 if Gear^.Pos = 0 then |
|
6367 begin |
|
6368 doStepFallingGear(Gear); |
|
6369 // Karma is distance from water |
|
6370 if cWaterLine <= hwRound(Gear^.Y) + Gear^.Karma then |
|
6371 begin |
|
6372 Gear^.Pos:= 1; |
|
6373 Gear^.Timer:= Gear^.WDTimer; |
|
6374 Gear^.dY:= _0; |
|
6375 Gear^.State:= Gear^.State or gstNoGravity; |
|
6376 end; |
|
6377 end |
|
6378 |
|
6379 // Manual speed handling when duck is on water (Pos <> 0) |
|
6380 else |
|
6381 begin |
|
6382 Gear^.X:= Gear^.X + Gear^.dX; |
|
6383 Gear^.Y:= Gear^.Y + Gear^.dY; |
|
6384 end; |
|
6385 |
|
6386 // Mirrored duck |
|
6387 // Pos 1 or 2: Duck is on water (not Sea world edge) |
|
6388 if Gear^.Pos = 1 then |
|
6389 Gear^.dX:= cWindSpeed * 500 |
|
6390 else if Gear^.Pos = 2 then |
|
6391 Gear^.dX:= -cWindSpeed * 500; |
|
6392 |
|
6393 // Rotate duck and change direction when reaching Sea world edge (Pos 3 or 4) |
|
6394 if WorldEdge = weSea then |
|
6395 begin |
|
6396 // Left edge |
|
6397 if (LeftX >= hwRound(Gear^.X) - Gear^.Karma) and (Gear^.Pos < 3) then |
|
6398 begin |
|
6399 Gear^.Pos:= 3; |
|
6400 if Gear^.Tag = 1 then |
|
6401 Gear^.Angle:= 90 |
|
6402 else |
|
6403 Gear^.Angle:= 270; |
|
6404 Gear^.dY:= Gear^.dX; |
|
6405 Gear^.dX:= _0; |
|
6406 end |
|
6407 // Right edge |
|
6408 else if (RightX <= hwRound(Gear^.X) + Gear^.Karma) and (Gear^.Pos < 3) then |
|
6409 begin |
|
6410 Gear^.Pos:= 4; |
|
6411 if Gear^.Tag = 1 then |
|
6412 Gear^.Angle:= 270 |
|
6413 else |
|
6414 Gear^.Angle:= 90; |
|
6415 Gear^.dY:= -Gear^.dX; |
|
6416 Gear^.dX:= _0; |
|
6417 end; |
|
6418 end; |
|
6419 |
|
6420 // Explode duck |
|
6421 CheckCollision(Gear); |
|
6422 if (Gear^.Timer = 0) or ((Gear^.State and gstCollision) <> 0) then |
|
6423 begin |
|
6424 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound); |
|
6425 DeleteGear(Gear); |
|
6426 exit; |
|
6427 end; |
|
6428 |
|
6429 dec(Gear^.Timer); |
|
6430 end; |
|
6431 |
6348 (* |
6432 (* |
6349 This didn't end up getting used, but, who knows, might be reasonable for javellin or something |
6433 This didn't end up getting used, but, who knows, might be reasonable for javellin or something |
6350 // Make the knife initial angle based on the hog attack angle, or is that too hard? |
6434 // Make the knife initial angle based on the hog attack angle, or is that too hard? |
6351 procedure doStepKnife(Gear: PGear); |
6435 procedure doStepKnife(Gear: PGear); |
6352 var t, |
6436 var t, |