
-----AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA---------
freeslot("SPR_NZL3")
for i = 1, 14
	freeslot("S_NSPARK"..i)
end

freeslot("S_NZL51" ,"S_NZL52" , "S_NZL53", "S_NZL54", "S_NZL55")

states[S_NZL51] = {
	sprite = SPR_NZL3,
	frame = FF_FULLBRIGHT|A,
	tics = 2, 
	nextstate = S_NZL52
}

states[S_NZL52] = {
	sprite = SPR_NZL3,
	frame = FF_FULLBRIGHT|A,
	tics = 2, 
	nextstate = S_NZL53
}

states[S_NZL53] = {
	sprite = SPR_NZL3,
	frame = FF_FULLBRIGHT|A,
	tics = 2, 
	nextstate = S_NZL54
}

states[S_NZL54] = {
	sprite = SPR_NZL3,
	frame = FF_FULLBRIGHT|A,
	tics = 2, 
	nextstate = S_NZL55
}

states[S_NZL55] = {
	sprite = SPR_NZL3,
	frame = FF_FULLBRIGHT|TR_TRANS80|A,
	tics = 2, 
	nextstate = S_NULL
}

local radius = FRACUNIT*320	-- you guys change that to anything idgaf!

local ltrans = {}
ltrans[5] = TR_TRANS30
ltrans[6] = TR_TRANS60
ltrans[7] = TR_TRANS80

for i = 0, 13
	states[S_NSPARK1+i] = {i%2==0 and SPR_NZL3 or SPR_NULL,
			i%2 == 0 and i/2|FF_FULLBRIGHT|(ltrans[i/2] or 0) or A,
			i%2 and 1 or 2,
			nil,
			0,
			0,
			i<13 and S_NSPARK2+i or S_NULL
		}
end

-- stole this from some unreleased shit of mine because cba...
for i = 1,2
	freeslot("SPR_NZL"..i)
end
for i = 1,9
	freeslot("S_NZIO1"..i)
end
for i = 1,9
	freeslot("S_NZIO2"..i)
end

states[S_NZIO11] = {SPR_NZL1, A|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO12}
states[S_NZIO12] = {SPR_NZL1, B|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO13}
states[S_NZIO13] = {SPR_NZL1, A|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO14}
states[S_NZIO14] = {SPR_NZL1, B|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO15}
states[S_NZIO15] = {SPR_NZL1, A|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO16}
states[S_NZIO16] = {SPR_NZL1, B|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO17}
states[S_NZIO17] = {SPR_NZL1, C|FF_FULLBRIGHT|TR_TRANS30, 2, nil, 0, 0, S_NZIO18}
states[S_NZIO18] = {SPR_NZL1, D|FF_FULLBRIGHT|TR_TRANS50, 2, nil, 0, 0, S_NZIO19}
states[S_NZIO19] = {SPR_NZL1, E|FF_FULLBRIGHT|TR_TRANS70, 2, nil, 0, 0, S_NULL}

states[S_NZIO21] = {SPR_NZL2, A|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO22}
states[S_NZIO22] = {SPR_NZL2, B|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO23}
states[S_NZIO23] = {SPR_NZL2, A|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO24}
states[S_NZIO24] = {SPR_NZL2, B|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO25}
states[S_NZIO25] = {SPR_NZL2, A|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO26}
states[S_NZIO26] = {SPR_NZL2, B|FF_FULLBRIGHT, 2, nil, 0, 0, S_NZIO27}
states[S_NZIO27] = {SPR_NZL2, C|FF_FULLBRIGHT|TR_TRANS30, 2, nil, 0, 0, S_NZIO28}
states[S_NZIO28] = {SPR_NZL2, D|FF_FULLBRIGHT|TR_TRANS50, 2, nil, 0, 0, S_NZIO29}
states[S_NZIO29] = {SPR_NZL2, E|FF_FULLBRIGHT|TR_TRANS70, 2, nil, 0, 0, S_NULL}

-- funnily enough you can't use those on normal builds...

freeslot("SPR_NZL4")
for i = 1, 12
	freeslot("S_NZL4"..i)
end

for i = 0, 11
	states[S_NZL41+i] = {i%2 == 0 and SPR_NZL4 or SPR_NULL, i%2==0 and (i/2)|FF_FULLBRIGHT|FF_PAPERSPRITE or A, 2, nil, 0, 0, i==1 and S_NZL41 or S_NZL42+i}
end

-- and the super sonic sparks........
for i = 1, 6
	freeslot("S_NZL3"..i)
end

function A_NSpark(mo)
	mo.fuse = P_RandomRange(20, 50)
	mo.momx = P_RandomRange(-10, 10)*mo.scale
	mo.momy = P_RandomRange(-10, 10)*mo.scale
	mo.momz = P_RandomRange(0, 10)*mo.scale
end

-- fuck off im lazy k
local sparkstate = {A, B, C, B}

for i = 0, 5
	states[S_NZL31+i] = {	i>0 and SPR_NZL5 or SPR_NULL,
							i==0 and A or (sparkstate[i] or A),
							2,
							i==1 and A_NSpark or nil,
							0,
							0,
							i == 5 and S_NZL33 or S_NZL32+i
						}
end

--freeslot("sfx_zio3")	-- i like me some persona so it retains the name from the mod :D

rawset(_G, "darkzio", function(mo, color, scale)
	S_StartSound(mo, sfx_zio3)
	color = $ or SKINCOLOR_DUSK
	scale = $ or mo.scale
	-- spawn lightning:
	for i = 1,3 do
		local spark = P_SpawnMobj(mo.x, mo.y, mo.floorz, MT_THOK)
		spark.state = S_NZL51
		spark.color = color
		spark.scale = scale
		spark.destscale = FRACUNIT/6
		spark.momz = P_RandomRange(2, 10)*FRACUNIT
		P_InstaThrust(spark, P_RandomRange(1, 359)*ANG1, P_RandomRange(1, 6)*FRACUNIT)
	end

	local zio1 = P_SpawnMobj(mo.x, mo.y, mo.floorz, MT_THOK)
	zio1.state = S_NZIO11
	zio1.scale = scale*2+(scale/2)
	zio1.destscale = scale	-- this probably looks retarded at smaller scales from afar lmao
	zio1.color = color

	local zio2 = P_SpawnMobj(mo.x, mo.y, mo.floorz, MT_THOK)
	zio2.state = S_NZIO21
	zio2.scale = scale*2+(scale/2)
	zio2.destscale = scale
	zio2.color = color	-- add some variation, variation's nice my dudes

	local size = FixedMul(mo.scale, radius)	-- let's give ourselves 16 tics to do stuff with.

	-- first spawn fixed particles in a fixed radius, then we'll add some randomness:
	for i = 0, 15 do
		local a = ((360/16)*i)*ANG1
		local part = P_SpawnMobj(mo.x + size>>FRACBITS*cos(a), mo.y + size>>FRACBITS*sin(a), mo.z, MT_THOK)
		part.state = S_NSPARK1
		part.scale = scale
		part.color = color
	end

	-- let's fuck around with papersprites i guess
	for i = 1, 16
		local l = P_SpawnMobj(mo.x, mo.y, mo.z, MT_THOK)
		l.state = S_NZL41 + P_RandomRange(0, 5)
		l.angle = P_RandomRange(0, 359)*ANG1
		l.fuse = P_RandomRange(10, 40)
		l.scale = mo.scale
		l.color = color

		-- alsos spawn a spark...
		l = P_SpawnMobj(mo.x, mo.y, mo.z, MT_THOK)
		l.state = S_NZL31
		l.tics = P_RandomRange(2, 10)
		l.flags = MF_NOCLIPHEIGHT|MF_NOCLIPTHING
		l.destscale = 1
		l.scale = scale
		l.scalespeed = l.scale/24
		l.color = color
	end
end)
--AAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBB----
--===============================================--