mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-20 23:01:16 +00:00
Merge branch 'master' into beta10macro
This commit is contained in:
commit
fd656ed900
393
CMakeLists.txt
393
CMakeLists.txt
@ -94,15 +94,15 @@ function(add_lego_libraries NAME)
|
||||
set(SUFFIX "${ARG_SUFFIX}")
|
||||
|
||||
add_library(tglrl${ARG_SUFFIX} STATIC
|
||||
LEGO1/tgl/d3drm/camera.cpp
|
||||
LEGO1/tgl/d3drm/device.cpp
|
||||
LEGO1/tgl/d3drm/group.cpp
|
||||
LEGO1/tgl/d3drm/light.cpp
|
||||
LEGO1/tgl/d3drm/mesh.cpp
|
||||
LEGO1/tgl/d3drm/meshbuilder.cpp
|
||||
LEGO1/tgl/d3drm/renderer.cpp
|
||||
LEGO1/tgl/d3drm/texture.cpp
|
||||
LEGO1/tgl/d3drm/view.cpp
|
||||
LEGO1/tgl/d3drm/device.cpp
|
||||
LEGO1/tgl/d3drm/group.cpp
|
||||
LEGO1/tgl/d3drm/camera.cpp
|
||||
LEGO1/tgl/d3drm/light.cpp
|
||||
LEGO1/tgl/d3drm/meshbuilder.cpp
|
||||
LEGO1/tgl/d3drm/mesh.cpp
|
||||
)
|
||||
list(APPEND list_targets tglrl${ARG_SUFFIX})
|
||||
set_property(TARGET tglrl${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "tglrl40$<$<CONFIG:Debug>:d>${ARG_SUFFIX}")
|
||||
@ -110,11 +110,9 @@ function(add_lego_libraries NAME)
|
||||
target_link_libraries(tglrl${ARG_SUFFIX} PRIVATE d3drm)
|
||||
|
||||
add_library(realtime${ARG_SUFFIX} STATIC
|
||||
LEGO1/realtime/matrix.cpp
|
||||
LEGO1/realtime/orientableroi.cpp
|
||||
LEGO1/realtime/realtime.cpp
|
||||
LEGO1/realtime/realtimeview.cpp
|
||||
LEGO1/realtime/vector.cpp
|
||||
)
|
||||
list(APPEND list_targets realtime${ARG_SUFFIX})
|
||||
set_property(TARGET realtime${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "realtime$<$<CONFIG:Debug>:d>${ARG_SUFFIX}")
|
||||
@ -123,8 +121,8 @@ function(add_lego_libraries NAME)
|
||||
|
||||
add_library(viewmanager${ARG_SUFFIX} STATIC
|
||||
LEGO1/viewmanager/viewlod.cpp
|
||||
LEGO1/viewmanager/viewlodlist.cpp
|
||||
LEGO1/viewmanager/viewmanager.cpp
|
||||
LEGO1/viewmanager/viewlodlist.cpp
|
||||
LEGO1/viewmanager/viewroi.cpp
|
||||
)
|
||||
list(APPEND list_targets viewmanager${ARG_SUFFIX})
|
||||
@ -134,9 +132,9 @@ function(add_lego_libraries NAME)
|
||||
|
||||
add_library(mxdirectx${ARG_SUFFIX} STATIC
|
||||
LEGO1/mxdirectx/mxdirect3d.cpp
|
||||
LEGO1/mxdirectx/mxdirectdraw.cpp
|
||||
LEGO1/mxdirectx/mxdirectxinfo.cpp
|
||||
LEGO1/mxdirectx/legodxinfo.cpp
|
||||
LEGO1/mxdirectx/mxdirectdraw.cpp
|
||||
)
|
||||
list(APPEND list_targets mxdirectx${ARG_SUFFIX})
|
||||
set_property(TARGET mxdirectx${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "MxDirectX$<$<CONFIG:Debug>:d>${ARG_SUFFIX}")
|
||||
@ -144,8 +142,8 @@ function(add_lego_libraries NAME)
|
||||
target_link_libraries(mxdirectx${ARG_SUFFIX} PRIVATE ddraw)
|
||||
|
||||
add_library(roi${ARG_SUFFIX} STATIC
|
||||
LEGO1/lego/sources/roi/legolod.cpp
|
||||
LEGO1/lego/sources/roi/legoroi.cpp
|
||||
LEGO1/lego/sources/roi/legolod.cpp
|
||||
)
|
||||
list(APPEND list_targets roi${ARG_SUFFIX})
|
||||
set_property(TARGET roi${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "roi$<$<CONFIG:Debug>:d>${ARG_SUFFIX}")
|
||||
@ -154,8 +152,8 @@ function(add_lego_libraries NAME)
|
||||
|
||||
add_library(geom${ARG_SUFFIX} STATIC
|
||||
LEGO1/lego/sources/geom/legoedge.cpp
|
||||
LEGO1/lego/sources/geom/legounkown100db7f4.cpp
|
||||
LEGO1/lego/sources/geom/legoweedge.cpp
|
||||
LEGO1/lego/sources/geom/legounkown100db7f4.cpp
|
||||
LEGO1/lego/sources/geom/legowegedge.cpp
|
||||
)
|
||||
list(APPEND list_targets geom${ARG_SUFFIX})
|
||||
@ -164,11 +162,11 @@ function(add_lego_libraries NAME)
|
||||
target_link_libraries(geom${ARG_SUFFIX} PRIVATE)
|
||||
|
||||
add_library(shape${ARG_SUFFIX} STATIC
|
||||
LEGO1/lego/sources/shape/legocolor.cpp
|
||||
LEGO1/lego/sources/shape/legobox.cpp
|
||||
LEGO1/lego/sources/shape/legomesh.cpp
|
||||
LEGO1/lego/sources/shape/legosphere.cpp
|
||||
LEGO1/lego/sources/shape/legovertex.cpp
|
||||
LEGO1/lego/sources/shape/legomesh.cpp
|
||||
LEGO1/lego/sources/shape/legocolor.cpp
|
||||
)
|
||||
list(APPEND list_targets shape${ARG_SUFFIX})
|
||||
set_property(TARGET shape${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "shape$<$<CONFIG:Debug>:d>${ARG_SUFFIX}")
|
||||
@ -183,10 +181,10 @@ function(add_lego_libraries NAME)
|
||||
target_include_directories(anim${ARG_SUFFIX} PRIVATE "${PROJECT_SOURCE_DIR}/LEGO1/omni/include" "${PROJECT_SOURCE_DIR}/LEGO1" "${PROJECT_SOURCE_DIR}/LEGO1/lego/sources" "${PROJECT_SOURCE_DIR}/util")
|
||||
|
||||
add_library(misc${ARG_SUFFIX} STATIC
|
||||
LEGO1/lego/sources/misc/legocontainer.cpp
|
||||
LEGO1/lego/sources/misc/legoimage.cpp
|
||||
LEGO1/lego/sources/misc/legostorage.cpp
|
||||
LEGO1/lego/sources/misc/legotexture.cpp
|
||||
LEGO1/lego/sources/misc/legostorage.cpp
|
||||
LEGO1/lego/sources/misc/legoimage.cpp
|
||||
LEGO1/lego/sources/misc/legocontainer.cpp
|
||||
LEGO1/lego/sources/misc/legotree.cpp
|
||||
LEGO1/lego/sources/misc/legounknown.cpp
|
||||
)
|
||||
@ -196,8 +194,8 @@ function(add_lego_libraries NAME)
|
||||
target_link_libraries(misc${ARG_SUFFIX} PRIVATE)
|
||||
|
||||
add_library(3dmanager${ARG_SUFFIX} STATIC
|
||||
LEGO1/lego/sources/3dmanager/lego3dmanager.cpp
|
||||
LEGO1/lego/sources/3dmanager/lego3dview.cpp
|
||||
LEGO1/lego/sources/3dmanager/lego3dmanager.cpp
|
||||
LEGO1/lego/sources/3dmanager/legoview1.cpp
|
||||
LEGO1/lego/sources/3dmanager/tglsurface.cpp
|
||||
)
|
||||
@ -207,86 +205,82 @@ function(add_lego_libraries NAME)
|
||||
target_link_libraries(3dmanager${ARG_SUFFIX} PRIVATE Vec::Vec)
|
||||
|
||||
add_library(omni${ARG_SUFFIX} STATIC
|
||||
LEGO1/omni/src/action/mxdsaction.cpp
|
||||
LEGO1/omni/src/action/mxdsanim.cpp
|
||||
LEGO1/omni/src/action/mxdsevent.cpp
|
||||
LEGO1/omni/src/action/mxdsmediaaction.cpp
|
||||
LEGO1/omni/src/action/mxdsmultiaction.cpp
|
||||
LEGO1/omni/src/action/mxdsobjectaction.cpp
|
||||
LEGO1/omni/src/action/mxdsobject.cpp
|
||||
LEGO1/omni/src/action/mxdsparallelaction.cpp
|
||||
LEGO1/omni/src/action/mxdsselectaction.cpp
|
||||
LEGO1/omni/src/action/mxdsserialaction.cpp
|
||||
LEGO1/omni/src/action/mxdssound.cpp
|
||||
LEGO1/omni/src/action/mxdsstill.cpp
|
||||
LEGO1/omni/src/action/mxdsstreamingaction.cpp
|
||||
LEGO1/omni/src/audio/mxaudiomanager.cpp
|
||||
LEGO1/omni/src/audio/mxaudiopresenter.cpp
|
||||
LEGO1/omni/src/audio/mxloopingmidipresenter.cpp
|
||||
LEGO1/omni/src/audio/mxmidipresenter.cpp
|
||||
LEGO1/omni/src/audio/mxmusicmanager.cpp
|
||||
LEGO1/omni/src/audio/mxmusicpresenter.cpp
|
||||
LEGO1/omni/src/audio/mxsoundmanager.cpp
|
||||
LEGO1/omni/src/audio/mxsoundpresenter.cpp
|
||||
LEGO1/omni/src/audio/mxwavepresenter.cpp
|
||||
LEGO1/omni/src/common/mxatom.cpp
|
||||
LEGO1/omni/src/common/mxcompositepresenter.cpp
|
||||
LEGO1/omni/src/common/mxcore.cpp
|
||||
LEGO1/omni/src/notify/mxnotificationmanager.cpp
|
||||
LEGO1/omni/src/common/mxdebug.cpp
|
||||
LEGO1/omni/src/common/mxmediamanager.cpp
|
||||
LEGO1/omni/src/common/mxmediapresenter.cpp
|
||||
LEGO1/omni/src/common/mxmisc.cpp
|
||||
LEGO1/omni/src/common/mxobjectfactory.cpp
|
||||
LEGO1/omni/src/common/mxpresenter.cpp
|
||||
LEGO1/omni/src/common/mxstring.cpp
|
||||
LEGO1/omni/src/common/mxticklemanager.cpp
|
||||
LEGO1/omni/src/common/mxatom.cpp
|
||||
LEGO1/omni/src/action/mxdsaction.cpp
|
||||
LEGO1/omni/src/common/mxtimer.cpp
|
||||
LEGO1/omni/src/common/mxutilities.cpp
|
||||
LEGO1/omni/src/common/mxvariable.cpp
|
||||
LEGO1/omni/src/common/mxvariabletable.cpp
|
||||
LEGO1/omni/src/entity/mxentity.cpp
|
||||
LEGO1/omni/src/event/mxeventmanager.cpp
|
||||
LEGO1/omni/src/event/mxeventpresenter.cpp
|
||||
LEGO1/omni/src/common/mxcore.cpp
|
||||
LEGO1/omni/src/common/mxstring.cpp
|
||||
LEGO1/omni/src/audio/mxsoundmanager.cpp
|
||||
LEGO1/omni/src/main/mxomni.cpp
|
||||
LEGO1/omni/src/notify/mxactionnotificationparam.cpp
|
||||
LEGO1/omni/src/main/mxomnicreateflags.cpp
|
||||
LEGO1/omni/src/main/mxomnicreateparam.cpp
|
||||
LEGO1/omni/src/notify/mxactionnotificationparam.cpp
|
||||
LEGO1/omni/src/notify/mxnotificationmanager.cpp
|
||||
LEGO1/omni/src/notify/mxnotificationparam.cpp
|
||||
LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp
|
||||
LEGO1/omni/src/stream/mxdiskstreamprovider.cpp
|
||||
LEGO1/omni/src/stream/mxdsbuffer.cpp
|
||||
LEGO1/omni/src/stream/mxdschunk.cpp
|
||||
LEGO1/omni/src/stream/mxdsfile.cpp
|
||||
LEGO1/omni/src/stream/mxdssubscriber.cpp
|
||||
LEGO1/omni/src/stream/mxio.cpp
|
||||
LEGO1/omni/src/stream/mxramstreamcontroller.cpp
|
||||
LEGO1/omni/src/stream/mxramstreamprovider.cpp
|
||||
LEGO1/omni/src/stream/mxstreamchunk.cpp
|
||||
LEGO1/omni/src/stream/mxstreamcontroller.cpp
|
||||
LEGO1/omni/src/stream/mxstreamer.cpp
|
||||
LEGO1/omni/src/system/mxautolock.cpp
|
||||
LEGO1/omni/src/system/mxcriticalsection.cpp
|
||||
LEGO1/omni/src/system/mxscheduler.cpp
|
||||
LEGO1/omni/src/system/mxsemaphore.cpp
|
||||
LEGO1/omni/src/system/mxthread.cpp
|
||||
LEGO1/omni/src/system/mxticklethread.cpp
|
||||
LEGO1/omni/src/video/flic.cpp
|
||||
LEGO1/omni/src/video/mxbitmap.cpp
|
||||
LEGO1/omni/src/video/mxdisplaysurface.cpp
|
||||
LEGO1/omni/src/common/mxobjectfactory.cpp
|
||||
LEGO1/omni/src/audio/mxsoundpresenter.cpp
|
||||
LEGO1/omni/src/audio/mxwavepresenter.cpp
|
||||
LEGO1/omni/src/video/mxvideopresenter.cpp
|
||||
LEGO1/omni/src/video/mxflcpresenter.cpp
|
||||
LEGO1/omni/src/video/mxsmkpresenter.cpp
|
||||
LEGO1/omni/src/video/mxloopingflcpresenter.cpp
|
||||
LEGO1/omni/src/video/mxloopingsmkpresenter.cpp
|
||||
LEGO1/omni/src/video/mxpalette.cpp
|
||||
LEGO1/omni/src/video/mxregion.cpp
|
||||
LEGO1/omni/src/video/mxregioncursor.cpp
|
||||
LEGO1/omni/src/video/mxsmack.cpp
|
||||
LEGO1/omni/src/video/mxsmkpresenter.cpp
|
||||
LEGO1/omni/src/common/mxpresenter.cpp
|
||||
LEGO1/omni/src/common/mxmediapresenter.cpp
|
||||
LEGO1/omni/src/common/mxcompositepresenter.cpp
|
||||
LEGO1/omni/src/system/mxcriticalsection.cpp
|
||||
LEGO1/omni/src/common/mxutilities.cpp
|
||||
LEGO1/omni/src/common/mxvariabletable.cpp
|
||||
LEGO1/omni/src/stream/mxdssubscriber.cpp
|
||||
LEGO1/omni/src/common/mxmediamanager.cpp
|
||||
LEGO1/omni/src/system/mxticklethread.cpp
|
||||
LEGO1/omni/src/audio/mxaudiomanager.cpp
|
||||
LEGO1/omni/src/system/mxautolock.cpp
|
||||
LEGO1/omni/src/stream/mxstreamer.cpp
|
||||
LEGO1/omni/src/video/mxstillpresenter.cpp
|
||||
LEGO1/omni/src/video/mxdisplaysurface.cpp
|
||||
LEGO1/omni/src/video/mxbitmap.cpp
|
||||
LEGO1/omni/src/video/flic.cpp
|
||||
LEGO1/omni/src/common/mxticklemanager.cpp
|
||||
LEGO1/omni/src/stream/mxdschunk.cpp
|
||||
LEGO1/omni/src/video/mxvideomanager.cpp
|
||||
LEGO1/omni/src/video/mxvideoparam.cpp
|
||||
LEGO1/omni/src/video/mxvideoparamflags.cpp
|
||||
LEGO1/omni/src/video/mxvideopresenter.cpp
|
||||
LEGO1/omni/src/video/mxvideoparam.cpp
|
||||
LEGO1/omni/src/video/mxpalette.cpp
|
||||
LEGO1/omni/src/system/mxscheduler.cpp
|
||||
LEGO1/omni/src/system/mxthread.cpp
|
||||
LEGO1/omni/src/action/mxdsobject.cpp
|
||||
LEGO1/omni/src/event/mxeventmanager.cpp
|
||||
LEGO1/omni/src/audio/mxmusicmanager.cpp
|
||||
LEGO1/omni/src/stream/mxstreamcontroller.cpp
|
||||
LEGO1/omni/src/audio/mxmusicpresenter.cpp
|
||||
LEGO1/omni/src/audio/mxmidipresenter.cpp
|
||||
LEGO1/omni/src/audio/mxloopingmidipresenter.cpp
|
||||
LEGO1/omni/src/event/mxeventpresenter.cpp
|
||||
LEGO1/omni/src/stream/mxstreamchunk.cpp
|
||||
LEGO1/omni/src/video/mxregioncursor.cpp
|
||||
LEGO1/omni/src/video/mxregion.cpp
|
||||
LEGO1/omni/src/video/mxsmk.cpp
|
||||
LEGO1/omni/src/stream/mxramstreamcontroller.cpp
|
||||
LEGO1/omni/src/stream/mxdsbuffer.cpp
|
||||
LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp
|
||||
LEGO1/omni/src/system/mxsemaphore.cpp
|
||||
LEGO1/omni/src/action/mxdsobjectaction.cpp
|
||||
LEGO1/omni/src/action/mxdsmediaaction.cpp
|
||||
LEGO1/omni/src/action/mxdsanim.cpp
|
||||
LEGO1/omni/src/action/mxdssound.cpp
|
||||
LEGO1/omni/src/action/mxdsevent.cpp
|
||||
LEGO1/omni/src/action/mxdsstill.cpp
|
||||
LEGO1/omni/src/action/mxdsmultiaction.cpp
|
||||
LEGO1/omni/src/action/mxdsserialaction.cpp
|
||||
LEGO1/omni/src/action/mxdsparallelaction.cpp
|
||||
LEGO1/omni/src/action/mxdsselectaction.cpp
|
||||
LEGO1/omni/src/stream/mxdsfile.cpp
|
||||
LEGO1/omni/src/stream/mxio.cpp
|
||||
LEGO1/omni/src/action/mxdsstreamingaction.cpp
|
||||
LEGO1/omni/src/stream/mxramstreamprovider.cpp
|
||||
LEGO1/omni/src/stream/mxdiskstreamprovider.cpp
|
||||
)
|
||||
list(APPEND list_targets omni${ARG_SUFFIX})
|
||||
set_property(TARGET omni${ARG_SUFFIX} PROPERTY ARCHIVE_OUTPUT_NAME "omni$<$<CONFIG:Debug>:d>${ARG_SUFFIX}")
|
||||
@ -294,120 +288,121 @@ function(add_lego_libraries NAME)
|
||||
target_link_libraries(omni${ARG_SUFFIX} PRIVATE dsound winmm Smacker::Smacker)
|
||||
|
||||
add_library(${NAME} SHARED
|
||||
LEGO1/define.cpp
|
||||
LEGO1/lego/legoomni/src/actors/act2actor.cpp
|
||||
LEGO1/lego/legoomni/src/actors/act2genactor.cpp
|
||||
LEGO1/lego/legoomni/src/actors/act3actors.cpp
|
||||
LEGO1/lego/legoomni/src/actors/act3ammo.cpp
|
||||
LEGO1/lego/legoomni/src/actors/ambulance.cpp
|
||||
LEGO1/lego/legoomni/src/actors/bike.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/score.cpp
|
||||
LEGO1/lego/legoomni/src/actors/helicopter.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/gasstation.cpp
|
||||
LEGO1/lego/legoomni/src/audio/legocachsound.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp
|
||||
LEGO1/lego/legoomni/src/actors/skateboard.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoentity.cpp
|
||||
LEGO1/lego/legoomni/src/audio/lego3dsound.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp
|
||||
LEGO1/lego/legoomni/src/race/legoracers.cpp
|
||||
LEGO1/lego/legoomni/src/race/legoraceactor.cpp
|
||||
LEGO1/lego/legoomni/src/common/legostate.cpp
|
||||
LEGO1/lego/legoomni/src/actors/buildingentity.cpp
|
||||
LEGO1/lego/legoomni/src/actors/buildings.cpp
|
||||
LEGO1/lego/legoomni/src/actors/bumpbouy.cpp
|
||||
LEGO1/lego/legoomni/src/actors/doors.cpp
|
||||
LEGO1/lego/legoomni/src/actors/dunebuggy.cpp
|
||||
LEGO1/lego/legoomni/src/actors/helicopter.cpp
|
||||
LEGO1/lego/legoomni/src/actors/isleactor.cpp
|
||||
LEGO1/lego/legoomni/src/actors/islepathactor.cpp
|
||||
LEGO1/lego/legoomni/src/actors/jetski.cpp
|
||||
LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp
|
||||
LEGO1/lego/legoomni/src/actors/motorcycle.cpp
|
||||
LEGO1/lego/legoomni/src/actors/pizza.cpp
|
||||
LEGO1/lego/legoomni/src/actors/pizzeria.cpp
|
||||
LEGO1/lego/legoomni/src/actors/racecar.cpp
|
||||
LEGO1/lego/legoomni/src/actors/radio.cpp
|
||||
LEGO1/lego/legoomni/src/actors/skateboard.cpp
|
||||
LEGO1/lego/legoomni/src/actors/towtrack.cpp
|
||||
LEGO1/lego/legoomni/src/audio/lego3dsound.cpp
|
||||
LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp
|
||||
LEGO1/lego/legoomni/src/audio/legocachsound.cpp
|
||||
LEGO1/lego/legoomni/src/audio/legocachesoundmanager.cpp
|
||||
LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp
|
||||
LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
|
||||
LEGO1/lego/legoomni/src/build/legocarbuild.cpp
|
||||
LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoactioncontrolpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoactors.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoanimmmpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/legobackgroundcolor.cpp
|
||||
LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp
|
||||
LEGO1/lego/legoomni/src/common/legocharactermanager.cpp
|
||||
LEGO1/lego/legoomni/src/common/legofullscreenmovie.cpp
|
||||
LEGO1/lego/legoomni/src/common/legogamestate.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp
|
||||
LEGO1/lego/legoomni/src/common/legophoneme.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoplantmanager.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoplants.cpp
|
||||
LEGO1/lego/legoomni/src/common/legostate.cpp
|
||||
LEGO1/lego/legoomni/src/common/legotextureinfo.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoutils.cpp
|
||||
LEGO1/lego/legoomni/src/common/legovariables.cpp
|
||||
LEGO1/lego/legoomni/src/common/misc.cpp
|
||||
LEGO1/lego/legoomni/src/common/mxcompositemediapresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp
|
||||
LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp
|
||||
LEGO1/lego/legoomni/src/control/legometerpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/entity/act2brick.cpp
|
||||
LEGO1/lego/legoomni/src/entity/act2policestation.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoactor.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoentity.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legolocations.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoworld.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/input/legoinputmanager.cpp
|
||||
LEGO1/lego/legoomni/src/main/legomain.cpp
|
||||
LEGO1/lego/legoomni/src/main/scripts.cpp
|
||||
LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legoanimactor.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legoextraactor.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legopathactor.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legopathboundary.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legopathstruct.cpp
|
||||
LEGO1/lego/legoomni/src/race/carrace.cpp
|
||||
LEGO1/lego/legoomni/src/race/jetskirace.cpp
|
||||
LEGO1/lego/legoomni/src/race/legorace.cpp
|
||||
LEGO1/lego/legoomni/src/race/legoraceactor.cpp
|
||||
LEGO1/lego/legoomni/src/race/legoracemap.cpp
|
||||
LEGO1/lego/legoomni/src/race/legoracers.cpp
|
||||
LEGO1/lego/legoomni/src/race/legoracespecial.cpp
|
||||
LEGO1/lego/legoomni/src/race/raceskel.cpp
|
||||
LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legopalettepresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legopartpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/race/jetskirace.cpp
|
||||
LEGO1/lego/legoomni/src/race/carrace.cpp
|
||||
LEGO1/lego/legoomni/src/actors/pizzeria.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp
|
||||
LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/actors/act2genactor.cpp
|
||||
LEGO1/lego/legoomni/src/actors/act2actor.cpp
|
||||
LEGO1/lego/legoomni/src/actors/islepathactor.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legopathstruct.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legoanimactor.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoworld.cpp
|
||||
LEGO1/lego/legoomni/src/build/legocarbuild.cpp
|
||||
LEGO1/lego/legoomni/src/actors/ambulance.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoplantmanager.cpp
|
||||
LEGO1/lego/legoomni/src/actors/bumpbouy.cpp
|
||||
LEGO1/modeldb/modeldb.cpp
|
||||
LEGO1/lego/legoomni/src/actors/pizza.cpp
|
||||
LEGO1/lego/legoomni/src/actors/racecar.cpp
|
||||
LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp
|
||||
LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legoextraactor.cpp
|
||||
LEGO1/lego/legoomni/src/actors/isleactor.cpp
|
||||
LEGO1/lego/legoomni/src/actors/radio.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoactor.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legopathactor.cpp
|
||||
LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/isle.cpp
|
||||
LEGO1/lego/legoomni/src/actors/motorcycle.cpp
|
||||
LEGO1/lego/legoomni/src/actors/act3ammo.cpp
|
||||
LEGO1/lego/legoomni/src/audio/legocachesoundmanager.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp
|
||||
LEGO1/lego/legoomni/src/common/legogamestate.cpp
|
||||
LEGO1/lego/legoomni/src/common/legobackgroundcolor.cpp
|
||||
LEGO1/lego/legoomni/src/common/legofullscreenmovie.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoutils.cpp
|
||||
LEGO1/lego/legoomni/src/actors/act3actors.cpp
|
||||
LEGO1/lego/legoomni/src/control/legometerpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoactioncontrolpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/legophoneme.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp
|
||||
LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoanimmmpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp
|
||||
LEGO1/lego/legoomni/src/actors/towtrack.cpp
|
||||
LEGO1/lego/legoomni/src/entity/act2policestation.cpp
|
||||
LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legovideomanager.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/act3.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/gasstation.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/historybook.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/hospital.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/infocenter.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/isle.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/jukebox.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/legoact2.cpp
|
||||
LEGO1/lego/legoomni/src/common/legovariables.cpp
|
||||
LEGO1/lego/legoomni/src/main/scripts.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp
|
||||
LEGO1/lego/legoomni/src/paths/legopathboundary.cpp
|
||||
LEGO1/lego/legoomni/src/main/legomain.cpp
|
||||
LEGO1/lego/legoomni/src/input/legoinputmanager.cpp
|
||||
LEGO1/lego/legoomni/src/race/legoracemap.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/jukebox.cpp
|
||||
LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/police.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp
|
||||
LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp
|
||||
LEGO1/lego/legoomni/src/common/legotextureinfo.cpp
|
||||
LEGO1/lego/legoomni/src/actors/doors.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/actors/dunebuggy.cpp
|
||||
LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/infocenter.cpp
|
||||
LEGO1/lego/legoomni/src/race/raceskel.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/act3.cpp
|
||||
LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/common/mxcompositemediapresenter.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/hospital.cpp
|
||||
LEGO1/lego/legoomni/src/actors/bike.cpp
|
||||
LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/registrationbook.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/score.cpp
|
||||
LEGO1/lego/legoomni/src/video/legopalettepresenter.cpp
|
||||
LEGO1/lego/legoomni/src/entity/act2brick.cpp
|
||||
LEGO1/lego/legoomni/src/video/legovideomanager.cpp
|
||||
LEGO1/lego/legoomni/src/video/legopartpresenter.cpp
|
||||
LEGO1/lego/legoomni/src/actors/jetski.cpp
|
||||
LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
|
||||
LEGO1/lego/legoomni/src/race/legoracespecial.cpp
|
||||
LEGO1/lego/legoomni/src/worlds/historybook.cpp
|
||||
LEGO1/lego/legoomni/src/common/legocharactermanager.cpp
|
||||
LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp
|
||||
LEGO1/main.cpp
|
||||
LEGO1/modeldb/modeldb.cpp
|
||||
# We need to get rid of / refactor the below units into existing/other ones
|
||||
LEGO1/lego/legoomni/src/entity/legolocations.cpp
|
||||
LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoactors.cpp
|
||||
LEGO1/define.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoplants.cpp
|
||||
)
|
||||
list(APPEND list_targets ${NAME})
|
||||
|
||||
@ -430,20 +425,20 @@ function(add_lego_libraries NAME)
|
||||
|
||||
# Link libraries
|
||||
target_link_libraries(${NAME} PRIVATE
|
||||
tglrl${ARG_SUFFIX}
|
||||
viewmanager${ARG_SUFFIX}
|
||||
realtime${ARG_SUFFIX}
|
||||
mxdirectx${ARG_SUFFIX}
|
||||
roi${ARG_SUFFIX}
|
||||
geom${ARG_SUFFIX}
|
||||
anim${ARG_SUFFIX}
|
||||
Vec::Vec
|
||||
dinput
|
||||
dxguid
|
||||
misc${ARG_SUFFIX}
|
||||
geom${ARG_SUFFIX}
|
||||
mxdirectx${ARG_SUFFIX}
|
||||
anim${ARG_SUFFIX}
|
||||
tglrl${ARG_SUFFIX}
|
||||
realtime${ARG_SUFFIX}
|
||||
viewmanager${ARG_SUFFIX}
|
||||
roi${ARG_SUFFIX}
|
||||
3dmanager${ARG_SUFFIX}
|
||||
omni${ARG_SUFFIX}
|
||||
shape${ARG_SUFFIX}
|
||||
Vec::Vec
|
||||
dxguid
|
||||
)
|
||||
|
||||
foreach(tgt IN LISTS list_targets)
|
||||
|
||||
@ -19,13 +19,23 @@ class Act2Actor : public LegoAnimActor {
|
||||
|
||||
Act2Actor();
|
||||
|
||||
void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2) override; // vtable+0x24
|
||||
void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
|
||||
MxS32 VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3) override; // vtable+0x68
|
||||
void Animate(float p_time) override; // vtable+0x70
|
||||
MxResult HitActor(LegoPathActor*, MxBool) override; // vtable+0x94
|
||||
MxResult VTable0x9c() override; // vtable+0x9c
|
||||
MxS32 VTable0xa0() override; // vtable+0xa0
|
||||
void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2) override; // vtable+0x24
|
||||
void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
|
||||
|
||||
// FUNCTION: LEGO1 0x1001a180
|
||||
MxS32 VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3) override
|
||||
{
|
||||
if (m_unk0x1f) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return LegoAnimActor::VTable0x68(p_v1, p_v2, p_v3);
|
||||
} // vtable+0x68
|
||||
|
||||
void Animate(float p_time) override; // vtable+0x70
|
||||
MxResult HitActor(LegoPathActor*, MxBool) override; // vtable+0x94
|
||||
MxResult VTable0x9c() override; // vtable+0x9c
|
||||
MxS32 VTable0xa0() override; // vtable+0xa0
|
||||
|
||||
void FUN_10018980();
|
||||
void FUN_10019250(MxFloat p_speed, MxFloat p_param2);
|
||||
|
||||
@ -10,6 +10,7 @@ class Act3Brickster;
|
||||
class Act3Cop;
|
||||
class Act3Shark;
|
||||
class Helicopter;
|
||||
class MxQuaternionTransformer;
|
||||
|
||||
// Macros confirmed by BETA10
|
||||
#define MAX_PIZZAS 20
|
||||
@ -53,6 +54,9 @@ class Act3State : public LegoState {
|
||||
public:
|
||||
Act3State() { m_unk0x08 = 0; }
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e2f0
|
||||
MxBool IsSerializable() override { return FALSE; }
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e300
|
||||
// FUNCTION: BETA10 0x10017e10
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
@ -67,9 +71,6 @@ class Act3State : public LegoState {
|
||||
return !strcmp(p_name, Act3State::ClassName()) || LegoState::IsA(p_name);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e2f0
|
||||
MxBool IsSerializable() override { return FALSE; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000e3c0
|
||||
// Act3State::`scalar deleting destructor'
|
||||
|
||||
@ -152,7 +153,7 @@ class Act3 : public LegoWorld {
|
||||
const Matrix4& p_destination,
|
||||
const Matrix4& p_startPosition,
|
||||
const Matrix4& p_endPosition,
|
||||
const UnknownMx4DPointFloat& p_unk0x1f4
|
||||
const MxQuaternionTransformer& p_unk0x1f4
|
||||
);
|
||||
|
||||
Act3State* m_state; // 0xf8
|
||||
|
||||
@ -29,22 +29,28 @@ class AmbulanceMissionState : public LegoState {
|
||||
|
||||
MxResult Serialize(LegoFile* p_file) override; // vtable+0x1c
|
||||
|
||||
// FUNCTION: BETA10 0x10088770
|
||||
MxS16 GetHighScore(MxU8 p_actorId)
|
||||
{
|
||||
switch (p_actorId) {
|
||||
case LegoActor::c_pepper:
|
||||
return m_peHighScore;
|
||||
break;
|
||||
case LegoActor::c_mama:
|
||||
return m_maHighScore;
|
||||
break;
|
||||
case LegoActor::c_papa:
|
||||
return m_paHighScore;
|
||||
break;
|
||||
case LegoActor::c_nick:
|
||||
return m_niHighScore;
|
||||
break;
|
||||
case LegoActor::c_laura:
|
||||
return m_laHighScore;
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x100242d0
|
||||
|
||||
@ -5,80 +5,6 @@
|
||||
|
||||
class LegoEventNotificationParam;
|
||||
|
||||
// VTABLE: LEGO1 0x100d48a8
|
||||
// VTABLE: BETA10 0x101bd818
|
||||
// SIZE 0x68
|
||||
class RaceStandsEntity : public BuildingEntity {
|
||||
// FUNCTION: LEGO1 0x1000efa0
|
||||
// FUNCTION: BETA10 0x100a9820
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// at LEGO1 0x100f0300, needs no annotation
|
||||
return "RaceStandsEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000efb0
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, RaceStandsEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f9e0
|
||||
// RaceStandsEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d4a18
|
||||
// VTABLE: BETA10 0x101bd7b0
|
||||
// SIZE 0x68
|
||||
class BeachHouseEntity : public BuildingEntity {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x1000ee80
|
||||
// FUNCTION: BETA10 0x100a96f0
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f0314
|
||||
return "BeachHouseEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000ee90
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, BeachHouseEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f970
|
||||
// BeachHouseEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d4ab0
|
||||
// VTABLE: BETA10 0x101bd748
|
||||
// SIZE 0x68
|
||||
class PoliceEntity : public BuildingEntity {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x1000ed60
|
||||
// FUNCTION: BETA10 0x100a95c0
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f0328
|
||||
return "PoliceEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000ed70
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, PoliceEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override; // vtable+0x50
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f900
|
||||
// PoliceEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d4b90
|
||||
// VTABLE: BETA10 0x101bd610
|
||||
// SIZE 0x68
|
||||
@ -104,79 +30,6 @@ class InfoCenterEntity : public BuildingEntity {
|
||||
// InfoCenterEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d5068
|
||||
// VTABLE: BETA10 0x101bd678
|
||||
// SIZE 0x68
|
||||
class HospitalEntity : public BuildingEntity {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x1000ec40
|
||||
// FUNCTION: BETA10 0x100a9360
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f0338
|
||||
return "HospitalEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000ec50
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, HospitalEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override; // vtable+0x50
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f820
|
||||
// HospitalEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d50c0
|
||||
// VTABLE: BETA10 0x101bd880
|
||||
// SIZE 0x68
|
||||
class CaveEntity : public BuildingEntity {
|
||||
// FUNCTION: LEGO1 0x1000f1e0
|
||||
// FUNCTION: BETA10 0x100a9950
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// at LEGO1 0x100f0300, needs no annotation
|
||||
return "RaceStandsEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000f1f0
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, CaveEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000fa50
|
||||
// CaveEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d5200
|
||||
// VTABLE: BETA10 0x101bd8e8
|
||||
// SIZE 0x68
|
||||
class JailEntity : public BuildingEntity {
|
||||
// FUNCTION: LEGO1 0x1000f0c0
|
||||
// FUNCTION: BETA10 0x100a9a80
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// at LEGO1 0x100f0300, needs no annotation
|
||||
return "RaceStandsEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000f0d0
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, JailEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000fac0
|
||||
// JailEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d5258
|
||||
// VTABLE: BETA10 0x101bd6e0
|
||||
// SIZE 0x68
|
||||
@ -202,4 +55,151 @@ class GasStationEntity : public BuildingEntity {
|
||||
// GasStationEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d5068
|
||||
// VTABLE: BETA10 0x101bd678
|
||||
// SIZE 0x68
|
||||
class HospitalEntity : public BuildingEntity {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x1000ec40
|
||||
// FUNCTION: BETA10 0x100a9360
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f0338
|
||||
return "HospitalEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000ec50
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, HospitalEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override; // vtable+0x50
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f820
|
||||
// HospitalEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d4ab0
|
||||
// VTABLE: BETA10 0x101bd748
|
||||
// SIZE 0x68
|
||||
class PoliceEntity : public BuildingEntity {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x1000ed60
|
||||
// FUNCTION: BETA10 0x100a95c0
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f0328
|
||||
return "PoliceEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000ed70
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, PoliceEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override; // vtable+0x50
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f900
|
||||
// PoliceEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d4a18
|
||||
// VTABLE: BETA10 0x101bd7b0
|
||||
// SIZE 0x68
|
||||
class BeachHouseEntity : public BuildingEntity {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x1000ee80
|
||||
// FUNCTION: BETA10 0x100a96f0
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f0314
|
||||
return "BeachHouseEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000ee90
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, BeachHouseEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f970
|
||||
// BeachHouseEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d48a8
|
||||
// VTABLE: BETA10 0x101bd818
|
||||
// SIZE 0x68
|
||||
class RaceStandsEntity : public BuildingEntity {
|
||||
// FUNCTION: LEGO1 0x1000efa0
|
||||
// FUNCTION: BETA10 0x100a9820
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// at LEGO1 0x100f0300, needs no annotation
|
||||
return "RaceStandsEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000efb0
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, RaceStandsEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f9e0
|
||||
// RaceStandsEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d5200
|
||||
// VTABLE: BETA10 0x101bd8e8
|
||||
// SIZE 0x68
|
||||
class JailEntity : public BuildingEntity {
|
||||
// FUNCTION: LEGO1 0x1000f0c0
|
||||
// FUNCTION: BETA10 0x100a9a80
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// at LEGO1 0x100f0300, needs no annotation
|
||||
return "RaceStandsEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000f0d0
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, JailEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000fac0
|
||||
// JailEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d50c0
|
||||
// VTABLE: BETA10 0x101bd880
|
||||
// SIZE 0x68
|
||||
class CaveEntity : public BuildingEntity {
|
||||
// FUNCTION: LEGO1 0x1000f1e0
|
||||
// FUNCTION: BETA10 0x100a9950
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// at LEGO1 0x100f0300, needs no annotation
|
||||
return "RaceStandsEntity";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000f1f0
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, CaveEntity::ClassName()) || BuildingEntity::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong HandleClick(LegoEventNotificationParam& p_param) override;
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000fa50
|
||||
// CaveEntity::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
#endif // BUILDINGS_H
|
||||
|
||||
@ -17,6 +17,9 @@ class ElevatorBottom : public LegoWorld {
|
||||
|
||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||
|
||||
// FUNCTION: LEGO1 0x10017f10
|
||||
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
|
||||
|
||||
// FUNCTION: LEGO1 0x10017f20
|
||||
// FUNCTION: BETA10 0x10028130
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
@ -33,12 +36,8 @@ class ElevatorBottom : public LegoWorld {
|
||||
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
void ReadyWorld() override; // vtable+0x50
|
||||
|
||||
// FUNCTION: LEGO1 0x10017f10
|
||||
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
|
||||
|
||||
MxBool Escape() override; // vtable+0x64
|
||||
void Enable(MxBool p_enable) override; // vtable+0x68
|
||||
MxBool Escape() override; // vtable+0x64
|
||||
void Enable(MxBool p_enable) override; // vtable+0x68
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10018040
|
||||
// ElevatorBottom::`scalar deleting destructor'
|
||||
|
||||
@ -14,11 +14,6 @@ class MxStillPresenter;
|
||||
// SIZE 0x24
|
||||
class GasStationState : public LegoState {
|
||||
public:
|
||||
// SIZE 0x04
|
||||
struct Unknown0x14 {
|
||||
undefined4 m_unk0x00; // 0x00
|
||||
};
|
||||
|
||||
GasStationState();
|
||||
|
||||
// FUNCTION: LEGO1 0x100061d0
|
||||
@ -47,7 +42,7 @@ class GasStationState : public LegoState {
|
||||
// TODO: Most likely getters/setters are not used according to BETA.
|
||||
|
||||
GarageScript::Script m_actions[3]; // 0x08
|
||||
Unknown0x14 m_unk0x14; // 0x14
|
||||
undefined4 m_unk0x14; // 0x14
|
||||
MxS16 m_pepperAction; // 0x18
|
||||
MxS16 m_mamaAction; // 0x1a
|
||||
MxS16 m_papaAction; // 0x1c
|
||||
@ -66,6 +61,9 @@ class GasStation : public LegoWorld {
|
||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||
MxResult Tickle() override; // vtable+0x08
|
||||
|
||||
// FUNCTION: LEGO1 0x10004770
|
||||
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
|
||||
|
||||
// FUNCTION: LEGO1 0x10004780
|
||||
// FUNCTION: BETA10 0x10029d40
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
@ -82,7 +80,6 @@ class GasStation : public LegoWorld {
|
||||
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
void ReadyWorld() override; // vtable+0x50
|
||||
MxBool VTable0x5c() override; // vtable+0x5c
|
||||
MxBool Escape() override; // vtable+0x64
|
||||
void Enable(MxBool p_enable) override; // vtable+0x68
|
||||
virtual MxLong HandleControl(LegoControlManagerNotificationParam& p_param); // vtable+0x6c
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
#include "islepathactor.h"
|
||||
#include "legostate.h"
|
||||
#include "realtime/matrix.h"
|
||||
#include "mxgeometry/mxquaternion.h"
|
||||
|
||||
class Act3;
|
||||
|
||||
@ -14,6 +14,16 @@ class HelicopterState : public LegoState {
|
||||
public:
|
||||
HelicopterState() : m_unk0x08(0) {}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e0b0
|
||||
MxBool IsSerializable() override { return FALSE; } // vtable+0x14
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e0c0
|
||||
MxBool Reset() override
|
||||
{
|
||||
m_unk0x08 = 0;
|
||||
return TRUE;
|
||||
} // vtable+0x18
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e0d0
|
||||
// FUNCTION: BETA10 0x100a7cc0
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
@ -28,24 +38,9 @@ class HelicopterState : public LegoState {
|
||||
return !strcmp(p_name, HelicopterState::ClassName()) || LegoState::IsA(p_name);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e0b0
|
||||
MxBool IsSerializable() override { return FALSE; } // vtable+0x14
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e0c0
|
||||
MxBool Reset() override
|
||||
{
|
||||
m_unk0x08 = 0;
|
||||
return TRUE;
|
||||
} // vtable+0x18
|
||||
|
||||
void SetUnknown8(MxU32 p_unk0x08) { m_unk0x08 = p_unk0x08; }
|
||||
MxU32 GetUnkown8() { return m_unk0x08; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000e190
|
||||
// HelicopterState::`scalar deleting destructor'
|
||||
|
||||
// TODO: Most likely getters/setters are not used according to BETA.
|
||||
|
||||
MxU32 m_unk0x08; // 0x08
|
||||
};
|
||||
|
||||
@ -93,12 +88,12 @@ class Helicopter : public IslePathActor {
|
||||
protected:
|
||||
void FUN_100042a0(const Matrix4& p_matrix);
|
||||
|
||||
MxMatrix m_unk0x160; // 0x160
|
||||
MxMatrix m_unk0x1a8; // 0x1a8
|
||||
float m_unk0x1f0; // 0x1f0
|
||||
UnknownMx4DPointFloat m_unk0x1f4; // 0x1f4
|
||||
HelicopterState* m_state; // 0x228
|
||||
MxAtomId m_script; // 0x22c
|
||||
MxMatrix m_unk0x160; // 0x160
|
||||
MxMatrix m_unk0x1a8; // 0x1a8
|
||||
float m_unk0x1f0; // 0x1f0
|
||||
MxQuaternionTransformer m_unk0x1f4; // 0x1f4
|
||||
HelicopterState* m_state; // 0x228
|
||||
MxAtomId m_script; // 0x22c
|
||||
};
|
||||
|
||||
#endif // HELICOPTER_H
|
||||
|
||||
@ -69,9 +69,9 @@ struct InfocenterMapEntry {
|
||||
// FUNCTION: LEGO1 0x1006ec80
|
||||
InfocenterMapEntry() {}
|
||||
|
||||
MxStillPresenter* m_presenter; // 0x00
|
||||
undefined4 m_unk0x04; // 0x04
|
||||
MxRect32 m_area; // 0x08
|
||||
MxStillPresenter* m_destCtl; // 0x00
|
||||
undefined4 m_unk0x04; // 0x04
|
||||
MxRect32 m_area; // 0x08
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d9338
|
||||
@ -161,9 +161,9 @@ class Infocenter : public LegoWorld {
|
||||
Cutscene m_currentCutscene; // 0x108
|
||||
Radio m_radio; // 0x10c
|
||||
MxStillPresenter* m_unk0x11c; // 0x11c
|
||||
InfocenterMapEntry m_mapAreas[7]; // 0x120
|
||||
InfocenterMapEntry m_glowInfo[7]; // 0x120
|
||||
MxS16 m_unk0x1c8; // 0x1c8
|
||||
MxStillPresenter* m_frameHotBitmap; // 0x1cc
|
||||
MxStillPresenter* m_frame; // 0x1cc
|
||||
MxS16 m_infoManDialogueTimer; // 0x1d0
|
||||
MxS16 m_bookAnimationTimer; // 0x1d2
|
||||
MxU16 m_unk0x1d4; // 0x1d4
|
||||
|
||||
@ -14,22 +14,7 @@ class MxNotificationParam;
|
||||
// SIZE 0x7c
|
||||
class IsleActor : public LegoActor {
|
||||
public:
|
||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e660
|
||||
// FUNCTION: BETA10 0x100a8300
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f07dc
|
||||
return "IsleActor";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e670
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, IsleActor::ClassName()) || LegoActor::IsA(p_name);
|
||||
}
|
||||
|
||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e5f0
|
||||
@ -53,6 +38,20 @@ class IsleActor : public LegoActor {
|
||||
// FUNCTION: LEGO1 0x1000e650
|
||||
virtual MxLong HandlePathStruct(LegoPathStructNotificationParam&) { return 0; } // vtable+0x80
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e660
|
||||
// FUNCTION: BETA10 0x100a8300
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f07dc
|
||||
return "IsleActor";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000e670
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, IsleActor::ClassName()) || LegoActor::IsA(p_name);
|
||||
}
|
||||
|
||||
protected:
|
||||
LegoWorld* m_world; // 0x78
|
||||
};
|
||||
|
||||
@ -86,6 +86,26 @@ class IslePathActor : public LegoPathActor {
|
||||
|
||||
IslePathActor();
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e70
|
||||
virtual MxLong HandleClick() { return 0; } // vtable+0xcc
|
||||
|
||||
// FUNCTION: LEGO1 0x10002df0
|
||||
virtual MxLong HandleNotification0() { return 0; } // vtable+0xd0
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e80
|
||||
virtual MxLong HandleControl(LegoControlManagerNotificationParam&) { return 0; } // vtable+0xd4
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e90
|
||||
virtual MxLong HandleEndAnim(LegoEndAnimNotificationParam&) { return 0; } // vtable+0xd8
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e00
|
||||
virtual MxLong HandlePathStruct(LegoPathStructNotificationParam&) { return 0; } // vtable+0xdc
|
||||
|
||||
virtual void Enter(); // vtable+0xe0
|
||||
virtual void Exit(); // vtable+0xe4
|
||||
virtual void SpawnPlayer(LegoGameState::Area p_area, MxBool p_enter, MxU8 p_flags); // vtable+0xe8
|
||||
virtual void VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset); // vtable+0xec
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e10
|
||||
~IslePathActor() override { IslePathActor::Destroy(TRUE); }
|
||||
|
||||
@ -108,29 +128,6 @@ class IslePathActor : public LegoPathActor {
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e70
|
||||
virtual MxLong HandleClick() { return 0; } // vtable+0xcc
|
||||
|
||||
// FUNCTION: LEGO1 0x10002df0
|
||||
virtual MxLong HandleNotification0() { return 0; } // vtable+0xd0
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e80
|
||||
virtual MxLong HandleControl(LegoControlManagerNotificationParam&) { return 0; } // vtable+0xd4
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e90
|
||||
virtual MxLong HandleEndAnim(LegoEndAnimNotificationParam&) { return 0; } // vtable+0xd8
|
||||
|
||||
// FUNCTION: LEGO1 0x10002e00
|
||||
virtual MxLong HandlePathStruct(LegoPathStructNotificationParam&) { return 0; } // vtable+0xdc
|
||||
|
||||
virtual void Enter(); // vtable+0xe0
|
||||
virtual void Exit(); // vtable+0xe4
|
||||
virtual void SpawnPlayer(LegoGameState::Area p_area, MxBool p_enter, MxU8 p_flags); // vtable+0xe8
|
||||
virtual void VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset); // vtable+0xec
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10002ff0
|
||||
// IslePathActor::`scalar deleting destructor'
|
||||
|
||||
void FUN_1001b660();
|
||||
|
||||
void Reset()
|
||||
@ -143,6 +140,9 @@ class IslePathActor : public LegoPathActor {
|
||||
|
||||
static void RegisterSpawnLocations();
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10002ff0
|
||||
// IslePathActor::`scalar deleting destructor'
|
||||
|
||||
protected:
|
||||
LegoWorld* m_world; // 0x154
|
||||
LegoPathActor* m_previousActor; // 0x158
|
||||
|
||||
@ -3,32 +3,6 @@
|
||||
|
||||
#include "legorace.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d4fa8
|
||||
// VTABLE: BETA10 0x101bd5d0
|
||||
// SIZE 0x2c
|
||||
class JetskiRaceState : public RaceState {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x1000dc40
|
||||
// FUNCTION: BETA10 0x100a8f30
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f00ac
|
||||
// STRING: BETA10 0x101f1d0c
|
||||
return "JetskiRaceState";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000dc50
|
||||
// FUNCTION: BETA10 0x100a8f60
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, JetskiRaceState::ClassName()) || RaceState::IsA(p_name);
|
||||
}
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f680
|
||||
// SYNTHETIC: BETA10 0x100a9d10
|
||||
// JetskiRaceState::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d4fe8
|
||||
// VTABLE: BETA10 0x101bd268
|
||||
// SIZE 0x144
|
||||
@ -68,6 +42,32 @@ class JetskiRace : public LegoRace {
|
||||
static MxS32 g_unk0x100f0c78;
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d4fa8
|
||||
// VTABLE: BETA10 0x101bd5d0
|
||||
// SIZE 0x2c
|
||||
class JetskiRaceState : public RaceState {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x1000dc40
|
||||
// FUNCTION: BETA10 0x100a8f30
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f00ac
|
||||
// STRING: BETA10 0x101f1d0c
|
||||
return "JetskiRaceState";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000dc50
|
||||
// FUNCTION: BETA10 0x100a8f60
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, JetskiRaceState::ClassName()) || RaceState::IsA(p_name);
|
||||
}
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f680
|
||||
// SYNTHETIC: BETA10 0x100a9d10
|
||||
// JetskiRaceState::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f530
|
||||
// SYNTHETIC: BETA10 0x100a9b70
|
||||
// JetskiRace::`scalar deleting destructor'
|
||||
|
||||
@ -24,6 +24,9 @@ class JukeBoxState : public LegoState {
|
||||
|
||||
JukeBoxState() : m_music(e_pasquell), m_active(FALSE) {}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000f300
|
||||
MxBool IsSerializable() override { return FALSE; } // vtable+0x14
|
||||
|
||||
// FUNCTION: LEGO1 0x1000f310
|
||||
// FUNCTION: BETA10 0x100389c0
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
@ -38,9 +41,6 @@ class JukeBoxState : public LegoState {
|
||||
return !strcmp(p_name, JukeBoxState::ClassName()) || LegoState::IsA(p_name);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000f300
|
||||
MxBool IsSerializable() override { return FALSE; } // vtable+0x14
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000f3d0
|
||||
// JukeBoxState::`scalar deleting destructor'
|
||||
|
||||
|
||||
@ -22,6 +22,9 @@ class LegoAct2State : public LegoState {
|
||||
}
|
||||
~LegoAct2State() override {}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000df70
|
||||
MxBool IsSerializable() override { return FALSE; } // vtable+0x14
|
||||
|
||||
// FUNCTION: LEGO1 0x1000df80
|
||||
// FUNCTION: BETA10 0x1003c7e0
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
@ -36,9 +39,6 @@ class LegoAct2State : public LegoState {
|
||||
return !strcmp(p_name, LegoAct2State::ClassName()) || LegoState::IsA(p_name);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000df70
|
||||
MxBool IsSerializable() override { return FALSE; } // vtable+0x14
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1000e040
|
||||
// LegoAct2State::`scalar deleting destructor'
|
||||
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
|
||||
#include "decomp.h"
|
||||
#include "legoentity.h"
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
|
||||
class LegoCacheSound;
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
#include "legostate.h"
|
||||
#include "legotraninfolist.h"
|
||||
#include "mxcore.h"
|
||||
#include "mxgeometry/mxgeometry3d.h"
|
||||
#include "mxgeometry/mxquaternion.h"
|
||||
|
||||
class LegoAnimPresenter;
|
||||
class LegoEntity;
|
||||
@ -258,46 +258,46 @@ class LegoAnimationManager : public MxCore {
|
||||
void FUN_100648f0(LegoTranInfo* p_tranInfo, MxLong p_unk0x404);
|
||||
void FUN_10064b50(MxLong p_time);
|
||||
|
||||
LegoOmni::World m_worldId; // 0x08
|
||||
MxU16 m_animCount; // 0x0c
|
||||
MxU16 m_unk0x0e; // 0x0e
|
||||
MxU16 m_unk0x10; // 0x10
|
||||
AnimInfo* m_anims; // 0x14
|
||||
undefined2 m_unk0x18; // 0x18
|
||||
MxBool m_unk0x1a; // 0x1a
|
||||
MxU32 m_unk0x1c; // 0x1c
|
||||
LegoTranInfoList* m_tranInfoList; // 0x20
|
||||
LegoTranInfoList* m_tranInfoList2; // 0x24
|
||||
MxPresenter* m_unk0x28[2]; // 0x28
|
||||
MxLong m_unk0x30[2]; // 0x30
|
||||
MxBool m_unk0x38; // 0x38
|
||||
MxBool m_animRunning; // 0x39
|
||||
MxBool m_enableCamAnims; // 0x3a
|
||||
Extra m_extras[40]; // 0x3c
|
||||
MxU32 m_lastExtraCharacterId; // 0x3fc
|
||||
MxBool m_unk0x400; // 0x400
|
||||
MxBool m_unk0x401; // 0x401
|
||||
MxBool m_unk0x402; // 0x402
|
||||
MxLong m_unk0x404; // 0x404
|
||||
MxLong m_unk0x408; // 0x408
|
||||
MxLong m_unk0x40c; // 0x40c
|
||||
MxLong m_unk0x410; // 0x410
|
||||
MxU32 m_unk0x414; // 0x414
|
||||
MxU32 m_numAllowedExtras; // 0x418
|
||||
undefined4 m_unk0x41c; // 0x41c
|
||||
AnimState* m_animState; // 0x420
|
||||
LegoROIList* m_unk0x424; // 0x424
|
||||
MxBool m_suspendedEnableCamAnims; // 0x428
|
||||
MxBool m_unk0x429; // 0x429
|
||||
MxBool m_unk0x42a; // 0x42a
|
||||
MxBool m_suspended; // 0x42b
|
||||
LegoTranInfo* m_unk0x42c; // 0x42c
|
||||
MxBool m_unk0x430; // 0x430
|
||||
MxLong m_unk0x434; // 0x434
|
||||
MxLong m_unk0x438; // 0x438
|
||||
MxMatrix m_unk0x43c; // 0x43c
|
||||
MxMatrix m_unk0x484; // 0x484
|
||||
UnknownMx4DPointFloat m_unk0x4cc; // 0x4cc
|
||||
LegoOmni::World m_worldId; // 0x08
|
||||
MxU16 m_animCount; // 0x0c
|
||||
MxU16 m_unk0x0e; // 0x0e
|
||||
MxU16 m_unk0x10; // 0x10
|
||||
AnimInfo* m_anims; // 0x14
|
||||
undefined2 m_unk0x18; // 0x18
|
||||
MxBool m_unk0x1a; // 0x1a
|
||||
MxU32 m_unk0x1c; // 0x1c
|
||||
LegoTranInfoList* m_tranInfoList; // 0x20
|
||||
LegoTranInfoList* m_tranInfoList2; // 0x24
|
||||
MxPresenter* m_unk0x28[2]; // 0x28
|
||||
MxLong m_unk0x30[2]; // 0x30
|
||||
MxBool m_unk0x38; // 0x38
|
||||
MxBool m_animRunning; // 0x39
|
||||
MxBool m_enableCamAnims; // 0x3a
|
||||
Extra m_extras[40]; // 0x3c
|
||||
MxU32 m_lastExtraCharacterId; // 0x3fc
|
||||
MxBool m_unk0x400; // 0x400
|
||||
MxBool m_unk0x401; // 0x401
|
||||
MxBool m_unk0x402; // 0x402
|
||||
MxLong m_unk0x404; // 0x404
|
||||
MxLong m_unk0x408; // 0x408
|
||||
MxLong m_unk0x40c; // 0x40c
|
||||
MxLong m_unk0x410; // 0x410
|
||||
MxU32 m_unk0x414; // 0x414
|
||||
MxU32 m_numAllowedExtras; // 0x418
|
||||
undefined4 m_unk0x41c; // 0x41c
|
||||
AnimState* m_animState; // 0x420
|
||||
LegoROIList* m_unk0x424; // 0x424
|
||||
MxBool m_suspendedEnableCamAnims; // 0x428
|
||||
MxBool m_unk0x429; // 0x429
|
||||
MxBool m_unk0x42a; // 0x42a
|
||||
MxBool m_suspended; // 0x42b
|
||||
LegoTranInfo* m_unk0x42c; // 0x42c
|
||||
MxBool m_unk0x430; // 0x430
|
||||
MxLong m_unk0x434; // 0x434
|
||||
MxLong m_unk0x438; // 0x438
|
||||
MxMatrix m_unk0x43c; // 0x43c
|
||||
MxMatrix m_unk0x484; // 0x484
|
||||
MxQuaternionTransformer m_unk0x4cc; // 0x4cc
|
||||
};
|
||||
|
||||
// TEMPLATE: LEGO1 0x10061750
|
||||
|
||||
@ -7,7 +7,6 @@
|
||||
|
||||
class LegoAnim;
|
||||
class LegoWorld;
|
||||
class LegoAnimActor;
|
||||
class LegoPathBoundary;
|
||||
class MxMatrix;
|
||||
class Vector3;
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
#include "legogamestate.h"
|
||||
#include "legostate.h"
|
||||
#include "legoworld.h"
|
||||
#include "mxgeometry/mxquaternion.h"
|
||||
|
||||
class LegoCarBuildAnimPresenter;
|
||||
class LegoControlManagerNotificationParam;
|
||||
@ -189,7 +190,7 @@ class LegoCarBuild : public LegoWorld {
|
||||
MxS32 m_unk0x250[2]; // 0x250
|
||||
|
||||
LegoCarBuildAnimPresenter* m_unk0x258; // 0x258
|
||||
UnknownMx4DPointFloat m_unk0x25c; // 0x25c
|
||||
MxQuaternionTransformer m_unk0x25c; // 0x25c
|
||||
|
||||
// These two are likely locations in pixel space
|
||||
MxS32 m_unk0x290[2]; // 0x290
|
||||
|
||||
@ -67,7 +67,7 @@ class LegoCharacterManager {
|
||||
void ReleaseActor(const char* p_name);
|
||||
void ReleaseActor(LegoROI* p_roi);
|
||||
void ReleaseAutoROI(LegoROI* p_roi);
|
||||
MxBool FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_textureInfo);
|
||||
MxBool FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_texture);
|
||||
LegoExtraActor* GetExtraActor(const char* p_name);
|
||||
LegoActorInfo* GetActorInfo(const char* p_name);
|
||||
LegoActorInfo* GetActorInfo(LegoROI* p_roi);
|
||||
|
||||
@ -86,6 +86,8 @@ class LegoEntity : public MxEntity {
|
||||
MxBool GetUnknown0x10IsSet(MxU8 p_flag) { return m_unk0x10 & p_flag; }
|
||||
MxBool GetFlagsIsSet(MxU8 p_flag) { return m_flags & p_flag; }
|
||||
MxU8 GetFlags() { return m_flags; }
|
||||
|
||||
// FUNCTION: BETA10 0x10049db0
|
||||
MxFloat GetWorldSpeed() { return m_worldSpeed; }
|
||||
|
||||
// FUNCTION: BETA10 0x1000f2f0
|
||||
|
||||
@ -4,6 +4,8 @@
|
||||
#include "legoloopinganimpresenter.h"
|
||||
#include "legoroimaplist.h"
|
||||
|
||||
class LegoAnimActor;
|
||||
|
||||
// VTABLE: LEGO1 0x100d9170
|
||||
// SIZE 0xd8
|
||||
class LegoLocomotionAnimPresenter : public LegoLoopingAnimPresenter {
|
||||
|
||||
@ -18,6 +18,9 @@ class LegoModelPresenter : public MxVideoPresenter {
|
||||
// FUNCTION: LEGO1 0x10067a10
|
||||
~LegoModelPresenter() override { Destroy(TRUE); }
|
||||
|
||||
// FUNCTION: LEGO1 0x1000cca0
|
||||
void Destroy() override { Destroy(FALSE); } // vtable+0x38
|
||||
|
||||
static void configureLegoModelPresenter(MxS32 p_modelPresenterConfig);
|
||||
|
||||
// FUNCTION: BETA10 0x100a7180
|
||||
@ -42,7 +45,6 @@ class LegoModelPresenter : public MxVideoPresenter {
|
||||
|
||||
void ReadyTickle() override; // vtable+0x18
|
||||
void ParseExtra() override; // vtable+0x30
|
||||
void Destroy() override; // vtable+0x38
|
||||
|
||||
MxResult FUN_1007ff70(MxDSChunk& p_chunk, LegoEntity* p_entity, MxBool p_roiVisible, LegoWorld* p_world);
|
||||
|
||||
|
||||
@ -12,7 +12,18 @@ class LegoNamedPart {
|
||||
m_name = p_name;
|
||||
m_list = p_list;
|
||||
}
|
||||
~LegoNamedPart() { delete m_list; }
|
||||
~LegoNamedPart()
|
||||
{
|
||||
LegoLODListCursor cursor(m_list);
|
||||
LegoLOD* lod;
|
||||
|
||||
while (cursor.First(lod)) {
|
||||
cursor.Detach();
|
||||
delete lod;
|
||||
}
|
||||
|
||||
delete m_list;
|
||||
}
|
||||
|
||||
const MxString* GetName() const { return &m_name; }
|
||||
LegoLODList* GetList() { return m_list; }
|
||||
|
||||
@ -13,6 +13,9 @@ class LegoPartPresenter : public MxMediaPresenter {
|
||||
// FUNCTION: LEGO1 0x10067300
|
||||
~LegoPartPresenter() override { Destroy(TRUE); }
|
||||
|
||||
// FUNCTION: LEGO1 0x1000cf60
|
||||
void Destroy() override { Destroy(FALSE); } // vtable+0x38
|
||||
|
||||
// FUNCTION: BETA10 0x100a75d0
|
||||
static const char* HandlerClassName()
|
||||
{
|
||||
@ -35,7 +38,6 @@ class LegoPartPresenter : public MxMediaPresenter {
|
||||
|
||||
void ReadyTickle() override; // vtable+0x18
|
||||
MxResult AddToManager() override; // vtable+0x34
|
||||
void Destroy() override; // vtable+0x38
|
||||
|
||||
static void configureLegoPartPresenter(MxS32, MxS32);
|
||||
|
||||
|
||||
@ -3,7 +3,6 @@
|
||||
|
||||
#include "legoactor.h"
|
||||
#include "misc/legounknown.h"
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
#include "mxtypes.h"
|
||||
|
||||
struct LegoEdge;
|
||||
@ -92,8 +91,8 @@ class LegoPathActor : public LegoActor {
|
||||
float p_srcScale,
|
||||
LegoUnknown100db7f4& p_destEdge,
|
||||
float p_destScale
|
||||
); // vtable+0x88
|
||||
virtual MxS32 VTable0x8c(float p_time, Matrix4& p_transform); // vtable+0x8c
|
||||
); // vtable+0x88
|
||||
virtual MxS32 VTable0x8c(float p_time, MxMatrix& p_transform); // vtable+0x8c
|
||||
|
||||
// FUNCTION: LEGO1 0x10002d40
|
||||
virtual MxU32 VTable0x90(float, Matrix4&) { return FALSE; } // vtable+0x90
|
||||
|
||||
@ -34,6 +34,8 @@ class RaceState : public LegoState {
|
||||
}
|
||||
|
||||
MxS16 GetUnknown0x02() { return m_unk0x02; }
|
||||
|
||||
// FUNCTION: BETA10 0x10088970
|
||||
MxS16 GetHighScore() { return m_score; }
|
||||
|
||||
// FUNCTION: BETA10 0x100c96f0
|
||||
@ -110,6 +112,19 @@ class LegoRace : public LegoWorld {
|
||||
return "LegoRace";
|
||||
}
|
||||
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
|
||||
virtual MxLong HandleClick(LegoEventNotificationParam&) = 0; // vtable+0x6c
|
||||
|
||||
// FUNCTION: LEGO1 0x10015b70
|
||||
virtual MxLong HandlePathStruct(LegoPathStructNotificationParam&) { return 0; } // vtable+0x70
|
||||
|
||||
// FUNCTION: LEGO1 0x10015b80
|
||||
virtual MxLong HandleEndAction(MxEndActionNotificationParam&) { return 0; } // vtable+0x74
|
||||
|
||||
// FUNCTION: LEGO1 0x10015b90
|
||||
MxBool Escape() override { return FALSE; } // vtable+0x64
|
||||
|
||||
// FUNCTION: LEGO1 0x10015ba0
|
||||
// FUNCTION: BETA10 0x100a8940
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
@ -124,17 +139,6 @@ class LegoRace : public LegoWorld {
|
||||
return !strcmp(p_name, LegoRace::ClassName()) || LegoWorld::IsA(p_name);
|
||||
}
|
||||
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
|
||||
// FUNCTION: LEGO1 0x1000dae0
|
||||
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
|
||||
|
||||
MxBool Escape() override; // vtable+0x64
|
||||
void Enable(MxBool p_enable) override; // vtable+0x68
|
||||
virtual MxLong HandleClick(LegoEventNotificationParam&) = 0; // vtable+0x6c
|
||||
virtual MxLong HandlePathStruct(LegoPathStructNotificationParam&); // vtable+0x70
|
||||
virtual MxLong HandleEndAction(MxEndActionNotificationParam&); // vtable+0x74
|
||||
|
||||
// FUNCTION: LEGO1 0x1000dab0
|
||||
virtual MxLong HandleType0Notification(MxNotificationParam&) { return 0; } // vtable+0x78
|
||||
|
||||
@ -145,6 +149,11 @@ class LegoRace : public LegoWorld {
|
||||
m_maps[p_index] = p_map;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000dae0
|
||||
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
|
||||
|
||||
void Enable(MxBool p_enable) override; // vtable+0x68
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10015cc0
|
||||
// LegoRace::`scalar deleting destructor'
|
||||
|
||||
|
||||
@ -34,9 +34,7 @@ class LegoRaceActor : public virtual LegoAnimActor {
|
||||
MxU32 VTable0x90(float p_time, Matrix4& p_matrix) override; // vtable+0x90
|
||||
MxResult HitActor(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
||||
|
||||
// FUNCTION: LEGO1 0x10014aa0
|
||||
// FUNCTION: BETA10 0x100ca038
|
||||
virtual MxResult FUN_10014aa0() { return SUCCESS; }
|
||||
virtual MxResult FUN_10014aa0();
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10012c10
|
||||
// LegoRaceActor::`vbase destructor'
|
||||
|
||||
@ -25,81 +25,6 @@ struct SkeletonKickPhase {
|
||||
MxU8 m_userState; // 0x0c
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d58a0 LegoRaceActor
|
||||
// VTABLE: LEGO1 0x100d58a8 LegoAnimActor
|
||||
// VTABLE: LEGO1 0x100d58b8 LegoPathActor
|
||||
// VTABLE: LEGO1 0x100d5984 LegoRaceMap
|
||||
// VTABLE: LEGO1 0x100d5988 LegoCarRaceActor
|
||||
// VTABLE: BETA10 0x101be6ec LegoRaceActor
|
||||
// VTABLE: BETA10 0x101be6f0 LegoAnimActor
|
||||
// VTABLE: BETA10 0x101be708 LegoPathActor
|
||||
// VTABLE: BETA10 0x101be7f8 LegoRaceMap
|
||||
// VTABLE: BETA10 0x101be800 LegoCarRaceActor
|
||||
// SIZE 0x200
|
||||
class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap {
|
||||
public:
|
||||
LegoRaceCar();
|
||||
~LegoRaceCar() override;
|
||||
|
||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||
|
||||
// FUNCTION: LEGO1 0x100142a0
|
||||
// FUNCTION: BETA10 0x100cd500
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f0548
|
||||
return "LegoRaceCar";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100142c0
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, LegoRaceCar::ClassName()) || LegoCarRaceActor::IsA(p_name);
|
||||
}
|
||||
|
||||
void ParseAction(char* p_extra) override; // vtable+0x20
|
||||
void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
|
||||
MxU32 VTable0x6c(
|
||||
LegoPathBoundary* p_boundary,
|
||||
Vector3& p_v1,
|
||||
Vector3& p_v2,
|
||||
float p_f1,
|
||||
float p_f2,
|
||||
Vector3& p_v3
|
||||
) override; // vtable+0x6c
|
||||
void Animate(float p_time) override; // vtable+0x70
|
||||
MxResult HitActor(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
||||
void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4)
|
||||
override; // vtable+0x98
|
||||
MxResult VTable0x9c() override; // vtable+0x9c
|
||||
|
||||
virtual void SetMaxLinearVelocity(float p_maxLinearVelocity);
|
||||
virtual void FUN_10012ff0(float p_param);
|
||||
virtual MxU32 HandleSkeletonKicks(float p_param1);
|
||||
|
||||
static void FUN_10012de0();
|
||||
static void FUN_10012e00();
|
||||
static void FUN_10013670();
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10014240
|
||||
// LegoRaceCar::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
undefined m_userState; // 0x54
|
||||
float m_unk0x58; // 0x58
|
||||
Mx3DPointFloat m_unk0x5c; // 0x5c
|
||||
|
||||
// Names verified by BETA10 0x100cb4a9
|
||||
LegoAnimActorStruct* m_skelKick1Anim; // 0x70
|
||||
LegoAnimActorStruct* m_skelKick2Anim; // 0x74
|
||||
|
||||
// Name verified by BETA10 0x100cb4f0
|
||||
LegoPathBoundary* m_kick1B; // 0x78
|
||||
|
||||
// Name verified by BETA10 0x100cb537
|
||||
LegoPathBoundary* m_kick2B; // 0x7c
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d5a08 LegoCarRaceActor
|
||||
// VTABLE: LEGO1 0x100d5a28 LegoRaceActor
|
||||
// VTABLE: LEGO1 0x100d5a30 LegoAnimActor
|
||||
@ -134,19 +59,25 @@ class LegoJetski : public LegoJetskiRaceActor, public LegoRaceMap {
|
||||
|
||||
void ParseAction(char* p_extra) override; // vtable+0x20
|
||||
void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
|
||||
MxU32 VTable0x6c(
|
||||
LegoPathBoundary* p_boundary,
|
||||
Vector3& p_v1,
|
||||
Vector3& p_v2,
|
||||
float p_f1,
|
||||
float p_f2,
|
||||
Vector3& p_v3
|
||||
) override; // vtable+0x6c
|
||||
|
||||
// FUNCTION: LEGO1 0x10014150
|
||||
MxU32 VTable0x6c(LegoPathBoundary* p_boundary, Vector3& p_v1, Vector3& p_v2, float p_f1, float p_f2, Vector3& p_v3)
|
||||
override
|
||||
{
|
||||
return LegoJetskiRaceActor::VTable0x6c(p_boundary, p_v1, p_v2, p_f1, p_f2, p_v3);
|
||||
} // vtable+0x6c
|
||||
|
||||
void Animate(float p_time) override; // vtable+0x70
|
||||
MxResult HitActor(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
||||
void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4)
|
||||
override; // vtable+0x98
|
||||
MxResult VTable0x9c() override; // vtable+0x9c
|
||||
|
||||
// FUNCTION: LEGO1 0x100141d0
|
||||
void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) override
|
||||
{
|
||||
LegoJetskiRaceActor::SwitchBoundary(p_boundary, p_edge, p_unk0xe4);
|
||||
} // vtable+0x98
|
||||
|
||||
// FUNCTION: LEGO1 0x10014210
|
||||
MxResult VTable0x9c() override { return LegoJetskiRaceActor::VTable0x9c(); } // vtable+0x9c
|
||||
|
||||
virtual void FUN_100136f0(float p_worldSpeed);
|
||||
|
||||
@ -154,6 +85,88 @@ class LegoJetski : public LegoJetskiRaceActor, public LegoRaceMap {
|
||||
// LegoJetski::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d58a0 LegoRaceActor
|
||||
// VTABLE: LEGO1 0x100d58a8 LegoAnimActor
|
||||
// VTABLE: LEGO1 0x100d58b8 LegoPathActor
|
||||
// VTABLE: LEGO1 0x100d5984 LegoRaceMap
|
||||
// VTABLE: LEGO1 0x100d5988 LegoCarRaceActor
|
||||
// VTABLE: BETA10 0x101be6ec LegoRaceActor
|
||||
// VTABLE: BETA10 0x101be6f0 LegoAnimActor
|
||||
// VTABLE: BETA10 0x101be708 LegoPathActor
|
||||
// VTABLE: BETA10 0x101be7f8 LegoRaceMap
|
||||
// VTABLE: BETA10 0x101be800 LegoCarRaceActor
|
||||
// SIZE 0x200
|
||||
class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap {
|
||||
public:
|
||||
LegoRaceCar();
|
||||
~LegoRaceCar() override;
|
||||
|
||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||
|
||||
// FUNCTION: LEGO1 0x100142a0
|
||||
// FUNCTION: BETA10 0x100cd500
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f0548
|
||||
return "LegoRaceCar";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100142c0
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, LegoRaceCar::ClassName()) || LegoCarRaceActor::IsA(p_name);
|
||||
}
|
||||
|
||||
void ParseAction(char* p_extra) override; // vtable+0x20
|
||||
void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30
|
||||
|
||||
// FUNCTION: LEGO1 0x10014500
|
||||
// FUNCTION: BETA10 0x100cd5e0
|
||||
MxU32 VTable0x6c(LegoPathBoundary* p_boundary, Vector3& p_v1, Vector3& p_v2, float p_f1, float p_f2, Vector3& p_v3)
|
||||
override
|
||||
{
|
||||
return LegoCarRaceActor::VTable0x6c(p_boundary, p_v1, p_v2, p_f1, p_f2, p_v3);
|
||||
} // vtable+0x6c
|
||||
|
||||
void Animate(float p_time) override; // vtable+0x70
|
||||
MxResult HitActor(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
|
||||
|
||||
// FUNCTION: LEGO1 0x10014560
|
||||
// FUNCTION: BETA10 0x100cd660
|
||||
void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) override
|
||||
{
|
||||
LegoCarRaceActor::SwitchBoundary(p_boundary, p_edge, p_unk0xe4);
|
||||
} // vtable+0x98
|
||||
|
||||
MxResult VTable0x9c() override; // vtable+0x9c
|
||||
|
||||
virtual void SetMaxLinearVelocity(float p_maxLinearVelocity);
|
||||
virtual void FUN_10012ff0(float p_param);
|
||||
virtual MxU32 HandleSkeletonKicks(float p_param1);
|
||||
|
||||
static void FUN_10012de0();
|
||||
static void FUN_10012e00();
|
||||
static void FUN_10013670();
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10014240
|
||||
// LegoRaceCar::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
undefined m_userState; // 0x54
|
||||
float m_unk0x58; // 0x58
|
||||
Mx3DPointFloat m_unk0x5c; // 0x5c
|
||||
|
||||
// Names verified by BETA10 0x100cb4a9
|
||||
LegoAnimActorStruct* m_skelKick1Anim; // 0x70
|
||||
LegoAnimActorStruct* m_skelKick2Anim; // 0x74
|
||||
|
||||
// Name verified by BETA10 0x100cb4f0
|
||||
LegoPathBoundary* m_kick1B; // 0x78
|
||||
|
||||
// Name verified by BETA10 0x100cb537
|
||||
LegoPathBoundary* m_kick2B; // 0x7c
|
||||
};
|
||||
|
||||
// GLOBAL: LEGO1 0x100d5890
|
||||
// LegoRaceCar::`vbtable'{for `LegoCarRaceActor'}
|
||||
|
||||
|
||||
@ -84,22 +84,6 @@ class LegoState : public MxCore {
|
||||
// FUNCTION: LEGO1 0x10005f40
|
||||
~LegoState() override {}
|
||||
|
||||
// FUNCTION: LEGO1 0x100060d0
|
||||
// FUNCTION: BETA10 0x10017d20
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f01b8
|
||||
// STRING: BETA10 0x101dcdac
|
||||
return "LegoState";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100060e0
|
||||
// FUNCTION: BETA10 0x100a9000
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, LegoState::ClassName()) || MxCore::IsA(p_name);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10005f90
|
||||
virtual MxBool IsSerializable() { return TRUE; } // vtable+0x14
|
||||
|
||||
@ -116,6 +100,22 @@ class LegoState : public MxCore {
|
||||
return SUCCESS;
|
||||
} // vtable+0x1c
|
||||
|
||||
// FUNCTION: LEGO1 0x100060d0
|
||||
// FUNCTION: BETA10 0x10017d20
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
{
|
||||
// STRING: LEGO1 0x100f01b8
|
||||
// STRING: BETA10 0x101dcdac
|
||||
return "LegoState";
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100060e0
|
||||
// FUNCTION: BETA10 0x100a9000
|
||||
MxBool IsA(const char* p_name) const override // vtable+0x10
|
||||
{
|
||||
return !strcmp(p_name, LegoState::ClassName()) || MxCore::IsA(p_name);
|
||||
}
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10006160
|
||||
// LegoState::`scalar deleting destructor'
|
||||
};
|
||||
|
||||
@ -19,7 +19,7 @@ class LegoTextureInfo {
|
||||
static BOOL SetGroupTexture(Tgl::Mesh* pMesh, LegoTextureInfo* p_textureInfo);
|
||||
static BOOL GetGroupTexture(Tgl::Mesh* pMesh, LegoTextureInfo*& p_textureInfo);
|
||||
|
||||
LegoResult FUN_10066010(LegoU8* p_bits);
|
||||
LegoResult FUN_10066010(const LegoU8* p_bits);
|
||||
|
||||
// private:
|
||||
char* m_name; // 0x00
|
||||
|
||||
@ -102,7 +102,7 @@ class LegoWorld : public LegoEntity {
|
||||
MxCore* Find(const MxAtomId& p_atom, MxS32 p_entityId);
|
||||
|
||||
// FUNCTION: BETA10 0x1002b4f0
|
||||
LegoCameraController* GetCamera() { return m_cameraController; }
|
||||
LegoCameraController* GetCameraController() { return m_cameraController; }
|
||||
|
||||
LegoEntityList* GetEntityList() { return m_entityList; }
|
||||
LegoOmni::World GetWorldId() { return m_worldId; }
|
||||
|
||||
@ -148,6 +148,7 @@ class PizzaMissionState : public LegoState {
|
||||
// FUNCTION: BETA10 0x100ef850
|
||||
MxU32 GetUnknown0xb0() { return m_unk0xb0; }
|
||||
|
||||
// FUNCTION: BETA10 0x10088850
|
||||
MxS16 GetHighScore(MxU8 p_actorId) { return GetMission(p_actorId)->m_hiScore; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10039350
|
||||
|
||||
@ -15,6 +15,16 @@ class ScoreState : public LegoState {
|
||||
public:
|
||||
ScoreState() : m_playCubeTutorial(TRUE) {}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000de20
|
||||
MxBool IsSerializable() override { return FALSE; } // vtable+0x14
|
||||
|
||||
// FUNCTION: LEGO1 0x1000de30
|
||||
MxBool Reset() override
|
||||
{
|
||||
m_playCubeTutorial = TRUE;
|
||||
return TRUE;
|
||||
} // vtable+0x18
|
||||
|
||||
// FUNCTION: LEGO1 0x1000de40
|
||||
// FUNCTION: BETA10 0x100a7a70
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
@ -29,16 +39,6 @@ class ScoreState : public LegoState {
|
||||
return !strcmp(p_name, ScoreState::ClassName()) || LegoState::IsA(p_name);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000de20
|
||||
MxBool IsSerializable() override { return FALSE; } // vtable+0x14
|
||||
|
||||
// FUNCTION: LEGO1 0x1000de30
|
||||
MxBool Reset() override
|
||||
{
|
||||
m_playCubeTutorial = TRUE;
|
||||
return TRUE;
|
||||
} // vtable+0x18
|
||||
|
||||
MxBool GetTutorialFlag() { return m_playCubeTutorial; }
|
||||
void SetTutorialFlag(MxBool p_playCubeTutorial) { m_playCubeTutorial = p_playCubeTutorial; }
|
||||
|
||||
@ -59,6 +59,9 @@ class Score : public LegoWorld {
|
||||
~Score() override;
|
||||
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
||||
|
||||
// FUNCTION: LEGO1 0x100010b0
|
||||
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
|
||||
|
||||
// FUNCTION: LEGO1 0x100010c0
|
||||
// FUNCTION: BETA10 0x100f4f20
|
||||
const char* ClassName() const override // vtable+0x0c
|
||||
@ -78,14 +81,13 @@ class Score : public LegoWorld {
|
||||
|
||||
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
||||
void ReadyWorld() override; // vtable+0x50
|
||||
MxBool VTable0x5c() override; // vtable+0x5c
|
||||
MxBool Escape() override; // vtable+0x64
|
||||
void Enable(MxBool p_enable) override; // vtable+0x68
|
||||
|
||||
void Paint();
|
||||
MxLong FUN_10001510(MxEndActionNotificationParam& p_param);
|
||||
MxLong FUN_100016d0(LegoControlManagerNotificationParam& p_param);
|
||||
void FillArea(MxU32 i_activity, MxU32 i_actor, MxS16 score);
|
||||
void FillArea(MxS32 i_activity, MxS32 i_actor, MxS16 score);
|
||||
|
||||
protected:
|
||||
void DeleteScript();
|
||||
|
||||
@ -30,22 +30,28 @@ class TowTrackMissionState : public LegoState {
|
||||
|
||||
MxResult Serialize(LegoFile* p_file) override; // vtable+0x1c
|
||||
|
||||
// FUNCTION: BETA10 0x10088890
|
||||
MxS16 GetHighScore(MxU8 p_actorId)
|
||||
{
|
||||
switch (p_actorId) {
|
||||
case LegoActor::c_pepper:
|
||||
return m_peHighScore;
|
||||
break;
|
||||
case LegoActor::c_mama:
|
||||
return m_maHighScore;
|
||||
break;
|
||||
case LegoActor::c_papa:
|
||||
return m_paHighScore;
|
||||
break;
|
||||
case LegoActor::c_nick:
|
||||
return m_niHighScore;
|
||||
break;
|
||||
case LegoActor::c_laura:
|
||||
return m_laHighScore;
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x100f8530
|
||||
|
||||
@ -311,7 +311,7 @@ void Act2Actor::Animate(float p_time)
|
||||
local30 -= local60;
|
||||
local30.Unitize();
|
||||
|
||||
MxFloat dotproduct = local18.Dot(&local30, &local18);
|
||||
MxFloat dotproduct = local18.Dot(local30, local18);
|
||||
|
||||
if (dotproduct >= 0.0) {
|
||||
const MxFloat* pepperWorldPosition = roiPepper->GetWorldPosition();
|
||||
@ -444,6 +444,8 @@ MxS32 Act2Actor::VTable0xa0()
|
||||
{
|
||||
undefined4 newLocation;
|
||||
|
||||
assert(!m_grec);
|
||||
|
||||
CurrentWorld();
|
||||
MxU16 randomVal = rand() / (RAND_MAX / 2) + 1;
|
||||
|
||||
@ -613,9 +615,9 @@ MxU32 Act2Actor::FUN_10019700(MxFloat p_param)
|
||||
col2 = col3;
|
||||
col2 -= m_unk0x4c->GetROI()->GetWorldPosition();
|
||||
col2.Unitize();
|
||||
col0.EqualsCross(&col1, &col2);
|
||||
col0.EqualsCross(col1, col2);
|
||||
col0.Unitize();
|
||||
col1.EqualsCross(&col2, &col0);
|
||||
col1.EqualsCross(col2, col0);
|
||||
|
||||
assert(!m_cameraFlag);
|
||||
|
||||
@ -867,13 +869,3 @@ LegoEntity* Act2Actor::FUN_10019b90(MxBool* p_param)
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1001a180
|
||||
MxS32 Act2Actor::VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3)
|
||||
{
|
||||
if (m_unk0x1f) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return LegoAnimActor::VTable0x68(p_v1, p_v2, p_v3);
|
||||
}
|
||||
|
||||
@ -238,7 +238,7 @@ void Act3Cop::ParseAction(char* p_extra)
|
||||
|
||||
for (MxS32 j = 0; j < boundary->GetNumEdges(); j++) {
|
||||
Mx4DPointFloat* edgeNormal = boundary->GetEdgeNormal(j);
|
||||
if (point.Dot(edgeNormal, &point) + edgeNormal->index_operator(3) < -0.001) {
|
||||
if (point.Dot(*edgeNormal, point) + edgeNormal->index_operator(3) < -0.001) {
|
||||
MxTrace("Bad Act3 cop destination %d\n", i);
|
||||
break;
|
||||
}
|
||||
@ -246,8 +246,8 @@ void Act3Cop::ParseAction(char* p_extra)
|
||||
|
||||
Mx4DPointFloat* boundary0x14 = boundary->GetUnknown0x14();
|
||||
|
||||
if (point.Dot(&point, boundary0x14) + boundary0x14->index_operator(3) <= 0.001 &&
|
||||
point.Dot(&point, boundary0x14) + boundary0x14->index_operator(3) >= -0.001) {
|
||||
if (point.Dot(point, *boundary0x14) + boundary0x14->index_operator(3) <= 0.001 &&
|
||||
point.Dot(point, *boundary0x14) + boundary0x14->index_operator(3) >= -0.001) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -496,9 +496,9 @@ MxResult Act3Cop::FUN_10040360()
|
||||
v3 = v4;
|
||||
v3 -= vecUnk;
|
||||
v3.Unitize();
|
||||
v1.EqualsCross(&v2, &v3);
|
||||
v1.EqualsCross(v2, v3);
|
||||
v1.Unitize();
|
||||
v2.EqualsCross(&v3, &v1);
|
||||
v2.EqualsCross(v3, v1);
|
||||
|
||||
VTable0x9c();
|
||||
}
|
||||
@ -628,9 +628,9 @@ void Act3Brickster::Animate(float p_time)
|
||||
localc = local20;
|
||||
localc -= m_pInfo->m_position;
|
||||
localc.Unitize();
|
||||
local14.EqualsCross(&local28, &localc);
|
||||
local14.EqualsCross(local28, localc);
|
||||
local14.Unitize();
|
||||
local28.EqualsCross(&localc, &local14);
|
||||
local28.EqualsCross(localc, local14);
|
||||
|
||||
assert(!m_cameraFlag);
|
||||
|
||||
@ -675,9 +675,9 @@ void Act3Brickster::Animate(float p_time)
|
||||
|
||||
local80 -= m_unk0x3c;
|
||||
local80.Unitize();
|
||||
local88.EqualsCross(&local9c, &local80);
|
||||
local88.EqualsCross(local9c, local80);
|
||||
local88.Unitize();
|
||||
local9c.EqualsCross(&local80, &local88);
|
||||
local9c.EqualsCross(local80, local88);
|
||||
|
||||
assert(!m_cameraFlag);
|
||||
|
||||
@ -991,9 +991,9 @@ MxResult Act3Brickster::FUN_100417c0()
|
||||
v3 = v4;
|
||||
v3 -= vecUnk;
|
||||
v3.Unitize();
|
||||
v1.EqualsCross(&v2, &v3);
|
||||
v1.EqualsCross(v2, v3);
|
||||
v1.Unitize();
|
||||
v2.EqualsCross(&v3, &v1);
|
||||
v2.EqualsCross(v3, v1);
|
||||
|
||||
VTable0x9c();
|
||||
|
||||
@ -1087,7 +1087,7 @@ MxS32 Act3Brickster::FUN_10042300()
|
||||
local18 = local64[local1c];
|
||||
local18 -= local38;
|
||||
|
||||
if (maxE == NULL || (local18.Dot(&local94, &local18) < 0.0f && local78 < local98)) {
|
||||
if (maxE == NULL || (local18.Dot(local94, local18) < 0.0f && local78 < local98)) {
|
||||
maxE = e;
|
||||
m_boundary = boundaries[i];
|
||||
local78 = local98;
|
||||
|
||||
@ -227,12 +227,12 @@ MxResult Act3Ammo::FUN_10053db0(float p_param1, const Matrix4& p_param2)
|
||||
|
||||
local14[1] = local14[2] = 0.0f;
|
||||
local14[0] = 1.0f;
|
||||
local3c.EqualsCross(&localc, &local14);
|
||||
local3c.EqualsCross(localc, local14);
|
||||
|
||||
if (local3c.Unitize() != 0) {
|
||||
local14[0] = local14[1] = 0.0f;
|
||||
local14[2] = 1.0f;
|
||||
local3c.EqualsCross(&localc, &local14);
|
||||
local3c.EqualsCross(localc, local14);
|
||||
|
||||
if (local3c.Unitize() != 0) {
|
||||
assert(0);
|
||||
@ -240,7 +240,7 @@ MxResult Act3Ammo::FUN_10053db0(float p_param1, const Matrix4& p_param2)
|
||||
}
|
||||
}
|
||||
|
||||
local14.EqualsCross(&local3c, &localc);
|
||||
local14.EqualsCross(local3c, localc);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@ -340,17 +340,17 @@ void Act3Ammo::Animate(float p_time)
|
||||
local184 = *m_boundary->GetUnknown0x14();
|
||||
local17c[0] = 1.0f;
|
||||
local17c[1] = local17c[2] = 0.0f;
|
||||
local174.EqualsCross(&local17c, &local184);
|
||||
local174.EqualsCross(local17c, local184);
|
||||
local174.Unitize();
|
||||
local17c.EqualsCross(&local184, &local174);
|
||||
local17c.EqualsCross(local184, local174);
|
||||
}
|
||||
else {
|
||||
local17c = *m_boundary->GetUnknown0x14();
|
||||
local184[0] = 1.0f;
|
||||
local184[1] = local184[2] = 0.0f;
|
||||
local174.EqualsCross(&local17c, &local184);
|
||||
local174.EqualsCross(local17c, local184);
|
||||
local174.Unitize();
|
||||
local184.EqualsCross(&local174, &local17c);
|
||||
local184.EqualsCross(local174, local17c);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -21,11 +21,16 @@
|
||||
|
||||
DECOMP_SIZE_ASSERT(Helicopter, 0x230)
|
||||
DECOMP_SIZE_ASSERT(HelicopterState, 0x0c)
|
||||
DECOMP_SIZE_ASSERT(Vector2, 0x08)
|
||||
DECOMP_SIZE_ASSERT(Vector3, 0x08)
|
||||
DECOMP_SIZE_ASSERT(Vector4, 0x08)
|
||||
DECOMP_SIZE_ASSERT(Mx3DPointFloat, 0x14)
|
||||
DECOMP_SIZE_ASSERT(Mx4DPointFloat, 0x18)
|
||||
DECOMP_SIZE_ASSERT(Matrix4, 0x08)
|
||||
DECOMP_SIZE_ASSERT(MxMatrix, 0x48)
|
||||
|
||||
// FUNCTION: LEGO1 0x10001e60
|
||||
// FUNCTION: BETA10 0x1002a0d0
|
||||
Helicopter::Helicopter()
|
||||
{
|
||||
m_maxLinearVel = 60;
|
||||
@ -39,6 +44,7 @@ Helicopter::~Helicopter()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100032c0
|
||||
// FUNCTION: BETA10 0x1002a16d
|
||||
MxResult Helicopter::Create(MxDSAction& p_dsAction)
|
||||
{
|
||||
MxResult result = IslePathActor::Create(p_dsAction);
|
||||
@ -48,6 +54,8 @@ MxResult Helicopter::Create(MxDSAction& p_dsAction)
|
||||
((Act3*) m_world)->SetHelicopter(this);
|
||||
}
|
||||
|
||||
assert(m_world);
|
||||
|
||||
if (m_world != NULL) {
|
||||
m_world->Add(this);
|
||||
}
|
||||
@ -57,6 +65,7 @@ MxResult Helicopter::Create(MxDSAction& p_dsAction)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10003320
|
||||
// FUNCTION: BETA10 0x1002a240
|
||||
void Helicopter::CreateState()
|
||||
{
|
||||
m_state = (HelicopterState*) GameState()->GetState("HelicopterState");
|
||||
@ -66,8 +75,11 @@ void Helicopter::CreateState()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10003360
|
||||
// FUNCTION: BETA10 0x1002a29a
|
||||
void Helicopter::Exit()
|
||||
{
|
||||
assert(UserActor() == this);
|
||||
|
||||
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
|
||||
SpawnPlayer(
|
||||
LegoGameState::e_unk40,
|
||||
@ -90,7 +102,7 @@ void Helicopter::Exit()
|
||||
}
|
||||
}
|
||||
|
||||
m_state->SetUnknown8(0);
|
||||
m_state->m_unk0x08 = 0;
|
||||
RemoveFromCurrentWorld(m_script, IsleScript::c_HelicopterDashboard_Bitmap);
|
||||
RemoveFromCurrentWorld(m_script, IsleScript::c_HelicopterArms_Ctl);
|
||||
RemoveFromCurrentWorld(m_script, IsleScript::c_Helicopter_TakeOff_Ctl);
|
||||
@ -106,6 +118,7 @@ void Helicopter::Exit()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10003480
|
||||
// FUNCTION: BETA10 0x1002a3db
|
||||
MxLong Helicopter::HandleClick()
|
||||
{
|
||||
if (!FUN_1003ef60()) {
|
||||
@ -114,6 +127,7 @@ MxLong Helicopter::HandleClick()
|
||||
|
||||
if (!m_world) {
|
||||
m_world = CurrentWorld();
|
||||
assert(m_world);
|
||||
}
|
||||
|
||||
AnimationManager()->FUN_1005f6d0(FALSE);
|
||||
@ -159,6 +173,8 @@ MxLong Helicopter::HandleClick()
|
||||
MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param)
|
||||
{
|
||||
MxLong result = 0;
|
||||
|
||||
assert(m_world);
|
||||
MxAtomId script;
|
||||
|
||||
switch (GameState()->GetCurrentAct()) {
|
||||
@ -195,9 +211,10 @@ MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param)
|
||||
break;
|
||||
}
|
||||
|
||||
Act1State* state = (Act1State*) GameState()->GetState("Act1State");
|
||||
Act1State* act1State = (Act1State*) GameState()->GetState("Act1State");
|
||||
assert(act1State);
|
||||
if (m_state->m_unk0x08 == 0) {
|
||||
state->m_unk0x018 = 4;
|
||||
act1State->m_unk0x018 = 4;
|
||||
m_state->m_unk0x08 = 1;
|
||||
m_world->RemoveActor(this);
|
||||
InvokeAction(Extra::ActionType::e_start, script, IsleScript::c_HelicopterTakeOff_Anim, NULL);
|
||||
@ -234,11 +251,11 @@ MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param)
|
||||
|
||||
assert(m_pathController);
|
||||
|
||||
if (m_world && m_world->GetCamera()) {
|
||||
if (m_world && m_world->GetCameraController()) {
|
||||
Mx3DPointFloat location, direction, lookat;
|
||||
|
||||
location = m_world->GetCamera()->GetWorldLocation();
|
||||
direction = m_world->GetCamera()->GetWorldDirection();
|
||||
location = m_world->GetCameraController()->GetWorldLocation();
|
||||
direction = m_world->GetCameraController()->GetWorldDirection();
|
||||
|
||||
lookat = direction;
|
||||
lookat *= 3.0f;
|
||||
@ -246,9 +263,9 @@ MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param)
|
||||
|
||||
Mx3DPointFloat v68, va4, up;
|
||||
Mx3DPointFloat v90(0, 1, 0);
|
||||
v68 = m_world->GetCamera()->GetWorldUp();
|
||||
va4.EqualsCross(&v68, &direction);
|
||||
up.EqualsCross(&va4, &v90);
|
||||
v68 = m_world->GetCameraController()->GetWorldUp();
|
||||
va4.EqualsCross(v68, direction);
|
||||
up.EqualsCross(va4, v90);
|
||||
|
||||
if (isPizza) {
|
||||
if (((Act3*) m_world)->ShootPizza(m_pathController, location, direction, up) != SUCCESS) {
|
||||
@ -291,14 +308,17 @@ MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10003c20
|
||||
// FUNCTION: BETA10 0x1002ab4c
|
||||
MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param)
|
||||
{
|
||||
MxU32 ret = 0;
|
||||
MxLong result = 0;
|
||||
|
||||
switch (m_state->GetUnkown8()) {
|
||||
switch (m_state->m_unk0x08) {
|
||||
case 1: {
|
||||
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
|
||||
((Act1State*) GameState()->GetState("Act1State"))->SetUnknown18(4);
|
||||
Act1State* act1State = (Act1State*) GameState()->GetState("Act1State");
|
||||
assert(act1State);
|
||||
act1State->m_unk0x018 = 4;
|
||||
SpawnPlayer(
|
||||
LegoGameState::e_unk42,
|
||||
TRUE,
|
||||
@ -313,25 +333,17 @@ MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param)
|
||||
);
|
||||
}
|
||||
|
||||
m_state->SetUnknown8(2);
|
||||
m_state->m_unk0x08 = 2;
|
||||
|
||||
MxMatrix matrix;
|
||||
matrix.SetIdentity();
|
||||
|
||||
float s = sin(0.5235987901687622); // PI / 6, 30 deg
|
||||
float c = cos(0.5235987901687622); // PI / 6, 30 deg
|
||||
|
||||
float matrixCopy[4][4];
|
||||
memcpy(matrixCopy, matrix.GetData(), sizeof(matrixCopy));
|
||||
for (MxS32 i = 0; i < 4; i++) {
|
||||
matrix.GetData()[i][1] = matrixCopy[i][1] * c - matrixCopy[i][2] * s;
|
||||
matrix.GetData()[i][2] = matrixCopy[i][2] * c + matrixCopy[i][1] * s;
|
||||
}
|
||||
|
||||
matrix.RotateX(0.5235987901687622); // PI / 6, 30 deg
|
||||
Vector3 at(matrix[3]), dir(matrix[2]), up(matrix[1]);
|
||||
m_world->GetCamera()->SetWorldTransform(at, dir, up);
|
||||
|
||||
assert(m_world && m_world->GetCameraController());
|
||||
m_world->GetCameraController()->SetWorldTransform(at, dir, up);
|
||||
FUN_10010c30();
|
||||
ret = 1;
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
@ -340,10 +352,14 @@ MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param)
|
||||
|
||||
Vector3 at(matrix[3]), dir(matrix[2]), up(matrix[1]);
|
||||
at[1] = 1.25;
|
||||
m_world->GetCamera()->SetWorldTransform(at, dir, up);
|
||||
|
||||
assert(m_world && m_world->GetCameraController());
|
||||
m_world->GetCameraController()->SetWorldTransform(at, dir, up);
|
||||
|
||||
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
|
||||
((Act1State*) GameState()->GetState("Act1State"))->SetUnknown18(0);
|
||||
Act1State* act1State = (Act1State*) GameState()->GetState("Act1State");
|
||||
assert(act1State);
|
||||
act1State->m_unk0x018 = 0;
|
||||
SpawnPlayer(
|
||||
LegoGameState::e_unk41,
|
||||
TRUE,
|
||||
@ -358,13 +374,13 @@ MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param)
|
||||
);
|
||||
}
|
||||
|
||||
m_state->SetUnknown8(0);
|
||||
ret = 1;
|
||||
m_state->m_unk0x08 = 0;
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
return result;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10003e90
|
||||
@ -403,14 +419,14 @@ void Helicopter::Animate(float p_time)
|
||||
Vector3 v3(m_unk0x1a8[3]);
|
||||
|
||||
mat.SetIdentity();
|
||||
m_unk0x1f4.BETA_1004aaa0(mat, f2);
|
||||
m_unk0x1f4.InterpolateToMatrix(mat, f2);
|
||||
|
||||
v2 = v3;
|
||||
v2 -= v1;
|
||||
v2 *= f2;
|
||||
v2 += v1;
|
||||
|
||||
m_world->GetCamera()->FUN_100123e0(mat, 0);
|
||||
m_world->GetCameraController()->FUN_100123e0(mat, 0);
|
||||
}
|
||||
else {
|
||||
if (m_state->m_unk0x08 == 4) {
|
||||
@ -420,7 +436,7 @@ void Helicopter::Animate(float p_time)
|
||||
((Act3*) m_world)->FUN_10073430();
|
||||
}
|
||||
|
||||
LegoPathActor::m_actorState = c_disabled;
|
||||
SetActorState(c_disabled);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -441,7 +457,7 @@ void Helicopter::FUN_100042a0(const Matrix4& p_matrix)
|
||||
Vector3 vec5(m_unk0x1a8[2]); // EDI
|
||||
Vector3 vec6(m_unk0x1a8[3]); // locala0 // esp+0x28
|
||||
|
||||
m_world->GetCamera()->FUN_100123b0(local48);
|
||||
m_world->GetCameraController()->FUN_100123b0(local48);
|
||||
m_unk0x1a8.SetIdentity();
|
||||
local90 = p_matrix;
|
||||
|
||||
@ -453,9 +469,9 @@ void Helicopter::FUN_100042a0(const Matrix4& p_matrix)
|
||||
vec5[0] = vec5[2] = 0.0f;
|
||||
vec5[1] = -1.0f;
|
||||
|
||||
vec3.EqualsCross(&vec4, &vec5);
|
||||
vec3.EqualsCross(vec4, vec5);
|
||||
vec3.Unitize();
|
||||
vec4.EqualsCross(&vec5, &vec3);
|
||||
vec4.EqualsCross(vec5, vec3);
|
||||
vec6 = vec2;
|
||||
|
||||
local90 = m_unk0x1a8;
|
||||
@ -466,9 +482,8 @@ void Helicopter::FUN_100042a0(const Matrix4& p_matrix)
|
||||
|
||||
m_unk0x1f0 = Timer()->GetTime();
|
||||
|
||||
m_unk0x1f4.BETA_1004a9f0(local48);
|
||||
m_unk0x1f4.FUN_10004620(local90);
|
||||
m_unk0x1f4.FUN_10004520();
|
||||
m_unk0x1f4.SetStartEnd(local48, local90);
|
||||
m_unk0x1f4.NormalizeDirection();
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10004640
|
||||
|
||||
@ -133,7 +133,7 @@ void IslePathActor::Exit()
|
||||
for (j = 0; j < m_boundary->GetNumEdges(); j++) {
|
||||
Mx4DPointFloat& normal = *m_boundary->GetEdgeNormal(j);
|
||||
|
||||
if (local20.Dot(&normal, &local20) + normal[3] < -0.001) {
|
||||
if (local20.Dot(normal, local20) + normal[3] < -0.001) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -645,7 +645,7 @@ void IslePathActor::FUN_1001b660()
|
||||
Vector3 up(transform[2]);
|
||||
|
||||
up *= -1.0f;
|
||||
position.EqualsCross(&direction, &up);
|
||||
position.EqualsCross(direction, up);
|
||||
m_roi->FUN_100a58f0(transform);
|
||||
m_roi->VTable0x14();
|
||||
}
|
||||
|
||||
@ -624,6 +624,7 @@ MxResult PizzaMissionState::Serialize(LegoFile* p_file)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10039510
|
||||
// FUNCTION: BETA10 0x100eed45
|
||||
PizzaMissionState::Mission* PizzaMissionState::GetMission(MxU8 p_actorId)
|
||||
{
|
||||
for (MxS16 i = 0; i < 5; i++) {
|
||||
|
||||
@ -358,7 +358,7 @@ void LegoCarBuild::VTable0x70()
|
||||
|
||||
m_unk0x2a0 = sqrt((MxDouble) DISTSQRD2(m_unk0x290, m_unk0x298));
|
||||
|
||||
m_unk0x25c.BETA_1004a9b0(m_unk0x178, m_unk0x208);
|
||||
m_unk0x25c.SetStartEnd(m_unk0x178, m_unk0x208);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10023130
|
||||
@ -406,7 +406,7 @@ void LegoCarBuild::FUN_10023130(MxLong p_x, MxLong p_y)
|
||||
|
||||
MxFloat local1c = sqrt((double) (NORMSQRD2(local20))) / m_unk0x2a0;
|
||||
|
||||
m_unk0x25c.BETA_1004aaa0(local78, local1c);
|
||||
m_unk0x25c.InterpolateToMatrix(local78, local1c);
|
||||
|
||||
local78[3][0] = m_unk0x178[3][0] + local18[0];
|
||||
local78[3][1] = m_unk0x178[3][1] + local18[1];
|
||||
@ -1203,7 +1203,7 @@ undefined4 LegoCarBuild::FUN_10024c20(LegoEventNotificationParam* p_param)
|
||||
assert(destWorld);
|
||||
m_buildState->m_animationState = LegoVehicleBuildState::e_exiting;
|
||||
|
||||
if (m_unk0x258->AllPartsPlaced()) {
|
||||
if (!m_unk0x258->AllPartsPlaced()) {
|
||||
FUN_100243a0();
|
||||
}
|
||||
else {
|
||||
@ -1211,8 +1211,7 @@ undefined4 LegoCarBuild::FUN_10024c20(LegoEventNotificationParam* p_param)
|
||||
}
|
||||
}
|
||||
else {
|
||||
MxNotificationParam param;
|
||||
NotificationManager()->Send(this, param);
|
||||
NotificationManager()->Send(this, MxNotificationParam());
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@ -1239,9 +1238,8 @@ undefined4 LegoCarBuild::FUN_10024c20(LegoEventNotificationParam* p_param)
|
||||
FUN_10024ef0();
|
||||
}
|
||||
else {
|
||||
MxNotificationParam p;
|
||||
// In BETA10, NotificationManager->Send() also takes __FILE__ and __LINE__ arguments
|
||||
NotificationManager()->Send(this, p);
|
||||
NotificationManager()->Send(this, MxNotificationParam());
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -550,7 +550,7 @@ void LegoCarBuildAnimPresenter::RotateAroundYAxis(MxFloat p_angle)
|
||||
Mx4DPointFloat newRotation;
|
||||
|
||||
additionalRotation.NormalizeQuaternion();
|
||||
newRotation.EqualsHamiltonProduct(¤tRotation, &additionalRotation);
|
||||
newRotation.EqualsHamiltonProduct(currentRotation, additionalRotation);
|
||||
|
||||
if (newRotation[3] < 0.9999) {
|
||||
rotationKey->FUN_100739a0(TRUE);
|
||||
|
||||
@ -8,88 +8,88 @@ DECOMP_SIZE_ASSERT(LegoActorLOD, 0x58)
|
||||
|
||||
// GLOBAL: LEGO1 0x100da3b0
|
||||
LegoActorLOD g_actorLODs[] = {
|
||||
{"top", "top", 0, 0.000267, 0.780808, -0.01906, 0.951612, -0.461166, -0.002794, -0.299442, 0.4617,
|
||||
1.56441, 0.261321, 0, 0, 0, 0, 0, 1, 0, 1, 0},
|
||||
{"body", "body", LegoActorLOD::c_flag1,
|
||||
0.00158332, 0.401828, -0.00048697,
|
||||
0.408071, -0.287507, 0.150419,
|
||||
-0.147452, 0.289219, 0.649774,
|
||||
0.14258, -0.00089, 0.436353,
|
||||
0.007277, 0, 0,
|
||||
1, 0, 1,
|
||||
0},
|
||||
{"infohat", "infohat", LegoActorLOD::c_flag2,
|
||||
0, -0.00938, -0.01955,
|
||||
0.35, -0.231822, -0.140237,
|
||||
-0.320954, 0.234149, 0.076968,
|
||||
0.249083, 0.000191, 1.519793,
|
||||
0.001767, 0, 0,
|
||||
1, 0, 1,
|
||||
0},
|
||||
{"top", "top", 0, 0.000267f, 0.780808f, -0.01906f, 0.951612f, -0.461166f, -0.002794f, -0.299442f, 0.4617f,
|
||||
1.56441f, 0.261321f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f},
|
||||
{"body", "body", LegoActorLOD::c_flag1,
|
||||
0.00158332f, 0.401828f, -0.00048697f,
|
||||
0.408071f, -0.287507f, 0.150419f,
|
||||
-0.147452f, 0.289219f, 0.649774f,
|
||||
0.14258f, -0.00089f, 0.436353f,
|
||||
0.007277f, 0.0f, 0.0f,
|
||||
1.0f, 0.0f, 1.0f,
|
||||
0.0f},
|
||||
{"infohat", "infohat", LegoActorLOD::c_flag2,
|
||||
0.0f, -0.00938f, -0.01955f,
|
||||
0.35f, -0.231822f, -0.140237f,
|
||||
-0.320954f, 0.234149f, 0.076968f,
|
||||
0.249083f, 0.000191f, 1.519793f,
|
||||
0.001767f, 0.0f, 0.0f,
|
||||
1.0f, 0.0f, 1.0f,
|
||||
0.0f},
|
||||
{"infogron", "infogron", LegoActorLOD::c_flag2,
|
||||
0, 0.11477, 0.00042,
|
||||
0.26, -0.285558, -0.134391,
|
||||
-0.142231, 0.285507, 0.152986,
|
||||
0.143071, -0.00089, 0.436353,
|
||||
0.007277, 0, 0,
|
||||
1, 0, 1,
|
||||
0},
|
||||
{"head", "head", LegoActorLOD::c_flag1,
|
||||
0, -0.03006, 0,
|
||||
0.3, -0.189506, -0.209665,
|
||||
-0.189824, 0.189532, 0.228822,
|
||||
0.194945, -0.00105, 1.293115,
|
||||
0.001781, 0, 0,
|
||||
1, 0, 1,
|
||||
0},
|
||||
{"arm-lft", "arm-lft", LegoActorLOD::c_flag2,
|
||||
-0.06815, -0.0973747, 0.0154655,
|
||||
0.237, -0.137931, -0.282775,
|
||||
-0.105316, 0.000989, 0.100221,
|
||||
0.140759, -0.225678, 0.963312,
|
||||
0.023286, -0.003031, -0.017187,
|
||||
0.999848, 0.173622, 0.984658,
|
||||
0.017453},
|
||||
{"arm-rt", "arm-rt", LegoActorLOD::c_flag2,
|
||||
0.0680946, -0.097152, 0.0152722,
|
||||
0.237, 0.00141, -0.289604,
|
||||
-0.100831, 0.138786, 0.09291,
|
||||
0.145437, 0.223494, 0.963583,
|
||||
0.018302, 0, 0,
|
||||
1, -0.173648, 0.984808,
|
||||
0},
|
||||
{"claw-lft", "claw-lft", LegoActorLOD::c_flag2,
|
||||
0.000773381, -0.101422, -0.0237761,
|
||||
0.15, -0.089838, -0.246208,
|
||||
-0.117735, 0.091275, 0.000263,
|
||||
0.07215, -0.341869, 0.700355,
|
||||
0.092779, 0.000001, 0.000003,
|
||||
1, 0.190812, 0.981627,
|
||||
-0.000003},
|
||||
{"claw-rt", "claw-lft", LegoActorLOD::c_flag2,
|
||||
0.000773381, -0.101422, -0.0237761,
|
||||
0.15, -0.095016, -0.245349,
|
||||
-0.117979, 0.086528, 0.00067,
|
||||
0.069743, 0.343317, 0.69924,
|
||||
0.096123, 0.00606, -0.034369,
|
||||
0.999391, -0.190704, 0.981027,
|
||||
0.034894},
|
||||
{"leg-lft", "leg", LegoActorLOD::c_flag2,
|
||||
0.00433584, -0.177404, -0.0313928,
|
||||
0.33, -0.129782, -0.440428,
|
||||
-0.184207, 0.13817, 0.118415,
|
||||
0.122607, -0.156339, 0.436087,
|
||||
0.006822, 0, 0,
|
||||
1, 0, 1,
|
||||
0},
|
||||
{"leg-rt", "leg", LegoActorLOD::c_flag2,
|
||||
0.00433584, -0.177404, -0.0313928,
|
||||
0.33, -0.132864, -0.437138,
|
||||
-0.183944, 0.134614, 0.12043,
|
||||
0.121888, 0.151154, 0.436296,
|
||||
0.007373, 0, 0,
|
||||
1, 0, 1,
|
||||
0}
|
||||
0.0f, 0.11477f, 0.00042f,
|
||||
0.26f, -0.285558f, -0.134391f,
|
||||
-0.142231f, 0.285507f, 0.152986f,
|
||||
0.143071f, -0.00089f, 0.436353f,
|
||||
0.007277f, 0.0f, 0.0f,
|
||||
1.0f, 0.0f, 1.0f,
|
||||
0.0f},
|
||||
{"head", "head", LegoActorLOD::c_flag1,
|
||||
0.0f, -0.03006f, 0.0f,
|
||||
0.3f, -0.189506f, -0.209665f,
|
||||
-0.189824f, 0.189532f, 0.228822f,
|
||||
0.194945f, -0.00105f, 1.293115f,
|
||||
0.001781f, 0.0f, 0.0f,
|
||||
1.0f, 0.0f, 1.0f,
|
||||
0.0f},
|
||||
{"arm-lft", "arm-lft", LegoActorLOD::c_flag2,
|
||||
-0.06815f, -0.0973747f, 0.0154655f,
|
||||
0.237f, -0.137931f, -0.282775f,
|
||||
-0.105316f, 0.000989f, 0.100221f,
|
||||
0.140759f, -0.225678f, 0.963312f,
|
||||
0.023286f, -0.003031f, -0.017187f,
|
||||
0.999848f, 0.173622f, 0.984658f,
|
||||
0.017453f},
|
||||
{"arm-rt", "arm-rt", LegoActorLOD::c_flag2,
|
||||
0.0680946f, -0.097152f, 0.0152722f,
|
||||
0.237f, 0.00141f, -0.289604f,
|
||||
-0.100831f, 0.138786f, 0.09291f,
|
||||
0.145437f, 0.223494f, 0.963583f,
|
||||
0.018302f, 0.0f, 0.0f,
|
||||
1.0f, -0.173648f, 0.984808f,
|
||||
0.0f},
|
||||
{"claw-lft", "claw-lft", LegoActorLOD::c_flag2,
|
||||
0.000773381f, -0.101422f, -0.0237761f,
|
||||
0.15f, -0.089838f, -0.246208f,
|
||||
-0.117735f, 0.091275f, 0.000263f,
|
||||
0.07215f, -0.341869f, 0.700355f,
|
||||
0.092779f, 0.000001f, 0.000003f,
|
||||
1.0f, 0.190812f, 0.981627f,
|
||||
-0.000003f},
|
||||
{"claw-rt", "claw-lft", LegoActorLOD::c_flag2,
|
||||
0.000773381f, -0.101422f, -0.0237761f,
|
||||
0.15f, -0.095016f, -0.245349f,
|
||||
-0.117979f, 0.086528f, 0.00067f,
|
||||
0.069743f, 0.343317f, 0.69924f,
|
||||
0.096123f, 0.00606f, -0.034369f,
|
||||
0.999391f, -0.190704f, 0.981027f,
|
||||
0.034894f},
|
||||
{"leg-lft", "leg", LegoActorLOD::c_flag2,
|
||||
0.00433584f, -0.177404f, -0.0313928f,
|
||||
0.33f, -0.129782f, -0.440428f,
|
||||
-0.184207f, 0.13817f, 0.118415f,
|
||||
0.122607f, -0.156339f, 0.436087f,
|
||||
0.006822f, 0.0f, 0.0f,
|
||||
1.0f, 0.0f, 1.0f,
|
||||
0.0f},
|
||||
{"leg-rt", "leg", LegoActorLOD::c_flag2,
|
||||
0.00433584f, -0.177404f, -0.0313928f,
|
||||
0.33f, -0.132864f, -0.437138f,
|
||||
-0.183944f, 0.134614f, 0.12043f,
|
||||
0.121888f, 0.151154f, 0.436296f,
|
||||
0.007373f, 0.0f, 0.0f,
|
||||
1.0f, 0.0f, 1.0f,
|
||||
0.0f}
|
||||
};
|
||||
|
||||
// GLOBAL: LEGO1 0x100da778
|
||||
|
||||
@ -1596,7 +1596,7 @@ MxU16 LegoAnimationManager::FUN_10062110(
|
||||
if (GetViewManager()->IsBoundingBoxInFrustum(p_roi->GetWorldBoundingBox())) {
|
||||
Mx3DPointFloat direction(p_roi->GetWorldDirection());
|
||||
|
||||
if (direction.Dot(&direction, &p_direction) > 0.707) {
|
||||
if (direction.Dot(direction, p_direction) > 0.707) {
|
||||
Mx3DPointFloat position(p_roi->GetWorldPosition());
|
||||
|
||||
position -= p_position;
|
||||
@ -2342,11 +2342,11 @@ MxBool LegoAnimationManager::FUN_10063b90(LegoWorld* p_world, LegoExtraActor* p_
|
||||
{
|
||||
const char** cycles = g_cycles[g_characters[p_characterId].m_unk0x16];
|
||||
const char* vehicleWC;
|
||||
LegoLocomotionAnimPresenter* presenter;
|
||||
|
||||
if (g_characters[p_characterId].m_vehicleId >= 0 && g_vehicles[g_characters[p_characterId].m_vehicleId].m_unk0x04 &&
|
||||
(vehicleWC = cycles[10]) != NULL) {
|
||||
LegoLocomotionAnimPresenter* presenter =
|
||||
(LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
|
||||
presenter = (LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
|
||||
|
||||
if (presenter != NULL) {
|
||||
presenter->FUN_1006d680(p_actor, 1.7f);
|
||||
@ -2359,8 +2359,7 @@ MxBool LegoAnimationManager::FUN_10063b90(LegoWorld* p_world, LegoExtraActor* p_
|
||||
else {
|
||||
vehicleWC = cycles[p_mood];
|
||||
if (vehicleWC != NULL) {
|
||||
LegoLocomotionAnimPresenter* presenter =
|
||||
(LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
|
||||
presenter = (LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
|
||||
|
||||
if (presenter != NULL) {
|
||||
presenter->FUN_1006d680(p_actor, 0.7f);
|
||||
@ -2373,8 +2372,7 @@ MxBool LegoAnimationManager::FUN_10063b90(LegoWorld* p_world, LegoExtraActor* p_
|
||||
|
||||
vehicleWC = cycles[p_mood + 4];
|
||||
if (vehicleWC != NULL) {
|
||||
LegoLocomotionAnimPresenter* presenter =
|
||||
(LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
|
||||
presenter = (LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
|
||||
|
||||
if (presenter != NULL) {
|
||||
presenter->FUN_1006d680(p_actor, 4.0f);
|
||||
@ -2387,8 +2385,7 @@ MxBool LegoAnimationManager::FUN_10063b90(LegoWorld* p_world, LegoExtraActor* p_
|
||||
|
||||
vehicleWC = cycles[p_mood + 7];
|
||||
if (vehicleWC != NULL) {
|
||||
LegoLocomotionAnimPresenter* presenter =
|
||||
(LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
|
||||
presenter = (LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
|
||||
|
||||
if (presenter != NULL) {
|
||||
presenter->FUN_1006d680(p_actor, 0.0f);
|
||||
@ -2481,6 +2478,8 @@ MxBool LegoAnimationManager::FUN_10064010(LegoPathBoundary* p_boundary, LegoUnkn
|
||||
Vector3* v1 = p_edge->CWVertex(*p_boundary);
|
||||
Vector3* v2 = p_edge->CCWVertex(*p_boundary);
|
||||
|
||||
assert(v1 && v2);
|
||||
|
||||
p1 = *v2;
|
||||
p1 -= *v1;
|
||||
p1 *= p_destScale;
|
||||
@ -2493,7 +2492,12 @@ MxBool LegoAnimationManager::FUN_10064010(LegoPathBoundary* p_boundary, LegoUnkn
|
||||
boundingBox.Min() -= vec;
|
||||
boundingBox.Max() = p1;
|
||||
boundingBox.Max() += vec;
|
||||
return GetViewManager()->IsBoundingBoxInFrustum(boundingBox) == FALSE;
|
||||
|
||||
if (GetViewManager()->IsBoundingBoxInFrustum(boundingBox) == FALSE) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10064120
|
||||
@ -2525,7 +2529,7 @@ MxBool LegoAnimationManager::FUN_10064120(LegoLocation::Boundary* p_boundary, Mx
|
||||
for (i = 0; i < numEdges; i++) {
|
||||
e = (LegoUnknown100db7f4*) boundary->GetEdges()[i];
|
||||
e->FUN_1002ddc0(*boundary, vec);
|
||||
float dot = vec.Dot(&direction, &vec);
|
||||
float dot = vec.Dot(direction, vec);
|
||||
|
||||
if (dot > local4c) {
|
||||
local50 = e;
|
||||
@ -2793,8 +2797,8 @@ void LegoAnimationManager::FUN_100648f0(LegoTranInfo* p_tranInfo, MxLong p_unk0x
|
||||
LegoLocation* location = NavController()->GetLocation(p_tranInfo->m_location);
|
||||
if (location != NULL) {
|
||||
CalcLocalTransform(location->m_position, location->m_direction, location->m_up, m_unk0x484);
|
||||
m_unk0x4cc.BETA_1004a9b0(m_unk0x43c, m_unk0x484);
|
||||
m_unk0x4cc.FUN_10004520();
|
||||
m_unk0x4cc.SetStartEnd(m_unk0x43c, m_unk0x484);
|
||||
m_unk0x4cc.NormalizeDirection();
|
||||
}
|
||||
else {
|
||||
p_tranInfo->m_flags &= ~LegoTranInfo::c_bit1;
|
||||
@ -2828,7 +2832,7 @@ void LegoAnimationManager::FUN_10064b50(MxLong p_time)
|
||||
sub[1] = (m_unk0x484[3][1] - m_unk0x43c[3][1]) * und;
|
||||
sub[2] = (m_unk0x484[3][2] - m_unk0x43c[3][2]) * und;
|
||||
|
||||
m_unk0x4cc.BETA_1004aaa0(mat, (float) (p_time - m_unk0x434) / 1000.0f);
|
||||
m_unk0x4cc.InterpolateToMatrix(mat, (float) (p_time - m_unk0x434) / 1000.0f);
|
||||
|
||||
VPV3(mat[3], m_unk0x43c[3], sub);
|
||||
mat[3][3] = 1.0f;
|
||||
|
||||
@ -121,9 +121,9 @@ void LegoBackgroundColor::SetLightColor(float p_r, float p_g, float p_b)
|
||||
{
|
||||
if (!VideoManager()->GetVideoParam().Flags().GetF2bit0()) {
|
||||
// TODO: Computed constants based on what?
|
||||
p_r *= 4.3478260869565215;
|
||||
p_g *= 1.5873015873015872;
|
||||
p_b *= 1.1764705882352942;
|
||||
p_r *= 1. / 0.23;
|
||||
p_g *= 1. / 0.63;
|
||||
p_b *= 1. / 0.85;
|
||||
|
||||
if (p_r > 1.0) {
|
||||
p_r = 1.0;
|
||||
|
||||
@ -809,7 +809,7 @@ MxResult LegoBuildingManager::FUN_10030630()
|
||||
for (MxS32 j = 0; j < boundary->GetNumEdges(); j++) {
|
||||
Mx4DPointFloat* normal = boundary->GetEdgeNormal(j);
|
||||
|
||||
if (position.Dot(normal, &position) + (*normal).index_operator(3) < -0.001) {
|
||||
if (position.Dot(*normal, position) + (*normal).index_operator(3) < -0.001) {
|
||||
MxTrace(
|
||||
"Building %d shot location (%g, %g, %g) is not in boundary %s.\n",
|
||||
i,
|
||||
@ -826,8 +826,8 @@ MxResult LegoBuildingManager::FUN_10030630()
|
||||
if (g_buildingInfo[i].m_boundary != NULL) {
|
||||
Mx4DPointFloat& unk0x14 = *g_buildingInfo[i].m_boundary->GetUnknown0x14();
|
||||
|
||||
if (position.Dot(&position, &unk0x14) + unk0x14.index_operator(3) > 0.001 ||
|
||||
position.Dot(&position, &unk0x14) + unk0x14.index_operator(3) < -0.001) {
|
||||
if (position.Dot(position, unk0x14) + unk0x14.index_operator(3) > 0.001 ||
|
||||
position.Dot(position, unk0x14) + unk0x14.index_operator(3) < -0.001) {
|
||||
|
||||
g_buildingInfo[i].m_y =
|
||||
-((position[0] * unk0x14.index_operator(0) + unk0x14.index_operator(3) +
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include "roi/legolod.h"
|
||||
#include "viewmanager/viewmanager.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <vec.h>
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoCharacter, 0x08)
|
||||
@ -52,10 +53,11 @@ MxU32 g_unk0x100fc4f0 = 0;
|
||||
LegoActorInfo g_actorInfo[66];
|
||||
|
||||
// FUNCTION: LEGO1 0x10082a20
|
||||
// FUNCTION: BETA10 0x10073c60
|
||||
LegoCharacterManager::LegoCharacterManager()
|
||||
{
|
||||
m_characters = new LegoCharacterMap();
|
||||
Init();
|
||||
Init(); // DECOMP: inlined here in BETA10
|
||||
|
||||
m_customizeAnimFile = new CustomizeAnimFileVariable("CUSTOMIZE_ANIM_FILE");
|
||||
VariableTable()->SetVariable(m_customizeAnimFile);
|
||||
@ -228,8 +230,9 @@ const char* LegoCharacterManager::GetActorName(MxS32 p_index)
|
||||
if (p_index < sizeOfArray(g_actorInfo)) {
|
||||
return g_actorInfo[p_index].m_name;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100834f0
|
||||
@ -244,9 +247,9 @@ MxU32 LegoCharacterManager::GetNumActors()
|
||||
LegoROI* LegoCharacterManager::GetActorROI(const char* p_name, MxBool p_createEntity)
|
||||
{
|
||||
LegoCharacter* character = NULL;
|
||||
LegoCharacterMap::iterator it = m_characters->find(const_cast<char*>(p_name));
|
||||
LegoCharacterMap::const_iterator it = m_characters->find(const_cast<char*>(p_name));
|
||||
|
||||
if (it != m_characters->end()) {
|
||||
if (!(it == m_characters->end())) {
|
||||
character = (*it).second;
|
||||
character->AddRef();
|
||||
}
|
||||
@ -254,13 +257,9 @@ LegoROI* LegoCharacterManager::GetActorROI(const char* p_name, MxBool p_createEn
|
||||
if (character == NULL) {
|
||||
LegoROI* roi = CreateActorROI(p_name);
|
||||
|
||||
if (roi == NULL) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
roi->SetVisibility(FALSE);
|
||||
|
||||
if (roi != NULL) {
|
||||
roi->SetVisibility(FALSE);
|
||||
|
||||
character = new LegoCharacter(roi);
|
||||
char* name = new char[strlen(p_name) + 1];
|
||||
|
||||
@ -276,7 +275,6 @@ LegoROI* LegoCharacterManager::GetActorROI(const char* p_name, MxBool p_createEn
|
||||
VideoManager()->Get3DManager()->Add(*character->m_roi);
|
||||
}
|
||||
|
||||
done:
|
||||
if (character != NULL) {
|
||||
if (p_createEntity && character->m_roi->GetEntity() == NULL) {
|
||||
LegoExtraActor* actor = new LegoExtraActor();
|
||||
@ -289,15 +287,15 @@ LegoROI* LegoCharacterManager::GetActorROI(const char* p_name, MxBool p_createEn
|
||||
|
||||
return character->m_roi;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10083b20
|
||||
// FUNCTION: BETA10 0x10074608
|
||||
MxBool LegoCharacterManager::Exists(const char* p_name)
|
||||
{
|
||||
LegoCharacter* character = NULL;
|
||||
LegoCharacterMap::iterator it = m_characters->find(const_cast<char*>(p_name));
|
||||
|
||||
if (it != m_characters->end()) {
|
||||
@ -454,6 +452,7 @@ void LegoCharacterManager::RemoveROI(LegoROI* p_roi)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10084030
|
||||
// FUNCTION: BETA10 0x10074e4f
|
||||
LegoROI* LegoCharacterManager::CreateActorROI(const char* p_key)
|
||||
{
|
||||
MxBool success = FALSE;
|
||||
@ -601,7 +600,7 @@ LegoROI* LegoCharacterManager::CreateActorROI(const char* p_key)
|
||||
|
||||
// FUNCTION: LEGO1 0x100849a0
|
||||
// FUNCTION: BETA10 0x10075b51
|
||||
MxBool LegoCharacterManager::FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_textureInfo)
|
||||
MxBool LegoCharacterManager::FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_texture)
|
||||
{
|
||||
LegoResult result = SUCCESS;
|
||||
LegoROI* head = FindChildROI(p_roi, g_actorLODs[c_headLOD].m_name);
|
||||
@ -610,24 +609,30 @@ MxBool LegoCharacterManager::FUN_100849a0(LegoROI* p_roi, LegoTextureInfo* p_tex
|
||||
char lodName[256];
|
||||
|
||||
ViewLODList* lodList = GetViewLODListManager()->Lookup(g_actorLODs[c_headLOD].m_parentName);
|
||||
assert(lodList);
|
||||
|
||||
MxS32 lodSize = lodList->Size();
|
||||
sprintf(lodName, "%s%s%d", p_roi->GetName(), "head", g_unk0x100fc4e8++);
|
||||
ViewLODList* dupLodList = GetViewLODListManager()->Create(lodName, lodSize);
|
||||
assert(dupLodList);
|
||||
|
||||
Tgl::Renderer* renderer = VideoManager()->GetRenderer();
|
||||
|
||||
if (p_textureInfo == NULL) {
|
||||
if (p_texture == NULL) {
|
||||
LegoActorInfo* info = GetActorInfo(p_roi->GetName());
|
||||
assert(info);
|
||||
|
||||
LegoActorInfo::Part& part = info->m_parts[c_headPart];
|
||||
p_textureInfo = TextureContainer()->Get(part.m_unk0x10[part.m_unk0x0c[part.m_unk0x14]]);
|
||||
p_texture = TextureContainer()->Get(part.m_unk0x10[part.m_unk0x0c[part.m_unk0x14]]);
|
||||
assert(p_texture);
|
||||
}
|
||||
|
||||
for (MxS32 i = 0; i < lodSize; i++) {
|
||||
LegoLOD* lod = (LegoLOD*) (*lodList)[i];
|
||||
LegoLOD* clone = lod->Clone(renderer);
|
||||
|
||||
if (p_textureInfo != NULL) {
|
||||
clone->FUN_100aad70(p_textureInfo);
|
||||
if (p_texture != NULL) {
|
||||
clone->FUN_100aad70(p_texture);
|
||||
}
|
||||
|
||||
dupLodList->PushBack(clone);
|
||||
@ -672,6 +677,7 @@ LegoExtraActor* LegoCharacterManager::GetExtraActor(const char* p_name)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10084c60
|
||||
// FUNCTION: BETA10 0x10075ede
|
||||
LegoActorInfo* LegoCharacterManager::GetActorInfo(const char* p_name)
|
||||
{
|
||||
MxU32 i;
|
||||
@ -685,11 +691,13 @@ LegoActorInfo* LegoCharacterManager::GetActorInfo(const char* p_name)
|
||||
if (i < sizeOfArray(g_actorInfo)) {
|
||||
return &g_actorInfo[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10084cb0
|
||||
// FUNCTION: BETA10 0x10075f66
|
||||
LegoActorInfo* LegoCharacterManager::GetActorInfo(LegoROI* p_roi)
|
||||
{
|
||||
MxU32 i;
|
||||
@ -703,21 +711,24 @@ LegoActorInfo* LegoCharacterManager::GetActorInfo(LegoROI* p_roi)
|
||||
if (i < sizeOfArray(g_actorInfo)) {
|
||||
return &g_actorInfo[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10084cf0
|
||||
// FUNCTION: BETA10 0x10075fe2
|
||||
LegoROI* LegoCharacterManager::FindChildROI(LegoROI* p_roi, const char* p_name)
|
||||
{
|
||||
#ifdef COMPAT_MODE
|
||||
CompoundObject::const_iterator it;
|
||||
#else
|
||||
CompoundObject::iterator it;
|
||||
#endif
|
||||
|
||||
const CompoundObject* comp = p_roi->GetComp();
|
||||
|
||||
#ifdef COMPAT_MODE
|
||||
for (CompoundObject::const_iterator it = comp->begin(); !(it == comp->end()); it++) {
|
||||
#else
|
||||
for (CompoundObject::iterator it = comp->begin(); !(it == comp->end()); it++) {
|
||||
#endif
|
||||
for (it = comp->begin(); it != comp->end(); it++) {
|
||||
LegoROI* roi = (LegoROI*) *it;
|
||||
|
||||
if (!strcmpi(p_name, roi->GetName())) {
|
||||
@ -911,11 +922,13 @@ MxU32 LegoCharacterManager::GetAnimationId(LegoROI* p_roi)
|
||||
if (info != NULL) {
|
||||
return info->m_move + g_characterAnimationId;
|
||||
}
|
||||
|
||||
return 0;
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10085140
|
||||
// FUNCTION: BETA10 0x10076855
|
||||
MxU32 LegoCharacterManager::GetSoundId(LegoROI* p_roi, MxBool p_und)
|
||||
{
|
||||
LegoActorInfo* info = GetActorInfo(p_roi);
|
||||
@ -927,8 +940,9 @@ MxU32 LegoCharacterManager::GetSoundId(LegoROI* p_roi, MxBool p_und)
|
||||
if (info != NULL) {
|
||||
return info->m_sound + g_unk0x100fc4d8;
|
||||
}
|
||||
|
||||
return 0;
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10085180
|
||||
@ -940,8 +954,9 @@ MxU8 LegoCharacterManager::GetMood(LegoROI* p_roi)
|
||||
if (info != NULL) {
|
||||
return info->m_mood;
|
||||
}
|
||||
|
||||
return 0;
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100851a0
|
||||
|
||||
@ -1,5 +1,36 @@
|
||||
#include "legoobjectfactory.h"
|
||||
|
||||
// Headers need to be included in a certain order to match the original binary.
|
||||
// Some of the following headers were probably not directly included,
|
||||
// but were included from one of the higher level classes. We should attempt
|
||||
// to reverse engineer the inclusion "graph" at some point. Until then, to maintain
|
||||
// correct order in the binary, we include them in the order we want here.
|
||||
// clang-format off
|
||||
#include "mxpresenter.h"
|
||||
#include "legoentity.h"
|
||||
#include "legopathactor.h"
|
||||
// The below header inclusions should be sound.
|
||||
#include "legoloopinganimpresenter.h"
|
||||
#include "mxcompositemediapresenter.h"
|
||||
#include "legoactorpresenter.h"
|
||||
#include "legomodelpresenter.h"
|
||||
#include "legotexturepresenter.h"
|
||||
#include "legopartpresenter.h"
|
||||
#include "legoactioncontrolpresenter.h"
|
||||
#include "lego3dwavepresenter.h"
|
||||
#include "jetskirace.h"
|
||||
#include "carrace.h"
|
||||
#include "score.h"
|
||||
#include "legoact2.h"
|
||||
#include "helicopter.h"
|
||||
#include "act2policestation.h"
|
||||
#include "act3.h"
|
||||
#include "doors.h"
|
||||
#include "pizzeria.h"
|
||||
#include "buildings.h"
|
||||
#include "jukebox.h"
|
||||
// clang-format on
|
||||
|
||||
#include "act2actor.h"
|
||||
#include "act2brick.h"
|
||||
#include "act2genactor.h"
|
||||
|
||||
@ -145,7 +145,7 @@ MxResult LegoPlantManager::FUN_10026410()
|
||||
for (MxS32 j = 0; j < boundary->GetNumEdges(); j++) {
|
||||
Mx4DPointFloat* normal = boundary->GetEdgeNormal(j);
|
||||
|
||||
if (position.Dot(normal, &position) + (*normal).index_operator(3) < -0.001) {
|
||||
if (position.Dot(*normal, position) + (*normal).index_operator(3) < -0.001) {
|
||||
MxTrace(
|
||||
"Plant %d shot location (%g, %g, %g) is not in boundary %s.\n",
|
||||
i,
|
||||
@ -162,8 +162,8 @@ MxResult LegoPlantManager::FUN_10026410()
|
||||
if (g_plantInfo[i].m_boundary != NULL) {
|
||||
Mx4DPointFloat& unk0x14 = *g_plantInfo[i].m_boundary->GetUnknown0x14();
|
||||
|
||||
if (position.Dot(&position, &unk0x14) + unk0x14.index_operator(3) > 0.001 ||
|
||||
position.Dot(&position, &unk0x14) + unk0x14.index_operator(3) < -0.001) {
|
||||
if (position.Dot(position, unk0x14) + unk0x14.index_operator(3) > 0.001 ||
|
||||
position.Dot(position, unk0x14) + unk0x14.index_operator(3) < -0.001) {
|
||||
|
||||
g_plantInfo[i].m_y =
|
||||
-((position[0] * unk0x14.index_operator(0) + unk0x14.index_operator(3) +
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -71,7 +71,7 @@ LegoTextureInfo* LegoTextureInfo::Create(const char* p_name, LegoTexture* p_text
|
||||
desc.ddpfPixelFormat.dwRGBBitCount = 8;
|
||||
|
||||
MxS32 i;
|
||||
LegoU8* bits;
|
||||
const LegoU8* bits;
|
||||
MxU8* surface;
|
||||
|
||||
if (pDirectDraw->CreateSurface(&desc, &textureInfo->m_surface, NULL) != DD_OK) {
|
||||
@ -186,7 +186,7 @@ BOOL LegoTextureInfo::GetGroupTexture(Tgl::Mesh* pMesh, LegoTextureInfo*& p_text
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10066010
|
||||
LegoResult LegoTextureInfo::FUN_10066010(LegoU8* p_bits)
|
||||
LegoResult LegoTextureInfo::FUN_10066010(const LegoU8* p_bits)
|
||||
{
|
||||
if (m_surface != NULL && m_texture != NULL) {
|
||||
DDSURFACEDESC desc;
|
||||
@ -195,7 +195,7 @@ LegoResult LegoTextureInfo::FUN_10066010(LegoU8* p_bits)
|
||||
|
||||
if (m_surface->Lock(NULL, &desc, 0, NULL) == DD_OK) {
|
||||
MxU8* surface = (MxU8*) desc.lpSurface;
|
||||
LegoU8* bits = p_bits;
|
||||
const LegoU8* bits = p_bits;
|
||||
|
||||
if (desc.dwWidth == desc.lPitch) {
|
||||
memcpy(desc.lpSurface, p_bits, desc.dwWidth * desc.dwHeight);
|
||||
|
||||
@ -381,7 +381,7 @@ void NotifyEntity(const char* p_filename, MxS32 p_entityId, LegoEntity* p_sender
|
||||
// FUNCTION: LEGO1 0x1003eab0
|
||||
void SetCameraControllerFromIsle()
|
||||
{
|
||||
InputManager()->SetCamera(FindWorld(*g_isleScript, IsleScript::c__Isle)->GetCamera());
|
||||
InputManager()->SetCamera(FindWorld(*g_isleScript, IsleScript::c__Isle)->GetCameraController());
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1003eae0
|
||||
@ -709,7 +709,7 @@ void WriteDefaultTexture(LegoFile* p_file, const char* p_name)
|
||||
}
|
||||
else {
|
||||
MxU8* surface = (MxU8*) desc.lpSurface;
|
||||
LegoU8* bits = image->GetBits();
|
||||
const LegoU8* bits = image->GetBits();
|
||||
|
||||
for (MxS32 i = 0; i < desc.dwHeight; i++) {
|
||||
memcpy(surface, bits, desc.dwWidth);
|
||||
|
||||
@ -54,7 +54,8 @@ MxResult MxTransitionManager::GetDDrawSurfaceFromVideoManager() // vtable+0x14
|
||||
// FUNCTION: LEGO1 0x1004bac0
|
||||
MxResult MxTransitionManager::Tickle()
|
||||
{
|
||||
if (m_animationSpeed + m_systemTime > timeGetTime()) {
|
||||
MxULong time = m_animationSpeed + m_systemTime;
|
||||
if (time > timeGetTime()) {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -127,7 +127,7 @@ void LegoActor::SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2)
|
||||
if (p_roi) {
|
||||
const char* name = p_roi->GetName();
|
||||
|
||||
for (MxU32 i = 1; i <= sizeOfArray(g_actorNames) - 1; i++) {
|
||||
for (MxU32 i = 1; i <= sizeOfArray(g_actorNames) - 2; i++) {
|
||||
if (!strcmpi(name, g_actorNames[i])) {
|
||||
m_type = e_actor;
|
||||
m_actorId = i;
|
||||
|
||||
@ -42,21 +42,21 @@ void LegoEntity::ResetWorldTransform(MxBool p_cameraFlag)
|
||||
{
|
||||
LegoWorld* world = CurrentWorld();
|
||||
|
||||
if (world != NULL && world->GetCamera() != NULL) {
|
||||
if (world != NULL && world->GetCameraController() != NULL) {
|
||||
m_cameraFlag = p_cameraFlag;
|
||||
|
||||
if (m_cameraFlag) {
|
||||
world->GetCamera()->SetEntity(this);
|
||||
world->GetCamera()->SetWorldTransform(
|
||||
world->GetCameraController()->SetEntity(this);
|
||||
world->GetCameraController()->SetWorldTransform(
|
||||
Mx3DPointFloat(0.0F, 1.25F, 0.0F),
|
||||
Mx3DPointFloat(0.0F, 0.0F, 1.0F),
|
||||
Mx3DPointFloat(0.0F, 1.0F, 0.0F)
|
||||
);
|
||||
}
|
||||
else {
|
||||
if (world->GetCamera()->GetEntity() == this) {
|
||||
world->GetCamera()->SetEntity(NULL);
|
||||
world->GetCamera()->SetWorldTransform(
|
||||
if (world->GetCameraController()->GetEntity() == this) {
|
||||
world->GetCameraController()->SetEntity(NULL);
|
||||
world->GetCameraController()->SetWorldTransform(
|
||||
Mx3DPointFloat(0.0F, 0.0F, 0.0F),
|
||||
Mx3DPointFloat(0.0F, 0.0F, 1.0F),
|
||||
Mx3DPointFloat(0.0F, 1.0F, 0.0F)
|
||||
@ -72,10 +72,10 @@ void LegoEntity::SetWorldTransform(const Vector3& p_location, const Vector3& p_d
|
||||
{
|
||||
LegoWorld* world = CurrentWorld();
|
||||
|
||||
if (world != NULL && world->GetCamera() != NULL) {
|
||||
if (world != NULL && world->GetCameraController() != NULL) {
|
||||
m_cameraFlag = TRUE;
|
||||
world->GetCamera()->SetEntity(this);
|
||||
world->GetCamera()->SetWorldTransform(p_location, p_direction, p_up);
|
||||
world->GetCameraController()->SetEntity(this);
|
||||
world->GetCameraController()->SetWorldTransform(p_location, p_direction, p_up);
|
||||
}
|
||||
}
|
||||
|
||||
@ -193,8 +193,8 @@ void LegoEntity::FUN_10010c30()
|
||||
{
|
||||
LegoWorld* world = CurrentWorld();
|
||||
|
||||
if (m_cameraFlag && world && world->GetCamera() && m_roi) {
|
||||
world->GetCamera()->FUN_100123e0(m_roi->GetLocal2World(), 1);
|
||||
if (m_cameraFlag && world && world->GetCameraController() && m_roi) {
|
||||
world->GetCameraController()->FUN_100123e0(m_roi->GetLocal2World(), 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -90,7 +90,7 @@ MxS32 LegoJetskiRaceActor::VTable0x1c(LegoPathBoundary* p_boundary, LegoEdge* p_
|
||||
LERP3(a, *v1, *v2, m_unk0xe4);
|
||||
|
||||
m_destEdge->FUN_1002ddc0(*m_boundary, bbb);
|
||||
c.EqualsCross(&bbb, m_boundary->GetUnknown0x14());
|
||||
c.EqualsCross(bbb, *m_boundary->GetUnknown0x14());
|
||||
c.Unitize();
|
||||
|
||||
Mx3DPointFloat worldDirection(m_roi->GetWorldDirection());
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -30,6 +30,11 @@
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoNavController, 0x70)
|
||||
|
||||
// MSVC 4.20 didn't define a macro for this key
|
||||
#ifndef VK_OEM_MINUS
|
||||
#define VK_OEM_MINUS 0xBD
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef M_PI
|
||||
@ -109,7 +114,7 @@ char g_debugPassword[] = "OGEL";
|
||||
char* g_currentInput = g_debugPassword;
|
||||
|
||||
// GLOBAL: LEGO1 0x100f66cc
|
||||
MxS32 g_unk0x100f66cc = -1;
|
||||
MxS32 g_nextCharacter = -1;
|
||||
|
||||
// GLOBAL: LEGO1 0x100f66d0
|
||||
MxBool g_enableMusic = TRUE;
|
||||
@ -542,8 +547,8 @@ MxResult LegoNavController::ProcessJoystickInput(MxBool& p_und)
|
||||
if (povPosition >= 0) {
|
||||
LegoWorld* world = CurrentWorld();
|
||||
|
||||
if (world && world->GetCamera()) {
|
||||
world->GetCamera()->FUN_10012320(DTOR(povPosition));
|
||||
if (world && world->GetCameraController()) {
|
||||
world->GetCameraController()->FUN_10012320(DTOR(povPosition));
|
||||
p_und = TRUE;
|
||||
}
|
||||
}
|
||||
@ -582,29 +587,33 @@ MxResult LegoNavController::ProcessKeyboardInput()
|
||||
m_unk0x6c = TRUE;
|
||||
|
||||
MxS32 hMax;
|
||||
if ((keyFlags & LegoInputManager::c_leftOrRight) == LegoInputManager::c_left) {
|
||||
switch (keyFlags & LegoInputManager::c_leftOrRight) {
|
||||
case LegoInputManager::c_left:
|
||||
hMax = 0;
|
||||
}
|
||||
else if ((keyFlags & LegoInputManager::c_leftOrRight) == LegoInputManager::c_right) {
|
||||
break;
|
||||
case LegoInputManager::c_right:
|
||||
hMax = m_hMax;
|
||||
}
|
||||
else {
|
||||
break;
|
||||
default:
|
||||
m_targetRotationalVel = 0.0;
|
||||
m_rotationalAccel = m_maxRotationalDeccel;
|
||||
bool1 = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
MxS32 vMax;
|
||||
if ((keyFlags & LegoInputManager::c_upOrDown) == LegoInputManager::c_up) {
|
||||
switch (keyFlags & LegoInputManager::c_upOrDown) {
|
||||
case LegoInputManager::c_up:
|
||||
vMax = 0;
|
||||
}
|
||||
else if ((keyFlags & LegoInputManager::c_upOrDown) == LegoInputManager::c_down) {
|
||||
break;
|
||||
case LegoInputManager::c_down:
|
||||
vMax = m_vMax;
|
||||
}
|
||||
else {
|
||||
break;
|
||||
default:
|
||||
m_targetLinearVel = 0.0;
|
||||
m_linearAccel = m_maxLinearDeccel;
|
||||
bool2 = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
MxFloat val = keyFlags & LegoInputManager::c_bit5 ? 1.0f : 4.0f;
|
||||
@ -693,29 +702,29 @@ MxLong LegoNavController::Notify(MxParam& p_param)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'k':
|
||||
case 'm': { // Keys need to be uppercased to trigger this code, but seems dysfunctional
|
||||
if (g_unk0x100f66cc == -1) {
|
||||
g_unk0x100f66cc = 0;
|
||||
case VK_ADD:
|
||||
case VK_SUBTRACT: { // Cycles through characters and puts them in front of you
|
||||
if (g_nextCharacter == -1) {
|
||||
g_nextCharacter = 0;
|
||||
}
|
||||
else {
|
||||
CharacterManager()->ReleaseActor(CharacterManager()->GetActorName(g_unk0x100f66cc));
|
||||
CharacterManager()->ReleaseActor(CharacterManager()->GetActorName(g_nextCharacter));
|
||||
|
||||
if (key == 'k') {
|
||||
g_unk0x100f66cc++;
|
||||
if (g_unk0x100f66cc >= CharacterManager()->GetNumActors()) {
|
||||
g_unk0x100f66cc = 0;
|
||||
if (key == VK_ADD) {
|
||||
g_nextCharacter++;
|
||||
if (g_nextCharacter >= CharacterManager()->GetNumActors()) {
|
||||
g_nextCharacter = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
g_unk0x100f66cc--;
|
||||
if (g_unk0x100f66cc < 0) {
|
||||
g_unk0x100f66cc = CharacterManager()->GetNumActors() - 1;
|
||||
g_nextCharacter--;
|
||||
if (g_nextCharacter < 0) {
|
||||
g_nextCharacter = CharacterManager()->GetNumActors() - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LegoROI* roi = CharacterManager()->GetActorROI(CharacterManager()->GetActorName(g_unk0x100f66cc), TRUE);
|
||||
LegoROI* roi = CharacterManager()->GetActorROI(CharacterManager()->GetActorName(g_nextCharacter), TRUE);
|
||||
if (roi != NULL) {
|
||||
MxMatrix mat;
|
||||
ViewROI* viewRoi = LegoOmni::GetInstance()->GetVideoManager()->GetViewROI();
|
||||
@ -728,7 +737,7 @@ MxLong LegoNavController::Notify(MxParam& p_param)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case '{': { // Saves the game. Can't actually be triggered
|
||||
case VK_F12: { // Saves the game
|
||||
InfocenterState* state = (InfocenterState*) GameState()->GetState("InfocenterState");
|
||||
if (state && state->HasRegistered()) {
|
||||
GameState()->Save(0);
|
||||
@ -994,7 +1003,7 @@ MxLong LegoNavController::Notify(MxParam& p_param)
|
||||
case 'X':
|
||||
RealtimeView::SetUserMaxLOD(3.6);
|
||||
break;
|
||||
case 'j': {
|
||||
case VK_MULTIPLY: {
|
||||
MxU8 newActor = GameState()->GetActorId() + 1;
|
||||
|
||||
if (newActor > LegoActor::c_laura) {
|
||||
@ -1004,10 +1013,10 @@ MxLong LegoNavController::Notify(MxParam& p_param)
|
||||
GameState()->SetActorId(newActor);
|
||||
break;
|
||||
}
|
||||
case 'o':
|
||||
case VK_DIVIDE:
|
||||
GameState()->SetActorId(LegoActor::c_brickster);
|
||||
break;
|
||||
case 'z':
|
||||
case VK_F11:
|
||||
if (GameState()->m_isDirty) {
|
||||
GameState()->m_isDirty = FALSE;
|
||||
}
|
||||
@ -1015,7 +1024,7 @@ MxLong LegoNavController::Notify(MxParam& p_param)
|
||||
GameState()->m_isDirty = TRUE;
|
||||
}
|
||||
break;
|
||||
case 0xbd:
|
||||
case VK_OEM_MINUS:
|
||||
g_unk0x100f66bc = LegoAnimationManager::e_unk1;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -554,15 +554,15 @@ MxCore* LegoWorld::Find(const char* p_class, const char* p_name)
|
||||
MxPresenter* presenter;
|
||||
|
||||
while (cursor.Next(presenter)) {
|
||||
MxDSAction* action = presenter->GetAction();
|
||||
if (!strcmp(action->GetObjectName(), p_name)) {
|
||||
if (!strcmp(presenter->GetAction()->GetObjectName(), p_name)) {
|
||||
return presenter;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
else if (!strcmp(p_class, "MxEntity")) {
|
||||
|
||||
if (!strcmp(p_class, "MxEntity")) {
|
||||
LegoEntityListCursor cursor(m_entityList);
|
||||
LegoEntity* entity;
|
||||
|
||||
@ -579,7 +579,8 @@ MxCore* LegoWorld::Find(const char* p_class, const char* p_name)
|
||||
|
||||
return NULL;
|
||||
}
|
||||
else if (!strcmp(p_class, "LegoAnimPresenter")) {
|
||||
|
||||
if (!strcmp(p_class, "LegoAnimPresenter")) {
|
||||
MxPresenterListCursor cursor(&m_animPresenters);
|
||||
MxPresenter* presenter;
|
||||
|
||||
@ -591,20 +592,18 @@ MxCore* LegoWorld::Find(const char* p_class, const char* p_name)
|
||||
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
for (MxCoreSet::iterator it = m_set0xa8.begin(); it != m_set0xa8.end(); it++) {
|
||||
if ((*it)->IsA(p_class) && (*it)->IsA("MxPresenter")) {
|
||||
MxPresenter* presenter = (MxPresenter*) *it;
|
||||
MxDSAction* action = presenter->GetAction();
|
||||
|
||||
if (!strcmp(action->GetObjectName(), p_name)) {
|
||||
return *it;
|
||||
}
|
||||
for (MxCoreSet::iterator i = m_set0xa8.begin(); i != m_set0xa8.end(); i++) {
|
||||
if ((*i)->IsA(p_class) && (*i)->IsA("MxPresenter")) {
|
||||
assert(((MxPresenter*) (*i))->GetAction());
|
||||
|
||||
if (!strcmp(((MxPresenter*) (*i))->GetAction()->GetObjectName(), p_name)) {
|
||||
return *i;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10021790
|
||||
@ -783,7 +782,7 @@ MxResult LegoWorld::Tickle()
|
||||
ReadyWorld();
|
||||
return TRUE;
|
||||
case e_two:
|
||||
if (PresentersPending()) {
|
||||
if (PresentersPending() == TRUE) {
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
||||
@ -466,7 +466,7 @@ MxBool LegoInputManager::ProcessOneEvent(LegoEventNotificationParam& p_param)
|
||||
LegoROI* roi = PickROI(p_param.GetX(), p_param.GetY());
|
||||
p_param.SetROI(roi);
|
||||
|
||||
if (roi && roi->GetVisibility()) {
|
||||
if (roi && roi->GetVisibility() == TRUE) {
|
||||
for (OrientableROI* parent = roi->GetParentROI(); parent; parent = parent->GetParentROI()) {
|
||||
roi = (LegoROI*) parent;
|
||||
}
|
||||
|
||||
@ -183,6 +183,7 @@ void LegoAnimActor::ClearMaps()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1001c870
|
||||
// FUNCTION: BETA10 0x1003e7e4
|
||||
void LegoAnimActor::SetWorldSpeed(MxFloat p_worldSpeed)
|
||||
{
|
||||
if (p_worldSpeed < 0) {
|
||||
|
||||
@ -138,7 +138,7 @@ MxResult LegoExtraActor::FUN_1002aae0()
|
||||
Vector3 positionRef(m_unk0xec[3]);
|
||||
|
||||
dirRef *= -1.0f;
|
||||
rightRef.EqualsCross(&upRef, &dirRef);
|
||||
rightRef.EqualsCross(upRef, dirRef);
|
||||
|
||||
if (m_boundary == m_destEdge->m_faceA) {
|
||||
m_boundary = (LegoPathBoundary*) m_destEdge->m_faceB;
|
||||
@ -191,9 +191,10 @@ inline void LegoExtraActor::FUN_1002ad8a()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1002aba0
|
||||
// FUNCTION: BETA10 0x1008114a
|
||||
MxResult LegoExtraActor::HitActor(LegoPathActor* p_actor, MxBool p_bool)
|
||||
{
|
||||
if (p_actor->GetActorState() != c_initial || m_actorState != c_initial) {
|
||||
if (p_actor->GetActorState() != c_initial || GetActorState() != c_initial) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
@ -222,7 +223,7 @@ MxResult LegoExtraActor::HitActor(LegoPathActor* p_actor, MxBool p_bool)
|
||||
for (MxS32 i = 0; i < m_boundary->GetNumEdges(); i++) {
|
||||
Mx4DPointFloat* normal = m_boundary->GetEdgeNormal(i);
|
||||
|
||||
if (positionRef.Dot(normal, &positionRef) + (*normal)[3] < -0.001) {
|
||||
if (positionRef.Dot(*normal, positionRef) + normal->index_operator(3) < -0.001) {
|
||||
b = TRUE;
|
||||
break;
|
||||
}
|
||||
@ -232,41 +233,34 @@ MxResult LegoExtraActor::HitActor(LegoPathActor* p_actor, MxBool p_bool)
|
||||
m_roi->FUN_100a58f0(matrix2);
|
||||
m_roi->VTable0x14();
|
||||
FUN_1002ad8a();
|
||||
assert(m_roi);
|
||||
assert(SoundManager()->GetCacheSoundManager());
|
||||
SoundManager()->GetCacheSoundManager()->Play("crash5", m_roi->GetName(), FALSE);
|
||||
m_scheduledTime = Timer()->GetTime() + m_disAnim->GetDuration();
|
||||
m_prevWorldSpeed = m_worldSpeed;
|
||||
m_prevWorldSpeed = GetWorldSpeed();
|
||||
VTable0xc4();
|
||||
SetWorldSpeed(0);
|
||||
m_whichAnim = 1;
|
||||
m_actorState = c_one | c_noCollide;
|
||||
SetActorState(c_one | c_noCollide);
|
||||
}
|
||||
}
|
||||
|
||||
if (b) {
|
||||
LegoROI* roi = m_roi;
|
||||
LegoROI* roi = GetROI();
|
||||
assert(roi);
|
||||
SoundManager()->GetCacheSoundManager()->Play("crash5", m_roi->GetName(), FALSE);
|
||||
VTable0xc4();
|
||||
m_actorState = c_two | c_noCollide;
|
||||
SetActorState(c_two | c_noCollide);
|
||||
Mx3DPointFloat dir = p_actor->GetWorldDirection();
|
||||
MxMatrix matrix3 = MxMatrix(roi->GetLocal2World());
|
||||
Vector3 positionRef(matrix3[3]);
|
||||
positionRef += g_unk0x10104c18;
|
||||
roi->FUN_100a58f0(matrix3);
|
||||
|
||||
#ifdef COMPAT_MODE
|
||||
float dotX, dotZ;
|
||||
{
|
||||
Mx3DPointFloat tmp(1.0f, 0, 0);
|
||||
dotX = dir.Dot(&dir, &tmp);
|
||||
Mx3DPointFloat tmp2(0, 0, 1.0f);
|
||||
dotZ = dir.Dot(&dir, &tmp2);
|
||||
}
|
||||
#else
|
||||
float dotX = dir.Dot(&dir, &Mx3DPointFloat(1.0f, 0, 0));
|
||||
float dotZ = dir.Dot(&dir, &Mx3DPointFloat(0, 0, 1.0f));
|
||||
#endif
|
||||
float dotX = dir.Dot(dir, Mx3DPointFloat(1.0f, 0, 0));
|
||||
float dotZ = dir.Dot(dir, Mx3DPointFloat(0, 0, 1.0f));
|
||||
|
||||
if (abs(dotZ) < abs(dotX)) {
|
||||
if (fabs(dotZ) < fabs(dotX)) {
|
||||
m_axis = dotX > 0.0 ? e_posz : e_negz;
|
||||
}
|
||||
else {
|
||||
@ -463,9 +457,9 @@ MxU32 LegoExtraActor::VTable0x6c(
|
||||
Mx3DPointFloat local54(p_v1);
|
||||
|
||||
local54 -= local60;
|
||||
float local1c = p_v2.Dot(&p_v2, &p_v2);
|
||||
float local24 = p_v2.Dot(&p_v2, &local54) * 2.0f;
|
||||
float local20 = local54.Dot(&local54, &local54);
|
||||
float local1c = p_v2.Dot(p_v2, p_v2);
|
||||
float local24 = p_v2.Dot(p_v2, local54) * 2.0f;
|
||||
float local20 = local54.Dot(local54, local54);
|
||||
|
||||
if (m_unk0x15 != 0 && local20 < 10.0f) {
|
||||
return 0;
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include "mxutilities.h"
|
||||
#include "mxvariabletable.h"
|
||||
|
||||
#include <mxdebug.h>
|
||||
#include <vec.h>
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoPathActor, 0x154)
|
||||
@ -142,11 +143,11 @@ MxResult LegoPathActor::VTable0x88(
|
||||
dir *= -1.0f;
|
||||
}
|
||||
|
||||
right.EqualsCross(&up, &dir);
|
||||
right.EqualsCross(up, dir);
|
||||
m_roi->UpdateTransformationRelativeToParent(matrix);
|
||||
|
||||
if (!m_cameraFlag || !m_userNavFlag) {
|
||||
p5.EqualsCross(p_boundary->GetUnknown0x14(), &p3);
|
||||
p5.EqualsCross(*p_boundary->GetUnknown0x14(), p3);
|
||||
p5.Unitize();
|
||||
|
||||
if (VTable0x80(p1, p4, p2, p5) == SUCCESS) {
|
||||
@ -208,11 +209,11 @@ MxResult LegoPathActor::VTable0x84(
|
||||
dir *= -1.0f;
|
||||
}
|
||||
|
||||
right.EqualsCross(&up, &dir);
|
||||
right.EqualsCross(up, dir);
|
||||
m_roi->UpdateTransformationRelativeToParent(matrix);
|
||||
|
||||
if (!m_cameraFlag || !m_userNavFlag) {
|
||||
p5.EqualsCross(p_boundary->GetUnknown0x14(), &p3);
|
||||
p5.EqualsCross(*p_boundary->GetUnknown0x14(), p3);
|
||||
p5.Unitize();
|
||||
|
||||
if (VTable0x80(p_p1, p_p4, p2, p5) == SUCCESS) {
|
||||
@ -233,7 +234,7 @@ MxResult LegoPathActor::VTable0x84(
|
||||
|
||||
// FUNCTION: LEGO1 0x1002e100
|
||||
// FUNCTION: BETA10 0x100b0520
|
||||
MxS32 LegoPathActor::VTable0x8c(float p_time, Matrix4& p_transform)
|
||||
MxS32 LegoPathActor::VTable0x8c(float p_time, MxMatrix& p_transform)
|
||||
{
|
||||
if (m_userNavFlag && m_actorState == c_initial) {
|
||||
m_lastTime = p_time;
|
||||
@ -243,22 +244,27 @@ MxS32 LegoPathActor::VTable0x8c(float p_time, Matrix4& p_transform)
|
||||
p4 = Vector3(m_roi->GetWorldPosition());
|
||||
|
||||
LegoNavController* nav = NavController();
|
||||
assert(nav);
|
||||
|
||||
m_worldSpeed = nav->GetLinearVel();
|
||||
|
||||
if (nav->CalculateNewPosDir(p4, p5, p2, p1, m_boundary->GetUnknown0x14())) {
|
||||
Mx3DPointFloat p6;
|
||||
p6 = p2;
|
||||
MxS32 result = 0;
|
||||
|
||||
m_unk0xe9 = m_boundary->Intersect(m_roi->GetWorldBoundingSphere().Radius(), p4, p2, p3, m_destEdge);
|
||||
if (m_unk0xe9 == -1) {
|
||||
MxTrace("Intersect returned -1\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (m_unk0xe9 != 0) {
|
||||
p2 = p3;
|
||||
else {
|
||||
if (m_unk0xe9 != 0) {
|
||||
p2 = p3;
|
||||
}
|
||||
}
|
||||
|
||||
MxS32 result = VTable0x68(p4, p2, p3);
|
||||
result = VTable0x68(p4, p2, p3);
|
||||
|
||||
if (result > 0) {
|
||||
p2 = p4;
|
||||
@ -308,12 +314,18 @@ MxS32 LegoPathActor::VTable0x8c(float p_time, Matrix4& p_transform)
|
||||
|
||||
dir = p1;
|
||||
up = *m_boundary->GetUnknown0x14();
|
||||
right.EqualsCross(&up, &dir);
|
||||
right.Unitize();
|
||||
dir.EqualsCross(&right, &up);
|
||||
right.EqualsCross(up, dir);
|
||||
|
||||
MxS32 res = right.Unitize();
|
||||
assert(res == 0);
|
||||
|
||||
dir.EqualsCross(right, up);
|
||||
pos = p2;
|
||||
return result;
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else if (p_time >= 0 && m_worldSpeed > 0) {
|
||||
float f = (m_BADuration - m_unk0x7c) / m_worldSpeed + m_lastTime;
|
||||
@ -332,13 +344,16 @@ MxS32 LegoPathActor::VTable0x8c(float p_time, Matrix4& p_transform)
|
||||
m_lastTime = f;
|
||||
p_transform.SetIdentity();
|
||||
|
||||
LegoResult r;
|
||||
if (m_userNavFlag) {
|
||||
m_unk0x8c.FUN_1009a1e0(m_unk0x7c / m_BADuration, p_transform, *m_boundary->GetUnknown0x14(), 0);
|
||||
r = m_unk0x8c.FUN_1009a1e0(m_unk0x7c / m_BADuration, p_transform, *m_boundary->GetUnknown0x14(), 0);
|
||||
}
|
||||
else {
|
||||
m_unk0x8c.FUN_1009a1e0(m_unk0x7c / m_BADuration, p_transform, *m_boundary->GetUnknown0x14(), 1);
|
||||
r = m_unk0x8c.FUN_1009a1e0(m_unk0x7c / m_BADuration, p_transform, *m_boundary->GetUnknown0x14(), 1);
|
||||
}
|
||||
|
||||
assert(r == 0); // SUCCESS
|
||||
|
||||
Vector3 pos1(p_transform[3]);
|
||||
Vector3 pos2(m_unk0xec[3]);
|
||||
Mx3DPointFloat p1;
|
||||
@ -350,16 +365,17 @@ MxS32 LegoPathActor::VTable0x8c(float p_time, Matrix4& p_transform)
|
||||
else {
|
||||
m_boundary->FUN_100575b0(pos2, pos1, this);
|
||||
pos2 = pos1;
|
||||
}
|
||||
|
||||
if (m_unk0xe9 != 0) {
|
||||
VTable0x9c();
|
||||
}
|
||||
|
||||
return 0;
|
||||
if (m_unk0xe9 != 0) {
|
||||
VTable0x9c();
|
||||
}
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1002e740
|
||||
@ -414,7 +430,7 @@ void LegoPathActor::Animate(float p_time)
|
||||
LegoWorld* world = CurrentWorld();
|
||||
|
||||
if (world) {
|
||||
world->GetCamera()->FUN_10012290(DTOR(m_unk0x14c));
|
||||
world->GetCameraController()->FUN_10012290(DTOR(m_unk0x14c));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -636,7 +652,7 @@ MxResult LegoPathActor::VTable0x9c()
|
||||
LERP3(local34, v1, v2, m_unk0xe4);
|
||||
|
||||
m_destEdge->FUN_1002ddc0(*m_boundary, local78);
|
||||
local48.EqualsCross(m_boundary->GetUnknown0x14(), &local78);
|
||||
local48.EqualsCross(*m_boundary->GetUnknown0x14(), local78);
|
||||
local48.Unitize();
|
||||
}
|
||||
|
||||
@ -646,10 +662,10 @@ MxResult LegoPathActor::VTable0x9c()
|
||||
|
||||
upRef = *m_boundary->GetUnknown0x14();
|
||||
|
||||
rightRef.EqualsCross(&upRef, &dirRef);
|
||||
rightRef.EqualsCross(upRef, dirRef);
|
||||
rightRef.Unitize();
|
||||
|
||||
dirRef.EqualsCross(&rightRef, &upRef);
|
||||
dirRef.EqualsCross(rightRef, upRef);
|
||||
dirRef.Unitize();
|
||||
|
||||
Mx3DPointFloat localc0(m_unk0xec[3]);
|
||||
|
||||
@ -54,11 +54,11 @@ void LegoPathBoundary::FUN_100575b0(Vector3& p_point1, Vector3& p_point2, LegoPa
|
||||
|
||||
v = p_point1;
|
||||
v -= *ccwV;
|
||||
float dot1 = v.Dot(&v, m_unk0x50);
|
||||
float dot1 = v.Dot(v, *m_unk0x50);
|
||||
|
||||
v = p_point2;
|
||||
v -= *ccwV;
|
||||
float dot2 = v.Dot(&v, m_unk0x50);
|
||||
float dot2 = v.Dot(v, *m_unk0x50);
|
||||
|
||||
if (dot2 > dot1) {
|
||||
for (MxS32 i = 0; i < m_numTriggers; i++) {
|
||||
@ -197,7 +197,7 @@ MxU32 LegoPathBoundary::Intersect(
|
||||
for (MxS32 i = 0; i < m_numEdges; i++) {
|
||||
LegoUnknown100db7f4* edge = (LegoUnknown100db7f4*) m_edges[i];
|
||||
|
||||
if (p_point2.Dot(&m_edgeNormals[i], &p_point2) + m_edgeNormals[i][3] <= -1e-07) {
|
||||
if (p_point2.Dot(m_edgeNormals[i], p_point2) + m_edgeNormals[i][3] <= -1e-07) {
|
||||
if (local10 == 0) {
|
||||
local10 = 1;
|
||||
vec = p_point2;
|
||||
@ -212,9 +212,9 @@ MxU32 LegoPathBoundary::Intersect(
|
||||
vec /= len;
|
||||
}
|
||||
|
||||
float dot = vec.Dot(&vec, &m_edgeNormals[i]);
|
||||
float dot = vec.Dot(vec, m_edgeNormals[i]);
|
||||
if (dot != 0.0f) {
|
||||
float local34 = (-m_edgeNormals[i][3] - p_point1.Dot(&p_point1, &m_edgeNormals[i])) / dot;
|
||||
float local34 = (-m_edgeNormals[i][3] - p_point1.Dot(p_point1, m_edgeNormals[i])) / dot;
|
||||
|
||||
if (local34 >= -0.001 && local34 <= len && (e == NULL || local34 < localc)) {
|
||||
e = edge;
|
||||
@ -242,7 +242,7 @@ MxU32 LegoPathBoundary::Intersect(
|
||||
|
||||
e->FUN_1002ddc0(*this, local70);
|
||||
|
||||
float local58 = local50.Dot(&local50, &local70);
|
||||
float local58 = local50.Dot(local50, local70);
|
||||
LegoUnknown100db7f4* local54 = NULL;
|
||||
|
||||
if (local58 < 0.0f) {
|
||||
@ -252,7 +252,7 @@ MxU32 LegoPathBoundary::Intersect(
|
||||
local88 = (LegoUnknown100db7f4*) local88->GetClockwiseEdge(*this)) {
|
||||
local88->FUN_1002ddc0(*this, local84);
|
||||
|
||||
if (local84.Dot(&local84, &local70) <= 0.9) {
|
||||
if (local84.Dot(local84, local70) <= 0.9) {
|
||||
break;
|
||||
}
|
||||
|
||||
@ -260,7 +260,7 @@ MxU32 LegoPathBoundary::Intersect(
|
||||
Mx3DPointFloat locala4(p_point3);
|
||||
locala4 -= *local90;
|
||||
|
||||
float local8c = locala4.Dot(&locala4, &local84);
|
||||
float local8c = locala4.Dot(locala4, local84);
|
||||
|
||||
if (local8c > local58 && local8c < local88->m_unk0x3c) {
|
||||
local54 = local88;
|
||||
@ -279,7 +279,7 @@ MxU32 LegoPathBoundary::Intersect(
|
||||
locala8 = (LegoUnknown100db7f4*) locala8->GetCounterclockwiseEdge(*this)) {
|
||||
locala8->FUN_1002ddc0(*this, localbc);
|
||||
|
||||
if (localbc.Dot(&localbc, &local70) <= 0.9) {
|
||||
if (localbc.Dot(localbc, local70) <= 0.9) {
|
||||
break;
|
||||
}
|
||||
|
||||
@ -287,7 +287,7 @@ MxU32 LegoPathBoundary::Intersect(
|
||||
Mx3DPointFloat locald8(p_point3);
|
||||
locald8 -= *localc4;
|
||||
|
||||
float localc0 = locald8.Dot(&locald8, &localbc);
|
||||
float localc0 = locald8.Dot(locald8, localbc);
|
||||
|
||||
if (localc0 < local58 && localc0 >= 0.0f) {
|
||||
local54 = locala8;
|
||||
|
||||
@ -256,7 +256,7 @@ MxResult LegoPathController::PlaceActor(
|
||||
for (j = 0; j < b.GetNumEdges(); j++) {
|
||||
Mx4DPointFloat normal(*b.GetEdgeNormal(j));
|
||||
|
||||
if (p_position.Dot(&p_position, &normal) + normal[3] < 0.0f) {
|
||||
if (p_position.Dot(p_position, normal) + normal[3] < 0.0f) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -282,7 +282,7 @@ MxResult LegoPathController::PlaceActor(
|
||||
Mx3DPointFloat vec;
|
||||
|
||||
if (((LegoUnknown100db7f4*) edge->GetClockwiseEdge(*boundary))->FUN_1002ddc0(*boundary, vec) == SUCCESS &&
|
||||
vec.Dot(&vec, &p_direction) < 0.0f) {
|
||||
vec.Dot(vec, p_direction) < 0.0f) {
|
||||
edge =
|
||||
(LegoUnknown100db7f4*) edge->GetCounterclockwiseEdge(*boundary)->GetCounterclockwiseEdge(*boundary);
|
||||
}
|
||||
@ -949,7 +949,7 @@ MxS32 LegoPathController::FUN_1004a240(
|
||||
p_v1 *= p_f1;
|
||||
p_v1 += *p_edge->CWVertex(*p_boundary);
|
||||
p_edge->FUN_1002ddc0(*p_boundary, vec);
|
||||
p_v2.EqualsCross(p_boundary->GetUnknown0x14(), &vec);
|
||||
p_v2.EqualsCross(*p_boundary->GetUnknown0x14(), vec);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -974,14 +974,14 @@ MxResult LegoPathController::FUN_1004a380(
|
||||
|
||||
LegoPathBoundary* b = &m_boundaries[i];
|
||||
Mx4DPointFloat* unk0x14 = b->GetUnknown0x14();
|
||||
float local28 = p_param3[0].Dot(&p_param3[0], unk0x14);
|
||||
float local28 = p_param3[0].Dot(p_param3[0], *unk0x14);
|
||||
|
||||
if (local28 < 0.001 && local28 > -0.001) {
|
||||
continue;
|
||||
}
|
||||
|
||||
float local2c = p_param3[1].Dot(&p_param3[1], unk0x14);
|
||||
float local34 = p_param3[2].Dot(&p_param3[2], unk0x14) + unk0x14->index_operator(3);
|
||||
float local2c = p_param3[1].Dot(p_param3[1], *unk0x14);
|
||||
float local34 = p_param3[2].Dot(p_param3[2], *unk0x14) + unk0x14->index_operator(3);
|
||||
float local3c = local2c * local2c - local34 * local28 * 4.0f;
|
||||
|
||||
if (local3c < -0.001) {
|
||||
@ -1022,7 +1022,7 @@ MxResult LegoPathController::FUN_1004a380(
|
||||
for (j = b->GetNumEdges() - 1; j >= 0; j--) {
|
||||
Mx4DPointFloat* local60 = b->GetEdgeNormal(j);
|
||||
|
||||
if (local24.Dot(local60, &local24) + local60->index_operator(3) < -0.001) {
|
||||
if (local24.Dot(*local60, local24) + local60->index_operator(3) < -0.001) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1031,7 +1031,7 @@ MxResult LegoPathController::FUN_1004a380(
|
||||
Mx3DPointFloat local74(p_param1);
|
||||
local74 -= local24;
|
||||
|
||||
if (local74.Dot(&local74, unk0x14) >= 0.0f) {
|
||||
if (local74.Dot(local74, *unk0x14) >= 0.0f) {
|
||||
p_param5 = local38;
|
||||
p_boundary = b;
|
||||
local8 = FALSE;
|
||||
|
||||
@ -35,24 +35,6 @@ LegoRace::LegoRace()
|
||||
NotificationManager()->Register(this);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10015b70
|
||||
MxLong LegoRace::HandlePathStruct(LegoPathStructNotificationParam&)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10015b80
|
||||
MxLong LegoRace::HandleEndAction(MxEndActionNotificationParam&)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10015b90
|
||||
MxBool LegoRace::Escape()
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10015ce0
|
||||
// FUNCTION: BETA10 0x100c7a71
|
||||
MxResult LegoRace::Create(MxDSAction& p_dsAction)
|
||||
@ -165,6 +147,7 @@ MxResult RaceState::Serialize(LegoFile* p_file)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10016280
|
||||
// FUNCTION: BETA10 0x100c7dfd
|
||||
RaceState::Entry* RaceState::GetState(MxU8 p_id)
|
||||
{
|
||||
for (MxS16 i = 0;; i++) {
|
||||
|
||||
@ -116,3 +116,10 @@ MxResult LegoRaceActor::HitActor(LegoPathActor* p_actor, MxBool p_bool)
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10014aa0
|
||||
// FUNCTION: BETA10 0x100ca038
|
||||
MxResult LegoRaceActor::FUN_10014aa0()
|
||||
{
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@ -167,11 +167,6 @@ undefined4 g_hitValerieSoundsIndex = 0;
|
||||
// GLOBAL: LEGO1 0x100f0bb4
|
||||
MxLong g_unk0x100f0bb4 = 0;
|
||||
|
||||
// Initialized at LEGO1 0x10012db0
|
||||
// GLOBAL: LEGO1 0x10102af0
|
||||
// GLOBAL: BETA10 0x102114c0
|
||||
Mx3DPointFloat g_unk0x10102af0 = Mx3DPointFloat(0.0f, 2.0f, 0.0f);
|
||||
|
||||
// FUNCTION: LEGO1 0x10012950
|
||||
LegoRaceCar::LegoRaceCar()
|
||||
{
|
||||
@ -197,6 +192,11 @@ MxLong LegoRaceCar::Notify(MxParam& p_param)
|
||||
return LegoRaceMap::Notify(p_param);
|
||||
}
|
||||
|
||||
// Initialized at LEGO1 0x10012db0
|
||||
// GLOBAL: LEGO1 0x10102af0
|
||||
// GLOBAL: BETA10 0x102114c0
|
||||
Mx3DPointFloat g_unk0x10102af0 = Mx3DPointFloat(0.0f, 2.0f, 0.0f);
|
||||
|
||||
// FUNCTION: LEGO1 0x10012de0
|
||||
void LegoRaceCar::FUN_10012de0()
|
||||
{
|
||||
@ -340,8 +340,8 @@ void LegoRaceCar::FUN_10012ff0(float p_param)
|
||||
// Possible bug in the original code: The first argument is not initialized
|
||||
a->GetAnimTreePtr()->GetCamAnim()->FUN_1009f490(deltaTime, transformationMatrix);
|
||||
|
||||
if (r->GetCamera()) {
|
||||
r->GetCamera()->FUN_100123e0(transformationMatrix, 0);
|
||||
if (r->GetCameraController()) {
|
||||
r->GetCameraController()->FUN_100123e0(transformationMatrix, 0);
|
||||
}
|
||||
|
||||
m_roi->FUN_100a58f0(transformationMatrix);
|
||||
@ -727,49 +727,3 @@ MxResult LegoJetski::HitActor(LegoPathActor* p_actor, MxBool p_bool)
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10014150
|
||||
MxU32 LegoJetski::VTable0x6c(
|
||||
LegoPathBoundary* p_boundary,
|
||||
Vector3& p_v1,
|
||||
Vector3& p_v2,
|
||||
float p_f1,
|
||||
float p_f2,
|
||||
Vector3& p_v3
|
||||
)
|
||||
{
|
||||
return LegoJetskiRaceActor::VTable0x6c(p_boundary, p_v1, p_v2, p_f1, p_f2, p_v3);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100141d0
|
||||
void LegoJetski::SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4)
|
||||
{
|
||||
LegoJetskiRaceActor::SwitchBoundary(p_boundary, p_edge, p_unk0xe4);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10014210
|
||||
MxResult LegoJetski::VTable0x9c()
|
||||
{
|
||||
return LegoJetskiRaceActor::VTable0x9c();
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10014500
|
||||
// FUNCTION: BETA10 0x100cd5e0
|
||||
MxU32 LegoRaceCar::VTable0x6c(
|
||||
LegoPathBoundary* p_boundary,
|
||||
Vector3& p_v1,
|
||||
Vector3& p_v2,
|
||||
float p_f1,
|
||||
float p_f2,
|
||||
Vector3& p_v3
|
||||
)
|
||||
{
|
||||
return LegoCarRaceActor::VTable0x6c(p_boundary, p_v1, p_v2, p_f1, p_f2, p_v3);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10014560
|
||||
// FUNCTION: BETA10 0x100cd660
|
||||
void LegoRaceCar::SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4)
|
||||
{
|
||||
LegoCarRaceActor::SwitchBoundary(p_boundary, p_edge, p_unk0xe4);
|
||||
}
|
||||
|
||||
@ -166,7 +166,7 @@ MxS32 LegoCarRaceActor::VTable0x1c(LegoPathBoundary* p_boundary, LegoEdge* p_edg
|
||||
|
||||
m_destEdge->FUN_1002ddc0(*m_boundary, destEdgeUnknownVector);
|
||||
|
||||
crossProduct.EqualsCross(m_boundary->GetUnknown0x14(), &destEdgeUnknownVector);
|
||||
crossProduct.EqualsCross(*m_boundary->GetUnknown0x14(), destEdgeUnknownVector);
|
||||
crossProduct.Unitize();
|
||||
|
||||
Mx3DPointFloat worldDirection(Vector3(m_roi->GetWorldDirection()));
|
||||
@ -260,8 +260,8 @@ MxResult LegoCarRaceActor::VTable0x9c()
|
||||
d->FUN_1002ddc0(*b, point2);
|
||||
m_destEdge->FUN_1002ddc0(*m_boundary, point3);
|
||||
|
||||
point4.EqualsCross(&point2, m_boundary->GetUnknown0x14());
|
||||
point5.EqualsCross(m_boundary->GetUnknown0x14(), &point3);
|
||||
point4.EqualsCross(point2, *m_boundary->GetUnknown0x14());
|
||||
point5.EqualsCross(*m_boundary->GetUnknown0x14(), point3);
|
||||
|
||||
point4.Unitize();
|
||||
point5.Unitize();
|
||||
|
||||
@ -634,7 +634,7 @@ void LegoAnimPresenter::PutFrame()
|
||||
|
||||
FUN_1006b9a0(m_anim, time, m_unk0x78);
|
||||
|
||||
if (m_unk0x8c != NULL && m_currentWorld != NULL && m_currentWorld->GetCamera() != NULL) {
|
||||
if (m_unk0x8c != NULL && m_currentWorld != NULL && m_currentWorld->GetCameraController() != NULL) {
|
||||
for (MxS32 i = 0; i < m_unk0x94; i++) {
|
||||
if (m_unk0x8c[i] != NULL) {
|
||||
MxMatrix mat(m_unk0x8c[i]->GetLocal2World());
|
||||
@ -650,11 +650,11 @@ void LegoAnimPresenter::PutFrame()
|
||||
|
||||
up = und;
|
||||
|
||||
up -= m_currentWorld->GetCamera()->GetWorldLocation();
|
||||
up -= m_currentWorld->GetCameraController()->GetWorldLocation();
|
||||
dir /= dirsqr;
|
||||
pos.EqualsCross(&dir, &up);
|
||||
pos.EqualsCross(dir, up);
|
||||
pos.Unitize();
|
||||
up.EqualsCross(&pos, &dir);
|
||||
up.EqualsCross(pos, dir);
|
||||
pos *= possqr;
|
||||
dir *= dirsqr;
|
||||
up *= upsqr;
|
||||
@ -716,7 +716,7 @@ MxResult LegoAnimPresenter::FUN_1006b140(LegoROI* p_roi)
|
||||
|
||||
for (i = 1; i <= m_roiMapSize; i++) {
|
||||
if (m_roiMap[i] == p_roi) {
|
||||
if (local5c[i].Unknown(local58) != SUCCESS) {
|
||||
if (local5c[i].BETA_1005a590(local58) != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
@ -930,8 +930,8 @@ void LegoAnimPresenter::FUN_1006b9a0(LegoAnim* p_anim, MxLong p_time, Matrix4* p
|
||||
MxMatrix transform(mat);
|
||||
p_anim->GetCamAnim()->FUN_1009f490(p_time, transform);
|
||||
|
||||
if (m_currentWorld != NULL && m_currentWorld->GetCamera() != NULL) {
|
||||
m_currentWorld->GetCamera()->FUN_100123e0(transform, 0);
|
||||
if (m_currentWorld != NULL && m_currentWorld->GetCameraController() != NULL) {
|
||||
m_currentWorld->GetCameraController()->FUN_100123e0(transform, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -50,7 +50,7 @@ void LegoLoopingAnimPresenter::PutFrame()
|
||||
|
||||
FUN_1006b9a0(m_anim, time, m_unk0x78);
|
||||
|
||||
if (m_unk0x8c != NULL && m_currentWorld != NULL && m_currentWorld->GetCamera() != NULL) {
|
||||
if (m_unk0x8c != NULL && m_currentWorld != NULL && m_currentWorld->GetCameraController() != NULL) {
|
||||
for (MxS32 i = 0; i < m_unk0x94; i++) {
|
||||
if (m_unk0x8c[i] != NULL) {
|
||||
MxMatrix mat(m_unk0x8c[i]->GetLocal2World());
|
||||
@ -66,11 +66,11 @@ void LegoLoopingAnimPresenter::PutFrame()
|
||||
|
||||
up = und;
|
||||
|
||||
up -= m_currentWorld->GetCamera()->GetWorldLocation();
|
||||
up -= m_currentWorld->GetCameraController()->GetWorldLocation();
|
||||
dir /= dirsqr;
|
||||
pos.EqualsCross(&dir, &up);
|
||||
pos.EqualsCross(dir, up);
|
||||
pos.Unitize();
|
||||
up.EqualsCross(&pos, &dir);
|
||||
up.EqualsCross(pos, dir);
|
||||
pos *= possqr;
|
||||
dir *= dirsqr;
|
||||
up *= upsqr;
|
||||
|
||||
@ -24,12 +24,6 @@ DECOMP_SIZE_ASSERT(LegoModelPresenter, 0x6c)
|
||||
// GLOBAL: LEGO1 0x100f7ae0
|
||||
MxS32 g_modelPresenterConfig = 1;
|
||||
|
||||
// FUNCTION: LEGO1 0x1000cca0
|
||||
void LegoModelPresenter::Destroy()
|
||||
{
|
||||
Destroy(FALSE);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1007f660
|
||||
void LegoModelPresenter::configureLegoModelPresenter(MxS32 p_modelPresenterConfig)
|
||||
{
|
||||
|
||||
@ -20,12 +20,6 @@ MxS32 g_partPresenterConfig1 = 1;
|
||||
// GLOBAL: LEGO1 0x100f7aa4
|
||||
MxS32 g_partPresenterConfig2 = 100;
|
||||
|
||||
// FUNCTION: LEGO1 0x1000cf60
|
||||
void LegoPartPresenter::Destroy()
|
||||
{
|
||||
Destroy(FALSE);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1007c990
|
||||
void LegoPartPresenter::configureLegoPartPresenter(MxS32 p_partPresenterConfig1, MxS32 p_partPresenterConfig2)
|
||||
{
|
||||
|
||||
@ -8,12 +8,12 @@
|
||||
#include "mxdirectx/mxdirect3d.h"
|
||||
#include "mxdirectx/mxstopwatch.h"
|
||||
#include "mxdisplaysurface.h"
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
#include "mxmisc.h"
|
||||
#include "mxpalette.h"
|
||||
#include "mxregion.h"
|
||||
#include "mxtimer.h"
|
||||
#include "mxtransitionmanager.h"
|
||||
#include "realtime/matrix.h"
|
||||
#include "realtime/realtime.h"
|
||||
#include "roi/legoroi.h"
|
||||
#include "tgl/d3drm/impl.h"
|
||||
|
||||
@ -799,7 +799,7 @@ void Act3::DebugCopter(
|
||||
const Matrix4& p_destination,
|
||||
const Matrix4& p_startPosition,
|
||||
const Matrix4& p_endPosition,
|
||||
const UnknownMx4DPointFloat& p_unk0x1f4
|
||||
const MxQuaternionTransformer& p_unk0x1f4
|
||||
)
|
||||
{
|
||||
DebugPrintf("Copter matrix...\n\n");
|
||||
@ -831,10 +831,10 @@ void Act3::DebugCopter(
|
||||
|
||||
Mx4DPointFloat unk0x00, unk0x18;
|
||||
|
||||
if (p_unk0x1f4.GetUnknown0x30() != 0) {
|
||||
if (p_unk0x1f4.GetFlags() != 0) {
|
||||
// TODO: Match
|
||||
unk0x00 = p_unk0x1f4.GetUnknown0x00();
|
||||
unk0x18 = p_unk0x1f4.GetUnknown0x18();
|
||||
unk0x00 = p_unk0x1f4.GetStartQuat();
|
||||
unk0x18 = p_unk0x1f4.GetEndQuat();
|
||||
|
||||
DebugPrintf("Source quaternion...");
|
||||
// STRING: LEGO1 0x100f7864
|
||||
|
||||
@ -48,12 +48,6 @@ GasStation::GasStation()
|
||||
NotificationManager()->Register(this);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10004770
|
||||
MxBool GasStation::VTable0x5c()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100048c0
|
||||
GasStation::~GasStation()
|
||||
{
|
||||
@ -69,6 +63,7 @@ GasStation::~GasStation()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10004990
|
||||
// FUNCTION: BETA10 0x100286c0
|
||||
MxResult GasStation::Create(MxDSAction& p_dsAction)
|
||||
{
|
||||
MxResult result = LegoWorld::Create(p_dsAction);
|
||||
@ -82,13 +77,13 @@ MxResult GasStation::Create(MxDSAction& p_dsAction)
|
||||
m_state = (GasStationState*) GameState()->GetState("GasStationState");
|
||||
if (!m_state) {
|
||||
m_state = (GasStationState*) GameState()->CreateState("GasStationState");
|
||||
m_state->m_unk0x14.m_unk0x00 = 1;
|
||||
m_state->m_unk0x14 = 1;
|
||||
}
|
||||
else if (m_state->m_unk0x14.m_unk0x00 == 4) {
|
||||
m_state->m_unk0x14.m_unk0x00 = 4;
|
||||
else if (m_state->m_unk0x14 == 4) {
|
||||
m_state->m_unk0x14 = 4;
|
||||
}
|
||||
else {
|
||||
m_state->m_unk0x14.m_unk0x00 = 3;
|
||||
m_state->m_unk0x14 = 3;
|
||||
}
|
||||
|
||||
GameState()->m_currentArea = LegoGameState::e_garage;
|
||||
@ -122,6 +117,7 @@ MxLong GasStation::Notify(MxParam& p_param)
|
||||
result = HandleControl((LegoControlManagerNotificationParam&) p_param);
|
||||
break;
|
||||
case c_notificationTransitioned:
|
||||
assert(m_destLocation != LegoGameState::e_undefined);
|
||||
GameState()->SwitchArea(m_destLocation);
|
||||
break;
|
||||
}
|
||||
@ -131,6 +127,7 @@ MxLong GasStation::Notify(MxParam& p_param)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10004b30
|
||||
// FUNCTION: BETA10 0x10028a5e
|
||||
void GasStation::ReadyWorld()
|
||||
{
|
||||
PlayMusic(JukeboxScript::c_JBMusic2);
|
||||
@ -142,22 +139,22 @@ void GasStation::ReadyWorld()
|
||||
case LegoActor::c_pepper:
|
||||
switch (m_state->m_pepperAction) {
|
||||
case 0:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs002nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
case 1:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs003nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
case 2:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs004nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
default:
|
||||
m_state->m_unk0x14.m_unk0x00 = 6;
|
||||
m_state->m_unk0x14 = 6;
|
||||
PlayAction(GarageScript::c_wgs008nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
m_unk0x104 = 1;
|
||||
@ -167,23 +164,21 @@ void GasStation::ReadyWorld()
|
||||
if (m_state->m_pepperAction < 5) {
|
||||
m_state->m_pepperAction++;
|
||||
}
|
||||
|
||||
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||
break;
|
||||
case LegoActor::c_mama:
|
||||
switch (m_state->m_mamaAction) {
|
||||
case 0:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs006nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
case 1:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs007nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
default:
|
||||
m_state->m_unk0x14.m_unk0x00 = 6;
|
||||
m_state->m_unk0x14 = 6;
|
||||
PlayAction(GarageScript::c_wgs008nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
m_unk0x104 = 1;
|
||||
@ -193,49 +188,21 @@ void GasStation::ReadyWorld()
|
||||
if (m_state->m_mamaAction < 5) {
|
||||
m_state->m_mamaAction++;
|
||||
}
|
||||
|
||||
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||
break;
|
||||
case LegoActor::c_papa:
|
||||
switch (m_state->m_papaAction) {
|
||||
case 0:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
PlayAction(GarageScript::c_wgs012nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
case 1:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
PlayAction(GarageScript::c_wgs014nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
default:
|
||||
m_state->m_unk0x14.m_unk0x00 = 6;
|
||||
PlayAction(GarageScript::c_wgs017nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
m_unk0x104 = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_state->m_papaAction < 5) {
|
||||
m_state->m_papaAction++;
|
||||
}
|
||||
|
||||
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||
break;
|
||||
case LegoActor::c_nick:
|
||||
switch (m_state->m_nickAction) {
|
||||
case 0:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs009nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
case 1:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs010nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
default:
|
||||
m_state->m_unk0x14.m_unk0x00 = 6;
|
||||
m_state->m_unk0x14 = 6;
|
||||
PlayAction(GarageScript::c_wgs008nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
m_unk0x104 = 1;
|
||||
@ -245,23 +212,45 @@ void GasStation::ReadyWorld()
|
||||
if (m_state->m_nickAction < 5) {
|
||||
m_state->m_nickAction++;
|
||||
}
|
||||
break;
|
||||
case LegoActor::c_papa:
|
||||
switch (m_state->m_papaAction) {
|
||||
case 0:
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs012nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
case 1:
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs014nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
default:
|
||||
m_state->m_unk0x14 = 6;
|
||||
PlayAction(GarageScript::c_wgs017nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
m_unk0x104 = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||
if (m_state->m_papaAction < 5) {
|
||||
m_state->m_papaAction++;
|
||||
}
|
||||
break;
|
||||
case LegoActor::c_laura:
|
||||
switch (m_state->m_lauraAction) {
|
||||
case 0:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs020nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
case 1:
|
||||
m_state->m_unk0x14.m_unk0x00 = 5;
|
||||
m_state->m_unk0x14 = 5;
|
||||
PlayAction(GarageScript::c_wgs021nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
break;
|
||||
default:
|
||||
m_state->m_unk0x14.m_unk0x00 = 6;
|
||||
m_state->m_unk0x14 = 6;
|
||||
PlayAction(GarageScript::c_wgs022nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
m_unk0x104 = 1;
|
||||
@ -271,13 +260,12 @@ void GasStation::ReadyWorld()
|
||||
if (m_state->m_lauraAction < 5) {
|
||||
m_state->m_lauraAction++;
|
||||
}
|
||||
|
||||
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||
break;
|
||||
default:
|
||||
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||
break;
|
||||
}
|
||||
|
||||
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10005590
|
||||
@ -315,10 +303,10 @@ MxLong GasStation::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
m_state->StopAction((GarageScript::Script) action->GetObjectId());
|
||||
m_unk0x106 = 0;
|
||||
|
||||
switch (m_state->m_unk0x14.m_unk0x00) {
|
||||
switch (m_state->m_unk0x14) {
|
||||
case 5:
|
||||
g_unk0x100f0160 = 0;
|
||||
m_state->m_unk0x14.m_unk0x00 = 6;
|
||||
m_state->m_unk0x14 = 6;
|
||||
m_unk0x115 = TRUE;
|
||||
PlayAction(GarageScript::c_wgs023nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
@ -329,17 +317,17 @@ MxLong GasStation::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
m_unk0x115 = TRUE;
|
||||
|
||||
if (m_unk0x104 == 3) {
|
||||
m_state->m_unk0x14.m_unk0x00 = 8;
|
||||
m_state->m_unk0x14 = 8;
|
||||
PlayAction(GarageScript::c_wgs029nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
}
|
||||
else {
|
||||
m_state->m_unk0x14.m_unk0x00 = 7;
|
||||
m_state->m_unk0x14 = 7;
|
||||
m_unk0x114 = TRUE;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
m_state->m_unk0x14.m_unk0x00 = 2;
|
||||
m_state->m_unk0x14 = 2;
|
||||
((Act1State*) GameState()->GetState("Act1State"))->m_unk0x018 = 7;
|
||||
m_destLocation = LegoGameState::e_unk28;
|
||||
m_radio.Stop();
|
||||
@ -378,8 +366,8 @@ MxLong GasStation::HandleButtonDown(LegoControlManagerNotificationParam& p_param
|
||||
m_unk0x104 = 3;
|
||||
m_unk0x114 = FALSE;
|
||||
|
||||
if (m_state->m_unk0x14.m_unk0x00 == 7) {
|
||||
m_state->m_unk0x14.m_unk0x00 = 8;
|
||||
if (m_state->m_unk0x14 == 7) {
|
||||
m_state->m_unk0x14 = 8;
|
||||
PlayAction(GarageScript::c_wgs029nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
}
|
||||
@ -405,7 +393,7 @@ MxLong GasStation::HandleControl(LegoControlManagerNotificationParam& p_param)
|
||||
switch (p_param.GetClickedObjectId()) {
|
||||
case GarageScript::c_LeftArrow_Ctl:
|
||||
case GarageScript::c_RightArrow_Ctl:
|
||||
m_state->m_unk0x14.m_unk0x00 = 0;
|
||||
m_state->m_unk0x14 = 0;
|
||||
m_destLocation = LegoGameState::Area::e_garadoor;
|
||||
|
||||
m_state->StopActions();
|
||||
@ -414,7 +402,7 @@ MxLong GasStation::HandleControl(LegoControlManagerNotificationParam& p_param)
|
||||
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
|
||||
break;
|
||||
case GarageScript::c_Info_Ctl:
|
||||
m_state->m_unk0x14.m_unk0x00 = 0;
|
||||
m_state->m_unk0x14 = 0;
|
||||
m_destLocation = LegoGameState::Area::e_infomain;
|
||||
|
||||
m_state->StopActions();
|
||||
@ -423,7 +411,7 @@ MxLong GasStation::HandleControl(LegoControlManagerNotificationParam& p_param)
|
||||
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
|
||||
break;
|
||||
case GarageScript::c_Buggy_Ctl:
|
||||
m_state->m_unk0x14.m_unk0x00 = 0;
|
||||
m_state->m_unk0x14 = 0;
|
||||
m_destLocation = LegoGameState::Area::e_dunecarbuild;
|
||||
|
||||
m_state->StopActions();
|
||||
@ -478,7 +466,7 @@ MxResult GasStation::Tickle()
|
||||
else if (m_unk0x104 != 0) {
|
||||
m_unk0x104 = 0;
|
||||
MxDSAction action;
|
||||
m_state->m_unk0x14.m_unk0x00 = 9;
|
||||
m_state->m_unk0x14 = 9;
|
||||
PlayAction(GarageScript::c_wgs031nu_RunAnim);
|
||||
m_unk0x106 = 1;
|
||||
}
|
||||
@ -501,7 +489,7 @@ MxBool GasStation::Escape()
|
||||
{
|
||||
m_radio.Stop();
|
||||
m_state->StopActions();
|
||||
m_state->m_unk0x14.m_unk0x00 = 0;
|
||||
m_state->m_unk0x14 = 0;
|
||||
m_destLocation = LegoGameState::Area::e_infomain;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -132,12 +132,12 @@ Infocenter::Infocenter()
|
||||
m_selectedCharacter = e_noCharacter;
|
||||
m_unk0x11c = NULL;
|
||||
m_infocenterState = NULL;
|
||||
m_frameHotBitmap = NULL;
|
||||
m_frame = NULL;
|
||||
m_destLocation = LegoGameState::e_undefined;
|
||||
m_currentInfomainScript = InfomainScript::c_noneInfomain;
|
||||
m_currentCutscene = e_noIntro;
|
||||
|
||||
memset(&m_mapAreas, 0, sizeof(m_mapAreas));
|
||||
memset(&m_glowInfo, 0, sizeof(m_glowInfo));
|
||||
|
||||
m_unk0x1c8 = -1;
|
||||
SetAppCursor(e_cursorBusy);
|
||||
@ -612,6 +612,7 @@ void Infocenter::ReadyWorld()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1006f9a0
|
||||
// FUNCTION: BETA10 0x1002ef2f
|
||||
void Infocenter::InitializeBitmaps()
|
||||
{
|
||||
m_radio.Initialize(TRUE);
|
||||
@ -632,56 +633,64 @@ void Infocenter::InitializeBitmaps()
|
||||
((MxPresenter*) Find(m_atomId, InfomainScript::c_Laura_Ctl))->Enable(TRUE);
|
||||
((MxPresenter*) Find(m_atomId, InfomainScript::c_Radio_Ctl))->Enable(TRUE);
|
||||
|
||||
m_mapAreas[0].m_presenter = (MxStillPresenter*) Find("MxStillPresenter", "Info_A_Bitmap");
|
||||
m_mapAreas[0].m_area.SetLeft(391);
|
||||
m_mapAreas[0].m_area.SetTop(182);
|
||||
m_mapAreas[0].m_area.SetRight(427);
|
||||
m_mapAreas[0].m_area.SetBottom(230);
|
||||
m_mapAreas[0].m_unk0x04 = 3;
|
||||
m_glowInfo[0].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Info_A_Bitmap");
|
||||
assert(m_glowInfo[0].m_destCtl);
|
||||
m_glowInfo[0].m_area.SetLeft(391);
|
||||
m_glowInfo[0].m_area.SetTop(182);
|
||||
m_glowInfo[0].m_area.SetRight(427);
|
||||
m_glowInfo[0].m_area.SetBottom(230);
|
||||
m_glowInfo[0].m_unk0x04 = 3;
|
||||
|
||||
m_mapAreas[1].m_presenter = (MxStillPresenter*) Find("MxStillPresenter", "Boat_A_Bitmap");
|
||||
m_mapAreas[1].m_area.SetLeft(304);
|
||||
m_mapAreas[1].m_area.SetTop(225);
|
||||
m_mapAreas[1].m_area.SetRight(350);
|
||||
m_mapAreas[1].m_area.SetBottom(268);
|
||||
m_mapAreas[1].m_unk0x04 = 10;
|
||||
m_glowInfo[1].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Boat_A_Bitmap");
|
||||
assert(m_glowInfo[1].m_destCtl);
|
||||
m_glowInfo[1].m_area.SetLeft(304);
|
||||
m_glowInfo[1].m_area.SetTop(225);
|
||||
m_glowInfo[1].m_area.SetRight(350);
|
||||
m_glowInfo[1].m_area.SetBottom(268);
|
||||
m_glowInfo[1].m_unk0x04 = 10;
|
||||
|
||||
m_mapAreas[2].m_presenter = (MxStillPresenter*) Find("MxStillPresenter", "Race_A_Bitmap");
|
||||
m_mapAreas[2].m_area.SetLeft(301);
|
||||
m_mapAreas[2].m_area.SetTop(133);
|
||||
m_mapAreas[2].m_area.SetRight(347);
|
||||
m_mapAreas[2].m_area.SetBottom(181);
|
||||
m_mapAreas[2].m_unk0x04 = 11;
|
||||
m_glowInfo[2].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Race_A_Bitmap");
|
||||
assert(m_glowInfo[1].m_destCtl); // DECOMP: intentional typo
|
||||
m_glowInfo[2].m_area.SetLeft(301);
|
||||
m_glowInfo[2].m_area.SetTop(133);
|
||||
m_glowInfo[2].m_area.SetRight(347);
|
||||
m_glowInfo[2].m_area.SetBottom(181);
|
||||
m_glowInfo[2].m_unk0x04 = 11;
|
||||
|
||||
m_mapAreas[3].m_presenter = (MxStillPresenter*) Find("MxStillPresenter", "Pizza_A_Bitmap");
|
||||
m_mapAreas[3].m_area.SetLeft(289);
|
||||
m_mapAreas[3].m_area.SetTop(182);
|
||||
m_mapAreas[3].m_area.SetRight(335);
|
||||
m_mapAreas[3].m_area.SetBottom(225);
|
||||
m_mapAreas[3].m_unk0x04 = 12;
|
||||
m_glowInfo[3].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Pizza_A_Bitmap");
|
||||
assert(m_glowInfo[3].m_destCtl);
|
||||
m_glowInfo[3].m_area.SetLeft(289);
|
||||
m_glowInfo[3].m_area.SetTop(182);
|
||||
m_glowInfo[3].m_area.SetRight(335);
|
||||
m_glowInfo[3].m_area.SetBottom(225);
|
||||
m_glowInfo[3].m_unk0x04 = 12;
|
||||
|
||||
m_mapAreas[4].m_presenter = (MxStillPresenter*) Find("MxStillPresenter", "Gas_A_Bitmap");
|
||||
m_mapAreas[4].m_area.SetLeft(350);
|
||||
m_mapAreas[4].m_area.SetTop(161);
|
||||
m_mapAreas[4].m_area.SetRight(391);
|
||||
m_mapAreas[4].m_area.SetBottom(209);
|
||||
m_mapAreas[4].m_unk0x04 = 13;
|
||||
m_glowInfo[4].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Gas_A_Bitmap");
|
||||
assert(m_glowInfo[4].m_destCtl);
|
||||
m_glowInfo[4].m_area.SetLeft(350);
|
||||
m_glowInfo[4].m_area.SetTop(161);
|
||||
m_glowInfo[4].m_area.SetRight(391);
|
||||
m_glowInfo[4].m_area.SetBottom(209);
|
||||
m_glowInfo[4].m_unk0x04 = 13;
|
||||
|
||||
m_mapAreas[5].m_presenter = (MxStillPresenter*) Find("MxStillPresenter", "Med_A_Bitmap");
|
||||
m_mapAreas[5].m_area.SetLeft(392);
|
||||
m_mapAreas[5].m_area.SetTop(130);
|
||||
m_mapAreas[5].m_area.SetRight(438);
|
||||
m_mapAreas[5].m_area.SetBottom(176);
|
||||
m_mapAreas[5].m_unk0x04 = 14;
|
||||
m_glowInfo[5].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Med_A_Bitmap");
|
||||
assert(m_glowInfo[5].m_destCtl);
|
||||
m_glowInfo[5].m_area.SetLeft(392);
|
||||
m_glowInfo[5].m_area.SetTop(130);
|
||||
m_glowInfo[5].m_area.SetRight(438);
|
||||
m_glowInfo[5].m_area.SetBottom(176);
|
||||
m_glowInfo[5].m_unk0x04 = 14;
|
||||
|
||||
m_mapAreas[6].m_presenter = (MxStillPresenter*) Find("MxStillPresenter", "Cop_A_Bitmap");
|
||||
m_mapAreas[6].m_area.SetLeft(396);
|
||||
m_mapAreas[6].m_area.SetTop(229);
|
||||
m_mapAreas[6].m_area.SetRight(442);
|
||||
m_mapAreas[6].m_area.SetBottom(272);
|
||||
m_mapAreas[6].m_unk0x04 = 15;
|
||||
m_glowInfo[6].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Cop_A_Bitmap");
|
||||
assert(m_glowInfo[6].m_destCtl);
|
||||
m_glowInfo[6].m_area.SetLeft(396);
|
||||
m_glowInfo[6].m_area.SetTop(229);
|
||||
m_glowInfo[6].m_area.SetRight(442);
|
||||
m_glowInfo[6].m_area.SetBottom(272);
|
||||
m_glowInfo[6].m_unk0x04 = 15;
|
||||
|
||||
m_frameHotBitmap = (MxStillPresenter*) Find("MxStillPresenter", "FrameHot_Bitmap");
|
||||
m_frame = (MxStillPresenter*) Find("MxStillPresenter", "FrameHot_Bitmap");
|
||||
assert(m_frame);
|
||||
|
||||
UpdateFrameHot(TRUE);
|
||||
}
|
||||
@ -831,7 +840,7 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
|
||||
if (m_unk0x1c8 != -1) {
|
||||
m_infoManDialogueTimer = 0;
|
||||
|
||||
switch (m_mapAreas[m_unk0x1c8].m_unk0x04) {
|
||||
switch (m_glowInfo[m_unk0x1c8].m_unk0x04) {
|
||||
case 3:
|
||||
GameState()->SetActor(m_selectedCharacter);
|
||||
|
||||
@ -1304,11 +1313,11 @@ MxBool Infocenter::VTable0x5c()
|
||||
void Infocenter::FUN_10070d10(MxS32 p_x, MxS32 p_y)
|
||||
{
|
||||
MxS16 i;
|
||||
for (i = 0; i < (MxS32) (sizeof(m_mapAreas) / sizeof(m_mapAreas[0])); i++) {
|
||||
MxS32 right = m_mapAreas[i].m_area.GetRight();
|
||||
MxS32 bottom = m_mapAreas[i].m_area.GetBottom();
|
||||
MxS32 left = m_mapAreas[i].m_area.GetLeft();
|
||||
MxS32 top = m_mapAreas[i].m_area.GetTop();
|
||||
for (i = 0; i < (MxS32) (sizeof(m_glowInfo) / sizeof(m_glowInfo[0])); i++) {
|
||||
MxS32 right = m_glowInfo[i].m_area.GetRight();
|
||||
MxS32 bottom = m_glowInfo[i].m_area.GetBottom();
|
||||
MxS32 left = m_glowInfo[i].m_area.GetLeft();
|
||||
MxS32 top = m_glowInfo[i].m_area.GetTop();
|
||||
|
||||
if (left <= p_x && p_x <= right && top <= p_y && p_y <= bottom) {
|
||||
break;
|
||||
@ -1321,12 +1330,12 @@ void Infocenter::FUN_10070d10(MxS32 p_x, MxS32 p_y)
|
||||
|
||||
if (i != m_unk0x1c8) {
|
||||
if (m_unk0x1c8 != -1) {
|
||||
m_mapAreas[m_unk0x1c8].m_presenter->Enable(FALSE);
|
||||
m_glowInfo[m_unk0x1c8].m_destCtl->Enable(FALSE);
|
||||
}
|
||||
|
||||
m_unk0x1c8 = i;
|
||||
if (i != -1) {
|
||||
m_mapAreas[i].m_presenter->Enable(TRUE);
|
||||
m_glowInfo[i].m_destCtl->Enable(TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1362,18 +1371,18 @@ void Infocenter::UpdateFrameHot(MxBool p_display)
|
||||
return;
|
||||
}
|
||||
|
||||
MxS32 originalDisplayZ = m_frameHotBitmap->GetDisplayZ();
|
||||
MxS32 originalDisplayZ = m_frame->GetDisplayZ();
|
||||
|
||||
m_frameHotBitmap->SetDisplayZ(1000);
|
||||
m_frame->SetDisplayZ(1000);
|
||||
VideoManager()->SortPresenterList();
|
||||
|
||||
m_frameHotBitmap->Enable(TRUE);
|
||||
m_frameHotBitmap->SetPosition(x, y);
|
||||
m_frameHotBitmap->SetDisplayZ(originalDisplayZ);
|
||||
m_frame->Enable(TRUE);
|
||||
m_frame->SetPosition(x, y);
|
||||
m_frame->SetDisplayZ(originalDisplayZ);
|
||||
}
|
||||
else {
|
||||
if (m_frameHotBitmap) {
|
||||
m_frameHotBitmap->Enable(FALSE);
|
||||
if (m_frame) {
|
||||
m_frame->Enable(FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -327,7 +327,7 @@ MxLong LegoAct2::Notify(MxParam& p_param)
|
||||
local90 *= 1.25f;
|
||||
locala4 += local90;
|
||||
locala4[1] += 0.25;
|
||||
local30.EqualsCross(&localac, &local28);
|
||||
local30.EqualsCross(localac, local28);
|
||||
local30.Unitize();
|
||||
|
||||
Mx3DPointFloat locald4(local2world[2]);
|
||||
@ -1155,7 +1155,7 @@ MxResult LegoAct2::FUN_10052560(
|
||||
Vector3 secondColumn(matrix[1]);
|
||||
Vector3 thirdColumn(matrix[2]);
|
||||
|
||||
firstColumn.EqualsCross(&secondColumn, &thirdColumn);
|
||||
firstColumn.EqualsCross(secondColumn, thirdColumn);
|
||||
firstColumn.Unitize();
|
||||
|
||||
MxMatrix* pmatrix = NULL;
|
||||
|
||||
@ -32,12 +32,6 @@ Score::Score()
|
||||
NotificationManager()->Register(this);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100010b0
|
||||
MxBool Score::VTable0x5c()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10001200
|
||||
Score::~Score()
|
||||
{
|
||||
@ -260,7 +254,8 @@ void Score::Paint()
|
||||
memset(&desc, 0, sizeof(desc));
|
||||
desc.dwSize = sizeof(desc);
|
||||
|
||||
if (cube->m_surface->Lock(NULL, &desc, 0, NULL) == DD_OK) {
|
||||
HRESULT result = cube->m_surface->Lock(NULL, &desc, DDLOCK_SURFACEMEMORYPTR, NULL);
|
||||
if (result == DD_OK) {
|
||||
if (desc.lPitch != desc.dwWidth) {
|
||||
cube->m_surface->Unlock(desc.lpSurface);
|
||||
return;
|
||||
@ -296,7 +291,7 @@ void Score::Paint()
|
||||
|
||||
// FUNCTION: LEGO1 0x10001d20
|
||||
// FUNCTION: BETA10 0x100f4a52
|
||||
void Score::FillArea(MxU32 i_activity, MxU32 i_actor, MxS16 score)
|
||||
void Score::FillArea(MxS32 i_activity, MxS32 i_actor, MxS16 score)
|
||||
{
|
||||
MxS32 local3c[] = {0x2b00, 0x5700, 0x8000, 0xab00, 0xd600};
|
||||
MxS32 local14[] = {0x2a, 0x27, 0x29, 0x29, 0x2a};
|
||||
@ -304,6 +299,10 @@ void Score::FillArea(MxU32 i_activity, MxU32 i_actor, MxS16 score)
|
||||
MxS32 local28[] = {0x25, 0x29, 0x27, 0x28, 0x28};
|
||||
MxS32 colors[] = {0x11, 0x0f, 0x08, 0x05};
|
||||
|
||||
assert(i_activity >= 0 && i_activity < 5);
|
||||
assert(i_actor >= 0 && i_actor < 5);
|
||||
assert(score >= 0 && score < 4);
|
||||
|
||||
MxU8* ptr = m_surface + local3c[i_actor] + local50[i_activity];
|
||||
MxS32 color = colors[score];
|
||||
MxS32 size = local28[i_activity];
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
#include "legoanim.h"
|
||||
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
#include "mxgeometry/mxquaternion.h"
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
@ -231,10 +232,10 @@ LegoResult LegoAnimScene::FUN_1009f490(LegoFloat p_time, Matrix4& p_matrix)
|
||||
local54 -= localb8;
|
||||
|
||||
if (local54.Unitize() == 0) {
|
||||
local5c.EqualsCross(&local68, &local54);
|
||||
local5c.EqualsCross(local68, local54);
|
||||
|
||||
if (local5c.Unitize() == 0) {
|
||||
local68.EqualsCross(&local54, &local5c);
|
||||
local68.EqualsCross(local54, local5c);
|
||||
|
||||
localcc = p_matrix[3];
|
||||
localcc += localb0[3];
|
||||
@ -851,7 +852,7 @@ inline void LegoAnimNodeData::GetTranslation(
|
||||
break;
|
||||
case 2:
|
||||
Mx4DPointFloat a;
|
||||
UnknownMx4DPointFloat b;
|
||||
MxQuaternionTransformer b;
|
||||
|
||||
if (p_rotationKeys[i].TestBit1() || p_rotationKeys[i + 1].TestBit1()) {
|
||||
a[0] = p_rotationKeys[i].GetX();
|
||||
@ -878,9 +879,9 @@ inline void LegoAnimNodeData::GetTranslation(
|
||||
c[3] = p_rotationKeys[i + 1].GetAngle();
|
||||
}
|
||||
|
||||
b.BETA_10180b80(a);
|
||||
b.BETA_10180bc0(c);
|
||||
b.BETA_1004aaa0(
|
||||
b.SetStart(a);
|
||||
b.SetEnd(c);
|
||||
b.InterpolateToMatrix(
|
||||
p_matrix,
|
||||
(p_time - p_rotationKeys[i].GetTime()) / (p_rotationKeys[i + 1].GetTime() - p_rotationKeys[i].GetTime())
|
||||
);
|
||||
@ -1163,7 +1164,7 @@ undefined4 LegoAnim::GetActorUnknown0x04(LegoU32 p_index)
|
||||
return m_modelList[p_index].m_unk0x04;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100a0f60
|
||||
|
||||
@ -139,10 +139,10 @@ LegoS32 LegoWEGEdge::VTable0x04()
|
||||
Mx3DPointFloat local58;
|
||||
Vector3 local64(&m_edgeNormals[i][0]);
|
||||
edge->FUN_1002ddc0(*this, local58);
|
||||
local64.EqualsCross(&local58, &m_unk0x14);
|
||||
local64.EqualsCross(local58, m_unk0x14);
|
||||
|
||||
m_edgeNormals[i][3] = -local64.Dot(m_edges[i]->m_pointA, &local64);
|
||||
if (m_edgeNormals[i][3] + m_unk0x30.Dot(&m_unk0x30, &local64) < 0.0f) {
|
||||
m_edgeNormals[i][3] = -local64.Dot(*m_edges[i]->m_pointA, local64);
|
||||
if (m_edgeNormals[i][3] + m_unk0x30.Dot(m_unk0x30, local64) < 0.0f) {
|
||||
m_edgeNormals[i] *= -1.0f;
|
||||
}
|
||||
|
||||
@ -178,12 +178,12 @@ LegoS32 LegoWEGEdge::VTable0x04()
|
||||
localb8 -= *vTrig1;
|
||||
local80 -= *vTrig1;
|
||||
|
||||
float locala4 = localb8.Dot(m_unk0x50, &localb8);
|
||||
float locala4 = localb8.Dot(*m_unk0x50, localb8);
|
||||
if (local98 < locala4) {
|
||||
local98 = locala4;
|
||||
}
|
||||
|
||||
locala4 = local80.Dot(m_unk0x50, &local80);
|
||||
locala4 = local80.Dot(*m_unk0x50, local80);
|
||||
if (locala4 < local9c) {
|
||||
local9c = locala4;
|
||||
}
|
||||
@ -244,7 +244,7 @@ LegoS32 LegoWEGEdge::FUN_1009aea0()
|
||||
local50 = *local8[i - 2];
|
||||
local50 -= *local8[i - 1];
|
||||
|
||||
local24.EqualsCross(&local50, &local3c);
|
||||
local24.EqualsCross(local50, local3c);
|
||||
local28 = local24.LenSquared();
|
||||
|
||||
if (local28 < 0.00001f) {
|
||||
@ -255,7 +255,7 @@ LegoS32 LegoWEGEdge::FUN_1009aea0()
|
||||
local24 /= local58;
|
||||
|
||||
if (localc) {
|
||||
float local54 = local24.Dot(&m_unk0x14, &local24);
|
||||
float local54 = local24.Dot(m_unk0x14, local24);
|
||||
if (local54 < 0.98) {
|
||||
delete[] local8;
|
||||
return -2;
|
||||
@ -265,7 +265,7 @@ LegoS32 LegoWEGEdge::FUN_1009aea0()
|
||||
m_unk0x14[0] = local24[0];
|
||||
m_unk0x14[1] = local24[1];
|
||||
m_unk0x14[2] = local24[2];
|
||||
m_unk0x14[3] = -local8[i]->Dot(local8[i], &local24);
|
||||
m_unk0x14[3] = -local8[i]->Dot(*local8[i], local24);
|
||||
localc = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
#include "decomp.h"
|
||||
#include "legoweedge.h"
|
||||
#include "mxgeometry/mxgeometry3d.h"
|
||||
#include "mxgeometry/mxgeometry4d.h"
|
||||
|
||||
class LegoPathStruct;
|
||||
|
||||
|
||||
@ -57,7 +57,6 @@ class LegoContainer {
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x1007bc00
|
||||
T* Get(const char* p_name)
|
||||
{
|
||||
T* value = NULL;
|
||||
@ -197,4 +196,7 @@ class LegoTextureContainer : public LegoContainer<LegoTextureInfo> {
|
||||
// _Tree<char const *,pair<char const * const,LegoTextureInfo *>,map<char const *,LegoTextureInfo *,LegoContainerInfoComparator,allocator<LegoTextureInfo *> >::_Kfn,LegoContainerInfoComparator,allocator<LegoTextureInfo *> >::_Nil
|
||||
// clang-format on
|
||||
|
||||
// TEMPLATE: BETA10 0x1007bc00
|
||||
// LegoContainer<LegoTextureInfo>::Get
|
||||
|
||||
#endif // LEGOCONTAINER_H
|
||||
|
||||
@ -138,7 +138,7 @@ class LegoFile : public LegoStorage {
|
||||
const char* data = p_str.GetData();
|
||||
LegoU32 fullLength = strlen(data);
|
||||
|
||||
LegoU16 limitedLength = fullLength;
|
||||
LegoU16 limitedLength = (LegoU16) fullLength;
|
||||
Write(&limitedLength, sizeof(limitedLength));
|
||||
Write((char*) data, (LegoS16) fullLength);
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
#include "legounknown.h"
|
||||
|
||||
#include "mxgeometry/mxmatrix.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoUnknown, 0x50)
|
||||
|
||||
// FUNCTION: LEGO1 0x1009a0f0
|
||||
@ -29,7 +31,7 @@ void LegoUnknown::FUN_1009a140(const Vector3& p_point1, Vector3& p_point2, Vecto
|
||||
|
||||
// FUNCTION: LEGO1 0x1009a1e0
|
||||
// FUNCTION: BETA10 0x10182d61
|
||||
LegoResult LegoUnknown::FUN_1009a1e0(float p_f1, Matrix4& p_mat, Vector3& p_v, LegoU32 p_und)
|
||||
LegoResult LegoUnknown::FUN_1009a1e0(float p_f1, MxMatrix& p_mat, Vector3& p_v, LegoU32 p_und)
|
||||
{
|
||||
Vector3 v1(p_mat[3]);
|
||||
Vector3 v2(p_mat[0]);
|
||||
@ -68,11 +70,11 @@ LegoResult LegoUnknown::FUN_1009a1e0(float p_f1, Matrix4& p_mat, Vector3& p_v, L
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
v2.EqualsCross(&p_v, &v4);
|
||||
v2.EqualsCross(p_v, v4);
|
||||
if (v2.Unitize() != 0) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
v3.EqualsCross(&v4, &v2);
|
||||
v3.EqualsCross(v4, v2);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
#include "legotypes.h"
|
||||
#include "mxgeometry/mxgeometry3d.h"
|
||||
|
||||
class Matrix4;
|
||||
class MxMatrix;
|
||||
|
||||
// SIZE 0x50
|
||||
class LegoUnknown {
|
||||
@ -13,7 +13,7 @@ class LegoUnknown {
|
||||
~LegoUnknown();
|
||||
|
||||
void FUN_1009a140(const Vector3& p_point1, Vector3& p_point2, Vector3& p_point3, Vector3& p_point4);
|
||||
LegoResult FUN_1009a1e0(float p_f1, Matrix4& p_mat, Vector3& p_v, LegoU32 p_und);
|
||||
LegoResult FUN_1009a1e0(float p_f1, MxMatrix& p_mat, Vector3& p_v, LegoU32 p_und);
|
||||
|
||||
private:
|
||||
Mx3DPointFloat m_unk0x00[4]; // 0x00
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
#include "legolod.h"
|
||||
#include "misc/legocontainer.h"
|
||||
#include "misc/legostorage.h"
|
||||
#include "mxgeometry/mxgeometry4d.h"
|
||||
#include "realtime/realtime.h"
|
||||
#include "shape/legobox.h"
|
||||
#include "shape/legosphere.h"
|
||||
@ -626,13 +627,13 @@ LegoU32 LegoROI::FUN_100a9410(
|
||||
local38 *= 0.5f;
|
||||
|
||||
local70 = localc0;
|
||||
localc0.SetMatrixProduct(&local70, (float*) m_local2world.GetData());
|
||||
localc0.SetMatrixProduct(local70, (float*) m_local2world.GetData());
|
||||
|
||||
local70 = local9c;
|
||||
local9c.SetMatrixProduct(&local70, (float*) m_local2world.GetData());
|
||||
local9c.SetMatrixProduct(local70, (float*) m_local2world.GetData());
|
||||
|
||||
local70 = local168;
|
||||
local168.SetMatrixProduct(&local70, (float*) m_local2world.GetData());
|
||||
local168.SetMatrixProduct(local70, (float*) m_local2world.GetData());
|
||||
|
||||
p_v3 = m_local2world[3];
|
||||
|
||||
@ -641,22 +642,22 @@ LegoU32 LegoROI::FUN_100a9410(
|
||||
local150[i] = m_local2world[i % 3];
|
||||
|
||||
if (i > 2) {
|
||||
local150[i][3] = -local58.Dot(&local58, &local150[i]);
|
||||
local150[i][3] = -local58.Dot(local58, local150[i]);
|
||||
}
|
||||
else {
|
||||
local150[i][3] = -locala8.Dot(&locala8, &local150[i]);
|
||||
local150[i][3] = -locala8.Dot(locala8, local150[i]);
|
||||
}
|
||||
|
||||
if (local150[i][3] + local38.Dot(&local38, &local150[i]) < 0.0f) {
|
||||
if (local150[i][3] + local38.Dot(local38, local150[i]) < 0.0f) {
|
||||
local150[i] *= -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
float local50 = p_v2.Dot(&p_v2, &local150[i]);
|
||||
float local50 = p_v2.Dot(p_v2, local150[i]);
|
||||
|
||||
if (local50 >= 0.01 || local50 < -0.01) {
|
||||
local50 = -((local150[i][3] + local4c.Dot(&local4c, &local150[i])) / local50);
|
||||
local50 = -((local150[i][3] + local4c.Dot(local4c, local150[i])) / local50);
|
||||
|
||||
if (local50 >= 0.0f && local50 <= p_f1) {
|
||||
Mx3DPointFloat local17c(p_v2);
|
||||
@ -666,7 +667,7 @@ LegoU32 LegoROI::FUN_100a9410(
|
||||
LegoS32 j;
|
||||
for (j = 0; j < 6; j++) {
|
||||
if (i != j && i - j != 3 && j - i != 3) {
|
||||
if (local150[j][3] + local17c.Dot(&local17c, &local150[j]) < 0.0f) {
|
||||
if (local150[j][3] + local17c.Dot(local17c, local150[j]) < 0.0f) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -684,9 +685,9 @@ LegoU32 LegoROI::FUN_100a9410(
|
||||
v1 -= GetWorldBoundingSphere().Center();
|
||||
|
||||
float local10 = GetWorldBoundingSphere().Radius();
|
||||
float local8 = p_v2.Dot(&p_v2, &p_v2);
|
||||
float localc = p_v2.Dot(&p_v2, &v1) * 2.0f;
|
||||
float local14 = v1.Dot(&v1, &v1) - (local10 * local10);
|
||||
float local8 = p_v2.Dot(p_v2, p_v2);
|
||||
float localc = p_v2.Dot(p_v2, v1) * 2.0f;
|
||||
float local14 = v1.Dot(v1, v1) - (local10 * local10);
|
||||
|
||||
if (local8 >= 0.001 || local8 <= -0.001) {
|
||||
float local1c = -1.0f;
|
||||
|
||||
@ -639,6 +639,15 @@
|
||||
// GLOBAL: LEGO1 0x101028da
|
||||
// __OP_POWjmptab
|
||||
|
||||
// GLOBAL: LEGO1 0x1010292a
|
||||
// __OP_LOG10jmptab
|
||||
|
||||
// GLOBAL: LEGO1 0x1010294a
|
||||
// __OP_LOGjmptab
|
||||
|
||||
// GLOBAL: LEGO1 0x1010296a
|
||||
// __OP_EXPjmptab
|
||||
|
||||
// GLOBAL: LEGO1 0x101095f8
|
||||
// __crtheap
|
||||
|
||||
@ -675,6 +684,9 @@
|
||||
// LIBRARY: BETA10 0x100f9a50
|
||||
// _sin
|
||||
|
||||
// LIBRARY: BETA10 0x100f9a5a
|
||||
// _cos
|
||||
|
||||
// LIBRARY: BETA10 0x100f95d0
|
||||
// _sqrt
|
||||
|
||||
|
||||
@ -12,6 +12,13 @@
|
||||
// LIBRARY: BETA10 0x1015fe83
|
||||
// _SmackDoFrameToBuffer
|
||||
|
||||
// LIBRARY: LEGO1 0x100cea58
|
||||
// LIBRARY: BETA10 0x10160e58
|
||||
// _SmackDoFrameToVESA
|
||||
|
||||
// LIBRARY: LEGO1 0x100cfd90
|
||||
// _SmackDoPCM
|
||||
|
||||
// LIBRARY: LEGO1 0x100d052c
|
||||
// LIBRARY: BETA10 0x1016292c
|
||||
// _SmackGetSizeDeltas
|
||||
@ -20,4 +27,7 @@
|
||||
// LIBRARY: BETA10 0x10162943
|
||||
// _SmackGetRect
|
||||
|
||||
// LIBRARY: LEGO1 0x100d0654
|
||||
// _SmackRemapTables
|
||||
|
||||
#endif
|
||||
|
||||
@ -2,8 +2,7 @@
|
||||
#define MXGEOMETRY3D_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "realtime/matrix.h"
|
||||
#include "realtime/vector.h"
|
||||
#include "realtime/vector3d.inl.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d4488
|
||||
// VTABLE: BETA10 0x101b84d0
|
||||
@ -53,199 +52,4 @@ class Mx3DPointFloat : public Vector3 {
|
||||
float m_elements[3]; // 0x08
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d41e8
|
||||
// VTABLE: BETA10 0x101bab78
|
||||
// SIZE 0x18
|
||||
class Mx4DPointFloat : public Vector4 {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x10048290
|
||||
// FUNCTION: BETA10 0x100484c0
|
||||
Mx4DPointFloat() : Vector4(m_elements) {}
|
||||
|
||||
// FUNCTION: BETA10 0x10073bb0
|
||||
Mx4DPointFloat(float p_x, float p_y, float p_z, float p_a) : Vector4(m_elements)
|
||||
{
|
||||
m_elements[0] = p_x;
|
||||
m_elements[1] = p_y;
|
||||
m_elements[2] = p_z;
|
||||
m_elements[3] = p_a;
|
||||
}
|
||||
|
||||
Mx4DPointFloat(const Mx4DPointFloat& p_other) : Vector4(m_elements) { EqualsImpl(p_other.m_data); }
|
||||
|
||||
// FUNCTION: LEGO1 0x10003200
|
||||
virtual void operator=(const Vector4& p_impl) { EqualsImpl(p_impl.m_data); } // vtable+0x98
|
||||
|
||||
// FUNCTION: BETA10 0x1004af10
|
||||
float& operator[](int idx) { return m_data[idx]; }
|
||||
|
||||
// According to the PDB, BETA10 will not link this one if it is never used
|
||||
// const float& operator[](int idx) const { return m_data[idx]; }
|
||||
|
||||
// only used by a couple of BETA10 functions for some unknown reason
|
||||
// FUNCTION: BETA10 0x1001c950
|
||||
float& index_operator(int idx) { return m_data[idx]; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10064b20
|
||||
// SYNTHETIC: BETA10 0x10070420
|
||||
// ??4Mx4DPointFloat@@QAEAAV0@ABV0@@Z
|
||||
|
||||
private:
|
||||
float m_elements[4]; // 0x08
|
||||
};
|
||||
|
||||
// SIZE 0x34
|
||||
class UnknownMx4DPointFloat {
|
||||
public:
|
||||
enum {
|
||||
c_bit1 = 0x01,
|
||||
c_bit2 = 0x02
|
||||
};
|
||||
|
||||
UnknownMx4DPointFloat() : m_unk0x30(0) {}
|
||||
|
||||
// FUNCTION: BETA10 0x1004a9b0
|
||||
void BETA_1004a9b0(Matrix4& p_m1, Matrix4& p_m2)
|
||||
{
|
||||
BETA_1004a9f0(p_m1);
|
||||
FUN_10004620(p_m2);
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x1004a9f0
|
||||
void BETA_1004a9f0(Matrix4& p_m)
|
||||
{
|
||||
p_m.ToQuaternion(m_unk0x00);
|
||||
m_unk0x30 |= c_bit1;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10004620
|
||||
// FUNCTION: BETA10 0x1004aa30
|
||||
void FUN_10004620(Matrix4& p_m)
|
||||
{
|
||||
p_m.ToQuaternion(m_unk0x18);
|
||||
m_unk0x30 |= c_bit2;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10180b80
|
||||
void BETA_10180b80(Vector4& p_v)
|
||||
{
|
||||
m_unk0x00 = p_v;
|
||||
m_unk0x30 |= c_bit1;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10180bc0
|
||||
void BETA_10180bc0(Vector4& p_v)
|
||||
{
|
||||
m_unk0x18 = p_v;
|
||||
m_unk0x30 |= c_bit2;
|
||||
}
|
||||
|
||||
const Vector4& GetUnknown0x00() const { return m_unk0x00; }
|
||||
const Vector4& GetUnknown0x18() const { return m_unk0x18; }
|
||||
undefined4 GetUnknown0x30() const { return m_unk0x30; }
|
||||
|
||||
inline int BETA_1004aaa0(Matrix4& p_matrix, float p_f);
|
||||
inline long FUN_10004520();
|
||||
|
||||
private:
|
||||
inline int FUN_100040a0(Vector4& p_v, float p_f);
|
||||
|
||||
Mx4DPointFloat m_unk0x00; // 0x00
|
||||
Mx4DPointFloat m_unk0x18; // 0x18
|
||||
undefined4 m_unk0x30; // 0x30
|
||||
};
|
||||
|
||||
// FUNCTION: BETA10 0x1004aaa0
|
||||
inline int UnknownMx4DPointFloat::BETA_1004aaa0(Matrix4& p_matrix, float p_f)
|
||||
{
|
||||
float data[4];
|
||||
Vector4 v(data);
|
||||
|
||||
if (FUN_100040a0(v, p_f) == 0) {
|
||||
return p_matrix.FromQuaternion(v);
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10004520
|
||||
inline long UnknownMx4DPointFloat::FUN_10004520()
|
||||
{
|
||||
if (!m_unk0x30) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
Mx4DPointFloat v1;
|
||||
Mx4DPointFloat v2;
|
||||
|
||||
v1 = m_unk0x00;
|
||||
v1 += m_unk0x18;
|
||||
|
||||
v2 = m_unk0x00;
|
||||
v2 -= m_unk0x18;
|
||||
|
||||
if (v1.Dot(&v1, &v1) < v2.Dot(&v2, &v2)) {
|
||||
m_unk0x18 *= -1.0f;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100040a0
|
||||
// FUNCTION: BETA10 0x1004ab10
|
||||
inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f)
|
||||
{
|
||||
if (m_unk0x30 == c_bit1) {
|
||||
p_v = m_unk0x00;
|
||||
p_v[3] = (1.0 - p_f) * acos((double) p_v[3]) * 2.0;
|
||||
return p_v.NormalizeQuaternion();
|
||||
}
|
||||
else if (m_unk0x30 == c_bit2) {
|
||||
p_v = m_unk0x18;
|
||||
p_v[3] = p_f * acos((double) p_v[3]) * 2.0;
|
||||
return p_v.NormalizeQuaternion();
|
||||
}
|
||||
else if (m_unk0x30 == (c_bit1 | c_bit2)) {
|
||||
int i;
|
||||
double d1 = p_v.Dot(&m_unk0x00, &m_unk0x18);
|
||||
double a;
|
||||
double b;
|
||||
|
||||
if (d1 + 1.0 > 0.00001) {
|
||||
if (1.0 - d1 > 0.00001) {
|
||||
double d2 = acos(d1);
|
||||
double denominator = sin(d2);
|
||||
a = sin((1.0 - p_f) * d2) / denominator;
|
||||
b = sin(p_f * d2) / denominator;
|
||||
}
|
||||
else {
|
||||
a = 1.0 - p_f;
|
||||
b = p_f;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
p_v[i] = m_unk0x00[i] * a + m_unk0x18[i] * b;
|
||||
}
|
||||
}
|
||||
else {
|
||||
p_v[0] = -m_unk0x00[1];
|
||||
p_v[1] = m_unk0x00[0];
|
||||
p_v[2] = -m_unk0x00[3];
|
||||
p_v[3] = m_unk0x00[2];
|
||||
a = sin((1.0 - p_f) * 1.570796326794895);
|
||||
b = sin(p_f * 1.570796326794895);
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
p_v[i] = m_unk0x00[i] * a + p_v[i] * b;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // MXGEOMETRY3D_H
|
||||
|
||||
48
LEGO1/mxgeometry/mxgeometry4d.h
Normal file
48
LEGO1/mxgeometry/mxgeometry4d.h
Normal file
@ -0,0 +1,48 @@
|
||||
#ifndef MXGEOMETRY4D_H
|
||||
#define MXGEOMETRY4D_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "realtime/vector4d.inl.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d41e8
|
||||
// VTABLE: BETA10 0x101bab78
|
||||
// SIZE 0x18
|
||||
class Mx4DPointFloat : public Vector4 {
|
||||
public:
|
||||
// FUNCTION: LEGO1 0x10048290
|
||||
// FUNCTION: BETA10 0x100484c0
|
||||
Mx4DPointFloat() : Vector4(m_elements) {}
|
||||
|
||||
// FUNCTION: BETA10 0x10073bb0
|
||||
Mx4DPointFloat(float p_x, float p_y, float p_z, float p_a) : Vector4(m_elements)
|
||||
{
|
||||
m_elements[0] = p_x;
|
||||
m_elements[1] = p_y;
|
||||
m_elements[2] = p_z;
|
||||
m_elements[3] = p_a;
|
||||
}
|
||||
|
||||
Mx4DPointFloat(const Mx4DPointFloat& p_other) : Vector4(m_elements) { EqualsImpl(p_other.m_data); }
|
||||
|
||||
// FUNCTION: LEGO1 0x10003200
|
||||
virtual void operator=(const Vector4& p_impl) { EqualsImpl(p_impl.m_data); } // vtable+0x98
|
||||
|
||||
// FUNCTION: BETA10 0x1004af10
|
||||
float& operator[](int idx) { return m_data[idx]; }
|
||||
|
||||
// According to the PDB, BETA10 will not link this one if it is never used
|
||||
// const float& operator[](int idx) const { return m_data[idx]; }
|
||||
|
||||
// only used by a couple of BETA10 functions for some unknown reason
|
||||
// FUNCTION: BETA10 0x1001c950
|
||||
float& index_operator(int idx) { return m_data[idx]; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10064b20
|
||||
// SYNTHETIC: BETA10 0x10070420
|
||||
// ??4Mx4DPointFloat@@QAEAAV0@ABV0@@Z
|
||||
|
||||
private:
|
||||
float m_elements[4]; // 0x08
|
||||
};
|
||||
|
||||
#endif // MXGEOMETRY4D_H
|
||||
@ -1,7 +1,7 @@
|
||||
#ifndef MXMATRIX_H
|
||||
#define MXMATRIX_H
|
||||
|
||||
#include "realtime/matrix.h"
|
||||
#include "realtime/matrix4d.inl.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d4300
|
||||
// VTABLE: BETA10 0x101b82e0
|
||||
@ -35,4 +35,9 @@ class MxMatrix : public Matrix4 {
|
||||
float m_elements[4][4]; // 0x08
|
||||
};
|
||||
|
||||
// Must be included here (not before MxMatrix) for correct ordering in binary.
|
||||
// FromQuaternion and ToQuaternion in Matrix4 depend on Vector4.
|
||||
// There's a chance they included mxgeometry4d.h after including this somewhere.
|
||||
#include "realtime/vector4d.inl.h"
|
||||
|
||||
#endif // MXMATRIX_H
|
||||
|
||||
165
LEGO1/mxgeometry/mxquaternion.h
Normal file
165
LEGO1/mxgeometry/mxquaternion.h
Normal file
@ -0,0 +1,165 @@
|
||||
#ifndef MXQUATERNION_H
|
||||
#define MXQUATERNION_H
|
||||
|
||||
#include "mxgeometry4d.h"
|
||||
|
||||
// SIZE 0x34
|
||||
class MxQuaternionTransformer {
|
||||
public:
|
||||
enum {
|
||||
c_startSet = 0x01,
|
||||
c_endSet = 0x02
|
||||
};
|
||||
|
||||
MxQuaternionTransformer() : m_flags(0) {}
|
||||
|
||||
inline long NormalizeDirection();
|
||||
inline void SetStartEnd(Matrix4& p_m1, Matrix4& p_m2);
|
||||
inline void SetStart(Matrix4& p_m);
|
||||
inline void SetEnd(Matrix4& p_m);
|
||||
inline void SetStart(Vector4& p_v);
|
||||
inline void SetEnd(Vector4& p_v);
|
||||
inline int InterpolateToMatrix(Matrix4& p_matrix, float p_f);
|
||||
|
||||
const Vector4& GetStartQuat() const { return m_startQuat; }
|
||||
const Vector4& GetEndQuat() const { return m_endQuat; }
|
||||
undefined4 GetFlags() const { return m_flags; }
|
||||
|
||||
private:
|
||||
inline int Interpolate(Vector4& p_v, float p_f);
|
||||
|
||||
Mx4DPointFloat m_startQuat; // 0x00
|
||||
Mx4DPointFloat m_endQuat; // 0x18
|
||||
MxU32 m_flags; // 0x30
|
||||
};
|
||||
|
||||
// FUNCTION: LEGO1 0x10004520
|
||||
long MxQuaternionTransformer::NormalizeDirection()
|
||||
{
|
||||
if (!m_flags) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
Mx4DPointFloat v1;
|
||||
Mx4DPointFloat v2;
|
||||
|
||||
v1 = m_startQuat;
|
||||
v1 += m_endQuat;
|
||||
|
||||
v2 = m_startQuat;
|
||||
v2 -= m_endQuat;
|
||||
|
||||
if (v1.Dot(v1, v1) < v2.Dot(v2, v2)) {
|
||||
m_endQuat *= -1.0f;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x1004a9b0
|
||||
void MxQuaternionTransformer::SetStartEnd(Matrix4& p_m1, Matrix4& p_m2)
|
||||
{
|
||||
SetStart(p_m1);
|
||||
SetEnd(p_m2);
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x1004a9f0
|
||||
void MxQuaternionTransformer::SetStart(Matrix4& p_m)
|
||||
{
|
||||
p_m.ToQuaternion(m_startQuat);
|
||||
m_flags |= c_startSet;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10004620
|
||||
// FUNCTION: BETA10 0x1004aa30
|
||||
void MxQuaternionTransformer::SetEnd(Matrix4& p_m)
|
||||
{
|
||||
p_m.ToQuaternion(m_endQuat);
|
||||
m_flags |= c_endSet;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10180b80
|
||||
void MxQuaternionTransformer::SetStart(Vector4& p_v)
|
||||
{
|
||||
m_startQuat = p_v;
|
||||
m_flags |= c_startSet;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10180bc0
|
||||
void MxQuaternionTransformer::SetEnd(Vector4& p_v)
|
||||
{
|
||||
m_endQuat = p_v;
|
||||
m_flags |= c_endSet;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x1004aaa0
|
||||
int MxQuaternionTransformer::InterpolateToMatrix(Matrix4& p_matrix, float p_f)
|
||||
{
|
||||
float data[4];
|
||||
Vector4 v(data);
|
||||
|
||||
if (Interpolate(v, p_f) == 0) {
|
||||
return p_matrix.FromQuaternion(v);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100040a0
|
||||
// FUNCTION: BETA10 0x1004ab10
|
||||
int MxQuaternionTransformer::Interpolate(Vector4& p_v, float p_f)
|
||||
{
|
||||
if (m_flags == c_startSet) {
|
||||
p_v = m_startQuat;
|
||||
p_v[3] = (float) ((1.0 - p_f) * acos((double) p_v[3]) * 2.0);
|
||||
return p_v.NormalizeQuaternion();
|
||||
}
|
||||
|
||||
if (m_flags == c_endSet) {
|
||||
p_v = m_endQuat;
|
||||
p_v[3] = (float) (p_f * acos((double) p_v[3]) * 2.0);
|
||||
return p_v.NormalizeQuaternion();
|
||||
}
|
||||
|
||||
if (m_flags == (c_startSet | c_endSet)) {
|
||||
int i;
|
||||
double d1 = p_v.Dot(m_startQuat, m_endQuat);
|
||||
double a;
|
||||
double b;
|
||||
|
||||
if (d1 + 1.0 > 0.00001) {
|
||||
if (1.0 - d1 > 0.00001) {
|
||||
double d2 = acos(d1);
|
||||
double denominator = sin(d2);
|
||||
a = sin((1.0 - p_f) * d2) / denominator;
|
||||
b = sin(p_f * d2) / denominator;
|
||||
}
|
||||
else {
|
||||
a = 1.0 - p_f;
|
||||
b = p_f;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
p_v[i] = (float) (m_startQuat[i] * a + m_endQuat[i] * b);
|
||||
}
|
||||
}
|
||||
else {
|
||||
p_v[0] = -m_startQuat[1];
|
||||
p_v[1] = m_startQuat[0];
|
||||
p_v[2] = -m_startQuat[3];
|
||||
p_v[3] = m_startQuat[2];
|
||||
a = sin((1.0 - p_f) * 1.570796326794895);
|
||||
b = sin(p_f * 1.570796326794895);
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
p_v[i] = (float) (m_startQuat[i] * a + p_v[i] * b);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif // MXQUATERNION_H
|
||||
@ -10,6 +10,12 @@ class MxAudioPresenter : public MxMediaPresenter {
|
||||
public:
|
||||
MxAudioPresenter() { m_volume = 100; }
|
||||
|
||||
// FUNCTION: LEGO1 0x1000d260
|
||||
virtual MxS32 GetVolume() { return m_volume; } // vtable+0x5c
|
||||
|
||||
// FUNCTION: LEGO1 0x1000d270
|
||||
virtual void SetVolume(MxS32 p_volume) { m_volume = p_volume; } // vtable+0x60
|
||||
|
||||
// FUNCTION: BETA10 0x1008cba0
|
||||
static const char* HandlerClassName()
|
||||
{
|
||||
@ -30,12 +36,6 @@ class MxAudioPresenter : public MxMediaPresenter {
|
||||
return !strcmp(p_name, MxAudioPresenter::ClassName()) || MxMediaPresenter::IsA(p_name);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1000d260
|
||||
virtual MxS32 GetVolume() { return m_volume; } // vtable+0x5c
|
||||
|
||||
// FUNCTION: LEGO1 0x1000d270
|
||||
virtual void SetVolume(MxS32 p_volume) { m_volume = p_volume; } // vtable+0x60
|
||||
|
||||
protected:
|
||||
MxS32 m_volume; // 0x50
|
||||
};
|
||||
|
||||
@ -90,7 +90,7 @@ class MxBitmap : public MxCore {
|
||||
// DECOMP: This could be a free function. It is static here because it has no
|
||||
// reference to "this". In the beta it is called in two places:
|
||||
// 1. GetBmiHeightAbs
|
||||
// 2. MxSmack::LoadFrame
|
||||
// 2. MxSmk::LoadFrame
|
||||
// FUNCTION: BETA10 0x1002c690
|
||||
static MxLong HeightAbs(MxLong p_value) { return p_value > 0 ? p_value : -p_value; }
|
||||
|
||||
|
||||
@ -97,4 +97,7 @@ class MxDiskStreamController : public MxStreamController {
|
||||
// TEMPLATE: BETA10 0x10150e60
|
||||
// MxUtilityList<MxNextActionDataStart *>::PushBack
|
||||
|
||||
// TEMPLATE: BETA10 0x10150ff0
|
||||
// MxUtilityList<MxDSObject *>::PushBack
|
||||
|
||||
#endif // MXDISKSTREAMCONTROLLER_H
|
||||
|
||||
@ -68,7 +68,7 @@ class MxDSBuffer : public MxCore {
|
||||
// FUNCTION: BETA10 0x10148c60
|
||||
MxU8* GetBuffer() { return m_pBuffer; }
|
||||
|
||||
MxU8** GetBufferRef() { return &m_pBuffer; }
|
||||
// FUNCTION: BETA10 0x10164240
|
||||
undefined4 GetUnknown14() { return m_unk0x14; }
|
||||
|
||||
// FUNCTION: BETA10 0x10156420
|
||||
@ -85,7 +85,10 @@ class MxDSBuffer : public MxCore {
|
||||
|
||||
void SetUnknown14(undefined4 p_unk0x14) { m_unk0x14 = p_unk0x14; }
|
||||
void SetUnknown1c(undefined4 p_unk0x1c) { m_unk0x1c = p_unk0x1c; }
|
||||
|
||||
// FUNCTION: BETA10 0x10164260
|
||||
void SetMode(Type p_mode) { m_mode = p_mode; }
|
||||
|
||||
void SetUnk30(MxDSStreamingAction* p_unk0x30) { m_unk0x30 = p_unk0x30; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100c6510
|
||||
|
||||
@ -35,10 +35,12 @@ class MxDSChunk : public MxCore {
|
||||
}
|
||||
|
||||
static MxU32 GetHeaderSize();
|
||||
static MxU32* IntoType(MxU8* p_buffer) { return (MxU32*) p_buffer; }
|
||||
static MxU32* IntoLength(MxU8* p_buffer) { return (MxU32*) (p_buffer + 4); }
|
||||
static MxU32 Size(MxU32 p_dataSize) { return (p_dataSize & 1) + p_dataSize + 8; }
|
||||
static MxU8* End(MxU8* p_buffer) { return p_buffer + Size(*IntoLength(p_buffer)); }
|
||||
|
||||
// FUNCTION: BETA10 0x101641f0
|
||||
static MxU32 Size(MxU8* p_buffer) { return (*(MxU32*) (p_buffer + 4) & 1) + *(MxU32*) (p_buffer + 4) + 8; }
|
||||
|
||||
// FUNCTION: BETA10 0x10164220
|
||||
static MxU8* End(MxU8* p_buffer) { return p_buffer + Size(p_buffer); }
|
||||
|
||||
void SetChunkFlags(MxU16 p_flags) { m_flags = p_flags; }
|
||||
void SetObjectId(undefined4 p_objectid) { m_objectId = p_objectid; }
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
class MxDSBuffer;
|
||||
|
||||
// VTABLE: LEGO1 0x100dd088
|
||||
// VTABLE: BETA10 0x101c2850
|
||||
// SIZE 0xb4
|
||||
class MxDSStreamingAction : public MxDSAction {
|
||||
public:
|
||||
@ -14,40 +15,53 @@ class MxDSStreamingAction : public MxDSAction {
|
||||
~MxDSStreamingAction() override;
|
||||
|
||||
MxDSStreamingAction* CopyFrom(MxDSStreamingAction& p_dsStreamingAction);
|
||||
MxDSStreamingAction& operator=(MxDSAction& p_dsAction)
|
||||
{
|
||||
MxDSAction::operator=(p_dsAction);
|
||||
return *this;
|
||||
}
|
||||
MxDSStreamingAction& operator=(MxDSStreamingAction& p_dsStreamingAction)
|
||||
{
|
||||
MxDSAction::operator=(p_dsStreamingAction);
|
||||
return *this;
|
||||
}
|
||||
|
||||
MxBool HasId(MxU32 p_objectId) override; // vtable+34;
|
||||
MxBool HasId(MxU32 p_objectId) override; // vtable+0x34;
|
||||
|
||||
MxResult Init();
|
||||
void Init();
|
||||
void SetInternalAction(MxDSAction* p_dsAction);
|
||||
void FUN_100cd2d0();
|
||||
|
||||
// FUNCTION: BETA10 0x10156530
|
||||
MxU32 GetUnknown94() { return m_unk0x94; }
|
||||
|
||||
// FUNCTION: BETA10 0x10156380
|
||||
MxS32 GetUnknown9c() { return m_unk0x9c; }
|
||||
|
||||
// FUNCTION: BETA10 0x10156630
|
||||
MxDSBuffer* GetUnknowna0() { return m_unk0xa0; }
|
||||
|
||||
// FUNCTION: BETA10 0x101563d0
|
||||
MxDSBuffer* GetUnknowna4() { return m_unk0xa4; }
|
||||
|
||||
// FUNCTION: BETA10 0x10159190
|
||||
MxLong GetUnknowna8() { return m_unk0xa8; }
|
||||
|
||||
MxDSAction* GetInternalAction() { return m_internalAction; }
|
||||
|
||||
// FUNCTION: BETA10 0x10156580
|
||||
MxU32 GetBufferOffset() { return m_bufferOffset; }
|
||||
|
||||
// FUNCTION: BETA10 0x10156550
|
||||
void SetUnknown94(MxU32 p_unk0x94) { m_unk0x94 = p_unk0x94; }
|
||||
|
||||
// FUNCTION: BETA10 0x101563a0
|
||||
void SetUnknown9c(MxS32 p_unk0x9c) { m_unk0x9c = p_unk0x9c; }
|
||||
|
||||
// FUNCTION: BETA10 0x10156470
|
||||
void SetUnknowna0(MxDSBuffer* p_unk0xa0) { m_unk0xa0 = p_unk0xa0; }
|
||||
|
||||
// FUNCTION: BETA10 0x101563f0
|
||||
void SetUnknowna4(MxDSBuffer* p_unk0xa4) { m_unk0xa4 = p_unk0xa4; }
|
||||
|
||||
// FUNCTION: BETA10 0x10151150
|
||||
void SetBufferOffset(MxU32 p_bufferOffset) { m_bufferOffset = p_bufferOffset; }
|
||||
|
||||
// FUNCTION: BETA10 0x10156650
|
||||
void ClearUnknowna0() { m_unk0xa0 = NULL; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x100cd0b0
|
||||
// SYNTHETIC: BETA10 0x101565f0
|
||||
// MxDSStreamingAction::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
|
||||
@ -29,6 +29,7 @@ class MXIOINFO {
|
||||
MxU16 Advance(MxU16);
|
||||
MxU16 Descend(MMCKINFO*, const MMCKINFO*, MxU16);
|
||||
MxU16 Ascend(MMCKINFO*, MxU16);
|
||||
MxU16 CreateChunk(MMCKINFO* p_chunkInfo, MxU16 p_create);
|
||||
|
||||
// NOTE: In MXIOINFO, the `hmmio` member of MMIOINFO is used like
|
||||
// an HFILE (int) instead of an HMMIO (WORD).
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user