From 739d83e3215dfd3cc01c3ffbf60b59308b25c510 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Thu, 16 Oct 2025 13:51:08 +0200 Subject: [PATCH 1/4] Fix: scrolling intro background switches colour halfway through --- distribution/changelog.txt | 1 + src/openrct2/drawing/Drawing.cpp | 8 +++++--- src/openrct2/scenes/intro/IntroScene.cpp | 14 +++++++------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 594d19d89d..d27dd95a7c 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -11,6 +11,7 @@ - Fix: [#25299] The Mine Train Coaster left large helix draws incorrect sprites at certain angles (original bug). - Fix: [#25328] Spiral Slide in Blackpool Pleasure Beach has its entrance and exit the wrong way round (bug in the original scenario). - Fix: [#25342] The Go-Karts medium right gentle sloped turn does not have a tunnel at the end. +- Fix: [#25350] The scrolling intro background switches colour halfway through (original bug). - Fix: [#25358] The Stand Up Roller Coaster left corkscrew does not block supports correctly. - Fix: [#25363] The Mine Train Coaster flat-to-steep track pieces do not block all metal supports. - Fix: [#25369] The Go-Karts medium turns and small flat and sloped turns do not block metal supports correctly. diff --git a/src/openrct2/drawing/Drawing.cpp b/src/openrct2/drawing/Drawing.cpp index 40d7bf594b..f5d215dc01 100644 --- a/src/openrct2/drawing/Drawing.cpp +++ b/src/openrct2/drawing/Drawing.cpp @@ -703,9 +703,11 @@ void GfxTransposePalette(int32_t pal, uint8_t product) for (; width > 0; width--) { auto& dest_pointer = gGamePalette[x]; - dest_pointer.Blue = (source_pointer[0] * product) >> 8; - dest_pointer.Green = (source_pointer[1] * product) >> 8; - dest_pointer.Red = (source_pointer[2] * product) >> 8; + // Make sure the image never gets darker than the void colour (not-quite-block), to the background colour jumping + // between void and 100% black. + dest_pointer.Blue = std::max(35, ((source_pointer[0] * product) >> 8)); + dest_pointer.Green = std::max(35, ((source_pointer[1] * product) >> 8)); + dest_pointer.Red = std::max(23, ((source_pointer[2] * product) >> 8)); source_pointer += 3; x++; diff --git a/src/openrct2/scenes/intro/IntroScene.cpp b/src/openrct2/scenes/intro/IntroScene.cpp index 92eeec0a0a..f5e59aa475 100644 --- a/src/openrct2/scenes/intro/IntroScene.cpp +++ b/src/openrct2/scenes/intro/IntroScene.cpp @@ -27,8 +27,8 @@ namespace OpenRCT2 static constexpr PaletteIndex kBackgroundColourLogo = PaletteIndex::pi245; static constexpr PaletteIndex kBorderColourPublisher = PaletteIndex::pi129; - constexpr int32_t PALETTE_G1_IDX_DEVELOPER = 23217; - constexpr int32_t PALETTE_G1_IDX_LOGO = 23224; + static constexpr ImageIndex kPaletteChrisSawyerLogo = 23217; + static constexpr ImageIndex kPaletteRCT2Logo = 23224; static IntroState _introState; @@ -220,7 +220,7 @@ namespace OpenRCT2 break; case IntroState::DeveloperBegin: GfxClear(rt, kBackgroundColourDark); - GfxTransposePalette(PALETTE_G1_IDX_DEVELOPER, 255); + GfxTransposePalette(kPaletteChrisSawyerLogo, 255); break; case IntroState::DeveloperScroll: GfxClear(rt, kBackgroundColourDark); @@ -232,11 +232,11 @@ namespace OpenRCT2 case IntroState::LogoFadeIn: if (_introStateCounter <= 0xFF00) { - GfxTransposePalette(PALETTE_G1_IDX_LOGO, (_introStateCounter >> 8) & 0xFF); + GfxTransposePalette(kPaletteRCT2Logo, (_introStateCounter >> 8) & 0xFF); } else { - GfxTransposePalette(PALETTE_G1_IDX_LOGO, 255); + GfxTransposePalette(kPaletteRCT2Logo, 255); } ScreenIntroDrawLogo(rt); break; @@ -246,11 +246,11 @@ namespace OpenRCT2 case IntroState::LogoFadeOut: if (_introStateCounter >= 0) { - GfxTransposePalette(PALETTE_G1_IDX_LOGO, (_introStateCounter >> 8) & 0xFF); + GfxTransposePalette(kPaletteRCT2Logo, (_introStateCounter >> 8) & 0xFF); } else { - GfxTransposePalette(PALETTE_G1_IDX_LOGO, 0); + GfxTransposePalette(kPaletteRCT2Logo, 0); } ScreenIntroDrawLogo(rt); break; From 323a1839dc423521a7da1f6f239d4abb56909be9 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 17 Oct 2025 23:34:30 +0200 Subject: [PATCH 2/4] Fix: When skipping scrolling intro, the screen does not get cleared properly --- distribution/changelog.txt | 1 + src/openrct2/scenes/intro/IntroScene.cpp | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index d27dd95a7c..a869a2e9d0 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -12,6 +12,7 @@ - Fix: [#25328] Spiral Slide in Blackpool Pleasure Beach has its entrance and exit the wrong way round (bug in the original scenario). - Fix: [#25342] The Go-Karts medium right gentle sloped turn does not have a tunnel at the end. - Fix: [#25350] The scrolling intro background switches colour halfway through (original bug). +- Fix: [#25350] When skipping the scrolling intro, the screen does not get cleared properly. - Fix: [#25358] The Stand Up Roller Coaster left corkscrew does not block supports correctly. - Fix: [#25363] The Mine Train Coaster flat-to-steep track pieces do not block all metal supports. - Fix: [#25369] The Go-Karts medium turns and small flat and sloped turns do not block metal supports correctly. diff --git a/src/openrct2/scenes/intro/IntroScene.cpp b/src/openrct2/scenes/intro/IntroScene.cpp index f5e59aa475..3ac2ee3ffb 100644 --- a/src/openrct2/scenes/intro/IntroScene.cpp +++ b/src/openrct2/scenes/intro/IntroScene.cpp @@ -11,6 +11,7 @@ #include "../../Context.h" #include "../../Input.h" +#include "../../OpenRCT2.h" #include "../../SpriteIds.h" #include "../../audio/Audio.h" #include "../../audio/AudioChannel.h" @@ -174,9 +175,12 @@ namespace OpenRCT2 _soundChannel = nullptr; } - // Move to next part - _introState = IntroState::Finish; - _introStateCounter = 0; + if (gOpenRCT2Headless) + { + // Move to next part + _introState = IntroState::Finish; + _introStateCounter = 0; + } break; case IntroState::Finish: { @@ -256,6 +260,10 @@ namespace OpenRCT2 break; case IntroState::Clear: GfxClear(rt, kBackgroundColourDark); + + // Move to next part. Has to be done here to ensure the screen is cleared. + _introState = IntroState::Finish; + _introStateCounter = 0; break; default: break; From 6cb804804ea9d92265482fbea2b4a42d3a03f414 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 17 Oct 2025 23:53:11 +0200 Subject: [PATCH 3/4] Fix: scrolling intro cannot be skipped using a mouse click --- distribution/changelog.txt | 1 + src/openrct2/scenes/intro/IntroScene.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index a869a2e9d0..57dcb79633 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -13,6 +13,7 @@ - Fix: [#25342] The Go-Karts medium right gentle sloped turn does not have a tunnel at the end. - Fix: [#25350] The scrolling intro background switches colour halfway through (original bug). - Fix: [#25350] When skipping the scrolling intro, the screen does not get cleared properly. +- Fix: [#25350] Scrolling intro cannot be skipped using a mouse click. - Fix: [#25358] The Stand Up Roller Coaster left corkscrew does not block supports correctly. - Fix: [#25363] The Mine Train Coaster flat-to-steep track pieces do not block all metal supports. - Fix: [#25369] The Go-Karts medium turns and small flat and sloped turns do not block metal supports correctly. diff --git a/src/openrct2/scenes/intro/IntroScene.cpp b/src/openrct2/scenes/intro/IntroScene.cpp index 3ac2ee3ffb..f4c48fef5e 100644 --- a/src/openrct2/scenes/intro/IntroScene.cpp +++ b/src/openrct2/scenes/intro/IntroScene.cpp @@ -272,7 +272,7 @@ namespace OpenRCT2 static void ScreenIntroProcessMouseInput() { - if (ContextGetCursorState()->any == CURSOR_PRESSED) + if (ContextGetCursorState()->any & CURSOR_DOWN) { ScreenIntroSkipPart(); } From bbb52668e304e7135d7689038d7fde4633b09319 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 17 Oct 2025 23:56:36 +0200 Subject: [PATCH 4/4] Remove remnants of scrolling text disclaimer --- src/openrct2/scenes/intro/IntroScene.cpp | 11 ----------- src/openrct2/scenes/intro/IntroScene.h | 2 -- 2 files changed, 13 deletions(-) diff --git a/src/openrct2/scenes/intro/IntroScene.cpp b/src/openrct2/scenes/intro/IntroScene.cpp index f4c48fef5e..f6fc3dd873 100644 --- a/src/openrct2/scenes/intro/IntroScene.cpp +++ b/src/openrct2/scenes/intro/IntroScene.cpp @@ -68,11 +68,6 @@ namespace OpenRCT2 switch (_introState) { - case IntroState::Disclaimer1: - case IntroState::Disclaimer2: - // Originally used for the disclaimer text - _introState = IntroState::PublisherBegin; - [[fallthrough]]; case IntroState::PublisherBegin: LoadPalette(); @@ -199,9 +194,6 @@ namespace OpenRCT2 switch (_introState) { - case IntroState::Disclaimer1: - case IntroState::Disclaimer2: - break; case IntroState::PublisherBegin: GfxClear(rt, kBackgroundColourDark); break; @@ -301,9 +293,6 @@ namespace OpenRCT2 { case IntroState::None: break; - case IntroState::Disclaimer2: - _introState = IntroState::PublisherBegin; - break; default: _introState = IntroState::Clear; break; diff --git a/src/openrct2/scenes/intro/IntroScene.h b/src/openrct2/scenes/intro/IntroScene.h index 43b3d98c4a..73fcffe0aa 100644 --- a/src/openrct2/scenes/intro/IntroScene.h +++ b/src/openrct2/scenes/intro/IntroScene.h @@ -27,8 +27,6 @@ namespace OpenRCT2 LogoFadeIn, LogoWait, LogoFadeOut, - Disclaimer1, - Disclaimer2, Clear = 254, Finish = 255, };