Commit Graph
3059 Commits
Author SHA1 Message Date
BMagnu e1810ed522 Allow curves to be tabled inline (#6674)
* Add inline curve definitions

* Fix comma parsing

* Fix cast

* Incorporate feedback

* Fix parsing call
2025-06-02 01:41:06 +02:00
Goober5000 a1a453a217 Merge pull request #6671 from Goober5000/ets_updates
ETS updates
2025-05-18 22:55:37 -04:00
Goober5000 3b51c890fc these lines are things we want to allow 2025-05-17 17:14:26 -04:00
Goober5000 d5e3325bef fix unsigned check 2025-05-16 23:32:32 -04:00
Goober5000 85f7ccc083 fix use-after-move 2025-05-16 23:32:13 -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 42dd1eb3c2 Merge pull request #6713 from Goober5000/various_small_issues
Various Coverity issues
2025-05-13 23:18:43 -04:00
Goober5000 04a671c836 simplify list index 2025-05-10 21:43:17 -04:00
Goober5000 ceee045b35 coverity: move instead of copy 2025-05-10 01:15:46 -04:00
Goober5000 e0082447d1 coverity: integer division, string resize, printf arg, float/double 2025-05-10 01:15:46 -04:00
Goober5000 a9ff3c55b9 fix compiler warning 2025-05-08 02:36:47 -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 7246bc331a Merge pull request #6659 from Goober5000/supernova_stage_and_missionsave_tweaks
add sexp to get the current supernova stage
2025-04-07 18:06:50 -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 a7b47e7a34 Hash check retail strings and weapons tables (#6662)
* hash check retail strings and weapons tables

* const
2025-04-03 21:56:28 +02: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 819404f791 ensure matrices are well-behaved
When an orientation matrix is constructed using one or more vectors, all such vectors must be normalized.  Previously, the code did not enforce this for matrices parsed from a mission or table file.  Although FRED will use correct matrices, it also truncates floating point values to six decimal places, so non-normalized vectors might be written to the mission file as happened in #6632.  And there is always the possibility that someone could manually edit the mission file to corrupt the matrices.

While we're at it, per suggestions from Asteroth and qazwsxal, make sure the matrix is orthogonal as well.  The `vm_fix_matrix` function handles all relevant calculations.

Fixes #6632.  Follow-up to #6596.
2025-03-15 23:01:29 -04: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 a99aa35c7c Merge pull request #6614 from Goober5000/parse_line_updates
upgrade line parsing and end-of-line checks
2025-03-05 19:38:20 -05:00
Goober5000 343d9a36d4 std::unique_ptr refactoring
Use `std::unique_ptr` rather than `vm_malloc` and `vm_free` to handle optional strings in ship classes.  This makes the code more robust and increases memory safety.  This also allows several string variables to be consolidated in the ship class and weapon class script APIs.

Also add new `stuff_string()` overloads and a new `F_TRIMMED` string parsing type to handle the new fields and the string trimming done inside `stuff_malloc_string()`.
2025-03-04 22:52:53 -05:00
Goober5000 791c250c30 upgrade line parsing and end-of-line checks
Upgrade `parse_get_line` to detect all three EOL types: CR, LF, and CRLF.  The function is now more robust against line ending mismatches and will now also warn the modder if a file contains mixed line endings.

Fixes #6395.
2025-03-02 12:48:02 -05:00
Goober5000 c2829ceb23 enhance detection of model property errors
1. Trim trailing whitespace on any property values, just as leading whitespace is trimmed.  All places where `get_user_prop_value()` is used implicitly or explicitly require this.
2. Warn the user if an invalid `$special` value is parsed.  This would have caught #1, and will now catch related errors, such as misspellings, in the future.
3. Enhance `string_lookup()` with the ability to print the list being searched, if desired.  Remove an unused version of `string_lookup()`.
4. Check for lower-detail submodels being recognized as subsystems.
2025-02-28 01:52:05 -05:00
Goober5000 55706d8937 Merge pull request #6569 from Goober5000/smol_tweaks
misceallaneous small fixes and tweaks
2025-02-09 15:17:31 -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 85cb0480e7 fix waypoint scripted sexp type to return a waypoint 2025-02-04 00:34:39 -05:00
Goober5000 5f73220cd1 Merge pull request #6559 from Goober5000/mission_goal_scripted_sexps
enable mission goals for scripted sexps
2025-02-03 21:42:07 -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
BMagnu 7c37e9932d Merge pull request #6564 from BMagnu/cpp_17_cleanup
C++17 cleanup followup
2025-02-02 18:31:14 +09:00
Goober5000 adf9ac0e22 Merge pull request #6561 from Goober5000/subsystemname
add subsystemname scripted sexp type
2025-02-02 02:31:02 -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
Goober5000 2a6017cb73 enable mission goals for scripted sexps
Add "goal" as a type recognized by scripted sexps.  Also add `mn.Goals` as a collection to complement `mn.Events` and move the goal type to goal.cpp and goal.h to match event.cpp and event.h.  The new `mn.Goals` collection contains the same data as the existing `Objectives` collection in the briefing UI library, so the latter could be deprecated.
2025-01-30 22:09:29 -05:00
Goober5000 2f75155721 add subsystemname scripted sexp type
This type for subsystems is analogous to the shipname type for ships.  Sometimes it is useful to refer to a subsystem even if its parent ship is not present.  Whereas the subsystem object would be invalid, the subsystemname string still contains the string that the mission designer specified.

Relatedly, upgrade the parsing of `+Parent Parameter Index:` to be checked on both parented and non-parented parameters.  This will help both modders who put the field in the wrong place and programmers who may want to add a parented parameter in the future.
2025-01-30 21:05:38 -05:00
BMagnu 82236ccd9f Merge pull request #6465 from BMagnu/particle_cleanup
The definitive Particle Effect rework
2025-01-30 17:20:42 +09:00
Joshua Glatt 19b849fd71 disallow all forms of add-to-map with a container used in special arg 2025-01-25 16:47:05 -08:00
Joshua Glatt 05e1a7a429 fix map container mutation issues 2025-01-25 16:08:49 -08: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
Mike Nelson d27f735588 Add scaling for vfnts and scale multipler to gr_string() (#6481)
* Add scaling for vfnts and scale multipler to gr_string

* nullptr

* Add scaling to a couple other string operations

* Don't scale fonts in FRED
2025-01-14 15:05:06 -05:00