mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-12 10:41:15 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
a6b90abcca
@ -569,7 +569,7 @@ endif()
|
||||
if (ISLE_BUILD_CONFIG)
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
|
||||
qt_standard_project_setup()
|
||||
qt_add_executable(config WIN32
|
||||
qt_add_executable(isle-config WIN32
|
||||
LEGO1/mxdirectx/mxdirectxinfo.cpp
|
||||
LEGO1/mxdirectx/legodxinfo.cpp
|
||||
CONFIG/config.cpp
|
||||
@ -579,22 +579,22 @@ if (ISLE_BUILD_CONFIG)
|
||||
CONFIG/res/config.rc
|
||||
CONFIG/res/config.qrc
|
||||
)
|
||||
target_link_libraries(config PRIVATE Qt6::Core Qt6::Widgets)
|
||||
set_property(TARGET config PROPERTY AUTOMOC ON)
|
||||
set_property(TARGET config PROPERTY AUTORCC ON)
|
||||
set_property(TARGET config PROPERTY AUTOUIC ON)
|
||||
set_property(TARGET config PROPERTY AUTOUIC_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/CONFIG/res")
|
||||
list(APPEND isle_targets config)
|
||||
target_compile_definitions(config PRIVATE _AFXDLL MXDIRECTX_FOR_CONFIG)
|
||||
target_include_directories(config PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/LEGO1")
|
||||
target_include_directories(config PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/util>")
|
||||
target_link_libraries(isle-config PRIVATE Qt6::Core Qt6::Widgets)
|
||||
set_property(TARGET isle-config PROPERTY AUTOMOC ON)
|
||||
set_property(TARGET isle-config PROPERTY AUTORCC ON)
|
||||
set_property(TARGET isle-config PROPERTY AUTOUIC ON)
|
||||
set_property(TARGET isle-config PROPERTY AUTOUIC_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/CONFIG/res")
|
||||
list(APPEND isle_targets isle-config)
|
||||
target_compile_definitions(isle-config PRIVATE _AFXDLL MXDIRECTX_FOR_CONFIG)
|
||||
target_include_directories(isle-config PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/LEGO1")
|
||||
target_include_directories(isle-config PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/util>")
|
||||
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14)
|
||||
target_link_libraries(config PRIVATE DirectX5::DirectX5)
|
||||
target_link_libraries(isle-config PRIVATE DirectX5::DirectX5)
|
||||
endif()
|
||||
target_compile_definitions(config PRIVATE DIRECT3D_VERSION=0x500)
|
||||
target_link_libraries(config PRIVATE SDL3::SDL3 Isle::iniparser)
|
||||
target_compile_definitions(isle-config PRIVATE DIRECT3D_VERSION=0x500)
|
||||
target_link_libraries(isle-config PRIVATE SDL3::SDL3 Isle::iniparser)
|
||||
if (NOT ISLE_MINIWIN)
|
||||
target_link_libraries(config PRIVATE ddraw dxguid)
|
||||
target_link_libraries(isle-config PRIVATE ddraw dxguid)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -608,8 +608,8 @@ if (MSVC)
|
||||
if (TARGET isle)
|
||||
target_compile_definitions(isle PRIVATE "_CRT_SECURE_NO_WARNINGS")
|
||||
endif()
|
||||
if (TARGET config)
|
||||
target_compile_definitions(config PRIVATE "_CRT_SECURE_NO_WARNINGS")
|
||||
if (TARGET isle-config)
|
||||
target_compile_definitions(isle-config PRIVATE "_CRT_SECURE_NO_WARNINGS")
|
||||
endif()
|
||||
endif()
|
||||
# Visual Studio 2017 version 15.7 needs "/Zc:__cplusplus" for __cplusplus
|
||||
@ -618,8 +618,8 @@ if (MSVC)
|
||||
if (TARGET isle)
|
||||
target_compile_options(isle PRIVATE "-Zc:__cplusplus")
|
||||
endif()
|
||||
if (TARGET config)
|
||||
target_compile_options(config PRIVATE "-Zc:__cplusplus")
|
||||
if (TARGET isle-config)
|
||||
target_compile_options(isle-config PRIVATE "-Zc:__cplusplus")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
@ -677,7 +677,7 @@ install(TARGETS isle ${install_extra_targets}
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
)
|
||||
if (ISLE_BUILD_CONFIG)
|
||||
install(TARGETS config
|
||||
install(TARGETS isle-config
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
)
|
||||
endif()
|
||||
|
||||
@ -11,6 +11,8 @@
|
||||
#include "res/resource.h"
|
||||
|
||||
#include <QKeyEvent>
|
||||
#include <QMessageBox>
|
||||
#include <QProcess>
|
||||
#include <mxdirectx/legodxinfo.h>
|
||||
#include <ui_maindialog.h>
|
||||
|
||||
@ -56,18 +58,16 @@ CMainDialog::CMainDialog(QWidget* pParent) : QDialog(pParent)
|
||||
connect(m_ui->musicCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxMusic);
|
||||
connect(m_ui->sound3DCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckbox3DSound);
|
||||
connect(m_ui->joystickCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxJoystick);
|
||||
connect(m_ui->fullscreenCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxFullscreen);
|
||||
connect(m_ui->okButton, &QPushButton::clicked, this, &CMainDialog::accept);
|
||||
connect(m_ui->cancelButton, &QPushButton::clicked, this, &CMainDialog::reject);
|
||||
connect(m_ui->launchButton, &QPushButton::clicked, this, &CMainDialog::launch);
|
||||
|
||||
connect(m_ui->diskPathOpen, &QPushButton::clicked, this, &CMainDialog::SelectDiskPathDialog);
|
||||
connect(m_ui->cdPathOpen, &QPushButton::clicked, this, &CMainDialog::SelectCDPathDialog);
|
||||
connect(m_ui->mediaPathOpen, &QPushButton::clicked, this, &CMainDialog::SelectMediaPathDialog);
|
||||
connect(m_ui->dataPathOpen, &QPushButton::clicked, this, &CMainDialog::SelectDataPathDialog);
|
||||
connect(m_ui->savePathOpen, &QPushButton::clicked, this, &CMainDialog::SelectSavePathDialog);
|
||||
|
||||
connect(m_ui->diskPath, &QLineEdit::textEdited, this, &CMainDialog::DiskPathEdited);
|
||||
connect(m_ui->cdPath, &QLineEdit::textEdited, this, &CMainDialog::CDPathEdited);
|
||||
connect(m_ui->mediaPath, &QLineEdit::textEdited, this, &CMainDialog::MediaPathEdited);
|
||||
connect(m_ui->savePath, &QLineEdit::textEdited, this, &CMainDialog::SavePathEdited);
|
||||
connect(m_ui->dataPath, &QLineEdit::editingFinished, this, &CMainDialog::DataPathEdited);
|
||||
connect(m_ui->savePath, &QLineEdit::editingFinished, this, &CMainDialog::SavePathEdited);
|
||||
|
||||
connect(m_ui->maxLoDSlider, &QSlider::valueChanged, this, &CMainDialog::MaxLoDChanged);
|
||||
connect(m_ui->maxActorsSlider, &QSlider::valueChanged, this, &CMainDialog::MaxActorsChanged);
|
||||
@ -158,6 +158,30 @@ void CMainDialog::accept()
|
||||
QDialog::accept();
|
||||
}
|
||||
|
||||
void CMainDialog::launch()
|
||||
{
|
||||
if (m_modified) {
|
||||
currentConfigApp->WriteRegisterSettings();
|
||||
}
|
||||
|
||||
QDir::setCurrent(QCoreApplication::applicationDirPath());
|
||||
|
||||
QMessageBox msgBox = QMessageBox(
|
||||
QMessageBox::Warning,
|
||||
QString("Error!"),
|
||||
QString("Unable to locate isle executable!"),
|
||||
QMessageBox::Close
|
||||
);
|
||||
|
||||
if (!QProcess::startDetached("./isle")) { // Check in isle-config directory
|
||||
if (!QProcess::startDetached("isle")) { // Check in $PATH
|
||||
msgBox.exec();
|
||||
}
|
||||
}
|
||||
|
||||
QDialog::accept();
|
||||
}
|
||||
|
||||
// FUNCTION: CONFIG 0x00404360
|
||||
void CMainDialog::UpdateInterface()
|
||||
{
|
||||
@ -187,9 +211,8 @@ void CMainDialog::UpdateInterface()
|
||||
}
|
||||
m_ui->joystickCheckBox->setChecked(currentConfigApp->m_use_joystick);
|
||||
m_ui->musicCheckBox->setChecked(currentConfigApp->m_music);
|
||||
m_ui->diskPath->setText(QString::fromStdString(currentConfigApp->m_base_path));
|
||||
m_ui->cdPath->setText(QString::fromStdString(currentConfigApp->m_cd_path));
|
||||
m_ui->mediaPath->setText(QString::fromStdString(currentConfigApp->m_media_path));
|
||||
m_ui->fullscreenCheckBox->setChecked(currentConfigApp->m_full_screen);
|
||||
m_ui->dataPath->setText(QString::fromStdString(currentConfigApp->m_cd_path));
|
||||
m_ui->savePath->setText(QString::fromStdString(currentConfigApp->m_save_path));
|
||||
}
|
||||
|
||||
@ -266,54 +289,33 @@ void CMainDialog::OnCheckboxMusic(bool checked)
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
void CMainDialog::SelectDiskPathDialog()
|
||||
void CMainDialog::OnCheckboxFullscreen(bool checked)
|
||||
{
|
||||
QString disk_path = QString::fromStdString(currentConfigApp->m_base_path);
|
||||
disk_path = QFileDialog::getExistingDirectory(
|
||||
this,
|
||||
tr("Open Directory"),
|
||||
disk_path,
|
||||
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
|
||||
);
|
||||
|
||||
if (disk_path.toStdString() != "") {
|
||||
currentConfigApp->m_base_path = disk_path.toStdString();
|
||||
m_modified = true;
|
||||
UpdateInterface();
|
||||
}
|
||||
currentConfigApp->m_full_screen = checked;
|
||||
m_modified = true;
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
void CMainDialog::SelectCDPathDialog()
|
||||
void CMainDialog::SelectDataPathDialog()
|
||||
{
|
||||
QString cd_path = QString::fromStdString(currentConfigApp->m_cd_path);
|
||||
cd_path = QFileDialog::getExistingDirectory(
|
||||
QString data_path = QString::fromStdString(currentConfigApp->m_cd_path);
|
||||
data_path = QFileDialog::getExistingDirectory(
|
||||
this,
|
||||
tr("Open Directory"),
|
||||
cd_path,
|
||||
data_path,
|
||||
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
|
||||
);
|
||||
|
||||
if (cd_path.toStdString() != "") {
|
||||
currentConfigApp->m_cd_path = cd_path.toStdString();
|
||||
m_modified = true;
|
||||
UpdateInterface();
|
||||
}
|
||||
}
|
||||
QDir data_dir = QDir(data_path);
|
||||
|
||||
void CMainDialog::SelectMediaPathDialog()
|
||||
{
|
||||
QString media_path = QString::fromStdString(currentConfigApp->m_media_path);
|
||||
media_path = QFileDialog::getExistingDirectory(
|
||||
this,
|
||||
tr("Open Directory"),
|
||||
media_path,
|
||||
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
|
||||
);
|
||||
if (media_path.toStdString() != "") {
|
||||
currentConfigApp->m_media_path = media_path.toStdString();
|
||||
if (data_dir.exists()) {
|
||||
currentConfigApp->m_cd_path = data_dir.absolutePath().toStdString();
|
||||
data_dir.cd(QString("DATA"));
|
||||
data_dir.cd(QString("disk"));
|
||||
currentConfigApp->m_base_path = data_dir.absolutePath().toStdString();
|
||||
m_modified = true;
|
||||
UpdateInterface();
|
||||
}
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
void CMainDialog::SelectSavePathDialog()
|
||||
@ -326,38 +328,39 @@ void CMainDialog::SelectSavePathDialog()
|
||||
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
|
||||
);
|
||||
|
||||
if (save_path.toStdString() != "") {
|
||||
currentConfigApp->m_save_path = save_path.toStdString();
|
||||
QDir save_dir = QDir(save_path);
|
||||
|
||||
if (save_dir.exists()) {
|
||||
currentConfigApp->m_save_path = save_dir.absolutePath().toStdString();
|
||||
m_modified = true;
|
||||
UpdateInterface();
|
||||
}
|
||||
}
|
||||
|
||||
void CMainDialog::DiskPathEdited(const QString& text)
|
||||
{
|
||||
currentConfigApp->m_base_path = text.toStdString();
|
||||
m_modified = true;
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
void CMainDialog::CDPathEdited(const QString& text)
|
||||
void CMainDialog::DataPathEdited()
|
||||
{
|
||||
currentConfigApp->m_cd_path = text.toStdString();
|
||||
m_modified = true;
|
||||
QDir data_dir = QDir(m_ui->dataPath->text());
|
||||
|
||||
if (data_dir.exists()) {
|
||||
currentConfigApp->m_cd_path = data_dir.absolutePath().toStdString();
|
||||
data_dir.cd(QString("DATA"));
|
||||
data_dir.cd(QString("disk"));
|
||||
currentConfigApp->m_base_path = data_dir.absolutePath().toStdString();
|
||||
m_modified = true;
|
||||
}
|
||||
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
void CMainDialog::MediaPathEdited(const QString& text)
|
||||
void CMainDialog::SavePathEdited()
|
||||
{
|
||||
currentConfigApp->m_media_path = text.toStdString();
|
||||
m_modified = true;
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
void CMainDialog::SavePathEdited(const QString& text)
|
||||
{
|
||||
currentConfigApp->m_save_path = text.toStdString();
|
||||
m_modified = true;
|
||||
QDir save_dir = QDir(m_ui->savePath->text());
|
||||
|
||||
if (save_dir.exists()) {
|
||||
currentConfigApp->m_save_path = save_dir.absolutePath().toStdString();
|
||||
m_modified = true;
|
||||
}
|
||||
UpdateInterface();
|
||||
}
|
||||
|
||||
|
||||
@ -42,16 +42,14 @@ private slots:
|
||||
void OnRadiobuttonTextureHighQuality(bool checked);
|
||||
void OnCheckboxJoystick(bool checked);
|
||||
void OnCheckboxMusic(bool checked);
|
||||
void OnCheckboxFullscreen(bool checked);
|
||||
void accept() override;
|
||||
void reject() override;
|
||||
void SelectDiskPathDialog();
|
||||
void SelectCDPathDialog();
|
||||
void SelectMediaPathDialog();
|
||||
void launch();
|
||||
void SelectDataPathDialog();
|
||||
void SelectSavePathDialog();
|
||||
void DiskPathEdited(const QString& text);
|
||||
void CDPathEdited(const QString& text);
|
||||
void MediaPathEdited(const QString& text);
|
||||
void SavePathEdited(const QString& text);
|
||||
void DataPathEdited();
|
||||
void SavePathEdited();
|
||||
void MaxLoDChanged(int value);
|
||||
void MaxActorsChanged(int value);
|
||||
};
|
||||
|
||||
@ -141,7 +141,6 @@ bool CConfigApp::ReadRegisterSettings()
|
||||
}
|
||||
m_base_path = iniparser_getstring(dict, "isle:diskpath", m_base_path.c_str());
|
||||
m_cd_path = iniparser_getstring(dict, "isle:cdpath", m_cd_path.c_str());
|
||||
m_media_path = iniparser_getstring(dict, "isle:mediapath", m_media_path.c_str());
|
||||
m_save_path = iniparser_getstring(dict, "isle:savepath", m_save_path.c_str());
|
||||
m_display_bit_depth = iniparser_getint(dict, "isle:Display Bit Depth", -1);
|
||||
m_flip_surfaces = iniparser_getboolean(dict, "isle:Flip Surfaces", m_flip_surfaces);
|
||||
@ -166,10 +165,6 @@ bool CConfigApp::ValidateSettings()
|
||||
{
|
||||
BOOL is_modified = FALSE;
|
||||
|
||||
if (!IsPrimaryDriver() && !m_full_screen) {
|
||||
m_full_screen = TRUE;
|
||||
is_modified = TRUE;
|
||||
}
|
||||
if (IsDeviceInBasicRGBMode()) {
|
||||
if (m_3d_video_ram) {
|
||||
m_3d_video_ram = FALSE;
|
||||
@ -203,10 +198,6 @@ bool CConfigApp::ValidateSettings()
|
||||
m_3d_video_ram = TRUE;
|
||||
is_modified = TRUE;
|
||||
}
|
||||
if (!m_full_screen) {
|
||||
m_full_screen = TRUE;
|
||||
is_modified = TRUE;
|
||||
}
|
||||
}
|
||||
if ((m_display_bit_depth != 8 && m_display_bit_depth != 16) && (m_display_bit_depth != 0 || m_full_screen)) {
|
||||
m_display_bit_depth = 16;
|
||||
@ -302,7 +293,6 @@ void CConfigApp::WriteRegisterSettings() const
|
||||
}
|
||||
iniparser_set(dict, "isle:diskpath", m_base_path.c_str());
|
||||
iniparser_set(dict, "isle:cdpath", m_cd_path.c_str());
|
||||
iniparser_set(dict, "isle:mediapath", m_media_path.c_str());
|
||||
iniparser_set(dict, "isle:savepath", m_save_path.c_str());
|
||||
|
||||
SetIniInt(dict, "isle:Display Bit Depth", m_display_bit_depth);
|
||||
|
||||
@ -77,7 +77,6 @@ class CConfigApp {
|
||||
std::string m_iniPath;
|
||||
std::string m_base_path;
|
||||
std::string m_cd_path;
|
||||
std::string m_media_path;
|
||||
std::string m_save_path;
|
||||
float m_max_lod;
|
||||
int m_max_actors;
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>575</width>
|
||||
<height>650</height>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@ -44,6 +44,9 @@
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Jaws.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
@ -76,13 +79,7 @@
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="cdPath"/>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="mediaPath"/>
|
||||
</item>
|
||||
<item row="7" column="2">
|
||||
<item row="5" column="2">
|
||||
<widget class="QPushButton" name="savePathOpen">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
@ -101,68 +98,8 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="mediaPathOpen">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>55</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QPushButton" name="cdPathOpen">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>55</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="cdPathLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>CD Path:</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="diskPath"/>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="diskPathOpen">
|
||||
<widget class="QPushButton" name="dataPathOpen">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@ -180,26 +117,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="diskPathLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Disk Path:</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="savePathLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
@ -218,8 +136,22 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="mediaPathLabel">
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="dataPath">
|
||||
<property name="toolTip">
|
||||
<string>Path to the game data files. Set this to the CD image root.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QLineEdit" name="savePath">
|
||||
<property name="toolTip">
|
||||
<string>Folder where save files are kept.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="dataPathLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@ -227,7 +159,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Media Path:</string>
|
||||
<string>Data Path:</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
@ -237,9 +169,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QLineEdit" name="savePath"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@ -266,6 +195,9 @@
|
||||
<height>120</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Set 3D model detail level.</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Island Model Quality</string>
|
||||
</property>
|
||||
@ -345,6 +277,9 @@
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QGroupBox" name="textureQualityGroup">
|
||||
<property name="toolTip">
|
||||
<string>Set texture detail level.</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Island Texture Quality</string>
|
||||
</property>
|
||||
@ -422,16 +357,13 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="musicJoystickWidget" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="checkboxWidget" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="sound3DCheckBox">
|
||||
<property name="toolTip">
|
||||
<string>Enable 3D positional audio effects.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>3D Sound</string>
|
||||
</property>
|
||||
@ -439,6 +371,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="musicCheckBox">
|
||||
<property name="toolTip">
|
||||
<string>Enable in-game background music.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Music</string>
|
||||
</property>
|
||||
@ -446,11 +381,24 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="joystickCheckBox">
|
||||
<property name="toolTip">
|
||||
<string>Enable joystick and gamepad support for LEGO Island.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Use Joystick</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="fullscreenCheckBox">
|
||||
<property name="toolTip">
|
||||
<string>Toggle fullscreen display mode.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Fullscreen</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@ -462,6 +410,9 @@
|
||||
<height>225</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>3D graphics device used to render the game.</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string/>
|
||||
</property>
|
||||
@ -557,8 +508,11 @@
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QPushButton" name="okButton">
|
||||
<property name="toolTip">
|
||||
<string>Save configuration and close the config tool.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>OK</string>
|
||||
<string>Save and Exit</string>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>true</bool>
|
||||
@ -566,9 +520,22 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="cancelButton">
|
||||
<widget class="QPushButton" name="launchButton">
|
||||
<property name="toolTip">
|
||||
<string>Save configuration and launch LEGO Island.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Cancel</string>
|
||||
<string>Save and Launch</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="cancelButton">
|
||||
<property name="toolTip">
|
||||
<string>Discard changed settings and close the config tool.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Exit without saving</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -581,12 +548,8 @@
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>diskPath</tabstop>
|
||||
<tabstop>diskPathOpen</tabstop>
|
||||
<tabstop>cdPath</tabstop>
|
||||
<tabstop>cdPathOpen</tabstop>
|
||||
<tabstop>mediaPath</tabstop>
|
||||
<tabstop>mediaPathOpen</tabstop>
|
||||
<tabstop>dataPath</tabstop>
|
||||
<tabstop>dataPathOpen</tabstop>
|
||||
<tabstop>savePath</tabstop>
|
||||
<tabstop>savePathOpen</tabstop>
|
||||
<tabstop>textureQualityFastRadioButton</tabstop>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
diff --git a/src/lib/libwasmfs_fetch.js b/src/lib/libwasmfs_fetch.js
|
||||
index e8c9f7e21..1c0eea957 100644
|
||||
index e8c9f7e21..caf1971d2 100644
|
||||
--- a/src/lib/libwasmfs_fetch.js
|
||||
+++ b/src/lib/libwasmfs_fetch.js
|
||||
@@ -38,36 +38,7 @@ addToLibrary({
|
||||
@ -89,7 +89,21 @@ index e8c9f7e21..1c0eea957 100644
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
@@ -164,6 +156,21 @@ addToLibrary({
|
||||
@@ -156,14 +148,31 @@ addToLibrary({
|
||||
return readLength;
|
||||
},
|
||||
getSize: async (file) => {
|
||||
- try {
|
||||
- await getFileRange(file, 0, 0);
|
||||
- } catch (failedResponse) {
|
||||
- return 0;
|
||||
+ if (!(file in wasmFS$JSMemoryRanges)) {
|
||||
+ try {
|
||||
+ await getFileRange(file, undefined, undefined);
|
||||
+ } catch (failedResponse) {
|
||||
+ return 0;
|
||||
+ }
|
||||
}
|
||||
return wasmFS$JSMemoryRanges[file].size;
|
||||
},
|
||||
};
|
||||
|
||||
@ -764,6 +764,7 @@ MxResult IsleApp::SetupWindow()
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
DetectGameVersion();
|
||||
GameState()->SerializePlayersInfo(LegoStorage::c_read);
|
||||
GameState()->SerializeScoreHistory(LegoStorage::c_read);
|
||||
|
||||
@ -972,7 +973,7 @@ inline bool IsleApp::Tick()
|
||||
static MxLong g_lastFrameTime = 0;
|
||||
|
||||
// GLOBAL: ISLE 0x4101bc
|
||||
static MxS32 g_startupDelay = 200;
|
||||
static MxS32 g_startupDelay = 1;
|
||||
|
||||
if (IsleDebug_Paused() && IsleDebug_StepModeEnabled()) {
|
||||
IsleDebug_SetPaused(false);
|
||||
@ -1159,6 +1160,34 @@ MxResult IsleApp::VerifyFilesystem()
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
void IsleApp::DetectGameVersion()
|
||||
{
|
||||
const char* file = "/lego/scripts/infocntr/infomain.si";
|
||||
SDL_PathInfo info;
|
||||
bool success = false;
|
||||
|
||||
MxString path = MxString(m_hdPath) + file;
|
||||
path.MapPathToFilesystem();
|
||||
if (!(success = SDL_GetPathInfo(path.GetData(), &info))) {
|
||||
path = MxString(m_cdPath) + file;
|
||||
path.MapPathToFilesystem();
|
||||
success = SDL_GetPathInfo(path.GetData(), &info);
|
||||
}
|
||||
|
||||
assert(success);
|
||||
|
||||
// File sizes of INFOMAIN.SI in English 1.0 and Japanese 1.0
|
||||
Lego()->SetVersion10(info.size == 58130432 || info.size == 57737216);
|
||||
|
||||
if (Lego()->IsVersion10()) {
|
||||
SDL_Log("Detected game version 1.0");
|
||||
SDL_SetWindowTitle(reinterpret_cast<SDL_Window*>(m_windowHandle), "Lego Island");
|
||||
}
|
||||
else {
|
||||
SDL_Log("Detected game version 1.1");
|
||||
}
|
||||
}
|
||||
|
||||
IDirect3DRMMiniwinDevice* GetD3DRMMiniwinDevice()
|
||||
{
|
||||
LegoVideoManager* videoManager = LegoOmni::GetInstance()->GetVideoManager();
|
||||
|
||||
@ -56,6 +56,7 @@ class IsleApp {
|
||||
|
||||
MxResult ParseArguments(int argc, char** argv);
|
||||
MxResult VerifyFilesystem();
|
||||
void DetectGameVersion();
|
||||
|
||||
private:
|
||||
char* m_hdPath; // 0x00
|
||||
|
||||
@ -11,6 +11,12 @@ class MxEndActionNotificationParam;
|
||||
// SIZE 0x24
|
||||
class AmbulanceMissionState : public LegoState {
|
||||
public:
|
||||
enum {
|
||||
e_ready = 0,
|
||||
e_enteredAmbulance = 1,
|
||||
e_prepareAmbulance = 2,
|
||||
};
|
||||
|
||||
AmbulanceMissionState();
|
||||
|
||||
// FUNCTION: LEGO1 0x10037440
|
||||
@ -125,18 +131,18 @@ class AmbulanceMissionState : public LegoState {
|
||||
// SYNTHETIC: LEGO1 0x100376c0
|
||||
// AmbulanceMissionState::`scalar deleting destructor'
|
||||
|
||||
undefined4 m_unk0x08; // 0x08
|
||||
MxLong m_startTime; // 0x0c
|
||||
MxS16 m_peScore; // 0x10
|
||||
MxS16 m_maScore; // 0x12
|
||||
MxS16 m_paScore; // 0x14
|
||||
MxS16 m_niScore; // 0x16
|
||||
MxS16 m_laScore; // 0x18
|
||||
MxS16 m_peHighScore; // 0x1a
|
||||
MxS16 m_maHighScore; // 0x1c
|
||||
MxS16 m_paHighScore; // 0x1e
|
||||
MxS16 m_niHighScore; // 0x20
|
||||
MxS16 m_laHighScore; // 0x22
|
||||
MxU32 m_state; // 0x08
|
||||
MxLong m_startTime; // 0x0c
|
||||
MxS16 m_peScore; // 0x10
|
||||
MxS16 m_maScore; // 0x12
|
||||
MxS16 m_paScore; // 0x14
|
||||
MxS16 m_niScore; // 0x16
|
||||
MxS16 m_laScore; // 0x18
|
||||
MxS16 m_peHighScore; // 0x1a
|
||||
MxS16 m_maHighScore; // 0x1c
|
||||
MxS16 m_paHighScore; // 0x1e
|
||||
MxS16 m_niHighScore; // 0x20
|
||||
MxS16 m_laHighScore; // 0x22
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d71a8
|
||||
@ -177,15 +183,21 @@ class Ambulance : public IslePathActor {
|
||||
virtual MxLong HandleEndAction(MxEndActionNotificationParam& p_param); // vtable+0xf4
|
||||
|
||||
void CreateState();
|
||||
void FUN_10036e60();
|
||||
void Init();
|
||||
void ActivateSceneActions();
|
||||
void StopActions();
|
||||
void FUN_10037250();
|
||||
void Reset();
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10036130
|
||||
// Ambulance::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
enum {
|
||||
e_none = 0,
|
||||
e_waiting = 1,
|
||||
e_finished = 3,
|
||||
};
|
||||
|
||||
void PlayAnimation(IsleScript::Script p_objectId);
|
||||
void PlayFinalAnimation(IsleScript::Script p_objectId);
|
||||
void StopAction(IsleScript::Script p_objectId);
|
||||
@ -196,9 +208,9 @@ class Ambulance : public IslePathActor {
|
||||
AmbulanceMissionState* m_state; // 0x164
|
||||
MxS16 m_unk0x168; // 0x168
|
||||
MxS16 m_actorId; // 0x16a
|
||||
MxS16 m_unk0x16c; // 0x16c
|
||||
MxS16 m_unk0x16e; // 0x16e
|
||||
MxS16 m_unk0x170; // 0x170
|
||||
MxS16 m_atPoliceTask; // 0x16c
|
||||
MxS16 m_atBeachTask; // 0x16e
|
||||
MxS16 m_taskState; // 0x170
|
||||
MxS16 m_unk0x172; // 0x172
|
||||
IsleScript::Script m_lastAction; // 0x174
|
||||
IsleScript::Script m_lastAnimation; // 0x178
|
||||
|
||||
@ -200,6 +200,9 @@ class LegoOmni : public MxOmni {
|
||||
SDL_PushEvent(&event);
|
||||
}
|
||||
|
||||
void SetVersion10(MxBool p_version10) { m_version10 = p_version10; }
|
||||
MxBool IsVersion10() { return m_version10; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10058b30
|
||||
// LegoOmni::`scalar deleting destructor'
|
||||
|
||||
@ -221,6 +224,7 @@ class LegoOmni : public MxOmni {
|
||||
MxDSAction m_action; // 0xa0
|
||||
MxBackgroundAudioManager* m_bkgAudioManager; // 0x134
|
||||
MxTransitionManager* m_transitionManager; // 0x138
|
||||
MxBool m_version10;
|
||||
|
||||
public:
|
||||
MxBool m_unk0x13c; // 0x13c
|
||||
|
||||
@ -13,7 +13,7 @@ struct LegoPathEdgeContainer;
|
||||
struct LegoOrientedEdge;
|
||||
class LegoWEEdge;
|
||||
|
||||
extern MxLong g_unk0x100f3308;
|
||||
extern MxLong g_timeLastHitSoundPlayed;
|
||||
extern const char* g_strHIT_WALL_SOUND;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6e28
|
||||
|
||||
@ -54,7 +54,7 @@ class LEGO1_EXPORT LegoPlantManager : public MxCore {
|
||||
LegoEntity* CreatePlant(MxS32 p_index, LegoWorld* p_world, LegoOmni::World p_worldId);
|
||||
MxBool DecrementCounter(LegoEntity* p_entity);
|
||||
void ScheduleAnimation(LegoEntity* p_entity, MxLong p_length);
|
||||
MxResult FUN_10026410();
|
||||
MxResult DetermineBoundaries();
|
||||
void ClearCounters();
|
||||
void SetInitialCounters();
|
||||
|
||||
@ -77,11 +77,11 @@ class LEGO1_EXPORT LegoPlantManager : public MxCore {
|
||||
static MxS32 g_maxMove[4];
|
||||
static MxU32 g_maxSound;
|
||||
|
||||
LegoOmni::World m_worldId; // 0x08
|
||||
undefined m_unk0x0c; // 0x0c
|
||||
AnimEntry* m_entries[5]; // 0x10
|
||||
MxS8 m_numEntries; // 0x24
|
||||
LegoWorld* m_world; // 0x28
|
||||
LegoOmni::World m_worldId; // 0x08
|
||||
MxBool m_boundariesDetermined; // 0x0c
|
||||
AnimEntry* m_entries[5]; // 0x10
|
||||
MxS8 m_numEntries; // 0x24
|
||||
LegoWorld* m_world; // 0x28
|
||||
|
||||
friend class DebugViewer;
|
||||
};
|
||||
|
||||
@ -144,10 +144,10 @@ class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap {
|
||||
MxResult VTable0x9c() override; // vtable+0x9c
|
||||
|
||||
virtual void SetMaxLinearVelocity(float p_maxLinearVelocity);
|
||||
virtual void FUN_10012ff0(float p_param);
|
||||
virtual void KickCamera(float p_param);
|
||||
virtual MxU32 HandleSkeletonKicks(float p_param1);
|
||||
|
||||
static void FUN_10012de0();
|
||||
static void InitYouCantStopSound();
|
||||
static void InitSoundIndices();
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10014240
|
||||
@ -155,7 +155,7 @@ class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap {
|
||||
|
||||
private:
|
||||
undefined m_userState; // 0x54
|
||||
float m_unk0x58; // 0x58
|
||||
float m_kickStart; // 0x58
|
||||
Mx3DPointFloat m_unk0x5c; // 0x5c
|
||||
|
||||
// Names verified by BETA10 0x100cb4a9
|
||||
|
||||
@ -44,8 +44,11 @@ class LegoCarRaceActor : public virtual LegoRaceActor {
|
||||
Vector3& p_v3
|
||||
) override; // vtable+0x6c
|
||||
void Animate(float p_time) override; // vtable+0x70
|
||||
void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoOrientedEdge*& p_edge, float& p_unk0xe4)
|
||||
override; // vtable+0x98
|
||||
void SwitchBoundary(
|
||||
LegoPathBoundary*& p_boundary,
|
||||
LegoOrientedEdge*& p_edge,
|
||||
float& p_unk0xe4
|
||||
) override; // vtable+0x98
|
||||
MxResult VTable0x9c() override; // vtable+0x9c
|
||||
|
||||
// LegoCarRaceActor vtable
|
||||
@ -83,7 +86,7 @@ class LegoCarRaceActor : public virtual LegoRaceActor {
|
||||
|
||||
protected:
|
||||
MxFloat m_unk0x08; // 0x08
|
||||
MxU8 m_unk0x0c; // 0x0c
|
||||
MxU8 m_animState; // 0x0c
|
||||
|
||||
// Could be a multiplier for the maximum speed when going straight
|
||||
MxFloat m_unk0x10; // 0x10
|
||||
|
||||
@ -40,9 +40,9 @@ Ambulance::Ambulance()
|
||||
m_state = NULL;
|
||||
m_unk0x168 = 0;
|
||||
m_actorId = -1;
|
||||
m_unk0x16c = 0;
|
||||
m_unk0x16e = 0;
|
||||
m_unk0x170 = 0;
|
||||
m_atPoliceTask = 0;
|
||||
m_atBeachTask = 0;
|
||||
m_taskState = Ambulance::e_none;
|
||||
m_lastAction = IsleScript::c_noneIsle;
|
||||
m_unk0x172 = 0;
|
||||
m_lastAnimation = IsleScript::c_noneIsle;
|
||||
@ -73,7 +73,7 @@ MxResult Ambulance::Create(MxDSAction& p_dsAction)
|
||||
m_state = (AmbulanceMissionState*) GameState()->GetState("AmbulanceMissionState");
|
||||
if (!m_state) {
|
||||
m_state = new AmbulanceMissionState();
|
||||
m_state->m_unk0x08 = 0;
|
||||
m_state->m_state = AmbulanceMissionState::e_ready;
|
||||
GameState()->RegisterState(m_state);
|
||||
}
|
||||
}
|
||||
@ -173,25 +173,25 @@ MxLong Ambulance::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
m_lastAction = IsleScript::c_noneIsle;
|
||||
}
|
||||
else if (objectId == IsleScript::c_hho027en_RunAnim) {
|
||||
m_state->m_unk0x08 = 1;
|
||||
m_state->m_state = AmbulanceMissionState::e_enteredAmbulance;
|
||||
CurrentWorld()->PlaceActor(UserActor());
|
||||
HandleClick();
|
||||
m_unk0x172 = 0;
|
||||
TickleManager()->RegisterClient(this, 40000);
|
||||
}
|
||||
else if (objectId == IsleScript::c_hpz047pe_RunAnim || objectId == IsleScript::c_hpz048pe_RunAnim || objectId == IsleScript::c_hpz049bd_RunAnim || objectId == IsleScript::c_hpz053pa_RunAnim) {
|
||||
if (m_unk0x170 == 3) {
|
||||
if (m_taskState == Ambulance::e_finished) {
|
||||
PlayAnimation(IsleScript::c_hpz055pa_RunAnim);
|
||||
m_unk0x170 = 0;
|
||||
m_taskState = Ambulance::e_none;
|
||||
}
|
||||
else {
|
||||
PlayAnimation(IsleScript::c_hpz053pa_RunAnim);
|
||||
}
|
||||
}
|
||||
else if (objectId == IsleScript::c_hpz050bd_RunAnim || objectId == IsleScript::c_hpz052ma_RunAnim) {
|
||||
if (m_unk0x170 == 3) {
|
||||
if (m_taskState == Ambulance::e_finished) {
|
||||
PlayAnimation(IsleScript::c_hpz057ma_RunAnim);
|
||||
m_unk0x170 = 0;
|
||||
m_taskState = Ambulance::e_none;
|
||||
}
|
||||
else {
|
||||
PlayAnimation(IsleScript::c_hpz052ma_RunAnim);
|
||||
@ -204,18 +204,18 @@ MxLong Ambulance::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
m_unk0x172 = 0;
|
||||
TickleManager()->RegisterClient(this, 40000);
|
||||
|
||||
if (m_unk0x16c != 0) {
|
||||
if (m_atPoliceTask != 0) {
|
||||
StopActions();
|
||||
}
|
||||
}
|
||||
else if (objectId == IsleScript::c_hps116bd_RunAnim || objectId == IsleScript::c_hps118re_RunAnim) {
|
||||
if (objectId == IsleScript::c_hps116bd_RunAnim && m_unk0x170 != 3) {
|
||||
if (objectId == IsleScript::c_hps116bd_RunAnim && m_taskState != Ambulance::e_finished) {
|
||||
PlayAction(IsleScript::c_Avo923In_PlayWav);
|
||||
}
|
||||
|
||||
if (m_unk0x170 == 3) {
|
||||
if (m_taskState == Ambulance::e_finished) {
|
||||
PlayAnimation(IsleScript::c_hps117bd_RunAnim);
|
||||
m_unk0x170 = 0;
|
||||
m_taskState = Ambulance::e_none;
|
||||
}
|
||||
else {
|
||||
PlayAnimation(IsleScript::c_hps118re_RunAnim);
|
||||
@ -228,12 +228,12 @@ MxLong Ambulance::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
m_unk0x172 = 0;
|
||||
TickleManager()->RegisterClient(this, 40000);
|
||||
|
||||
if (m_unk0x16e != 0) {
|
||||
if (m_atBeachTask != 0) {
|
||||
StopActions();
|
||||
}
|
||||
}
|
||||
else if (objectId == IsleScript::c_hho142cl_RunAnim || objectId == IsleScript::c_hho143cl_RunAnim || objectId == IsleScript::c_hho144cl_RunAnim) {
|
||||
FUN_10037250();
|
||||
Reset();
|
||||
}
|
||||
}
|
||||
|
||||
@ -244,18 +244,18 @@ MxLong Ambulance::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
// FUNCTION: BETA10 0x100230bf
|
||||
MxLong Ambulance::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
|
||||
{
|
||||
if (m_unk0x170 == 1) {
|
||||
if (m_taskState == Ambulance::e_waiting) {
|
||||
LegoROI* roi = PickROI(p_param.GetX(), p_param.GetY());
|
||||
|
||||
if (roi != NULL && !SDL_strcasecmp(roi->GetName(), "ps-gate")) {
|
||||
m_unk0x170 = 3;
|
||||
m_taskState = Ambulance::e_finished;
|
||||
return 1;
|
||||
}
|
||||
|
||||
roi = PickRootROI(p_param.GetX(), p_param.GetY());
|
||||
|
||||
if (roi != NULL && !SDL_strcasecmp(roi->GetName(), "gd")) {
|
||||
m_unk0x170 = 3;
|
||||
m_taskState = Ambulance::e_finished;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@ -273,9 +273,9 @@ MxLong Ambulance::HandlePathStruct(LegoPathStructNotificationParam& p_param)
|
||||
}
|
||||
|
||||
if (p_param.GetTrigger() == LegoPathStruct::c_camAnim && p_param.GetData() == 0x0b) {
|
||||
if (m_unk0x16e != 0) {
|
||||
if (m_unk0x16c != 0) {
|
||||
m_state->m_unk0x08 = 2;
|
||||
if (m_atBeachTask != 0) {
|
||||
if (m_atPoliceTask != 0) {
|
||||
m_state->m_state = AmbulanceMissionState::e_prepareAmbulance;
|
||||
|
||||
if (m_lastAction != IsleScript::c_noneIsle) {
|
||||
InvokeAction(Extra::e_stop, *g_isleScript, m_lastAction, NULL);
|
||||
@ -300,7 +300,7 @@ MxLong Ambulance::HandlePathStruct(LegoPathStructNotificationParam& p_param)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (m_unk0x16e != 0) {
|
||||
if (m_atBeachTask != 0) {
|
||||
if (m_lastAction != IsleScript::c_noneIsle) {
|
||||
InvokeAction(Extra::e_stop, *g_isleScript, m_lastAction, NULL);
|
||||
}
|
||||
@ -310,7 +310,7 @@ MxLong Ambulance::HandlePathStruct(LegoPathStructNotificationParam& p_param)
|
||||
}
|
||||
}
|
||||
|
||||
if (m_unk0x16c != 0) {
|
||||
if (m_atPoliceTask != 0) {
|
||||
if (m_lastAction != IsleScript::c_noneIsle) {
|
||||
InvokeAction(Extra::e_stop, *g_isleScript, m_lastAction, NULL);
|
||||
}
|
||||
@ -318,9 +318,9 @@ MxLong Ambulance::HandlePathStruct(LegoPathStructNotificationParam& p_param)
|
||||
PlayAction(IsleScript::c_Avo915In_PlayWav);
|
||||
}
|
||||
}
|
||||
else if (p_param.GetTrigger() == LegoPathStruct::c_s && p_param.GetData() == 0x131 && m_unk0x16e == 0) {
|
||||
m_unk0x16e = 1;
|
||||
m_unk0x170 = 1;
|
||||
else if (p_param.GetTrigger() == LegoPathStruct::c_s && p_param.GetData() == 0x131 && m_atBeachTask == 0) {
|
||||
m_atBeachTask = 1;
|
||||
m_taskState = Ambulance::e_waiting;
|
||||
|
||||
if (m_lastAction != IsleScript::c_noneIsle) {
|
||||
InvokeAction(Extra::e_stop, *g_isleScript, m_lastAction, NULL);
|
||||
@ -348,9 +348,9 @@ MxLong Ambulance::HandlePathStruct(LegoPathStructNotificationParam& p_param)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (p_param.GetTrigger() == LegoPathStruct::c_camAnim && (p_param.GetData() == 0x22 || p_param.GetData() == 0x23 || p_param.GetData() == 0x24) && m_unk0x16c == 0) {
|
||||
m_unk0x16c = 1;
|
||||
m_unk0x170 = 1;
|
||||
else if (p_param.GetTrigger() == LegoPathStruct::c_camAnim && (p_param.GetData() == 0x22 || p_param.GetData() == 0x23 || p_param.GetData() == 0x24) && m_atPoliceTask == 0) {
|
||||
m_atPoliceTask = 1;
|
||||
m_taskState = Ambulance::e_waiting;
|
||||
|
||||
if (m_lastAction != IsleScript::c_noneIsle) {
|
||||
InvokeAction(Extra::e_stop, *g_isleScript, m_lastAction, NULL);
|
||||
@ -371,7 +371,7 @@ MxLong Ambulance::HandleClick()
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (m_state->m_unk0x08 == 2) {
|
||||
if (m_state->m_state == AmbulanceMissionState::e_prepareAmbulance) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -390,7 +390,7 @@ MxLong Ambulance::HandleClick()
|
||||
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_AmbulanceDashboard, NULL);
|
||||
ControlManager()->Register(this);
|
||||
|
||||
if (m_state->m_unk0x08 == 1) {
|
||||
if (m_state->m_state == AmbulanceMissionState::e_enteredAmbulance) {
|
||||
SpawnPlayer(LegoGameState::e_hospitalExited, TRUE, 0);
|
||||
m_state->m_startTime = Timer()->GetTime();
|
||||
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_pns018rd_RunAnim, NULL);
|
||||
@ -401,9 +401,9 @@ MxLong Ambulance::HandleClick()
|
||||
|
||||
// FUNCTION: LEGO1 0x10036e60
|
||||
// FUNCTION: BETA10 0x100236bb
|
||||
void Ambulance::FUN_10036e60()
|
||||
void Ambulance::Init()
|
||||
{
|
||||
m_state->m_unk0x08 = 2;
|
||||
m_state->m_state = AmbulanceMissionState::e_prepareAmbulance;
|
||||
PlayAnimation(IsleScript::c_hho027en_RunAnim);
|
||||
m_lastAction = IsleScript::c_noneIsle;
|
||||
m_lastAnimation = IsleScript::c_noneIsle;
|
||||
@ -414,7 +414,7 @@ void Ambulance::Exit()
|
||||
{
|
||||
GameState()->m_currentArea = LegoGameState::e_hospitalExterior;
|
||||
StopActions();
|
||||
FUN_10037250();
|
||||
Reset();
|
||||
Leave();
|
||||
}
|
||||
|
||||
@ -470,11 +470,11 @@ void Ambulance::ActivateSceneActions()
|
||||
{
|
||||
PlayMusic(JukeboxScript::c_Hospital_Music);
|
||||
|
||||
if (m_state->m_unk0x08 == 1) {
|
||||
m_state->m_unk0x08 = 0;
|
||||
if (m_state->m_state == AmbulanceMissionState::e_enteredAmbulance) {
|
||||
m_state->m_state = AmbulanceMissionState::e_ready;
|
||||
PlayAction(IsleScript::c_ham033cl_PlayWav);
|
||||
}
|
||||
else if (m_unk0x16c != 0 && m_unk0x16e != 0) {
|
||||
else if (m_atPoliceTask != 0 && m_atBeachTask != 0) {
|
||||
IsleScript::Script objectId;
|
||||
|
||||
switch (SDL_rand(2)) {
|
||||
@ -574,14 +574,14 @@ void Ambulance::StopActions()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10037250
|
||||
void Ambulance::FUN_10037250()
|
||||
void Ambulance::Reset()
|
||||
{
|
||||
StopAction(m_lastAction);
|
||||
BackgroundAudioManager()->RaiseVolume();
|
||||
((Act1State*) GameState()->GetState("Act1State"))->m_unk0x018 = 0;
|
||||
m_state->m_unk0x08 = 0;
|
||||
m_unk0x16e = 0;
|
||||
m_unk0x16c = 0;
|
||||
m_state->m_state = AmbulanceMissionState::e_ready;
|
||||
m_atBeachTask = 0;
|
||||
m_atPoliceTask = 0;
|
||||
g_isleFlags |= Isle::c_playMusic;
|
||||
AnimationManager()->EnableCamAnims(TRUE);
|
||||
AnimationManager()->FUN_1005f6d0(TRUE);
|
||||
@ -629,7 +629,7 @@ void Ambulance::PlayAction(IsleScript::Script p_objectId)
|
||||
// FUNCTION: LEGO1 0x100373a0
|
||||
AmbulanceMissionState::AmbulanceMissionState()
|
||||
{
|
||||
m_unk0x08 = 0;
|
||||
m_state = AmbulanceMissionState::e_ready;
|
||||
m_startTime = 0;
|
||||
m_peScore = 0;
|
||||
m_maScore = 0;
|
||||
|
||||
@ -488,7 +488,7 @@ void LegoCarBuild::FUN_100236d0()
|
||||
m_unk0x110 = NULL;
|
||||
m_unk0x100 = 0;
|
||||
|
||||
if (m_animPresenter->AllPartsPlaced()) {
|
||||
if (m_animPresenter->AllPartsPlaced() && !Lego()->IsVersion10()) {
|
||||
// Note the code duplication with LEGO1 0x10025ee0
|
||||
switch (m_carId) {
|
||||
case 1:
|
||||
|
||||
@ -636,7 +636,7 @@ MxBool LegoCharacterManager::SetHeadTexture(LegoROI* p_roi, LegoTextureInfo* p_t
|
||||
LegoLOD* clone = lod->Clone(renderer);
|
||||
|
||||
if (p_texture != NULL) {
|
||||
clone->FUN_100aad70(p_texture);
|
||||
clone->UpdateTextureInfo(p_texture);
|
||||
}
|
||||
|
||||
dupLodList->PushBack(clone);
|
||||
|
||||
@ -83,7 +83,7 @@ void LegoPlantManager::Init()
|
||||
}
|
||||
|
||||
m_worldId = LegoOmni::e_undefined;
|
||||
m_unk0x0c = 0;
|
||||
m_boundariesDetermined = FALSE;
|
||||
m_numEntries = 0;
|
||||
}
|
||||
|
||||
@ -98,7 +98,7 @@ void LegoPlantManager::LoadWorldInfo(LegoOmni::World p_worldId)
|
||||
CreatePlant(i, world, p_worldId);
|
||||
}
|
||||
|
||||
m_unk0x0c = 0;
|
||||
m_boundariesDetermined = FALSE;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100263a0
|
||||
@ -119,12 +119,12 @@ void LegoPlantManager::Reset(LegoOmni::World p_worldId)
|
||||
}
|
||||
|
||||
m_worldId = LegoOmni::e_undefined;
|
||||
m_unk0x0c = 0;
|
||||
m_boundariesDetermined = FALSE;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10026410
|
||||
// FUNCTION: BETA10 0x100c50e9
|
||||
MxResult LegoPlantManager::FUN_10026410()
|
||||
MxResult LegoPlantManager::DetermineBoundaries()
|
||||
{
|
||||
// similar to LegoBuildingManager::FUN_10030630()
|
||||
|
||||
@ -192,7 +192,7 @@ MxResult LegoPlantManager::FUN_10026410()
|
||||
}
|
||||
}
|
||||
|
||||
m_unk0x0c = TRUE;
|
||||
m_boundariesDetermined = TRUE;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@ -200,8 +200,8 @@ MxResult LegoPlantManager::FUN_10026410()
|
||||
// FUNCTION: BETA10 0x100c55e0
|
||||
LegoPlantInfo* LegoPlantManager::GetInfoArray(MxS32& p_length)
|
||||
{
|
||||
if (!m_unk0x0c) {
|
||||
FUN_10026410();
|
||||
if (!m_boundariesDetermined) {
|
||||
DetermineBoundaries();
|
||||
}
|
||||
|
||||
p_length = sizeOfArray(g_plantInfo);
|
||||
|
||||
@ -76,6 +76,7 @@ void LegoOmni::Init()
|
||||
m_bkgAudioManager = NULL;
|
||||
m_unk0x13c = TRUE;
|
||||
m_transitionManager = NULL;
|
||||
m_version10 = FALSE;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10058c30
|
||||
|
||||
@ -37,7 +37,7 @@ const char* g_strHIT_WALL_SOUND = "HIT_WALL_SOUND";
|
||||
|
||||
// GLOBAL: LEGO1 0x100f3308
|
||||
// GLOBAL: BETA10 0x101f1e1c
|
||||
MxLong g_unk0x100f3308 = 0;
|
||||
MxLong g_timeLastHitSoundPlayed = 0;
|
||||
|
||||
// FUNCTION: LEGO1 0x1002d700
|
||||
// FUNCTION: BETA10 0x100ae6e0
|
||||
@ -292,8 +292,8 @@ MxS32 LegoPathActor::VTable0x8c(float p_time, Matrix4& p_transform)
|
||||
if (m_boundary == oldBoundary) {
|
||||
MxLong time = Timer()->GetTime();
|
||||
|
||||
if (time - g_unk0x100f3308 > 1000) {
|
||||
g_unk0x100f3308 = time;
|
||||
if (time - g_timeLastHitSoundPlayed > 1000) {
|
||||
g_timeLastHitSoundPlayed = time;
|
||||
const char* var = VariableTable()->GetVariable(g_strHIT_WALL_SOUND);
|
||||
|
||||
if (var && var[0] != 0) {
|
||||
|
||||
@ -246,7 +246,7 @@ MxLong CarRace::HandlePathStruct(LegoPathStructNotificationParam& p_param)
|
||||
VariableTable()->SetVariable(g_strHIT_WALL_SOUND, "");
|
||||
NavController()->SetDeadZone(NavController()->GetDefaultDeadZone());
|
||||
NavController()->SetTrackDefault(1);
|
||||
LegoRaceCar::FUN_10012de0();
|
||||
LegoRaceCar::InitYouCantStopSound();
|
||||
m_raceState->m_unk0x28 = 2;
|
||||
|
||||
RaceState::Entry* raceState = m_raceState->GetState(GameState()->GetActorId());
|
||||
@ -348,7 +348,7 @@ MxLong CarRace::HandleClick(LegoEventNotificationParam& p_param)
|
||||
VariableTable()->SetVariable(g_strHIT_WALL_SOUND, "");
|
||||
NavController()->SetDeadZone(NavController()->GetDefaultDeadZone());
|
||||
NavController()->SetTrackDefault(1);
|
||||
LegoRaceCar::FUN_10012de0();
|
||||
LegoRaceCar::InitYouCantStopSound();
|
||||
m_destLocation = LegoGameState::e_infomain;
|
||||
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
|
||||
GameState()->GetBackgroundColor()->SetValue("reset");
|
||||
@ -360,7 +360,7 @@ MxLong CarRace::HandleClick(LegoEventNotificationParam& p_param)
|
||||
VariableTable()->SetVariable(g_strHIT_WALL_SOUND, "");
|
||||
NavController()->SetDeadZone(NavController()->GetDefaultDeadZone());
|
||||
NavController()->SetTrackDefault(1);
|
||||
LegoRaceCar::FUN_10012de0();
|
||||
LegoRaceCar::InitYouCantStopSound();
|
||||
m_destLocation = LegoGameState::e_carraceExterior;
|
||||
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
|
||||
GameState()->GetBackgroundColor()->SetValue("reset");
|
||||
@ -424,7 +424,7 @@ MxBool CarRace::Escape()
|
||||
NavController()->SetDeadZone(NavController()->GetDefaultDeadZone());
|
||||
|
||||
NavController()->SetTrackDefault(1);
|
||||
LegoRaceCar::FUN_10012de0();
|
||||
LegoRaceCar::InitYouCantStopSound();
|
||||
|
||||
GameState()->GetBackgroundColor()->SetValue("reset");
|
||||
m_destLocation = LegoGameState::e_infomain;
|
||||
|
||||
@ -132,7 +132,7 @@ MxLong JetskiRace::HandleClick(LegoEventNotificationParam& p_param)
|
||||
m_act1State->m_unk0x018 = 0;
|
||||
VariableTable()->SetVariable(g_raceState, "");
|
||||
VariableTable()->SetVariable(g_strHIT_WALL_SOUND, "");
|
||||
LegoRaceCar::FUN_10012de0();
|
||||
LegoRaceCar::InitYouCantStopSound();
|
||||
m_destLocation = LegoGameState::e_jetraceExterior;
|
||||
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
|
||||
break;
|
||||
@ -140,7 +140,7 @@ MxLong JetskiRace::HandleClick(LegoEventNotificationParam& p_param)
|
||||
m_act1State->m_unk0x018 = 0;
|
||||
VariableTable()->SetVariable(g_raceState, "");
|
||||
VariableTable()->SetVariable(g_strHIT_WALL_SOUND, "");
|
||||
LegoRaceCar::FUN_10012de0();
|
||||
LegoRaceCar::InitYouCantStopSound();
|
||||
m_destLocation = LegoGameState::e_infomain;
|
||||
result = 1;
|
||||
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
|
||||
@ -193,7 +193,7 @@ MxLong JetskiRace::HandlePathStruct(LegoPathStructNotificationParam& p_param)
|
||||
|
||||
VariableTable()->SetVariable(g_raceState, "");
|
||||
VariableTable()->SetVariable(g_strHIT_WALL_SOUND, "");
|
||||
LegoRaceCar::FUN_10012de0();
|
||||
LegoRaceCar::InitYouCantStopSound();
|
||||
m_raceState->m_unk0x28 = 2;
|
||||
|
||||
RaceState::Entry* raceStateEntry = m_raceState->GetState(GameState()->GetActorId());
|
||||
@ -294,6 +294,6 @@ MxBool JetskiRace::Escape()
|
||||
VariableTable()->SetVariable(g_raceState, "");
|
||||
VariableTable()->SetVariable(g_strHIT_WALL_SOUND, "");
|
||||
m_destLocation = LegoGameState::e_infomain;
|
||||
LegoRaceCar::FUN_10012de0();
|
||||
LegoRaceCar::InitYouCantStopSound();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -31,8 +31,8 @@ MxS32 LegoRaceActor::VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3)
|
||||
|
||||
if (m_userNavFlag && result) {
|
||||
MxLong time = Timer()->GetTime();
|
||||
if (time - g_unk0x100f3308 > 1000) {
|
||||
g_unk0x100f3308 = time;
|
||||
if (time - g_timeLastHitSoundPlayed > 1000) {
|
||||
g_timeLastHitSoundPlayed = time;
|
||||
const char* soundKey = VariableTable()->GetVariable(g_strHIT_ACTOR_SOUND);
|
||||
|
||||
if (soundKey && *soundKey) {
|
||||
|
||||
@ -178,7 +178,7 @@ LegoRaceCar::LegoRaceCar()
|
||||
m_skelKick1Anim = 0;
|
||||
m_skelKick2Anim = 0;
|
||||
m_unk0x5c.Clear();
|
||||
m_unk0x58 = 0;
|
||||
m_kickStart = 0;
|
||||
m_kick1B = 0;
|
||||
m_kick2B = 0;
|
||||
NotificationManager()->Register(this);
|
||||
@ -201,10 +201,10 @@ MxLong LegoRaceCar::Notify(MxParam& p_param)
|
||||
// Initialized at LEGO1 0x10012db0
|
||||
// GLOBAL: LEGO1 0x10102af0
|
||||
// GLOBAL: BETA10 0x102114c0
|
||||
Mx3DPointFloat g_unk0x10102af0 = Mx3DPointFloat(0.0f, 2.0f, 0.0f);
|
||||
Mx3DPointFloat g_hitOffset = Mx3DPointFloat(0.0f, 2.0f, 0.0f);
|
||||
|
||||
// FUNCTION: LEGO1 0x10012de0
|
||||
void LegoRaceCar::FUN_10012de0()
|
||||
void LegoRaceCar::InitYouCantStopSound()
|
||||
{
|
||||
// Init to TRUE so we don't play "you can't stop in the middle of the race!" before the player ever moves
|
||||
g_playedYouCantStopSound = TRUE;
|
||||
@ -229,7 +229,7 @@ void LegoRaceCar::InitSoundIndices()
|
||||
void LegoRaceCar::SetWorldSpeed(MxFloat p_worldSpeed)
|
||||
{
|
||||
if (!m_userNavFlag) {
|
||||
if (!LegoCarRaceActor::m_unk0x0c) {
|
||||
if (!LegoCarRaceActor::m_animState) {
|
||||
m_maxLinearVel = p_worldSpeed;
|
||||
}
|
||||
LegoAnimActor::SetWorldSpeed(p_worldSpeed);
|
||||
@ -244,7 +244,7 @@ void LegoRaceCar::SetWorldSpeed(MxFloat p_worldSpeed)
|
||||
void LegoRaceCar::SetMaxLinearVelocity(float p_maxLinearVelocity)
|
||||
{
|
||||
if (p_maxLinearVelocity < 0) {
|
||||
LegoCarRaceActor::m_unk0x0c = 2;
|
||||
LegoCarRaceActor::m_animState = 2;
|
||||
m_maxLinearVel = 0;
|
||||
SetWorldSpeed(0);
|
||||
}
|
||||
@ -299,7 +299,7 @@ void LegoRaceCar::ParseAction(char* p_extra)
|
||||
|
||||
// FUNCTION: LEGO1 0x10012ff0
|
||||
// FUNCTION: BETA10 0x100cb60e
|
||||
void LegoRaceCar::FUN_10012ff0(float p_param)
|
||||
void LegoRaceCar::KickCamera(float p_param)
|
||||
{
|
||||
LegoAnimActorStruct* a; // called `a` in BETA10
|
||||
float deltaTime;
|
||||
@ -315,7 +315,7 @@ void LegoRaceCar::FUN_10012ff0(float p_param)
|
||||
assert(a && a->GetAnimTreePtr() && a->GetAnimTreePtr()->GetCamAnim());
|
||||
|
||||
if (a->GetAnimTreePtr()) {
|
||||
deltaTime = p_param - m_unk0x58;
|
||||
deltaTime = p_param - m_kickStart;
|
||||
|
||||
if (a->GetDuration() <= deltaTime || deltaTime < 0.0) {
|
||||
if (m_userState == LEGORACECAR_KICK1) {
|
||||
@ -390,7 +390,7 @@ MxU32 LegoRaceCar::HandleSkeletonKicks(float p_param1)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
m_unk0x58 = p_param1;
|
||||
m_kickStart = p_param1;
|
||||
SoundManager()->GetCacheSoundManager()->Play(g_soundSkel3, NULL, FALSE);
|
||||
|
||||
return TRUE;
|
||||
@ -401,7 +401,7 @@ MxU32 LegoRaceCar::HandleSkeletonKicks(float p_param1)
|
||||
void LegoRaceCar::Animate(float p_time)
|
||||
{
|
||||
if (m_userNavFlag && (m_userState == LEGORACECAR_KICK1 || m_userState == LEGORACECAR_KICK2)) {
|
||||
FUN_10012ff0(p_time);
|
||||
KickCamera(p_time);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -413,7 +413,7 @@ void LegoRaceCar::Animate(float p_time)
|
||||
}
|
||||
}
|
||||
|
||||
if (LegoCarRaceActor::m_unk0x0c == 1) {
|
||||
if (LegoCarRaceActor::m_animState == 1) {
|
||||
FUN_1005d4b0();
|
||||
|
||||
if (!m_userNavFlag) {
|
||||
@ -471,7 +471,7 @@ MxResult LegoRaceCar::HitActor(LegoPathActor* p_actor, MxBool p_bool)
|
||||
assert(roi);
|
||||
matr = roi->GetLocal2World();
|
||||
|
||||
Vector3(matr[3]) += g_unk0x10102af0;
|
||||
Vector3(matr[3]) += g_hitOffset;
|
||||
roi->SetLocal2World(matr);
|
||||
|
||||
p_actor->SetActorState(c_two);
|
||||
@ -516,7 +516,7 @@ MxResult LegoRaceCar::HitActor(LegoPathActor* p_actor, MxBool p_bool)
|
||||
|
||||
if (soundKey) {
|
||||
SoundManager()->GetCacheSoundManager()->Play(soundKey, NULL, FALSE);
|
||||
g_timeLastRaceCarSoundPlayed = g_unk0x100f3308 = time;
|
||||
g_timeLastRaceCarSoundPlayed = g_timeLastHitSoundPlayed = time;
|
||||
}
|
||||
}
|
||||
|
||||
@ -582,7 +582,7 @@ void LegoJetski::InitSoundIndices()
|
||||
void LegoJetski::SetWorldSpeed(MxFloat p_worldSpeed)
|
||||
{
|
||||
if (!m_userNavFlag) {
|
||||
if (!LegoCarRaceActor::m_unk0x0c) {
|
||||
if (!LegoCarRaceActor::m_animState) {
|
||||
m_maxLinearVel = p_worldSpeed;
|
||||
}
|
||||
LegoAnimActor::SetWorldSpeed(p_worldSpeed);
|
||||
@ -597,7 +597,7 @@ void LegoJetski::SetWorldSpeed(MxFloat p_worldSpeed)
|
||||
void LegoJetski::FUN_100136f0(float p_worldSpeed)
|
||||
{
|
||||
if (p_worldSpeed < 0) {
|
||||
LegoCarRaceActor::m_unk0x0c = 2;
|
||||
LegoCarRaceActor::m_animState = 2;
|
||||
m_maxLinearVel = 0;
|
||||
SetWorldSpeed(0);
|
||||
}
|
||||
@ -612,7 +612,7 @@ void LegoJetski::Animate(float p_time)
|
||||
{
|
||||
LegoJetskiRaceActor::Animate(p_time);
|
||||
|
||||
if (LegoCarRaceActor::m_unk0x0c == 1) {
|
||||
if (LegoCarRaceActor::m_animState == 1) {
|
||||
FUN_1005d4b0();
|
||||
|
||||
if (!m_userNavFlag) {
|
||||
@ -685,7 +685,7 @@ MxResult LegoJetski::HitActor(LegoPathActor* p_actor, MxBool p_bool)
|
||||
LegoROI* roi = p_actor->GetROI();
|
||||
matr = roi->GetLocal2World();
|
||||
|
||||
Vector3(matr[3]) += g_unk0x10102af0;
|
||||
Vector3(matr[3]) += g_hitOffset;
|
||||
roi->SetLocal2World(matr);
|
||||
|
||||
p_actor->SetActorState(c_two);
|
||||
@ -714,7 +714,7 @@ MxResult LegoJetski::HitActor(LegoPathActor* p_actor, MxBool p_bool)
|
||||
|
||||
if (soundKey) {
|
||||
SoundManager()->GetCacheSoundManager()->Play(soundKey, NULL, FALSE);
|
||||
g_timeLastJetskiSoundPlayed = g_unk0x100f3308 = time;
|
||||
g_timeLastJetskiSoundPlayed = g_timeLastHitSoundPlayed = time;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@ LegoCarRaceActor::LegoCarRaceActor()
|
||||
{
|
||||
m_unk0x08 = 1.0f;
|
||||
m_unk0x70 = 0.0f;
|
||||
m_unk0x0c = 0;
|
||||
m_animState = 0;
|
||||
m_maxLinearVel = 0.0f;
|
||||
m_frequencyFactor = 1.0f;
|
||||
m_unk0x1c = 0;
|
||||
@ -224,18 +224,18 @@ void LegoCarRaceActor::SwitchBoundary(LegoPathBoundary*& p_boundary, LegoOriente
|
||||
// FUNCTION: BETA10 0x100cdbae
|
||||
void LegoCarRaceActor::Animate(float p_time)
|
||||
{
|
||||
// m_unk0x0c is not an MxBool, there are places where it is set to 2 or higher
|
||||
if (m_unk0x0c == 0) {
|
||||
// m_animState is not an MxBool, there are places where it is set to 2 or higher
|
||||
if (m_animState == 0) {
|
||||
const char* value = VariableTable()->GetVariable(g_raceState);
|
||||
|
||||
if (SDL_strcasecmp(value, g_racing) == 0) {
|
||||
m_unk0x0c = 1;
|
||||
m_animState = 1;
|
||||
m_lastTime = p_time - 1.0f;
|
||||
m_unk0x1c = p_time;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_unk0x0c == 1) {
|
||||
if (m_animState == 1) {
|
||||
LegoAnimActor::Animate(p_time);
|
||||
}
|
||||
}
|
||||
@ -399,10 +399,10 @@ MxS32 LegoJetskiRaceActor::VTable0x1c(LegoPathBoundary* p_boundary, LegoEdge* p_
|
||||
// FUNCTION: LEGO1 0x10081550
|
||||
void LegoJetskiRaceActor::Animate(float p_time)
|
||||
{
|
||||
if (m_unk0x0c == 0) {
|
||||
if (m_animState == 0) {
|
||||
const LegoChar* raceState = VariableTable()->GetVariable(g_raceState);
|
||||
if (!SDL_strcasecmp(raceState, g_racing)) {
|
||||
m_unk0x0c = 1;
|
||||
m_animState = 1;
|
||||
m_lastTime = p_time - 1.0f;
|
||||
m_unk0x1c = p_time;
|
||||
}
|
||||
@ -411,7 +411,7 @@ void LegoJetskiRaceActor::Animate(float p_time)
|
||||
}
|
||||
}
|
||||
|
||||
if (m_unk0x0c == 1) {
|
||||
if (m_animState == 1) {
|
||||
LegoAnimActor::Animate(p_time);
|
||||
}
|
||||
}
|
||||
|
||||
@ -306,29 +306,32 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
|
||||
if (!m_unk0x1d4) {
|
||||
PlayMusic(JukeboxScript::c_InformationCenter_Music);
|
||||
GameState()->SetActor(m_selectedCharacter);
|
||||
|
||||
switch (m_selectedCharacter) {
|
||||
case e_pepper:
|
||||
PlayAction(InfomainScript::c_avo901in_RunAnim);
|
||||
break;
|
||||
case e_mama:
|
||||
PlayAction(InfomainScript::c_avo902in_RunAnim);
|
||||
break;
|
||||
case e_papa:
|
||||
PlayAction(InfomainScript::c_avo903in_RunAnim);
|
||||
break;
|
||||
case e_nick:
|
||||
PlayAction(InfomainScript::c_avo904in_RunAnim);
|
||||
break;
|
||||
case e_laura:
|
||||
PlayAction(InfomainScript::c_avo905in_RunAnim);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
if (!Lego()->IsVersion10()) {
|
||||
GameState()->SetActor(m_selectedCharacter);
|
||||
|
||||
switch (m_selectedCharacter) {
|
||||
case e_pepper:
|
||||
PlayAction(InfomainScript::c_avo901in_RunAnim);
|
||||
break;
|
||||
case e_mama:
|
||||
PlayAction(InfomainScript::c_avo902in_RunAnim);
|
||||
break;
|
||||
case e_papa:
|
||||
PlayAction(InfomainScript::c_avo903in_RunAnim);
|
||||
break;
|
||||
case e_nick:
|
||||
PlayAction(InfomainScript::c_avo904in_RunAnim);
|
||||
break;
|
||||
case e_laura:
|
||||
PlayAction(InfomainScript::c_avo905in_RunAnim);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
UpdateFrameHot(TRUE);
|
||||
}
|
||||
|
||||
UpdateFrameHot(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -338,7 +341,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||
return result;
|
||||
}
|
||||
|
||||
if (action->GetObjectId() == InfomainScript::c_iicx26in_RunAnim) {
|
||||
if (action->GetObjectId() == InfomainScript::c_iicx26in_RunAnim - Lego()->IsVersion10()) {
|
||||
ControlManager()->FUN_100293c0(InfomainScript::c_BigInfo_Ctl, action->GetAtomId().GetInternal(), 0);
|
||||
m_unk0x1d6 = 0;
|
||||
}
|
||||
@ -478,7 +481,7 @@ void Infocenter::ReadyWorld()
|
||||
InfomainScript::Script script = m_infocenterState->GetNextReturnDialogue();
|
||||
PlayAction(script);
|
||||
|
||||
if (script == InfomainScript::c_iicx26in_RunAnim) {
|
||||
if (script == InfomainScript::c_iicx26in_RunAnim - Lego()->IsVersion10()) {
|
||||
m_unk0x1d6 = 1;
|
||||
}
|
||||
|
||||
@ -1186,13 +1189,13 @@ MxLong Infocenter::HandleNotification0(MxNotificationParam& p_param)
|
||||
m_currentInfomainScript == InfomainScript::c_Pepper_All_Movie ||
|
||||
m_currentInfomainScript == InfomainScript::c_Nick_All_Movie ||
|
||||
m_currentInfomainScript == InfomainScript::c_Laura_All_Movie ||
|
||||
m_currentInfomainScript == InfomainScript::c_iic007ra_PlayWav ||
|
||||
m_currentInfomainScript == InfomainScript::c_ijs002ra_PlayWav ||
|
||||
m_currentInfomainScript == InfomainScript::c_irt001ra_PlayWav ||
|
||||
m_currentInfomainScript == InfomainScript::c_ipz006ra_PlayWav ||
|
||||
m_currentInfomainScript == InfomainScript::c_igs004ra_PlayWav ||
|
||||
m_currentInfomainScript == InfomainScript::c_iho003ra_PlayWav ||
|
||||
m_currentInfomainScript == InfomainScript::c_ips005ra_PlayWav) {
|
||||
m_currentInfomainScript == InfomainScript::c_iic007ra_PlayWav - Lego()->IsVersion10() ||
|
||||
m_currentInfomainScript == InfomainScript::c_ijs002ra_PlayWav - Lego()->IsVersion10() ||
|
||||
m_currentInfomainScript == InfomainScript::c_irt001ra_PlayWav - Lego()->IsVersion10() ||
|
||||
m_currentInfomainScript == InfomainScript::c_ipz006ra_PlayWav - Lego()->IsVersion10() ||
|
||||
m_currentInfomainScript == InfomainScript::c_igs004ra_PlayWav - Lego()->IsVersion10() ||
|
||||
m_currentInfomainScript == InfomainScript::c_iho003ra_PlayWav - Lego()->IsVersion10() ||
|
||||
m_currentInfomainScript == InfomainScript::c_ips005ra_PlayWav - Lego()->IsVersion10()) {
|
||||
StopCurrentAction();
|
||||
}
|
||||
}
|
||||
@ -1506,6 +1509,17 @@ void Infocenter::StopCredits()
|
||||
// FUNCTION: BETA10 0x1002ee8c
|
||||
void Infocenter::PlayAction(InfomainScript::Script p_script)
|
||||
{
|
||||
if (Lego()->IsVersion10()) {
|
||||
if (p_script == InfomainScript::c_iicx18in_RunAnim) {
|
||||
// Alternative dialogue after signing in (1.0 version)
|
||||
p_script = InfomainScript::c_iic016in_RunAnim;
|
||||
}
|
||||
else if (p_script > InfomainScript::c_iicx18in_RunAnim) {
|
||||
// Shift all other actions by 1
|
||||
p_script = (InfomainScript::Script)((int) p_script - 1);
|
||||
}
|
||||
}
|
||||
|
||||
MxDSAction action;
|
||||
action.SetObjectId(p_script);
|
||||
action.SetAtomId(*g_infomainScript);
|
||||
|
||||
@ -810,7 +810,7 @@ void Isle::Enable(MxBool p_enable)
|
||||
AnimationManager()->EnableCamAnims(FALSE);
|
||||
|
||||
g_isleFlags &= ~c_playMusic;
|
||||
m_ambulance->FUN_10036e60();
|
||||
m_ambulance->Init();
|
||||
break;
|
||||
case 11:
|
||||
m_act1state->m_unk0x018 = 0;
|
||||
@ -1209,7 +1209,7 @@ MxBool Isle::Escape()
|
||||
case 10:
|
||||
if (UserActor() != NULL && !UserActor()->IsA("Ambulance")) {
|
||||
m_ambulance->StopActions();
|
||||
m_ambulance->FUN_10037250();
|
||||
m_ambulance->Reset();
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1250,7 +1250,7 @@ void Isle::FUN_10033350()
|
||||
if (m_act1state->m_unk0x018 == 10) {
|
||||
if (UserActor() != NULL && !UserActor()->IsA("Ambulance")) {
|
||||
m_ambulance->StopActions();
|
||||
m_ambulance->FUN_10037250();
|
||||
m_ambulance->Reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -353,7 +353,7 @@ LegoResult LegoLOD::SetTextureInfo(LegoTextureInfo* p_textureInfo)
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100aad70
|
||||
LegoResult LegoLOD::FUN_100aad70(LegoTextureInfo* p_textureInfo)
|
||||
LegoResult LegoLOD::UpdateTextureInfo(LegoTextureInfo* p_textureInfo)
|
||||
{
|
||||
for (LegoU32 i = m_meshOffset; i < m_numMeshes; i++) {
|
||||
if (m_melems[i].m_textured) {
|
||||
|
||||
@ -31,7 +31,7 @@ class LegoLOD : public ViewLOD {
|
||||
LegoLOD* Clone(Tgl::Renderer* p_renderer);
|
||||
LegoResult SetColor(LegoFloat p_red, LegoFloat p_green, LegoFloat p_blue, LegoFloat p_alpha);
|
||||
LegoResult SetTextureInfo(LegoTextureInfo* p_textureInfo);
|
||||
LegoResult FUN_100aad70(LegoTextureInfo* p_textureInfo);
|
||||
LegoResult UpdateTextureInfo(LegoTextureInfo* p_textureInfo);
|
||||
void ClearMeshOffset();
|
||||
LegoResult GetTextureInfo(LegoTextureInfo*& p_textureInfo);
|
||||
|
||||
|
||||
@ -20,10 +20,10 @@ class MxString : public MxCore {
|
||||
void ToLowerCase();
|
||||
void MapPathToFilesystem() { MapPathToFilesystem(m_data); }
|
||||
|
||||
MxString& operator=(const MxString& p_str);
|
||||
const MxString& operator=(const char* p_str);
|
||||
MxString operator+(const MxString& p_str) const;
|
||||
MxString operator+(const char* p_str) const;
|
||||
LEGO1_EXPORT MxString& operator=(const MxString& p_str);
|
||||
LEGO1_EXPORT const MxString& operator=(const char* p_str);
|
||||
LEGO1_EXPORT MxString operator+(const MxString& p_str) const;
|
||||
LEGO1_EXPORT MxString operator+(const char* p_str) const;
|
||||
LEGO1_EXPORT MxString& operator+=(const char* p_str);
|
||||
|
||||
static void CharSwap(char* p_a, char* p_b);
|
||||
|
||||
@ -59,7 +59,7 @@ HRESULT Direct3DRMMeshImpl::AddGroup(
|
||||
MeshGroup group;
|
||||
group.vertexPerFace = vertexPerFace;
|
||||
|
||||
DWORD* src = faceBuffer;
|
||||
unsigned int* src = faceBuffer;
|
||||
group.indices.assign(src, src + faceCount * vertexPerFace);
|
||||
|
||||
m_groups.push_back(std::move(group));
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
#include <assert.h>
|
||||
#include <cinttypes>
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
@ -78,7 +79,7 @@ HRESULT DirectDrawImpl::CreateSurface(
|
||||
if ((lpDDSurfaceDesc->dwFlags & DDSD_ZBUFFERBITDEPTH) != DDSD_ZBUFFERBITDEPTH) {
|
||||
return DDERR_INVALIDPARAMS;
|
||||
}
|
||||
SDL_Log("Todo: Set %dbit Z-Buffer", lpDDSurfaceDesc->dwZBufferBitDepth);
|
||||
SDL_Log("Todo: Set %" PRIu32 "bit Z-Buffer", lpDDSurfaceDesc->dwZBufferBitDepth);
|
||||
*lplpDDSurface = static_cast<IDirectDrawSurface*>(new DummySurfaceImpl);
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user