--- a/hedgewars/uTeams.pas Sat Mar 06 10:54:24 2010 +0000
+++ b/hedgewars/uTeams.pas Sat Mar 06 10:59:20 2010 +0000
@@ -22,75 +22,75 @@
interface
uses SDLh, uConsts, uKeys, uGears, uRandom, uFloat, uStats, uVisualGears, uCollisions, uLand,
{$IFDEF GLES11}
- gles11,
+ gles11,
{$ELSE}
- GL,
+ GL,
{$ENDIF}
- uSound;
+ uSound;
type PHHAmmo = ^THHAmmo;
- THHAmmo = array[0..cMaxSlotIndex, 0..cMaxSlotAmmoIndex] of TAmmo;
+ THHAmmo = array[0..cMaxSlotIndex, 0..cMaxSlotAmmoIndex] of TAmmo;
- PHedgehog = ^THedgehog;
- PTeam = ^TTeam;
- PClan = ^TClan;
+ PHedgehog = ^THedgehog;
+ PTeam = ^TTeam;
+ PClan = ^TClan;
- THedgehog = record
- Name: string[MAXNAMELEN];
- Gear: PGear;
- SpeechGear: PVisualGear;
- NameTagTex,
- HealthTagTex,
- HatTex: PTexture;
- Ammo: PHHAmmo;
- AmmoStore: Longword;
- CurSlot, CurAmmo: LongWord;
- Team: PTeam;
- MultiShootAttacks: Longword;
- visStepPos: LongWord;
- BotLevel : LongWord; // 0 - Human player
- HatVisibility: GLfloat;
- stats: TStatistics;
- Hat: shortstring;
+ THedgehog = record
+ Name: string[MAXNAMELEN];
+ Gear: PGear;
+ SpeechGear: PVisualGear;
+ NameTagTex,
+ HealthTagTex,
+ HatTex: PTexture;
+ Ammo: PHHAmmo;
+ AmmoStore: Longword;
+ CurSlot, CurAmmo: LongWord;
+ Team: PTeam;
+ MultiShootAttacks: Longword;
+ visStepPos: LongWord;
+ BotLevel : LongWord; // 0 - Human player
+ HatVisibility: GLfloat;
+ stats: TStatistics;
+ Hat: shortstring;
King: boolean; // Flag for a bunch of hedgehog attributes
Unplaced: boolean; // Flag for hog placing mode
- end;
+ end;
- TTeam = record
- Clan: PClan;
- TeamName: string[MAXNAMELEN];
- ExtDriven: boolean;
- Binds: TBinds;
- Hedgehogs: array[0..cMaxHHIndex] of THedgehog;
- CurrHedgehog: LongWord;
- NameTagTex: PTexture;
- CrosshairTex,
- GraveTex,
- HealthTex,
- FlagTex: PTexture;
- Flag: shortstring;
- GraveName: shortstring;
- FortName: shortstring;
- TeamHealth: LongInt;
- TeamHealthBarWidth,
- NewTeamHealthBarWidth: LongInt;
- DrawHealthY: LongInt;
- AttackBar: LongWord;
- HedgehogsNumber: Longword;
- hasGone: boolean;
- voicepack: PVoicepack;
+ TTeam = record
+ Clan: PClan;
+ TeamName: string[MAXNAMELEN];
+ ExtDriven: boolean;
+ Binds: TBinds;
+ Hedgehogs: array[0..cMaxHHIndex] of THedgehog;
+ CurrHedgehog: LongWord;
+ NameTagTex: PTexture;
+ CrosshairTex,
+ GraveTex,
+ HealthTex,
+ FlagTex: PTexture;
+ Flag: shortstring;
+ GraveName: shortstring;
+ FortName: shortstring;
+ TeamHealth: LongInt;
+ TeamHealthBarWidth,
+ NewTeamHealthBarWidth: LongInt;
+ DrawHealthY: LongInt;
+ AttackBar: LongWord;
+ HedgehogsNumber: Longword;
+ hasGone: boolean;
+ voicepack: PVoicepack;
PlayerHash: shortstring; // md5 hash of player name. For temporary enabling of hats as thank you. Hashed for privacy of players
- end;
+ end;
- TClan = record
- Color: Longword;
- Teams: array[0..Pred(cMaxTeams)] of PTeam;
- TeamsNumber: Longword;
- CurrTeam: LongWord;
- ClanHealth: LongInt;
- ClanIndex: LongInt;
- TurnNumber: LongWord;
- end;
+ TClan = record
+ Color: Longword;
+ Teams: array[0..Pred(cMaxTeams)] of PTeam;
+ TeamsNumber: Longword;
+ CurrTeam: LongWord;
+ ClanHealth: LongInt;
+ ClanIndex: LongInt;
+ TurnNumber: LongWord;
+ end;
var CurrentTeam: PTeam;
PreviousTeam: PTeam;
@@ -127,11 +127,11 @@
begin
AliveCount:= 0;
for t:= 0 to Pred(ClansCount) do
- if ClansArray[t]^.ClanHealth > 0 then
- begin
- inc(AliveCount);
- AliveClan:= ClansArray[t]
- end;
+ if ClansArray[t]^.ClanHealth > 0 then
+ begin
+ inc(AliveCount);
+ AliveClan:= ClansArray[t]
+ end;
if (AliveCount > 1)
or ((AliveCount = 1) and ((GameFlags and gfOneClanMode) <> 0)) then exit(false);
@@ -139,29 +139,29 @@
TurnTimeLeft:= 0;
if AliveCount = 0 then
- begin // draw
- AddCaption(trmsg[sidDraw], cWhiteColor, capgrpGameState);
- SendStat(siGameResult, trmsg[sidDraw]);
- AddGear(0, 0, gtATFinishGame, 0, _0, _0, 3000)
- end else // win
- with AliveClan^ do
- begin
- if TeamsNumber = 1 then
- s:= Format(shortstring(trmsg[sidWinner]), Teams[0]^.TeamName) // team wins
- else
- s:= Format(shortstring(trmsg[sidWinner]), Teams[0]^.TeamName); // clan wins
+ begin // draw
+ AddCaption(trmsg[sidDraw], cWhiteColor, capgrpGameState);
+ SendStat(siGameResult, trmsg[sidDraw]);
+ AddGear(0, 0, gtATFinishGame, 0, _0, _0, 3000)
+ end else // win
+ with AliveClan^ do
+ begin
+ if TeamsNumber = 1 then
+ s:= Format(shortstring(trmsg[sidWinner]), Teams[0]^.TeamName) // team wins
+ else
+ s:= Format(shortstring(trmsg[sidWinner]), Teams[0]^.TeamName); // clan wins
- for j:= 0 to Pred(TeamsNumber) do
- with Teams[j]^ do
- for i:= 0 to cMaxHHIndex do
- with Hedgehogs[i] do
- if (Gear <> nil) then
- Gear^.State:= gstWinner;
+ for j:= 0 to Pred(TeamsNumber) do
+ with Teams[j]^ do
+ for i:= 0 to cMaxHHIndex do
+ with Hedgehogs[i] do
+ if (Gear <> nil) then
+ Gear^.State:= gstWinner;
- AddCaption(s, cWhiteColor, capgrpGameState);
- SendStat(siGameResult, s);
- AddGear(0, 0, gtATFinishGame, 0, _0, _0, 3000)
- end;
+ AddCaption(s, cWhiteColor, capgrpGameState);
+ SendStat(siGameResult, s);
+ AddGear(0, 0, gtATFinishGame, 0, _0, _0, 3000)
+ end;
SendStats
end;
@@ -175,52 +175,52 @@
if (PreviousTeam <> nil) and PlacingHogs and Unplaced then
begin
Unplaced:= false;
- if Gear <> nil then
+ if Gear <> nil then
begin
DeleteCI(Gear);
FindPlace(Gear, false, 0, LAND_WIDTH);
if Gear <> nil then AddGearCI(Gear)
end
- end;
+ end;
PreviousTeam:= CurrentTeam;
with CurrentHedgehog^ do
begin
- if Gear <> nil then
- begin
- MultiShootAttacks:= 0;
- Gear^.Message:= 0;
- Gear^.Z:= cHHZ;
- RemoveGearFromList(Gear);
- InsertGearToList(Gear)
- end
+ if Gear <> nil then
+ begin
+ MultiShootAttacks:= 0;
+ Gear^.Message:= 0;
+ Gear^.Z:= cHHZ;
+ RemoveGearFromList(Gear);
+ InsertGearToList(Gear)
+ end
end;
c:= CurrentTeam^.Clan^.ClanIndex;
repeat
- inc(c);
- if c = ClansCount then
- begin
+ inc(c);
+ if c = ClansCount then
+ begin
if not PlacingHogs then inc(TotalRounds);
- c:= 0
- end;
+ c:= 0
+ end;
- with ClansArray[c]^ do
- begin
- PrevTeam:= CurrTeam;
- repeat
- CurrTeam:= Succ(CurrTeam) mod TeamsNumber;
- CurrentTeam:= Teams[CurrTeam];
- with CurrentTeam^ do
- begin
- PrevHH:= CurrHedgehog mod HedgehogsNumber; // prevent infinite loop when CurrHedgehog = 7, but HedgehogsNumber < 8 (team is destroyed before its first turn)
- repeat
- CurrHedgehog:= Succ(CurrHedgehog) mod HedgehogsNumber;
- until (Hedgehogs[CurrHedgehog].Gear <> nil) or (CurrHedgehog = PrevHH)
- end
- until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) or (PrevTeam = CurrTeam);
- end
+ with ClansArray[c]^ do
+ begin
+ PrevTeam:= CurrTeam;
+ repeat
+ CurrTeam:= Succ(CurrTeam) mod TeamsNumber;
+ CurrentTeam:= Teams[CurrTeam];
+ with CurrentTeam^ do
+ begin
+ PrevHH:= CurrHedgehog mod HedgehogsNumber; // prevent infinite loop when CurrHedgehog = 7, but HedgehogsNumber < 8 (team is destroyed before its first turn)
+ repeat
+ CurrHedgehog:= Succ(CurrHedgehog) mod HedgehogsNumber;
+ until (Hedgehogs[CurrHedgehog].Gear <> nil) or (CurrHedgehog = PrevHH)
+ end
+ until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) or (PrevTeam = CurrTeam);
+ end
until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil);
CurrentHedgehog:= @(CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog])
@@ -251,17 +251,17 @@
SwitchNotHeldAmmo(CurrentHedgehog^);
with CurrentHedgehog^ do
- begin
- with Gear^ do
- begin
- Z:= cCurrHHZ;
- State:= gstHHDriven;
- Active:= true
- end;
- RemoveGearFromList(Gear);
- InsertGearToList(Gear);
- FollowGear:= Gear
- end;
+ begin
+ with Gear^ do
+ begin
+ Z:= cCurrHHZ;
+ State:= gstHHDriven;
+ Active:= true
+ end;
+ RemoveGearFromList(Gear);
+ InsertGearToList(Gear);
+ FollowGear:= Gear
+ end;
ResetKbd;
@@ -278,9 +278,9 @@
bShowFinger:= true;
if (CurrentTeam^.ExtDriven or (CurrentHedgehog^.BotLevel > 0)) then
- PlaySound(sndIllGetYou, CurrentTeam^.voicepack)
+ PlaySound(sndIllGetYou, CurrentTeam^.voicepack)
else
- PlaySound(sndYesSir, CurrentTeam^.voicepack);
+ PlaySound(sndYesSir, CurrentTeam^.voicepack);
if PlacingHogs then
begin
@@ -402,21 +402,21 @@
var i: LongInt;
begin
with team^ do
- begin
- NewTeamHealthBarWidth:= 0;
+ begin
+ NewTeamHealthBarWidth:= 0;
- if not hasGone then
- for i:= 0 to cMaxHHIndex do
- if Hedgehogs[i].Gear <> nil then
- inc(NewTeamHealthBarWidth, Hedgehogs[i].Gear^.Health);
+ if not hasGone then
+ for i:= 0 to cMaxHHIndex do
+ if Hedgehogs[i].Gear <> nil then
+ inc(NewTeamHealthBarWidth, Hedgehogs[i].Gear^.Health);
- TeamHealth:= NewTeamHealthBarWidth;
- if NewTeamHealthBarWidth > MaxTeamHealth then
- begin
- MaxTeamHealth:= NewTeamHealthBarWidth;
- RecountAllTeamsHealth;
- end else NewTeamHealthBarWidth:= (NewTeamHealthBarWidth * cTeamHealthWidth) div MaxTeamHealth
- end;
+ TeamHealth:= NewTeamHealthBarWidth;
+ if NewTeamHealthBarWidth > MaxTeamHealth then
+ begin
+ MaxTeamHealth:= NewTeamHealthBarWidth;
+ RecountAllTeamsHealth;
+ end else NewTeamHealthBarWidth:= (NewTeamHealthBarWidth * cTeamHealthWidth) div MaxTeamHealth
+ end;
RecountClanHealth(team^.Clan);
@@ -435,15 +435,15 @@
begin
t:= 0;
while (t < cMaxTeams)
- and (TeamsArray[t] <> nil)
- and (TeamsArray[t]^.TeamName <> s) do inc(t);
+ 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
- AddChatString('** '+ TeamName + ' is gone');
- hasGone:= true
- end;
+ begin
+ AddChatString('** '+ TeamName + ' is gone');
+ hasGone:= true
+ end;
RecountTeamHealth(TeamsArray[t])
end;
@@ -452,24 +452,24 @@
var i: LongInt;
begin
with Team do
- for i:= 0 to cMaxHHIndex do
- with Hedgehogs[i] do
- if Gear <> nil then
+ for i:= 0 to cMaxHHIndex do
+ with Hedgehogs[i] do
+ if Gear <> nil then
begin
Gear^.Invulnerable:= false;
- Gear^.Damage:= Gear^.Health
+ Gear^.Damage:= Gear^.Health
end
end;
procedure init_uTeams;
begin
- CurrentTeam:= nil;
- PreviousTeam:= nil;
- CurrentHedgehog:= nil;
- TeamsCount:= 0;
- ClansCount:= 0;
- LocalClan:= -1;
- LocalAmmo:= -1;
+ CurrentTeam:= nil;
+ PreviousTeam:= nil;
+ CurrentHedgehog:= nil;
+ TeamsCount:= 0;
+ ClansCount:= 0;
+ LocalClan:= -1;
+ LocalAmmo:= -1;
end;
procedure free_uTeams;