Merge branch 'master' into fixdel

This commit is contained in:
Christian Semmler 2025-05-20 14:01:46 -07:00 committed by GitHub
commit f53a43ff37
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 326 additions and 45 deletions

View File

@ -59,7 +59,8 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install -y \
libx11-dev libxext-dev libxrandr-dev libxrender-dev libxfixes-dev libxi-dev libxinerama-dev libxcursor-dev libwayland-dev libxkbcommon-dev wayland-protocols
libx11-dev libxext-dev libxrandr-dev libxrender-dev libxfixes-dev libxi-dev libxinerama-dev \
libxcursor-dev libwayland-dev libxkbcommon-dev wayland-protocols
- name: Install macOS dependencies (brew)
if: ${{ matrix.brew }}

View File

@ -144,6 +144,7 @@ target_include_directories(Vec::Vec INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/vec"
add_library(lego1 SHARED
LEGO1/main.cpp
)
target_precompile_headers(lego1 PRIVATE "LEGO1/lego1_pch.h")
set_property(TARGET lego1 PROPERTY DEFINE_SYMBOL "LEGO1_DLL")
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/util>")
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1>")

View File

@ -223,11 +223,15 @@ MxLong RegistrationBook::HandleKeyPress(SDL_Keycode p_key)
// FUNCTION: LEGO1 0x100774a0
MxLong RegistrationBook::HandleControl(LegoControlManagerNotificationParam& p_param)
{
MxS16 unk0x28 = p_param.m_unk0x28;
MxS16 buttonId = p_param.m_unk0x28;
if (unk0x28 >= 1 && unk0x28 <= 28) {
if (buttonId >= 1 && buttonId <= 28) {
if (p_param.m_clickedObjectId == RegbookScript::c_Alphabet_Ctl) {
if (unk0x28 == 28) {
// buttonId:
// - [1, 26]: alphabet
// - 27: backspace
// - 28: go back to information center
if (buttonId == 28) {
DeleteObjects(&m_atomId, RegbookScript::c_iic006in_RunAnim, RegbookScript::c_iic008in_PlayWav);
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
@ -240,14 +244,15 @@ MxLong RegistrationBook::HandleControl(LegoControlManagerNotificationParam& p_pa
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
}
else {
if (unk0x28 > 28) {
if (buttonId > 28) {
return 1;
}
HandleKeyPress(unk0x28 < 27 ? unk0x28 + 64 : 8);
HandleKeyPress(buttonId < 27 ? SDLK_A + buttonId - 1 : SDLK_BACKSPACE);
}
}
else {
// Select another profile (buttonId is always 1)
InputManager()->DisableInputProcessing();
DeleteObjects(&m_atomId, RegbookScript::c_iic006in_RunAnim, RegbookScript::c_iic008in_PlayWav);

309
LEGO1/lego1_pch.h Normal file
View File

@ -0,0 +1,309 @@
#ifndef LEGO1_PCH_H
#define LEGO1_PCH_H
#include "define.h"
#include "lego/legoomni/include/act2actor.h"
#include "lego/legoomni/include/act2brick.h"
#include "lego/legoomni/include/act2genactor.h"
#include "lego/legoomni/include/act2policestation.h"
#include "lego/legoomni/include/act3.h"
#include "lego/legoomni/include/act3actors.h"
#include "lego/legoomni/include/act3ammo.h"
#include "lego/legoomni/include/actions/act2main_actions.h"
#include "lego/legoomni/include/actions/act3_actions.h"
#include "lego/legoomni/include/actions/actionsfwd.h"
#include "lego/legoomni/include/actions/carrace_actions.h"
#include "lego/legoomni/include/actions/carracer_actions.h"
#include "lego/legoomni/include/actions/copter_actions.h"
#include "lego/legoomni/include/actions/credits_actions.h"
#include "lego/legoomni/include/actions/dunecar_actions.h"
#include "lego/legoomni/include/actions/elevbott_actions.h"
#include "lego/legoomni/include/actions/garage_actions.h"
#include "lego/legoomni/include/actions/histbook_actions.h"
#include "lego/legoomni/include/actions/hospital_actions.h"
#include "lego/legoomni/include/actions/infodoor_actions.h"
#include "lego/legoomni/include/actions/infomain_actions.h"
#include "lego/legoomni/include/actions/infoscor_actions.h"
#include "lego/legoomni/include/actions/intro_actions.h"
#include "lego/legoomni/include/actions/isle_actions.h"
#include "lego/legoomni/include/actions/jetrace_actions.h"
#include "lego/legoomni/include/actions/jetracer_actions.h"
#include "lego/legoomni/include/actions/jetski_actions.h"
#include "lego/legoomni/include/actions/jukebox_actions.h"
#include "lego/legoomni/include/actions/jukeboxw_actions.h"
#include "lego/legoomni/include/actions/nocd_actions.h"
#include "lego/legoomni/include/actions/police_actions.h"
#include "lego/legoomni/include/actions/racecar_actions.h"
#include "lego/legoomni/include/actions/regbook_actions.h"
#include "lego/legoomni/include/actions/sndanim_actions.h"
#include "lego/legoomni/include/ambulance.h"
#include "lego/legoomni/include/bike.h"
#include "lego/legoomni/include/buildingentity.h"
#include "lego/legoomni/include/buildings.h"
#include "lego/legoomni/include/bumpbouy.h"
#include "lego/legoomni/include/carrace.h"
#include "lego/legoomni/include/doors.h"
#include "lego/legoomni/include/dunebuggy.h"
#include "lego/legoomni/include/elevatorbottom.h"
#include "lego/legoomni/include/extra.h"
#include "lego/legoomni/include/gasstation.h"
#include "lego/legoomni/include/helicopter.h"
#include "lego/legoomni/include/historybook.h"
#include "lego/legoomni/include/hospital.h"
#include "lego/legoomni/include/infocenter.h"
#include "lego/legoomni/include/infocenterdoor.h"
#include "lego/legoomni/include/isle.h"
#include "lego/legoomni/include/isleactor.h"
#include "lego/legoomni/include/islepathactor.h"
#include "lego/legoomni/include/jetski.h"
#include "lego/legoomni/include/jetskirace.h"
#include "lego/legoomni/include/jukebox.h"
#include "lego/legoomni/include/jukeboxentity.h"
#include "lego/legoomni/include/lego3dsound.h"
#include "lego/legoomni/include/lego3dwavepresenter.h"
#include "lego/legoomni/include/legoact2.h"
#include "lego/legoomni/include/legoactioncontrolpresenter.h"
#include "lego/legoomni/include/legoactor.h"
#include "lego/legoomni/include/legoactorpresenter.h"
#include "lego/legoomni/include/legoactors.h"
#include "lego/legoomni/include/legoanimactor.h"
#include "lego/legoomni/include/legoanimationmanager.h"
#include "lego/legoomni/include/legoanimmmpresenter.h"
#include "lego/legoomni/include/legoanimpresenter.h"
#include "lego/legoomni/include/legobuildingmanager.h"
#include "lego/legoomni/include/legocachesoundlist.h"
#include "lego/legoomni/include/legocachesoundmanager.h"
#include "lego/legoomni/include/legocachsound.h"
#include "lego/legoomni/include/legocameracontroller.h"
#include "lego/legoomni/include/legocarbuild.h"
#include "lego/legoomni/include/legocarbuildpresenter.h"
#include "lego/legoomni/include/legocharactermanager.h"
#include "lego/legoomni/include/legocontrolmanager.h"
#include "lego/legoomni/include/legoendanimnotificationparam.h"
#include "lego/legoomni/include/legoentity.h"
#include "lego/legoomni/include/legoentitylist.h"
#include "lego/legoomni/include/legoentitypresenter.h"
#include "lego/legoomni/include/legoeventnotificationparam.h"
#include "lego/legoomni/include/legoextraactor.h"
#include "lego/legoomni/include/legoflctexturepresenter.h"
#include "lego/legoomni/include/legogamestate.h"
#include "lego/legoomni/include/legohideanimpresenter.h"
#include "lego/legoomni/include/legoinputmanager.h"
#include "lego/legoomni/include/legoloadcachesoundpresenter.h"
#include "lego/legoomni/include/legolocations.h"
#include "lego/legoomni/include/legolocomotionanimpresenter.h"
#include "lego/legoomni/include/legolodlist.h"
#include "lego/legoomni/include/legoloopinganimpresenter.h"
#include "lego/legoomni/include/legomain.h"
#include "lego/legoomni/include/legometerpresenter.h"
#include "lego/legoomni/include/legomodelpresenter.h"
#include "lego/legoomni/include/legonamedpart.h"
#include "lego/legoomni/include/legonamedpartlist.h"
#include "lego/legoomni/include/legonamedplane.h"
#include "lego/legoomni/include/legonamedtexture.h"
#include "lego/legoomni/include/legonamedtexturelist.h"
#include "lego/legoomni/include/legonavcontroller.h"
#include "lego/legoomni/include/legoobjectfactory.h"
#include "lego/legoomni/include/legopalettepresenter.h"
#include "lego/legoomni/include/legopartpresenter.h"
#include "lego/legoomni/include/legopathactor.h"
#include "lego/legoomni/include/legopathboundary.h"
#include "lego/legoomni/include/legopathcontroller.h"
#include "lego/legoomni/include/legopathcontrollerlist.h"
#include "lego/legoomni/include/legopathedgecontainer.h"
#include "lego/legoomni/include/legopathpresenter.h"
#include "lego/legoomni/include/legopathstruct.h"
#include "lego/legoomni/include/legophoneme.h"
#include "lego/legoomni/include/legophonemelist.h"
#include "lego/legoomni/include/legophonemepresenter.h"
#include "lego/legoomni/include/legoplantmanager.h"
#include "lego/legoomni/include/legoplants.h"
#include "lego/legoomni/include/legopointofviewcontroller.h"
#include "lego/legoomni/include/legorace.h"
#include "lego/legoomni/include/legoraceactor.h"
#include "lego/legoomni/include/legoracemap.h"
#include "lego/legoomni/include/legoracers.h"
#include "lego/legoomni/include/legoracespecial.h"
#include "lego/legoomni/include/legoroilist.h"
#include "lego/legoomni/include/legoroimaplist.h"
#include "lego/legoomni/include/legosoundmanager.h"
#include "lego/legoomni/include/legostate.h"
#include "lego/legoomni/include/legotextureinfo.h"
#include "lego/legoomni/include/legotexturepresenter.h"
#include "lego/legoomni/include/legotraninfo.h"
#include "lego/legoomni/include/legotraninfolist.h"
#include "lego/legoomni/include/legoutils.h"
#include "lego/legoomni/include/legovariables.h"
#include "lego/legoomni/include/legovideomanager.h"
#include "lego/legoomni/include/legoworld.h"
#include "lego/legoomni/include/legoworldlist.h"
#include "lego/legoomni/include/legoworldpresenter.h"
#include "lego/legoomni/include/misc.h"
#include "lego/legoomni/include/motorcycle.h"
#include "lego/legoomni/include/mxbackgroundaudiomanager.h"
#include "lego/legoomni/include/mxcompositemediapresenter.h"
#include "lego/legoomni/include/mxcontrolpresenter.h"
#include "lego/legoomni/include/mxtransitionmanager.h"
#include "lego/legoomni/include/pizza.h"
#include "lego/legoomni/include/pizzeria.h"
#include "lego/legoomni/include/police.h"
#include "lego/legoomni/include/racecar.h"
#include "lego/legoomni/include/raceskel.h"
#include "lego/legoomni/include/radio.h"
#include "lego/legoomni/include/registrationbook.h"
#include "lego/legoomni/include/score.h"
#include "lego/legoomni/include/scripts.h"
#include "lego/legoomni/include/skateboard.h"
#include "lego/legoomni/include/towtrack.h"
#include "lego/sources/3dmanager/lego3dmanager.h"
#include "lego/sources/3dmanager/lego3dview.h"
#include "lego/sources/3dmanager/legoview1.h"
#include "lego/sources/3dmanager/tglsurface.h"
#include "lego/sources/anim/legoanim.h"
#include "lego/sources/geom/legoedge.h"
#include "lego/sources/geom/legounkown100db7f4.h"
#include "lego/sources/geom/legoweedge.h"
#include "lego/sources/geom/legowegedge.h"
#include "lego/sources/misc/legocontainer.h"
#include "lego/sources/misc/legoimage.h"
#include "lego/sources/misc/legostorage.h"
#include "lego/sources/misc/legotexture.h"
#include "lego/sources/misc/legotree.h"
#include "lego/sources/misc/legotypes.h"
#include "lego/sources/misc/legounknown.h"
#include "lego/sources/misc/legoutil.h"
#include "lego/sources/misc/version.h"
#include "lego/sources/roi/legolod.h"
#include "lego/sources/roi/legoroi.h"
#include "lego/sources/shape/legobox.h"
#include "lego/sources/shape/legocolor.h"
#include "lego/sources/shape/legomesh.h"
#include "lego/sources/shape/legosphere.h"
#include "lego/sources/shape/legovertex.h"
#include "lego1_export.h"
#include "lego1_pch.h"
#include "library_msvc.h"
#include "library_smack.h"
#include "modeldb/modeldb.h"
#include "mxdirectx/legodxinfo.h"
#include "mxdirectx/mxdirect3d.h"
#include "mxdirectx/mxdirectdraw.h"
#include "mxdirectx/mxdirectxinfo.h"
#include "mxdirectx/mxstopwatch.h"
#include "mxgeometry/mxgeometry3d.h"
#include "mxgeometry/mxgeometry4d.h"
#include "mxgeometry/mxmatrix.h"
#include "mxgeometry/mxquaternion.h"
#include "omni/include/flic.h"
#include "omni/include/mxactionnotificationparam.h"
#include "omni/include/mxatom.h"
#include "omni/include/mxaudiomanager.h"
#include "omni/include/mxaudiopresenter.h"
#include "omni/include/mxautolock.h"
#include "omni/include/mxbitmap.h"
#include "omni/include/mxbitset.h"
#include "omni/include/mxcollection.h"
#include "omni/include/mxcompositepresenter.h"
#include "omni/include/mxcore.h"
#include "omni/include/mxcriticalsection.h"
#include "omni/include/mxdebug.h"
#include "omni/include/mxdiskstreamcontroller.h"
#include "omni/include/mxdiskstreamprovider.h"
#include "omni/include/mxdisplaysurface.h"
#include "omni/include/mxdsaction.h"
#include "omni/include/mxdsactionlist.h"
#include "omni/include/mxdsanim.h"
#include "omni/include/mxdsbuffer.h"
#include "omni/include/mxdschunk.h"
#include "omni/include/mxdsevent.h"
#include "omni/include/mxdsfile.h"
#include "omni/include/mxdsmediaaction.h"
#include "omni/include/mxdsmultiaction.h"
#include "omni/include/mxdsobject.h"
#include "omni/include/mxdsobjectaction.h"
#include "omni/include/mxdsparallelaction.h"
#include "omni/include/mxdsselectaction.h"
#include "omni/include/mxdsserialaction.h"
#include "omni/include/mxdssound.h"
#include "omni/include/mxdssource.h"
#include "omni/include/mxdsstill.h"
#include "omni/include/mxdsstreamingaction.h"
#include "omni/include/mxdssubscriber.h"
#include "omni/include/mxentity.h"
#include "omni/include/mxeventmanager.h"
#include "omni/include/mxeventpresenter.h"
#include "omni/include/mxflcpresenter.h"
#include "omni/include/mxgeometry.h"
#include "omni/include/mxhashtable.h"
#include "omni/include/mxio.h"
#include "omni/include/mxlist.h"
#include "omni/include/mxloopingflcpresenter.h"
#include "omni/include/mxloopingsmkpresenter.h"
#include "omni/include/mxmediamanager.h"
#include "omni/include/mxmediapresenter.h"
#include "omni/include/mxmemorypool.h"
#include "omni/include/mxmisc.h"
#include "omni/include/mxnextactiondatastart.h"
#include "omni/include/mxnotificationmanager.h"
#include "omni/include/mxnotificationparam.h"
#include "omni/include/mxobjectfactory.h"
#include "omni/include/mxomni.h"
#include "omni/include/mxomnicreateflags.h"
#include "omni/include/mxomnicreateparam.h"
#include "omni/include/mxpalette.h"
#include "omni/include/mxparam.h"
#include "omni/include/mxpresenter.h"
#include "omni/include/mxpresenterlist.h"
#include "omni/include/mxqueue.h"
#include "omni/include/mxramstreamcontroller.h"
#include "omni/include/mxramstreamprovider.h"
#include "omni/include/mxregion.h"
#include "omni/include/mxscheduler.h"
#include "omni/include/mxsemaphore.h"
#include "omni/include/mxsmk.h"
#include "omni/include/mxsmkpresenter.h"
#include "omni/include/mxsoundmanager.h"
#include "omni/include/mxsoundpresenter.h"
#include "omni/include/mxstillpresenter.h"
#include "omni/include/mxstreamchunk.h"
#include "omni/include/mxstreamchunklist.h"
#include "omni/include/mxstreamcontroller.h"
#include "omni/include/mxstreamer.h"
#include "omni/include/mxstreamprovider.h"
#include "omni/include/mxstring.h"
#include "omni/include/mxstringlist.h"
#include "omni/include/mxthread.h"
#include "omni/include/mxticklemanager.h"
#include "omni/include/mxticklethread.h"
#include "omni/include/mxtimer.h"
#include "omni/include/mxtypes.h"
#include "omni/include/mxutilities.h"
#include "omni/include/mxutilitylist.h"
#include "omni/include/mxvariable.h"
#include "omni/include/mxvariabletable.h"
#include "omni/include/mxvideomanager.h"
#include "omni/include/mxvideoparam.h"
#include "omni/include/mxvideoparamflags.h"
#include "omni/include/mxvideopresenter.h"
#include "omni/include/mxwavepresenter.h"
#include "realtime/lodlist.h"
#include "realtime/matrix.h"
#include "realtime/matrix4d.inl.h"
#include "realtime/orientableroi.h"
#include "realtime/realtime.h"
#include "realtime/realtimeview.h"
#include "realtime/roi.h"
#include "realtime/vector.h"
#include "realtime/vector2d.inl.h"
#include "realtime/vector3d.inl.h"
#include "realtime/vector4d.inl.h"
#include "res/resource.h"
#include "tgl/d3drm/impl.h"
#include "tgl/tgl.h"
#include "tgl/tglvector.h"
#include "viewmanager/viewlod.h"
#include "viewmanager/viewlodlist.h"
#include "viewmanager/viewmanager.h"
#include "viewmanager/viewroi.h"
#endif

View File

@ -13,7 +13,7 @@ class MxHashTableCursor;
template <class T>
class MxHashTableNode {
public:
MxHashTableNode<T>(T p_obj, MxU32 p_hash, MxHashTableNode* p_prev, MxHashTableNode* p_next)
MxHashTableNode(T p_obj, MxU32 p_hash, MxHashTableNode* p_prev, MxHashTableNode* p_next)
{
m_obj = p_obj;
m_hash = p_hash;

View File

@ -22,6 +22,8 @@ class Matrix4 {
// FUNCTION: BETA10 0x1000fc70
Matrix4(float (*p_data)[4]) { SetData(p_data); }
virtual ~Matrix4() {}
inline virtual void Equals(float (*p_data)[4]); // vtable+0x04
inline virtual void Equals(const Matrix4& p_matrix); // vtable+0x00
inline virtual void SetData(float (*p_data)[4]); // vtable+0x0c

View File

@ -145,7 +145,6 @@ struct D3DRMVERTEX {
};
struct IDirect3DRMObject : public IUnknown {
virtual HRESULT Clone(void** ppObject) = 0;
virtual HRESULT AddDestroyCallback(D3DRMOBJECTCALLBACK callback, void* arg) = 0;
virtual HRESULT DeleteDestroyCallback(D3DRMOBJECTCALLBACK callback, void* arg) = 0;
virtual HRESULT SetAppData(LPD3DRM_APPDATA appData) = 0;

View File

@ -188,11 +188,6 @@ struct Direct3DRMObjectBase : public T {
};
struct Direct3DRMMeshImpl : public Direct3DRMObjectBase<IDirect3DRMMesh> {
HRESULT Clone(void** ppObject) override
{
*ppObject = static_cast<void*>(new Direct3DRMMeshImpl);
return DD_OK;
}
HRESULT Clone(int flags, GUID iid, void** object) override
{
if (SDL_memcmp(&iid, &IID_IDirect3DRMMesh, sizeof(GUID)) == 0) {
@ -259,11 +254,6 @@ struct Direct3DRMTextureImpl : public Direct3DRMObjectBase<IDirect3DRMTexture2>
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Direct3DRMTextureImpl does not implement guid");
return E_NOINTERFACE;
}
HRESULT Clone(void** ppObject) override
{
*ppObject = static_cast<void*>(new Direct3DRMTextureImpl);
return DD_OK;
}
HRESULT Changed(BOOL pixels, BOOL palette) override { return DD_OK; }
};
@ -274,11 +264,6 @@ struct Direct3DRMDevice2Impl : public Direct3DRMObjectBase<IDirect3DRMDevice2> {
m_viewports->AddRef();
}
~Direct3DRMDevice2Impl() override { m_viewports->Release(); }
HRESULT Clone(void** ppObject) override
{
*ppObject = static_cast<void*>(new Direct3DRMDevice2Impl);
return DD_OK;
}
unsigned int GetWidth() override { return 640; }
unsigned int GetHeight() override { return 480; }
HRESULT SetBufferCount(int count) override { return DD_OK; }
@ -324,11 +309,6 @@ struct Direct3DRMFrameImpl : public Direct3DRMObjectBase<IDirect3DRMFrame2> {
m_texture->Release();
}
}
HRESULT Clone(void** ppObject) override
{
*ppObject = static_cast<void*>(new Direct3DRMFrameImpl);
return DD_OK;
}
HRESULT AddChild(IDirect3DRMFrame* child) override { return m_children->AddElement(child); }
HRESULT DeleteChild(IDirect3DRMFrame* child) override { return m_children->DeleteElement(child); }
HRESULT SetSceneBackgroundRGB(float r, float g, float b) override { return DD_OK; }
@ -390,11 +370,6 @@ struct Direct3DRMFrameImpl : public Direct3DRMObjectBase<IDirect3DRMFrame2> {
};
struct Direct3DRMViewportImpl : public Direct3DRMObjectBase<IDirect3DRMViewport> {
HRESULT Clone(void** ppObject) override
{
*ppObject = static_cast<void*>(new Direct3DRMViewportImpl);
return DD_OK;
}
HRESULT Render(IDirect3DRMFrame* group) override { return DD_OK; }
HRESULT ForceUpdate(int x, int y, int w, int h) override { return DD_OK; }
HRESULT Clear() override { return DD_OK; }
@ -427,21 +402,10 @@ struct Direct3DRMViewportImpl : public Direct3DRMObjectBase<IDirect3DRMViewport>
};
struct Direct3DRMLightImpl : public Direct3DRMObjectBase<IDirect3DRMLight> {
HRESULT Clone(void** ppObject) override
{
*ppObject = static_cast<void*>(new Direct3DRMLightImpl);
return DD_OK;
}
HRESULT SetColorRGB(float r, float g, float b) override { return DD_OK; }
};
struct Direct3DRMMaterialImpl : public Direct3DRMObjectBase<IDirect3DRMMaterial> {
HRESULT Clone(void** ppObject) override
{
*ppObject = static_cast<void*>(new Direct3DRMMaterialImpl);
return DD_OK;
}
};
struct Direct3DRMMaterialImpl : public Direct3DRMObjectBase<IDirect3DRMMaterial> {};
struct Direct3DRMImpl : virtual public IDirect3DRM2 {
// IUnknown interface