Commit Graph
1983 Commits
Author SHA1 Message Date
Birk Magnussen 40312e7419 Add modular curve sets to volumes 2024-12-12 16:44:34 +01:00
BMagnu 2aac63e0a9 Allow particle volumes to have access to the source for modular curves 2024-12-11 16:01:07 +01:00
BMagnu 2ed3b62e03 Curvify thruster particles 2024-12-11 15:04:35 +01:00
BMagnu 13e3f577ef Deal with split particle velocity curves 2024-12-11 14:14:03 +01:00
BMagnu c2051578d6 Basic modular curves for particles 2024-12-11 13:55:36 +01:00
Birk Magnussen e955a7f1be Merge branch 'master' into particle_cleanup 2024-12-10 23:41:07 +01:00
Goober5000 2b84233b91 Merge pull request #6439 from Goober5000/weapon_script_enhancements
add scripting support for weapon class "turret names"
2024-12-02 12:39:51 -05:00
Goober5000 5526f757ed Merge pull request #6221 from Goober5000/turret_ai_enhancements
create a `process_ship_subsystems` routine for subsystem operations
2024-12-02 00:18:18 -05:00
Goober5000 c33e21f1c2 create a process_ship_subsystems routine for subsystem operations
Many SEXP operators that work on subsystems use very similar code.  This new function allows the operator implementations to be streamlined and makes future modifications easier.  For example, the `change-ai-class` operator now works with names such as `<all turrets>` as well as specific subsystems.
2024-11-29 21:39:29 -05:00
Kestrellius 2735404b18 Makes it actually cycle properly 2024-11-29 10:16:21 -08:00
Kestrellius 630f6c29d7 Gives Type 3s higher priority. 2024-11-29 10:03:49 -08:00
Kestrellius 2fe9c94f63 Adds fix for missing Type 3 beam behavior. 2024-11-29 10:02:00 -08:00
Goober5000 854b9abc89 fix distinction between lasers and beams
Many beams are lumped into the #Primary Weapons section of weapons.tbl, which will mark them as WP_LASER.  Fix the few instances of code that are intended for beams that may have omitted most beams by mistake.

Randomization of weapon impact particle radius is also affected, but since this affects existing visual effects, it was not changed.
2024-11-26 14:10:26 -05:00
Goober5000 089c870ad8 add scripting support for weapon class "turret names"
A recent-ish FSO feature, `$Turret Name:`, allows turrets to be displayed differently on the HUD depending on the weapon they carry.  It is useful for scripts to be aware of this, so this PR adds a `TurretName` virtvar for weapon classes, as well as a `NameOnHUD` virtvar for subsystems.  The `NameOnHUD` virtvar shares exactly the same code as the HUD uses, so any future HUD modifications will be reflected in scripting as well.  This required a small amount of refactoring: changing `get_turret_subsys_name()` to return a value rather than stuffing a string, renaming it to `ship_subsys_get_name_on_hud()`, and moving it to ship.cpp.
2024-11-25 16:35:00 -05:00
BMagnu 68f3fa6d8c Actually compile with proper optimizations in a release build. (#6336)
* Change optimization to O3 and enable LTO

* Remove ODR violations

# Conflicts:
#	code/menuui/playermenu.cpp
#	code/osapi/osregistry.cpp

* Fix uninitialized structs

* Remove negative alloc warning

* O3 for mac

* Remove GCC13 warnings

* Fix warning

* Properly fix weapon alloc size

* Try to placate GCC9's Psnet_socket estimation

* remove warnin

* Fix safe fd set check
2024-11-25 20:10:38 +01:00
Goober5000 84f1b2be9f Merge pull request #6411 from Goober5000/all_the_consts
all the consts!
2024-11-23 14:36:56 -05:00
Goober5000 f89085b5e9 improve bank-compatibility check
1. Don't set the `can_use_for_bank` flag to FALSE if the bank is primary but the weapon is secondary, or vice versa
2. Make sure to only restrict the weapons by bank if the ship has per-bank restrictions

In support of this, add `is_primary()` and `is_secondary()` helper functions to `weapon_info` and use them in logical places.

Follow-up to #6434.  Fixes a few subtle bugs from that PR.
2024-11-22 00:35:10 -05:00
Goober5000 a939d5e15a Cycle expansion followup
A few addenda to PR #6364:
1. Use `std::swap` in the move constructor, since the fields are specifically being moved, not assigned
2. Fix off-by-one error when parsing firing patterns, and make the pattern count non-fatal
3. Standardize the setting of fire points since it's done in three different places, and in the case of `ship_set_default_weapons()`, `primary_firepoint_next_to_fire_index` was not reset to 0.  It might be useful to refactor this code into its own function.
4. Make the setting of `primary_firepoint_next_to_fire_index` consistent between forward and reverse cycling
5. Remove a couple redundant `.clear()` calls and fix a typo
2024-11-19 19:49:58 -05:00
Kestrellius 51fb24f558 Fixes pattern_index oversight. 2024-11-19 14:22:42 -08:00
wookieejedi 5e7af132fc Fix CTD from recent cycle expansion
The recent cycle expansion PR (#6364) causes a CTD when change-ship-type is used. This PR fixes that crash by using `pm->n_guns` instead of 'MAX_SHIP_PRIMARY_BANKS' and clarifies the definition comment for the  `pm->n_guns` to help avoid this kind of quandary in the furture.

Tested and works as expected.
2024-11-17 12:15:45 -05:00
BMagnu 189803a6a4 Allow modern particles for ship / thruster particles 2024-11-14 14:52:53 +01:00
Kestrellius d6b444c9e6 Cycle expansion (#6364)
* Adds different firing patterns for weapons.

* cleanup

* further cleanup

* appeasement

* appeasement^3

* Requested changes.

* Deals with targeting flag issue.

* Resolves merge conflicts.

* blood for the blood god, tidy for the tidy throne

* Increments XSTR again.
2024-11-13 08:05:06 -05:00
Goober5000 31a86e3f3d all the consts!
Some experimentation resulted in a lot of const-cascading.  This PR applies `const` to a large number of functions.
2024-11-07 23:33:13 -05:00
Goober5000 89605651ca Merge pull request #6359 from Goober5000/waypoint_pointer_to_index
replace waypoint pointers with waypoint indexes
2024-11-04 13:37:20 -05:00
Birk Magnussen fe815f89ca Set pre-curve lifetime for damage-spew and similar to 1 2024-11-03 21:54:35 +01:00
Birk Magnussen e2dbb46b9c Fold OmniEffect into ParticleEffect 2024-11-03 14:45:16 +01:00
Birk Magnussen 1aa67c9342 Properly use new effect host 2024-11-02 14:48:58 +01:00
Birk Magnussen c513ab5ad3 Fix legacy particle lifetime when built-in bitmap is used 2024-10-25 12:45:57 +02:00
BMagnu a79c23be07 Add orientation-based velocity inherit for beampiercingeffects 2024-10-23 15:27:02 +02:00
Birk Magnussen 39c6dc788d Fix default ship particle parameters 2024-10-22 21:56:28 +02:00
Goober5000 a9d2605c0e proper fix for fighter/bomber
This fixes the fighter/bomber type which had been broken ever since the objecttypes.tbl upgrade in 246cfcfa65: the fighter/bomber type is again treated as a union of fighters and bombers, not a unique type of its own.  This requires special handling for the `OPF_SHIP_TYPE` SEXP argument type, and all four SEXPs that use `OPF_SHIP_TYPE` have been modified to check for the special case.  The explicit fighter/bomber type has again been removed from the built-in objecttypes.tbl.

The requirements for "fighter/bomber" to be valid are 1) there is no explicit "fighter/bomber" type in the mod; 2) a "fighter" type exists; 3) a "bomber" type exists.  If any of these conditions is not met, the special case behavior is not enabled.

Follow-up to #6390.  Properly fixes #6388.
2024-10-13 21:43:18 -04:00
Goober5000 349a9927cc properly initialize cargo titles
This adds several missing initializations of cargo titles for both ships and subsystems.  Note that `Subsys_status` initialization needs to happen in `allocate_subsys_status()`, because subsystems can be allocated in red-alert or in the `ship-copy-damage` SEXP, not just parsing.

Follow-up to #6000.  Fixes a rather insidious ERANGE error in Inferno.
2024-10-04 00:56:47 -04:00
Goober5000 09d89066ec remove bogus ship types from objecttypes.tbl
The "stealth" and "fighter/bomber" ship class flags are not actual ship types, so they should never have been added to objecttypes.tbl.  Remove them from the built-in table.

Additionally, if a mod *does* use "stealth" in its own objecttypes.tbl, remove it.  This prevents the invalid "stealth" type from overriding a valid existing type, which fixes #6366.
2024-09-25 01:27:39 -04:00
Birk Magnussen 0ec845b4ce Make builtin particle sources actually anonymous 2024-09-24 17:34:43 +02:00
Birk Magnussen 63a18b28fa Update Ship and Supernova effects to Omni 2024-09-24 17:23:01 +02:00
Birk Magnussen e0c2ba7011 Prepare for the removal of composite effects 2024-09-24 17:23:01 +02:00
BMagnu 97dbd2fa83 Removal of effects, pt. 2 2024-09-24 17:23:00 +02:00
Birk Magnussen 7d10ed44fa Removal of effects, pt. 1 2024-09-24 17:22:59 +02:00
Goober5000 385bf49b39 replace waypoint pointers with waypoint indexes
Several locations in the code (notably `ai_info` and `waypoint_h`) previously stored pointers for waypoints and waypoint lists that need to be valid for more than one frame.  Since both waypoint lists and waypoint paths may change size, resulting in vector reallocation, the information should be stored as indexes instead.

Fixes #6353.
2024-09-21 01:00:24 -04:00
Goober5000 28659bb1f9 fix deletion of looping sounds
Per the comment earlier in this function, both -1 and -2 are expected values for sound indexes.  Update the sound validity check accordingly.  Fixes an assertion in `obj_snd_delete()` encountered by FotG when a sound index was -2.
2024-08-27 15:10:14 -04:00
John FernandezandGoober5000 faaa235c84 Fix: Always check for nullptrs and make red-alert respect cur_waves from last mission (#6262)
* keep from crashing

* Also, bash the number of waves if necessary

* Add Debug warning to modders

* address feedback

* formatting

---------

Co-authored-by: Goober5000 <[email protected]>
2024-08-27 14:18:37 -04:00
Goober5000 704bf95a75 implement don't-change-position and don't-change-orientation
Per #4294, this adds two new flag that, together, are equivalent to the legacy "immobile" flag but individually provide more fine-grained control.  Since the physics for position and orientation have a bit of overlap, the new flag functionality simply reverts whatever position or orientation changes were done by the physics sim.

In the FRED and qtFRED ship flags dialogs, the "immobile" flag (aka "Does Not Move") is replaced by the two new flags, but in FSO the situation is more complicated.  The old and new flags coexist and have overlapping functionality, so the mission designer must be careful to set and unset the appropriate flag (that is, it is possible for both "immobile" and "don't-change-position" to be set at the same time, in which case the ship cannot change position without both flags being unset).  The `set-immobile` and `set-mobile` legacy SEXPs ensure that the new flags are removed so as not to conflict with the legacy flag, but the `alter-ship-flag` and `are-ship-flags-set` SEXPs and the `getFlag` and `setFlag` script functions use exactly what the FREDder/scripter specifies and nothing else.

(I attempted to completely replace "immobile" with the two newer flags, but it proved intractable to do this while maintaining reverse compatibility: retrofitting single-flag functions to apply dual flags for one particular situation made the functions harder to understand as well as introducing many edge cases and opportunities for bugs or "gotchas".)

Implements #4294.
2024-08-17 16:46:48 -04:00
Goober5000 9887a7b638 move secondary_point_reload_pct maintenance to a more sensible location 2024-08-17 16:46:48 -04:00
Kestrellius 6da7830b7b Add offset for tabled particle effects (#6264)
* Adds particle effect offset.

* bugfixing

* Switches to a cleaner approach.

* Futureproofing for particle parenting.

* actually let's just bundle parenting into this one

* working on turrets

* grinding toward turret correctness

* still grinding toward correctness

* Gets turrets working correctly.

* Fixes merge artifact

* appeases clang-tidy

* Updates some comments.

* Updates some comments.

* Tiny bit of cleanup.

* Deduplicates comments.
2024-08-13 23:06:44 +02:00
Tyler Blount eeba1085c9 Merge pull request #6243 from MjnMixael/per_weapon_convergence
Per weapon auto convergence
2024-07-20 11:57:55 -07:00
mjn-mixael 1744718a03 We can remove this bool now that we have bools for each flag set 2024-07-14 10:08:50 -05:00
mjn-mixael d9cfd1f626 Fix boolean checks that determine the which aiming style to use 2024-07-14 09:53:19 -05:00
Goober5000 cdbf525877 Merge pull request #6233 from JohnAFernandez/Add-Insignia-Renderer
Fix Insignia Checkbox in the Lab
2024-07-11 21:19:01 -04:00
mjn-mixael 6fdaf87717 du const 2024-07-08 14:32:09 -05:00
mjn-mixael acccc90ded per weapon auto convergence 2024-07-08 14:06:56 -05:00