local scriptname = "Intangible Cam V1.0 by CobaltBW" COM_AddCommand("nosolidcam", function(player) if not(player) then return end if not(player.nosolidcam) player.nosolidcam = true CONS_Printf(player,"Disabled camera solidity") else player.nosolidcam = false CONS_Printf(player,"Enabled camera solidity") end end) addHook('ThinkFrame',do for player in players.iterate local mo = player.mo player.awayviewtics = 2 if player.cam == nil or not(player.cam.valid) then player.cam = P_SpawnMobj(player.realmo.x,player.realmo.y,player.realmo.z,MT_ALTVIEWMAN) player.cam2 = P_SpawnMobj(player.realmo.x,player.realmo.y,player.realmo.z,MT_ALTVIEWMAN) player.cam.newz = player.realmo.z player.cam2.newz = player.realmo.z player.camdist = player.realmo.scale*320 end if not(mo and mo.valid) or mo.flags2&MF2_TWOD or twodlevel or player.spectator or maptol&(TOL_NIGHTS|TOL_XMAS) or CV_FindVar('sessionanalog').value or not(CV_FindVar('chasecam').value) or player.nosolidcam != true if player.awayviewtics player.awayviewtics = 0 end continue end local cam = player.cam local cam2 = player.cam2 local flip = P_MobjFlip(mo) local dist = FixedMul( FixedMul( FixedMul( cos(player.aiming), CV_FindVar("cam_dist").value ), player.camerascale ), mo.scale ) local height = CV_FindVar("cam_height").value local heightfactor = FixedMul(sin(player.aiming),CV_FindVar("cam_dist").value*2) if flip == 1 height = $ - min(-FRACUNIT,heightfactor) else height = $ - max(FRACUNIT,heightfactor) end height = FixedMul(FixedMul($,mo.scale),player.camerascale) dist = FixedMul($,FRACUNIT-min(sin(player.aiming),0)) //Angle local ang = R_PointToAngle2(cam2.x,cam2.y,mo.x,mo.y) local ang = cam2.angle local camturn = CV_FindVar("cam_rotspeed").value local camdiff = ang-mo.angle if camdiff != 0 ang = $ - FixedMul( camdiff, min(FRACUNIT,FRACUNIT*camturn/15) ) end P_TeleportMove(cam, mo.x-FixedMul(cos(ang),dist),mo.y-FixedMul(sin(ang),dist), mo.z+height ) player.camdist = $/10*9 + dist/10 cam2.newz = mo.z+height local dist = player.camdist P_TeleportMove(cam2,mo.x-FixedMul(cos(ang),dist),mo.y-FixedMul(sin(ang),dist),cam2.newz) cam2.angle = ang //R_PointToAngle2(cam2.x,cam2.y,mo.x,mo.y) if flip*player.aiming > 0 player.awayviewaiming = 0 else player.awayviewaiming = player.aiming end player.awayviewmobj = cam2 end end) print("\x83"..scriptname.."\x80 |\x83 nosolidcam\x80 to toggle. OpenGL recommended, analog/simple controls not supported!")