View difference between Paste ID: f8e259f1 and
SHOW: | | - or go back to the newest paste.
1-
1+
-- Arm Medium Tank (Stumpy)
2
local base, flare, turret = piece ("base", "flare", "turret")
3
4
-- constants
5
local SIG_AIM = 2
6
local RESTORE_DELAY = Spring.UnitScript.GetLongestReloadTime(unitID) * 2
7
8
-- includes
9
include "rockunit.lua"
10
include "smokeunit.lua"
11
12
function script.Create(unitID)
13
	Hide(flare)
14
	StartThread(SmokeUnit)
15
end
16
17
local function RestoreAfterDelay(unitID)
18
	Sleep(RESTORE_DELAY)
19
	Turn(turret, y_axis, 0, math.rad(90))
20
	Turn(barrel, x_axis, 0, math.rad(50))
21
end
22
23
function script.AimWeapon(weaponID, heading, pitch)
24
	Signal(SIG_AIM)
25
	SetSignalMask(SIG_AIM)
26
	Turn(turret, y_axis, heading, math.rad(90))
27
	Turn(barrel, x_axis, -pitch, math.rad(50))
28
	WaitForTurn(turret, y_axis)
29
	WaitForTurn(barrel, x_axis)
30
	StartThread(RestoreAfterDelay)
31
	return true
32
end
33
34
function script.FireWeapon(weaponID)
35
	Show(flare)
36
	Move(barrel, z_axis, -2.4, 500)
37
	Sleep(150)
38
	Hide(flare)
39
	WaitForMove(barrel, z_axis)
40
	Move(barrel, z_axis, 0, 3)
41
end
42
43
function script.AimFromWeapon() return turret end
44
45
function script.QueryWeapon() return flare end
46
	
47
function script.Killed(recentDamage, maxHealth)
48
	local severity = recentDamage / maxHealth * 100
49
	Hide(flare)
50
	if severity <= 25 then
51
		Explode(barrel, math.bit_or({SFX.BITMAPONLY, SFX.BITMAP1}))
52
		return 1
53
	elseif severity <= 50 then
54
		Explode(barrel, math.bit_or({SFX.FALL, SFX.BITMAP1}))
55
		return 2
56
	else
57
		Explode(barrel, math.bit_or({SFX.FALL, SFX.SMOKE, SFX.FIRE, SFX.EXPLODE_ON_HIT, SFX.BITMAP1}))
58
		return 3
59
	end
60
end