QUOTE(EZ4U2Shoot @ Nov 10 2006, 07:55 PM)

GetLOS. Each time I get the expected results. If one is behind a wall, the expected results are there. If they have clear sight, the expected results. I add another creature and call the GetLOS between them, then I add another, and another, and another. After so many are added, then some of the actors will return 0 on their GetLOS checks, but the following frame, they return 1 and different actors return 0.
When you say "if one is behind a wall, the expected results are there" do you mean the creature stops seeing another creature that is blocked form sight? I tried real hard to get an actor (Imp mostly, but also tried with an NPC) to see me (the player) for allowing throwing items to move independent of player sight. However, even with several walls between me and the imp it always saw me whenever it was looking towards me. I.e. no true LOS, only FOV.
QUOTE
There are a few other tests I have considered to confirm whether or not all LOS functions are pre calculated even without calling GetLOS which is what I suspect. In this case, since the player would undoubtedly have priority over creatures, the results of the players GetLOS would then take precedence and as such return the proper and expected answer. Thereby one would come to your conclusion that GetLOS is only reliable for the player.
However, reliability is really in how much about the function and the internal processing that one knows. So, if you are aware of the limitations and those limitations are correct, then the function is reliable. Unfortunately, in this case, GetLOS reliably returns 0 when so many actors are in the loaded area. It also reliably returns the proper answer when very few actors are in the area. The question is what precisely determines the percieved reliability or lack thereof? Additionally, I would be curious as to what type of script it is in. I have been working w/ Magic Script. I have found that, at least in some circumstances, when doing some of this stuff in a Quest script, it seems that it can cause additional problems and sometimes stuttering, if it is a time precision reliant task that your trying to accomplish. I am confident, although I do not know for sure, that this is because when Oblivion processes the Quest Script processes other quest data as well in order. The end result being, w/ movement script at high speeds in a quest script if viewing in 3rd person, the scenery jitters where as if used in a magic script as an ability, the player can go a lot faster without the jittering.
For an actor to track the player they would only need to be able to see directionally towards him and them havoc would guide them around buildings and obstacles. The whole of the OB world is designed to just be seen from one angle. Therefore it makes perfect sense that the only actor that has a true LOS is the player. Why would you code this in any other way? You could easily have 50 different actor perspectives and, without a full rending from each, any LOS function is going to be buggy. Therefore why not just go for the simplest technique possible? For example, if you really need to know when an actor sees you, you can apply the reflection approximation: That is, if you can see them and they are facing you it is fare to assume they can see you. (The obvious exception being if they are blind

This is indeed pretty much the only thing you can wrt "pre calculate" when the world only really exists (rendered) from one view point.
For me the only question is if there are some circumstances where GetLOS on an actor does do something different from FOV? E.g. if they were directly on the other side of a wall door. I would very much doubt this because havoc and my own testing.
As for more general issue about script processing per frame you may indeed be noticing some effect here but there are many reasons for this beyond just GetLOS calls. Certainly many GetLOS calls on the player in a cluttered and complicated region could slow your scripts down. But for actors I think it is more a function of how many are being processed rather than what they are doing specifically. I've also found that actors in combat eat up far more processing time and scripts on those actors, e.g. on tokens, definitely do not run reliably every frame. Having lots of scripts running also can lead to unusual effects, probably due to frame syncs. However, mostly it appears that it is a matter of the number and complexity of graphical models that have to be drawn that is the primary processing power hog.
As for jittery effects from quest scripts, I mention this in the README for the Boots of FLying MOD and in other threads. Basically the GameMode in quest scripts IS NOT guarenteed to frame sync. Hence if you set fQuestDelayTime to some very low value this DOES NOT mean your GameMode will get processed every frame (it could even get processed twice?). This means you shouldn't try to use frame-sync'd commands like SetPos in quest scripts to control movement. However, the issue using an ability script is likely to be more to do with crossing cell boundaries, which can force the script to re-initialize. Using the GameMode block of a token is the safest way to go but an ability/spell effect should be ~just as good if implemented with all global variables.
QUOTE
So in conclusion, although I'm not sure if I will bother testing further to confirm, I believe that GetLOS simply returns a actor game state value that is already calculated. I believe that each time you add a character to the loaded zone, the number of line of sight calculations increases exponentially whether anything calls GetLOS or not. So if there are 2 actors loaded, there are 2 line of sight calculations, 3 actors is 9 calcs, 4 is 16, 5 is 25... and when I have 10 actors loaded there is 100 line of sight calculations and it doesn't finish with them all, but on the next frame the calculations are continued where they left off. Line of sight it seems defaults to 0, if there is not enough time within the frame to calculate a particular line of sight then it will be 0 by default. This I suspect is why we have SetAllVisible.
Now, the question of the day is, although we know the player has first priority, is there a way we can raise the priority of one actors line of site over another.
But like I said brother, I absolutely do appreciate every bit of information that you provide and I sincerely thank you very much.
Actually, the number of GetLOS calls increases factorially.

I dont really know what to say about your conclusion but I seriously doubt that LOS is pre-calculated for actors. It would kind-of make sense but it is far more likely that actors just know the positions of each other and do not really use LOS to check for obstacles but rather some approximation based on object positions and dimensions

(even here there are many options). I would expect that it is the havoc processing that is the cpu hog. IF you assumed someone like yourself was going to do GetLOS calls between all actors in a location then it would make sense to precalculate all the LOS results at the start of the frame.

However, do you really think this is the way it is implemented, bearing in mind that combat is not scripted?
What IS actually going on in the complex situation you have created is hard to say. What commands like SetAllVisible and SetNoAvoidence actually do is debatable. But I myself would certainly not implement a full GetLOS check for any actor in the same way as done for the player and I very much doubt BS has done either. For example, it is a fact that when a building is placed in front of you there are no back walls to be seen by an actor standing on the other side.
Anyway, these posts are far too long. Lets try to get back to some more basics. For example, do actors see eachother and/or the player with (1) obstacle/wall or (2) another actor between them?
BTW: I'm 100% sure that GetLOS is not pre-calculated. I have scripts in my T* MOD that would not work if this was the case: I perform several GetLOS commands on a sighting object in one frame. Additionally, most of the time I use GetLOS the sighting objects don't even exist in the player space until the script runs.