Skip to content

Commit 9d040b9

Browse files
authored
Merge pull request #151 from cortex-command-community/activity-scene-compatibility
Activity Scene Compatibility
2 parents e59a996 + d076771 commit 9d040b9

File tree

19 files changed

+241
-165
lines changed

19 files changed

+241
-165
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5050

5151
- New `AEmitter` and `PEmitter` INI and Lua (R/W) property `PlayBurstSound` which denotes whether the BurstSound should play when appropriate. This should not be confused for a trigger - it's just a enable/disable toggle to avoid having to remove and add BurstSound altogether.
5252

53+
- New `GAScripted` Lua script method `IsCompatibleScene(scene)` to allow Activities to generically decide which Scenes are eligible by returning a boolean value.
54+
New `GAScripted` INI enumerating property `AddRequiredArea`, replacing Lua file scanning, to allow Activities to explicitly state which areas are strictly required.
55+
As before, these work in tandem. Both the required areas, if defined, and script conditional method, if defined, must pass for the scene to qualify.
56+
5357
- New `GameActivity` INI properties `TeamNTechSwitchEnabled` which determine whether activity team factions are configurable by the user. This is most useful for communicating what the player is not intended to change, or what inputs would be ignored otherwise.
5458

5559
- Allow lua scripts to use LuaJIT's BitOp module (see https://bitop.luajit.org/api.html)
@@ -119,6 +123,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
119123

120124
- The Signal Hunt activity no longer has a preview image, as it was not formatted correctly and spoiled the interior structure of the cave.
121125

126+
- Removed `GAScripted` Lua script method `SceneTest()` as the new Lua function `IsCompatibleScene(scene)` is more capable.
127+
Removed `GAScripted` C++ functionality that would scan the Lua script file to determine which areas are required. `AddRequiredArea` in the INI should be used instead.
128+
Removed `Scene` Lua function `GetOptionalArea` as it functioned identically to `GetArea` aside from triggering the aforementioned (and now removed) Lua script file scanning.
129+
122130
- Removed `AHuman` property `MaxCrouchRotation`. `CrouchRotAngleTarget` is now used instead.
123131

124132
- Deprecated `LimbPath` properties `SlowTravelSpeed`, `NormalTravelSpeed` and `FastTravelSpeed`. For the sake of backwards compatibility they will not crash the game and `NormalTravelSpeed` is a valid synonym for the new `TravelSpeed`.

Data/Base.rte/Activities.ini

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ AddActivity = GAScripted
5757
RequireClearPathToOrbitSwitchEnabled = 1
5858
FogOfWarSwitchEnabled = 1
5959
DeployUnitsSwitchEnabled = 1
60+
AddRequiredArea = Red Brain
61+
AddRequiredArea = Green Brain
6062
6163
6264
AddActivity = GAScripted
@@ -109,6 +111,8 @@ AddActivity = GAScripted
109111
RequireClearPathToOrbitSwitchEnabled = 1
110112
FogOfWarSwitchEnabled = 1
111113
DeployUnitsSwitchEnabled = 1
114+
AddRequiredArea = LZ Attacker
115+
AddRequiredArea = Main Bunker
112116
113117
114118
AddActivity = GAScripted
@@ -126,6 +130,8 @@ AddActivity = GAScripted
126130
RequireClearPathToOrbitSwitchEnabled = 1
127131
FogOfWarSwitchEnabled = 1
128132
DeployUnitsSwitchEnabled = 1
133+
AddRequiredArea = LZ Team 1
134+
AddRequiredArea = LZ All
129135
130136
131137
AddActivity = GAScripted
@@ -149,6 +155,8 @@ AddActivity = GAScripted
149155
RequireClearPathToOrbitSwitchEnabled = 0
150156
FogOfWarSwitchEnabled = 1
151157
DeployUnitsSwitchEnabled = 1
158+
AddRequiredArea = LZ Team 1
159+
AddRequiredArea = LZ All
152160
153161
154162
AddActivity = GAScripted
@@ -172,7 +180,8 @@ AddActivity = GAScripted
172180
RequireClearPathToOrbitSwitchEnabled = 0
173181
FogOfWarSwitchEnabled = 1
174182
DeployUnitsSwitchEnabled = 1
175-
183+
AddRequiredArea = LZ Team 1
184+
AddRequiredArea = LZ All
176185
177186
178187
AddActivity = GAScripted
@@ -197,8 +206,9 @@ AddActivity = GAScripted
197206
RequireClearPathToOrbitSwitchEnabled = 0
198207
FogOfWarSwitchEnabled = 0
199208
DeployUnitsSwitchEnabled = 0
209+
AddRequiredArea = OneManArmyZeroGCompatibilityArea
210+
200211
201-
// Path to orbit guaranteed by currently being in orbit.
202212
AddActivity = GAScripted
203213
PresetName = One-Man Army (Diggers, 0-G)
204214
Description = Survive with only one unit and no backups in a Zero-G void! The enemy will only use diggers, but the harder the difficulty the less potent weaponry you start out with, and the longer you have to survive.
@@ -237,6 +247,8 @@ AddActivity = GAScripted
237247
RequireClearPathToOrbitSwitchEnabled = 1
238248
FogOfWarSwitchEnabled = 1
239249
DeployUnitsSwitchEnabled = 1
250+
AddRequiredArea = LZ Team 1
251+
AddRequiredArea = LZ All
240252
241253
242254
AddActivity = GAScripted
@@ -253,6 +265,8 @@ AddActivity = GAScripted
253265
RequireClearPathToOrbitSwitchEnabled = 1
254266
FogOfWarSwitchEnabled = 1
255267
DeployUnitsSwitchEnabled = 1
268+
AddRequiredArea = LZ Team 1
269+
AddRequiredArea = LZ All
256270
257271
258272
AddActivity = GAScripted
@@ -270,6 +284,8 @@ AddActivity = GAScripted
270284
RequireClearPathToOrbitSwitchEnabled = 0
271285
FogOfWarSwitchEnabled = 1
272286
DeployUnitsSwitchEnabled = 1
287+
AddRequiredArea = LZ Team 1
288+
AddRequiredArea = LZ All
273289
274290
275291
///////////////////////////////////////////////////////////////////////

Data/Base.rte/Activities/BunkerBreach.lua

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ function BunkerBreach:SetupDefenderBrains()
8484
end
8585

8686
defenderBrain = self:CreateBrainBot(self.defenderTeam);
87-
defenderBrain.Pos = SceneMan.Scene:GetOptionalArea("Brain"):GetCenterPoint();
87+
defenderBrain.Pos = SceneMan.Scene:GetArea("Brain"):GetCenterPoint();
8888
MovableMan:AddActor(defenderBrain);
8989
else
9090
-- Pick the defender brain randomly from among those created by deployments, then delete the others and clean up most of their guards.
@@ -99,7 +99,7 @@ function BunkerBreach:SetupDefenderBrains()
9999
table.remove(deploymentBrains, brainIndexToChoose);
100100

101101
if SceneMan.Scene:HasArea("Brain Chamber") then
102-
self.brainChamber = SceneMan.Scene:GetOptionalArea("Brain Chamber");
102+
self.brainChamber = SceneMan.Scene:GetArea("Brain Chamber");
103103
end
104104
for _, unchosenDeploymentBrain in pairs(deploymentBrains) do
105105
unchosenDeploymentBrain.ToDelete = true;
@@ -167,7 +167,7 @@ function BunkerBreach:SetupDefenderActors()
167167
for _, loadoutName in pairs({"Light", "Heavy", "Sniper", "Engineer", "Mecha", "Turret"}) do
168168
if SceneMan.Scene:HasArea(loadoutName .. " Defenders") then
169169
hasSpawnAreas = true;
170-
local defenderArea = SceneMan.Scene:GetOptionalArea(loadoutName .. " Defenders");
170+
local defenderArea = SceneMan.Scene:GetArea(loadoutName .. " Defenders");
171171
if defenderArea ~= nil then
172172
for defenderBox in defenderArea.Boxes do
173173
local guard;
@@ -226,7 +226,7 @@ end
226226

227227
function BunkerBreach:SetupDefenderInternalReinforcementAreas()
228228
if self.AI.isDefenderTeam then
229-
local internalReinforcementsArea = SceneMan.Scene:GetOptionalArea("Internal Reinforcements");
229+
local internalReinforcementsArea = SceneMan.Scene:GetArea("Internal Reinforcements");
230230
if internalReinforcementsArea ~= nil then
231231
self.AI.internalReinforcementsDoorParticle = CreateMOSRotating("Background Door", "Base.rte");
232232
self.AI.internalReinforcementPositions = {};
@@ -248,7 +248,7 @@ function BunkerBreach:StartActivity(isNewGame)
248248
local attackerLZ = SceneMan.Scene:GetArea("LZ Attacker");
249249
self:SetLZArea(self.attackerTeam, attackerLZ);
250250
if SceneMan.Scene:HasArea("LZ Defender") then
251-
self:SetLZArea(self.defenderTeam, SceneMan.Scene:GetOptionalArea("LZ Defender"));
251+
self:SetLZArea(self.defenderTeam, SceneMan.Scene:GetArea("LZ Defender"));
252252
end
253253
self.mainBunkerArea = SceneMan.Scene:GetArea("Main Bunker");
254254

Data/Base.rte/Activities/Siege.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ function Siege:StartActivity()
6565
--end
6666

6767
if SceneMan.Scene:HasArea("Brain") then
68-
playerBrainsLocation = SceneMan.Scene:GetOptionalArea("Brain"):GetCenterPoint();
68+
playerBrainsLocation = SceneMan.Scene:GetArea("Brain"):GetCenterPoint();
6969
else
7070
-- Look for a brain among actors created by the deployments
7171
for actor in MovableMan.AddedActors do
@@ -98,7 +98,7 @@ function Siege:StartActivity()
9898
end
9999

100100
if SceneMan.Scene:HasArea("Brain Chamber") then
101-
self.BrainChamber = SceneMan.Scene:GetOptionalArea("Brain Chamber");
101+
self.BrainChamber = SceneMan.Scene:GetArea("Brain Chamber");
102102

103103
-- Set all useless actors, i.e. those who should guard brain in the brain chamber but their brain is in another castle
104104
-- to delete themselves, because otherwise they are most likely to stand there for the whole battle and waste MOs
@@ -112,7 +112,7 @@ function Siege:StartActivity()
112112
end
113113

114114
if SceneMan.Scene:HasArea("Perimeter") then
115-
self.Perimeter = SceneMan.Scene:GetOptionalArea("Perimeter");
115+
self.Perimeter = SceneMan.Scene:GetArea("Perimeter");
116116
--print ("Perimeter defined");
117117
end
118118

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,14 @@ function DockingHandler:Initialize(activity, newGame, autoAssignUnknownDropships
9393

9494
local i = 1;
9595

96-
while SceneMan.Scene:GetOptionalArea("Dropship Dock " .. i) do
96+
while SceneMan.Scene:GetArea("Dropship Dock " .. i) do
9797
self.mainTable.activeDSDockTable[i] = {["dockPosition"] = SceneMan.Scene:GetArea("Dropship Dock " .. i).Center,
9898
["activeCraft"] = nil,
9999
["dockingStage"] = nil};
100100
i = i + 1;
101101
-- Jump two if needed, the player may want to avoid overlap as per above instructions
102-
if SceneMan.Scene:GetOptionalArea("Dropship Dock " .. i) then
103-
elseif SceneMan.Scene:GetOptionalArea("Dropship Dock " .. i + 1) then
102+
if SceneMan.Scene:GetArea("Dropship Dock " .. i) then
103+
elseif SceneMan.Scene:GetArea("Dropship Dock " .. i + 1) then
104104
i = i + 1;
105105
end
106106

@@ -111,13 +111,13 @@ function DockingHandler:Initialize(activity, newGame, autoAssignUnknownDropships
111111

112112
i = 1;
113113

114-
while SceneMan.Scene:GetOptionalArea("Rocket Dock " .. i) do
114+
while SceneMan.Scene:GetArea("Rocket Dock " .. i) do
115115
self.mainTable.activeRocketDockTable[i] = {["dockPosition"] = SceneMan.Scene:GetArea("Rocket Dock " .. i).Center,
116116
["activeCraft"] = nil,
117117
["dockingStage"] = nil};
118118
i = i + 1;
119-
if SceneMan.Scene:GetOptionalArea("Rocket Dock " .. i) then
120-
elseif SceneMan.Scene:GetOptionalArea("Rocket Dock " .. i + 1) then
119+
if SceneMan.Scene:GetArea("Rocket Dock " .. i) then
120+
elseif SceneMan.Scene:GetArea("Rocket Dock " .. i + 1) then
121121
i = i + 1;
122122
end
123123
end

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ function SaveLoadHandler:ParseTableForAreas(tab)
247247
for k, v in pairs(tab) do
248248
if type(v) == "string" and string.find(v, "SAVELOADHANDLERAREA_") then
249249
local areaName = string.sub(v, 21, -1);
250-
local area = SceneMan.Scene:GetOptionalArea(areaName);
250+
local area = SceneMan.Scene:GetArea(areaName);
251251
tab[k] = area;
252252
elseif type(v) == "table" then
253253
self:ParseTableForAreas(v);

Data/Base.rte/Activities/WaveDefense.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ function WaveDefense:UpdateActivity()
274274
end
275275

276276
-- Reveal the main bunker area for the defender.
277-
local mainBunkerArea = SceneMan.Scene:GetOptionalArea("Main Bunker");
277+
local mainBunkerArea = SceneMan.Scene:GetArea("Main Bunker");
278278
if mainBunkerArea ~= nil then
279279
for mainBunkerBox in mainBunkerArea.Boxes do
280280
SceneMan:RevealUnseenBox(mainBunkerBox.Corner.X, mainBunkerBox.Corner.Y, mainBunkerBox.Width, mainBunkerBox.Height, self.playerTeam);

Data/Browncoats.rte/Activities/RefineryAssault.lua

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -231,37 +231,37 @@ function RefineryAssault:StartActivity(newGame)
231231
self.saveTable.buyDoorTables = {};
232232
self.saveTable.buyDoorTables.All = {};
233233

234-
local area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_LC1");
234+
local area = SceneMan.Scene:GetArea("BuyDoorArea_LC1");
235235
self:SetupBuyDoorAreaTable(self, area);
236236

237-
area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_LC2");
237+
area = SceneMan.Scene:GetArea("BuyDoorArea_LC2");
238238
self:SetupBuyDoorAreaTable(self, area);
239239

240-
area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_S3_1");
240+
area = SceneMan.Scene:GetArea("BuyDoorArea_S3_1");
241241
self:SetupBuyDoorAreaTable(self, area);
242242

243-
area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_S3_2");
243+
area = SceneMan.Scene:GetArea("BuyDoorArea_S3_2");
244244
self:SetupBuyDoorAreaTable(self, area);
245245

246-
area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_S3_3");
246+
area = SceneMan.Scene:GetArea("BuyDoorArea_S3_3");
247247
self:SetupBuyDoorAreaTable(self, area);
248248

249-
area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_S4_1");
249+
area = SceneMan.Scene:GetArea("BuyDoorArea_S4_1");
250250
self:SetupBuyDoorAreaTable(self, area);
251251

252-
area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_S4_2");
252+
area = SceneMan.Scene:GetArea("BuyDoorArea_S4_2");
253253
self:SetupBuyDoorAreaTable(self, area);
254254

255-
area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_S4_3");
255+
area = SceneMan.Scene:GetArea("BuyDoorArea_S4_3");
256256
self:SetupBuyDoorAreaTable(self, area);
257257

258-
area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_S4_4");
258+
area = SceneMan.Scene:GetArea("BuyDoorArea_S4_4");
259259
self:SetupBuyDoorAreaTable(self, area);
260260

261-
area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_S4_5");
261+
area = SceneMan.Scene:GetArea("BuyDoorArea_S4_5");
262262
self:SetupBuyDoorAreaTable(self, area);
263263

264-
area = SceneMan.Scene:GetOptionalArea("BuyDoorArea_S4_6");
264+
area = SceneMan.Scene:GetArea("BuyDoorArea_S4_6");
265265
self:SetupBuyDoorAreaTable(self, area);
266266

267267
self.buyDoorHandler:ReplaceBuyDoorTable(self.saveTable.buyDoorTables.All);

0 commit comments

Comments
 (0)