addHook("ThinkFrame", do
	for player in players.iterate
		//really fast time
		if (player.mo and player.mo.skin == "m.jimmyharold")
			if not player.powers[pw_invulnerability]
			and not player.powers[pw_extralife]
			and not player.powers[pw_super]
			and not (player.exiting)
				if player.powers[pw_sneakers] then
					player.mo.state = S_PLAY_SNEAKERWORRY
					P_Thrust(player.mo ,player.drawangle, (2*FRACUNIT))
				end
			end
		end
	end
end)

//climbing
addHook("MobjMoveBlocked", function(mo)
    if not mo.player then return end
	if mo.skin == "m.jimmyharold" then
		mo.player.jimwallrun = $ or 0
		if (mo.player.cmd.buttons & BT_CUSTOM1) 
		and mo.player.jimwallrun <= 3*TICRATE then
			P_InstaThrust(mo ,mo.angle, (10*FRACUNIT))
			if P_GetPlayerControlDirection(mo.player) == 0 then
				mo.momz = 0
				if mo.state != S_PLAY_RIDE then
					mo.state = S_PLAY_RIDE
				end
			elseif P_GetPlayerControlDirection(mo.player) == 1 then
				P_SetObjectMomZ(mo, 7*FRACUNIT, false)
				P_SpawnGhostMobj(mo)
				mo.player.jimwallrun = $ + 1
				if mo.state != S_PLAY_ROLL then
					mo.state = S_PLAY_ROLL
				end
			elseif P_GetPlayerControlDirection(mo.player) == 2 then
				P_SetObjectMomZ(mo,(0 - 14*FRACUNIT), false)
				P_SpawnGhostMobj(mo)
				mo.player.jimwallrun = $ + 1
				if mo.state != S_PLAY_FALL then
					mo.state = S_PLAY_FALL
				end
			end
		end
	end
end)

addHook("MobjThinker", function(mo)
    if not mo.player then return end
	if mo.skin == "m.jimmyharold" then
		mo.player.jimwallrun = $ or 0
		if P_IsObjectOnGround(mo) then
			mo.player.jimwallrun = 0
		elseif (mo.player.cmd.buttons & BT_CUSTOM1) 
		and mo.player.jimwallrun <= 3*TICRATE 
		and mo.player.jimwallrun >= 1 then
			P_InstaThrust(mo ,mo.angle, (10*FRACUNIT))
		end
	end
end)

local JIMDRAWCBG = function(v, player, cam)
	if player.mo and player.mo.valid and player.mo.skin == "m.jimmyharold" then
		v.draw(16, 59, v.cachePatch("JIMENERGYHOLDER"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		if player.jimwallrun >= 88
		and player.jimwallrun << 96
		and (leveltime % 4 == 1) then
			v.drawString(16, 59, "POWER", V_YELLOWMAP|V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun <= 87 then
			v.drawString(16, 59, "POWER", V_YELLOWMAP|V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		end
	end
end

local JIMDRAWCBR = function(v, player, cam)
	local mo = players[0].mo
	if player.mo and player.mo.valid and player.mo.skin == "m.jimmyharold" then
		if player.jimwallrun >= 88
		and player.jimwallrun << 96 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGHALF"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun >= 80
		and player.jimwallrun << 88 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun >= 72
		and player.jimwallrun << 80 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(65, 61, v.cachePatch("JIMBARSEGHALF"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun >= 64
		and player.jimwallrun << 72 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(65, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun >= 56
		and player.jimwallrun << 64 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(65, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(71, 61, v.cachePatch("JIMBARSEGHALF"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun >= 48
		and player.jimwallrun << 56 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(65, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(71, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun >= 40
		and player.jimwallrun << 48 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(65, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(71, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(77, 61, v.cachePatch("JIMBARSEGHALF"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun >= 32
		and player.jimwallrun << 40 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(65, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(71, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(77, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun >= 24
		and player.jimwallrun << 32 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(65, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(71, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(77, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(83, 61, v.cachePatch("JIMBARSEGHALF"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun >= 16
		and player.jimwallrun << 24 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(65, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(71, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(77, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(83, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun >= 8
		and player.jimwallrun << 16 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(65, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(71, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(77, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(83, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(89, 61, v.cachePatch("JIMBARSEGHALF"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		elseif player.jimwallrun == 0
		or player.jimwallrun << 8 then
			v.draw(59, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(65, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(71, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(77, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(83, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
			v.draw(89, 61, v.cachePatch("JIMBARSEGFULL"), V_HUDTRANS|V_SNAPTOBOTTOM|V_SNAPTOLEFT)
		end
	end
end

hud.add(JIMDRAWCBG, "game")
hud.add(JIMDRAWCBR, "game")


//flat man [[
//addHook("MobjMoveBlocked", function(mo)
//	local player = players[0]
//	local mo = players[0].mo
//	if (player.mo and player.mo.skin == "m.jimmyharold") then
//		player.mo.state = S_PLAY_JIMBUMP
//		player.jimwallangle = R_PointToAngle2(mo.x,mo.y,P_ClosestPointOnLine(mo.x,mo.y,player.jimwall))
//		player.drawangle = player.jimwallangle
//	end
//end)
//	

	

