66 procedure ProcessGears; |
66 procedure ProcessGears; |
67 procedure SetAllToActive; |
67 procedure SetAllToActive; |
68 procedure SetAllHHToActive; |
68 procedure SetAllHHToActive; |
69 procedure DrawGears(Surface: PSDL_Surface); |
69 procedure DrawGears(Surface: PSDL_Surface); |
70 procedure FreeGearsList; |
70 procedure FreeGearsList; |
71 procedure InitGears; |
71 procedure AddMiscGears; |
72 procedure AssignHHCoords; |
72 procedure AssignHHCoords; |
73 |
73 |
74 var CurAmmoGear: PGear = nil; |
74 var CurAmmoGear: PGear = nil; |
75 |
75 |
76 implementation |
76 implementation |
86 end; |
86 end; |
87 end; |
87 end; |
88 |
88 |
89 procedure DeleteGear(Gear: PGear); forward; |
89 procedure DeleteGear(Gear: PGear); forward; |
90 procedure doMakeExplosion(X, Y, Radius: integer; Mask: LongWord); forward; |
90 procedure doMakeExplosion(X, Y, Radius: integer; Mask: LongWord); forward; |
|
91 function isGearNear(Gear: PGear; Kind: TGearType; rX, rY: integer): boolean; forward; |
91 |
92 |
92 {$INCLUDE GSHandlers.inc} |
93 {$INCLUDE GSHandlers.inc} |
93 {$INCLUDE HHHandlers.inc} |
94 {$INCLUDE HHHandlers.inc} |
94 |
95 |
95 const doStepHandlers: array[TGearType] of TGearStepProcedure = ( |
96 const doStepHandlers: array[TGearType] of TGearStepProcedure = ( |
182 RopePoints.Count:= 0; |
184 RopePoints.Count:= 0; |
183 end; |
185 end; |
184 gtExplosion: begin |
186 gtExplosion: begin |
185 Result.X:= Result.X - 25; |
187 Result.X:= Result.X - 25; |
186 Result.Y:= Result.Y - 25; |
188 Result.Y:= Result.Y - 25; |
|
189 end; |
|
190 gtMine: begin |
|
191 Result.HalfWidth:= 3; |
|
192 Result.HalfHeight:= 3; |
|
193 Result.Elasticity:= 0.55; |
|
194 Result.Friction:= 0.995; |
|
195 Result.Timer:= 3000; |
187 end; |
196 end; |
188 end; |
197 end; |
189 if GearsList = nil then GearsList:= Result |
198 if GearsList = nil then GearsList:= Result |
190 else begin |
199 else begin |
191 GearsList.PrevGear:= Result; |
200 GearsList.PrevGear:= Result; |
431 DrawSprite(sprRopeHook, Round(RopePoints.ar[0].X) + WorldDx - 16, Round(RopePoints.ar[0].Y) + WorldDy - 16, RopePoints.HookAngle, Surface); |
440 DrawSprite(sprRopeHook, Round(RopePoints.ar[0].X) + WorldDx - 16, Round(RopePoints.ar[0].Y) + WorldDy - 16, RopePoints.HookAngle, Surface); |
432 end else |
441 end else |
433 DrawSprite(sprRopeHook, Round(Gear.X) - 16 + WorldDx, Round(Gear.Y) - 16 + WorldDy, DxDy2Angle32(Gear.dY, Gear.dX), Surface); |
442 DrawSprite(sprRopeHook, Round(Gear.X) - 16 + WorldDx, Round(Gear.Y) - 16 + WorldDy, DxDy2Angle32(Gear.dY, Gear.dX), Surface); |
434 end; |
443 end; |
435 gtExplosion: DrawSprite(sprExplosion50, Round(Gear.X) + WorldDx, Round(Gear.Y) + WorldDy, Gear.State, Surface); |
444 gtExplosion: DrawSprite(sprExplosion50, Round(Gear.X) + WorldDx, Round(Gear.Y) + WorldDy, Gear.State, Surface); |
|
445 gtMine: if ((Gear.State and gstAttacking) = 0)or((Gear.Timer and $3FF) < 420) |
|
446 then DrawSprite(sprMineOff , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface) |
|
447 else DrawSprite(sprMineOn , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface); |
436 end; |
448 end; |
437 Gear:= Gear.NextGear |
449 Gear:= Gear.NextGear |
438 end; |
450 end; |
439 end; |
451 end; |
440 |
452 |
451 Dispose(t) |
463 Dispose(t) |
452 except OutError(errmsgDynamicVar) end; |
464 except OutError(errmsgDynamicVar) end; |
453 end; |
465 end; |
454 end; |
466 end; |
455 |
467 |
456 procedure InitGears; |
468 procedure AddMiscGears; |
457 var i: integer; |
469 var i, x, y: integer; |
458 begin |
470 begin |
459 for i:= 0 to cCloudsNumber do AddGear( - cScreenWidth + i * ((cScreenWidth * 2 + 2304) div cCloudsNumber), -128, gtCloud, random(4), (0.5-random)*0.01); |
471 for i:= 0 to cCloudsNumber do AddGear( - cScreenWidth + i * ((cScreenWidth * 2 + 2304) div cCloudsNumber), -128, gtCloud, random(4), (0.5-random)*0.01); |
460 AddGear(0, 0, gtActionTimer, gtsStartGame, 0, 0, 2000).Health:= 3; |
472 AddGear(0, 0, gtActionTimer, gtsStartGame, 0, 0, 2000).Health:= 3; |
|
473 for i:= 0 to 3 do |
|
474 begin |
|
475 GetHHPoint(x, y); |
|
476 AddGear(X, Y + 9, gtMine, 0); |
|
477 end; |
461 end; |
478 end; |
462 |
479 |
463 procedure doMakeExplosion(X, Y, Radius: integer; Mask: LongWord); |
480 procedure doMakeExplosion(X, Y, Radius: integer; Mask: LongWord); |
464 var Gear: PGear; |
481 var Gear: PGear; |
465 dmg: integer; |
482 dmg: integer; |