Commit Graph
1933 Commits
Author SHA1 Message Date
Goober5000 c04a23e4f9 add a few debug console commands for running scripts
We have debug commands for sexps, so here are a few for scripts.  These will be very useful for script developers to perform diagnostics and troubleshooting.
2025-06-05 00:40:52 -04:00
Goober5000 2cb76e8d70 revise documentation 2025-06-01 21:04:15 -04:00
Goober5000 9ea44f0479 ETS updates
Two updates to the energy transfer system.
1. Previously, for fighters missing a system (e.g. shields), the energy would be treated as if all energy from that system was routed to the other systems.  So, for example, a fighter's typical speed would be faster without shields than with shields.  A new AI profile flag now treats the other systems as if the energy had not been transferred.
2. At some point in development, Volition intended the `$Power Output` ships.tbl field to affect ETS.  A new AI profile flag now treats the power output as a factor of energy applied to energy systems.
2025-05-14 01:33:28 -04:00
Goober5000 04a671c836 simplify list index 2025-05-10 21:43:17 -04:00
Goober5000 78b556a672 Merge pull request #6667 from Goober5000/player_use_ai_fix
fix chaotic player targeting in rare situations
2025-04-09 20:34:06 -04:00
Goober5000 67a4244152 add sexp to get the current supernova stage
Return the current supernova stage.  This sexp, in conjunction with mission cutscene editor, makes it possible to reproduce the FreeSpace 2 end-of-campaign cutscene behavior purely in FRED.  The resulting cutscene section looks like this:
```

$Campaign End Cutscene: endpart1.mve
+formula: ( true )

$Campaign End Cutscene: endprt2a.mve
+formula: ( < ( get-supernova-stage ) 3 )

$Campaign End Cutscene: endprt2b.mve
+formula: ( >= ( get-supernova-stage ) 3 )

```
Also add a new status subcategory and fix newline behavior when saving the cutscene section.

Fixes #6657.
2025-04-06 22:37:01 -04:00
Goober5000 052dfd8c14 clean up AI state when turning off player AI 2025-04-06 02:45:17 -04:00
Goober5000 60b676cba9 change Player_use_ai from int to bool 2025-04-06 02:11:52 -04:00
Mike Nelson 60777154be Hud config upgrades (#6581)
* base working version

* localization and minor tweaks

* add retail UI controls

* Add way to hide gauges from Config view

* convert hud config from index matching to id matching

* clang
2025-03-22 22:47:38 -04:00
John Fernandez 9f38451fd4 Merge pull request #6631 from Dark-Visor/change_ship_display_name
Change ship display name
2025-03-22 11:44:38 -04:00
Dark-Visor 600b6def7b Updates to change-ship-display-name
Update to allow changes to alt name, callsign and display name.
2025-03-16 21:41:55 +00:00
Dark-Visor e82d3936ce Improve code
Make changes to change_alt_name_or_display_name_or_callsign both single
and multi.
2025-03-16 21:41:54 +00:00
Dark-Visor 9c87f08832 Create sexp for change-ship-display-name
Copy existing code from change-ship-alt-name into new sexp
change-ship-display-name and likewise from OP_SHIP_CHANGE_ALT_NAME to
new OP_SHIP_CHANGE_DISPLAY_NAME. Create new blank function
"sexp_ship_change_alt_name_or_callsign" and a function for multi too.
2025-03-16 21:41:16 +00:00
Goober5000 44cdb29135 some refinement of shield quadrants
Remove the `n_quadrants` field because it is entirely redundant to the size of `shield_quadrant`.  Also, be more rigorous about the difference between `shield_get_quad(i)` (which can fluctuate) and `shield_quadrant[i]` (which gives the exact quadrant strength).  Finally add some C++ casts and move some checks to better places.
2025-03-08 01:10:59 -05:00
Goober5000 97a06bda71 allow stringcost to be case-insensitive
Allow `stringcost()` to use a specified function to check equality, and provide both case-sensitive and case-insensitive sample functions.  Use case-insensitive checks for sexp operator lookup.
2025-02-07 00:39:50 -05:00
Goober5000 3b54488d3b Merge pull request #6565 from Goober5000/utility_functions
add some utility functions
2025-02-04 22:05:05 -05:00
Goober5000 133b033ea0 some upgrades to vmallocator.h
Make `SCP_vector`, `SCP_list`, `SCP_set`, and `SCP_multiset` subclasses of their STL counterparts.  This allows helper functions to be added to each, including the `contains()` function which is not available until C++20.  (This has minor effects on other parts of the codebase that treated `SCP_` and `std::` as synonyms.)  Since there is now a nontrivial amount of code that needs to be in a .cpp file, create vmallocator.cpp.

Note that `SCP_string` truncation has been refactored to use length rather than C-string size to be consistent with other `std::basic_string` functions.

Also, remove some enum class hashing code which is no longer necessary now that the codebase is at C++17.
2025-02-02 14:54:26 -05:00
Goober5000 2ec344d826 add some utility functions
Useful functions for utility.h and string_utils.h.  Adapt existing code accordingly.
2025-02-01 23:16:33 -05:00
Birk Magnussen 540d841f06 Remove any and variant libs 2025-02-01 13:26:28 +01:00
BMagnu 82236ccd9f Merge pull request #6465 from BMagnu/particle_cleanup
The definitive Particle Effect rework
2025-01-30 17:20:42 +09:00
Mike Nelson 2047bfacd0 Fix child enums in lua sexps (#6543)
* fix child enums in lua sexps

* variable shadow

* comments
2025-01-22 07:55:06 -05:00
Goober5000 f102cc3ebf Merge pull request #6537 from Goober5000/functional_if_then_else_fix
fix NaN for functional-if-then-else
2025-01-21 23:06:58 -05:00
Goober5000 39438e1049 Merge pull request #6514 from Goober5000/hitpoint_fixes
make hitpoint sexps safer to use in debriefing
2025-01-20 20:28:23 -05:00
Goober5000 584e9e85d5 update sexp documentation
Clarify some sexp help descriptions.
2025-01-20 18:07:19 -05:00
Goober5000 a606ed73a4 fix NaN for functional-if-then-else
Any NaN encountered in the evaluation of functional-if-then-else should be isolated to the branch on which it occurs.  Fixes #6536.

Also improve some help text for clarity.
2025-01-20 08:47:04 -05:00
BMagnu 5ce7881a27 Merge branch 'master' into particle_cleanup 2025-01-19 19:56:18 +09:00
Goober5000 0e98d01ce5 use the ship pointer version of shield_get_max_strength() where appropriate 2025-01-12 16:52:16 -05:00
Goober5000 eeffbd692f make hitpoint sexps safer to use in debriefing
There is a rather large design flaw in FreeSpace debriefings... debriefing SEXPs can refer to in-mission ship data, while all ships (and all objects) are deleted as soon as the mission completes.  Specifically, `obj_delete()` is called which sets all objects to `OBJ_NONE` and marks them as freed, although the data still exists in the various arrays.  This is the use-after-free problem, but applied to the in-game object system, rather than memory accessed by pointers.

It's probably best to defer fixes to an as-needed basis.  As for hitpoint SEXPs, this change updates them to use the object and ship references from the ship registry, since the ship registry is not cleared by the time the debriefing is loaded.  (Using `objp->instance` and `shipp->objnum` at this point would be problematic.)  Since subsystems are also cleared at this point, this also updates the warning messages in those functions.

Fixes an Assert seen in debug mode in Inferno.
2025-01-12 16:52:16 -05:00
BMagnu a0e9f0d450 Merge branch 'master' into particle_cleanup 2025-01-03 05:50:23 +09:00
Goober5000 8baee0470a refactor AIG_TYPE_* into enum classes 2025-01-02 14:05:21 -05:00
Goober5000 c38882a51e refactor AI_GOAL_* #defines into enums, and remove bitwise operations on them [non-FRED] 2025-01-02 14:05:21 -05:00
Goober5000 a8a9fea4dc Merge pull request #6451 from Goober5000/set_squadron_wings
add set-squadron-wings sexp
2024-12-30 21:06:23 -05:00
Goober5000 2f18741258 add safeguards to the "immobile" flag migration
When a mission is loaded in FRED the "immobile" flag is migrated to "don't-change-position" and "don't-change-orientation".  So, notify the FREDder that this is happening, and add checks to the "potential issues" checker to guard against mixing the old and new flags.

Follow-up to #6304.  Resolves #6489.
2024-12-27 17:07:47 -05:00
Goober5000 d73eaf08ca add set-squadron-wings, part 3
Move a lot of the logic into hudwingmanstatus, and preserve the wing information that is common from one display to the next.
2024-12-24 15:52:50 -05:00
Goober5000 123d68d94d add set-squadron-wings, part 2
Refresh the ship position and HUD status for the new wings.
2024-12-24 15:52:50 -05:00
Goober5000 e58573158c add set-squadron-wings, part 1
SEXP infrastructure and partial implementation, excluding refresh of ship position and HUD status for the new wings.
2024-12-24 15:52:48 -05:00
Goober5000 6487abd57f put operators in proper category; add newlines to sexp help 2024-12-24 15:51:21 -05:00
Goober5000 a3b709cd12 Merge pull request #6453 from Goober5000/add_remove_goal_sexp_updates
enhance the add-goal and remove-goal sexps
2024-12-24 13:42:15 -05:00
Goober5000 17706a0a6d fix sexp_ship_deal_with_subsystem_flag()
Due to broken node iteration, the `sexp_ship_deal_with_subsystem_flag()` function incorrectly treated the first sexp node as a subsystem, but previous versions of the function would fail silently and ignore it, and subsequent nodes would work as expected.  With the new `process_ship_subsystems()` function, this error is properly flagged (and the incorrect node is again bypassed).  So, fix the error by fixing the node iteration.

Follow-up to #6221.
2024-12-15 23:52:59 -05:00
Goober5000 09552bb195 bypass the SEXP caching code if running in FRED 2024-12-10 23:28:09 -05:00
Goober5000 02cbfbc347 enhance the add-goal and remove-goal sexps
1. Allow the goal priority to be an evaluated number, not just a literal number.  This allows the goal priority to be obtained from operators or calculations.
2. Since the priority can now be evaluated, it can be NaN.  In that case, default to the max priority.
3. Consolidate `CDR(CDR(...))` to `CDDR()` in the aigoal implementation
4. Clarify that `remove-goal` removes the first goal of a given type and priority, not necessarily the first fully matching goal.
5. Enhance `remove-goal` to remove all goals matching the constraints, not just the first goal.
6. Allow `remove-goal` to disregard priority when checking for matching goals.
2024-12-10 23:28:09 -05:00
Birk Magnussen e955a7f1be Merge branch 'master' into particle_cleanup 2024-12-10 23:41:07 +01:00
Goober5000 d83f6ccdaf add nebula-set-range
Add a simple SEXP operator for changing the range of the current nebula.  Also, slightly reorder the existing nebula operators.
2024-12-02 12:41:26 -05:00
Goober5000 8115589941 address feedback 2024-11-29 23:22:43 -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
Mike Nelson e31100da95 Add hud-set-xstr sexp (#6406) 2024-11-25 17:45:34 -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 ad08452307 Merge pull request #6409 from Goober5000/generic_all_subsystems
enhance sexp handling of generic subsystems
2024-11-11 10:54:16 -05:00
Goober5000 57b966cbee add is-true-for-duration sexp
This adds a sexp to allow any boolean condition, or series of conditions, to be evaluated not only instantaneously, but also for a period of time.  For example, this can be used with `is-facing` to check if a ship has been facing another ship for a specified duration.  Previously this had to be done through scripting or through a group of sexps.

Implements #5754.
2024-11-08 13:01:06 -05:00
Goober5000 8bbe0a0364 make mission skipping more robust
When a player tries to skip a mission during a campaign, all goals and events are marked true.  Thus it's possible for the campaign condition to unexpectedly *not* evaluate to the next mission (e.g. `if is-previous-goal-false` or `is-previous-event-false` is used without the optional argument).  So add a failsafe check, with a warning, to handle this case.  Also update the documentation to clarify that the optional argument is checked for the mission-skipped case.

Fixes an endless skip-to-the-same-mission loop discovered by ShivanSlayer in Shrouding the Light.
2024-11-05 15:15:16 -05:00