diff --git a/.gitlab/ci/jobs/alpine-3-gcc-dedicated.yml b/.gitlab/ci/jobs/alpine-3-gcc-dedicated.yml
index 4eda844ddd3189148fa2e89fcceb0732d9ef070b..47aeb5cea3be3d46c64e4808252101d1c74ffe42 100644
--- a/.gitlab/ci/jobs/alpine-3-gcc-dedicated.yml
+++ b/.gitlab/ci/jobs/alpine-3-gcc-dedicated.yml
@@ -20,7 +20,7 @@ Alpine 3 GCC Dedicated:
     - - |
           # apk_development
           echo -e "\e[0Ksection_start:`date +%s`:apk_development[collapsed=true]\r\e[0KInstalling development packages"
-      - apk add cmake musl-dev sdl2-dev libpng-dev curl-dev miniupnpc-dev elfutils-dev
+      - apk add cmake musl-dev sdl2-dev libpng-dev curl-dev elfutils-dev
       - |
           # apk_development
           echo -e "\e[0Ksection_end:`date +%s`:apk_development\r\e[0K"
@@ -33,6 +33,7 @@ Alpine 3 GCC Dedicated:
             --preset ninja-debug \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF \
             -DSRB2_CONFIG_EXECINFO=NO \
             -DSRB2_CONFIG_DEDICATED=ON
@@ -43,7 +44,7 @@ Alpine 3 GCC Dedicated:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose
+      - cmake --build build.cmake --parallel 1
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/alpine-3-gcc.yml b/.gitlab/ci/jobs/alpine-3-gcc.yml
index 11d1ca219fcd6f5c745fd5dfeb8f79a9284c9653..ff4e0027fabd8a9c955f208d1eb9f5aecfa53857 100644
--- a/.gitlab/ci/jobs/alpine-3-gcc.yml
+++ b/.gitlab/ci/jobs/alpine-3-gcc.yml
@@ -101,7 +101,7 @@ Alpine 3 GCC:
     - - |
           # apk_development
           echo -e "\e[0Ksection_start:`date +%s`:apk_development[collapsed=true]\r\e[0KInstalling development packages"
-      - apk add cmake musl-dev sdl2-dev libpng-dev curl-dev miniupnpc-dev elfutils-dev
+      - apk add cmake musl-dev sdl2-dev libpng-dev curl-dev elfutils-dev
       - |
           # apk_development
           echo -e "\e[0Ksection_end:`date +%s`:apk_development\r\e[0K"
@@ -114,6 +114,7 @@ Alpine 3 GCC:
             --preset ninja-debug \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF \
             -DSRB2_CONFIG_EXECINFO=NO
       - |
@@ -123,7 +124,7 @@ Alpine 3 GCC:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/batocera-arm64.yml b/.gitlab/ci/jobs/batocera-arm64.yml
index a914327abb957f8e3542285581cd73d21b8cbd68..5d4e30d13be514c62864c1f363d41ce62dd5a6b4 100644
--- a/.gitlab/ci/jobs/batocera-arm64.yml
+++ b/.gitlab/ci/jobs/batocera-arm64.yml
@@ -26,7 +26,7 @@ batocera:arm64:
     - - |
           # apt_development
           echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
-      - apt-get install libsdl2-dev:arm64 libpng-dev:arm64 libcurl4-openssl-dev:arm64 libyuv-dev:arm64 libminiupnpc-dev:arm64
+      - apt-get install libsdl2-dev:arm64 libpng-dev:arm64 libcurl4-openssl-dev:arm64 libyuv-dev:arm64
       - |
           # apt_development
           echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
@@ -39,6 +39,7 @@ batocera:arm64:
             --preset ninja-debug \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF \
             -DSRB2_CONFIG_FORCE_NO_MS_BITFIELDS=ON
       - |
@@ -48,7 +49,7 @@ batocera:arm64:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/debian-oldstable-amd64.yml b/.gitlab/ci/jobs/debian-oldstable-amd64.yml
index 6b0171862e8b64ed3d00bc007347a8d93896881d..0d6bac14c630ca122b19c5b946671d170d85bda2 100644
--- a/.gitlab/ci/jobs/debian-oldstable-amd64.yml
+++ b/.gitlab/ci/jobs/debian-oldstable-amd64.yml
@@ -28,7 +28,7 @@ Debian oldstable:amd64:
     - - |
           # apt_development
           echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
-      - apt-get install libsdl2-dev:amd64 libpng-dev:amd64 libcurl4-openssl-dev:amd64 libminiupnpc-dev:amd64
+      - apt-get install libsdl2-dev:amd64 libpng-dev:amd64 libcurl4-openssl-dev:amd64
       - |
           # apt_development
           echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
@@ -40,6 +40,7 @@ Debian oldstable:amd64:
           cmake \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O3 -g -DNDEBUG" \
             -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O3 -g -DNDEBUG"
             -DSRB2_CONFIG_DEV_BUILD=ON \
@@ -52,7 +53,7 @@ Debian oldstable:amd64:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/debian-oldstable-arm64.yml b/.gitlab/ci/jobs/debian-oldstable-arm64.yml
index 237342c6ff298093d55b84848f85c4d812674ffc..bdf12dbe1684b5fffdc28f6d4fe0ed1a5b87086e 100644
--- a/.gitlab/ci/jobs/debian-oldstable-arm64.yml
+++ b/.gitlab/ci/jobs/debian-oldstable-arm64.yml
@@ -28,7 +28,7 @@ Debian oldstable:arm64:
     - - |
           # apt_development
           echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
-      - apt-get install libsdl2-dev:arm64 libpng-dev:arm64 libcurl4-openssl-dev:arm64 libminiupnpc-dev:arm64
+      - apt-get install libsdl2-dev:arm64 libpng-dev:arm64 libcurl4-openssl-dev:arm64
       - |
           # apt_development
           echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
@@ -40,6 +40,7 @@ Debian oldstable:arm64:
           cmake \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O3 -g -DNDEBUG" \
             -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O3 -g -DNDEBUG"
             -DSRB2_CONFIG_DEV_BUILD=ON \
@@ -53,7 +54,7 @@ Debian oldstable:arm64:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/debian-stable-amd64.yml b/.gitlab/ci/jobs/debian-stable-amd64.yml
index 21fde253c78115f601957b81151f485b87cef274..419e8b21811284746498b6cc8ec5724e3d39d25d 100644
--- a/.gitlab/ci/jobs/debian-stable-amd64.yml
+++ b/.gitlab/ci/jobs/debian-stable-amd64.yml
@@ -31,7 +31,7 @@ Debian stable:amd64:
     - - |
           # apt_development
           echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
-      - apt-get install libsdl2-dev:amd64 libpng-dev:amd64 libcurl4-openssl-dev:amd64 libyuv-dev:amd64 libminiupnpc-dev:amd64
+      - apt-get install libsdl2-dev:amd64 libpng-dev:amd64 libcurl4-openssl-dev:amd64 libyuv-dev:amd64
       - |
           # apt_development
           echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
@@ -44,6 +44,7 @@ Debian stable:amd64:
             --preset ninja-debug \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF
       - |
           # cmake
@@ -52,7 +53,7 @@ Debian stable:amd64:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/debian-stable-arm64.yml b/.gitlab/ci/jobs/debian-stable-arm64.yml
index 7389bbc37929340e5aa2233109493147140218ae..0420c3345de5b8838c59d6e78f48f3bc1b895e98 100644
--- a/.gitlab/ci/jobs/debian-stable-arm64.yml
+++ b/.gitlab/ci/jobs/debian-stable-arm64.yml
@@ -32,7 +32,7 @@ Debian stable:arm64:
     - - |
           # apt_development
           echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
-      - apt-get install libsdl2-dev:arm64 libpng-dev:arm64 libcurl4-openssl-dev:arm64 libyuv-dev:arm64 libminiupnpc-dev:arm64
+      - apt-get install libsdl2-dev:arm64 libpng-dev:arm64 libcurl4-openssl-dev:arm64 libyuv-dev:arm64
       - |
           # apt_development
           echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
@@ -45,6 +45,7 @@ Debian stable:arm64:
             --preset ninja-debug \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF \
             -DSRB2_CONFIG_FORCE_NO_MS_BITFIELDS=ON
       - |
@@ -54,7 +55,7 @@ Debian stable:arm64:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/debian-stable-clang-amd64.yml b/.gitlab/ci/jobs/debian-stable-clang-amd64.yml
index e794c26cfe574d71bd03ec84ae4c8878fbb165e1..ff2c63e850902f9e05b52320c46b9eff8ba63845 100644
--- a/.gitlab/ci/jobs/debian-stable-clang-amd64.yml
+++ b/.gitlab/ci/jobs/debian-stable-clang-amd64.yml
@@ -17,8 +17,6 @@ Debian stable Clang:
   variables:
     CC: clang
     CXX: clang++
-    WFLAGS: -Wno-cast-align -Wno-implicit-const-int-float-conversion -Wno-error=parentheses-equality -Wno-error=misleading-indentation -Wno-error=fortify-source -Werror
-    CFLAGS: -Wno-cast-align -Wno-implicit-const-int-float-conversion -Wno-error=parentheses-equality -Wno-error=misleading-indentation -Wno-error=fortify-source -Werror
 
   script:
     - - |
@@ -32,7 +30,7 @@ Debian stable Clang:
     - - |
           # apt_development
           echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
-      - apt-get install libsdl2-dev libpng-dev libcurl4-openssl-dev libyuv-dev libminiupnpc-dev
+      - apt-get install libsdl2-dev libpng-dev libcurl4-openssl-dev libyuv-dev
       - |
           # apt_development
           echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
@@ -45,6 +43,7 @@ Debian stable Clang:
             --preset ninja-debug \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF \
             -DCPM_USE_LOCAL_PACKAGES:BOOL=ON \
             -DSRB2_CONFIG_ENABLE_TESTS:BOOL=OFF \
@@ -56,7 +55,7 @@ Debian stable Clang:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/debian-stable-i386.yml b/.gitlab/ci/jobs/debian-stable-i386.yml
index 6a0ddc6125b7f745b7b791f163075dc6b59ad02f..0c6b0798a226037856f46d85d0e84d081c29b462 100644
--- a/.gitlab/ci/jobs/debian-stable-i386.yml
+++ b/.gitlab/ci/jobs/debian-stable-i386.yml
@@ -32,7 +32,7 @@ Debian stable:i386:
     - - |
           # apt_development
           echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
-      - apt-get install libsdl2-dev:i386 libpng-dev:i386 libcurl4-openssl-dev:i386 libyuv-dev:i386 libminiupnpc-dev:i386
+      - apt-get install libsdl2-dev:i386 libpng-dev:i386 libcurl4-openssl-dev:i386 libyuv-dev:i386
       - |
           # apt_development
           echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
@@ -45,6 +45,7 @@ Debian stable:i386:
             --preset ninja-debug \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF
       - |
           # cmake
@@ -53,7 +54,7 @@ Debian stable:i386:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/debian-testing-gcc-amd64.yml b/.gitlab/ci/jobs/debian-testing-gcc-amd64.yml
index 9e871c2c88c597075c8eaebb12cb7636f0fef64e..15544076d27a52eec250a6157e437651f2680523 100644
--- a/.gitlab/ci/jobs/debian-testing-gcc-amd64.yml
+++ b/.gitlab/ci/jobs/debian-testing-gcc-amd64.yml
@@ -32,7 +32,7 @@ Debian testing GCC:
     - - |
           # apt_development
           echo -e "\e[0Ksection_start:`date +%s`:apt_development[collapsed=true]\r\e[0KInstalling development packages"
-      - apt-get install libsdl2-dev libpng-dev libcurl4-openssl-dev libyuv-dev libminiupnpc-dev
+      - apt-get install libsdl2-dev libpng-dev libcurl4-openssl-dev libyuv-dev
       - |
           # apt_development
           echo -e "\e[0Ksection_end:`date +%s`:apt_development\r\e[0K"
@@ -45,6 +45,7 @@ Debian testing GCC:
             --preset ninja-debug \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF
       - |
           # cmake
@@ -53,7 +54,7 @@ Debian testing GCC:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/macos-arm64.yml b/.gitlab/ci/jobs/macos-arm64.yml
index 4ee5e5b78955cddbf16c4dafa946a61b5627c2ac..2a5dfda0d4ae7b9b85a9fbc02ecffe231867e4d6 100644
--- a/.gitlab/ci/jobs/macos-arm64.yml
+++ b/.gitlab/ci/jobs/macos-arm64.yml
@@ -52,7 +52,8 @@ osxcross arm64:
     - - |
           # apt_development
           echo -e "\e[0Ksection_start:`date +%s`:macports_development[collapsed=true]\r\e[0KInstalling development packages"
-      - osxcross-macports install --static --arm64 miniupnpc curl libpng || osxcross-macports install --verbose --static --arm64 miniupnpc curl libpng
+      - osxcross-macports install --static --arm64 curl || osxcross-macports install --verbose --static --arm64 curl || true
+      - osxcross-macports install --static --arm64 libpng || osxcross-macports install --verbose --static --arm64 libpng
       - |
           # apt_development
           echo -e "\e[0Ksection_end:`date +%s`:macports_development\r\e[0K"
@@ -65,6 +66,7 @@ osxcross arm64:
             --preset ninja-debug \
             -B build.arm64 \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF \
             -DCPM_USE_LOCAL_PACKAGES:BOOL=ON \
             -DOPENMPT_INCLUDE_DIR:PATH="/osxcross/macports/pkgs/opt/local/include" \
@@ -82,7 +84,7 @@ osxcross arm64:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.arm64 --parallel 1 --verbose -- --keep-going
+      - cmake --build build.arm64 --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
@@ -91,7 +93,7 @@ osxcross arm64:
           # copy config.h
           echo -e "\e[0Ksection_start:`date +%s`:copy[collapsed=false]\r\e[0KCopying config.h"
       - mkdir --parents --verbose build.arm64/dist
-      - cp --reflink=auto --sparse=always --verbose build.arm64/src/config.h build.arm64/dist/arm64.h
+      - cp --reflink=auto --sparse=always build.arm64/src/config.h build.arm64/dist/arm64.h
       - |
           # make
-          echo -e "\e[0Ksection_end:`date +%s`:copy\r\e[0K"
\ No newline at end of file
+          echo -e "\e[0Ksection_end:`date +%s`:copy\r\e[0K"
diff --git a/.gitlab/ci/jobs/macos-x86_64.yml b/.gitlab/ci/jobs/macos-x86_64.yml
index ccb69db9baef8b8546ab633ed70cbac7ce08466d..582cf1f0e7989a7b6603cfec670a8c7a4d2e419c 100644
--- a/.gitlab/ci/jobs/macos-x86_64.yml
+++ b/.gitlab/ci/jobs/macos-x86_64.yml
@@ -52,7 +52,8 @@ osxcross x86_64:
     - - |
           # apt_development
           echo -e "\e[0Ksection_start:`date +%s`:macports_development[collapsed=true]\r\e[0KInstalling development packages"
-      - osxcross-macports install --static         miniupnpc curl libpng || osxcross-macports install --verbose --static         miniupnpc curl libpng
+      - osxcross-macports install --static curl || osxcross-macports install --verbose --static curl || true
+      - osxcross-macports install --static libpng || osxcross-macports install --verbose --static libpng
       - |
           # apt_development
           echo -e "\e[0Ksection_end:`date +%s`:macports_development\r\e[0K"
@@ -65,6 +66,7 @@ osxcross x86_64:
             --preset ninja-debug \
             -B build.x86_64 \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF \
             -DCPM_USE_LOCAL_PACKAGES:BOOL=ON \
             -DOPENMPT_INCLUDE_DIR:PATH="/osxcross/macports/pkgs/opt/local/include" \
@@ -81,7 +83,7 @@ osxcross x86_64:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.x86_64 --parallel 1 --verbose -- --keep-going
+      - cmake --build build.x86_64 --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
@@ -93,4 +95,4 @@ osxcross x86_64:
       - cp --reflink=auto --sparse=always --verbose build.x86_64/src/config.h build.x86_64/dist/x86_64.h
       - |
           # make
-          echo -e "\e[0Ksection_end:`date +%s`:copy\r\e[0K"
\ No newline at end of file
+          echo -e "\e[0Ksection_end:`date +%s`:copy\r\e[0K"
diff --git a/.gitlab/ci/jobs/windows-x64.yml b/.gitlab/ci/jobs/windows-x64.yml
index 9dedf58360f1cef6acefe13d98e552149bcfd11e..b92eae29d51a0d26671305d4c7ca5638524528ac 100644
--- a/.gitlab/ci/jobs/windows-x64.yml
+++ b/.gitlab/ci/jobs/windows-x64.yml
@@ -76,6 +76,7 @@ Windows x64:
             --preset ninja-debug \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/toolchains/mingw.cmake \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF \
             -DSRB2_CONFIG_ENABLE_DISCORDRPC=OFF \
@@ -89,7 +90,7 @@ Windows x64:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/.gitlab/ci/jobs/windows-x86.yml b/.gitlab/ci/jobs/windows-x86.yml
index cac42f752715e145e6647189f3703f9d06b8cc74..22c2d05631a0e3f2327559fa685d2a5609a5925b 100644
--- a/.gitlab/ci/jobs/windows-x86.yml
+++ b/.gitlab/ci/jobs/windows-x86.yml
@@ -74,6 +74,7 @@ Windows x86:
             --preset ninja-debug \
             -B build.cmake \
             -G "Unix Makefiles" \
+            -DCMAKE_COLOR_DIAGNOSTICS=OFF \
             -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/toolchains/mingw.cmake \
             -DSRB2_CONFIG_ENABLE_WEBM_MOVIES=OFF \
             -DSRB2_CONFIG_ENABLE_DISCORDRPC=OFF \
@@ -87,7 +88,7 @@ Windows x86:
     - - |
           # make
           echo -e "\e[0Ksection_start:`date +%s`:make[collapsed=false]\r\e[0KCompiling SRB2"
-      - cmake --build build.cmake --parallel 1 --verbose -- --keep-going
+      - cmake --build build.cmake --parallel 1 -- --keep-going
       - |
           # make
           echo -e "\e[0Ksection_end:`date +%s`:make\r\e[0K"
diff --git a/src/acs/vm/ACSVM/CMakeLists.txt b/src/acs/vm/ACSVM/CMakeLists.txt
index 29760733fb97ed9ff32d6a74f6c947f1a8500678..5ae770b1d026e61d9e3fbde903a503305261d150 100644
--- a/src/acs/vm/ACSVM/CMakeLists.txt
+++ b/src/acs/vm/ACSVM/CMakeLists.txt
@@ -75,6 +75,7 @@ add_library(acsvm ${ACSVM_SHARED_DECL}
    Types.hpp
    Vector.hpp
 )
+target_compile_features(acsvm PRIVATE cxx_std_17)
 
 ACSVM_INSTALL_LIB(acsvm)
 
diff --git a/src/acs/vm/CMakeLists.txt b/src/acs/vm/CMakeLists.txt
index 3116012c67ec1e89d47c5e3afbb3e17ad523c889..a370424b3a54f46003320548f41135dfb67d64d7 100644
--- a/src/acs/vm/CMakeLists.txt
+++ b/src/acs/vm/CMakeLists.txt
@@ -10,7 +10,7 @@
 ##
 ##-----------------------------------------------------------------------------
 
-cmake_minimum_required(VERSION 2.6)
+cmake_minimum_required(VERSION 3.14)
 
 cmake_policy(SET CMP0017 NEW)
 
diff --git a/src/d_player.h b/src/d_player.h
index f1458f7fcbd0d88380c771ff891c73206cb2628b..80ebacc259db690f5e7f1d7422af4fbdecb65d92 100644
--- a/src/d_player.h
+++ b/src/d_player.h
@@ -150,6 +150,7 @@ typedef enum
 	CR_SLIDING,
 	CR_ZOOMTUBE,
 	CR_DASHRING,
+	CR_TRAPBUBBLE,
 } carrytype_t; // carry
 
 /*
diff --git a/src/deh_tables.c b/src/deh_tables.c
index 6a5255e8ee7671a7e09a5d49956c34e0367481a9..58deb6cb86a97cb465b517c27ccc69c5b9ec16d3 100644
--- a/src/deh_tables.c
+++ b/src/deh_tables.c
@@ -4670,7 +4670,10 @@ struct int_const_s const INT_CONST[] = {
 
 	// Carrying
 	{"CR_NONE",CR_NONE},
+	{"CR_SLIDING",CR_SLIDING},
 	{"CR_ZOOMTUBE",CR_ZOOMTUBE},
+	{"CR_DASHRING",CR_DASHRING},
+	{"CR_TRAPBUBBLE",CR_TRAPBUBBLE},
 
 	// Character flags (skinflags_t)
 	{"SF_MACHINE",SF_MACHINE},
diff --git a/src/k_respawn.c b/src/k_respawn.c
index 6fe2f989744154e56f52af3c6e5237578237207f..127dc7a3cfa94e0c2878a2e940e3e9bbc103ec80 100644
--- a/src/k_respawn.c
+++ b/src/k_respawn.c
@@ -724,7 +724,7 @@ static void K_DropDashWait(player_t *player)
 		player->respawn.timer--;
 
 	if (player->pflags & PF_FAULT)
-		return;
+		return;	
 
 	if (leveltime % 8 == 0)
 	{
@@ -871,6 +871,12 @@ static void K_HandleDropDash(player_t *player)
 		{
 			player->mo->colorized = false;
 		}
+		// if player got trapped inside a bubble but lost its bubble object in a unintended way, remove no gravity flag
+		if (((P_MobjWasRemoved(player->mo->tracer) || player->mo->tracer == NULL || (!P_MobjWasRemoved(player->mo->tracer) && player->mo->tracer && player->mo->tracer->type != MT_BUBBLESHIELDTRAP)) && player->carry == CR_TRAPBUBBLE) && (player->mo->flags & MF_NOGRAVITY))
+		{
+			player->mo->flags &= ~MF_NOGRAVITY;
+			player->carry = CR_NONE;
+		}
 	}
 	else
 	{
diff --git a/src/p_inter.c b/src/p_inter.c
index 49cae6cab68bbce3be386a575c73bcf78410e9de..1c696327acf02b63cacdf2e63fafea48c388b6cb 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -642,6 +642,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
 			P_SetTarget(&special->tracer, toucher);
 			toucher->flags |= MF_NOGRAVITY;
 			toucher->momz = (8*toucher->scale) * P_MobjFlip(toucher);
+			toucher->player->carry = CR_TRAPBUBBLE;
+			P_SetTarget(&toucher->tracer, special); //use tracer to acces the object 
 
 			// Snap to the unfortunate player and quit moving laterally, or we can end up quite far away
 			special->momx = 0;
diff --git a/src/p_mobj.c b/src/p_mobj.c
index 896af74d673242825b282031bf18c74a1bbc405e..4fe37026ed1d81729b4ec03cd86b468452129fce 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -9339,7 +9339,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
 		if (leveltime % 180 == 0)
 			S_StartSound(mobj, sfx_s3kbfl);
 
-		if (mobj->tracer && !P_MobjWasRemoved(mobj->tracer) && mobj->tracer->player)
+		if (mobj->tracer && !P_MobjWasRemoved(mobj->tracer) && mobj->tracer->tracer == mobj && mobj->tracer->player && mobj->tracer->player->carry == CR_TRAPBUBBLE)
 		{
 			player_t *player = mobj->tracer->player;
 			fixed_t destx, desty, curfz, destfz;
@@ -9387,6 +9387,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
 			{
 				S_StartSound(mobj->tracer, sfx_s3k77);
 				mobj->tracer->flags &= ~MF_NOGRAVITY;
+				mobj->tracer->player->carry = CR_NONE;
 				P_KillMobj(mobj, mobj->tracer, mobj->tracer, DMG_NORMAL);
 				break;
 			}
diff --git a/src/p_setup.cpp b/src/p_setup.cpp
index 5bc77bc9f96f7580cabcfc54ee039176dbff6085..06642755a4ec008f9874f244e0d8747b36892bf3 100644
--- a/src/p_setup.cpp
+++ b/src/p_setup.cpp
@@ -784,9 +784,13 @@ static int cmp_loopends(const void *a, const void *b)
 		*mt2 = *(const mapthing_t*const*)b;
 
 	// weighted sorting; tag takes precedence over type
-	return
-		intsign(mt1->tid - mt2->tid) * 2 +
+	const int maincomp = intsign(mt1->tid - mt2->tid) * 2 +
 		intsign(mt1->thing_args[0] - mt2->thing_args[0]);
+
+	// JugadorXEI (04/20/25): If a qsort comparison ends up with an equal result,
+	// it results in UNSPECIFIED BEHAVIOR, so assuming the previous two comparisons
+	// are equal, let's make it consistent with Linux behaviour (ascending order).
+	return maincomp != 0 ? maincomp : intsign((mt1 - mapthings) - (mt2 - mapthings));
 }
 
 static void P_SpawnMapThings(boolean spawnemblems)
diff --git a/src/p_user.c b/src/p_user.c
index ecff343eeec5469e345b20e4a36c06b086ed2709..dfc87ecc7c6cc4047be0bfbca7b81be4d2de3b8e 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -418,7 +418,8 @@ void P_ResetPlayer(player_t *player)
 {
 	//player->pflags &= ~(PF_);
 
-	player->carry = CR_NONE;
+	if (player->carry != CR_TRAPBUBBLE)
+		player->carry = CR_NONE;
 	player->onconveyor = 0;
 
 	//player->drift = player->driftcharge = 0;
@@ -4545,17 +4546,17 @@ void P_PlayerThink(player_t *player)
 
 	if (player->nocontrol && player->nocontrol < UINT16_MAX)
 	{
-		if (!(--player->nocontrol))
-		{
-			if (player->pflags & PF_FAULT)
-			{
-				player->pflags &= ~PF_FAULT;
-				player->mo->renderflags &= ~RF_DONTDRAW;
-				player->mo->flags &= ~MF_NOCLIPTHING;
-			}
-		}
+		player->nocontrol--;
 	}
 
+	// tic down the var normaly and remove the flag upon respawn so its guaranteed to be removed from the player
+	if (!player->nocontrol && !player->respawn.timer && player->respawn.state == RESPAWNST_DROP &&  (player->pflags & PF_FAULT))
+	{
+		player->pflags &= ~PF_FAULT;
+		player->mo->renderflags &= ~RF_DONTDRAW;
+		player->mo->flags &= ~MF_NOCLIPTHING;
+	}
+	
 	boolean deathcontrolled = (player->respawn.state != RESPAWNST_NONE && player->respawn.truedeath == true)
 		|| (player->pflags & PF_NOCONTEST) || (player->karmadelay);
 	boolean powercontrolled = (player->hyudorotimer) || (player->growshrinktimer > 0);
diff --git a/src/r_main.cpp b/src/r_main.cpp
index 47d2d7ded4c81b6efe7b2d0a7cbca1f46a6fbf08..b62a245dfc63f996109eeb04c6a453e6688e6f17 100644
--- a/src/r_main.cpp
+++ b/src/r_main.cpp
@@ -1430,7 +1430,13 @@ boolean R_ViewpointHasChasecam(player_t *player)
 
 boolean R_IsViewpointThirdPerson(player_t *player, boolean skybox)
 {
-	boolean chasecam = R_ViewpointHasChasecam(player);
+	boolean chasecam = false;
+
+	// Prevent game crash if player is ever invalid.
+	if (!player)
+		return false;
+		
+	chasecam = R_ViewpointHasChasecam(player);
 
 	// cut-away view stuff
 	if (player->awayview.tics || skybox)
diff --git a/src/sdl/CMakeLists.txt b/src/sdl/CMakeLists.txt
index 445f125857f928aaaa4521d34c908d21824fee4d..8c5bde5491119d4621ec662736a9ce1ec10d9fc7 100644
--- a/src/sdl/CMakeLists.txt
+++ b/src/sdl/CMakeLists.txt
@@ -91,9 +91,6 @@ endif()
 target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_MIXER -DSOUND=SOUND_MIXER)
 target_compile_definitions(SRB2SDL2 PRIVATE -DDIRECTFULLSCREEN -DHAVE_SDL)
 
-# NOMUMBLE till WRITE* macros are fixed for C++ or mumble integration is rewritten
-target_compile_definitions(SRB2SDL2 PRIVATE -DNOMUMBLE)
-
 #### Installation ####
 if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin)
 	install(TARGETS SRB2SDL2
diff --git a/src/sdl/i_system.cpp b/src/sdl/i_system.cpp
index e65e873aee37929eccd76de01b9560d3e01c88e9..d1188e95a439157709664ff62b1646442d63f8b2 100644
--- a/src/sdl/i_system.cpp
+++ b/src/sdl/i_system.cpp
@@ -1350,7 +1350,7 @@ static void I_SetupMumble(void)
 	if(shmfd < 0)
 		return;
 
-	mumble = mmap(NULL, sizeof(*mumble), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0);
+	mumble = static_cast<mumble_s*>(mmap(NULL, sizeof(*mumble), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0));
 	if (mumble == MAP_FAILED)
 		mumble = NULL;
 #endif
@@ -1366,7 +1366,7 @@ void I_UpdateMumble(const mobj_t *mobj, const listener_t listener)
 		return;
 
 	if(mumble->uiVersion != 2) {
-		wcsncpy(mumble->name, L"Dr. Robotnik's Ring Racers "VERSIONSTRINGW, 256);
+		wcsncpy(mumble->name, L"Dr. Robotnik's Ring Racers " VERSIONSTRINGW, 256);
 		wcsncpy(mumble->description, L"Dr. Robotnik's Ring Racers with integrated Mumble Link support.", 2048);
 		mumble->uiVersion = 2;
 	}