* Add SpawnShipCheat and convert Bravos spawning to it
* Clean-up and add canUseCheat() check
* Move some stuff to parent CustomCheat class
* Add cheat-used SEXP and On Cheat scripting hook
* Add cheat tbls and tbms, fix custom cheat detection, move cheat hooks to global hooks
* Add a default virtual destructor to CustomCheats for its derived classes to use
* Initialize buffers with memset so clang will calm down, also move cheat check a bit to keep old cheats
* Attempt to appease MSVC
* Clean-up and formatting
* Ensure custom cheats fit in the cheat code buffer
* Fix a merge mistake
* Move pre-set cheat to embedded cheats table
* Use appropriate types for stuff_string
* Remove unnecessary copying of the cheat buffer
* Explicit nullchecking
* Avoid copying values for initializing CustomCheat
* move cheat checking function to cheats_table.h, fix a typo
* Clarify OP_USED_CHEAT sexp description
* Remove unnecessary casting
* Use list initalization for Ship Cheats
* Move a few method definitions from the .h to .cpp
* Change buffer to const char*
Adds gravity! Applies on a per-mission basis, and weapons, ships, debris, and asteroids now have a configurable "gravity const" which multiplies the effect of gravity on them, by default everything except debris is 0 (meaning no effect even when the mission has gravity). AI and the lead indicator will also lead for ballistic trajectories as well, given a gravity-affected weapon. No FRED support or gravity direction control yet, to come in later PRs.
We shouldn't be checking that the `cci_h` is valid by seeing if it is greater than -1 because by that point it never will be. Instead, we should be checking that the incoming id is valid and setting to the invalid state if it is not.
Load campaigns using the full path provided by the user, not just from the configured mod paths.
Also tweaks initialization based on the campaign having already been cleared in `mission_campaign_clear()`.
The `ade_odata_is_userdata_type` function didn't clean up its stack properly, as it left type information there for error reporting. But there are other reasons to check userdata types besides error reporting, so this adds a flag to clean up in most situations.
Fix courtesy of @BMagnu.
This is a new Lua API function that allows creation of arbitrary debris pieces, whether chunks of a ship's hull or shards of shrapnel. All of the parameters are optional, and a wide variety of situations are possible ranging from vaporized bits to static chunks to chunks propelled by an explosion.
* Add access to damage type, swarm, and corkscrew data
* Also return if the weapons have the appropriate flags
* Return nil for invalid handle and clarify documentation
* proof of concept
* Account for shadows
* Option to tie individual HUD gauges to the cockpit option
* Do this in a more user-friendly way
* Address feedback