From a7194266b3b994db84a3ea8bb433427cadc81c03 Mon Sep 17 00:00:00 2001 From: Christian Semmler <mail@csemmler.com> Date: Mon, 11 Dec 2023 16:33:46 -0500 Subject: [PATCH] Refactor utility/decomp headers (#318) --- .github/workflows/format.yml | 1 + CMakeLists.txt | 4 ++++ CONTRIBUTING.md | 1 + LEGO1/mxatomidcounter.h | 2 +- LEGO1/mxcompositepresenter.h | 2 +- LEGO1/mxdiskstreamcontroller.h | 2 +- LEGO1/mxnotificationmanager.h | 2 +- LEGO1/{ => mxstl}/mxstl.h | 0 LEGO1/mxstl/stlcompat.h | 18 ++++++++++++++++++ LEGO1/mxstreamcontroller.h | 2 +- LEGO1/mxstreamlist.h | 2 +- LEGO1/mxticklemanager.h | 2 +- LEGO1/realtime/matrix.cpp | 2 +- LEGO1/realtime/orientableroi.cpp | 2 +- LEGO1/realtime/roi.h | 4 ++-- LEGO1/realtime/vector.cpp | 2 +- LEGO1/tgl/d3drm/impl.h | 2 +- LEGO1/viewmanager/viewlodlist.h | 2 +- LEGO1/viewmanager/viewroi.cpp | 2 +- {LEGO1 => util}/compat.h | 20 +++----------------- {LEGO1 => util}/decomp.h | 0 21 files changed, 42 insertions(+), 32 deletions(-) rename LEGO1/{ => mxstl}/mxstl.h (100%) create mode 100644 LEGO1/mxstl/stlcompat.h rename {LEGO1 => util}/compat.h (71%) rename {LEGO1 => util}/decomp.h (100%) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 2eab4970..17380db7 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -17,6 +17,7 @@ jobs: --style=file \ ISLE/*.cpp ISLE/*.h \ LEGO1/*.cpp LEGO1/*.h \ + LEGO1/mxstl/*.h \ LEGO1/realtime/*.cpp LEGO1/realtime/*.h \ LEGO1/tgl/*.h \ LEGO1/tgl/d3drm/*.cpp LEGO1/tgl/d3drm/*.h \ diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a60e3d4..ed3c29cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -230,6 +230,8 @@ if (MINGW) endif() # Additional include directories + +target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/util") target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/3rdparty/vec") target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/flic") target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/3rdparty/smk") @@ -264,6 +266,8 @@ if (ISLE_BUILD_APP) ISLE/define.cpp ) + target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/util") + # Include LEGO1 headers in ISLE target_include_directories(isle PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1") diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1a698a7d..0c65bc1c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,6 +27,7 @@ This repository currently has only one goal: accuracy to the original executable * [`ISLE`](/ISLE): Decompilation of `ISLE.EXE`. It depends on some code in `LEGO1`. * [`LEGO1`](/LEGO1): Decompilation of `LEGO1.DLL`. This folder contains code from Mindscape's custom in-house engine called **Omni** (file pattern: `mx*`), the LEGO Island-specific extensions for Omni and the game's code (file pattern: `lego*`) as well as several utility libraries developed by Mindscape. * [`tools`](/tools): A set of tools aiding in the decompilation effort. +* [`util`](/util): Utility headers aiding in the decompilation effort. ## Tooling diff --git a/LEGO1/mxatomidcounter.h b/LEGO1/mxatomidcounter.h index c75c2b5c..8fb5ae97 100644 --- a/LEGO1/mxatomidcounter.h +++ b/LEGO1/mxatomidcounter.h @@ -1,7 +1,7 @@ #ifndef MXATOMIDCOUNTER_H #define MXATOMIDCOUNTER_H -#include "compat.h" // STL +#include "mxstl/stlcompat.h" #include "mxstring.h" // Counts the number of existing MxAtomId objects based diff --git a/LEGO1/mxcompositepresenter.h b/LEGO1/mxcompositepresenter.h index 20b3c347..f64de154 100644 --- a/LEGO1/mxcompositepresenter.h +++ b/LEGO1/mxcompositepresenter.h @@ -1,8 +1,8 @@ #ifndef MXCOMPOSITEPRESENTER_H #define MXCOMPOSITEPRESENTER_H -#include "compat.h" // STL #include "mxpresenter.h" +#include "mxstl/stlcompat.h" class MxCompositePresenterList : public list<MxPresenter*> {}; diff --git a/LEGO1/mxdiskstreamcontroller.h b/LEGO1/mxdiskstreamcontroller.h index bed571f4..2de006d1 100644 --- a/LEGO1/mxdiskstreamcontroller.h +++ b/LEGO1/mxdiskstreamcontroller.h @@ -1,9 +1,9 @@ #ifndef MXDISKSTREAMCONTROLLER_H #define MXDISKSTREAMCONTROLLER_H -#include "compat.h" // STL #include "decomp.h" #include "mxdsbuffer.h" +#include "mxstl/stlcompat.h" #include "mxstreamcontroller.h" #include "mxtypes.h" diff --git a/LEGO1/mxnotificationmanager.h b/LEGO1/mxnotificationmanager.h index a26f3748..9ab9c733 100644 --- a/LEGO1/mxnotificationmanager.h +++ b/LEGO1/mxnotificationmanager.h @@ -1,10 +1,10 @@ #ifndef MXNOTIFICATIONMANAGER_H #define MXNOTIFICATIONMANAGER_H -#include "compat.h" #include "mxcore.h" #include "mxcriticalsection.h" #include "mxnotificationparam.h" +#include "mxstl/stlcompat.h" #include "mxtypes.h" class MxNotification { diff --git a/LEGO1/mxstl.h b/LEGO1/mxstl/mxstl.h similarity index 100% rename from LEGO1/mxstl.h rename to LEGO1/mxstl/mxstl.h diff --git a/LEGO1/mxstl/stlcompat.h b/LEGO1/mxstl/stlcompat.h new file mode 100644 index 00000000..bc0076bf --- /dev/null +++ b/LEGO1/mxstl/stlcompat.h @@ -0,0 +1,18 @@ +#ifndef STLCOMPAT_H +#define STLCOMPAT_H + +#include "compat.h" + +#if defined(_MSC_VER) && _MSC_VER <= MSVC420_VERSION +// Disable "nonstandard extension used : 'bool'" warning spam +#pragma warning(disable : 4237) +#include "mxstl.h" +#else +#include <algorithm> +#include <list> +#include <set> +using std::list; +using std::set; +#endif + +#endif // STLCOMPAT_H diff --git a/LEGO1/mxstreamcontroller.h b/LEGO1/mxstreamcontroller.h index 767b4cba..9a763ba1 100644 --- a/LEGO1/mxstreamcontroller.h +++ b/LEGO1/mxstreamcontroller.h @@ -1,13 +1,13 @@ #ifndef MXSTREAMCONTROLLER_H #define MXSTREAMCONTROLLER_H -#include "compat.h" // STL #include "decomp.h" #include "mxatomid.h" #include "mxcore.h" #include "mxcriticalsection.h" #include "mxdsaction.h" #include "mxdsobject.h" +#include "mxstl/stlcompat.h" #include "mxstreamlist.h" #include "mxstreamprovider.h" diff --git a/LEGO1/mxstreamlist.h b/LEGO1/mxstreamlist.h index 46024be5..2a9e7351 100644 --- a/LEGO1/mxstreamlist.h +++ b/LEGO1/mxstreamlist.h @@ -1,10 +1,10 @@ #ifndef MXSTREAMLIST_H #define MXSTREAMLIST_H -#include "compat.h" // STL #include "mxdsaction.h" #include "mxdssubscriber.h" #include "mxnextactiondatastart.h" +#include "mxstl/stlcompat.h" template <class T> class MxStreamList : public list<T> {}; diff --git a/LEGO1/mxticklemanager.h b/LEGO1/mxticklemanager.h index b7d90763..85994ef5 100644 --- a/LEGO1/mxticklemanager.h +++ b/LEGO1/mxticklemanager.h @@ -1,8 +1,8 @@ #ifndef MXTICKLEMANAGER_H #define MXTICKLEMANAGER_H -#include "compat.h" #include "mxcore.h" +#include "mxstl/stlcompat.h" #include "mxtypes.h" class MxTickleClient { diff --git a/LEGO1/realtime/matrix.cpp b/LEGO1/realtime/matrix.cpp index 7b2a94b3..3ba63ca5 100644 --- a/LEGO1/realtime/matrix.cpp +++ b/LEGO1/realtime/matrix.cpp @@ -1,7 +1,7 @@ #include "matrix.h" -#include "../decomp.h" +#include "decomp.h" #include "math.h" #include <memory.h> diff --git a/LEGO1/realtime/orientableroi.cpp b/LEGO1/realtime/orientableroi.cpp index 651a1ac7..e03b78cb 100644 --- a/LEGO1/realtime/orientableroi.cpp +++ b/LEGO1/realtime/orientableroi.cpp @@ -1,6 +1,6 @@ #include "orientableroi.h" -#include "../decomp.h" +#include "decomp.h" DECOMP_SIZE_ASSERT(OrientableROI, 0xdc) diff --git a/LEGO1/realtime/roi.h b/LEGO1/realtime/roi.h index 66c17a84..40cff140 100644 --- a/LEGO1/realtime/roi.h +++ b/LEGO1/realtime/roi.h @@ -3,9 +3,9 @@ // ROI stands for Real-time Object Instance. -#include "../compat.h" -#include "../mxstl.h" +#include "../mxstl/stlcompat.h" #include "../realtime/realtime.h" +#include "compat.h" #include "lodlist.h" #include "vector.h" diff --git a/LEGO1/realtime/vector.cpp b/LEGO1/realtime/vector.cpp index 1d41470c..54df74e4 100644 --- a/LEGO1/realtime/vector.cpp +++ b/LEGO1/realtime/vector.cpp @@ -1,7 +1,7 @@ #include "vector.h" -#include "../decomp.h" +#include "decomp.h" #include <math.h> #include <memory.h> diff --git a/LEGO1/tgl/d3drm/impl.h b/LEGO1/tgl/d3drm/impl.h index bbc7baa0..89894c2d 100644 --- a/LEGO1/tgl/d3drm/impl.h +++ b/LEGO1/tgl/d3drm/impl.h @@ -1,6 +1,6 @@ -#include "../../decomp.h" #include "../tgl.h" +#include "decomp.h" #include <d3drm.h> diff --git a/LEGO1/viewmanager/viewlodlist.h b/LEGO1/viewmanager/viewlodlist.h index 12817ff9..d695624f 100644 --- a/LEGO1/viewmanager/viewlodlist.h +++ b/LEGO1/viewmanager/viewlodlist.h @@ -1,9 +1,9 @@ #ifndef VIEWLODLIST_H #define VIEWLODLIST_H -#include "../compat.h" #include "../realtime/lodlist.h" #include "assert.h" +#include "compat.h" #pragma warning(disable : 4786) diff --git a/LEGO1/viewmanager/viewroi.cpp b/LEGO1/viewmanager/viewroi.cpp index 47cb71e8..47f340ac 100644 --- a/LEGO1/viewmanager/viewroi.cpp +++ b/LEGO1/viewmanager/viewroi.cpp @@ -1,6 +1,6 @@ #include "viewroi.h" -#include "../decomp.h" +#include "decomp.h" DECOMP_SIZE_ASSERT(ViewROI, 0xe0) diff --git a/LEGO1/compat.h b/util/compat.h similarity index 71% rename from LEGO1/compat.h rename to util/compat.h index 9616b254..c1175cd2 100644 --- a/LEGO1/compat.h +++ b/util/compat.h @@ -1,5 +1,5 @@ -#ifndef ISLECOMPAT_H -#define ISLECOMPAT_H +#ifndef COMPAT_H +#define COMPAT_H // Various macros to enable compiling with other/newer compilers. @@ -11,9 +11,6 @@ #define COMPAT_CONST #endif -// DIsable "nonstandard extension used : 'bool'" warning spam -#pragma warning(disable : 4237) - // Disable "identifier was truncated to '255' characters" warning. // Impossible to avoid this if using STL map or set. // This removes most (but not all) occurrences of the warning. @@ -21,17 +18,6 @@ #define MSVC420_VERSION 1020 -// STL compatibility. -#if defined(_MSC_VER) && _MSC_VER <= MSVC420_VERSION -#include "mxstl.h" -#else -#include <algorithm> -#include <list> -#include <set> -using std::list; -using std::set; -#endif - // We use `override` so newer compilers can tell us our vtables are valid, // however this keyword was added in C++11, so we define it as empty for // compatibility with older compilers. @@ -39,4 +25,4 @@ using std::set; #define override #endif -#endif // ISLECOMPAT_H +#endif // COMPAT_H diff --git a/LEGO1/decomp.h b/util/decomp.h similarity index 100% rename from LEGO1/decomp.h rename to util/decomp.h