Skip to content

Commit c7e915a

Browse files
committed
Merge branch 'development' into impact-audio-improvements
2 parents f44e51e + bb8ba34 commit c7e915a

File tree

1,033 files changed

+88643
-54339
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,033 files changed

+88643
-54339
lines changed

.github/parameters/macports.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ ports:
1212
- name: luajit
1313
- name: flac
1414
- name: dylibbundler
15-
- name: tree
15+
- name: tree
16+
- name: ccache

.github/workflows/clang-format.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,15 @@ jobs:
3131
- uses: actions/setup-python@v3
3232

3333
- name: Install dependencies
34-
run: sudo apt-get install -y clang-format
34+
run: |
35+
mkdir bin
36+
wget https://github.com/muttleyxd/clang-tools-static-binaries/releases/download/master-8f72ab3c/clang-format-17_linux-amd64 -O bin/clang-format-17
37+
chmod +x bin/clang-format-17
3538
3639
- name: Run clang-format
3740
run: |
3841
.github/scripts/run-clang-format.py \
42+
--clang-format-executable bin/clang-format-17 \
3943
-i \
4044
-r Source Data/Base.rte/Shaders \
4145
--exclude Source/System/Base64 \
@@ -47,7 +51,8 @@ jobs:
4751
- name: Add missing newlines
4852
run: |
4953
.github/scripts/run-clang-format.py \
50-
-i --clang-format-executable .github/scripts/add-eol.sh \
54+
--clang-format-executable .github/scripts/add-eol.sh \
55+
-i \
5156
-r Source Data/Base.rte/Shaders \
5257
--exclude Source/System/Base64 \
5358
--exclude Source/System/BitMask \

.github/workflows/meson.yml

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,14 @@ jobs:
6262
- name: Install Dependencies
6363
run: |
6464
sudo apt-get update -yq
65-
sudo apt-get install --no-install-recommends wget liballegro4-dev libloadpng4-dev libflac++-dev luajit-5.1-dev liblua5.2-dev libminizip-dev liblz4-dev libpng++-dev libx11-dev libboost-dev libtbb-dev libsdl2-dev libsdl2-image-dev libopengl-dev libfuse2 ninja-build
65+
sudo apt-get install --no-install-recommends wget liballegro4-dev libloadpng4-dev libflac++-dev luajit-5.1-dev liblua5.2-dev libminizip-dev liblz4-dev libpng++-dev libx11-dev libboost-dev libtbb-dev libsdl2-dev libsdl2-image-dev libopengl-dev libfuse2 ninja-build ccache
6666
sudo pip install meson
6767
68+
- name: ccache
69+
uses: hendrikmuhs/[email protected]
70+
with:
71+
key: ${{ github.job }}-${{ matrix.os }}
72+
6873
- name: Set Version
6974
if: ${{inputs.new_release_version}}
7075
uses: ./.github/actions/set_version
@@ -74,22 +79,22 @@ jobs:
7479

7580
- name: Setup Meson
7681
env:
77-
CC: "gcc"
78-
CXX: "g++"
82+
CC: "ccache gcc"
83+
CXX: "ccache g++"
7984
run: |
8085
meson setup --buildtype=${{inputs.build_type}} -Ddebug_type=${{inputs.debug_level}} -Db_lto=true build
8186
8287
- name: Configure for AppImage
8388
if: ${{inputs.upload_artefacts}}
8489
env:
85-
CC: "gcc"
86-
CXX: "g++"
90+
CC: "ccache gcc"
91+
CXX: "ccache g++"
8792
run: meson configure -Dinstall_data=false -Dinstall_runner=false -Dfmod_dir=/usr/lib/ --prefix=/usr/ build
8893

8994
- name: Build
9095
env:
91-
CC: "gcc"
92-
CXX: "g++"
96+
CC: "ccache gcc"
97+
CXX: "ccache g++"
9398
run: |
9499
meson compile -C build
95100
@@ -147,19 +152,24 @@ jobs:
147152
new_release_version: ${{inputs.new_release_version}}
148153
github_token: ${{ secrets.GITHUB_TOKEN }}
149154

155+
- name: ccache
156+
uses: hendrikmuhs/[email protected]
157+
with:
158+
key: ${{ github.job }}-${{ matrix.os }}
159+
150160
- name: Setup Meson
151161
env:
152-
CC: "gcc-${{env.GCC_VERSION}}"
153-
CXX: "g++-${{env.GCC_VERSION}}"
162+
CC: "ccache gcc-${{env.GCC_VERSION}}"
163+
CXX: "ccache g++-${{env.GCC_VERSION}}"
154164
LDFLAGS: "-static-libgcc -static-libstdc++"
155165
run: |
156166
meson setup --buildtype=${{inputs.build_type}} -Ddebug_type=${{inputs.debug_level}} -Db_lto=false build
157167
158168
- name: Configure for App Bundle
159169
if: ${{inputs.upload_artefacts}}
160170
env:
161-
CC: "gcc-${{env.GCC_VERSION}}"
162-
CXX: "g++-${{env.GCC_VERSION}}"
171+
CC: "ccache gcc-${{env.GCC_VERSION}}"
172+
CXX: "ccache g++-${{env.GCC_VERSION}}"
163173
LDFLAGS: "-static-libgcc -static-libstdc++"
164174
run: |
165175
meson configure \
@@ -170,8 +180,8 @@ jobs:
170180
171181
- name: Build
172182
env:
173-
CC: "gcc-${{env.GCC_VERSION}}"
174-
CXX: "g++-${{env.GCC_VERSION}}"
183+
CC: "ccache gcc-${{env.GCC_VERSION}}"
184+
CXX: "ccache g++-${{env.GCC_VERSION}}"
175185
LDFLAGS: "-static-libgcc -static-libstdc++"
176186
run: |
177187
meson compile -C build

CHANGELOG.md

Lines changed: 70 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1414

1515
- Massive performance improvements, especially in very large scenes with lots of actors.
1616

17-
- New multithreaded AI and Lua scripts.
17+
- New multithreaded AI and Lua scripts.
1818
Lua scripts now have extra callback functions `ThreadedUpdateAI(self)`, `ThreadedUpdate(self)` and `SyncedUpdate(self)`.
1919
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).
2020
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.
2121

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.
2323
Scripts on `MovableObject` now have new callback functions `OnMessage(self, message, context)` and `OnGlobalMessage(self, message, context)`.
2424
Script on `Activity` also have similar functions: `ActivityName:OnMessage(message, context)` and `ActivityName:OnGlobalMessage(message, context)`.
2525
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/),
3333
New INI and Lua (R/W) property `CanAdjustAngleWhileFiring`, which defines whether the jet angle can change while the jetpack is active. Defaults to true.
3434
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.
3535

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.
3737
New `Actor` Lua property (R) `IsWaitingOnNewMovePath`, which returns true while the actor is currently calculating a new path.
3838
New Lua `SceneMan` function `CalculatePathAsync` for asynchronous pathfinding. This function has no return value, and is used as follows:
3939
```lua
@@ -52,15 +52,38 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5252
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.
5353
);
5454
```
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.
5559

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.
6487

6588
- Tracy profiler integration.
6689
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/),
7093
`tracy.Message(text)` to send a tracy message.
7194
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.
7295

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+
73105
- New `HeldDevice` Lua function `IsBeingHeld`, which returns whether or not the `HeldDevice` is currently being held.
74106

75107
- 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/),
82114

83115
- 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.
84116

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.
86118

87119
- 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.
88120

@@ -120,11 +152,23 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
120152

121153
- New `GameActivity::LockControlledActor` Lua function to allow grab player input in the way menus (buy menu/full inventorymenu) do.
122154

123-
- New `LuaMan` Lua I/O functions `DirectoryCreate`, `FileExists`, `DirectoryExists`, `FileRemove`, `DirectoryRemove`, `FileRename`, `DirectoryRename` and `IsValidModulePath`.
155+
- New `LuaMan` Lua I/O functions `DirectoryCreate`, `FileExists`, `DirectoryExists`, `FileRemove`, `DirectoryRemove`, `FileRename` and `DirectoryRename`.
124156

125157
- 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.
126158

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.
128172

129173
</details>
130174

@@ -160,14 +204,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
160204
`JetReplenishRate`
161205
`JetAngleRange`
162206
`JetTimeTotal`
163-
`JetTimeLeft`
207+
`JetTimeLeft`
164208

165209
- Improved loading times on large maps.
166210

167211
- 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.
168212

169213
- The `SceneObject` property `IsBuyable` has been renamed to `Buyable`.
170214

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+
171221
</details>
172222

173223
<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/),
188238

189239
- Fixed a crash that could occur when scripted objects were deleted, particularly when switching scene.
190240

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+
191245
</details>
192246

193247
<details><summary><b>Removed</b></summary>
194248

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.
196250

197251
</details>
198252

0 commit comments

Comments
 (0)