Commit Graph
480 Commits
Author SHA1 Message Date
Fabian Woltermann e1ba2256ed Changes the subsystem flags to the new flag system. 2016-08-13 13:52:51 +02: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
asarium 9a10a78ed3 Fix variable for piercing beam particle effect 2016-08-05 10:54:00 +02: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
MageKing17 df1d84fe6e Greatly simplify scoring for weapon kills.
Bombs can give points for being shot down. This was being handled by a full-blown pair of damage_ship/damage_ship_id arrays, just like ships have for scoring purposes. This is ridiculous overkill when most bombs are shot down with a single pull of the trigger and means we were storing a couple hundred bytes of data that would be completely unused for the vast majority of projectiles. Now, whoever shoots down a bomb gets the points for it; period. Simple, and we can remove all scoring data from the weapon struct.
2016-07-21 14:44:24 -07:00
MageKing17 f7591078b9 Change collisionInfo from an mc_info object to an mc_info* pointer.
This seems preferable to storing an entire mc_info object on every weapon, when the vast majority of projectiles (by the very nature of the fact that they still exist) won't have collided with anything.

On the other hand, I'm not wild about allocating and freeing memory every time a weapon collides with a ship or debris. If anyone has a better solution, I'm all ears.
2016-07-21 14:44:24 -07:00
SamuelCho 1ef7688fa1 Strip out unused rendering code. 2016-07-10 19:29:11 -07: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 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
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
Peter Mitsis 181b758577 Replace ANG_TO_RAD() macro with fl_radians() macro
Both the ANG_TO_RAD() and fl_radians() macros were serving the same
purpose; they converted an angle from degrees to radians. To reduce
code duplication, ANG_TO_RAD() was replaced with the existing
fl_radians().

Signed-off-by: Peter Mitsis <[email protected]>
2016-04-24 21:56:06 -04:00
MageKing17 4e9f5dc754 Merge pull request #531 from Goober5000/intrinsic_rotation_refactor
refactor of dumb_rotation to intrinsic_rotation
2016-02-05 11:00:28 -08:00
Goober5000 df41bbe172 refactor of dumb_rotation to intrinsic_rotation
This is a renaming of the Dumb_rotation infrastructure, which is now called Intrinsic_rotation.  Intrinsic rotations are automatically applied to submodels without the need for an associated subsystem.  Dumb rotations are now a type of intrinsic rotation, and look_at rotations will be added in a future PR.  The same code will handle both; the only difference is in how the intrinsic rotation is calculated.  (In the case of dumb-rotation, it is calculated the same way as normal rotation; in the case of look-at, it will be calculated using submodel_look_at.)
2016-02-05 12:40:55 -05:00
Lari Nieminen f12d2395dc Fixed $Acceleration Time not working right on non-homing secondaries 2016-01-31 23:27:52 +02:00
Goober5000 76b98684cc Merge pull request #512 from Goober5000/dumb_rotation_refactor
Dumb rotation refactor
2016-01-26 22:04:08 -05:00
Goober5000 165124267a Add model_instance handling for weapons, asteroids, and skyboxes 2016-01-24 21:28:43 -05:00
niffiwan 256ba6f9f2 Remove proposed AI profiles flag
Make the new behaviour the default, the change to gameplay should be
minimal due to the 2-frame feature being by far the largest factor in
current countermeasure effectiveness
2015-11-26 18:57:36 +10:00
niffiwan 338d6c9aaf Allow countermeasures to decoy missiles once only
Adds ai_profiles flag
    $countermeasures decoy a missile once:
Also (re)adds logging to make it easier to figure out what the
countermeasures are doing. Try adding "+countermeasures" to your
debug_filter.cfg file.
2015-11-22 20:36:03 +10:00
MageKing17 5394b4943d Change warning from too many ship/weapon classes to an error.
If a modular table broke the weapons limit, it would warn about too many weapon classes, and then not actually skip the entry, because of the "if(!replace)" conditional around it, resulting in nonsensical parsing errors. Rather than just fix this error, it was suggested on IRC (by The_E) that these problems should instead cause immediate errors. Upon reflection, this makes more sense: if the mod exceeds the limits, there's little point in loading it anyway and having things be missing.

Hopefully, eventually, these limits will be removed altogether, but until then, exceeding them should not just be a dismissible warning.
2015-11-19 12:37:45 -08:00
m!m 2c268e4ec6 Merge pull request #437 from niffiwan/feature/aspect_lost_lock_det
Allow aspect missiles to die when have lost lock
2015-11-16 20:10:42 +01:00
Goober5000 8177c03f3f Merge pull request #423 from niffiwan/feature/customise_cm_det_rad
Add two small countermeasure features
2015-11-15 01:01:39 -05:00
DahBlount 3e6fb113ee Deprecate +Min Damage and +Max Damage, add +Attenuation Damage: 2015-11-13 12:26:04 -07:00
niffiwan ed6637031d Allow aspect missiles to die when have lost lock
Note that aspect missiles don't lose lock when their target dies, I'll
see about adding that later
2015-11-12 19:09:59 +10:00
DahBlount 89d072e18c Add +Directonal Glow:
This goes directly below +Muzzleglow: in $Beam Info: and causes the muzzle glow to be rendered along a projected poly instead of a bitmap.
Takes a float argument that is the length of the glow.
2015-11-09 14:28:40 -07:00
niffiwan 4849f443aa Missed two places to use killer_infop 2015-11-08 14:51:04 +10:00
niffiwan aff81fe471 Countermeasures can detonate a single missile
As opposed to detonating all missiles within a radius. Is more
efficient than previous code that traversed the entire missile object
list to find all the missiles to detonate

Add to weapons tbl/tbm
$Countermeasure:
    +Single Missile Kill:   False
2015-11-08 14:42:29 +10:00
niffiwan 26d40553b2 Allow countermeasure kill-distance to be moddable
Trivial efficiency improvement by calculating a pointer once & reusing
it. Add more countermeasure nprintf messages

Add to weapons tbl/tbm
$Countermeasure:
    +Missile Detonation Radius: 40
2015-11-08 14:41:40 +10:00
MageKing17 5fd09f8557 Restore local SSM behavior broken by 88e7c83. Fixes issue #396.
Not sure how I missed that when reviewing the PR, but there you go.
2015-10-27 14:48:21 -07:00
asarium 88e7c83a8e Fix Coverity 1093606 for real this time 2015-10-24 12:53:03 +02:00
MageKing17 7852d13ce5 Check IS_VEC_NULL(&wp->homing_pos) for det_radius and arm_radius.
"$Detonation Radius:" and "$Arm radius:" would both rely on wp->homing_pos being set if wp->homing_object was; however, during free flight time, wp->homing_pos remains uninitialized (a null vector). As a result, their vm_vec_dist() calls would be comparing with the distance from the mission origin (coordinates 0,0,0) instead of the actual location of whatever they were homing in on. In the case of detonation radius, this would result in instant detonation on launch if you fired within det_radius of the mission origin. In the case of arm radius, this would result in the weapon being armed during free flight if launched within the arm_radius of the origin (and yes, you could theoretically experience the effects of both of these bugs simultaneously).

Theoretically, this solution is still less than ideal (a target sitting exactly on the mission origin could cause wonkiness), but it's consistent with the IS_VEC_NULL() checks elsewhere in weapons.cpp. A "proper" solution would basically require rewriting the entire homing code... which, obviously, if somebody would like to volunteer for, I wouldn't stop you ;). In the meantime, firing a homing weapon at a target sitting on the mission origin is even less likely than firing a weapon with one of the affected attributes within a certain distance of the mission origin, which was already pretty uncommon (it took a weapon with an abnormally large detonation radius of 1 kilometer to even realize this bug existed).
2015-10-12 22:48:15 -07:00
MageKing17 75ae511ae6 Stop comparing/setting homing_object to NULL.
The rest of the codebase uses &obj_used_list to mean "no homing target", and the inconsistency could cause all kinds of issues.
2015-10-12 16:10:05 -07:00
The E 0a081fb292 Fixes the logic surrounding the ciws flag 2015-10-02 19:33:09 +02:00
DahBlount d52e27dcc4 Move debug warnings to optional_string()
Only check if we actually set a value for min or max damage.
2015-09-30 13:54:18 -06:00
DahBlount 3bbabea978 Add additional checks to min/max damage code
This checks the damage attenuation code for have a parameter being set
to 0.0f before hand to prevent debug warnings.
2015-09-30 13:19:10 -06:00
asarium 3ece769330 Fix format warnings in weapons.cpp 2015-08-19 11:26:30 +02:00
Goober5000 bd3cd7eb18 Merge pull request #195 from Echelon9/fix/sort-uniq-includes
Review and refactor #include's
2015-08-19 00:05:02 -04:00
Echelon9 98d6b6ce8b Fix: weapons.cpp:7374:8: warning: variable ‘clip_plane’ set but not used [-Wunused-but-set-variable] 2015-07-04 15:55:15 +10:00
Fabian Woltermann b11497d075 Merge pull request #183 from ln-zookeeper/master
Added a "no-secondary-lock-on" ship flag to disable secondary homing.
2015-06-23 10:16:24 +02:00
Echelon9 c5493bb480 Scripted sort and uniq on (internal) project includes. Improves search time and as a by product removed a number of duplicative includes. 2015-06-22 20:24:30 +10:00
Lari Nieminen 4acad3b126 Added a "no-secondary-lock-on" ship flag to disable secondary homing. 2015-06-14 22:25:54 +03:00
DahBlount 923d9851b9 Create "don't spawn if shot" flag
This flag prevents submunitions from being created if a parent weapon is
shot down.
2015-06-14 10:51:09 -07:00
DahBlount 5f63e86dde Add sanity checks and an extra parameter
This adds extra sanity checks to the Weapon Damage Decay code and also
adds a new parameter for weapons that can GAIN damage is they approach
the end of their lifetime.
2015-06-12 09:56:13 -07:00
DahBlount e8f58f5947 Create Weapon Damage Decay framework
This adds the $Daamge Time: and +Min Damage: entries to weapons.tbl.
These parameters are used to create damage attenuation for non-beam primary weapon.
2015-06-12 05:01:21 -07:00
DahBlount 58f38c2e1e Add Max delay and Min Delay
This adds two weapons.tbl entries that allow a weapon to have a range of
possible fire delay times which results in random firing time. simulates
real life firing time error for the most part.
2015-06-11 08:15:22 -07:00
Lari Nieminen 3e4cfa361d Added customizable shield impact explosion effects, originally adapted from Wanderer branch. 2015-05-27 13:41:50 +03:00
MageKing17 05b79a41fb Allow beams to be spawned weapons. 2015-05-15 16:28:42 -07:00
MageKing17 9a5fa95c54 Add subspace beam strikes.
Overhaul hudartillery.cpp to use STL containers (removes hardcoded limits on maximum number of strike types, simultaneously active strikes, and projectiles per strike), use modular tables, allow for different shape options, and allow beams as the weapon.
2015-05-15 16:19:44 -07:00
Swifty c620372357 Soft shadows, deferred lighting, and various major graphics optimizations. 2015-05-02 14:35:37 -07:00