freeslot("MT_INK")

addHook("PlayerThink", function(player)
	if player.valid and player.playerstate == PST_LIVE and not (player.powers[pw_carry] == CR_NIGHTSMODE)
	and player.mo.skin == "paint_sonic"
		local gotoz = player.mo.z+FixedMul(150*FRACUNIT, sin(player.aiming))
		local gotox = player.mo.x+FixedMul(150*FRACUNIT, cos(player.mo.angle))
		local gotoy = player.mo.y+FixedMul(150*FRACUNIT, sin(player.mo.angle))
		if player.inktype == nil
			player.inktype = 1
		end
		if not multiplayer
			if player.inktype <= 0
				player.inktype = 2
			end
			if player.inktype >= 3
				player.inktype = 1
			end	
		else
			if player.inktype <= 0
				player.inktype = 3
			end
			if player.inktype >= 4
				player.inktype = 1
			end
		end
		if player.cmd.buttons & BT_CUSTOM3
			player.inktype = $1 + 1
		end
			if player.cmd.buttons & BT_WEAPONNEXT
			player.inktype = $1 + 1
		end	
		if player.cmd.buttons & BT_WEAPONPREV
			player.inktype = $1 - 1
		end
		if player.cmd.buttons & BT_CUSTOM2
		and player.mo.skin == "paint_sonic"
			local paint = P_SpawnMobj(gotox, gotoy, gotoz, MT_INK)
			paint.die = 250
			paint.fuse = 250
			paint.scale = FRACUNIT*2
			paint.color = SKINCOLOR_GREEN
			if player.inktype == 2
				paint.color = SKINCOLOR_RED
				paint.flags = $ & ~MF_SOLID
				paint.spawner = player.mo
			end	
			if multiplayer
				if player.inktype == 3
				and player.mo.skin == "paint_sonic"
					paint.color = SKINCOLOR_YELLOW
					paint.flags = $|MF_SPECIAL|MF_NOTHINK
					paint.flags = $ & ~MF_SOLID
					paint.flash = true
					paint.fuse = 9999
					paint.die = 9999
					paint.scale = FRACUNIT*3
				end	
			end
			player.fire = true
		else
			player.fire = false
		end
	end
end)

local bubble = {
sfx_bubbl1, sfx_bubbl2,
sfx_bubbl3, sfx_bubbl4,
sfx_bubbl5}

addHook("MobjThinker", function(mo)
	if mo.valid
		if mo.flash == nil
			mo.flash = false
		end
		if mo.die
			if mo.die > 0
				mo.die = $ - 1
			end
			if mo.die <= 50
				if (leveltime%4) <= 2
					mo.flags2 = $|MF2_DONTDRAW
				else
					mo.flags2 = $ & ~MF2_DONTDRAW
				end
			end
		end	
		if mo.flash == true
			if (leveltime%4) <= 2
				mo.color = SKINCOLOR_WHITE
			else
				mo.color = SKINCOLOR_YELLOW
			end
		end
	end
end, MT_INK)

addHook("TouchSpecial", function(paint, mo)
	if paint.valid and paint.flags & MF_SPECIAL
		if mo.valid //and displayplayer == mo.player
			if paint.flash == true
			and mo.skin == "paint_sonic"
				paint.flash = false
				paint.color = SKINCOLOR_BLUE
				paint.fuse = 5
				paint.flags = $ & ~MF_NOTHINK
			end
			return true
		end
	end
end, MT_INK)

local function redink(mo, mobj)
	if mobj.type == MT_INK and mobj.color == SKINCOLOR_RED and not (mobj.flags & MF_SOLID) and (mo.flags & MF_BOSS or mo.flags & MF_ENEMY or mo.flags & MF_MONITOR)
	
		if (mobj.z > mo.z+mo.height)
        or (mo.z > mobj.z+mobj.height)
        return
        end
		
		if mobj.spawner
			P_DamageMobj(mo, mobj.spawner, mobj.spawner)
		end	
	end
end

addHook("MobjCollide", redink, MT_NULL)
addHook("MobjMoveCollide", redink, MT_NULL)	

local function HUD(v, player)
	if player.mo.skin == "paint_sonic" and player.valid and player.playerstate == PST_LIVE and not (player.powers[pw_carry] == CR_NIGHTSMODE)
		v.drawScaled(160*FRACUNIT, 201*FRACUNIT, FRACUNIT/2, v.cachePatch("BAR"), V_SNAPTOBOTTOM|V_HUDTRANS)
		if multiplayer
		and player.mo.skin == "paint_sonic"
			if player.inktype == 1
			and player.mo.skin == "paint_sonic"
				v.drawScaled((160-25)*FRACUNIT, (190-2)*FRACUNIT, FRACUNIT*2, v.getSpritePatch(SPR_INK_), V_SNAPTOBOTTOM|V_HUDTRANS, v.getColormap("sonic", SKINCOLOR_GREEN))
			else
				v.drawScaled((160-25)*FRACUNIT, (190-2)*FRACUNIT, FRACUNIT*2, v.getSpritePatch(SPR_INK_), V_SNAPTOBOTTOM|V_HUDTRANS, v.getColormap("sonic", SKINCOLOR_FOREST))
			end
			if player.inktype == 2
			and player.mo.skin == "paint_sonic"
				v.drawScaled(160*FRACUNIT, (190-2)*FRACUNIT, FRACUNIT*2, v.getSpritePatch(SPR_INK_), V_SNAPTOBOTTOM|V_HUDTRANS, v.getColormap("sonic", SKINCOLOR_RED))
			else
				v.drawScaled(160*FRACUNIT, (190-2)*FRACUNIT, FRACUNIT*2, v.getSpritePatch(SPR_INK_), V_SNAPTOBOTTOM|V_HUDTRANS|V_50TRANS, v.getColormap("sonic", SKINCOLOR_CRIMSON))
			end	
			if player.inktype == 3
			and player.mo.skin == "paint_sonic"
				v.drawScaled((160+25)*FRACUNIT, (190-2)*FRACUNIT, FRACUNIT*2, v.getSpritePatch(SPR_INK_), V_SNAPTOBOTTOM|V_HUDTRANS, v.getColormap("sonic", SKINCOLOR_YELLOW))
			else
				v.drawScaled((160+25)*FRACUNIT, (190-2)*FRACUNIT, FRACUNIT*2, v.getSpritePatch(SPR_INK_), V_SNAPTOBOTTOM|V_HUDTRANS|V_50TRANS, v.getColormap("sonic", SKINCOLOR_OLIVE))
			end	
		else
			if player.inktype == 1
			and player.mo.skin == "paint_sonic"
				v.drawScaled((160-20)*FRACUNIT, (190-2)*FRACUNIT, FRACUNIT*2, v.getSpritePatch(SPR_INK_), V_SNAPTOBOTTOM|V_HUDTRANS, v.getColormap("sonic", SKINCOLOR_GREEN))
			else
				v.drawScaled((160-20)*FRACUNIT, (190-2)*FRACUNIT, FRACUNIT*2, v.getSpritePatch(SPR_INK_), V_SNAPTOBOTTOM|V_HUDTRANS|V_50TRANS, v.getColormap("sonic", SKINCOLOR_FOREST))
			end	
			if player.inktype == 2
			and player.mo.skin == "paint_sonic"
				v.drawScaled((160+20)*FRACUNIT, (190-2)*FRACUNIT, FRACUNIT*2, v.getSpritePatch(SPR_INK_), V_SNAPTOBOTTOM|V_HUDTRANS, v.getColormap("sonic", SKINCOLOR_RED))
			else
				v.drawScaled((160+20)*FRACUNIT, (190-2)*FRACUNIT, FRACUNIT*2, v.getSpritePatch(SPR_INK_), V_SNAPTOBOTTOM|V_HUDTRANS|V_50TRANS, v.getColormap("sonic", SKINCOLOR_CRIMSON))
			end	
		end
	end
end
hud.add(HUD, "game")