From b6f2a9e544a9e3d1edf64a32e8d1bd903ba333a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Kapu=C5=9Bci=C5=84ski?= <tomaszkax86@gmail.com>
Date: Fri, 29 Apr 2022 00:02:04 +0200
Subject: [PATCH] Fix for invisible batteries (code by melex750) (#1520)

* Fix for invisible batteries (code by melex750)

* Updated vcpkg

* A workaround for sprintf define

* Added mpg123 to dependencies due to newer version of SndFile

* Removed CONFIG

* Another fix for dependencies

* Made additional dependencies optional
---
 .github/workflows/build.yml | 10 +++++-----
 CMakeLists.txt              |  3 +++
 src/CMakeLists.txt          | 14 ++++++++++++++
 src/app/app.cpp             |  3 ++-
 src/common/restext.cpp      |  3 ++-
 src/level/robotmain.cpp     |  9 +--------
 6 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index c0792ccf..945845b4 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -14,7 +14,7 @@ jobs:
       fail-fast: false
     steps:
     - name: Install Colobot dependencies
-      run: sudo apt-get update && sudo apt-get install -y --no-install-recommends build-essential cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsndfile1-dev libvorbis-dev libogg-dev libpng-dev libglew-dev libopenal-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libphysfs-dev gettext git po4a vorbis-tools librsvg2-bin xmlstarlet
+      run: sudo apt-get update && sudo apt-get install -y --no-install-recommends build-essential cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsndfile1-dev libvorbis-dev libogg-dev libpng-dev libglew-dev libopenal-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libphysfs-dev gettext git po4a vorbis-tools librsvg2-bin xmlstarlet libmpg123-dev
       if: matrix.container == ''
     - uses: actions/checkout@v2
     - name: Checkout the Google Test submodule
@@ -98,11 +98,11 @@ jobs:
     - name: Install Colobot dependencies
       uses: lukka/run-vcpkg@v7
       with:
-        vcpkgGitCommitId: '210240b399fbc2f1363f4103b6a93629c207d7e3'
+        vcpkgGitCommitId: 'e809a42f87565e803b2178a0c11263f462d1800a'
         vcpkgTriplet: ${{ matrix.vcpkg_triplet }}
-        vcpkgArguments: 'boost-system boost-filesystem boost-regex boost-lexical-cast boost-bimap boost-algorithm boost-property-tree boost-optional boost-range sdl2 sdl2-ttf sdl2-image glew libpng libwebp tiff gettext libsndfile libvorbis libogg openal-soft physfs'
+        vcpkgArguments: 'boost-system boost-filesystem boost-regex boost-lexical-cast boost-bimap boost-algorithm boost-property-tree boost-optional boost-range sdl2 sdl2-ttf sdl2-image glew libpng libwebp tiff gettext libsndfile libvorbis libogg openal-soft physfs mpg123'
         # SHA-256 hash of the list of packages above, for caching purposes
-        appendedCacheKey: '35754367e6e6b4fb1b1ec24fa631e5234548fa1f9a59e4f2d80d2174a3a4e1b5'
+        appendedCacheKey: '84402d9834b06a1b571e0fda32a791915777d47a394a1469d4773322bd71614b'
     - name: Install external tools
       working-directory: ${{ github.workspace }}
       run: |
@@ -158,7 +158,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
     - name: Install Colobot dependencies
-      run: sudo apt-get update && sudo apt-get install -y --no-install-recommends build-essential cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsndfile1-dev libvorbis-dev libogg-dev libpng-dev libglew-dev libopenal-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libphysfs-dev gettext git po4a vorbis-tools librsvg2-bin xmlstarlet doxygen graphviz
+      run: sudo apt-get update && sudo apt-get install -y --no-install-recommends build-essential cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsndfile1-dev libvorbis-dev libogg-dev libpng-dev libglew-dev libopenal-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libphysfs-dev gettext git po4a vorbis-tools librsvg2-bin xmlstarlet doxygen graphviz libmpg123-dev
     - uses: actions/checkout@v2
     - name: Create build directory
       run: cmake -E make_directory build
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 96b534a5..9fe4357d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -327,8 +327,11 @@ find_package(GLEW REQUIRED)
 if (OPENAL_SOUND)
     find_package(OpenAL REQUIRED)
 endif()
+
 find_package(SndFile REQUIRED)
 
+find_package(mpg123 QUIET)
+find_package(mp3lame QUIET)
 
 if(NOT ASSERTS)
     add_definitions(-DNDEBUG)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 79ec4090..10def122 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -493,6 +493,20 @@ target_link_libraries(colobotbase PUBLIC
     SndFile::sndfile
 )
 
+if(mpg123_FOUND)
+    target_link_libraries(colobotbase PUBLIC
+        MPG123::libmpg123
+        MPG123::libout123
+        MPG123::libsyn123
+    )
+endif()
+
+if(mp3lame_FOUND)
+    target_link_libraries(colobotbase PUBLIC
+        mp3lame::mp3lame
+    )
+endif()
+
 # Optional libraries
 if(OPENAL_SOUND)
     target_sources(colobotbase PRIVATE
diff --git a/src/app/app.cpp b/src/app/app.cpp
index 68f7d68e..948c2b65 100644
--- a/src/app/app.cpp
+++ b/src/app/app.cpp
@@ -56,11 +56,12 @@
 #include <SDL_image.h>
 
 #include <stdlib.h>
-#include <libintl.h>
 #include <getopt.h>
 #include <localename.h>
 #include <thread>
 
+#include <libintl.h>
+
 using TimeUtils::TimeStamp;
 using TimeUtils::TimeUnit;
 
diff --git a/src/common/restext.cpp b/src/common/restext.cpp
index 7c5cf830..d23a61d8 100644
--- a/src/common/restext.cpp
+++ b/src/common/restext.cpp
@@ -31,10 +31,11 @@
 
 #include "object/object_type.h"
 
-#include <libintl.h>
 #include <SDL_keyboard.h>
 #include <boost/regex.hpp>
 
+#include <libintl.h>
+
 const char* stringsText[RT_MAX]         = { nullptr };
 const char* stringsEvent[EVENT_STD_MAX] = { nullptr };
 const char* stringsObject[OBJECT_MAX]   = { nullptr };
diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp
index 5b9b269a..c048d596 100644
--- a/src/level/robotmain.cpp
+++ b/src/level/robotmain.cpp
@@ -4930,6 +4930,7 @@ CObject* CRobotMain::IOReadScene(std::string filename, std::string filecbot)
                     assert(slotNum >= 0);
                     assert(slots.find(slotNum) == slots.end());
                     asSlotted->SetSlotContainedObject(slotNum, power);
+                    dynamic_cast<CTransportableObject&>(*power).SetTransporter(obj);
                 }
 
                 for (std::pair<const int, CObject*>& slot : slots)
@@ -4949,14 +4950,6 @@ CObject* CRobotMain::IOReadScene(std::string filename, std::string filecbot)
                 assert(cargo == nullptr);
             }
 
-            if (power != nullptr)
-            {
-                dynamic_cast<CSlottedObject&>(*obj).SetSlotContainedObjectReq(CSlottedObject::Pseudoslot::POWER, power);
-                dynamic_cast<CTransportableObject&>(*power).SetTransporter(obj);
-            }
-            cargo = nullptr;
-            power = nullptr;
-
             objCounter++;
         }
     }