-- Arm Medium Tank (Stumpy) local base, flare, turret = piece ("base", "flare", "turret") -- constants local SIG_AIM = 2 local RESTORE_DELAY = Spring.UnitScript.GetLongestReloadTime(unitID) * 2 -- includes include "rockunit.lua" include "smokeunit.lua" function script.Create(unitID) Hide(flare) StartThread(SmokeUnit) end local function RestoreAfterDelay(unitID) Sleep(RESTORE_DELAY) Turn(turret, y_axis, 0, math.rad(90)) Turn(barrel, x_axis, 0, math.rad(50)) end function script.AimWeapon(weaponID, heading, pitch) Signal(SIG_AIM) SetSignalMask(SIG_AIM) Turn(turret, y_axis, heading, math.rad(90)) Turn(barrel, x_axis, -pitch, math.rad(50)) WaitForTurn(turret, y_axis) WaitForTurn(barrel, x_axis) StartThread(RestoreAfterDelay) return true end function script.FireWeapon(weaponID) Show(flare) Move(barrel, z_axis, -2.4, 500) Sleep(150) Hide(flare) WaitForMove(barrel, z_axis) Move(barrel, z_axis, 0, 3) end function script.AimFromWeapon() return turret end function script.QueryWeapon() return flare end function script.Killed(recentDamage, maxHealth) local severity = recentDamage / maxHealth * 100 Hide(flare) if severity <= 25 then Explode(barrel, math.bit_or({SFX.BITMAPONLY, SFX.BITMAP1})) return 1 elseif severity <= 50 then Explode(barrel, math.bit_or({SFX.FALL, SFX.BITMAP1})) return 2 else Explode(barrel, math.bit_or({SFX.FALL, SFX.SMOKE, SFX.FIRE, SFX.EXPLODE_ON_HIT, SFX.BITMAP1})) return 3 end end