Missile turret firing is NOT limited. It is limited if they fire at the player and I'm not talking about turrets not firing at ME I'm talking about turrets not firing at all.
And again: The flag code change doesn't change ONE THING about how the angle is calculated. If you would at least take a look at the code I'm talking about we'd finally be able to talk about the same issue.
If you disagree then show me where it is used, and don't tell me what the game is doing. The game behavior can be caused by all sorts of things but so far I found no evidence in the code whatsoever that the fire-along-normals flag code change changes ANYTHING about when a turret is allowed to fire and I see no point in discussing that any further as long as nobody shows me the spot in the code that I missed.
I cannot comment behavior that I don't see in the code. If it is there, show it to me.
PS: TO clearify, here's the code:
// This line calculates both the global turret position (gpos) and the global turret firing vector(gvec)
ship_get_global_turret_gun_info(&Objects[parent_objnum], ss, &gpos, &gvec, use_angles, &predicted_enemy_pos);
// Here gpos is used to calculate a second direction vector, (v2e) vector to enemy, which may be identical with gvec, if the flag isn't set, or is different if the flag is set.
vm_vec_sub(&v2e, &predicted_enemy_pos, &gpos);
dist_to_enemy = vm_vec_normalize(&v2e);
dot = vm_vec_dot(&v2e, &gvec);
// As you can se, dot is calculated as the cosine of the angle between vector to enemy and the firing vector of the turret.
// Now if the flag was not set, these two vectors would be identical, hence dot would always equal 1 ( cos(0°) = 1 )
// If it is set, then this is used as always to calculate field of view stuff. So this is nothing new, it's just that before dot was ALWAYS 1.
// Now, dot is used in stuff like this:
if ((dist_to_enemy < 75.0f) || (dot > AICODE_TURRET_DUMBFIRE_ANGLE ))
// Now this doesn't change anything. it's just that without the flag, dot is always 1, meaning the dot is ALWAYS larger than the specified angle (unless that one is exactly 1 too. maybe this
// should be a >= instead here.
// WITH the flag, this will be used now. Which is perfectly logical. A turret that fires its missile always at the enemy can shoot always.
// A turret that fires along a normal first should only fire when firing makes sense.
// So I don't see anything new here, it's just that those angles now finally make sense.
If THIS is what you meant, then yes.. those angles migth need checking, but otherwise, the codechange didn't change a thing, since this was the same as before. the turret now only fires in the correct direction. THis checking code works exactly as before since the change doesn't affect this at all.
So the turret's "can I fire" behavior is exactly as before, only that with the flag they now fire along the normal, as originally planned.
Before the calculated vector was only used to check if firing was allowed, but the missile was always launched directly at the enemy.
Now the calculated vector is used to check if firing is allowed AND for the direction the missile will be launched at.