mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-23 00:14:22 +00:00
isle: match Isle::Tick and FindExistingInstance (#32)
* match Isle::Tick and FindExistingInstance * add offset comments * inline Isle::Tick * move inline MxDSObject, remove mx.cpp
This commit is contained in:

committed by
GitHub

parent
4d531d1de5
commit
fa8e4523bd
@@ -38,6 +38,3 @@ int g_startupDelay = 200;
|
||||
|
||||
// 0x4101c0
|
||||
long g_lastFrameTime = 0;
|
||||
|
||||
// 0x4101dc
|
||||
const char *WINDOW_TITLE = "LEGO\xAE";
|
||||
|
@@ -7,8 +7,10 @@ class Isle;
|
||||
|
||||
extern Isle *g_isle;
|
||||
extern int g_closed;
|
||||
// 0x4101c4
|
||||
#define WNDCLASS_NAME "Lego Island MainNoM App"
|
||||
extern const char *WINDOW_TITLE;
|
||||
// 0x4101dc
|
||||
#define WINDOW_TITLE "LEGO\xAE"
|
||||
extern unsigned char g_mousedown;
|
||||
extern unsigned char g_mousemoved;
|
||||
extern RECT g_windowRect;
|
||||
|
@@ -1,10 +1,8 @@
|
||||
#include "isle.h"
|
||||
|
||||
#include "define.h"
|
||||
#include "legoanimationmanager.h"
|
||||
#include "legobuildingmanager.h"
|
||||
#include "legomodelpresenter.h"
|
||||
#include "legoomni.h"
|
||||
#include "legopartpresenter.h"
|
||||
#include "legoworldpresenter.h"
|
||||
#include "mxdirectdraw.h"
|
||||
@@ -78,7 +76,7 @@ Isle::~Isle()
|
||||
void Isle::Close()
|
||||
{
|
||||
MxDSAction ds;
|
||||
ds.SetUnknown24(0xFFFE);
|
||||
ds.SetUnknown24(-2);
|
||||
|
||||
if (Lego()) {
|
||||
GameState()->Save(0);
|
||||
@@ -574,67 +572,3 @@ MxResult Isle::SetupWindow(HINSTANCE hInstance)
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
// OFFSET: ISLE 0x402c20
|
||||
void Isle::Tick(BOOL sleepIfNotNextFrame)
|
||||
{
|
||||
if (this->m_windowActive) {
|
||||
if (!Lego()) return;
|
||||
if (!TickleManager()) return;
|
||||
if (!Timer()) return;
|
||||
|
||||
long currentTime = Timer()->GetRealTime();
|
||||
if (currentTime < g_lastFrameTime) {
|
||||
g_lastFrameTime = -this->m_frameDelta;
|
||||
}
|
||||
if (this->m_frameDelta + g_lastFrameTime < currentTime) {
|
||||
if (!Lego()->vtable40()) {
|
||||
TickleManager()->Tickle();
|
||||
}
|
||||
g_lastFrameTime = currentTime;
|
||||
|
||||
if (g_startupDelay == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
g_startupDelay--;
|
||||
if (g_startupDelay != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
LegoOmni::GetInstance()->CreateBackgroundAudio();
|
||||
BackgroundAudioManager()->Enable(this->m_useMusic);
|
||||
|
||||
MxStreamController *stream = Streamer()->Open("\\lego\\scripts\\isle\\isle", 0);
|
||||
MxDSAction ds;
|
||||
|
||||
if (!stream) {
|
||||
stream = Streamer()->Open("\\lego\\scripts\\nocd", 0);
|
||||
if (!stream) {
|
||||
return;
|
||||
}
|
||||
|
||||
ds.SetAtomId(stream->atom);
|
||||
ds.SetUnknown24(0xFFFF);
|
||||
ds.SetUnknown1c(0);
|
||||
VideoManager()->EnableFullScreenMovie(TRUE, TRUE);
|
||||
|
||||
if (Start(&ds) != SUCCESS) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
ds.SetAtomId(stream->atom);
|
||||
ds.SetUnknown24(0xFFFF);
|
||||
ds.SetUnknown1c(0);
|
||||
if (Start(&ds) != SUCCESS) {
|
||||
return;
|
||||
}
|
||||
this->m_gameStarted = 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (sleepIfNotNextFrame == 0) return;
|
||||
}
|
||||
|
||||
Sleep(0);
|
||||
}
|
||||
|
70
ISLE/isle.h
70
ISLE/isle.h
@@ -3,6 +3,9 @@
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include "define.h"
|
||||
|
||||
#include "legoomni.h"
|
||||
#include "mxresult.h"
|
||||
#include "mxvideoparam.h"
|
||||
|
||||
@@ -77,4 +80,71 @@ public:
|
||||
|
||||
};
|
||||
|
||||
// OFFSET: ISLE 0x401c40
|
||||
inline void MxDSObject::SetAtomId(MxAtomId p_atomId) { this->m_atomId = p_atomId; }
|
||||
|
||||
// OFFSET: ISLE 0x402c20
|
||||
inline void Isle::Tick(BOOL sleepIfNotNextFrame)
|
||||
{
|
||||
if (this->m_windowActive) {
|
||||
if (!Lego()) return;
|
||||
if (!TickleManager()) return;
|
||||
if (!Timer()) return;
|
||||
|
||||
long currentTime = Timer()->GetRealTime();
|
||||
if (currentTime < g_lastFrameTime) {
|
||||
g_lastFrameTime = -this->m_frameDelta;
|
||||
}
|
||||
if (this->m_frameDelta + g_lastFrameTime < currentTime) {
|
||||
if (!Lego()->vtable40()) {
|
||||
TickleManager()->Tickle();
|
||||
}
|
||||
g_lastFrameTime = currentTime;
|
||||
|
||||
if (g_startupDelay == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
g_startupDelay--;
|
||||
if (g_startupDelay != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
LegoOmni::GetInstance()->CreateBackgroundAudio();
|
||||
BackgroundAudioManager()->Enable(this->m_useMusic);
|
||||
|
||||
MxStreamController *stream = Streamer()->Open("\\lego\\scripts\\isle\\isle", 0);
|
||||
MxDSAction ds;
|
||||
|
||||
if (!stream) {
|
||||
stream = Streamer()->Open("\\lego\\scripts\\nocd", 0);
|
||||
if (!stream) {
|
||||
return;
|
||||
}
|
||||
|
||||
ds.SetAtomId(stream->atom);
|
||||
ds.SetUnknown24(-1);
|
||||
ds.SetUnknown1c(0);
|
||||
VideoManager()->EnableFullScreenMovie(TRUE, TRUE);
|
||||
|
||||
if (Start(&ds) != SUCCESS) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
ds.SetAtomId(stream->atom);
|
||||
ds.SetUnknown24(-1);
|
||||
ds.SetUnknown1c(0);
|
||||
if (Start(&ds) != SUCCESS) {
|
||||
return;
|
||||
}
|
||||
this->m_gameStarted = 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (sleepIfNotNextFrame == 0) return;
|
||||
}
|
||||
|
||||
Sleep(0);
|
||||
}
|
||||
|
||||
#endif // ISLE_H
|
||||
|
@@ -1,7 +0,0 @@
|
||||
#include "mxdsobject.h"
|
||||
|
||||
// OFFSET: ISLE 0x00401c40
|
||||
void MxDSObject::SetAtomId(MxAtomId p_atomId)
|
||||
{
|
||||
this->m_atomId = p_atomId;
|
||||
}
|
Reference in New Issue
Block a user