Skip to content

Commit 4a6bfe9

Browse files
2 parents 97bcfbe + 530e9e8 commit 4a6bfe9

File tree

8 files changed

+125
-19
lines changed

8 files changed

+125
-19
lines changed

Data/Base.rte/Activities/Utility/HUDHandler.lua

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ function HUDHandler:Initialize(activity, newGame)
2626

2727
self.Activity = activity;
2828

29-
self.objListStartXOffset = 50;
30-
self.objListStartYOffset = 50;
29+
self.objListStartXOffset = 25;
30+
self.objListStartYOffset = 25;
3131
self.objListSpacing = 15;
3232

3333
self.descriptionSpacing = 15;
@@ -151,7 +151,7 @@ function HUDHandler:RemoveAllCameraPanEvents(team)
151151

152152
end
153153

154-
function HUDHandler:AddObjective(objTeam, objInternalNameOrFullTable, objShortName, objType, objLongName, objDescription, objPos, doNotShowInList, showArrowOnlyOnSpectatorView)
154+
function HUDHandler:AddObjective(objTeam, objInternalNameOrFullTable, objShortName, objType, objLongName, objDescription, objPos, doNotShowInList, showArrowOnlyOnSpectatorView, alwaysShowDescription)
155155

156156
local objTable;
157157

@@ -169,6 +169,7 @@ function HUDHandler:AddObjective(objTeam, objInternalNameOrFullTable, objShortNa
169169
objTable.Position = objPos;
170170
objTable.doNotShowInList = doNotShowInList or false;
171171
objTable.showArrowOnlyOnSpectatorView = showArrowOnlyOnSpectatorView or false;
172+
objTable.alwaysShowDescription = alwaysShowDescription or false;
172173

173174
else
174175
print("HUD Handler tried to add an objective with no team or no internal name!");
@@ -245,6 +246,7 @@ function HUDHandler:UpdateHUDHandler()
245246
-- Objectives
246247

247248
local skippedListings = 0;
249+
local extraDescSpacing = 0;
248250
for i, objTable in pairs(self.mainTable.teamTables[team].Objectives) do
249251
local showArrows = false;
250252
for k, player in pairs(self.mainTable.playersInTeamTables[team]) do
@@ -258,19 +260,22 @@ function HUDHandler:UpdateHUDHandler()
258260
skippedListings = skippedListings + 1;
259261

260262
else
263+
264+
local spacing = (self.objListSpacing*(i-skippedListings));
261265

262-
if i - skippedListings == 1 then
263-
-- First objective special treatment
264-
local vec = Vector(self.objListStartXOffset, self.objListStartYOffset);
266+
if (i - skippedListings == 1) or objTable.alwaysShowDescription then
267+
local vec = Vector(self.objListStartXOffset, self.objListStartYOffset + spacing + extraDescSpacing);
265268
local pos = self:MakeRelativeToScreenPos(player, vec)
266269
PrimitiveMan:DrawTextPrimitive(pos, objTable.longName, false, 0, 0);
267270
-- Description
268271
PrimitiveMan:DrawTextPrimitive(pos + Vector(10, self.descriptionSpacing), objTable.Description, true, 0, 0);
272+
273+
extraDescSpacing = 10*(i-skippedListings);
274+
269275
else
270-
local spacing = (self.objListSpacing*(i-skippedListings));
271-
local vec = Vector(self.objListStartXOffset, self.objListStartYOffset + spacing);
276+
local vec = Vector(self.objListStartXOffset, self.objListStartYOffset + spacing + extraDescSpacing);
272277
local pos = self:MakeRelativeToScreenPos(player, vec)
273-
PrimitiveMan:DrawTextPrimitive(pos, objTable.shortName, false, 0, 0);
278+
PrimitiveMan:DrawTextPrimitive(pos, objTable.shortName, false, 0, 0);
274279
end
275280

276281
end

Data/Base.rte/Activities/Utility/TacticsHandler.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ function TacticsHandler:CommunicateSquadIndexesToActors()
342342
for team, v in pairs(self.teamList) do
343343
for squad = 1, #self.teamList[team].squadList do
344344
for actorIndex = 1, #self.teamList[team].squadList[squad].Actors do
345-
if actor and ValidMO(actor) then
345+
if actor and MovableMan:ValidMO(actor) then
346346
actor:SendMessage("TacticsHandler_UpdateSquadIndex", squad);
347347
end
348348
end

Data/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/GenericCapturable/GenericCapturable.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ AddActor = MOSRotating
4141
ActivationMessage = ActivateCapturable_GenericCapturable
4242
AddCustomValue = NumberValue // Whether to deactivate upon being captured. The capturable will stay deactivated until something else messages it to reactivate.
4343
DeactivateOnCapture = 0
44+
AddCustomValue = NumberValue // Whether only brains can capture this. Note that any unit can contest it still.
45+
OnlyBrainCanCapture = 0
4446
AtomGroup = AtomGroup
4547
AutoGenerate = 1
4648
DeepGroup = AtomGroup

Data/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/GenericCapturable/GenericCapturable.lua

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ function Create(self)
6161
self.instantReset = self:GetNumberValue("InstantReset") == 1 and true or false;
6262
self.neutralIfNotFullyCapped = self:GetNumberValue("NeutralIfNotFullyCapped") == 1 and true or false;
6363
self.needFullControlToCap = self:GetNumberValue("NeedFullControlToCap") == 1 and true or false;
64+
self.onlyBrainCanCapture = self:GetNumberValue("OnlyBrainCanCapture") == 1 and true or false;
65+
66+
self.capturingTeamHasBrain = false;
6467

6568
self.secondsToCapture = self:NumberValueExists("SecondsToCapture") and self:GetNumberValue("SecondsToCapture") or 10;
6669
self.captureRate = 1/(self.secondsToCapture / 2);
@@ -70,6 +73,8 @@ function Create(self)
7073
[1] = 0,
7174
[2] = 0,
7275
[3] = 0};
76+
77+
self.teamHasBrainTable = {};
7378

7479
end
7580

@@ -85,13 +90,18 @@ function Update(self)
8590
[2] = 0,
8691
[3] = 0};
8792

93+
self.teamHasBrainTable = {};
94+
8895

8996
if self.captureArea then
9097

9198
for box in self.captureArea.Boxes do
9299
for actor in MovableMan:GetMOsInBox(box, -1, true) do
93100
if IsActor(actor) then
94101
self.actorTeamNumTable[actor.Team] = self.actorTeamNumTable[actor.Team] + 1
102+
if actor:IsInGroup("Brains") then
103+
self.teamHasBrainTable[actor.Team] = true;
104+
end
95105
end
96106
end
97107
end
@@ -103,6 +113,9 @@ function Update(self)
103113
if IsActor(actor) then
104114
self.actorTeamNumTable[actor.Team] = self.actorTeamNumTable[actor.Team] + 1
105115
end
116+
if actor:IsInGroup("Brains") then
117+
self.teamHasBrainTable[actor.Team] = true;
118+
end
106119
end
107120

108121
end
@@ -134,7 +147,9 @@ function Update(self)
134147

135148
end
136149

137-
if self.dominantTeam ~= self.Team then
150+
local brainOnlyRestrictionCheck = self.dominantTeam == self.Team or (self.dominantTeam ~= self.Team and not (self.onlyBrainCanCapture and not self.teamHasBrainTable[self.dominantTeam]));
151+
152+
if self.dominantTeam ~= self.Team and not (self.onlyBrainCanCapture and not self.teamHasBrainTable[self.dominantTeam]) then
138153
if not self.FXcapturing then
139154
self.FXstartCapture = not self.Deactivated and true or false;
140155
self.FXcapturing = not self.Deactivated and true or false;
@@ -146,7 +161,7 @@ function Update(self)
146161
self.FXcapturing = false;
147162
end
148163

149-
if not self.Contested and not self.Deactivated then
164+
if not self.Contested and not self.Deactivated and brainOnlyRestrictionCheck then
150165

151166
if self.dominantTeam ~= self.capturingTeam then
152167

Data/Browncoats.rte/Activities/RefineryAssault.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ function RefineryAssault:StartActivity(newGame)
259259
MovableMan:SendGlobalMessage("DeactivateCapturable_RefineryS3BuyDoorConsole2");
260260
MovableMan:SendGlobalMessage("DeactivateCapturable_RefineryS3BuyDoorConsole3");
261261
MovableMan:SendGlobalMessage("DeactivateCapturable_RefineryS3BuyDoorConsole4");
262+
MovableMan:SendGlobalMessage("DeactivateCapturable_RefineryS3DrillOverloadConsole");
262263
MovableMan:SendGlobalMessage("DeactivateCapturable_RefineryS3OilCapturable");
263264

264265
-- Stage stuff
@@ -317,6 +318,7 @@ function RefineryAssault:ResumeLoadedGame()
317318
self.stage2HoldTimer.ElapsedRealTimeMS = self:LoadNumber("stage2HoldTimer");
318319

319320
self.stage3ConsolesBroken = self:LoadNumber("stage3ConsolesBroken");
321+
self.stage3DrillOverloaded = self:LoadNumber("stage3DrillOverloaded") == 1 and true or false;
320322

321323
-- Handlers
322324
self.tacticsHandler:OnLoad(self.saveLoadHandler);
@@ -341,6 +343,7 @@ function RefineryAssault:OnSave()
341343
self:SaveNumber("stage2HoldTimer", self.stage2HoldTimer.ElapsedRealTimeMS);
342344

343345
self:SaveNumber("stage3ConsolesBroken", self.stage2ConsolesBroken or 0);
346+
self:SaveNumber("stage3DrillOverloaded", self.stage2DrillOverloaded and 1 or 0);
344347

345348
-- Handlers
346349
self.tacticsHandler:OnSave(self.saveLoadHandler);

Data/Browncoats.rte/Activities/RefineryAssaultFunctions.lua

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,11 @@ function RefineryAssault:HandleMessage(message, object)
150150
self.deliveryCreationHandler:RemoveAvailablePreset(self.aiTeam, "FL-200 Heatlance");
151151
-- don't remove the IN-02, castrates the brownies too much this early on.
152152

153+
elseif message == "Captured_RefineryS3DrillOverloadConsole" then
154+
155+
self.HUDHandler:RemoveObjective(self.humanTeam, "S3OverloadDrill");
156+
self.stage3DrillOverloaded = true;
157+
153158
end
154159

155160

@@ -419,7 +424,7 @@ function RefineryAssault:SetupFirstStage()
419424
dropShip.AIMode = Actor.AIMODE_SENTRY;
420425
dropShip.PlayerControllable = true;
421426

422-
for _, player in pairs(self.humanPlayers) do
427+
for i, player in pairs(self.humanPlayers) do
423428
local brain = PresetMan:GetLoadout("Infantry Brain", self.humanTeamTech, false);
424429
if brain then
425430
brain:RemoveInventoryItem("Constructor");
@@ -432,9 +437,11 @@ function RefineryAssault:SetupFirstStage()
432437
brain.Team = self.humanTeam;
433438
brain.AIMode = Actor.AIMODE_SENTRY;
434439
self:SetPlayerBrain(brain, player);
435-
self:SetObservationTarget(dropShip.Pos, player);
436-
self:SwitchToActor(dropShip, player, self.humanTeam);
437-
dropShip:AddInventoryItem(brain);
440+
self:SetObservationTarget(brain.Pos, player);
441+
self:SwitchToActor(brain, player, self.humanTeam);
442+
brain.Pos = dropShip.Pos + Vector(0 + (10 * i), 180);
443+
MovableMan:AddActor(brain);
444+
--dropShip:AddInventoryItem(brain);
438445
end
439446

440447
MovableMan:AddActor(dropShip)
@@ -594,6 +601,8 @@ function RefineryAssault:MonitorStage2()
594601
MovableMan:SendGlobalMessage("ActivateCapturable_RefineryS3BuyDoorConsole2");
595602
MovableMan:SendGlobalMessage("ActivateCapturable_RefineryS3BuyDoorConsole3");
596603

604+
MovableMan:SendGlobalMessage("ActivateCapturable_RefineryS3DrillOverloadConsole");
605+
597606
MovableMan:SendGlobalMessage("ActivateCapturable_RefineryS3OilCapturable");
598607

599608
-- Setup stage 3 consoles
@@ -665,16 +674,31 @@ function RefineryAssault:MonitorStage2()
665674
"The path forwards is blocked by three blast doors. Open them by triggering the facility failsafes.",
666675
nil,
667676
false,
677+
true,
678+
true);
679+
680+
local objPos = SceneMan.Scene:GetOptionalArea("CaptureArea_RefineryS3DrillOverloadConsole").Center;
681+
682+
self.HUDHandler:AddObjective(self.humanTeam,
683+
"S3OverloadDrill",
684+
"Sabotage the main drill",
685+
"Attack",
686+
"Sabotage the main drill",
687+
"Overload the drill and destroy it. You'll need to get your commander to do it.",
688+
objPos,
689+
false,
690+
true,
668691
true);
669692

670693
self.HUDHandler:AddObjective(self.humanTeam,
671694
"S3DestroyConsoles",
672695
"Find and destroy control centers",
673696
"Attack",
674697
"Find and destroy the refinery control centers",
675-
"Destroying the facility's control centers should contribute to triggering its failsafes.",
698+
"Destroying the facility's control centers should contribute to triggering its failsafes. Find them.",
676699
nil,
677700
false,
701+
true,
678702
true);
679703

680704
self.HUDHandler:AddObjective(self.humanTeam,
@@ -685,6 +709,7 @@ function RefineryAssault:MonitorStage2()
685709
"Defeat the operator monitoring the refinery. It can't hurt.",
686710
nil,
687711
false,
712+
true,
688713
true);
689714

690715
end
@@ -708,7 +733,7 @@ function RefineryAssault:MonitorStage3()
708733

709734
end
710735

711-
if self.stage3ConsolesBroken == 3 and self.stage3FacilityOperatorKilled then
736+
if self.stage3ConsolesBroken == 3 and self.stage3FacilityOperatorKilled and self.stage3DrillOverloaded then
712737

713738
self.HUDHandler:RemoveObjective(self.humanTeam, "S3OpenDoors");
714739

Data/Browncoats.rte/Scenes/Objects/Capturables/Capturables.ini

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ AddActor = MOSRotating
2424
ActivationMessage = ActivateCapturable_RefineryLCHackConsole1
2525
AddCustomValue = NumberValue
2626
DeactivateOnCapture = 0
27+
AddCustomValue = NumberValue
28+
OnlyBrainCanCapture = 0
2729

2830
AddActor = MOSRotating
2931
CopyOf = Generic Capturable Computer
@@ -51,6 +53,8 @@ AddActor = MOSRotating
5153
ActivationMessage = ActivateCapturable_RefineryLCHackConsole2
5254
AddCustomValue = NumberValue
5355
DeactivateOnCapture = 0
56+
AddCustomValue = NumberValue
57+
OnlyBrainCanCapture = 0
5458

5559
AddActor = MOSRotating
5660
CopyOf = Generic Capturable Computer
@@ -78,6 +82,8 @@ AddActor = MOSRotating
7882
ActivationMessage = ActivateCapturable_RefineryS3OilCapturable
7983
AddCustomValue = NumberValue
8084
DeactivateOnCapture = 1
85+
AddCustomValue = NumberValue
86+
OnlyBrainCanCapture = 0
8187

8288
AddActor = MOSRotating
8389
CopyOf = Generic Capturable Computer
@@ -105,6 +111,8 @@ AddActor = MOSRotating
105111
ActivationMessage = ActivateCapturable_RefineryS3BuyDoorConsole1
106112
AddCustomValue = NumberValue
107113
DeactivateOnCapture = 0
114+
AddCustomValue = NumberValue
115+
OnlyBrainCanCapture = 0
108116

109117
AddActor = MOSRotating
110118
CopyOf = Generic Capturable Computer
@@ -132,6 +140,8 @@ AddActor = MOSRotating
132140
ActivationMessage = ActivateCapturable_RefineryS3BuyDoorConsole2
133141
AddCustomValue = NumberValue
134142
DeactivateOnCapture = 0
143+
AddCustomValue = NumberValue
144+
OnlyBrainCanCapture = 0
135145

136146
AddActor = MOSRotating
137147
CopyOf = Generic Capturable Computer
@@ -159,6 +169,8 @@ AddActor = MOSRotating
159169
ActivationMessage = ActivateCapturable_RefineryS3BuyDoorConsole3
160170
AddCustomValue = NumberValue
161171
DeactivateOnCapture = 0
172+
AddCustomValue = NumberValue
173+
OnlyBrainCanCapture = 0
162174

163175
AddActor = MOSRotating
164176
CopyOf = Generic Capturable Computer
@@ -186,6 +198,8 @@ AddActor = MOSRotating
186198
ActivationMessage = ActivateCapturable_RefineryS3BuyDoorConsole4
187199
AddCustomValue = NumberValue
188200
DeactivateOnCapture = 0
201+
AddCustomValue = NumberValue
202+
OnlyBrainCanCapture = 0
189203

190204
AddActor = MOSRotating
191205
CopyOf = Generic Capturable Computer
@@ -213,6 +227,8 @@ AddActor = MOSRotating
213227
ActivationMessage = ActivateCapturable_RefineryS3DrillOverloadConsole
214228
AddCustomValue = NumberValue
215229
DeactivateOnCapture = 1
230+
AddCustomValue = NumberValue
231+
OnlyBrainCanCapture = 1
216232

217233
AddActor = MOSRotating
218234
CopyOf = Generic Capturable Computer
@@ -239,4 +255,6 @@ AddActor = MOSRotating
239255
AddCustomValue = StringValue
240256
ActivationMessage = ActivateCapturable_RefineryS3FireWeaponryConsole
241257
AddCustomValue = NumberValue
242-
DeactivateOnCapture = 1
258+
DeactivateOnCapture = 1
259+
AddCustomValue = NumberValue
260+
OnlyBrainCanCapture = 0

0 commit comments

Comments
 (0)