Skip to content

Commit db1c811

Browse files
authored
Merge branch 'development' into emissionparticlecount
2 parents 94eddcc + 453c108 commit db1c811

File tree

242 files changed

+141261
-79787
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

242 files changed

+141261
-79787
lines changed

CHANGELOG.md

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,27 @@ 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 `MOSprite` INI and Lua (R/W) integer property `ForcedHFlip` which forces a certain flippedness and disallows anything else from ever changing it without clearing the forced value first. 0 is forced not flipped, 1 forced flipped, and -1 is no force.
54+
55+
- New hotkey bindings.
56+
On Mouse+KB PC the defaults are: Weapon Primary Hotkey on V, Weapon Auxiliary Hotkey on H, Actor Primary Hotkey on X, Actor Auxiliary Hotkey on O.
57+
Added new `Controller` states `WEAPON_PRIMARY_HOTKEYSTART`, `WEAPON_AUXILIARY_HOTKEYSTART`, `ACTOR_PRIMARY_HOTKEYSTART`, `ACTOR_AUXILIARY_HOTKEYSTART`, `WEAPON_PRIMARY_HOTKEY`, `WEAPON_AUXILIARY_HOTKEY`, `ACTOR_PRIMARY_HOTKEY`, `ACTOR_AUXILIARY_HOTKEY`
58+
59+
- New hotkey system for `Actor` and `HeldDevice`.
60+
Pressing a certain new hotkey will mark it as activated on `Actor` and `HeldDevice`, letting scripts make use of the new bindings easily.
61+
`Enum` binding for `HeldDevice.HeldDeviceHotkeyType`: `PRIMARY = 0, AUXILIARY = 1, HELDDEVICEHOTKEYTYPECOUNT = 2`.
62+
`Enum` binding for `Actor.ActorHotkeyType`: `PRIMARY = 0, AUXILIARY = 1, ACTORHOTKEYTYPECOUNT = 2`.
63+
Both `Actor` and `HeldDevice` have the following functions:
64+
`HotkeyActionIsActivated(hotkeyType)` returns whether a certain hotkey action is being activated or not.
65+
`ActivateHotkeyAction(hotkeyType)` activates a certain hotkey action.
66+
`DeactivateHotkeyAction(hotkeyType)` deactivates a certain hotkey action.
67+
68+
- New `GAScripted` Lua script method `IsCompatibleScene(scene)` to allow Activities to generically decide which Scenes are eligible by returning a boolean value.
69+
New `GAScripted` INI enumerating property `AddRequiredArea`, replacing Lua file scanning, to allow Activities to explicitly state which areas are strictly required.
70+
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.
71+
72+
- 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.
73+
5374
- Allow lua scripts to use LuaJIT's BitOp module (see https://bitop.luajit.org/api.html)
5475

5576
- New `Emission` INI and Lua (R/W) property `ParticleCount` which sets how many particles the Emission spawns per emission. Defaults to 1.
@@ -65,7 +86,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6586
- Improved navigation, making running and fast walkpaths much more consistent.
6687

6788
- Increased fog-of-war resolution in all vanilla activities, and conquest, from 20x20 to 4x4.
68-
The Ronin Scrambler, the basic scanner, and `SceneMan:CastUnseenRay` have been changed to accomodate fog-of-war resolutions as fine as 1x1 and as course as 20x20.
89+
The Ronin Scrambler, the basic scanner, and `SceneMan:CastUnseenRay` have been changed to accomodate fog-of-war resolutions as fine as 1x1 and as coarse as 20x20.
6990
The fog-of-war revealing code is now multithreaded to increase performance.
7091

7192
- All vanilla scenario activities have had their settings polished, respecting settings which make sense and disabling settings which don't.
@@ -87,6 +108,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
87108

88109
- The `LimbPath` property `NormalTravelSpeed` has been renamed to just `TravelSpeed`.
89110

111+
- `GameActivity` INI properties `TeamNTech` values switched to lazy eval, allowing them to be validated once all modules are loaded.
112+
As well, the scenario menu activity configuration screen now respects defaults set in INI, where possible.
113+
114+
- Internal GUI element `ComboBox` no longer displays dropdown combobutton when disabled, to communicate visually that it's setting is not modifiable.
115+
90116
- Almost all ctrl+* special inputs functionality (i.e restarting activity, world dumps, showing performance stats) are now mapped to right alt, to not interfere with default crouching inputs. The only exception is ctrl+arrow keys for changing console size.
91117

92118
- `Gib`s and detached `Attachable`s now inherit the parent's angular velocity by default.
@@ -111,6 +137,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
111137

112138
- Fixed an issue where an `Actor`'s MovementState wasn't correctly accessible from script.
113139

140+
- Fixed mounted HeldDevices not respecting InheritedRotAngleOffset.
141+
142+
- Fixed an issue where internal Lua functions OriginalDoFile, OriginalLoadFile, and OriginalRequire were polluting the global namespace. They have now been made inaccessible.
143+
114144
</details>
115145

116146
<details><summary><b>Removed</b></summary>
@@ -120,6 +150,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
120150

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

153+
- Removed `GAScripted` Lua script method `SceneTest()` as the new Lua function `IsCompatibleScene(scene)` is more capable.
154+
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.
155+
Removed `Scene` Lua function `GetOptionalArea` as it functioned identically to `GetArea` aside from triggering the aforementioned (and now removed) Lua script file scanning.
156+
123157
- Removed `AHuman` property `MaxCrouchRotation`. `CrouchRotAngleTarget` is now used instead.
124158

125159
- 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/DeliveryCreationHandler.lua

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,6 +1026,23 @@ function DeliveryCreationHandler:CreateEliteSquad(team, squadCountOrTypeTable, s
10261026

10271027
end
10281028

1029+
function DeliveryCreationHandler:CreateCraft(team, forceRocketUsage)
1030+
1031+
local craftGroup = "Craft - Dropships";
1032+
if forceRocketUsage then
1033+
craftGroup = "Craft - Rockets";
1034+
end
1035+
presetName, createFunc, techName = self:SelectPresetByGroupPair(team, craftGroup, craftGroup, craftGroup, craftGroup);
1036+
1037+
local craft = _G[createFunc](presetName, techName);
1038+
craft.Team = team;
1039+
--print(craft)
1040+
1041+
local goldCost = ToSceneObject(craft):GetTotalValue(self.teamTechIDTable[team], 1);
1042+
1043+
return craft, goldCost
1044+
end
1045+
10291046
function DeliveryCreationHandler:CreateSquadWithCraft(team, forceRocketUsage, squadCountOrTypeTable, squadType)
10301047

10311048
local craftGroup = "Craft - Dropships";

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

Lines changed: 11 additions & 10 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
@@ -232,8 +232,9 @@ function DockingHandler:SpawnUndersideDockingCraft(craft, specificDock)
232232
SceneMan:ForceBounds(pos);
233233
craft:AddAISceneWaypoint(pos);
234234
craft:AddAISceneWaypoint(dockTable.dockPosition);
235-
local direction = dockToDockAt % 2 == 0 and 1 or -1;
236-
craft:AddAISceneWaypoint(dockTable.dockPosition + Vector(275 * direction, 0))
235+
local direction = dockToDockAt % 2 == 0 and 1 or -1;
236+
print("direction: " .. direction);
237+
craft:AddAISceneWaypoint(dockTable.dockPosition + Vector(-275 * direction, 0))
237238

238239
dockTable.activeCraft = craft;
239240
dockTable.dockingStage = 1;
@@ -341,7 +342,7 @@ function DockingHandler:UpdateUndersideDockingCraft()
341342
craft:AddAISceneWaypoint(pos);
342343
craft:AddAISceneWaypoint(dockTable.dockPosition);
343344
local direction = i % 2 == 0 and 1 or -1;
344-
craft:AddAISceneWaypoint(dockTable.dockPosition + Vector(275 * direction, 0))
345+
craft:AddAISceneWaypoint(dockTable.dockPosition + Vector(-275 * direction, 0))
345346

346347
dockTable.activeCraft = craft;
347348
dockTable.dockingStage = 1;
@@ -443,7 +444,7 @@ function DockingHandler:UpdateUndersideDockingCraft()
443444

444445
--print(SceneMan:ShortestDistance(craft.Pos, dockTable.dockPosition + Vector(200 * direction, 0), true))
445446

446-
local distFromDockArea = SceneMan:ShortestDistance(craft.Pos, dockTable.dockPosition + Vector(275 * direction, 0), true).Magnitude
447+
local distFromDockArea = SceneMan:ShortestDistance(craft.Pos, dockTable.dockPosition + Vector(-275 * direction, 0), true).Magnitude
447448
--print(distFromDockArea)
448449
if distFromDockArea < 20 then
449450
craft:OpenHatch();

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ function SaveLoadHandler:SerializeTable(val, name, skipnewlines, depth)
6666
if type(name) == "number" then
6767
tmp = tmp .. "[" .. name .. "]" .. " = "
6868
else
69-
tmp = tmp .. name .. " = "
69+
tmp = tmp .. "['" .. name .. "']" .. " = "
7070
end
7171
end
7272

@@ -92,6 +92,8 @@ function SaveLoadHandler:SerializeTable(val, name, skipnewlines, depth)
9292
print("ERROR: SaveLoadHandler tried to save a function. This cannot currently be done and the table will not be as expected when loaded.");
9393
elseif val.Magnitude then -- ghetto vector check
9494
tmp = tmp .. string.format("%q", "Vector(" .. val.X .. "," .. val.Y .. ")")
95+
elseif val.Area then -- ghetto box check
96+
tmp = tmp .. string.format("%q", "Box(" .. val.Corner.X .. "," .. val.Corner.Y .. "," .. val.Corner.X + val.Width .. "," .. val.Corner.Y + val.Height .. ")")
9597
elseif val.PresetName and IsMOSRotating(val) then -- IsMOSRotating freaks out if we give it something that isn't a preset at all... ghetto here too
9698
val:SetNumberValue("saveLoadHandlerUniqueID", val.UniqueID);
9799
tmp = tmp .. string.format("%q", "SAVELOADHANDLERUNIQUEID_" .. tostring(val.UniqueID))
@@ -243,11 +245,23 @@ function SaveLoadHandler:ParseTableForVectors(tab)
243245

244246
end
245247

248+
function SaveLoadHandler:ParseTableForBoxes(tab)
249+
for k, v in pairs(tab) do
250+
if type(v) == "string" and string.find(v, "Box%(") then
251+
local vector = loadstring("return " .. v)();
252+
tab[k] = vector;
253+
elseif type(v) == "table" then
254+
self:ParseTableForBoxes(v);
255+
end
256+
end
257+
258+
end
259+
246260
function SaveLoadHandler:ParseTableForAreas(tab)
247261
for k, v in pairs(tab) do
248262
if type(v) == "string" and string.find(v, "SAVELOADHANDLERAREA_") then
249263
local areaName = string.sub(v, 21, -1);
250-
local area = SceneMan.Scene:GetOptionalArea(areaName);
264+
local area = SceneMan.Scene:GetArea(areaName);
251265
tab[k] = area;
252266
elseif type(v) == "table" then
253267
self:ParseTableForAreas(v);
@@ -289,6 +303,10 @@ function SaveLoadHandler:DeserializeTable(serializedTable, name)
289303
print("INFO: SaveLoadHandler is parsing this table for Vectors: " .. name);
290304
end
291305
self:ParseTableForVectors(tab);
306+
if name and SaveLoadHandler.verboseLogging then
307+
print("INFO: SaveLoadHandler is parsing this table for Boxes: " .. name);
308+
end
309+
self:ParseTableForBoxes(tab);
292310
if name and SaveLoadHandler.verboseLogging then
293311
print("INFO: SaveLoadHandler is parsing this table for Areas: " .. name);
294312
end

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);

0 commit comments

Comments
 (0)