diff -r fc52f7c22c9b -r 6155187bf599 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Mon Jan 16 10:22:21 2012 +0100 +++ b/hedgewars/uGears.pas Tue Jan 17 09:01:31 2012 -0500 @@ -57,9 +57,9 @@ implementation uses uStore, uSound, uTeams, uRandom, uCollisions, uIO, uLandGraphics, - uAIMisc, uLocale, uAI, uAmmos, uStats, uVisualGears, uScript, GLunit, uMobile, uVariables, - uCommands, uUtils, uTextures, uRenderUtils, uGearsRender, uCaptions, uDebug, uLandTexture, - uGearsHedgehog, uGearsUtils, uGearsList; + uAIMisc, uLocale, uAI, uAmmos, uStats, uVisualGears, uScript, GLunit, uMobile, uVariables, + uCommands, uUtils, uTextures, uRenderUtils, uGearsRender, uCaptions, uDebug, uLandTexture, + uGearsHedgehog, uGearsUtils, uGearsList; procedure AmmoShove(Ammo: PGear; Damage, Power: LongInt); forward; @@ -83,11 +83,12 @@ Gear:= GearsList; while Gear <> nil do begin - if (Gear^.Kind = gtHedgehog) and (((GameFlags and gfInfAttack) = 0) or ((Gear^.dX.QWordValue < _0_000004.QWordValue) and (Gear^.dY.QWordValue < _0_000004.QWordValue))) then + if (Gear^.Kind = gtHedgehog) and (((GameFlags and gfInfAttack) = 0) or ((Gear^.dX.QWordValue < _0_000004.QWordValue) + and (Gear^.dY.QWordValue < _0_000004.QWordValue))) then begin - if (not isInMultiShoot) then inc(Gear^.Damage, Gear^.Karma); - if (Gear^.Damage <> 0) and - (not Gear^.Invulnerable) then + if (not isInMultiShoot) then + inc(Gear^.Damage, Gear^.Karma); + if (Gear^.Damage <> 0) and (not Gear^.Invulnerable) then begin CheckNoDamage:= false; @@ -100,11 +101,8 @@ else dec(Gear^.Health, dmg); - if (Gear^.Hedgehog^.Team = CurrentTeam) and - (Gear^.Damage <> Gear^.Karma) and - (not Gear^.Hedgehog^.King) and - (not Gear^.Hedgehog^.Effects[hePoisoned]) and - (not SuddenDeathDmg) then + if (Gear^.Hedgehog^.Team = CurrentTeam) and (Gear^.Damage <> Gear^.Karma) + and (not Gear^.Hedgehog^.King) and (not Gear^.Hedgehog^.Effects[hePoisoned]) and (not SuddenDeathDmg) then Gear^.State:= Gear^.State or gstLoser; spawnHealthTagForHH(Gear, dmg); @@ -113,7 +111,8 @@ RecountTeamHealth(Gear^.Hedgehog^.Team); end; - if (not isInMultiShoot) then Gear^.Karma:= 0; + if (not isInMultiShoot) then + Gear^.Karma:= 0; Gear^.Damage:= 0 end; Gear:= Gear^.NextGear @@ -123,9 +122,9 @@ procedure HealthMachine; var Gear: PGear; team: PTeam; - i: LongWord; + i: LongWord; flag: Boolean; - tmp: LongWord; + tmp: LongWord; begin Gear:= GearsList; @@ -137,26 +136,28 @@ if Gear^.Hedgehog^.Effects[hePoisoned] then begin inc(tmp, ModifyDamage(5, Gear)); - if (GameFlags and gfResetHealth) <> 0 then dec(Gear^.Hedgehog^.InitialHealth) // does not need a minimum check since <= 1 basically disables it + if (GameFlags and gfResetHealth) <> 0 then + dec(Gear^.Hedgehog^.InitialHealth) // does not need a minimum check since <= 1 basically disables it end; if (TotalRounds > cSuddenDTurns - 1) then begin inc(tmp, cHealthDecrease); - if (GameFlags and gfResetHealth) <> 0 then dec(Gear^.Hedgehog^.InitialHealth, cHealthDecrease) + if (GameFlags and gfResetHealth) <> 0 then + dec(Gear^.Hedgehog^.InitialHealth, cHealthDecrease) end; if Gear^.Hedgehog^.King then begin flag:= false; team:= Gear^.Hedgehog^.Team; for i:= 0 to Pred(team^.HedgehogsNumber) do - if (team^.Hedgehogs[i].Gear <> nil) and - (not team^.Hedgehogs[i].King) and - (team^.Hedgehogs[i].Gear^.Health > team^.Hedgehogs[i].Gear^.Damage) - then flag:= true; + if (team^.Hedgehogs[i].Gear <> nil) and (not team^.Hedgehogs[i].King) + and (team^.Hedgehogs[i].Gear^.Health > team^.Hedgehogs[i].Gear^.Damage) then + flag:= true; if not flag then begin inc(tmp, 5); - if (GameFlags and gfResetHealth) <> 0 then dec(Gear^.Hedgehog^.InitialHealth, 5) + if (GameFlags and gfResetHealth) <> 0 then + dec(Gear^.Hedgehog^.InitialHealth, 5) end end; if tmp > 0 then @@ -172,10 +173,10 @@ procedure ProcessGears; const delay: LongWord = 0; - delay2: LongWord = 0; + delay2: LongWord = 0; step: (stDelay, stChDmg, stSweep, stTurnReact, - stAfterDelay, stChWin, stWater, stChWin2, stHealth, - stSpawn, stNTurn) = stDelay; + stAfterDelay, stChWin, stWater, stChWin2, stHealth, + stSpawn, stNTurn) = stDelay; var Gear, t: PGear; i, AliveCount: LongInt; s: shortstring; @@ -215,7 +216,8 @@ if AllInactive then case step of - stDelay: begin + stDelay: + begin if delay = 0 then delay:= cInactDelay else @@ -224,70 +226,90 @@ if delay = 0 then inc(step) end; - stChDmg: if CheckNoDamage then inc(step) else step:= stDelay; - stSweep: if SweepDirty then - begin - SetAllToActive; - step:= stChDmg - end else inc(step); - stTurnReact: begin + + stChDmg: + if CheckNoDamage then + inc(step) + else + step:= stDelay; + + stSweep: + if SweepDirty then + begin + SetAllToActive; + step:= stChDmg + end + else + inc(step); + + stTurnReact: + begin if (not bBetweenTurns) and (not isInMultiShoot) then begin uStats.TurnReaction; inc(step) - end else + end + else inc(step, 2); end; - stAfterDelay: begin + + stAfterDelay: + begin if delay = 0 then delay:= cInactDelay else dec(delay); if delay = 0 then - inc(step) - end; - stChWin: begin - CheckForWin; - inc(step) - end; - stWater: if (not bBetweenTurns) and (not isInMultiShoot) then - begin - if TotalRounds = cSuddenDTurns + 1 then bWaterRising:= true; - - if bWaterRising and (cWaterRise > 0) then - AddGear(0, 0, gtWaterUp, 0, _0, _0, 0)^.Tag:= cWaterRise; - - inc(step) - end else inc(step); - stChWin2: begin - CheckForWin; inc(step) end; - stHealth: begin - if (cWaterRise <> 0) or (cHealthDecrease <> 0) then + stChWin: + begin + CheckForWin; + inc(step) + end; + stWater: + if (not bBetweenTurns) and (not isInMultiShoot) then + begin + if TotalRounds = cSuddenDTurns + 1 then + bWaterRising:= true; + if bWaterRising and (cWaterRise > 0) then + AddGear(0, 0, gtWaterUp, 0, _0, _0, 0)^.Tag:= cWaterRise; + inc(step) + end + else + inc(step); + stChWin2: + begin + CheckForWin; + inc(step) + end; + + stHealth: + begin + if (cWaterRise <> 0) or (cHealthDecrease <> 0) then + begin + if (TotalRounds = cSuddenDTurns) and (not SuddenDeath) and (not isInMultiShoot) then begin - if (TotalRounds = cSuddenDTurns) and (not SuddenDeath) and (not isInMultiShoot) then + SuddenDeath:= true; + if cHealthDecrease <> 0 then begin - SuddenDeath:= true; - if cHealthDecrease <> 0 then - begin - SuddenDeathDmg:= true; + SuddenDeathDmg:= true; - // flash - ScreenFade:= sfFromWhite; - ScreenFadeValue:= sfMax; - ScreenFadeSpeed:= 1; - - ChangeToSDClouds; - ChangeToSDFlakes; - glClearColor(SDSkyColor.r * (SDTint/255) / 255, SDSkyColor.g * (SDTint/255) / 255, SDSkyColor.b * (SDTint/255) / 255, 0.99); - Ammoz[amTardis].SkipTurns:= 9999; - Ammoz[amTardis].Probability:= 0; - end; - AddCaption(trmsg[sidSuddenDeath], cWhiteColor, capgrpGameState); - playSound(sndSuddenDeath); - StopMusic //No SDMusic for now + // flash + ScreenFade:= sfFromWhite; + ScreenFadeValue:= sfMax; + ScreenFadeSpeed:= 1; + + ChangeToSDClouds; + ChangeToSDFlakes; + glClearColor(SDSkyColor.r * (SDTint/255) / 255, SDSkyColor.g * (SDTint/255) / 255, SDSkyColor.b * (SDTint/255) / 255, 0.99); + Ammoz[amTardis].SkipTurns:= 9999; + Ammoz[amTardis].Probability:= 0; + end; + AddCaption(trmsg[sidSuddenDeath], cWhiteColor, capgrpGameState); + playSound(sndSuddenDeath); + StopMusic //No SDMusic for now //MusicFN:= SDMusic; //ChangeMusic end @@ -302,29 +324,36 @@ end; end; if bBetweenTurns - or isInMultiShoot - or (TotalRounds = -1) then inc(step) - else begin + or isInMultiShoot + or (TotalRounds = -1) then + inc(step) + else + begin bBetweenTurns:= true; HealthMachine; step:= stChDmg end end; - stSpawn: begin - if not isInMultiShoot then SpawnBoxOfSmth; - inc(step) - end; - stNTurn: begin - if isInMultiShoot then - isInMultiShoot:= false - else begin - // delayed till after 0.9.12 - // reset to default zoom - //ZoomValue:= ZoomDefault; - with CurrentHedgehog^ do - if (Gear <> nil) - and ((Gear^.State and gstAttacked) = 0) - and (MultiShootAttacks > 0) then OnUsedAmmo(CurrentHedgehog^); + stSpawn: + begin + if not isInMultiShoot then + SpawnBoxOfSmth; + inc(step) + end; + stNTurn: + begin + if isInMultiShoot then + isInMultiShoot:= false + else + begin + // delayed till after 0.9.12 + // reset to default zoom + //ZoomValue:= ZoomDefault; + with CurrentHedgehog^ do + if (Gear <> nil) + and ((Gear^.State and gstAttacked) = 0) + and (MultiShootAttacks > 0) then + OnUsedAmmo(CurrentHedgehog^); EndTurnCleanup; @@ -347,9 +376,11 @@ begin dec(delay2); - if ((delay2 mod cInactDelay) = 0) and (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and (not CurrentHedgehog^.Unplaced) then + if ((delay2 mod cInactDelay) = 0) and (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) + and (not CurrentHedgehog^.Unplaced) then begin - if (CurrentHedgehog^.Gear^.State and gstAttacked <> 0) and (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0) then + if (CurrentHedgehog^.Gear^.State and gstAttacked <> 0) + and (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0) then begin CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State or gstHHChooseTarget; isCursorVisible := true @@ -358,15 +389,19 @@ end; if delay2 = 0 then begin - if (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.Gear^.State and gstAttacked = 0) and (CurAmmoGear = nil) then SweepDirty; + if (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.Gear^.State and gstAttacked = 0) + and (CurAmmoGear = nil) then + SweepDirty; CheckNoDamage; AliveCount:= 0; // shorter version of check for win to allow typical step activity to proceed for i:= 0 to Pred(ClansCount) do - if ClansArray[i]^.ClanHealth > 0 then inc(AliveCount); + if ClansArray[i]^.ClanHealth > 0 then + inc(AliveCount); if (AliveCount <= 1) and ((GameFlags and gfOneClanMode) = 0) then begin step:= stChDmg; - if TagTurnTimeLeft = 0 then TagTurnTimeLeft:= TurnTimeLeft; + if TagTurnTimeLeft = 0 then + TagTurnTimeLeft:= TurnTimeLeft; TurnTimeLeft:= 0 end end @@ -374,29 +409,30 @@ end; if TurnTimeLeft > 0 then - if CurrentHedgehog^.Gear <> nil then - if ((CurrentHedgehog^.Gear^.State and gstAttacking) = 0) - and (not isInMultiShoot) then + if CurrentHedgehog^.Gear <> nil then + if ((CurrentHedgehog^.Gear^.State and gstAttacking) = 0) + and (not isInMultiShoot) then begin if (TurnTimeLeft = 5000) - and (cHedgehogTurnTime >= 10000) - and (not PlacingHogs) - and (CurrentHedgehog^.Gear <> nil) - and ((CurrentHedgehog^.Gear^.State and gstAttacked) = 0) then - AddVoice(sndHurry, CurrentTeam^.voicepack); - if ReadyTimeLeft > 0 then - begin - if ReadyTimeLeft = 2000 then - AddVoice(sndComeonthen, CurrentTeam^.voicepack); - dec(ReadyTimeLeft) - end - else - dec(TurnTimeLeft) - end; + and (cHedgehogTurnTime >= 10000) + and (not PlacingHogs) + and (CurrentHedgehog^.Gear <> nil) + and ((CurrentHedgehog^.Gear^.State and gstAttacked) = 0) then + AddVoice(sndHurry, CurrentTeam^.voicepack); + if ReadyTimeLeft > 0 then + begin + if ReadyTimeLeft = 2000 then + AddVoice(sndComeonthen, CurrentTeam^.voicepack); + dec(ReadyTimeLeft) + end + else + dec(TurnTimeLeft) + end; if skipFlag then begin - if TagTurnTimeLeft = 0 then TagTurnTimeLeft:= TurnTimeLeft; + if TagTurnTimeLeft = 0 then + TagTurnTimeLeft:= TurnTimeLeft; TurnTimeLeft:= 0; skipFlag:= false; inc(CurrentHedgehog^.Team^.stats.TurnSkips); @@ -501,7 +537,8 @@ t:= GearsList; while t <> nil do begin - if (t^.Kind = gtHedgehog) or (t^.Kind = gtExplosives) then t^.Active:= true; + if (t^.Kind = gtHedgehog) or (t^.Kind = gtExplosives) then + t^.Active:= true; t:= t^.NextGear end end; @@ -572,11 +609,11 @@ Gear:= GearsList; if (GameFlags and gfInvulnerable) <> 0 then - while Gear <> nil do - begin - Gear^.Invulnerable:= true; // this is only checked on hogs right now, so no need for gear type check - Gear:= Gear^.NextGear - end; + while Gear <> nil do + begin + Gear^.Invulnerable:= true; // this is only checked on hogs right now, so no need for gear type check + Gear:= Gear^.NextGear + end; if (GameFlags and gfLaserSight) <> 0 then cLaserSighting:= true; @@ -655,7 +692,8 @@ end; t:= t^.NextGear end; -if (GameFlags and gfSolidLand) = 0 then DrawExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), cShotgunRadius) +if (GameFlags and gfSolidLand) = 0 then + DrawExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), cShotgunRadius) end; procedure AmmoShove(Ammo: PGear; Damage, Power: LongInt); @@ -666,9 +704,9 @@ begin t:= CheckGearsCollision(Ammo); // Just to avoid hogs on rope dodging fire. -if (CurAmmoGear <> nil) and ((CurAmmoGear^.Kind = gtRope) or (CurAmmoGear^.Kind = gtJetpack) or (CurAmmoGear^.Kind = gtBirdy)) and - (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.Gear^.CollisionIndex = -1) and - (sqr(hwRound(Ammo^.X) - hwRound(CurrentHedgehog^.Gear^.X)) + sqr(hwRound(Ammo^.Y) - hwRound(CurrentHedgehog^.Gear^.Y)) <= sqr(cHHRadius + Ammo^.Radius)) then +if (CurAmmoGear <> nil) and ((CurAmmoGear^.Kind = gtRope) or (CurAmmoGear^.Kind = gtJetpack) or (CurAmmoGear^.Kind = gtBirdy)) +and (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.Gear^.CollisionIndex = -1) +and (sqr(hwRound(Ammo^.X) - hwRound(CurrentHedgehog^.Gear^.X)) + sqr(hwRound(Ammo^.Y) - hwRound(CurrentHedgehog^.Gear^.Y)) <= sqr(cHHRadius + Ammo^.Radius)) then begin t^.ar[t^.Count]:= CurrentHedgehog^.Gear; inc(t^.Count) @@ -676,7 +714,8 @@ i:= t^.Count; -if (Ammo^.Kind = gtFlame) and (i > 0) then Ammo^.Health:= 0; +if (Ammo^.Kind = gtFlame) and (i > 0) then + Ammo^.Health:= 0; while i > 0 do begin dec(i); @@ -688,10 +727,12 @@ if (Ammo^.Kind = gtDEagleShot) or (Ammo^.Kind = gtSniperRifleShot) then begin VGear := AddVisualGear(hwround(Ammo^.X), hwround(Ammo^.Y), vgtBulletHit); - if VGear <> nil then VGear^.Angle := DxDy2Angle(-Ammo^.dX, Ammo^.dY); + if VGear <> nil then + VGear^.Angle := DxDy2Angle(-Ammo^.dX, Ammo^.dY); end; - if (Gear^.Kind = gtHedgehog) and (Ammo^.State and gsttmpFlag <> 0) and (Ammo^.Kind = gtShover) then Gear^.FlightTime:= 1; + if (Gear^.Kind = gtHedgehog) and (Ammo^.State and gsttmpFlag <> 0) and (Ammo^.Kind = gtShover) then + Gear^.FlightTime:= 1; case Gear^.Kind of gtHedgehog, @@ -700,49 +741,60 @@ gtTarget, gtCase, gtExplosives, - gtStructure: begin - if (Ammo^.Kind = gtDrill) then begin Ammo^.Timer:= 0; exit; end; - if (not Gear^.Invulnerable) then - ApplyDamage(Gear, Ammo^.Hedgehog, tmpDmg, dsShove) - else - Gear^.State:= Gear^.State or gstWinner; - if (Gear^.Kind = gtExplosives) and (Ammo^.Kind = gtBlowtorch) then - begin - if (Ammo^.Hedgehog^.Gear <> nil) then Ammo^.Hedgehog^.Gear^.State:= Ammo^.Hedgehog^.Gear^.State and (not gstNotKickable); - ApplyDamage(Gear, Ammo^.Hedgehog, tmpDmg * 100, dsUnknown); // crank up damage for explosives + blowtorch - end; + gtStructure: + begin + if (Ammo^.Kind = gtDrill) then + begin + Ammo^.Timer:= 0; + exit; + end; + if (not Gear^.Invulnerable) then + ApplyDamage(Gear, Ammo^.Hedgehog, tmpDmg, dsShove) + else + Gear^.State:= Gear^.State or gstWinner; + if (Gear^.Kind = gtExplosives) and (Ammo^.Kind = gtBlowtorch) then + begin + if (Ammo^.Hedgehog^.Gear <> nil) then + Ammo^.Hedgehog^.Gear^.State:= Ammo^.Hedgehog^.Gear^.State and (not gstNotKickable); + ApplyDamage(Gear, Ammo^.Hedgehog, tmpDmg * 100, dsUnknown); // crank up damage for explosives + blowtorch + end; - DeleteCI(Gear); - if (Gear^.Kind = gtHedgehog) and Gear^.Hedgehog^.King then - begin - Gear^.dX:= Ammo^.dX * Power * _0_005; - Gear^.dY:= Ammo^.dY * Power * _0_005 - end - else - begin - Gear^.dX:= Ammo^.dX * Power * _0_01; - Gear^.dY:= Ammo^.dY * Power * _0_01 - end; + DeleteCI(Gear); + if (Gear^.Kind = gtHedgehog) and Gear^.Hedgehog^.King then + begin + Gear^.dX:= Ammo^.dX * Power * _0_005; + Gear^.dY:= Ammo^.dY * Power * _0_005 + end + else + begin + Gear^.dX:= Ammo^.dX * Power * _0_01; + Gear^.dY:= Ammo^.dY * Power * _0_01 + end; + + Gear^.Active:= true; + Gear^.State:= Gear^.State or gstMoving; - Gear^.Active:= true; - Gear^.State:= Gear^.State or gstMoving; + if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then + begin + if not (TestCollisionXwithXYShift(Gear, _0, -3, hwSign(Gear^.dX)) + or (TestCollisionYwithGear(Gear, -1) <> 0)) then + Gear^.Y:= Gear^.Y - _1; + if not (TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX)) + or (TestCollisionYwithGear(Gear, -1) <> 0)) then + Gear^.Y:= Gear^.Y - _1; + if not (TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX)) + or (TestCollisionYwithGear(Gear, -1) <> 0)) then + Gear^.Y:= Gear^.Y - _1; + end; - if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then - begin - if not (TestCollisionXwithXYShift(Gear, _0, -3, hwSign(Gear^.dX)) - or (TestCollisionYwithGear(Gear, -1) <> 0)) then Gear^.Y:= Gear^.Y - _1; - if not (TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX)) - or (TestCollisionYwithGear(Gear, -1) <> 0)) then Gear^.Y:= Gear^.Y - _1; - if not (TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX)) - or (TestCollisionYwithGear(Gear, -1) <> 0)) then Gear^.Y:= Gear^.Y - _1; - end; - - if (Ammo^.Kind <> gtFlame) or ((Ammo^.State and gsttmpFlag) = 0) then FollowGear:= Gear - end; + if (Ammo^.Kind <> gtFlame) or ((Ammo^.State and gsttmpFlag) = 0) then + FollowGear:= Gear + end; end end; end; -if i <> 0 then SetAllToActive +if i <> 0 then + SetAllToActive end; procedure AssignHHCoords; @@ -750,7 +802,8 @@ ar: array[0..Pred(cMaxHHs)] of PHedgehog; Count: Longword; begin -if (GameFlags and gfPlaceHog) <> 0 then PlacingHogs:= true; +if (GameFlags and gfPlaceHog) <> 0 then + PlacingHogs:= true; if (GameFlags and gfDivideTeams) <> 0 then begin t:= 0; @@ -764,8 +817,10 @@ with Hedgehogs[i] do if (Gear <> nil) and (Gear^.X.QWordValue = 0) then begin - if PlacingHogs then Unplaced:= true - else FindPlace(Gear, false, t, t + LAND_WIDTH div 2);// could make Gear == nil; + if PlacingHogs then + Unplaced:= true + else + FindPlace(Gear, false, t, t + LAND_WIDTH div 2);// could make Gear == nil; if Gear <> nil then begin Gear^.Pos:= GetRandom(49); @@ -795,8 +850,10 @@ while (Count > 0) do begin i:= GetRandom(Count); - if PlacingHogs then ar[i]^.Unplaced:= true - else FindPlace(ar[i]^.Gear, false, 0, LAND_WIDTH); + if PlacingHogs then + ar[i]^.Unplaced:= true + else + FindPlace(ar[i]^.Gear, false, 0, LAND_WIDTH); if ar[i]^.Gear <> nil then begin ar[i]^.Gear^.dX.isNegative:= hwRound(ar[i]^.Gear^.X) > LAND_WIDTH div 2; @@ -858,7 +915,8 @@ t:= GearsList; while t <> nil do begin - if t^.Kind = Kind then inc(count); + if t^.Kind = Kind then + inc(count); t:= t^.NextGear end; CountGears:= count; @@ -869,27 +927,32 @@ FollowGear := AddGear(x, y, gtCase, 0, _0, _0, 0); cCaseFactor := 0; - if (crate <> HealthCrate) and (content > ord(High(TAmmoType))) then content := ord(High(TAmmoType)); + if (crate <> HealthCrate) and (content > ord(High(TAmmoType))) then + content := ord(High(TAmmoType)); case crate of - HealthCrate: begin + HealthCrate: + begin FollowGear^.Pos := posCaseHealth; FollowGear^.Health := content; AddCaption(GetEventString(eidNewHealthPack), cWhiteColor, capgrpAmmoInfo); end; - AmmoCrate: begin + AmmoCrate: + begin FollowGear^.Pos := posCaseAmmo; FollowGear^.AmmoType := TAmmoType(content); AddCaption(GetEventString(eidNewAmmoPack), cWhiteColor, capgrpAmmoInfo); end; - UtilityCrate: begin + UtilityCrate: + begin FollowGear^.Pos := posCaseUtility; FollowGear^.AmmoType := TAmmoType(content); AddCaption(GetEventString(eidNewUtilityPack), cWhiteColor, capgrpAmmoInfo); end; end; - if ( (x = 0) and (y = 0) ) then FindPlace(FollowGear, true, 0, LAND_WIDTH); + if ( (x = 0) and (y = 0) ) then + FindPlace(FollowGear, true, 0, LAND_WIDTH); SpawnCustomCrateAt := FollowGear; end; @@ -900,25 +963,31 @@ cCaseFactor := 0; FollowGear^.Pos := posCaseDummy; - if explode then FollowGear^.Pos := FollowGear^.Pos + posCaseExplode; - if poison then FollowGear^.Pos := FollowGear^.Pos + posCasePoison; + if explode then + FollowGear^.Pos := FollowGear^.Pos + posCaseExplode; + if poison then + FollowGear^.Pos := FollowGear^.Pos + posCasePoison; case crate of - HealthCrate: begin + HealthCrate: + begin FollowGear^.Pos := FollowGear^.Pos + posCaseHealth; AddCaption(GetEventString(eidNewHealthPack), cWhiteColor, capgrpAmmoInfo); end; - AmmoCrate: begin + AmmoCrate: + begin FollowGear^.Pos := FollowGear^.Pos + posCaseAmmo; AddCaption(GetEventString(eidNewAmmoPack), cWhiteColor, capgrpAmmoInfo); end; - UtilityCrate: begin + UtilityCrate: + begin FollowGear^.Pos := FollowGear^.Pos + posCaseUtility; AddCaption(GetEventString(eidNewUtilityPack), cWhiteColor, capgrpAmmoInfo); end; end; - if ( (x = 0) and (y = 0) ) then FindPlace(FollowGear, true, 0, LAND_WIDTH); + if ( (x = 0) and (y = 0) ) then + FindPlace(FollowGear, true, 0, LAND_WIDTH); SpawnFakeCrateAt := FollowGear; end; @@ -939,11 +1008,11 @@ begin t:= GetRandom(t); while t >= 0 do - begin - inc(i); - if (Ammoz[i].Ammo.Propz and ammoprop_Utility) = 0 then - dec(t, Ammoz[i].Probability) - end + begin + inc(i); + if (Ammoz[i].Ammo.Propz and ammoprop_Utility) = 0 then + dec(t, Ammoz[i].Probability) + end end; GetAmmo:= i end; @@ -955,7 +1024,8 @@ uTot:= 0; for i:= Low(TAmmoType) to High(TAmmoType) do - if ((Ammoz[i].Ammo.Propz and ammoprop_Utility) <> 0) and ((Hedgehog^.Team^.HedgehogsNumber > 1) or (Ammoz[i].Ammo.AmmoType <> amSwitch)) then + if ((Ammoz[i].Ammo.Propz and ammoprop_Utility) <> 0) + and ((Hedgehog^.Team^.HedgehogsNumber > 1) or (Ammoz[i].Ammo.AmmoType <> amSwitch)) then inc(uTot, Ammoz[i].Probability); t:= uTot; @@ -964,11 +1034,12 @@ begin t:= GetRandom(t); while t >= 0 do - begin - inc(i); - if ((Ammoz[i].Ammo.Propz and ammoprop_Utility) <> 0) and ((Hedgehog^.Team^.HedgehogsNumber > 1) or (Ammoz[i].Ammo.AmmoType <> amSwitch)) then - dec(t, Ammoz[i].Probability) - end + begin + inc(i); + if ((Ammoz[i].Ammo.Propz and ammoprop_Utility) <> 0) and ((Hedgehog^.Team^.HedgehogsNumber > 1) + or (Ammoz[i].Ammo.AmmoType <> amSwitch)) then + dec(t, Ammoz[i].Probability) + end end; GetUtility:= i end; @@ -980,9 +1051,10 @@ i: TAmmoType; begin if (PlacingHogs) or - (cCaseFactor = 0) or - (CountGears(gtCase) >= 5) or - (GetRandom(cCaseFactor) <> 0) then exit; + (cCaseFactor = 0) + or (CountGears(gtCase) >= 5) + or (GetRandom(cCaseFactor) <> 0) then + exit; FollowGear:= nil; aTot:= 0; @@ -1083,7 +1155,8 @@ procedure chSkip(var s: shortstring); begin s:= s; // avoid compiler hint -if not CurrentTeam^.ExtDriven then SendIPC(','); +if not CurrentTeam^.ExtDriven then + SendIPC(','); uStats.Skipped; skipFlag:= true end; @@ -1102,12 +1175,16 @@ if x < 4 then begin t:= byte(s[2]); // team - if Length(s) > 2 then h:= byte(s[3]) // target hog + if Length(s) > 2 then + h:= byte(s[3]) // target hog end; // allow targetting a hog by specifying a number as the first portion of the text - if (x < 4) and (h > byte('0')) and (h < byte('9')) then i:= h - 48; - if i <> 0 then text:= copy(s, 4, Length(s) - 1) - else if x < 4 then text:= copy(s, 3, Length(s) - 1) + if (x < 4) and (h > byte('0')) and (h < byte('9')) then + i:= h - 48; + if i <> 0 then + text:= copy(s, 4, Length(s) - 1) + else if x < 4 then + text:= copy(s, 3, Length(s) - 1) else text:= copy(s, 2, Length(s) - 1); (* @@ -1121,7 +1198,8 @@ if (x < 4) and (TeamsArray[t] <> nil) then begin // if team matches current hedgehog team, default to current hedgehog - if (i = 0) and (CurrentHedgehog <> nil) and (CurrentHedgehog^.Team = TeamsArray[t]) then hh:= CurrentHedgehog + if (i = 0) and (CurrentHedgehog <> nil) and (CurrentHedgehog^.Team = TeamsArray[t]) then + hh:= CurrentHedgehog else begin // otherwise use the first living hog or the hog amongs the remaining ones indicated by i