RECORDANDRONCO/mods/vinylgod/maps/shellmap/shellmap.lua
type-two 9bca0f99c2 Juice pass: living buildings, battle scars, screen shake, living menu, Stream buffs
* All 19 structures now breathe: procedural pulse-glow animation generated from
  each sprite's own lit pixels (tools/animate_sprites.py), 6 frames at 130ms.
  WithSpriteBody PlayRepeating()s multi-frame idles, so no trait changes needed.
* Big explosions leave scorch smudges on the ground (SmudgeLayer + LeaveSmudge
  on bass_ring, both superweapon impacts, and building deaths).
* Buildings shake the screen when they die (ScreenShaker + ShakeOnDeath).
* The main menu is alive again: shellmap split into two lua-driven sides that
  skirmish forever. No Bot: players, so no order-manager stall.
* Stream buffs owed by telemetry: bufferbot HP 3500->5000 (survives a second
  seven-inch), drmwalker 750, scraper capacity 18.

Verified: arena smoketest PASS with all changes, shellmap lua confirmed live.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 18:45:51 +10:00

44 lines
1.0 KiB
Lua

-- Menu diorama battle: two lua-driven sides skirmish forever behind the UI.
-- No Bot: players (bot clients stall shellmap order managers — see MEGAPLAN).
Ticks = 0
WaveA = { "djgrunt", "djgrunt", "spinner" }
WaveB = { "bufferbot", "bufferbot", "bufferbot", "drmwalker" }
CountUnits = function(p)
return #Utils.Where(Map.ActorsInWorld, function(a)
return a.Owner == p and a.HasProperty("Move")
end)
end
Spawn = function(owner, types, cx, cy)
Utils.Do(types, function(t)
local a = Actor.Create(t, true, {
Owner = owner,
Location = CPos.New(cx + Utils.RandomInteger(-1, 2), cy + Utils.RandomInteger(-1, 2)),
})
if a.HasProperty("Hunt") then
a.Hunt()
end
end)
end
WorldLoaded = function()
print("SHELLMAP live")
A = Player.GetPlayer("ShowA")
B = Player.GetPlayer("ShowB")
end
Tick = function()
Ticks = Ticks + 1
-- a fresh clash roughly every 30 seconds, kept small
if Ticks % 750 == 250 and A ~= nil then
if CountUnits(A) < 8 then
Spawn(A, WaveA, 14, 15)
end
if CountUnits(B) < 8 then
Spawn(B, WaveB, 23, 23)
end
end
end