I have suggested it before, but here it goes:
If someone adds this formula after the calculation that decides if the target is in the sight of the actor, (inside A_Look, and A_Chase), i.e. if it is not blocked by geometry, then we can have true stealth in our levels:
d < (l*l*s*v)/360000
Where:
l=(0-255)=Light value of target's sector
s=(0-255)=Actor sight
v=(0-255)=Target visibility
d=(0-25000)=Maximum visible distance between actor and target
And you can play with the value 360000 to fine tune it.
Example sights:
Actor helpers (humen) : 100
Mancubi : 110
Archviles : 125
Example visibilities:
Spectres : 50
Normal actors : 100
Lost souls : 200
Visibility suggestions:
I think blur spheres should halve the visibility factor for the duration of their effects.
Stealth monsters should have visibility of zero when they are hidden.
When the actor's sprites are full bright (shooting frames) then their visibility should be double their normal visibility.
Note: this requires that we add two properties to the actor object classes: Sight and Visiblity that are by default 100, but we could define them in DECORATE.
There would have to be an option in MAPINFO to activate this for the MAP or HUB, and we can have an option in the main menu to let the players be able to select this actor sight checking for the older levels, if they like it.
Note: there can be ACS functions to access the sight and visiblity values.
I know, I have suggested it before, but maybe it is easier to implement after DECORATE.