Commit Graph
1118 Commits
Author SHA1 Message Date
Fabian Woltermann 50c22d9457 Fixes breaking issues in subsystem memory management 2016-08-22 20:30:53 +02:00
Fabian Woltermann adcc3327ae Addressing some feedback 2016-08-22 13:33:13 +02:00
Fabian Woltermann ed84ac348e Merge with master 2016-08-22 11:37:50 +02:00
m!m 38fb41909b Merge pull request #861 from The-E/ai_profile_flags
Ai profile flags converted
2016-08-22 11:32:55 +02:00
Goober5000 795bb86148 additional tweaks for WIF flag refactoring 2016-08-21 18:02:20 -04:00
Goober5000 d87babfd92 remove the SIF_BALLISTIC_PRIMARIES flag
See also my comments on #762.  The flag is almost entirely redundant, so this PR removes it in all instances where it's used in the ballistic primaries code.  There are one or two places where removing it was not a no-op, so I adjusted the rest of the code accordingly (most notably in the parsing validation when it checks that primary weapon cargo has been assigned).  I also added a few divide-by-zero checks and slightly tweaked the support ship rearm code.  The use of the SIF_BALLISTIC_PRIMARIES flag in the ingame_join code was replaced with a dummy value to avoid bumping the multiplayer packet version number.
2016-08-21 17:38:42 -04:00
Fabian Woltermann c72376b0c6 Fix compilation 2016-08-19 22:54:42 +02:00
Fabian Woltermann 0591b7ef49 ai profile flags 2016-08-19 22:44:39 +02:00
Fabian Woltermann 90a2644d62 More cleanup 2016-08-19 21:08:14 +02:00
Fabian Woltermann 6a1aa4c5d3 More cleanup 2016-08-19 20:59:01 +02:00
Fabian Woltermann 9f27973147 Fixes various bugs 2016-08-19 19:23:55 +02:00
Fabian Woltermann 1acfaa8157 Converts model subsystem flags 2016-08-19 14:59:15 +02:00
Fabian Woltermann 1a060aa6d7 Converts the other weapon flags 2016-08-19 09:24:54 +02:00
Fabian Woltermann 127976cd74 Weapon info flags conversion (#851) 2016-08-18 23:17:41 -07:00
Fabian Woltermann 98f72f9378 Finishes converting the remaining ship-related flags (#843) 2016-08-17 05:49:40 -07:00
m!m 31fdcfdfbb Merge pull request #806 from The-E/ship_weapon_flags
Converts the flags of ship_weapon to use the new flag system
2016-08-16 11:37:01 +02:00
Fabian Woltermann ed974844e4 Merge pull request #795 from asarium/cmakeMerge/freetrack
Add improved head tracking code
2016-08-16 11:33:06 +02:00
Fabian Woltermann 418c47e426 Merge with master 2016-08-16 09:58:09 +02:00
m!m 02ecdf6cf7 Merge pull request #817 from The-E/aiming_flags
Changes aiming flags to the new system
2016-08-15 15:29:26 +02:00
Fabian Woltermann 43b68c5b22 Changes aiming flags to the new system 2016-08-14 16:59:22 +02:00
Fabian Woltermann 3160bdaa00 Changes ship exit flags to the new system 2016-08-14 16:48:11 +02:00
m!m af9cc94470 Merge pull request #807 from The-E/ship_subsys_flags
Changes the subsystem flags to the new flag system.
2016-08-14 16:24:28 +02:00
asarium 60afa1431a Add improved head tracking code
This adds an abstraction layer over the previous TrackIR implementation
and also adds an interface for the FreeTrack protocol.
2016-08-13 21:43:23 +02:00
Fabian Woltermann e1ba2256ed Changes the subsystem flags to the new flag system. 2016-08-13 13:52:51 +02:00
Fabian Woltermann 64153da3bd Converts the flags of ship_weapon to use the new flag system 2016-08-13 10:42:47 +02:00
MageKing17 78de88adcf Greatly expand available flags for creating target priority groups.
Target priorities could previous only select based on very few flags, for the simple reason that very few were defined in the ai_tgt_*_flags[] arrays. This simply adds additional flags (even some that seem a little silly; I can't actually think of a reason to especially target "objects that are being rendered", but hey, maybe somebody will find a use for it in the future).
2016-08-12 19:24:07 -07:00
Fabian Woltermann 770fce8de5 Bitset flags -- take 2 (#775)
This introduces a new mechanism for handling bit flags. Instead of using an int (or two, or three) to write bits into, this uses the std::bitset in a wrapper class that accepts an enum class as input. This means that certain classes of errors we've had a few of in the engine, where a coder used the wrong set of flags or checked them against the wrong variable (SF_STEALTH vs SIF_STEALTH, for example) can now be detected at a compiler level rather than not at all.
2016-08-12 16:13:50 -07:00
m!m 22c0255277 Fix a bunch of 64-bit MSVC warnings (#709)
* Fix a bunch of 64-bit warnings

* Fix Linux compilation error

* Fix Mac error

* Fix some issues

* Fix more GCC warnings

* Remote unwanted change

* Remove accidentally readded file

* Fix wrong limit check

* Use BEAM_INDEX macro for getting beam object index

* Fix 32-bit warning

* Use BEAM_INDEX instead of pointer arithmetic
2016-08-09 11:08:54 -07:00
asarium bbeaaa1565 Add a new particle effect system
This is similar to the script I wrote a few years ago but unlike that
one, this solution doesn't kill the performance.
2016-08-04 11:08:39 +02:00
Fabian Woltermann a3c674b1f1 Merge pull request #680 from asarium/cmake_/pr
Move build system to CMake
2016-07-27 15:23:16 +02:00
asarium 1bcd5400d3 Move build system to CMake 2016-07-22 12:07:19 +02:00
DahBlount 8201f0ef1c Avoid setting flags when using the share fire direction flag
Originally, "share fire dir" forced the "salvo mode" flag. This
interfered with the "use multiple guns" flag. In order to avoid this, I
instead made "share fire dir" if either "salvo mode" or "use multiple
guns" is not found, as those are the only two flags that, coupled with
"share fire dir" give the desired results.
2016-07-21 17:44:08 -06:00
MageKing17 eb6b77dba0 Remove redundant code branch in gun convergence code.
"If a or b else a" should never ever execute the "else a" branch; this appears to be an artifact left over from Wanderer's reorganization of the autoaim/convergence code in 7bb10d8, before which standard convergence and automatic convergence were handled in separate conditionals.
2016-07-21 12:28:25 -07:00
MageKing17 6d0b3925f0 Make modular ship tables not reset to species countermeasures.
If a modular ship table modifies a ship entry without specifying a "$Countermeasure type:" entry, and the species has a "$Countermeasure type:" entry, FSO would reset the ship's countermeasure type to match the species default, even if we weren't defining the class for the first time. This just adds a first_time check to the else branch to avoid that.
2016-07-20 11:45:41 -07:00
asarium aa639881aa Merge branch 'master' into antipodes_/sync 2016-07-16 13:48:12 +02:00
SamuelCho 1ef7688fa1 Strip out unused rendering code. 2016-07-10 19:29:11 -07:00
MageKing17 241c0eaa95 Remove subsystem limit.
Allows support for as many subsystems as available memory allows by replacing the Ship_subsystems[] pointer array with a pointer vector. It still just contains pointers to dynamically-allocated subsystem arrays (allocated in blocks of NUM_SHIP_SUBSYSTEMS_PER_SET), so this should behave almost identically to the current code.
2016-07-08 15:06:58 -07:00
MageKing17 70529dbd5a Deprecate -nohtl and -brief_lighting.
-nohtl hasn't worked for years, and -brief_lighting was always supposed to be a temporary flag before making the behavior always on.
2016-07-08 09:39:29 -07:00
asarium a6df7eef35 Merge branch 'master' into antipodes_/sync
The APNG changes required some additional work. A cursor now owns the
bitmap handle that will be used for the cursor. This is required in
order to support variable FPS cursors.
2016-07-05 12:09:22 +02:00
m!m 76ffc26680 Merge pull request #537 from niffiwan/apng_pr
APNG support
2016-07-04 23:34:49 +02:00
asarium cd2a692150 Merge branch 'master' into antipodes_/sync 2016-07-04 11:15:40 +02:00
MageKing17 28db7bb2f9 Fix several problems with change_ship_type()
This was a bit of a doozy.

If the player's current target changes ship class with change_ship_type(), Player_ai->targeted_subsys will still be pointing to the old subsystem list; this could cause problems (specifically out-of-bounds array accesses) when trying to e.g. look up nonexistant submodels. Similar problems occur with any other AIs targeting a subsystem on the ship in question. In order to fix this, several changes were made.

Firstly, change_ship_type() will now go through every Ai_info object looking for ones targeting a subsystem of the ship changing classes, or with an AI_GOAL_DESTROY_SUBSYSTEM goal for the ship changing classes, and convert them all to the new subsystem (if there's a match) or remove the target/goal (if there isn't), reusing the existing subsystem comparison logic (for transferring damage). Near the end, there's a Player_ai comparison to call hud_cease_subsystem_targeting(0) if necessary.

Additionally, change_ship_type() will also look through every weapon looking for anything that might be homing in on or fired from a subsystem on the ship changing types; these are handled similarly to targeted subsystems, including clearing the weapon's homing_subsys/turret_subsys attribute if a matching subsystem isn't found.

Also handles sp->last_targeted_subobject[], which contains subsystem pointers to keep track of which subsystem each player was previously targeting on that ship.

Lastly, change_ship_type() will now kill ship sparks if the model number has changed (trying to transfer sparks to matching submodels would be a herculean task and probably fail most of the time anyway, with similarly-named subobjects with different shapes so the coordinates wouldn't make sense anyway).
2016-07-03 20:28:52 -07:00
MageKing17 5d307d24f4 Move conditional so that weapon spinup happens without external models.
Moves the sip->draw_primary_models[bank_to_fire] check so that it only contains the code related to shipp->primary_rotate_ang[bank_to_fire], since that really does only matter if external models are present. The rest of the spinup code doesn't actually care about the model, though, so it seems odd (and unfair to modders) to not allow it to function just because the ship has external primary models disabled.

I also wrapped the spinup code in a basic check that winfo_p->weapon_submodel_rotate_vel is greater than zero because most weapons aren't going to have a spinup, so there's no need to perform the other calculations for them (it's probably a marginal savings at best, but since I was getting rid of the best-case savings of most ships not having external primary models enabled, I figured I may as well replace it).

Minor formatting changes to the other lines just because it took me a while to figure out what the code was doing when I first read it; "if(" changed to "if (", and line breaks inserted into the one-line conditionals.
2016-06-02 21:40:16 -07:00
niffiwan 278a797db2 Add player minimum speed feature
Allows the players ship to have a minimum speed set. If the ships speed
drops below this (per ship) value, the throttle is increased to the
minimum.
For ships that are gliding, their engines will be reactivated when the
ships overall velocity falls below the minimum speed.
Currently only sets a minimum Z speed, Y & X are ignored.
2016-05-27 20:34:15 +10:00
niffiwan 0fc4b89820 Missed weapon thruster/glow calcs
Thanks to Axem for finding the bug
2016-05-10 19:42:21 +10:00
niffiwan 87770aad8f Add total_time output param to bm_load_animation
Also convert int to bool, and replace NULL with nullptr
2016-05-10 19:42:20 +10:00
niffiwan 2f1b686349 Finish conversion to new frame calc function
Also remove debug code
2016-05-10 19:42:20 +10:00
niffiwan 0b20b15c2c Fix issues found by Axem
Fix silly issue preventing getFrame() from working
Remove infinite loop when calculating frame num
Convert more animations to use new frame calc function
2016-05-10 19:42:20 +10:00
niffiwan 50c791c998 Add support for non-streaming apngs
i.e. apngs (pre)loaded into bmpman slots

handles apng variable frame delays
Includes new lua function (getFrames) to find the current frame for
apngs. Also uses new function to correctly display apngs for mission
loading animations, ship thrusters & engine glows.
2016-05-10 19:42:20 +10:00
Peter Mitsis 180674154c trig: Use floating point versions of trig functions
Replaces calls to double-precision floating point trig functions with
calls to single-precision floating point trig functions as follows:
    cos() -> cosf()
    sin() -> sinf()
    tan() -> tanf()
    acos() -> acosf()
    asin() -> asinf()
    atan() -> atanf()

This allows the compiler to avoid generating unnecessary instructions
that convert a float to a double and then a double back to a float.

Signed-off-by: Peter Mitsis <[email protected]>
2016-04-24 21:56:06 -04:00