Mostly renaming of fields and functions, and moving some modelread sections into functions. This reorganization will put the code on a better footing for the model translation feature. No model translation code is included yet, and there should be no change in functionality.
By anchoring a dockpoint to a submodel, the dockpoint will move when the submodel moves. Historically this has been done by inspecting the path associated with a dockpoint, but this method will not work if there is no path or no rotation mode specified. Here is an alternate method that allows the submodel to be specified explicitly through a dockpoint property.
For a long time, bay door animations would not trigger if the player was arriving from the bay as the the only ship in the wing. This was fixed by adding a check for the player. This check uses the `Player_obj` to check if the ship is as player, which does not work on standalones since the `Player_obj` is always the Standalone Ship.
This PR changes the check to check if the flag `Player_ship` is set, which is a common strategy used to make these kinds of checks work on standalones.
Tests show the old behavior still works as expected.
* Allow AI flag for bay orientation to account for parent `uvec`
The previously added flag `Fighterbay_arrivals_use_carrier_orient` (#3698) incorporated the parent ship's `rvec`, which greatly helped align emerging ships from fighter bays. In parent some ships though, emerging ships still showed a `uvec` that did not match the parent ship (such as FotG's Star Destroyer). This PR allows the `Fighterbay_arrivals_use_carrier_orient` flag to take parent `uvec` into account.
Note, that departing the mission into a bay already has code to ensure a `wheels-down` landing.
PR is tested and works as expected/fixes `uvec` issue.
* only set uvec as lazy option
The Rotators_locked flag was created specifically as a lab option that didn't affect animations or intrinsic rotations, so return it to that scope. Also rename it to clarify that it applies to subsystems and to be future-proof for submodel translation.
This moves submodel rotation out of the AI pipeline and into object movement. With the exception of turret rotation (which remains in the AI code) this now allows all types of submodel rotation to happen in the same place. Many associated functions have also been cleaned up.
In addition to making the code cleaner and clearer, this will make it much easier for intrinsic rotations and new animations to be applied to non-ship objects, such as weapons.
* Deleted a line that blanked target_num on homing weapons but still let them home
* This whole block of code about missiles missing turns out to be a logical dead end anyway, ripped it out by the roots.
1) Several AI profiles options were getting reset on every iteration through the loop. They should only be reset when the profile is initially created.
2) Keeping track of AI hits on the player ship was added by Sushi in 9246a2f74d and needs to be guarded by a flag. This flag has been enabled for mods that set the required FSO version.
* Clean Up ai_attack_object()
There was an unused parameter, and no one has added subsystem targeting (at least to this function) in the past 20 years, so it's time to remove it and make it more readable. Probably better to adjust that behavior somewhere else anyway.
Also changes an Int3() into
* More Int3 cleaning
Refactor a few Int3()'s in the AI code
* Feedback on is_ignore_object_sub
* Feedback, remove duplicate check, add documentation to preserve why it was there
This PR provides modders with additional options to alter countermeasure values. Previously, countermeasures had a fixed, hardcoded fire wait time of 333 milliseconds, regardless of what `$Fire Wait:` was specified. Also, the AI would wait a fixed delay between firing of failed countermeasure launches and successful countermeasure launches. For successful launches the AI would double the fire wait. Also, Friendly ships would only use a fixed constant value for countermeasure firing chance, and not the value based on their class specific AI profile.
This PR exposes those values with the following options:
• Add main AI table flag: `Friendly Ships Use AI Profile Countermeasures Firing Chance`. This will allow Friendly ships to use their AI class profile countermeasure firing chance instead of the default fixed value from main AI table.
• Add value in CM section of weapons table: Countermeasures use fire wait time `+Use Fire Wait`. This is a boolean that allows the countermeasure’s fire wait to actually use what is specified in the `$Fire Wait:` section of that weapon.
• Add value in CM section weapons table: `+Fail Delay Equals Fire Wait`. The delay between failed countermeasure launches is set to use the fire wait value.
• Add value in CM section weapons table: `+Successful Launch Delay Multiplier`. This allows modders to set the value that is multiplied to fire wait for successful countermeasure launches.