freeslot(
"MT_WARIODIAMOND",
"MT_WARIOCOIN",
"MT_WARIOCOIN1",
"MT_WARIOCOIN2",
"MT_WARIOCOIN3",
"MT_WARIOCOIN4",
"S_WBRP",
"S_WSTC",
"S_WSBC",
"S_WSSC",
"S_WSGC",
"S_WTBD",
"S_WWRC",
"S_WCOIN",
"S_WBOX1",
"S_WBOX2",
"S_WBOX3",
"S_WBOX4",
"SPR_WBRP",
"SPR_WSTC",
"SPR_WSBC",
"SPR_WSSC",
"SPR_WSGC",
"SPR_WTBD",
"SPR_WOIN",
"SPR_WTRC",
"SPR_WTRO"
)

mobjinfo[MT_WARIODIAMOND] = {
	spawnstate = S_WTBD,
	spawnhealth = 1000,
	deathstate = S_NULL,
	speed = 0<<FRACBITS,
	radius = 16*FRACUNIT,
	height = 21*FRACUNIT,
	flags = MF_SPECIAL,
}
mobjinfo[MT_WARIOCOIN] = {
	spawnstate = S_WWRC,
	spawnhealth = 1000,
	deathstate = S_NULL,
	speed = 0<<FRACBITS,
	radius = 8*FRACUNIT,
	height = 16*FRACUNIT,
}
mobjinfo[MT_WARIOCOIN1] = {
	spawnstate = S_WSTC,
	spawnhealth = 1000,
	deathstate = S_NULL,
	speed = 0<<FRACBITS,
	radius = 8*FRACUNIT,
	height = 16*FRACUNIT,
	flags = MF_SPECIAL,
}
mobjinfo[MT_WARIOCOIN2] = {
	spawnstate = S_WSBC,
	spawnhealth = 1000,
	deathstate = S_NULL,
	speed = 0<<FRACBITS,
	radius = 8*FRACUNIT,
	height = 16*FRACUNIT,
	flags = MF_SPECIAL,
}
mobjinfo[MT_WARIOCOIN3] = {
	spawnstate = S_WSSC,
	spawnhealth = 1000,
	deathstate = S_NULL,
	speed = 0<<FRACBITS,
	radius = 8*FRACUNIT,
	height = 16*FRACUNIT,
	flags = MF_SPECIAL,
}
mobjinfo[MT_WARIOCOIN4] = {
	spawnstate = S_WSGC,
	spawnhealth = 1000,
	deathstate = S_NULL,
	speed = 0<<FRACBITS,
	radius = 8*FRACUNIT,
	height = 16*FRACUNIT,
	flags = MF_SPECIAL,
}

states[S_WBRP] = {
	sprite = SPR_WBRP,
	frame = FF_ANIMATE|A,
	tics = 12,
	var1 = 2,
	var2 = 4,
	nextstate = S_WBRP
}
states[S_WSTC] = {
	sprite = SPR_WSTC,
	frame = FF_ANIMATE|A,
	tics = 12,
	var1 = 3,
	var2 = 3,
	nextstate = S_WSTC
}
states[S_WSBC] = {
	sprite = SPR_WSBC,
	frame = FF_ANIMATE|A,
	tics = 18,
	var1 = 5,
	var2 = 3,
	nextstate = S_WSBC
}
states[S_WSSC] = {
	sprite = SPR_WSSC,
	frame = FF_ANIMATE|A,
	tics = 18,
	var1 = 5,
	var2 = 3,
	nextstate = S_WSSC
}
states[S_WSGC] = {
	sprite = SPR_WSGC,
	frame = FF_ANIMATE|A,
	tics = 21,
	var1 = 6,
	var2 = 3,
	nextstate = S_WSGC
}
states[S_WTBD] = {
	sprite = SPR_WTBD,
	frame = FF_ANIMATE|A,
	tics = 48,
	var1 = 15,
	var2 = 3,
	nextstate = S_WTBD
}
states[S_WWRC] = {
	sprite = SPR_NULL,
	frame = A,
	tics = 3,
	nextstate = S_NULL
}
states[S_WCOIN] = {
	sprite = SPR_WOIN,
	frame = FF_ANIMATE|A,
	tics = -1,
	var1 = 15,
	var2 = 2,
	nextstate = S_WCOIN
}
states[S_WBOX1] = {
	sprite = SPR_WTRC,
	frame = A,
	tics = -1,
	nextstate = S_WBOX1
}
states[S_WBOX2] = {
	sprite = SPR_WTRC,
	frame = FF_ANIMATE|B,
	tics = 12,
	var1 = 2,
	var2 = 4,
	nextstate = S_WBOX3
}
states[S_WBOX3] = {
	sprite = SPR_WTRC,
	frame = D,
	tics = 30,
	nextstate = S_WBOX4
}
states[S_WBOX4] = {
	sprite = SPR_WTRO,
	frame = FF_ANIMATE|A,
	tics = 90,
	var1 = 1,
	var2 = 4,
	nextstate = S_NULL
}
COM_AddCommand("wland", do
	if consoleplayer.warioland != false
		consoleplayer.warioland = false
		print("Wario Land off")
	else
		consoleplayer.warioland = true
		print("Wario Land on")
	end
end)

//Rings
addHook("MobjSpawn", function(mobj)
	if skins[consoleplayer.skin].name == "warui"
	and not multiplayer
	and consoleplayer.warioland != false then
		mobj.spritexscale = FRACUNIT/2*3
		mobj.spriteyscale = FRACUNIT/2*3
		mobj.state = S_WBRP
	end
end, MT_RING)

addHook("TouchSpecial", function(s, t)
	if t and t.valid
	and s.state == S_WBRP then
		local wrup = P_SpawnMissile (s, s, MT_SPARK)
		wrup.colorized = true
		wrup.color = SKINCOLOR_ICY
		wrup.scale = FRACUNIT/2*3
		S_StartSound(t, sfx_itemup)
		P_GivePlayerRings(t.player, 1)
		P_RemoveMobj(s)
	return true
	end
end, MT_RING)

addHook("TouchSpecial", function(s, t)
	if t.skin != "warui" then return end
	if not multiplayer
	and consoleplayer.warioland != false
	and s.state != S_WCOIN then
		s.state = S_WCOIN
		if P_CanPickupItem(t.player)
			local wrup = P_SpawnMissile (s, s, MT_SPARK)
			S_StartSound(t, sfx_mario4)
			P_GivePlayerRings(t.player, 1)
			P_RemoveMobj(s)
		end
	return true
	end
end, MT_FLINGRING)

addHook("MobjSpawn", function(c)
	local coin = (P_RandomRange(1, 4))
	if coin == 1 then
		c.type = MT_WARIOCOIN1
		c.fuse = TICRATE/2*1
	elseif coin == 2 then
		c.type = MT_WARIOCOIN2
		c.fuse = TICRATE/2*1
	elseif coin == 3 then
		c.type = MT_WARIOCOIN3
		c.fuse = TICRATE/2*1
	elseif coin == 4 then
		c.type = MT_WARIOCOIN4
		c.fuse = TICRATE/2*1
	end
return true
end, MT_WARIOCOIN)

addHook("MobjFuse", function(c)
	if c.wcoin == true then
		c.flags = $|MF_SPECIAL
		c.fuse = TICRATE*8
		c.wcoin = false
		c.state = c.info.spawnstate
	return true
	end
end, MT_WARIOCOIN1)
addHook("MobjFuse", function(c)
	if c.wcoin == true then
		c.flags = $|MF_SPECIAL
		c.fuse = TICRATE*8
		c.wcoin = false
		c.state = c.info.spawnstate
	return true
	end
end, MT_WARIOCOIN2)
addHook("MobjFuse", function(c)
	if c.wcoin == true then
		c.flags = $|MF_SPECIAL
		c.fuse = TICRATE*8
		c.wcoin = false
		c.state = c.info.spawnstate
	return true
	end
end, MT_WARIOCOIN3)
addHook("MobjFuse", function(c)
	if c.wcoin == true then
		c.flags = $|MF_SPECIAL
		c.fuse = TICRATE*8
		c.wcoin = false
		c.state = c.info.spawnstate
	return true
	end
end, MT_WARIOCOIN4)


addHook("TouchSpecial", function(s, t)
	if t and t.valid then
		P_AddPlayerScore(t.player, 25)
		S_StartSound(t, sfx_itemup)
		P_SpawnMissile (s, s, MT_SPARK)
		P_RemoveMobj(s)
	end
end, MT_WARIOCOIN1)
addHook("TouchSpecial", function(s, t)
	if t and t.valid then
		P_AddPlayerScore(t.player, 50)
		S_StartSound(t, sfx_itemup)
		P_SpawnMissile (s, s, MT_SPARK)
		P_RemoveMobj(s)
	end
end, MT_WARIOCOIN2)
addHook("TouchSpecial", function(s, t)
	if t and t.valid then
		P_AddPlayerScore(t.player, 75)
		S_StartSound(t, sfx_itemup)
		P_SpawnMissile (s, s, MT_SPARK)
		P_RemoveMobj(s)
	end
end, MT_WARIOCOIN3)
addHook("TouchSpecial", function(s, t)
	if t and t.valid then
		P_AddPlayerScore(t.player, 100)
		S_StartSound(t, sfx_itemup)
		P_SpawnMissile (s, s, MT_SPARK)
		P_RemoveMobj(s)
	end
end, MT_WARIOCOIN4)

addHook("MobjFuse", function(m)
	if m.esuf != true
		m.fuse = TICRATE*8
		m.flags = $|MF_SPECIAL
	return true
	end
end, MT_WARIODIAMOND)
addHook("TouchSpecial", function(s, t)
	if t and t.valid then
		P_GivePlayerRings(t.player, 25)
		P_AddPlayerScore(t.player, 1000)
		S_StartSound(t, sfx_itemup)
		local dmnd = P_SpawnMissile (s, s, MT_SPARK)
		dmnd.colorized = true
		dmnd.color = SKINCOLOR_ICY
		P_RemoveMobj(s)
	end
end, MT_WARIODIAMOND)

addHook("MobjThinker", function(m)
	if skins[consoleplayer.skin].name == "warui"
	and m.state == S_BOX_POP1
	and consoleplayer.warioland != false
	and m.poped != true then
		m.state = S_WBOX2
		local wcoin1 = P_SpawnMissile(m, m, MT_WARIOCOIN)
		wcoin1.flags = $&~MF_SPECIAL
		wcoin1.momx = P_RandomRange(-3, -1)*FRACUNIT
		wcoin1.momy = P_RandomRange(-3, -1)*FRACUNIT
		wcoin1.momz = 10*FRACUNIT
		wcoin1.scale = 2*FRACUNIT
		wcoin1.state = wcoin1.info.spawnstate
		wcoin1.wcoin = true
		local wcoin2 = P_SpawnMissile(m, m, MT_WARIOCOIN)
		wcoin2.flags = $&~MF_SPECIAL
		wcoin2.momx = 0*FRACUNIT
		wcoin2.momy = 0*FRACUNIT
		wcoin2.momz = 11*FRACUNIT
		wcoin2.scale = 2*FRACUNIT
		wcoin2.state = wcoin2.info.spawnstate
		wcoin2.wcoin = true
		local wcoin3 = P_SpawnMissile(m, m, MT_WARIOCOIN)
		wcoin3.flags = $&~MF_SPECIAL
		wcoin3.momx = P_RandomRange(1, 3)*FRACUNIT
		wcoin3.momy = P_RandomRange(1, 3)*FRACUNIT
		wcoin3.momz = 10*FRACUNIT
		wcoin3.scale = 2*FRACUNIT
		wcoin3.state = wcoin3.info.spawnstate
		wcoin3.wcoin = true
		local wcoin4 = P_SpawnMissile(m, m, MT_WARIOCOIN)
		wcoin4.flags = $&~MF_SPECIAL
		wcoin4.momx = P_RandomRange(-2, 2)*FRACUNIT
		wcoin4.momy = P_RandomRange(-2, 2)*FRACUNIT
		wcoin4.momz = 10*FRACUNIT
		wcoin4.scale = 2*FRACUNIT
		wcoin4.state = wcoin4.info.spawnstate
		wcoin4.wcoin = true
		local wcoin5 = P_SpawnMissile(m, m, MT_WARIOCOIN)
		wcoin5.flags = $&~MF_SPECIAL
		wcoin5.momx = P_RandomRange(-2, 2)*FRACUNIT
		wcoin5.momy = P_RandomRange(-2, 2)*FRACUNIT
		wcoin5.momz = 10*FRACUNIT
		wcoin5.scale = 2*FRACUNIT
		wcoin5.state = wcoin5.info.spawnstate
		wcoin5.wcoin = true
		local wcoin6 = P_SpawnMissile(m, m, MT_WARIOCOIN)
		wcoin6.flags = $&~MF_SPECIAL
		wcoin6.momx = P_RandomRange(-2, 2)*FRACUNIT
		wcoin6.momy = P_RandomRange(-2, 2)*FRACUNIT
		wcoin6.momz = 10*FRACUNIT
		wcoin6.scale = 2*FRACUNIT
		wcoin6.state = wcoin6.info.spawnstate
		wcoin6.wcoin = true
		local wcoin7 = P_SpawnMissile(m, m, MT_WARIOCOIN)
		wcoin7.flags = $&~MF_SPECIAL
		wcoin7.momx = P_RandomRange(-2, 2)*FRACUNIT
		wcoin7.momy = P_RandomRange(-2, 2)*FRACUNIT
		wcoin7.momz = 10*FRACUNIT
		wcoin7.scale = 2*FRACUNIT
		wcoin7.state = wcoin7.info.spawnstate
		wcoin7.wcoin = true
		if P_RandomChance(FRACUNIT/5) then
			local wdime = P_SpawnMissile(m, m, MT_WARIODIAMOND)
			wdime.flags = $&~MF_SPECIAL
			wdime.momx = P_RandomRange(-2, 2)*FRACUNIT
			wdime.momy = P_RandomRange(-2, 2)*FRACUNIT
			wdime.momz = 10*FRACUNIT
			wdime.scale = 2*FRACUNIT
			wdime.state = wdime.info.spawnstate
			wdime.fuse = TICRATE/2*1
			wdime.wcoin = true
			m.poped = true
		else
			m.poped = true
		end
	end
end, MT_RING_BOX)

addHook("MobjSpawn", function(mobj)
	if skins[consoleplayer.skin].name == "warui"
	and not multiplayer
	and consoleplayer.warioland != false then
		mobj.state = S_WBOX1
		mobj.spriteyscale = FRACUNIT/4*5
	end
end, MT_RING_BOX)

addHook("MobjSpawn", function(mobj)
	if skins[consoleplayer.skin].name == "warui"
	and not multiplayer
	and consoleplayer.warioland != false then
		mobj.state = S_INVISIBLE
	end
end, MT_RING_ICON)