freeslot("MT_CINEMACAM",
"MT_MARTHOLOMEW",
"MT_MARIO_POWERUP",
"S_MARIO1",
"S_MARIO2",
"S_MARIO3",
"S_MARIOPAUSE",
"S_MARIO4",
"S_MARDED",
"SFX_MARMM",
"SFX_MARHM",
"SFX_MRSPN",
"SPR_MAR1",
"SPR_MAR2",
"SPR_MARP",
"SPR_MAR3",
"SPR_MAR4",
"SPR_MARD")
mobjinfo[MT_CINEMACAM] = {
	spawnstate = S_INVISIBLE,
	deathstate = S_NULL,
	painsound = sfx_none,
	deathsound = sfx_none,
	spawnhealth = 1,
	speed = 40*FRACUNIT,
	radius = 16*FRACUNIT,
	height = 130*FRACUNIT,
	mass = 100,
	damage = 20,
	flags = MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT
}
mobjinfo[MT_MARTHOLOMEW] = {
	spawnstate = S_MARIO1,
	deathstate = S_NULL,
	painsound = sfx_none,
	deathsound = sfx_none,
	spawnhealth = 1,
	speed = 40*FRACUNIT,
	radius = 42*FRACUNIT,
	height = 130*FRACUNIT,
	mass = 100,
	damage = 20
	--flags = MF_NOGRAVITY
}
states[S_MARDED] = {
	sprite = SPR_MARD,
	frame = A
}
states[S_MARIO1] = {
	sprite = SPR_MAR1,
	frame = A
}
states[S_MARIO2] = {
	sprite = SPR_MAR2,
	frame = FF_ANIMATE,
	var1 = 18,
	var2 = 2,
	tics = 24,
	nextstate = S_MARIOPAUSE
}
states[S_MARIOPAUSE] = {
	sprite = SPR_MARP,
	frame = A,
	tics = 70,
	nextstate = S_MARIO3
}
states[S_MARIO3] = {
	sprite = SPR_MAR1,
	frame = A|FF_ANIMATE,
	tics = 70,
	nextstate = S_MARIO4
}
states[S_MARIO4] = {
	sprite = SPR_MAR3,
	frame = A|FF_ANIMATE,
	var1 = 3,
	var2 = 1
}
local button = BT_CUSTOM2
local button2 = BT_ATTACK
addHook("PlayerThink", function(p)
	if not p.awayviewtics and (p.cmd.buttons & button)
		local cam = P_SpawnMobj(p.mo.x, p.mo.y, p.mo.z+675*FRACUNIT, MT_CINEMACAM)
		cam.angle = p.mo.angle
		p.awayviewmobj = cam
		p.awayviewtics = 50
		p.awayviewaiming = FixedAngle(-5*FRACUNIT)
	end
	if not (p.cmd.buttons & BT_CUSTOM3)
		if p.awayviewtics > 1
			p.awayviewtics = max($, 50)
		end
	else
		p.awayviewtics = min($, 1)
	end
	if not (p.martha and p.martha.valid) and (p.cmd.buttons & button2)
		local mexico = P_SpawnMobjFromMobj(p.mo, 0, 0, 0, MT_MARTHOLOMEW)
		p.martha = mexico
		mexico.scale = FRACUNIT+FRACUNIT/2+FRACUNIT/4
		mexico.angle = p.mo.angle
		if (p.mo.skin == "mario")
			mexico.state = S_MARDED
			p.mo.state = S_INVISIBLE
			local spawnstate = mobjinfo[MT_1UP_ICON].spawnstate
			local nextstate = spawnstate and states[spawnstate].nextstate
			mobjinfo[MT_MARIO_POWERUP].seestate = nextstate
			mobjinfo[MT_MARIO_POWERUP].attacksound = mobjinfo[MT_1UP_ICON].seesound
			local oneup = P_SpawnMobjFromMobj(p.mo, 0, 0, 580*FRACUNIT, MT_MARIO_POWERUP)
			oneup.powerupvar = -1
			p.yourmom = oneup
		end
	end
	--if (p.cmd.buttons & button)
		--p.awayviewtics = 50
	--end
	if p.lifeold == nil
		p.lifeold = p.lives
	end
	if p.fuckoff and p.fuckoff > 0
		if p.fuckoff > 5 and p.fuckoff < 30
			--p.mo.state = S_PLAY_STND
		end
		if p.fuckoff == 15 
			p.mo.state = S_PLAY_STND
			if p.martha and p.martha.valid
				P_RemoveMobj(p.martha)
			end
		end
		p.fuckoff = $-1
	end
	if p.lifeold < p.lives
		--p.fuckoff = 35
		--P_FlashPal(p, PAL_WHITE, 35)
	end
	p.lifeold = p.lives
		--v.draw(x, y, v.cachePatch("AEPURP"), V_PERPLAYER)
	local dist = 20
	searchBlockmap("objects", function(_, mark)
		if not (mark.type == MT_MARTHOLOMEW and p.mo.state == S_PLAY_BOWSER_MELEE) return end
		if mark and mark.valid and mark.health
			P_InstaThrust(mark, mark.angle, 45*FRACUNIT)
			P_StartQuake(10*FRACUNIT, 5)
			mark.bitchslap = true
			if not S_SoundPlaying(p.mo, sfx_bsnipe)
				S_StartSound(p.mo, sfx_bsnipe) 
			end
			P_SetObjectMomZ(mark, 12*FRACUNIT, false)
			mark.flags = $ | MF_NOGRAVITY
		end
	end, p.mo, p.mo.x - dist*p.mo.scale, p.mo.x + dist*p.mo.scale, p.mo.y - dist*p.mo.scale, p.mo.y + dist*p.mo.scale)
	if p.awayviewmobj and p.awayviewmobj.valid and not (P_IsObjectOnGround(p.awayviewmobj))
		if (p.cmd.buttons & BT_CUSTOM2)
			P_SetObjectMomZ(p.awayviewmobj, -3*FRACUNIT, false)
		else
			if p.awayviewmobj.momz < 0
				P_SetObjectMomZ(p.awayviewmobj, FRACUNIT/4, true)
			end
			if p.awayviewmobj.momz >= 0
				p.awayviewmobj.momz = 0
			end
		end
	end
end)
addHook("MobjThinker", function(mo)
	if mo and mo.valid
		mo.momx = 0
		mo.momy = 0
		mo.momz = -3*FRACUNIT
	end
	--end
end, MT_MARIO_POWERUP)
/*hud.add(function(v, player, cam)
	if player and player.valid and player.mo and player.mo.valid
	and player.mo.health and player.mo.skin == "mario" --and player.fuckoff > 0
		if hud.enabled("time")
            hud.disable("time")
        end
        if hud.enabled("score")
            hud.disable("score")
        end
        if hud.enabled("lives")
            hud.disable("lives")
        end
        if hud.enabled("rings")
            hud.disable("rings")
        end
		local x = -100
		local y = -100
		if player.fuckoff and player.fuckoff > 5 and player.fuckoff < 30
			v.draw(x, y, v.cachePatch("WTFLS"), V_PERPLAYER)
			--print("test")
		end
	end
end, "game")*/
addHook("MobjThinker", function(mo)
	if (players[0].cmd.buttons & BT_TOSSFLAG) and mo.state == S_MARIO1
		mo.state = S_MARIO2
	end
	if mo.bitchslap
		mo.rollangle = $ + FixedAngle(10*FRACUNIT)
	end
	if mo.state == S_MARIO2
		if mo.tics == 1
			S_StartSound(mo, sfx_malg)
		elseif mo.tics == 23
			S_StartSound(mo, sfx_mrspn)
		end
	elseif mo.state == S_MARIO3
		if mo.tics == 1
			S_StartSound(mo, sfx_marmm)
		elseif mo.tics == 69
			S_StartSound(mo, sfx_marhm)
		end
	end
end, MT_MARTHOLOMEW)
/*addHook("MobjMoveCollide", function(mobj, mark)
	if mobj and mobj.valid and mobj.player and mobj.health and mobj.skin == "bowser" and mobj.state == S_PLAY_BOWSER_MELEE
		print("testing testing fuck you")
		if mark and mark.valid and mark.type == MT_MARTHOLOMEW
			print("you suck")
			P_InstaThrust(mark, mark.angle, 20*FRACUNIT)
			mark.bitchslap = true
			P_SetObjectMomZ(mark, 12*FRACUNIT, false)
			mark.flags = $ | MF_NOGRAVITY
		end
	end
end, MT_PLAYER)*/