Skip to content

Commit 77d2bd6

Browse files
committed
Activities: Be more consistent about passing screens, some fixes.
`FrameMan.ClearScreenText()` and `FrameMan.SetScreenText()` take a screen index, but are regularly passed a player index instead. If the players aren't all sequential (e.g. player 2 and player 4 are playing), then some or all of these functions may operate on the wrong screen, or no screen at all. Fortunately, some activities correctly call `Activity.ScreenOfPlayer()`, so they didn't *all* need fixing. Additionally, some activities iterated over players incorrectly, going from `0` to `PlayerCount - 1` instead of iterating from `PLAYER_1` to `MAXPLAYERCOUNT - 1` and filtering for active human players. This made Exploration (Doainar) impossible to progress if you decided to use a different player than player 1. Lastly, some activities intentionally displayed a message only for `PLAYER_1`. These were changed to instead use an explicit `0` to indicate they should always use the first screen, except for Massacre, which only displayed the remaining kills needed for `PLAYER_1`, but was doing so inside a for loop iterating over all active players. Since it wasn't entirely clear that this behavior was intentional, and since it was already being called for each player, I made it use `self:ScreenOfPlayer(player)` instead.
1 parent e16aac9 commit 77d2bd6

19 files changed

+216
-196
lines changed

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,22 @@ All notable changes to this project will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [Unreleased]
8+
9+
<details><summary><b>Changed</b></summary>
10+
11+
- Massacre now displays the remaining kill count to each player's screen instead of just the first one.
12+
13+
</details>
14+
15+
<details><summary><b>Fixed</b></summary>
16+
17+
- Fixed instances of `FrameMan:ClearScreenText()` and `FrameMan:SetScreenText()` supplying a player index instead of a screen index. For example, "Signal Hunt" wouldn't display the Alchiral messages if you used a different player than player 1.
18+
19+
- Fixed some activities iterating from `0` to `PlayerCount - 1` instead of iterating over every player index and filtering to active human players. For example, "Exploration" (Doainar) was unable to progress if you used a different player than player 1.
20+
21+
</details>
22+
723
## [Release v6.1.0] - 2024/02/15
824

925
<details><summary><b>Added</b></summary>

Data/Base.rte/Activities/BrainVsBrain.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,8 +387,8 @@ function BrainvsBrain:UpdateActivity()
387387
end
388388
else
389389
self:ResetMessageTimer(player);
390-
FrameMan:ClearScreenText(player);
391-
FrameMan:SetScreenText("Your brain has been destroyed!", player, 2000, -1, false);
390+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
391+
FrameMan:SetScreenText("Your brain has been destroyed!", self:ScreenOfPlayer(player), 2000, -1, false);
392392
end
393393
end
394394
end

Data/Base.rte/Activities/Harvester.lua

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,9 @@ function Harvester:UpdateActivity()
157157
if self:PlayerActive(player) and self:PlayerHuman(player) then
158158
--Display messages.
159159
if self.startMessageTimer:IsPastSimMS(3000) then
160-
FrameMan:SetScreenText(self.goldNeeded - (math.ceil(self:GetTeamFunds(Activity.TEAM_1)) - self.humanTeamFundsAfterInitialEditingPhase) .. " oz of gold left", player, 0, 1000, false);
160+
FrameMan:SetScreenText(self.goldNeeded - (math.ceil(self:GetTeamFunds(Activity.TEAM_1)) - self.humanTeamFundsAfterInitialEditingPhase) .. " oz of gold left", self:ScreenOfPlayer(player), 0, 1000, false);
161161
else
162-
FrameMan:SetScreenText("Dig up " .. self.goldDisplay .. " oz of gold!", player, 333, 5000, true);
162+
FrameMan:SetScreenText("Dig up " .. self.goldDisplay .. " oz of gold!", self:ScreenOfPlayer(player), 333, 5000, true);
163163
end
164164

165165
-- The current player's team
@@ -179,8 +179,8 @@ function Harvester:UpdateActivity()
179179
if not MovableMan:IsActor(self:GetPlayerBrain(player)) then
180180
self:SetPlayerBrain(nil, player);
181181
self:ResetMessageTimer(player);
182-
FrameMan:ClearScreenText(player);
183-
FrameMan:SetScreenText("Your brain has been destroyed!", player, 333, -1, false);
182+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
183+
FrameMan:SetScreenText("Your brain has been destroyed!", self:ScreenOfPlayer(player), 333, -1, false);
184184
-- Now see if all brains of self player's team are dead, and if so, end the game
185185
if not MovableMan:GetFirstBrainActor(team) then
186186
self.WinnerTeam = self:OtherTeam(team);
@@ -191,8 +191,8 @@ function Harvester:UpdateActivity()
191191
--Check if the player has won.
192192
if self:GetTeamFunds(Activity.TEAM_1) - self.humanTeamFundsAfterInitialEditingPhase > self.goldNeeded then
193193
self:ResetMessageTimer(player);
194-
FrameMan:ClearScreenText(player);
195-
FrameMan:SetScreenText("You dug up all the gold!", player, 333, -1, false);
194+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
195+
FrameMan:SetScreenText("You dug up all the gold!", self:ScreenOfPlayer(player), 333, -1, false);
196196

197197
self.WinnerTeam = Activity.TEAM_1;
198198

Data/Base.rte/Activities/KeepieUppie.lua

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,11 @@ function KeepieUppie:UpdateActivity()
143143
if self:PlayerActive(player) and self:PlayerHuman(player) then
144144
--Display messages.
145145
self:ResetMessageTimer(player);
146-
FrameMan:ClearScreenText(player);
146+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
147147
if self.startMessageTimer:IsPastSimMS(3000) then
148-
FrameMan:SetScreenText(math.floor(self.winTimer:LeftTillSimMS(self.timeLimit) / 1000) .. " seconds left", player, 0, 1000, false);
148+
FrameMan:SetScreenText(math.floor(self.winTimer:LeftTillSimMS(self.timeLimit) / 1000) .. " seconds left", self:ScreenOfPlayer(player), 0, 1000, false);
149149
else
150-
FrameMan:SetScreenText("Keep the rocket alive for " .. self.timeDisplay .. "!", player, 333, 5000, true);
150+
FrameMan:SetScreenText("Keep the rocket alive for " .. self.timeDisplay .. "!", self:ScreenOfPlayer(player), 333, 5000, true);
151151
end
152152

153153
-- The current player's team
@@ -156,8 +156,8 @@ function KeepieUppie:UpdateActivity()
156156
if not MovableMan:IsActor(self:GetPlayerBrain(player)) then
157157
self:SetPlayerBrain(nil, player);
158158
self:ResetMessageTimer(player);
159-
FrameMan:ClearScreenText(player);
160-
FrameMan:SetScreenText("Your rocket has been destroyed!", player, 333, -1, false);
159+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
160+
FrameMan:SetScreenText("Your rocket has been destroyed!", self:ScreenOfPlayer(player), 333, -1, false);
161161
-- Now see if all brains of self player's team are dead, and if so, end the game
162162
if not MovableMan:GetFirstBrainActor(team) then
163163
self.WinnerTeam = self:OtherTeam(team);
@@ -170,8 +170,8 @@ function KeepieUppie:UpdateActivity()
170170
--Check if the player has won.
171171
if self.winTimer:IsPastSimMS(self.timeLimit) then
172172
self:ResetMessageTimer(player);
173-
FrameMan:ClearScreenText(player);
174-
FrameMan:SetScreenText("You survived!", player, 333, -1, false);
173+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
174+
FrameMan:SetScreenText("You survived!", self:ScreenOfPlayer(player), 333, -1, false);
175175

176176
self.WinnerTeam = player;
177177

@@ -259,7 +259,7 @@ function KeepieUppie:UpdateActivity()
259259
self.startMessageTimer:Reset();
260260
self.winTimer:Reset();
261261

262-
FrameMan:SetScreenText("Order your rocket...", Activity.PLAYER_1, 0, 5000, false);
262+
FrameMan:SetScreenText("Order your rocket...", 0, 0, 5000, false);
263263

264264
--See if the rocket has spawned yet.
265265
for player = Activity.PLAYER_1, Activity.MAXPLAYERCOUNT - 1 do

Data/Base.rte/Activities/Massacre.lua

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,12 @@ function Massacre:UpdateActivity()
150150
--Display messages.
151151
if self.startMessageTimer:IsPastSimMS(3000) then
152152
if self.killsNeeded - self:GetTeamDeathCount(Activity.TEAM_2) > 1 then
153-
FrameMan:SetScreenText(self.killsNeeded - self:GetTeamDeathCount(Activity.TEAM_2) .. " enemies left!", Activity.PLAYER_1, 0, 1000, false);
153+
FrameMan:SetScreenText(self.killsNeeded - self:GetTeamDeathCount(Activity.TEAM_2) .. " enemies left!", self:ScreenOfPlayer(player), 0, 1000, false);
154154
else
155-
FrameMan:SetScreenText("1 enemy left!", Activity.PLAYER_1, 0, 1000, false);
155+
FrameMan:SetScreenText("1 enemy left!", self:ScreenOfPlayer(player), 0, 1000, false);
156156
end
157157
else
158-
FrameMan:SetScreenText("Kill " .. self.killsDisplay .. " enemies!", player, 333, 5000, true);
158+
FrameMan:SetScreenText("Kill " .. self.killsDisplay .. " enemies!", self:ScreenOfPlayer(player), 333, 5000, true);
159159
end
160160

161161
-- The current player's team
@@ -175,8 +175,8 @@ function Massacre:UpdateActivity()
175175
if not MovableMan:IsActor(self:GetPlayerBrain(player)) then
176176
self:SetPlayerBrain(nil, player);
177177
self:ResetMessageTimer(player);
178-
FrameMan:ClearScreenText(player);
179-
FrameMan:SetScreenText("Your brain has been destroyed!", player, 333, -1, false);
178+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
179+
FrameMan:SetScreenText("Your brain has been destroyed!", self:ScreenOfPlayer(player), 333, -1, false);
180180
-- Now see if all brains of self player's team are dead, and if so, end the game
181181
if not MovableMan:GetFirstBrainActor(team) then
182182
self.WinnerTeam = self:OtherTeam(team);
@@ -187,8 +187,8 @@ function Massacre:UpdateActivity()
187187
--Check if the player has won.
188188
if self:GetTeamDeathCount(Activity.TEAM_2) >= self.killsNeeded then
189189
self:ResetMessageTimer(player);
190-
FrameMan:ClearScreenText(player);
191-
FrameMan:SetScreenText("You killed all the attackers!", player, 333, -1, false);
190+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
191+
FrameMan:SetScreenText("You killed all the attackers!", self:ScreenOfPlayer(player), 333, -1, false);
192192

193193
self.WinnerTeam = Activity.TEAM_1;
194194

Data/Base.rte/Activities/MetaFight.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function MetaFight:BrainCheck()
3333
-- All hope is lost for this player
3434
else
3535
self:ResetMessageTimer(player);
36-
-- FrameMan:ClearScreenText(player);
36+
-- FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
3737
-- FrameMan:SetScreenText("Your brain has been destroyed!", self:ScreenOfPlayer(player), 333, -1, false);
3838
-- Save the position of this player's brain's last known position as the last brain death position
3939
self.LastBrainDeathPos = self.LastBrainPos[player];
@@ -835,7 +835,7 @@ function MetaFight:UpdateActivity()
835835
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player);
836836
-- Clear the messages before starting the game
837837
self:ResetMessageTimer(player);
838-
FrameMan:ClearScreenText(player);
838+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
839839
-- Reset the screen occlusion if any players are still in menus
840840
CameraMan:SetScreenOcclusion(Vector(), self:ScreenOfPlayer(player));
841841
end

Data/Base.rte/Activities/OneManArmy.lua

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -260,18 +260,18 @@ function OneManArmy:UpdateActivity()
260260
if self:PlayerActive(player) and self:PlayerHuman(player) then
261261
--Display messages
262262
if self.startMessageTimer:IsPastSimMS(3000) then
263-
FrameMan:SetScreenText(math.floor(self.winTimer:LeftTillSimMS(self.timeLimit) * 0.001) .. " seconds left", player, 0, 1000, false);
263+
FrameMan:SetScreenText(math.floor(self.winTimer:LeftTillSimMS(self.timeLimit) * 0.001) .. " seconds left", self:ScreenOfPlayer(player), 0, 1000, false);
264264
else
265-
FrameMan:SetScreenText("Survive for " .. self.timeDisplay .. "!", player, 333, 5000, true);
265+
FrameMan:SetScreenText("Survive for " .. self.timeDisplay .. "!", self:ScreenOfPlayer(player), 333, 5000, true);
266266
end
267267

268268
local team = self:GetTeamOfPlayer(player);
269269
--Check if any player's brain is dead
270270
if not MovableMan:IsActor(self:GetPlayerBrain(player)) then
271271
self:SetPlayerBrain(nil, player);
272272
self:ResetMessageTimer(player);
273-
FrameMan:ClearScreenText(player);
274-
FrameMan:SetScreenText("Your brain has been destroyed!", player, 333, -1, false);
273+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
274+
FrameMan:SetScreenText("Your brain has been destroyed!", self:ScreenOfPlayer(player), 333, -1, false);
275275
--Now see if all brains of self player's team are dead, and if so, end the game
276276
if not MovableMan:GetFirstBrainActor(team) then
277277
self.WinnerTeam = self:OtherTeam(team);
@@ -282,8 +282,8 @@ function OneManArmy:UpdateActivity()
282282
--Check if the player has won
283283
if self.winTimer:IsPastSimMS(self.timeLimit) then
284284
self:ResetMessageTimer(player);
285-
FrameMan:ClearScreenText(player);
286-
FrameMan:SetScreenText("You survived!", player, 333, -1, false);
285+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
286+
FrameMan:SetScreenText("You survived!", self:ScreenOfPlayer(player), 333, -1, false);
287287

288288
self.WinnerTeam = player;
289289

Data/Base.rte/Activities/OneManArmyDiggers.lua

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,9 @@ function OneManArmy:UpdateActivity()
224224
if self:PlayerActive(player) and self:PlayerHuman(player) then
225225
--Display messages.
226226
if self.startMessageTimer:IsPastSimMS(3000) then
227-
FrameMan:SetScreenText(math.floor(self.winTimer:LeftTillSimMS(self.timeLimit) / 1000) .. " seconds left", player, 0, 1000, false);
227+
FrameMan:SetScreenText(math.floor(self.winTimer:LeftTillSimMS(self.timeLimit) / 1000) .. " seconds left", self:ScreenOfPlayer(player), 0, 1000, false);
228228
else
229-
FrameMan:SetScreenText("Survive for " .. self.timeDisplay .. "!", player, 333, 5000, true);
229+
FrameMan:SetScreenText("Survive for " .. self.timeDisplay .. "!", self:ScreenOfPlayer(player), 333, 5000, true);
230230
end
231231

232232
-- The current player's team
@@ -235,8 +235,8 @@ function OneManArmy:UpdateActivity()
235235
if not MovableMan:IsActor(self:GetPlayerBrain(player)) then
236236
self:SetPlayerBrain(nil, player);
237237
self:ResetMessageTimer(player);
238-
FrameMan:ClearScreenText(player);
239-
FrameMan:SetScreenText("Your brain has been destroyed!", player, 333, -1, false);
238+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
239+
FrameMan:SetScreenText("Your brain has been destroyed!", self:ScreenOfPlayer(player), 333, -1, false);
240240
-- Now see if all brains of self player's team are dead, and if so, end the game
241241
if not MovableMan:GetFirstBrainActor(team) then
242242
self.WinnerTeam = self:OtherTeam(team);
@@ -249,8 +249,8 @@ function OneManArmy:UpdateActivity()
249249
--Check if the player has won.
250250
if self.winTimer:IsPastSimMS(self.timeLimit) then
251251
self:ResetMessageTimer(player);
252-
FrameMan:ClearScreenText(player);
253-
FrameMan:SetScreenText("You survived!", player, 333, -1, false);
252+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
253+
FrameMan:SetScreenText("You survived!", self:ScreenOfPlayer(player), 333, -1, false);
254254

255255
self.WinnerTeam = player;
256256

Data/Base.rte/Activities/OneManArmyZeroG.lua

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -289,18 +289,18 @@ function OneManArmyZeroG:UpdateActivity()
289289
if self:PlayerActive(player) and self:PlayerHuman(player) then
290290
--Display messages
291291
if self.startMessageTimer:IsPastSimMS(3000) then
292-
FrameMan:SetScreenText(math.floor(self.winTimer:LeftTillSimMS(self.timeLimit) * 0.001) .. " seconds left", player, 0, 1000, false);
292+
FrameMan:SetScreenText(math.floor(self.winTimer:LeftTillSimMS(self.timeLimit) * 0.001) .. " seconds left", self:ScreenOfPlayer(player), 0, 1000, false);
293293
else
294-
FrameMan:SetScreenText("Survive for " .. self.timeDisplay .. "!", player, 333, 5000, true);
294+
FrameMan:SetScreenText("Survive for " .. self.timeDisplay .. "!", self:ScreenOfPlayer(player), 333, 5000, true);
295295
end
296296

297297
local team = self:GetTeamOfPlayer(player);
298298
--Check if any player's brain is dead
299299
if not MovableMan:IsActor(self:GetPlayerBrain(player)) then
300300
self:SetPlayerBrain(nil, player);
301301
self:ResetMessageTimer(player);
302-
FrameMan:ClearScreenText(player);
303-
FrameMan:SetScreenText("Your brain has been destroyed!", player, 333, -1, false);
302+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
303+
FrameMan:SetScreenText("Your brain has been destroyed!", self:ScreenOfPlayer(player), 333, -1, false);
304304
--Now see if all brains of self player's team are dead, and if so, end the game
305305
if not MovableMan:GetFirstBrainActor(team) then
306306
self.WinnerTeam = self:OtherTeam(team);
@@ -311,8 +311,8 @@ function OneManArmyZeroG:UpdateActivity()
311311
--Check if the player has won
312312
if self.winTimer:IsPastSimMS(self.timeLimit) then
313313
self:ResetMessageTimer(player);
314-
FrameMan:ClearScreenText(player);
315-
FrameMan:SetScreenText("You survived!", player, 333, -1, false);
314+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
315+
FrameMan:SetScreenText("You survived!", self:ScreenOfPlayer(player), 333, -1, false);
316316

317317
self.WinnerTeam = player;
318318

Data/Base.rte/Activities/Siege.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ function Siege:UpdateActivity()
280280
end
281281

282282
if self:PlayerActive(player) and self:PlayerHuman(player) then
283-
FrameMan:SetScreenText("Enemy assault budget: " .. math.floor(displayValue), player, 0, -1, false);
283+
FrameMan:SetScreenText("Enemy assault budget: " .. math.floor(displayValue), self:ScreenOfPlayer(player), 0, -1, false);
284284
end
285285

286286

@@ -320,8 +320,8 @@ function Siege:UpdateActivity()
320320
-- self:AddObjectivePoint("Protect!", Brain.AboveHUDPos, self.PlayerTeam, GameActivity.ARROWDOWN);
321321
else
322322
self:ResetMessageTimer(player);
323-
FrameMan:ClearScreenText(player);
324-
FrameMan:SetScreenText("Your brain has been destroyed!", player, 2000, -1, false);
323+
FrameMan:ClearScreenText(self:ScreenOfPlayer(player));
324+
FrameMan:SetScreenText("Your brain has been destroyed!", self:ScreenOfPlayer(player), 2000, -1, false);
325325
end
326326
end
327327
end

0 commit comments

Comments
 (0)