anchor.diff:  	if(isturf(turf_source))
   		// 3D sounds, the technology is here!
   		var/turf/T = get_turf(src)
  -		S.volume -= get_dist(T, turf_source) * 2 //multiplicative falloff to add on top of natural audio falloff.
  -		var/datum/gas_mixture/environment = T.return_air()
  -		if(get_dist(T, turf_source) > 2)
  -			S.volume -= environment.return_pressure()/100 + 1
  -		if (S.volume < 0)
  -			S.volume = 0
  +
  +		//sound volume falloff with distance
  +		var/distance = get_dist(T, turf_source)
  +
  +		S.volume -= max(distance - world.view, 0) * 2 //multiplicative falloff to add on top of natural audio falloff.
  +
  +		//sound volume falloff with pressure
  +		var/pressure_factor = 1.0
  +
  +		var/datum/gas_mixture/hearer_env = T.return_air()
  +		var/datum/gas_mixture/source_env = turf_source.return_air()
  +
  +		if (hearer_env && source_env)
  +			var/pressure = min(hearer_env.return_pressure(), source_env.return_pressure())
  +
  +			if (pressure < ONE_ATMOSPHERE)
  +				pressure_factor = max((pressure - SOUND_MINIMUM_PRESSURE)/(ONE_ATMOSPHERE - SOUND_MINIMUM_PRESSURE), 0)
  +		else //in space
  +			pressure_factor = 0
  +
  +		if (distance <= 1)
  +			pressure_factor = max(pressure_factor, 0.15)	//hearing through contact
  +
  +		S.volume *= pressure_factor
  +
  +		if (S.volume <= 0)
  +			return	//no volume means no sound
  +
   		var/dx = turf_source.x - T.x // Hearing from the right/left
   		S.x = dx
   		var/dz = turf_source.y - T.y // Hearing from infront/behind
  
positive.code: var/list/swing_hit_sound = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg')
  var/list/hiss_sound = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')
  var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg')
  var/list/gun_sound = list('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg')
  
  /proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff, var/is_global)
  
  
negative.code: 			if ("swing_hit") soundin = pick(swing_hit_sound)
  			if ("hiss") soundin = pick(hiss_sound)
  			if ("pageturn") soundin = pick(page_sound)
  			//if ("gunshot") soundin = pick(gun_sound)
  	return soundin
  