Commit Graph
1085 Commits
Author SHA1 Message Date
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 1c2117095a make object aware of its subclasses
Looking through all places in the scripting API where `l_Object.Set()` is called, here is one where we might want to know about the object's breed.

(Normally we would return the result of `ade_set_object_with_breed()`, but the `testLineOfSight_internal()` function has multiple return arguments.)
2025-01-17 18:00:27 -05:00
Goober5000 c4d17053d6 Merge pull request #6524 from Goober5000/object_model_functions
tweak object model/instance convenience functions
2025-01-16 21:00:43 -05:00
Mike Nelson c9ccace89a Lua set mainhall (#6498)
* lua set mainhall

* boolEAN

* tidy
2025-01-16 07:44:38 -05:00
Mike Nelson b367fe8441 Some minor Control Config UI changes for SCPUI (#6508)
* allow preset override from Lua and change a warning to a popup if we're in the UI

* const it up

* headers might help, too, dummy
2025-01-16 07:44:16 -05:00
Goober5000 fa10f8e8eb tweak object model/instance convenience functions
Make these convenient functions even more convenient:
1. Change `object_get_model()` to `object_get_model_num()` and `object_get_model_instance()` to `object_get_model_instance_num()` to more accurately reflect what they do
2. Add new `object_get_model()` and `object_get_model_instance()` functions to return `polymodel*` and `polymodel_instance*` values.
2025-01-16 01:10:53 -05: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
wookieejedi b29e397fa7 Fixes Debris not inheriting parent ship texture replacements (#6519)
* Fixes Debris not inheriting parent ship texture replacements

Debris chunks that use the same texture as the actual hull model are not updated when `texture-replace` methods are used. For example, a clean grey base textures that has texture replace via table or FRED is changed to red/brown. But when the ship is destroyed the debris objects are using the original lighter texture instead of the newer darker one.

#6154 provided the groundwork to fix this, but one step fell through the cracks; setting the debris hull textures to what the parent ship used.

This PR sets the debris texture replacements when debris is created to fix this (and fixes #2462).

Fix is tested and works as expected.

* cleanup setting shared

* get pmi correctly
2025-01-14 07:42:46 -05:00
Mike Nelson feb0932015 lua access to max ships per wing (#6510) 2025-01-14 00:57:08 +09:00
Goober5000 cecfd9f7ff fix calculation of percent_killed
This has been broken ever since commit 6c17ef09ab in 2005.  Since `get_hull_pct()` did not return negative values, `percent_killed` was always 0.  Allow negative values in this case.
2025-01-12 16:52:16 -05:00
Goober5000 a2141865e1 Merge pull request #6467 from Goober5000/ai_goal_refactor
Ai-goal refactor
2025-01-11 15:10:48 -05:00
Mike Nelson b49db4ef7b Add Lua global variables library (#6472)
* add global variables library

* nested namespaces
2025-01-06 17:36:59 +09:00
Mike Nelson 297a9389cd Func to get a ship's persona directly (#6497)
* func to get a ship's persona directly

* virtvar instead of func

* get persona index

* lua index
2025-01-05 10:22:32 -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 5c737a5bf9 improve campaign file extension handling (#6443)
As discovered by WouterSmits, campaigns with periods in their filenames caused issues with FSO's campaign handling.  Specifically, in The Babylon Project, the EA-Minbari war v1.0.fc2 campaign would not save progress because FSO expected EA-Minbari war v1.fc2 in certain places.  This is because the `_splitpath()` function attempted to remove an extension from a filename that already had it removed.  For most campaigns this did not matter, but WouterSmits found a campaign where it did.

To solve this, there is now a new `util::get_file_part()` function to remove the path without removing the extension.  This replaces `_splitpath()` for campaign files, as well as the similar `clean_filename()` and `GetFilePart()` functions in other places.  All code paths were inspected for any chance of inadvertent extension adding, and Assertions were added to verify future code.  The only potential problem area was `player:loadCampaignSavefile()` which now pre-removes the campaign extension if needed.
2024-12-22 22:31:58 +01:00
Goober5000 91b54c759e Merge pull request #6424 from Goober5000/credits_substitute_music
add $Substitute Music: for credits.tbl
2024-12-16 12:15:49 -05:00
Goober5000 b7c676132a Merge pull request #6446 from Goober5000/docked_warpIn
fix ship:warpIn() behavior for docked ships
2024-12-16 12:12:46 -05: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 6bdd80bed3 fix ship:warpIn() behavior for docked ships
As described in #6445, the `warpIn()` script function did not work correctly for docked ships because the dock leader flag was not set.  So, set the flag, but make sure to set it only for the first ship for which `warpIn()` is called.  And make sure the flag is removed after the ship finishes arriving.

Also remove an `Int3()` in `shipfx_warpin_start()`.  (This Int3() was not actually in the original Volition source code release.)

Fixes #6445.
2024-11-29 21:32:04 -05: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 df6de0e0b8 enhance help text for script functions that do weapon category checks 2024-11-26 12:51:50 -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
Goober5000 b3470af307 fix memory management in FontManager
This refactors FontManager to improve it in several ways:
1. Change all the dynamic memory management to use `new`, rather than mixing `new` and `vm_malloc`
2. Change the current font to use an index rather than a pointer
3. Take advantage of more C++11 features to avoid redundant lookups
4. Use case-insensitive name comparison
5. Avoid overflowing the `fnt->filename` field
6. Use `Warning` rather than `Error` in a non-critical error situation
2024-11-22 20:12:17 -05:00
Goober5000 b412d93032 add $Substitute Music: for credits.tbl
Similar to Substitute Music in other places, this allows the credits music to be changed if an optional music pack is present.
2024-11-14 19:46:30 -05:00
Goober5000 e2f8de72e7 add hud drawing and pre-player-entry checks
1. add `hu.isOnHudDrawCalled()` and clarify documentation for `hu.HUDDrawn`
2. add `mn.isPrePlayerEntry()`
2024-11-10 12:58:02 -05:00
Mike Nelson 1a1bd84290 Grant lua access to countermeasure parameters (#6345)
* grant lua access to countermeasure parameters

* you win this round, Clang

* and Wookie wins the next round
2024-11-05 08:29:02 -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
Goober5000 42de74a62e Merge pull request #6349 from Goober5000/hud_gauge_api_functions
add several useful hud gauge functions
2024-10-29 19:07:45 -04:00
Goober5000 c582f77965 Merge pull request #6405 from Goober5000/getBreedName_for_parse_objects
adds getBreedName() in a few places
2024-10-29 19:07:38 -04:00
Goober5000 e58f8f9a5b Merge pull request #6365 from Baezon/disambiguate-shockwave-damage
Disambiguate `ShockwaveDamage` cases
2024-10-29 19:07:30 -04:00
Goober5000 e3d28b7fb1 adds getBreedName() in a few places
There are a few places in the Lua script API where a variable could be some type of "object" or something that is not an "object" but is still useful - one example is the return value from oswpt:get().  With this function, scripts will be able to tell what the variable is without risking an exception.
2024-10-29 00:20:05 -04:00
mjn-mixael a1a5780104 return false if skip to string can't find the string 2024-10-07 16:17:49 -05:00
Asteroth 649d458e83 fix spelling 2024-09-23 15:16:35 -04:00
Asteroth 40e334fc94 Disambiguate shockwave cases 2024-09-23 03:16:45 -04:00
Goober5000 62180212f5 derp
Counting is A-1 SUPAR.
2024-09-21 18:06:35 -04: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 24555ac739 add functions for getting swarm info and corkscrew info
Apparently virtvars can only return one value.  This deprecates the virtvars and adds function equivalents for getting weapon class swarm info and corkscrew info.  Fixes a bug reported by Woolie Wool in Discord.
2024-09-17 14:07:26 -04:00
Goober5000 0fd2e9396b add several useful hud gauge functions
1. a `hud-reset-color` SEXP operator, to complement the existing `hud-set-color` and set a gauge back to its configured color
2. `ConfigType` and `ObjectType` Lua virtvars which are essentially the built-in gauges' equivalents of `Name` for custom gauges
3. `getColor` and `setColor` Lua functions
2024-09-11 14:42:07 -04:00
Goober5000 dfe34ec58d update documentation 2024-09-11 02:03:40 -04:00
Mike Nelson 40bbced2f9 Reset hotkey lines before populating (#6318)
* reset hotkey lines before building

* clang is the most high maintenance partner i've ever had
2024-08-27 20:36:46 +02:00
EatThePath 32b69eda2a Merge pull request #6307 from naomimyselfandi/fix-weapon-class-swarm-info
Fix WeaponClass.SwarmInfo
2024-08-22 14:13:27 -04:00
Mike Nelson 397a1c84ba Grant access to shipclass shield hitpoints value (#6308) 2024-08-20 01:18:07 +02:00
Naomi Coffman ce6a6b447e Fix WeaponClass.SwarmInfo 2024-08-19 14:01:53 -04:00
Goober5000 8390304a6e Merge pull request #6292 from Goober5000/lua_tostring_nullcheck
safety check for lua_tostring()
2024-08-13 22:39:16 -04:00
Goober5000 f7e934440c parameter deconfliction (#6282)
Prevent compiler warnings caused by the `value` parameter of the external serializers hiding the `value` member of `std::integral_constant`.

Follow-up to #6276.
2024-08-13 23:17:28 +02:00
Goober5000 4cbd84d59e safety check for lua_tostring()
The return value of `lua_tostring()` is NULL if (and only if) the string conversion failed.  Many places in the code did not check for this situation, which led to the crash in #6290.

Fixes #6290.
2024-08-12 16:00:24 -04:00
Goober5000 e9592bc4d7 add scripting support for wing wave min/max delay (#6280)
There was scripting support for wing arrival/departure delays, but not for wave delays.  Now there is.
2024-08-12 19:58:25 +02:00
Goober5000 8dc1ffea94 Merge pull request #6260 from Goober5000/coverity_fixes
some coverity fixes
2024-08-11 17:01:39 -04:00
Goober5000 734efbdb54 variable checks and message enhancements 2024-07-29 16:04:23 -04:00
Birk Magnussen 500bf1c2ca Add clang NOLINTs
To explain: Clang's being stupid here, and seemingly does not recognize that the placement new in the deserializers requires a non-const ptr.
2024-07-29 19:59:02 +02:00