55 uid: Longword; |
56 uid: Longword; |
56 end; |
57 end; |
57 |
58 |
58 function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear; |
59 function AddGear(X, Y: LongInt; Kind: TGearType; State: Longword; dX, dY: hwFloat; Timer: LongWord): PGear; |
59 procedure ProcessGears; |
60 procedure ProcessGears; |
|
61 procedure ResetUtilities; |
60 procedure SetAllToActive; |
62 procedure SetAllToActive; |
61 procedure SetAllHHToActive; |
63 procedure SetAllHHToActive; |
62 procedure DrawGears; |
64 procedure DrawGears; |
63 procedure FreeGearsList; |
65 procedure FreeGearsList; |
64 procedure AddMiscGears; |
66 procedure AddMiscGears; |
419 Dispose(Gear) |
421 Dispose(Gear) |
420 end; |
422 end; |
421 |
423 |
422 function CheckNoDamage: boolean; // returns TRUE in case of no damaged hhs |
424 function CheckNoDamage: boolean; // returns TRUE in case of no damaged hhs |
423 var Gear: PGear; |
425 var Gear: PGear; |
|
426 dmg: LongInt; |
424 begin |
427 begin |
425 CheckNoDamage:= true; |
428 CheckNoDamage:= true; |
426 Gear:= GearsList; |
429 Gear:= GearsList; |
427 while Gear <> nil do |
430 while Gear <> nil do |
428 begin |
431 begin |
429 if Gear^.Kind = gtHedgehog then |
432 if Gear^.Kind = gtHedgehog then |
430 if Gear^.Damage <> 0 then |
433 begin |
431 begin |
434 if (Gear^.Damage <> 0) and |
432 CheckNoDamage:= false; |
435 (not Gear^.Invulnerable) then |
433 uStats.HedgehogDamaged(Gear); |
436 begin |
434 |
437 CheckNoDamage:= false; |
435 if Gear^.Health < Gear^.Damage then |
438 uStats.HedgehogDamaged(Gear); |
436 Gear^.Health:= 0 |
439 dmg:= HwRound(int2HwFloat(Gear^.Damage) * cDamageModifier); |
437 else |
440 if Gear^.Health < dmg then |
438 dec(Gear^.Health, Gear^.Damage); |
441 Gear^.Health:= 0 |
439 |
442 else |
440 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) - cHHRadius - 12, |
443 dec(Gear^.Health, dmg); |
441 gtHealthTag, Gear^.Damage, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog; |
444 |
442 |
445 AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) - cHHRadius - 12, |
443 RenderHealth(PHedgehog(Gear^.Hedgehog)^); |
446 gtHealthTag, dmg, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog; |
444 RecountTeamHealth(PHedgehog(Gear^.Hedgehog)^.Team); |
447 |
445 |
448 RenderHealth(PHedgehog(Gear^.Hedgehog)^); |
446 Gear^.Damage:= 0 |
449 RecountTeamHealth(PHedgehog(Gear^.Hedgehog)^.Team); |
447 end; |
450 |
|
451 end; |
|
452 Gear^.Damage:= 0; |
|
453 end; |
448 Gear:= Gear^.NextGear |
454 Gear:= Gear^.NextGear |
449 end; |
455 end; |
450 end; |
456 end; |
451 |
457 |
452 procedure HealthMachine; |
458 procedure HealthMachine; |
587 SendIPCTimeInc; |
594 SendIPCTimeInc; |
588 inc(hiTicks) // we do not recieve a message for this |
595 inc(hiTicks) // we do not recieve a message for this |
589 end; |
596 end; |
590 |
597 |
591 inc(GameTicks) |
598 inc(GameTicks) |
|
599 end; |
|
600 |
|
601 (* Purpose, to reset all transient attributes toggled by a utility. Right now that is just Low Gravity and Extra Damage and Invulnerability. |
|
602 Other possibilities include: Laser Sight... more? |
|
603 *) |
|
604 procedure ResetUtilities; |
|
605 begin |
|
606 cGravity:= cMaxWindSpeed; |
|
607 cDamageModifier:= _1; |
|
608 if (CurrentHedgehog^.Gear <> nil) then |
|
609 CurrentHedgehog^.Gear^.Invulnerable:= false; |
592 end; |
610 end; |
593 |
611 |
594 procedure SetAllToActive; |
612 procedure SetAllToActive; |
595 var t: PGear; |
613 var t: PGear; |
596 begin |
614 begin |
1221 gtTarget, |
1239 gtTarget, |
1222 gtFlame: begin |
1240 gtFlame: begin |
1223 //{$IFDEF DEBUGFILE}AddFileLog('Damage: ' + inttostr(dmg));{$ENDIF} |
1241 //{$IFDEF DEBUGFILE}AddFileLog('Damage: ' + inttostr(dmg));{$ENDIF} |
1224 if (Mask and EXPLNoDamage) = 0 then |
1242 if (Mask and EXPLNoDamage) = 0 then |
1225 begin |
1243 begin |
1226 inc(Gear^.Damage, dmg); |
1244 if not Gear^.Invulnerable then |
|
1245 inc(Gear^.Damage, dmg); |
1227 if Gear^.Kind = gtHedgehog then |
1246 if Gear^.Kind = gtHedgehog then |
1228 AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, PHedgehog(Gear^.Hedgehog)^.Team^.Clan^.Color) |
1247 AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, PHedgehog(Gear^.Hedgehog)^.Team^.Clan^.Color) |
1229 end; |
1248 end; |
1230 if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog) then |
1249 if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear^.Kind <> gtHedgehog) then |
1231 begin |
1250 begin |
1265 case t^.Kind of |
1284 case t^.Kind of |
1266 gtHedgehog, |
1285 gtHedgehog, |
1267 gtMine, |
1286 gtMine, |
1268 gtCase, |
1287 gtCase, |
1269 gtTarget: begin |
1288 gtTarget: begin |
1270 inc(t^.Damage, dmg); |
1289 if (not Gear^.Invulnerable) then |
|
1290 inc(t^.Damage, dmg); |
1271 |
1291 |
1272 if t^.Kind = gtHedgehog then |
1292 if t^.Kind = gtHedgehog then |
1273 AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, PHedgehog(t^.Hedgehog)^.Team^.Clan^.Color); |
1293 AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), dmg, PHedgehog(t^.Hedgehog)^.Team^.Clan^.Color); |
1274 |
1294 |
1275 DeleteCI(t); |
1295 DeleteCI(t); |