You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+70-16Lines changed: 70 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,12 +14,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
14
14
15
15
- Massive performance improvements, especially in very large scenes with lots of actors.
16
16
17
-
- New multithreaded AI and Lua scripts.
17
+
- New multithreaded AI and Lua scripts.
18
18
Lua scripts now have extra callback functions `ThreadedUpdateAI(self)`, `ThreadedUpdate(self)` and `SyncedUpdate(self)`.
19
19
The `Threaded` callback functions are run in a multithreaded fashion, whereas `Update` runs in a singlethreaded fashion (where it's safe to modify global state or affect other objects).
20
20
The `SyncedUpdate` callback is called in a single-threaded fashion, but only when an MO directly requests it by calling `self:RequestSyncedUpdate()`. This gives greater performance, as the script can avoid any single-threaded updates being called on it until it explicitly needs it.
21
21
22
-
- New generic Lua messaging system, to allow scripts on objects to communicate with other objects or scripts.
22
+
- New generic Lua messaging system, to allow scripts on objects to communicate with other objects or scripts.
23
23
Scripts on `MovableObject` now have new callback functions `OnMessage(self, message, context)` and `OnGlobalMessage(self, message, context)`.
24
24
Script on `Activity` also have similar functions: `ActivityName:OnMessage(message, context)` and `ActivityName:OnGlobalMessage(message, context)`.
25
25
The `OnMessage` callback will be triggered whenever the `SendMessage(message, context)` is called on an object, i.e `Object:SendMessage("Hello World")`.
@@ -33,7 +33,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
33
33
New INI and Lua (R/W) property `CanAdjustAngleWhileFiring`, which defines whether the jet angle can change while the jetpack is active. Defaults to true.
34
34
New INI and Lua (R/W) property `AdjustsThrottleForWeight`, which defines whether the jetpack will adjust it's throttle (between `NegativeThrottleMultiplier` and `PositiveThrottleMultiplier`) to account for any extra inventory mass. Increased throttle will decrease jet time accordingly. Defaults to true.
35
35
36
-
- Multithreaded asynchronous pathfinding, which dramatically improves performance on large maps and improves AI responsiveness.
36
+
- Multithreaded asynchronous pathfinding, which dramatically improves performance on large maps and improves AI responsiveness.
37
37
New `Actor` Lua property (R) `IsWaitingOnNewMovePath`, which returns true while the actor is currently calculating a new path.
38
38
New Lua `SceneMan` function `CalculatePathAsync` for asynchronous pathfinding. This function has no return value, and is used as follows:
39
39
```lua
@@ -52,15 +52,38 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
52
52
team -- The team to use when calculating the path, allowing the path to ignore that team's doors. If not specified, it will default to `Activity.NOTEAM`, and no doors will be ignored.
53
53
);
54
54
```
55
+
56
+
- Many new sounds added to the game.
57
+
Browncoats have gotten a full sound revamp for everything except their actors. Every Browncoat item now has its own custom sounds.
58
+
Most base explosions and Riot Shield sounds have been redone.
55
59
56
-
- New FMOD and SoundContainer features:
57
-
The game is now divided into SFX, UI, and Music busses which all route into the Master bus.
58
-
The SFX bus has compression added for a better listening experience, and a safety volume limiter has been added to the Master bus.
59
-
Aside from volume being attenuated, sounds will now also be lowpass filtered as distance increases.
60
-
New `SoundContainer` INI and Lua (R/W) property `BusRouting`, which denotes which bus the SoundContainer routes to. Available busses: `SFX, UI, Music`. Defaults to `SFX`.
61
-
`Enum` binding for `SoundContainer.BusRouting`: `SFX = 0, UI = 1, MUSIC = 2`.
62
-
New `SoundContainer` INI and Lua (R/W) property `PanningStrengthMultiplier`, which will multiply the strength of 3D panning. This can be used to achieve for example a psuedo-Immobile effect where attenuation effects are still applied but the sound does not move from the center. Recommended to keep between 0.0 and 1.0.
63
-
New `SoundContainer` INI and Lua (R/W) property `CustomPanValue`, which hard-overrides the panning of a sound. Clamped between -1 and 1 for left and right panning. 0 disables the override and will re-enable default behavior. This should probably only be used on Immobile sounds, but it can be used on any sound. No guarantees.
60
+
- New delivery system, Buy Doors:
61
+
Buy doors are customizable inert background objects that can take orders either via Lua messages or by using the pie menu near them.
62
+
Using them via the pie menu will order your current buy menu order.
63
+
64
+
- Capturable Framework, which is a very customizable object that can be captured by teams and send out Lua messages as it does so. Should be extremely useful to make new forms of activities.
65
+
66
+
- Item Dispenser object which dispenses items via the pie menu in a customizable way.
67
+
68
+
- Timed capturing docks for rockets and dropships, which are nifty on their own but shine when used with the DockingHandler to have AI use them.
69
+
70
+
- Three new Browncoat items have been added: a shield with reactive explosive armor, a revolver, and a close-range incendiary battle rifle.
71
+
72
+
- A whole suite of Lua frameworks for activities:
73
+
BuyDoorHandler, which has a few utility functions to use buy doors at the activity-level easier.
74
+
DeliveryCreationHandler, which standardizes creating squads of actors and their equipment.
75
+
DockingHandler, which handles craft docking using the new docks.
76
+
HUDHandler, which provides functions for displaying listed objectives, panning the camera, and other camera-related utilities.
77
+
SaveLoadHandler, which can serialize tables and also handle saving and loading tricky things like MOs.
78
+
TacticsHandler, which is a framework to add tasks and squads and have those squads go around doing tasks without further input.
79
+
80
+
- Human actors have redone foley sounds (terrain impacts, device switching sounds) and also new subtle footstep sounds, including light and heavy variants for the various light and heavy actors.
81
+
82
+
- Shields now make noise when walked with.
83
+
84
+
- Two minor utility scripts:
85
+
MOUtility, which currently has functions to smartly set MOs to be unhittable or to freeze actor HP.
86
+
ParticleUtility, which currently has a directional smoke FX creation function.
64
87
65
88
- Tracy profiler integration.
66
89
You can now attach Tracy to builds of the game and see profiling information about various zones and how long they take.
@@ -70,6 +93,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
70
93
`tracy.Message(text)` to send a tracy message.
71
94
Lua scripts without any tracy documentation are still profiled by tracy, however only at a granularity of how long the entire script takes to execute.
72
95
96
+
- New FMOD and SoundContainer features:
97
+
The game is now divided into SFX, UI, and Music busses which all route into the Master bus.
98
+
The SFX bus has compression added for a better listening experience, and a safety volume limiter has been added to the Master bus.
99
+
Aside from volume being attenuated, sounds will now also be lowpass filtered as distance increases.
100
+
New `SoundContainer` INI and Lua (R/W) property `BusRouting`, which denotes which bus the SoundContainer routes to. Available busses: `SFX, UI, Music`. Defaults to `SFX`.
101
+
`Enum` binding for `SoundContainer.BusRouting`: `SFX = 0, UI = 1, MUSIC = 2`.
102
+
New `SoundContainer` INI and Lua (R/W) property `PanningStrengthMultiplier`, which will multiply the strength of 3D panning. This can be used to achieve for example a psuedo-Immobile effect where attenuation effects are still applied but the sound does not move from the center. Recommended to keep between 0.0 and 1.0.
103
+
New `SoundContainer` INI and Lua (R/W) property `CustomPanValue`, which hard-overrides the panning of a sound. Clamped between -1 and 1 for left and right panning. 0 disables the override and will re-enable default behavior. This should probably only be used on Immobile sounds, but it can be used on any sound.
104
+
73
105
- New `HeldDevice` Lua function `IsBeingHeld`, which returns whether or not the `HeldDevice` is currently being held.
74
106
75
107
- New `HeldDevice` INI and Lua (R/W) property `GetsHitByMOsWhenHeld`, which defines whether this `HeldDevice` can be hit by MOs while equipped and held by an actor. Defaults to false.
@@ -82,7 +114,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
82
114
83
115
- New `HDFirearm` INI and Lua (R/W) property `ReloadEndOffset`, to define how many milliseconds prior to the reload being complete that the `ReloadEndSound` should play. Defaults to -1, which means the game will automatically calculate so that the middle of the sound is aligned with the reload completing.
84
116
85
-
- New `Actor` INI and Lua (R/W) property `PainThreshold`, which determines how much damage this actor must take in a frame to play their `PainSound`. This can be set to 0 to never manually play the sound. Defaults to 15.
117
+
- New `Actor` INI and Lua (R/W) property `PainThreshold`, which determines how much damage this actor must take in a frame to play their `PainSound`. This can be set to 0 to never play the sound. Defaults to 15.
86
118
87
119
- New `AHuman` INI and Lua (R/W) property `MaxWalkPathCrouchShift`, which determines how much the actor will automatically duck down to avoid low ceilings above them. This can be set to 0 to never duck. Defaults to 6.
88
120
@@ -120,11 +152,23 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
120
152
121
153
- New `GameActivity::LockControlledActor` Lua function to allow grab player input in the way menus (buy menu/full inventorymenu) do.
- New `FrameMan` Lua functions `SetHudDisabled(disabled, screenId)` and `IsHudDisabled(screenId)` that allows disabling a given screen's HUD, and checking whether it's currently disabled. The screenId parameters are optional and default to screen 0.
126
158
127
-
- Exposed `FrameMan` property `ScreenCount` to Lua (R).
159
+
- Exposed `FrameMan` properties `ScreenCount` and `ResolutionMultiplier` to Lua (R).
160
+
161
+
- New `SceneMan` Lua functions:
162
+
`DislodgePixelCircle(Vector centre, float radius, bool deletePixels)`, which calls `DislodgePixel()` on all pixels in a given circle, returns them as an iterable list. The bool is an optional argument to delete all found pixels immediately; defaults to `false`.
163
+
`DislodgePixelRing(Vector centre, float innerRadius, float outerRadius, bool deletePixels)`, same as above but additionally ignores pixels within the inner radius.
164
+
`DislodgePixelBox(Vector upperLeftCorner, Vector lowerRightCorner, bool deletePixels)`, similar to above, but in a rectangular area defined by upper left- and lower right corners.
165
+
`DislodgePixelLine(Vector startPos, Vector ray, int skip, bool deletePixels)`, calls `DislodgePixel()` on all pixels in a line, like above. Similar in function to a ray cast, so pixels can be skipped.
166
+
167
+
- New `SceneMan` Lua function `CastTerrainPenetrationRay(Vector start, Vector ray, Vector endPos, int strengthLimit, int skip)`, which adds up the material strength of the terrain pixels encountered along the way, and stops when the accumulated value meets or exceeds `strengthLimit`. `endPos` is filled out with the ending position of the ray, returns `true` or `false` depending on whether the ray was stopped early or not.
168
+
169
+
- New `MOPixel` Lua functions `GetColorIndex()` and `SetColorIndex(int newColorIndex)`, which allow you to get and set the index of the pixel's color.
170
+
171
+
- AI idle aim timer (the time the AI stops after aiming fully up or fully down in sentry mode) is now customizable using the custom number value `AIIdleAimTime` for ACrabs. Use it to make your turrets less spastic.
128
172
129
173
</details>
130
174
@@ -160,14 +204,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
160
204
`JetReplenishRate`
161
205
`JetAngleRange`
162
206
`JetTimeTotal`
163
-
`JetTimeLeft`
207
+
`JetTimeLeft`
164
208
165
209
- Improved loading times on large maps.
166
210
167
211
- Script values, i.e `GetStringValue`, `RemoveStringValue`, `StringValueExists` and the associated functions for `GetNumberValue`/`GetObjectValue`, have been moved from MOSRotating to MovableObject, so now any object with script support can use these values.
168
212
169
213
- The `SceneObject` property `IsBuyable` has been renamed to `Buyable`.
170
214
215
+
-`SceneMan` Lua function `DislodgePixel()` now optionally accepts a third boolean argument to delete the found pixel immediately. Format is `DislodgePixel(int posX, int posY, bool deletePixel)`. `DislodgePixel()` now also automatically accounts for scene wrapping.
216
+
217
+
-`SceneMan` Lua function `DislodgePixel()` and all of its derivatives now return `MOPixels` instead of `MovableObjects`.
218
+
219
+
- MuzzleSmoke.lua now uses the new ParticleUtility directional smoke function for a more interesting effect.
220
+
171
221
</details>
172
222
173
223
<details><summary><b>Fixed</b></summary>
@@ -188,11 +238,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
188
238
189
239
- Fixed a crash that could occur when scripted objects were deleted, particularly when switching scene.
190
240
241
+
- Fixed underperforming fire weaponry. It wasn't sticking to Attachables and as such would only very rarely do damage-over-time.
242
+
243
+
- Fixed dropships using absolute positions to calculate their delivery waypoint, resulting in them moving weirdly.
244
+
191
245
</details>
192
246
193
247
<details><summary><b>Removed</b></summary>
194
248
195
-
- Removed RealToSimCap and OneSimUpdatePerFrame. Instead we try to always target 60fps, even if it slows the simulation down a little.
249
+
- Removed `RealToSimCap` and `OneSimUpdatePerFrame`. Instead we try to always target 60fps, even if it slows the simulation down a little.
0 commit comments