ID:141318
 
Code:
mob
Login()
sight |= (SEE_TURFS | SEE_MOBS | SEE_OBJS)
..()

verb
Trigger()
var/sel = input(src, "Which sight variable do you want to trigger?", "Sight") in list("Mobs", "Objs", "Turfs")
switch(sel)
if("Mobs")
sight ^= SEE_MOBS
if("Objs")
sight ^= SEE_OBJS
else
sight ^= SEE_TURFS

Get_Oview()
for(var/atom/a in oview(src, 2))
src << "Found: [a], [a.x], [a.y]"


Problem description:
If all three sight flags are turned on (mobs, objs, turfs), oview will contain turfs behind an opaque obstacle.
If you turn off the mobs/objs flags, oview will no longer contain these turfs, even though seeing mobs/objs should have no influence on visibility of turfs, even more as you can still see them visually on the map.

Is this an error within calculation of view procedures, or is something eluding me?
Everything you've said makes this indeed seem like a bug. As you've said, the SEE flags should be independent from each other, and if SEE_TURFS is on you should indeed always see (including in view()) turfs in your viewing range. I haven't confirmed yet if this occurs for me as well or not, though.
In response to Kaioken
I wonder though if SEE_TURFS is off should you see mobs/obj's in the turfs?
In response to T3h P3ngu1n
But of course you should (you could have meant that in more than one way and weren't specific enough, but it seems this would be the right answer in any case. I wonder if you realize how sight works though and the fact you can still see turfs even if the SEE_TURFS bit is off), per normal visibility rules. If you should be able to see the obj, but not the turf it's on, you'll see only the obj, with the turf behind it as black.