--=============================PHYSICAL MOVES=========================================================
--Melee moves, mostly the footsweep, resides here. Some out of date battlemod stuff is setup here too.
--====================================================================================================

//SMS' reliable melee move, the triple sweepkick!

addHook("MobjThinker", function(s)
if not s.player return end --
local p = s.player
	if p.smsrdash
		p.smsrdash = $-1
	end
	if s.airboostimmune --Temporary defense during air boost. (In SMS1)
		s.airboostimmune = $-1
		if (p.speed < 9*s.scale)
		or (s.skin != "sms")
			s.airboostimmune = 0	
		elseif P_IsObjectOnGround(s)
			s.airboostimmune = max($-1, 0)
		end
	end
	if s.hmscombod --Getting massacred?
		if not (s.tracer and s.tracer.valid and s.tracer.player and s.tracer.starthmscombo and s.tracer.player.hypermysticsonic)
			s.hmscombod = false
			P_KillMobj(s)
		elseif not s.health
			s.hmscombod = false
		end
	end
	--Skin check!
	if (s.skin == "sms") and s.health --if SMS and alive, basically.

		if (s.state == S_SMS_FOOTSWEEP8)
			p.sweepanimrecovery = 3
		end
		if p.sweepanimrecovery
			p.sweepanimrecovery = $-1
			if (p.sweepanimrecovery == 1)
			and (p.panim == PA_IDLE) and p.speed
				s.state = S_PLAY_WALK
			end			
		end
		
		local recovery = nil

		//This is to smoothen the animation a little.
		if (s.state == S_SMS_FOOTSWEEP8)
		and (s.tics == 1)
		and P_IsObjectOnGround(s)
			s.state = (p.speed) and S_PLAY_WALK or S_PLAY_STND
			recovery = true
			s.sms_juststomped = 2
			p.smsmeleebutton = 850
			if not p.speed and not (p.pflags & PF_ANALOGMODE)
				p.drawangle = $-ANGLE_45
			end
		end	
		
		// These are the speed and angle values to go with footsweep timers.
		// Lots of values for what seems like a simple attack.
			
		if ((p.panim != PA_PAIN) and not (p.pflags & PF_SLIDING))
		and not p.hypermysticsonic	
			if p.sweepanimrecovery
				p.sweepanimrecovery = $-1
				if not p.sweepanimrecovery
				and (p.panim == PA_IDLE) and p.speed
					s.state = S_PLAY_WALK
				end
			//This is to smoothen the animation a little.
			elseif (s.state == S_SMS_FOOTSWEEP8)
				if (s.tics == 1) and P_IsObjectOnGround(s)
					s.state = (p.speed) and S_PLAY_WALK or S_PLAY_STND
					recovery = true
					s.sms_juststomped = 2
					p.smsmeleebutton = 850
					if not p.speed and not (p.pflags & PF_ANALOGMODE)
						p.drawangle = $-ANGLE_45
					end
				else
					p.sweepanimrecovery = 3
				end
			end		
			
			if p.footsweep01
				p.footsweep01 = $-1
				
				if p.footsweepanim
				and (p.panim != PA_SPRING) and not (s.eflags & MFE_SPRUNG)
					if (p.footsweep01 >= 15)
						P_InstaThrust(s, p.sweepangle, p.sweepspeed)
						if p.footsweep01 == 17
							local ths = SMS_TwirlGFX(s)
							ths.spriteyoffset = $+5*FRACUNIT
							ths.spriteyscale = $-25000
							ths.spritexscale = $+10000	
							ths.mirrored = true
							ths.frame = $+(FRACUNIT*2)
						end
					elseif (p.footsweep01 > 11)
						P_InstaThrust(s, p.sweepangle, p.sweepspeed*6/7)
					elseif (p.footsweep01 > 7)
						P_InstaThrust(s, p.sweepangle, p.sweepspeed*6/8)
					elseif (p.footsweep01 > 4)
						P_InstaThrust(s, p.sweepangle, p.sweepspeed*6/9)
					end				
					if (s.eflags & MFE_UNDERWATER) or (p.pflags & PF_SLIDING)
						if (p.pflags & PF_SLIDING) and (s.momz < FRACUNIT)
							P_SetObjectMomZ(s, 4*FRACUNIT, true)
						end
						if not (abs(s.momz) > 6*s.scale)
							P_SetObjectMomZ(s, 18500, true)
						end
					end
					s.SMS_JUMPOUT = true
				end
			end
			if p.footsweep02
				p.footsweep02 = $-1
				if (p.panim != PA_SPRING) and not (s.eflags & MFE_SPRUNG)
					if (p.footsweep02 > 6)
						p.pflags = $|PF_USEDOWN & ~PF_JUMPED
						local ghs = SMS_TwirlGFX(s)
						ghs.spriteyoffset = $+5*FRACUNIT
						ghs.spriteyscale = $-25000
						ghs.spritexscale = $+10000
					end
					if (p.cmd.buttons & BT_JUMP) and (p.sms_jumphold <= 2)
						P_SetObjectMomZ(s, 4*FRACUNIT)
						p.pflags = $|PF_JUMPED
						s.SMS_JUMPOUT = true --Desyncs if a local variable? I wonder why...
						p.panim = PA_JUMP				
					elseif p.footsweepanim
					and (p.sweepspeed > 2*FRACUNIT)
						if (p.footsweep02 >= 15)
							P_InstaThrust(s, p.sweepangle, 51*s.scale)
							s.momz = 0
						elseif (p.footsweep02 > 11)
							P_InstaThrust(s, p.sweepangle, 47*s.scale)
							s.momz = 0
						elseif (p.footsweep02 > 7)
							P_InstaThrust(s, p.sweepangle, 40*s.scale)
							s.momz = 0
						elseif (p.footsweep02 > 4)
							P_InstaThrust(s, p.sweepangle, 27*s.scale)
						end
					end
				end
			end
			--You can jump out of Footsweep 1 or 2!
			if s.SMS_JUMPOUT
				if (p.pflags & PF_JUMPED) and (p.panim == PA_ROLL or p.panim == PA_JUMP)
				
					local JUMPHEIGHT = FixedDiv(FixedMul(685555, 32678), P_GetMobjGravity(s) or 32678)
					
					if p.footsweep02
						JUMPHEIGHT = $*5/4
						
						local ghs = SMS_GroundWindBlast(s)
						ghs.renderflags = RF_FLOORSPRITE
						
						ghs = SMS_GroundWindBlast(s)
						ghs.renderflags = RF_FLOORSPRITE
						ghs.spriteyscale = $/3
						ghs.spritexscale = $/3
						ghs.fuse = 11
						ghs.sttspeed = 2
						ghs.tracer = s
						ghs.ditchtracer = 1
						SMS_GroundWindBlast(s)
						if not P_IsObjectOnGround(s)
							SMS_WindJumpGFX(s)
						end
						S_StartSound(s, sfx_smsfx3)
						P_InstaThrust(s, s.angle, -8*s.scale)
						
						s.spritexscale = FRACUNIT-23000
						s.spriteyscale = FRACUNIT+35000
						s.spriteyoffset = 11*FRACUNIT
						s.SMS_squashtable = {timer = 7, Xspeed = 8500, Yspeed = 9570, air = true}							
					else
						s.momx = ($*5)/9
						s.momy = ($*5)/9
					end
					
					s.sms_juststomped = 6
					p.footsweepanim = false
					p.footsweep01 = 0
					p.footsweep02 = 0
					p.footsweep03 = 0
					
					if (s.eflags & MFE_UNDERWATER)
						P_SetObjectMomZ(s, ((JUMPHEIGHT/2)+(s.scale/2)*-1))
					else
						P_SetObjectMomZ(s, JUMPHEIGHT*-1)
					end
					s.state = S_SMS_ROLLT1
					p.lasthomingtrick = 2
					p.hometrickanim = true
					p.homingtrickcharge = 0
					p.pflags = $|PF_NOJUMPDAMAGE|PF_JUMPED & ~PF_SPINNING & ~PF_STARTDASH & ~PF_STARTJUMP
				end	
			end
			
			s.SMS_JUMPOUT = nil
			
			if p.footsweep03
				p.footsweep03 = $-1
				if not (p.panim == PA_SPRING)
					p.sms_flamedelay = max($,2)
					if not (s.SMS_ControlAlter and s.SMS_ControlAlter.timer > 2) 
						s.SMS_ControlAlter = {
						timer = 2,
						maxforwardmove = 18,
						minforwardmove = -18,
						maxsidemove = 18,
						minsidemove = -18,
						removebuttons = (BT_JUMP|BT_SPIN|BT_CUSTOM1|BT_CUSTOM2|BT_CUSTOM3|BT_TOSSFLAG|BT_WEAPONPREV|BT_WEAPONNEXT)}	
					end
					
					if p.footsweepanim
						if (p.cmd.buttons & BT_ATTACK)
							p.sms_flamebuttonhold = 3500
						end
						if (p.footsweep03 > 3)			
							if (p.footsweep03 > 5)
								if (s.tics > 1)
									s.tics = 1
								end
								for i = 0,1
									local ths = SMS_TwirlGFX(s)
									ths.spriteyoffset = $+(5*FRACUNIT*i)
									ths.spriteyscale = $-(4000*i)
									ths.spritexscale = $+(50000*i)
									ths.frame = (i == 1) and $|FF_HORIZONTALFLIP or $
								end
								if (p.footsweep03 == 19)
									local ghs = P_SpawnMobj(s.x, s.y, s.z+s.height/2, MT_THOK)
									ghs.color = SKINCOLOR_WHITE
									ghs.sprite = SPR_SBRT
									ghs.frame = $|TR_TRANS60
									ghs.tics = 6
									ghs.momx = s.momx
									ghs.momy = s.momy
									ghs.momz = s.momz
									ghs.scale = s.scale
									ghs.scalespeed = $*14
									ghs.destscale = $*40
									
									SMS_MediumDustGFX(s)
									local ghs = SMS_LightFlash(s, s.color)	
									ghs.fuse = 11 ghs.tracer = s
									
									if s.SMS_DLtrail == nil and (p.sweepspeed > 2*s.scale)
										s.SMS_DLtrail = {timer = 4, colorized = true,
										COLORT_trail = {SKINCOLOR_MYSTICAL5, SKINCOLOR_SMS5R, SKINCOLOR_ORANGE, SKINCOLOR_RED, SKINCOLOR_RED, SKINCOLOR_EMERALD, SKINCOLOR_GREEN, SKINCOLOR_MYSTICAL2},
										COLORT_trailmax = 8} 
									end
									
								elseif (p.footsweep03 < 15 and p.footsweep03 > 10)
								
									P_SetObjectMomZ(s, 4*FRACUNIT)
									
								elseif (p.footsweep03 == 10)
								
									P_SetObjectMomZ(s, 10*FRACUNIT)
									
									if not G_GametypeHasSpectators()
										local ghs = P_SpawnMobjFromMobj(s, 0,0,0, MT_SMMK)
										if ghs and ghs.valid
											ghs.target = s
											P_NukeEnemies(ghs, s, 377*s.scale)
										end
									end
									
									local ghs = SMS_DashGFX(s, s.color)
									ghs.rollangle = $+ANGLE_270
									ghs.spriteyoffset = $-19*FRACUNIT
									ghs.renderflags = $ & ~RF_PAPERSPRITE
									
									--Reflection AoE kick!
									local ghs = P_SpawnMobjFromMobj(s, 0, 0,-200*s.scale, MT_SMSECHECK) 
									if ghs and ghs.valid
										ghs.SMS_reflector = true
										ghs.target = s
										ghs.fuse = 5
										ghs.tics = 5
										ghs.anim_duration = 5
										ghs.momx = s.momx/3
										ghs.momy = s.momy/3
										ghs.momz = s.momz/3
										ghs.height = 400*s.scale
										ghs.radius = 400*s.scale
									end	
								end				
							end
							if (s.state == S_SMS_FOOTSWEEP8)
								s.state = S_SMS_FOOTSWEEP1
							end						
						end
						if (p.sweepspeed > 2*s.scale)
							if (p.footsweep03 >= 17)
								P_InstaThrust(s, p.sweepangle, 65*s.scale)
							elseif (p.footsweep03 > 14)
								P_InstaThrust(s, p.sweepangle, 59*s.scale)
							elseif (p.footsweep03 > 10)
								P_InstaThrust(s, p.sweepangle, 30*s.scale)
							elseif (p.footsweep03 == 10)
								P_InstaThrust(s, p.sweepangle, 18*s.scale)
							elseif (p.footsweep03 > 3)
								P_InstaThrust(s, p.sweepangle, 10*s.scale)
							else
								P_InstaThrust(s, p.sweepangle, 2*s.scale)
							end
						end
					end
				end
			end
		end
		
		//The first Hyper Mystic Sonic animation code. It's done again in ThinkFrame and again in PostThinkFrame for good measure.
		if p.hypermysticsonic
			if p.hmsrunf == nil
				p.hmsrunf = 8
			end
			
			if (p.hmsrunf < 1)
				p.hmsrunf = 8
			else
				if (p.speed < 52*s.scale)
					p.hmsrunf = $-2
				elseif (p.speed < 70*s.scale)
					p.hmsrunf = $-3
				else
					p.hmsrunf = 0					
				end
			end	
			
			if (s.sprite == SPR_PLAY or s.sprite == SPR_SMSO or (s.sprite == SPR_HMSO and (s.state >= (S_PLAY_STND)) and (s.state <= (S_PLAY_MELEE_LANDING))))
			and not ( (s.state >= (S_HMSTRANSFORM1)) and (s.state <= (S_HMSTRANSFORM9) 
			and not s.hmsspinpass and not s.nohmsspin and not s.hms_jumprisen) )
				if ((s.frame & FF_FRAMEMASK) > J)
					s.frame = ($ & ~FF_FRAMEMASK)|C
				end
				s.sprite = SPR_HMSO
				
				if s.hmsspinpass and not s.nohmsspin
					if s.hmsspinang == nil
						s.hmsspinang = 0 --Hold on a second then...
					else
						if s.hmsforcedspin
							s.hmsspinang = $+FixedAngle(45*FRACUNIT)
						elseif (abs(s.momz) < s.scale*4)
							s.hmsspinang = $+FixedAngle(5*FRACUNIT)
						else
							s.hmsspinang = $+FixedAngle(s.momz)
						end
					end
					p.drawangle = s.hmsspinang
					s.frame = ($ & ~FF_FRAMEMASK)|H
					
				elseif (s.state >= (S_PLAY_STND)) and (s.state <= (S_PLAY_MELEE_LANDING))
				
					if s.hmsoframe
					--
					elseif s.state == S_PLAY_SPRING
					
					s.frame = ($ & ~FF_FRAMEMASK)|F
						if s.hmsroflstomped 
							s.hmsroflstomped = false
							s.rollangle = 0
							s.hmsspinpass = 0
						end
						
					elseif (s.state == S_PLAY_EDGE)
						s.frame = ($ & ~FF_FRAMEMASK)|F
					elseif (s.state == S_PLAY_STUN)
						s.frame = ($ & ~FF_FRAMEMASK)|B 
					elseif (p.speed < 35*s.scale)
						s.frame = ($ & ~FF_FRAMEMASK)|C 
					elseif (p.hmsrunf > 3) 
						s.hmsoframe = E
					else
						s.hmsoframe = D 
					end
					
				elseif not s.hmsoframe
					if (p.hmsrunf > 3) 
						s.hmsoframe = E
					else
						s.hmsoframe = D 
					end
				end
				if s.hmsoframe and (s.nohmsspin or not s.hmsspinpass)
					s.frame = s.hmsoframe
				end
			 end
			 // The animation needs to be turned off if you're not spinning like a dumbass.
			 
		else --if not p.hypermysticsonic
		
			// Activating the footsweeps seems easy enough....oh damnit.
			if (p.cmd.buttons & BT_CUSTOM2)
			and (p.smsmeleebutton <= 1)
			and not (SMS_Locked(s, p, true, true) and not (p.footsweep02 or p.footsweep01) and not p.sms_dodging)
			and (P_IsObjectOnGround(s) or p.footsweep02 or p.footsweep01)
			and SMS_FootSweepInput(s, p) --Check input then do a footsweep!
				p.charflags = $|SF_NOSKID
				SMS_WallBustPower(s,p)
				SMS_FootSweepEffects(s, p)
				if p.footsweep01 and not (s.eflags & MFE_UNDERWATER)
					SMS_FootSweepSlash(s, FF_TRANS70, s.angle-(ANG1*230))
					SMS_FootSweepSlash(s, FF_TRANS20, s.angle-(ANG1*179))
				end
			elseif p.footsweepanim	
				p.charflags = $|SF_NOSKID
				
				if (p.panim <= PA_DASH) and (p.panim >= PA_IDLE)
				and (p.footsweep01 or p.footsweep02 or p.footsweep03)
				and not recovery
					s.state = SMSLocalRNG(S_SMS_FOOTSWEEP2, S_SMS_FOOTSWEEP7,s) --idfk which one.
					SMS_FootSweepEffects(s, p)
				elseif not ((s.state >= S_SMS_FOOTSWEEP1) and (s.state <= S_SMS_FOOTSWEEP8)) --Cancel!
					p.footsweepanim = false
				end
				if p.footsweepanim	--Still got it? Effects away, then!
					if p.footsweep01
						P_RadiusAttack(s, s, 55*s.scale)
					end
					if (leveltime % 2) and not (s.eflags & MFE_UNDERWATER)
						local ANGLEFRAME = s.angle-ANGLE_90 + (s.frame & FF_FRAMEMASK)*ANG1*-50 --The visual direction of SMS' kick.
						if p.footsweep01
							SMS_FootSweepSlash(s, min(FF_TRANS70, max(FF_TRANS20, (9-(p.footsweep01/2))*FF_TRANS10)), ANGLEFRAME)
						else
							SMS_FootSweepSlash(s, FF_TRANS40, ANGLEFRAME) --Sonic Unleashed style footsweep slash!
						end
					end
					p.sms_advfall = 0
					SMS_FootSweepEffects(s, p)	--Spawn effects	
					--Gradually allow adjustment of footsweep!
					if (p.cmd.forwardmove < -43)
						if p.sweepspeed --Allow slight braking.
							p.sweepspeed = FixedDiv(FixedMul($, 36), 37)
						end
					elseif p.smsrtable and (p.smsrtable.direct > 5) --Allow a slight shift in momentum.
						local ANGSHIFT,PLUS = SMS_AngleDifference(p.sweepangle, p.smsrtable.turnang, 2, ANG1*3, 2)
						p.sweepangle = $-(ANGSHIFT*PLUS)
					end
				end
			else
				p.charflags = $ & ~SF_NOSKID
			end
		end	

		--Spawn the 2.5 "dream aura"
		SMSRglow(s)
			
		//Electric discharge ground sparks, usually for HMS. Grounded sparks. Grounded Electricity"
		if s.hmselcharge and p.smsgraphix != 2
			if P_IsObjectOnGround(s)
					local ghs = P_SpawnMobjFromMobj(s, 
					SMSLocalRNG(-250, 250,s)*s.scale, 
					SMSLocalRNG(250, -250,s)*s.scale,
					0, MT_HMSWAVEAURA)
					if ghs and ghs.valid
						ghs.renderflags = RF_FULLBRIGHT
						ghs.state = S_HMSWAVEAURAG
						ghs.blendmode = AST_ADD
						ghs.target = s
						ghs.scale = $*10/SMSLocalRNG(4, 10,s)
						if (s.eflags & MFE_VERTICALFLIP)
							ghs.z = ghs.ceilingz
						else
							ghs.z = ghs.floorz						
						end
					end
					if (s.hmselcharge > 26)
					
						ghs = P_SpawnMobjFromMobj(s, 
						SMSLocalRNG(-450, 450,s)*s.scale, 
						SMSLocalRNG(450, -450,s)*s.scale,
						0, MT_HMSWAVEAURA)
						
						if ghs and ghs.valid
							ghs.renderflags = RF_FULLBRIGHT
							ghs.state = S_HMSWAVEAURAG
							ghs.blendmode = AST_ADD
							ghs.target = s
							ghs.scale = $*10/SMSLocalRNG(2, 7,s)
							if (s.eflags & MFE_VERTICALFLIP)
								ghs.z = ghs.ceilingz
							else
								ghs.z = ghs.floorz						
							end
						end
						if (s.hmselcharge > 40)
							ghs = P_SpawnMobjFromMobj(s, 
							SMSLocalRNG(-1250, 1250,s)*s.scale, 
							SMSLocalRNG(1250, -1250,s)*s.scale,
							0, MT_HMSWAVEAURA)
							if ghs and ghs.valid
								ghs.state = S_HMSWAVEAURAG
								ghs.renderflags = RF_FULLBRIGHT
								ghs.blendmode = AST_ADD
								ghs.target = s
								ghs.scale = $*11/SMSLocalRNG(1, 5,s)
								if (s.eflags & MFE_VERTICALFLIP)
									ghs.z = ghs.ceilingz
								else
									ghs.z = ghs.floorz
								end
							end
						end
						
					end
			end
			s.hmselcharge = $-1
		end
	end
end, MT_PLAYER)

--Boost Aura spawn code.
addHook("MobjSpawn", function(s)
	s.blendmode = AST_ADD
	s.renderflags = (s.renderflags == nil) and RF_FULLBRIGHT or $|RF_FULLBRIGHT
end, MT_SMSBOOSTAURA)
addHook("MobjThinker", function(s)
	if s.tics == 2
		if s.blue
			s.color = SKINCOLOR_SKY
			s.frame = E|TR_TRANS70
			s.scale = $*5/6
		elseif s.greeeeeeen
			s.color = SKINCOLOR_EMERALD
			s.frame = E|TR_TRANS70
			s.scale = $*5/6
		end
	end
end, MT_SMSBOOSTAURA)

addHook("MobjSpawn", function(s)
	s.abilitytogive = -1
	s.color = SKINCOLOR_BONE
end, MT_SMMK)
addHook("MobjThinker", function(s)
	if s.target and s.target.health
	local t = s.target
	
	local PUSHANGLE = t.player and t.player.footsweepanim
	and t.angle-ANGLE_90 + (t.frame & FF_FRAMEMASK)*ANG1*-50
	or leveltime*ANG1*33
	or 1
	
		if s.correctiontp == nil
			s.eflags = t.eflags
			s.scale = t.scale
			s.correctiontp = false
		end
		
		if t.player and t.player.footsweepanim
			if not s.correctiontp
				if (s.eflags & MFE_VERTICALFLIP)
					P_MoveOrigin(s, s.x, s.y, s.z+34*t.scale)
				end
				if t.player.footsweep02				
					s.momz = 0
				end
				if t.player.footsweep03
					s.blendmode = AST_ADD
					P_SetObjectMomZ(s, 8*FRACUNIT)
					s.flags2 = $|MF2_EXPLOSION
					P_Thrust(s, PUSHANGLE, t.scale*3)
				end
				s.correctiontp = true
			elseif t.player.footsweep03
				P_Thrust(s, PUSHANGLE, t.scale)
				if (t.player.footsweep03 < 17)
					s.blendmode = AST_TRANSLUCENT
				end
			end
		end
		
		if (s.state == S_SMMK2) or (s.state == S_SMMK4)
			if (not t.color or t.color == SKINCOLOR_YELLOW or (t.color >= SKINCOLOR_SUPERSILVER1))
				s.color = SKINCOLOR_CRIMSON
			else
				s.color = t.color
			end
			if s.smssmmk
				if (s.state == S_SMMK4)
					P_SetObjectMomZ(s, 4*FRACUNIT)
					s.momx = $*3/4
					s.momy = $*3/4
				else		
					P_SetObjectMomZ(s, 15000)
				end
			end
		elseif (s.state == S_SMMK3)
			s.color = SKINCOLOR_BONE
			if s.smssmmk
				P_SetObjectMomZ(s, 2*FRACUNIT)
			end
		elseif (s.state == S_SMMK5)
			s.color = SKINCOLOR_WHITE
			if s.smssmmk
				P_SetObjectMomZ(s, 6*FRACUNIT)
				s.momx = $*3/4
				s.momy = $*3/4
			end
		end
		if s.fuse and (s.fuse < 16) and (s.fuse % 2 == 0)
			local trans = min((s.frame & FF_TRANSMASK)+FRACUNIT, FF_TRANS90)
			s.frame = ($ & ~FF_TRANSMASK)|trans
		end		
	end
end, MT_SMMK)

addHook("MobjThinker", function(s)
	if s.INIT == nil
		s.INIT = true
		s.momx = 0 s.momy = 0
		P_SetObjectMomZ(s, 4500)
		A_SetScale(s, s.scale+50*FRACUNIT, 1)
		if not s.fuse
			s.fuse = 70		
		end
		if (s.scalespeed <= FRACUNIT/10)
			s.scalespeed = SMSLocalRNG(24000, 37000,s)
		end
		if not s.color //Why not choose a random color if Lua doesn't specify one?
			s.color = SMSLocalRNG(SKINCOLOR_WHITE, SKINCOLOR_SUPERGOLD5,s)
		end
	end
	if s.fuse
	--	s.spritexscale = $+(FRACUNIT/18)
	--	s.spriteyscale = $+(FRACUNIT/11)
		if (s.fuse < 16) and (s.fuse % 2 == 0)
			local trans = min((s.frame & FF_TRANSMASK)+FRACUNIT, FF_TRANS90)
			s.frame = ($ & ~FF_TRANSMASK)|trans
		end
	end
end, MT_HMSLIPILLAR)
