diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f9d72bb1a2..745b98577d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -34,7 +34,7 @@ env:
OPENRCT2_BUILD_SERVER: GitHub
OPENRCT2_ORG_TOKEN: ${{ secrets.OPENRCT2_ORG_TOKEN }}
BACKTRACE_IO_TOKEN: ${{ secrets.BACKTRACE_IO_TOKEN }}
- OPENRCT2_VERSION: 0.4.22
+ OPENRCT2_VERSION: 0.4.23
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value
concurrency:
diff --git a/debian/changelog b/debian/changelog
index 07ad3d0ed9..d7851510d8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,50 @@
+openrct2 (0.4.23-develop-1) unstable; urgency=medium
+
+* Feature: [#22476] “Time since last inspection” statistic is available in the rides window.
+* Feature: [#24313] [Plugin] Add API for setting a ride vehicle’s sprite to a smoke plume.
+* Improved: [#24345] Vehicle fallback sprites are less likely to glitch with the track.
+* Improved: [#24362, #24491] The Windows installer is now translated as well.
+* Improved: [#24364] Improve the fallback vehicle sprites for Zero G Rolls, and allow small ones to be built without cheats if the fallbacks are available.
+* Improved: [#24368] Clicking the in-game update notication now leads to a more user-friendly download page.
+* Improved: [#24400] Ride list in preservation window is now sorted alphabetically.
+* Improved: [#24409] Steam installs of RCT Classic are now detected automatically.
+* Improved: [#24413] Better performance when moving the viewport on Windows and Linux platforms.
+* Improved: [#24417] Improve the fallback vehicle sprites for Dive Loops.
+* Improved: [#24433] The ride, new ride, scenery, path, viewport, park and tool windows no longer redraw every frame if they have not changed.
+* Improved: [#24467] Apply tweening only to on-screen entities when not zoomed out for better performance with uncapped FPS.
+* Improved: [#24474] More efficiently search viewports when playing Audio.
+* Improved: [#24479] More descriptive error messages for `set` commands in the in-game console.
+* Improved: [#24563] The Linux .desktop file will now request the more powerful dedicated GPU on hybrid graphics systems.
+* Change: [#24342, #24484] g2.dat is now split into g2.dat, fonts.dat and tracks.dat.
+* Change: [#24362] The Windows installer now prevents installing to the same folder as RollerCoaster Tycoon 2 or Classic.
+* Change: [#24418] Small & Large Zero G Rolls can now be built on the LIM Launched RC without cheats if vehicle sprites are available.
+* Fix: [#5269] Font bugs when using the Russian release of RCT2 as the base game.
+* Fix: [#11071, #22958] The virtual floor does not always draw correctly.
+* Fix: [#18220] Some custom RCT1 scenarios are detected as competition DLC scenarios.
+* Fix: [#20095] UCES Halloween - Cemetery Ridge scenario has mismatched entrance/exit on haunted house.
+* Fix: [#20158] Custom animated scenery .DATs with frame offsets draw a random sprite at the end of their animation.
+* Fix: [#22628] Potential crash while rebuilding the scenario index.
+* Fix: [#23289] Dodgems and Flying Saucer cars can spawn on top of each other when the ride is opened.
+* Fix: [#24332] Banner font renders differently when using RCT Classic as the base game.
+* Fix: [#24343] Large gently sloped turns are buildable without cheats when the vehicles do not have sprites for them.
+* Fix: [#24346] Possible crash during line drawing in OpenGL mode.
+* Fix: [#24353] ‘Show dirty visuals’ is off by one pixel and does not work correctly with higher framerates.
+* Fix: [#24362] When upgrading from an older version on Windows, old versions of official objects are not always removed.
+* Fix: [#24366] Zero G Rolls have some incorrect vehicle yaw rotations.
+* Fix: [#24371] Fix divide by zero in the scenery window when there is no scenery.
+* Fix: [#24378] Prevent ride and stall statistics from overflowing.
+* Fix: [#24388] Shortcut keys are not localised based on the user’s language settings.
+* Fix: [#24403] Park fences draw underneath and through opaque water.
+* Fix: [#24406] The network status window uses an undefined string for its title.
+* Fix: [#24444] In the object load error window, the guide text overlaps when the title bar is enlarged.
+* Fix: [#24446] [Plugin] Fix regression breaking the track iterator on specific track pieces.
+* Fix: [#24447] Shortcut list is not refreshed when changing language.
+* Fix: [#24448] Shortcuts involving the Caps Lock key are wrongly localised to NumPad Dot.
+* Fix: [#24464] Window and viewport visibility is not calculated correctly causing minor performance issues.
+* Fix: [#24488] Objects are not always redrawn immediately when they are reloaded from the Object Selection window.
+* Fix: [#24544] RCT1 Maze designs with wooden walls are not imported correctly.
+* Fix: [#24567] Long flat-to-steep wooden mine support sprites don't connect to flat supports exactly.
+
openrct2 (0.4.22-develop-1) unstable; urgency=medium
* Feature: [#24206] [Plugin] Add APIs for breaking down rides, reading the current breakdown, and for fixing broken down rides.
diff --git a/distribution/changelog.txt b/distribution/changelog.txt
index 98994eb31b..d90cb3ea8c 100644
--- a/distribution/changelog.txt
+++ b/distribution/changelog.txt
@@ -1,4 +1,4 @@
-0.4.23 (in development)
+0.4.23 (2025-06-07)
------------------------------------------------------------------------
- Feature: [#22476] “Time since last inspection” statistic is available in the rides window.
- Feature: [#24313] [Plugin] Add API for setting a ride vehicle’s sprite to a smoke plume.
diff --git a/distribution/linux/openrct2.appdata.xml b/distribution/linux/openrct2.appdata.xml
index 6b8071a99e..f2c761e4ef 100644
--- a/distribution/linux/openrct2.appdata.xml
+++ b/distribution/linux/openrct2.appdata.xml
@@ -404,6 +404,9 @@
none
+
+ https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.23
+
https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.22
diff --git a/distribution/macos/Info.plist b/distribution/macos/Info.plist
index 3581816869..53d759defe 100644
--- a/distribution/macos/Info.plist
+++ b/distribution/macos/Info.plist
@@ -13,7 +13,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 0.4.22
+ 0.4.23
CFBundleSignature
ORCT
LSMinimumSystemVersion
diff --git a/readme.md b/readme.md
index 8252bfc07e..2d43a3a4c5 100644
--- a/readme.md
+++ b/readme.md
@@ -19,7 +19,7 @@
### Download
| Latest release | Latest development build |
|--------------------------------------------------------------------------------------------------------------------------|--------------------------|
-| [](https://openrct2.org/downloads/master/latest) | [](https://openrct2.org/downloads/develop/latest) |
+| [](https://openrct2.org/downloads/master/latest) | [](https://openrct2.org/downloads/develop/latest) |
---
diff --git a/src/openrct2-android/app/build.gradle b/src/openrct2-android/app/build.gradle
index ff5392ccc0..31961f715e 100644
--- a/src/openrct2-android/app/build.gradle
+++ b/src/openrct2-android/app/build.gradle
@@ -10,8 +10,8 @@ android {
minSdkVersion 24
targetSdkVersion 28
- versionCode 10
- versionName '0.4.22'
+ versionCode 11
+ versionName '0.4.23'
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
diff --git a/src/openrct2/Version.h b/src/openrct2/Version.h
index ee1a046969..b9bec22839 100644
--- a/src/openrct2/Version.h
+++ b/src/openrct2/Version.h
@@ -12,7 +12,7 @@
#include
#define OPENRCT2_NAME "OpenRCT2"
-#define kOpenRCT2Version "0.4.22"
+#define kOpenRCT2Version "0.4.23"
#if defined(__amd64__) || defined(_M_AMD64)
#define OPENRCT2_ARCHITECTURE "x86-64"
diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp
index 5fb42f5eb8..620d52e66c 100644
--- a/src/openrct2/network/NetworkBase.cpp
+++ b/src/openrct2/network/NetworkBase.cpp
@@ -49,7 +49,7 @@ using namespace OpenRCT2;
// It is used for making sure only compatible builds get connected, even within
// single OpenRCT2 version.
-constexpr uint8_t kNetworkStreamVersion = 2;
+constexpr uint8_t kNetworkStreamVersion = 0;
const std::string kNetworkStreamID = std::string(kOpenRCT2Version) + "-" + std::to_string(kNetworkStreamVersion);