Adds tools/gen_sideb.py — one data-driven builder replacing the copy-pasted gen_missionN.py pattern — and tools/smoketest.sh, which reports PASS/FAIL/DISPLAY_UNAVAILABLE instead of the process-is-alive check that has produced false passes twice now. NOT verified in-game: the display went to sleep mid-session. Static checks all pass (luac, check-yaml 0 errors, map refresh, check_assets, make) and the already-verified m03 hangs identically, confirming it is environmental. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
57 lines
1.5 KiB
Lua
57 lines
1.5 KiB
Lua
-- 06: THE SHUFFLE — SIDE B finale.
|
|
|
|
Ticks = 0
|
|
CorrectionIssued = false
|
|
|
|
WorldLoaded = function()
|
|
Stream = Player.GetPlayer("Player")
|
|
Party = Player.GetPlayer("Enemy")
|
|
InitObjectives(Stream)
|
|
|
|
AlgorithmObjective = Stream.AddPrimaryObjective("bring-algorithm-online")
|
|
StudioObjective = Stream.AddPrimaryObjective("delete-the-studio")
|
|
HubObjective = Stream.AddSecondaryObjective("keep-the-hub-online")
|
|
|
|
Trigger.OnKilled(TheStudio, function()
|
|
Stream.MarkCompletedObjective(StudioObjective)
|
|
end)
|
|
|
|
Trigger.OnKilled(TheVan, function()
|
|
Trigger.AfterDelay(DateTime.Seconds(2), function()
|
|
local hubs = Utils.Where(Map.ActorsInWorld, function(a)
|
|
return a.Owner == Stream and a.Type == "streamhub"
|
|
end)
|
|
if #hubs == 0 then
|
|
Stream.MarkFailedObjective(HubObjective)
|
|
end
|
|
end)
|
|
end)
|
|
end
|
|
|
|
Tick = function()
|
|
Ticks = Ticks + 1
|
|
if Ticks % 25 ~= 0 or AlgorithmObjective == nil then
|
|
return
|
|
end
|
|
if Stream.IsObjectiveCompleted(AlgorithmObjective) then
|
|
return
|
|
end
|
|
|
|
local cores = Utils.Where(Map.ActorsInWorld, function(a)
|
|
return a.Owner == Stream and a.Type == "algorithm"
|
|
end)
|
|
if #cores > 0 then
|
|
Stream.MarkCompletedObjective(AlgorithmObjective)
|
|
if not CorrectionIssued then
|
|
CorrectionIssued = true
|
|
Media.DisplayMessage(UserInterface.GetFluentMessage("they-are-coming"))
|
|
Media.PlaySpeechNotification(Stream, "BaseAttack")
|
|
Utils.Do(Map.ActorsInWorld, function(a)
|
|
if a.Owner == Party and a.HasProperty("Hunt") then
|
|
a.Hunt()
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
end
|