52 var TeamsGameOver: boolean; |
52 var TeamsGameOver: boolean; |
53 NextClan: boolean; |
53 NextClan: boolean; |
54 |
54 |
55 function CheckForWin: boolean; |
55 function CheckForWin: boolean; |
56 var AliveClan: PClan; |
56 var AliveClan: PClan; |
57 s, ts, cap: ansistring; |
57 s, cap: ansistring; |
|
58 ts: array[0..(cMaxTeams - 1)] of ansistring; |
58 t, AliveCount, i, j: LongInt; |
59 t, AliveCount, i, j: LongInt; |
59 begin |
60 begin |
60 CheckForWin:= false; |
61 CheckForWin:= false; |
61 AliveCount:= 0; |
62 AliveCount:= 0; |
62 for t:= 0 to Pred(ClansCount) do |
63 for t:= 0 to Pred(ClansCount) do |
88 end |
89 end |
89 else // win |
90 else // win |
90 begin |
91 begin |
91 with AliveClan^ do |
92 with AliveClan^ do |
92 begin |
93 begin |
93 ts:= ansistring(Teams[0]^.TeamName); |
94 if TeamsNumber = 1 then // single team wins |
94 if TeamsNumber = 1 then // team wins |
|
95 begin |
95 begin |
96 s:= FormatA(trmsg[sidWinner], ts); |
96 s:= ansistring(Teams[0]^.TeamName); |
97 cap:= FormatA(GetEventString(eidRoundWin), ts); |
97 // Victory caption is randomly selected |
|
98 cap:= FormatA(GetEventString(eidRoundWin), s); |
98 AddCaption(cap, cWhiteColor, capgrpGameState); |
99 AddCaption(cap, cWhiteColor, capgrpGameState); |
|
100 s:= FormatA(trmsg[sidWinner], s); |
99 end |
101 end |
100 else // clan wins |
102 else // clan with at least 2 teams wins |
101 begin |
103 begin |
102 s:= ''; |
104 s:= ''; |
103 for j:= 0 to Pred(TeamsNumber) do |
105 for j:= 0 to Pred(TeamsNumber) do |
104 begin |
106 begin |
105 (* |
107 ts[j] := Teams[j]^.TeamName; |
106 Currently, the game result string is just the victory |
|
107 string concatenated multiple times. This assumes that |
|
108 sidWinner is a complete sentence. |
|
109 This might not work well for some languages. |
|
110 |
|
111 FIXME/TODO: Add event strings for 2, 3, 4 and >4 teams winning. |
|
112 This requires FormatA to work with multiple parameters. *) |
|
113 ts:= Teams[j]^.TeamName; |
|
114 s:= s + ' ' + FormatA(trmsg[sidWinner], ts); |
|
115 |
|
116 // FIXME: Show victory captions one-by-one, not all at once |
|
117 cap:= FormatA(GetEventString(eidRoundWin), ts); |
|
118 AddCaption(cap, cWhiteColor, capgrpGameState); |
|
119 end; |
108 end; |
|
109 |
|
110 // Write victory message for caption and stats page |
|
111 if (TeamsNumber = cMaxTeams) or (TeamsCount = TeamsNumber) then |
|
112 // No enemies for some reason … Everyone wins!!1! |
|
113 s:= trmsg[sidWinnerAll] |
|
114 else if (TeamsNumber >= 2) and (TeamsNumber < cMaxTeams) then |
|
115 // List all winning teams in a list |
|
116 s:= FormatA(trmsg[TMsgStrId(Ord(sidWinner2) + (TeamsNumber - 2))], ts); |
|
117 |
|
118 // The winner caption is the same as the stats message and not randomized |
|
119 cap:= s; |
|
120 AddCaption(cap, cWhiteColor, capgrpGameState); |
|
121 // TODO (maybe): Show victory animation/captions per-team instead of all winners at once? |
120 end; |
122 end; |
121 |
123 |
122 for j:= 0 to Pred(TeamsNumber) do |
124 for j:= 0 to Pred(TeamsNumber) do |
123 with Teams[j]^ do |
125 with Teams[j]^ do |
124 for i:= 0 to cMaxHHIndex do |
126 for i:= 0 to cMaxHHIndex do |