Build fixes for mingw (#245)

This commit is contained in:
Anonymous Maarten 2023-10-25 01:24:29 +02:00 committed by GitHub
parent 4c5c709af6
commit e928fc9425
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 64 additions and 42 deletions

View file

@ -209,6 +209,9 @@ add_library(lego1 SHARED
LEGO1/towtrackmissionstate.cpp LEGO1/towtrackmissionstate.cpp
LEGO1/viewmanager.cpp LEGO1/viewmanager.cpp
) )
if (MINGW)
target_compile_definitions(lego1 PRIVATE DIRECTINPUT_VERSION=0x0500)
endif()
# Additional include directories for both targets # Additional include directories for both targets
include_directories("${CMAKE_SOURCE_DIR}/3rdparty/vec") include_directories("${CMAKE_SOURCE_DIR}/3rdparty/vec")

View file

@ -31,7 +31,8 @@ static class msVC6_4786WorkAround { public: msVC6_4786WorkAround() {} } msVC6_47
#include <algorithm> #include <algorithm>
#include <list> #include <list>
#include <set> #include <set>
using namespace std; using std::list;
using std::set;
#endif #endif
// We use `override` so newer compilers can tell us our vtables are valid, // We use `override` so newer compilers can tell us our vtables are valid,

View file

@ -1,8 +1,13 @@
#ifndef DECOMP_H #ifndef DECOMP_H
#define DECOMP_H #define DECOMP_H
#if defined(_MSC_VER)
#define DECOMP_STATIC_ASSERT(V) namespace { typedef int foo[(V)?1:-1]; } #define DECOMP_STATIC_ASSERT(V) namespace { typedef int foo[(V)?1:-1]; }
#define DECOMP_SIZE_ASSERT(T, S) DECOMP_STATIC_ASSERT(sizeof(T) == S) #define DECOMP_SIZE_ASSERT(T, S) DECOMP_STATIC_ASSERT(sizeof(T) == S)
#else
#define DECOMP_STATIC_ASSERT(V)
#define DECOMP_SIZE_ASSERT(T, S)
#endif
#ifndef _countof #ifndef _countof
#define _countof(arr) sizeof(arr) / sizeof(arr[0]) #define _countof(arr) sizeof(arr) / sizeof(arr[0])

View file

@ -192,7 +192,7 @@ void LegoGameState::SetSavePath(char *p_savePath)
} }
// OFFSET: LEGO1 0x1003bbb0 // OFFSET: LEGO1 0x1003bbb0
LegoState *LegoGameState::GetState(char *p_stateName) LegoState *LegoGameState::GetState(COMPAT_CONST char *p_stateName)
{ {
for (MxS32 i = 0; i < m_stateCount; ++i) for (MxS32 i = 0; i < m_stateCount; ++i)
if (m_stateArray[i]->IsA(p_stateName)) if (m_stateArray[i]->IsA(p_stateName))
@ -201,7 +201,7 @@ LegoState *LegoGameState::GetState(char *p_stateName)
} }
// OFFSET: LEGO1 0x1003bc00 // OFFSET: LEGO1 0x1003bc00
LegoState *LegoGameState::CreateState(char *p_stateName) LegoState *LegoGameState::CreateState(COMPAT_CONST char *p_stateName)
{ {
LegoState* newState = (LegoState*)ObjectFactory()->Create(p_stateName); LegoState* newState = (LegoState*)ObjectFactory()->Create(p_stateName);
RegisterState(newState); RegisterState(newState);

View file

@ -29,8 +29,8 @@ class LegoGameState
__declspec(dllexport) void SerializeScoreHistory(MxS16 p); __declspec(dllexport) void SerializeScoreHistory(MxS16 p);
__declspec(dllexport) void SetSavePath(char *p); __declspec(dllexport) void SetSavePath(char *p);
LegoState *GetState(char *p_stateName); LegoState *GetState(COMPAT_CONST char *p_stateName);
LegoState *CreateState(char *p_stateName); LegoState *CreateState(COMPAT_CONST char *p_stateName);
void GetFileSavePath(MxString *p_outPath, MxULong p_slotn); void GetFileSavePath(MxString *p_outPath, MxULong p_slotn);
void FUN_1003a720(MxU32 p_unk); void FUN_1003a720(MxU32 p_unk);

View file

@ -19,11 +19,10 @@ MxCore *LegoObjectFactory::Create(const char *p_name)
{ {
MxAtomId atom(p_name, LookupMode_Exact); MxAtomId atom(p_name, LookupMode_Exact);
if (0) { #define X(V) if (this->m_id##V == atom) { return new V; } else
#define X(V) } else if (this->m_id##V == atom) { return new V;
FOR_LEGOOBJECTFACTORY_OBJECTS(X) FOR_LEGOOBJECTFACTORY_OBJECTS(X)
#undef X #undef X
} else { {
return MxObjectFactory::Create(p_name); return MxObjectFactory::Create(p_name);
} }
} }

View file

@ -303,7 +303,7 @@ void LegoOmni::Init()
} }
// OFFSET: LEGO1 0x10058e70 STUB // OFFSET: LEGO1 0x10058e70 STUB
MxResult LegoOmni::Create(COMPAT_CONST MxOmniCreateParam &p) MxResult LegoOmni::Create(MxOmniCreateParam &p)
{ {
MxOmni::Create(p); MxOmni::Create(p);

View file

@ -56,7 +56,7 @@ class LegoOmni : public MxOmni
} }
virtual void Init() override; // vtable+14 virtual void Init() override; // vtable+14
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p) override; // vtable+18 virtual MxResult Create(MxOmniCreateParam &p) override; // vtable+18
virtual void Destroy() override; // vtable+1c virtual void Destroy() override; // vtable+1c
virtual MxResult Start(MxDSAction* action) override; // vtable+20 virtual MxResult Start(MxDSAction* action) override; // vtable+20
virtual MxResult DeleteObject(MxDSAction &ds) override; // vtable+24 virtual MxResult DeleteObject(MxDSAction &ds) override; // vtable+24

View file

@ -47,7 +47,7 @@ inline void GetDouble(char **p_source, T& p_dest)
} }
template <class T> template <class T>
inline void GetString(char **p_source, const char *&p_dest, T *p_obj, void (T::*p_setter)(const char*)) inline void GetString(char **p_source, const char *p_dest, T *p_obj, void (T::*p_setter)(const char*))
{ {
(p_obj->*p_setter)(*p_source); (p_obj->*p_setter)(*p_source);
*p_source += strlen(p_dest) + 1; *p_source += strlen(p_dest) + 1;

View file

@ -27,7 +27,7 @@ class MxActionNotificationParam : public MxNotificationParam
} }
// OFFSET: LEGO1 0x10051050 // OFFSET: LEGO1 0x10051050
inline virtual MxActionNotificationParam::~MxActionNotificationParam() override inline virtual ~MxActionNotificationParam() override
{ {
if (!this->m_realloc) if (!this->m_realloc)
return; return;

View file

@ -182,7 +182,7 @@ BOOL FAR PASCAL EnumerateCallback(GUID FAR *, LPSTR, LPSTR, LPVOID)
} }
// OFFSET: LEGO1 0x1009c730 STUB // OFFSET: LEGO1 0x1009c730 STUB
char *MxDeviceEnumerate::EnumerateErrorToString(HRESULT p_error) const char *MxDeviceEnumerate::EnumerateErrorToString(HRESULT p_error)
{ {
// TODO: This is a list of error messages, similar to the function in // TODO: This is a list of error messages, similar to the function in
// MxDirectDraw, except that this one now contains the Direct3D errors. // MxDirectDraw, except that this one now contains the Direct3D errors.

View file

@ -27,7 +27,7 @@ class MxDeviceEnumerate
virtual MxResult _DoEnumerate(); virtual MxResult _DoEnumerate();
BOOL FUN_1009c070(); BOOL FUN_1009c070();
char *EnumerateErrorToString(HRESULT p_error); const char *EnumerateErrorToString(HRESULT p_error);
undefined4 m_unk004; undefined4 m_unk004;
undefined4 m_unk008; undefined4 m_unk008;

View file

@ -9,7 +9,7 @@ DECOMP_SIZE_ASSERT(MxDirectDraw::DeviceModesInfo, 0x17c);
#endif #endif
// GLOBAL OFFSET: LEGO1 0x10100C68 // GLOBAL OFFSET: LEGO1 0x10100C68
extern BOOL g_is_PALETTEINDEXED8 = 0; BOOL g_is_PALETTEINDEXED8 = 0;
// OFFSET: LEGO1 0x1009DA20 // OFFSET: LEGO1 0x1009DA20
void EnableResizing(HWND hwnd, BOOL flag) void EnableResizing(HWND hwnd, BOOL flag)

View file

@ -41,7 +41,7 @@ class MxDSObject : public MxCore
inline void SetObjectId(MxU32 p_objectId) { this->m_objectId = p_objectId; } inline void SetObjectId(MxU32 p_objectId) { this->m_objectId = p_objectId; }
inline void SetUnknown24(MxS16 p_unk24) { this->m_unk24 = p_unk24; } inline void SetUnknown24(MxS16 p_unk24) { this->m_unk24 = p_unk24; }
inline char *GetSourceName() const { return this->m_sourceName; } inline const char *GetSourceName() const { return this->m_sourceName; }
inline void SetType(MxDSType p_type) { this->m_type = p_type; } inline void SetType(MxDSType p_type) { this->m_type = p_type; }
inline MxDSType GetType() const { return (MxDSType) this->m_type; } inline MxDSType GetType() const { return (MxDSType) this->m_type; }

View file

@ -9,6 +9,9 @@
#define HASH_TABLE_OPT_EXPAND_ADD 1 #define HASH_TABLE_OPT_EXPAND_ADD 1
#define HASH_TABLE_OPT_EXPAND_MULTIPLY 2 #define HASH_TABLE_OPT_EXPAND_MULTIPLY 2
template <class T>
class MxHashTableCursor;
template <class T> template <class T>
class MxHashTableNode class MxHashTableNode
{ {
@ -162,13 +165,13 @@ MxHashTable<T>::~MxHashTable()
while (t) { while (t) {
MxHashTableNode<T> *next = t->m_next; MxHashTableNode<T> *next = t->m_next;
m_customDestructor(t->m_obj); this->m_customDestructor(t->m_obj);
delete t; delete t;
t = next; t = next;
} }
} }
m_numKeys = 0; this->m_numKeys = 0;
memset(m_slots, 0, sizeof(MxHashTableNode<T> *) * m_numSlots); memset(m_slots, 0, sizeof(MxHashTableNode<T> *) * m_numSlots);
delete[] m_slots; delete[] m_slots;
@ -196,7 +199,7 @@ inline void MxHashTable<T>::Resize()
// FIXME: order? m_numKeys set after `rep stosd` // FIXME: order? m_numKeys set after `rep stosd`
m_slots = new_table; m_slots = new_table;
memset(m_slots, 0, sizeof(MxHashTableNode<T> *) * m_numSlots); memset(m_slots, 0, sizeof(MxHashTableNode<T> *) * m_numSlots);
m_numKeys = 0; this->m_numKeys = 0;
for (int i = 0; i != old_size; i++) { for (int i = 0; i != old_size; i++) {
MxHashTableNode<T> *t = old_table[i]; MxHashTableNode<T> *t = old_table[i];
@ -223,13 +226,13 @@ inline void MxHashTable<T>::_NodeInsert(MxHashTableNode<T> *p_node)
m_slots[bucket]->m_prev = p_node; m_slots[bucket]->m_prev = p_node;
m_slots[bucket] = p_node; m_slots[bucket] = p_node;
m_numKeys++; this->m_numKeys++;
} }
template <class T> template <class T>
inline void MxHashTable<T>::Add(T* p_newobj) inline void MxHashTable<T>::Add(T* p_newobj)
{ {
if (m_resizeOption && ((m_numKeys + 1) / m_numSlots) > m_autoResizeRatio) if (m_resizeOption && ((this->m_numKeys + 1) / m_numSlots) > m_autoResizeRatio)
MxHashTable<T>::Resize(); MxHashTable<T>::Resize();
MxU32 hash = Hash(p_newobj); MxU32 hash = Hash(p_newobj);

View file

@ -4,6 +4,11 @@
#include "mxtypes.h" #include "mxtypes.h"
#include "mxcore.h" #include "mxcore.h"
template <class T>
class MxList;
template <class T>
class MxListCursor;
template <class T> template <class T>
class MxListEntry class MxListEntry
{ {
@ -64,7 +69,7 @@ class MxList : protected MxListParent<T>
void Append(T); void Append(T);
void OtherAppend(T p_obj) { _InsertEntry(p_obj, this->m_last, NULL); }; void OtherAppend(T p_obj) { _InsertEntry(p_obj, this->m_last, NULL); };
void DeleteAll(); void DeleteAll();
MxU32 GetCount() { return m_count; } MxU32 GetCount() { return this->m_count; }
void SetDestroy(void (*p_customDestructor)(T)) { this->m_customDestructor = p_customDestructor; } void SetDestroy(void (*p_customDestructor)(T)) { this->m_customDestructor = p_customDestructor; }
friend class MxListCursor<T>; friend class MxListCursor<T>;
@ -128,12 +133,12 @@ inline void MxList<T>::DeleteAll()
break; break;
MxListEntry<T> *next = t->m_next; MxListEntry<T> *next = t->m_next;
m_customDestructor(t->GetValue()); this->m_customDestructor(t->GetValue());
delete t; delete t;
t = next; t = next;
} }
m_count = 0; this->m_count = 0;
m_last = NULL; m_last = NULL;
m_first = NULL; m_first = NULL;
} }
@ -188,7 +193,7 @@ inline void MxList<T>::_DeleteEntry(MxListEntry<T> *match)
m_last = *pPrev; m_last = *pPrev;
delete match; delete match;
m_count--; this->m_count--;
} }
template <class T> template <class T>

View file

@ -27,8 +27,8 @@ void MxMusicManager::DeinitializeMIDI()
{ {
m_MIDIInitialized = FALSE; m_MIDIInitialized = FALSE;
midiStreamStop(m_MIDIStreamH); midiStreamStop(m_MIDIStreamH);
midiOutUnprepareHeader(m_MIDIStreamH, m_MIDIHdrP, sizeof(MIDIHDR)); midiOutUnprepareHeader((HMIDIOUT)m_MIDIStreamH, m_MIDIHdrP, sizeof(MIDIHDR));
midiOutSetVolume(m_MIDIStreamH, m_MIDIVolume); midiOutSetVolume((HMIDIOUT)m_MIDIStreamH, m_MIDIVolume);
midiStreamClose(m_MIDIStreamH); midiStreamClose(m_MIDIStreamH);
delete m_MIDIHdrP; delete m_MIDIHdrP;
InitData(); InitData();
@ -106,7 +106,7 @@ void MxMusicManager::SetMIDIVolume()
if (streamHandle) if (streamHandle)
{ {
MxS32 volume = CalculateVolume(result); MxS32 volume = CalculateVolume(result);
midiOutSetVolume(streamHandle, volume); midiOutSetVolume((HMIDIOUT)streamHandle, volume);
} }
} }

View file

@ -35,8 +35,6 @@ MxCore *MxObjectFactory::Create(const char *p_name)
#define X(V) else if (this->m_id##V == atom) { object = new V; } #define X(V) else if (this->m_id##V == atom) { object = new V; }
FOR_MXOBJECTFACTORY_OBJECTS(X) FOR_MXOBJECTFACTORY_OBJECTS(X)
#undef X #undef X
else {}
return object; return object;
} }

View file

@ -40,7 +40,7 @@ class MxOmni : public MxCore
virtual MxLong Notify(MxParam &p) override; // vtable+04 virtual MxLong Notify(MxParam &p) override; // vtable+04
virtual void Init(); // vtable+14 virtual void Init(); // vtable+14
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p); // vtable+18 virtual MxResult Create(MxOmniCreateParam &p); // vtable+18
virtual void Destroy(); // vtable+1c virtual void Destroy(); // vtable+1c
virtual MxResult Start(MxDSAction *p_dsAction); // vtable+20 virtual MxResult Start(MxDSAction *p_dsAction); // vtable+20
virtual MxResult DeleteObject(MxDSAction &p_dsAction); // vtable+24 virtual MxResult DeleteObject(MxDSAction &p_dsAction); // vtable+24

View file

@ -17,6 +17,7 @@ class MxOmniCreateParam : public MxParam
const MxString& GetMediaPath() const { return m_mediaPath; } const MxString& GetMediaPath() const { return m_mediaPath; }
const HWND GetWindowHandle() const { return m_windowHandle; } const HWND GetWindowHandle() const { return m_windowHandle; }
MxVideoParam& GetVideoParam() { return m_videoParam; } MxVideoParam& GetVideoParam() { return m_videoParam; }
const MxVideoParam& GetVideoParam() const { return m_videoParam; }
private: private:
MxString m_mediaPath; MxString m_mediaPath;

View file

@ -164,9 +164,9 @@ void MxPresenter::Enable(MxBool p_enable)
} }
// OFFSET: LEGO1 0x100b5310 // OFFSET: LEGO1 0x100b5310
char *PresenterNameDispatch(const MxDSAction &p_action) const char *PresenterNameDispatch(const MxDSAction &p_action)
{ {
char *name = p_action.GetSourceName(); const char *name = p_action.GetSourceName();
MxS32 format; MxS32 format;
if (!name || strlen(name) == 0) { if (!name || strlen(name) == 0) {

View file

@ -87,6 +87,6 @@ class MxPresenter : public MxCore
MxPresenter *m_unkPresenter; // 0x3c MxPresenter *m_unkPresenter; // 0x3c
}; };
char *PresenterNameDispatch(const MxDSAction &); const char *PresenterNameDispatch(const MxDSAction &);
#endif // MXPRESENTER_H #endif // MXPRESENTER_H

View file

@ -104,7 +104,8 @@ void MxTransitionManager::Transition_Dissolve()
// If we are starting the animation // If we are starting the animation
if (m_animationTimer == 0) { if (m_animationTimer == 0) {
// Generate the list of columns in order... // Generate the list of columns in order...
for (MxS32 i = 0; i < 640; i++) { MxS32 i;
for (i = 0; i < 640; i++) {
m_columnOrder[i] = i; m_columnOrder[i] = i;
} }
@ -242,7 +243,8 @@ void MxTransitionManager::Transition_Pixelation()
if (m_animationTimer == 0) { if (m_animationTimer == 0) {
// Same init/shuffle steps as the dissolve transition, except that // Same init/shuffle steps as the dissolve transition, except that
// we are using big blocky pixels and only need 64 columns. // we are using big blocky pixels and only need 64 columns.
for (MxS32 i = 0; i < 64; i++) { MxS32 i;
for (i = 0; i < 64; i++) {
m_columnOrder[i] = i; m_columnOrder[i] = i;
} }

View file

@ -7,8 +7,13 @@ typedef unsigned short MxU16;
typedef signed short MxS16; typedef signed short MxS16;
typedef unsigned int MxU32; typedef unsigned int MxU32;
typedef signed int MxS32; typedef signed int MxS32;
#ifdef _MSC_VER
typedef unsigned __int64 MxU64; typedef unsigned __int64 MxU64;
typedef signed __int64 MxS64; typedef signed __int64 MxS64;
#else
typedef unsigned long long int MxU64;
typedef signed long long int MxS64;
#endif
typedef float MxFloat; typedef float MxFloat;
typedef double MxDouble; typedef double MxDouble;

View file

@ -27,7 +27,7 @@ class Pizza : public IsleActor
} }
// OFFSET: LEGO1 0x10037fa0 // OFFSET: LEGO1 0x10037fa0
inline MxBool Pizza::IsA(const char *name) const override //vtable+10 inline MxBool IsA(const char *name) const override //vtable+10
{ {
return !strcmp(name, Pizza::ClassName()) || IsleActor::IsA(name); return !strcmp(name, Pizza::ClassName()) || IsleActor::IsA(name);
} }