diff -r fc52f7c22c9b -r 6155187bf599 hedgewars/uTeams.pas --- a/hedgewars/uTeams.pas Mon Jan 16 10:22:21 2012 +0100 +++ b/hedgewars/uTeams.pas Tue Jan 17 09:01:31 2012 -0500 @@ -55,7 +55,8 @@ end; if (AliveCount > 1) -or ((AliveCount = 1) and ((GameFlags and gfOneClanMode) <> 0)) then exit(false); +or ((AliveCount = 1) and ((GameFlags and gfOneClanMode) <> 0)) then + exit(false); CheckForWin:= true; TurnTimeLeft:= 0; @@ -67,7 +68,8 @@ AddCaption(trmsg[sidDraw], cWhiteColor, capgrpGameState); SendStat(siGameResult, trmsg[sidDraw]); AddGear(0, 0, gtATFinishGame, 0, _0, _0, 3000) - end else // win + end + else // win with AliveClan^ do begin if TeamsNumber = 1 then @@ -109,7 +111,8 @@ begin DeleteCI(Gear); FindPlace(Gear, false, 0, LAND_WIDTH); - if Gear <> nil then AddGearCI(Gear) + if Gear <> nil then + AddGearCI(Gear) end end; @@ -134,7 +137,8 @@ repeat begin inc(c); - if c > cMaxHHIndex then c:= 0 + if c > cMaxHHIndex then + c:= 0 end until (c = CurrHedgehog) or (Hedgehogs[c].Gear <> nil); LocalAmmo:= Hedgehogs[c].AmmoStore @@ -151,11 +155,13 @@ NextClan:= true; end; - if (GameFlags and gfTagTeam) = 0 then inc(c); + if (GameFlags and gfTagTeam) = 0 then + inc(c); if c = ClansCount then begin - if not PlacingHogs then inc(TotalRounds); + if not PlacingHogs then + inc(TotalRounds); c:= 0 end; @@ -185,25 +191,27 @@ begin if PlacingHogs then - begin - PlacingHogs:= false; - for t:= 0 to Pred(TeamsCount) do - for i:= 0 to cMaxHHIndex do - if (TeamsArray[t]^.Hedgehogs[i].Gear <> nil) and (TeamsArray[t]^.Hedgehogs[i].Unplaced) then - PlacingHogs:= true; + begin + PlacingHogs:= false; + for t:= 0 to Pred(TeamsCount) do + for i:= 0 to cMaxHHIndex do + if (TeamsArray[t]^.Hedgehogs[i].Gear <> nil) and (TeamsArray[t]^.Hedgehogs[i].Unplaced) then + PlacingHogs:= true; - if not PlacingHogs then // Reset various things I mucked with - begin - for i:= 0 to ClansCount do - if ClansArray[i] <> nil then ClansArray[i]^.TurnNumber:= 0; - ResetWeapons - end - end; + if not PlacingHogs then // Reset various things I mucked with + begin + for i:= 0 to ClansCount do + if ClansArray[i] <> nil then + ClansArray[i]^.TurnNumber:= 0; + ResetWeapons + end + end; inc(CurrentTeam^.Clan^.TurnNumber); CurWeapon:= GetAmmoEntry(CurrentHedgehog^); -if CurWeapon^.Count = 0 then CurrentHedgehog^.CurAmmoType:= amNothing; +if CurWeapon^.Count = 0 then + CurrentHedgehog^.CurAmmoType:= amNothing; with CurrentHedgehog^ do begin @@ -235,18 +243,21 @@ ApplyAmmoChanges(CurrentHedgehog^); -if (not CurrentTeam^.ExtDriven) and (CurrentHedgehog^.BotLevel = 0) then SetBinds(CurrentTeam^.Binds); +if (not CurrentTeam^.ExtDriven) and (CurrentHedgehog^.BotLevel = 0) then + SetBinds(CurrentTeam^.Binds); bShowFinger:= true; if PlacingHogs then begin - if CurrentHedgehog^.Unplaced then TurnTimeLeft:= 15000 + if CurrentHedgehog^.Unplaced then + TurnTimeLeft:= 15000 else TurnTimeLeft:= 0 end else if ((GameFlags and gfTagTeam) <> 0) and (not NextClan) then begin - if TagTurnTimeLeft <> 0 then TurnTimeLeft:= TagTurnTimeLeft; + if TagTurnTimeLeft <> 0 then + TurnTimeLeft:= TagTurnTimeLeft; TagTurnTimeLeft:= 0; end else @@ -261,7 +272,8 @@ AddVoice(sndIllGetYou, CurrentTeam^.voicepack) else AddVoice(sndYesSir, CurrentTeam^.voicepack); - if PlacingHogs or (cHedgehogTurnTime < 1000000) then ReadyTimeLeft:= cReadyDelay; + if PlacingHogs or (cHedgehogTurnTime < 1000000) then + ReadyTimeLeft:= cReadyDelay; AddCaption(Format(shortstring(trmsg[sidReady]), CurrentTeam^.TeamName), cWhiteColor, capgrpGameState) end else @@ -293,22 +305,23 @@ c:= Pred(ClansCount); while (c >= 0) and (ClansArray[c]^.Color <> TeamColor) do dec(c); if c < 0 then - begin - new(team^.Clan); - FillChar(team^.Clan^, sizeof(TClan), 0); - ClansArray[ClansCount]:= team^.Clan; - inc(ClansCount); - with team^.Clan^ do + begin + new(team^.Clan); + FillChar(team^.Clan^, sizeof(TClan), 0); + ClansArray[ClansCount]:= team^.Clan; + inc(ClansCount); + with team^.Clan^ do begin ClanIndex:= Pred(ClansCount); Color:= TeamColor; TagTeamIndex:= 0; Flawless:= true end - end else - begin - team^.Clan:= ClansArray[c]; - end; + end +else + begin + team^.Clan:= ClansArray[c]; + end; with team^.Clan^ do begin @@ -344,8 +357,9 @@ th:= 0; for i:= 0 to cMaxHHIndex do if Hedgehogs[i].Gear <> nil then - inc(th, Hedgehogs[i].Gear^.Health); - if th > MaxTeamHealth then MaxTeamHealth:= th; + inc(th, Hedgehogs[i].Gear^.Health); + if th > MaxTeamHealth then + MaxTeamHealth:= th; // Some initial King buffs if (GameFlags and gfKing) <> 0 then begin @@ -358,9 +372,11 @@ begin dec(th, h); inc(th, Hedgehogs[0].Gear^.Health); - if th > MaxTeamHealth then MaxTeamHealth:= th + if th > MaxTeamHealth then + MaxTeamHealth:= th end - else Hedgehogs[0].Gear^.Health:= h; + else + Hedgehogs[0].Gear^.Health:= h; Hedgehogs[0].InitialHealth:= Hedgehogs[0].Gear^.Health end; end; @@ -373,7 +389,8 @@ begin value:= 0; for i:= 0 to cMaxHHIndex do - if p^.Hedgehogs[i].Gear <> nil then inc(value); + if p^.Hedgehogs[i].Gear <> nil then + inc(value); TeamSize:= value; end; @@ -407,7 +424,8 @@ begin MaxTeamHealth:= NewTeamHealthBarWidth; RecountAllTeamsHealth; - end else if NewTeamHealthBarWidth > 0 then NewTeamHealthBarWidth:= (NewTeamHealthBarWidth * cTeamHealthWidth) div MaxTeamHealth + end else if NewTeamHealthBarWidth > 0 then + NewTeamHealthBarWidth:= (NewTeamHealthBarWidth * cTeamHealthWidth) div MaxTeamHealth end; RecountClanHealth(team^.Clan); @@ -445,56 +463,58 @@ var s: shortstring; Gear: PGear; begin - s:= ''; - if (not isDeveloperMode) or (CurrentTeam = nil) then exit; - with CurrentTeam^ do +s:= ''; +if (not isDeveloperMode) or (CurrentTeam = nil) then + exit; +with CurrentTeam^ do + begin + SplitBySpace(id, s); + CurrentHedgehog:= @Hedgehogs[HedgehogsNumber]; + val(id, CurrentHedgehog^.BotLevel); + Gear:= AddGear(0, 0, gtHedgehog, 0, _0, _0, 0); + SplitBySpace(s, id); + val(s, Gear^.Health); + TryDo(Gear^.Health > 0, 'Invalid hedgehog health', true); + Gear^.Hedgehog^.Team:= CurrentTeam; + if (GameFlags and gfSharedAmmo) <> 0 then + CurrentHedgehog^.AmmoStore:= Clan^.ClanIndex + else if (GameFlags and gfPerHogAmmo) <> 0 then begin - SplitBySpace(id, s); - CurrentHedgehog:= @Hedgehogs[HedgehogsNumber]; - val(id, CurrentHedgehog^.BotLevel); - Gear:= AddGear(0, 0, gtHedgehog, 0, _0, _0, 0); - SplitBySpace(s, id); - val(s, Gear^.Health); - TryDo(Gear^.Health > 0, 'Invalid hedgehog health', true); - Gear^.Hedgehog^.Team:= CurrentTeam; - if (GameFlags and gfSharedAmmo) <> 0 then CurrentHedgehog^.AmmoStore:= Clan^.ClanIndex - else if (GameFlags and gfPerHogAmmo) <> 0 then - begin - AddAmmoStore; - CurrentHedgehog^.AmmoStore:= StoreCnt - 1 - end - else CurrentHedgehog^.AmmoStore:= TeamsCount - 1; - CurrentHedgehog^.Gear:= Gear; - CurrentHedgehog^.Name:= id; - CurrentHedgehog^.InitialHealth:= Gear^.Health; - CurrHedgehog:= HedgehogsNumber; - inc(HedgehogsNumber) + AddAmmoStore; + CurrentHedgehog^.AmmoStore:= StoreCnt - 1 end + else CurrentHedgehog^.AmmoStore:= TeamsCount - 1; + CurrentHedgehog^.Gear:= Gear; + CurrentHedgehog^.Name:= id; + CurrentHedgehog^.InitialHealth:= Gear^.Health; + CurrHedgehog:= HedgehogsNumber; + inc(HedgehogsNumber) + end end; procedure chAddTeam(var s: shortstring); var Color: Longword; ts, cs: shortstring; begin - cs:= ''; - ts:= ''; - if isDeveloperMode then - begin - SplitBySpace(s, cs); - SplitBySpace(cs, ts); - val(cs, Color); - TryDo(Color <> 0, 'Error: black team color', true); +cs:= ''; +ts:= ''; +if isDeveloperMode then + begin + SplitBySpace(s, cs); + SplitBySpace(cs, ts); + val(cs, Color); + TryDo(Color <> 0, 'Error: black team color', true); - // color is always little endian so the mask must be constant also in big endian archs - Color:= Color or $FF000000; + // color is always little endian so the mask must be constant also in big endian archs + Color:= Color or $FF000000; + AddTeam(Color); + CurrentTeam^.TeamName:= ts; + CurrentTeam^.PlayerHash:= s; + if GameType in [gmtDemo, gmtSave] then + CurrentTeam^.ExtDriven:= true; - AddTeam(Color); - CurrentTeam^.TeamName:= ts; - CurrentTeam^.PlayerHash:= s; - if GameType in [gmtDemo, gmtSave] then CurrentTeam^.ExtDriven:= true; - - CurrentTeam^.voicepack:= AskForVoicepack('Default') - end + CurrentTeam^.voicepack:= AskForVoicepack('Default') + end end; procedure chSetHHCoords(var x: shortstring); @@ -502,7 +522,8 @@ t: Longint; begin y:= ''; -if (not isDeveloperMode) or (CurrentHedgehog = nil) or (CurrentHedgehog^.Gear = nil) then exit; +if (not isDeveloperMode) or (CurrentHedgehog = nil) or (CurrentHedgehog^.Gear = nil) then + exit; SplitBySpace(x, y); val(x, t); CurrentHedgehog^.Gear^.X:= int2hwFloat(t); @@ -515,23 +536,28 @@ b: LongInt; begin s:= ''; -if CurrentTeam = nil then exit; +if CurrentTeam = nil then + exit; SplitBySpace(id, s); -if s[1]='"' then Delete(s, 1, 1); -if s[byte(s[0])]='"' then Delete(s, byte(s[0]), 1); +if s[1]='"' then + Delete(s, 1, 1); +if s[byte(s[0])]='"' then + Delete(s, byte(s[0]), 1); b:= KeyNameToCode(id); -if b = 0 then OutError(errmsgUnknownVariable + ' "' + id + '"', false) - else CurrentTeam^.Binds[b]:= s +if b = 0 then + OutError(errmsgUnknownVariable + ' "' + id + '"', false) +else + CurrentTeam^.Binds[b]:= s end; procedure chTeamGone(var s:shortstring); var t: LongInt; begin t:= 0; -while (t < cMaxTeams) - and (TeamsArray[t] <> nil) - and (TeamsArray[t]^.TeamName <> s) do inc(t); -if (t = cMaxTeams) or (TeamsArray[t] = nil) then exit; +while (t < cMaxTeams) and (TeamsArray[t] <> nil) and (TeamsArray[t]^.TeamName <> s) do + inc(t); +if (t = cMaxTeams) or (TeamsArray[t] = nil) then + exit; with TeamsArray[t]^ do begin @@ -562,41 +588,42 @@ procedure initModule; begin - RegisterVariable('addhh', vtCommand, @chAddHH, false); - RegisterVariable('addteam', vtCommand, @chAddTeam, false); - RegisterVariable('hhcoords', vtCommand, @chSetHHCoords, false); - RegisterVariable('bind', vtCommand, @chBind, true ); - RegisterVariable('teamgone', vtCommand, @chTeamGone, true ); - RegisterVariable('finish', vtCommand, @chFinish, true ); // all teams gone +RegisterVariable('addhh', vtCommand, @chAddHH, false); +RegisterVariable('addteam', vtCommand, @chAddTeam, false); +RegisterVariable('hhcoords', vtCommand, @chSetHHCoords, false); +RegisterVariable('bind', vtCommand, @chBind, true ); +RegisterVariable('teamgone', vtCommand, @chTeamGone, true ); +RegisterVariable('finish', vtCommand, @chFinish, true ); // all teams gone - CurrentTeam:= nil; - PreviousTeam:= nil; - CurrentHedgehog:= nil; - TeamsCount:= 0; - ClansCount:= 0; - LocalClan:= -1; - LocalTeam:= -1; - LocalAmmo:= -1; - GameOver:= false; - NextClan:= true; +CurrentTeam:= nil; +PreviousTeam:= nil; +CurrentHedgehog:= nil; +TeamsCount:= 0; +ClansCount:= 0; +LocalClan:= -1; +LocalTeam:= -1; +LocalAmmo:= -1; +GameOver:= false; +NextClan:= true; end; procedure freeModule; var i, h: LongWord; begin - if TeamsCount > 0 then - begin - for i:= 0 to Pred(TeamsCount) do +if TeamsCount > 0 then + begin + for i:= 0 to Pred(TeamsCount) do begin - for h:= 0 to cMaxHHIndex do - if TeamsArray[i]^.Hedgehogs[h].GearHidden <> nil then - Dispose(TeamsArray[i]^.Hedgehogs[h].GearHidden); - Dispose(TeamsArray[i]); - end; - for i:= 0 to Pred(ClansCount) do Dispose(ClansArray[i]); - end; - TeamsCount:= 0; - ClansCount:= 0; + for h:= 0 to cMaxHHIndex do + if TeamsArray[i]^.Hedgehogs[h].GearHidden <> nil then + Dispose(TeamsArray[i]^.Hedgehogs[h].GearHidden); + Dispose(TeamsArray[i]); + end; +for i:= 0 to Pred(ClansCount) do + Dispose(ClansArray[i]); + end; +TeamsCount:= 0; +ClansCount:= 0; end; end.