diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 16fd802e69..faf500ebba 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -23,7 +23,7 @@ env:
OPENRCT2_BUILD_SERVER: GitHub
OPENRCT2_ORG_TOKEN: ${{ secrets.OPENRCT2_ORG_TOKEN }}
BACKTRACE_IO_TOKEN: ${{ secrets.BACKTRACE_IO_TOKEN }}
- OPENRCT2_VERSION: 0.3.5.1
+ OPENRCT2_VERSION: 0.4.0
jobs:
lint-commit:
name: Lint Commit Message
diff --git a/debian/changelog b/debian/changelog
index 2bee6b3a17..983da7006b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,91 @@
-openrct2 (0.3.5.1-develop-1) unstable; urgency=medium
+openrct2 (0.4.0-develop-1) unstable; urgency=medium
* Nightly develop build.
+
+openrct2 (0.4.0) stable; urgency=medium
+
+* Headline feature: [#10664] New save format with increased limits.
+* Feature: [#714] Allow up to 255 trains per ride.
+* Feature: [#2253] Path surfaces and railings can be mixed and matched, like in RCT1.
+* Feature: [#2766] The Fruity Ices Stall can now be recoloured, like in RCT1.
+* Feature: [#4933] Allow map sizes of 999 × 999 (up from 254 × 254).
+* Feature: [#7660] Custom music objects that are distributed with the save.
+* Feature: [#8407] Ride platforms can be made invisible.
+* Feature: [#12793] Add Excitement/Intensity/Nausea ratings to Ride List view with sorting.
+* Feature: [#13858] Flatride bases can be made invisible.
+* Feature: [#14676] [Plugin] Allow plugins to store data in .park files.
+* Feature: [#15367] Individual track elements can now be drawn as another ride type.
+* Feature: [#15901] [Plugin] Add ‘map.getAllEntitiesOnTile’ to API.
+* Feature: [#16029] [Plugin] Add ‘TrackElement.rideType’ to API.
+* Feature: [#16097] The Looping Roller Coaster can now draw all elements from the LIM Launched Roller Coaster.
+* Feature: [#16132, #16389] The Corkscrew, Twister and Vertical Drop Roller Coasters can now draw inline twists.
+* Feature: [#16144] [Plugin] Add ‘ImageManager’ to API.
+* Feature: [#16707] [Plugin] Implement intransient plugins.
+* Feature: [#16707] [Plugin] New API for current mode, ‘map.change’ hook and toolbox menu items on title screen.
+* Feature: [#16731] [Plugin] New API for fetching and manipulating a staff member’s patrol area.
+* Feature: [#16800] [Plugin] Add lift hill speed properties to API.
+* Feature: [#16806] Parkobj can load sprites from RCT image archives.
+* Feature: [#16831] Allow tertiary colours for small and large scenery objects.
+* Feature: [#16872] [Plugin] Add support for custom images.
+* Improved: [#3517] Cheats are now saved with the park.
+* Improved: [#10150] Ride stations are now properly checked if they’re sheltered.
+* Improved: [#10664, #16072] Visibility status can be modified directly in the Tile Inspector’s list.
+* Improved: [#16251] Plugin API handles null values better.
+* Improved: [#16251] openrct2.d.ts: mark ‘callback’ argument of queryAction and executeAction as optional.
+* Improved: [#16251] openrct2.d.ts: change ‘network.status’ to ‘network.mode’ in network API docs.
+* Improved: [#16251] openrct2.d.ts: added previously undocumented ‘GroupBoxWidget.text’ property.
+* Improved: [#16251] openrct2.d.ts: removed unused ‘LabelWidget.onChange’ property.
+* Improved: [#16258] Increased image limit in the engine.
+* Improved: [#16408] Improve ‘--version’ cli option to report more compatibility information.
+* Improved: [#16740] Allow staff patrol areas to be defined with individual tiles rather than groups of 4x4.
+* Improved: [#16764] [Plugin] Add hook ‘map.save’, called before the map is saved.
+* Improved: [#16925] The queue length of 1000 guests is lifted, and a warning for too long queues is added instead.
+* Change: [#14484] Make the Heartline Twister coaster ratings a little bit less hateful.
+* Change: [#16077] When importing SV6 files, the RCT1 land types are only added when they were actually used.
+* Change: [#16424] Following an entity in the title sequence no longer toggles underground view when it’s underground.
+* Change: [#16493] Boat Hire and Submarine Ride support costs now match their visual appearance.
+* Change: [#16710] Changed default view of Guest List to ‘Thoughts’ and selected tab will default to ‘Summarised’ (when opened from the menu).
+* Change: [#16859] Guests with umbrellas no longer always avoid going into a Maze.
+* Change: [#16912] Tired or nauseated guests will no longer jump in a Maze.
+* Fix: [#6767] Black screen after Alt-Tabbing back into the game.
+* Fix: [#11752] Track pieces with fractional cost are too cheap to build.
+* Fix: [#12556] Allow game to run without audio devices.
+* Fix: [#12774] [Plugin] Scripts will not be re-initialised when a new scenario is loaded from within a running scenario.
+* Fix: [#13336] Can no longer place Bumble Bee track design (reverts #12707).
+* Fix: [#14155] Map Generator sometimes places non-tree objects as trees.
+* Fix: [#14674] Recent Messages only shows first few notifications.
+* Fix: [#14920] Ghosts for rides and shops do not auto-elevate when obscured.
+* Fix: [#15413] Modifying park rating with plugins desyncs park rating history from actual park rating.
+* Fix: [#15571] Non-ASCII characters in scenario description get distorted while saving.
+* Fix: [#15830] Objects with RCT1 images are very glitchy if OpenRCT2 is not linked to an RCT1 install.
+* Fix: [#15909] Text can overflow in ‘Select ride design’ windows.
+* Fix: [#15947, #15960] Removing a flat ride results in an error message and duplicate structures.
+* Fix: [#15998] Cannot set map size to the actual maximum.
+* Fix: [#16007] Scenario Editor “Entry Price” appears to the right of the value field.
+* Fix: [#16008] Tile Inspector can select elements from last tile without reselecting it.
+* Fix: [#16024] Go-Karts with more than 32 vehicles do not colour themselves correctly.
+* Fix: [#16026] Newly created rides with “Disable vehicle limits” cheat always get 32 trains with 12 cars each.
+* Fix: [#16063] Object Selection preview for objects with glass is broken.
+* Fix: [#16075] Exporting track designs saves scenery in incorrect locations.
+* Fix: [#16087] The Looping Roller Coaster booster is now always drawn correctly.
+* Fix: [#16140] The ‘Follow this’ option is now disabled when the ride view is set to ‘overall’ or a station.
+* Fix: [#16162] Go Karts speeds are not correctly randomised, they only go very fast or very slow.
+* Fix: [#16188] Medium-size banked turns on the Twister and Vertical Roller Coaster have incorrect support placement (partly original bug).
+* Fix: [#16264, #16572] Placing saved track design crashes game.
+* Fix [#16308] Crash when trying to place down a ride on Android.
+* Fix: [#16327] Crash on malformed network packet.
+* Fix: [#16449] [Plugin] Viewport doesn't hide when switching tabs.
+* Fix: [#16450] Banner style not copied when using tile inspector.
+* Fix: [#16535] Entering construction mode unblocks all paths.
+* Fix: [#16542] “Same price throughout park” status not correctly imported for RCT1 saves.
+* Fix: [#16572] Crash when trying to place track designs.
+* Fix: [#16591] [Plugin] ‘setInterval’ and ‘setTimeout’ is not disposed when map unloads.
+* Fix: [#16711] [Plugin] ‘Car.rideObject’ overflowing with more than 256 ride types.
+* Fix: [#16779] Fix case where title music doesn't unmute properly.
+* Fix: [#16808] Incorrect track design serialisation causing vehicle object replacement.
+* Fix: [#16869] Soft Toy Stall cannot be recoloured, but shows a recolouring option anyway (original bug).
+* Fix: [#16995] Native Linux dialog windows do not open if the path contains single quotes.
+* Fix: [objects#165] Glitch when Bengal Tiger Cars go through a corner.
openrct2 (0.3.5.1) stable; urgency=medium
diff --git a/distribution/changelog.txt b/distribution/changelog.txt
index dd078954ae..3558bb718d 100644
--- a/distribution/changelog.txt
+++ b/distribution/changelog.txt
@@ -1,4 +1,4 @@
-0.4.0 (in development)
+0.4.0 (2022-04-25)
------------------------------------------------------------------------
- Headline feature: [#10664] New save format with increased limits.
- Feature: [#714] Allow up to 255 trains per ride.
diff --git a/distribution/linux/openrct2.appdata.xml b/distribution/linux/openrct2.appdata.xml
index 84a7fe925c..cbf0e0dc1d 100644
--- a/distribution/linux/openrct2.appdata.xml
+++ b/distribution/linux/openrct2.appdata.xml
@@ -66,6 +66,9 @@
none
+
+ https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.4.0
+
https://github.com/OpenRCT2/OpenRCT2/releases/tag/v0.3.5.1
diff --git a/distribution/macos/Info.plist b/distribution/macos/Info.plist
index c45b367a32..006ea15e96 100644
--- a/distribution/macos/Info.plist
+++ b/distribution/macos/Info.plist
@@ -13,7 +13,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 0.3.5.1
+ 0.4.0
CFBundleSignature
ORCT
LSMinimumSystemVersion
diff --git a/distribution/readme.txt b/distribution/readme.txt
index 0629f55b3e..b59e2c8b76 100644
--- a/distribution/readme.txt
+++ b/distribution/readme.txt
@@ -1,5 +1,5 @@
-Last updated: 2021-11-21
-Release version: 0.3.5.1
+Last updated: 2022-04-25
+Release version: 0.4.0
------------------------------------------------------------------------
diff --git a/readme.md b/readme.md
index 93f0cf1fc4..4ec22f4f68 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/scripts/setenv b/scripts/setenv
index ec4742f2dd..d7b344ff71 100755
--- a/scripts/setenv
+++ b/scripts/setenv
@@ -6,7 +6,7 @@ set -e
# It should be dot sourced into your environment
if [[ "$GITHUB_ACTIONS" != "true" ]]; then
export OPENRCT2_BUILD_SERVER=$(hostname)
- export OPENRCT2_VERSION=0.3.5.1
+ export OPENRCT2_VERSION=0.4.0
GITHUB_REF=$(git rev-parse --symbolic-full-name HEAD)
GITHUB_SHA=$(git rev-parse HEAD)
fi
diff --git a/src/openrct2-android/app/build.gradle b/src/openrct2-android/app/build.gradle
index 715c5b39e7..6163be8828 100644
--- a/src/openrct2-android/app/build.gradle
+++ b/src/openrct2-android/app/build.gradle
@@ -9,7 +9,7 @@ android {
targetSdkVersion 28
versionCode 2
- versionName '0.3.5.1'
+ versionName '0.4.0'
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
diff --git a/src/openrct2/Version.h b/src/openrct2/Version.h
index 8bebdff7d9..4208cd2395 100644
--- a/src/openrct2/Version.h
+++ b/src/openrct2/Version.h
@@ -14,7 +14,7 @@
#include
#define OPENRCT2_NAME "OpenRCT2"
-#define OPENRCT2_VERSION "0.3.5.1"
+#define OPENRCT2_VERSION "0.4.0"
#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 ef76f2cacb..8fa311a99b 100644
--- a/src/openrct2/network/NetworkBase.cpp
+++ b/src/openrct2/network/NetworkBase.cpp
@@ -42,7 +42,7 @@
// This string specifies which version of network stream current build uses.
// It is used for making sure only compatible builds get connected, even within
// single OpenRCT2 version.
-#define NETWORK_STREAM_VERSION "25"
+#define NETWORK_STREAM_VERSION "0"
#define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION
static Peep* _pickup_peep = nullptr;