Commit Graph
2218 Commits
Author SHA1 Message Date
the-maddin ed16a81e37 GCC12 warning array compare
not comparing ship_info name addresses, but
ship_info argument address with address of
iterator element.
2022-07-01 00:59:57 +02:00
wookieejedi f280f11824 Fix AI Goal Display Strings (#4451)
* Fix AI Goal Display Strings

Okay so previously, if a target goal was not valid the code was
`strcpy(outbuf, XSTR("no orders", 495)); `

but then it was changed to
`outbuf += XSTR("no orders", 495);`

So it would instead append the "no orders" instead of properly replace the whole string. Looks just like a copy and paster oversight, since all the other text appends the name of the target with the order.

This PR correctly replaces, rather than appends that text. Fixes #4345

* appease clang

* use more simple =
2022-06-28 09:33:29 -04:00
wookieejedi 2beaa886ca Fixes Team Colors not working with show-ship (#4436)
Updates the `show-ship` function to account for team colors. Also, cleans up the function a bit. Tested and works as expected. Fixes #4435
2022-06-24 22:06:13 -04:00
Goober5000 1b563360ed Merge pull request #4401 from Goober5000/add_isActive_checks
add isActive checks for new-style script hooks
2022-06-16 19:42:36 -04:00
John Fernandez 01331436c9 Fix the standalone ship being added to ship list
While it may seem counterintuitive, we have to keep the standalone bogus ship from being added to the ship list so that we don't have to exclude it from all the places it could cause crashes or mysterious AI behaviors.  Both were being observed, and this should fix them.
2022-06-13 21:39:03 -04:00
Goober5000 7013981de5 add isActive checks for new-style script hooks
What it says on the tin.  Follow-up to #3538.  Fixes #4398.
2022-06-13 02:13:14 -04:00
Goober5000 67b3c6ce46 fix use of default tech database flags
The "default" tech database flags indicate whether entries are in the tech room by default, that is when the table is originally parsed and the campaign is started.  Flags may be changed later, so that when the tech database is "reset to default" the flags can be returned to the known state as specified in the tables.

A bug was introduced back in commit c924e3997a (!) based on a misinterpretation of what "default" meant.  This fixes the bug and clarifies the flags.

Fixes #4390.
2022-06-11 18:03:21 -04:00
wookieejedi e6956b1b4c Fix FRED Crash with Team Colors (#4379)
`p_objp` uses cannot be used if FRED is running, and this PR adds that check to the updated team color fixes from #4207.

Fixes #4374
2022-06-10 08:32:29 -04:00
Goober5000 3a4794305f Convert some Lua hooks to the new style to add documentation
This takes a few of the existing hooks and converts them to the new style of hook definition which can include more extensive documentation and enumeration of supported hook variables.

This is an updated version of #3151 to work with the latest codebase.

NOTE: Before this can be integrated into the codebase, it needs an implementation for `bool script_state::IsActiveAction(int hookId)` which apparently only has support for old-style script hooks.
2022-06-05 16:38:03 -04:00
Goober5000 e3ad6664e0 Cached subsystem indexing (#4316)
* add subsystem indexer and ensure that ship_get_indexed_subsys and ship_get_first_subsys are independent

* also add reverse lookup from subsys to index

* update indexer to accommodate subsystem pointers being changed

* use clearer function names, and fix the type of subsys_list_indexer

* add assertions

* address latest feedbcak
2022-06-05 08:44:54 -05:00
JohnAFernandez 88c788a7b4 Interpolation Overhaul
Add files to partition interpolation code, base interpolation timing on Missiontime on remote instance vs. Mission time on the local instance.
2022-06-04 12:55:13 -04:00
Goober5000 aa4a58e53b clean up ship arrival and departure effects
Due to both the AI code and the ship movement code calling warp departure logic, enabling `Framerate_independent_turning` caused ships with the no-departure-warp flag to depart twice.  Removing the call to `shipfx_actually_warpout` fixes this.

More fundamentally, this untangles and organizes the arrival and departure logic as it pertains to effects.  The actual arrival and departure code is moved to the `shipfx_actually_warpin` and `shipfx_actually_warpout functions`.  This simplifies `WarpEffect::warpEnd()` and allows `WarpEffect` and its subclasses to only concern themselves with the visual effects.

This also fixes a logging statement that could never actually be printed due to `delta_ms` being the wrong sign in the if() check.
2022-05-30 22:04:21 -04:00
Goober5000 39d9251e2c Merge pull request #4286 from Goober5000/timestamp_since
add timestamp_since
2022-05-28 16:35:28 -04:00
Goober5000 d6c4fb8e53 fix NAME_LENGTH discrepancy
The ship creation code had an off-by-one error while checking the maximum length.  Fixes #4297.
2022-05-27 22:24:45 -04:00
Goober5000 e473ff011c add timestamp_since
Add `timestamp_since()` and modify a few places that use `timestamp_until()`.
2022-05-18 22:24:20 -04:00
BMagnu 5c4be3d392 LuaAI (#4198)
* Basic LuaAI

* LuaAI Player Order Support

* Add Player Order Target Restricts

* Fix init order

* Add AI helper API

* Fix subcategory stuff

* Fix Compiler Warnings

* Remove AI Mode switch Int3's

* Fix Lua docs

* Compiler warnings 2

* Clang Tidy

* Incorporate Feedback

* Incorporate Feedback 2

* Incorporate Feedback 3

* Incorporate Feedback 4

* Clang Tidy
2022-05-16 18:36:34 +09:00
Goober5000 833326aa76 some wing wave cleanup
In the process of looking through `num_waves` and `current_wave` for #4267, I found a couple of confusing bits of code.  This clarifies things.
2022-05-14 01:34:42 -04:00
JohnAFernandez 1acd763e4d Limit all MP client collisions to prevent bugs (#4209)
Players are still affected by collisions locally, but other ships will literally pass through each other until updated by the server.  A timestamp controls the frequency of collisions with the player ship.
2022-05-11 19:11:09 -07:00
Goober5000 b29f183aee assign cues when a ship is ship-created
Assign locked-* cues when a ship is created so that their arrival and departure cues are not -1.  Supersedes PR #4248.
2022-05-08 23:15:33 -04:00
wookieejedi fff19927e7 Add Subsystem Flag to Hide Turrets from Ship Loadout Stats (#4235)
* Add Subsystem Flag to Hide Turrets from Ship Loadout Stats

The statistics summary window in the ship loadout editor shows various aspects and stats of the selected ship. These can be toggled and customized through the ships table, but one line is actually autogenerated, `+Turrets`. This is unideal for certain ships, especially those which use turrets on ships in non-standard ways (for example having an AI controlled turret which shoots bombs). In these cases, the turrets are not actual turrets, and it is confusing for players seeing that there is a turret on the ship in the loadout editor. (I can give more detailed examples using FotG if needed).

This PR adds a subsystem flag which allows the modders to hide a turret subsystem so it is not counted in the auto generation of the `Turrets` summary line. (As a slight cleanup I also removed cleaned up the whitespace formatting on a nearby, but unrelated line).

* sync names

* fix renaming
2022-05-01 17:10:56 -04:00
Goober5000 3a322edbcf Merge pull request #4224 from MageKing17/feature/unlimited-ship-flags
Allow an unlimited number of ship flags to be parsed at once.
2022-04-30 14:17:08 -04:00
Goober5000 69e0f66d4b fix up conditions for script hooks
For script hooks which use conditions, be more consistent about evaluating both objects involved, as well as evaluating the different types of objects.

Fixes #3874.
2022-04-29 22:37:30 -04:00
BMagnu 3aa6cd8a87 Add cockpit FoV (#4220)
* Add cockpit FoV

* Add override documentation for SEXP
2022-04-29 03:45:18 +09:00
MageKing17 95a0e2f17c Allow an unlimited number of ship flags to be parsed at once.
For some reason, ship flag parsing was still using a fixed-size array instead of a vector, limiting it to 20 flags parsed in a single entry. Since there wasn't really a reason to do that (it was basically parsing to a vector anyway, then resizing it down to the limit, then stuffing the C-strings into the array), I changed it to a vector.
2022-04-26 21:58:21 -07:00
MageKing17 84ea99c371 Always record primary bank ammo capacity during ship creation. (#4217)
`ship_set_default_weapons()` (which is called by `ship_create()`) was only setting `swp->primary_bank_capacity` for a bank if the default weapon for that bank was ballistic; if the ship was then equipped with an ammo-using primary and the `set-primary-ammo` SEXP was used on it, it would think the bank had a capacity of zero, resulting in 0 ammo.

This commit simply moves the assignment outside of the conditional, so that primary bank capacities are always recorded in the `ship_weapon` class.
2022-04-25 19:25:31 +00:00
wookieejedi 30ae011d10 Fix Texture Replace and Team Colors with Ship Changes (#4207)
* Fix Texture Replace with Ship Changes

Tabled `$Texture Replace` did not work on ships where the class is changed in the loadout or with the `change-ship-class` sexp. This was because the replacement textures only were loaded during mission parse, and the `change_ship_type` did not account for loading new textures from ship classes that were not in the initial mission parse. Part of the bug was also that the code that updates texture replacements was after the texture page-in section of `change_ship_type`.

This PR fixes that bug by properly loading the textures in when the ship class changes. It also moves the code to within the `ship_model_change` function (which is only used in the `change_ship_type` function) so that the texture loading happens correctly before texture page in.

* fix accidental whitespace changes

* fix comment

* also fix team colors

* comment spelling fix

* appease clang

* properly clear replace textures between ship changes
2022-04-24 18:58:44 -07:00
Kiloku dca2ae715f Add a ship flag to allow the firing fail sound to play with locked primaries (#4203)
* Add a flag to allow the firing fail sound to play with locked primaries

* Adds an equivalent flag for Secondaries

* Make the flags accessible to FRED

* Fix whitespace mistakes

* Yet another whitespace fix

* Move primary fail sound flag check up to avoid wasting processing with unused shots

* Move secondary locked check up to avoid doing unnecessary checks
2022-04-24 13:09:50 -04:00
MageKing17 7184fbe781 Delay processing "$Player Weapon Precedence:" until after parsing. (#4201)
The `stuff_int_list()` call converts the weapon names into the appropriate index into the `Weapon_info` array; however, in `weapon_do_post_parse()`, we call `weapon_sort_by_type()`, which reorders the array; this makes these indices potentially point to the wrong weapon. Additionally, there's no protection against someone `+remove`ing one of the weapons in the list in a later TBM.

This commit makes it so we instead store the names into a vector of strings, then convert them into indices after `weapon_sort_by_type()` has already been called. Additionally, `Player_weapon_precedence` is changed from a fixed-size array to a vector, since it's usually not as long as `MAX_WEAPON_TYPES`.

Fixes #4199.
2022-04-23 14:55:36 -07:00
Goober5000 0d982ecf52 prevent crashes in the event of a subsystem mismatch
Set the subsystem name pointers to nullptr so that we don't try to free random memory.  Also set the subsystem percentages to 0 for consistency.
2022-04-11 20:08:54 -04:00
Goober5000 1b9a02ff5f Merge pull request #4101 from Goober5000/same_warp_when_docked
add flags to keep same warp effects when docked
2022-04-04 14:24:19 -04:00
Goober5000 493c9e004f add flags to keep same warp effects when docked
Same arrival warp when docked, same departure warp when docked, and associated changes to FRED, set-arrival-info, and set-departure-info.

Also fixes the nav-carry flag to properly save when a mission is saved.  Previously that flag would always be cleared.

Implements feature from #4095.
2022-04-04 12:31:03 -04:00
EatThePath e577e8db81 lua ship.checkVisibility mimicing sexp ship-is-visible (#4132)
* Implemented ship.checkVisibility for luaAPI, sharing logic with sexp isVisible. Made new function for the shared functionality

* Fixed a viewer-viewed mixup
2022-04-04 10:38:56 +09:00
Goober5000 63445dec5a remove Object.parent_type
It's theoretically possible for `parent_type` to get out of sync with the parent's type, particularly if the parent is destroyed.  Since the field is almost never used, it can be removed.

Should fix #4105.
2022-03-27 12:38:48 -04:00
Goober5000 15ab1c9afe fix a few bugs with display names
1) If a ship has its regular name change, clear the display name
2) When placing ships in FRED, truncate the ship name, if necessary, before creating the default name
2022-03-23 23:32:31 -04:00
BMagnuandGoober5000 9ab7a4626a Fix nested and animated submodel collisions (#4065)
* Calculate per-frame rotation axis

* function prototypes

* Add new submodel localization functions

* Fix collision detection for moving submodels

* Remove offending assert

* Add safeguard for stopped animations

* Fix last frame speed calc

* Fix childs with parent submodel rotations

* Fix Warnings

* Clang Bug Workaround

* clang tidy

* Incorporate Feedback

Co-authored-by: Goober5000 <[email protected]>
2022-03-09 23:49:11 +09:00
Goober5000 310898dfd9 two small but important warp fixes
1) Don't knock the player out of the warp if the sequence has already moved to stage two.  It breaks the sequence and the game will still end the mission anyway.
2) Remove the Volition code for calculating player speed.  It did not actually affect the speed, but it *did* affect the calculation of warp distance which often caused the player's ship to miss the portal.
2022-03-05 20:37:40 -05:00
Goober5000 237787c256 add some new scan features
1. Add custom scan times per subsystem
2. Add scanning time and range multipliers for player ships

Resolves #4027
2022-02-18 22:39:04 -05:00
Goober5000 e2f63a2340 rename and document several model coordinate functions 2022-02-15 20:59:24 -05:00
Goober5000 f0371cdb0c clean up model point/dir/normal/orient functions
Consolidated these functions and replaced the `find_submodel_point_*` functions with their closest `world_find_` counterparts.  (One of those functions may not have actually worked correctly.)  Also use the correct coordinate logic when returning normals from collision info in scripting.

Related to #3985 although not yet a fix for it.
2022-02-14 23:46:43 -05:00
Goober5000 39213b9d75 Merge pull request #3979 from Goober5000/model_translation_phase_1
refactoring in preparation for model translation
2022-01-30 13:47:59 -05:00
BMagnu 79be6bb32d Fix edge case for turret lookup with template and display name (#3981) 2022-01-30 13:14:33 -05:00
Goober5000 97952d6b6c refactoring in preparation for model translation
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.
2022-01-29 15:53:21 -05:00
Goober5000 7674474bb9 make clang happy, and anticipate a potential problem in the collision code 2022-01-28 01:05:42 -05:00
Goober5000 68fc947832 replicate submodels that aren't associated with subsystems
There are a few related improvements here:

1) Add a new function for iterating over the submodel hierarchy
2) Add a counterpart to the `subobj_num` field so that a submodel can refer to its ship_info subsystem
3) Update `ship_model_replicate_submodels` to replicate all movable submodels, even the ones that aren't associated with subsystems

Fixes #3967
2022-01-28 00:09:13 -05:00
BMagnu dc6cd40541 Clean up Player_orders (#3918)
* Merge all three comm_order arrays

Were Comm_orders, Sexp_comm_orders, and Player_orders. Now all Player_orders.

* Fix Warnings

* Fix erroneous order warning

* Update Int3 into a warning

* Fix missing location for warning
2022-01-22 22:09:49 +09:00
Goober5000 6db1accdb8 remove this because it is handled elsewhere, and because ships can have this flag without serving this role 2022-01-19 19:32:25 -05:00
Goober5000 32e1194575 change int to bool 2022-01-19 01:35:32 -05:00
EatThePath baa696f643 Fix first person glows (#3882)
* Split glow current brightness calculation into a new function for reuse and clarity

* Readability cleanup pass on model_render_get_point_activation

* created a new code path to add the lights for the player's ships' glowpoints without rendering their sprites.

* cleaning up unused args from new glowpoint functions

* cleanup redundant externs

* Documentation and naming pass
2022-01-16 14:26:56 -05:00
BMagnu dd7bd1fb72 Animation Rework, Phase 4: Moveables (#3904)
* Add C++11 std::any implementation

* Add basic moveable functionality

* Add rotation moveable

* Revise Segment Parsing Register

Because apparently, the linker and I disagree on which symbols should be discarded when linked into the final application...

* Fix small problems

* Address feedback

* Address feedback 2
2022-01-12 14:54:28 +09:00
Goober5000 0c6169d384 remove old comment using private API 2022-01-02 01:03:52 -05:00