RECORDANDRONCO/mods/vinylgod/maps/m06/m06.lua
type-two 6847a47fea SIDE B campaign: three Stream missions (m04 Onboarding quota race, m05 Engagement Metrics wave defence, m06 The Shuffle finale)
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>
2026-07-25 23:35:15 +10:00

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