mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-22 15:37:55 -05:00
ISLE and mingw32 fixes (#18)
* ci: no need to do a final cd * MxDSAction has a setAtomId method * Implement the MxOmniCreateParamBase destructor inline Because of this, ISLE should no longer have to compile mxomnicreateparambase.obj. I didn't modify isle.mak, because I don't have the MSVC 4.20 GUI set-up. * Replace 256 with sizeof(...) * Format DefWndProc calls in WndProc * Replace magic mask in WNDPROC with macro's * Replace magic numbers in main.cpp with macro's * MOUSEMOVE notification id is 10 instead of 0x10 * Lowercase all windows includes such that mingw32 on Linux can find these * Convert ISLE/res/isle.rc to utf-8, and add a comma needed by mingw32 * mingw32 cannot use a enum without previous declaration * minor adjustments --------- Co-authored-by: itsmattkc <34096995+itsmattkc@users.noreply.github.com>
This commit is contained in:
parent
bba513c525
commit
6e18d1b41f
10 changed files with 29 additions and 21 deletions
7
.github/workflows/build.yml
vendored
7
.github/workflows/build.yml
vendored
|
@ -32,8 +32,7 @@ jobs:
|
||||||
C:\msys64\usr\bin\wget.exe https://archive.org/download/idx5sdk/idx5sdk.exe
|
C:\msys64\usr\bin\wget.exe https://archive.org/download/idx5sdk/idx5sdk.exe
|
||||||
7z x .\idx5sdk.exe
|
7z x .\idx5sdk.exe
|
||||||
7z x .\DX5SDK.EXE
|
7z x .\DX5SDK.EXE
|
||||||
cd cdrom
|
|
||||||
|
|
||||||
- name: Cache DX5 SDK
|
- name: Cache DX5 SDK
|
||||||
if: steps.cache-dx5.outputs.cache-hit != 'true'
|
if: steps.cache-dx5.outputs.cache-hit != 'true'
|
||||||
id: save-dx5
|
id: save-dx5
|
||||||
|
@ -41,13 +40,13 @@ jobs:
|
||||||
with:
|
with:
|
||||||
path: dx5sdk
|
path: dx5sdk
|
||||||
key: dx5sdk
|
key: dx5sdk
|
||||||
|
|
||||||
- name: Setup DX5 SDK
|
- name: Setup DX5 SDK
|
||||||
run: |
|
run: |
|
||||||
cd dx5sdk
|
cd dx5sdk
|
||||||
cd cdrom
|
cd cdrom
|
||||||
.\SETUP.EXE /s
|
.\SETUP.EXE /s
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
shell: cmd
|
shell: cmd
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -254,7 +254,7 @@ void Isle::setupVideoFlags(BOOL fullScreen, BOOL flipSurfaces, BOOL backBuffers,
|
||||||
BOOL Isle::setupLegoOmni()
|
BOOL Isle::setupLegoOmni()
|
||||||
{
|
{
|
||||||
char mediaPath[256];
|
char mediaPath[256];
|
||||||
GetProfileStringA("LEGO Island", "MediaPath", "", mediaPath, 256);
|
GetProfileStringA("LEGO Island", "MediaPath", "", mediaPath, sizeof(mediaPath));
|
||||||
|
|
||||||
if (Lego()->Create(MxOmniCreateParam(mediaPath, (struct HWND__ *) m_windowHandle, m_videoParam, MxOmniCreateFlags())) != FAILURE) {
|
if (Lego()->Create(MxOmniCreateParam(mediaPath, (struct HWND__ *) m_windowHandle, m_videoParam, MxOmniCreateFlags())) != FAILURE) {
|
||||||
VariableTable()->SetVariable("ACTOR_01", "");
|
VariableTable()->SetVariable("ACTOR_01", "");
|
||||||
|
@ -348,13 +348,13 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
}
|
}
|
||||||
return DefWindowProcA(hWnd,WM_SYSCOMMAND,wParam,lParam);
|
return DefWindowProcA(hWnd,WM_SYSCOMMAND,wParam,lParam);
|
||||||
case WM_EXITMENULOOP:
|
case WM_EXITMENULOOP:
|
||||||
return DefWindowProcA(hWnd,WM_EXITMENULOOP,wParam,lParam);
|
return DefWindowProcA(hWnd, WM_EXITMENULOOP, wParam, lParam);
|
||||||
case WM_MOVING:
|
case WM_MOVING:
|
||||||
if (g_isle && g_isle->m_fullScreen) {
|
if (g_isle && g_isle->m_fullScreen) {
|
||||||
GetWindowRect(hWnd, (LPRECT) lParam);
|
GetWindowRect(hWnd, (LPRECT) lParam);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return DefWindowProcA(hWnd,WM_MOVING,wParam,lParam);
|
return DefWindowProcA(hWnd, WM_MOVING, wParam, lParam);
|
||||||
case WM_NCPAINT:
|
case WM_NCPAINT:
|
||||||
if (g_isle && g_isle->m_fullScreen) {
|
if (g_isle && g_isle->m_fullScreen) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -396,8 +396,10 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
||||||
switch (uMsg) {
|
switch (uMsg) {
|
||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
if (lParam & 0x40000000) {
|
// While this probably should be (HIWORD(lParam) & KF_REPEAT), this seems
|
||||||
return DefWindowProcA(hWnd,WM_KEYDOWN,wParam,lParam);
|
// to be what the assembly is actually doing
|
||||||
|
if (lParam & (KF_REPEAT << 16)) {
|
||||||
|
return DefWindowProcA(hWnd, WM_KEYDOWN, wParam, lParam);
|
||||||
}
|
}
|
||||||
keyCode = wParam;
|
keyCode = wParam;
|
||||||
type = KEYDOWN;
|
type = KEYDOWN;
|
||||||
|
@ -603,7 +605,7 @@ void Isle::tick(BOOL sleepIfNotNextFrame)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ds.m_atomId = stream->atom;
|
ds.setAtomId(stream->atom);
|
||||||
ds.m_unk24 = 0xFFFF;
|
ds.m_unk24 = 0xFFFF;
|
||||||
ds.m_unk1c = 0;
|
ds.m_unk1c = 0;
|
||||||
VideoManager()->EnableFullScreenMovie(TRUE, TRUE);
|
VideoManager()->EnableFullScreenMovie(TRUE, TRUE);
|
||||||
|
@ -612,7 +614,7 @@ void Isle::tick(BOOL sleepIfNotNextFrame)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ds.m_atomId = stream->atom;
|
ds.setAtomId(stream->atom);
|
||||||
ds.m_unk24 = 0xFFFF;
|
ds.m_unk24 = 0xFFFF;
|
||||||
ds.m_unk1c = 0;
|
ds.m_unk1c = 0;
|
||||||
if (Start(&ds) != SUCCESS) {
|
if (Start(&ds) != SUCCESS) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef ISLE_H
|
#ifndef ISLE_H
|
||||||
#define ISLE_H
|
#define ISLE_H
|
||||||
|
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#include "mxresult.h"
|
#include "mxresult.h"
|
||||||
#include "mxvideoparam.h"
|
#include "mxvideoparam.h"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#include <DSOUND.H>
|
#include <dsound.h>
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#include "define.h"
|
#include "define.h"
|
||||||
#include "isle.h"
|
#include "isle.h"
|
||||||
|
@ -21,7 +21,7 @@ BOOL findExistingInstance(void)
|
||||||
// OFFSET: ISLE 0x401ce0
|
// OFFSET: ISLE 0x401ce0
|
||||||
BOOL startDirectSound(void)
|
BOOL startDirectSound(void)
|
||||||
{
|
{
|
||||||
LPDIRECTSOUND lpDS = 0;
|
LPDIRECTSOUND lpDS = NULL;
|
||||||
HRESULT ret = DirectSoundCreate(NULL, &lpDS, NULL);
|
HRESULT ret = DirectSoundCreate(NULL, &lpDS, NULL);
|
||||||
if (ret == DS_OK && lpDS != NULL) {
|
if (ret == DS_OK && lpDS != NULL) {
|
||||||
lpDS->Release();
|
lpDS->Release();
|
||||||
|
@ -52,7 +52,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
// Throw error if sound unavailable
|
// Throw error if sound unavailable
|
||||||
if (!soundReady) {
|
if (!soundReady) {
|
||||||
MessageBoxA(NULL, "\"LEGO\xAE Island\" is not detecting a DirectSound compatible sound card. Please quit all other applications and try again.",
|
MessageBoxA(NULL, "\"LEGO\xAE Island\" is not detecting a DirectSound compatible sound card. Please quit all other applications and try again.",
|
||||||
"Lego Island Error",0);
|
"Lego Island Error", MB_OK);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
|
|
||||||
// Create window
|
// Create window
|
||||||
if (g_isle->setupWindow(hInstance) != SUCCESS) {
|
if (g_isle->setupWindow(hInstance) != SUCCESS) {
|
||||||
MessageBoxA(NULL, "\"LEGO\xAE Island\" failed to start. Please quit all other applications and try again.", "LEGO\xAE Island Error",0);
|
MessageBoxA(NULL, "\"LEGO\xAE Island\" failed to start. Please quit all other applications and try again.", "LEGO\xAE Island Error", MB_OK);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
BIN
ISLE/res/isle.rc
BIN
ISLE/res/isle.rc
Binary file not shown.
|
@ -1,4 +1,4 @@
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x10091ee0
|
// OFFSET: LEGO1 0x10091ee0
|
||||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
#ifndef MXATOMID_H
|
#ifndef MXATOMID_H
|
||||||
#define MXATOMID_H
|
#define MXATOMID_H
|
||||||
|
|
||||||
enum LookupMode;
|
enum LookupMode
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
class MxAtomId
|
class MxAtomId
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef MXCRITICALSECTION_H
|
#ifndef MXCRITICALSECTION_H
|
||||||
#define MXCRITICALSECTION_H
|
#define MXCRITICALSECTION_H
|
||||||
|
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
class MxCriticalSection
|
class MxCriticalSection
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,6 +47,11 @@ class MxDSAction
|
||||||
int m_unk8c;
|
int m_unk8c;
|
||||||
int m_unk90;
|
int m_unk90;
|
||||||
|
|
||||||
|
void setAtomId(MxAtomId &atomId)
|
||||||
|
{
|
||||||
|
this->m_atomId = atomId;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MXDSACTION_H
|
#endif // MXDSACTION_H
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef MXOMNICREATEPARAM_H
|
#ifndef MXOMNICREATEPARAM_H
|
||||||
#define MXOMNICREATEPARAM_H
|
#define MXOMNICREATEPARAM_H
|
||||||
|
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#include "mxomnicreateflags.h"
|
#include "mxomnicreateflags.h"
|
||||||
#include "mxomnicreateparambase.h"
|
#include "mxomnicreateparambase.h"
|
||||||
|
|
Loading…
Reference in a new issue